{"remainingRequest":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xq-web-bpm\\src\\views\\form\\BusinessObjDialog.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\src\\views\\form\\BusinessObjDialog.vue","mtime":1675071992881},{"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\r\nimport form from '@/api/form.js'\r\nimport req from '@/request.js'\r\nimport util from '@/hotent-ui-util.js'\r\nimport main from '@/main.js'\r\nimport BusinessObjHeader from '@/views/form/BusinessObjHeader.vue'\r\nimport BusinessObjEnts from '@/views/form/BusinessObjEnts.vue'\r\nimport BusinessObjAttr from '@/views/form/BusinessObjAttr.vue'\r\nimport BusinessObjExternalDialog from '@/views/form/BusinessObjExternalDialog.vue'\r\nimport FormTemplateDialog from '@/components/dialog/FormTemplateDialog.vue'\r\n\r\nexport default {\r\n  components: {\r\n    BusinessObjHeader,\r\n    BusinessObjEnts,\r\n    BusinessObjAttr,\r\n    BusinessObjExternalDialog,\r\n    FormTemplateDialog\r\n  },\r\n  props: ['dataView', 'deployedId', 'clickTree', 'data'],\r\n  data() {\r\n    return {\r\n      asideShow: true,\r\n      messageCations: {}, //用来获取校验弹窗提示的实例，以对对应弹窗进行操作\r\n      entExtsTableHeight: 0,\r\n      typeData: [],\r\n      entIndex: 0, //选中实体下标\r\n      isHide: true,\r\n      entExts: {\r\n        //TODO\r\n        comment: '',\r\n        desc: '',\r\n        dsName: '',\r\n        index: 0,\r\n        isExternal: '1',\r\n        name: '',\r\n        packageId: '',\r\n        pk: '',\r\n        pkType: '',\r\n        relation: '',\r\n        show: '',\r\n        status: '',\r\n        tableName: '',\r\n        attributeList: [],\r\n        type: ''\r\n      },\r\n      formData: {\r\n        //表单\r\n        alias: '',\r\n        categoryId: '',\r\n        categoryName: '',\r\n        deployed: 0,\r\n        description: '',\r\n        dsName: '',\r\n        isCreateTable: '',\r\n        isExternal: '',\r\n        status: 'normal',\r\n        supportDb: true,\r\n        ents: []\r\n      },\r\n      countAttrLength: 0,\r\n      dialogVisible: false,\r\n      openGrandSonAttr: false,\r\n      grandSonIndex: -1,\r\n      attrTableData: [],\r\n      addFk: false, //TODO\r\n      extLen: 0,\r\n      showMessage: false,\r\n      externalTables: [] // 当前外部表的字段\r\n    }\r\n  },\r\n  mounted() {\r\n    const this_ = this\r\n    this_.$root.$on('validateField', function(res) {\r\n      this_.closeAllNotification()\r\n      util\r\n        .validateForm(this, 'form')\r\n        .then(() => {\r\n          this_.closeAllNotification()\r\n        })\r\n        .catch(reason => {\r\n          let rule = reason.map(v => {\r\n            return v.rule\r\n          })\r\n          rule = rule.unique()\r\n          this_.closeAllNotification()\r\n          if (rule.includes('required')) {\r\n            let n = this_.$message.warning('请将信息填写完整')\r\n            this_.messageCations[n.id] = n\r\n          } else if (rule.includes('regex')) {\r\n            let n = this_.$message.warning(\r\n              '只能输入字母、数字、下划线，且以字母开头'\r\n            )\r\n            this_.messageCations[n.id] = n\r\n          }\r\n        })\r\n    })\r\n  },\r\n  created() {\r\n    this.$validator = this.$root.$validator\r\n  },\r\n  watch: {\r\n    data: {\r\n      handler(v) {\r\n        if (this.dataView.id) {\r\n          this.formData = v\r\n        }\r\n      },\r\n      deep: true\r\n    }\r\n  },\r\n  methods: {\r\n    //关闭所有校验通知\r\n    closeAllNotification() {\r\n      for (let key in this.messageCations) {\r\n        this.messageCations[key].close()\r\n        delete this.messageCations[key]\r\n      }\r\n    },\r\n    addGrandSonEnt(index) {\r\n      this.getEntsByIndex(index)\r\n      let row = {\r\n        desc: '',\r\n        index: this.entIndex,\r\n        name: '',\r\n        packageId: '',\r\n        show: '孙实体',\r\n        relation: 'onetomany',\r\n        attributeList: [],\r\n        status: '',\r\n        isCheck: true\r\n      }\r\n      if (!this.formData.ents[index].children) {\r\n        this.$set(this.formData.ents[index], 'children', [])\r\n      }\r\n      if (this.checkGrandSonEnts(index)) {\r\n        return\r\n      }\r\n      this.formData.ents[index].children.push(row)\r\n      this.grandSonIndex = this.formData.ents[index].children.length - 1\r\n      this.openGrandSonAttr = true\r\n      this.attrTableData = this.formData.ents[index].children[\r\n        this.grandSonIndex\r\n      ].attributeList\r\n    },\r\n    checkGrandSonEnts(index, param) {\r\n      if (\r\n        (this.formData.ents[index].children &&\r\n          this.formData.ents[index].children.length == 0) ||\r\n        !this.formData.ents[index].children\r\n      ) {\r\n        return false\r\n      }\r\n      let child = this.formData.ents[index].children\r\n      let len = this.formData.ents[index].children.length - 1\r\n      child[len].comment = child[len].desc\r\n      child[len].description = child[len].desc\r\n      if (!param && child[len].attributeList.length == 0) {\r\n        this.$message({message: '请添加字段信息', type: 'warning'})\r\n        return true\r\n      }\r\n    },\r\n    //输入检测\r\n    checkIsChinese(param) {\r\n      var check = new RegExp('[\\u4e00-\\u9fa5]')\r\n      var pattern = new RegExp(\r\n        \"[%--`~!@#$^&*()=|{}':;',\\\\[\\\\].<>/?~！@#￥……&*（）——| {}【】‘；：”“'。，、？]\"\r\n      )\r\n      if (check.test(param) || pattern.test(param)) {\r\n        this.$message({message: '请勿输入中文或特殊字符', type: 'warning'})\r\n        return true\r\n      }\r\n    },\r\n    //输入检测\r\n    checkInSpecialCharacters(param) {\r\n      var pattern = new RegExp(\r\n        \"[%--`~!@#$^&*()=|{}':;',\\\\[\\\\].<>/?~！@#￥……&*（）——| {}【】‘；：”“'。，、？]\"\r\n      )\r\n      if (pattern.test(param)) {\r\n        this.$message({message: '请勿输入特殊字符', type: 'warning'})\r\n        return true\r\n      }\r\n    },\r\n    getGrandSonEntsByIndex(i, index) {\r\n      this.getEntsByIndex(index, 'grandSonEnt')\r\n      this.grandSonIndex = i\r\n      if (\r\n        this.formData.ents[this.entIndex].children &&\r\n        this.formData.ents[this.entIndex].children[i]\r\n      ) {\r\n        this.attrTableData = this.formData.ents[this.entIndex].children[\r\n          i\r\n        ].attributeList\r\n      }\r\n    },\r\n    //获取选中实体\r\n    getEntsByIndex(index, param) {\r\n      //如果是删除自动选择上一个实体\r\n      if (param == 'delete') {\r\n        if (this.formData.ents[index]) {\r\n          this.entIndex = index\r\n          this.formData.ents.forEach(data => {\r\n            data.isCheck = false\r\n          })\r\n          this.formData.ents[index].isCheck = true\r\n          return true\r\n        }\r\n      } else {\r\n        let this_ = this\r\n        util\r\n          .validateForm(this, 'form')\r\n          .then(() => {\r\n            this.openGrandSonAttr = false\r\n            if (param == 'grandSonEnt') {\r\n              this.openGrandSonAttr = true\r\n            }\r\n            if (this.formData.ents[index]) {\r\n              this.entIndex = index\r\n              this.formData.ents.forEach(data => {\r\n                data.isCheck = false\r\n              })\r\n              this.formData.ents[index].isCheck = true\r\n              return true\r\n            }\r\n          })\r\n          .catch(reason => {\r\n            let rule = reason.map(v => {\r\n              return v.rule\r\n            })\r\n            rule = rule.unique()\r\n            this_.closeAllNotification()\r\n            if (rule.includes('required')) {\r\n              let n = this_.$message.warning('请将信息填写完整')\r\n              this_.messageCations[n.id] = n\r\n            } else if (rule.includes('regex')) {\r\n              let n = this_.$message.warning(\r\n                '只能输入字母、数字、下划线，且以字母开头'\r\n              )\r\n              this_.messageCations[n.id] = n\r\n            }\r\n          })\r\n      }\r\n    },\r\n\r\n    //表单对话框\r\n    handleOpen() {\r\n      this.dialogVisible = true\r\n      this.init()\r\n    },\r\n    init() {\r\n      this.formData.categoryId = this.clickTree.id\r\n      this.formData.categoryName = this.clickTree.name\r\n      if (this.dataView.entIndex) {\r\n        this.entIndex = this.dataView.entIndex\r\n      }\r\n    },\r\n    //表单数据加载\r\n    getFormData() {\r\n      if (this.dataView.id) {\r\n        form.getEntData(this.dataView.id, resp => {\r\n          resp.data.ents.forEach((entData, index) => {\r\n            if (entData.isExternal == '1' && index == 0) {\r\n              entData.show = '主实体-外'\r\n            } else if (entData.isExternal == '1') {\r\n              entData.show = '子实体-外'\r\n            }\r\n            if (index === 0) {\r\n              entData.isCheck = true\r\n            }\r\n            if (entData.children) {\r\n              entData.children.forEach(v => {\r\n                if (v.isExternal == '1') {\r\n                  v.show = '孙实体-外'\r\n                }\r\n              })\r\n            }\r\n            for (let q = 0; q < entData.attributeList.length; q++) {\r\n              if (entData.attributeList[q]) {\r\n                if (entData.attributeList[q].isRequired == 0) {\r\n                  entData.attributeList[q].isRequired = '0'\r\n                } else {\r\n                  entData.attributeList[q].isRequired = '1'\r\n                }\r\n              }\r\n              for (let i = 0; i < entData.attributeList.length - 1 - q; i++) {\r\n                if (\r\n                  entData.attributeList[i].index >\r\n                  entData.attributeList[i + 1].index\r\n                ) {\r\n                  let temp = entData.attributeList[i]\r\n                  entData.attributeList[i] = entData.attributeList[i + 1]\r\n                  entData.attributeList[i + 1] = temp\r\n                }\r\n              }\r\n            }\r\n          })\r\n          this.formData = resp.data\r\n        })\r\n      }\r\n    },\r\n    //关闭表单对话框\r\n    handleDialogClose() {\r\n      this.$emit('loadTableData')\r\n      this.dialogVisible = false\r\n      this.isSave = false\r\n      this.entIndex = 0\r\n      this.grandSonIndex = -1\r\n      this.openGrandSonAttr = false\r\n      this.countAttrLength = 0\r\n      this.formData = {\r\n        alias: '',\r\n        categoryId: '',\r\n        categoryName: '',\r\n        deployed: 0,\r\n        description: '',\r\n        dsName: '',\r\n        isCreateTable: '',\r\n        isExternal: '',\r\n        status: 'normal',\r\n        supportDb: true,\r\n        ents: []\r\n      }\r\n      this.$router.push({path: `/sysplat/businessObj`}) //form#businessObj\r\n    },\r\n    //新增实体\r\n    addEntRows() {\r\n      const this_ = this\r\n      util\r\n        .validateForm(this_, 'form')\r\n        .then(() => {\r\n          if (this_.formData.ents.length > 0) {\r\n            for (let i = 0; i < this_.formData.ents.length; i++) {\r\n              if (this_.checkGrandSonEnts(i)) {\r\n                return\r\n              }\r\n            }\r\n            this_.countAttrLength = 0\r\n            if (!this_.checkEntFunc(this_.formData.ents)) {\r\n              return false\r\n            }\r\n            this_.extLen = 0\r\n          }\r\n          this_.formData.ents.forEach(data => {\r\n            data.isCheck = false\r\n          })\r\n          this_.entIndex = ++this_.entIndex\r\n          let row = {\r\n            desc: '',\r\n            index: this_.entIndex,\r\n            name: '',\r\n            packageId: '',\r\n            show: '子实体',\r\n            children: [],\r\n            relation: 'onetomany',\r\n            attributeList: [],\r\n            status: '',\r\n            isCheck: true\r\n          }\r\n          if (this_.formData.ents.length == 0) {\r\n            this_.entIndex = 0\r\n            row = {\r\n              desc: '',\r\n              index: 0,\r\n              name: '',\r\n              packageId: '',\r\n              show: '主实体',\r\n              relation: 'main',\r\n              status: '',\r\n              attributeList: [],\r\n              isCheck: true\r\n            }\r\n          }\r\n          if (\r\n            this_.formData.ents.length > 0 &&\r\n            this_.checkGrandSonEnts(this_.formData.ents.length - 1)\r\n          ) {\r\n            return\r\n          }\r\n          this_.formData.ents.push(row)\r\n        })\r\n        .catch(reason => {\r\n          let rule = reason.map(v => {\r\n            return v.rule\r\n          })\r\n          rule = rule.unique()\r\n          if (rule.includes('required')) {\r\n            let n = this_.$message.warning('请将信息填写完整')\r\n            this_.messageCations[n.id] = n\r\n          } else if (rule.includes('regex')) {\r\n            this_.$message.warning('只能输入字母、数字、下划线，且以字母开头')\r\n          }\r\n        })\r\n    },\r\n    //删除实体\r\n    deleteEntRows(index) {\r\n      this.entIndex = index\r\n      if (!this.formData.ents[this.entIndex].attributeList) {\r\n        this.formData.ents[this.entIndex].attributeList = []\r\n      }\r\n      //处理加入的外部表数组\r\n      if (\r\n        this.formData.ents[index] &&\r\n        this.formData.ents[index].isExternal == 1 &&\r\n        this.externalTables &&\r\n        this.externalTables.length > 0\r\n      ) {\r\n        let extName = this.formData.ents[index].tableName\r\n        this.externalTables.forEach((item, idx) => {\r\n          if (item == extName) {\r\n            this.externalTables.splice(idx, 1)\r\n          }\r\n        })\r\n      }\r\n      this.formData.ents.splice(index, 1)\r\n      if (this.entIndex >= this.formData.ents.length) {\r\n        this.entIndex = this.formData.ents.length - 1\r\n        this.getEntsByIndex(this.entIndex)\r\n      }\r\n      if (this.formData.ents.length > 0) {\r\n        if (index == 0) {\r\n          if (this.formData.ents[0].isExternal != '1') {\r\n            this.formData.ents[0].show = '主实体'\r\n            this.formData.ents[0].relation = 'main'\r\n            this.formData.ents[0].children = []\r\n          } else {\r\n            this.formData.ents[0].show = '主实体-外'\r\n            this.formData.ents[0].relation = 'main'\r\n          }\r\n        }\r\n      }\r\n    },\r\n    deleteGrandSonEntRows(i, index) {\r\n      this.getEntsByIndex(index, 'noCheck')\r\n      this.grandSonIndex = i\r\n      if (!this.formData.ents[this.entIndex].attributeList) {\r\n        this.formData.ents[this.entIndex].children[i].attributeList = []\r\n      }\r\n      this.formData.ents[this.entIndex].children.splice(i, 1)\r\n      this.openGrandSonAttr = false\r\n      this.attrTableData = this.formData.ents[this.entIndex].attributeList\r\n      if (\r\n        this.formData.ents[this.entIndex].children[i - 1] &&\r\n        this.formData.ents[this.entIndex].children[i - 1].attributeList.length >\r\n          0\r\n      ) {\r\n        this.attrTableData = this.formData.ents[this.entIndex].children[\r\n          i - 1\r\n        ].attributeList\r\n      }\r\n    },\r\n    //数据源\r\n    addEntExts(index, i) {\r\n      let currentEnt = null,\r\n        currentEntType = ''\r\n      if (typeof index != 'undefined') {\r\n        if (typeof i != 'undefined') {\r\n          currentEntType = 'sunTable'\r\n          currentEnt = this.formData.ents[index].children[i]\r\n        } else {\r\n          currentEnt = this.formData.ents[index]\r\n          currentEntType = index > 0 ? 'subTable' : 'mainTable'\r\n        }\r\n      }\r\n      this.$refs.businessObjExternalDialog.open(\r\n        currentEnt,\r\n        currentEntType,\r\n        index == 0 ? 0 : this.formData.ents.length,\r\n        this.externalTables\r\n      )\r\n    },\r\n    validatorForm(param) {\r\n      util\r\n        .validateForm(this, 'form')\r\n        .then(() => {\r\n          for (let i = 0; i < this.formData.ents.length; i++) {\r\n            if (this.checkGrandSonEnts(i)) {\r\n              return\r\n            }\r\n          }\r\n          this.countAttrLength = 0\r\n          if (!this.checkEntFunc(this.formData.ents)) {\r\n            return false\r\n          }\r\n          this.extLen = 0\r\n          if (param == 'deployed') {\r\n            this.deployedEntData()\r\n            return true\r\n          } else if (param == 'save') {\r\n            this.saveEntData()\r\n            return true\r\n          } else if (param == 'createTableForm') {\r\n            this.createTableForm()\r\n            return true\r\n          }\r\n          return true\r\n        })\r\n        .catch(reason => {\r\n          let rule = reason.map(v => {\r\n            return v.rule\r\n          })\r\n          rule = rule.unique()\r\n          if (rule.includes('required')) {\r\n            let n = this.$message.warning('请将信息填写完整')\r\n            this.messageCations[n.id] = n\r\n          } else if (rule.includes('regex')) {\r\n            this.$message.warning('只能输入字母、数字、下划线，且以字母开头')\r\n          }\r\n        })\r\n    },\r\n    checkEntFunc(ent, sonIndex) {\r\n      let entVal = {}\r\n      if (ent.length < 1) {\r\n        this.$message({type: 'warning', message: '请添加实体对象！'})\r\n        return false\r\n      }\r\n      for (let i = 0; i < ent.length; i++) {\r\n        if (ent[i].show != '孙实体') {\r\n          ent[i].description = ent[i].comment\r\n          ent[i].desc = ent[i].comment\r\n        }\r\n        if (!entVal['desc' + ent[i].desc]) {\r\n          entVal['desc' + ent[i].desc] = ent[i].desc\r\n        } else {\r\n          this.entBlurDescRepeatIndex = i\r\n          if (\r\n            document.getElementById('changeEntsDesc' + i) &&\r\n            ent[i].show == '子实体'\r\n          ) {\r\n            this.$message({\r\n              message: '已存在子实体描述为【' + ent[i].desc + '】的bo实体',\r\n              type: 'warning'\r\n            })\r\n            document\r\n              .getElementById('changeEntsDesc' + i)\r\n              .getElementsByTagName('div')[0]\r\n              .lastElementChild.focus()\r\n            document\r\n              .getElementById('changeEntsDesc' + i)\r\n              .getElementsByTagName('div')[0].firstElementChild.style.border =\r\n              '1px solid red'\r\n          } else {\r\n            this.$message({\r\n              message: '已存在孙实体描述为【' + ent[i].desc + '】的bo实体',\r\n              type: 'warning'\r\n            })\r\n            document\r\n              .getElementById('changeGrandSonEntsDesc' + i)\r\n              .getElementsByTagName('div')[0]\r\n              .lastElementChild.focus()\r\n            document\r\n              .getElementById('changeGrandSonEntsDesc' + i)\r\n              .getElementsByTagName('div')[0].firstElementChild.style.border =\r\n              '1px solid red'\r\n          }\r\n          return false\r\n        }\r\n        if (!entVal['name' + ent[i].name]) {\r\n          entVal['name' + ent[i].name] = ent[i].name\r\n        } else {\r\n          this.entBlurNameRepeatIndex = i\r\n          if (\r\n            document.getElementById('entName' + i) &&\r\n            ent[i].show == '子实体'\r\n          ) {\r\n            this.$message({\r\n              message: '已存在子实体名称为【' + ent[i].name + '】的bo实体',\r\n              type: 'warning'\r\n            })\r\n            document\r\n              .getElementById('entName' + i)\r\n              .getElementsByTagName('div')[0]\r\n              .lastElementChild.focus()\r\n            document\r\n              .getElementById('entName' + i)\r\n              .getElementsByTagName('div')[0].firstElementChild.style.border =\r\n              '1px solid red'\r\n          } else {\r\n            this.$message({\r\n              message: '已存在孙实体名称为【' + ent[i].name + '】的bo实体',\r\n              type: 'warning'\r\n            })\r\n            document\r\n              .getElementById('changeGrandSonEntsName' + i)\r\n              .getElementsByTagName('div')[0]\r\n              .lastElementChild.focus()\r\n            document\r\n              .getElementById('changeGrandSonEntsName' + i)\r\n              .getElementsByTagName('div')[0].firstElementChild.style.border =\r\n              '1px solid red'\r\n          }\r\n          return false\r\n        }\r\n        if (ent[i].isExternal == '1') {\r\n          ++this.extLen\r\n          if (i != 0 && this.extLen > 1 && !ent[i].fk) {\r\n            this.$message({\r\n              message: '请给' + ent[i].comment + '实体添加外键！',\r\n              type: 'warning'\r\n            })\r\n            return false\r\n          }\r\n        }\r\n        if (ent[i].attributeList.length > 0) {\r\n          if (!this.checkAttrFunc(ent[i], i, sonIndex)) {\r\n            return false\r\n          }\r\n        } else {\r\n          this.$message({message: '请添加字段！', type: 'warning'})\r\n          return false\r\n        }\r\n        if (ent[i].children && ent[i].children.length > 0) {\r\n          this.countAttrLength = 0\r\n          if (!this.checkEntFunc(ent[i].children, i)) {\r\n            return false\r\n          }\r\n        }\r\n        this.countAttrLength = 0\r\n      }\r\n      return true\r\n    },\r\n    checkAttrFunc(ent, i, sonIndex) {\r\n      let regPos = new RegExp('^\\\\d*(?:\\\\.\\\\d{1,2})?$')\r\n      let attrVal = {}\r\n      let attr = ent.attributeList\r\n      for (let j = 0; j < attr.length; j++) {\r\n        attr[j].desc = attr[j].comment\r\n        if (attr[j].defaultValue == null) {\r\n          attr[j].defaultValue = ''\r\n        }\r\n        attr[j].defaultValue = attr[j].defaultValue.trim()\r\n        this.attrCommentElementId = attr[j].name + 'comment' + j\r\n        if (ent.isExternal != '1') {\r\n          if (!attrVal['name' + attr[j].name]) {\r\n            attrVal['name' + attr[j].name] = attr[j].name\r\n          } else {\r\n            this.entAttrIndex = i\r\n            if (sonIndex) {\r\n              this.sonAttrIndex = sonIndex\r\n            }\r\n            this.attrNameElementId = attr\r\n            this.checkAttrNameIndex = j\r\n            const msg =\r\n              '实体：' +\r\n              ent.desc +\r\n              '（' +\r\n              ent.name +\r\n              '）中存在重复字段名【' +\r\n              attr[j].name +\r\n              '】'\r\n            this.$message({message: msg, type: 'warning'})\r\n            document\r\n              .getElementById(this.attrNameElementId[j].name + 'attrName' + j)\r\n              .focus()\r\n            document\r\n              .getElementById(this.attrNameElementId[j].name + 'attrName' + j)\r\n              .getElementsByTagName('div')[0].firstElementChild.style.border =\r\n              '1px solid red'\r\n            return false\r\n          }\r\n          this.attrLenElementId = attr[j].name + 'attrLen' + j\r\n          if (attr[j].attrLength && attr[j].attrLength !== 0) {\r\n            if (!regPos.test(attr[j].attrLength)) {\r\n              this.entAttrIndex = i\r\n              if (sonIndex) {\r\n                this.sonAttrIndex = sonIndex\r\n              }\r\n              document.getElementById(this.attrLenElementId).focus()\r\n              document.getElementById(this.attrLenElementId).style.border =\r\n                '1px solid red'\r\n              let n = this.$message.warning('请输入正确数字')\r\n              this.messageCations[n.id] = n\r\n              return false\r\n            }\r\n          }\r\n          this.attrDecimaElementId = attr[j].name + 'decima' + j\r\n          if (attr[j].decimalLen && attr[j].decimalLen !== 0) {\r\n            if (!regPos.test(attr[j].decimalLen)) {\r\n              this.entAttrIndex = i\r\n              if (sonIndex) {\r\n                this.sonAttrIndex = sonIndex\r\n              }\r\n              document.getElementById(this.attrDecimaElementId).focus()\r\n              document.getElementById(this.attrDecimaElementId).style.border =\r\n                '1px solid red'\r\n              let n = this.$message.warning('请输入正确数字')\r\n              this.messageCations[n.id] = n\r\n              return false\r\n            }\r\n          }\r\n          if (attr[j].decimalLen) {\r\n            if (attr[j].decimalLen.length > 1) {\r\n              let decimalLen = attr[j].decimalLen.substr(0, 1)\r\n              if (decimalLen == '0') {\r\n                attr[j].decimalLen = attr[j].decimalLen.substr(\r\n                  1,\r\n                  attr[j].decimalLen.length\r\n                )\r\n              }\r\n            }\r\n            if (attr[j].decimalLen < 0 || attr[j].decimalLen > 30) {\r\n              this.entAttrIndex = i\r\n              if (sonIndex) {\r\n                this.sonAttrIndex = sonIndex\r\n              }\r\n              document.getElementById(this.attrDecimaElementId).focus()\r\n              document.getElementById(this.attrDecimaElementId).style.border =\r\n                '1px solid red'\r\n              this.$message({\r\n                message: '小数长度不能小于0或者大于30',\r\n                type: 'warning'\r\n              })\r\n              return false\r\n            }\r\n          }\r\n          if (attr[j].dataType === 'varchar') {\r\n            this.countAttrLength += parseInt(attr[j].attrLength)\r\n          }\r\n          if (attr[j].attrLength) {\r\n            if (attr[j].attrLength.length > 1) {\r\n              let attrLength = attr[j].attrLength.substr(0, 1)\r\n              if (attrLength == '0') {\r\n                attr[j].attrLength = attr[j].attrLength.substr(\r\n                  1,\r\n                  attr[j].attrLength.length\r\n                )\r\n              }\r\n            }\r\n            if (attr[j].dataType === 'varchar') {\r\n              if (attr[j].attrLength < 1 || this.countAttrLength > 21500) {\r\n                this.entAttrIndex = i\r\n                if (sonIndex) {\r\n                  this.sonAttrIndex = sonIndex\r\n                }\r\n                document.getElementById(this.attrLenElementId).focus()\r\n                document.getElementById(this.attrLenElementId).style.border =\r\n                  '1px solid red'\r\n                this.$message({\r\n                  message: '整数长度不能小于1或者长度总和超出21500',\r\n                  type: 'warning'\r\n                })\r\n                return false\r\n              }\r\n            }\r\n\r\n            if (attr[j].dataType === 'number' || attr[j].dataType == '数字') {\r\n              let defaultVal = attr[j].defaultValue.split('.')\r\n              if (Number(attr[j].attrLength) < 1) {\r\n                this.entAttrIndex = i\r\n                if (sonIndex) {\r\n                  this.sonAttrIndex = sonIndex\r\n                }\r\n                document.getElementById(this.attrLenElementId).focus()\r\n                document.getElementById(this.attrLenElementId).style.border =\r\n                  '1px solid red'\r\n                this.$message({\r\n                  message: '整数长度不能小于1',\r\n                  type: 'warning'\r\n                })\r\n                return false\r\n              }\r\n              if (\r\n                Number(attr[j].attrLength) + Number(attr[j].decimalLen) >\r\n                38\r\n              ) {\r\n                this.entAttrIndex = i\r\n                if (sonIndex) {\r\n                  this.sonAttrIndex = sonIndex\r\n                }\r\n                document.getElementById(this.attrLenElementId).focus()\r\n                document.getElementById(this.attrLenElementId).style.border =\r\n                  '1px solid red'\r\n                this.$message({\r\n                  message: '整数长度与小数长度之和不能超过38',\r\n                  type: 'warning'\r\n                })\r\n                return false\r\n              }\r\n              if (\r\n                defaultVal[1] &&\r\n                Number(defaultVal[1].length) > Number(attr[j].decimalLen)\r\n              ) {\r\n                this.defaultValueIndex = j\r\n                this.defaultValueType = 'number'\r\n                document.getElementsByName('defaultValue' + j)[0].focus()\r\n                document.getElementsByName('defaultValue' + j)[0].style.border =\r\n                  '1px solid red'\r\n                this.$message({\r\n                  message: '默认值中小数长度超出设置值',\r\n                  type: 'warning'\r\n                })\r\n                return false\r\n              }\r\n              if (attr[j].defaultValue && attr[j].defaultValue.length > 21) {\r\n                this.defaultValueIndex = j\r\n                this.defaultValueType = 'number'\r\n                document.getElementsByName('defaultValue' + j)[0].focus()\r\n                document.getElementsByName('defaultValue' + j)[0].style.border =\r\n                  '1px solid red'\r\n                this.$message({message: '整数长度不能超过21', type: 'warning'})\r\n                return false\r\n              }\r\n              if (!regPos.test(Number(attr[j].defaultValue))) {\r\n                this.defaultValueIndex = j\r\n                this.defaultValueType = 'number'\r\n                document.getElementsByName('defaultValue' + j)[0].focus()\r\n                document.getElementsByName('defaultValue' + j)[0].style.border =\r\n                  '1px solid red'\r\n                this.$message({message: '默认值应为数字', type: 'warning'})\r\n                return false\r\n              }\r\n            }\r\n            let d = attr[j].defaultValue\r\n            if (d.indexOf('.') > -1) {\r\n              let i = d.indexOf('.')\r\n              let start = d.substring(0, i)\r\n              let end = d.substring(i + 1, attr[j].defaultValue.length)\r\n              d = start + end\r\n            }\r\n            if (d.length > attr[j].attrLength + attr[j].decimalLen) {\r\n              this.defaultValueIndex = j\r\n              this.defaultValueType = 'varchar'\r\n              document.getElementsByName('defaultValue' + j)[0].focus()\r\n              document.getElementsByName('defaultValue' + j)[0].style.border =\r\n                '1px solid red'\r\n              this.$message({\r\n                message: '默认值长度需小于整数长度',\r\n                type: 'warning'\r\n              })\r\n              return false\r\n            }\r\n          } else if (\r\n            attr[j].dataType === 'varchar' ||\r\n            attr[j].dataType === 'number'\r\n          ) {\r\n            this.entAttrIndex = i\r\n            if (sonIndex) {\r\n              this.sonAttrIndex = sonIndex\r\n            }\r\n            document.getElementById(this.attrLenElementId).focus()\r\n            document.getElementById(this.attrLenElementId).style.border =\r\n              '1px solid red'\r\n            this.$message({message: '请添加整数长度', type: 'warning'})\r\n            return false\r\n          }\r\n        }\r\n      }\r\n      return true\r\n    },\r\n    entBlur() {\r\n      if (\r\n        this.openGrandSonAttr &&\r\n        this.formData.ents[this.entIndex].children[this.grandSonIndex]\r\n          .attributeList &&\r\n        this.formData.ents[this.entIndex].children[this.grandSonIndex]\r\n          .attributeList.length > 0\r\n      ) {\r\n        this.formData.ents[this.entIndex].children[\r\n          this.grandSonIndex\r\n        ].attributeList.forEach(item => {\r\n          item.desc = item.comment\r\n        })\r\n      }\r\n      if (typeof this.entBlurDescRepeatIndex == 'number') {\r\n        if (\r\n          document.getElementById(\r\n            'changeEntsDesc' + this.entBlurDescRepeatIndex\r\n          )\r\n        ) {\r\n          document\r\n            .getElementById('changeEntsDesc' + this.entBlurDescRepeatIndex)\r\n            .getElementsByTagName('div')[0].firstElementChild.style.border = ''\r\n        }\r\n        if (\r\n          document.getElementById(\r\n            'changeGrandSonEntsDesc' + this.entBlurDescRepeatIndex\r\n          )\r\n        ) {\r\n          document\r\n            .getElementById(\r\n              'changeGrandSonEntsDesc' + this.entBlurDescRepeatIndex\r\n            )\r\n            .getElementsByTagName('div')[0].firstElementChild.style.border = ''\r\n        }\r\n      }\r\n      if (typeof this.entBlurNameRepeatIndex == 'number') {\r\n        if (document.getElementById('entName' + this.entBlurNameRepeatIndex)) {\r\n          document\r\n            .getElementById('entName' + this.entBlurNameRepeatIndex)\r\n            .getElementsByTagName('div')[0].firstElementChild.style.border = ''\r\n        }\r\n        if (\r\n          document.getElementById(\r\n            'changeGrandSonEntsName' + this.entBlurNameRepeatIndex\r\n          )\r\n        ) {\r\n          document\r\n            .getElementById(\r\n              'changeGrandSonEntsName' + this.entBlurNameRepeatIndex\r\n            )\r\n            .getElementsByTagName('div')[0].firstElementChild.style.border = ''\r\n        }\r\n      }\r\n      if (\r\n        this.attrCommentElementId &&\r\n        document.getElementById(this.attrCommentElementId)\r\n      ) {\r\n        document\r\n          .getElementById(this.attrCommentElementId)\r\n          .getElementsByTagName('div')[0].firstElementChild.style.border = ''\r\n      }\r\n      if (typeof this.checkAttrNameIndex == 'number') {\r\n        if (\r\n          document.getElementById(\r\n            this.formData.ents[this.entAttrIndex].attributeList[\r\n              this.checkAttrNameIndex\r\n            ].name +\r\n              'attrName' +\r\n              this.checkAttrNameIndex\r\n          )\r\n        ) {\r\n          document\r\n            .getElementById(\r\n              this.formData.ents[this.entAttrIndex].attributeList[\r\n                this.checkAttrNameIndex\r\n              ].name +\r\n                'attrName' +\r\n                this.checkAttrNameIndex\r\n            )\r\n            .getElementsByTagName('div')[0].firstElementChild.style.border = ''\r\n        }\r\n        let sonAttr = this.formData.ents[this.sonAttrIndex]\r\n        if (sonAttr) {\r\n          document\r\n            .getElementById(\r\n              sonAttr.children[this.entAttrIndex].attributeList[\r\n                this.checkAttrNameIndex\r\n              ].name +\r\n                'attrName' +\r\n                this.checkAttrNameIndex\r\n            )\r\n            .getElementsByTagName('div')[0].firstElementChild.style.border = ''\r\n        }\r\n        this.checkAttrNameIndex = null\r\n      }\r\n      if (this.defaultValueType) {\r\n        document.getElementsByName(\r\n          'defaultValue' + this.defaultValueIndex\r\n        )[0].style.border = ''\r\n        this.defaultValueType = null\r\n      }\r\n      if (\r\n        this.attrLenElementId &&\r\n        document.getElementById(this.attrLenElementId)\r\n      ) {\r\n        document.getElementById(this.attrLenElementId).style.border = ''\r\n      }\r\n      if (\r\n        this.attrDecimaElementId &&\r\n        document.getElementById(this.attrDecimaElementId)\r\n      ) {\r\n        document.getElementById(this.attrDecimaElementId).style.border = ''\r\n      }\r\n    },\r\n    //发布并保存实体\r\n    deployedEntData() {\r\n      let formData = this.formData\r\n      this.formData.deployed = true\r\n      let _this = this\r\n      let loading = this.$loading()\r\n      form\r\n        .saveEntData(this.formData)\r\n        .then(resp => {\r\n          if (resp.data.state) {\r\n            this.$confirm('发布成功，是否跳转到业务表单页面？', '提示', {\r\n              confirmButtonText: '确定',\r\n              cancelButtonText: '取消',\r\n              type: 'warning'\r\n            })\r\n              .then(() => {\r\n                loading.close()\r\n                //this.handleDialogClose();\r\n                if (!formData.id) {\r\n                  formData.id = resp.data.message\r\n                  formData.pkVal = resp.data.message\r\n                }\r\n                _this.$refs.formTemplateDialog.showDialog(formData.id)\r\n              })\r\n              .catch(() => {\r\n                loading.close()\r\n                this.handleDialogClose()\r\n                this.dataView.id = ''\r\n              })\r\n          }\r\n        })\r\n        .catch(() => {\r\n          this.formData.deployed = false\r\n        })\r\n    },\r\n    //保存实体\r\n    saveEntData() {\r\n      let loading = this.$loading()\r\n      let formData = this.formData\r\n      if (this.isSave) {\r\n        this.formData.deployed = true\r\n      }\r\n      form.saveEntData(this.formData).then(resp => {\r\n        if (resp.data.state) {\r\n          if (!this.isSave) {\r\n            this.$confirm('保存成功，是否退出？', '提示', {\r\n              confirmButtonText: '确定',\r\n              cancelButtonText: '取消',\r\n              type: 'warning'\r\n            })\r\n              .then(() => {\r\n                loading.close()\r\n                this.$emit('loadTableData')\r\n                this.handleDialogClose()\r\n                this.dataView.id = ''\r\n              })\r\n              .catch(() => {\r\n                loading.close()\r\n                if (resp.data.message != null) {\r\n                  this.dataView.id = resp.data.message\r\n                }\r\n                this.$emit('opreta', 'edit')\r\n                this.$emit('opretaId', this.dataView.id)\r\n              })\r\n          } else {\r\n            this.$confirm('保存成功，是否跳转到业务表单页面', '提示', {\r\n              confirmButtonText: '确定',\r\n              cancelButtonText: '取消',\r\n              type: 'warning'\r\n            })\r\n              .then(() => {\r\n                if (this.isSave) {\r\n                  if (!formData.id) {\r\n                    formData.id = resp.data.message\r\n                    formData.pkVal = resp.data.message\r\n                  }\r\n                  this.$refs.formTemplateDialog.showDialog(formData.id)\r\n                }\r\n              })\r\n              .catch(() => {\r\n                this.$emit('loadTableData')\r\n                this.handleDialogClose()\r\n                this.dataView.id = ''\r\n              })\r\n              .finally(() => loading.close())\r\n          }\r\n        }\r\n      })\r\n    },\r\n    conFirmTemplate(templateModel) {\r\n      this.$router.push({\r\n        path: '/sysplat/form#formManager',\r\n        query: {\r\n          bos: [this.formData],\r\n          templateConf: templateModel\r\n        }\r\n      })\r\n    },\r\n    cancelFirmTemplate() {\r\n      this.handleDialogClose()\r\n    },\r\n    //外部表数据加入表单\r\n    handleSelectExternal(externalEnt) {\r\n      let {entExts, addFk, entExtsTable} = externalEnt\r\n\r\n      let selectEnt = this.entIndex\r\n      this.entIndex = entExts.index\r\n      let data = {}\r\n      if (this.formData.ents.length == 0 && !addFk) {\r\n        entExts.show = '主实体-外'\r\n        entExts.relation = 'main'\r\n        this.formData.ents.splice(this.entIndex, 1, entExts)\r\n        this.formData.ents[this.entIndex].attributeList = entExtsTable\r\n        data = this.formData.ents[this.entIndex]\r\n      } else if (entExts.type == 'sunTable' && !addFk) {\r\n        if (!this.formData.ents[selectEnt].children) {\r\n          this.$set(this.formData.ents[selectEnt], 'children', [])\r\n        }\r\n        this.formData.ents[selectEnt].children.push(entExts)\r\n        this.grandSonIndex = this.formData.ents[selectEnt].children.length - 1\r\n        this.formData.ents[selectEnt].children[\r\n          this.grandSonIndex\r\n        ].attributeList = entExtsTable\r\n        data = this.formData.ents[selectEnt].children[this.grandSonIndex]\r\n        data.desc = entExts.comment\r\n        data.name = entExts.name\r\n        data.show = '孙实体-外'\r\n      } else if (!addFk) {\r\n        this.formData.ents.push(entExts)\r\n        this.formData.ents[this.entIndex].attributeList = entExtsTable\r\n        data = this.formData.ents[this.entIndex]\r\n      } else if (addFk) {\r\n        this.entIndex = selectEnt\r\n        this.formData.ents[selectEnt].fk = entExts.fk\r\n        this.formData.ents[selectEnt].attributeList = entExtsTable\r\n        data = this.formData.ents[selectEnt]\r\n      }\r\n      let _this = this\r\n      data.attributeList = data.attributeList.filter(item => {\r\n        let val = item.name.toUpperCase()\r\n        return (\r\n          val != entExts.pk.toUpperCase() &&\r\n          val != 'F_FORM_DATA_REV_' &&\r\n          val != 'REF_ID_' &&\r\n          (!entExts.fk || val != entExts.fk.toUpperCase()) &&\r\n          val.toUpperCase() != 'TENANT_ID_'\r\n        )\r\n      })\r\n      data.attributeList.forEach((item, index) => {\r\n        item.index = index + 1\r\n        // 数字类型长度\r\n        if (item.attrLength == 0 && item.intLen != 0) {\r\n          item.attrLength = item.intLen\r\n        }\r\n      })\r\n      if (entExts.type == 'sunTable') {\r\n        this.getGrandSonEntsByIndex(this.grandSonIndex, selectEnt)\r\n      } else {\r\n        this.getEntsByIndex(this.entIndex)\r\n      }\r\n    },\r\n    //创建表单\r\n    createTableForm() {\r\n      if (!this.dataView.id) {\r\n        this.deployedEntData()\r\n      } else {\r\n        this.isSave = true\r\n        //this.saveEntData();\r\n        this.deployedEntData()\r\n      }\r\n    },\r\n    chineseFormat(id, list, param, index, v) {\r\n      let _this = this\r\n      let d = document.getElementById(id)\r\n      // disabled 或者 readonly 时 不需要请求\r\n      let timer = null\r\n      if (d === null || d.__vue__.disabled || d.__vue__.readonly || !v) return\r\n      if (timer) {\r\n        clearTimeout(timer)\r\n      }\r\n      timer = setTimeout(function() {\r\n        req\r\n          .request({\r\n            url: `${window.context.uc}/base/tools/v1/getPinyin`,\r\n            method: 'GET',\r\n            params: {chinese: v, type: 0}\r\n          })\r\n          .then(res => {\r\n            if (res.data.state) {\r\n              list[index][param] = res.data.value\r\n              main.$nextTick(() => {\r\n                main.$validator.validate()\r\n              })\r\n            }\r\n          })\r\n      }, 500)\r\n    },\r\n    addExternalTable(tableName) {\r\n      // 添加外部表\r\n      this.externalTables.push(tableName)\r\n    }\r\n  }\r\n}\r\n",null]}