{"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]}