@bytenew/bn-bus-ui 1.1.462 → 1.1.463
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/install.js +134 -0
- package/package.json +20 -4
- package/packages/BnAddress/index.vue +141 -0
- package/packages/BnAddressParse/index.vue +75 -0
- package/packages/BnAdvancedFilter/BnFilterView.vue +145 -0
- package/packages/BnAdvancedFilter/index.vue +345 -0
- package/packages/BnAdvancedFilter/util.js +171 -0
- package/packages/BnCascader/BnCascader.vue +543 -0
- package/packages/BnCascader/BnCascaderPanel.vue +1331 -0
- package/packages/BnCascader/cascaderDisplay.js +102 -0
- package/packages/BnCheck/BnCheck.vue +253 -0
- package/packages/BnColumnConfig/columnConfigDialog.vue +134 -0
- package/packages/BnColumnConfig/component/childrenFormSetting/assocTable.vue +143 -0
- package/packages/BnColumnConfig/component/childrenFormSetting/assocTableSearch.vue +314 -0
- package/packages/BnColumnConfig/component/childrenFormSetting/index.vue +243 -0
- package/packages/BnColumnConfig/component/defaultSet/defaultSet.vue +114 -0
- package/packages/BnColumnConfig/component/defaultSet/stringDefault.vue +210 -0
- package/packages/BnColumnConfig/component/funcExprDialog/funcExprDialog.vue +126 -0
- package/packages/BnColumnConfig/component/packageFilter/index.vue +141 -0
- package/packages/BnColumnConfig/component/paraExplainSet/index.vue +156 -0
- package/packages/BnColumnConfig/component/setOption/setOption.vue +321 -0
- package/packages/BnColumnConfig/component/setRelationOption/ConditionList.vue +277 -0
- package/packages/BnColumnConfig/component/setRelationOption/LevelHeader.vue +144 -0
- package/packages/BnColumnConfig/component/setRelationOption/setRelationOption.vue +642 -0
- package/packages/BnColumnConfig/data.js +129 -0
- package/packages/BnColumnConfig/index.scss +23 -0
- package/packages/BnColumnConfig/index.vue +309 -0
- package/packages/BnCondVal/BnCondVal.vue +112 -0
- package/packages/BnCondVal/itemVal/dateRegVal.vue +39 -0
- package/packages/BnCondVal/itemVal/dateVal.vue +39 -0
- package/packages/BnCondVal/itemVal/numRegVal.vue +67 -0
- package/packages/BnCondVal/itemVal/numVal.vue +44 -0
- package/packages/BnCondVal/itemVal/relationVal.vue +73 -0
- package/packages/BnCondVal/itemVal/selectColumnVal.vue +58 -0
- package/packages/BnCondVal/itemVal/selectVal.vue +59 -0
- package/packages/BnCondVal/itemVal/stringVal.vue +156 -0
- package/packages/BnCondition/index.vue +551 -0
- package/packages/BnCondition/util.js +232 -0
- package/packages/BnDatePicker/BnDatePicker.vue +194 -0
- package/packages/BnDrop/BnDrop.vue +917 -0
- package/packages/BnEmptyTip/BnEmptyTip.vue +107 -0
- package/packages/BnExportOrder/BnExportOrder.vue +241 -0
- package/packages/BnExportOrder/validatorCode.vue +94 -0
- package/packages/BnFileView/BnFileView.vue +271 -0
- package/packages/BnFileView/FileDetail.vue +125 -0
- package/packages/BnFileView/videoPreview.vue +70 -0
- package/packages/BnFilterOption/BnFilterOption.vue +160 -0
- package/packages/BnFunExpr/BnFunExpr.vue +608 -0
- package/packages/BnImportOrder/BnImportOrder.vue +323 -0
- package/packages/BnImportTemplate/BnImportTemplate.vue +866 -0
- package/packages/BnImportTemplate/assets/merge_tip_img.png +0 -0
- package/packages/BnImportTemplate/assets/sheet_tip.png +0 -0
- package/packages/BnImportTemplate/assets/xls.png +0 -0
- package/packages/BnImportTemplate/components/ImportTemplateTrigger.vue +198 -0
- package/packages/BnImportTemplate/components/TemplateEditDialog.vue +340 -0
- package/packages/BnImportTemplate/components/TemplateFieldsConfig.vue +401 -0
- package/packages/BnImportTemplate/components/TemplateListDialog.vue +297 -0
- package/packages/BnInpNum/BnInpNum.vue +165 -0
- package/packages/BnMenus/BnMenus.vue +502 -0
- package/packages/BnMenus/MenuItem.vue +321 -0
- package/packages/BnOrderCard/BnOrderCard.vue +389 -0
- package/packages/BnOrderCard/orderRemark.vue +178 -0
- package/packages/BnOrderCard/util.js +94 -0
- package/packages/BnOrderDetail/BnOrderDetail.vue +338 -0
- package/packages/BnOrderDetail/filterLogByUser.vue +108 -0
- package/packages/BnOrderDetail/orderLogs.vue +53 -0
- package/packages/BnOrderDetail/showSubForm/index.vue +41 -0
- package/packages/BnOrderDetail/showSubForm/showChildTable.vue +61 -0
- package/packages/BnOrderDetail/showSubForm/showTimeLine.vue +131 -0
- package/packages/BnOrderDetail/showSubForm/tableCellCopy.vue +84 -0
- package/packages/BnOrderShare/index.vue +378 -0
- package/packages/BnOrderShare/shareUrlInp.vue +54 -0
- package/packages/BnRadio/BnRadio.vue +181 -0
- package/packages/BnRelation/BnRelation.vue +120 -0
- package/packages/BnSelect/BnSelect.vue +485 -0
- package/packages/BnSmartForm/BnBatchForm.vue +334 -0
- package/packages/BnSmartForm/BnBatchFormDialog.vue +423 -0
- package/packages/BnSmartForm/BnSmartElf/elfLog/index.vue +57 -0
- package/packages/BnSmartForm/BnSmartElf/index.vue +95 -0
- package/packages/BnSmartForm/BnSmartFormPsychic.js +629 -0
- package/packages/BnSmartForm/BnSmartFormUtil.js +524 -0
- package/packages/BnSmartForm/addressForm/index.vue +73 -0
- package/packages/BnSmartForm/checkboxForm/index.vue +99 -0
- package/packages/BnSmartForm/childrenForm/childFormFile.vue +237 -0
- package/packages/BnSmartForm/childrenForm/childrenFormBody.vue +260 -0
- package/packages/BnSmartForm/childrenForm/index.vue +110 -0
- package/packages/BnSmartForm/childrenForm/searchInventory.vue +115 -0
- package/packages/BnSmartForm/chooseAssocTable/chooseAssocTable.vue +451 -0
- package/packages/BnSmartForm/chooseAssocTable/chooseChildGood.vue +229 -0
- package/packages/BnSmartForm/chooseAssocTable/tableCellCopy.vue +84 -0
- package/packages/BnSmartForm/chooseChildOrder/chooseChildOrder.vue +158 -0
- package/packages/BnSmartForm/chooseIPaasData/chooseIPaasData.vue +307 -0
- package/packages/BnSmartForm/chooseIPaasData/tableCellCopy.vue +84 -0
- package/packages/BnSmartForm/choosePackage/choosePackage.vue +361 -0
- package/packages/BnSmartForm/dateDualForm/index.vue +37 -0
- package/packages/BnSmartForm/dateForm/index.vue +38 -0
- package/packages/BnSmartForm/fileForm/fileFormData.js +50 -0
- package/packages/BnSmartForm/fileForm/index.vue +240 -0
- package/packages/BnSmartForm/formItemFooter/formItemFooter.vue +38 -0
- package/packages/BnSmartForm/formItemTop/formItemTop.vue +42 -0
- package/packages/BnSmartForm/index.vue +1201 -0
- package/packages/BnSmartForm/numberForm/index.vue +63 -0
- package/packages/BnSmartForm/radioForm/index.vue +72 -0
- package/packages/BnSmartForm/receiveForm/index.vue +112 -0
- package/packages/BnSmartForm/relationForm/index.vue +82 -0
- package/packages/BnSmartForm/scoreForm/index.vue +39 -0
- package/packages/BnSmartForm/selectForm/index.vue +55 -0
- package/packages/BnSmartForm/showValForm/index.vue +42 -0
- package/packages/BnSmartForm/showValForm/showValFormTable.vue +104 -0
- package/packages/BnSmartForm/smartFormsCommon.scss +43 -0
- package/packages/BnSmartForm/stringForm/index.vue +170 -0
- package/packages/BnVirtPopover/index.vue +319 -0
- package/packages/BnWebLog/BnWebLog.vue +140 -0
- package/packages/BnWorkSettingDrop/advancedOptions.js +112 -0
- package/packages/BnWorkSettingDrop/benBenAIUtil.js +89 -0
- package/packages/BnWorkSettingDrop/index.vue +292 -0
- package/packages/font/iconfont.css +243 -0
- package/packages/font/iconfont.ttf +0 -0
- package/packages/font/iconfont.woff +0 -0
- package/packages/font/iconfont.woff2 +0 -0
- package/utils/addressParse-old.js +645 -0
- package/utils/addressParse.js +735 -0
- package/utils/config.js +68 -0
- package/utils/index.js +1171 -0
- package/dist/assocTableSearch-CmzOXI5w.js +0 -349
- package/dist/assocTableSearch.css +0 -1
- package/dist/bn-bus-ui.es.js +0 -65
- package/dist/bn-bus-ui.umd.js +0 -49
- package/dist/chooseIPaasData-jkTJEMKT.js +0 -391
- package/dist/chooseIPaasData.css +0 -1
- package/dist/defaultSet-CiYuSOzT.js +0 -297
- package/dist/defaultSet.css +0 -1
- package/dist/fileFormData-D_Q1vylE.js +0 -53
- package/dist/formItemFooter-BpnVUUgV.js +0 -108
- package/dist/formItemFooter.css +0 -1
- package/dist/funcExprDialog-BMc-n5FL.js +0 -139
- package/dist/funcExprDialog.css +0 -1
- package/dist/index-8GQJARcF.js +0 -44
- package/dist/index-8apT0r8m.js +0 -66
- package/dist/index-BOFu3qAH.js +0 -183
- package/dist/index-BSKXuSid.js +0 -89
- package/dist/index-BhYvDd_Q.js +0 -45
- package/dist/index-BhqkeVFc.js +0 -45
- package/dist/index-CK7_Ou7F.js +0 -89
- package/dist/index-Cfb8D3Fg.js +0 -58
- package/dist/index-D1fGD0mX.js +0 -51
- package/dist/index-DE_eQGbT.js +0 -746
- package/dist/index-DfgiBqzS.js +0 -221
- package/dist/index-Dobi0ms9.js +0 -66
- package/dist/index-DuyQNxe0.js +0 -118
- package/dist/index-DxpJkrN7.js +0 -64
- package/dist/index-FGHeG46m.js +0 -109
- package/dist/index-P2M7CUTe.js +0 -178
- package/dist/index-xCz2zysE.js +0 -135
- package/dist/index.css +0 -1
- package/dist/index2.css +0 -1
- package/dist/index3.css +0 -1
- package/dist/index4.css +0 -1
- package/dist/index5.css +0 -1
- package/dist/index6.css +0 -1
- package/dist/index7.css +0 -1
- package/dist/install--7IU60oV.js +0 -23103
- package/dist/install.css +0 -1
- package/dist/setOption-DehYZpZr.js +0 -329
- package/dist/setOption.css +0 -1
- package/dist/setRelationOption-BL-AFUoF.js +0 -5217
- package/dist/setRelationOption.css +0 -1
|
@@ -0,0 +1,1201 @@
|
|
|
1
|
+
<!--Created by xinba on 2024/10/30.-->
|
|
2
|
+
<!--
|
|
3
|
+
BnSmartForm组件
|
|
4
|
+
-->
|
|
5
|
+
<template>
|
|
6
|
+
<div class="BnSmartForm">
|
|
7
|
+
<chooseAssocTable ref="chooseAssocTable" :componentList="componentList" :postFunc="postFunc"
|
|
8
|
+
:extendPost="extendPost" @setChildrenForm="setChildrenForm"></chooseAssocTable>
|
|
9
|
+
<chooseIPaasData ref="chooseIPaasData" :componentList="componentList" :postFunc="postFunc"
|
|
10
|
+
:extendPost="extendPost" @setChildrenForm="setChildrenForm"></chooseIPaasData>
|
|
11
|
+
<choosePackage v-if="dataBack && dataBack.order" ref="choosePackage" :orderList="orderList"
|
|
12
|
+
@checkedPackage="checkedPackage" :componentList="componentList" :dataBack="dataBack"></choosePackage>
|
|
13
|
+
<chooseChildOrder v-if="dataBack" ref="chooseChildOrder" :childOrders="childOrders"
|
|
14
|
+
@setChildrenForm="setChildrenForm" :componentList="componentList"
|
|
15
|
+
:dataBack="dataBack"></chooseChildOrder>
|
|
16
|
+
<div class="BnSmartForm-head" v-if="loading">
|
|
17
|
+
<el-progress :percentage="70" :indeterminate="true" :show-text="false" striped/>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="BnSmartForm-body">
|
|
20
|
+
<!-- <div class="BnSmartForm-elf-tip" @click="showElf=true"-->
|
|
21
|
+
<!-- :class="{'BnSmartForm-elf-tip-show':!showElf&&formLogs.length>0}">-->
|
|
22
|
+
<!-- <img src="https://banniu-work.oss-cn-zhangjiakou.aliyuncs.com/125_10030158_a3e8db53df86fa2143e8d5238fc5dac0.png" alt="" title="hi~~,点击唤起建单助手">-->
|
|
23
|
+
<!-- </div>-->
|
|
24
|
+
<el-scrollbar ref="formScroll" height="100%" style="background: #fff">
|
|
25
|
+
<template v-for="(column, j) in componentList">
|
|
26
|
+
<div class="BnSmartForm-body-item" :class="column.className||''" v-if="isShow(column)" :key="j"
|
|
27
|
+
:id="'col_'+column.columnCode">
|
|
28
|
+
<component :is="componentView(column)" :column="column" :postFunc="postFunc" :taskId="id"
|
|
29
|
+
:extraInfo="initExtraInfo" :defaultLink="defaultLink" :componentList="componentList"
|
|
30
|
+
:dataBack="dataBack" :disabled="isDisabled(column)" @operate="operate" @onChange="comChange"
|
|
31
|
+
@onInput="comInput" @blur="comBlur"/>
|
|
32
|
+
</div>
|
|
33
|
+
</template>
|
|
34
|
+
</el-scrollbar>
|
|
35
|
+
</div>
|
|
36
|
+
<!--班牛智能工单助手,精灵-->
|
|
37
|
+
<div class="BnSmartForm-elf" v-if="showElf">
|
|
38
|
+
<BnSmartElf :logs="formLogs" @close="showElf = false"></BnSmartElf>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
</template>
|
|
42
|
+
<script>
|
|
43
|
+
import {
|
|
44
|
+
checkChildrenFormValue,
|
|
45
|
+
FORM_TYPES,
|
|
46
|
+
isValueEqual,
|
|
47
|
+
FORM_EVENT,
|
|
48
|
+
initFormData,
|
|
49
|
+
initDefaultLinkVal, initAccTableSearchVal,
|
|
50
|
+
toMappingValue, getTriggerCode, getEmptyVal
|
|
51
|
+
} from "./BnSmartFormUtil";
|
|
52
|
+
import {defineAsyncComponent} from "vue";
|
|
53
|
+
import {cloneDeep, isEmpty, debounce} from "lodash";
|
|
54
|
+
import BnSmartElf from "./BnSmartElf/index.vue";
|
|
55
|
+
import choosePackage from "./choosePackage/choosePackage.vue";
|
|
56
|
+
import chooseChildOrder from "./chooseChildOrder/chooseChildOrder.vue";
|
|
57
|
+
import chooseAssocTable from "./chooseAssocTable/chooseAssocTable.vue";
|
|
58
|
+
import {psychicComponentGetIds} from "./BnSmartFormPsychic.js";
|
|
59
|
+
|
|
60
|
+
const componentMap = {
|
|
61
|
+
stringForm: defineAsyncComponent(() => import('./stringForm/index.vue')),
|
|
62
|
+
numberForm: defineAsyncComponent(() => import('./numberForm/index.vue')),
|
|
63
|
+
selectForm: defineAsyncComponent(() => import('./selectForm/index.vue')),
|
|
64
|
+
radioForm: defineAsyncComponent(() => import('./radioForm/index.vue')),
|
|
65
|
+
checkboxForm: defineAsyncComponent(() => import('./checkboxForm/index.vue')),
|
|
66
|
+
dateForm: defineAsyncComponent(() => import('./dateForm/index.vue')),
|
|
67
|
+
dateDualForm: defineAsyncComponent(() => import('./dateDualForm/index.vue')),
|
|
68
|
+
fileForm: defineAsyncComponent(() => import('./fileForm/index.vue')),
|
|
69
|
+
childrenForm: defineAsyncComponent(() => import('./childrenForm/index.vue')),
|
|
70
|
+
addressForm: defineAsyncComponent(() => import('./addressForm/index.vue')),
|
|
71
|
+
receiveForm: defineAsyncComponent(() => import('./receiveForm/index.vue')),
|
|
72
|
+
relationForm: defineAsyncComponent(() => import('./relationForm/index.vue')),
|
|
73
|
+
scoreForm: defineAsyncComponent(() => import('./scoreForm/index.vue')),
|
|
74
|
+
};
|
|
75
|
+
export default {
|
|
76
|
+
name: "BnSmartForm",
|
|
77
|
+
components: {
|
|
78
|
+
BnSmartElf, choosePackage, chooseChildOrder, chooseAssocTable,
|
|
79
|
+
chooseIPaasData: defineAsyncComponent(() => import('./chooseIPaasData/chooseIPaasData.vue'))
|
|
80
|
+
},
|
|
81
|
+
props: {
|
|
82
|
+
// 表单id 涉及编辑表单
|
|
83
|
+
id: [String, Number],
|
|
84
|
+
// 扩展参数
|
|
85
|
+
extendPost: Object,
|
|
86
|
+
// 扩展信息 isAutoAssign:自动分配, isCheckRepeat:重复工单是否查看详情
|
|
87
|
+
extraInfo: Object,
|
|
88
|
+
// 组件列表
|
|
89
|
+
components: Array,
|
|
90
|
+
//编辑类型 新建/编辑/复制copy
|
|
91
|
+
editType: String,
|
|
92
|
+
// 接口请求外部转发
|
|
93
|
+
postFunc: Function,
|
|
94
|
+
// 数据回填规则:{key:主键组件code,order:子表单组件code,orderKey:子表单主键code}
|
|
95
|
+
dataBack: Object
|
|
96
|
+
},
|
|
97
|
+
data() {
|
|
98
|
+
return {
|
|
99
|
+
// 是否展示精灵助手
|
|
100
|
+
showElf: false,
|
|
101
|
+
// 触发事件查询时显示进度条
|
|
102
|
+
loading: false,
|
|
103
|
+
// 日志:记录用户操作过程中表单发生的变化
|
|
104
|
+
formLogs: [],
|
|
105
|
+
// 订单列表、包裹列表
|
|
106
|
+
orderList: [],
|
|
107
|
+
// 子订单列表
|
|
108
|
+
childOrders: [],
|
|
109
|
+
// 组件显隐规则列表
|
|
110
|
+
psychicRules: [],
|
|
111
|
+
// 被组件显隐隐藏的组件
|
|
112
|
+
hiddenCodes: [],
|
|
113
|
+
// 会触发组件显隐的组件
|
|
114
|
+
psychicConditionCodes: [],
|
|
115
|
+
// 会触发提交校验的组件id
|
|
116
|
+
checkedConditionId: [],
|
|
117
|
+
// 会触发关联子表单,关联筛选的组件Code
|
|
118
|
+
assocTableSearchCodes: [],
|
|
119
|
+
// 触发关联子表单筛选后,需要填充的子表单的组件id
|
|
120
|
+
assocTableSearchColumnId: [],
|
|
121
|
+
// 默认值关联规则
|
|
122
|
+
defaultLink: cloneDeep(FORM_EVENT.defaultLink),
|
|
123
|
+
// 组件映射规则
|
|
124
|
+
columnMapping: cloneDeep(FORM_EVENT.columnMapping),
|
|
125
|
+
// 级联组件关联组件查询选项
|
|
126
|
+
relationColumns: cloneDeep(FORM_EVENT.relationColumns),
|
|
127
|
+
// 是否有组件开启函数表达式
|
|
128
|
+
hasExprExec: false,
|
|
129
|
+
// 后置事件触发每触发一次记录一次组件code,当后续触发时校验code是否在记录中,如果在就是有死循环,当立即跳出
|
|
130
|
+
afterEventCodes: []
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
created() {
|
|
134
|
+
this.init();
|
|
135
|
+
this._elfKeyHandler = (e) => {
|
|
136
|
+
if (e.ctrlKey && e.shiftKey && e.code === 'KeyB') {
|
|
137
|
+
e.preventDefault();
|
|
138
|
+
this.showElf = true;
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
document.addEventListener('keydown', this._elfKeyHandler);
|
|
142
|
+
},
|
|
143
|
+
beforeUnmount() {
|
|
144
|
+
document.removeEventListener('keydown', this._elfKeyHandler);
|
|
145
|
+
},
|
|
146
|
+
methods: {
|
|
147
|
+
/**
|
|
148
|
+
* 初始化表单数据、初始话表单规则
|
|
149
|
+
* */
|
|
150
|
+
init() {
|
|
151
|
+
// 初始化表单数据,以及梳理部分高级功能的规则
|
|
152
|
+
let {defaultLink, columnMapping, hasExprExec, relationColumns} = initFormData(this.componentList);
|
|
153
|
+
// 默认值关联能力
|
|
154
|
+
this.defaultLink = cloneDeep(defaultLink)
|
|
155
|
+
// 组件映射
|
|
156
|
+
this.columnMapping = cloneDeep(columnMapping)
|
|
157
|
+
// 级联组件关联组件查询选项
|
|
158
|
+
this.relationColumns = cloneDeep(relationColumns)
|
|
159
|
+
// 是否有组件配置了函数表达式
|
|
160
|
+
this.hasExprExec = hasExprExec
|
|
161
|
+
if (this.hasExprExec && !this.id) {
|
|
162
|
+
this.exprExecCalc(null, '新建初始化')
|
|
163
|
+
}
|
|
164
|
+
// 获取组件显隐规则
|
|
165
|
+
this.getPsychicRules();
|
|
166
|
+
// 获取关联子表单,筛选条件规则
|
|
167
|
+
this.getAssocTableRules();
|
|
168
|
+
// 获取提交校验规则
|
|
169
|
+
this.getCheckedRules();
|
|
170
|
+
},
|
|
171
|
+
/**
|
|
172
|
+
* 获取组件显隐规则
|
|
173
|
+
* */
|
|
174
|
+
getPsychicRules() {
|
|
175
|
+
this.psychicRules = [];
|
|
176
|
+
this.hiddenCodes = [];
|
|
177
|
+
this.psychicConditionCodes = [];
|
|
178
|
+
this.postFunc('/v2/columnRule/getColumnRule', {...this.extendPost, type: 2, dataFormatFlag: true}).then(res => {
|
|
179
|
+
if (!res.code && res.data.columnRuleList) {
|
|
180
|
+
this.psychicRules = res.data.columnRuleList;
|
|
181
|
+
let {conditionIds, hiddenIds} = psychicComponentGetIds(this.componentList, this.psychicRules, this.id);
|
|
182
|
+
this.hiddenCodes = hiddenIds;
|
|
183
|
+
this.psychicConditionCodes = conditionIds;
|
|
184
|
+
}
|
|
185
|
+
})
|
|
186
|
+
},
|
|
187
|
+
/**
|
|
188
|
+
* 获取组件显隐规则
|
|
189
|
+
* */
|
|
190
|
+
getAssocTableRules() {
|
|
191
|
+
this.assocTableSearchCodes = []
|
|
192
|
+
this.assocTableSearchColumnId = []
|
|
193
|
+
this.postFunc('/v2/columnRule/getColumnRule', {...this.extendPost, type: 13, dataFormatFlag: true}).then(res => {
|
|
194
|
+
if (!res.code && res.data.columnRuleList) {
|
|
195
|
+
res.data.columnRuleList.forEach(i => {
|
|
196
|
+
if (i.columnRules) {
|
|
197
|
+
this.assocTableSearchColumnId.push(i.ruleSense)
|
|
198
|
+
i.columnRules.forEach(c => {
|
|
199
|
+
if (c.toColumnType == 1) {
|
|
200
|
+
this.assocTableSearchCodes.push(c.value.columnCode)
|
|
201
|
+
if (c.value.parentCode) {
|
|
202
|
+
this.assocTableSearchCodes.push(c.value.parentCode)
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
})
|
|
206
|
+
}
|
|
207
|
+
})
|
|
208
|
+
}
|
|
209
|
+
})
|
|
210
|
+
},
|
|
211
|
+
/**
|
|
212
|
+
* 获取提交校验规则
|
|
213
|
+
* */
|
|
214
|
+
getCheckedRules() {
|
|
215
|
+
this.checkedConditionId = [];
|
|
216
|
+
this.postFunc(`/v2/columnRule/getSubmitCheckRule/${this.extendPost.appId}/${this.extendPost.projectId}`, null, 'get').then(res => {
|
|
217
|
+
if (!res.code && res.data && res.data.status == 1) {
|
|
218
|
+
let codeList = res.data.rules.reduce((codes, item) => {
|
|
219
|
+
if (item.type == 19 && (
|
|
220
|
+
// 新建时校验
|
|
221
|
+
(item.columnRules.senses.includes(0) && !this.id) ||
|
|
222
|
+
// 编辑时校验
|
|
223
|
+
(item.columnRules.senses.includes(1) && this.id)
|
|
224
|
+
)) {
|
|
225
|
+
let rules = item.columnRules?.columnRules || []
|
|
226
|
+
codes = [...codes, ...rules.map(i => i.parentId ? i.parentId : i.id)]
|
|
227
|
+
}
|
|
228
|
+
return codes
|
|
229
|
+
}, [])
|
|
230
|
+
this.checkedConditionId = codeList
|
|
231
|
+
}
|
|
232
|
+
})
|
|
233
|
+
},
|
|
234
|
+
/**
|
|
235
|
+
* 生成整张表单的valueData,供保存使用
|
|
236
|
+
* @param {Object} components: 组件data
|
|
237
|
+
*
|
|
238
|
+
* */
|
|
239
|
+
getFormContent() {
|
|
240
|
+
let response = {
|
|
241
|
+
contents: [],
|
|
242
|
+
};
|
|
243
|
+
try {
|
|
244
|
+
for (let i in this.componentList) {
|
|
245
|
+
let component = cloneDeep(this.componentList[i]);
|
|
246
|
+
let content = {
|
|
247
|
+
columnCode: component.columnCode,
|
|
248
|
+
};
|
|
249
|
+
switch (component.behaviorType) {
|
|
250
|
+
case 1://文本
|
|
251
|
+
case 2://数值
|
|
252
|
+
case 9://评分
|
|
253
|
+
case 7://日期
|
|
254
|
+
case 11://富文本
|
|
255
|
+
{
|
|
256
|
+
content.value = component.value;
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
case 3://单选
|
|
260
|
+
case 4://下拉
|
|
261
|
+
case 5://多选
|
|
262
|
+
case 6://单选联动
|
|
263
|
+
case 20://多选联动
|
|
264
|
+
case 8://区间
|
|
265
|
+
case 10://附件
|
|
266
|
+
case 12://标签
|
|
267
|
+
case 13://子表单
|
|
268
|
+
case 14://地址
|
|
269
|
+
case 15://收寄信息
|
|
270
|
+
{
|
|
271
|
+
content.value = component.value ? JSON.stringify(component.value) : '';
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// 没有权限的组件,不进行处理
|
|
276
|
+
if (!this.isShow(this.componentList[i])) {
|
|
277
|
+
// 组件显隐隐藏的也要打上标记,传进去
|
|
278
|
+
if (this.hiddenCodes.includes(component.columnCode)) {
|
|
279
|
+
content.hide = true;
|
|
280
|
+
} else {
|
|
281
|
+
continue;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
response.contents.push(content)
|
|
285
|
+
}
|
|
286
|
+
} catch (e) {
|
|
287
|
+
console.log("getFormContentErr:" + e)
|
|
288
|
+
}
|
|
289
|
+
return response;
|
|
290
|
+
},
|
|
291
|
+
/**
|
|
292
|
+
* 表单校验,根据组件规则校验表单填写的正确性
|
|
293
|
+
* */
|
|
294
|
+
checkFormContent() {
|
|
295
|
+
if (this.loading) {
|
|
296
|
+
this.$message.warning('还有数据没有加载完毕,请稍后再保存');
|
|
297
|
+
return {checked: false}
|
|
298
|
+
}
|
|
299
|
+
let check = {
|
|
300
|
+
column: null,
|
|
301
|
+
checked: true
|
|
302
|
+
};
|
|
303
|
+
for (let i in this.componentList) {
|
|
304
|
+
if (!this.isShow(this.componentList[i])) {
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
let component = {...this.componentList[i]};
|
|
308
|
+
let content = {
|
|
309
|
+
columnCode: component.columnCode,
|
|
310
|
+
};
|
|
311
|
+
switch (component.behaviorType) {
|
|
312
|
+
case 1://文本
|
|
313
|
+
case 2://数值
|
|
314
|
+
{
|
|
315
|
+
// 文本校验是否必填
|
|
316
|
+
if (component.extraInfo.valueEmptyCheck == 1 && component.behaviorType == 1 && isEmpty(component.value)) {
|
|
317
|
+
this.componentList[i].error = component.name + "的值不能为空";
|
|
318
|
+
}
|
|
319
|
+
// 数值校验是否必填
|
|
320
|
+
if (component.extraInfo.valueEmptyCheck == 1 && component.behaviorType == 2 && (component.value === undefined || component.value === null || component.value === '')) {
|
|
321
|
+
this.componentList[i].error = component.name + "的值不能为空";
|
|
322
|
+
}
|
|
323
|
+
// 正则校验
|
|
324
|
+
if (component.extraInfo.regular) {
|
|
325
|
+
//获取校验规则,转化为正则表达式
|
|
326
|
+
let rule = new RegExp(component.extraInfo.regular);
|
|
327
|
+
if (!rule.test(component.value)) {
|
|
328
|
+
this.componentList[i].error = component.extraInfo.paraExplain || '请输入符合要求的' + component.name;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
case 3://单选
|
|
334
|
+
case 4://下拉
|
|
335
|
+
case 5://多选
|
|
336
|
+
case 6://联动
|
|
337
|
+
case 20://多选联动
|
|
338
|
+
case 8://区间
|
|
339
|
+
case 10://附件
|
|
340
|
+
case 12://标签
|
|
341
|
+
case 9://评分
|
|
342
|
+
case 7://日期
|
|
343
|
+
case 11://富文本
|
|
344
|
+
{
|
|
345
|
+
// 校验是否必填
|
|
346
|
+
if (component.extraInfo.valueEmptyCheck == 1 && isEmpty(component.value)) {
|
|
347
|
+
this.componentList[i].error = component.name + "的值不能为空";
|
|
348
|
+
}
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
case 13://子表单
|
|
352
|
+
{
|
|
353
|
+
if (component.extraInfo.valueEmptyCheck == 1) {
|
|
354
|
+
if (isEmpty(component.value)) {
|
|
355
|
+
this.componentList[i].error = component.name + '至少要有一条内容';
|
|
356
|
+
} else {
|
|
357
|
+
let msg = checkChildrenFormValue(component, this.id)
|
|
358
|
+
if (msg) {
|
|
359
|
+
this.componentList[i].error = msg;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
break;
|
|
364
|
+
}
|
|
365
|
+
case 14://地址
|
|
366
|
+
case 15://收寄信息
|
|
367
|
+
{
|
|
368
|
+
if (component.extraInfo.valueEmptyCheck == 1) {
|
|
369
|
+
for (let key in component.value) {
|
|
370
|
+
if (isEmpty(component.value[key])) {
|
|
371
|
+
this.componentList[i].error = `请输入完整的${component.name}`;
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
break;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
if (this.componentList[i].error) {
|
|
380
|
+
check.column = this.componentList[i];
|
|
381
|
+
check.checked = false;
|
|
382
|
+
this.getHere(content, true);
|
|
383
|
+
break;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
return check;
|
|
387
|
+
},
|
|
388
|
+
/**
|
|
389
|
+
* 锚点滚动条滚动后,组件列表跟随滚动到指定位置
|
|
390
|
+
* */
|
|
391
|
+
getHere(item) {
|
|
392
|
+
const targetElement = document.getElementById("col_" + item.columnCode);
|
|
393
|
+
if (targetElement && this.$refs.formScroll) {
|
|
394
|
+
// 使用 el-scrollbar 的 scrollTo 方法
|
|
395
|
+
this.$refs.formScroll.scrollTo({top: targetElement.offsetTop, behavior: 'smooth'});
|
|
396
|
+
}
|
|
397
|
+
},
|
|
398
|
+
/**
|
|
399
|
+
* 根据权限、组件显隐判断是否限制组件
|
|
400
|
+
* */
|
|
401
|
+
isShow(column) {
|
|
402
|
+
let flag = true && !this.hiddenCodes.includes(column.columnCode);
|
|
403
|
+
// 处理新建时可见、编辑时可见
|
|
404
|
+
if (!this.id && column.extraInfo.isAddable != 1) {
|
|
405
|
+
flag = false;
|
|
406
|
+
} else if (this.id && column.extraInfo.isEditable != 1) {
|
|
407
|
+
flag = false;
|
|
408
|
+
}
|
|
409
|
+
return flag;
|
|
410
|
+
},
|
|
411
|
+
/**
|
|
412
|
+
* 根据权限判断是否禁用组件
|
|
413
|
+
* */
|
|
414
|
+
isDisabled(column) {
|
|
415
|
+
let flag = false;
|
|
416
|
+
// 处理新建时禁用、编辑时禁用
|
|
417
|
+
if (!this.id && column.extraInfo.valueAddable == 1) {
|
|
418
|
+
flag = true;
|
|
419
|
+
} else if (this.id && column.extraInfo.valueEditable == 1) {
|
|
420
|
+
flag = true;
|
|
421
|
+
}
|
|
422
|
+
return flag;
|
|
423
|
+
},
|
|
424
|
+
/**
|
|
425
|
+
* 判断返回是哪一类型的组件
|
|
426
|
+
* */
|
|
427
|
+
componentView(column) {
|
|
428
|
+
//评价情感特殊处理 下拉显示单选
|
|
429
|
+
if (column.behaviorType == 4 && ['rate_polarity', 'bn_rate_polarity', 'bn_addition_polarity'].includes(column.columnCode)) {
|
|
430
|
+
return componentMap[FORM_TYPES[3]]
|
|
431
|
+
}
|
|
432
|
+
// 多选下拉
|
|
433
|
+
if (column.behaviorType == 5 && column.extraInfo?.valueType == 'select') {
|
|
434
|
+
return componentMap[FORM_TYPES[4]]
|
|
435
|
+
}
|
|
436
|
+
return componentMap[FORM_TYPES[column.behaviorType]] || null;
|
|
437
|
+
},
|
|
438
|
+
/**
|
|
439
|
+
* 组件值发生改变,在数据确定变化结束才会返回这个事件。需要注意input事件也会触发change,只不过做了防抖
|
|
440
|
+
* @param {Object} column :组件信息
|
|
441
|
+
* @param {Object} params :子表单子组件信息
|
|
442
|
+
* */
|
|
443
|
+
comChange(column, params) {
|
|
444
|
+
this.afterEventCodes = [];
|
|
445
|
+
/**
|
|
446
|
+
* 默认值关联事件,会根据触发组件修改对应组件的值,值变动
|
|
447
|
+
* */
|
|
448
|
+
if (this.defaultLink.column.includes(column.columnCode) && ![1, 2].includes(column.behaviorType)) {
|
|
449
|
+
// 根据变化的组件,给整张表单赋值
|
|
450
|
+
this.defaultLinkEvent(column, '值修改')
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* 组件映射事件,根据下拉单选值变化映射其他单选下拉组件选项,值变动
|
|
454
|
+
* */
|
|
455
|
+
if (this.columnMapping.column.includes(column.columnCode) && [3, 4, 6].includes(column.behaviorType)) {
|
|
456
|
+
// 根据变化的组件,给整张表单赋值
|
|
457
|
+
this.columnMappingEvent(column, '值修改')
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* 关联其他表数据的子表单,如果设置了筛选条件填充值,根据条件组件值变动触发拉取,值变动
|
|
461
|
+
* */
|
|
462
|
+
if (this.assocTableSearchCodes.includes(column.columnCode) && !params ||
|
|
463
|
+
(params && params.childColumn && this.assocTableSearchCodes.includes(params.childColumn.columnCode))
|
|
464
|
+
) {
|
|
465
|
+
// 根据变化的组件,给整张表单赋值
|
|
466
|
+
this.assocTableSearchEvent(column, '值修改')
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* 主键触发电商数据拉取,文本、下拉都可能触发电商拉取,对整个表单都会值变更
|
|
470
|
+
* */
|
|
471
|
+
if (column.extraInfo.searchKey == 2 && column.value) {
|
|
472
|
+
this.queryOrder(column, '值修改');
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* 触发函数表达式,值变动
|
|
476
|
+
* */
|
|
477
|
+
if (this.hasExprExec) {
|
|
478
|
+
this.exprExecCalc(column, '值修改');
|
|
479
|
+
}
|
|
480
|
+
// 级联组件关联组件查询选项
|
|
481
|
+
if (this.relationColumns[column.columnCode]) {
|
|
482
|
+
this.changeRelationOptions(column, '值修改')
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* 重复值提醒,不会改变值
|
|
486
|
+
* */
|
|
487
|
+
if (column.extraInfo.isShowWarning == 1 && column.value) {
|
|
488
|
+
this.checkRepeat(column, '值修改');
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* 组件显隐,不会改变值
|
|
492
|
+
* */
|
|
493
|
+
if (this.psychicConditionCodes.includes(column.columnCode)) {
|
|
494
|
+
this.getHiddenCodes(column, '值修改');
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* 提交校验,不会改变值
|
|
498
|
+
* */
|
|
499
|
+
if (this.checkedConditionId.includes(column.id)) {
|
|
500
|
+
this.getCheckedCodes(column, '值修改');
|
|
501
|
+
}
|
|
502
|
+
this.$emit('change', column, params)
|
|
503
|
+
},
|
|
504
|
+
/**
|
|
505
|
+
* 组件值发生改变,在数据确定变化结束才会返回这个事件。需要注意input事件
|
|
506
|
+
* @param {Object} column :组件信息
|
|
507
|
+
* @param {Object} params :子表单子组件信息
|
|
508
|
+
* */
|
|
509
|
+
comInput(column, params) {
|
|
510
|
+
this.afterEventCodes = [];
|
|
511
|
+
/**
|
|
512
|
+
* 组件change是否触发默认值关联事件,值变动
|
|
513
|
+
* */
|
|
514
|
+
if (this.defaultLink.column.includes(column.columnCode)) {
|
|
515
|
+
// 根据变化的组件,给整张表单赋值
|
|
516
|
+
this.defaultLinkEvent(column, '值修改')
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* 触发函数表达式,值变动
|
|
520
|
+
* */
|
|
521
|
+
if (this.hasExprExec) {
|
|
522
|
+
this.exprExecCalc(column, '值修改');
|
|
523
|
+
}
|
|
524
|
+
this.$emit('input', column, params)
|
|
525
|
+
},
|
|
526
|
+
/**
|
|
527
|
+
* 组件输入框失去焦点
|
|
528
|
+
* @param {Object} column :组件信息
|
|
529
|
+
* @param {Object} params :子表单子组件等更多信息
|
|
530
|
+
* */
|
|
531
|
+
comBlur(column, params) {
|
|
532
|
+
this.afterEventCodes = [];
|
|
533
|
+
// 判断是否是需要获取电商数据
|
|
534
|
+
if (column.extraInfo.searchKey == 2 && column.value) {
|
|
535
|
+
this.queryOrder(column, '失去焦点');
|
|
536
|
+
}
|
|
537
|
+
// 触发重复值提醒
|
|
538
|
+
if (column.extraInfo.isShowWarning == 1 && column.value) {
|
|
539
|
+
this.checkRepeat(column, '失去焦点');
|
|
540
|
+
}
|
|
541
|
+
// 提交校验
|
|
542
|
+
if (this.checkedConditionId.includes(column.id)) {
|
|
543
|
+
this.getCheckedCodes(column, '失去焦点');
|
|
544
|
+
}
|
|
545
|
+
this.$emit('blur', column, params)
|
|
546
|
+
},
|
|
547
|
+
/**
|
|
548
|
+
* 后置触发表单事件,在辅助回填、组件映射三个事件触发之后,再次触发事件
|
|
549
|
+
* 后置事件仅支持:默认值映射、组件映射、组件显隐
|
|
550
|
+
* */
|
|
551
|
+
afterEventForm(column, type) {
|
|
552
|
+
if (this.afterEventCodes.includes(column.columnCode + type)) {
|
|
553
|
+
this.insetLog({content: `【${column.name}】已经触发过-${type},不再重复执行`})
|
|
554
|
+
// 有组件重复触发,跳出事件链路
|
|
555
|
+
this.afterEventCodes = [];
|
|
556
|
+
return;
|
|
557
|
+
} else {
|
|
558
|
+
this.afterEventCodes.push(column.columnCode + type)
|
|
559
|
+
}
|
|
560
|
+
/**
|
|
561
|
+
* 默认值关联事件,会根据触发组件修改对应组件的值,值变动
|
|
562
|
+
* */
|
|
563
|
+
if (this.defaultLink.column.includes(column.columnCode) && ![1, 2].includes(column.behaviorType)) {
|
|
564
|
+
// 根据变化的组件,给整张表单赋值
|
|
565
|
+
this.defaultLinkEvent(column, type)
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* 关联其他表数据的子表单,如果设置了筛选条件填充值,根据条件组件值变动触发拉取,值变动
|
|
569
|
+
* */
|
|
570
|
+
if (this.assocTableSearchCodes.includes(column.columnCode)) {
|
|
571
|
+
// 根据变化的组件,给整张表单赋值
|
|
572
|
+
this.assocTableSearchEvent(column, type)
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* 组件映射事件,根据下拉单选值变化映射其他单选下拉组件选项,值变动
|
|
576
|
+
* */
|
|
577
|
+
if (this.columnMapping.column.includes(column.columnCode) && [3, 4, 6].includes(column.behaviorType)) {
|
|
578
|
+
// 根据变化的组件,给整张表单赋值
|
|
579
|
+
this.columnMappingEvent(column, type)
|
|
580
|
+
}
|
|
581
|
+
/**
|
|
582
|
+
* 触发函数表达式,值变动
|
|
583
|
+
* */
|
|
584
|
+
if (this.hasExprExec) {
|
|
585
|
+
this.exprExecCalc(column, type);
|
|
586
|
+
}
|
|
587
|
+
/**
|
|
588
|
+
* 组件显隐,不会改变值
|
|
589
|
+
* */
|
|
590
|
+
if (this.psychicConditionCodes.includes(column.columnCode)) {
|
|
591
|
+
this.getHiddenCodes(column, type);
|
|
592
|
+
}
|
|
593
|
+
},
|
|
594
|
+
/**
|
|
595
|
+
* 表单操作
|
|
596
|
+
* @param column {Object}
|
|
597
|
+
* @param type {String}
|
|
598
|
+
* */
|
|
599
|
+
operate(column, type) {
|
|
600
|
+
switch (type) {
|
|
601
|
+
// 选择包裹
|
|
602
|
+
case 'choosePackage': {
|
|
603
|
+
this.$refs.choosePackage.open(column)
|
|
604
|
+
break;
|
|
605
|
+
}
|
|
606
|
+
// 选择ERP子单:多包裹情况下选择完包裹,合并后产生子单列表
|
|
607
|
+
case 'chooseChildOrder': {
|
|
608
|
+
this.$refs.chooseChildOrder.open(column)
|
|
609
|
+
break;
|
|
610
|
+
}
|
|
611
|
+
// 选择关联表
|
|
612
|
+
case 'chooseAssocTable': {
|
|
613
|
+
this.$refs.chooseAssocTable.open(column)
|
|
614
|
+
break;
|
|
615
|
+
}
|
|
616
|
+
// IPaas关联接口查询
|
|
617
|
+
case 'chooseIPaasData': {
|
|
618
|
+
this.$refs.chooseIPaasData.open(column, this.getFormContent().contents)
|
|
619
|
+
break;
|
|
620
|
+
}
|
|
621
|
+
// 选择相同工单
|
|
622
|
+
case 'chooseRepeat': {
|
|
623
|
+
let postData = {
|
|
624
|
+
tableCode: this.extendPost.tableCode,
|
|
625
|
+
pageSize: 200,
|
|
626
|
+
pageNum: 1,
|
|
627
|
+
conditions: [
|
|
628
|
+
{
|
|
629
|
+
behaviorType: column.behaviorType,
|
|
630
|
+
columnCode: column.columnCode,
|
|
631
|
+
searchType: '1',
|
|
632
|
+
value: ['string', 'number', 'boolean'].includes(typeof column.value) ? column.value : JSON.stringify(column.value)
|
|
633
|
+
}
|
|
634
|
+
]
|
|
635
|
+
};
|
|
636
|
+
this.$emit('operate', column, type, postData, this.id);
|
|
637
|
+
break;
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
},
|
|
641
|
+
/**
|
|
642
|
+
* 包裹确认选中
|
|
643
|
+
* orderData 合并后的订单信息
|
|
644
|
+
* childOrders 合并后的子订单列表
|
|
645
|
+
* */
|
|
646
|
+
checkedPackage(orderData, childOrders) {
|
|
647
|
+
this.childOrders = cloneDeep(childOrders)
|
|
648
|
+
let content = `你选择包裹`
|
|
649
|
+
// 通过订单号给表单赋值
|
|
650
|
+
let setColum = this.setColumnsValue(orderData, 2)
|
|
651
|
+
if (setColum.length > 0) {
|
|
652
|
+
content += "后,修改了" + setColum.join(',') + "的值"
|
|
653
|
+
} else {
|
|
654
|
+
content += ",但没有获取到需要修改的组件。"
|
|
655
|
+
}
|
|
656
|
+
this.insetLog({content})
|
|
657
|
+
},
|
|
658
|
+
/**
|
|
659
|
+
* 选择子订单
|
|
660
|
+
* @param selectData {Array}
|
|
661
|
+
* @param type {String}
|
|
662
|
+
* @param columnCode {String}
|
|
663
|
+
* */
|
|
664
|
+
setChildrenForm(selectData, type, columnCode) {
|
|
665
|
+
let name = '';
|
|
666
|
+
let values = selectData;
|
|
667
|
+
for (let i in this.componentList) {
|
|
668
|
+
let item = this.componentList[i];
|
|
669
|
+
if (item.columnCode == columnCode) {
|
|
670
|
+
name = item.name;
|
|
671
|
+
if (type == 'add') {
|
|
672
|
+
values = [...item.value, ...values]
|
|
673
|
+
}
|
|
674
|
+
this.componentList[i].error = ''
|
|
675
|
+
this.componentList[i].value = cloneDeep(values)
|
|
676
|
+
this.afterEventForm(this.componentList[i], '子表单填充')
|
|
677
|
+
break;
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
let content = `你选中${selectData.length}条数据,修改了${name}的值`
|
|
681
|
+
this.insetLog({content})
|
|
682
|
+
},
|
|
683
|
+
/**
|
|
684
|
+
* 防抖触发组件显隐
|
|
685
|
+
*/
|
|
686
|
+
getHiddenCodes: debounce(function (column, type) {
|
|
687
|
+
let content = `【${column.name}】${type}触发组件显隐`
|
|
688
|
+
let {hiddenIds} = psychicComponentGetIds(this.componentList, this.psychicRules, this.id);
|
|
689
|
+
this.hiddenCodes = hiddenIds;
|
|
690
|
+
if (this.hiddenCodes.length > 0) {
|
|
691
|
+
content += ",共隐藏" + this.hiddenCodes.length + "个组件"
|
|
692
|
+
} else {
|
|
693
|
+
content += ",没有要隐藏的组件。"
|
|
694
|
+
}
|
|
695
|
+
this.insetLog({content})
|
|
696
|
+
}, 300),
|
|
697
|
+
/**
|
|
698
|
+
* 防抖触发提交校验
|
|
699
|
+
*/
|
|
700
|
+
getCheckedCodes: debounce(function (column, type) {
|
|
701
|
+
let content = `【${column.name}】${type}触发提交校验`
|
|
702
|
+
let postData = {
|
|
703
|
+
tableCode: this.extendPost.tableCode,
|
|
704
|
+
contents: this.getFormContent().contents
|
|
705
|
+
}
|
|
706
|
+
if (this.id) {
|
|
707
|
+
postData.id = this.id
|
|
708
|
+
}
|
|
709
|
+
this.loading = true;
|
|
710
|
+
this.postFunc('/biztable/content/submitCheck', postData).then(res => {
|
|
711
|
+
this.loading = false;
|
|
712
|
+
if (!res.code && res.data) {
|
|
713
|
+
content += `:${res.data.info}`
|
|
714
|
+
this.$message.warning(content);
|
|
715
|
+
}
|
|
716
|
+
this.insetLog({content})
|
|
717
|
+
})
|
|
718
|
+
}, 400),
|
|
719
|
+
/**
|
|
720
|
+
* 防抖处理的queryOrder方法
|
|
721
|
+
*/
|
|
722
|
+
queryOrder: debounce(function (column, type) {
|
|
723
|
+
let content = `【${column.name}】${type}触发数据拉取`
|
|
724
|
+
let postData = {
|
|
725
|
+
...this.extendPost,
|
|
726
|
+
triggerField: column.columnCode,
|
|
727
|
+
[column.columnCode]: column.value,
|
|
728
|
+
};
|
|
729
|
+
try {
|
|
730
|
+
// 组装一些固定数据
|
|
731
|
+
this.componentList.forEach(i => {
|
|
732
|
+
if (i.outDataSourceInfo[0]?.field == 'tid') {
|
|
733
|
+
postData.tid = i.value;
|
|
734
|
+
} else if (i.insideDataSourceInfo?.type == 'seller') {
|
|
735
|
+
postData[i.columnCode] = i.value.code;
|
|
736
|
+
}
|
|
737
|
+
})
|
|
738
|
+
} catch (e) {
|
|
739
|
+
console.log(e)
|
|
740
|
+
}
|
|
741
|
+
this.loading = true;
|
|
742
|
+
this.orderList = [];
|
|
743
|
+
this.postFunc('/v2/ods/getOdsInfoV3', postData).then(res => {
|
|
744
|
+
this.loading = false;
|
|
745
|
+
if (!res.code && res.data?.length > 0) {
|
|
746
|
+
this.orderList = res.data;
|
|
747
|
+
// 如果设置了多包裹主键,那就需要用这个组件的配置来判断是否需要回填。否则就用触发拉取的主键来判断是否回填
|
|
748
|
+
let columnInfo = this.dataBack?.key ? this.componentList.filter(i => i.columnCode == this.dataBack.key)[0] : column
|
|
749
|
+
// 组装需要进行回填的数据,默认取第一个(如果是订单拉电商数据,res.data最多只会有一条。包裹可能有多条)
|
|
750
|
+
let setOrder = res.data[0];
|
|
751
|
+
//根据 columnInfo.extraInfo.multiplePackagesType 判断回填逻辑
|
|
752
|
+
//1:回填第一个 2:回填全部(一般是erp,这时候要走一下 choosePackage 的 mergeOrders 包裹合并方法) 3:不回填 没值或没设置就默认回填第一个
|
|
753
|
+
if (columnInfo.extraInfo.multiplePackagesType == 3) {
|
|
754
|
+
content += ",根据组件设置默认不进行回填,请您手动选择。"
|
|
755
|
+
this.insetLog({content})
|
|
756
|
+
return;
|
|
757
|
+
} else if (columnInfo.extraInfo.multiplePackagesType == 2) {
|
|
758
|
+
// 合并包裹前必须先梳理包裹组件,从这里拿合并配置
|
|
759
|
+
this.$refs.choosePackage.initPackageColumns(setOrder)
|
|
760
|
+
setOrder = this.$refs.choosePackage.mergeOrders(res.data)
|
|
761
|
+
}
|
|
762
|
+
// 根据主键取包裹子订单列表
|
|
763
|
+
if (this.dataBack && this.dataBack.order) {
|
|
764
|
+
this.childOrders = setOrder[this.dataBack.order] || []
|
|
765
|
+
}
|
|
766
|
+
// 通过订单号给表单赋值
|
|
767
|
+
let setColum = this.setColumnsValue(setOrder, 1)
|
|
768
|
+
if (setColum.length > 0) {
|
|
769
|
+
content += "后,修改了" + setColum.join(',') + "的值"
|
|
770
|
+
} else {
|
|
771
|
+
content += ",但没有获取到需要修改的组件。"
|
|
772
|
+
}
|
|
773
|
+
this.insetLog({content})
|
|
774
|
+
this.$emit('queryOrder', res)
|
|
775
|
+
} else if (res.code == 1) {
|
|
776
|
+
content += `,未拉取到数据`
|
|
777
|
+
this.insetLog({content})
|
|
778
|
+
} else {
|
|
779
|
+
this.$message.warning('未拉取到数据');
|
|
780
|
+
content += `失败:${res.msg}`
|
|
781
|
+
this.insetLog({content})
|
|
782
|
+
}
|
|
783
|
+
})
|
|
784
|
+
}, 400),
|
|
785
|
+
/**
|
|
786
|
+
* 关联其他表数据的子表单,设置筛选条件触发数据拉取填充
|
|
787
|
+
*/
|
|
788
|
+
assocTableSearchEvent: debounce(function (column, type) {
|
|
789
|
+
let content = `【${column.name}】${type}触发子表单关联筛选条件`
|
|
790
|
+
let contents = this.getFormContent().contents;
|
|
791
|
+
let postData = {
|
|
792
|
+
tableCode: this.extendPost.tableCode,
|
|
793
|
+
conditions: '{}',
|
|
794
|
+
taskContents: JSON.stringify(contents.filter(i => this.assocTableSearchCodes.includes(i.columnCode)))
|
|
795
|
+
};
|
|
796
|
+
this.loading = true;
|
|
797
|
+
this.postFunc('/biztable/content/relation/query', postData).then(res => {
|
|
798
|
+
this.loading = false;
|
|
799
|
+
if (!res.code) {
|
|
800
|
+
if (res.data.inside) {
|
|
801
|
+
let data = res.data.inside;
|
|
802
|
+
let set = []
|
|
803
|
+
let clear = []
|
|
804
|
+
this.componentList.forEach(item => {
|
|
805
|
+
if (item.behaviorType == 13 && this.assocTableSearchColumnId.includes(item.id)) {
|
|
806
|
+
if (data[item.columnCode]) {
|
|
807
|
+
// 值为1,强制填充,或者子表单的value为空才填充
|
|
808
|
+
if (item.extraInfo.dataForceFill || item.value?.length == 0) {
|
|
809
|
+
item.value = initAccTableSearchVal(item, data[item.columnCode]);
|
|
810
|
+
this.afterEventForm(item, '关联筛选赋值')
|
|
811
|
+
set.push(item.name)
|
|
812
|
+
}
|
|
813
|
+
} else {
|
|
814
|
+
if (item.extraInfo.dataForceClear || item.value.length > 0) {
|
|
815
|
+
item.value = [];
|
|
816
|
+
clear.push(item.name)
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
})
|
|
821
|
+
if (set.length > 0) {
|
|
822
|
+
content += `后,修改了 ${set.join(',')} 的值`
|
|
823
|
+
}
|
|
824
|
+
if (clear.length > 0) {
|
|
825
|
+
content += `,清空了 ${clear.join(',')} 的值`
|
|
826
|
+
}
|
|
827
|
+
} else {
|
|
828
|
+
content += `,未拉取到数据`
|
|
829
|
+
}
|
|
830
|
+
this.insetLog({content})
|
|
831
|
+
} else if (res.code == 1) {
|
|
832
|
+
content += `,未拉取到数据`
|
|
833
|
+
this.insetLog({content})
|
|
834
|
+
} else {
|
|
835
|
+
this.$message.warning(res.msg);
|
|
836
|
+
content += `,失败:${res.msg}`
|
|
837
|
+
this.insetLog({content})
|
|
838
|
+
}
|
|
839
|
+
})
|
|
840
|
+
}, 400),
|
|
841
|
+
/**
|
|
842
|
+
* 防抖处理的检查重复
|
|
843
|
+
*/
|
|
844
|
+
checkRepeat: debounce(function (column, type) {
|
|
845
|
+
let content = `【${column.name}】${type}触发重复值校验`
|
|
846
|
+
let postData = {
|
|
847
|
+
tableCode: this.extendPost.tableCode,
|
|
848
|
+
pageSize: 200,
|
|
849
|
+
pageNum: 1,
|
|
850
|
+
conditions: [
|
|
851
|
+
{
|
|
852
|
+
behaviorType: column.behaviorType,
|
|
853
|
+
columnCode: column.columnCode,
|
|
854
|
+
searchType: '1',
|
|
855
|
+
value: ['string', 'number', 'boolean'].includes(typeof column.value) ? column.value : JSON.stringify(column.value)
|
|
856
|
+
}
|
|
857
|
+
]
|
|
858
|
+
};
|
|
859
|
+
this.loading = true;
|
|
860
|
+
this.postFunc('/biztable/content/query', postData).then(res => {
|
|
861
|
+
this.loading = false;
|
|
862
|
+
if (!res.code) {
|
|
863
|
+
let total = parseInt(res.data.total);
|
|
864
|
+
if (total > 0 && this.id) {
|
|
865
|
+
// 编辑的时候去除当前编辑的任务id
|
|
866
|
+
let findId = res.data.results.find(i => i.view.id == this.id);
|
|
867
|
+
total = findId ? total - 1 : total;
|
|
868
|
+
}
|
|
869
|
+
if (total > 0) {
|
|
870
|
+
content += ",当前工作表查到" + total + "条相同的任务。"
|
|
871
|
+
column.warning = `当前工作表内容有${total}条「${column.name}」相同的任务。`;
|
|
872
|
+
} else {
|
|
873
|
+
content += ",当前工作没有查到相同的任务。"
|
|
874
|
+
}
|
|
875
|
+
this.insetLog({content})
|
|
876
|
+
} else if (res.code == 1) {
|
|
877
|
+
content += `,未拉取到数据`
|
|
878
|
+
this.insetLog({content})
|
|
879
|
+
} else {
|
|
880
|
+
this.$message.warning(res.msg);
|
|
881
|
+
content += `,失败:${res.msg}`
|
|
882
|
+
this.insetLog({content})
|
|
883
|
+
}
|
|
884
|
+
})
|
|
885
|
+
}, 400),
|
|
886
|
+
/**
|
|
887
|
+
* 防抖处理的函数表达式计算
|
|
888
|
+
*/
|
|
889
|
+
exprExecCalc: debounce(function (column, type) {
|
|
890
|
+
let content = column ? `【${column.name}】${type}触发函数计算` : `${type}触发函数计算`
|
|
891
|
+
let postData = {
|
|
892
|
+
...this.extendPost,
|
|
893
|
+
...this.getFormContent()
|
|
894
|
+
};
|
|
895
|
+
this.loading = true;
|
|
896
|
+
this.postFunc('/biztable/content/exprCalculation', postData).then(res => {
|
|
897
|
+
this.loading = false;
|
|
898
|
+
if (!res.code) {
|
|
899
|
+
let calcColumn = []
|
|
900
|
+
let data = res.data?.length > 0 ? res.data : []
|
|
901
|
+
data.forEach(item => {
|
|
902
|
+
for (let i in this.componentList) {
|
|
903
|
+
if (this.componentList[i].columnCode == item.columnCode && !isValueEqual(this.componentList[i].value, item.value, this.componentList[i].behaviorType)) {
|
|
904
|
+
calcColumn.push(this.componentList[i].name)
|
|
905
|
+
this.componentList[i].value = item.value || getEmptyVal(this.componentList[i].value);
|
|
906
|
+
this.afterEventForm(this.componentList[i], '函数表达式计算')
|
|
907
|
+
break;
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
})
|
|
911
|
+
if (calcColumn.length > 0) {
|
|
912
|
+
content += "后,修改了" + calcColumn.join(',') + "的值";
|
|
913
|
+
} else {
|
|
914
|
+
content += ",但没有获取到需要修改的组件。"
|
|
915
|
+
}
|
|
916
|
+
this.insetLog({content})
|
|
917
|
+
} else if (res.code == 1) {
|
|
918
|
+
content += `,未拉取到数据`
|
|
919
|
+
this.insetLog({content})
|
|
920
|
+
} else {
|
|
921
|
+
this.$message.warning(res.msg);
|
|
922
|
+
content += `,失败:${res.msg}`
|
|
923
|
+
this.insetLog({content})
|
|
924
|
+
}
|
|
925
|
+
})
|
|
926
|
+
}, 400),
|
|
927
|
+
/**
|
|
928
|
+
* 选项型的组件,通过其他组件的value变化,拉取新的选项列表。关联组件过滤选项列表
|
|
929
|
+
*/
|
|
930
|
+
changeRelationOptions: debounce(function (column, type) {
|
|
931
|
+
let content = `【${column.name}】${type}触发级联选项查询`
|
|
932
|
+
this.insetLog({content})
|
|
933
|
+
for (let i in this.componentList) {
|
|
934
|
+
if (this.relationColumns[column.columnCode].includes(this.componentList[i].columnCode)) {
|
|
935
|
+
try {
|
|
936
|
+
let extCondition = this.componentList[i].postData.extCondition ? JSON.parse(this.componentList[i].postData.extCondition) : {}
|
|
937
|
+
// 目前只会关联下拉,以后有其他类型再迭代
|
|
938
|
+
extCondition[column.columnCode] = column.value.code || column.value;
|
|
939
|
+
this.componentList[i].postData.extCondition = JSON.stringify(extCondition)
|
|
940
|
+
this.componentList[i].value = []
|
|
941
|
+
} catch (e) {
|
|
942
|
+
console.log(column)
|
|
943
|
+
console.log(this.componentList[i])
|
|
944
|
+
console.log('关联组件查询选项,extCondition组装失败')
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
}, 400),
|
|
949
|
+
/**
|
|
950
|
+
* 触发单选下拉组件选项映射事件处理
|
|
951
|
+
* @param {Object} column 触发事件的组件对象
|
|
952
|
+
* @param {String} type 触发事件的事件类型
|
|
953
|
+
* */
|
|
954
|
+
columnMappingEvent(column, type) {
|
|
955
|
+
try {
|
|
956
|
+
let content = `【${column.name}】${type}触发组件映射`
|
|
957
|
+
let setColum = []
|
|
958
|
+
let triggerCode = getTriggerCode(column);
|
|
959
|
+
this.componentList.forEach(item => {
|
|
960
|
+
if ([3, 4, 6].includes(item.behaviorType) &&
|
|
961
|
+
this.columnMapping.setColumn[column.columnCode][item.columnCode]) {
|
|
962
|
+
let mappings = this.columnMapping.setColumn[column.columnCode][item.columnCode];
|
|
963
|
+
let val = mappings.find(i => String(i.fromValue.code || i.fromValue.id) == String(triggerCode));
|
|
964
|
+
if (val) {
|
|
965
|
+
setColum.push(item.name)
|
|
966
|
+
item.value = toMappingValue(item, val.toValue);
|
|
967
|
+
this.afterEventForm(item, '组件映射')
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
})
|
|
971
|
+
if (setColum.length > 0) {
|
|
972
|
+
content += "后,修改了" + setColum.join(',') + "的值"
|
|
973
|
+
} else {
|
|
974
|
+
content += ",没有找到符合映射规则的组件"
|
|
975
|
+
}
|
|
976
|
+
this.insetLog({content})
|
|
977
|
+
} catch (e) {
|
|
978
|
+
console.log("columnMappingEventErr:" + e)
|
|
979
|
+
}
|
|
980
|
+
},
|
|
981
|
+
/**
|
|
982
|
+
* 触发单行文本默认值关联映射事件处理
|
|
983
|
+
* @param {Object} column 触发事件的组件对象
|
|
984
|
+
* @param {String} type 触发事件的事件类型
|
|
985
|
+
* @param {Object} params 是否是子表单,子表单将会返回params
|
|
986
|
+
* */
|
|
987
|
+
defaultLinkEvent(column, type) {
|
|
988
|
+
try {
|
|
989
|
+
let content = `【${column.name}】${type}触发默认值映射`
|
|
990
|
+
let setColum = []
|
|
991
|
+
this.componentList.forEach(item => {
|
|
992
|
+
// 单行文本,并且该单行文本有默认值关联规则,并且关联规则中的组件包含了目前change的组件id
|
|
993
|
+
if (item.behaviorType == 1 && this.defaultLink.setColumn[item.columnCode] && this.defaultLink.setColumn[item.columnCode].includes(`##${column.columnCode}`)) {
|
|
994
|
+
setColum.push(item.name)
|
|
995
|
+
item.value = initDefaultLinkVal(this.componentList, this.defaultLink.setColumn[item.columnCode]);
|
|
996
|
+
}
|
|
997
|
+
// 子表单,并且子表单的value是有值的,并且子表单内有子组件有默认值关联规则,并且默认值关联规则中的组件包含了目前change的组件id
|
|
998
|
+
if (item.behaviorType == 13 && item.value.length > 0 && this.defaultLink.setColumn[item.columnCode] && this.defaultLink.setColumn[item.columnCode].includes(column.columnCode)) {
|
|
999
|
+
item.value.forEach(val => {
|
|
1000
|
+
// 子表单的value是多条数组结构,必须进行遍历,确保每一条数据都根据映射结果变化
|
|
1001
|
+
for (let i in val) {
|
|
1002
|
+
// 子表单的规则的key 是 父组件id。子组件id 拼接的,其他判断和正常组件一样
|
|
1003
|
+
if (this.defaultLink.setColumn[`${item.columnCode}.${i}`] &&
|
|
1004
|
+
this.defaultLink.setColumn[`${item.columnCode}.${i}`].includes(`##${column.columnCode}`)) {
|
|
1005
|
+
setColum.push(item.name)
|
|
1006
|
+
val[i] = initDefaultLinkVal(this.componentList, this.defaultLink.setColumn[`${item.columnCode}.${i}`]);
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
})
|
|
1010
|
+
}
|
|
1011
|
+
})
|
|
1012
|
+
content += "后,修改了" + setColum.join(',') + "的值"
|
|
1013
|
+
this.insetLog({content})
|
|
1014
|
+
} catch (e) {
|
|
1015
|
+
console.log("defaultLinkEventErr:" + e)
|
|
1016
|
+
}
|
|
1017
|
+
},
|
|
1018
|
+
/**
|
|
1019
|
+
* 判断组件是否需要回填数据
|
|
1020
|
+
* @param item 组件信息
|
|
1021
|
+
* @param type 回填类型 1:第一次数据回填 2:选择包裹
|
|
1022
|
+
* @returns {boolean} 是否需要回填
|
|
1023
|
+
*/
|
|
1024
|
+
shouldFillData(item, type) {
|
|
1025
|
+
// type == 1 第一次数据回填触发接口,所有组件都受是否回填设置的影响
|
|
1026
|
+
// type == 2 选择包裹了,只有子表单受回填设置的影响
|
|
1027
|
+
if (type !== 1 && (type !== 2 || item.behaviorType !== 13)) {
|
|
1028
|
+
return true; // 不受回填设置影响的情况
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
const {multiplePackagesType} = item.extraInfo || {};
|
|
1032
|
+
|
|
1033
|
+
// 子表单的特殊逻辑
|
|
1034
|
+
if (item.behaviorType === 13) {
|
|
1035
|
+
// 不回填的情况
|
|
1036
|
+
if (multiplePackagesType === 3) {
|
|
1037
|
+
return false;
|
|
1038
|
+
}
|
|
1039
|
+
// 其他情况都回填(1:只回填第一条, 2:回填全部, 未设置:回填全部)
|
|
1040
|
+
return true;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
// 非子表单,只有回填或者不回填
|
|
1044
|
+
// 没有设置multiplePackagesType或设置的不是3,都回填
|
|
1045
|
+
return !multiplePackagesType || multiplePackagesType !== 3;
|
|
1046
|
+
},
|
|
1047
|
+
/**
|
|
1048
|
+
* 获取回填后的新值
|
|
1049
|
+
* @param item 组件信息
|
|
1050
|
+
* @param data 数据源
|
|
1051
|
+
* @param columnCode 列代码
|
|
1052
|
+
* @returns 处理后的新值
|
|
1053
|
+
*/
|
|
1054
|
+
getFillValue(item, data, columnCode) {
|
|
1055
|
+
const {multiplePackagesType} = item.extraInfo || {};
|
|
1056
|
+
|
|
1057
|
+
// 子表单的特殊处理
|
|
1058
|
+
if (item.behaviorType === 13) {
|
|
1059
|
+
if (multiplePackagesType === 1) {
|
|
1060
|
+
// 只回填第一条
|
|
1061
|
+
return [data[columnCode][0]];
|
|
1062
|
+
}
|
|
1063
|
+
// 回填全部(包括未设置和设置为2的情况)
|
|
1064
|
+
return data[columnCode];
|
|
1065
|
+
}
|
|
1066
|
+
// 处理店铺经过订单号拉取没有code的情况
|
|
1067
|
+
else if (item.behaviorType === 4) {
|
|
1068
|
+
if (!data[columnCode].code && data[columnCode].id) {
|
|
1069
|
+
return {...data[columnCode], code: data[columnCode].id}
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
// 非子表单直接返回原值
|
|
1073
|
+
return data[columnCode];
|
|
1074
|
+
},
|
|
1075
|
+
/**
|
|
1076
|
+
* 【辅助回填专用】通过其他地方拉取到的数据,来给表单内的组件重新赋值
|
|
1077
|
+
* @param data {columnCode:value,columnCode:value}
|
|
1078
|
+
* @param type 1:只影响请求接口后默认第一次回填,这里要判断组件是否设置默认不回填,
|
|
1079
|
+
* @param type 2:手动选择包裹,选择包裹后对子子商品的合并数据,是否要回填进行处理。这里就只处理子表单,不再处理其他类型的组件了
|
|
1080
|
+
* extraInfo.multiplePackagesType 1:回填第一个(子表单) 2:回填全部(子表单) 3:不回填(全部组件) 没设置就全部回填
|
|
1081
|
+
* 客户手动在弹框里选择拉取的数据时,不受这个配置影响,必须回填
|
|
1082
|
+
* */
|
|
1083
|
+
setColumnsValue(data, type) {
|
|
1084
|
+
let setColum = []
|
|
1085
|
+
this.componentList.forEach(item => {
|
|
1086
|
+
if (data[item.columnCode]) {
|
|
1087
|
+
// 判断是否需要回填
|
|
1088
|
+
if (!this.shouldFillData(item, type)) {
|
|
1089
|
+
return; // 跳过不回填的情况
|
|
1090
|
+
}
|
|
1091
|
+
// 获取回填后的新值
|
|
1092
|
+
let newValue = this.getFillValue(item, data, item.columnCode);
|
|
1093
|
+
|
|
1094
|
+
// 比较新旧值,不相等才赋值
|
|
1095
|
+
if (!isValueEqual(item.value, newValue, item.behaviorType)) {
|
|
1096
|
+
item.value = cloneDeep(newValue)
|
|
1097
|
+
// 触发后置事件
|
|
1098
|
+
this.afterEventForm(item, '辅助回填');
|
|
1099
|
+
setColum.push(`【${item.name}】`)
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
})
|
|
1103
|
+
return setColum;
|
|
1104
|
+
},
|
|
1105
|
+
/**
|
|
1106
|
+
* 记录日志
|
|
1107
|
+
* */
|
|
1108
|
+
insetLog({content}) {
|
|
1109
|
+
const now = new Date();
|
|
1110
|
+
const hours = now.getHours(); // 获取小时
|
|
1111
|
+
const minutes = now.getMinutes(); // 获取分钟
|
|
1112
|
+
const formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
|
|
1113
|
+
this.formLogs.push({
|
|
1114
|
+
time: formattedTime,
|
|
1115
|
+
content: content,
|
|
1116
|
+
})
|
|
1117
|
+
}
|
|
1118
|
+
},
|
|
1119
|
+
computed: {
|
|
1120
|
+
// 组件列表
|
|
1121
|
+
componentList: {
|
|
1122
|
+
get() {
|
|
1123
|
+
return this.components;
|
|
1124
|
+
},
|
|
1125
|
+
set(val) {
|
|
1126
|
+
this.$emit("update:components", val);
|
|
1127
|
+
}
|
|
1128
|
+
},
|
|
1129
|
+
// 组装初始化扩展信息
|
|
1130
|
+
initExtraInfo() {
|
|
1131
|
+
const extraInfo = {
|
|
1132
|
+
isAutoAssign: 0
|
|
1133
|
+
}
|
|
1134
|
+
return {...extraInfo, ...this.extraInfo}
|
|
1135
|
+
}
|
|
1136
|
+
},
|
|
1137
|
+
}
|
|
1138
|
+
</script>
|
|
1139
|
+
<style scoped lang="scss">
|
|
1140
|
+
@import "../font/iconfont.css";
|
|
1141
|
+
|
|
1142
|
+
.BnSmartForm {
|
|
1143
|
+
position: relative;
|
|
1144
|
+
background: #fff;
|
|
1145
|
+
padding-top: 8px;
|
|
1146
|
+
width: 100%;
|
|
1147
|
+
height: 100%;
|
|
1148
|
+
|
|
1149
|
+
&-head {
|
|
1150
|
+
position: absolute;
|
|
1151
|
+
top: 0;
|
|
1152
|
+
width: 100%;
|
|
1153
|
+
height: 8px;
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1156
|
+
&-body {
|
|
1157
|
+
position: relative;
|
|
1158
|
+
width: 100%;
|
|
1159
|
+
height: 100%;
|
|
1160
|
+
|
|
1161
|
+
&-item {
|
|
1162
|
+
position: relative;
|
|
1163
|
+
padding: 10px 20px;
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
|
|
1167
|
+
&-elf {
|
|
1168
|
+
position: absolute;
|
|
1169
|
+
top: 0;
|
|
1170
|
+
left: calc(100% + 10px);
|
|
1171
|
+
background: #fff;
|
|
1172
|
+
width: 340px;
|
|
1173
|
+
height: calc(80%);
|
|
1174
|
+
box-shadow: 0 0 12px rgba(0, 0, 0, .12);;
|
|
1175
|
+
border-radius: 4px;
|
|
1176
|
+
border: 1px solid #e4e7ed;
|
|
1177
|
+
overflow: hidden;
|
|
1178
|
+
|
|
1179
|
+
&-tip {
|
|
1180
|
+
position: absolute;
|
|
1181
|
+
top: 60px;
|
|
1182
|
+
right: 30px;
|
|
1183
|
+
width: 50px;
|
|
1184
|
+
cursor: pointer;
|
|
1185
|
+
|
|
1186
|
+
img {
|
|
1187
|
+
width: 60px;
|
|
1188
|
+
transform: rotate(40deg); /* 旋转 90 度 */
|
|
1189
|
+
transform-origin: center; /* 设置旋转中心为图片中心 */
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1192
|
+
transition: right 0.5s ease-in-out;
|
|
1193
|
+
|
|
1194
|
+
&-show {
|
|
1195
|
+
right: -20px;
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1200
|
+
</style>
|
|
1201
|
+
|