250 lines
6.9 KiB
Vue
250 lines
6.9 KiB
Vue
<!-- component标签可以变换组件 -->
|
||
<template>
|
||
<view>
|
||
<view v-if="errorMsg" style="color: red;padding-left: 13px;">{{errorMsg}}</view>
|
||
<iframe id="jingeIframe" style="width: 100%;height: 600px;border: none;" ref="iframe" title="金格云阅读"
|
||
src="./static/CloudSign/viewer.html" :transmissionData="transmissionData"
|
||
:change:transmissionData="renderjs.postMessageToIframe" @load="setConfig"></iframe>
|
||
<wd-toast></wd-toast>
|
||
</view>
|
||
</template>
|
||
<script>
|
||
import {
|
||
getCompleteNum
|
||
} from '@/api/bpm/sign'
|
||
import { ref, reactive, onMounted, computed, watch, nextTick } from 'vue';
|
||
import {
|
||
onLoad,
|
||
onShow,
|
||
onReachBottom,
|
||
onPullDownRefresh
|
||
} from '@dcloudio/uni-app';
|
||
import {
|
||
useUserStore
|
||
} from '@/store/user'
|
||
import { checkSign } from '@/api/bpm/sign'
|
||
import { useToast, useMessage } from 'wot-design-uni'
|
||
|
||
export default {
|
||
name: 'SinopecEsignPageAPP',
|
||
options: {
|
||
styleIsolation: 'shared',
|
||
},
|
||
props: {
|
||
fileName: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
valiData: {
|
||
type: Object
|
||
},
|
||
procInsId: { //签章验证
|
||
type: String,
|
||
default: ""
|
||
},
|
||
path: {//签章验证
|
||
type: String,
|
||
default: ""
|
||
}
|
||
},
|
||
emits: ['message'],
|
||
setup(props, { emit }) {
|
||
const toast = useToast()
|
||
const store = useUserStore();
|
||
const iframe = ref(null);
|
||
const compName = ref('');
|
||
const asyncComponent = ref(null);
|
||
const sealArrayTemp = ref([]);
|
||
const signNum = ref(0);
|
||
const sign = ref(false);
|
||
const ldhth = ref('');
|
||
const username = ref('');
|
||
const iframeWin = ref(null);
|
||
const baseUrl = import.meta.env.VITE_SERVER_BASEURL
|
||
const filterArrNum = ref(0);
|
||
const transmissionData = ref({});
|
||
const errorMsg = ref('');
|
||
|
||
const setConfig = () => {
|
||
transmissionData.value = {
|
||
filename: props.fileName,
|
||
apiUrl: baseUrl,
|
||
userid: username.value,
|
||
}
|
||
console.log(transmissionData.value)
|
||
}
|
||
|
||
const signValidator = async () => { //签章验证 by 闵
|
||
errorMsg.value = '';
|
||
let flag = false;
|
||
if (props.path == 'unconventional/stamp') {
|
||
if (props.valiData.flag) { //先判断数量验证
|
||
if (props.valiData && props.valiData.flag) {//有flag需要正常验证
|
||
let nowTime = new Date(props.valiData.time).getTime();
|
||
let filterArr = []
|
||
filterArr = sealArrayTemp.value.filter(item => {
|
||
let sealTime = new Date(item.createTime).getTime();
|
||
if (sealTime >= nowTime && item.userName == props.valiData.name) {
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
})
|
||
filterArrNum.value = filterArr.length;
|
||
if (props.valiData.num <= filterArrNum.value) {
|
||
return true;
|
||
} else {
|
||
errorMsg.value = "您需要签章(签字或盖章)" + props.valiData.num + "次,目前只签章了" + filterArrNum.value + "次。";
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
//2024.3.22张祥瑞
|
||
//如果签章路径是非常规盖章则走这里,验证机制为跳过签章个数验证,只要没签章则不能提交流程
|
||
// let flag = false;
|
||
if (sign.value) {
|
||
return flag = true; //只要执行了签章成功操作就返回成功,否则加载个数验证
|
||
} else {
|
||
return flag = false;
|
||
}
|
||
} else if (props.path == 'modules/gwjdspd/modules/CxcGwjdSpdFromByProcess') { //判断公务接待模块
|
||
//2024.5.16张祥瑞
|
||
//如果签章路径是非常规盖章则走这里,验证机制为跳过签章个数验证,只要没签章则不能提交流程
|
||
// let flag = false;
|
||
if (sign.value) {
|
||
return flag = true; //只要执行了签章成功操作就返回成功,否则加载个数验证
|
||
} else {
|
||
return flag = false;
|
||
}
|
||
} else {
|
||
if (sign.value) {
|
||
return true; //只要执行了签章成功操作就返回成功,否则加载个数验证
|
||
} else {
|
||
// let flag = false;
|
||
await getCompleteNum(props.procInsId).then(res => {
|
||
console.log("res--------132------", res);
|
||
// console.log("flag--132------",flag);
|
||
if (res) {
|
||
if (signNum.value >= (Number(res.result.nrOfCompletedInstances) + 1)) {
|
||
flag = true;
|
||
}
|
||
}
|
||
})
|
||
}
|
||
}
|
||
console.log("flag--142------", flag);
|
||
return flag;
|
||
}
|
||
|
||
const stampingCompleted = (data) => {
|
||
console.log(JSON.stringify(data))
|
||
let sealArray = data.data.sealArray;
|
||
sealArrayTemp.value = sealArray;
|
||
console.log(sealArrayTemp.value);
|
||
|
||
let sealNumMap = {}
|
||
sealArray.forEach(item => {
|
||
if (sealNumMap[item.keySN]) {
|
||
sealNumMap[item.keySN] += 1;
|
||
if (sealNumMap[item.keySN] > 2) {
|
||
let remainder = Math.ceil(sealNumMap[item.keySN] / 2) - 1
|
||
sealNumMap[item.keySN + remainder] = sealNumMap[item.keySN] - remainder * 2;
|
||
}
|
||
} else {
|
||
sealNumMap[item.keySN] = 1;
|
||
}
|
||
})
|
||
signNum.value = Object.keys(sealNumMap).length;
|
||
console.log(sealNumMap)
|
||
console.log("ev.data----", data)
|
||
if (data.type === 'successMessage') {
|
||
console.log("ev------------", ev)
|
||
sign.value = true;
|
||
console.log("改变状态后-------this.sign-----", sign.value)
|
||
let wjurl = ev.currentTarget[0].data.filename;
|
||
if (wjurl.split('/')[0].includes("非常规盖章")) {
|
||
let wjdata = ev.currentTarget[0].data;
|
||
emit('message', wjdata);
|
||
}
|
||
} else if (data.type === 'sealArray') {
|
||
sign.value = false;
|
||
console.log("删除盖章后的参数--this.sign--", sign.value)
|
||
}
|
||
}
|
||
|
||
onShow(() => {
|
||
setTimeout(()=>{
|
||
setConfig()
|
||
},500)
|
||
})
|
||
|
||
onLoad(() => {
|
||
let userInfo = store.userInfo;
|
||
ldhth.value = userInfo.workNo;
|
||
checkSign(ldhth.value).then((res) => {
|
||
if (res) {
|
||
username.value = res
|
||
} else {
|
||
toast.error("您没有申请电子签章服务!请移步到系统管理-电子签章管理中注册,并联系信息化支持中心进行otp绑定。联系电话:4874260")
|
||
}
|
||
})
|
||
})
|
||
|
||
// defineExpose({ //暴露方法
|
||
// signValidator
|
||
// })
|
||
|
||
return {
|
||
iframe,
|
||
compName,
|
||
asyncComponent,
|
||
sealArrayTemp,
|
||
signNum,
|
||
sign,
|
||
ldhth,
|
||
username,
|
||
iframeWin,
|
||
baseUrl,
|
||
filterArrNum,
|
||
transmissionData,
|
||
signValidator,
|
||
stampingCompleted,
|
||
errorMsg
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<script module="renderjs" lang="renderjs">
|
||
export default {
|
||
mounted() {
|
||
this.setupMessageListener()
|
||
},
|
||
methods: {
|
||
postMessageToIframe(data) {
|
||
console.log(data)
|
||
const iframe = document.getElementById('jingeIframe')
|
||
if (iframe && iframe.contentWindow) {
|
||
iframe.contentWindow.postMessage(data, '*')
|
||
}
|
||
},
|
||
setupMessageListener() {
|
||
let that = this;
|
||
window.addEventListener('message', (ev,ev2) => {
|
||
console.log(ev.data)
|
||
if (ev) {
|
||
try {
|
||
that.$ownerInstance.callMethod('stampingCompleted', ev.data)
|
||
} catch (error) {
|
||
console.error('Call method error:', error)
|
||
}
|
||
}
|
||
})
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
|
||
<style scoped>
|
||
</style> |