jeecgBootUniapp/src/components/Esign/SinopecEsignPageAPP.vue
2025-06-12 12:34:30 +08:00

250 lines
6.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 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>