{"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\\form\\dataTemplate\\ManageSetting.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\src\\components\\form\\dataTemplate\\ManageSetting.vue","mtime":1675071992163},{"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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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\nconst eipAuthDialog = () => import('@/components/dialog/EipAuthDialog.vue')\r\nconst ImportJarSelector = () =>\r\n  import('@/components/form/dataTemplate/ImportCheckJarManager.vue')\r\nconst flowFormAuth = () => import('@/components/flow/FlowFormAuth.vue')\r\nimport {mapState} from 'vuex'\r\nimport {Base64} from 'js-base64'\r\nimport utils from '@/hotent-ui-util.js'\r\nimport deepmerge from 'deepmerge'\r\nconst BTN_TYPE = {\r\n  isShow: '1',\r\n  notShow: '2',\r\n}\r\nexport default {\r\n  components: {\r\n    eipAuthDialog,\r\n    ImportJarSelector,\r\n    flowFormAuth,\r\n  },\r\n  name: 'manage-setting',\r\n  props: ['data'],\r\n  data() {\r\n    return {\r\n      btnType: BTN_TYPE,\r\n      dialogVisible: false,\r\n      dialogModel: {},\r\n      url: {},\r\n      dataTemplate: {},\r\n      manageFields: [],\r\n      permissionMap: {},\r\n      permissionList: [],\r\n      displayExportSettingFields: [],\r\n      exportSettingFields: [],\r\n      customQuerys: [],\r\n      customDialogs: [],\r\n      displayField: [],\r\n      btnoptions: [],\r\n      defaultBtnOptions: [\r\n        {key: 'add', value: '新增', disabled: false},\r\n        {key: 'edit', value: '编辑', disabled: false},\r\n        {key: 'del', value: '删除', disabled: false},\r\n        {key: 'detail', value: '明细', disabled: false},\r\n        {key: 'record', value: '修改记录', disabled: false},\r\n        {key: 'printDetail', value: '打印明细', disabled: false},\r\n        {key: 'sub', value: '子表数据', disabled: false},\r\n        {key: 'sun', value: '查看孙表', disabled: false},\r\n        {key: 'export', value: '导出', disabled: false},\r\n        {key: 'js', value: 'js按钮', disabled: false},\r\n        {\r\n          key: 'import',\r\n          value: '导入',\r\n          limit: 1000,\r\n          importTemplate: [],\r\n          jarId: '',\r\n          jarDesc: '',\r\n          disabled: false,\r\n        },\r\n        {key: 'produceQRCode', value: '生成二维码', disabled: false},\r\n        {key: 'print', value: '打印', disabled: false},\r\n        {key: 'url', value: 'URL按钮', disabled: false},\r\n        {key: 'switch', value: '开关', disabled: false},\r\n        {key: 'batchUpdate', value: '更新数据', disabled: false},\r\n      ],\r\n      tabHeight: `${document.documentElement.clientHeight}` - 280,\r\n      currentAuthRow: null,\r\n      dialogTitle: '',\r\n      switchOn: '',\r\n      switchOff: '',\r\n      switchDefaultTrue: false,\r\n      switchOptions: [\r\n        {\r\n          value: true,\r\n          label: '默认为开',\r\n        },\r\n        {\r\n          value: false,\r\n          label: '默认为关',\r\n        },\r\n      ],\r\n      switchOnLabel: '',\r\n      switchOffLabel: '',\r\n      files: [],\r\n      curSelectIndex: 0,\r\n      diyScript: '',\r\n      index: 0,\r\n      dialogMethodVisible: false,\r\n      dialogRuleData: '',\r\n      displaySettingFields: [],\r\n      cmOptions: {\r\n        value: '',\r\n        mode: 'javascript',\r\n        readOnly: false,\r\n        smartIndent: true,\r\n        tabSize: 1,\r\n        theme: 'base16-light',\r\n        lineNumbers: true,\r\n        line: true,\r\n        lineWiseCopyCut: true,\r\n        showCursorWhenSelecting: true,\r\n      },\r\n      outvalueTypeList: [\r\n        {key: 'input', value: '文本框'},\r\n        {key: 'data', value: '日期'},\r\n        {key: 'number', value: '数字'},\r\n        {key: 'select', value: '下拉框'},\r\n        {key: 'dialog', value: '对话框'},\r\n        {key: 'user', value: '用户选择器'},\r\n        {key: 'org', value: '组织选择器'},\r\n        {key: 'post', value: '岗位选择器'},\r\n        {key: 'job', value: '职位选择器'},\r\n        {key: 'dem', value: '维度选择器'},\r\n        {key: 'role', value: '角色选择器'},\r\n      ],\r\n      batchUpdateVisible: false,\r\n      exportUpdateVisible: false,\r\n      batchUpdateData: [],\r\n      outConfig: {\r\n        choiceType: 'static',\r\n        parameter: {},\r\n        selectData: [],\r\n        customQuery: {alias: '', valueBind: '', labelBind: ''},\r\n        dialogConfig: {name: '请选择'},\r\n      },\r\n      outIndex: '',\r\n      outValueTypeVisible: false,\r\n      filedsObj: {},\r\n      refreshTime: new Date().getTime(),\r\n    }\r\n  },\r\n  watch: {\r\n    'data.bpmDataTemplate.subject': function (newVal) {\r\n      //判断是否绑定了流程，绑定了流程功能按钮可以选择发起流程按钮\r\n      if (newVal) {\r\n        this.btnoptions.push({\r\n          key: 'startFlow',\r\n          value: '发起流程',\r\n          disabled: false,\r\n        })\r\n        this.defaultBtnOptions.push({\r\n          key: 'startFlow',\r\n          value: '发起流程',\r\n          disabled: false,\r\n        })\r\n      } else {\r\n        this.btnoptions = this.btnoptions.filter((b) => b.key != 'startFlow')\r\n        this.defaultBtnOptions = this.btnoptions.filter(\r\n          (b) => b.key != 'startFlow'\r\n        )\r\n        this.manageFields = this.manageFields.filter(\r\n          (f) => f.name != 'startFlow'\r\n        )\r\n      }\r\n    },\r\n    deep: true,\r\n    immediate: true,\r\n  },\r\n  computed: mapState({\r\n    header: (state) => {\r\n      return {Authorization: `Bearer ${state.login.currentUser.token}`}\r\n    },\r\n    actionUrl: function () {\r\n      return window.context.portal + '/file/v1/upload'\r\n    },\r\n  }),\r\n  mounted() {\r\n    this.dataTemplate = this.data.bpmDataTemplate\r\n    if (this.data.displaySettingFields) {\r\n      this.displaySettingFields = JSON.parse(\r\n        this.data.displaySettingFields\r\n      ).filter((item) => {\r\n        return item.isFlowField != true\r\n      })\r\n      this.displayExportSettingFields = deepmerge(\r\n        {},\r\n        this.displaySettingFields,\r\n        {clone: true}\r\n      )\r\n    }\r\n    //判断是否绑定了流程，绑定了流程功能按钮可以选择发起流程按钮\r\n    if (this.data.bpmDataTemplate.subject) {\r\n      this.btnoptions.push({\r\n        key: 'startFlow',\r\n        value: '发起流程',\r\n        disabled: false,\r\n      })\r\n      this.defaultBtnOptions.push({\r\n        key: 'startFlow',\r\n        value: '发起流程',\r\n        disabled: false,\r\n      })\r\n    }\r\n    this.manageFields = this.dataTemplate.manageField\r\n      ? JSON.parse(this.dataTemplate.manageField)\r\n      : []\r\n    this.displayField = this.dataTemplate.displayField\r\n      ? JSON.parse(this.dataTemplate.displayField)\r\n      : []\r\n\r\n    this.permissionMap = this.data.permissionList\r\n    if (this.permissionMap) {\r\n      for (let key in this.permissionMap) {\r\n        this.permissionList.push({type: key, title: this.permissionMap[key]})\r\n      }\r\n      this.displaySettingFields.forEach((item) => {\r\n        this.filedsObj[item.name] = item.desc\r\n      })\r\n    }\r\n    const manageFields = JSON.parse(this.dataTemplate.manageField)\r\n    const alreadyAddedFields = new Map()\r\n    if (manageFields) {\r\n      manageFields.forEach((manageField) => {\r\n        alreadyAddedFields.set(manageField.name, manageField.name)\r\n        this.defaultBtnOptions.forEach((btn) => {\r\n          if (\r\n            manageField.name === btn.key &&\r\n            !(\r\n              btn.key == 'js' ||\r\n              btn.key == 'url' ||\r\n              btn.key == 'switch' ||\r\n              btn.key == 'batchUpdate'\r\n            )\r\n          ) {\r\n            btn.disabled = true\r\n          }\r\n        })\r\n      })\r\n    }\r\n    this.btnoptions = this.defaultBtnOptions.filter(\r\n      (btn) => !alreadyAddedFields.has(btn.key)\r\n    )\r\n  },\r\n  methods: {\r\n    isDisabled(row) {\r\n      return row\r\n        ? row.name != 'add' &&\r\n            row.name != 'edit' &&\r\n            row.name != 'detail' &&\r\n            row.name != 'del'\r\n        : false\r\n    },\r\n    btnChange(row) {\r\n      this.$set(row, 'mpDisplay', row.mpDisplay === '1' ? '2' : '1')\r\n    },\r\n    diyScriptChange(myValue) {\r\n      var cm = this.$refs.scriptText.codemirror\r\n      var doc = cm.getDoc()\r\n      var cursor = doc.getCursor() //gets the line number in the cursor position\r\n      var line = doc.getLine(cursor.line) //get the line contents\r\n      var pos = {\r\n        line: cursor.line,\r\n        ch: line.length - 1, //set the character position to the end of the line\r\n      }\r\n      doc.replaceRange(' ' + 'row.' + myValue + ' ', pos) //adds a new line\r\n    },\r\n    setButtonJs(row, index) {\r\n      this.index = index\r\n      if (row.jsValue) {\r\n        this.dialogRuleData = Base64.decode(row.jsValue)\r\n      }\r\n      this.dialogMethodVisible = true\r\n    },\r\n    methodOk() {\r\n      this.dialogMethodVisible = false\r\n      this.manageFields[this.index].jsValue = Base64.encode(this.dialogRuleData)\r\n    },\r\n    selectJar() {\r\n      this.$refs.importJarSelector && this.$refs.importJarSelector.show()\r\n    },\r\n    downloadTemplate() {\r\n      this.$http.post(\r\n        '${form}/form/dataTemplate/v1/downloadMainTempByFormKey/' +\r\n          this.dataTemplate.formKey,\r\n        this.dataTemplate.formKey,\r\n        this.dataTemplate.formKey,\r\n        'arraybuffer'\r\n      )\r\n    },\r\n    beforeUpload(file) {\r\n      if (\r\n        this.manageFields[this.curSelectIndex].importTemplate &&\r\n        this.manageFields[this.curSelectIndex].importTemplate.length > 0\r\n      ) {\r\n        if (this.manageFields[this.curSelectIndex].importTemplate.length == 1) {\r\n          return new Promise((resolve, reject) => {\r\n            this.$confirm('已有模板, 是否确认覆盖?', '提示', {\r\n              confirmButtonText: '确定',\r\n              cancelButtonText: '取消',\r\n              type: 'warning',\r\n            })\r\n              .then(() => {\r\n                resolve()\r\n              })\r\n              .catch(() => {\r\n                reject()\r\n              })\r\n          })\r\n        } else {\r\n          this.$message.waring('最多只能上传一个模板')\r\n          return false\r\n        }\r\n      } else {\r\n        return true\r\n      }\r\n    },\r\n    handleImportClick(scope) {\r\n      this.curSelectIndex = scope.$index\r\n    },\r\n    handleRemove(file, fileList) {\r\n      if (fileList && fileList.length == 1) {\r\n        return\r\n      }\r\n      let this_ = this\r\n      setTimeout(function () {\r\n        this_.manageFields[this_.curSelectIndex].importTemplate = []\r\n      }, 50)\r\n    },\r\n    success(response, file, fileList) {\r\n      this.files = []\r\n      for (let i = 0; i < fileList.length; i++) {\r\n        if (fileList[i].response) {\r\n          let value = fileList[i].response\r\n          let arrarFile = {}\r\n          arrarFile.id = value.fileId\r\n          arrarFile.name = value.fileName\r\n          arrarFile.size = value.size\r\n          this.files.push(arrarFile)\r\n        }\r\n      }\r\n      this.manageFields[this.curSelectIndex].importTemplate = this.files\r\n    },\r\n    jarSelectorOnConfirm(d) {\r\n      this.$set(this.manageFields[this.curSelectIndex], 'jarId', d.id)\r\n      this.$set(this.manageFields[this.curSelectIndex], 'jarDesc', d.desc)\r\n    },\r\n    copy(index) {\r\n      let obj = JSON.parse(JSON.stringify(this.manageFields[index]))\r\n      this.manageFields.push(obj)\r\n    },\r\n    //保存按钮数据\r\n    saveManageField() {\r\n      //处理开关字段\r\n      if (this.manageFields) {\r\n        this.dataTemplate.manageField = JSON.stringify(this.manageFields)\r\n      } else {\r\n        this.dataTemplate.manageField = null\r\n      }\r\n    },\r\n    validateManageField() {\r\n      //开关按钮校验，开关按钮必须绑定一列，开时值和关时值必填\r\n      let this_ = this\r\n      let fields = this_.manageFields\r\n      for (let i = 0; i < fields.length; i++) {\r\n        if (fields[i].name === 'switch') {\r\n          if (!fields[i].bind) {\r\n            this_.$message.warning('请选择开关的绑定字段')\r\n            return\r\n          }\r\n          if (!fields[i].switchOn || !fields[i].switchOff) {\r\n            this_.$message({\r\n              type: 'warning',\r\n              message: '请完善开关的开时值和关时值',\r\n            })\r\n            return false\r\n          }\r\n          if (!fields[i].desc || !fields[i].name) {\r\n            this_.$message({type: 'warning', message: '请完善开关信息'})\r\n            return false\r\n          }\r\n        }\r\n      }\r\n      return true\r\n    },\r\n    //显示字段排序\r\n    sort(index, type) {\r\n      if ('up' == type) {\r\n        if (index === 0) {\r\n          this.$message({\r\n            message: '已经是列表中第一位',\r\n            type: 'warning',\r\n          })\r\n        } else {\r\n          let temp = this.manageFields[index - 1]\r\n          this.$set(this.manageFields, index - 1, this.manageFields[index])\r\n          this.$set(this.manageFields, index, temp)\r\n        }\r\n      } else {\r\n        if (index === this.manageFields.length - 1) {\r\n          this.$message({\r\n            message: '已经是列表中最后一位',\r\n            type: 'warning',\r\n          })\r\n        } else {\r\n          let i = this.manageFields[index + 1]\r\n          this.$set(this.manageFields, index + 1, this.manageFields[index])\r\n          this.$set(this.manageFields, index, i)\r\n        }\r\n      }\r\n    },\r\n    //删除显示字段\r\n    remove(index) {\r\n      const manageField = this.manageFields[index]\r\n      const btn = this.defaultBtnOptions.filter(\r\n        (btn) => manageField.name === btn.key\r\n      )[0]\r\n      this.btnoptions.push(btn)\r\n      this.manageFields.splice(index, 1)\r\n      this.defaultBtnOptions.forEach((button) => {\r\n        if (button.key === btn.key) {\r\n          button.disabled = false\r\n          return\r\n        }\r\n      })\r\n    },\r\n    //添加管理按钮\r\n    addManageBtns() {\r\n      if (this.btnoptions.length > 0) {\r\n        const btn = this.btnoptions.shift()\r\n        if (\r\n          btn &&\r\n          (btn.key == 'js' ||\r\n            btn.key == 'url' ||\r\n            btn.key == 'switch' ||\r\n            btn.key == 'batchUpdate')\r\n        ) {\r\n          this.btnoptions.unshift(btn)\r\n        }\r\n        this.defaultBtnOptions.forEach((button) => {\r\n          if (\r\n            button.key === btn.key &&\r\n            !(\r\n              btn.key == 'js' ||\r\n              btn.key == 'url' ||\r\n              btn.key == 'switch' ||\r\n              btn.key == 'batchUpdate'\r\n            )\r\n          ) {\r\n            button.disabled = true\r\n          }\r\n        })\r\n        let manageField = {\r\n          desc: btn.value,\r\n          name: btn.key,\r\n          type: '1',\r\n          openType: 'old',\r\n          QRCodePattern: false,\r\n          disabled: false,\r\n        }\r\n        if (!this.noRights) {\r\n          manageField.right = JSON.stringify([{type: 'everyone'}])\r\n        }\r\n        if (btn.key === 'import') {\r\n          manageField.limit = 1000\r\n        }\r\n        this.manageFields.push(manageField)\r\n      } else {\r\n        this.$message({\r\n          type: 'warning',\r\n          message: '所有按钮都添加好了, 不能继续再添加!',\r\n        })\r\n      }\r\n    },\r\n    //处理按钮切换\r\n    handleManageChange(row) {\r\n      //切换按钮类型置空映射字段\r\n      if (row.display) {\r\n        row.display = []\r\n        this.refreshTime = new Date().getTime()\r\n      }\r\n      this.defaultBtnOptions.forEach((btn) => {\r\n        if (btn.key == row.name) {\r\n          if (btn.limit) {\r\n            row.limit = btn.limit\r\n          }\r\n          row.desc = btn.value\r\n        }\r\n        btn.disabled = false\r\n      })\r\n\r\n      const alreadyAddedFields = new Map()\r\n      this.manageFields.forEach((manageField) => {\r\n        alreadyAddedFields.set(manageField.name, manageField.name)\r\n        this.defaultBtnOptions.forEach((btn) => {\r\n          if (\r\n            manageField.name === btn.key &&\r\n            !(\r\n              btn.key == 'js' ||\r\n              btn.key == 'url' ||\r\n              btn.key == 'switch' ||\r\n              btn.key == 'batchUpdate'\r\n            )\r\n          ) {\r\n            btn.disabled = true\r\n          }\r\n        })\r\n      })\r\n      this.btnoptions = this.defaultBtnOptions.filter(\r\n        (btn) => !alreadyAddedFields.has(btn.key)\r\n      )\r\n\r\n      //如果按钮类型不是新增、编辑、明细、删除时，移动端显示\r\n      if (\r\n        row.name != 'add' &&\r\n        row.name != 'edit' &&\r\n        row.name != 'detail' &&\r\n        row.name != 'del'\r\n      ) {\r\n        row.mpDisplay = '2'\r\n      }\r\n    },\r\n    //打开设置权限\r\n    setFieldRightDialog(row) {\r\n      let conf = {\r\n        right: JSON.parse(row.right),\r\n        permissionList: this.permissionList,\r\n      }\r\n      this.currentAuthRow = row\r\n      this.$refs.eipAuthDialog.showDialog(conf)\r\n    },\r\n    //设置权限\r\n    authDialogOnConfirm(data) {\r\n      if (this.currentAuthRow) {\r\n        this.currentAuthRow.right = JSON.stringify(data)\r\n      }\r\n    },\r\n    //显示权限信息\r\n    rightToDesc(right) {\r\n      if (right) {\r\n        try {\r\n          right = JSON.parse(right)\r\n        } catch (error) {}\r\n      }\r\n      let desc = ''\r\n      let _this = this\r\n      right.forEach((r) => {\r\n        if (desc) {\r\n          desc += ' 和 '\r\n        }\r\n        var str = _this.permissionMap[r.type]\r\n        if (r.name) {\r\n          str += ':' + r.name\r\n        } else if (r.id) {\r\n          str += ':' + r.id\r\n        }\r\n        desc += str\r\n      })\r\n      return desc\r\n    },\r\n    //标题统一权限设置\r\n    mrightRenderHeader(h, para) {\r\n      //下拉框选项\r\n      let _this = this\r\n      let rights = [\r\n        {key: '', value: '请选择'},\r\n        {key: 'none', value: '无'},\r\n        {key: 'everyone', value: '所有人'},\r\n      ]\r\n      let rightMap = {'': '请选择', none: '无', everyone: '所有人'}\r\n      //下拉框内容包裹在一个div里面\r\n      return h('div', {}, [\r\n        h(\r\n          'span',\r\n          {\r\n            //div里面有一个文字提示：下拉框所属内容\r\n            style: {},\r\n            class: 'level-font-class',\r\n          },\r\n          para.column.label\r\n        ),\r\n        h(\r\n          'el-select',\r\n          {\r\n            //el-select实现下拉框\r\n            size: 'mini',\r\n            style: {\r\n              width: '120px',\r\n              marginLeft: '10px',\r\n            },\r\n            on: {\r\n              input: (value) => {\r\n                //随着下拉框的不同，文字框里的内容在边\r\n                _this.rightLab = rightMap[value]\r\n                if (\r\n                  value &&\r\n                  _this.manageFields &&\r\n                  _this.manageFields.length > 0\r\n                ) {\r\n                  _this.manageFields.forEach((field) => {\r\n                    if (field.right) {\r\n                      try {\r\n                        field.right = JSON.parse(field.right)\r\n                      } catch (error) {}\r\n                    }\r\n                    if (field.right[0].hasOwnProperty('v')) {\r\n                      field.right[0] = {v: value}\r\n                    } else {\r\n                      field.right[0] = {type: value}\r\n                    }\r\n                    field.right = JSON.stringify(field.right)\r\n                  })\r\n                }\r\n              },\r\n            },\r\n            props: {\r\n              value: _this.rightLab, //文字框的内容取决于这个value，如果value不存在，会报错\r\n            },\r\n          },\r\n          [\r\n            //下拉框里面填充选项，通过rights遍历map，为每一个选项赋值。\r\n            rights.map((item) => {\r\n              return h('el-option', {\r\n                props: {\r\n                  value: item.key,\r\n                  label: item.value,\r\n                },\r\n              })\r\n            }),\r\n          ]\r\n        ),\r\n      ])\r\n    },\r\n    //URL按钮和开关按钮设置事件\r\n    setButtonValue(option, row) {\r\n      this.dialogVisible = true\r\n      if (option === 'url') {\r\n        this.dialogTitle = '设置Url地址'\r\n        this.url = row.url\r\n      } else if (option === 'switch') {\r\n        this.dialogTitle = '设置开关值'\r\n        this.switchOn = row.switchOn\r\n        this.switchOff = row.switchOff\r\n        this.switchOnLabel = row.switchOnLabel\r\n        this.switchOffLabel = row.switchOffLabel\r\n      }\r\n      this.dialogModel = row\r\n    },\r\n    //设置URL按钮和开关后确认\r\n    dialogOnconfirm() {\r\n      if (this.dialogTitle === '设置开关值') {\r\n        this.dialogModel.switchOn = this.switchOn\r\n        this.dialogModel.switchOff = this.switchOff\r\n        this.dialogModel.isActive = 'off'\r\n        this.dialogModel.switchDefaultTrue = this.switchDefaultTrue\r\n        this.dialogModel.switchOnLabel = this.switchOnLabel\r\n        this.dialogModel.switchOffLabel = this.switchOffLabel\r\n        if (!this.switchOn || !this.switchOff) {\r\n          this.$message({\r\n            type: 'warning',\r\n            message: '开关需要设置开时值和关时值',\r\n          })\r\n        }\r\n      } else if (this.dialogTitle === '设置Url地址') {\r\n        this.dialogModel.url = this.url\r\n      }\r\n      this.dialogVisible = false\r\n    },\r\n    initMpDisplay(row) {\r\n      this.$set(row, 'mpDisplay', '2')\r\n    },\r\n    setAuth(row) {\r\n      let param = {\r\n        formKey: this.dataTemplate.formKey,\r\n        dataKey: this.dataTemplate.alias,\r\n        type: row.name === 'add' ? 3 : row.name === 'edit' ? 4 : 5,\r\n      }\r\n      this.$refs.flowFormAuth.showDialog(param)\r\n    },\r\n\r\n    batchUpdateOk() {\r\n      const me_ = this\r\n      utils\r\n        .validateForm(this, 'form')\r\n        .then((r) => {\r\n          me_.batchUpdateVisible = false\r\n          me_.manageFields[me_.index].batchUpdateData = Base64.encode(\r\n            JSON.stringify(me_.batchUpdateData)\r\n          )\r\n          me_.manageFields[me_.index].filedsObj = Base64.encode(\r\n            JSON.stringify(me_.filedsObj)\r\n          )\r\n        })\r\n        .catch((items) => {\r\n          this.$message.error(`还有内容未填写。`)\r\n        })\r\n    },\r\n\r\n    fillToDisplay(row, event, column) {\r\n      let isIn = this.isInDisplayFields(row.name)\r\n      if (!isIn) {\r\n        let fileds = {name: row.name, desc: row.desc, type: row.type}\r\n        this.exportSettingFields.push(fileds)\r\n      }\r\n    },\r\n    isInDisplayFields(name) {\r\n      let isIn = false\r\n      if (this.exportSettingFields && this.exportSettingFields.length > 0) {\r\n        this.exportSettingFields.forEach((obj) => {\r\n          if (obj.name == name) {\r\n            isIn = true\r\n            return\r\n          }\r\n        })\r\n      }\r\n      return isIn\r\n    },\r\n    allFillToDisplay() {\r\n      let selectrows = this.$refs.displaySettingTable.store.states.selection\r\n      if (!selectrows || selectrows.length < 1) {\r\n        this.$message({\r\n          message: '请在左侧列表中选择要显示的字段',\r\n          type: 'warning',\r\n        })\r\n      }\r\n      selectrows.forEach((obj) => {\r\n        if (!this.isInDisplayFields(obj.name)) {\r\n          let fileds = {name: obj.name, desc: obj.desc, type: obj.type}\r\n          this.exportSettingFields.push(fileds)\r\n        }\r\n      })\r\n    },\r\n    removeExport(index) {\r\n      this.exportSettingFields.splice(index, 1)\r\n    },\r\n    setExport(row, index) {\r\n      this.exportSettingFields = []\r\n      if (row.exportSettingFields) {\r\n        this.exportSettingFields = JSON.parse(\r\n          Base64.decode(row.exportSettingFields)\r\n        )\r\n      }\r\n      this.index = index\r\n\r\n      let displayExportSettingFields = []\r\n      this.displaySettingFields.forEach((obj) => {\r\n        displayExportSettingFields.push({\r\n          name: obj.name,\r\n          desc: obj.desc,\r\n          type: obj.type,\r\n        })\r\n      })\r\n      if (this.data.displaySettingFields) {\r\n        let displayField = JSON.parse(this.data.displaySettingFields)\r\n        displayField.forEach((item) => {\r\n          let findObj = displayExportSettingFields.find(\r\n            (row) => item.name == row.name\r\n          )\r\n          if (findObj == undefined) {\r\n            displayExportSettingFields.push({\r\n              name: item.name,\r\n              desc: item.desc,\r\n              type: item.type,\r\n            })\r\n          }\r\n        })\r\n      }\r\n      this.displayExportSettingFields = displayExportSettingFields\r\n      this.exportUpdateVisible = true\r\n    },\r\n    exportOk() {\r\n      if (this.exportSettingFields) {\r\n        this.manageFields[this.index].exportSettingFields = Base64.encode(\r\n          JSON.stringify(this.exportSettingFields)\r\n        )\r\n      } else {\r\n        this.manageFields[this.index].exportSettingFields = ''\r\n      }\r\n      this.exportUpdateVisible = false\r\n    },\r\n    setButtonUpdate(row, index) {\r\n      this.$set(this, 'batchUpdateData', this.$options.data().batchUpdateData)\r\n      if (row.batchUpdateData) {\r\n        this.batchUpdateData = JSON.parse(Base64.decode(row.batchUpdateData))\r\n      }\r\n      this.batchUpdateVisible = true\r\n      this.index = index\r\n    },\r\n    resetOutConfig(row, index) {\r\n      debugger\r\n      if (\r\n        row.outValueType &&\r\n        row.outValueType != 'input' &&\r\n        row.outValueType != 'data' &&\r\n        row.outValueType != 'number'\r\n      ) {\r\n        this.outConfig = {\r\n          type: row.outValueType,\r\n          choiceType: 'static',\r\n          parameter: {},\r\n          selectData: [],\r\n          customQuery: {alias: '', valueBind: '', labelBind: ''},\r\n          dialogConfig: {name: '请选择'},\r\n        }\r\n        row.outConfig = JSON.stringify(this.outConfig)\r\n      }\r\n    },\r\n    setOutValue(row, index) {\r\n      Object.assign(this.$data.outConfig, this.$options.data().outConfig)\r\n      this.outIndex = index\r\n      this.outConfig.type = row.outValueType\r\n      this.outConfig.bind = row.name\r\n      if (row.outConfig) {\r\n        this.outConfig = JSON.parse(row.outConfig)\r\n        if (!this.outConfig.customQuery) {\r\n          this.outConfig.customQuery = {valueBind: '', labelBind: ''}\r\n        }\r\n      }\r\n      this.outValueTypeVisible = true\r\n    },\r\n    outValueOk() {\r\n      this.batchUpdateData[this.outIndex].outConfig = JSON.stringify(\r\n        this.outConfig\r\n      )\r\n      this.outValueTypeVisible = false\r\n    },\r\n    addBatchUpdategData() {\r\n      this.batchUpdateData.push({})\r\n    },\r\n    afterCustomQueryLoadData(data) {\r\n      this.customQuerys = data.rows\r\n    },\r\n    afterCustomDialogLoadData(data) {\r\n      this.customDialogs = data\r\n    },\r\n    changeCustDialog(value) {\r\n      const _this = this\r\n      _this.outConfig.dialogConfig.conditions = []\r\n      this.outConfig.dialogConfig.mappingConf = []\r\n      this.outConfig.dialogConfig.custQueryJson = []\r\n      this.outConfig.dialogConfig.selectNum = ''\r\n      let obj = this.customDialogs.find((item) => item.alias == value)\r\n      if (obj) {\r\n        this.outConfig.dialogConfig.selectNum = obj.selectNum\r\n        let treeData\r\n        if (obj.style === 2) {\r\n          let combineConfig = JSON.parse(obj.combinationRule)\r\n          let listDialog = this.customDialogs.find(\r\n            (item) => item.alias == combineConfig.rightDialog\r\n          )\r\n          treeData = JSON.parse(listDialog.resultfield)\r\n          this.outConfig.dialogConfig.type = 'combiDialog'\r\n        }\r\n        if (obj.listDialog && obj.listDialog.resultfield) {\r\n          treeData = eval('(' + obj.listDialog.resultfield + ')')\r\n          this.outConfig.dialogConfig.type = 'combiDialog'\r\n        }\r\n        if (obj.resultfield && obj.resultfield !== '[]') {\r\n          treeData = eval('(' + obj.resultfield + ')')\r\n          this.outConfig.dialogConfig.type = 'custDialog'\r\n        }\r\n        for (let q = 0, f; (f = treeData[q++]); ) {\r\n          f.field = f.comment\r\n        }\r\n        this.outConfig.dialogConfig.resultField = treeData\r\n        let conditionList = eval('(' + obj.conditionfield + ')')\r\n        let conditions = []\r\n        //只处理类型等于1的对话框参数（defaultType：1：用户输入，2：固定值 ，3：参数传入）\r\n        if (conditionList && conditionList.length > 0) {\r\n          for (let j = 0, c; (c = conditionList[j++]); ) {\r\n            if (c.defaultType == '3') {\r\n              let has = false\r\n              if (!has) conditions.push(c)\r\n            }\r\n          }\r\n        }\r\n        this.outConfig.dialogConfig.conditions = conditions\r\n      }\r\n    },\r\n    setCurrentCustomQuery() {\r\n      const _this = this\r\n      _this.outConfig.customQuery.labelBind = ''\r\n      _this.outConfig.customQuery.valueBind = ''\r\n      _this.customQuerys.forEach((item) => {\r\n        if (_this.outConfig.customQuery.alias == item.alias) {\r\n          if (typeof item.conditionfield == 'string') {\r\n            item.conditionfield = JSON.parse(item.conditionfield) //parseToJson(item.customQuery.conditionfield);\r\n            item.resultfield = JSON.parse(item.resultfield) // parseToJson(item.customQuery.resultfield);\r\n          }\r\n          //把当前对象克隆一份到控件属性配置\r\n          Object.assign(_this.outConfig.customQuery, item)\r\n          _this.slimCustomQuery(_this.outConfig.customQuery)\r\n        }\r\n      })\r\n    },\r\n    slimCustomQuery(customQuery) {\r\n      if (customQuery && customQuery.constructor == Object) {\r\n        // 删除多余的属性\r\n        delete customQuery['id']\r\n        delete customQuery['createTime']\r\n        delete customQuery['pkVal']\r\n        delete customQuery['objName']\r\n        delete customQuery['needPage']\r\n        delete customQuery['pageSize']\r\n        delete customQuery['dsalias']\r\n        delete customQuery['dataParam']\r\n        delete customQuery['sortfield']\r\n        delete customQuery['diySql']\r\n        delete customQuery['isTable']\r\n        delete customQuery['sqlBuildType']\r\n        // delete customQuery[\"dsType\"];\r\n        delete customQuery['url']\r\n        delete customQuery['header']\r\n        delete customQuery['requestType']\r\n        delete customQuery['pageKey']\r\n        delete customQuery['pageSizeKey']\r\n        delete customQuery['totalKey']\r\n        delete customQuery['listKey']\r\n      }\r\n    },\r\n  },\r\n}\r\n",null]}