1.新增非常规模块

This commit is contained in:
lagos 2025-06-12 12:34:30 +08:00
parent a6d16819e1
commit 2d6bb85936
332 changed files with 86359 additions and 76 deletions

View File

@ -4,6 +4,6 @@ NODE_ENV = 'development'
VITE_DELETE_CONSOLE = false VITE_DELETE_CONSOLE = false
# 是否开启sourcemap # 是否开启sourcemap
VITE_SHOW_SOURCEMAP = true VITE_SHOW_SOURCEMAP = true
VITE_SERVER_BASEURL = 'http://10.75.15.249:8080/jeecg-boot' VITE_SERVER_BASEURL = 'http://10.75.15.247:8080/jeecg-boot'
#VITE_SERVER_BASEURL = 'https://36.112.48.190/jeecg-boot' #VITE_SERVER_BASEURL = 'https://36.112.48.190/jeecg-boot'
#VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/jeecg-boot' #VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/jeecg-boot'

View File

@ -26,9 +26,20 @@ export default defineManifestConfig({
usingComponents: true, usingComponents: true,
nvueStyleCompiler: 'uni-app', nvueStyleCompiler: 'uni-app',
compilerVersion: 3, compilerVersion: 3,
android: {
webView: {
domStorageEnabled: true,
databaseEnabled: true,
allowFileAccess: true
}
},
compatible: { compatible: {
ignoreVersion: true, ignoreVersion: true,
}, },
webview: {
debug: true,
crossDomain: true //
},
splashscreen: { splashscreen: {
alwaysShowBeforeRender: true, alwaysShowBeforeRender: true,
waiting: true, waiting: true,

26
src/api/bpm/sign.ts Normal file
View File

@ -0,0 +1,26 @@
import { http } from '@/utils/http';
/*通过id查询数据*/
export function checkSign(ldhth : string) {
return http({
url: '/cxcesign/cxcEsign/getUserCo',
method: 'GET',
data: { ldhth }
})
}
export function getCompleteNum(procInsId : string) {
return http({
url: '/cxcesign/cxcEsign/getCompleteNum',
method: 'GET',
data: { procInsId }
})
}
export function processHistoryList(processInstanceId : string) {
return http({
url: '/act/task/processHistoryList',
method: 'GET',
data: { processInstanceId }
})
}

View File

@ -0,0 +1,10 @@
import { http } from '@/utils/http';
// API
export function queryUnData(data : Object) {
return http({
url: '/cxcfcggzsq/cxcFcggzsq/queryByIdDict',
method: 'get',
data
})
}

View File

@ -0,0 +1,78 @@
<!-- component标签可以变换组件 -->
<template>
<view>
<view v-if="ifH5">
<SinopecEsignPageH5 :valiData="props.valiData" :procInsId="props.procInsId" :path="props.path" ref="signH5" :fileName="props.fileName" @stampSuccess="getStampSuccess"></SinopecEsignPageH5>
</view>
<view v-else>
<SinopecEsignPageAPP :valiData="props.valiData" :procInsId="props.procInsId" :path="props.path" ref="signAPP" :fileName="props.fileName" @stampSuccess="getStampSuccess"></SinopecEsignPageAPP>
</view>
</view>
</template>
<script setup lang="ts">
import {
ref
} from 'vue'
import {
onLoad,
} from '@dcloudio/uni-app';
import SinopecEsignPageH5 from '@/components/Esign/SinopecEsignPageH5.vue'
import SinopecEsignPageAPP from '@/components/Esign/SinopecEsignPageAPP.vue'
const emit = defineEmits(['stampSuccess'])
const ifH5 = ref(null);
const signH5 = ref(null);
const signAPP = ref(null);
const props = defineProps({
fileName: {
type: String,
default: ""
},
valiData: {
type: Object,
default: () => ({})
},
procInsId: { //
type: String,
default: ""
},
path: {//
type: String,
default: ""
}
})
//h5 by
var ifH = false;
onLoad(() => {
//#ifdef H5 || MP-WEIXIN
ifH5.value = true;
//#endif
})
//
const getStampSuccess=(val)=> {
emit('stampSuccess', val)
}
const signValidator = ()=>{
//
if(ifH5.value){
return signH5.value.signValidator();
}else{
console.log(3435)
return signAPP.value.signValidator()
}
}
defineExpose({ //
signValidator
})
</script>
<style scoped>
</style>

View File

@ -0,0 +1,250 @@
<!-- 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>

View File

@ -0,0 +1,230 @@
<!-- component标签可以变换组件 -->
<template>
<view>
<view v-if="errorMsg" style="color: red;padding-left: 13px;">{{errorMsg}}</view>
<iframe id="jingeIframe" class="App-iframe" width="100%" ref="iframe" title="金格云阅读"
src="./static/CloudSign/viewer.html" @load="setConfig"></iframe>
<wd-toast></wd-toast>
</view>
</template>
<script setup lang="ts">
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, useNotify, dayjs } from 'wot-design-uni'
const emit = defineEmits(['message'])
const iframe = ref(null); //ref
const toast = useToast()
const store = useUserStore();
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 errorMsg = ref('');
defineOptions({
name: 'SinopecEsignPage',
options: {
styleIsolation: 'shared',
},
})
const props = defineProps({
fileName: {
type: String,
default: ""
},
valiData: {
type: Object
},
procInsId: { //
type: String,
default: ""
},
path: {//
type: String,
default: ""
}
})
onShow(() => {
setTimeout(()=>{
setConfig()
},500)
})
const setConfig = () => {
// //html
iframeWin.value = iframe.value.contentWindow
console.log(iframe.value)
console.log(iframe.value.contentWindow)
try {
iframeWin.value.postMessage({
filename: props.fileName,
apiUrl: baseUrl,
userid: username.value,
}, '*')
} catch (error) {
console.error('PostMessage error:', error);
//
}
}
const signValidator = async () => { // by
console.log(props.valiData)
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 = []
console.log(sealArrayTemp.value)
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;
}
})
console.log(filterArr)
filterArrNum.value = filterArr.length;
if (props.valiData.num <= filterArrNum.value) {
return true;
} else {
console.log(324325)
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;
}
onLoad(() => {
//
//esign使使userid
let userInfo = store.userInfo;
ldhth.value = userInfo.workNo;
checkSign(ldhth.value).then((res) => {
if (res) {
username.value = res
} else {
toast.error("您没有申请电子签章服务!请移步到系统管理-电子签章管理中注册并联系信息化支持中心进行otp绑定。联系电话4874260")
}
})
})
onMounted(() => {
//html
window.addEventListener("message", (ev) => {
console.log(ev)
//1.
let sealArray = ev.data.data.sealArray;
sealArrayTemp.value = sealArray;
console.log(sealArrayTemp.value);
//2.keySnkeySn1
let sealNumMap = {}
sealArray.forEach(item => {
if (sealNumMap[item.keySN]) {
sealNumMap[item.keySN] += 1;
//2
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----", ev.data)
if (ev.data.type === 'successMessage') {
console.log("ev------------", ev)
sign.value = true;
console.log("改变状态后-------this.sign-----", sign.value)
let wjurl = ev.currentTarget[0].data.filename;
//--2024.1.11
// let wjurl1=wjurl.split('/');
if (wjurl.split('/')[0].includes("非常规盖章")) {
let wjdata = ev.currentTarget[0].data;
emit('message', wjdata);
}
} else if (ev.data.type === 'sealArray') { //false -- 2024.3.22
sign.value = false;
console.log("删除盖章后的参数--this.sign--", sign.value)
}
})
})
defineExpose({ //
signValidator
})
</script>
<style scoped>
.App-iframe {
width: 100%;
height: 700px;
border: none;
}
</style>

View File

@ -89,8 +89,19 @@
} }
} }
}, },
"android": {
"webView": {
"domStorageEnabled": true,
"databaseEnabled": true,
"allowFileAccess": true
}
},
"compatible": { "compatible": {
"ignoreVersion": true "ignoreVersion": true
},
"webview": {
"debug": true,
"crossDomain": true
} }
}, },
"quickapp": {}, "quickapp": {},

