@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.
Files changed (167) hide show
  1. package/install.js +134 -0
  2. package/package.json +20 -4
  3. package/packages/BnAddress/index.vue +141 -0
  4. package/packages/BnAddressParse/index.vue +75 -0
  5. package/packages/BnAdvancedFilter/BnFilterView.vue +145 -0
  6. package/packages/BnAdvancedFilter/index.vue +345 -0
  7. package/packages/BnAdvancedFilter/util.js +171 -0
  8. package/packages/BnCascader/BnCascader.vue +543 -0
  9. package/packages/BnCascader/BnCascaderPanel.vue +1331 -0
  10. package/packages/BnCascader/cascaderDisplay.js +102 -0
  11. package/packages/BnCheck/BnCheck.vue +253 -0
  12. package/packages/BnColumnConfig/columnConfigDialog.vue +134 -0
  13. package/packages/BnColumnConfig/component/childrenFormSetting/assocTable.vue +143 -0
  14. package/packages/BnColumnConfig/component/childrenFormSetting/assocTableSearch.vue +314 -0
  15. package/packages/BnColumnConfig/component/childrenFormSetting/index.vue +243 -0
  16. package/packages/BnColumnConfig/component/defaultSet/defaultSet.vue +114 -0
  17. package/packages/BnColumnConfig/component/defaultSet/stringDefault.vue +210 -0
  18. package/packages/BnColumnConfig/component/funcExprDialog/funcExprDialog.vue +126 -0
  19. package/packages/BnColumnConfig/component/packageFilter/index.vue +141 -0
  20. package/packages/BnColumnConfig/component/paraExplainSet/index.vue +156 -0
  21. package/packages/BnColumnConfig/component/setOption/setOption.vue +321 -0
  22. package/packages/BnColumnConfig/component/setRelationOption/ConditionList.vue +277 -0
  23. package/packages/BnColumnConfig/component/setRelationOption/LevelHeader.vue +144 -0
  24. package/packages/BnColumnConfig/component/setRelationOption/setRelationOption.vue +642 -0
  25. package/packages/BnColumnConfig/data.js +129 -0
  26. package/packages/BnColumnConfig/index.scss +23 -0
  27. package/packages/BnColumnConfig/index.vue +309 -0
  28. package/packages/BnCondVal/BnCondVal.vue +112 -0
  29. package/packages/BnCondVal/itemVal/dateRegVal.vue +39 -0
  30. package/packages/BnCondVal/itemVal/dateVal.vue +39 -0
  31. package/packages/BnCondVal/itemVal/numRegVal.vue +67 -0
  32. package/packages/BnCondVal/itemVal/numVal.vue +44 -0
  33. package/packages/BnCondVal/itemVal/relationVal.vue +73 -0
  34. package/packages/BnCondVal/itemVal/selectColumnVal.vue +58 -0
  35. package/packages/BnCondVal/itemVal/selectVal.vue +59 -0
  36. package/packages/BnCondVal/itemVal/stringVal.vue +156 -0
  37. package/packages/BnCondition/index.vue +551 -0
  38. package/packages/BnCondition/util.js +232 -0
  39. package/packages/BnDatePicker/BnDatePicker.vue +194 -0
  40. package/packages/BnDrop/BnDrop.vue +917 -0
  41. package/packages/BnEmptyTip/BnEmptyTip.vue +107 -0
  42. package/packages/BnExportOrder/BnExportOrder.vue +241 -0
  43. package/packages/BnExportOrder/validatorCode.vue +94 -0
  44. package/packages/BnFileView/BnFileView.vue +271 -0
  45. package/packages/BnFileView/FileDetail.vue +125 -0
  46. package/packages/BnFileView/videoPreview.vue +70 -0
  47. package/packages/BnFilterOption/BnFilterOption.vue +160 -0
  48. package/packages/BnFunExpr/BnFunExpr.vue +608 -0
  49. package/packages/BnImportOrder/BnImportOrder.vue +323 -0
  50. package/packages/BnImportTemplate/BnImportTemplate.vue +866 -0
  51. package/packages/BnImportTemplate/assets/merge_tip_img.png +0 -0
  52. package/packages/BnImportTemplate/assets/sheet_tip.png +0 -0
  53. package/packages/BnImportTemplate/assets/xls.png +0 -0
  54. package/packages/BnImportTemplate/components/ImportTemplateTrigger.vue +198 -0
  55. package/packages/BnImportTemplate/components/TemplateEditDialog.vue +340 -0
  56. package/packages/BnImportTemplate/components/TemplateFieldsConfig.vue +401 -0
  57. package/packages/BnImportTemplate/components/TemplateListDialog.vue +297 -0
  58. package/packages/BnInpNum/BnInpNum.vue +165 -0
  59. package/packages/BnMenus/BnMenus.vue +502 -0
  60. package/packages/BnMenus/MenuItem.vue +321 -0
  61. package/packages/BnOrderCard/BnOrderCard.vue +389 -0
  62. package/packages/BnOrderCard/orderRemark.vue +178 -0
  63. package/packages/BnOrderCard/util.js +94 -0
  64. package/packages/BnOrderDetail/BnOrderDetail.vue +338 -0
  65. package/packages/BnOrderDetail/filterLogByUser.vue +108 -0
  66. package/packages/BnOrderDetail/orderLogs.vue +53 -0
  67. package/packages/BnOrderDetail/showSubForm/index.vue +41 -0
  68. package/packages/BnOrderDetail/showSubForm/showChildTable.vue +61 -0
  69. package/packages/BnOrderDetail/showSubForm/showTimeLine.vue +131 -0
  70. package/packages/BnOrderDetail/showSubForm/tableCellCopy.vue +84 -0
  71. package/packages/BnOrderShare/index.vue +378 -0
  72. package/packages/BnOrderShare/shareUrlInp.vue +54 -0
  73. package/packages/BnRadio/BnRadio.vue +181 -0
  74. package/packages/BnRelation/BnRelation.vue +120 -0
  75. package/packages/BnSelect/BnSelect.vue +485 -0
  76. package/packages/BnSmartForm/BnBatchForm.vue +334 -0
  77. package/packages/BnSmartForm/BnBatchFormDialog.vue +423 -0
  78. package/packages/BnSmartForm/BnSmartElf/elfLog/index.vue +57 -0
  79. package/packages/BnSmartForm/BnSmartElf/index.vue +95 -0
  80. package/packages/BnSmartForm/BnSmartFormPsychic.js +629 -0
  81. package/packages/BnSmartForm/BnSmartFormUtil.js +524 -0
  82. package/packages/BnSmartForm/addressForm/index.vue +73 -0
  83. package/packages/BnSmartForm/checkboxForm/index.vue +99 -0
  84. package/packages/BnSmartForm/childrenForm/childFormFile.vue +237 -0
  85. package/packages/BnSmartForm/childrenForm/childrenFormBody.vue +260 -0
  86. package/packages/BnSmartForm/childrenForm/index.vue +110 -0
  87. package/packages/BnSmartForm/childrenForm/searchInventory.vue +115 -0
  88. package/packages/BnSmartForm/chooseAssocTable/chooseAssocTable.vue +451 -0
  89. package/packages/BnSmartForm/chooseAssocTable/chooseChildGood.vue +229 -0
  90. package/packages/BnSmartForm/chooseAssocTable/tableCellCopy.vue +84 -0
  91. package/packages/BnSmartForm/chooseChildOrder/chooseChildOrder.vue +158 -0
  92. package/packages/BnSmartForm/chooseIPaasData/chooseIPaasData.vue +307 -0
  93. package/packages/BnSmartForm/chooseIPaasData/tableCellCopy.vue +84 -0
  94. package/packages/BnSmartForm/choosePackage/choosePackage.vue +361 -0
  95. package/packages/BnSmartForm/dateDualForm/index.vue +37 -0
  96. package/packages/BnSmartForm/dateForm/index.vue +38 -0
  97. package/packages/BnSmartForm/fileForm/fileFormData.js +50 -0
  98. package/packages/BnSmartForm/fileForm/index.vue +240 -0
  99. package/packages/BnSmartForm/formItemFooter/formItemFooter.vue +38 -0
  100. package/packages/BnSmartForm/formItemTop/formItemTop.vue +42 -0
  101. package/packages/BnSmartForm/index.vue +1201 -0
  102. package/packages/BnSmartForm/numberForm/index.vue +63 -0
  103. package/packages/BnSmartForm/radioForm/index.vue +72 -0
  104. package/packages/BnSmartForm/receiveForm/index.vue +112 -0
  105. package/packages/BnSmartForm/relationForm/index.vue +82 -0
  106. package/packages/BnSmartForm/scoreForm/index.vue +39 -0
  107. package/packages/BnSmartForm/selectForm/index.vue +55 -0
  108. package/packages/BnSmartForm/showValForm/index.vue +42 -0
  109. package/packages/BnSmartForm/showValForm/showValFormTable.vue +104 -0
  110. package/packages/BnSmartForm/smartFormsCommon.scss +43 -0
  111. package/packages/BnSmartForm/stringForm/index.vue +170 -0
  112. package/packages/BnVirtPopover/index.vue +319 -0
  113. package/packages/BnWebLog/BnWebLog.vue +140 -0
  114. package/packages/BnWorkSettingDrop/advancedOptions.js +112 -0
  115. package/packages/BnWorkSettingDrop/benBenAIUtil.js +89 -0
  116. package/packages/BnWorkSettingDrop/index.vue +292 -0
  117. package/packages/font/iconfont.css +243 -0
  118. package/packages/font/iconfont.ttf +0 -0
  119. package/packages/font/iconfont.woff +0 -0
  120. package/packages/font/iconfont.woff2 +0 -0
  121. package/utils/addressParse-old.js +645 -0
  122. package/utils/addressParse.js +735 -0
  123. package/utils/config.js +68 -0
  124. package/utils/index.js +1171 -0
  125. package/dist/assocTableSearch-CmzOXI5w.js +0 -349
  126. package/dist/assocTableSearch.css +0 -1
  127. package/dist/bn-bus-ui.es.js +0 -65
  128. package/dist/bn-bus-ui.umd.js +0 -49
  129. package/dist/chooseIPaasData-jkTJEMKT.js +0 -391
  130. package/dist/chooseIPaasData.css +0 -1
  131. package/dist/defaultSet-CiYuSOzT.js +0 -297
  132. package/dist/defaultSet.css +0 -1
  133. package/dist/fileFormData-D_Q1vylE.js +0 -53
  134. package/dist/formItemFooter-BpnVUUgV.js +0 -108
  135. package/dist/formItemFooter.css +0 -1
  136. package/dist/funcExprDialog-BMc-n5FL.js +0 -139
  137. package/dist/funcExprDialog.css +0 -1
  138. package/dist/index-8GQJARcF.js +0 -44
  139. package/dist/index-8apT0r8m.js +0 -66
  140. package/dist/index-BOFu3qAH.js +0 -183
  141. package/dist/index-BSKXuSid.js +0 -89
  142. package/dist/index-BhYvDd_Q.js +0 -45
  143. package/dist/index-BhqkeVFc.js +0 -45
  144. package/dist/index-CK7_Ou7F.js +0 -89
  145. package/dist/index-Cfb8D3Fg.js +0 -58
  146. package/dist/index-D1fGD0mX.js +0 -51
  147. package/dist/index-DE_eQGbT.js +0 -746
  148. package/dist/index-DfgiBqzS.js +0 -221
  149. package/dist/index-Dobi0ms9.js +0 -66
  150. package/dist/index-DuyQNxe0.js +0 -118
  151. package/dist/index-DxpJkrN7.js +0 -64
  152. package/dist/index-FGHeG46m.js +0 -109
  153. package/dist/index-P2M7CUTe.js +0 -178
  154. package/dist/index-xCz2zysE.js +0 -135
  155. package/dist/index.css +0 -1
  156. package/dist/index2.css +0 -1
  157. package/dist/index3.css +0 -1
  158. package/dist/index4.css +0 -1
  159. package/dist/index5.css +0 -1
  160. package/dist/index6.css +0 -1
  161. package/dist/index7.css +0 -1
  162. package/dist/install--7IU60oV.js +0 -23103
  163. package/dist/install.css +0 -1
  164. package/dist/setOption-DehYZpZr.js +0 -329
  165. package/dist/setOption.css +0 -1
  166. package/dist/setRelationOption-BL-AFUoF.js +0 -5217
  167. package/dist/setRelationOption.css +0 -1
