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