View File

@ -0,0 +1,52 @@
<template>
<wd-cell-group title="申请信息">
<wd-cell title="申请人" :value="info.sqr" />
<wd-cell title="业务类别" :value="info.ywlb" />
<wd-cell title="申请事由" :value="info.sqsy" />
<wd-cell title="部门审批领导" :value="info.bmspld_dictText" />
<wd-cell title="申请部门" :value="info.sqbm" />
<wd-cell title="申请时间" :value="info.sqsj" />
<wd-cell title="申请盖章领导" :value="info.gzld" />
<wd-cell title="申请盖章厂领导" :value="info.gzcld" />
<wd-cell title="盖章位置" :value="info.gzwz" />
<wd-cell title="盖章文件" >
<view style="color: #4d80f0;" @click="onlinePreView(info.wj)" plain>{{info.wj.match(/([^\/]+)(?=\.\w+$)/)[0]}}</view>
</wd-cell>
</wd-cell-group>
</template>
<script setup>
import {
queryUnData
} from '@/api/integrated/unconventional'
import {
imgUrl
} from '@/utils/index'
const info = ref({})
const image = ref([])
const props = defineProps({
formData: {
type: Object,
default: () => {},
}
})
const queryData = ()=>{
queryUnData({id:props.formData.dataId}).then(res=>{
console.log(res)
info.value = res.result.records[0]
})
}
const onlinePreView = (fileUrl) => {
uni.navigateTo({
url: `/pages/onlinePreview/detail?data=${fileUrl}`
});
};
onMounted(() => {
queryData();
})
</script>

