{"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\\FlowConditionBuildDialog.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\src\\components\\flow\\FlowConditionBuildDialog.vue","mtime":1675071991788},{"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\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\n\r\nexport default {\r\n  components: {\r\n    FlowNodeCusersSelector,\r\n    eipOrgSelector,\r\n    eipJobSelector,\r\n    eipPostSelector,\r\n    FlowHrScriptSelector,\r\n  },\r\n  props: ['defId', 'value'],\r\n  data() {\r\n    return {\r\n      userConditionTab: 'first',\r\n      dialogVisible: false,\r\n      title: '条件脚本设置',\r\n      conditionList: [],\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: {\r\n        property: '',\r\n        operator: '1',\r\n        dataType: '',\r\n        value: '',\r\n        compType: '1',\r\n      },\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      varTree: [],\r\n      filedsObj: {},\r\n      scriptStr: '',\r\n      bindForm: true,\r\n    }\r\n  },\r\n  computed: mapState({\r\n    defConfigData: (state) => state.flow.defConfigData,\r\n  }),\r\n  methods: {\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    //构建svg图形页面\r\n    createSvgHtml(pathArr) {\r\n      this.svgHtml = ''\r\n      var html =\r\n        '<svg height=\"' +\r\n        this.svgHeight +\r\n        '\" version=\"1.1\" width=\"692\" xmlns=\"http://www.w3.org/2000/svg\" style=\"overflow: hidden; position: relative;\">'\r\n      for (var i = 0; i < pathArr.length; i++) {\r\n        html +=\r\n          '<path fill=\"none\" stroke=\"#787878\"' +\r\n          'd=\"' +\r\n          this.pathList[i] +\r\n          '\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path>'\r\n      }\r\n      html += '</svg>'\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      }\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 (type != 'cusers' && type != 'hrScript') {\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    hrScriptSelector: function (calc) {\r\n      let param = {...this.parentParam, calc: calc}\r\n      this.$refs.flowHrScriptSelector.showDilaog(param)\r\n    },\r\n    showDialog: function (param) {\r\n      param = param || {}\r\n      let this_ = this\r\n      this.svgHtml = ''\r\n      this.scriptStr = ''\r\n      req\r\n        .post(window.context.bpmModel + '/flow/node/v1/varTree', {\r\n          defId: this.defId,\r\n          removeSub: true,\r\n        })\r\n        .then(function (respose) {\r\n          let treeData = respose.data\r\n          if (\r\n            treeData &&\r\n            treeData.constructor == Array &&\r\n            treeData.length > 0\r\n          ) {\r\n            this_.conditionObj = {junction: 'and', condition: []}\r\n            this_.buildConditionTree(this_.conditionObj)\r\n            this_.buildVarTree(treeData)\r\n          } else if (treeData && treeData.constructor == Array) {\r\n            this_.$message.error('请先绑定业表单')\r\n            this_.bindForm = false\r\n          } else {\r\n            this_.$message.error('请求错误')\r\n          }\r\n          this_.dialogVisible = true\r\n        })\r\n    },\r\n    buildVarTree(treeData) {\r\n      var treeArr = []\r\n      for (var i = 0, t; (t = treeData[i++]); ) {\r\n        //处理表单变量\r\n        if (t && t.name == '表单变量') {\r\n          if (t.children) {\r\n            for (var j = 0, tChild; (tChild = t.children[j++]); ) {\r\n              if (tChild.children) {\r\n                for (var z = 0, cAttr; (cAttr = tChild.children[z++]); ) {\r\n                  var typeMoth =\r\n                    cAttr.dataType == 'number' ? '.getDouble' : '.getString'\r\n                  cAttr.pathStr =\r\n                    tChild.path + typeMoth + '(\"' + cAttr.name + '\")'\r\n                  this.filedsObj[cAttr.pathStr] = cAttr\r\n                }\r\n                treeArr.push(tChild)\r\n              }\r\n            }\r\n          }\r\n        } else if (t && t.name == 'url表单变量') {\r\n          if (t.children) {\r\n            for (var j = 0, tChild; (tChild = t.children[j++]); ) {\r\n              if (tChild.attrs) {\r\n                for (var z = 0, cAttr; (cAttr = tChild.attrs[z++]); ) {\r\n                  cAttr.path = tChild.formKey\r\n                  if (cAttr.dataType == 'number') {\r\n                    cAttr.pathStr =\r\n                      cAttr.path + '.getIntValue(\"' + cAttr.name + '\")'\r\n                  } else {\r\n                    cAttr.pathStr =\r\n                      cAttr.path + '.getString(\"' + cAttr.name + '\")'\r\n                  }\r\n                  this.filedsObj[cAttr.pathStr] = cAttr\r\n                }\r\n                tChild.children = tChild.attrs\r\n                tChild.desc = tChild.name\r\n                delete tChild.attrs\r\n                treeArr.push(tChild)\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n      if (treeArr.length > 0) {\r\n        this.varTree = treeArr\r\n      } else {\r\n        dialogService.fail('请先绑定业表单')\r\n        this_.bindForm = false\r\n      }\r\n    },\r\n    setFieldOtherInfo(ele, tab, type) {\r\n      let selectFiled = this.filedsObj[tab.property]\r\n      if (type == 1) {\r\n        tab.dataType = selectFiled.dataType\r\n        tab.format = selectFiled.format\r\n        tab.chooseDesc = selectFiled.desc\r\n        tab.value = ''\r\n      } else {\r\n        tab.changeDesc = selectFiled.desc\r\n      }\r\n    },\r\n    IsShowfiled(m, tab) {\r\n      if (!tab) return false\r\n      if (m.pathStr == tab.property) {\r\n        return false\r\n      } else if (m.dataType != tab.dataType) {\r\n        return false\r\n      }\r\n      return true\r\n    },\r\n    previewCondition(isConfirm) {\r\n      utils\r\n        .validateForm(this, 'form1')\r\n        .then((r) => {\r\n          if (!this.conditionObj) return\r\n          var data = this.getConditionStr(this.conditionObj)\r\n          data.conditionObj = JSON.stringify(this.conditionObj)\r\n          this.scriptStr = data.conditionString\r\n          if (isConfirm) {\r\n            this.$emit('input', this.scriptStr)\r\n            this.$emit('onConfirm', this.scriptStr)\r\n            this.dialogVisible = false\r\n          }\r\n        })\r\n        .catch((items) => {\r\n          this.$message.error(`还有内容未填写，无法生成表表达式。`)\r\n        })\r\n        .finally(() => {\r\n          this.loading = false\r\n        })\r\n    },\r\n    getConditionStr(obj) {\r\n      if (!obj || !obj.condition) return\r\n      var returnData = {}\r\n      var data = obj.condition\r\n      var res = ''\r\n      var desString = ''\r\n      for (var i = 0; i < data.length; i++) {\r\n        //第一节点的表达式\r\n        var curcondStr1 = ''\r\n        var curcondDes1 = ''\r\n        //如果第一节点有分支则计算\r\n        if (data[i].condition && data[i].condition.length > 0) {\r\n          curcondStr1 += '('\r\n          curcondDes1 += '('\r\n          for (var j = 0; j < data[i].condition.length; j++) {\r\n            //第二节点的表达式\r\n            var curcondStr2 = ''\r\n            var curcondDes2 = ''\r\n            //如果第三级节点有分支，则计算分支\r\n            if (\r\n              data[i].condition[j].condition &&\r\n              data[i].condition[j].condition.length > 0\r\n            ) {\r\n              curcondStr2 += '('\r\n              curcondDes2 += '('\r\n              var curcondStr3 = ''\r\n              var curcondDes3 = ''\r\n              for (var z = 0; z < data[i].condition[j].condition.length; z++) {\r\n                curcondStr3 = this.getConditionStrByObj(\r\n                  data[i].condition[j].condition[z]\r\n                )\r\n                curcondDes3 = this.getConditionStrByObj(\r\n                  data[i].condition[j].condition[z],\r\n                  'des'\r\n                )\r\n                if (curcondStr3 != '') {\r\n                  //循环拼接第三节点的条件\r\n                  if (z == 0) {\r\n                    //第一个不拼接运算符\r\n                    curcondStr2 += curcondStr3\r\n                    curcondDes2 += curcondDes3\r\n                  } else {\r\n                    curcondStr2 +=\r\n                      this.getjunction(data[i].condition[j].junction) +\r\n                      curcondStr3\r\n                    curcondDes2 +=\r\n                      this.getjunction(data[i].condition[j].junction) +\r\n                      curcondDes3\r\n                  }\r\n                }\r\n              }\r\n              curcondStr2 += ')'\r\n              curcondDes2 += ')'\r\n            } else if (data[i].condition[j].property) {\r\n              //第二节点没有分只\r\n              curcondStr2 = this.getConditionStrByObj(data[i].condition[j])\r\n              curcondDes2 = this.getConditionStrByObj(\r\n                data[i].condition[j],\r\n                'des'\r\n              )\r\n            }\r\n            if (curcondStr2 != '') {\r\n              //循环拼接第二节点的条件\r\n              if (j == 0) {\r\n                //第一个不拼接运算符\r\n                curcondStr1 += curcondStr2\r\n                curcondDes1 += curcondDes2\r\n              } else {\r\n                curcondStr1 += this.getjunction(data[i].junction) + curcondStr2\r\n                curcondDes1 += this.getjunction(data[i].junction) + curcondDes2\r\n              }\r\n            }\r\n          }\r\n          curcondStr1 += ')'\r\n          curcondDes1 += ')'\r\n        } else if (data[i].property) {\r\n          //第一节点没有分只\r\n          curcondStr1 = this.getConditionStrByObj(data[i])\r\n          curcondDes1 = this.getConditionStrByObj(data[i], 'des')\r\n        }\r\n        if (curcondStr1 != '') {\r\n          //循环拼接第一节点的条件\r\n          if (i == 0) {\r\n            //第一个不拼接运算符\r\n            res += curcondStr1\r\n            desString += curcondDes1\r\n          } else {\r\n            res += this.getjunction(obj.junction) + curcondStr1\r\n            desString += this.getjunction(obj.junction) + curcondDes1\r\n          }\r\n        }\r\n      }\r\n      returnData.conditionString = res\r\n      returnData.conditionDes = desString\r\n      return returnData\r\n    },\r\n    getjunction(str) {\r\n      var res = ''\r\n      switch (str) {\r\n        case 'and':\r\n          res = ' && '\r\n          break\r\n        case 'or':\r\n          res = ' || '\r\n          break\r\n      }\r\n      return res\r\n    },\r\n    getConditionStrByObj(obj, type) {\r\n      var res = ''\r\n      switch (obj.dataType) {\r\n        case 'varchar':\r\n          res = this.buildStringCondition(obj, type)\r\n          break\r\n        case 'date':\r\n          res = this.buildDateCondition(obj, type)\r\n          break\r\n        case 'number':\r\n          res = this.buildIntCondition(obj, type)\r\n          break\r\n      }\r\n      return res\r\n    },\r\n    buildDateCondition(obj, type) {\r\n      var value = obj.value\r\n      var valueDes = ''\r\n      var property = obj.property\r\n      let res = ''\r\n      if (obj.compType == 1) {\r\n        value = '\"' + obj.value + '\"'\r\n        valueDes = value\r\n      } else {\r\n        valueDes = obj.changeDesc\r\n      }\r\n      if (type == 'des') {\r\n        property = obj.chooseDesc\r\n        value = valueDes\r\n        switch (obj.operator) {\r\n          case '1':\r\n            res = property + '==' + value\r\n            break\r\n          case '2':\r\n            res = property + '!=' + value\r\n            break\r\n          case '3':\r\n            res = property + '>' + value\r\n            break\r\n          case '4':\r\n            res = property + '<' + value\r\n            break\r\n        }\r\n      } else {\r\n        switch (obj.operator) {\r\n          case '1':\r\n            res = 'scriptImpl.isDateEquals(' + property + ',' + value + ')'\r\n            break\r\n          case '2':\r\n            res = '!scriptImpl.isDateEquals(' + property + ',' + value + ')'\r\n            break\r\n          case '3':\r\n            res = 'scriptImpl.isDateLarge(' + property + ',' + value + ')'\r\n            break\r\n          case '4':\r\n            res = 'scriptImpl.isDateLittle(' + property + ',' + value + ')'\r\n            break\r\n          case '7':\r\n            res = 'scriptImpl.isDateLargeEquals(' + property + ',' + value + ')'\r\n            break\r\n          case '8':\r\n            res =\r\n              'scriptImpl.isDateLittleEquals(' + property + ',' + value + ')'\r\n            break\r\n          case '9':\r\n            res = 'scriptImpl.isDateBelongTo(' + property + ',' + value + ')'\r\n            break\r\n        }\r\n      }\r\n\r\n      return res\r\n    },\r\n    buildStringCondition(obj, type) {\r\n      var value = obj.value\r\n      var valueDes = ''\r\n      var property = obj.property\r\n      let res = ''\r\n      if (obj.compType == 1) {\r\n        value = '\"' + obj.value + '\"'\r\n        valueDes = value\r\n      } else {\r\n        valueDes = obj.changeDesc\r\n      }\r\n      if (type == 'des') {\r\n        property = obj.chooseDesc\r\n        value = valueDes\r\n        switch (obj.operator) {\r\n          case '1':\r\n            res = property + '==' + value\r\n            break\r\n          case '2':\r\n            res = property + '!=' + value\r\n            break\r\n          case '3':\r\n            res = property + '>' + value\r\n            break\r\n          case '4':\r\n            res = property + '<' + value\r\n            break\r\n          case '5':\r\n            res = property + 'contains' + value\r\n            break\r\n          case '6':\r\n            res = property + '! contains' + value\r\n            break\r\n        }\r\n      } else {\r\n        switch (obj.operator) {\r\n          case '1':\r\n            res = 'scriptImpl.equals(' + property + ',' + value + ')'\r\n            break\r\n          case '2':\r\n            res = '!scriptImpl.equals(' + property + ',' + value + ')'\r\n            break\r\n          case '3':\r\n            res = 'scriptImpl.LargeThen(' + property + ',' + value + ')'\r\n            break\r\n          case '4':\r\n            res = 'scriptImpl.littleThen(' + property + ',' + value + ')'\r\n            break\r\n          case '5':\r\n            res = 'scriptImpl.contains(' + property + ',' + value + ')'\r\n            break\r\n          case '6':\r\n            res = '!scriptImpl.contains(' + property + ',' + value + ')'\r\n            break\r\n          case '9':\r\n            res = 'scriptImpl.isStringBelongTo(' + property + ',' + value + ')'\r\n            break\r\n        }\r\n      }\r\n\r\n      return res\r\n    },\r\n    buildIntCondition(obj, type) {\r\n      var value = obj.value\r\n      var valueDes = ''\r\n      var property = obj.property\r\n      if (obj.compType == 1) {\r\n        value = obj.value\r\n        valueDes = value\r\n      } else {\r\n        valueDes = obj.changeDesc\r\n      }\r\n      if (type == 'des') {\r\n        property = obj.chooseDesc\r\n        value = valueDes\r\n      }\r\n      var res = ''\r\n      switch (obj.operator) {\r\n        case '1':\r\n          res = property + '==' + value\r\n          break\r\n        case '2':\r\n          res = property + '!=' + value\r\n          break\r\n        case '3':\r\n          res = property + '>' + value\r\n          break\r\n        case '4':\r\n          res = property + '<' + value\r\n          break\r\n        case '7':\r\n          res = property + '>=' + value\r\n          break\r\n        case '8':\r\n          res = property + '<=' + value\r\n          break\r\n        case '9':\r\n          // res = \"scriptImpl.isNumberBelongTo(\" + property + \",\\\"\" + value + \"\\\")\";\r\n          let valueArr = value.split(',')\r\n          res = `(${property}>=${valueArr[0]} && ${property}<=${valueArr[1]})`\r\n          break\r\n      }\r\n      return res\r\n    },\r\n    handleClose: function () {\r\n      utils\r\n        .validateForm(this, 'form1')\r\n        .then((r) => {\r\n          this.$message.success(JSON.stringify(this.data))\r\n        })\r\n        .catch((items) => {\r\n          this.$message.error(`还有内容未填写，无法生成表表达式。`)\r\n        })\r\n        .finally(() => {\r\n          this.loading = false\r\n        })\r\n    },\r\n    cuserSelectorConfirm(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    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        }\r\n      }\r\n      return isTrue\r\n    },\r\n    editCondition(tab) {\r\n      this.$message.error('研发中，敬请期待！')\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  },\r\n  created() {\r\n    this.$validator = this.$root.$validator\r\n  },\r\n}\r\n",null]}