<template> <div style="height:97%" class="flow-panel-box" v-loading="loading"> <!--鍔犵涓诲姙锛堝崗鍔烇級--> <div v-if="act.type == 57 || act.type == 58" class="process-host"> <!--鍔犵涓诲姙涓庡崗鍔�--> <form_processHosting_flowpanel :act="act" :openParams="openParams" :buildFormData="buildFormData" :approvers="approvers" :newHostOrCohostList="newHostOrCohostList" v-bind="$attrs" v-on="$listeners" /> </div> <!--鍏朵粬娴佺▼--> <div class="flow-wrap" v-else> <!--琛ョ--> <div class="refer" v-if="act.type == 56"> <div class="t-box"> <div class="sug-left">{{$t('suggest')}}:</div> <div class="idea-textbox"> <el-input class="idea-box" type="textarea" :rows="7" :placeholder="$t('view.input_ss')" maxlength="300" v-model="attitude" > </el-input> </div> </div> </div> <!--鐐硅瘎--> <div class="refer" v-else-if="act.type == 55"> <div class="t-box"> <div class="sug-left">{{$t('suggest')}}:</div> <div class="idea-textbox"> <el-input class="idea-box" type="textarea" :rows="7" :placeholder="$t('view.input_ss')" maxlength="300" v-model="attitude" > </el-input> </div> </div> </div> <!--娴佺▼鎻愪氦--> <div class="refer" v-else> <div class="refer-top"> <!-- <img src="../assets/images/ic_tjz_s.png" width="18px" height="18px" /> --> <span v-if="act && act.type == 47"> {{$t('view.back_to')}}: </span> <span v-if="act && act.type == 48"> {{$t('view.push_for')}}: </span> <span v-if="act.type != 47 && act.type != 48"> {{$t('view.submit_to')}}: </span> </div> <div class="refer-footer" v-if="act.type != 47 && act.type != 48 && act.type != 33 && act.type != 52" > <!-- <el-scrollbar class="scrollbar"> 闅愯棌浼氭湁涓€涓棶棰橈紝閭e氨鏄鏋滆妭鐐瑰緢澶氾紝閭d箞鍙兘瀵艰嚧楂樺害澶珮锛屼絾鏄笉闅愯棌锛岃妭鐐逛細涓€鐩磋閬尅锛屽洜涓烘病鏈夊浐瀹氶珮搴� --> <div class="free-flow" v-if="act.workFlowType == 1"> <div class="list-right"> <div class="add" v-if="!approverName" @click="select()">+</div> <div v-else> <el-tag :key="approverName" closable :id="nextUserId" @close="onTabClose(nextUserId)" > {{ approverName }} </el-tag> </div> </div> </div> <div v-else> <div class="refer-radio" v-if="!isSplit"> <span class="refer-radio-group"> <el-radio-group v-model="nextNodeIds"> <el-radio v-for="(item, index) in selectData" :key="index" :label="item.id" > <span class="refer-radio-node" :title="item.name">{{ item.name}}</span> <div class="check-input-box" v-if="item.isToPerson" @click=" selectApprovers( item.isToPerson, item.id, item.submitTo, item.approverNumType, '', item.groupNum ) " > <span class="check-input"> <el-input v-if="item.checkedOnSinglePerson" :value="item.approverName" :placeholder="$t('view.point')" ></el-input> <el-input v-else v-model="item.approverName" :placeholder="$t('view.point')" ></el-input> </span> <span class="icon-peo" :style="{display: item.checkedOnSinglePerson && item.isARole?'none':''}" > <i class="fa fa-user-o fa-lg"></i> </span> </div> </el-radio> </el-radio-group> </span> <span class="check-input-wrap" v-if="isAppentCirculator" > <span class="check-input-box" @click=" selectApprovers( '', currentNodeId, isAppentData.submitTo, '', isAppentCirculator )" > <span class="check-input"> <span>{{$t('view.cc')}} </span> <el-input v-model="isAppentData.approverName" :placeholder="$t('placeholder.select')" ></el-input> </span> <span class="icon-peo"> <i class="fa fa-user-o fa-lg"></i> </span> </span> </span> </div> <div class="refer-check" v-if="isSplit"> <span class="refer-radio-group"> <el-checkbox-group v-model="nextNodeIds" > <el-checkbox v-for="(item, index) in selectData" :label="item.id" :key="index" :disabled="item.locked" > <span class="refer-radio-node" :title="item.name">{{ item.name }}</span> <div class="check-input-box" v-if="item.isToPerson" @click.stop.prevent=" selectApprovers( item.isToPerson, item.id, item.submitTo, item.approverNumType, '', item.groupNum ) " > <span class="check-input"> <el-input v-model="item.approverName" :placeholder="$t('view.point')" ></el-input> </span> <span class="icon-peo" :style="{display: item.checkedOnSinglePerson && item.isARole?'none':''}" > <i class="fa fa-user-o fa-lg"></i> </span> </div> </el-checkbox> </el-checkbox-group> </span> <span class="check-input-wrap" v-if="isAppentCirculator"> <span class="check-input-wrap"> <span class="check-input-box" @click=" selectApprovers( '', currentNodeId, isAppentData.submitTo, '', isAppentCirculator ) " > <span class="check-input"> <span>{{$t('view.cc')}} </span> <el-input v-model="isAppentData.approverName" :placeholder="$t('placeholder.select')" ></el-input> </span> <span class="icon-peo"> <i class="fa fa-user-o fa-lg"></i> </span> </span> </span> </span> </div> </div> <!-- </el-scrollbar> --> </div> <div class="refer-footer refer-footer-comm" v-if="act.type == 33"> <el-select v-if="processNodes" v-model="selectProcessNode"> <el-option v-for="(item, index) in processNodes" :key="index" :label="item.subject" :value="item.id" > </el-option> </el-select> <div v-if="processNodeList.length > 1"> <el-checkbox-group v-model="selectProcessNodeUser"> <el-checkbox v-for="(item, index) in processNodeList" :label="item.id" :key="index" >{{ item.name }}</el-checkbox > </el-checkbox-group> </div> <div v-if="selectProcessNodeUserRadio" style="margin-top: 5px"> <el-radio-group v-model="selectProcessNodeUserRadio"> <el-radio v-for="(item, index) in processNodeList" :label="item.id" :key="index" >{{ item.name }}</el-radio > </el-radio-group> </div> </div> <div class="refer-footer refer-footer-comm refer-footer-backNodes" v-if="act.type == 47"> <el-select v-if="backNodes" v-model="selectBackNodes"> <el-option v-for="(item, index) in backNodes" :key="index" :label="item.name" :value="item.id" > </el-option> </el-select> </div> <div class="refer-footer refer-footer-comm" v-if="act.type == 48"> <div class="refer-check"> <el-checkbox-group v-model="selectNodesId" v-if="nodesList && nodesList.length > 0" > <el-checkbox style="display: block" v-for="(item, index) in nodesList" :label="item.nodeId" :key="index" > {{ item.nodeName }} </el-checkbox> </el-checkbox-group> </div> </div> <div class="refer-footer refer-footer-comm" v-if="act.type == 52"> 鏈娴佺▼缁撴潫 </div> </div> <transition v-if="act.type != 56 && act.type != 55 && act.type != 33" :duration="1000" name="face" > <div class= "common-idea"> <div class="idea-top"> <span class="suggest"><em style="color: #ff5252">*</em>{{$t('suggest')}}{{$t('view.word')}}</span> <span class="idea-use"> <span class="use-tip" @click.stop="hiddenSuggest()"> {{$t('view.fre_suggesst')}} <i class="el-icon-arrow-down" v-show="!isOrSuggest"></i> <i class="el-icon-arrow-up" v-show="isOrSuggest"></i> </span> <div class="use-suggest" v-if="isOrSuggest"> <div class="sug-data" v-if="allSuggests"> <div class="data-row" v-for="(item, index) in allSuggests" :key="index" @click.stop="putData(item.content)" > <span :title="item.content" :class="[showEditSecond?'is-edit':'no-edit','opinion-content']">{{ item.content }}</span> <span class="icon" v-if="showDelAndEdit"> <i class="fa fa-trash-o" @click.stop="deleteSuggestion(item.id)" ></i> <i class="fa fa-pencil-square-o" @click.stop=" editSuggestion(item.id, item.content) " ></i> </span> </div> </div> <div class="sug-btn" v-if="!showInput"> <div class="btns"> <span @click.stop="showInputBox">{{$t('view.add_fre_suggesst')}}</span> <span @click.stop="editSuggest">{{$t('view.edit_suggesst')}}</span> </div> </div> <div class="sug-new" v-if="showEditFirst"> <div class="new-input"> <input type="text" v-model="input" class="option-input" /> </div> <div class="keep-cancel"> <span @click.stop="cancelAddSuggest(1)">{{$t('btns.cancel')}}</span> <span @click.stop="addSuggestion">{{$t('btns.save')}}</span> </div> </div> <div class="sug-new" v-if="showEditSecond"> <div class="new-input"> <input type="text" v-model="inputSecond" class="option-input" /> </div> <div class="keep-cancel"> <span @click.stop="cancelAddSuggest(2)">{{$t('btns.cancel')}}</span> <span @click.stop="updateSuggestion">{{$t('form.edit')}}</span> </div> </div> </div> </span> </div> <div class="idea-bottom" v-show="currentAct"> <div class="idea-textbox"> <!-- maxlength="300" --> <el-input class="idea-box" type="textarea" :rows="4" :placeholder="$t('placeholder.input')" show-word-limit v-model="attitude" resize="none" > </el-input> </div> </div> <div class="idea-bottom" v-show="!currentAct" style="background:#f9f9f9;"> <div class="idea-canvas" > <canvas class="canvas" id="canvas" width="510" height="125" @mousedown="canvasDown($event)" @mousemove="canvasMove($event)" @mouseup="canvasUp($event)" @mouseleave="canvasLeave($event)" ref="canvas" >{{$t('view.nosupport_canvas')}}</canvas > </div> <div class="idea-clear"> <el-button class="btn" size="mini" @click="clear"> {{$t('view.rewrite')}} </el-button> </div> </div> </div> </transition> <div class="edit-icon-box"> <span :class="[currentAct ? 'icon-color' :'','keyboard']" @click="changeDiv" v-show="isShowKeyboard"> <i class="fa fa-keyboard-o icon"></i> </span> <span :class="[!currentAct ? 'icon-color' :'','hand-sign']" @click="changeDiv" v-show="isShowHandSign"> <i class="fa fa-pencil-square icon"></i> </span> </div> <div class="idea common-idea" v-if="act.type == 33"> <div class="idea-top"> </div> <div class="idea-bottom-submission-process"> 璇存槑鏂囧瓧:姝ゅ姛鑳戒緵鐢ㄦ埛缁欏綋鍓嶈〃鍗曞紑鍚笉鍚岀殑娴佺▼锛� </div> </div> </div> <!-- 闄勪欢涓婁紶 by gavin --> <div class="upload_file"> <div class="upload_file_title">闄勪欢锛�</div> <div class="upload_file_com"> <el-upload class="upload-demo" ref="upload" multiple :limit="parseInt(field.limitNumber)" :http-request='uploadImg' :on-remove="handleRemove" :before-upload="beforeUpload" :on-exceed="handleExceed" :file-list="fileList"> <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button> <div slot="tip" class="el-upload__tip"></div> </el-upload> </div> </div> <div class="footer-btn" v-if="act.type != 57 && act.type != 58"> <div> <span class="pack-up" @click.stop="stowPopup">{{$t('btns.cancel')}}</span> <span class="flowpanel-btn" @click.stop="startProcess()" v-if="act && act.type == 33"> {{$t('btns.sure')}} </span> <span class="flowpanel-btn" @click.stop="rollBack(firstSubmission)" v-else-if="act && act.type == 47"> 鍥� 閫€ </span> <span class="flowpanel-btn" v-else-if="act && act.type == 48" @click.stop="remind"> 鍌� 鍔� </span> <span class="flowpanel-btn" v-else-if="act && act.type == 52" @click.stop="endTheFreeFlow"> 缁� 鏉� </span> <span class="flowpanel-btn" v-else-if="act && (act.type == 56 || act.type == 55)" @click.stop="endorsement(act.type)"> {{$t('btns.sure')}} </span> <span class="flowpanel-btn" v-else @click.stop="onSubmit(firstSubmission)"> {{$t('btns.sure')}} </span> </div> </div> </div> </template> <script> import form_processHosting_flowpanel from "@/components/form_processHosting_flowpanel.vue"; import API from "@/api.js"; import {currDateTime} from '@/utils/global.js' export default { props: [ "stateId", "act", "openParams", "buildFormData", "approverName", "submitTo", "nextUserId", "approvers", "subFlowApproverData", "subFlowGroup", "newHostOrCohostList", "cCname", "subFlowGroupNum", "isShowHandSign",//鏄惁鏄剧ず鎵嬬鎸夐挳锛堣ˉ绛惧拰鐐硅瘎鏃朵笉闇€瑕佹墜绛撅級 "isShowKeyboard",//娴佺▼鍚姩鏃朵笉闇€瑕佹樉绀鸿緭鍏ユ剰瑙� ], components: { form_processHosting_flowpanel, }, watch: { submitTo() { this.newSelectData(); }, subFlowApproverData() { this.setSubflowselectData(); }, //娴佺▼鍚姩涓嬫媺妗嗛€夋嫨绫诲瀷 selectProcessNode() { //鎴戜篃涓嶇煡閬撳惎鍔ㄦ祦绋嬫槸涓嶆槸鏈夊涓笅鎷夋鐨勶紝鍏堝綋浠栨槸涓€涓惂 for (let i = 0; i < this.processNodes.length; i++) { if (this.selectProcessNode == this.processNodes[i].id) { this.processNodeList = this.processNodes[i].firstNodeList; if (this.processNodeList.length > 0) { this.selectProcessNodeUserRadio = this.processNodeList[0].id; } } } }, }, data: function () { return { isKeyboard: true, radio: 3, input: "", nextNodeIds: undefined, selectData: [], isSplit: true, currentAct: true, isOrSuggest: false, attitude: "", showInput: false, //鏄惁灞曠ず娣诲姞甯歌鎰忚妗� showEditFirst: false, //灞曠ず{{$t('form.edit')}}鎰忚妗� showDelAndEdit: false, allSuggests: [], showEditSecond: false, inputSecond: "", opinionId: "", //鏇存柊鎰忚淇℃伅鐨処D /* 鎵嬬 */ points: [], canvasTxt: null, startX: 0, startY: 0, moveY: 0, moveX: 0, endY: 0, endX: 0, isDown: false, flowId: "", //褰撳墠娴佺▼ID isAppentCirculator: "", //鏄惁鎶勯€� isAppentData: {}, currentNodeId: "", isToPerson: "", firstSubmission: true, //绗竴娆$偣鍑绘彁浜ょ姝㈡寜閽啀娆$偣鍑� existCanvas: false, //鏄惁瀛樺湪鎵嬪啓绛惧悕 backNodes: "", //娴佺▼鍥為€€鑺傜偣 selectBackNodes: "", nodesList: [], //鍌姙鑺傜偣鏁版嵁 selectNodesId: [], processNodes: [], //娴佺▼鍚姩鎸夐挳鐨勮妭鐐� selectProcessNode: "", //娴佺▼鍚姩鎸夐挳涓嬫媺妗嗛€夋嫨鐨勫€� processNodeList: [], selectProcessNodeUser: [], selectProcessNodeUserRadio: "", isMoreCurrentNode: "", htmlExparams: "", fileList: [], field:{limitNumber:1}, fileType:'',//鏂囦欢绫诲瀷 loading:false,//瀹℃壒闄勪欢涓婁紶loading }; }, created(){ console.log('props', this.$props) }, beforeCreate(){ }, mounted() { if (this.act.type == 48 || this.act.type == 33 || this.act.type == 55 || this.act.type == 56) { this.setNodes(this.act.type); } else { this.getSubmission(); this.getSuggest(); this.show(); } window.addEventListener('click', (e)=> { if(this.isOrSuggest && e.target.className != "option-input"){ this.hiddenSuggest() } }) }, methods: { beforeUpload(file){ this.fileType = file.type; }, uploadImg(e) { this.loading=true //obs鏂囦欢涓婁紶start if(__network__){ this.obsFile(e)//obs鏂囦欢涓婁紶 return } console.log('e', e) let form=new FormData(); form.append("files",e.file) console.log(form) form.forEach(function (value, key) { if (value instanceof File) { form.set(key, value, value.name.replace(/ /g, ''))//鍘绘帀鏂囦欢鍚嶇О鎵€鏈夌┖鏍� } }) let files = form; let actionType = this.fileType; let appId = this.openParams.appId; let allowedTypes = '00'; let fieldId = ''; let fileSaveMode = '00'; let path = "ITEM_PATH"; this.$api.uploadFile( files, appId, allowedTypes, fieldId, fileSaveMode, path, actionType, { onSucess: response => { console.log(response.data.data) if(response.data.data.length){ let obj={ name:response.data.data[0].fileName, path:response.data.data[0].filePath, url:'obpm'+response.data.data[0].filePath, fileType:response.data.data[0].fileType, uploader:sessionStorage.getItem("myProfileName")||'', uploadTime:currDateTime(), userName:sessionStorage.getItem("myProfileName")||'', time:currDateTime(), size:e.file.size, uid:e.file.uid, status:'success' } this.fileList.push(obj) this.loading=false;//鍔犺浇瀹屽彇娑坙oading } } }, (res)=>{ console.log(res) }, e.file.uid, ) }, obsFile(e){//obs鏂囦欢涓婁紶 console.log(e) //鍘绘帀鏂囦欢鍚嶇О绌烘牸start let form = new FormData(); form.append("files", e.file); form.forEach(function (value, key) { if (value instanceof File) { form.set(key, value, value.name.replace(/ /g, ''))//鍘绘帀鏂囦欢鍚嶇О鎵€鏈夌┖鏍� } }) form.get('files') console.log(form.get('files')) e.file=form.get('files') //鍘绘帀鏂囦欢鍚嶇О绌烘牸end var that=this; var domainId=localStorage.getItem("domainId")||"default"//淇濆瓨鏈湴浼佷笟id // var objectKey="uploads/"+domainId+"/"+new Date().getFullYear()+"/"+new Date().getTime()+e.file.name // https://bcxin-v5-prod.obs.cn-north-1.myhuaweicloud.com/uploads/2022/06-20/鍏徃id/uuid/鏂囦欢鍚�.xls let now=new Date() let y=now.getFullYear() let m=now.getMonth()+1<10?'0'+(now.getMonth()+1):now.getMonth()+1 let d=now.getDate()<10?'0'+now.getDate():now.getDate() let md=m+'-'+d var objectKey=`uploads/${y}/${md}/${domainId}/${now.getTime()}/${e.file.name}` var obs = new ObsClient({ access_key_id: ak, secret_access_key: sk, server : urlserver, timeout : 60 * 5, }); obs.putObject({ Bucket: BucketName, Key : objectKey, SourceFile:e.file //鑾峰彇file鏂囦欢 }).then(function(result) { console.log(result) if(result.CommonMsg.Status < 300){ console.log('Create object:' + objectKey + ' successfully!\n'); var httpurl=`https://${BucketName}.${urlserver}/${objectKey}` let uploadTime = ''; let date = new Date(); let Y = date.getFullYear() + '-'; let M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-'; let D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' '; let h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours())+ ':'; let m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':'; let s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()); uploadTime = Y+M+D+h+m+s; let obj = { name: e.file.name, path: httpurl, url: httpurl, fileType: "", uploader: sessionStorage.getItem("myProfileName")||'', uploadTime, userName: sessionStorage.getItem("myProfileName")||'', time: uploadTime, size: e.file.size }; that.fileList.push(obj) that.loading=false;//鍔犺浇瀹屽彇娑坙oading } }); }, handleRemove(file, fileList){ console.log(file) this.fileList.forEach((item,index)=>{ if(item.uid == file.uid){ this.fileList.splice(index,1) } }) }, handleExceed(files, fileList) { //鏂囦欢瓒呭嚭涓暟闄愬埗鏃剁殑閽╁瓙 if(this.field.limitNumber=="1"){//涓婁紶闄愬埗涓€寮犵敤瑕嗙洊鐨勬柟寮忛噸鏂颁笂浼� console.log(files[0]) files[0].uid=new Date().getTime() this.fileList=[] let e={file:files[0]} this.uploadImg(e) }else{ this.$message.warning(this.$t('view.out'));//鏂囦欢涓婁紶瓒呭嚭鏁伴噺闄愬埗銆� } }, //缁撴潫鑷敱娴佺▼ endTheFreeFlow() { let op = this.openParams; let appId = op.appId; let formData = this.buildFormData; formData.stateId = this.stateId; let docId = formData.id, id = formData.id; let formId = ''; let templateForm = '' if(op.realformId) {//濡傛灉鏄ā鏉胯〃鍗曪紝realformId鏄湡瀹瀎ormID锛岃€屼笉鏄痶emplateForm formId = op.realformId; formData.formId = op.realformId; templateForm = op.actionContent; }else { formId = formData.formId; } let document = { applicationId: appId, attitude: this.attitude, docId: docId, document: formData, formId: formId, id: id, parentId: "", templateForm, viewId: "", }; this.$api.completeFreeFlow(appId, docId, document, { onSucess: (res) => { if (res.data.errcode == 0) { status = "SUCCESS"; this.$emit("closePopup", status); this.$notify({ title: res.data.data, message: "", type: "success", }); } }, }); }, setSubflowselectData() { for (let i = 0; i < this.selectData.length; i++) { if (this.selectData[i].id == this.subFlowApproverData.nodeid) { this.selectData[i].approverName = this.approverName; this.selectData[i].subFlowApproverData = this.subFlowApproverData; } } this.$forceUpdate(); //閲嶆柊娓叉煋鏁版嵁 }, //娴佺▼鍚姩 startProcess() { if (!this.selectProcessNode) { this.$message({ message: this.$t('view.noselect_data'), type: "warning", }); } else { if ( this.selectProcessNodeUser.length <= 0 && !this.selectProcessNodeUserRadio ) { this.$message({ message: this.$t('view.noselect_data'), type: "warning", }); } else { let nextId = ""; if (this.selectProcessNodeUserRadio) { nextId = this.selectProcessNodeUserRadio; } else { if (this.selectProcessNodeUser.length > 0) { for (let i = 0; i < this.selectProcessNodeUser.length; i++) { nextId += this.selectProcessNodeUser[i] + ";"; } } } let formData = this.buildFormData; formData.stateId = this.stateId; let docId = formData.id, id = formData.id; let formId = ''; let op = this.openParams; let appId = op.appId; let templateForm = ''; if(op.realformId) {//濡傛灉鏄ā鏉胯〃鍗曪紝realformId鏄湡瀹瀎ormID锛岃€屼笉鏄痶emplateForm formId = op.realformId; formData.formId = op.realformId; templateForm = op.actionContent; }else { formId = formData.formId; } let document = { applicationId: appId, actId: this.act.id, docId: docId, document: formData, flowId: this.selectProcessNode, formId: formId, id: id, nextId, parentId: "", templateForm, viewId: "", }; console.log("-3---->", document); this.$api.InitiateWorkFlow(appId, docId, document, { onSucess: (response) => { let status; if (response.data.errcode == 0) { status = "SUCCESS"; this.$emit("closePopup", status); this.$notify({ title: response.data.data, message: "", type: "success", }); } else if (response.data.errcode == 4001) { status = "ERROR"; this.$emit("closePopup", status); this.$notify({ title: response.data.errmsg, message: "", type: "error", }); } }, }); } } }, //鍌姙鎻愪氦 remind() { let op = this.openParams; let appId = op.appId; let pJson = this.getSignImageData(); let formData = this.buildFormData; formData.stateId = this.stateId; let docId = formData.id, id = formData.id; let formId = ''; let templateForm = ''; if(op.realformId) {//濡傛灉鏄ā鏉胯〃鍗曪紝realformId鏄湡瀹瀎ormID锛岃€屼笉鏄痶emplateForm formId = op.realformId; formData.formId = op.realformId; templateForm = op.actionContent; }else { formId = formData.formId; } let document = { applicationId: appId, currentNodeId: this.currentNodeId, docId: docId, document: formData, formId: formId, id: id, nodertIds: this.selectNodesId, parentId: "", templateForm, viewId: "", }; if (pJson) { //鎵嬪啓绛惧悕 document.signatureJson = JSON.stringify(pJson); } document.attitude = this.attitude; this.$api.remindFlow(appId, docId, document, { onSucess: (response) => { let status; if (response.data.errcode == 0) { status = "SUCCESS"; this.$emit("closePopup", status); this.$notify({ title: response.data.data, message: "", type: "success", }); } else if (response.data.errcode == 4001) { status = "ERROR"; this.$emit("closePopup", status); this.$notify({ title: response.data.errmsg, message: "", type: "error", }); } }, }); }, //鍌姙鏁版嵁 setNodes(type) { let op = this.openParams; let appId = op.appId; if (type == 48) { let obj = JSON.parse(this.act.reminderNodesData); this.nodesList = obj.data; } else if (type == 33) { //娴佺▼鍚姩 let formData = this.buildFormData; formData.stateId = this.stateId; let docId = formData.id, id = formData.id; let formId = ''; let templateForm = ''; if(op.realformId) {//濡傛灉鏄ā鏉胯〃鍗曪紝realformId鏄湡瀹瀎ormID锛岃€屼笉鏄痶emplateForm formId = op.realformId; formData.formId = op.realformId; templateForm = op.actionContent; }else { formId = formData.formId; } let document = { applicationId: appId, docId: docId, document: formData, formId: formId, id: id, parentId: "", templateForm, viewId: "", }; this.$api.getPanelsInitiate(appId, docId, document, { onSucess: (res) => { this.processNodes = res.data.data; }, }); } }, //琛ョ鎻愪氦 endorsement(val) { if (val == 56) { let appId = this.openParams.appId; let instanceId = this.approvers[0].instanceId; let attitude = this.attitude; if(attitude.indexOf('%') > -1) { attitude = encodeURI(attitude) } this.$api.supplement(appId, instanceId, attitude, { onSucess: (response) => { let act = response.data.data; let status = "SUCCESS"; if (response.data.errcode == 0) { this.$notify({ title: response.data.data, message: "", type: "success", }); this.$emit("closePopup", status); } else if (response.data.errcode == 4001) { status = "ERROR"; //this.$emit("closePopup", status); let prompt = response.data.errors[0].errmsg ? response.data.errors[0].errmsg : response.data.errmsg; this.$notify.error({ title: response.data.errmsg, message: response.data.errmsg, }); } //this.$emit("action", act); }, }); } else if ((val = 55)) { let attitude = this.attitude; let appId = this.openParams.appId; let instanceId = this.approvers[0].instanceId; this.$api.review(appId, instanceId, attitude, { onSucess: (response) => { let act = response.data.data; let status = "SUCCESS"; if (response.data.errcode == 0) { this.$notify({ title: response.data.data, message: "", type: "success", }); this.$emit("closePopup", status); } else if (response.data.errcode == 4001) { status = "ERROR"; //this.$emit("closePopup", status); let prompt = response.data.errors[0].errmsg ? response.data.errors[0].errmsg : response.data.errmsg; this.$notify.error({ title: response.data.errmsg, message: response.data.errmsg, }); } //this.$emit("action", act); }, }); } }, newSelectData() { for (let i = 0; i < this.selectData.length; i++) { let _st = this.submitTo; let _sd = this.selectData; if (_sd[i].id == _st.nodeid) { if (!_st.isAppentCirculator) { _sd[i].approverName = this.approverName; if(_st.row && _st.row.length > 0) { _sd[i].submitTo = _st; }else { _sd[i].submitTo = ''; } } } } if (this.submitTo.isAppentCirculator) { this.isAppentData.approverName = this.cCname; //this.approverName; this.isAppentData.circulatorInfo = this.submitTo.userids; this.isAppentData.submitTo = this.submitTo; } this.$forceUpdate(); //閲嶆柊娓叉煋鏁版嵁 }, stowPopup() { // this.approverName = ''; this.$emit("closePopup"); }, //鎸囧畾瀹℃壒浜� selectApprovers( isToPerson, nodeid, submitTo, approverNumType, isAppentCirculator, groupNum ) { // this.subFlowApproverData = subObj; // this.subFlowGroup = currentGroup; //鏁版嵁淇濆瓨鍦ㄦ祦绋嬮潰鏉夸腑 // this.subFlowGroupNum = groupNum; if ((groupNum && groupNum > 1) || groupNum <= -1) { //瀛愭祦绋嬪垎缁� let approversObj = { isToPerson: isToPerson, nodeid: nodeid, groupNum: groupNum, }; if (isAppentCirculator) { approversObj.isAppentCirculator = isAppentCirculator; } let saveApprover = submitTo; let subFlowGroup = []; if (this.subFlowGroup && this.subFlowGroup.length > 0) { subFlowGroup = [...this.subFlowGroup]; //this.subFlowGroup } let isSubFlow = true; this.$emit( "showSubFlow", approversObj, this.flowId, "", saveApprover, approverNumType, isAppentCirculator, groupNum, subFlowGroup, isSubFlow ); } else { let approversObj = { isToPerson: isToPerson, nodeid: nodeid, }; if (isAppentCirculator) { approversObj.isAppentCirculator = isAppentCirculator; } let saveApprover = submitTo; this.$emit( "action", approversObj, this.flowId, "", saveApprover, approverNumType, isAppentCirculator ); //璋冪敤鐖剁粍浠禿esignatedApprover()鏂规硶 } }, //娴佺▼鍥為€€鎵ц鍓� rollBack() { let op = this.openParams; let appId = op.appId; if (this.act.workFlowType == 1) { //鑷敱娴佺▼ let pJson = this.getSignImageData(); let formData = this.buildFormData; formData.stateId = this.stateId; let docId = formData.id, id = formData.id; let formId = ''; let templateForm = ''; if(op.realformId) {//濡傛灉鏄ā鏉胯〃鍗曪紝realformId鏄湡瀹瀎ormID锛岃€屼笉鏄痶emplateForm formId = op.realformId; formData.formId = op.realformId; templateForm = op.actionContent; }else { formId = formData.formId; } let document = { applicationId: appId, docId: docId, document: formData, formId: formId, id: id, nextUserId: this.selectBackNodes, parentId: "", templateForm, viewId: "", }; document.attitude = this.attitude; if (pJson) { //鎵嬪啓绛惧悕 document.signatureJson = JSON.stringify(pJson); } this.$api.backFreeFlow(appId, docId, document, { onSucess: (response) => { let status; if (response.data.errcode == 0) { status = "SUCCESS"; this.$emit("closePopup", status); this.$notify({ title: response.data.data, message: "", type: "success", }); } else if (response.data.errcode == 4001) { status = "ERROR"; this.$emit("closePopup", status); this.$notify({ title: response.data.data, message: "", type: "error", }); } }, }); } else { if (this.selectBackNodes) { let pJson = this.getSignImageData(); let formData = this.buildFormData; formData.stateId = this.stateId; let docId = formData.id, id = formData.id; let formId = ''; let templateForm = ''; if(op.realformId) {//濡傛灉鏄ā鏉胯〃鍗曪紝realformId鏄湡瀹瀎ormID锛岃€屼笉鏄痶emplateForm formId = op.realformId; formData.formId = op.realformId; templateForm = op.actionContent; }else { formId = formData.formId; } let document = { applicationId: appId, currentNodeId: this.currentNodeId, docId: docId, document: formData, flowId: this.flowId, formId: formId, id: id, parentId: "", templateForm, viewId: "", }; let _flowType = this.act.flowType; this.$api.runBeforeActionScript( appId, this.act.id, document, this.act.type, '', //treedocid _flowType, //flowType { onSucess: (response) => { if (response.data.errcode == 0) { let resData = response.data.data; if(resData && !resData.type) { //娌℃湁type鍊硷紝浣嗘槸鏈夎繑鍥炴暟鎹紝鎶婃暟鎹斁杩沝ocument if(resData.changedField) { let resDataItem = resData.changedField; if(resDataItem) { for(let i=0; i<resDataItem.length; i++) { for(let el in resDataItem[i]) { document.document.items[el] = resDataItem[i][el]; } } } } } this.flowRollBack(document, pJson); } }, } ); } else { let status = "ERROR"; this.$message({ message: this.$t('view.noselect_people'), type: "warning", }); } } }, //娴佺▼鍥為€€ flowRollBack(allData, pJson) { let formData = this.buildFormData; let appId = this.openParams.appId; let docId = formData.id; let document = allData; if (pJson) { //鎵嬪啓绛惧悕 document.signatureJson = JSON.stringify(pJson); } if (this.nextNodeIds instanceof Array) { //澶氶€� document.nextNodeIds = this.nextNodeIds; } else { // 鍗曢€� document.nextNodeIds = []; document.nextNodeIds.push(this.selectBackNodes); } document.attitude = this.attitude; document.subFlowApprover = []; //澶氱娴佺▼澶勭悊鏂瑰紡锛屾鏁版嵁涓哄畬鍠勬湭瀹屽杽 document.submitTo = []; //澶氱娴佺▼澶勭悊鏂瑰紡锛屾鏁版嵁涓哄畬鍠勬湭瀹屽杽 this.documentData = document; API.backFlow(appId, docId, document, { onSucess: (response) => { let status; if (response.data.errcode == 0) { status = "SUCCESS"; // this.$emit("closePopup", status); this.$notify({ title: this.$t('success'), message: response.data.data, type: "success", }); this.runAfterAction(status); } else if (response.data.errcode == 4001) { status = "ERROR"; this.$emit("closePopup", status); ; } }, }); }, //鍙栨秷鑷敱娴佺▼閫変腑鐨勭敤鎴� onTabClose(id) { this.approverName = ""; this.nextUserId = ""; }, //鑷敱娴佺▼閫夋嫨鐢ㄦ埛 select() { let isFreeFlow = true; this.$emit("action", "", "", isFreeFlow); //璋冪敤鐖剁粍浠禿esignatedApprover()鏂规硶 }, //淇濆瓨閲嶆柊缂栬緫鐨勬剰瑙� updateSuggestion() { console.log("鏇存柊缂栬緫鐨勬暟鎹�-->"); console.log(this.inputSecond); let opinion = this.inputSecond; if(!opinion) { this.$message({ message: this.$t('view.notnull_ss'), type: 'warning' }); }else { let userId = this.$store.state.userId, opId = this.opinionId; const employeeId = localStorage.getItem("employeeId") || this.$store.state.userId ; API.editMostUseSuggestion(employeeId, opId, opinion, { onSucess: (response) => { if (response.data.data) { let id = response.data.data.id; let content = response.data.data.content; for (let i = 0; i < this.allSuggests.length; i++) { if (this.allSuggests[i].id == id) { this.allSuggests[i].content = content; this.inputSecond = ""; } } } }, }); } }, //閲嶆柊缂栬緫鎰忚 editSuggestion(id, content) { this.inputSecond = content; this.opinionId = id; }, //鍒犻櫎鎰忚 deleteSuggestion(id) { const employeeId = localStorage.getItem("employeeId") || this.$store.state.userId ; let opId = id; API.deleteMostUseSuggestion(employeeId, opId, { onSucess: (response) => { console.log(response.data.data); //鍚庡彴杩斿洖500锛屾湭鎵ц浠ヤ笅姝ラ if (response.data.data) { let delId = response.data.data.id; let allSug = this.allSuggests; for (let i = 0; i < allSug.length; i++) { if (allSug[i].id == delId) { allSug.splice(i, 1); i--; } } this.allSuggest = allSug; } }, }); }, //娣诲姞鎰忚 addSuggestion() { console.log(this.input); const employeeId = localStorage.getItem("employeeId") || this.$store.state.userId ; let opinion = this.input; API.AddMostUseSuggestion(employeeId, opinion, { onSucess: (response) => { console.log(response.data.data); let newSuggest = response.data.data; this.allSuggests.push(newSuggest); this.input = ""; }, }); }, // 閫変腑鐨勬暟鎹斁杩涙枃鏈涓� putData(content) { if (this.showDelAndEdit == false) { if (!this.attitude) { this.attitude = content; } else if (this.attitude) { this.attitude = this.attitude + "," + content; } } }, editSuggest() { this.showInput = true; this.showEditFirst = false; this.showEditSecond = true; this.showDelAndEdit = true; }, cancelAddSuggest(num) { if (num == 1) { this.showInput = false; this.showDelAndEdit = false; this.showEditFirst = false; } else if (num == 2) { this.showInput = false; this.showDelAndEdit = false; this.showEditSecond = false; } }, showInputBox() { this.showInput = true; this.showEditFirst = true; }, showEditBox() {}, //娓呴櫎鐢诲竷鏁版嵁 clear() { this.canvasTxt.clearRect( 0, 0, this.canvasTxt.canvas.width, this.canvasTxt.canvas.height ); this.existCanvas = false; }, show() { this.canvas = this.$refs.canvas; //鎸囧畾canvas this.canvasTxt = this.canvas.getContext("2d"); //璁剧疆2D娓叉煋鍖哄煙 this.canvasTxt.fillStyle = "#F9F9F9"; this.canvasTxt.fillRect(0, 0, 500, 125); }, canvasDown(ev) { ev = ev || event; ev.preventDefault(); if (1) { let obj = { x: ev.offsetX, y: ev.offsetY, }; this.startX = obj.x; this.startY = obj.y; this.canvasTxt.beginPath(); this.canvasTxt.moveTo(this.startX, this.startY); this.canvasTxt.lineTo(obj.x, obj.y); this.canvasTxt.stroke(); this.canvasTxt.closePath(); this.points.push(obj); this.isDown = true; } }, canvasMove(ev) { ev = ev || event; ev.preventDefault(); if (this.isDown) { let obj = { x: ev.offsetX, y: ev.offsetY, }; this.moveY = obj.y; this.moveX = obj.x; this.canvasTxt.beginPath(); this.canvasTxt.moveTo(this.startX, this.startY); this.canvasTxt.lineTo(obj.x, obj.y); this.canvasTxt.stroke(); this.canvasTxt.closePath(); this.startY = obj.y; this.startX = obj.x; this.points.push(obj); } }, canvasUp(ev) { ev = ev || event; ev.preventDefault(); if (1) { let obj = { x: ev.offsetX, y: ev.offsetY, }; this.canvasTxt.beginPath(); this.canvasTxt.moveTo(this.startX, this.startY); this.canvasTxt.lineTo(obj.x, obj.y); this.canvasTxt.stroke(); this.canvasTxt.closePath(); this.points.push(obj); this.points.push({ x: -1, y: -1 }); this.isDown = false; } this.existCanvas = true; }, canvasLeave() { // this.existCanvas = true; this.canvasMoveUse = false; }, getSignImageData() { if (this.existCanvas) { //鍒ゆ柇鏄惁瀛樺湪鎵嬪啓绛惧悕 let pJson; let canvas = document.getElementById("canvas"); let signature = canvas.toDataURL("image/png"); let str = signature.replace("data:image/png;base64,", ""); pJson = { type: "image/png;base64", data: str, }; return pJson; } else { return false; } }, //鎻愪氦 onSubmit() { let op = this.openParams; let appId = op.appId; let arrayIuput = document.getElementsByTagName("input"); let arrayTextA = document.getElementsByTagName("textarea"); let htmlArr = []; if (arrayIuput.length > 0) { for (let i = 0; i < arrayIuput.length; i++) { let obj = {}; if ( arrayIuput[i].hasAttribute("storage") && arrayIuput[i].getAttribute("storage") == "exparams" ) { if (arrayIuput[i].type == "radio" && arrayIuput[i].checked) { obj.id = arrayIuput[i].getAttribute("name"); obj.value = arrayIuput[i].value; htmlArr.push(obj); } else if (arrayIuput[i].type != "radio") { obj.id = arrayIuput[i].getAttribute("name"); obj.value = arrayIuput[i].value; htmlArr.push(obj); } } } } if (arrayTextA.length > 0) { for (let i = 0; i < arrayTextA.length; i++) { let obj = {}; if ( arrayTextA[i].hasAttribute("storage") && arrayTextA[i].getAttribute("storage") == "exparams" ) { obj.id = arrayTextA[i].getAttribute("name"); obj.value = arrayTextA[i].value; htmlArr.push(obj); } } } let exparams = {}; if (htmlArr.length > 0) { for (let i = 0; i < htmlArr.length; i++) { exparams[htmlArr[i].id] = htmlArr[i].value; } } this.htmlExparams = exparams; if (this.selectData.length > 0 || this.act.workFlowType == 1) { if (this.firstSubmission) { //褰撴彁浜ゆ椂锛岀‘瀹氭寜閽姝㈠啀娆$偣鍑绘彁浜� this.firstSubmission = false; let status = ""; if (this.isToPerson) { //褰撹閫夋嫨鎸囧畾瀹℃壒浜烘椂 if (this.isSplit) { //澶氶€� if (this.nextNodeIds.length > 0) { for (let i = 0; i < this.nextNodeIds.length; i++) { for (let j = 0; j < this.selectData.length; j++) { if (this.nextNodeIds[i] == this.selectData[j].id) { if (this.selectData[j].type != "CompleteNode") { if(this.selectData[j].type == 'SubFlow') { if (!this.selectData[j].subFlowApproverData) { if (this.selectData[j].isToPerson) { this.$message({ showClose: true, message: this.$t('view.noselect_approver'), type: 'warning' }); this.firstSubmission = true; //this.$emit("closePopup", status); return; } } }else { if (!this.selectData[j].submitTo) { if (this.selectData[j].isToPerson) { this.$message({ showClose: true, message: this.$t('view.noselect_approver'), type: 'warning' }); this.firstSubmission = true; //this.$emit("closePopup", status); return; } } } } } } } } else if (this.nextNodeIds.length == 0) { this.$message.error(this.$t('placeholder.select')+this.$t('label.approval_node')); this.firstSubmission = true; //this.$emit("closePopup", status); return; } } else { //鍗曢€� if (this.nextNodeIds) { for (let y = 0; y < this.selectData.length; y++) { if (this.nextNodeIds == this.selectData[y].id) { if (this.selectData[y].type != "CompleteNode") { if ( !this.selectData[y].submitTo && !this.selectData[y].subFlowApproverData ) { if (this.selectData[y].isToPerson) { this.$message({ showClose: true, message: this.$t('view.noselect_approver'), type: 'warning' }); this.firstSubmission = true; // this.$emit("closePopup", status); return; } } } } } } else { this.$emit("closePopup", status); return; } } } if (this.nextNodeIds instanceof Array) { //澶氶€変絾娌℃湁鎸囧畾瀹℃壒浜烘病鏈夐€夋嫨瀹℃壒浜烘椂 if (this.nextNodeIds.length < 1) { return; } } if (this.act.workFlowType == 1) { if (!this.nextUserId) { this.$message({ message: this.$t('view.noselect_approver'), type: 'warning' }); this.firstSubmission = true; // status = "ERROR"; // this.$emit("closePopup", status); return; } } let pJson = this.getSignImageData(); //let formData = this.$parent.$parent.$parent.$parent.$parent.buildFormData(); let formData = this.buildFormData; formData.stateId = this.stateId; if (this.htmlExparams) { formData.exparams = this.htmlExparams; } let docId = formData.id, id = formData.id; let formId = ''; let templateForm = ''; if(op.realformId) {//濡傛灉鏄ā鏉胯〃鍗曪紝realformId鏄湡瀹瀎ormID锛岃€屼笉鏄痶emplateForm formId = op.realformId; formData.formId = op.realformId; templateForm = op.actionContent; }else { formId = formData.formId; } let subDocuments = []; let subDoc = this.$store.state.subDocuments;//鍖呭惈鍏冪礌閲岄厤缃綉鏍艰鍥剧殑鏁版嵁锛屾彁浜ゆ寜閽椂缃戞牸瑙嗗浘鐨勬暟鎹篃瑕佷竴璧蜂繚瀛� if(subDoc && subDoc.length > 0) { subDocuments = subDoc; delete formData.subDocuments; formData.subDocuments = subDocuments } let document = { applicationId: appId, currentNodeId: this.currentNodeId, docId: docId, document: formData, flowId: this.flowId, formId: formId, id: id, parentId: "", templateForm, viewId: "", }; if (this.isMoreCurrentNode) { document.isMoreCurrentNode = this.isMoreCurrentNode; } if (this.isAppentCirculator) { //鍒ゆ柇鏄惁鎶勯€� if (this.isAppentData.circulatorInfo) { document.circulatorInfo = this.isAppentData.circulatorInfo; } } this.documentData = document; //淇濆瓨鍊兼斁鍒版墽琛屽悗鑴氭湰 document.attitude = this.attitude; let isRelate = ""; let _flowType = this.act.flowType; //鎻愪氦涓�80 //闈炶嚜鐢辨祦绋� document.subFlowApprover = []; //澶氱娴佺▼澶勭悊鏂瑰紡锛屾鏁版嵁涓哄畬鍠勬湭瀹屽杽 document.submitTo = []; //娴佺▼鍗曢€夋垨澶氶€� if (this.nextNodeIds instanceof Array) { //澶氶€� let checkArr = []; document.nextNodeIds = this.nextNodeIds; for (let j = 0; j < this.nextNodeIds.length; j++) { for (let y = 0; y < this.selectData.length; y++) { if ( this.nextNodeIds[j] == this.selectData[y].id && this.selectData[y].submitTo ) { delete this.selectData[y].submitTo.row; document.submitTo.push(this.selectData[y].submitTo); if (this.selectData[y].type == "SubFlow") { let s = this.selectData[y]; if(s.groupNum == -2) { //groupNum鏈�-1锛�-2鍜�>0, 褰�-1鏃舵棤闄愬埗娣诲姞鍒嗙粍锛�-2鏄瘡涓敤鎴烽兘鏄崟鐙殑鍒嗙粍 let checkSubmit = s.submitTo; let approver = []; let subFlowUserId = ''; if(s.subFlowApproverData && s.subFlowApproverData.approver && s.subFlowApproverData.approver.length > 0) { s.subFlowApproverData.approver[0].userids.forEach(el => { subFlowUserId += el + ";"; }); } if(subFlowUserId) { checkSubmit.userids = subFlowUserId; } if(checkSubmit.userids) { let list = checkSubmit.userids.replace(/^(\s|;)+|(\s|;)+$/g, '') let useridList = list.split(";"); for(let z=0; z<useridList.length; z++) { let obj = {}; let userids = []; obj.position = z+1; obj.userids = userids; userids.push(useridList[z]); approver.push(obj); } } let approverObj = {}; approverObj.approver = approver; approverObj.nodeid = checkSubmit.nodeid; checkArr.push(approverObj); document.subFlowApprover = checkArr; }else { let obj = Object.assign({}, this.selectData[i].submitTo); delete obj.isToPerson; obj.userids = obj.userids.replace(/^(\s|;)+|(\s|;)+$/g, ""); let useridData = obj.userids.split(";"); let approverObj = { position: 1, userids: useridData, }; let approverArr = []; approverArr.push(approverObj); //arr.push(obj); let subFlowObj = { approver: approverArr, nodeid: obj.nodeid, }; document.subFlowApprover.push(subFlowObj); } // //涓诲瓙娴佺▼ // let checkObj = Object.assign({}, this.selectData[y].submitTo); // delete checkObj.isToPerson; // checkArr.push(checkObj); } }else if( this.nextNodeIds[j] == this.selectData[y].id && !this.selectData[y].submitTo && this.selectData[y].subFlowApproverData) { if (this.selectData[y].type == "SubFlow") { let s = this.selectData[y]; if(s.groupNum == -2) { //groupNum鏈�-1锛�-2鍜�>0, 褰�-1鏃舵棤闄愬埗娣诲姞鍒嗙粍锛�-2鏄瘡涓敤鎴烽兘鏄崟鐙殑鍒嗙粍 let approver = []; let subUserids = '' if(s.subFlowApproverData && s.subFlowApproverData.approver && s.subFlowApproverData.approver.length > 0) { console.log("subFlowApproverData-->",s.subFlowApproverData) s.subFlowApproverData.approver[0].userids.forEach(el => { subUserids += el + ";"; }); } if(subUserids) { let list = subUserids.replace(/^(\s|;)+|(\s|;)+$/g, '') let useridList = list.split(";"); for(let z=0; z<useridList.length; z++) { let obj = {}; let userids = []; obj.position = z+1; obj.userids = userids; userids.push(useridList[z]); approver.push(obj); } } let approverObj = {}; approverObj.approver = approver; approverObj.nodeid = s.subFlowApproverData.nodeid; checkArr.push(approverObj); document.subFlowApprover = checkArr; }else { let obj = Object.assign({}, s.subFlowApproverData); let subUserids = '' if(s.subFlowApproverData && s.subFlowApproverData.approver && s.subFlowApproverData.approver.length > 0) { s.subFlowApproverData.approver[0].userids.forEach(el => { subUserids += el + ";"; }); } obj.userids = subUserids.replace(/^(\s|;)+|(\s|;)+$/g, ""); let useridData = obj.userids.split(";"); let approverObj = { position: 1, userids: useridData, }; let approverArr = []; approverArr.push(approverObj); //arr.push(obj); let subFlowObj = { approver: approverArr, nodeid: s.subFlowApproverData.nodeid, }; document.subFlowApprover.push(subFlowObj); } } } } } document.subFlowApprover = checkArr; } else { // 鍗曢€� document.nextNodeIds = []; if(this.nextNodeIds) { document.nextNodeIds.push(this.nextNodeIds); } //let arr = []; let subArr = []; let checkArr = []; for (let i = 0; i < this.selectData.length; i++) { if ( this.selectData[i].submitTo && this.selectData[i].submitTo.nodeid == this.nextNodeIds ) { delete this.selectData[i].submitTo.row; subArr.push(this.selectData[i].submitTo); if (this.selectData[i].type == "SubFlow") { // //涓诲瓙娴佺▼ let s = this.selectData[i]; if(s.groupNum == -2) { //groupNum鏈�-1锛�-2鍜�>0, 褰�-1鏃舵棤闄愬埗娣诲姞鍒嗙粍锛�-2鏄瘡涓敤鎴烽兘鏄崟鐙殑鍒嗙粍 let checkSubmit = s.submitTo; let approver = []; let subFlowUserId = ''; if(s.subFlowApproverData && s.subFlowApproverData.approver && s.subFlowApproverData.approver.length > 0) { s.subFlowApproverData.approver[0].userids.forEach(el => { subFlowUserId += el + ";"; }); } if(subFlowUserId) { checkSubmit.userids = subFlowUserId; } if(checkSubmit.userids) { let list = checkSubmit.userids.replace(/^(\s|;)+|(\s|;)+$/g, '') let useridList = list.split(";"); for(let z=0; z<useridList.length; z++) { let obj = {}; let userids = []; obj.position = z+1; obj.userids = userids; userids.push(useridList[z]); approver.push(obj); } } let approverObj = {}; approverObj.approver = approver; approverObj.nodeid = checkSubmit.nodeid; checkArr.push(approverObj); document.subFlowApprover = checkArr; }else { let obj = Object.assign({}, this.selectData[i].submitTo); delete obj.isToPerson; obj.userids = obj.userids.replace(/^(\s|;)+|(\s|;)+$/g, ""); let useridData = obj.userids.split(";"); let approverObj = { position: 1, userids: useridData, }; let approverArr = []; approverArr.push(approverObj); //arr.push(obj); let subFlowObj = { approver: approverArr, nodeid: obj.nodeid, }; document.subFlowApprover.push(subFlowObj); } } else { document.submitTo = subArr; } } else if ( //褰撴槸瀛愭祦绋嬫椂 this.selectData[i].subFlowApproverData && this.selectData[i].subFlowApproverData.nodeid == this.nextNodeIds ) { let subflowData; if (this.subFlowGroupNum && this.subFlowGroupNum == -2) { subflowData = Object.assign( {}, this.selectData[i].subFlowApproverData ); let arr = subflowData.approver[0] ? subflowData.approver[0].userids : []; if (arr && arr.length > 0) { let approvers = []; for (let k = 0; k < arr.length; k++) { let obj = {}; obj.position = k + 1; let id = []; id.push(arr[k]); obj.userids = id; approvers.push(obj); } let subFlow = {}; subFlow.approver = approvers; subFlow.nodeid = subflowData.nodeid; document.subFlowApprover.push(subFlow); } } else { subflowData = Object.assign( {}, this.selectData[i].subFlowApproverData ); for (let j = 0; j < subflowData.approver.length; j++) { delete subflowData.approver[j].rows; } document.subFlowApprover.push(subflowData); } } } } if(!document.attitude){ this.firstSubmission = true; return this.$message.error('璇疯緭鍏ュ鎵规剰瑙侊紒'); } this.$api.submitRunBeforeActionScript( appId, this.act.id, document, docId, document.viewId, formId, document.templateForm, document.parentId, isRelate, _flowType, { onSucess: (response) => { if (response.data.errcode == 0) { if (response.data.data) { let resData = response.data.data; if(!resData.type) { //娌℃湁type鍊硷紝浣嗘槸鏈夎繑鍥炴暟鎹紝鎶婃暟鎹斁杩沝ocument if(resData.changedField) { // let items = document.document.items; let resDataItem = resData.changedField; if(resDataItem) { for(let i=0; i<resDataItem.length; i++) { for(let el in resDataItem[i]) { document.document.items[el] = resDataItem[i][el]; } } // for(let key in items) { // for(let i=0; i<resDataItem.length; i++) { // for(let el in resDataItem[i]) { // if(el == key) { // document.document.items[key] = resDataItem[i][el]; // } // } // } // } } this.submitFlowData(document, pJson); }else if(resData.content){ this.$notify.error({ title: resData.content, message: "", }); status = "ERROR"; this.$emit("closePopup", status); } }else if(resData.type == 16) { this.$notify.error({ title: response.data.data.content, message: "", }); }else if(resData.type === 32) { //瑙e喅鍦ㄦ搷浣滅被鍨嬫祦绋嬪鐞嗘椂锛岃缃墽琛屽墠鑴氭湰鏃讹紝鍒涘缓寮圭獥涓嶇敓 let information=resData.content ? resData.content : this.$t('msg.submit_flow'); this.$confirm(information, this.$t('tip'), { confirmButtonText: this.$t('msg.confirm'), cancelButtonText: this.$t('btns.cancel'), type: 'warning' }).then(() => { this.submitFlowData(document, pJson); }).catch(() => { this.firstSubmission = true }); }else { this.$notify.error({ title: response.data.data.content, message: "", }); status = "ERROR"; this.$emit("closePopup", status); } } else { this.submitFlowData(document, pJson); } } }, } ); } } }, submitFlowData(allData, pJson) { //let formData = this.$parent.$parent.$parent.$parent.$parent.buildFormData(); let appId = this.openParams.appId; let formData = this.buildFormData; let docId = formData.id; // 杩欓噷澶氬姞涓� 涓婁紶闄勪欢 debugger allData.fileList = this.fileList let document = allData; if (pJson) { //鎵嬪啓绛惧悕 document.signatureJson = JSON.stringify(pJson); } if (this.htmlExparams) { document.document.exparams = this.htmlExparams; } document.attitude = this.attitude; if (this.act.workFlowType == 1) { //鑷敱娴佺▼ document.nextUserId = this.nextUserId; delete document.currentNodeId; delete document.flowId; API.submitFreeFlow(appId, docId, document, { onSucess: (response) => { this.firstSubmission = true; let status; let prompt; if (response.data.errcode == 0) { status = "SUCCESS"; prompt = response.data.data; this.$notify({ title: prompt, message: "", type: "success", }); this.runAfterAction(status); } else if (response.data.errcode == 4001) { status = "ERROR"; this.$emit("closePopup", status); if (response.data.errors && response.data.errors.length > 0) { Toast({ message: response.data.errors[0].errmsg, iconClass: "fa fa-close fa-2x", }); } } }, }); } else { API.submitFlow(appId, docId, document, { onSucess: (response) => { this.firstSubmission = true; let status; let prompt; if (response.data.errcode == 0) { status = "SUCCESS"; prompt = response.data.data; this.$notify({ title: prompt, message: "", type: "success", }); this.runAfterAction(status); } else if (response.data.errcode == 4001) { status = "ERROR"; //this.$emit("closePopup", status); let prompt = response.data.errors[0].errmsg ? response.data.errors[0].errmsg : response.data.errmsg; this.$notify.error({ title: response.data.errmsg, message: prompt, }); } }, }); } }, //鎵ц鑴氭湰鍚� runAfterAction(status) { let appId = this.openParams.appId; let document = this.documentData; let isRelate = ""; let _flowType = this.act.flowType; //鎻愪氦涓�80 try { this.$api.submitRrunAfterActionScript( appId, this.act.id, document, document.docId, document.viewId, document.formId, document.templateForm, document.parentId, isRelate, _flowType, { onSucess: (response) => { if (response.data.errcode == 0 && !response.data.data) { // this.$notify({ // title: '鎴愬姛', // message: prompt, // type: 'success' // }); this.$emit("closePopup", status); } else if (response.data.errcode == 0 && response.data.data) { this.$notify({ title: response.data.data.content.content, message: "", type: "error", }); let sta = "ERROR"; let isClose = true; this.$emit("closePopup", sta, isClose); } let workflowOrder = sessionStorage.getItem("workflowOrder"); this.$store.dispatch("getPendingListWithWidget", {workflowOrder}); //娴佺▼鎻愪氦瀹屾瘯鍚庨椤垫祦绋嬪鐞唚idget鏁版嵁閲嶆柊鍒锋柊 this.$store.dispatch("getProcessedListWithWidget", {workflowOrder}); this.$store.commit("iscriptChanage") //娴佺▼鎻愪氦瀹屾瘯鍚庨椤佃绠楄剼鏈瑆idget鏁版嵁鏍规嵁閰嶇疆椤归噸鏂板埛鏂� }, } ); } catch (error) { console.log(error); } }, //闅愯棌灏忔剰瑙佹 hiddenSuggest() { console.log("闅愯棌灏忔剰瑙佹"); this.isOrSuggest = !this.isOrSuggest; }, changeDiv() { this.currentAct = !this.currentAct; }, //鑾峰彇杩斿洖鐨勬暟鎹� getSuggest() { // let userId = this.$store.state.userId; const employeeId = localStorage.getItem("employeeId") || this.$store.state.userId ; this.$api.getCommonOpinions( employeeId || this.$root.user.id, { onSucess: (response) => { this.allSuggests = response.data.data; }, }); }, //鑺傜偣鏁版嵁 getSubmission() { let op = this.openParams; let appId = op.appId; if (this.act && this.act.type == 47) { //娴佺▼鍥為€€ if (this.act.workFlowType == 1) { //鑷敱娴佺▼ let instanceId; for (let i = 0; i < this.approvers.length; i++) { instanceId = this.approvers[i].instanceId; } this.$api.getHisActorsFreeFlow(appId, instanceId, { onSucess: (response) => { this.backNodes = response.data.data; }, }); } else if (this.act.workFlowType == 0) { let formData = this.buildFormData; formData.stateId = this.stateId; let docId = formData.id, id = formData.id; let formId = ''; let templateForm = ''; if(op.realformId) {//濡傛灉鏄ā鏉胯〃鍗曪紝realformId鏄湡瀹瀎ormID锛岃€屼笉鏄痶emplateForm formId = op.realformId; formData.formId = op.realformId; templateForm = op.actionContent; }else { formId = formData.formId; } let document = { applicationId: appId, docId: docId, document: formData, formId: formId, id: id, parentId: "", templateForm, viewId: "", }; this.$api.getBackPanel(appId, docId, document, { onSucess: (response) => { this.backNodes = response.data.data.backNodes; this.selectBackNodes = this.backNodes[0].id; this.currentNodeId = response.data.data.currentNodeId; //褰撳墠鑺傜偣ID this.flowId = response.data.data.flowId; }, }); } } else { let formData = this.buildFormData; formData.stateId = this.stateId; let docId = formData.id, id = formData.id; let formId = ''; let templateForm = ''; if(op.realformId) {//濡傛灉鏄ā鏉胯〃鍗曪紝realformId鏄湡瀹瀎ormID锛岃€屼笉鏄痶emplateForm formId = op.realformId; formData.formId = op.realformId; templateForm = op.actionContent; }else { formId = formData.formId; templateForm = op.actionContent;//bcx-妯℃澘琛ㄥ崟 } let document = { applicationId: appId, docId: docId, document: formData, formId: formId, id: id, parentId: "", templateForm, viewId: "", }; console.log(document) API.getFlowPanel(appId, docId, document, { onSucess: (response) => { let nodesArr = response.data.data.nextNodes; this.isMoreCurrentNode = response.data.data.isMoreCurrentNode ? response.data.data.isMoreCurrentNode : ""; let min; for (let i = 0; i < nodesArr.length; i++) { for (let j = i; j < nodesArr.length; j++) { if (nodesArr[j].orderNum > -1) { if (nodesArr[i].orderNum > nodesArr[j].orderNum) { min = nodesArr[j]; nodesArr[j] = nodesArr[i]; nodesArr[i] = min; } } } } this.selectData = nodesArr; nodesArr.forEach((item) => { if (item.isToPerson) { this.isToPerson = item.isToPerson; } if(item.checkedOnMultiplePerson) { //褰撳悗鍙拌缃簡閫変腑涓嬩竴姝ュ鎵逛汉锛岄粯璁ら€変腑鍏ㄩ儴浜� let flowId = response.data.data.flowId, nodeId = item.id, type = 0, selectId = '', pageNum = 1, pageSize = 10; this.$api.getSelectApprovers( appId, docId, flowId, nodeId, type, encodeURIComponent(selectId), pageNum, pageSize, { onSucess: res => { let list = res.data.data.datas; let name = '', userids = ''; let submitTo = {}; if(list && list.length) { list.forEach(el => { name += el.name + ";"; userids += el.id + ";"; }); name = name.replace(/^(\s|;)+|(\s|;)+$/g, ''); userids = userids.replace(/^(\s|;)+|(\s|;)+$/g, ''); submitTo = { isToPerson: item.isToPerson, nodeid: item.id, userids: userids, row:res.data.data.datas, } item.approverName = name; item.submitTo = submitTo; // item.isARole = true; this.$forceUpdate(); } } } ); }else if(item.checkedOnSinglePerson) { //褰撳悗鍙拌缃簡涓嬩竴姝ュ鎵逛汉鍙湁涓€浜猴紝榛樿閫変腑璇ヤ汉鏃� let flowId = response.data.data.flowId, nodeId = item.id, type = 0, selectId = '', pageNum = 1, pageSize = 10; this.$api.getSelectApprovers( appId, docId, flowId, nodeId, type, encodeURIComponent(selectId), pageNum, pageSize, { onSucess: res => { let list = res.data.data.datas; let name = '', userids = ''; let submitTo = {}; if(list && list.length == 1) { list.forEach(el => { name += el.name + ";"; userids += el.id + ";"; }); name = name.replace(/^(\s|;)+|(\s|;)+$/g, ''); userids = userids.replace(/^(\s|;)+|(\s|;)+$/g, ''); submitTo = { isToPerson: item.isToPerson, nodeid: item.id, userids: userids } item.approverName = name; item.submitTo = submitTo; item.isARole = true; this.$forceUpdate(); } } } ); } }); this.isSplit = response.data.data.isSplit; this.currentNodeId = response.data.data.currentNodeId; //褰撳墠鑺傜偣ID this.isAppentCirculator = response.data.data.isAppentCirculator; //鏄惁鎶勯€�; this.flowId = response.data.data.flowId; if (this.isSplit) { //澶嶉€� this.nextNodeIds = []; this.selectData.forEach((item) => { if (item.checked == true) { this.nextNodeIds.push(item.id); } }); } else { //鍗曢€� this.selectData.every((item) => { if (item.checked == true) { this.nextNodeIds = item.id; } return false; }); } }, }); } }, }, }; </script> <style scoped> .upload_file { display: flex; /* align-items: center; */ margin-top: 50px; } .upload_file_title{ margin-top:5px; } </style>