View File

@ -0,0 +1,123 @@
<template>
<wd-collapse v-model="value">
<wd-collapse-item title="表单数据" name="item1">
<wd-cell title="申请人" :value="info.sqr" />
<wd-cell title="业务类别" :value="info.ywlb" />
<wd-cell title="申请事由" :value="info.sqsy" />
<wd-cell title="部门审批领导" :value="info.bmspld_dictText" />
<wd-cell title="申请部门" :value="info.sqbm" />
<wd-cell title="申请时间" :value="info.sqsj" />
<wd-cell title="申请盖章领导" :value="info.gzld" />
<wd-cell title="申请盖章厂领导" :value="info.gzcld" />
<wd-cell title="盖章位置" :value="info.gzwz" />
</wd-collapse-item>
<wd-collapse-item custom-body-style="padding:0;" title="盖章文件" name="item2">
<SinopecEsignPage :valiData="valiData" ref="sign" :procInsId="props.formData.procInsId" :path="props.formData.path" :fileName="info.wjdict" @stampSuccess="getStampSuccess"></SinopecEsignPage>
</wd-collapse-item>
</wd-collapse>
</template>
<script setup>
import {
queryUnData
} from '@/api/integrated/unconventional'
import {
processHistoryList
} from '@/api/bpm/sign'
import {
imgUrl
} from '@/utils/index'
import SinopecEsignPage from '@/components/Esign/SinopecEsignPage.vue'
import { useUserStore } from '@/store/user'
const userStore = useUserStore()
const emit = defineEmits(['getStampSuc'])
const sign = ref(null);
const value = ref([]);
const info = ref({});
const valiData = ref({});
const props = defineProps({
formData: {
type: Object,
default: () => {},
},
fileName: {
type: String,
default: ""
}
})
const queryData = ()=>{
queryUnData({id:props.formData.dataId}).then(res=>{
console.log(res)
info.value = res.result.records[0]
initValiData(info.value); //data by
let lj = info.value.wj.split("/");
let ljurl = lj[2] + '/' + lj[3];
info.value.wjdict = ljurl;
console.log(info.value)
})
}
const initValiData = (data)=>{
//data by
let name = userStore.userInfo.realname;
console.log(name)
// name = ''
let num = null;
if(data.lds){
let ldsMap = JSON.parse(data.lds);
if(ldsMap[name]) num = ldsMap[name]
}
console.log(data)
if(data.clds){
let cldsMap = JSON.parse(data.clds);
if(cldsMap[name]) num = cldsMap[name]
}
console.log(name)
console.log(num)
if(num){
valiData.value.flag = true;
valiData.value.num = num;
valiData.value.name = name;
}
}
const initValtime = ()=>{
processHistoryList(props.formData.procInsId).then(res=>{
console.log(res)
if (res.success) {
console.log(res.result.records)
valiData.value.time = res.result.records[0].startTime
} else {
console.log("加载失败")
}
})
}
//
const getStampSuccess=(val)=> {
emit('getStampSuc', val)
}
const signValidator = (procInsId,path)=>{
//
return sign.value.signValidator();
}
onMounted(() => {
queryData();
initValtime();
})
defineExpose({ //
signValidator
})
</script>
<style lang="scss" scoped>
</style>

