{"remainingRequest":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xq-web-bpm\\src\\components\\form\\PropertyPanel.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\src\\components\\form\\PropertyPanel.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":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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 {Base64} from 'js-base64'\r\nimport deepmerge from 'deepmerge'\r\nimport {advanceComponents, basicComponents, layoutComponents} from '@/api/controlsConfig.js'\r\nimport LayoutProperty from '@/components/form/LayoutProperty.vue'\r\nimport AdvancedProperty from '@/components/form/AdvancedProperty.vue'\r\nimport BasicsProperty from '@/components/form/BasicsProperty.vue'\r\nimport htEditor from '@/components/common/HtEditor.vue'\r\nimport i18nMessageEdit from '@/components/system/I18nMessageEdit.vue'\r\nimport WidgetFormBus from '@/components/form/bus/WidgetFormBus.js'\r\nimport utils from '@/hotent-ui-util.js'\r\n\r\nconst EipSysTypeSelector = () => import('@/components/selector/EipSysTypeSelector.vue')\r\nexport default {\r\n name: 'property-panel',\r\n props: ['data', 'boDefData', 'formData', 'mainBoFields', 'subTables', 'sunTablesMap'],\r\n components: {\r\n LayoutProperty,\r\n AdvancedProperty,\r\n BasicsProperty,\r\n htEditor,\r\n i18nMessageEdit,\r\n EipSysTypeSelector\r\n },\r\n data() {\r\n return {\r\n formCollapseActiveNames: 'formBasic',\r\n basicComponents,\r\n layoutComponents,\r\n advanceComponents,\r\n copyAdvanceComponents: '',\r\n activeTabName: 'field',\r\n avtiveCollapseName: 'basic',\r\n field: this.data,\r\n formObj: this.formData,\r\n dialogincluddingFileVisible: false, //引入脚本dialog\r\n formSettingVisible: false, //表单配置dialog\r\n formSetting: {\r\n align: 'right',\r\n customColon: false,\r\n fontColor: 'rgb(150, 151, 153)'\r\n },\r\n formHtmlUrl: '', //获取表单HTML url\r\n formHtml: '',//表单html数据\r\n formExpand:\"\",//表单json数据\r\n isWatch: false,\r\n includeFiles: {diyFile: '', diyCss: '', diyJs: ''}, //引入脚本和样式对象\r\n tableFields: [],\r\n filterListType: ['number', 'currency', 'date', 'amap'],\r\n clobFieldList:[\"textarea\",\"dialog\",\"imageViewer\",\"related-process\",\r\n \"signature\",\"button\",\"immediate-single\",\"immediate-textarea\",\r\n \"milepost\",\"eip-cascader\",\"dataView\",\"text\",\r\n \"QRcode\",\"iframe\",\"image\"],//大文本类型字段允许绑定的控件\r\n allBoData: [],\r\n formVarData: [],\r\n returnData: [],\r\n cmOptions: {\r\n value: '',\r\n mode: 'vue',\r\n readOnly: false,\r\n smartIndent: true,\r\n tabSize: 2,\r\n theme: 'base16-light',\r\n lineNumbers: true,\r\n line: true\r\n },\r\n cmOptions2: {\r\n value: '',\r\n mode: 'javascript',\r\n readOnly: false,\r\n smartIndent: true,\r\n tabSize: 2,\r\n theme: 'base16-light',\r\n lineNumbers: true,\r\n line: true\r\n },\r\n i18nMessageKey: '',\r\n createKeyMap: {\r\n text: true,\r\n image: true,\r\n 'immediate-single': true,\r\n 'immediate-textarea': true\r\n },\r\n sunTables: [],\r\n currentBoSubEntity: '',\r\n fieldIndexData: {},\r\n noAttrFieldList:[],\r\n }\r\n },\r\n created() {\r\n const me_ = this;\r\n //表单初始化时收集无属性控件字段\r\n WidgetFormBus.$on(\"initNoAttrField\", (obj) => {\r\n if(this.isNoAttrField(obj) && obj.tableName){\r\n me_.noAttrFieldListChange(obj, true);\r\n }\r\n });\r\n },\r\n methods: {\r\n //重置表单配置信息\r\n formSettingReset() {\r\n this.formSetting = {\r\n align: 'right',\r\n customColon: false,\r\n fontColor: 'rgb(150, 151, 153)'\r\n }\r\n this.formData.formSetting = ''\r\n },\r\n //打开表单配置弹框\r\n formSettingClick() {\r\n if (this.formData.formSetting) {\r\n this.formSetting = JSON.parse(this.formData.formSetting)\r\n }\r\n this.formSettingVisible = true\r\n },\r\n //保存表单配置信息\r\n formSettingOk() {\r\n this.formData.formSetting = JSON.stringify(this.formSetting)\r\n this.formSettingVisible = false\r\n },\r\n saveValidate() {\r\n const this_ = this\r\n utils\r\n .validateForm(this, 'editBpmForm')\r\n .then(() => {\r\n //手机表单保存时 表单类型指定为手机表单类型\r\n if (this_.formData.formType && this_.formData.formType != 'mobile') {\r\n this_.formData.formType = 'pc'\r\n }\r\n // this.formData.name = this.formData.formName;\r\n this_.$emit('saveEnd')\r\n })\r\n .catch(reason => {\r\n let rules = reason.map(obj => {\r\n return obj.rule\r\n }) \r\n if(this_.formData && this_.formData.typeName && \r\n this_.formData.name && this_.formData.formKey){\r\n if (rules.includes('isExist')) {\r\n this.$message.error('表单别名重复')\r\n }else if (rules.includes('regex')) {\r\n this.$message.error('只能输入字母、数字、下划线,且以字母开头')\r\n }\r\n }else{\r\n //获取到报错后的规则数组\r\n if (rules.includes('required')) {\r\n this.$message.error('请完整填写表单内容')\r\n } else if (rules.includes('isExist')) {\r\n this.$message.error('表单别名重复')\r\n }\r\n }\r\n this.activeTabName = 'form'\r\n })\r\n },\r\n filterFields(obj) {\r\n if((obj.columnType==\"clob\" || obj.dataType==\"clob\") && this.clobFieldList.indexOf(this.field.ctrlType)==-1){\r\n return false;\r\n }\r\n if (this.filterListType.indexOf(this.field.ctrlType) > -1) {\r\n if(this.field.ctrlType==\"date\" && this.field.options.dataType!=\"date\"){\r\n this.field.options.dataType = \"date\";\r\n }\r\n return obj.dataType == this.field.options.dataType\r\n } else if (obj.nodeType == 'sub') {\r\n return false\r\n } else {\r\n return true\r\n }\r\n },\r\n //高级控件\r\n filterAdvanceFields(obj) {\r\n //子/孙表不能选择的控件类型 返回false 不能选择\r\n let types = ['dataView', 'QRcode', 'milepost']\r\n if (this.field.boSubEntity && types.includes(obj.ctrlType)) {\r\n return false\r\n }\r\n return true\r\n },\r\n //常用控件\r\n filterFieldsByCurrentField(obj) {\r\n //子/孙表不能选择的控件类型 返回false 不能选择\r\n let types = ['related-process', 'amap']\r\n if (this.field.boSubEntity && types.includes(obj.ctrlType)) {\r\n return false\r\n }\r\n if (!obj.options.dataType) {\r\n return true\r\n }\r\n if (!this.field.options){\r\n return true\r\n }\r\n if (!this.field.options.dataType) {\r\n return true\r\n }\r\n if (this.field.options.dataType == obj.options.dataType) {\r\n return true\r\n }\r\n let dataTypes = obj.options.dataType.split('|')\r\n if (dataTypes.indexOf('string') != -1) {\r\n dataTypes.push('varchar')\r\n dataTypes.push('nvarchar')\r\n }\r\n // 数字控件不能绑定日期控件\r\n if (this.field.options.dataType == 'number') {\r\n return obj.options.dataType != 'date'\r\n }\r\n // 日期控件不能绑定数字控件\r\n if (this.field.options.dataType == 'date') {\r\n return obj.options.dataType != 'number'\r\n }\r\n // 大文本类型默认多行文本\r\n if (this.field.options.dataType == 'clob') {\r\n if(obj.ctrlType == 'textarea'){\r\n return true;\r\n }\r\n }\r\n // 字符串类型可以选择所有字段\r\n let charArr = ['string', 'varchar', 'nvarchar']\r\n // 需要兼容以前的代码 this.field.options.dataType == \"\"\r\n let result = this.field.options.dataType.split('|').filter(item => {\r\n return dataTypes.indexOf(item) != -1 || charArr.indexOf(item) != -1\r\n })\r\n\r\n if (result && result.length >= 1) {\r\n return true\r\n }\r\n return false\r\n },\r\n /**\r\n * 新旧属性的替换,并保留原有的双向绑定,\r\n * 具体逻辑为:\r\n * 1.新属性有值的,旧属性没有的,新增\r\n * 2.新属性没有的,旧属性有的,删除\r\n * 3.新属性有的,旧属性也有,,则保留旧属性(desc等一些特殊key 需要特殊逻辑处理)\r\n */\r\n attributeToReplace(oldV, newV) {\r\n for (let key in oldV) {\r\n //2.新属性没有的,旧属性有的,删除\r\n if (key !=\"key\" && newV[key] === undefined && (oldV[key] || oldV[key]===\"\")) {\r\n delete oldV[key]\r\n }\r\n }\r\n for (let key in newV) {\r\n let value = newV[key]\r\n //1.新属性有值的,旧属性没有的,新增\r\n if (oldV[key] === undefined || oldV[key] === '') {\r\n this.$set(oldV, key, value);\r\n //3.新属性有的,旧属性也有,,则保留旧属性(options等一些特殊key 需要特殊逻辑处理)\r\n } else {\r\n if (key === 'options') {\r\n // 保留绑定的dataType\r\n let boDataType = oldV[key].dataType\r\n oldV[key] = value\r\n if (boDataType) {\r\n oldV[key].dataType = boDataType\r\n }\r\n }\r\n }\r\n }\r\n //旧属性有值 和新属性的值不一样 要重置\r\n for (let keys in oldV){\r\n if (!(oldV[keys] instanceof Object)){\r\n \tif (oldV[keys]!=newV[keys] && newV[keys]!=undefined){\r\n\t\t oldV[keys]=newV[keys];\r\n\t }\r\n }\r\n }\r\n },\r\n //切换控件类型对应改变属性\r\n changeCtrlType(isClean) {\r\n const me_ = this\r\n const selectObj = deepmerge({}, me_.field, {clone: true})\r\n basicComponents.forEach(item => {\r\n if (me_.field.ctrlType == item.ctrlType) {\r\n // me_.field = deepmerge({}, item, { clone: true });\r\n let i = deepmerge({}, item, {clone: true})\r\n i.parentNodeType = me_.data.parentNodeType\r\n i.boSubEntity = me_.data.boSubEntity\r\n me_.attributeToReplace(me_.field, i)\r\n\r\n me_.field.key = me_.data.key\r\n if (!isClean) {\r\n me_.field.boDefId = selectObj.boDefId\r\n me_.field.target = selectObj.target\r\n me_.field.boAttrId = selectObj.boAttrId\r\n me_.field.fieldPath = selectObj.fieldPath\r\n me_.field.name = selectObj.name\r\n me_.field.desc = selectObj.desc\r\n me_.field.title = selectObj.desc\r\n me_.field.entId = selectObj.entId\r\n me_.field.boDefAlias = selectObj.boDefAlias\r\n me_.field.tableName = selectObj.tableName\r\n me_.field.columnType = selectObj.columnType\r\n me_.field.options.format = selectObj.options.format\r\n me_.field.options.inputFormat = selectObj.options.format\r\n me_.field.options.decimalDigits = selectObj.decimalLen\r\n me_.field.options.maxDecimalDigits = selectObj.decimalLen\r\n }\r\n //me_.$emit(\"data:update\", me_.field);\r\n //WidgetFormBus.$emit(\"changeCtrlType\", me_.field);\r\n }\r\n })\r\n advanceComponents.forEach(item => {\r\n if (me_.field.ctrlType == item.ctrlType) {\r\n // me_.field = deepmerge({}, item, { clone: true });\r\n let e = deepmerge({}, item, {clone: true})\r\n e.parentNodeType = me_.data.parentNodeType\r\n e.boSubEntity = me_.data.boSubEntity\r\n me_.attributeToReplace(me_.field, e)\r\n me_.field.key = me_.data.key\r\n if (!isClean) {\r\n me_.field.boDefId = selectObj.boDefId\r\n me_.field.target = selectObj.target\r\n me_.field.boAttrId = selectObj.boAttrId\r\n me_.field.fieldPath = selectObj.fieldPath\r\n me_.field.name = selectObj.name\r\n me_.field.desc = selectObj.desc\r\n me_.field.title = selectObj.desc\r\n me_.field.entId = selectObj.entId\r\n me_.field.boDefAlias = selectObj.boDefAlias\r\n me_.field.tableName = selectObj.tableName\r\n me_.field.columnType = selectObj.columnType\r\n me_.field.options.format = selectObj.format\r\n me_.field.options.inputFormat = selectObj.format\r\n me_.field.options.decimalDigits = selectObj.decimalLen\r\n me_.field.options.maxDecimalDigits = selectObj.decimalLen\r\n }\r\n // WidgetFormBus.$emit(\"changeCtrlType\", me_.field);\r\n }\r\n })\r\n me_.$nextTick(() => {\r\n me_.$emit('update:data', me_.field)\r\n })\r\n },\r\n //引入脚本和样式对象保存\r\n includeFilesOk() {\r\n if (!this.formHtml) {\r\n this.$message.warning('模板HTML不能为空!')\r\n return\r\n }\r\n this.dialogincluddingFileVisible = false\r\n form\r\n .saveFormJs({\r\n formId: this.formData.id,\r\n diyJs: this.includeFiles.diyJs,\r\n formHtml: Base64.encode(this.formHtml, 'utf-8'),\r\n formExpand:Base64.encode(this.formExpand, 'utf-8')\r\n })\r\n .then(resp => {\r\n if (resp.state) {\r\n this.$message.success(resp.message)\r\n }\r\n })\r\n },\r\n variablesClick(data) {\r\n this.includeFiles.diyJs += data.value\r\n },\r\n afterformHtml(data) {\r\n this.formExpand = data.bpmForm.formExpand\r\n this.formHtml = data.bpmForm.formHtml\r\n this.includeFiles.diyJs = data.bpmForm.diyJs\r\n },\r\n includdingFile() {\r\n this.dialogincluddingFileVisible = true\r\n this.formHtmlUrl = '/form/form/v1/previewDesignVue?formId=' + this.formData.id\r\n this.includeFiles = this.formData.includeFiles\r\n ? Base64.decode(this.formData.includeFiles, 'utf-8')\r\n : {diyFile: ' ', diyCss: ' ', diyJs: ' '}\r\n },\r\n handleClick(tab, event) {\r\n console.info(tab)\r\n },\r\n // 改变地图地址绑定的字段 设置fieldPath\r\n changeMap(value) {\r\n let selectObj = null\r\n this.tableFields.forEach(boData => {\r\n if (!selectObj) {\r\n selectObj = boData.children.find(opt => opt.name === value)\r\n if (selectObj) {\r\n selectObj.boDefAlias = boData.boDefAlias || boData.fieldPath.split('.')[0]\r\n selectObj.tableName = boData.name\r\n }\r\n }\r\n })\r\n this.field.options.addressMap = selectObj.path + '.' + selectObj.name\r\n },\r\n // 改变绑定的字段 设置fieldPath\r\n change(value) {\r\n let selectObj = null\r\n this.fieldIndexData = {}\r\n this.tableFields.forEach(boData => {\r\n boData.children.forEach((v, i) => {\r\n let keyName = v.name\r\n if (value.indexOf('.') != -1) {\r\n keyName = v.path + '.' + v.name\r\n }\r\n if (v.isRequired && keyName == value) {\r\n if (!this.fieldIndexData.fieldName) {\r\n this.fieldIndexData.fieldName = v.fieldName\r\n this.fieldIndexData.index = i\r\n }\r\n }\r\n })\r\n if (!selectObj) {\r\n selectObj = boData.children.find(opt => opt.name === value)\r\n if (value.indexOf('.') != -1) {\r\n selectObj = boData.children.find(opt => opt.path + '.' + opt.name === value)\r\n }\r\n\r\n if (selectObj) {\r\n selectObj.boDefAlias = boData.boDefAlias || boData.path.split('.')[0]\r\n selectObj.tableName = boData.name\r\n }\r\n }\r\n })\r\n\r\n if (!selectObj) {\r\n if (this.field.parentNodeType == 'sub') {\r\n this.field.fieldPath = 'item.' + value\r\n this.field.name = 'item.' + value\r\n } else {\r\n this.$message.warning('只允许子表绑定虚拟字段')\r\n }\r\n return\r\n }\r\n\r\n this.field.boDefId = selectObj.boDefId\r\n this.field.boAttrId = selectObj.id\r\n if (this.field.parentNodeType == 'sub') {\r\n this.field.fieldPath = 'item.' + selectObj.name\r\n } else {\r\n this.field.fieldPath = selectObj.path + '.' + selectObj.name\r\n }\r\n\r\n this.field.options.dataType = selectObj.dataType\r\n\r\n this.field.name = selectObj.name\r\n this.field.desc = selectObj.desc\r\n this.field.title = selectObj.desc\r\n this.field.entId = selectObj.entId\r\n this.field.boDefAlias = selectObj.boDefAlias\r\n this.field.tableName = selectObj.tableName\r\n this.field.columnType = selectObj.columnType\r\n if (selectObj.dataType == 'date') {\r\n this.field.options.format = selectObj.format\r\n this.field.options.inputFormat = selectObj.format\r\n } else if (selectObj.dataType == 'number') {\r\n this.field.options.maxDecimalDigits = selectObj.decimalLen\r\n this.field.options.decimalDigits = selectObj.decimalLen\r\n }\r\n },\r\n //给无属性控件设置关联ent属性\r\n changeNoAttrFile(value){\r\n let _this = this;\r\n this.tableFields.forEach(ent =>{\r\n if(ent.name == value){\r\n _this.$set(_this.field,'entId',ent.id);\r\n _this.$set(_this.field,'boDefId',ent.boDefId);\r\n }\r\n });\r\n },\r\n isChangeWatch() {\r\n this.isWatch = true\r\n },\r\n editI18nMessage(after) {\r\n this.i18nMessageKey = this.field.fieldPath || this.field.path\r\n if (this.createKeyMap[this.field.ctrlType]) {\r\n this.i18nMessageKey = this.formData.formKey + '.' + this.field.ctrlType + Math.random() * 5000\r\n }\r\n if (this.i18nMessageKey && after) {\r\n this.i18nMessageKey += after\r\n }\r\n this.$refs.i18nMessageEdit.handleOpen()\r\n },\r\n afterSaveI18n(data) {\r\n data.key = data.key.replace('$', '#')\r\n if (data.prop.endsWith('placeholder')) {\r\n this.field.options.placeholder = data.key\r\n this.field.options.placeholder_zh = data.desc\r\n } else if (data.prop.endsWith('tip')) {\r\n this.tooltip = data.key\r\n } else {\r\n this.field.desc = data.key\r\n this.field.desc_zh = data.desc\r\n }\r\n },\r\n isNoAttrField(field){\r\n if(!field){\r\n field = this.field;\r\n }\r\n if(field.ctrlType=='text' || field.ctrlType=='immediate-single' || field.ctrlType=='immediate-textarea' ||\r\n (field.ctrlType=='button' && !field.options.bindEventjson.isShowInput)){\r\n return true;\r\n }\r\n return false;\r\n },\r\n noAttrFieldListChange(field, isAdd){//无属性控件的变化实时其更新联动列表\r\n let inList = false;\r\n this.noAttrFieldList.forEach(item =>{\r\n if(item.key === field.key){\r\n if(isAdd){\r\n inList = true;\r\n }else{\r\n this.noAttrFieldList.remove(item);\r\n return ;\r\n }\r\n }\r\n })\r\n if(isAdd && !inList){\r\n if(field.ctrlType == 'button'){\r\n field.desc = field.options.bindEventjson.name;\r\n }\r\n this.noAttrFieldList.push(field);\r\n }\r\n }\r\n },\r\n watch: {\r\n data(val) {\r\n this.field = val\r\n },\r\n field: {\r\n handler(val) {\r\n // 下拉框 多选isMultiple 属性废弃 使用options.multiple属性 为了兼容以前的代码 将isMultiple true 值赋值给 options.multiple属性\r\n if (val.ctrlType == 'select' && val.isMultiple) {\r\n val.options.multiple = true\r\n val.isMultiple = false\r\n }\r\n\r\n if (val.parentNodeType == 'sub' || val.parentNodeType == 'sun') {\r\n if (val.boSubEntity) {\r\n this.currentBoSubEntity = val.boSubEntity\r\n this.tableFields = this.subTables.filter(item => item.name === val.boSubEntity)\r\n if (this.tableFields.length > 0) {\r\n for (let e = 0; e < this.tableFields.length; e++) {\r\n if (this.tableFields[e].children.length > 0) {\r\n for (let w = 0; w < this.tableFields[e].children.length; w++) {\r\n this.tableFields[e].children[w].keyName = this.tableFields[e].children[w].name\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n //如果是孙表,则选取子表里的孙表供选择绑定\r\n if ((val.ctrlType == 'suntable' || val.ctrlType == 'sunDiv') && this.currentBoSubEntity) {\r\n this.sunTables = this.sunTablesMap[this.currentBoSubEntity] || []\r\n }\r\n //如果是孙表里的控件,则找到这个一个孙表供其选择属性\r\n if (val.parentNodeType == 'sun') {\r\n for (const subName in this.sunTablesMap) {\r\n let sunTabs = this.sunTablesMap[subName]\r\n if (sunTabs) {\r\n sunTabs.forEach(sunTab => {\r\n if (sunTab.name == this.currentBoSubEntity) {\r\n this.tableFields = [sunTab]\r\n }\r\n })\r\n if (this.tableFields.length > 0) {\r\n for (let o = 0; o < this.tableFields.length; o++) {\r\n if (this.tableFields[o].children.length > 0) {\r\n for (let h = 0; h < this.tableFields[o].children.length; h++) {\r\n this.tableFields[o].children[h].keyName = this.tableFields[o].children[h].name\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n if (this.mainBoFields.length > 0) {\r\n for (let y = 0; y < this.mainBoFields.length; y++) {\r\n if (this.mainBoFields[y].children.length > 0) {\r\n for (let t = 0; t < this.mainBoFields[y].children.length; t++) {\r\n this.mainBoFields[y].children[t].keyName =\r\n this.mainBoFields[y].children[t].path + '.' + this.mainBoFields[y].children[t].name\r\n }\r\n }\r\n }\r\n }\r\n if (val && val.ctrlType == 'time') {\r\n this.tableFields = JSON.parse(JSON.stringify(this.mainBoFields))\r\n this.tableFields.forEach(table => {\r\n if (table.children) {\r\n let newFileds = []\r\n table.children = table.children.filter(f => f.dataType != 'date' && f.dataType != 'number')\r\n }\r\n })\r\n } else {\r\n this.mainBoFields.forEach(item => {\r\n for (let q = 0; q < item.children.length; q++) {\r\n for (let i = 0; i < item.children.length - 1 - q; i++) {\r\n if (item.children[i].index > item.children[i + 1].index) {\r\n let temp = item.children[i]\r\n item.children[i] = item.children[i + 1]\r\n item.children[i + 1] = temp\r\n }\r\n }\r\n }\r\n })\r\n this.tableFields = this.mainBoFields\r\n }\r\n }\r\n //合并数组对象\r\n let allBoData = []\r\n let formVarData = []\r\n let returnData = [] //对话框返回值选择的字段信息 主表对应主表,子表对应子表,孙表对应孙表。\r\n let returnTypes = ['select', 'dropdown', 'dialog']\r\n if (((val.ctrlType == 'suntable' || val.ctrlType == 'sunDiv') && this.currentBoSubEntity) || val.parentNodeType == 'sun') {\r\n this.mainBoFields.forEach(mainBoField => {\r\n formVarData.push({...mainBoField})\r\n allBoData.push({...mainBoField})\r\n })\r\n if (this.sunTables && this.sunTables.length > 0) {\r\n this.sunTables.forEach(sunTable => {\r\n if (val.parentNodeType == 'sun') {\r\n if (sunTable.name == val.boSubEntity) {\r\n allBoData.push({...sunTable})\r\n formVarData.push({...sunTable})\r\n returnData.push({...sunTable})\r\n }\r\n } else {\r\n allBoData.push({...sunTable})\r\n formVarData.push({...sunTable})\r\n returnData.push({...sunTable})\r\n }\r\n })\r\n }\r\n } else {\r\n if (val.parentNodeType != 'sub' && returnTypes.includes(val.ctrlType)) {\r\n //添加主表字段\r\n this.mainBoFields.forEach(mainBoField => {\r\n returnData.push({...mainBoField})\r\n })\r\n } else if (val.parentNodeType == 'sub' && returnTypes.includes(val.ctrlType)) {\r\n //添加子表字段\r\n this.subTables.forEach(subTable => {\r\n returnData.push({...subTable})\r\n })\r\n }\r\n //添加主表字段\r\n this.mainBoFields.forEach(mainBoField => {\r\n allBoData.push({...mainBoField})\r\n })\r\n this.subTables.forEach(subTable => {\r\n allBoData.push({...subTable})\r\n let sunTabs = this.sunTablesMap[subTable.name]\r\n if (sunTabs) {\r\n sunTabs.forEach(sunTab => {\r\n allBoData.push({...sunTab})\r\n })\r\n }\r\n })\r\n formVarData = allBoData\r\n }\r\n //判断无属性控件 按钮\r\n if(this.isNoAttrField() && \r\n this.tableFields && this.tableFields.length>0){\r\n if(!val.name){\r\n this.$set(val,'name','c_'+val.key);\r\n }\r\n if(!val.boDefAlias){\r\n this.$set(val,'boDefAlias',this.tableFields[0].boDefAlias);\r\n }\r\n if(!val.tableName){\r\n this.$set(val,'tableName',this.tableFields[0].name);\r\n this.changeNoAttrFile(this.tableFields[0].name);\r\n }\r\n this.noAttrFieldListChange(val, true);\r\n }else if(val.ctrlType == 'button' && val.options.bindEventjson.isShowInput){\r\n this.noAttrFieldListChange(val, false);\r\n }\r\n\r\n\r\n this.allBoData = allBoData\r\n this.formVarData = formVarData\r\n this.returnData = returnData\r\n this.$emit('update:data', val)\r\n //通过模板生成的表单字段需更改为 建模别名.字段名 (解决2个不同的建模,但主表建模字段一样)\r\n if (val.target && val.parentNodeType != 'sub' && val.parentNodeType != 'sun') {\r\n val.target = val.boDefAlias + '.' + val.name\r\n }\r\n },\r\n deep: true\r\n },\r\n 'field.ctrlType': {\r\n handler(newVal, oldVal) {\r\n if (oldVal == undefined || newVal == undefined || newVal == oldVal) {\r\n return\r\n }\r\n if (!this.isWatch) {\r\n return\r\n }\r\n if (oldVal == 'number' || oldVal == 'currency') {\r\n if (newVal == 'date' || newVal == 'time') {\r\n this.changeCtrlType(true)\r\n } else {\r\n this.changeCtrlType(false)\r\n }\r\n } else if (oldVal == 'date' || oldVal == 'time') {\r\n if (newVal == 'number' || newVal == 'currency') {\r\n this.changeCtrlType(true)\r\n } else {\r\n this.changeCtrlType(false)\r\n }\r\n } else if (newVal == 'select') {\r\n this.changeCtrlType(false)\r\n } else {\r\n if (newVal == 'number' || newVal == 'currency') {\r\n if (this.field.columnType == 'number') {\r\n this.changeCtrlType(false)\r\n } else {\r\n this.changeCtrlType(true)\r\n }\r\n } else if (newVal == 'date' || newVal == 'time') {\r\n if (this.field.columnType == 'date') {\r\n this.changeCtrlType(false)\r\n } else {\r\n this.changeCtrlType(true)\r\n }\r\n } else {\r\n this.changeCtrlType(false)\r\n }\r\n }\r\n this.isWatch = false\r\n }\r\n }\r\n },\r\n mounted() {\r\n // 声明\r\n this.$validator = this.$root.$validator\r\n // 复制高级字段列表\r\n this.copyAdvanceComponents = this.advanceComponents.slice()\r\n },\r\n destroyed() {}\r\n}\r\n",null]}