Commit 5fa3135d8c66f287389ef8d2f8b585b5210004f3
1 parent
3fea4fbc
Exists in
dev
支持省市区经纬度选择版本
Showing
1 changed file
with
1512 additions
and
1223 deletions
Show diff stats
frontend/manage/src/components/form/PropertyPanel.vue
... | ... | @@ -364,6 +364,201 @@ |
364 | 364 | </template> |
365 | 365 | </ht-select> |
366 | 366 | </ht-form-item> |
367 | + | |
368 | + | |
369 | + | |
370 | + <ht-form-item label-width="100px"> | |
371 | + <template slot="label"> | |
372 | + 经度 | |
373 | + <el-tooltip content="请选择经度要绑定的字段"> | |
374 | + <i class="property-tip icon-my-todo-comment" /> | |
375 | + </el-tooltip> | |
376 | + </template> | |
377 | + <ht-select | |
378 | + v-model="field.options.longitudeName" | |
379 | + :options="tableFields" | |
380 | + :props="{key: 'name', value: 'desc'}" | |
381 | + @change="longitudeChangeMap" | |
382 | + > | |
383 | + <template slot-scope="{options, propKey, propValue}"> | |
384 | + <el-option-group | |
385 | + v-for="group in options" | |
386 | + :key="group.name" | |
387 | + :label="group.desc" | |
388 | + > | |
389 | + <el-option | |
390 | + v-for="item in group.children.filter((obj) => { | |
391 | + return filterFields(obj) | |
392 | + })" | |
393 | + :key="item[propKey]" | |
394 | + :label="item[propValue]" | |
395 | + :value="item[propKey]" | |
396 | + ></el-option> | |
397 | + </el-option-group> | |
398 | + </template> | |
399 | + </ht-select> | |
400 | + </ht-form-item> | |
401 | + | |
402 | + <ht-form-item label-width="100px"> | |
403 | + <template slot="label"> | |
404 | + 纬度 | |
405 | + <el-tooltip content="请选择纬度要绑定的字段"> | |
406 | + <i class="property-tip icon-my-todo-comment" /> | |
407 | + </el-tooltip> | |
408 | + </template> | |
409 | + <ht-select | |
410 | + v-model="field.options.latitudeName" | |
411 | + :options="tableFields" | |
412 | + :props="{key: 'name', value: 'desc'}" | |
413 | + @change="latitudeChangeMap" | |
414 | + > | |
415 | + <template slot-scope="{options, propKey, propValue}"> | |
416 | + <el-option-group | |
417 | + v-for="group in options" | |
418 | + :key="group.name" | |
419 | + :label="group.desc" | |
420 | + > | |
421 | + <el-option | |
422 | + v-for="item in group.children.filter((obj) => { | |
423 | + return filterFields(obj) | |
424 | + })" | |
425 | + :key="item[propKey]" | |
426 | + :label="item[propValue]" | |
427 | + :value="item[propKey]" | |
428 | + ></el-option> | |
429 | + </el-option-group> | |
430 | + </template> | |
431 | + </ht-select> | |
432 | + </ht-form-item> | |
433 | + <ht-form-item label-width="100px"> | |
434 | + <template slot="label"> | |
435 | + 省 | |
436 | + <el-tooltip content="请选择省要绑定的字段"> | |
437 | + <i class="property-tip icon-my-todo-comment" /> | |
438 | + </el-tooltip> | |
439 | + </template> | |
440 | + <ht-select | |
441 | + v-model="field.options.provinceName" | |
442 | + :options="tableFields" | |
443 | + :props="{key: 'name', value: 'desc'}" | |
444 | + @change="provinceChangeMap" | |
445 | + > | |
446 | + <template slot-scope="{options, propKey, propValue}"> | |
447 | + <el-option-group | |
448 | + v-for="group in options" | |
449 | + :key="group.name" | |
450 | + :label="group.desc" | |
451 | + > | |
452 | + <el-option | |
453 | + v-for="item in group.children.filter((obj) => { | |
454 | + return filterFields(obj) | |
455 | + })" | |
456 | + :key="item[propKey]" | |
457 | + :label="item[propValue]" | |
458 | + :value="item[propKey]" | |
459 | + ></el-option> | |
460 | + </el-option-group> | |
461 | + </template> | |
462 | + </ht-select> | |
463 | + </ht-form-item> | |
464 | + | |
465 | + <ht-form-item label-width="100px"> | |
466 | + <template slot="label"> | |
467 | + 市 | |
468 | + <el-tooltip content="请选择市要绑定的字段"> | |
469 | + <i class="property-tip icon-my-todo-comment" /> | |
470 | + </el-tooltip> | |
471 | + </template> | |
472 | + <ht-select | |
473 | + v-model="field.options.cityName" | |
474 | + :options="tableFields" | |
475 | + :props="{key: 'name', value: 'desc'}" | |
476 | + @change="cityChangeMap" | |
477 | + > | |
478 | + <template slot-scope="{options, propKey, propValue}"> | |
479 | + <el-option-group | |
480 | + v-for="group in options" | |
481 | + :key="group.name" | |
482 | + :label="group.desc" | |
483 | + > | |
484 | + <el-option | |
485 | + v-for="item in group.children.filter((obj) => { | |
486 | + return filterFields(obj) | |
487 | + })" | |
488 | + :key="item[propKey]" | |
489 | + :label="item[propValue]" | |
490 | + :value="item[propKey]" | |
491 | + ></el-option> | |
492 | + </el-option-group> | |
493 | + </template> | |
494 | + </ht-select> | |
495 | + </ht-form-item> | |
496 | + | |
497 | + <ht-form-item label-width="100px"> | |
498 | + <template slot="label"> | |
499 | + 区 | |
500 | + <el-tooltip content="请选择区要绑定的字段"> | |
501 | + <i class="property-tip icon-my-todo-comment" /> | |
502 | + </el-tooltip> | |
503 | + </template> | |
504 | + <ht-select | |
505 | + v-model="field.options.districtName" | |
506 | + :options="tableFields" | |
507 | + :props="{key: 'name', value: 'desc'}" | |
508 | + @change="districtChangeMap" | |
509 | + > | |
510 | + <template slot-scope="{options, propKey, propValue}"> | |
511 | + <el-option-group | |
512 | + v-for="group in options" | |
513 | + :key="group.name" | |
514 | + :label="group.desc" | |
515 | + > | |
516 | + <el-option | |
517 | + v-for="item in group.children.filter((obj) => { | |
518 | + return filterFields(obj) | |
519 | + })" | |
520 | + :key="item[propKey]" | |
521 | + :label="item[propValue]" | |
522 | + :value="item[propKey]" | |
523 | + ></el-option> | |
524 | + </el-option-group> | |
525 | + </template> | |
526 | + </ht-select> | |
527 | + </ht-form-item> | |
528 | + | |
529 | + <ht-form-item label-width="100px"> | |
530 | + <template slot="label"> | |
531 | + 街道 | |
532 | + <el-tooltip content="请选择街道要绑定的字段"> | |
533 | + <i class="property-tip icon-my-todo-comment" /> | |
534 | + </el-tooltip> | |
535 | + </template> | |
536 | + <ht-select | |
537 | + v-model="field.options.streetName" | |
538 | + :options="tableFields" | |
539 | + :props="{key: 'name', value: 'desc'}" | |
540 | + @change="streetChangeMap" | |
541 | + > | |
542 | + <template slot-scope="{options, propKey, propValue}"> | |
543 | + <el-option-group | |
544 | + v-for="group in options" | |
545 | + :key="group.name" | |
546 | + :label="group.desc" | |
547 | + > | |
548 | + <el-option | |
549 | + v-for="item in group.children.filter((obj) => { | |
550 | + return filterFields(obj) | |
551 | + })" | |
552 | + :key="item[propKey]" | |
553 | + :label="item[propValue]" | |
554 | + :value="item[propKey]" | |
555 | + ></el-option> | |
556 | + </el-option-group> | |
557 | + </template> | |
558 | + </ht-select> | |
559 | + </ht-form-item> | |
560 | + | |
561 | + | |
367 | 562 | </template> |
368 | 563 | <!-- 对应某些控件是基础属性 但又不是所有控件的基础属性放入BasicsProperty组件中 --> |
369 | 564 | <BasicsProperty |
... | ... | @@ -773,19 +968,9 @@ const EipSysTypeSelector = () => |
773 | 968 | import('@/components/selector/EipSysTypeSelector.vue') |
774 | 969 | const DynamicControlDialog = () => |
775 | 970 | import('@/components/form/customView/DynamicControlDialog.vue') |
776 | - | |
777 | 971 | export default { |
778 | 972 | name: 'property-panel', |
779 | - props: [ | |
780 | - // 'data', | |
781 | - 'boDefData', | |
782 | - 'formData', | |
783 | - 'mainBoFields', | |
784 | - 'subTables', | |
785 | - 'sunTablesMap', | |
786 | - 'widgetForm', | |
787 | - 'handleType' | |
788 | - ], | |
973 | + | |
789 | 974 | components: { |
790 | 975 | LayoutProperty, |
791 | 976 | AdvancedProperty, |
... | ... | @@ -796,6 +981,18 @@ export default { |
796 | 981 | SubmitVerificationDialog, |
797 | 982 | DynamicControlDialog |
798 | 983 | }, |
984 | + | |
985 | + props: [ | |
986 | + // 'data', | |
987 | + 'boDefData', | |
988 | + 'formData', | |
989 | + 'mainBoFields', | |
990 | + 'subTables', | |
991 | + 'sunTablesMap', | |
992 | + 'widgetForm', | |
993 | + 'handleType' | |
994 | + ], | |
995 | + | |
799 | 996 | data() { |
800 | 997 | return { |
801 | 998 | formCollapseActiveNames: 'formBasic', |
... | ... | @@ -900,1349 +1097,1441 @@ export default { |
900 | 1097 | allModelingData: [] |
901 | 1098 | } |
902 | 1099 | }, |
1100 | + | |
903 | 1101 | computed: { |
904 | 1102 | ...mapState({ |
905 | 1103 | data: state => state.form.selectWidget |
906 | 1104 | }) |
907 | 1105 | }, |
908 | - created() { | |
909 | - this.field = this.data | |
910 | - const me_ = this | |
911 | - //表单初始化时收集无属性控件字段 | |
912 | - WidgetFormBus.$off('initNoAttrField') | |
913 | - WidgetFormBus.$on('initNoAttrField', obj => { | |
914 | - if ( | |
915 | - (this.isNoAttrField(obj) || this.isAllowNoAttributes(obj)) && | |
916 | - obj.tableName | |
917 | - ) { | |
918 | - me_.noAttrFieldListChange(obj, false) | |
919 | - } | |
920 | - }) | |
921 | - if (!this.formData.formSetting.display) { | |
922 | - this.formData.formSetting = JSON.stringify(this.formSetting) | |
923 | - } | |
924 | - }, | |
925 | - methods: { | |
926 | - confirmDynamic(data) { | |
927 | - this.$set(this.widgetFormData, 'globalDynamicControl', data) | |
928 | - }, | |
929 | - // 显示动态控件配置页面 | |
930 | - showDynamicDialog() { | |
931 | - this.$refs.dynamicControlRef.showDialog(this.widgetFormData) | |
932 | - }, | |
933 | - ...mapMutations({ | |
934 | - setSelectWidget: 'form/setSelectWidget' // 设置当前选中控件 | |
935 | - }), | |
936 | - getTableLayoutOfControlKeys() { | |
937 | - let keys = [] | |
938 | - if (this.widgetForm.list && this.widgetForm.list.length) { | |
939 | - this.widgetForm.list.map(item => { | |
940 | - if (item.isLayout && item.ctrlType == 'table') { | |
941 | - item.rows.map(it => { | |
942 | - if (it.cols && it.cols.length) { | |
943 | - it.cols.map(col => { | |
944 | - if (col.list && col.list.length) { | |
945 | - col.list.map(list => { | |
946 | - keys.push(list.key) | |
947 | - }) | |
948 | - } | |
949 | - }) | |
950 | - } | |
951 | - }) | |
952 | - } | |
953 | - }) | |
954 | - } | |
955 | - return keys | |
956 | - }, | |
957 | - getSubtableType(type) { | |
958 | - this.subTableLayoutType = type | |
1106 | + | |
1107 | + watch: { | |
1108 | + data(val) { | |
1109 | + this.field = val | |
959 | 1110 | }, |
960 | - setTableFieldsChildren(data, ctrlType) { | |
961 | - if (['checkbox', 'radio', 'select'].includes(ctrlType)) { | |
962 | - const copyDate = JSON.parse(JSON.stringify(data)) | |
963 | - copyDate.map(item => { | |
964 | - const options = item.children.filter( | |
965 | - it => it.dataType !== 'number' && it.dataType !== 'date' | |
966 | - ) | |
967 | - this.$set(item, 'children', options) | |
968 | - }) | |
969 | - this.tableFields = copyDate | |
970 | - } | |
971 | - }, | |
972 | - //重置表单配置信息 | |
973 | - formSettingReset() { | |
974 | - this.formSetting.align = 'right' | |
975 | - this.formSetting.customColon = false | |
976 | - this.formSetting.fontColor = 'rgb(150, 151, 153)' | |
977 | - this.formSetting.display = 'block' | |
978 | - this.formSetting.roInputDisplayMode = 'text' | |
979 | - this.formSetting.labelPosition = false | |
980 | - }, | |
981 | - //打开表单配置弹框 | |
982 | - formSettingClick() { | |
983 | - if (this.formData.formSetting) { | |
984 | - this.formSetting = { | |
985 | - ...this.formSetting, | |
986 | - ...JSON.parse(this.formData.formSetting) | |
1111 | + field: { | |
1112 | + handler(val) { | |
1113 | + // 下拉框 多选isMultiple 属性废弃 使用options.multiple属性 为了兼容以前的代码 将isMultiple true 值赋值给 options.multiple属性 | |
1114 | + if (val && val.ctrlType == 'select' && val.isMultiple) { | |
1115 | + val.options.multiple = true | |
1116 | + val.isMultiple = false | |
987 | 1117 | } |
988 | - } | |
989 | - this.formSettingVisible = true | |
990 | - }, | |
991 | - //保存表单配置信息 | |
992 | - formSettingOk() { | |
993 | - this.formData.formSetting = JSON.stringify(this.formSetting) | |
994 | - this.formSettingVisible = false | |
995 | - }, | |
996 | - //打开添加表单提交校验配置弹框 | |
997 | - formSubmitVerificationClick(index) { | |
998 | - let item = null | |
999 | - if (typeof index !== 'undefined' && index >= 0) { | |
1000 | - item = this.submitVerification[index] | |
1001 | - this.currentSubmitVerificationIndex = index | |
1002 | - } else { | |
1003 | - this.currentSubmitVerificationIndex = -1 | |
1004 | - } | |
1005 | - this.$refs.submitVerificationDialog.handleOpen(item) | |
1006 | - }, | |
1007 | - //保存表单提交校验配置信息 | |
1008 | - formSubmitVerificationOk(verification) { | |
1009 | - if (!this.submitVerification) { | |
1010 | - this.submitVerification = [] | |
1011 | - } | |
1012 | - if (this.currentSubmitVerificationIndex > -1) { | |
1013 | - this.submitVerification[ | |
1014 | - this.currentSubmitVerificationIndex | |
1015 | - ] = verification | |
1016 | - } else { | |
1017 | - this.submitVerification.push(verification) | |
1018 | - } | |
1019 | - }, | |
1020 | - saveValidate() { | |
1021 | - const this_ = this | |
1022 | - //这里先校验字段属性,再校验表单属性 | |
1023 | - if(this.data.ctrlType =='tag'&& !this.data.options.tag){ | |
1024 | - return this.$message.warning('请选择标签') | |
1025 | - } | |
1026 | - this_.$root.$validator.validateAll('field').then(result => { | |
1027 | - console.log(result) | |
1028 | - if (result) { | |
1029 | - utils | |
1030 | - .validateForm(this, 'editBpmForm') | |
1031 | - .then(() => { | |
1032 | - //手机表单保存时 表单类型指定为手机表单类型 | |
1033 | - if ( | |
1034 | - this_.formData.formType && | |
1035 | - this_.formData.formType != 'mobile' | |
1036 | - ) { | |
1037 | - this_.formData.formType = 'pc' | |
1118 | + | |
1119 | + if (val && ['sub', 'sun'].includes(val.parentNodeType)) { | |
1120 | + if (val.boSubEntity || val.tableName) { | |
1121 | + this.currentBoSubEntity = val.boSubEntity | |
1122 | + this.tableFields = this.subTables.filter( | |
1123 | + item => item.name === val.boSubEntity || item.name === val.tableName | |
1124 | + ) | |
1125 | + if (this.tableFields.length > 0) { | |
1126 | + for (let e = 0; e < this.tableFields.length; e++) { | |
1127 | + if (this.tableFields[e].children.length > 0) { | |
1128 | + for ( | |
1129 | + let w = 0; | |
1130 | + w < this.tableFields[e].children.length; | |
1131 | + w++ | |
1132 | + ) { | |
1133 | + this.tableFields[e].children[w].keyName = this.tableFields[ | |
1134 | + e | |
1135 | + ].children[w].name | |
1136 | + } | |
1137 | + } | |
1038 | 1138 | } |
1039 | - // this.formData.name = this.formData.formName; | |
1040 | - const hasValidateForm = | |
1041 | - this.$refs.advancedProperty && | |
1042 | - this.$refs.advancedProperty.$refs.validateProperty | |
1043 | - if ( | |
1044 | - this.$refs.BasicsProperty && | |
1045 | - this.$refs.BasicsProperty.validateKey() | |
1046 | - ) { | |
1047 | - return this.$message.warning( | |
1048 | - '下拉树或下拉框固定选项有重复的选项值,请重新输入' | |
1049 | - ) | |
1139 | + } | |
1140 | + } | |
1141 | + | |
1142 | + //如果是孙表,则选取子表里的孙表供选择绑定 | |
1143 | + if ( | |
1144 | + ((val && val.ctrlType == 'suntable') || val.ctrlType == 'sunDiv') && | |
1145 | + this.currentBoSubEntity | |
1146 | + ) { | |
1147 | + this.sunTables = this.sunTablesMap[this.currentBoSubEntity] || [] | |
1148 | + } | |
1149 | + //如果是孙表里的控件,则找到这个一个孙表供其选择属性 | |
1150 | + if (val && val.parentNodeType == 'sun') { | |
1151 | + for (const subName in this.sunTablesMap) { | |
1152 | + let sunTabs = this.sunTablesMap[subName] | |
1153 | + if (sunTabs) { | |
1154 | + sunTabs.forEach(sunTab => { | |
1155 | + if (sunTab.name == this.currentBoSubEntity) { | |
1156 | + this.tableFields = [sunTab] | |
1157 | + } | |
1158 | + }) | |
1159 | + if (this.tableFields.length > 0) { | |
1160 | + for (let o = 0; o < this.tableFields.length; o++) { | |
1161 | + if (this.tableFields[o].children.length > 0) { | |
1162 | + for ( | |
1163 | + let h = 0; | |
1164 | + h < this.tableFields[o].children.length; | |
1165 | + h++ | |
1166 | + ) { | |
1167 | + this.tableFields[o].children[ | |
1168 | + h | |
1169 | + ].keyName = this.tableFields[o].children[h].name | |
1170 | + } | |
1171 | + } | |
1172 | + } | |
1173 | + } | |
1050 | 1174 | } |
1051 | - if ( | |
1052 | - this.$refs.BasicsProperty && | |
1053 | - this.$refs.BasicsProperty.validateFilterRange() | |
1054 | - ) { | |
1055 | - return this.$message.warning('请选择过滤范围') | |
1175 | + } | |
1176 | + } | |
1177 | + } else { | |
1178 | + if (this.mainBoFields.length > 0) { | |
1179 | + for (let y = 0; y < this.mainBoFields.length; y++) { | |
1180 | + if (this.mainBoFields[y].children.length > 0) { | |
1181 | + for (let t = 0; t < this.mainBoFields[y].children.length; t++) { | |
1182 | + this.mainBoFields[y].children[t].keyName = | |
1183 | + this.mainBoFields[y].children[t].path + | |
1184 | + '.' + | |
1185 | + this.mainBoFields[y].children[t].name | |
1186 | + } | |
1056 | 1187 | } |
1057 | - if (hasValidateForm) { | |
1058 | - this.$refs.advancedProperty.$refs.validateProperty | |
1059 | - .getValidateFormResult() | |
1060 | - .then(result => { | |
1061 | - this_.$emit('saveEnd') | |
1062 | - }) | |
1063 | - .catch(err => { | |
1064 | - if (err.length > 0) { | |
1065 | - return this.$message.warning( | |
1066 | - `有${err.length}个字段未通过校验,请正确填写校验规则。` | |
1067 | - ) | |
1068 | - } | |
1069 | - }) | |
1070 | - } else { | |
1071 | - this_.$emit('saveEnd') | |
1188 | + } | |
1189 | + } | |
1190 | + if ( | |
1191 | + val && | |
1192 | + ['time', 'time-picker', 'date-picker'].includes(val.ctrlType) | |
1193 | + ) { | |
1194 | + this.tableFields = JSON.parse(JSON.stringify(this.mainBoFields)) | |
1195 | + this.tableFields.forEach(table => { | |
1196 | + if (table.children) { | |
1197 | + let newFileds = [] | |
1198 | + table.children = table.children.filter( | |
1199 | + f => f.dataType != 'date' && f.dataType != 'number' | |
1200 | + ) | |
1072 | 1201 | } |
1073 | 1202 | }) |
1074 | - .catch(reason => { | |
1075 | - let rules = reason.map(obj => { | |
1076 | - return obj.rule | |
1077 | - }) | |
1078 | - if ( | |
1079 | - this_.formData && | |
1080 | - this_.formData.typeName && | |
1081 | - this_.formData.name && | |
1082 | - this_.formData.formKey | |
1083 | - ) { | |
1084 | - if (rules.includes('isExist')) { | |
1085 | - this.$message.error('表单别名重复') | |
1086 | - } else if (rules.includes('regex')) { | |
1087 | - this.$message.error( | |
1088 | - '只能输入字母、数字、下划线,且以字母开头' | |
1089 | - ) | |
1090 | - } else { | |
1091 | - this.$message.error('表单校验不通过') | |
1092 | - } | |
1093 | - } else { | |
1094 | - //获取到报错后的规则数组 | |
1095 | - if (rules.includes('required')) { | |
1096 | - this.$message.error('请完整填写表单内容') | |
1097 | - } else if (rules.includes('isExist')) { | |
1098 | - this.$message.error('表单别名重复') | |
1203 | + } else { | |
1204 | + this.mainBoFields.forEach(item => { | |
1205 | + for (let q = 0; q < item.children.length; q++) { | |
1206 | + for (let i = 0; i < item.children.length - 1 - q; i++) { | |
1207 | + if (item.children[i].index > item.children[i + 1].index) { | |
1208 | + let temp = item.children[i] | |
1209 | + item.children[i] = item.children[i + 1] | |
1210 | + item.children[i + 1] = temp | |
1211 | + } | |
1099 | 1212 | } |
1100 | 1213 | } |
1101 | - this.activeTabName = 'form' | |
1102 | 1214 | }) |
1103 | - } else { | |
1104 | - let arr = this_.$root.$validator.errors.items.filter( | |
1105 | - item => item.scope == 'field' | |
1106 | - ) | |
1107 | - let errorLength = arr.length | |
1108 | - this.activeTabName = 'field' | |
1109 | - this_.$message({ | |
1110 | - showClose: true, | |
1111 | - message: `有${errorLength}个字段未通过校验,请正确填写表单内容。`, | |
1112 | - type: 'warning' | |
1113 | - }) | |
1215 | + this.tableFields = this.mainBoFields | |
1216 | + } | |
1114 | 1217 | } |
1115 | - }) | |
1116 | - }, | |
1117 | - filterFields(obj) { | |
1118 | - if ( | |
1119 | - (obj.columnType == 'clob' || obj.dataType == 'clob') && | |
1120 | - this.clobFieldList.indexOf(this.field.ctrlType) == -1 | |
1121 | - ) { | |
1122 | - return false | |
1123 | - } | |
1124 | - if (this.field.ctrlType == 'handSignature') { | |
1218 | + this.setTableFieldsChildren(this.tableFields, val && val.ctrlType) | |
1219 | + //合并数组对象 | |
1220 | + let allModelingData = [] | |
1221 | + let allBoData = [] | |
1222 | + let formVarData = [] | |
1223 | + let returnData = [] //对话框返回值选择的字段信息 主表对应主表,子表对应子表,孙表对应孙表。 | |
1224 | + let returnTypes = ['select', 'dropdown', 'dialog'] | |
1125 | 1225 | if ( |
1126 | - (obj.columnType == 'clob' || obj.dataType == 'clob') && | |
1127 | - obj.fieldName != 'id_' && | |
1128 | - obj.fieldName != 'ref_id_' | |
1226 | + (val && | |
1227 | + ['suntable', 'sunDiv'].includes(val.ctrlType) && | |
1228 | + this.currentBoSubEntity) || | |
1229 | + (val && val.parentNodeType == 'sun') | |
1129 | 1230 | ) { |
1130 | - return true | |
1231 | + this.mainBoFields.forEach(mainBoField => { | |
1232 | + formVarData.push({...mainBoField}) | |
1233 | + allBoData.push({...mainBoField}) | |
1234 | + allModelingData.push({...mainBoField}) | |
1235 | + }) | |
1236 | + this.subTables.forEach(subTable => { | |
1237 | + allModelingData.push({...subTable}) | |
1238 | + let sunTabs = this.sunTablesMap[subTable.name] | |
1239 | + if (sunTabs) { | |
1240 | + sunTabs.forEach(sunTab => { | |
1241 | + allModelingData.push({...sunTab}) | |
1242 | + }) | |
1243 | + } | |
1244 | + }) | |
1245 | + if (this.sunTables && this.sunTables.length > 0) { | |
1246 | + this.sunTables.forEach(sunTable => { | |
1247 | + if (val && val.parentNodeType == 'sun') { | |
1248 | + if (sunTable.name == val.boSubEntity) { | |
1249 | + allBoData.push({...sunTable}) | |
1250 | + formVarData.push({...sunTable}) | |
1251 | + returnData.push({...sunTable}) | |
1252 | + } | |
1253 | + } else { | |
1254 | + allBoData.push({...sunTable}) | |
1255 | + formVarData.push({...sunTable}) | |
1256 | + returnData.push({...sunTable}) | |
1257 | + } | |
1258 | + }) | |
1259 | + } | |
1260 | + } else { | |
1261 | + if ( | |
1262 | + val && | |
1263 | + val.parentNodeType != 'sub' && | |
1264 | + returnTypes.includes(val.ctrlType) | |
1265 | + ) { | |
1266 | + //添加主表字段 | |
1267 | + this.mainBoFields.forEach(mainBoField => { | |
1268 | + returnData.push({...mainBoField}) | |
1269 | + }) | |
1270 | + } else if ( | |
1271 | + val && | |
1272 | + val.parentNodeType == 'sub' && | |
1273 | + returnTypes.includes(val.ctrlType) | |
1274 | + ) { | |
1275 | + //添加子表字段 | |
1276 | + this.subTables.forEach(subTable => { | |
1277 | + returnData.push({...subTable}) | |
1278 | + }) | |
1279 | + } | |
1280 | + //添加主表字段 | |
1281 | + this.mainBoFields.forEach(mainBoField => { | |
1282 | + allBoData.push({...mainBoField}) | |
1283 | + }) | |
1284 | + this.subTables.forEach(subTable => { | |
1285 | + allBoData.push({...subTable}) | |
1286 | + let sunTabs = this.sunTablesMap[subTable.name] | |
1287 | + if (sunTabs) { | |
1288 | + sunTabs.forEach(sunTab => { | |
1289 | + allBoData.push({...sunTab}) | |
1290 | + }) | |
1291 | + } | |
1292 | + }) | |
1293 | + formVarData = allBoData | |
1131 | 1294 | } |
1132 | - return false | |
1133 | - } | |
1134 | - if (this.field.ctrlType == 'richText') { | |
1295 | + //判断无属性控件 按钮 | |
1135 | 1296 | if ( |
1136 | - obj.columnType != 'number' && | |
1137 | - obj.columnType != 'date' && | |
1138 | - obj.fieldName != 'id_' && | |
1139 | - obj.fieldName != 'ref_id_' | |
1297 | + (this.isNoAttrField(val) || this.isAllowNoAttributes(val)) && | |
1298 | + this.tableFields && | |
1299 | + this.tableFields.length > 0 | |
1140 | 1300 | ) { |
1141 | - return true | |
1142 | - } | |
1143 | - return false | |
1144 | - } | |
1145 | - if (this.field.ctrlType == 'signature') { | |
1146 | - //审批签章不能绑定数字和日期属性的字段 | |
1147 | - if (obj.columnType != 'number' && obj.columnType != 'date') { | |
1148 | - return true | |
1301 | + if (val && !val.name) { | |
1302 | + this.$set(val, 'name', 'c_' + val.key) | |
1303 | + } | |
1304 | + if (val && !val.boDefAlias) { | |
1305 | + if (val.parentNodeType == 'sub' || val.parentNodeType == 'sun') { | |
1306 | + const paths = this.tableFields[0].path.split('.') | |
1307 | + this.$set(val, 'boDefAlias', paths[0]) | |
1308 | + } else { | |
1309 | + this.$set(val, 'boDefAlias', this.tableFields[0].boDefAlias) | |
1310 | + } | |
1311 | + } | |
1312 | + if (val && !val.tableName) { | |
1313 | + this.$set(val, 'tableName', this.tableFields[0].name) | |
1314 | + this.changeNoAttrFile(this.tableFields[0].name) | |
1315 | + } | |
1316 | + this.noAttrFieldListChange(val, true) | |
1317 | + } else if ( | |
1318 | + val && | |
1319 | + val.ctrlType == 'button' && | |
1320 | + val.options.bindEventjson && | |
1321 | + val.options.bindEventjson.isShowInput | |
1322 | + ) { | |
1323 | + this.noAttrFieldListChange(val, false) | |
1149 | 1324 | } |
1150 | - return false | |
1151 | - } | |
1152 | - | |
1153 | - if (this.filterListType.indexOf(this.field.ctrlType) > -1) { | |
1325 | + this.allModelingData = allModelingData | |
1326 | + this.allBoData = allBoData | |
1327 | + this.formVarData = formVarData | |
1328 | + this.returnData = returnData | |
1329 | + // this.$emit('update:data', val) | |
1330 | + //通过模板生成的表单字段需更改为 建模别名.字段名 (解决2个不同的建模,但主表建模字段一样) | |
1154 | 1331 | if ( |
1155 | - this.field.ctrlType == 'date' && | |
1156 | - this.field.options.dataType != 'date' | |
1332 | + val && | |
1333 | + val.target && | |
1334 | + val.parentNodeType != 'sub' && | |
1335 | + val.parentNodeType != 'sun' | |
1157 | 1336 | ) { |
1158 | - this.field.options.dataType = 'date' | |
1159 | - } else if (this.field.ctrlType == 'switch') { | |
1160 | - this.field.options.dataType = 'varchar' | |
1161 | - } else if (this.field.ctrlType == 'number') { | |
1162 | - this.field.options.dataType = 'number' | |
1337 | + if (!utils.isEmpty(val.boDefAlias) && !utils.isEmpty(val.name)) { | |
1338 | + val.target = val.boDefAlias + '.' + val.name | |
1339 | + } | |
1163 | 1340 | } |
1164 | - | |
1165 | - return obj.dataType == this.field.options.dataType | |
1166 | - } else if (obj.nodeType == 'sub') { | |
1167 | - return false | |
1168 | - } else { | |
1169 | - return true | |
1170 | - } | |
1341 | + }, | |
1342 | + deep: true | |
1171 | 1343 | }, |
1172 | - flowComponentsFilter(item) { | |
1173 | - if (this.field.boSubEntity) { | |
1174 | - return ![ | |
1175 | - 'processForecast', | |
1176 | - 'related-process', | |
1177 | - 'handSignature', | |
1178 | - 'signature', | |
1179 | - 'opinion' | |
1180 | - ].includes(item.ctrlType) | |
1344 | + 'field.ctrlType': { | |
1345 | + handler(newVal, oldVal) { | |
1346 | + if (oldVal == undefined || newVal == undefined || newVal == oldVal) { | |
1347 | + return | |
1348 | + } | |
1349 | + if (!this.isWatch) { | |
1350 | + return | |
1351 | + } | |
1352 | + if (newVal === 'rate') { | |
1353 | + this.changeCtrlType(false,'rate') | |
1354 | + } else if (['number', 'currency'].includes(oldVal)) { | |
1355 | + if (newVal == 'date' || newVal == 'time') { | |
1356 | + this.changeCtrlType(true) | |
1357 | + } else { | |
1358 | + this.changeCtrlType(false) | |
1359 | + } | |
1360 | + } else if (oldVal == 'date' || oldVal == 'time') { | |
1361 | + if (newVal == 'number' || newVal == 'currency') { | |
1362 | + this.changeCtrlType(true) | |
1363 | + } else { | |
1364 | + this.changeCtrlType(false) | |
1365 | + } | |
1366 | + } else if (newVal == 'select') { | |
1367 | + this.changeCtrlType(false) | |
1368 | + } else { | |
1369 | + if (['number', 'currency'].includes(newVal)) { | |
1370 | + if (this.field.columnType == 'number') { | |
1371 | + this.changeCtrlType(false) | |
1372 | + } else { | |
1373 | + this.changeCtrlType(true) | |
1374 | + } | |
1375 | + } else if (newVal == 'date' || newVal == 'time') { | |
1376 | + this.changeCtrlType(false) | |
1377 | + } else if (newVal == 'switch') { | |
1378 | + this.changeCtrlType(false) | |
1379 | + } else { | |
1380 | + this.changeCtrlType(false) | |
1381 | + } | |
1382 | + } | |
1383 | + this.isWatch = false | |
1384 | + const validateList = this.field.options.validateList | |
1385 | + ? [ | |
1386 | + ...this.field.options.validateList, | |
1387 | + { | |
1388 | + key: 'required', | |
1389 | + name: '*必填' | |
1390 | + } | |
1391 | + ] | |
1392 | + : [ | |
1393 | + { | |
1394 | + key: 'required', | |
1395 | + name: '*必填' | |
1396 | + } | |
1397 | + ] | |
1398 | + const hasValidateRules = | |
1399 | + this.field.options.validateType && | |
1400 | + this.field.options.validateType.includes('required') | |
1401 | + this.tableFields.forEach(boData => { | |
1402 | + boData.children.forEach((v, i) => { | |
1403 | + if ( | |
1404 | + hasValidateRules && | |
1405 | + this.field.fieldPath === v.keyName && | |
1406 | + v.isRequired | |
1407 | + ) { | |
1408 | + this.$set( | |
1409 | + this.field.options, | |
1410 | + 'validateList', | |
1411 | + uniqueArrayObject(validateList, 'key') | |
1412 | + ) | |
1413 | + if (this.field.options && !this.field.options.validate) { | |
1414 | + this.$set(this.field.options, 'validate', "'required'") | |
1415 | + } | |
1416 | + } | |
1417 | + }) | |
1418 | + }) | |
1181 | 1419 | } |
1182 | - return true | |
1183 | 1420 | }, |
1184 | - //高级控件 | |
1185 | - filterAdvanceFields(obj) { | |
1186 | - //子/孙表不能选择的控件类型 返回false 不能选择 | |
1187 | - let types = ['dataView', 'formTable', 'QRcode', 'milepost', 'customChart'] | |
1188 | - if (this.field.boSubEntity && types.includes(obj.ctrlType)) { | |
1189 | - return false | |
1190 | - } | |
1191 | - if ( | |
1192 | - (this.field.hasOwnProperty('boSubEntity') || this.isColumnLayout()) && | |
1193 | - ['formTable', 'dataView'].includes(obj.ctrlType) | |
1194 | - ) { | |
1195 | - return false | |
1421 | + widgetForm(val) { | |
1422 | + this.widgetFormData = val | |
1423 | + if (val.submitVerification && val.submitVerification.length > 0) { | |
1424 | + this.submitVerification = JSON.parse( | |
1425 | + Base64.decode(val.submitVerification) | |
1426 | + ) | |
1427 | + } else { | |
1428 | + this.submitVerification = [] | |
1196 | 1429 | } |
1197 | - return true | |
1198 | 1430 | }, |
1199 | - isColumnLayout() { | |
1200 | - let isGrid = false | |
1201 | - const result = this.widgetForm.list.map(item => { | |
1202 | - if (item.ctrlType === 'grid') { | |
1203 | - return item.columns.map(it => { | |
1204 | - return it.list.some(field => field.key === this.field.key) | |
1205 | - }) | |
1206 | - } | |
1207 | - }) | |
1208 | - if (result && result.length) { | |
1209 | - isGrid = result.flat().filter(Boolean).length > 0 | |
1210 | - } | |
1211 | - return isGrid | |
1212 | - }, | |
1213 | - //basicsProperty调用showSelectQueryDialog | |
1214 | - basicsPropertyShowSelectQueryDialog() { | |
1215 | - this.showSelectQueryDialog() | |
1431 | + submitVerification: { | |
1432 | + handler(val) { | |
1433 | + this.$set( | |
1434 | + this.widgetFormData, | |
1435 | + 'submitVerification', | |
1436 | + Base64.encode(JSON.stringify(this.submitVerification), 'utf-8') | |
1437 | + ) | |
1438 | + }, | |
1439 | + deep: true | |
1216 | 1440 | }, |
1217 | - //常用控件 | |
1218 | - filterFieldsByCurrentField(obj, value) { | |
1219 | - //获取table布局中控件的key | |
1220 | - const controlKeys = this.getTableLayoutOfControlKeys() | |
1221 | - if (obj.ctrlType === 'amap' && controlKeys.includes(this.field.key)) { | |
1222 | - return false | |
1223 | - } | |
1224 | - //子/孙表不能选择的控件类型 返回false 不能选择 | |
1225 | - let types = [ | |
1226 | - 'related-process', | |
1227 | - 'amap', | |
1228 | - 'signature', | |
1229 | - 'handSignature', | |
1230 | - 'milepost', | |
1231 | - 'customChart', | |
1232 | - 'dataView', | |
1233 | - 'formTable', | |
1234 | - 'divider', | |
1235 | - 'QRcode' | |
1236 | - ] | |
1237 | - let attributeType = null | |
1441 | + // 根据绑定属性过滤空间类型 | |
1442 | + 'field.target': { | |
1443 | + handler(val) { | |
1444 | + this.filterBasicComponents = basicComponents.filter(obj => { | |
1445 | + return this.filterFieldsByCurrentField(obj, val) | |
1446 | + }) | |
1447 | + }, | |
1448 | + deep: true | |
1449 | + } | |
1450 | + }, | |
1451 | + | |
1452 | + created() { | |
1453 | + this.field = this.data | |
1454 | + const me_ = this | |
1455 | + //表单初始化时收集无属性控件字段 | |
1456 | + WidgetFormBus.$off('initNoAttrField') | |
1457 | + WidgetFormBus.$on('initNoAttrField', obj => { | |
1238 | 1458 | if ( |
1239 | - this.field && | |
1240 | - this.field.boSubEntity && | |
1241 | - types.includes(obj.ctrlType) | |
1459 | + (this.isNoAttrField(obj) || this.isAllowNoAttributes(obj)) && | |
1460 | + obj.tableName | |
1242 | 1461 | ) { |
1243 | - return false | |
1244 | - } | |
1245 | - if (!obj.options.dataType) { | |
1246 | - return true | |
1247 | - } | |
1248 | - if (this.field && !this.field.options) { | |
1249 | - return true | |
1250 | - } | |
1251 | - if (this.field && !this.field.options.dataType) { | |
1252 | - return true | |
1253 | - } | |
1254 | - if (this.field && this.field.options.dataType == obj.options.dataType) { | |
1255 | - return true | |
1256 | - } | |
1257 | - let dataTypes = obj.options.dataType.split('|') | |
1258 | - if (dataTypes.indexOf('string') != -1) { | |
1259 | - dataTypes.push('varchar') | |
1260 | - dataTypes.push('nvarchar') | |
1462 | + me_.noAttrFieldListChange(obj, false) | |
1261 | 1463 | } |
1262 | - this.tableFields.forEach(boData => { | |
1263 | - boData.children.forEach((v, i) => { | |
1264 | - if (v.keyName == value) { | |
1265 | - attributeType = v.dataType | |
1464 | + }) | |
1465 | + if (!this.formData.formSetting.display) { | |
1466 | + this.formData.formSetting = JSON.stringify(this.formSetting) | |
1467 | + } | |
1468 | + }, | |
1469 | + | |
1470 | + mounted() { | |
1471 | + // 声明 | |
1472 | + this.$validator = this.$root.$validator | |
1473 | + // 复制高级字段列表 | |
1474 | + this.copyAdvanceComponents = this.advanceComponents.slice() | |
1475 | + }, | |
1476 | + | |
1477 | + destroyed() {}, | |
1478 | + | |
1479 | + methods: { | |
1480 | + confirmDynamic(data) { | |
1481 | + this.$set(this.widgetFormData, 'globalDynamicControl', data) | |
1482 | + }, | |
1483 | + // 显示动态控件配置页面 | |
1484 | + showDynamicDialog() { | |
1485 | + this.$refs.dynamicControlRef.showDialog(this.widgetFormData) | |
1486 | + }, | |
1487 | + ...mapMutations({ | |
1488 | + setSelectWidget: 'form/setSelectWidget' // 设置当前选中控件 | |
1489 | + }), | |
1490 | + getTableLayoutOfControlKeys() { | |
1491 | + let keys = [] | |
1492 | + if (this.widgetForm.list && this.widgetForm.list.length) { | |
1493 | + this.widgetForm.list.map(item => { | |
1494 | + if (item.isLayout && item.ctrlType == 'table') { | |
1495 | + item.rows.map(it => { | |
1496 | + if (it.cols && it.cols.length) { | |
1497 | + it.cols.map(col => { | |
1498 | + if (col.list && col.list.length) { | |
1499 | + col.list.map(list => { | |
1500 | + keys.push(list.key) | |
1501 | + }) | |
1502 | + } | |
1503 | + }) | |
1504 | + } | |
1505 | + }) | |
1266 | 1506 | } |
1267 | 1507 | }) |
1268 | - }) | |
1269 | - if (attributeType != 'number') { | |
1270 | - return ( | |
1271 | - attributeType != 'number' && | |
1272 | - obj.ctrlType != 'rate' && | |
1273 | - obj.ctrlType != 'slider' | |
1274 | - ) | |
1275 | 1508 | } |
1276 | - // 数字控件不能绑定日期控件 | |
1277 | - if (this.field.options.dataType == 'number') { | |
1278 | - return obj.options.dataType != 'date' | |
1279 | - } | |
1280 | - // 日期控件不能绑定数字控件 | |
1281 | - if (this.field.options.dataType == 'date') { | |
1282 | - return obj.options.dataType != 'number' | |
1509 | + return keys | |
1510 | + }, | |
1511 | + getSubtableType(type) { | |
1512 | + this.subTableLayoutType = type | |
1513 | + }, | |
1514 | + setTableFieldsChildren(data, ctrlType) { | |
1515 | + if (['checkbox', 'radio', 'select'].includes(ctrlType)) { | |
1516 | + const copyDate = JSON.parse(JSON.stringify(data)) | |
1517 | + copyDate.map(item => { | |
1518 | + const options = item.children.filter( | |
1519 | + it => it.dataType !== 'number' && it.dataType !== 'date' | |
1520 | + ) | |
1521 | + this.$set(item, 'children', options) | |
1522 | + }) | |
1523 | + this.tableFields = copyDate | |
1283 | 1524 | } |
1284 | - // 大文本类型默认多行文本和附件 | |
1285 | - if (this.field.options.dataType == 'clob') { | |
1286 | - if (obj.ctrlType == 'textarea' || obj.ctrlType == 'attachment') { | |
1287 | - return true | |
1525 | + }, | |
1526 | + //重置表单配置信息 | |
1527 | + formSettingReset() { | |
1528 | + this.formSetting.align = 'right' | |
1529 | + this.formSetting.customColon = false | |
1530 | + this.formSetting.fontColor = 'rgb(150, 151, 153)' | |
1531 | + this.formSetting.display = 'block' | |
1532 | + this.formSetting.roInputDisplayMode = 'text' | |
1533 | + this.formSetting.labelPosition = false | |
1534 | + }, | |
1535 | + //打开表单配置弹框 | |
1536 | + formSettingClick() { | |
1537 | + if (this.formData.formSetting) { | |
1538 | + this.formSetting = { | |
1539 | + ...this.formSetting, | |
1540 | + ...JSON.parse(this.formData.formSetting) | |
1288 | 1541 | } |
1289 | 1542 | } |
1290 | - // 字符串类型可以选择所有字段 | |
1291 | - let charArr = ['string', 'varchar', 'nvarchar'] | |
1292 | - | |
1293 | - // 需要兼容以前的代码 this.field.options.dataType == "" | |
1294 | - let result = this.field.options.dataType.split('|').filter(item => { | |
1295 | - return dataTypes.indexOf(item) != -1 || charArr.indexOf(item) != -1 | |
1296 | - }) | |
1297 | - | |
1298 | - if (result && result.length >= 1) { | |
1299 | - return true | |
1300 | - } | |
1301 | - return false | |
1543 | + this.formSettingVisible = true | |
1302 | 1544 | }, |
1303 | - /** | |
1304 | - * 新旧属性的替换,并保留原有的双向绑定, | |
1305 | - * 具体逻辑为: | |
1306 | - * 1.新属性有值的,旧属性没有的,新增 | |
1307 | - * 2.新属性没有的,旧属性有的,删除 | |
1308 | - * 3.新属性有的,旧属性也有,,则保留旧属性(desc等一些特殊key 需要特殊逻辑处理) | |
1309 | - */ | |
1310 | - attributeToReplace(oldV, newV) { | |
1311 | - for (let key in oldV) { | |
1312 | - //2.新属性没有的,旧属性有的,删除 | |
1313 | - if ( | |
1314 | - key != 'key' && | |
1315 | - newV[key] === undefined && | |
1316 | - (oldV[key] || oldV[key] === '') | |
1317 | - ) { | |
1318 | - delete oldV[key] | |
1319 | - } | |
1545 | + //保存表单配置信息 | |
1546 | + formSettingOk() { | |
1547 | + this.formData.formSetting = JSON.stringify(this.formSetting) | |
1548 | + this.formSettingVisible = false | |
1549 | + }, | |
1550 | + //打开添加表单提交校验配置弹框 | |
1551 | + formSubmitVerificationClick(index) { | |
1552 | + let item = null | |
1553 | + if (typeof index !== 'undefined' && index >= 0) { | |
1554 | + item = this.submitVerification[index] | |
1555 | + this.currentSubmitVerificationIndex = index | |
1556 | + } else { | |
1557 | + this.currentSubmitVerificationIndex = -1 | |
1320 | 1558 | } |
1321 | - for (let key in newV) { | |
1322 | - let value = newV[key] | |
1323 | - //1.新属性有值的,旧属性没有的,新增 | |
1324 | - if (oldV[key] === undefined || oldV[key] === '') { | |
1325 | - this.$set(oldV, key, value) | |
1326 | - //3.新属性有的,旧属性也有,,则保留旧属性(options等一些特殊key 需要特殊逻辑处理) | |
1327 | - } else { | |
1328 | - if (key === 'options') { | |
1329 | - // 保留绑定的dataType | |
1330 | - let boDataType = oldV[key].dataType | |
1331 | - oldV[key] = value | |
1332 | - if (boDataType) { | |
1333 | - oldV[key].dataType = boDataType | |
1334 | - } | |
1335 | - } | |
1336 | - } | |
1559 | + this.$refs.submitVerificationDialog.handleOpen(item) | |
1560 | + }, | |
1561 | + //保存表单提交校验配置信息 | |
1562 | + formSubmitVerificationOk(verification) { | |
1563 | + if (!this.submitVerification) { | |
1564 | + this.submitVerification = [] | |
1337 | 1565 | } |
1338 | - //旧属性有值 和新属性的值不一样 要重置 | |
1339 | - for (let keys in oldV) { | |
1340 | - if (!(oldV[keys] instanceof Object)) { | |
1341 | - if (oldV[keys] != newV[keys] && newV[keys] != undefined) { | |
1342 | - oldV[keys] = newV[keys] | |
1343 | - } | |
1344 | - } | |
1566 | + if (this.currentSubmitVerificationIndex > -1) { | |
1567 | + this.submitVerification[ | |
1568 | + this.currentSubmitVerificationIndex | |
1569 | + ] = verification | |
1570 | + } else { | |
1571 | + this.submitVerification.push(verification) | |
1345 | 1572 | } |
1346 | 1573 | }, |
1347 | - //切换控件类型对应改变属性 | |
1348 | - changeCtrlType(isClean,type) { | |
1349 | - const me_ = this | |
1350 | - const selectObj = deepmerge({}, me_.field, {clone: true}) | |
1351 | - basicComponents.forEach(item => { | |
1352 | - if (me_.field.ctrlType == item.ctrlType) { | |
1353 | - // me_.field = deepmerge({}, item, { clone: true }); | |
1354 | - let i = deepmerge({}, item, {clone: true}) | |
1355 | - i.parentNodeType = me_.data.parentNodeType | |
1356 | - i.boSubEntity = me_.data.boSubEntity | |
1357 | - me_.attributeToReplace(me_.field, i) | |
1358 | - | |
1359 | - me_.field.key = me_.data.key | |
1360 | - me_.field.tableName = selectObj.tableName | |
1361 | - me_.field.target = selectObj.target | |
1362 | - | |
1363 | - | |
1364 | - if (!isClean) { | |
1365 | - me_.field.boDefId = selectObj.boDefId | |
1366 | - me_.field.target = selectObj.target | |
1367 | - me_.field.boAttrId = selectObj.boAttrId | |
1368 | - me_.field.fieldPath = selectObj.fieldPath | |
1369 | - me_.field.name = selectObj.name | |
1370 | - me_.field.desc = selectObj.desc | |
1371 | - me_.field.title = selectObj.desc | |
1372 | - me_.field.entId = selectObj.entId | |
1373 | - me_.field.boDefAlias = selectObj.boDefAlias | |
1374 | - me_.field.tableName = selectObj.tableName | |
1375 | - me_.field.columnType = selectObj.columnType | |
1376 | - if(!type){ | |
1377 | - me_.field.options.format = selectObj.options.format | |
1378 | - me_.field.options.inputFormat = selectObj.options.format | |
1379 | - me_.field.options.decimalDigits = selectObj.options.decimalDigits | |
1380 | - me_.field.options.maxDecimalDigits = | |
1381 | - selectObj.options.maxDecimalDigits | |
1382 | - me_.field.options.max = selectObj.options.max | |
1383 | - me_.field.options.numberMax = selectObj.options.numberMax | |
1384 | - me_.field.options.numberMin = selectObj.options.numberMin | |
1385 | - me_.field.options.min = selectObj.options.min | |
1386 | - } | |
1387 | - } | |
1388 | - if (item.ctrlType == 'amap') { | |
1389 | - me_.field.options.dataType = 'varchar' | |
1390 | - } | |
1391 | - if (item.ctrlType == 'switch') { | |
1392 | - me_.field.options.dataType = 'varchar' | |
1393 | - } | |
1394 | - //me_.$emit("data:update", me_.field); | |
1395 | - //WidgetFormBus.$emit("changeCtrlType", me_.field); | |
1396 | - } | |
1397 | - }) | |
1398 | - flowComponents.forEach(item => { | |
1399 | - if (me_.field.ctrlType == item.ctrlType) { | |
1400 | - // me_.field = deepmerge({}, item, { clone: true }); | |
1401 | - let i = deepmerge({}, item, {clone: true}) | |
1402 | - i.parentNodeType = me_.data.parentNodeType | |
1403 | - i.boSubEntity = me_.data.boSubEntity | |
1404 | - me_.attributeToReplace(me_.field, i) | |
1405 | - | |
1406 | - me_.field.key = me_.data.key | |
1407 | - if (!isClean) { | |
1408 | - me_.field.boDefId = selectObj.boDefId | |
1409 | - me_.field.target = selectObj.target | |
1410 | - me_.field.boAttrId = selectObj.boAttrId | |
1411 | - me_.field.fieldPath = selectObj.fieldPath | |
1412 | - me_.field.name = selectObj.name | |
1413 | - me_.field.desc = selectObj.desc | |
1414 | - me_.field.title = selectObj.desc | |
1415 | - me_.field.entId = selectObj.entId | |
1416 | - me_.field.boDefAlias = selectObj.boDefAlias | |
1417 | - me_.field.tableName = selectObj.tableName | |
1418 | - me_.field.columnType = selectObj.columnType | |
1419 | - me_.field.options.format = selectObj.options.format | |
1420 | - me_.field.options.inputFormat = selectObj.options.format | |
1421 | - me_.field.options.decimalDigits = selectObj.options.decimalDigits | |
1422 | - me_.field.options.maxDecimalDigits = | |
1423 | - selectObj.options.maxDecimalDigits | |
1424 | - me_.field.options.max = selectObj.options.max | |
1425 | - me_.field.options.numberMax = selectObj.options.numberMax | |
1426 | - me_.field.options.numberMin = selectObj.options.numberMin | |
1427 | - me_.field.options.min = selectObj.options.min | |
1428 | - } | |
1429 | - } | |
1430 | - }) | |
1431 | - advanceComponents.forEach(item => { | |
1432 | - if (me_.field.ctrlType == item.ctrlType) { | |
1433 | - // me_.field = deepmerge({}, item, { clone: true }); | |
1434 | - let e = deepmerge({}, item, {clone: true}) | |
1435 | - e.parentNodeType = me_.data.parentNodeType | |
1436 | - e.boSubEntity = me_.data.boSubEntity | |
1437 | - me_.attributeToReplace(me_.field, e) | |
1438 | - me_.field.key = me_.data.key | |
1439 | - // 如果是非绑定属性的 不用赋值 | |
1440 | - if (item.options && item.options.noBindModel) { | |
1441 | - isClean = true | |
1442 | - } | |
1443 | - if (!isClean) { | |
1444 | - me_.field.boDefId = selectObj.boDefId | |
1445 | - me_.field.target = selectObj.target | |
1446 | - me_.field.boAttrId = selectObj.boAttrId | |
1447 | - me_.field.fieldPath = selectObj.fieldPath | |
1448 | - me_.field.name = selectObj.name | |
1449 | - me_.field.desc = selectObj.desc | |
1450 | - me_.field.title = selectObj.desc | |
1451 | - me_.field.entId = selectObj.entId | |
1452 | - me_.field.boDefAlias = selectObj.boDefAlias | |
1453 | - me_.field.tableName = selectObj.tableName | |
1454 | - me_.field.columnType = selectObj.columnType | |
1455 | - me_.field.options.format = selectObj.format | |
1456 | - me_.field.options.inputFormat = selectObj.format | |
1457 | - me_.field.options.decimalDigits = selectObj.options.decimalDigits | |
1458 | - me_.field.options.maxDecimalDigits = | |
1459 | - selectObj.options.maxDecimalDigits | |
1460 | - me_.field.options.max = selectObj.options.max | |
1461 | - me_.field.options.numberMax = selectObj.options.numberMax | |
1462 | - me_.field.options.numberMin = selectObj.options.numberMin | |
1463 | - me_.field.options.min = selectObj.options.min | |
1464 | - } | |
1465 | - if (item.ctrlType == 'amap') { | |
1466 | - me_.field.options.dataType = 'varchar' | |
1467 | - } | |
1468 | - // WidgetFormBus.$emit("changeCtrlType", me_.field); | |
1469 | - } | |
1470 | - }) | |
1471 | - me_.$nextTick(() => { | |
1472 | - this.setSelectWidget(me_.field) | |
1473 | - }) | |
1474 | - this.checkAndClearTarget() | |
1475 | - }, | |
1476 | - //引入脚本和样式对象保存 | |
1477 | - includeFilesOk() { | |
1478 | - if (!this.formHtml) { | |
1479 | - this.$message.warning('模板HTML不能为空!') | |
1480 | - return | |
1574 | + saveValidate() { | |
1575 | + const this_ = this | |
1576 | + //这里先校验字段属性,再校验表单属性 | |
1577 | + if(this.data.ctrlType =='tag'&& !this.data.options.tag){ | |
1578 | + return this.$message.warning('请选择标签') | |
1481 | 1579 | } |
1482 | - this.dialogincluddingFileVisible = false | |
1483 | - form | |
1484 | - .saveFormJs({ | |
1485 | - formId: this.formData.id, | |
1486 | - diyJs: this.includeFiles.diyJs, | |
1487 | - formHtml: Base64.encode(this.formHtml, 'utf-8'), | |
1488 | - formExpand: Base64.encode(this.formExpand, 'utf-8') | |
1489 | - }) | |
1490 | - .then(resp => { | |
1491 | - if (resp.state) { | |
1492 | - this.$message.success(resp.message) | |
1493 | - } | |
1494 | - }) | |
1495 | - }, | |
1496 | - variablesClick(data) { | |
1497 | - this.includeFiles.diyJs += data.value | |
1498 | - }, | |
1499 | - afterformHtml(data) { | |
1500 | - this.formExpand = data.bpmForm.formExpand | |
1501 | - this.formHtml = data.bpmForm.formHtml | |
1502 | - this.includeFiles.diyJs = data.bpmForm.diyJs | |
1503 | - }, | |
1504 | - includdingFile() { | |
1505 | - this.dialogincluddingFileVisible = true | |
1506 | - this.formHtmlUrl = | |
1507 | - '/form/form/v1/previewDesignVue?formId=' + this.formData.id | |
1508 | - this.includeFiles = this.formData.includeFiles | |
1509 | - ? Base64.decode(this.formData.includeFiles, 'utf-8') | |
1510 | - : {diyFile: ' ', diyCss: ' ', diyJs: ' '} | |
1511 | - }, | |
1512 | - // 改变地图地址绑定的字段 设置fieldPath | |
1513 | - changeMap(value) { | |
1514 | - let selectObj = null | |
1515 | - this.tableFields.forEach(boData => { | |
1516 | - if (!selectObj) { | |
1517 | - selectObj = boData.children.find(opt => opt.name === value) | |
1518 | - if (selectObj) { | |
1519 | - selectObj.boDefAlias = | |
1520 | - boData.boDefAlias || boData.fieldPath.split('.')[0] | |
1521 | - selectObj.tableName = boData.name | |
1522 | - } | |
1580 | + this_.$root.$validator.validateAll('field').then(result => { | |
1581 | + console.log(result) | |
1582 | + if (result) { | |
1583 | + utils | |
1584 | + .validateForm(this, 'editBpmForm') | |
1585 | + .then(() => { | |
1586 | + //手机表单保存时 表单类型指定为手机表单类型 | |
1587 | + if ( | |
1588 | + this_.formData.formType && | |
1589 | + this_.formData.formType != 'mobile' | |
1590 | + ) { | |
1591 | + this_.formData.formType = 'pc' | |
1592 | + } | |
1593 | + // this.formData.name = this.formData.formName; | |
1594 | + const hasValidateForm = | |
1595 | + this.$refs.advancedProperty && | |
1596 | + this.$refs.advancedProperty.$refs.validateProperty | |
1597 | + if ( | |
1598 | + this.$refs.BasicsProperty && | |
1599 | + this.$refs.BasicsProperty.validateKey() | |
1600 | + ) { | |
1601 | + return this.$message.warning( | |
1602 | + '下拉树或下拉框固定选项有重复的选项值,请重新输入' | |
1603 | + ) | |
1604 | + } | |
1605 | + if ( | |
1606 | + this.$refs.BasicsProperty && | |
1607 | + this.$refs.BasicsProperty.validateFilterRange() | |
1608 | + ) { | |
1609 | + return this.$message.warning('请选择过滤范围') | |
1610 | + } | |
1611 | + if (hasValidateForm) { | |
1612 | + this.$refs.advancedProperty.$refs.validateProperty | |
1613 | + .getValidateFormResult() | |
1614 | + .then(result => { | |
1615 | + this_.$emit('saveEnd') | |
1616 | + }) | |
1617 | + .catch(err => { | |
1618 | + if (err.length > 0) { | |
1619 | + return this.$message.warning( | |
1620 | + `有${err.length}个字段未通过校验,请正确填写校验规则。` | |
1621 | + ) | |
1622 | + } | |
1623 | + }) | |
1624 | + } else { | |
1625 | + this_.$emit('saveEnd') | |
1626 | + } | |
1627 | + }) | |
1628 | + .catch(reason => { | |
1629 | + let rules = reason.map(obj => { | |
1630 | + return obj.rule | |
1631 | + }) | |
1632 | + if ( | |
1633 | + this_.formData && | |
1634 | + this_.formData.typeName && | |
1635 | + this_.formData.name && | |
1636 | + this_.formData.formKey | |
1637 | + ) { | |
1638 | + if (rules.includes('isExist')) { | |
1639 | + this.$message.error('表单别名重复') | |
1640 | + } else if (rules.includes('regex')) { | |
1641 | + this.$message.error( | |
1642 | + '只能输入字母、数字、下划线,且以字母开头' | |
1643 | + ) | |
1644 | + } else { | |
1645 | + this.$message.error('表单校验不通过') | |
1646 | + } | |
1647 | + } else { | |
1648 | + //获取到报错后的规则数组 | |
1649 | + if (rules.includes('required')) { | |
1650 | + this.$message.error('请完整填写表单内容') | |
1651 | + } else if (rules.includes('isExist')) { | |
1652 | + this.$message.error('表单别名重复') | |
1653 | + } | |
1654 | + } | |
1655 | + this.activeTabName = 'form' | |
1656 | + }) | |
1657 | + } else { | |
1658 | + let arr = this_.$root.$validator.errors.items.filter( | |
1659 | + item => item.scope == 'field' | |
1660 | + ) | |
1661 | + let errorLength = arr.length | |
1662 | + this.activeTabName = 'field' | |
1663 | + this_.$message({ | |
1664 | + showClose: true, | |
1665 | + message: `有${errorLength}个字段未通过校验,请正确填写表单内容。`, | |
1666 | + type: 'warning' | |
1667 | + }) | |
1523 | 1668 | } |
1524 | 1669 | }) |
1525 | - this.field.options.locationPath = selectObj.path + '.' + selectObj.name | |
1526 | 1670 | }, |
1527 | - // 改变绑定的字段 设置fieldPath | |
1528 | - change(value) { | |
1529 | - let selectObj = null | |
1530 | - this.fieldIndexData = {} | |
1531 | - this.tableFields.forEach(boData => { | |
1532 | - boData.children.forEach((v, i) => { | |
1533 | - let keyName = v.name | |
1534 | - if (value.indexOf('.') != -1) { | |
1535 | - keyName = v.path + '.' + v.name | |
1536 | - } | |
1537 | - if (v.isRequired && keyName == value) { | |
1538 | - if (!this.fieldIndexData.fieldName) { | |
1539 | - this.fieldIndexData.fieldName = v.fieldName | |
1540 | - this.fieldIndexData.index = i | |
1541 | - } | |
1542 | - } | |
1543 | - }) | |
1544 | - if (!selectObj) { | |
1545 | - selectObj = boData.children.find(opt => opt.name === value) | |
1546 | - if (value.indexOf('.') != -1) { | |
1547 | - selectObj = boData.children.find( | |
1548 | - opt => opt.path + '.' + opt.name === value | |
1549 | - ) | |
1550 | - } | |
1551 | - | |
1552 | - if (selectObj) { | |
1553 | - selectObj.boDefAlias = | |
1554 | - boData.boDefAlias || boData.path.split('.')[0] | |
1555 | - selectObj.tableName = boData.name | |
1556 | - } | |
1671 | + filterFields(obj) { | |
1672 | + if ( | |
1673 | + (obj.columnType == 'clob' || obj.dataType == 'clob') && | |
1674 | + this.clobFieldList.indexOf(this.field.ctrlType) == -1 | |
1675 | + ) { | |
1676 | + return false | |
1677 | + } | |
1678 | + if (this.field.ctrlType == 'handSignature') { | |
1679 | + if ( | |
1680 | + (obj.columnType == 'clob' || obj.dataType == 'clob') && | |
1681 | + obj.fieldName != 'id_' && | |
1682 | + obj.fieldName != 'ref_id_' | |
1683 | + ) { | |
1684 | + return true | |
1557 | 1685 | } |
1558 | - }) | |
1559 | - | |
1560 | - if (!selectObj) { | |
1561 | - if (this.field.parentNodeType == 'sub') { | |
1562 | - this.field.fieldPath = 'item.' + value | |
1563 | - this.field.name = 'item.' + value | |
1564 | - } else { | |
1565 | - this.$message.warning('只允许子表绑定虚拟字段') | |
1686 | + return false | |
1687 | + } | |
1688 | + if (this.field.ctrlType == 'richText') { | |
1689 | + if ( | |
1690 | + obj.columnType != 'number' && | |
1691 | + obj.columnType != 'date' && | |
1692 | + obj.fieldName != 'id_' && | |
1693 | + obj.fieldName != 'ref_id_' | |
1694 | + ) { | |
1695 | + return true | |
1566 | 1696 | } |
1567 | - return | |
1697 | + return false | |
1568 | 1698 | } |
1569 | - | |
1570 | - this.field.boDefId = selectObj.boDefId | |
1571 | - this.field.boAttrId = selectObj.id | |
1572 | - if (this.field.parentNodeType == 'sub') { | |
1573 | - this.field.fieldPath = 'item.' + selectObj.name | |
1574 | - } else { | |
1575 | - this.field.fieldPath = selectObj.path + '.' + selectObj.name | |
1699 | + if (this.field.ctrlType == 'signature') { | |
1700 | + //审批签章不能绑定数字和日期属性的字段 | |
1701 | + if (obj.columnType != 'number' && obj.columnType != 'date') { | |
1702 | + return true | |
1703 | + } | |
1704 | + return false | |
1576 | 1705 | } |
1577 | 1706 | |
1578 | - this.field.options.dataType = selectObj.dataType | |
1579 | - | |
1580 | - this.field.name = selectObj.name | |
1581 | - this.field.desc = selectObj.desc | |
1582 | - this.field.title = selectObj.desc | |
1583 | - this.field.entId = selectObj.entId | |
1584 | - this.field.boDefAlias = selectObj.boDefAlias | |
1585 | - this.field.tableName = selectObj.tableName | |
1586 | - this.field.columnType = selectObj.columnType | |
1587 | - if (selectObj.dataType == 'date') { | |
1588 | - this.field.options.format = selectObj.format | |
1589 | - this.field.options.inputFormat = selectObj.format | |
1590 | - } else if (selectObj.dataType == 'number') { | |
1591 | - //如果为评分组件则默认最大值为5 | |
1592 | - if (this.field.ctrlType === 'rate') { | |
1593 | - this.field.options.max = Number(this.field.options.max) | |
1594 | - } else { | |
1595 | - this.field.options.maxDecimalDigits = selectObj.decimalLen | |
1596 | - this.field.options.decimalDigits = selectObj.decimalLen | |
1597 | - this.field.options.max = Number(''.padStart(selectObj.charLen, '9')) | |
1598 | - this.field.options.numberMax = Number( | |
1599 | - ''.padStart(selectObj.charLen, '9') | |
1600 | - ) | |
1601 | - this.field.options.numberMin = -Number( | |
1602 | - ''.padStart(selectObj.charLen, '9') | |
1603 | - ) | |
1604 | - this.field.options.min = -Number(''.padStart(selectObj.charLen, '9')) | |
1707 | + if (this.filterListType.indexOf(this.field.ctrlType) > -1) { | |
1708 | + if ( | |
1709 | + this.field.ctrlType == 'date' && | |
1710 | + this.field.options.dataType != 'date' | |
1711 | + ) { | |
1712 | + this.field.options.dataType = 'date' | |
1713 | + } else if (this.field.ctrlType == 'switch') { | |
1714 | + this.field.options.dataType = 'varchar' | |
1715 | + } else if (this.field.ctrlType == 'number') { | |
1716 | + this.field.options.dataType = 'number' | |
1605 | 1717 | } |
1718 | + | |
1719 | + return obj.dataType == this.field.options.dataType | |
1720 | + } else if (obj.nodeType == 'sub') { | |
1721 | + return false | |
1722 | + } else { | |
1723 | + return true | |
1724 | + } | |
1725 | + }, | |
1726 | + flowComponentsFilter(item) { | |
1727 | + if (this.field.boSubEntity) { | |
1728 | + return ![ | |
1729 | + 'processForecast', | |
1730 | + 'related-process', | |
1731 | + 'handSignature', | |
1732 | + 'signature', | |
1733 | + 'opinion' | |
1734 | + ].includes(item.ctrlType) | |
1735 | + } | |
1736 | + return true | |
1737 | + }, | |
1738 | + //高级控件 | |
1739 | + filterAdvanceFields(obj) { | |
1740 | + //子/孙表不能选择的控件类型 返回false 不能选择 | |
1741 | + let types = ['dataView', 'formTable', 'QRcode', 'milepost', 'customChart'] | |
1742 | + if (this.field.boSubEntity && types.includes(obj.ctrlType)) { | |
1743 | + return false | |
1606 | 1744 | } |
1607 | - // bo属性中设置了必填 且 当前控件的校验规则为空 | |
1608 | 1745 | if ( |
1609 | - selectObj.isRequired == '1' && | |
1610 | - (!this.field.options.validateList || | |
1611 | - this.field.options.validateList.length == 0) | |
1746 | + (this.field.hasOwnProperty('boSubEntity') || this.isColumnLayout()) && | |
1747 | + ['formTable', 'dataView'].includes(obj.ctrlType) | |
1612 | 1748 | ) { |
1613 | - this.$set(this.field.options, 'validateList', [ | |
1614 | - { | |
1615 | - key: 'required', | |
1616 | - name: '*必填' | |
1617 | - } | |
1618 | - ]) | |
1749 | + return false | |
1619 | 1750 | } |
1620 | - this.$forceUpdate() | |
1751 | + return true | |
1621 | 1752 | }, |
1622 | - //给无属性控件设置关联ent属性 | |
1623 | - changeNoAttrFile(value) { | |
1624 | - let _this = this | |
1625 | - this.tableFields.forEach(ent => { | |
1626 | - if (ent.name == value) { | |
1627 | - _this.$set(_this.field, 'entId', ent.id) | |
1628 | - _this.$set(_this.field, 'boDefId', ent.boDefId) | |
1629 | - if (!_this.field.boDefAlias) { | |
1630 | - _this.$set(_this.field, 'boDefAlias', ent.boDefAlias) | |
1631 | - } | |
1632 | - this.$forceUpdate() | |
1633 | - _this.noAttrFieldListChange(_this.field, true) | |
1753 | + isColumnLayout() { | |
1754 | + let isGrid = false | |
1755 | + const result = this.widgetForm.list.map(item => { | |
1756 | + if (item.ctrlType === 'grid') { | |
1757 | + return item.columns.map(it => { | |
1758 | + return it.list.some(field => field.key === this.field.key) | |
1759 | + }) | |
1634 | 1760 | } |
1635 | 1761 | }) |
1762 | + if (result && result.length) { | |
1763 | + isGrid = result.flat().filter(Boolean).length > 0 | |
1764 | + } | |
1765 | + return isGrid | |
1636 | 1766 | }, |
1637 | - //取消无属性设置 | |
1638 | - changeNoBindModel() { | |
1639 | - if (this.field.options.noBindModel) { | |
1640 | - this.$set(this.field, 'name', 'c_' + this.field.key) | |
1641 | - this.noAttrFieldListChange(this.field, true) | |
1642 | - } else if ( | |
1643 | - !this.field.options.noBindModel && | |
1644 | - this.noAttrFieldList && | |
1645 | - this.noAttrFieldList.length > 0 | |
1767 | + //basicsProperty调用showSelectQueryDialog | |
1768 | + basicsPropertyShowSelectQueryDialog() { | |
1769 | + this.showSelectQueryDialog() | |
1770 | + }, | |
1771 | + //常用控件 | |
1772 | + filterFieldsByCurrentField(obj, value) { | |
1773 | + //获取table布局中控件的key | |
1774 | + const controlKeys = this.getTableLayoutOfControlKeys() | |
1775 | + if (obj.ctrlType === 'amap' && controlKeys.includes(this.field.key)) { | |
1776 | + return false | |
1777 | + } | |
1778 | + //子/孙表不能选择的控件类型 返回false 不能选择 | |
1779 | + let types = [ | |
1780 | + 'related-process', | |
1781 | + 'amap', | |
1782 | + 'signature', | |
1783 | + 'handSignature', | |
1784 | + 'milepost', | |
1785 | + 'customChart', | |
1786 | + 'dataView', | |
1787 | + 'formTable', | |
1788 | + 'divider', | |
1789 | + 'QRcode' | |
1790 | + ] | |
1791 | + let attributeType = null | |
1792 | + if ( | |
1793 | + this.field && | |
1794 | + this.field.boSubEntity && | |
1795 | + types.includes(obj.ctrlType) | |
1646 | 1796 | ) { |
1647 | - this.$set(this.field, 'name', '') | |
1648 | - this.noAttrFieldListChange(this.field, false) | |
1797 | + return false | |
1649 | 1798 | } |
1650 | - if (this.field.ctrlType === 'number') { | |
1651 | - this.setDefaultValueForDigitalControl() | |
1799 | + if (!obj.options.dataType) { | |
1800 | + return true | |
1652 | 1801 | } |
1653 | - }, | |
1654 | - setDefaultValueForDigitalControl() { | |
1655 | - this.field.options.max = 999999999 | |
1656 | - this.field.options.numberMax = 999999999 | |
1657 | - this.field.options.numberMin = -999999999 | |
1658 | - this.field.options.min = 0 | |
1659 | - }, | |
1660 | - isChangeWatch() { | |
1661 | - this.isWatch = true | |
1662 | - // | |
1663 | - // | |
1664 | - // 切换时 处理合计 | |
1665 | - if (this.widgetForm.list && this.widgetForm.list.length > 0) { | |
1666 | - this.widgetForm.list.forEach((item, index) => { | |
1667 | - if (item.name === this.field.tableName) { | |
1668 | - item.CombinedColumnList && | |
1669 | - item.CombinedColumnList.forEach((ComItem, ComIndex) => { | |
1670 | - if (ComItem.columnField === this.field.name) { | |
1671 | - if ( | |
1672 | - this.field.ctrlType != 'number' || | |
1673 | - selitem.columnType != 'number' | |
1674 | - ) { | |
1675 | - item.CombinedColumnList.splice(ComIndex, 1) | |
1676 | - } | |
1677 | - } | |
1678 | - }) | |
1679 | - this.$set( | |
1680 | - this.widgetForm.list[index], | |
1681 | - 'CombinedColumnListJson', | |
1682 | - Base64.encode(JSON.stringify(item.CombinedColumnList), 'utf-8') | |
1683 | - ) | |
1684 | - } | |
1685 | - }) | |
1802 | + if (this.field && !this.field.options) { | |
1803 | + return true | |
1686 | 1804 | } |
1687 | - }, | |
1688 | - //判断并清空绑定属性 | |
1689 | - checkAndClearTarget() { | |
1690 | - if (!utils.isEmpty(this.field.target) && this.tableFields.length > 0) { | |
1691 | - this.tableFields.forEach((item, i) => { | |
1692 | - var items = | |
1693 | - this.tableFields[i].children && | |
1694 | - this.tableFields[i].children.filter(obj => { | |
1695 | - return this.field.target == obj['keyName'] | |
1696 | - }) | |
1697 | - | |
1698 | - if (!items || items.length <= 0) { | |
1699 | - this.field.target = '' | |
1700 | - } | |
1701 | - if (!this.filterFields(items[0])) { | |
1702 | - this.field.target = '' | |
1805 | + if (this.field && !this.field.options.dataType) { | |
1806 | + return true | |
1807 | + } | |
1808 | + if (this.field && this.field.options.dataType == obj.options.dataType) { | |
1809 | + return true | |
1810 | + } | |
1811 | + let dataTypes = obj.options.dataType.split('|') | |
1812 | + if (dataTypes.indexOf('string') != -1) { | |
1813 | + dataTypes.push('varchar') | |
1814 | + dataTypes.push('nvarchar') | |
1815 | + } | |
1816 | + this.tableFields.forEach(boData => { | |
1817 | + boData.children.forEach((v, i) => { | |
1818 | + if (v.keyName == value) { | |
1819 | + attributeType = v.dataType | |
1703 | 1820 | } |
1704 | 1821 | }) |
1822 | + }) | |
1823 | + if (attributeType != 'number') { | |
1824 | + return ( | |
1825 | + attributeType != 'number' && | |
1826 | + obj.ctrlType != 'rate' && | |
1827 | + obj.ctrlType != 'slider' | |
1828 | + ) | |
1705 | 1829 | } |
1706 | - }, | |
1707 | - editI18nMessage(after) { | |
1708 | - this.i18nMessageKey = this.field.fieldPath || this.field.path | |
1709 | - | |
1710 | - if (this.createKeyMap[this.field.ctrlType]) { | |
1711 | - this.i18nMessageKey = | |
1712 | - this.formData.formKey + | |
1713 | - '.' + | |
1714 | - this.field.ctrlType + | |
1715 | - Math.random() * 5000 | |
1716 | - } | |
1717 | - if (this.i18nMessageKey && after) { | |
1718 | - this.i18nMessageKey += after | |
1830 | + // 数字控件不能绑定日期控件 | |
1831 | + if (this.field.options.dataType == 'number') { | |
1832 | + return obj.options.dataType != 'date' | |
1719 | 1833 | } |
1720 | - this.$refs.i18nMessageEdit.handleOpen() | |
1721 | - }, | |
1722 | - afterSaveI18n(data) { | |
1723 | - data.key = data.key.replace('$', '#') | |
1724 | - if (data.prop.endsWith('placeholder')) { | |
1725 | - this.field.options.placeholder = data.key | |
1726 | - this.field.options.placeholder_zh = data.desc | |
1727 | - } else if (data.prop.endsWith('tip')) { | |
1728 | - this.tooltip = data.key | |
1729 | - } else { | |
1730 | - this.field.desc = data.key | |
1731 | - this.field.desc_zh = data.desc | |
1834 | + // 日期控件不能绑定数字控件 | |
1835 | + if (this.field.options.dataType == 'date') { | |
1836 | + return obj.options.dataType != 'number' | |
1732 | 1837 | } |
1733 | - }, | |
1734 | - isNoAttrField(field) { | |
1735 | - //无属性控件 | |
1736 | - if (!field) { | |
1737 | - field = this.field | |
1838 | + // 大文本类型默认多行文本和附件 | |
1839 | + if (this.field.options.dataType == 'clob') { | |
1840 | + if (obj.ctrlType == 'textarea' || obj.ctrlType == 'attachment') { | |
1841 | + return true | |
1842 | + } | |
1738 | 1843 | } |
1739 | - const unboundPropertyList = [ | |
1740 | - 'text', | |
1741 | - 'immediate-single', | |
1742 | - 'immediate-textarea', | |
1743 | - 'flowChart', | |
1744 | - 'approvalHistory', | |
1745 | - 'opinion', | |
1746 | - 'big-title', | |
1747 | - 'small-title', | |
1748 | - 'simple-text', | |
1749 | - 'explain', | |
1750 | - 'dataView', | |
1751 | - 'formTable', | |
1752 | - 'QRcode', | |
1753 | - 'iframe', | |
1754 | - 'image', | |
1755 | - 'customChart', | |
1756 | - 'button', | |
1757 | - 'historicalApproval', | |
1758 | - 'processForecast' | |
1759 | - ] | |
1844 | + // 字符串类型可以选择所有字段 | |
1845 | + let charArr = ['string', 'varchar', 'nvarchar'] | |
1760 | 1846 | |
1761 | - if ( | |
1762 | - (field && unboundPropertyList.includes(field.ctrlType)) || | |
1763 | - (field && | |
1764 | - field.ctrlType == 'button' && | |
1765 | - field.options.bindEventjson && | |
1766 | - !field.options.bindEventjson.isShowInput) | |
1767 | - ) { | |
1847 | + // 需要兼容以前的代码 this.field.options.dataType == "" | |
1848 | + let result = this.field.options.dataType.split('|').filter(item => { | |
1849 | + return dataTypes.indexOf(item) != -1 || charArr.indexOf(item) != -1 | |
1850 | + }) | |
1851 | + | |
1852 | + if (result && result.length >= 1) { | |
1768 | 1853 | return true |
1769 | 1854 | } |
1770 | 1855 | return false |
1771 | 1856 | }, |
1772 | - isAllowNoAttributes(field) { | |
1773 | - //允许无属性控件 | |
1774 | - if (!field) { | |
1775 | - field = this.field | |
1857 | + /** | |
1858 | + * 新旧属性的替换,并保留原有的双向绑定, | |
1859 | + * 具体逻辑为: | |
1860 | + * 1.新属性有值的,旧属性没有的,新增 | |
1861 | + * 2.新属性没有的,旧属性有的,删除 | |
1862 | + * 3.新属性有的,旧属性也有,,则保留旧属性(desc等一些特殊key 需要特殊逻辑处理) | |
1863 | + */ | |
1864 | + attributeToReplace(oldV, newV) { | |
1865 | + for (let key in oldV) { | |
1866 | + //2.新属性没有的,旧属性有的,删除 | |
1867 | + if ( | |
1868 | + key != 'key' && | |
1869 | + newV[key] === undefined && | |
1870 | + (oldV[key] || oldV[key] === '') | |
1871 | + ) { | |
1872 | + delete oldV[key] | |
1873 | + } | |
1776 | 1874 | } |
1777 | - if ( | |
1778 | - field && | |
1779 | - this.allowNoAttributes.includes(field.ctrlType) && | |
1780 | - field.options.noBindModel | |
1781 | - ) { | |
1782 | - return true | |
1875 | + for (let key in newV) { | |
1876 | + let value = newV[key] | |
1877 | + //1.新属性有值的,旧属性没有的,新增 | |
1878 | + if (oldV[key] === undefined || oldV[key] === '') { | |
1879 | + this.$set(oldV, key, value) | |
1880 | + //3.新属性有的,旧属性也有,,则保留旧属性(options等一些特殊key 需要特殊逻辑处理) | |
1881 | + } else { | |
1882 | + if (key === 'options') { | |
1883 | + // 保留绑定的dataType | |
1884 | + let boDataType = oldV[key].dataType | |
1885 | + oldV[key] = value | |
1886 | + if (boDataType) { | |
1887 | + oldV[key].dataType = boDataType | |
1888 | + } | |
1889 | + } | |
1890 | + } | |
1891 | + } | |
1892 | + //旧属性有值 和新属性的值不一样 要重置 | |
1893 | + for (let keys in oldV) { | |
1894 | + if (!(oldV[keys] instanceof Object)) { | |
1895 | + if (oldV[keys] != newV[keys] && newV[keys] != undefined) { | |
1896 | + oldV[keys] = newV[keys] | |
1897 | + } | |
1898 | + } | |
1783 | 1899 | } |
1784 | - return false | |
1785 | 1900 | }, |
1786 | - noAttrFieldListChange(field, isAdd) { | |
1787 | - //无属性控件的变化实时其更新联动列表 | |
1788 | - let inList = false | |
1901 | + //切换控件类型对应改变属性 | |
1902 | + changeCtrlType(isClean,type) { | |
1903 | + const me_ = this | |
1904 | + const selectObj = deepmerge({}, me_.field, {clone: true}) | |
1905 | + basicComponents.forEach(item => { | |
1906 | + if (me_.field.ctrlType == item.ctrlType) { | |
1907 | + // me_.field = deepmerge({}, item, { clone: true }); | |
1908 | + let i = deepmerge({}, item, {clone: true}) | |
1909 | + i.parentNodeType = me_.data.parentNodeType | |
1910 | + i.boSubEntity = me_.data.boSubEntity | |
1911 | + me_.attributeToReplace(me_.field, i) | |
1789 | 1912 | |
1790 | - this.noAttrFieldList.forEach(item => { | |
1791 | - if (item.key === field.key) { | |
1792 | - if (field.ctrlType == 'button') { | |
1793 | - field.desc = field.options.bindEventjson.name | |
1913 | + me_.field.key = me_.data.key | |
1914 | + me_.field.tableName = selectObj.tableName | |
1915 | + me_.field.target = selectObj.target | |
1916 | + | |
1917 | + | |
1918 | + if (!isClean) { | |
1919 | + me_.field.boDefId = selectObj.boDefId | |
1920 | + me_.field.target = selectObj.target | |
1921 | + me_.field.boAttrId = selectObj.boAttrId | |
1922 | + me_.field.fieldPath = selectObj.fieldPath | |
1923 | + me_.field.name = selectObj.name | |
1924 | + me_.field.desc = selectObj.desc | |
1925 | + me_.field.title = selectObj.desc | |
1926 | + me_.field.entId = selectObj.entId | |
1927 | + me_.field.boDefAlias = selectObj.boDefAlias | |
1928 | + me_.field.tableName = selectObj.tableName | |
1929 | + me_.field.columnType = selectObj.columnType | |
1930 | + if(!type){ | |
1931 | + me_.field.options.format = selectObj.options.format | |
1932 | + me_.field.options.inputFormat = selectObj.options.format | |
1933 | + me_.field.options.decimalDigits = selectObj.options.decimalDigits | |
1934 | + me_.field.options.maxDecimalDigits = | |
1935 | + selectObj.options.maxDecimalDigits | |
1936 | + me_.field.options.max = selectObj.options.max | |
1937 | + me_.field.options.numberMax = selectObj.options.numberMax | |
1938 | + me_.field.options.numberMin = selectObj.options.numberMin | |
1939 | + me_.field.options.min = selectObj.options.min | |
1940 | + } | |
1794 | 1941 | } |
1795 | - if ( | |
1796 | - ['small-title', 'big-title', 'simple-text'].includes(field.ctrlType) | |
1797 | - ) { | |
1798 | - field.desc = field.options.textValue | |
1942 | + if (item.ctrlType == 'amap') { | |
1943 | + me_.field.options.dataType = 'varchar' | |
1799 | 1944 | } |
1800 | - if (isAdd) { | |
1801 | - inList = true | |
1802 | - } else { | |
1803 | - this.noAttrFieldList.remove(item) | |
1804 | - return | |
1945 | + if (item.ctrlType == 'switch') { | |
1946 | + me_.field.options.dataType = 'varchar' | |
1805 | 1947 | } |
1948 | + //me_.$emit("data:update", me_.field); | |
1949 | + //WidgetFormBus.$emit("changeCtrlType", me_.field); | |
1806 | 1950 | } |
1807 | 1951 | }) |
1808 | - if (isAdd && !inList) { | |
1809 | - if (field.ctrlType == 'button') { | |
1810 | - field.desc = field.options.bindEventjson.name | |
1811 | - } | |
1812 | - if ( | |
1813 | - ['small-title', 'big-title', 'simple-text'].includes(field.ctrlType) | |
1814 | - ) { | |
1815 | - field.desc = field.options.textValue | |
1952 | + flowComponents.forEach(item => { | |
1953 | + if (me_.field.ctrlType == item.ctrlType) { | |
1954 | + // me_.field = deepmerge({}, item, { clone: true }); | |
1955 | + let i = deepmerge({}, item, {clone: true}) | |
1956 | + i.parentNodeType = me_.data.parentNodeType | |
1957 | + i.boSubEntity = me_.data.boSubEntity | |
1958 | + me_.attributeToReplace(me_.field, i) | |
1959 | + | |
1960 | + me_.field.key = me_.data.key | |
1961 | + if (!isClean) { | |
1962 | + me_.field.boDefId = selectObj.boDefId | |
1963 | + me_.field.target = selectObj.target | |
1964 | + me_.field.boAttrId = selectObj.boAttrId | |
1965 | + me_.field.fieldPath = selectObj.fieldPath | |
1966 | + me_.field.name = selectObj.name | |
1967 | + me_.field.desc = selectObj.desc | |
1968 | + me_.field.title = selectObj.desc | |
1969 | + me_.field.entId = selectObj.entId | |
1970 | + me_.field.boDefAlias = selectObj.boDefAlias | |
1971 | + me_.field.tableName = selectObj.tableName | |
1972 | + me_.field.columnType = selectObj.columnType | |
1973 | + me_.field.options.format = selectObj.options.format | |
1974 | + me_.field.options.inputFormat = selectObj.options.format | |
1975 | + me_.field.options.decimalDigits = selectObj.options.decimalDigits | |
1976 | + me_.field.options.maxDecimalDigits = | |
1977 | + selectObj.options.maxDecimalDigits | |
1978 | + me_.field.options.max = selectObj.options.max | |
1979 | + me_.field.options.numberMax = selectObj.options.numberMax | |
1980 | + me_.field.options.numberMin = selectObj.options.numberMin | |
1981 | + me_.field.options.min = selectObj.options.min | |
1982 | + } | |
1816 | 1983 | } |
1817 | - this.$set(field, 'name', '') | |
1818 | - this.$set(field, 'target', field.name) | |
1819 | - if ( | |
1820 | - (field.parentNodeType == 'sub' || field.parentNodeType == 'sun') && | |
1821 | - !field.options.noBindModel | |
1822 | - ) { | |
1823 | - this.$set(field, 'fieldPath', 'item.' + field.name) | |
1824 | - } else if ( | |
1825 | - (field.parentNodeType == 'sub' || field.parentNodeType == 'sun') && | |
1826 | - field.options.noBindModel && | |
1827 | - field.key | |
1828 | - ) { | |
1829 | - this.$set(field, 'fieldPath', 'item.' + `c_${field.key}`) | |
1830 | - } else if (field.options.noBindModel && field.boDefAlias && field.key) { | |
1831 | - this.$set(field, 'fieldPath', `${field.boDefAlias}.c_${field.key}`) | |
1832 | - } else if (field.boDefAlias) { | |
1833 | - this.$set(field, 'fieldPath', field.boDefAlias + '.' + field.name) | |
1984 | + }) | |
1985 | + advanceComponents.forEach(item => { | |
1986 | + if (me_.field.ctrlType == item.ctrlType) { | |
1987 | + // me_.field = deepmerge({}, item, { clone: true }); | |
1988 | + let e = deepmerge({}, item, {clone: true}) | |
1989 | + e.parentNodeType = me_.data.parentNodeType | |
1990 | + e.boSubEntity = me_.data.boSubEntity | |
1991 | + me_.attributeToReplace(me_.field, e) | |
1992 | + me_.field.key = me_.data.key | |
1993 | + // 如果是非绑定属性的 不用赋值 | |
1994 | + if (item.options && item.options.noBindModel) { | |
1995 | + isClean = true | |
1996 | + } | |
1997 | + if (!isClean) { | |
1998 | + me_.field.boDefId = selectObj.boDefId | |
1999 | + me_.field.target = selectObj.target | |
2000 | + me_.field.boAttrId = selectObj.boAttrId | |
2001 | + me_.field.fieldPath = selectObj.fieldPath | |
2002 | + me_.field.name = selectObj.name | |
2003 | + me_.field.desc = selectObj.desc | |
2004 | + me_.field.title = selectObj.desc | |
2005 | + me_.field.entId = selectObj.entId | |
2006 | + me_.field.boDefAlias = selectObj.boDefAlias | |
2007 | + me_.field.tableName = selectObj.tableName | |
2008 | + me_.field.columnType = selectObj.columnType | |
2009 | + me_.field.options.format = selectObj.format | |
2010 | + me_.field.options.inputFormat = selectObj.format | |
2011 | + me_.field.options.decimalDigits = selectObj.options.decimalDigits | |
2012 | + me_.field.options.maxDecimalDigits = | |
2013 | + selectObj.options.maxDecimalDigits | |
2014 | + me_.field.options.max = selectObj.options.max | |
2015 | + me_.field.options.numberMax = selectObj.options.numberMax | |
2016 | + me_.field.options.numberMin = selectObj.options.numberMin | |
2017 | + me_.field.options.min = selectObj.options.min | |
2018 | + } | |
2019 | + if (item.ctrlType == 'amap') { | |
2020 | + me_.field.options.dataType = 'varchar' | |
2021 | + } | |
2022 | + // WidgetFormBus.$emit("changeCtrlType", me_.field); | |
1834 | 2023 | } |
1835 | - } else if (field.boDefAlias && !field.fieldPath) { | |
1836 | - this.$set(field, 'fieldPath', field.boDefAlias + '.' + field.name) | |
2024 | + }) | |
2025 | + me_.$nextTick(() => { | |
2026 | + this.setSelectWidget(me_.field) | |
2027 | + }) | |
2028 | + this.checkAndClearTarget() | |
2029 | + }, | |
2030 | + //引入脚本和样式对象保存 | |
2031 | + includeFilesOk() { | |
2032 | + if (!this.formHtml) { | |
2033 | + this.$message.warning('模板HTML不能为空!') | |
2034 | + return | |
1837 | 2035 | } |
1838 | - this.noAttrFieldList.some((item, i) => { | |
1839 | - if (item.key === field.key) { | |
1840 | - this.noAttrFieldList.splice(i, 1) | |
1841 | - return true | |
2036 | + this.dialogincluddingFileVisible = false | |
2037 | + form | |
2038 | + .saveFormJs({ | |
2039 | + formId: this.formData.id, | |
2040 | + diyJs: this.includeFiles.diyJs, | |
2041 | + formHtml: Base64.encode(this.formHtml, 'utf-8'), | |
2042 | + formExpand: Base64.encode(this.formExpand, 'utf-8') | |
2043 | + }) | |
2044 | + .then(resp => { | |
2045 | + if (resp.state) { | |
2046 | + this.$message.success(resp.message) | |
2047 | + } | |
2048 | + }) | |
2049 | + }, | |
2050 | + variablesClick(data) { | |
2051 | + this.includeFiles.diyJs += data.value | |
2052 | + }, | |
2053 | + afterformHtml(data) { | |
2054 | + this.formExpand = data.bpmForm.formExpand | |
2055 | + this.formHtml = data.bpmForm.formHtml | |
2056 | + this.includeFiles.diyJs = data.bpmForm.diyJs | |
2057 | + }, | |
2058 | + includdingFile() { | |
2059 | + this.dialogincluddingFileVisible = true | |
2060 | + this.formHtmlUrl = | |
2061 | + '/form/form/v1/previewDesignVue?formId=' + this.formData.id | |
2062 | + this.includeFiles = this.formData.includeFiles | |
2063 | + ? Base64.decode(this.formData.includeFiles, 'utf-8') | |
2064 | + : {diyFile: ' ', diyCss: ' ', diyJs: ' '} | |
2065 | + }, | |
2066 | + streetChangeMap(value) { | |
2067 | + let selectObj = null | |
2068 | + this.tableFields.forEach((boData) => { | |
2069 | + if (!selectObj) { | |
2070 | + selectObj = boData.children.find((opt) => opt.name === value) | |
2071 | + if (selectObj) { | |
2072 | + selectObj.boDefAlias = | |
2073 | + boData.boDefAlias || boData.fieldPath.split('.')[0] | |
2074 | + selectObj.tableName = boData.name | |
2075 | + } | |
1842 | 2076 | } |
1843 | 2077 | }) |
1844 | - this.noAttrFieldList.push(field) | |
2078 | + this.field.options.streetPath = selectObj.path + '.' + selectObj.name | |
1845 | 2079 | }, |
1846 | - showSelectQueryDialog() { | |
1847 | - //初始化关联查询用到的实体map | |
1848 | - this.initQueryEntMap() | |
1849 | - if (this.widgetFormData.config == undefined) { | |
1850 | - this.widgetFormData.config = {} | |
1851 | - } | |
1852 | - this.$refs.selectQueryDialog.showDialog( | |
1853 | - this.widgetFormData.config.globalQueryJson | |
1854 | - ) | |
2080 | + districtChangeMap(value) { | |
2081 | + let selectObj = null | |
2082 | + this.tableFields.forEach((boData) => { | |
2083 | + if (!selectObj) { | |
2084 | + selectObj = boData.children.find((opt) => opt.name === value) | |
2085 | + if (selectObj) { | |
2086 | + selectObj.boDefAlias = | |
2087 | + boData.boDefAlias || boData.fieldPath.split('.')[0] | |
2088 | + selectObj.tableName = boData.name | |
2089 | + } | |
2090 | + } | |
2091 | + }) | |
2092 | + this.field.options.districtPath = selectObj.path + '.' + selectObj.name | |
1855 | 2093 | }, |
1856 | - //保存关联查询数据 | |
1857 | - saveCustQueryJson(json) { | |
1858 | - this.$set(this.widgetFormData.config, 'globalQueryJson', json) | |
1859 | - this.$set(this.widgetForm.config, 'globalQueryJson', json) | |
2094 | + cityChangeMap(value) { | |
2095 | + let selectObj = null | |
2096 | + this.tableFields.forEach((boData) => { | |
2097 | + if (!selectObj) { | |
2098 | + selectObj = boData.children.find((opt) => opt.name === value) | |
2099 | + if (selectObj) { | |
2100 | + selectObj.boDefAlias = | |
2101 | + boData.boDefAlias || boData.fieldPath.split('.')[0] | |
2102 | + selectObj.tableName = boData.name | |
2103 | + } | |
2104 | + } | |
2105 | + }) | |
2106 | + this.field.options.cityPath = selectObj.path + '.' + selectObj.name | |
1860 | 2107 | }, |
1861 | - initQueryEntMap() { | |
1862 | - if (this.mainBoFields && this.mainBoFields.length > 0) { | |
1863 | - this.queryEntMap['main'] = this.mainBoFields | |
1864 | - } | |
1865 | - if (this.subTables && this.subTables.length > 0) { | |
1866 | - this.queryEntMap['sub'] = this.subTables | |
1867 | - } | |
1868 | - if (this.sunTablesMap && Object.keys(this.sunTablesMap).length !== 0) { | |
1869 | - let sunTables = [] | |
1870 | - for (var key in this.sunTablesMap) { | |
1871 | - if (this.sunTablesMap.hasOwnProperty(key)) { | |
1872 | - sunTables.push(...this.sunTablesMap[key]) | |
2108 | + provinceChangeMap(value) { | |
2109 | + let selectObj = null | |
2110 | + this.tableFields.forEach((boData) => { | |
2111 | + if (!selectObj) { | |
2112 | + selectObj = boData.children.find((opt) => opt.name === value) | |
2113 | + if (selectObj) { | |
2114 | + selectObj.boDefAlias = | |
2115 | + boData.boDefAlias || boData.fieldPath.split('.')[0] | |
2116 | + selectObj.tableName = boData.name | |
1873 | 2117 | } |
1874 | 2118 | } |
1875 | - this.queryEntMap['sun'] = sunTables | |
1876 | - } | |
2119 | + }) | |
2120 | + this.field.options.provincePath = selectObj.path + '.' + selectObj.name | |
1877 | 2121 | }, |
1878 | - selectTypeChange(type) { | |
1879 | - if (type) { | |
1880 | - this.formData.typeId = type.id | |
1881 | - this.formData.typeName = type.name | |
1882 | - } else { | |
1883 | - this.formData.typeId = '' | |
1884 | - this.formData.typeName = '' | |
1885 | - } | |
1886 | - this.$forceUpdate() | |
2122 | + latitudeChangeMap(value) { | |
2123 | + let selectObj = null | |
2124 | + this.tableFields.forEach((boData) => { | |
2125 | + if (!selectObj) { | |
2126 | + selectObj = boData.children.find((opt) => opt.name === value) | |
2127 | + if (selectObj) { | |
2128 | + selectObj.boDefAlias = | |
2129 | + boData.boDefAlias || boData.fieldPath.split('.')[0] | |
2130 | + selectObj.tableName = boData.name | |
2131 | + } | |
2132 | + } | |
2133 | + }) | |
2134 | + this.field.options.latitudePath = selectObj.path + '.' + selectObj.name | |
1887 | 2135 | }, |
1888 | - // 隐藏标题时 标题宽度赋值为0 | |
1889 | - hideTitleChange(flag) { | |
1890 | - this.field.options.labelstyleWidth = flag ? '0' : '' | |
1891 | - } | |
1892 | - }, | |
1893 | - watch: { | |
1894 | - data(val) { | |
1895 | - this.field = val | |
2136 | + | |
2137 | + longitudeChangeMap(value) { | |
2138 | + let selectObj = null | |
2139 | + this.tableFields.forEach((boData) => { | |
2140 | + if (!selectObj) { | |
2141 | + selectObj = boData.children.find((opt) => opt.name === value) | |
2142 | + if (selectObj) { | |
2143 | + selectObj.boDefAlias = | |
2144 | + boData.boDefAlias || boData.fieldPath.split('.')[0] | |
2145 | + selectObj.tableName = boData.name | |
2146 | + } | |
2147 | + } | |
2148 | + }) | |
2149 | + this.field.options.longitudePath = selectObj.path + '.' + selectObj.name | |
1896 | 2150 | }, |
1897 | - field: { | |
1898 | - handler(val) { | |
1899 | - // 下拉框 多选isMultiple 属性废弃 使用options.multiple属性 为了兼容以前的代码 将isMultiple true 值赋值给 options.multiple属性 | |
1900 | - if (val && val.ctrlType == 'select' && val.isMultiple) { | |
1901 | - val.options.multiple = true | |
1902 | - val.isMultiple = false | |
2151 | + // 改变地图地址绑定的字段 设置fieldPath | |
2152 | + changeMap(value) { | |
2153 | + let selectObj = null | |
2154 | + this.tableFields.forEach(boData => { | |
2155 | + if (!selectObj) { | |
2156 | + selectObj = boData.children.find(opt => opt.name === value) | |
2157 | + if (selectObj) { | |
2158 | + selectObj.boDefAlias = | |
2159 | + boData.boDefAlias || boData.fieldPath.split('.')[0] | |
2160 | + selectObj.tableName = boData.name | |
2161 | + } | |
1903 | 2162 | } |
1904 | - | |
1905 | - if (val && ['sub', 'sun'].includes(val.parentNodeType)) { | |
1906 | - if (val.boSubEntity || val.tableName) { | |
1907 | - this.currentBoSubEntity = val.boSubEntity | |
1908 | - this.tableFields = this.subTables.filter( | |
1909 | - item => item.name === val.boSubEntity || item.name === val.tableName | |
1910 | - ) | |
1911 | - if (this.tableFields.length > 0) { | |
1912 | - for (let e = 0; e < this.tableFields.length; e++) { | |
1913 | - if (this.tableFields[e].children.length > 0) { | |
1914 | - for ( | |
1915 | - let w = 0; | |
1916 | - w < this.tableFields[e].children.length; | |
1917 | - w++ | |
1918 | - ) { | |
1919 | - this.tableFields[e].children[w].keyName = this.tableFields[ | |
1920 | - e | |
1921 | - ].children[w].name | |
1922 | - } | |
1923 | - } | |
1924 | - } | |
2163 | + }) | |
2164 | + this.field.options.locationPath = selectObj.path + '.' + selectObj.name | |
2165 | + }, | |
2166 | + // 改变绑定的字段 设置fieldPath | |
2167 | + change(value) { | |
2168 | + let selectObj = null | |
2169 | + this.fieldIndexData = {} | |
2170 | + this.tableFields.forEach(boData => { | |
2171 | + boData.children.forEach((v, i) => { | |
2172 | + let keyName = v.name | |
2173 | + if (value.indexOf('.') != -1) { | |
2174 | + keyName = v.path + '.' + v.name | |
2175 | + } | |
2176 | + if (v.isRequired && keyName == value) { | |
2177 | + if (!this.fieldIndexData.fieldName) { | |
2178 | + this.fieldIndexData.fieldName = v.fieldName | |
2179 | + this.fieldIndexData.index = i | |
1925 | 2180 | } |
1926 | 2181 | } |
2182 | + }) | |
2183 | + if (!selectObj) { | |
2184 | + selectObj = boData.children.find(opt => opt.name === value) | |
2185 | + if (value.indexOf('.') != -1) { | |
2186 | + selectObj = boData.children.find( | |
2187 | + opt => opt.path + '.' + opt.name === value | |
2188 | + ) | |
2189 | + } | |
1927 | 2190 | |
1928 | - //如果是孙表,则选取子表里的孙表供选择绑定 | |
1929 | - if ( | |
1930 | - ((val && val.ctrlType == 'suntable') || val.ctrlType == 'sunDiv') && | |
1931 | - this.currentBoSubEntity | |
1932 | - ) { | |
1933 | - this.sunTables = this.sunTablesMap[this.currentBoSubEntity] || [] | |
2191 | + if (selectObj) { | |
2192 | + selectObj.boDefAlias = | |
2193 | + boData.boDefAlias || boData.path.split('.')[0] | |
2194 | + selectObj.tableName = boData.name | |
1934 | 2195 | } |
1935 | - //如果是孙表里的控件,则找到这个一个孙表供其选择属性 | |
1936 | - if (val && val.parentNodeType == 'sun') { | |
1937 | - for (const subName in this.sunTablesMap) { | |
1938 | - let sunTabs = this.sunTablesMap[subName] | |
1939 | - if (sunTabs) { | |
1940 | - sunTabs.forEach(sunTab => { | |
1941 | - if (sunTab.name == this.currentBoSubEntity) { | |
1942 | - this.tableFields = [sunTab] | |
1943 | - } | |
1944 | - }) | |
1945 | - if (this.tableFields.length > 0) { | |
1946 | - for (let o = 0; o < this.tableFields.length; o++) { | |
1947 | - if (this.tableFields[o].children.length > 0) { | |
1948 | - for ( | |
1949 | - let h = 0; | |
1950 | - h < this.tableFields[o].children.length; | |
1951 | - h++ | |
1952 | - ) { | |
1953 | - this.tableFields[o].children[ | |
1954 | - h | |
1955 | - ].keyName = this.tableFields[o].children[h].name | |
1956 | - } | |
1957 | - } | |
1958 | - } | |
1959 | - } | |
1960 | - } | |
1961 | - } | |
2196 | + } | |
2197 | + }) | |
2198 | + | |
2199 | + if (!selectObj) { | |
2200 | + if (this.field.parentNodeType == 'sub') { | |
2201 | + this.field.fieldPath = 'item.' + value | |
2202 | + this.field.name = 'item.' + value | |
2203 | + } else { | |
2204 | + this.$message.warning('只允许子表绑定虚拟字段') | |
2205 | + } | |
2206 | + return | |
2207 | + } | |
2208 | + | |
2209 | + this.field.boDefId = selectObj.boDefId | |
2210 | + this.field.boAttrId = selectObj.id | |
2211 | + if (this.field.parentNodeType == 'sub') { | |
2212 | + this.field.fieldPath = 'item.' + selectObj.name | |
2213 | + } else { | |
2214 | + this.field.fieldPath = selectObj.path + '.' + selectObj.name | |
2215 | + } | |
2216 | + | |
2217 | + this.field.options.dataType = selectObj.dataType | |
2218 | + | |
2219 | + this.field.name = selectObj.name | |
2220 | + this.field.desc = selectObj.desc | |
2221 | + this.field.title = selectObj.desc | |
2222 | + this.field.entId = selectObj.entId | |
2223 | + this.field.boDefAlias = selectObj.boDefAlias | |
2224 | + this.field.tableName = selectObj.tableName | |
2225 | + this.field.columnType = selectObj.columnType | |
2226 | + if (selectObj.dataType == 'date') { | |
2227 | + this.field.options.format = selectObj.format | |
2228 | + this.field.options.inputFormat = selectObj.format | |
2229 | + } else if (selectObj.dataType == 'number') { | |
2230 | + //如果为评分组件则默认最大值为5 | |
2231 | + if (this.field.ctrlType === 'rate') { | |
2232 | + this.field.options.max = Number(this.field.options.max) | |
2233 | + } else { | |
2234 | + this.field.options.maxDecimalDigits = selectObj.decimalLen | |
2235 | + this.field.options.decimalDigits = selectObj.decimalLen | |
2236 | + this.field.options.max = Number(''.padStart(selectObj.charLen, '9')) | |
2237 | + this.field.options.numberMax = Number( | |
2238 | + ''.padStart(selectObj.charLen, '9') | |
2239 | + ) | |
2240 | + this.field.options.numberMin = -Number( | |
2241 | + ''.padStart(selectObj.charLen, '9') | |
2242 | + ) | |
2243 | + this.field.options.min = -Number(''.padStart(selectObj.charLen, '9')) | |
2244 | + } | |
2245 | + } | |
2246 | + // bo属性中设置了必填 且 当前控件的校验规则为空 | |
2247 | + if ( | |
2248 | + selectObj.isRequired == '1' && | |
2249 | + (!this.field.options.validateList || | |
2250 | + this.field.options.validateList.length == 0) | |
2251 | + ) { | |
2252 | + this.$set(this.field.options, 'validateList', [ | |
2253 | + { | |
2254 | + key: 'required', | |
2255 | + name: '*必填' | |
1962 | 2256 | } |
1963 | - } else { | |
1964 | - if (this.mainBoFields.length > 0) { | |
1965 | - for (let y = 0; y < this.mainBoFields.length; y++) { | |
1966 | - if (this.mainBoFields[y].children.length > 0) { | |
1967 | - for (let t = 0; t < this.mainBoFields[y].children.length; t++) { | |
1968 | - this.mainBoFields[y].children[t].keyName = | |
1969 | - this.mainBoFields[y].children[t].path + | |
1970 | - '.' + | |
1971 | - this.mainBoFields[y].children[t].name | |
1972 | - } | |
1973 | - } | |
1974 | - } | |
2257 | + ]) | |
2258 | + } | |
2259 | + this.$forceUpdate() | |
2260 | + }, | |
2261 | + //给无属性控件设置关联ent属性 | |
2262 | + changeNoAttrFile(value) { | |
2263 | + let _this = this | |
2264 | + this.tableFields.forEach(ent => { | |
2265 | + if (ent.name == value) { | |
2266 | + _this.$set(_this.field, 'entId', ent.id) | |
2267 | + _this.$set(_this.field, 'boDefId', ent.boDefId) | |
2268 | + if (!_this.field.boDefAlias) { | |
2269 | + _this.$set(_this.field, 'boDefAlias', ent.boDefAlias) | |
1975 | 2270 | } |
1976 | - if ( | |
1977 | - val && | |
1978 | - ['time', 'time-picker', 'date-picker'].includes(val.ctrlType) | |
1979 | - ) { | |
1980 | - this.tableFields = JSON.parse(JSON.stringify(this.mainBoFields)) | |
1981 | - this.tableFields.forEach(table => { | |
1982 | - if (table.children) { | |
1983 | - let newFileds = [] | |
1984 | - table.children = table.children.filter( | |
1985 | - f => f.dataType != 'date' && f.dataType != 'number' | |
1986 | - ) | |
1987 | - } | |
1988 | - }) | |
1989 | - } else { | |
1990 | - this.mainBoFields.forEach(item => { | |
1991 | - for (let q = 0; q < item.children.length; q++) { | |
1992 | - for (let i = 0; i < item.children.length - 1 - q; i++) { | |
1993 | - if (item.children[i].index > item.children[i + 1].index) { | |
1994 | - let temp = item.children[i] | |
1995 | - item.children[i] = item.children[i + 1] | |
1996 | - item.children[i + 1] = temp | |
2271 | + this.$forceUpdate() | |
2272 | + _this.noAttrFieldListChange(_this.field, true) | |
2273 | + } | |
2274 | + }) | |
2275 | + }, | |
2276 | + //取消无属性设置 | |
2277 | + changeNoBindModel() { | |
2278 | + if (this.field.options.noBindModel) { | |
2279 | + this.$set(this.field, 'name', 'c_' + this.field.key) | |
2280 | + this.noAttrFieldListChange(this.field, true) | |
2281 | + } else if ( | |
2282 | + !this.field.options.noBindModel && | |
2283 | + this.noAttrFieldList && | |
2284 | + this.noAttrFieldList.length > 0 | |
2285 | + ) { | |
2286 | + this.$set(this.field, 'name', '') | |
2287 | + this.noAttrFieldListChange(this.field, false) | |
2288 | + } | |
2289 | + if (this.field.ctrlType === 'number') { | |
2290 | + this.setDefaultValueForDigitalControl() | |
2291 | + } | |
2292 | + }, | |
2293 | + setDefaultValueForDigitalControl() { | |
2294 | + this.field.options.max = 999999999 | |
2295 | + this.field.options.numberMax = 999999999 | |
2296 | + this.field.options.numberMin = -999999999 | |
2297 | + this.field.options.min = 0 | |
2298 | + }, | |
2299 | + isChangeWatch() { | |
2300 | + this.isWatch = true | |
2301 | + // | |
2302 | + // | |
2303 | + // 切换时 处理合计 | |
2304 | + if (this.widgetForm.list && this.widgetForm.list.length > 0) { | |
2305 | + this.widgetForm.list.forEach((item, index) => { | |
2306 | + if (item.name === this.field.tableName) { | |
2307 | + item.CombinedColumnList && | |
2308 | + item.CombinedColumnList.forEach((ComItem, ComIndex) => { | |
2309 | + if (ComItem.columnField === this.field.name) { | |
2310 | + if ( | |
2311 | + this.field.ctrlType != 'number' || | |
2312 | + selitem.columnType != 'number' | |
2313 | + ) { | |
2314 | + item.CombinedColumnList.splice(ComIndex, 1) | |
1997 | 2315 | } |
1998 | 2316 | } |
1999 | - } | |
2000 | - }) | |
2001 | - this.tableFields = this.mainBoFields | |
2002 | - } | |
2003 | - } | |
2004 | - this.setTableFieldsChildren(this.tableFields, val && val.ctrlType) | |
2005 | - //合并数组对象 | |
2006 | - let allModelingData = [] | |
2007 | - let allBoData = [] | |
2008 | - let formVarData = [] | |
2009 | - let returnData = [] //对话框返回值选择的字段信息 主表对应主表,子表对应子表,孙表对应孙表。 | |
2010 | - let returnTypes = ['select', 'dropdown', 'dialog'] | |
2011 | - if ( | |
2012 | - (val && | |
2013 | - ['suntable', 'sunDiv'].includes(val.ctrlType) && | |
2014 | - this.currentBoSubEntity) || | |
2015 | - (val && val.parentNodeType == 'sun') | |
2016 | - ) { | |
2017 | - this.mainBoFields.forEach(mainBoField => { | |
2018 | - formVarData.push({...mainBoField}) | |
2019 | - allBoData.push({...mainBoField}) | |
2020 | - allModelingData.push({...mainBoField}) | |
2021 | - }) | |
2022 | - this.subTables.forEach(subTable => { | |
2023 | - allModelingData.push({...subTable}) | |
2024 | - let sunTabs = this.sunTablesMap[subTable.name] | |
2025 | - if (sunTabs) { | |
2026 | - sunTabs.forEach(sunTab => { | |
2027 | - allModelingData.push({...sunTab}) | |
2028 | 2317 | }) |
2029 | - } | |
2030 | - }) | |
2031 | - if (this.sunTables && this.sunTables.length > 0) { | |
2032 | - this.sunTables.forEach(sunTable => { | |
2033 | - if (val && val.parentNodeType == 'sun') { | |
2034 | - if (sunTable.name == val.boSubEntity) { | |
2035 | - allBoData.push({...sunTable}) | |
2036 | - formVarData.push({...sunTable}) | |
2037 | - returnData.push({...sunTable}) | |
2038 | - } | |
2039 | - } else { | |
2040 | - allBoData.push({...sunTable}) | |
2041 | - formVarData.push({...sunTable}) | |
2042 | - returnData.push({...sunTable}) | |
2043 | - } | |
2044 | - }) | |
2318 | + this.$set( | |
2319 | + this.widgetForm.list[index], | |
2320 | + 'CombinedColumnListJson', | |
2321 | + Base64.encode(JSON.stringify(item.CombinedColumnList), 'utf-8') | |
2322 | + ) | |
2045 | 2323 | } |
2046 | - } else { | |
2047 | - if ( | |
2048 | - val && | |
2049 | - val.parentNodeType != 'sub' && | |
2050 | - returnTypes.includes(val.ctrlType) | |
2051 | - ) { | |
2052 | - //添加主表字段 | |
2053 | - this.mainBoFields.forEach(mainBoField => { | |
2054 | - returnData.push({...mainBoField}) | |
2324 | + }) | |
2325 | + } | |
2326 | + }, | |
2327 | + //判断并清空绑定属性 | |
2328 | + checkAndClearTarget() { | |
2329 | + if (!utils.isEmpty(this.field.target) && this.tableFields.length > 0) { | |
2330 | + this.tableFields.forEach((item, i) => { | |
2331 | + var items = | |
2332 | + this.tableFields[i].children && | |
2333 | + this.tableFields[i].children.filter(obj => { | |
2334 | + return this.field.target == obj['keyName'] | |
2055 | 2335 | }) |
2056 | - } else if ( | |
2057 | - val && | |
2058 | - val.parentNodeType == 'sub' && | |
2059 | - returnTypes.includes(val.ctrlType) | |
2336 | + | |
2337 | + if (!items || items.length <= 0) { | |
2338 | + this.field.target = '' | |
2339 | + } | |
2340 | + if (!this.filterFields(items[0])) { | |
2341 | + this.field.target = '' | |
2342 | + } | |
2343 | + }) | |
2344 | + } | |
2345 | + }, | |
2346 | + editI18nMessage(after) { | |
2347 | + this.i18nMessageKey = this.field.fieldPath || this.field.path | |
2348 | + | |
2349 | + if (this.createKeyMap[this.field.ctrlType]) { | |
2350 | + this.i18nMessageKey = | |
2351 | + this.formData.formKey + | |
2352 | + '.' + | |
2353 | + this.field.ctrlType + | |
2354 | + Math.random() * 5000 | |
2355 | + } | |
2356 | + if (this.i18nMessageKey && after) { | |
2357 | + this.i18nMessageKey += after | |
2358 | + } | |
2359 | + this.$refs.i18nMessageEdit.handleOpen() | |
2360 | + }, | |
2361 | + afterSaveI18n(data) { | |
2362 | + data.key = data.key.replace('$', '#') | |
2363 | + if (data.prop.endsWith('placeholder')) { | |
2364 | + this.field.options.placeholder = data.key | |
2365 | + this.field.options.placeholder_zh = data.desc | |
2366 | + } else if (data.prop.endsWith('tip')) { | |
2367 | + this.tooltip = data.key | |
2368 | + } else { | |
2369 | + this.field.desc = data.key | |
2370 | + this.field.desc_zh = data.desc | |
2371 | + } | |
2372 | + }, | |
2373 | + isNoAttrField(field) { | |
2374 | + //无属性控件 | |
2375 | + if (!field) { | |
2376 | + field = this.field | |
2377 | + } | |
2378 | + const unboundPropertyList = [ | |
2379 | + 'text', | |
2380 | + 'immediate-single', | |
2381 | + 'immediate-textarea', | |
2382 | + 'flowChart', | |
2383 | + 'approvalHistory', | |
2384 | + 'opinion', | |
2385 | + 'big-title', | |
2386 | + 'small-title', | |
2387 | + 'simple-text', | |
2388 | + 'explain', | |
2389 | + 'dataView', | |
2390 | + 'formTable', | |
2391 | + 'QRcode', | |
2392 | + 'iframe', | |
2393 | + 'image', | |
2394 | + 'customChart', | |
2395 | + 'button', | |
2396 | + 'historicalApproval', | |
2397 | + 'processForecast' | |
2398 | + ] | |
2399 | + | |
2400 | + if ( | |
2401 | + (field && unboundPropertyList.includes(field.ctrlType)) || | |
2402 | + (field && | |
2403 | + field.ctrlType == 'button' && | |
2404 | + field.options.bindEventjson && | |
2405 | + !field.options.bindEventjson.isShowInput) | |
2406 | + ) { | |
2407 | + return true | |
2408 | + } | |
2409 | + return false | |
2410 | + }, | |
2411 | + isAllowNoAttributes(field) { | |
2412 | + //允许无属性控件 | |
2413 | + if (!field) { | |
2414 | + field = this.field | |
2415 | + } | |
2416 | + if ( | |
2417 | + field && | |
2418 | + this.allowNoAttributes.includes(field.ctrlType) && | |
2419 | + field.options.noBindModel | |
2420 | + ) { | |
2421 | + return true | |
2422 | + } | |
2423 | + return false | |
2424 | + }, | |
2425 | + noAttrFieldListChange(field, isAdd) { | |
2426 | + //无属性控件的变化实时其更新联动列表 | |
2427 | + let inList = false | |
2428 | + | |
2429 | + this.noAttrFieldList.forEach(item => { | |
2430 | + if (item.key === field.key) { | |
2431 | + if (field.ctrlType == 'button') { | |
2432 | + field.desc = field.options.bindEventjson.name | |
2433 | + } | |
2434 | + if ( | |
2435 | + ['small-title', 'big-title', 'simple-text'].includes(field.ctrlType) | |
2060 | 2436 | ) { |
2061 | - //添加子表字段 | |
2062 | - this.subTables.forEach(subTable => { | |
2063 | - returnData.push({...subTable}) | |
2064 | - }) | |
2437 | + field.desc = field.options.textValue | |
2438 | + } | |
2439 | + if (isAdd) { | |
2440 | + inList = true | |
2441 | + } else { | |
2442 | + this.noAttrFieldList.remove(item) | |
2443 | + return | |
2065 | 2444 | } |
2066 | - //添加主表字段 | |
2067 | - this.mainBoFields.forEach(mainBoField => { | |
2068 | - allBoData.push({...mainBoField}) | |
2069 | - }) | |
2070 | - this.subTables.forEach(subTable => { | |
2071 | - allBoData.push({...subTable}) | |
2072 | - let sunTabs = this.sunTablesMap[subTable.name] | |
2073 | - if (sunTabs) { | |
2074 | - sunTabs.forEach(sunTab => { | |
2075 | - allBoData.push({...sunTab}) | |
2076 | - }) | |
2077 | - } | |
2078 | - }) | |
2079 | - formVarData = allBoData | |
2080 | 2445 | } |
2081 | - //判断无属性控件 按钮 | |
2446 | + }) | |
2447 | + if (isAdd && !inList) { | |
2448 | + if (field.ctrlType == 'button') { | |
2449 | + field.desc = field.options.bindEventjson.name | |
2450 | + } | |
2082 | 2451 | if ( |
2083 | - (this.isNoAttrField(val) || this.isAllowNoAttributes(val)) && | |
2084 | - this.tableFields && | |
2085 | - this.tableFields.length > 0 | |
2086 | - ) { | |
2087 | - if (val && !val.name) { | |
2088 | - this.$set(val, 'name', 'c_' + val.key) | |
2089 | - } | |
2090 | - if (val && !val.boDefAlias) { | |
2091 | - if (val.parentNodeType == 'sub' || val.parentNodeType == 'sun') { | |
2092 | - const paths = this.tableFields[0].path.split('.') | |
2093 | - this.$set(val, 'boDefAlias', paths[0]) | |
2094 | - } else { | |
2095 | - this.$set(val, 'boDefAlias', this.tableFields[0].boDefAlias) | |
2096 | - } | |
2097 | - } | |
2098 | - if (val && !val.tableName) { | |
2099 | - this.$set(val, 'tableName', this.tableFields[0].name) | |
2100 | - this.changeNoAttrFile(this.tableFields[0].name) | |
2101 | - } | |
2102 | - this.noAttrFieldListChange(val, true) | |
2103 | - } else if ( | |
2104 | - val && | |
2105 | - val.ctrlType == 'button' && | |
2106 | - val.options.bindEventjson && | |
2107 | - val.options.bindEventjson.isShowInput | |
2452 | + ['small-title', 'big-title', 'simple-text'].includes(field.ctrlType) | |
2108 | 2453 | ) { |
2109 | - this.noAttrFieldListChange(val, false) | |
2454 | + field.desc = field.options.textValue | |
2110 | 2455 | } |
2111 | - this.allModelingData = allModelingData | |
2112 | - this.allBoData = allBoData | |
2113 | - this.formVarData = formVarData | |
2114 | - this.returnData = returnData | |
2115 | - // this.$emit('update:data', val) | |
2116 | - //通过模板生成的表单字段需更改为 建模别名.字段名 (解决2个不同的建模,但主表建模字段一样) | |
2456 | + this.$set(field, 'name', '') | |
2457 | + this.$set(field, 'target', field.name) | |
2117 | 2458 | if ( |
2118 | - val && | |
2119 | - val.target && | |
2120 | - val.parentNodeType != 'sub' && | |
2121 | - val.parentNodeType != 'sun' | |
2459 | + (field.parentNodeType == 'sub' || field.parentNodeType == 'sun') && | |
2460 | + !field.options.noBindModel | |
2122 | 2461 | ) { |
2123 | - if (!utils.isEmpty(val.boDefAlias) && !utils.isEmpty(val.name)) { | |
2124 | - val.target = val.boDefAlias + '.' + val.name | |
2125 | - } | |
2126 | - } | |
2127 | - }, | |
2128 | - deep: true | |
2129 | - }, | |
2130 | - 'field.ctrlType': { | |
2131 | - handler(newVal, oldVal) { | |
2132 | - if (oldVal == undefined || newVal == undefined || newVal == oldVal) { | |
2133 | - return | |
2462 | + this.$set(field, 'fieldPath', 'item.' + field.name) | |
2463 | + } else if ( | |
2464 | + (field.parentNodeType == 'sub' || field.parentNodeType == 'sun') && | |
2465 | + field.options.noBindModel && | |
2466 | + field.key | |
2467 | + ) { | |
2468 | + this.$set(field, 'fieldPath', 'item.' + `c_${field.key}`) | |
2469 | + } else if (field.options.noBindModel && field.boDefAlias && field.key) { | |
2470 | + this.$set(field, 'fieldPath', `${field.boDefAlias}.c_${field.key}`) | |
2471 | + } else if (field.boDefAlias) { | |
2472 | + this.$set(field, 'fieldPath', field.boDefAlias + '.' + field.name) | |
2134 | 2473 | } |
2135 | - if (!this.isWatch) { | |
2136 | - return | |
2474 | + } else if (field.boDefAlias && !field.fieldPath) { | |
2475 | + this.$set(field, 'fieldPath', field.boDefAlias + '.' + field.name) | |
2476 | + } | |
2477 | + this.noAttrFieldList.some((item, i) => { | |
2478 | + if (item.key === field.key) { | |
2479 | + this.noAttrFieldList.splice(i, 1) | |
2480 | + return true | |
2137 | 2481 | } |
2138 | - if (newVal === 'rate') { | |
2139 | - this.changeCtrlType(false,'rate') | |
2140 | - } else if (['number', 'currency'].includes(oldVal)) { | |
2141 | - if (newVal == 'date' || newVal == 'time') { | |
2142 | - this.changeCtrlType(true) | |
2143 | - } else { | |
2144 | - this.changeCtrlType(false) | |
2145 | - } | |
2146 | - } else if (oldVal == 'date' || oldVal == 'time') { | |
2147 | - if (newVal == 'number' || newVal == 'currency') { | |
2148 | - this.changeCtrlType(true) | |
2149 | - } else { | |
2150 | - this.changeCtrlType(false) | |
2151 | - } | |
2152 | - } else if (newVal == 'select') { | |
2153 | - this.changeCtrlType(false) | |
2154 | - } else { | |
2155 | - if (['number', 'currency'].includes(newVal)) { | |
2156 | - if (this.field.columnType == 'number') { | |
2157 | - this.changeCtrlType(false) | |
2158 | - } else { | |
2159 | - this.changeCtrlType(true) | |
2160 | - } | |
2161 | - } else if (newVal == 'date' || newVal == 'time') { | |
2162 | - this.changeCtrlType(false) | |
2163 | - } else if (newVal == 'switch') { | |
2164 | - this.changeCtrlType(false) | |
2165 | - } else { | |
2166 | - this.changeCtrlType(false) | |
2482 | + }) | |
2483 | + this.noAttrFieldList.push(field) | |
2484 | + }, | |
2485 | + showSelectQueryDialog() { | |
2486 | + //初始化关联查询用到的实体map | |
2487 | + this.initQueryEntMap() | |
2488 | + if (this.widgetFormData.config == undefined) { | |
2489 | + this.widgetFormData.config = {} | |
2490 | + } | |
2491 | + this.$refs.selectQueryDialog.showDialog( | |
2492 | + this.widgetFormData.config.globalQueryJson | |
2493 | + ) | |
2494 | + }, | |
2495 | + //保存关联查询数据 | |
2496 | + saveCustQueryJson(json) { | |
2497 | + this.$set(this.widgetFormData.config, 'globalQueryJson', json) | |
2498 | + this.$set(this.widgetForm.config, 'globalQueryJson', json) | |
2499 | + }, | |
2500 | + initQueryEntMap() { | |
2501 | + if (this.mainBoFields && this.mainBoFields.length > 0) { | |
2502 | + this.queryEntMap['main'] = this.mainBoFields | |
2503 | + } | |
2504 | + if (this.subTables && this.subTables.length > 0) { | |
2505 | + this.queryEntMap['sub'] = this.subTables | |
2506 | + } | |
2507 | + if (this.sunTablesMap && Object.keys(this.sunTablesMap).length !== 0) { | |
2508 | + let sunTables = [] | |
2509 | + for (var key in this.sunTablesMap) { | |
2510 | + if (this.sunTablesMap.hasOwnProperty(key)) { | |
2511 | + sunTables.push(...this.sunTablesMap[key]) | |
2167 | 2512 | } |
2168 | 2513 | } |
2169 | - this.isWatch = false | |
2170 | - const validateList = this.field.options.validateList | |
2171 | - ? [ | |
2172 | - ...this.field.options.validateList, | |
2173 | - { | |
2174 | - key: 'required', | |
2175 | - name: '*必填' | |
2176 | - } | |
2177 | - ] | |
2178 | - : [ | |
2179 | - { | |
2180 | - key: 'required', | |
2181 | - name: '*必填' | |
2182 | - } | |
2183 | - ] | |
2184 | - const hasValidateRules = | |
2185 | - this.field.options.validateType && | |
2186 | - this.field.options.validateType.includes('required') | |
2187 | - this.tableFields.forEach(boData => { | |
2188 | - boData.children.forEach((v, i) => { | |
2189 | - if ( | |
2190 | - hasValidateRules && | |
2191 | - this.field.fieldPath === v.keyName && | |
2192 | - v.isRequired | |
2193 | - ) { | |
2194 | - this.$set( | |
2195 | - this.field.options, | |
2196 | - 'validateList', | |
2197 | - uniqueArrayObject(validateList, 'key') | |
2198 | - ) | |
2199 | - if (this.field.options && !this.field.options.validate) { | |
2200 | - this.$set(this.field.options, 'validate', "'required'") | |
2201 | - } | |
2202 | - } | |
2203 | - }) | |
2204 | - }) | |
2514 | + this.queryEntMap['sun'] = sunTables | |
2205 | 2515 | } |
2206 | 2516 | }, |
2207 | - widgetForm(val) { | |
2208 | - this.widgetFormData = val | |
2209 | - if (val.submitVerification && val.submitVerification.length > 0) { | |
2210 | - this.submitVerification = JSON.parse( | |
2211 | - Base64.decode(val.submitVerification) | |
2212 | - ) | |
2517 | + selectTypeChange(type) { | |
2518 | + if (type) { | |
2519 | + this.formData.typeId = type.id | |
2520 | + this.formData.typeName = type.name | |
2213 | 2521 | } else { |
2214 | - this.submitVerification = [] | |
2522 | + this.formData.typeId = '' | |
2523 | + this.formData.typeName = '' | |
2215 | 2524 | } |
2525 | + this.$forceUpdate() | |
2216 | 2526 | }, |
2217 | - submitVerification: { | |
2218 | - handler(val) { | |
2219 | - this.$set( | |
2220 | - this.widgetFormData, | |
2221 | - 'submitVerification', | |
2222 | - Base64.encode(JSON.stringify(this.submitVerification), 'utf-8') | |
2223 | - ) | |
2224 | - }, | |
2225 | - deep: true | |
2226 | - }, | |
2227 | - // 根据绑定属性过滤空间类型 | |
2228 | - 'field.target': { | |
2229 | - handler(val) { | |
2230 | - this.filterBasicComponents = basicComponents.filter(obj => { | |
2231 | - return this.filterFieldsByCurrentField(obj, val) | |
2232 | - }) | |
2233 | - }, | |
2234 | - deep: true | |
2527 | + // 隐藏标题时 标题宽度赋值为0 | |
2528 | + hideTitleChange(flag) { | |
2529 | + this.field.options.labelstyleWidth = flag ? '0' : '' | |
2235 | 2530 | } |
2236 | - }, | |
2237 | - mounted() { | |
2238 | - // 声明 | |
2239 | - this.$validator = this.$root.$validator | |
2240 | - // 复制高级字段列表 | |
2241 | - this.copyAdvanceComponents = this.advanceComponents.slice() | |
2242 | - }, | |
2243 | - destroyed() {} | |
2244 | -} | |
2531 | + } | |
2532 | +}; | |
2245 | 2533 | </script> |
2534 | + | |
2246 | 2535 | <style lang="scss" scoped> |
2247 | 2536 | @import '@/assets/css/element-variables.scss'; |
2248 | 2537 | @import '@/assets/css/form-editor.scss'; | ... | ... |