View File

@ -1,16 +1,17 @@
<!-- component标签可以变换组件 --> <!-- component标签可以变换组件 -->
<template> <template>
<view> <view>
<component :is="asyncComponent" :formData="formData" :history="history" :activeKey="activeKey" v-if="asyncComponent" <component ref="comptRef" :is="asyncComponent" :formData="formData" :history="history" :activeKey="activeKey" v-if="asyncComponent"
@getStampSuc="getStampSuccess"></component> @getStampSuc="getStampSuccess"></component>
<view v-else>该模块暂未建立审批页面</view> <view v-else>该模块暂未建立审批页面</view>
</view> </view>
</template> </template>
<script setup lang="ts"> <script setup>
import { ref, reactive, onMounted, computed, watch, nextTick } from 'vue'; import { ref, reactive, onMounted, computed, watch, nextTick } from 'vue';
const compName = ref(''); const compName = ref('');
const asyncComponent = ref(null); const asyncComponent = ref(null);
const modules = import.meta.glob('/src/pages-bpm/**/*.vue'); const modules = import.meta.glob('/src/pages-bpm/**/*.vue');
const comptRef = ref();
defineOptions({ defineOptions({
@ -42,12 +43,15 @@
watch(() => props.path, (newVal) => { watch(() => props.path, (newVal) => {
if (newVal){ if (newVal){
compName.value = newVal; compName.value = newVal;
if(newVal.indexOf('index')==-1){
compName.value = newVal+'/index'
}
} }
// //
const comp = modules[`/src/pages-bpm/${compName.value}.vue`] const comp = modules[`/src/pages-bpm/${compName.value}.vue`]
if(!comp){
if(newVal.indexOf('index')==-1){
compName.value = newVal+'/index'
comp = modules[`/src/pages-bpm/${compName.value}.vue`]
}
}
comp().then((myModule) => { comp().then((myModule) => {
asyncComponent.value = myModule.default asyncComponent.value = myModule.default
}).catch(() => { }).catch(() => {
@ -60,6 +64,10 @@
// #endif // #endif
}); });
const signValidator = ()=>{
//
return comptRef.value.signValidator()
}
const getStampSuccess = (val) => { const getStampSuccess = (val) => {
// this.$emit('getStampSuc', val) // this.$emit('getStampSuc', val)
@ -69,6 +77,10 @@
// esignTag: val // esignTag: val
// }); // });
} }
defineExpose({ //
signValidator
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -196,6 +196,8 @@
import Mupload from '@/components/Mupload/Mupload.vue' import Mupload from '@/components/Mupload/Mupload.vue'
import { getProcessTaskTransInfo, processComplete, taskEntrust, callBackProcessApi, sendMessageApi } from '@/api/process' import { getProcessTaskTransInfo, processComplete, taskEntrust, callBackProcessApi, sendMessageApi } from '@/api/process'
import { useToast, useMessage, useNotify, dayjs } from 'wot-design-uni' import { useToast, useMessage, useNotify, dayjs } from 'wot-design-uni'
const emit = defineEmits(['dataSubmit'])
defineOptions({ defineOptions({
name: 'taskDeal', name: 'taskDeal',
@ -368,6 +370,25 @@
} }
const handleProcessComplete = (nextNode) => { const handleProcessComplete = (nextNode) => {
emit('dataSubmit', val=>{
console.log(val)
let valiData = val
if (model.value.processModel == 3) {
valiData.flag = true;
}
console.log(valiData)
if (!valiData.flag) { // by
switch (valiData.type) {
case 0:
toast.error("请确认是否填写完表单或验证是否正确!")
break;
case 1:
toast.error("请确认是否盖章!")
break;
}
return
}
if (model.value.processModel == 4) { //4 if (model.value.processModel == 4) { //4
message message
.confirm({ .confirm({
@ -443,6 +464,9 @@
}) })
}) })
} }
})
} }
const handleManyProcessComplete = () => { // const handleManyProcessComplete = () => { //

View File

@ -14,7 +14,7 @@
<DynamicLink ref="linkRef" :path="path" :formData="formData"></DynamicLink> <DynamicLink ref="linkRef" :path="path" :formData="formData"></DynamicLink>
</wd-tab> </wd-tab>
<wd-tab title="任务处理" v-if="type!='history'"> <wd-tab title="任务处理" v-if="type!='history'">
<taskDeal :formData="formData" :useData="useData"></taskDeal> <taskDeal :formData="formData" :useData="useData" @dataSubmit="dataSubmit"></taskDeal>
</wd-tab> </wd-tab>
<wd-tab title="流程图"> <wd-tab title="流程图">
<view class="container"> <view class="container">
@ -93,6 +93,9 @@
const tab = ref(0) const tab = ref(0)
const completedNum = ref(0); const completedNum = ref(0);
const popup = ref(false) const popup = ref(false)
const linkRef = ref();
const showFullScreen = () => { const showFullScreen = () => {
popup.value = true popup.value = true
}; };
@ -123,6 +126,7 @@
formData.value = data;// formData.value = data;//
let tempFormUrl = res.result.formUrlMobile; let tempFormUrl = res.result.formUrlMobile;
path.value = tempFormUrl; //url path.value = tempFormUrl; //url
formData.value.path = tempFormUrl; //path
} }
}) })
} else { } else {
@ -164,6 +168,26 @@
}) })
}) })
const dataSubmit = async (callback)=> { // by
//1.formform
//2.form
let callData = {
flag: false,
type: 0,
}
console.log(linkRef.value)
let data = await linkRef.value.signValidator()
if(data==false||data==true){
callData.flag = data;
callData.type = 1;
}else{
callData.flag = true;
}
console.log(callData)
callback(callData);
}
const imgPath = computed(() => { const imgPath = computed(() => {
var params = qs.stringify({ var params = qs.stringify({
'processInstanceId': formData.value.procInsId 'processInstanceId': formData.value.procInsId

View File

@ -524,6 +524,14 @@
{ {
"path": "leaveApplication/index", "path": "leaveApplication/index",
"type": "page" "type": "page"
},
{
"path": "unconventional/index",
"type": "page"
},
{
"path": "unconventional/stamp",
"type": "page"
} }
] ]
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@
àRCopyright 1990-2009 Adobe Systems Incorporated.
All rights reserved.
See ./LICENSEáCNS2-H

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@
àRCopyright 1990-2009 Adobe Systems Incorporated.
All rights reserved.
See ./LICENSEá ETen-B5-H` ^

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,4 @@
àRCopyright 1990-2009 Adobe Systems Incorporated.
All rights reserved.
See ./LICENSE!!<21>º]aX!!]`<60>21<32>> <09>p <0B>z<EFBFBD>$]<06>"Rd<E2809A>-Uƒ7<C692>*4„%<25>+ „Z „{<7B>/%…<<3C>9K…b<E280A6>1]†.<2E>" ‰`]‡,<2C>"]ˆ
<EFBFBD>"]ˆh<CB86>"]‰F<E280B0>"]Š$<24>"]<02>"]`<60>"]Œ><3E>"]<5D><1C>"]<5D>z<EFBFBD>"]ŽX<C5BD>"]<5D>6<EFBFBD>"]<5D><14>"]<5D>r<EFBFBD>"]P<E28098>"].<2E>"]“ <0C>"]“j<E2809C>"]”H<E2809D>"]•&<26>"]<04>"]b<E28093>"]—@<40>"]˜<1E>"]˜|<7C>"]™Z<E284A2>"]š8<C5A1>"]<16>"]t<E280BA>"]œR<C593>"]<5D>0<EFBFBD>"]ž<0E>"]žl<C5BE>"]ŸJ<C5B8>"] (<28>"]¡<06>"]¡d<C2A1>"]¢B<C2A2>"]£ <20>"X£~<7E>']¤W<C2A4>"]¥5<C2A5>"]¦<13>"]¦q<C2A6>"]§O<C2A7>"]¨-<2D>"]© <0B>"]©i<C2A9>"]ªG<C2AA>"]«%<25>"]¬<03>"]¬a<C2AC>"]­?<3F>"]®<1D>"]®{<7B>"]¯Y<C2AF>"]°7<C2B0>"]±<15>"]±s<C2B1>"]²Q<C2B2>"]³/<2F>"]´ <0A>"]´k<C2B4>"]µI<C2B5>"]¶'<27>"]·<05>"]·c<C2B7>"]¸A<C2B8>"]¹<1F>"]¹}<7D>"]º[<5B>"]»9

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More