@@ -0,0 +1,314 @@
1
+ <template>
2
+ <el-dialog v-model="visible" title="设置数据筛选" top="20px" :close-on-click-modal="false" width="720"
3
+ :destroy-on-close="true" append-to-body>
4
+ <div class="assocTableSearch" v-loading="loading">
5
+ <div class="w-flex-between w-flex-center">
6
+ <div class="w-flex-center w-flex-column-gap4">
7
+ <div class="w-line-height20">设置筛选条件</div>
8
+ <div class="w-color-gray w-line-height20">
9
+ (满足以下所有筛选条件时,触发)
10
+ </div>
11
+ </div>
12
+ <div class="w-flex-center w-flex-column-gap10">
13
+ <el-button link type="primary" @click="addRule">
14
+ <span class="bnUIcon bnUIcon-add w-padding-right2 w-font14"></span>添加条件
15
+ </el-button>
16
+ </div>
17
+ </div>
18
+ <div class="w-margin-top10">
19
+ <template v-for="(item,index) in ruleData.columnRules" :key="index" class="w-margin-top10">
20
+ <BnCondition v-model="ruleData.columnRules[index]" :columnList="assocTableColumns"
21
+ :option-props="{id: 'columnCode',name: 'name',parentCode: 'parentCode',
22
+ valueType: 'toColumnType',subType: 'subType',searchType: 'searchType',value: 'value'}"
23
+ :other-column-list="otherColumns" allowDel :postFunc="postFunc" allowSelectColumn
24
+ @del="ruleData.columnRules.splice(index,1)"/>
25
+ </template>
26
+ <div class="w-empty" v-if="ruleData.columnRules.length == 0">
27
+ 请设置筛选条件
28
+ </div>
29
+ </div>
30
+ <div class="w-flex-center w-flex-column-gap4 w-margin-top10">
31
+ <div class="w-line-height20">筛选结果</div>
32
+ <div class="w-color-gray w-line-height20">
33
+ (当筛选出来数据后,如何处理)
34
+ </div>
35
+ </div>
36
+ <div class="w-flex-center w-flex-wrap w-flex-column-gap25 w-margin-top10">
37
+ <div class=" w-flex-center">
38
+ <BnCheck v-model="ruleData.subType" label="单条数据时自动填充" :true-data="0" :false-data="1"></BnCheck>
39
+ <el-tooltip class="item" effect="dark" content="当筛选结果只有一条数据的时候,才进行填充数据到子表单中。"
40
+ placement="top">
41
+ <span class="bnUIcon bnUIcon-question w-color-orange"></span>
42
+ </el-tooltip>
43
+ </div>
44
+ <div class=" w-flex-center">
45
+ <BnCheck v-model="ruleData.subType" label="多条数据时自动填充" :true-data="1" :false-data="0"></BnCheck>
46
+ <el-tooltip class="item" effect="dark" content="当筛选结果不止一条数据的时候,才进行填充数据到子表单中。"
47
+ placement="top">
48
+ <span class="bnUIcon bnUIcon-question w-color-orange"></span>
49
+ </el-tooltip>
50
+ </div>
51
+ <div class=" w-flex-center">
52
+ <BnCheck v-model="ruleData.dataForceFill" label="数据强制填充" :true-data="1" :false-data="0"></BnCheck>
53
+ <el-tooltip class="item" effect="dark"
54
+ content="如果筛选出来数据后,子表单已经有数据存在,则覆盖子表单的原始数据。如果不勾选,则不覆盖。"
55
+ placement="top">
56
+ <span class="bnUIcon bnUIcon-question w-color-orange"></span>
57
+ </el-tooltip>
58
+ </div>
59
+ <div class=" w-flex-center w-margin-top10">
60
+ <BnCheck v-model="ruleData.dataForceClear" label="筛选结果为空时,清空子表单" :true-data="1"
61
+ :false-data="0"></BnCheck>
62
+ <el-tooltip class="item" effect="dark"
63
+ content="如果筛选时没有数据,子表单本身却有数据存在,则清空子表单的原始数据。" placement="top">
64
+ <span class="bnUIcon bnUIcon-question w-color-orange"></span>
65
+ </el-tooltip>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ <template #footer>
70
+ <div class="w-flex-right">
71
+ <el-button @click="visible = false">取消</el-button>
72
+ <el-button type="primary" :loading="loading" @click="saveRule">确认</el-button>
73
+ </div>
74
+ </template>
75
+ </el-dialog>
76
+ </template>
77
+
78
+ <script>
79
+ import {cloneDeep} from "lodash";
80
+ import {tidyRuleComponents} from "../../../../utils/index.js";
81
+
82
+ const ruleBase = {
83
+ id: '',//规则id
84
+ type: 13,//规则类型
85
+ status: 1,//开启
86
+ ruleSense: '',//组件id
87
+ subType: 0,// 筛选出单条数据时是否自动填充 1是 0否
88
+ dataForceFill: 0,// 数据强制填充
89
+ dataForceClear: 0,// 子表单筛选条件查询无数据清空 1:是 0:否 没有查询到数据,会重置筛选结果
90
+ columnRules: []
91
+ }
92
+ export default {
93
+ name: "assocTableSearch",
94
+ props: {
95
+ columnData: {
96
+ type: Object,
97
+ default: () => ({}),
98
+ },
99
+ columnList: {
100
+ type: Object,
101
+ default: () => ({}),
102
+ },
103
+ postFunc: Function,
104
+ extendPost: Object,
105
+ },
106
+ data() {
107
+ return {
108
+ visible: false,
109
+ rulePost: {
110
+ appId: '',
111
+ tableId: '',
112
+ columnRuleList: [
113
+ {
114
+ id: '',//规则id
115
+ type: 13,//规则类型
116
+ status: 1,//开启
117
+ ruleSense: '',//组件id
118
+ subType: 0,// 筛选出单条数据时是否自动填充 1是 0否
119
+ dataForceFill: 0,// 数据强制填充
120
+ dataForceClear: 0,// 子表单筛选条件查询无数据清空 1:是 0:否 没有查询到数据,会重置筛选结果
121
+ columnRules: []
122
+ }
123
+ ]
124
+ },
125
+ ruleData: cloneDeep(ruleBase),
126
+ loading: false,
127
+ // 关联表的组件列表
128
+ assocTableColumns: [],
129
+ // 规则中,选择其他组件时,使用当前子表单所在的表的组件
130
+ otherColumns: [],
131
+ }
132
+ },
133
+ methods: {
134
+ async open() {
135
+ this.ruleData = cloneDeep(ruleBase)
136
+ this.ruleData.ruleSense = this.columnData.id;
137
+ this.visible = true;
138
+ this.loading = true;
139
+ this.otherColumns = tidyRuleComponents(this.columnList)
140
+ await this.getRuleData();
141
+ if (this.assocTableColumns.length == 0) {
142
+ await this.getComList()
143
+ }
144
+ this.loading = false;
145
+ },
146
+ /**
147
+ * 获取表下的组件
148
+ * */
149
+ async getComList() {
150
+ let res = await this.postFunc(`/biztable/definition/table?tableCode=${this.columnData.insideDataSourceInfo.tableCode}&columns=1`, null, 'get')
151
+ if (!res.code && res.data) {
152
+ this.assocTableColumns = tidyRuleComponents(res.data.columns, res.data.appId, res.data.tableId)
153
+ }
154
+ },
155
+ /**
156
+ * 获取规则
157
+ * */
158
+ async getRuleData() {
159
+ let res = await this.postFunc(`/v2/columnRule/getColumnRule`, {
160
+ appId: this.extendPost.appId,
161
+ projectId: this.extendPost.tableId,
162
+ ruleSense: this.columnData.id,
163
+ type: 13
164
+ })
165
+ if (!res.code && res.data && res.data.columnRuleList?.length) {
166
+ let rule = res.data.columnRuleList[0] || {}
167
+ this.ruleData = {
168
+ id: rule.id,//规则id
169
+ type: 13,//规则类型
170
+ status: 1,//开启
171
+ ruleSense: rule.ruleSense,//组件id
172
+ subType: rule.subType,// 筛选出单条数据时是否自动填充 1是 0否
173
+ dataForceFill: rule.dataForceFill,// 数据强制填充
174
+ dataForceClear: rule.dataForceClear,// 子表单筛选条件查询无数据清空 1:是 0:否 没有查询到数据,会重置筛选结果
175
+ columnRules: rule.columnRules || []
176
+ }
177
+ }
178
+ },
179
+ /**
180
+ * 添加规则
181
+ * */
182
+ addRule() {
183
+ if (this.ruleData.columnRules.length >= 10) {
184
+ this.$message.closeAll()
185
+ this.$message.warning('最多只能添加十条规则')
186
+ } else {
187
+ this.ruleData.columnRules.push({
188
+ columnCode: '',
189
+ parentCode: '',
190
+ id: '', // 组件Id
191
+ behaviorType: '', // 组件类型
192
+ searchType: '',//比较类型
193
+ parentId: '',//当是子表单组件时,这里写子表单的组件id
194
+ toColumnType: '',//对比组件类型 0自定义填写 1.其他组件 2.当前组件选项
195
+ value: '', // 匹配值,
196
+ })
197
+ }
198
+ },
199
+ /**
200
+ * 保存规则
201
+ * */
202
+ saveRule() {
203
+ this.loading = true;
204
+
205
+ // 定义不需要值校验的 searchType(为空、不为空、有数据、无数据等)
206
+ const SEARCH_TYPES_NO_VALUE_REQUIRED = ['9', '10', '14', '15'];
207
+ // 定义自定义填写类型
208
+ const TO_COLUMN_TYPE_CUSTOM = '0';
209
+ // 定义附件类型
210
+ const BEHAVIOR_TYPE_ATTACHMENT = 10;
211
+
212
+ /**
213
+ * 检查是否需要值校验
214
+ */
215
+ const needValueValidation = (searchType) => {
216
+ return !SEARCH_TYPES_NO_VALUE_REQUIRED.includes(searchType);
217
+ };
218
+
219
+ /**
220
+ * 检查值是否为空
221
+ */
222
+ const isValueEmpty = (value) => {
223
+ if (!value) return true;
224
+ if (typeof value === 'string' && (value === '{}' || value === '[]')) return true;
225
+ return false;
226
+ };
227
+
228
+ /**
229
+ * 标准化值为字符串
230
+ */
231
+ const normalizeValue = (option) => {
232
+ const {toColumnType, searchType, behaviorType, value} = option;
233
+
234
+ // 附件类型需要转换
235
+ if (behaviorType === BEHAVIOR_TYPE_ATTACHMENT) {
236
+ return typeof value === 'object' ? JSON.stringify(value) : value;
237
+ }
238
+
239
+ // 不需要值校验的类型,不需要转换
240
+ if (!needValueValidation(searchType)) {
241
+ return value;
242
+ }
243
+
244
+ // 非自定义填写类型需要转换
245
+ if (toColumnType !== TO_COLUMN_TYPE_CUSTOM) {
246
+ return typeof value === 'object' ? JSON.stringify(value) : value;
247
+ }
248
+
249
+ // 其他情况,确保是字符串
250
+ return typeof value === 'object' ? JSON.stringify(value) : value;
251
+ };
252
+
253
+ let errorMsg = '';
254
+ let autoMemoRule = [];
255
+ let ruleList = cloneDeep(this.ruleData.columnRules);
256
+
257
+ for (let i = 0; i < ruleList.length; i++) {
258
+ let option = ruleList[i];
259
+ let ruleIndex = i + 1;
260
+ // 1. 校验必填字段
261
+ if (!option.id || !option.searchType || !option.toColumnType) {
262
+ errorMsg = `请设置第${ruleIndex}个条件选项不能为空`;
263
+ break;
264
+ }
265
+
266
+ // 2. 校验值不能为空(仅针对需要值的 searchType)
267
+ if (needValueValidation(option.searchType)) {
268
+ if (isValueEmpty(option.value)) {
269
+ errorMsg = `请设置${option.name || '第' + ruleIndex + '个条件'}组件的值`;
270
+ break;
271
+ }
272
+ }
273
+
274
+ // 3. 标准化值为字符串
275
+ option.value = normalizeValue(option);
276
+
277
+ autoMemoRule.push(option);
278
+ }
279
+
280
+ if (errorMsg) {
281
+ this.$message.warning(errorMsg);
282
+ this.loading = false;
283
+ return false;
284
+ }
285
+ let postData = {
286
+ "projectId": this.extendPost.tableId, // 工作表ID
287
+ "appId": this.extendPost.appId, // 小程序ID
288
+ columnRuleList: JSON.stringify([{
289
+ ...this.ruleData,
290
+ columnRules: JSON.stringify(autoMemoRule),
291
+ }])
292
+ }
293
+ this.postFunc('/v2/columnRule/operationColumnRule', postData).then(res => {
294
+ this.loading = false;
295
+ if (!res.code) {
296
+ // 小程序历史字段,不设置无法填充
297
+ this.columnData.extraInfo.subSearchColumns = [];
298
+ //更新当前组件数据是否强制填充
299
+ this.columnData.extraInfo.dataForceFill = this.ruleData.dataForceFill;
300
+ this.columnData.extraInfo.dataForceClear = this.ruleData.dataForceClear;
301
+ this.$message.success('保存成功');
302
+ this.visible = false
303
+ }
304
+ })
305
+ }
306
+ }
307
+ }
308
+ </script>
309
+ <style lang="scss" scoped>
310
+ .assocTableSearch {
311
+ max-height: calc(100vh - 200px);
312
+ overflow-y: auto;
313
+ }
314
+ </style>
@@ -0,0 +1,243 @@
1
+ <template>
2
+ <div class="childrenSetOpt">
3
+ <columnConfigDialog ref="columnConfigDialog" v-bind="$props" @saveOver="editChildColumn"
4
+ is-children></columnConfigDialog>
5
+ <!-- <assocTable ref="assocTable" v-bind="$props"></assocTable>-->
6
+ <assocTableSearch ref="assocTableSearch" v-bind="$props"></assocTableSearch>
7
+ <!-- 顶部操作栏 -->
8
+ <div class="childrenSetOpt-top w-flex-center w-flex-between">
9
+ <div class="w-flex-center ">
10
+ <div class="childrenSetOpt-top-title">子组件设置</div>
11
+ <div class="w-color-orange">
12
+ (共{{columnData.moduleDefinition.length}}个子组件)
13
+ </div>
14
+ </div>
15
+ <div class="w-flex-center w-flex-column-gap5">
16
+ <div v-if="!hideFiled.includes('moduleDefinition')">
17
+ <el-button link type="primary" @click="$refs.columnConfigDialog.open()">
18
+ <span class="bnUIcon bnUIcon-addFile w-padding-right2 w-font14"></span>添加
19
+ </el-button>
20
+ </div>
21
+ <!-- <div>-->
22
+ <!-- <el-button link type="primary" @click="$refs.assocTable.open()">-->
23
+ <!-- <span class="bnUIcon bnUIcon-linkTable w-padding-right2"></span>关联表数据-->
24
+ <!-- </el-button>-->
25
+ <!-- </div>-->
26
+ <div v-if="columnData.insideDataSourceInfo?.type == 'group'">
27
+ <el-button link type="primary" @click="$refs.assocTableSearch.open()">
28
+ <span class="bnUIcon bnUIcon-search w-padding-right2 "></span>
29
+ 设置数据筛选
30
+ </el-button>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ <!-- 选项列表 -->
35
+ <el-scrollbar max-height="380px" class="childrenSetOpt-list" ref="optionList">
36
+ <draggable v-model="columnData.moduleDefinition" item-key="id"
37
+ handle=".childrenSetOpt-list-item-drag" ghost-class="ghost-item"
38
+ chosen-class="chosen-item" animation="300" tag="div">
39
+ <template #item="{element, index}">
40
+ <div class="childrenSetOpt-list-item" :class="[componentWidth>400?'two':'one']">
41
+ <div class="w-flex-between w-flex-center childrenSetOpt-list-item-content">
42
+ <div class="childrenSetOpt-list-item-drag w-default-hover">
43
+ <span class="bnUIcon bnUIcon-move"></span>
44
+ </div>
45
+ <div class="w-font14 w-color-black6 childrenSetOpt-list-item-text w-text-over-two" :title="element.name">
46
+ <el-tooltip content="来自关联表组件" placement="top"
47
+ v-if="element.insideDataSourceInfo?.type == 'group'">
48
+ <span class="bnUIcon bnUIcon-linkTable w-color-violet" title=""></span>
49
+ </el-tooltip>
50
+ {{ element.name }}
51
+ </div>
52
+ </div>
53
+ <div class="w-flex-center">
54
+ <div class="w-color-purple childrenSetOpt-list-item-memo">
55
+ {{ columnTypeMap[element.behaviorType] }}
56
+ <span class="w-margin-left4" v-if="!isEmpty(element.defaultInfo)">已配默认值</span>
57
+ <span class="w-margin-left4" v-if="element.extraInfo.exprId">已配函数表达式</span>
58
+ </div>
59
+ </div>
60
+ <div class="w-flex-right w-flex-center w-flex-column-gap8">
61
+ <span class="bnUIcon bnUIcon-setting w-color-orange"
62
+ @click="$refs.columnConfigDialog.open(element)"></span>
63
+ <span class="bnUIcon bnUIcon-delete w-color-orange" v-if="!hideFiled.includes('moduleDefinition')"
64
+ @click="deleteOption(index, element.name)"></span>
65
+ </div>
66
+ </div>
67
+ </template>
68
+ </draggable>
69
+ </el-scrollbar>
70
+ <div class="w-empty" v-if="!columnData.moduleDefinition || columnData.moduleDefinition.length == 0">没有子组件
71
+ </div>
72
+ </div>
73
+ </template>
74
+
75
+ <script>
76
+ import {cloneDeep, isEmpty} from "lodash";
77
+ import {columnTypeMap} from "../../data.js";
78
+ import {defineAsyncComponent} from "vue";
79
+
80
+ export default {
81
+ name: "childrenFormSetting",
82
+ components: {
83
+ columnConfigDialog: defineAsyncComponent(() => import("../../columnConfigDialog.vue")),
84
+ assocTableSearch: defineAsyncComponent(() => import("./assocTableSearch.vue")),
85
+ // assocTable: defineAsyncComponent(() => import("./assocTable.vue")),
86
+ },
87
+ props: {
88
+ columnData: {
89
+ type: Object,
90
+ default: () => ({}),
91
+ },
92
+ postFunc: Function, // API请求函数
93
+ extendPost: Object, // 额外的请求参数
94
+ // 以下是从父组件传入的 props
95
+ row: {
96
+ type: Number,
97
+ default: 1
98
+ },
99
+ hideFiled: {
100
+ type: Array,
101
+ default: () => []
102
+ },
103
+ columnList: {
104
+ type: Array,
105
+ default: () => []
106
+ },
107
+ disabled: Boolean,
108
+ },
109
+ data() {
110
+ return {
111
+ columnTypeMap,
112
+ componentWidth: 0, // 组件宽度
113
+ };
114
+ },
115
+ mounted() {
116
+ // 计算组件宽度
117
+ this.calculateWidth();
118
+ },
119
+ methods: {
120
+ isEmpty,
121
+ /**
122
+ * 计算组件宽度
123
+ */
124
+ calculateWidth() {
125
+ this.$nextTick(() => {
126
+ const el = this.$el;
127
+ if (el) {
128
+ this.componentWidth = el.offsetWidth;
129
+ }
130
+ });
131
+ },
132
+ /**
133
+ * 滚动到列表底部
134
+ */
135
+ scrollToBottom() {
136
+ this.$nextTick(() => {
137
+ const scrollbar = this.$refs.optionList;
138
+ if (scrollbar && scrollbar.$el) {
139
+ const wrap = scrollbar.$el.querySelector('.el-scrollbar__wrap');
140
+ if (wrap) {
141
+ wrap.scrollTop = wrap.scrollHeight;
142
+ }
143
+ }
144
+ });
145
+ },
146
+
147
+ /**
148
+ * 编辑或者新增组件
149
+ */
150
+ async editChildColumn(column) {
151
+ if (column.columnCode) {
152
+ for (let i in this.columnData.moduleDefinition) {
153
+ if (this.columnData.moduleDefinition[i].columnCode == column.columnCode) {
154
+ this.columnData.moduleDefinition[i] = cloneDeep(column)
155
+ }
156
+ }
157
+ } else {
158
+ const appId = this.extendPost?.appId || 'noApp';
159
+ const res = await this.postFunc(`/v2/projects/customId/1/${appId}`, null, 'get');
160
+ if (!res.code) {
161
+ this.columnData.moduleDefinition.push(
162
+ {...column, columnCode: `cc_${res.data[0]}`}
163
+ )
164
+ this.scrollToBottom();
165
+ }
166
+ }
167
+ },
168
+ /**
169
+ * 删除选项
170
+ */
171
+ deleteOption(index) {
172
+ this.columnData.moduleDefinition.splice(index, 1);
173
+ },
174
+ },
175
+ };
176
+ </script>
177
+ <style scoped lang="scss">
178
+ .childrenSetOpt {
179
+ // 顶部操作栏
180
+ &-top {
181
+ height: 32px;
182
+ font-size: 14px;
183
+
184
+ &-title {
185
+ font-weight: 500;
186
+ }
187
+ }
188
+
189
+ // 选项列表
190
+ &-list {
191
+ margin-top: 10px;
192
+ padding-right: 10px;
193
+
194
+ & .el-scrollbar__view > div {
195
+ display: flex;
196
+ flex-wrap: wrap;
197
+ gap: 10px;
198
+ }
199
+
200
+ &-item {
201
+ position: relative;
202
+ cursor: pointer;
203
+ background: #ebeef5;
204
+ border-radius: 6px;
205
+ padding: 10px;
206
+
207
+ &.two {
208
+ width: calc(50% - 5px);
209
+ }
210
+
211
+ &.one {
212
+ width: 100%;
213
+ }
214
+
215
+ &:hover {
216
+ background: #E4E7ED;
217
+ box-shadow: 0px 0px 6px rgba(0, 0, 0, .12);;
218
+ }
219
+
220
+ &-content {
221
+ flex: 1;
222
+ min-width: 0; // 重要:使弹性子项能够缩小
223
+ overflow: hidden;
224
+ }
225
+
226
+ &-text {
227
+ flex: 1;
228
+ min-width: 0;
229
+ }
230
+
231
+ &-memo {
232
+ font-size: 12px;
233
+ padding: 12px 0 4px 22px;
234
+ }
235
+
236
+ &-drag {
237
+ padding-right: 8px;
238
+ flex-shrink: 0; // 防止拖动图标被压缩
239
+ }
240
+ }
241
+ }
242
+ }
243
+ </style>
@@ -0,0 +1,114 @@
1
+ <template>
2
+ <div class="defaultSet">
3
+ <div class="w-default-wrap" v-if="!columnInfo.behaviorType">
4
+ <el-input v-model="columnInfo.defaultInfo" placeholder="设置组件默认值" clearable :disabled="disabled"/>
5
+ </div>
6
+ <div class="w-default-wrap" v-if="columnInfo.behaviorType == 1">
7
+ <stringDefault v-model="columnInfo" :disabled="disabled" :columnList="columnList"></stringDefault>
8
+ </div>
9
+
10
+ <div class="w-default-wrap" v-if="columnInfo.behaviorType == 2">
11
+ <BnInpNum v-model="columnInfo.defaultInfo" :disabled="disabled" :precision="columnInfo.extraInfo?.valueType"></BnInpNum>
12
+ </div>
13
+ <div class="w-default-wrap" v-if="[3,4,5].includes(columnInfo.behaviorType)">
14
+ <BnSelect v-model="columnInfo.defaultInfo" :options="columnInfo.moduleDefinition" :multiple="columnInfo.behaviorType == 5"
15
+ :disabled="disabled" :optionProps="{value:'code',label:'title'}" :pageProps="{pageNum: 'pageNo',pageSize: 'pageSize',}"
16
+ :pathUrl="columnInfo.pathUrl" :postData="columnInfo.postData" :postFunc="postFunc"
17
+ :placeholder="'请选择'" clearable filterable>
18
+ </BnSelect>
19
+ </div>
20
+ <div class="w-default-wrap" v-if="columnInfo.behaviorType == 6 || columnInfo.behaviorType == 20">
21
+ <BnCascader v-model="columnInfo.defaultInfo"
22
+ :postFunc="postFunc" :path-url="columnInfo.pathUrl" collapseTags
23
+ :post-data="columnInfo.postData" remote-mode="tree"
24
+ :optionProps="{value:'code',label:'title'}" :label-in-value="columnInfo.behaviorType == 6"
25
+ :options="filteredOptions" hide-check-to-last
26
+ :multiple="columnInfo.behaviorType == 20" clearable/>
27
+ </div>
28
+ <div class="w-default-wrap" v-if="columnInfo.behaviorType == 7">
29
+ <el-date-picker style="width: 100%" :disabled="disabled" v-model="columnInfo.defaultInfo" type="datetime" placement="bottom-start"
30
+ format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"></el-date-picker>
31
+ </div>
32
+ <div class="w-default-wrap" v-if="columnInfo.behaviorType == 8">
33
+ <BnDatePicker v-model="columnInfo.defaultInfo" type="datetimerange" :disabled="disabled"></BnDatePicker>
34
+
35
+ </div>
36
+ </div>
37
+ </template>
38
+ <script>
39
+ import stringDefault from "./stringDefault.vue";
40
+ import {cloneDeep} from "lodash";
41
+ export default {
42
+ name: "defaultSet",
43
+ components:{stringDefault},
44
+ props: {
45
+ //最终选中的value
46
+ modelValue: {
47
+ type: Object,
48
+ default() {
49
+ return {}
50
+ }
51
+ },
52
+ // 组件列表
53
+ columnList: {
54
+ type: Array,
55
+ default() {
56
+ return []
57
+ }
58
+ },
59
+ // 是否禁用
60
+ disabled: Boolean,
61
+ postFunc: Function,
62
+ extendPost: Object,
63
+ },
64
+ methods: {},
65
+ computed: {
66
+ columnInfo: {
67
+ get() {
68
+ return this.modelValue;
69
+ },
70
+ set(val) {
71
+ this.$emit("update:modelValue", val);
72
+ },
73
+ },
74
+ /**
75
+ * 过滤后的选项列表,只保留columnStatus等于1的项
76
+ */
77
+ filteredOptions() {
78
+ if (!this.columnInfo.moduleDefinition || !this.columnInfo.moduleDefinition.optionList) {
79
+ return [];
80
+ }
81
+
82
+ // 递归过滤树形结构
83
+ const filterTree = (nodes) => {
84
+ if (!Array.isArray(nodes)) return [];
85
+
86
+ return nodes.filter(node => {
87
+ // 检查当前节点的columnStatus
88
+ if (node.columnStatus != 1) {
89
+ return false;
90
+ }
91
+
92
+ // 如果有子节点,递归过滤子节点
93
+ if (node.children && Array.isArray(node.children)) {
94
+ node.children = filterTree(node.children);
95
+ }
96
+
97
+ return true;
98
+ });
99
+ };
100
+ let options = cloneDeep(this.columnInfo.moduleDefinition.optionList)
101
+ return filterTree(options);
102
+ },
103
+ },
104
+ }
105
+ </script>
106
+
107
+
108
+
109
+ <style scoped lang="scss">
110
+ .defaultSet{
111
+ position: relative;
112
+ width: 100%;
113
+ }
114
+ </style>