{"remainingRequest":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!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\\FormNavigator.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\src\\components\\form\\FormNavigator.vue","mtime":1675071992022},{"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":["import \"core-js/modules/es7.object.get-own-property-descriptors\";\nimport \"core-js/modules/es6.object.keys\";\nimport _typeof from \"D:/jenkins/workspace/xq-web-bpm/node_modules/@babel/runtime/helpers/esm/typeof\";\nimport \"core-js/modules/es7.array.includes\";\nimport \"core-js/modules/es6.string.includes\";\nimport \"core-js/modules/web.dom.iterable\";\nimport \"core-js/modules/es6.function.name\";\nimport _defineProperty from \"D:/jenkins/workspace/xq-web-bpm/node_modules/@babel/runtime/helpers/esm/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport request from '@/request.js';\nimport form from '@/api/form.js';\nimport { mapState } from 'vuex';\nimport { Base64 } from 'js-base64';\nimport controlsApi from '@/api/controlsConfig.js';\nimport { Message } from 'element-ui';\nexport default {\n  props: ['widgetForm', 'formData', 'formId'],\n  data: function data() {\n    return {\n      leftSpan: 13,\n      //引入脚本左侧宽度\n      rightSpan: 9,\n      //引入脚本右侧宽度\n      asideShowLeft: true,\n      //引入脚本左侧默认显示\n      asideShowRight: true,\n      //引入脚本右侧默认显示\n      params: null,\n      dialogFormVisible: false,\n      //查看表单数据dialog\n      dialogincluddingFileVisible: false,\n      //引入脚本dialog\n      historyRecordVisible: false,\n      //表单历史记录dialog\n      newVersionConfig: false,\n      formHtmlUrl: '',\n      //获取表单HTML url\n      formHtml: '',\n      //获取表单HTML\n      formExpand: \"\",\n      //表单json数据\n      tableData: [],\n      //表单历史记录列表数据\n      pageResult: {\n        page: 1,\n        pageSize: 10,\n        total: 0,\n        showTotal: true\n      },\n      includeFiles: {\n        diyFile: '',\n        diyCss: '',\n        diyJs: ''\n      },\n      //引入脚本和样式对象\n      cmOptions: {\n        value: '',\n        mode: 'vue',\n        readOnly: false,\n        smartIndent: true,\n        tabSize: 2,\n        theme: 'base16-light',\n        lineNumbers: true,\n        line: true\n      },\n      cmOptions2: {\n        value: '',\n        mode: 'javascript',\n        readOnly: false,\n        smartIndent: true,\n        tabSize: 2,\n        theme: 'base16-light',\n        lineNumbers: true,\n        line: true\n      },\n      clickCount: 0,\n      publishTimer: null\n    };\n  },\n  computed: _objectSpread(_objectSpread({}, mapState({\n    currentUser: function currentUser(state) {\n      return state.login.currentUser;\n    }\n  })), {}, {\n    title: function title() {\n      return this.formData.formType == 'pc' ? 'PC表单设计' : '手机表单设计';\n    }\n  }),\n  watch: {\n    asideShowLeft: function asideShowLeft(newVal, oldVal) {\n      if (newVal != oldVal) {\n        this.asideshowHandler();\n      }\n    },\n    asideShowRight: function asideShowRight(newVal, oldVal) {\n      if (newVal != oldVal) {\n        this.asideshowHandler();\n      }\n    }\n  },\n  methods: {\n    asideshowHandler: function asideshowHandler() {\n      if (this.asideShowLeft && !this.asideShowRight) {\n        this.leftSpan = 22;\n        this.rightSpan = 0;\n      }\n\n      if (!this.asideShowLeft && this.asideShowRight) {\n        this.leftSpan = 0;\n        this.rightSpan = 22;\n      }\n\n      if (!this.asideShowLeft && !this.asideShowRight) {\n        this.leftSpan = 0;\n        this.rightSpan = 0;\n      }\n\n      if (this.asideShowLeft && this.asideShowRight) {\n        this.leftSpan = 13;\n        this.rightSpan = 9;\n      }\n    },\n    fileOnChange: function fileOnChange(file, fileList) {\n      var _this2 = this;\n\n      this.$confirm('导入后会覆盖掉之前选择的数据建模,以导入文件的绑定信息为准, 是否继续?', '提示', {\n        confirmButtonText: '确定',\n        cancelButtonText: '取消',\n        type: 'warning'\n      }).then(function () {\n        var reader = new FileReader();\n        reader.readAsText(file.raw);\n        var _this = _this2;\n\n        reader.onload = function () {\n          var json = JSON.parse(this.result);\n\n          _this.$emit('load-local', json);\n        };\n      }).catch(function () {});\n    },\n    //表单返回\n    formBack: function formBack() {\n      var _this3 = this;\n\n      this.$confirm('您确认离开当前编辑页面？', '现在离开，内容不会自动保存', {\n        cancelButtonText: '取消',\n        confirmButtonText: '确定',\n        type: 'warning',\n        closeOnClickModal: false\n      }).then(function () {\n        _this3.$emit('close-dialog');\n      });\n    },\n    //查看表单数据\n    getFormHistoryRecord: function getFormHistoryRecord(row) {\n      var this_ = this;\n      this_.dialogFormVisible = true;\n      request.get('${form}/form/form/v1/getFormHistoryRecord?id=' + row.id).then(function (rep) {\n        if (rep) {\n          this_.formHtml = row.formHtml;\n        }\n      });\n    },\n    //恢复表单数据\n    updateFormHistoryRecord: function updateFormHistoryRecord(row) {\n      var this_ = this;\n      request.get('${form}/form/form/v1/updateFormHistoryRecord?id=' + row.id).then(function (rep) {\n        if (rep.data.state) {\n          Message.success(rep.data.message); // let param = {\n          //   pageBean: {page: 1, pageSize: 20, showTotal: true},\n          //   querys: [\n          //     {\n          //       property: 'formId',\n          //       value: row.formId,\n          //       operation: 'EQUAL',\n          //       relation: 'AND'\n          //     }\n          //   ]\n          // }\n          // this_.loadData(param)\n\n          this_.$emit('close-dialog');\n        }\n      });\n    },\n    //删除表单数据\n    delFormHistoryRecord: function delFormHistoryRecord(row) {\n      var this_ = this;\n      request.remove('${form}/form/form/v1/delFormHistoryRecord?id=' + row.id).then(function (rep) {\n        if (rep.data.state) {\n          Message.success('删除成功');\n          var param = {\n            pageBean: {\n              page: 1,\n              pageSize: 20,\n              showTotal: true\n            },\n            querys: [{\n              property: 'formId',\n              value: row.formId,\n              operation: 'EQUAL',\n              relation: 'AND'\n            }]\n          };\n          this_.loadData(param);\n        }\n      });\n    },\n    variablesClick: function variablesClick(data) {\n      this.includeFiles.diyJs += data.value;\n    },\n    //加载表单历史记录列表数据\n    loadData: function loadData(param, cb) {\n      var this_ = this;\n      var queryUrl = '${form}/form/form/v1/formHistoryRecordlistJson';\n      var pageBean = {\n        pageBean: param.pageBean,\n        querys: [{\n          property: 'formId',\n          value: this_.formData.id,\n          // 兼容旧数据\n          operation: 'EQUAL',\n          relation: 'OR'\n        }, {\n          property: 'formKey',\n          value: this_.formData.formKey,\n          operation: 'EQUAL',\n          relation: 'OR'\n        }]\n      };\n      request.post(queryUrl, pageBean).then(function (response) {\n        this_.tableData = response.data.rows;\n        this_.pageResult = {\n          page: response.data.page,\n          pageSize: response.data.pageSize,\n          total: response.data.total\n        };\n      }).finally(function () {\n        return cb && cb();\n      });\n    },\n    //打开引入表单历史记录列表对话框\n    historyRecord: function historyRecord() {\n      var this_ = this;\n      this_.historyRecordVisible = true;\n      var param = {\n        pageBean: {\n          page: 1,\n          pageSize: 10,\n          showTotal: true\n        },\n        querys: [{\n          property: 'formId',\n          value: this_.formData.id,\n          operation: 'EQUAL',\n          relation: 'AND'\n        }]\n      };\n      this_.loadData(param);\n    },\n    afterformHtml: function afterformHtml(data) {\n      if (data && data.bpmForm) {\n        this.formHtml = data.bpmForm.formHtml;\n        this.formExpand = data.bpmForm.expand;\n        this.includeFiles.diyJs = data.bpmForm.diyJs || '';\n      }\n    },\n    //打开引入脚本对话框\n    includdingFile: function includdingFile(formId) {\n      if (!formId) {\n        formId = this.formData.id;\n      }\n\n      this.dialogincluddingFileVisible = true;\n      this.formHtmlUrl = '/form/form/v1/previewDesignVue?formId=' + formId;\n      this.includeFiles = this.formData.includeFiles ? Base64.decode(this.formData.includeFiles, 'utf-8') : {\n        diyFile: ' ',\n        diyCss: ' ',\n        diyJs: ' '\n      };\n    },\n    //引入脚本和样式对象保存\n    includeFilesOk: function includeFilesOk() {\n      var _this4 = this;\n\n      if (!this.formHtml) {\n        this.$message.warning('模板HTML不能为空！');\n        return;\n      }\n\n      this.dialogincluddingFileVisible = false;\n      form.saveFormJs({\n        formId: this.formData.id,\n        diyJs: this.includeFiles.diyJs,\n        formHtml: Base64.encode(this.formHtml, 'utf-8'),\n        formExpand: Base64.encode(this.formExpand, 'utf-8')\n      }).then(function (resp) {\n        if (resp.state) {\n          _this4.$message.success(resp.message);\n        }\n      });\n    },\n    //布局字段中嵌入了布局字段的情况\n    isSave: function isSave(list) {\n      var flag = false; //不需要绑定表单属性的控件\n\n      var ctrlTypeList = ['grid', 'text', 'accordion', 'tab', 'immediate-single', 'immediate-textarea', 'image', 'iframe', 'amap', 'dataView', 'table'];\n\n      for (var i = 0; i < list.length; i++) {\n        if (list[i].ctrlType == 'grid' || list[i].ctrlType == 'accordion' || list[i].ctrlType == 'tab') {\n          for (var j = 0; j < list[i].columns.length; j++) {\n            if (list[i].columns[j].list.length > 0) {\n              for (var k = 0; k < list[i].columns[j].list.length; k++) {\n                if (list[i].columns[j].list[k].name == '' && ctrlTypeList.indexOf(list[i].columns[j].list[k].ctrlType) == -1 && !list[i].columns[j].list[k].options.noBindModel) {\n                  this.$message.error('【' + list[i].desc + '中的' + list[i].columns[j].list[k].desc + '】未绑定属性值');\n                  flag = true;\n                  return flag;\n                }\n              }\n            }\n          }\n        }\n      }\n\n      return flag;\n    },\n    getPostData: function getPostData() {\n      if (this.widgetForm.list.length == 0) {\n        this.$message.error('请拖拽表单控件');\n        return;\n      } //不需要绑定表单属性的控件\n\n\n      var ctrlTypeList = ['grid', 'text', 'accordion', 'tab', 'immediate-single', 'immediate-textarea', 'image', 'iframe', 'amap', 'dataView', 'table'];\n      var amap = 0;\n\n      for (var i = 0; i < this.widgetForm.list.length; i++) {\n        if (this.widgetForm.list[i].ctrlType == 'amap') {\n          amap++;\n\n          if (amap > 1) {\n            this.$message({\n              type: 'error',\n              message: '表单中只能存在一个地图控件!'\n            });\n            return;\n          }\n        }\n\n        if (this.widgetForm.list[i].ctrlType == 'grid' || this.widgetForm.list[i].ctrlType == 'accordion' || this.widgetForm.list[i].ctrlType == 'tab') {\n          for (var j = 0; j < this.widgetForm.list[i].columns.length; j++) {\n            if (this.widgetForm.list[i].columns[j].span.length > 20) {\n              this.$message({\n                message: 'tab布局控件第' + (j + 1) + '个标签配置项字符长度超出20！',\n                type: 'error'\n              });\n              return;\n            }\n\n            if (this.widgetForm.list[i].columns[j].list.length > 0) {\n              for (var k = 0; k < this.widgetForm.list[i].columns[j].list.length; k++) {\n                if (this.widgetForm.list[i].columns[j].list[k].ctrlType == 'amap') {\n                  amap++;\n\n                  if (amap > 1) {\n                    this.widgetForm.list[i].columns[j].list.splice(k, 1);\n                    this.$message({\n                      type: 'error',\n                      message: '已存在高德地图控件!'\n                    });\n                    return;\n                  }\n                } //判断布局字段中是否嵌入了布局字段\n\n\n                if (this.widgetForm.list[i].columns[j].list[k].name == '' && (this.widgetForm.list[i].columns[j].list[k].ctrlType == 'grid' || this.widgetForm.list[i].columns[j].list[k].ctrlType == 'accordion' || this.widgetForm.list[i].columns[j].list[k].ctrlType == 'tab')) {\n                  var flag = this.isSave(this.widgetForm.list[i].columns[j].list); //布局字段中嵌入了布局字段\n\n                  if (flag) {\n                    return;\n                  }\n                } else if (this.widgetForm.list[i].columns[j].list[k].name == '' && ctrlTypeList.indexOf(this.widgetForm.list[i].columns[j].list[k].ctrlType) == -1 && !this.widgetForm.list[i].columns[j].list[k].options.noBindModel) {\n                  this.$message.error('【' + this.widgetForm.list[i].desc + '中的' + this.widgetForm.list[i].columns[j].list[k].desc + '】未绑定属性值');\n                  return;\n                }\n              }\n            }\n          }\n        }\n      }\n\n      var resp = this.judgeWidgetFormList(this.widgetForm.list);\n\n      if (resp) {\n        var formDef = {\n          expand: JSON.stringify(this.widgetForm),\n          rev: this.formData.rev\n        };\n        formDef.name = this.formData.name;\n        formDef.key = this.formData.formKey;\n        formDef.type = this.formData.typeName;\n        formDef.typeId = this.formData.typeId;\n\n        if (this.formData.defId) {\n          formDef.id = this.formData.defId;\n        }\n\n        var bpmFormVo = {\n          bpmFormDef: formDef,\n          bpmForm: this.formData\n        };\n\n        if (this.newVersionConfig) {\n          bpmFormVo.newForm = 'newForm';\n        }\n\n        return bpmFormVo;\n      }\n    },\n    publish: function publish(i) {\n      var _this5 = this;\n\n      if (i == 1) {\n        this.save();\n      }\n\n      i++;\n\n      if (this.isPublish) {\n        this.$http.post('${form}/form/form/v1/publish', {}, {\n          formId: this.formId\n        }).then(function (response) {\n          if (response.data.state) {\n            _this5.$message({\n              type: 'success',\n              message: response.data.message\n            });\n\n            _this5.formData.status = 'deploy'; //清除定时器\n\n            if (_this5.publishTimer) {\n              clearTimeout(_this5.publishTimer);\n              _this5.publishTimer = null;\n            }\n\n            _this5.$emit('close-dialog');\n          }\n        });\n      } else {\n        this.publishTimer = setTimeout(function () {\n          return _this5.publish(i);\n        }, 500);\n      }\n    },\n    newVersion: function newVersion() {\n      this.newVersionConfig = true;\n      this.save();\n    },\n    save: function save(param) {\n      this.notPublish = true;\n\n      if (param) {\n        this.notPublish = false;\n      } //先校验表单的基本属性\n\n\n      this.$emit('saveValidate');\n    },\n    saveEnd: function saveEnd() {\n      var params = this.getPostData();\n      this.newVersionConfig = false;\n\n      if (params) {\n        var this_ = this; //保存表单是先判断是否有表单模板，没有表单模板先初始化表单模板\n\n        form.isTemplateByAlias('fieldControl').then(function (resp) {\n          if (resp.data.value != undefined) {\n            //保存表单\n            this_.saveForm(params, this_);\n          } else {\n            //初始化表单模板\n            form.initTemplate().then(function (response) {\n              if (response.data.state) {\n                //保存表单\n                this_.saveForm(params, this_);\n              }\n            });\n          }\n        });\n      }\n    },\n    //保存表单\n    saveForm: function saveForm(params, this_) {\n      var _this6 = this;\n\n      if (this.clickCount > 0) {\n        this.$message({\n          type: 'warning',\n          message: '操作过快，请两秒钟后再进行尝试！'\n        });\n        return false;\n      }\n\n      if (this.clickCount == 0) {\n        ++this.clickCount;\n        request.post('${form}/form/form/v1/saveForm', params).then(function (response) {\n          this_.$message.success(response.data.message);\n          this_.$emit('close-dialog', response.data.value);\n\n          if (_this6.notPublish) {\n            _this6.isPublish = true;\n          }\n\n          setTimeout(function () {\n            _this6.clickCount = 0;\n          }, 2000);\n        }, function (error) {\n          _this6.$message.error(error.response.data.message || '表单保存失败！请检查表单模板是否正确');\n\n          _this6.isPublish = false;\n          setTimeout(function () {\n            _this6.clickCount = 0;\n          }, 2000);\n        });\n      }\n    },\n    previewForm: function previewForm() {\n      if (this.currentUser && this.currentUser.account) {\n        var routeUrl = this.$router.resolve({\n          path: '/previewForm/' + this.formId\n        }); // todo lj  如果要单独处理手机表单 再处理\n        // if (this.formData.formType == 'pc') {\n        //   url = window.context.front + '/previewForm/' + this.formId + '?token=' + this.currentUser.token\n        //   // Base64.encode(this.currentUser.account);\n        // } else {\n        //   routeUrl = window.context.mobile + '/previewForm/' + this.formId + '?token=' + this.currentUser.token\n        //   // Base64.encode(this.currentUser.account);\n        // }\n\n        window.open(routeUrl.href, '_blank');\n      }\n    },\n    genHtml: function genHtml() {\n      var _this7 = this;\n\n      request.post('${form}/form/form/v1/generateFrom', this.getPostData()).then(function (response) {\n        _this7.$message.success(response.data.message);\n\n        _this7.$emit('close-dialog');\n      });\n    },\n    editHtml: function editHtml() {},\n    isUpload: function isUpload() {},\n    addStyle: function addStyle(listValue) {\n      if (listValue.columns.length > 2) {\n        listValue.columns.forEach(function (v, i) {\n          if (v.style && v.style.includes('border')) {\n            if (i < listValue.columns.length - 1 && !v.style.includes('border-right: none')) {\n              v.style += ' border-right: none; ';\n            }\n          }\n        });\n      }\n    },\n    judgeWidgetFormList: function judgeWidgetFormList(widgetFormList) {\n      var _this8 = this;\n\n      // 判断表单当中，有必须绑定属性的控件没有绑定属性\n      var resultVal = true;\n      var fieldList = [];\n\n      for (var i = 0; i < widgetFormList.length; i++) {\n        var listValue = this.widgetForm.list[i];\n\n        if (listValue.columns) {\n          this.addStyle(listValue); // 栅格布局的字段保存  tab 折叠\n\n          for (var j = 0; j < listValue.columns.length; j++) {\n            var listValue1 = []; //非布局字段\n\n            var fieldListValue1 = listValue.columns[j].list.filter(function (c) {\n              !controlsApi.isLayoutComponents(c.ctrlType) && !c.options.noBindModel && c.options.noBindModel != undefined;\n            });\n            listValue1 = listValue1.concat(fieldListValue1); //栅格-折叠-tab布局/表格布局\n\n            var gridListValue1 = listValue.columns[j].list.filter(function (c) {\n              return c.ctrlType == 'grid' || c.ctrlType == 'table' || c.ctrlType == 'tab' || c.ctrlType == 'accordion';\n            });\n\n            for (var k = 0; k < gridListValue1.length; k++) {\n              //栅格-折叠-tab布局\n              var columnsObj = gridListValue1[k].columns;\n\n              if (columnsObj) {\n                for (var l = 0; l < columnsObj.length; l++) {\n                  var list = columnsObj[l].list;\n                  list = list.filter(function (c) {\n                    if (c.ctrlType == \"table\") {\n                      c.rows.forEach(function (item) {\n                        item.cols.forEach(function (obj) {\n                          listValue1 = listValue1.concat(obj.list);\n                        });\n                      });\n                    } else {\n                      var obj = c.columns;\n\n                      if (obj) {\n                        for (var _l = 0; _l < obj.length; _l++) {\n                          var list = obj[_l].list;\n                          list = list.filter(function (n) {\n                            return !n.options.noBindModel;\n                          });\n                          listValue1 = listValue1.concat(list);\n                        }\n                      }\n                    }\n                  });\n                  listValue1 = listValue1.concat(list);\n                }\n              } //表格布局\n\n\n              if (!columnsObj) {\n                columnsObj = gridListValue1[k].rows;\n                columnsObj.forEach(function (item) {\n                  item.cols.forEach(function (obj) {\n                    listValue1 = listValue1.concat(obj.list);\n                  });\n                });\n              }\n            }\n\n            fieldList = fieldList.concat(listValue1); //子表布局\n\n            var subtableListValue1 = listValue.columns[j].list.filter(function (c) {\n              return c.ctrlType == 'subtable' || c.ctrlType == 'subDiv';\n            });\n\n            for (var _k = 0; _k < subtableListValue1.length; _k++) {\n              var subObj = subtableListValue1[_k];\n\n              if (subObj.list) {\n                if (!this.subUnique(subObj)) {\n                  return false;\n                }\n              }\n            }\n\n            resultVal = this.validateFields(listValue1);\n\n            if (!resultVal) {\n              return false;\n            } //数据视图\n\n\n            var dataViewListValue1 = listValue.columns[j].list.filter(function (c) {\n              return c.ctrlType == 'dataView';\n            });\n\n            for (var h = 0; h < dataViewListValue1.length; h++) {\n              var dataView = dataViewListValue1[h];\n\n              if (dataView.templateKey == '') {\n                this.$message.error('请绑定表单列表');\n                return false;\n              }\n            }\n\n            for (var f = 0; f < fieldList.length; f++) {\n              for (var v = 0; v < listValue.columns[j].list.length; v++) {\n                if (listValue.columns[j].list[v].fieldPath == fieldList[f].fieldPath && fieldList[f].target) {\n                  this.$message.error('字段属性【' + fieldList[f].title + '】,绑定了多个布局控件');\n                  return false;\n                }\n              }\n            } // if (listValue.ctrlType == \"grid\") {\n\n\n            fieldList = fieldList.concat(listValue.columns[j].list); // }\n          }\n        } else if (listValue.list) {\n          var res;\n\n          var _ret = function () {\n            var _this = _this8;\n            var fieldNum = 0;\n\n            try {\n              listValue.list.forEach(function (v, index) {\n                if ((listValue.ctrlType == 'subtable' || listValue.ctrlType == 'subDiv') && fieldNum == 0) {\n                  if (v.ctrlType != 'sunDiv' && v.ctrlType != 'suntable') {\n                    fieldNum++;\n                  } else if (listValue.list.length - 1 == index && fieldNum == 0) {\n                    throw new Error('请给子表添加字段!');\n                  }\n                }\n\n                if (v.ctrlType == 'grid') {\n                  _this.addStyle(v);\n                }\n              });\n            } catch (e) {\n              _this8.$message({\n                type: 'error',\n                message: e.message\n              });\n\n              return {\n                v: false\n              };\n            }\n\n            res = _this8.subUnique(listValue);\n\n            if (!res) {\n              return {\n                v: false\n              };\n            }\n          }();\n\n          if (_typeof(_ret) === \"object\") return _ret.v;\n        } else if ((!listValue.options || !listValue.options.noBindModel) && !listValue.rows) {\n          fieldList.push(listValue); // 不使用布局\n\n          resultVal = this.validateField(listValue);\n\n          if (!resultVal) {\n            break;\n          }\n        } else if (listValue.rows && listValue.rows.length > 0) {\n          listValue.rows.forEach(function (item) {\n            item.cols.forEach(function (obj) {\n              fieldList = fieldList.concat(obj.list);\n            });\n          }); // 表格布局\n\n          resultVal = this.validateRowFields(listValue);\n\n          if (!resultVal) {\n            break;\n          }\n        } else if (listValue.templateKey) {\n          if (listValue.templateKey == '') {\n            //数据视图\n            this.$message.error('请绑定表单列表');\n            return false;\n          }\n        }\n      }\n\n      var obj = this.unique(fieldList);\n\n      if (this.unique(fieldList)) {\n        var repeatArray = fieldList.filter(function (item) {\n          return item.fieldPath === obj.fieldPath;\n        });\n        var desc = '';\n        var title = repeatArray[0].title;\n\n        if (!title) {\n          title = repeatArray[0].fieldPath;\n        }\n\n        repeatArray.forEach(function (item) {\n          desc = desc + item.desc + ',';\n        });\n        this.$message.error('属性【' + title + '】,绑定了多个控件');\n        return false;\n      }\n\n      return resultVal;\n    },\n    subUnique: function subUnique(listValue) {\n      var _this9 = this;\n\n      var res = true;\n\n      if (!listValue.options.boSubEntity) {\n        this.$message.error(listValue.desc + '请绑定实体');\n        return false;\n      }\n\n      if (listValue.list.length == 0) {\n        this.$message.error(listValue.desc + '请至少绑定一个子表字段');\n        return false;\n      } //获取孙表字段\n\n\n      var sunList = listValue.list.filter(function (c) {\n        return c.ctrlType == 'suntable' || c.ctrlType == 'sunDiv';\n      });\n\n      for (var k = 0; k < sunList.length; k++) {\n        if (!sunList[k].options.boSubEntity) {\n          this.$message.error(sunList[k].desc + '请绑定实体');\n          return false;\n        }\n\n        if (sunList[k].list.length == 0) {\n          this.$message.error(sunList[k].desc + '请至少绑定一个孙表字段');\n          return false;\n        }\n\n        var sunFieldList = this.getField(sunList[k]);\n\n        if (this.unique(sunFieldList)) {\n          var _ret2 = function () {\n            var repeatArray = sunFieldList.filter(function (item) {\n              return item.fieldPath === obj.fieldPath;\n            });\n            var desc = '';\n            var title = repeatArray[0].title;\n\n            if (!title) {\n              title = repeatArray[0].fieldPath;\n            }\n\n            repeatArray.forEach(function (item) {\n              desc = desc + item.desc + ',';\n            });\n\n            _this9.$message.error(listValue.desc + '孙表中属性【' + title + '】,绑定了多个控件【' + desc + '】,只能绑定一个');\n\n            return {\n              v: false\n            };\n          }();\n\n          if (_typeof(_ret2) === \"object\") return _ret2.v;\n        }\n\n        if (!this.validateFields(sunFieldList)) {\n          return false;\n        }\n      }\n\n      var subFieldList = this.getField(listValue);\n      var obj = this.unique(subFieldList);\n\n      if (obj) {\n        var repeatArray = subFieldList.filter(function (item) {\n          return item.fieldPath === obj.fieldPath;\n        });\n        var desc = '';\n        var title = repeatArray[0].title;\n\n        if (!title) {\n          title = repeatArray[0].fieldPath;\n        }\n\n        repeatArray.forEach(function (item) {\n          desc = desc + item.desc + ',';\n        });\n        this.$message.error(listValue.desc + '子表中属性【' + title + '】,绑定了多个控件【' + desc + '】,只能绑定一个');\n        return false;\n      }\n\n      if (!this.validateFields(subFieldList)) {\n        return false;\n      }\n\n      return res;\n    },\n    getField: function getField(listValue) {\n      //获取布局中栅格布局\n      var gridListValue1 = listValue.list.filter(function (c) {\n        return c.ctrlType == 'grid';\n      }); //获取布局中基础字段\n\n      var subFieldList = listValue.list.filter(function (c) {\n        return c.ctrlType != 'grid' && (c.ctrlType != 'suntable' || c.ctrlType != 'sunDiv');\n      });\n\n      for (var k = 0; k < gridListValue1.length; k++) {\n        var columnsObj = gridListValue1[k].columns;\n\n        for (var l = 0; l < columnsObj.length; l++) {\n          var list = columnsObj[l].list;\n          subFieldList = subFieldList.concat(list);\n        }\n      }\n\n      return subFieldList;\n    },\n    unique: function unique(arr) {\n      var hash = {};\n\n      for (var i = 0; i < arr.length; i++) {\n        if (arr[i].fieldPath && hash[arr[i].fieldPath]) {\n          return arr[i];\n        }\n\n        hash[arr[i].fieldPath] = true;\n      }\n\n      return false;\n    },\n    validateRowFields: function validateRowFields(field) {\n      var resultVal = true;\n\n      for (var k = 0; k < field.rows.length; k++) {\n        var cols = field.rows[k].cols;\n\n        for (var c = 0; c < cols.length; c++) {\n          for (var l = 0; l < cols[c].list.length; l++) {\n            resultVal = this.validateField(cols[c].list[l]);\n\n            if (!resultVal) {\n              return false;\n            }\n          }\n        }\n      }\n\n      return true;\n    },\n    validateFields: function validateFields(fields) {\n      var resultVal = true;\n\n      for (var k = 0; k < fields.length; k++) {\n        resultVal = this.validateField(fields[k]);\n\n        if (!resultVal) {\n          return false;\n        }\n      }\n\n      return true;\n    },\n    validateField: function validateField(field) {\n      if ((!field.options || !field.options.noBindModel) && field.name == '') {\n        this.$message.error('请绑定属性值');\n        return false;\n      }\n\n      if (field.ctrlType == 'selector' && !field.options.selector.type.alias) {\n        this.$message.error('选择器控件请绑定选择器');\n        return false;\n      }\n\n      return true;\n    }\n  }\n};",null]}