{"remainingRequest":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xq-web-bpm\\src\\components\\flow\\FlowNodeUserCondition.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\src\\components\\flow\\FlowNodeUserCondition.vue","mtime":1675071991850},{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\r\nimport flow from '@/api/flow.js'\r\nimport req from '@/request.js'\r\nimport {mapState, mapActions} from 'vuex'\r\nimport FlowNodeCusersSelector from '@/components/flow/FlowNodeCusersSelector.vue'\r\nimport utils from '@/hotent-ui-util.js'\r\n\r\nconst eipRoleSelector = () =>\r\n import('@/components/selector/EipRoleSelector.vue')\r\nconst eipOrgSelector = () => import('@/components/selector/EipOrgSelector.vue')\r\nconst eipPostSelector = () =>\r\n import('@/components/selector/EipPostSelector.vue')\r\nconst eipJobSelector = () => import('@/components/selector/EipJobSelector.vue')\r\n\r\nconst FlowHrScriptSelector = () =>\r\n import('@/components/flow/FlowHrScriptSelector.vue')\r\nconst FlowCustomScriptSelector = () =>\r\n import('@/components/flow/FlowCustomScriptSelector.vue')\r\nconst FlowNodeUserRuleSelector = () =>\r\n import('@/components/flow/FlowNodeUserRuleSelector.vue')\r\nconst FlowCustomQuerySelector = () =>\r\n import('@/components/flow/FlowCustomQuerySelector.vue')\r\nconst FlowMatrixSelector = () =>\r\n import('@/components/flow/FlowMatrixSelector.vue')\r\nconst FlowNodePositionSelector = () =>\r\n import('@/components/flow/FlowNodePositionSelector.vue')\r\n\r\nexport default {\r\n components: {\r\n FlowNodeCusersSelector,\r\n eipRoleSelector,\r\n eipOrgSelector,\r\n eipJobSelector,\r\n eipPostSelector,\r\n FlowHrScriptSelector,\r\n FlowCustomScriptSelector,\r\n FlowNodeUserRuleSelector,\r\n FlowCustomQuerySelector,\r\n FlowMatrixSelector,\r\n FlowNodePositionSelector,\r\n },\r\n data() {\r\n return {\r\n userConditionTab: 'first',\r\n dialogVisible: false,\r\n title: '节点人员设置',\r\n userRule: {calcs: [], nodeType: ''},\r\n nodeList: [],\r\n conditionList: [],\r\n curNode: {},\r\n nodeUserPluginList: [],\r\n conditionObj: {},\r\n conditionName: '',\r\n pathList: [],\r\n data: {},\r\n branchList: [],\r\n tabList: [],\r\n Tree: [],\r\n svgHeight: '400px',\r\n defaultCondition: {ruleType: '2', conDesc: ''},\r\n Mleft: 50, //初始左边距50\r\n Mtop: 20, //初始上边距40\r\n XIncase: 100, //x轴递增数值70\r\n YIncase: 50, //y轴递增数据50\r\n svgHtml: '',\r\n curEditTab: {},\r\n }\r\n },\r\n computed: mapState({\r\n defConfigData: (state) => state.flow.defConfigData,\r\n }),\r\n methods: {\r\n isNotEmpty(val) {\r\n if (!val || val.length == 0) {\r\n return false\r\n }\r\n return true\r\n },\r\n //根据条件数组构建条件分支界面\r\n buildConditionTree(data) {\r\n let pathArr = []\r\n let tableArr = []\r\n let branchArr = []\r\n this.buildData(data, pathArr, tableArr, branchArr)\r\n this.pathList = pathArr\r\n this.branchList = branchArr\r\n this.tabList = tableArr\r\n //取路径最后一条数据,因为该条数据的高度距离顶部最大\r\n let lastPath = pathArr[pathArr.length - 1]\r\n let lastIndexArr = []\r\n if (lastPath) lastIndexArr = lastPath.split(',')\r\n //取最后一个坐标点。终点纵坐标为整个svg中最大的纵坐标\r\n let lastYIndex = lastIndexArr[lastIndexArr.length - 1]\r\n //设置svg的高度为最大纵坐标+100,从而实现svg页面高度自适应\r\n if (lastYIndex) {\r\n this.svgHeight = parseInt(lastYIndex) + 50 + 'px'\r\n }\r\n this.createSvgHtml(pathArr)\r\n },\r\n ArrayTool(ary, idx, direct) {\r\n direct = direct || 'down'\r\n let part = ary[idx]\r\n if (\r\n !part ||\r\n (part.constructor !== Object && part.constructor !== Array)\r\n ) {\r\n return ary\r\n }\r\n if (part.constructor === Object) {\r\n part = [part]\r\n }\r\n if (direct == 'up') {\r\n part.forEach((m) => {\r\n let index = ary.indexOf(m, 1)\r\n if (index > 0) {\r\n let t = ary[index - 1]\r\n ary.splice(index - 1, 1, ary[index])\r\n ary.splice(index, 1, t)\r\n }\r\n })\r\n } else if (direct == 'down') {\r\n for (var i = part.length - 1, m; (m = part[i--]); ) {\r\n let index = ary.indexOf(m, 0)\r\n if (index > -1 && index < ary.length - 1) {\r\n let t = ary[index + 1]\r\n ary.splice(index + 1, 1, ary[index])\r\n ary.splice(index, 1, t)\r\n }\r\n }\r\n }\r\n },\r\n //构建svg图形页面\r\n createSvgHtml(pathArr) {\r\n this.svgHtml = ''\r\n var html =\r\n ''\r\n for (var i = 0; i < pathArr.length; i++) {\r\n html +=\r\n ''\r\n }\r\n html += ''\r\n this.svgHtml = html\r\n },\r\n changecondition(index) {\r\n var oldVal = this.branchList[index].oldjunction\r\n var newVal = this.branchList[index].newjunction\r\n if (newVal == '3' || newVal == '4' || newVal == '5') {\r\n this.branchList[index].newjunction = this.branchList[index].oldjunction\r\n var indexStr = this.branchList[index].indexStr\r\n if (newVal == '3') {\r\n this.addCondition(indexStr)\r\n } else if (newVal == '4') {\r\n this.addUnionCondition(indexStr)\r\n } else {\r\n this.$confirm(\r\n '确定要删除此联合条件及其下属的所有子条件吗?',\r\n '提示',\r\n {\r\n cancelButtonText: '取消',\r\n confirmButtonText: '确定',\r\n type: 'warning',\r\n closeOnClickModal: false,\r\n }\r\n ).then(() => {\r\n this.removeCondition(indexStr)\r\n })\r\n }\r\n } else {\r\n this.branchList[index].oldjunction = this.branchList[index].newjunction\r\n var indexStr = this.branchList[index].indexStr\r\n var indexArr = indexStr.split(',')\r\n if (indexStr == 'root') {\r\n this.conditionObj.junction = newVal\r\n } else if (indexArr.length == 1) {\r\n this.conditionObj.condition[indexStr].junction = newVal\r\n } else if (indexArr.length == 2) {\r\n this.conditionObj.condition[indexArr[0]].condition[\r\n indexArr[1]\r\n ].junction = newVal\r\n }\r\n }\r\n },\r\n //添加一个联合\r\n addCondition(indexStr) {\r\n var data = this.conditionObj.condition\r\n if (indexStr == 'root') {\r\n data.push(JSON.parse(JSON.stringify(this.defaultCondition)))\r\n } else {\r\n var indexArr = []\r\n if (indexStr) indexArr = indexStr.split(',')\r\n for (var i = 0; i < data.length; i++) {\r\n if (indexArr.length > 0 && i == indexArr[0]) {\r\n if (indexArr.length > 1) {\r\n for (var j = 0; j < data[i].condition.length; j++) {\r\n if (j == indexArr[1]) {\r\n data[i].condition[j].condition.push(\r\n JSON.parse(JSON.stringify(this.defaultCondition))\r\n )\r\n break\r\n }\r\n }\r\n } else {\r\n data[i].condition.push(\r\n JSON.parse(JSON.stringify(this.defaultCondition))\r\n )\r\n }\r\n break\r\n }\r\n }\r\n }\r\n this.conditionObj.condition = data\r\n this.buildConditionTree(this.conditionObj)\r\n },\r\n removeCondition(indexStr) {\r\n var indexArr = []\r\n if (indexStr) indexArr = indexStr.split(',')\r\n if (indexArr.length > 0) {\r\n var data = this.conditionObj.condition\r\n for (var i = 0; i < data.length; i++) {\r\n if (i == indexArr[0]) {\r\n if (indexArr.length > 1) {\r\n for (var j = 0; j < data[i].condition.length; j++) {\r\n if (j == indexArr[1]) {\r\n if (indexArr.length > 2) {\r\n for (\r\n var z = 0;\r\n z < data[i].condition[j].condition.length;\r\n z++\r\n ) {\r\n if (z == indexArr[2]) {\r\n data[i].condition[j].condition.splice(z, 1)\r\n break\r\n }\r\n }\r\n } else {\r\n data[i].condition.splice(j, 1)\r\n }\r\n break\r\n }\r\n }\r\n } else {\r\n data.splice(i, 1)\r\n }\r\n break\r\n }\r\n }\r\n this.conditionObj.condition = data\r\n this.buildConditionTree(this.conditionObj)\r\n }\r\n },\r\n //添加一个联合条件条件\r\n addUnionCondition(indexStr) {\r\n var data = this.conditionObj.condition\r\n if (indexStr == 'root') {\r\n data.push({junction: 'or', condition: []})\r\n } else {\r\n var indexArr = []\r\n if (indexStr) indexArr = indexStr.split(',')\r\n for (var i = 0; i < data.length; i++) {\r\n if (indexArr.length > 0 && i == indexArr[0]) {\r\n if (indexArr.length > 1) {\r\n for (var j = 0; j < data[i].condition.length; j++) {\r\n if (j == indexArr[1]) {\r\n data[i].condition[j].condition.push({\r\n junction: 'or',\r\n condition: [],\r\n })\r\n break\r\n }\r\n }\r\n } else {\r\n data[i].condition.push({junction: 'or', condition: []})\r\n }\r\n break\r\n }\r\n }\r\n }\r\n this.conditionObj.condition = data\r\n this.buildConditionTree(this.conditionObj)\r\n },\r\n buildData(conditionData, pathArr, tableArr, branchArr) {\r\n let curYIndex = 0\r\n let data = conditionData.condition\r\n //算三级节点总共分支个数\r\n let yIncaseNum =\r\n this.getyIncaseNum(conditionData.condition) > 1\r\n ? this.getyIncaseNum(conditionData.condition)\r\n : 1\r\n //第一个节点 this.Mtop 最后一个节点Mtop+this.YIncase*(yIncaseNum-1)\r\n let startY1 = (this.Mtop * 2 + this.YIncase * (yIncaseNum - 1)) / 2\r\n\r\n branchArr.push({\r\n newjunction: conditionData.junction,\r\n oldjunction: conditionData.junction,\r\n style: 'left:' + (this.Mleft - 35) + 'px; top:' + (startY1 - 15) + 'px',\r\n indexStr: 'root',\r\n condition: 'noDel',\r\n })\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].condition) {\r\n var curchildNum = this.getyIncaseNum(data[i].condition)\r\n //如果该节点,没有分支条件,则保留节点\r\n var isEmpty0 = false\r\n if (curchildNum < 1) {\r\n curchildNum = 1\r\n isEmpty0 = true\r\n }\r\n //计算一级节点和该节点的连线\r\n var startY2 =\r\n (this.Mtop * 2 + this.YIncase * (2 * curYIndex + curchildNum - 1)) /\r\n 2\r\n var path =\r\n 'M' +\r\n this.Mleft +\r\n ',' +\r\n startY1 +\r\n 'C' +\r\n this.Mleft +\r\n ',' +\r\n startY2 +\r\n ',' +\r\n this.Mleft +\r\n ',' +\r\n startY2 +\r\n ',' +\r\n (this.Mleft + this.XIncase) +\r\n ',' +\r\n startY2\r\n pathArr.push(path)\r\n branchArr.push({\r\n newjunction: data[i].junction,\r\n oldjunction: data[i].junction,\r\n style:\r\n 'left:' +\r\n (this.Mleft + this.XIncase - 35) +\r\n 'px; top:' +\r\n (startY2 - 15) +\r\n 'px',\r\n indexStr: '' + i,\r\n })\r\n if (isEmpty0) curYIndex++\r\n\r\n for (var j = 0; j < data[i].condition.length; j++) {\r\n //如果第三级节点有分支,则计算分支\r\n if (data[i].condition[j].condition) {\r\n //计算改节点分支个数\r\n let curchildNum2 = this.getyIncaseNum(\r\n data[i].condition[j].condition\r\n )\r\n //如果该节点,没有分支条件,则保留节点,默认其占一行\r\n let isEmpty = false\r\n if (curchildNum2 < 1) {\r\n curchildNum2 = 1\r\n isEmpty = true\r\n }\r\n // 改分支第一个节点纵坐标= this.Mtop+this.YIncase*curYIndex 上一个节点纵坐标加上递增值\r\n // 改分支最后节点纵坐标=改分支第一个节点纵坐标 +计算改节点分支个数*y递增值 this.Mtop+this.YIncase*curYIndex+this.YIncase*(curchildNum2-1)\r\n // 计算改节点的纵坐标。(改分支第一个节点纵坐标+该分支的最后一个纵坐标)/2\r\n // 该节点起始点纵坐标= this.Mtop+this.YIncase*curYIndex+ this.Mtop+this.YIncase*curYIndex+this.YIncase*(curchildNum2-1)\r\n let startY3 =\r\n (this.Mtop * 2 +\r\n this.YIncase * (2 * curYIndex + curchildNum2 - 1)) /\r\n 2\r\n //改分支指引线的终点的纵坐标等于startY2\r\n let path =\r\n 'M' +\r\n (this.Mleft + this.XIncase) +\r\n ',' +\r\n startY2 +\r\n 'C' +\r\n (this.Mleft + this.XIncase) +\r\n ',' +\r\n startY3 +\r\n ',' +\r\n (this.Mleft + this.XIncase) +\r\n ',' +\r\n startY3 +\r\n ',' +\r\n (this.Mleft + this.XIncase * 2) +\r\n ',' +\r\n startY3\r\n pathArr.push(path)\r\n branchArr.push({\r\n newjunction: data[i].condition[j].junction,\r\n oldjunction: data[i].condition[j].junction,\r\n style:\r\n 'left:' +\r\n (this.Mleft + this.XIncase * 2 - 35) +\r\n 'px; top:' +\r\n (startY3 - 15) +\r\n 'px',\r\n indexStr: i + ',' + j,\r\n condition: 'noAdd',\r\n })\r\n if (isEmpty) {\r\n curYIndex++\r\n }\r\n for (let z = 0; z < data[i].condition[j].condition.length; z++) {\r\n let obj = data[i].condition[j].condition[z]\r\n obj.style =\r\n 'left:' +\r\n (this.Mleft + this.XIncase * 3) +\r\n 'px; top:' +\r\n (this.Mtop + this.YIncase * curYIndex - 19) +\r\n 'px'\r\n obj.indexStr = i + ',' + j + ',' + z\r\n tableArr.push(obj)\r\n //改分支下所有节点的起始纵坐标为startY3,终点纵坐标根据该节点位置决定\r\n let path =\r\n 'M' +\r\n (this.Mleft + this.XIncase * 2) +\r\n ',' +\r\n startY3 +\r\n 'C' +\r\n (this.Mleft + this.XIncase * 2) +\r\n ',' +\r\n (this.Mtop + this.YIncase * curYIndex) +\r\n ',' +\r\n (this.Mleft + this.XIncase * 2) +\r\n ',' +\r\n (this.Mtop + this.YIncase * curYIndex) +\r\n ',' +\r\n (this.Mleft + this.XIncase * 3) +\r\n ',' +\r\n (this.Mtop + this.YIncase * curYIndex)\r\n pathArr.push(path)\r\n curYIndex++\r\n }\r\n } else {\r\n //第二级节点没有分支\r\n let obj = data[i].condition[j]\r\n obj.style =\r\n 'left:' +\r\n (this.Mleft + this.XIncase * 2) +\r\n 'px; top:' +\r\n (this.Mtop + this.YIncase * curYIndex - 19) +\r\n 'px'\r\n obj.indexStr = i + ',' + j\r\n tableArr.push(obj)\r\n //计算改分支的路径。因为是第二节点。startY2\r\n let path =\r\n 'M' +\r\n (this.Mleft + this.XIncase) +\r\n ',' +\r\n startY2 +\r\n 'C' +\r\n (this.Mleft + this.XIncase) +\r\n ',' +\r\n (this.Mtop + this.YIncase * curYIndex) +\r\n ',' +\r\n (this.Mleft + this.XIncase) +\r\n ',' +\r\n (this.Mtop + this.YIncase * curYIndex) +\r\n ',' +\r\n (this.Mleft + this.XIncase * 2) +\r\n ',' +\r\n (this.Mtop + this.YIncase * curYIndex)\r\n pathArr.push(path)\r\n curYIndex++\r\n }\r\n }\r\n } else {\r\n let obj = data[i]\r\n obj.style =\r\n 'left:' +\r\n (this.Mleft + this.XIncase) +\r\n 'px; top:' +\r\n (this.Mtop + this.YIncase * curYIndex - 19) +\r\n 'px'\r\n obj.indexStr = '' + i\r\n tableArr.push(obj)\r\n let path =\r\n 'M' +\r\n this.Mleft +\r\n ',' +\r\n startY1 +\r\n 'C' +\r\n this.Mleft +\r\n ',' +\r\n (this.Mtop + this.YIncase * curYIndex) +\r\n ',' +\r\n this.Mleft +\r\n ',' +\r\n (this.Mtop + this.YIncase * curYIndex) +\r\n ',' +\r\n (this.Mleft + this.XIncase) +\r\n ',' +\r\n (this.Mtop + this.YIncase * curYIndex)\r\n pathArr.push(path)\r\n curYIndex++\r\n }\r\n }\r\n },\r\n //获取条件总数\r\n getyIncaseNum(data) {\r\n var sum = 0\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].condition && data[i].condition.length > 0) {\r\n for (var j = 0; j < data[i].condition.length; j++) {\r\n if (\r\n data[i].condition[j].condition &&\r\n data[i].condition[j].condition.length > 0\r\n ) {\r\n for (var z = 0; z < data[i].condition[j].condition.length; z++) {\r\n sum++\r\n }\r\n } else {\r\n sum++\r\n }\r\n }\r\n } else {\r\n sum++\r\n }\r\n }\r\n return sum\r\n },\r\n calcTypeChange: function (calc) {\r\n calc.description = ''\r\n if (calc.pluginType == 'approver') {\r\n //流程实例审批人,在此处设置description\r\n calc.description = '流程实例审批人'\r\n } else if (calc.pluginType == 'depHead') {\r\n //部门负责人审批人,在此处设置description\r\n calc.description = '部门负责人'\r\n } else if (calc.pluginType == 'position') {\r\n calc.source = 'spec'\r\n }\r\n },\r\n addCalc: function () {\r\n this.userRule.calcs.push({\r\n pluginType: 'cusers',\r\n extract: 'no',\r\n logicCal: 'or',\r\n source: 'start',\r\n vars: '',\r\n description: '发起人',\r\n nodeType: this.userRule.nodeType,\r\n parentParam: {},\r\n curEditIndex: '',\r\n })\r\n },\r\n selector: function (index) {\r\n this.curEditIndex = index\r\n let calc = this.userRule.calcs[index]\r\n let type = calc.pluginType\r\n if (\r\n type != 'cusers' &&\r\n type != 'hrScript' &&\r\n type != 'customQuery' &&\r\n type != 'matrix' &&\r\n type != 'position'\r\n ) {\r\n this.$message.error('没有其他类型的选择器,暂时只能选用户')\r\n return\r\n }\r\n eval('this.' + calc.pluginType + 'Selector(calc);')\r\n },\r\n cusersSelector: function (calc) {\r\n let param = {...this.parentParam, calc: calc}\r\n this.$refs.flowNodeCusersSelector.showDialog(param)\r\n },\r\n positionSelector: function (calc) {\r\n let param = {...this.parentParam, calc: calc}\r\n this.$refs.flowNodePositionSelector.showDialog(param)\r\n },\r\n hrScriptSelector: function (calc) {\r\n let param = {...this.parentParam, calc: calc}\r\n this.$refs.flowHrScriptSelector.showDilaog(param)\r\n },\r\n matrixSelector: function (calc) {\r\n let param = {...this.parentParam, calc: calc}\r\n this.$refs.flowMatrixSelector.showDilaog(param)\r\n },\r\n customQuerySelector: function (calc) {\r\n let param = {...this.parentParam, calc: calc}\r\n this.$refs.flowCustomQuerySelector.showDilaog(param)\r\n },\r\n showDialog: function (param) {\r\n this.parentParam = param\r\n this.nodeList = []\r\n if (param.nodeId) {\r\n for (const node of this.defConfigData.nodeSetData.nodes) {\r\n if (node.nodeId == param.nodeId) {\r\n this.curNode = node\r\n } else {\r\n if (node.type == 'signTask' || node.type == 'userTask') {\r\n this.nodeList.push(node)\r\n }\r\n }\r\n }\r\n if (this.curNode.name) {\r\n this.title = '【' + this.curNode.name + '】节点人员设置'\r\n }\r\n }\r\n if (param.userRule) {\r\n param.userRule.nodeType = this.curNode.type\r\n this.userRule = param.userRule\r\n } else {\r\n this.userRule = {calcs: [], nodeType: this.curNode.type}\r\n }\r\n\r\n let this_ = this\r\n req\r\n .get(\r\n window.context.bpmModel +\r\n '/flow/node/usercalc/v1/getNodeUserPluginList'\r\n )\r\n .then(function (respose) {\r\n let data = respose.data\r\n this_.nodeUserPluginList = data\r\n //配置节点人员不显示可以选择【脚本】功能\r\n for (var i = 0; i < this_.nodeUserPluginList.length; i++) {\r\n if (this_.nodeUserPluginList[i].title == '脚本') {\r\n this_.nodeUserPluginList.splice(i, 1)\r\n break\r\n }\r\n }\r\n this_.conditionObj = {}\r\n if (param && param.userRule && param.userRule.condition) {\r\n //初始化\r\n if (typeof param.userRule.condition == 'string') {\r\n this_.conditionObj = JSON.parse(param.userRule.condition)\r\n } else {\r\n this_.conditionObj = JSON.parse(\r\n JSON.stringify(param.userRule.condition)\r\n )\r\n }\r\n } else {\r\n this_.conditionObj = {junction: 'and', condition: []}\r\n }\r\n this_.buildConditionTree(this_.conditionObj)\r\n })\r\n this.dialogVisible = true\r\n },\r\n handleClose: function () {\r\n var r = {}\r\n if (\r\n !this.userRule.calcs ||\r\n this.userRule.calcs.length == 0 ||\r\n !this.validateData(this.userRule.calcs)\r\n ) {\r\n this.$message.error('请设置节点审批人员!')\r\n return false\r\n }\r\n\r\n let conditionJson = JSON.stringify(this.conditionObj)\r\n r.condition = conditionJson\r\n r.conditionMode = ''\r\n r.name = ''\r\n r.nodeType = this.userRule.nodeType\r\n r.parentFlowKey = ''\r\n r.calcs = this.userRule.calcs\r\n //拼装描述\r\n r.description = ''\r\n for (const c of r.calcs) {\r\n switch (c.pluginType) {\r\n case 'org':\r\n c.description = '[部门]' + c.orgName\r\n break\r\n case 'position':\r\n c.description = '[岗位]' + c.posName\r\n break\r\n case 'job':\r\n c.description = '[职务]' + c.jobName\r\n break\r\n case 'role':\r\n c.description = '[角色]' + c.roleName\r\n break\r\n }\r\n if (r.description) {\r\n if (c.logicCal == 'or') {\r\n r.description += '(或)'\r\n } else if (c.logicCal == 'and') {\r\n r.description += '(与)'\r\n } else {\r\n r.description += '(非)'\r\n }\r\n }\r\n r.description += c.description\r\n }\r\n this.$emit('nodeUserConditionConfirm', r)\r\n this.dialogVisible = false\r\n },\r\n cuserSelectorConfirm(selection) {\r\n this.userRule.calcs.splice(this.curEditIndex, 1, selection)\r\n },\r\n positionSelectorConfirm(selection) {\r\n this.userRule.calcs.splice(this.curEditIndex, 1, selection)\r\n },\r\n scriptSelectorConfirm(selection) {\r\n let calcs = {...this.userRule.calcs[this.curEditIndex], ...selection}\r\n calcs.description = '[人员脚本]' + selection.desc\r\n calcs.scriptId = selection.scriptId\r\n this.userRule.calcs.splice(this.curEditIndex, 1, calcs)\r\n },\r\n customQuerySelectorConfirm(selection) {\r\n let calcs = {...this.userRule.calcs[this.curEditIndex], ...selection}\r\n calcs.description = '[关联查询]' + selection.desc\r\n calcs.alias = selection.alias\r\n calcs.name = selection.name\r\n this.userRule.calcs.splice(this.curEditIndex, 1, calcs)\r\n },\r\n matrixSelectorConfirm(selection) {\r\n let calcs = {...this.userRule.calcs[this.curEditIndex], ...selection}\r\n calcs.description = '[角色矩阵]' + selection.desc\r\n calcs.code = selection.code\r\n calcs.name = selection.name\r\n this.userRule.calcs.splice(this.curEditIndex, 1, calcs)\r\n },\r\n validateData(calcs) {\r\n let isTrue = true\r\n for (var i = 0; i < calcs.length; i++) {\r\n switch (calcs[i].pluginType) {\r\n case 'script':\r\n case 'hrScript':\r\n if (!calcs[i].script) isTrue = false\r\n break\r\n case 'sameNode':\r\n if (!calcs[i].nodeId) isTrue = false\r\n break\r\n case 'cusers':\r\n if (!calcs[i].description) isTrue = false\r\n break\r\n case 'org':\r\n if (!calcs[i].orgCode) isTrue = false\r\n break\r\n case 'job':\r\n if (!calcs[i].jobCode) isTrue = false\r\n break\r\n case 'role':\r\n if (!calcs[i].roleCode) isTrue = false\r\n break\r\n }\r\n }\r\n return isTrue\r\n },\r\n customScriptSelectorConfirm(result) {\r\n this.curEditTab.script = result\r\n this.curEditTab.conDesc = result\r\n },\r\n customRuleSelectorConfirm(result) {\r\n this.curEditTab.conDesc = result.conDesc\r\n this.curEditTab.executorVar = result.executorVar\r\n this.curEditTab.expression = result.expression\r\n this.curEditTab.dataType = result.dataType\r\n },\r\n editCondition(tab) {\r\n this.curEditTab = tab\r\n if (tab.ruleType == 2) {\r\n this.$refs.flowCustomScriptSelector.showDialog(tab.script || '')\r\n } else {\r\n this.$refs.flowNodeUserRuleSelector.showDialog(tab)\r\n }\r\n\r\n return\r\n var pageParam = $scope.$parent.pageParam.passConf\r\n if (tab.ruleType == 2) {\r\n pageParam.script = tab.script\r\n dialogService\r\n .page('flow-customScript', {\r\n area: ['800px', '480px'],\r\n pageParam: pageParam,\r\n })\r\n .then(function (result) {\r\n tab.script = result\r\n tab.conDesc = result\r\n })\r\n } else {\r\n pageParam.data = angular.copy(tab)\r\n dialogService\r\n .page('flow-varDailog', {\r\n area: ['800px', '480px'],\r\n pageParam: pageParam,\r\n })\r\n .then(function (result) {\r\n tab.conDesc = result.conDesc\r\n tab.executorVar = result.executorVar\r\n tab.expression = result.expression\r\n tab.dataType = result.dataType\r\n })\r\n }\r\n },\r\n changeSameNode(calc) {\r\n this.nodeList.forEach((node) => {\r\n if (node.nodeId == calc.nodeId) {\r\n calc.description = '[节点]' + node.name\r\n }\r\n })\r\n },\r\n },\r\n}\r\n",null]}