@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,401 @@
1
+ <template>
2
+ <div class="BnImportTemplate-fields" :class="{ 'is-no-key': importType !== 1 && importType !== 3 }">
3
+ <el-input
4
+ v-model="filterText"
5
+ class="BnImportTemplate-field-filter"
6
+ clearable
7
+ placeholder="请输入字段名称"
8
+ />
9
+ <div class="BnImportTemplate-fields-content">
10
+ <div class="BnImportTemplate-fields-header">
11
+ <div class="BnImportTemplate-field-name">字段名称</div>
12
+ <div class="BnImportTemplate-field-show">
13
+ <BnCheck v-model="showAll" label="模板显示" @change="checkAllShow" />
14
+ <el-tooltip content="不显示的字段,导入时会忽略该字段" placement="top">
15
+ <span class="bnUIcon bnUIcon-question BnImportTemplate-help"></span>
16
+ </el-tooltip>
17
+ </div>
18
+ <div class="BnImportTemplate-field-other">
19
+ <BnCheck v-model="checkMustAll" label="必填" @change="checkAllCheckMust" />
20
+ </div>
21
+ <div v-show="importType === 1 || importType === 3" class="BnImportTemplate-field-other">
22
+ <BnCheck v-model="keyAll" label="主键" @change="checkAllKey" />
23
+ <el-tooltip
24
+ content="导入创建时以所选主键进行工单合并;导入更新时以主键ID进行工单合并;子表单、子订单不可选为主键"
25
+ placement="top"
26
+ >
27
+ <span class="bnUIcon bnUIcon-question BnImportTemplate-help"></span>
28
+ </el-tooltip>
29
+ </div>
30
+ </div>
31
+ <el-scrollbar class="BnImportTemplate-fields-scrollbar">
32
+ <div class="BnImportTemplate-fields-content-view">
33
+ <div v-for="item in columns" :key="item.columnId">
34
+ <div
35
+ v-show="(!filterText || item.columnName.indexOf(filterText) !== -1) && !(importType === 1 && item.columnId === 0)"
36
+ class="BnImportTemplate-field-row"
37
+ >
38
+ <div
39
+ class="BnImportTemplate-field-name"
40
+ :class="{ 'is-leaf': item.behaviorType !== 13 }"
41
+ @click="showOrCloseChildList(item)"
42
+ >
43
+ <span v-if="item.behaviorType === 13" class="BnImportTemplate-expand">
44
+ {{ item.childOpen ? '▾' : '▸' }}
45
+ </span>
46
+ {{ item.columnName }}
47
+ </div>
48
+ <div class="BnImportTemplate-field-show">
49
+ <BnCheck
50
+ v-model="item.show"
51
+ :disabled="importType !== 1 && item.columnId === 0"
52
+ @change="itemCheckChange(item, 'show')"
53
+ />
54
+ </div>
55
+ <div class="BnImportTemplate-field-other">
56
+ <BnCheck
57
+ v-model="item.checkMust"
58
+ :disabled="importType !== 1 && item.columnId === 0"
59
+ @change="itemCheckChange(item, 'checkMust')"
60
+ />
61
+ </div>
62
+ <div v-show="importType === 1 || importType === 3" class="BnImportTemplate-field-other">
63
+ <BnCheck
64
+ v-model="item.key"
65
+ :disabled="item.behaviorType === 13 || (importType !== 1 && item.columnId === 0) || !mergeCells"
66
+ @change="itemCheckChange(item, 'key')"
67
+ />
68
+ </div>
69
+ </div>
70
+ <div v-if="item.childColumns && item.childOpen">
71
+ <div
72
+ v-for="childItem in item.childColumns"
73
+ :key="childItem.columnId"
74
+ class="BnImportTemplate-field-row is-child"
75
+ >
76
+ <div class="BnImportTemplate-field-name">{{ childItem.columnName }}</div>
77
+ <div class="BnImportTemplate-field-show">
78
+ <BnCheck v-model="childItem.show" @change="itemCheckChange(childItem, 'show')" />
79
+ </div>
80
+ <div class="BnImportTemplate-field-other">
81
+ <BnCheck v-model="childItem.checkMust" @change="itemCheckChange(childItem, 'checkMust')" />
82
+ </div>
83
+ <div v-show="importType === 1 || importType === 3" class="BnImportTemplate-field-other">
84
+ <BnCheck v-model="childItem.key" disabled />
85
+ </div>
86
+ </div>
87
+ </div>
88
+ </div>
89
+ </div>
90
+ </el-scrollbar>
91
+ </div>
92
+ </div>
93
+ </template>
94
+
95
+ <script>
96
+ // 字段配置区只负责渲染字段树和收集用户操作。
97
+ // “模板显示/必填/主键”的父子联动规则在父组件中处理,避免这里同时承担复杂业务状态计算。
98
+ export default {
99
+ name: "TemplateFieldsConfig",
100
+ props: {
101
+ // 父组件维护的字段配置树,包含普通字段和子表单 childColumns。
102
+ columns: {
103
+ type: Array,
104
+ default() {
105
+ return [];
106
+ },
107
+ },
108
+ // 字段名称过滤关键字,对应顶部搜索框。
109
+ filterVar: {
110
+ type: String,
111
+ default: "",
112
+ },
113
+ // “模板显示”表头复选框状态。
114
+ allShow: {
115
+ type: Boolean,
116
+ default: false,
117
+ },
118
+ // “必填”表头复选框状态。
119
+ allCheckMust: {
120
+ type: Boolean,
121
+ default: false,
122
+ },
123
+ // “主键”表头复选框状态。
124
+ allKey: {
125
+ type: Boolean,
126
+ default: false,
127
+ },
128
+ // 导入方式:1 新增、2 更新、3 更新和新增;用于控制主键ID和主键列可编辑状态。
129
+ importType: {
130
+ type: Number,
131
+ default: 1,
132
+ },
133
+ // 是否开启多行合并导入;关闭时主键列不可勾选。
134
+ mergeCells: {
135
+ type: Boolean,
136
+ default: false,
137
+ },
138
+ },
139
+ emits: [
140
+ "update:filterVar",
141
+ "update:allShow",
142
+ "update:allCheckMust",
143
+ "update:allKey",
144
+ "checkAllShow",
145
+ "checkAllCheckMust",
146
+ "checkAllKey",
147
+ "itemCheckChange",
148
+ "toggleChild",
149
+ ],
150
+ computed: {
151
+ /**
152
+ * 字段过滤关键字的 v-model 代理,输入框变化时同步给父组件。
153
+ *
154
+ * @return 当前字段过滤关键字。
155
+ */
156
+ filterText: {
157
+ get() {
158
+ return this.filterVar;
159
+ },
160
+ set(val) {
161
+ this.$emit("update:filterVar", val);
162
+ },
163
+ },
164
+ /**
165
+ * “模板显示”表头全选状态代理,真实批量逻辑由父组件执行。
166
+ *
167
+ * @return 当前“模板显示”表头是否全选。
168
+ */
169
+ showAll: {
170
+ get() {
171
+ return this.allShow;
172
+ },
173
+ set(val) {
174
+ this.$emit("update:allShow", val);
175
+ },
176
+ },
177
+ /**
178
+ * “必填校验”表头全选状态代理,真实批量逻辑由父组件执行。
179
+ *
180
+ * @return 当前“必填校验”表头是否全选。
181
+ */
182
+ checkMustAll: {
183
+ get() {
184
+ return this.allCheckMust;
185
+ },
186
+ set(val) {
187
+ this.$emit("update:allCheckMust", val);
188
+ },
189
+ },
190
+ /**
191
+ * “相同合并主键”表头全选状态代理,真实批量逻辑由父组件执行。
192
+ *
193
+ * @return 当前“相同合并主键”表头是否全选。
194
+ */
195
+ keyAll: {
196
+ get() {
197
+ return this.allKey;
198
+ },
199
+ set(val) {
200
+ this.$emit("update:allKey", val);
201
+ },
202
+ },
203
+ },
204
+ methods: {
205
+ /**
206
+ * 通知父组件批量切换所有字段的“模板显示”状态。
207
+ *
208
+ * @return 无返回值。
209
+ */
210
+ checkAllShow() {
211
+ this.$emit("checkAllShow");
212
+ },
213
+ /**
214
+ * 通知父组件批量切换所有字段的“必填校验”状态。
215
+ *
216
+ * @return 无返回值。
217
+ */
218
+ checkAllCheckMust() {
219
+ this.$emit("checkAllCheckMust");
220
+ },
221
+ /**
222
+ * 通知父组件批量切换所有可选字段的“相同合并主键”状态。
223
+ *
224
+ * @return 无返回值。
225
+ */
226
+ checkAllKey() {
227
+ this.$emit("checkAllKey");
228
+ },
229
+ /**
230
+ * 将单个字段的勾选变化转发给父组件处理父子联动和表头全选状态。
231
+ *
232
+ * @param item 当前发生勾选变化的字段配置项。
233
+ * @param type 勾选类型,可取 show、checkMust、key。
234
+ * @return 无返回值。
235
+ */
236
+ itemCheckChange(item, type) {
237
+ this.$emit("itemCheckChange", item, type);
238
+ },
239
+ /**
240
+ * 通知父组件展开或收起当前子表单字段列表。
241
+ *
242
+ * @param item 当前点击的字段配置项。
243
+ * @return 无返回值。
244
+ */
245
+ showOrCloseChildList(item) {
246
+ this.$emit("toggleChild", item);
247
+ },
248
+ },
249
+ };
250
+ </script>
251
+
252
+ <style scoped lang="scss">
253
+ .BnImportTemplate {
254
+ &-fields {
255
+ --BnImportTemplate-fields-grid: minmax(220px, 1fr) 128px 128px 128px;
256
+
257
+ padding: 12px 14px 14px;
258
+ border: 1px solid #e6edf5;
259
+ border-radius: 6px;
260
+ background: linear-gradient(180deg, #fbfdff 0%, #ffffff 42%);
261
+ box-shadow: 0 8px 24px rgba(31, 45, 61, 0.06);
262
+
263
+ &.is-no-key {
264
+ --BnImportTemplate-fields-grid: minmax(220px, 1fr) 128px 128px;
265
+ }
266
+ }
267
+
268
+ &-field-filter {
269
+ max-width: 360px;
270
+ height: 32px;
271
+ margin-bottom: 16px;
272
+
273
+ :deep(.el-input__wrapper) {
274
+ border-radius: 3px;
275
+ box-shadow: 0 0 0 1px #dfe6ee inset;
276
+ }
277
+
278
+ :deep(.el-input__wrapper.is-focus) {
279
+ box-shadow: 0 0 0 1px #409eff inset;
280
+ }
281
+ }
282
+
283
+ &-fields-header,
284
+ &-field-row {
285
+ display: grid;
286
+ grid-template-columns: var(--BnImportTemplate-fields-grid);
287
+ align-items: center;
288
+ min-height: 40px;
289
+ }
290
+
291
+ &-fields-header {
292
+ border-bottom: 1px solid #dce7f3;
293
+ background: linear-gradient(180deg, #eef6ff 0%, #e7f0fb 100%);
294
+ color: #1f2d3d;
295
+ font-size: 13px;
296
+ font-weight: 600;
297
+ flex-shrink: 0;
298
+ padding-right: 14px;
299
+ }
300
+
301
+ &-fields-content {
302
+ display: flex;
303
+ flex-direction: column;
304
+ height: 400px;
305
+ border: 1px solid #dce7f3;
306
+ border-radius: 4px;
307
+ background: #fff;
308
+ overflow: hidden;
309
+ }
310
+
311
+ &-fields-scrollbar {
312
+ flex: 1;
313
+ min-height: 0;
314
+
315
+ :deep(.el-scrollbar__wrap) {
316
+ scrollbar-gutter: auto;
317
+ scrollbar-width: none;
318
+ }
319
+
320
+ :deep(.el-scrollbar__wrap::-webkit-scrollbar) {
321
+ display: none;
322
+ width: 0;
323
+ height: 0;
324
+ }
325
+
326
+ :deep(.el-scrollbar__view) {
327
+ min-width: 100%;
328
+ }
329
+ }
330
+
331
+ &-field-row {
332
+ min-height: 36px;
333
+ border-bottom: 1px solid #edf1f6;
334
+ color: #1f2d3d;
335
+ font-size: 13px;
336
+
337
+ &:hover {
338
+ background-color: #f7fbff;
339
+ }
340
+
341
+ &.is-child {
342
+ .BnImportTemplate-field-name {
343
+ padding-left: 42px;
344
+ }
345
+ }
346
+ }
347
+
348
+ &-field-name {
349
+ min-width: 0;
350
+ padding: 0 16px;
351
+ text-overflow: ellipsis;
352
+ overflow: hidden;
353
+ word-break: break-all;
354
+ white-space: nowrap;
355
+ cursor: pointer;
356
+
357
+ &.is-leaf {
358
+ padding-left: 16px;
359
+ cursor: auto;
360
+ }
361
+ }
362
+
363
+ &-field-show {
364
+ box-sizing: border-box;
365
+ display: flex;
366
+ align-items: center;
367
+ justify-content: flex-start;
368
+ min-width: 0;
369
+ padding-left: 24px;
370
+ }
371
+
372
+ &-field-other {
373
+ box-sizing: border-box;
374
+ display: flex;
375
+ align-items: center;
376
+ justify-content: flex-start;
377
+ min-width: 0;
378
+ padding-left: 24px;
379
+ }
380
+
381
+ &-expand {
382
+ display: inline-block;
383
+ width: 14px;
384
+ }
385
+
386
+ &-help {
387
+ display: inline-flex;
388
+ align-items: center;
389
+ justify-content: center;
390
+ width: 16px;
391
+ height: 16px;
392
+ color: #8a97a8;
393
+ font-size: 16px;
394
+ cursor: help;
395
+
396
+ &:hover {
397
+ color: #409eff;
398
+ }
399
+ }
400
+ }
401
+ </style>
@@ -0,0 +1,297 @@
1
+ <template>
2
+ <el-dialog
3
+ v-model="visible"
4
+ width="960px"
5
+ top="48px"
6
+ class="BnImportTemplate-dialog"
7
+ title="自定义导入模板管理"
8
+ destroy-on-close
9
+ :close-on-click-modal="false"
10
+ >
11
+ <div class="BnImportTemplate-list" v-loading="loading">
12
+ <div class="BnImportTemplate-list-top">
13
+ <div class="BnImportTemplate-list-title">
14
+ <span class="BnImportTemplate-list-dot"></span>
15
+ <span>模板列表</span>
16
+ </div>
17
+ <el-button class="BnImportTemplate-add-btn" type="primary" size="small" @click="$emit('addTemplate')">
18
+ 新建
19
+ </el-button>
20
+ </div>
21
+ <el-table
22
+ :data="modalListData"
23
+ border
24
+ size="small"
25
+ max-height="360"
26
+ class="BnImportTemplate-table"
27
+ style="width: 100%"
28
+ >
29
+ <template #empty>
30
+ <div class="BnImportTemplate-empty">暂无数据</div>
31
+ </template>
32
+ <el-table-column prop="templateName" label="模板名称" min-width="180" show-overflow-tooltip/>
33
+ <el-table-column prop="sheetName" label="Sheet名称" min-width="160" show-overflow-tooltip/>
34
+ <el-table-column prop="gmtCreate" label="创建时间" width="170" show-overflow-tooltip/>
35
+ <el-table-column prop="gmtModify" label="更新时间" width="170" show-overflow-tooltip/>
36
+ <el-table-column label="操作" width="170" fixed="right">
37
+ <template #default="{ row }">
38
+ <div class="BnImportTemplate-actions">
39
+ <el-button link type="primary" @click="$emit('editTemplate', row)">编辑</el-button>
40
+ <el-button link type="primary" @click="$emit('copyTemplate', row)">复制</el-button>
41
+ <el-button link type="danger" @click="$emit('deleteTemplate', row)">删除</el-button>
42
+ </div>
43
+ </template>
44
+ </el-table-column>
45
+ </el-table>
46
+ <div class="BnImportTemplate-pagination">
47
+ <el-pagination
48
+ v-model:current-page="currentPage"
49
+ v-model:page-size="currentPageSize"
50
+ :page-sizes="[10, 20, 40, 80]"
51
+ layout="total, sizes, prev, pager, next, jumper"
52
+ :total="total"
53
+ @current-change="$emit('pageChange')"
54
+ @size-change="$emit('sizeChange', 1)"
55
+ />
56
+ </div>
57
+ </div>
58
+ </el-dialog>
59
+ </template>
60
+
61
+ <script>
62
+ // 自定义模板管理列表只管理表格、分页和操作入口。
63
+ // 列表查询、删除确认、复制刷新等业务状态都放在父组件,保证弹窗组件可复用且没有接口依赖。
64
+ export default {
65
+ name: "TemplateListDialog",
66
+ props: {
67
+ // 父组件控制的模板管理弹窗显隐状态,对应 v-model。
68
+ modelValue: {
69
+ type: Boolean,
70
+ default: false,
71
+ },
72
+ // 当前页模板列表数据,由父组件请求后传入表格。
73
+ modalListData: {
74
+ type: Array,
75
+ default() {
76
+ return [];
77
+ },
78
+ },
79
+ // 列表加载状态,由父组件在请求模板列表时控制。
80
+ loading: {
81
+ type: Boolean,
82
+ default: false,
83
+ },
84
+ // 当前页码,对应分页组件 current-page。
85
+ pageNum: {
86
+ type: Number,
87
+ default: 1,
88
+ },
89
+ // 每页条数,对应分页组件 page-size。
90
+ pageSize: {
91
+ type: Number,
92
+ default: 10,
93
+ },
94
+ // 后端返回的模板总数,用于分页总条数展示。
95
+ total: {
96
+ type: Number,
97
+ default: 0,
98
+ },
99
+ },
100
+ emits: [
101
+ "update:modelValue",
102
+ "update:pageNum",
103
+ "update:pageSize",
104
+ "addTemplate",
105
+ "editTemplate",
106
+ "copyTemplate",
107
+ "deleteTemplate",
108
+ "pageChange",
109
+ "sizeChange",
110
+ ],
111
+ computed: {
112
+ /**
113
+ * 管理弹窗显隐状态的 v-model 代理,变化时同步给父组件。
114
+ *
115
+ * @return 当前弹窗是否显示。
116
+ */
117
+ visible: {
118
+ get() {
119
+ return this.modelValue;
120
+ },
121
+ set(val) {
122
+ this.$emit("update:modelValue", val);
123
+ },
124
+ },
125
+ /**
126
+ * 分页当前页码的 v-model 代理,供父组件持有真实页码。
127
+ *
128
+ * @return 当前分页页码。
129
+ */
130
+ currentPage: {
131
+ get() {
132
+ return this.pageNum;
133
+ },
134
+ set(val) {
135
+ this.$emit("update:pageNum", val);
136
+ },
137
+ },
138
+ /**
139
+ * 分页每页条数的 v-model 代理,供父组件持有真实 pageSize。
140
+ *
141
+ * @return 当前每页条数。
142
+ */
143
+ currentPageSize: {
144
+ get() {
145
+ return this.pageSize;
146
+ },
147
+ set(val) {
148
+ this.$emit("update:pageSize", val);
149
+ },
150
+ },
151
+ },
152
+ };
153
+ </script>
154
+
155
+ <style scoped lang="scss">
156
+ :deep(.BnImportTemplate-dialog) {
157
+ border-radius: 2px;
158
+
159
+ .el-dialog__header {
160
+ display: flex;
161
+ align-items: center;
162
+ min-height: 48px;
163
+ padding: 0 18px;
164
+ margin-right: 0;
165
+ border-bottom: 1px solid #e5eaf3;
166
+ }
167
+
168
+ .el-dialog__title {
169
+ color: #1f2d3d;
170
+ font-size: 15px;
171
+ font-weight: 600;
172
+ line-height: 48px;
173
+ }
174
+
175
+ .el-dialog__headerbtn {
176
+ top: 0;
177
+ width: 48px;
178
+ height: 48px;
179
+ }
180
+
181
+ .el-dialog__body {
182
+ padding: 0;
183
+ background: #fff;
184
+ }
185
+ }
186
+
187
+ .BnImportTemplate {
188
+ &-list {
189
+ min-height: 430px;
190
+ padding: 12px;
191
+ background: #fff;
192
+ }
193
+
194
+ &-list-top {
195
+ display: flex;
196
+ align-items: center;
197
+ justify-content: space-between;
198
+ height: 42px;
199
+ padding-bottom: 10px;
200
+ border-bottom: 1px solid #e5eaf3;
201
+ }
202
+
203
+ &-list-title {
204
+ display: inline-flex;
205
+ align-items: center;
206
+ color: #1f2d3d;
207
+ font-size: 13px;
208
+ font-weight: 600;
209
+ }
210
+
211
+ &-list-dot {
212
+ width: 3px;
213
+ height: 14px;
214
+ margin-right: 8px;
215
+ border-radius: 1px;
216
+ background: #409eff;
217
+ }
218
+
219
+ &-add-btn {
220
+ min-width: 60px;
221
+ height: 32px;
222
+ padding: 0 16px;
223
+ border-color: #409eff;
224
+ border-radius: 3px;
225
+ background: #409eff;
226
+ font-weight: 600;
227
+ }
228
+
229
+ &-empty {
230
+ padding: 52px 0;
231
+ color: #8a97a8;
232
+ font-size: 13px;
233
+ }
234
+
235
+ &-table {
236
+ margin-top: 10px;
237
+ color: #1f2d3d;
238
+
239
+ :deep(.el-table__header th) {
240
+ height: 36px;
241
+ padding: 0;
242
+ background: #edf4fc;
243
+ color: #1f2d3d;
244
+ font-size: 13px;
245
+ font-weight: 600;
246
+ }
247
+
248
+ :deep(.el-table__cell) {
249
+ height: 36px;
250
+ padding: 0 0;
251
+ border-color: #e4eaf2;
252
+ }
253
+
254
+ :deep(.cell) {
255
+ padding: 0 8px;
256
+ line-height: 36px;
257
+ }
258
+
259
+ :deep(.el-table__row:hover > td.el-table__cell) {
260
+ background: #f7fbff;
261
+ }
262
+ }
263
+
264
+ &-actions {
265
+ display: inline-flex;
266
+ align-items: center;
267
+ gap: 10px;
268
+
269
+ :deep(.el-button) {
270
+ margin-left: 0;
271
+ padding: 0;
272
+ font-size: 12px;
273
+ font-weight: 500;
274
+ }
275
+ }
276
+
277
+ &-pagination {
278
+ display: flex;
279
+ justify-content: flex-end;
280
+ margin-top: 12px;
281
+ padding-top: 10px;
282
+ border-top: 1px solid #edf1f6;
283
+
284
+ :deep(.el-pagination) {
285
+ --el-pagination-button-width: 28px;
286
+ --el-pagination-button-height: 28px;
287
+ --el-pagination-font-size: 12px;
288
+ color: #3f4b5f;
289
+ }
290
+
291
+ :deep(.el-pagination .el-select .el-input) {
292
+ width: 100px;
293
+ }
294
+ }
295
+
296
+ }
297
+ </style>