{"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\\customView\\CustomViewEdit.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\src\\components\\form\\customView\\CustomViewEdit.vue","mtime":1675071992069},{"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    import {Message} from \"element-ui\";\n    import form from \"@/api/form.js\";\n    import utils from \"@/hotent-ui-util.js\";\n    import TemplateEdit from \"./TemplateEdit\";\n    import req from \"@/request.js\";\n\n    const fieldDialog = () =>\n  import(\"@/components/form/customView/FieldDialog.vue\");\nconst iconDialog = () => import(\"@/components/dialog/IconDialog.vue\");\n\nexport default {\n  components: {\n    TemplateEdit,\n    fieldDialog,\n    iconDialog\n  },\n  props: {\n    id: String\n  },\n  data() {\n    return {\n      disabled:false,\n      tabStatus:\"sql\",\n      sqlList:[],//SQL生成集合\n      tableList:[],//数据源中的实体表\n      dialogSQLVisible:false,//sql生成器Dialog\n      dialogVisible: false,\n      data: {},\n      dataSources: [],\n      turnToIndex: \"\",\n      isCheckSql: false,\n      item: {},\n      type: \"\",\n      buttonDef: [],\n      saveUrl: window.context.form + \"/form/query/querySqldef/save\",\n      title: \"添加自定义视图\"\n    };\n  },\n  mounted() {\n    form.getDataSource().then(resp => {\n      this.dataSources = resp.data;\n    });\n  },\n  methods: {\n    //SQL生成器确认事件\n    sqlOk(){\n      const this_ = this;\n      if(this_.sqlList.length==1){\n        for (let i = 0; i < this_.sqlList.length; i++) {\n          if(this_.sqlList[i].connected){\n            if(this_.sqlList[i].relation.length>0){\n              for (let j = 0; j < this_.sqlList[i].relation.length; j++) {\n                //判断有没有添加关联关系\n                if(!this_.sqlList[i].relation[j].relatedBind || !this_.sqlList[i].relation[j].connectedBind){\n                  Message.warning(\"请先添加关联关系\");\n                  return;\n                }\n              }\n            }\n          }else if(!this_.sqlList[i].related){\n            Message.warning(\"请先添加被关联表\");\n            return;\n          }\n        }\n      }\n      if(this_.sqlList.length>1){\n        for (let i = 0; i < this_.sqlList.length; i++) {\n          if(this_.sqlList[i].relation.length>0){\n            for (let j = 0; j < this_.sqlList[i].relation.length; j++) {\n              //判断有没有添加关联关系\n              if(!this_.sqlList[i].relation[j].relatedBind || !this_.sqlList[i].relation[j].connectedBind){\n                Message.warning(\"请先添加关联关系\");\n                return;\n              }\n            }\n          }\n        }\n      }\n      let sql =\"select * from \";//生成的SQL语句\n      for (let i = 0; i < this_.sqlList.length; i++) {\n        if(i == 0){\n          if(this_.sqlList[i].connected){\n            sql = sql + this_.sqlList[i].related + \" left join \" + this_.sqlList[i].connected + \" on \";\n          }else{\n            sql = sql + this_.sqlList[i].related;\n          }\n        }else{\n          sql = sql + \" left join \" + this_.sqlList[i].connected + \" on \";\n        }\n        for (let j = 0; j < this_.sqlList[i].relation.length; j++) {\n          if(this_.sqlList[i].relation[j].relatedBind && this_.sqlList[i].relation[j].connectedBind){\n            if(j == 0){\n              sql = sql + this_.sqlList[i].relation[j].relatedBind + \" = \" + this_.sqlList[i].relation[j].connectedBind;\n            }else{\n              sql = sql +  \" and \" +this_.sqlList[i].relation[j].relatedBind + \" = \" + this_.sqlList[i].relation[j].connectedBind;\n            }\n          }\n        }\n      }\n      this_.data.sql = sql;\n      this_.dialogSQLVisible=false;\n    },\n    handleSql(sqlAlias,index,type){\n      const this_ = this;\n      //选择了关联表或被关联表后修改则需要清空关联关系\n      if(this_.sqlList[index].relation.length>0){\n        for(let j = 0;j < this_.sqlList[index].relation.length;j++){\n          if(type==\"related\"){\n            if(this_.sqlList[index].relation[j].relatedBind){\n              this_.sqlList[index].relation[j].relatedBind=\"\";\n            }\n          }\n          if(type==\"connected\"){\n            if(this_.sqlList[index].relation[j].connectedBind){\n              this_.sqlList[index].relation[j].connectedBind=\"\";\n            }\n          }\n        }\n      }\n      let params = {dsalias: this_.data.dsName,isTable: 1,objName: sqlAlias};\n      //获取数据源的字段\n      let url = window.context.form + \"/form/customQuery/v1/getTable\";\n      req.post(url, params).then(function(data) {\n        if(type==\"related\"){//关联表\n          this_.sqlList[index].fieldRelatedList = [];\n          for (let i = 0; i < data.data.table.columnList.length; i++) {\n            data.data.table.columnList[i].key =\n              sqlAlias + \".\" + data.data.table.columnList[i].fieldName;\n            data.data.table.columnList[i].value =\n              data.data.table.columnList[i].fieldName + \"(\" + data.data.table.columnList[i].comment + \")\";\n            this_.sqlList[index].fieldRelatedList.push(data.data.table.columnList[i]);\n          }\n        }else if(type==\"connected\"){//被关联表\n          this_.sqlList[index].fieldConnectedList = [];\n          for (let i = 0; i < data.data.table.columnList.length; i++) {\n            data.data.table.columnList[i].key =\n              sqlAlias + \".\" + data.data.table.columnList[i].fieldName;\n            data.data.table.columnList[i].value =\n              data.data.table.columnList[i].fieldName + \"(\" + data.data.table.columnList[i].comment + \")\";\n            this_.sqlList[index].fieldConnectedList.push(data.data.table.columnList[i]);\n          }\n        }\n      });\n    },\n    getDivision(sqlAlias,index,type){\n      const this_ = this;\n      if(index!=this_.sqlList.length-1){\n        let name = \"\";\n        if(type==\"related\"){\n          name=\"关联表\";\n        }else if(type==\"connected\"){\n          name=\"被关联表\";\n        }\n        this_.$confirm(\"确认修改?\", \"修改\"+name+\"会清空下面所有关联信息\", {cancelButtonText: \"取消\",\n          confirmButtonText: \"确定\",type: \"warning\",closeOnClickModal: false}) .then(() => {\n          //删除此下标之后的所有关联数据\n          for (let i = this_.sqlList.length-1; i >= 0; i--) {\n            if(i >index){\n              this_.sqlList.splice(i,1);\n            }\n          }\n          if(type==\"related\"){\n            this_.$refs.related[index].focus();\n          }else if(type==\"connected\"){\n            this_.$refs.connected[index].focus();\n          }\n        }) .finally(() => {\n           if(type==\"related\"){\n            this_.$refs.related[index].blur();\n          }else if(type==\"connected\"){\n            this_.$refs.connected[index].blur();\n          }\n        });\n      }\n    },\n    //关联表和被关联表删除按钮\n    removeSqlList(index){\n      const this_ = this;\n      if(index!=this_.sqlList.length-1){\n        this_.$confirm(\"确认删除?\", \"点击删除会清空下面所有关联信息\", {cancelButtonText: \"取消\",\n          confirmButtonText: \"确定\",type: \"warning\",closeOnClickModal: false}) .then(() => {\n          //删除此下标之后的所有关联数据\n          for (let i = this_.sqlList.length-1; i >= 0; i--) {\n            if(i >=index){\n              this_.sqlList.splice(i,1);\n            }\n          }\n        });\n      }else{\n        this_.sqlList.splice(index,1);\n      }\n    },\n    //根据数据库表名获取字段(被关联表)\n    changeSql(sqlAlias,index,type){\n      const this_ = this;\n      this_.handleSql(sqlAlias,index,type);\n    },\n    //添加sql关联表\n    addSqlList(){\n      //没添加被关联表不允许添加第二组数据\n      if(this.sqlList.length==1 && this.sqlList[0].connected==\"\"){\n        Message.warning(\"请先添加被关联表\");\n        return;\n      }\n      let tables = [];//从第二组开始只能选择的数据库表\n      //添加了被关联表\n      if(this.sqlList.length>0){\n        for (let i = 0; i < this.sqlList.length; i++) {\n          if(this.sqlList[i].relation.length>0){\n            for (let j = 0; j < this.sqlList[i].relation.length; j++) {\n              //判断有没有添加关联关系\n              if(!this.sqlList[i].relation[j].relatedBind || !this.sqlList[i].relation[j].connectedBind){\n                Message.warning(\"请先添加关联关系\");\n                return;\n              }\n            }\n          }\n          if(this.sqlList[i].related){\n            tables.push(this.sqlList[i].related);\n          }\n          if(this.sqlList[i].connected){\n            tables.push(this.sqlList[i].connected);\n          }\n        }\n      }\n      //先把所有数据库表type修改为1\n      for(let j = 0; j < this.tableList.length; j++){\n        this.tableList[j].type = \"1\";\n      }\n      //根据上面的关联关系修改数据库表type为2给下一组选择\n      if(tables.length>0){\n        for(let i = 0; i < this.tableList.length; i++){\n          if(tables.indexOf(this.tableList[i].name)!=-1){\n            this.tableList[i].type = \"2\";//标记再次添加一组关联表的时候默认只能选择type为2的数据库表\n          }\n        }\n      }\n      //满足以上条件后\n      this.sqlList.push({related:'',connected:'',relation:[{}],fieldRelatedList:[],fieldConnectedList:[]})\n    },\n    //打开SQL生成对话框\n    generateSql(){\n      const this_ = this;\n      this_.dialogSQLVisible=true;\n      this_.tableList = [];\n      //获取数据源中的表\n      let params = {dsalias: this_.data.dsName,isTable: 1,objName: \"\"};\n      let url = window.context.form + \"/form/customQuery/v1/getByDsObjectName\";\n      req.post(url, params).then(function(data) {\n        if (!data || data.data.length == 0) {\n          Message.warning(\"该数据源中未查询到表或视图\");\n          return;\n        }\n        for (let i = 0; i < data.data.length; i++) {\n          data.data[i].type = \"1\";//添加第一组关联表的时候调用\n          data.data[i].comment =\n            data.data[i].name + \"(\" + data.data[i].comment + \")\";\n          this_.tableList.push(data.data[i]);\n        }\n      });\n    },\n    //关闭SQL生成对话框\n    handleClose(){\n      this.dialogSQLVisible=false;\n    },\n    beforeClose() {\n\n      this.dialogVisible = false;\n    },\n    handleOpen() {\n      this.tabStatus = \"sql\";\n      this.dialogVisible = true;\n      this.disabled = false;\n      this.$nextTick(() => {\n        if (this.id) {\n          this.title = \"编辑自定义视图\";\n          form.getCustomViewById(this.id).then(response => {\n            this.data = response;\n            this.buttonDef = JSON.parse(this.data.buttonDef);\n            for (let i = 0; i < this.data.metafields.length; i++) {\n              if (this.data.metafields[i].alarmSetting) {\n                this.data.metafields[i].alarmSetting = JSON.parse(\n                  this.data.metafields[i].alarmSetting\n                );\n              }\n              if (this.data.metafields[i].controlContent) {\n                this.data.metafields[i].controlContent = JSON.parse(\n                  this.data.metafields[i].controlContent\n                );\n              }\n            }\n          });\n          this.isCheckSql = true;\n        } else {\n          this.title = \"添加自定义视图\";\n          this.data = {\n            metafields: [],\n            buttonDef: [\n              {\n                inRow: \"0\",\n                name: \"导出\",\n                triggerType: \"onclick\",\n                isDefault: \"1\",\n                urlPath: \"exports()\"\n              }\n            ],\n            dsName: \"LOCAL\",\n            supportTab: \"1\",\n            alias: \"\"\n          };\n          this.buttonDef = this.data.buttonDef;\n          this.isCheckSql = false;\n        }\n      });\n    },\n    checkSql() {\n      if (!this.data.sql) {\n        this.$message({ type: \"warning\", message: \"请输入sql语句\" });\n        return;\n      }\n      let checkSql = JSON.stringify(this.data.sql);\n      checkSql = checkSql.replace(/\\s/g, \"\");\n      if(checkSql.toLocaleUpperCase().indexOf(\"ORDERBY\") != -1){\n        this.$message({ type: \"warning\", message: \"请检查sql语句，不能包含order by排序语句\" });\n        return;\n      }\n      if(checkSql.toLocaleUpperCase().indexOf(\"GROUPBY\") != -1){\n        this.$message({ type: \"warning\", message: \"请检查sql语句，不能包含group by分组语句\" });\n        return;\n      }\n      let param = { sql: this.data.sql, dsName: this.data.dsName };\n      form.checkSql(param).then(response => {\n        if (response.state) {\n          this.$message({ type: \"success\", message: response.message });\n          this.isCheckSql = true;\n        }\n      });\n    },\n    addButton() {\n      let json = {};\n      json.inRow = true;\n      json.triggerType = \"onclick\";\n      json.isDefault = \"0\";\n      this.buttonDef.push(json);\n    },\n    deleteRow(index, rows) {\n      rows.splice(index, 1);\n    },\n    changeAlias(){\n      document.getElementsByName(\"dataAlias\")[0].style.border = \"\";\n    },\n    saveData(){\n      this.disabled = true;\n      this.beforeSaveData();\n      utils.validateForm(this,\"customViewEdit\").then(() => {\n        req.post(this.saveUrl,this.data).then(resp=>{\n          this.disabled = false;\n          if(resp.data.state){\n            this.$message({message:resp.data.message,type:\"success\"});\n            this.$confirm('保存成功，是否继续添加？','提示',{\n              confirmButtonText: '继续操作',\n              cancelButtonText: '退出',\n              type: 'warning'\n            })\n                    .then(()=>{\n                      document.getElementsByName(\"dataAlias\")[0].focus();\n                      document.getElementsByName(\"dataAlias\")[0].style.border = \"1px solid red\";\n                    })\n                    .catch(() => {\n                      this.afterSaveData();\n                    });\n          }else{\n            this.afterSaveData();\n          }\n        })\n        .catch(() => {\n          this.disabled = false;\n        });\n      }).catch(reason => {\n        this.disabled = false;\n        this.$message.warning(\"请正确填写表单信息\");\n      })\n    },\n    beforeSaveData() {\n      for (let i = 0; i < this.data.metafields.length; i++) {\n        this.sn = i + 1;\n        if (this.data.metafields[i].alarmSetting) {\n          this.data.metafields[i].alarmSetting = JSON.stringify(\n            this.data.metafields[i].alarmSetting\n          );\n        }\n        if (this.data.metafields[i].dialogAlarmSetting) {\n          this.data.metafields[i].alarmSetting = JSON.stringify(\n            this.data.metafields[i].dialogAlarmSetting\n          );\n        }\n        if (this.data.metafields[i].controlContent) {\n          if (this.data.metafields[i].controlContent.alias) {\n            let controlContent = {};\n            controlContent.alias = this.data.metafields[i].controlContent.alias;\n            controlContent.resultfield = this.data.metafields[\n              i\n            ].controlContent.resultfield;\n            this.data.metafields[i].controlContent = JSON.stringify(\n              controlContent\n            );\n          } else {\n            this.data.metafields[i].controlContent = JSON.stringify(\n              this.data.metafields[i].controlContent\n            );\n          }\n        }\n        this.data.metafields[i].isShow = this.data.metafields[i].isShow ? 1 : 0;\n        this.data.metafields[i].isSearch = this.data.metafields[i].isSearch\n          ? 1\n          : 0;\n        this.data.metafields[i].isCombine = this.data.metafields[i].isCombine\n          ? 1\n          : 0;\n      }\n      if (this.buttonDef) {\n        this.data.buttonDef = JSON.stringify(this.buttonDef);\n      }\n    },\n    afterSaveData() {\n      this.close();\n      this.$emit(\"after-save\");\n    },\n    refresh() {\n      const loading = this.$loading({\n          lock: true,\n          text: '正在刷新,请稍后',\n          spinner: 'el-icon-loading',\n          background: 'rgba(0, 0, 0, 0.7)'\n      });\n      form.refreshFields(this.id).then(response => {\n        this.data.metafields = response;\n        loading.close();\n        if (response){\n          this.$message({type:\"success\",message:\"刷新成功\"});\n        }\n      });\n    },\n    close() {\n      this.$emit(\"beforeClose\");\n      this.dialogVisible = false;\n      this.sqlList=[];//清空数据源中的实体表（关联表和被关联表）\n    },\n    fieldDialog(type, item) {\n      this.type = type;\n      this.item = item;\n      this.$refs.fieldDialog.handleOpen();\n    },\n    select(data) {\n      for (let i = 0; i < this.data.metafields.length; i++) {\n        if (this.data.metafields[i].id === data.id) {\n          this.data.metafields.splice(i, 1);\n          this.data.metafields.splice(i, 0, data);\n          break;\n        }\n      }\n    },\n    fieldSaveX(data) {\n      this.data.metafields.forEach((item, index) => {\n        if (item.id === data.id && data.isVirtual) {\n          if (this.type === \"X\") {\n            this.data.metafields.push(data);\n          } else if (item.isVirtual) {\n            this.data.metafields.splice(index, 1, data);\n          }\n        }\n      });\n    },\n    checkHasX(field) {\n      let b = false;\n      for (let i = 0; i < this.data.metafields.length; i++) {\n        if (\n          this.data.metafields[i].isVirtual === 1 &&\n          this.data.metafields[i].virtualFrom === field.fieldName\n        ) {\n          b = true;\n        }\n      }\n      return b;\n    },\n    arrayMove(group, item, direct) {\n      if (group === \"buttonDef\") {\n        this[group] = utils.arrayMove(this[group], item, direct);\n      } else {\n        this.data[group] = utils.arrayMove(this.data[group], item, direct);\n      }\n    },\n    selectIcon(data, index, item) {\n      item.icon = data;\n      this.buttonDef.splice(index, 1);\n      this.buttonDef.splice(index, 0, item);\n    },\n    getTenantCode(){\n      // 获取租户别名\n      let _this= this;\n      let currentUser = JSON.parse(sessionStorage.getItem(\"currentUser\"));\n      if (currentUser.userAttrs.tenantId != \"-1\"){\n        let url = \"${uc}/uc/tenantManage/v1/getJson?id=\"+currentUser.userAttrs.tenantId;\n        this.$http.get(url).then(resp => {\n          let tenantManageCode = resp.data.code;\n          _this.$copyText(tenantManageCode).then(function (e) {\n            _this.$message.success('租户别名复制成功，可粘贴至SQL语句中');\n          })\n        })\n        // console.log(currentUser.userAttrs.tenantId)\n      }else{\n        _this.$message.warning('当前登录账号不是租户账号')\n      }\n    }\n  }\n};\n",null]}