bm-admin-ui 1.0.21-alpha → 1.0.22-alpha

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 (184) hide show
  1. package/es/components/feedback/index.js +25 -1306
  2. package/es/components/float-table/index.js +37 -28
  3. package/es/components/form-create/index.js +2769 -0
  4. package/es/components/form-designer/index.js +4178 -9
  5. package/es/components/index.js +1 -0
  6. package/es/components/input-tags-display/index.js +27 -1187
  7. package/es/components/multi-cascader-compose/index.js +31 -1199
  8. package/es/components/over-tooltips/index.js +27 -20
  9. package/es/components/search-filter/index.js +55 -1266
  10. package/es/components/shops-filter/index.js +24 -1182
  11. package/es/components/staffs-selector/index.js +130 -1240
  12. package/es/components/timeline/index.js +6 -6
  13. package/es/components/upload/index.js +98 -1333
  14. package/es/utils/uniqueId.js +5 -0
  15. package/es/utils/vxe-table.js +4 -3
  16. package/lib/components/feedback/index.js +23 -1304
  17. package/lib/components/float-table/index.js +37 -28
  18. package/lib/components/form-create/index.js +2781 -0
  19. package/lib/components/form-designer/index.js +4183 -8
  20. package/lib/components/index.js +7 -0
  21. package/lib/components/input-tags-display/index.js +27 -1187
  22. package/lib/components/multi-cascader-compose/index.js +30 -1198
  23. package/lib/components/over-tooltips/index.js +27 -20
  24. package/lib/components/search-filter/index.js +54 -1265
  25. package/lib/components/shops-filter/index.js +23 -1181
  26. package/lib/components/staffs-selector/index.js +129 -1239
  27. package/lib/components/timeline/index.js +6 -6
  28. package/lib/components/upload/index.js +97 -1332
  29. package/lib/utils/uniqueId.js +8 -0
  30. package/lib/utils/vxe-table.js +3 -2
  31. package/package.json +9 -4
  32. package/theme-chalk/button.css +1 -1
  33. package/theme-chalk/feedback.css +1 -1
  34. package/theme-chalk/float-table.css +1 -1
  35. package/theme-chalk/floating-vue.css +1 -1
  36. package/theme-chalk/flow-designer.css +1 -1
  37. package/theme-chalk/form-create.css +1 -0
  38. package/theme-chalk/form-designer.css +1 -0
  39. package/theme-chalk/index.css +1 -1
  40. package/theme-chalk/input-tags-display.css +1 -1
  41. package/theme-chalk/modal.css +1 -1
  42. package/theme-chalk/multi-cascader-compose.css +1 -1
  43. package/theme-chalk/over-tooltips.css +1 -1
  44. package/theme-chalk/search-filter.css +1 -1
  45. package/theme-chalk/staffs-selector.css +1 -1
  46. package/theme-chalk/timeline.css +1 -1
  47. package/theme-chalk/upload.css +1 -1
  48. package/es/components/button/index.d.ts +0 -307
  49. package/es/components/button/src/button.d.ts +0 -12
  50. package/es/components/button/src/button.vue.d.ts +0 -308
  51. package/es/components/feedback/index.d.ts +0 -1037
  52. package/es/components/feedback/src/bmAlert.vue.d.ts +0 -193
  53. package/es/components/feedback/src/bmModal.vue.d.ts +0 -839
  54. package/es/components/float-table/index.d.ts +0 -70
  55. package/es/components/float-table/src/float-table.vue.d.ts +0 -69
  56. package/es/components/flow-designer/index.d.ts +0 -7
  57. package/es/components/flow-designer/src/flow-designer.vue.d.ts +0 -6
  58. package/es/components/form-designer/index.d.ts +0 -9
  59. package/es/components/form-designer/src/form-designer.vue.d.ts +0 -8
  60. package/es/components/index.d.ts +0 -13
  61. package/es/components/input-tags-display/index.d.ts +0 -113
  62. package/es/components/input-tags-display/src/input-tags-display.vue.d.ts +0 -110
  63. package/es/components/multi-cascader-compose/index.d.ts +0 -164
  64. package/es/components/multi-cascader-compose/src/multi-cascader-compose.vue.d.ts +0 -164
  65. package/es/components/multi-cascader-compose/src/props.d.ts +0 -40
  66. package/es/components/multi-cascader-compose/types.d.ts +0 -10
  67. package/es/components/over-tooltips/index.d.ts +0 -35
  68. package/es/components/over-tooltips/src/over-tooltips.vue.d.ts +0 -34
  69. package/es/components/search-filter/index.d.ts +0 -218
  70. package/es/components/search-filter/src/search-filter.d.ts +0 -77
  71. package/es/components/search-filter/src/search-filter.vue.d.ts +0 -217
  72. package/es/components/search-filter/src/search-reset-btn.vue.d.ts +0 -89
  73. package/es/components/shops-filter/index.d.ts +0 -99
  74. package/es/components/shops-filter/src/shops-filter.d.ts +0 -25
  75. package/es/components/shops-filter/src/shops-filter.vue.d.ts +0 -98
  76. package/es/components/staffs-selector/index.d.ts +0 -109
  77. package/es/components/staffs-selector/src/multipleCmp.vue.d.ts +0 -97
  78. package/es/components/staffs-selector/src/radioCmp.vue.d.ts +0 -31
  79. package/es/components/staffs-selector/src/staffs-selector.vue.d.ts +0 -108
  80. package/es/components/staffs-selector/src/variedCmp.vue.d.ts +0 -62
  81. package/es/components/timeline/index.d.ts +0 -107
  82. package/es/components/timeline/src/props.d.ts +0 -24
  83. package/es/components/timeline/src/timeline-item.vue.d.ts +0 -65
  84. package/es/components/timeline/src/timeline.vue.d.ts +0 -42
  85. package/es/components/upload/index.d.ts +0 -136
  86. package/es/components/upload/src/icons.d.ts +0 -13
  87. package/es/components/upload/src/upload.vue.d.ts +0 -135
  88. package/es/components/upload/utils/index.d.ts +0 -7
  89. package/es/index.d.ts +0 -6
  90. package/es/utils/bm-admin-ui-resolver.d.ts +0 -9
  91. package/es/utils/vxe-table.d.ts +0 -6
  92. package/es/utils/with-install.d.ts +0 -3
  93. package/index.esm.js +0 -47061
  94. package/index.js +0 -47091
  95. package/lib/components/button/index.d.ts +0 -307
  96. package/lib/components/button/src/button.d.ts +0 -12
  97. package/lib/components/button/src/button.vue.d.ts +0 -308
  98. package/lib/components/feedback/index.d.ts +0 -1037
  99. package/lib/components/feedback/src/bmAlert.vue.d.ts +0 -193
  100. package/lib/components/feedback/src/bmModal.vue.d.ts +0 -839
  101. package/lib/components/float-table/index.d.ts +0 -70
  102. package/lib/components/float-table/src/float-table.vue.d.ts +0 -69
  103. package/lib/components/flow-designer/index.d.ts +0 -7
  104. package/lib/components/flow-designer/src/flow-designer.vue.d.ts +0 -6
  105. package/lib/components/form-designer/index.d.ts +0 -9
  106. package/lib/components/form-designer/src/form-designer.vue.d.ts +0 -8
  107. package/lib/components/index.d.ts +0 -13
  108. package/lib/components/input-tags-display/index.d.ts +0 -113
  109. package/lib/components/input-tags-display/src/input-tags-display.vue.d.ts +0 -110
  110. package/lib/components/multi-cascader-compose/index.d.ts +0 -164
  111. package/lib/components/multi-cascader-compose/src/multi-cascader-compose.vue.d.ts +0 -164
  112. package/lib/components/multi-cascader-compose/src/props.d.ts +0 -40
  113. package/lib/components/multi-cascader-compose/types.d.ts +0 -10
  114. package/lib/components/over-tooltips/index.d.ts +0 -35
  115. package/lib/components/over-tooltips/src/over-tooltips.vue.d.ts +0 -34
  116. package/lib/components/search-filter/index.d.ts +0 -218
  117. package/lib/components/search-filter/src/search-filter.d.ts +0 -77
  118. package/lib/components/search-filter/src/search-filter.vue.d.ts +0 -217
  119. package/lib/components/search-filter/src/search-reset-btn.vue.d.ts +0 -89
  120. package/lib/components/shops-filter/index.d.ts +0 -99
  121. package/lib/components/shops-filter/src/shops-filter.d.ts +0 -25
  122. package/lib/components/shops-filter/src/shops-filter.vue.d.ts +0 -98
  123. package/lib/components/staffs-selector/index.d.ts +0 -109
  124. package/lib/components/staffs-selector/src/multipleCmp.vue.d.ts +0 -97
  125. package/lib/components/staffs-selector/src/radioCmp.vue.d.ts +0 -31
  126. package/lib/components/staffs-selector/src/staffs-selector.vue.d.ts +0 -108
  127. package/lib/components/staffs-selector/src/variedCmp.vue.d.ts +0 -62
  128. package/lib/components/timeline/index.d.ts +0 -107
  129. package/lib/components/timeline/src/props.d.ts +0 -24
  130. package/lib/components/timeline/src/timeline-item.vue.d.ts +0 -65
  131. package/lib/components/timeline/src/timeline.vue.d.ts +0 -42
  132. package/lib/components/upload/index.d.ts +0 -136
  133. package/lib/components/upload/src/icons.d.ts +0 -13
  134. package/lib/components/upload/src/upload.vue.d.ts +0 -135
  135. package/lib/components/upload/utils/index.d.ts +0 -7
  136. package/lib/index.d.ts +0 -6
  137. package/lib/utils/bm-admin-ui-resolver.d.ts +0 -9
  138. package/lib/utils/vxe-table.d.ts +0 -6
  139. package/lib/utils/with-install.d.ts +0 -3
  140. package/types/components/button/index.d.ts +0 -307
  141. package/types/components/button/src/button.d.ts +0 -12
  142. package/types/components/button/src/button.vue.d.ts +0 -308
  143. package/types/components/feedback/index.d.ts +0 -1037
  144. package/types/components/feedback/src/bmAlert.vue.d.ts +0 -193
  145. package/types/components/feedback/src/bmModal.vue.d.ts +0 -839
  146. package/types/components/float-table/index.d.ts +0 -70
  147. package/types/components/float-table/src/float-table.vue.d.ts +0 -69
  148. package/types/components/flow-designer/index.d.ts +0 -7
  149. package/types/components/flow-designer/src/flow-designer.vue.d.ts +0 -6
  150. package/types/components/form-designer/index.d.ts +0 -9
  151. package/types/components/form-designer/src/form-designer.vue.d.ts +0 -8
  152. package/types/components/index.d.ts +0 -13
  153. package/types/components/input-tags-display/index.d.ts +0 -113
  154. package/types/components/input-tags-display/src/input-tags-display.vue.d.ts +0 -110
  155. package/types/components/multi-cascader-compose/index.d.ts +0 -164
  156. package/types/components/multi-cascader-compose/src/multi-cascader-compose.vue.d.ts +0 -164
  157. package/types/components/multi-cascader-compose/src/props.d.ts +0 -40
  158. package/types/components/multi-cascader-compose/types.d.ts +0 -10
  159. package/types/components/over-tooltips/index.d.ts +0 -35
  160. package/types/components/over-tooltips/src/over-tooltips.vue.d.ts +0 -34
  161. package/types/components/search-filter/index.d.ts +0 -218
  162. package/types/components/search-filter/src/search-filter.d.ts +0 -77
  163. package/types/components/search-filter/src/search-filter.vue.d.ts +0 -217
  164. package/types/components/search-filter/src/search-reset-btn.vue.d.ts +0 -89
  165. package/types/components/shops-filter/index.d.ts +0 -99
  166. package/types/components/shops-filter/src/shops-filter.d.ts +0 -25
  167. package/types/components/shops-filter/src/shops-filter.vue.d.ts +0 -98
  168. package/types/components/staffs-selector/index.d.ts +0 -109
  169. package/types/components/staffs-selector/src/multipleCmp.vue.d.ts +0 -97
  170. package/types/components/staffs-selector/src/radioCmp.vue.d.ts +0 -31
  171. package/types/components/staffs-selector/src/staffs-selector.vue.d.ts +0 -108
  172. package/types/components/staffs-selector/src/variedCmp.vue.d.ts +0 -62
  173. package/types/components/timeline/index.d.ts +0 -107
  174. package/types/components/timeline/src/props.d.ts +0 -24
  175. package/types/components/timeline/src/timeline-item.vue.d.ts +0 -65
  176. package/types/components/timeline/src/timeline.vue.d.ts +0 -42
  177. package/types/components/upload/index.d.ts +0 -136
  178. package/types/components/upload/src/icons.d.ts +0 -13
  179. package/types/components/upload/src/upload.vue.d.ts +0 -135
  180. package/types/components/upload/utils/index.d.ts +0 -7
  181. package/types/index.d.ts +0 -6
  182. package/types/utils/bm-admin-ui-resolver.d.ts +0 -9
  183. package/types/utils/vxe-table.d.ts +0 -6
  184. package/types/utils/with-install.d.ts +0 -3
@@ -0,0 +1,2769 @@
1
+ import { withInstall } from 'bm-admin-ui/es/utils/with-install';
2
+ import { h, nextTick, defineComponent, ref, watch, openBlock, createElementBlock, createVNode, unref, mergeProps, computed, normalizeStyle, Fragment, renderList, normalizeClass, reactive, createBlock, withCtx, createElementVNode, toDisplayString, createTextVNode, createCommentVNode, resolveComponent } from 'vue';
3
+ import { Input, InputNumber, Select, DatePicker, RangePicker, message, Modal, Layout, LayoutSider, Tree, LayoutContent, Button, Row, Col, Pagination, FormItemRest, Divider, Tabs, TabPane, Cascader } from 'ant-design-vue';
4
+ import dayjs from 'dayjs';
5
+ import Picture from 'bm-admin-ui/es/components/upload';
6
+ import BmStaffsSelector from 'bm-admin-ui/es/components/staffs-selector';
7
+ import { BmTagsDisplay, BmFloatTable } from 'bm-admin-ui/es/components';
8
+ import { SearchOutlined, CheckCircleFilled, PlusOutlined } from '@ant-design/icons-vue';
9
+ import { cloneDeep, debounce } from 'lodash-es';
10
+ import FC from '@form-create/ant-design-vue';
11
+
12
+ const fieldRatioMap = {
13
+ '25%': 6,
14
+ '50%': 12,
15
+ '75%': 18,
16
+ '100': 24,
17
+ 6: 6,
18
+ 12: 12,
19
+ 18: 18,
20
+ 24: 24,
21
+ };
22
+
23
+ var input = {
24
+ name: 'input',
25
+ rule(data) {
26
+ return {
27
+ type: 'input',
28
+ field: data.field,
29
+ title: data.title.title,
30
+ props: {
31
+ maxlength: 200,
32
+ placeholder: data.props.placeholder,
33
+ },
34
+ value: data.value,
35
+ effect: {
36
+ required: data.effect.required && '请输入',
37
+ },
38
+ wrap: {
39
+ wrapperCol: {
40
+ span: fieldRatioMap[data.config.fieldRatio],
41
+ },
42
+ },
43
+ };
44
+ },
45
+ rowRule(data) {
46
+ return {
47
+ type: 'input',
48
+ field: data.field,
49
+ title: data.title.title,
50
+ props: {
51
+ maxlength: 200,
52
+ placeholder: data.props.placeholder,
53
+ },
54
+ value: data.value,
55
+ effect: {
56
+ required: data.effect.required && '请输入',
57
+ },
58
+ col: {
59
+ span: fieldRatioMap[data.config.fieldRatio],
60
+ },
61
+ };
62
+ },
63
+ tableRule(data) {
64
+ const field = data.field;
65
+ return {
66
+ field,
67
+ title: data.title.title,
68
+ headerClassName: data.effect.required ? 'is-required' : '',
69
+ width: data.config.fieldRatio,
70
+ slots: {
71
+ default({ row }) {
72
+ return h(Input, {
73
+ value: row[field],
74
+ placeholder: data.props.placeholder,
75
+ maxlength: 200,
76
+ 'onUpdate:value': (value) => {
77
+ row[field] = value;
78
+ },
79
+ });
80
+ },
81
+ },
82
+ };
83
+ },
84
+ };
85
+
86
+ var textarea = {
87
+ name: 'textarea',
88
+ rule(data) {
89
+ return {
90
+ type: 'input',
91
+ field: data.field,
92
+ title: data.title.title,
93
+ props: {
94
+ type: 'textarea',
95
+ maxlength: 5000,
96
+ placeholder: data.props.placeholder,
97
+ },
98
+ value: data.value,
99
+ effect: {
100
+ required: data.effect.required && '请输入',
101
+ },
102
+ wrap: {
103
+ wrapperCol: {
104
+ span: fieldRatioMap[data.config.fieldRatio],
105
+ },
106
+ },
107
+ };
108
+ },
109
+ rowRule(data) {
110
+ return {
111
+ type: 'input',
112
+ field: data.field,
113
+ title: data.title.title,
114
+ props: {
115
+ type: 'textarea',
116
+ maxlength: 5000,
117
+ placeholder: data.props.placeholder,
118
+ },
119
+ value: data.value,
120
+ effect: {
121
+ required: data.effect.required && '请输入',
122
+ },
123
+ col: {
124
+ span: fieldRatioMap[data.config.fieldRatio],
125
+ },
126
+ };
127
+ },
128
+ tableRule(data) {
129
+ const field = data.field;
130
+ return {
131
+ field,
132
+ title: data.title.title,
133
+ headerClassName: data.effect.required ? 'is-required' : '',
134
+ width: data.config.fieldRatio,
135
+ slots: {
136
+ default({ row }) {
137
+ return h(Input, {
138
+ type: 'textarea',
139
+ value: row[field],
140
+ maxlength: 5000,
141
+ placeholder: data.props.placeholder,
142
+ 'onUpdate:value': (value) => {
143
+ row[field] = value;
144
+ },
145
+ });
146
+ },
147
+ },
148
+ };
149
+ },
150
+ };
151
+
152
+ var numInput = {
153
+ name: 'numInput',
154
+ rule(data) {
155
+ return {
156
+ type: 'inputNumber',
157
+ field: data.field,
158
+ title: data.title.title,
159
+ props: {
160
+ placeholder: data.props.placeholder,
161
+ },
162
+ value: data.value,
163
+ effect: {
164
+ required: data.effect.required && '请输入',
165
+ },
166
+ wrap: {
167
+ wrapperCol: {
168
+ span: fieldRatioMap[data.config.fieldRatio],
169
+ },
170
+ },
171
+ style: {
172
+ width: '100%',
173
+ },
174
+ };
175
+ },
176
+ rowRule(data) {
177
+ return {
178
+ type: 'inputNumber',
179
+ field: data.field,
180
+ title: data.title.title,
181
+ props: {
182
+ placeholder: data.props.placeholder,
183
+ },
184
+ value: data.value,
185
+ effect: {
186
+ required: data.effect.required && '请输入',
187
+ },
188
+ col: {
189
+ span: fieldRatioMap[data.config.fieldRatio],
190
+ },
191
+ style: {
192
+ width: '100%',
193
+ },
194
+ };
195
+ },
196
+ tableRule(data) {
197
+ const field = data.field;
198
+ return {
199
+ field,
200
+ title: data.title.title,
201
+ headerClassName: data.effect.required ? 'is-required' : '',
202
+ width: data.config.fieldRatio,
203
+ slots: {
204
+ default({ row }) {
205
+ return h(InputNumber, {
206
+ value: row[field],
207
+ placeholder: data.props.placeholder,
208
+ 'onUpdate:value': (value) => {
209
+ row[field] = value;
210
+ },
211
+ style: {
212
+ width: '100%',
213
+ },
214
+ });
215
+ },
216
+ },
217
+ };
218
+ },
219
+ };
220
+
221
+ var radio = {
222
+ name: 'radio',
223
+ rule(data) {
224
+ return {
225
+ type: data.type,
226
+ field: data.field,
227
+ title: data.title.title,
228
+ props: {
229
+ placeholder: data.props.placeholder,
230
+ },
231
+ options: data.options,
232
+ effect: {
233
+ required: data.effect.required && '请选择',
234
+ },
235
+ wrap: {
236
+ wrapperCol: {
237
+ span: fieldRatioMap[data.config.fieldRatio],
238
+ },
239
+ },
240
+ value: data.value,
241
+ };
242
+ },
243
+ rowRule(data) {
244
+ return {
245
+ type: data.type,
246
+ field: data.field,
247
+ title: data.title.title,
248
+ props: {
249
+ placeholder: data.props.placeholder,
250
+ },
251
+ options: data.options,
252
+ effect: {
253
+ required: data.effect.required && '请选择',
254
+ },
255
+ col: {
256
+ span: fieldRatioMap[data.config.fieldRatio],
257
+ },
258
+ value: data.value,
259
+ };
260
+ },
261
+ tableRule(data) {
262
+ const field = data.field;
263
+ return {
264
+ field,
265
+ title: data.title.title,
266
+ headerClassName: data.effect.required ? 'is-required' : '',
267
+ width: data.config.fieldRatio,
268
+ slots: {
269
+ default({ row }) {
270
+ return h(Select, {
271
+ value: row[field],
272
+ placeholder: data.props.placeholder,
273
+ options: data.options,
274
+ 'onUpdate:value': (value) => {
275
+ row[field] = value;
276
+ },
277
+ });
278
+ },
279
+ },
280
+ };
281
+ },
282
+ };
283
+
284
+ var checkbox = {
285
+ name: 'checkbox',
286
+ rule(data) {
287
+ const extraProps = data.type === 'select' ? { mode: 'multiple' } : {};
288
+ return {
289
+ type: data.type,
290
+ field: data.field,
291
+ title: data.title.title,
292
+ props: Object.assign({ placeholder: data.props.placeholder }, extraProps),
293
+ options: data.options,
294
+ effect: {
295
+ required: data.effect.required && '请选择',
296
+ },
297
+ wrap: {
298
+ wrapperCol: {
299
+ span: fieldRatioMap[data.config.fieldRatio],
300
+ },
301
+ },
302
+ value: data.value,
303
+ };
304
+ },
305
+ rowRule(data) {
306
+ const extraProps = data.type === 'select' ? { mode: 'multiple' } : {};
307
+ return {
308
+ type: data.type,
309
+ field: data.field,
310
+ title: data.title.title,
311
+ props: Object.assign({ placeholder: data.props.placeholder }, extraProps),
312
+ options: data.options,
313
+ effect: {
314
+ required: data.effect.required && '请选择',
315
+ },
316
+ col: {
317
+ span: fieldRatioMap[data.config.fieldRatio],
318
+ },
319
+ value: data.value,
320
+ };
321
+ },
322
+ tableRule(data) {
323
+ const field = data.field;
324
+ return {
325
+ field,
326
+ title: data.title.title,
327
+ headerClassName: data.effect.required ? 'is-required' : '',
328
+ width: data.config.fieldRatio,
329
+ slots: {
330
+ default({ row }) {
331
+ return h(Select, {
332
+ value: row[field],
333
+ placeholder: data.props.placeholder,
334
+ options: data.options,
335
+ mode: 'multiple',
336
+ 'onUpdate:value': (value) => {
337
+ row[field] = value;
338
+ },
339
+ });
340
+ },
341
+ },
342
+ };
343
+ },
344
+ };
345
+
346
+ var date = {
347
+ name: 'date',
348
+ rule(data) {
349
+ const format = data.props.format;
350
+ const value = data.config.defaultValue || data.value
351
+ ? data.value
352
+ : dayjs().format(format);
353
+ const extraProps = {
354
+ picker: format === 'YYYY-MM' ? 'month' : '',
355
+ showTime: format === 'YYYY-MM-DD HH:mm',
356
+ };
357
+ return {
358
+ type: 'datePicker',
359
+ field: data.field,
360
+ title: data.title.title,
361
+ props: Object.assign({ format, valueFormat: format, placeholder: data.props.placeholder }, extraProps),
362
+ value,
363
+ effect: {
364
+ required: data.effect.required && '请选择',
365
+ },
366
+ wrap: {
367
+ wrapperCol: {
368
+ span: fieldRatioMap[data.config.fieldRatio],
369
+ },
370
+ },
371
+ style: {
372
+ width: '100%',
373
+ },
374
+ };
375
+ },
376
+ rowRule(data) {
377
+ const format = data.props.format;
378
+ const value = data.config.defaultValue || data.value
379
+ ? data.value
380
+ : dayjs().format(format);
381
+ const extraProps = {
382
+ picker: format === 'YYYY-MM' ? 'month' : '',
383
+ showTime: format === 'YYYY-MM-DD HH:mm',
384
+ };
385
+ return {
386
+ type: 'datePicker',
387
+ field: data.field,
388
+ title: data.title.title,
389
+ props: Object.assign({ format, valueFormat: format, placeholder: data.props.placeholder }, extraProps),
390
+ value,
391
+ effect: {
392
+ required: data.effect.required && '请选择',
393
+ },
394
+ col: {
395
+ span: fieldRatioMap[data.config.fieldRatio],
396
+ },
397
+ style: {
398
+ width: '100%',
399
+ },
400
+ };
401
+ },
402
+ tableRule(data) {
403
+ const field = data.field;
404
+ const format = data.props.format;
405
+ return {
406
+ field,
407
+ title: data.title.title,
408
+ headerClassName: data.effect.required ? 'is-required' : '',
409
+ width: data.config.fieldRatio,
410
+ slots: {
411
+ default({ row }) {
412
+ return h(DatePicker, {
413
+ value: row[field],
414
+ placeholder: data.props.placeholder,
415
+ format,
416
+ valueFormat: format,
417
+ picker: format === 'YYYY-MM' ? 'month' : 'date',
418
+ showTime: format === 'YYYY-MM-DD HH:mm',
419
+ 'onUpdate:value': (value) => {
420
+ row[field] = value;
421
+ },
422
+ style: {
423
+ width: '100%',
424
+ },
425
+ });
426
+ },
427
+ },
428
+ };
429
+ },
430
+ };
431
+
432
+ var dateRange = {
433
+ name: 'dateRange',
434
+ rule(data) {
435
+ const format = data.props.format;
436
+ const extraProps = {
437
+ picker: format === 'YYYY-MM' ? 'month' : '',
438
+ showTime: format === 'YYYY-MM-DD HH:mm',
439
+ };
440
+ return {
441
+ type: 'datePicker',
442
+ field: data.field,
443
+ title: data.title.title,
444
+ props: Object.assign({ range: true, separator: '~', format, valueFormat: format, placeholder: data.props.placeholder }, extraProps),
445
+ effect: {
446
+ required: data.effect.required && '请选择',
447
+ },
448
+ wrap: {
449
+ wrapperCol: {
450
+ span: fieldRatioMap[data.config.fieldRatio],
451
+ },
452
+ },
453
+ style: {
454
+ width: '100%',
455
+ },
456
+ value: data.value,
457
+ };
458
+ },
459
+ rowRule(data) {
460
+ const format = data.props.format;
461
+ const extraProps = {
462
+ picker: format === 'YYYY-MM' ? 'month' : '',
463
+ showTime: format === 'YYYY-MM-DD HH:mm',
464
+ };
465
+ return {
466
+ type: 'datePicker',
467
+ field: data.field,
468
+ title: data.title.title,
469
+ props: Object.assign({ range: true, separator: '~', format, valueFormat: format, placeholder: data.props.placeholder }, extraProps),
470
+ effect: {
471
+ required: data.effect.required && '请选择',
472
+ },
473
+ col: {
474
+ span: fieldRatioMap[data.config.fieldRatio],
475
+ },
476
+ style: {
477
+ width: '100%',
478
+ },
479
+ value: data.value,
480
+ };
481
+ },
482
+ tableRule(data) {
483
+ const field = data.field;
484
+ const format = data.props.format;
485
+ return {
486
+ field,
487
+ title: data.title.title,
488
+ headerClassName: data.effect.required ? 'is-required' : '',
489
+ width: data.config.fieldRatio,
490
+ slots: {
491
+ default({ row }) {
492
+ return h(RangePicker, {
493
+ value: row[field],
494
+ placeholder: data.props.placeholder,
495
+ format,
496
+ valueFormat: format,
497
+ picker: format === 'YYYY-MM' ? 'month' : 'date',
498
+ showTime: format === 'YYYY-MM-DD HH:mm',
499
+ 'onUpdate:value': (value) => {
500
+ row[field] = value;
501
+ },
502
+ style: {
503
+ width: '100%',
504
+ },
505
+ });
506
+ },
507
+ },
508
+ };
509
+ },
510
+ };
511
+
512
+ var instruction = {
513
+ name: 'instruction',
514
+ rule(data) {
515
+ return {
516
+ type: 'div',
517
+ field: data.field,
518
+ children: [data.value],
519
+ style: {
520
+ padding: '16px 12px',
521
+ color: data.style.color,
522
+ fontSize: '14px',
523
+ lineHeight: '22px',
524
+ borderRadius: '4px',
525
+ backgroundColor: '#EAF2FF',
526
+ },
527
+ };
528
+ },
529
+ };
530
+
531
+ /******************************************************************************
532
+ Copyright (c) Microsoft Corporation.
533
+
534
+ Permission to use, copy, modify, and/or distribute this software for any
535
+ purpose with or without fee is hereby granted.
536
+
537
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
538
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
539
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
540
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
541
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
542
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
543
+ PERFORMANCE OF THIS SOFTWARE.
544
+ ***************************************************************************** */
545
+
546
+ function __awaiter(thisArg, _arguments, P, generator) {
547
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
548
+ return new (P || (P = Promise))(function (resolve, reject) {
549
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
550
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
551
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
552
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
553
+ });
554
+ }
555
+
556
+ var picture = {
557
+ name: 'picture',
558
+ rule(data, extraConfig) {
559
+ const maxCount = data.props.extraProps.maxCount;
560
+ return {
561
+ type: 'Picture',
562
+ component: Picture,
563
+ field: data.field,
564
+ title: data.title.title,
565
+ props: {
566
+ uploadProps: {
567
+ listType: 'picture-card',
568
+ text: '请选择',
569
+ multiple: maxCount > 1,
570
+ },
571
+ extraProps: {
572
+ maxSize: 10,
573
+ maxCount,
574
+ },
575
+ defaultList: data.value,
576
+ uploadRequest(inject, file) {
577
+ return __awaiter(this, void 0, void 0, function* () {
578
+ return yield extraConfig.picture.fetch(file);
579
+ });
580
+ },
581
+ },
582
+ validate: [
583
+ {
584
+ required: data.effect.required,
585
+ type: 'array',
586
+ min: 1,
587
+ message: '请上传图片',
588
+ },
589
+ ],
590
+ inject: true,
591
+ on: {
592
+ update(inject, list) {
593
+ const rule = inject.self;
594
+ rule.value = list;
595
+ nextTick(() => {
596
+ inject.api.validateField(rule.field);
597
+ });
598
+ },
599
+ error(inject, error) {
600
+ message.error(error.message);
601
+ },
602
+ },
603
+ };
604
+ },
605
+ rowRule(data, extraConfig) {
606
+ const maxCount = data.props.extraProps.maxCount;
607
+ return {
608
+ type: 'Picture',
609
+ component: Picture,
610
+ field: data.field,
611
+ title: data.title.title,
612
+ props: {
613
+ uploadProps: {
614
+ listType: 'picture-card',
615
+ text: '请选择',
616
+ multiple: maxCount > 1,
617
+ },
618
+ extraProps: {
619
+ maxSize: 10,
620
+ maxCount,
621
+ },
622
+ defaultList: data.value,
623
+ uploadRequest(inject, file) {
624
+ return __awaiter(this, void 0, void 0, function* () {
625
+ return yield extraConfig.picture.fetch(file);
626
+ });
627
+ },
628
+ },
629
+ validate: [
630
+ {
631
+ required: data.effect.required,
632
+ type: 'array',
633
+ min: 1,
634
+ message: '请上传图片',
635
+ },
636
+ ],
637
+ inject: true,
638
+ on: {
639
+ update(inject, list) {
640
+ const rule = inject.self;
641
+ rule.value = list;
642
+ nextTick(() => {
643
+ inject.api.validateField(rule.field);
644
+ });
645
+ },
646
+ error(inject, error) {
647
+ message.error(error.message);
648
+ },
649
+ },
650
+ col: {
651
+ span: 12,
652
+ },
653
+ };
654
+ },
655
+ };
656
+
657
+ var file = {
658
+ name: 'file',
659
+ rule(data, extraConfig) {
660
+ return {
661
+ type: 'Picture',
662
+ component: Picture,
663
+ field: data.field,
664
+ title: data.title.title,
665
+ props: {
666
+ extraProps: {
667
+ maxSize: 20,
668
+ tips: '单个附件大小需≤20M',
669
+ },
670
+ defaultList: data.value,
671
+ uploadRequest(inject, file) {
672
+ return __awaiter(this, void 0, void 0, function* () {
673
+ return yield extraConfig.picture.fetch(file);
674
+ });
675
+ },
676
+ },
677
+ validate: [
678
+ {
679
+ required: data.effect.required,
680
+ type: 'array',
681
+ len: 1,
682
+ message: '请上传附件',
683
+ },
684
+ ],
685
+ inject: true,
686
+ on: {
687
+ update(inject, list) {
688
+ const rule = inject.self;
689
+ rule.value = list;
690
+ nextTick(() => {
691
+ inject.api.validateField(rule.field);
692
+ });
693
+ },
694
+ error(inject, error) {
695
+ message.error(error.message);
696
+ },
697
+ },
698
+ };
699
+ },
700
+ rowRule(data, extraConfig) {
701
+ return {
702
+ type: 'Picture',
703
+ component: Picture,
704
+ field: data.field,
705
+ title: data.title.title,
706
+ props: {
707
+ extraProps: {
708
+ maxSize: 20,
709
+ tips: '单个附件大小需≤20M',
710
+ },
711
+ defaultList: data.value,
712
+ uploadRequest(inject, file) {
713
+ return __awaiter(this, void 0, void 0, function* () {
714
+ return yield extraConfig.picture.fetch(file);
715
+ });
716
+ },
717
+ },
718
+ validate: [
719
+ {
720
+ required: data.effect.required,
721
+ type: 'array',
722
+ len: 1,
723
+ message: '请上传附件',
724
+ },
725
+ ],
726
+ inject: true,
727
+ on: {
728
+ update(inject, list) {
729
+ const rule = inject.self;
730
+ rule.value = list;
731
+ nextTick(() => {
732
+ inject.api.validateField(rule.field);
733
+ });
734
+ },
735
+ error(inject, error) {
736
+ message.error(error.message);
737
+ },
738
+ },
739
+ col: {
740
+ span: 12,
741
+ },
742
+ };
743
+ },
744
+ };
745
+
746
+ var _export_sfc = (sfc, props) => {
747
+ const target = sfc.__vccOpts || sfc;
748
+ for (const [key, val] of props) {
749
+ target[key] = val;
750
+ }
751
+ return target;
752
+ };
753
+
754
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
755
+ __name: "staff-selector",
756
+ props: ["placeholder", "defaultSelected"],
757
+ emits: ["change"],
758
+ setup(__props, { emit: emits }) {
759
+ const props = __props;
760
+ const selected = ref([]);
761
+ const visible = ref(false);
762
+ function selectedChange(val) {
763
+ emits("change", val);
764
+ }
765
+ function handleAdd() {
766
+ visible.value = true;
767
+ }
768
+ watch(
769
+ () => props.defaultSelected,
770
+ (val) => {
771
+ selected.value = val;
772
+ },
773
+ {
774
+ immediate: true
775
+ }
776
+ );
777
+ watch(selected, (val) => {
778
+ selectedChange(val);
779
+ });
780
+ return (_ctx, _cache) => {
781
+ return openBlock(), createElementBlock("div", null, [
782
+ createVNode(unref(BmTagsDisplay), {
783
+ list: selected.value,
784
+ "onUpdate:list": _cache[0] || (_cache[0] = ($event) => selected.value = $event),
785
+ "show-empty-btn": false,
786
+ "show-empty": "",
787
+ onAddClick: handleAdd
788
+ }, null, 8, ["list"]),
789
+ createVNode(unref(BmStaffsSelector), mergeProps({
790
+ select: selected.value,
791
+ "onUpdate:select": _cache[1] || (_cache[1] = ($event) => selected.value = $event),
792
+ visible: visible.value,
793
+ "onUpdate:visible": _cache[2] || (_cache[2] = ($event) => visible.value = $event)
794
+ }, _ctx.$attrs), null, 16, ["select", "visible"])
795
+ ]);
796
+ };
797
+ }
798
+ });
799
+ var StaffSelector = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__file", "staff-selector.vue"]]);
800
+
801
+ var people = {
802
+ name: 'people',
803
+ rule(data, extraConfig) {
804
+ return {
805
+ type: 'StaffSelector',
806
+ component: StaffSelector,
807
+ field: data.field,
808
+ title: data.title.title,
809
+ props: {
810
+ title: '添加员工',
811
+ mode: data.props.limit ? 'radio' : 'multiple',
812
+ placeholder: data.props.placeholder,
813
+ defaultSelected: data.value,
814
+ load(inject, params) {
815
+ return __awaiter(this, void 0, void 0, function* () {
816
+ return yield extraConfig.people.fetch(params);
817
+ });
818
+ },
819
+ },
820
+ effect: {
821
+ required: data.effect.required && '请选择',
822
+ },
823
+ wrap: {
824
+ wrapperCol: {
825
+ span: fieldRatioMap[data.config.fieldRatio],
826
+ },
827
+ },
828
+ inject: true,
829
+ on: {
830
+ change(inject, list) {
831
+ const rule = inject.self;
832
+ rule.value = list;
833
+ inject.api.validateField(rule.field, () => {
834
+ if (list.length) {
835
+ inject.api.clearValidateState(rule.field);
836
+ }
837
+ });
838
+ },
839
+ },
840
+ };
841
+ },
842
+ rowRule(data, extraConfig) {
843
+ return {
844
+ type: 'StaffSelector',
845
+ component: StaffSelector,
846
+ field: data.field,
847
+ title: data.title.title,
848
+ props: {
849
+ title: '添加员工',
850
+ mode: data.props.limit ? 'radio' : 'multiple',
851
+ placeholder: data.props.placeholder,
852
+ defaultSelected: data.value,
853
+ load(inject, params) {
854
+ return __awaiter(this, void 0, void 0, function* () {
855
+ return yield extraConfig.people.fetch(params);
856
+ });
857
+ },
858
+ },
859
+ effect: {
860
+ required: data.effect.required && '请选择',
861
+ },
862
+ col: {
863
+ span: fieldRatioMap[data.config.fieldRatio],
864
+ },
865
+ inject: true,
866
+ on: {
867
+ change(inject, list) {
868
+ const rule = inject.self;
869
+ rule.value = list;
870
+ inject.api.validateField(rule.field, () => {
871
+ if (list.length) {
872
+ inject.api.clearValidateState(rule.field);
873
+ }
874
+ });
875
+ },
876
+ },
877
+ };
878
+ },
879
+ tableRule(data, extraConfig) {
880
+ const field = data.field;
881
+ return {
882
+ field,
883
+ title: data.title.title,
884
+ headerClassName: data.effect.required ? 'is-required' : '',
885
+ width: data.config.fieldRatio,
886
+ slots: {
887
+ default({ row }) {
888
+ return h(StaffSelector, Object.assign({ title: '添加员工', mode: data.props.limit ? 'radio' : 'multiple', placeholder: data.props.placeholder, onChange: (value) => {
889
+ row[field] = value;
890
+ }, defaultSelected: row[field] }, extraConfig.people));
891
+ },
892
+ },
893
+ };
894
+ },
895
+ };
896
+
897
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
898
+ __name: "temp-content",
899
+ props: ["content"],
900
+ setup(__props) {
901
+ const props = __props;
902
+ const layers = computed(() => {
903
+ if (props.content) {
904
+ try {
905
+ return JSON.parse(props.content).filter((layer) => !layer.src);
906
+ } catch {
907
+ return [];
908
+ }
909
+ }
910
+ return [];
911
+ });
912
+ const layerBackGround = computed(() => {
913
+ if (!props.content) {
914
+ try {
915
+ return JSON.parse(props.content).find((layer) => layer.src).src;
916
+ } catch {
917
+ return "";
918
+ }
919
+ }
920
+ return "";
921
+ });
922
+ return (_ctx, _cache) => {
923
+ return openBlock(), createElementBlock("div", {
924
+ class: "bm-fc-rect-outer",
925
+ style: normalizeStyle(
926
+ unref(layerBackGround) ? { backgroundImage: `url('${unref(layerBackGround)}')` } : {}
927
+ )
928
+ }, [
929
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(layers), (layer) => {
930
+ return openBlock(), createElementBlock("div", {
931
+ key: layer.uuid,
932
+ class: normalizeClass(["bm-fc-rect", { "is-ele": layer.backgroundImage }]),
933
+ style: normalizeStyle(layer)
934
+ }, null, 6);
935
+ }), 128))
936
+ ], 4);
937
+ };
938
+ }
939
+ });
940
+ var TempContent = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__file", "temp-content.vue"]]);
941
+
942
+ const _hoisted_1$3 = /* @__PURE__ */ createTextVNode("\u91CD\u7F6E");
943
+ const _hoisted_2$3 = /* @__PURE__ */ createTextVNode(" \u67E5\u8BE2 ");
944
+ const _hoisted_3$3 = { class: "bm-fc-select-material-temp__content__item-info" };
945
+ const _hoisted_4$2 = { class: "bm-fc-select-material-temp__content__item-info__cover" };
946
+ const _hoisted_5$2 = ["src"];
947
+ const _hoisted_6$2 = ["onClick"];
948
+ const _hoisted_7$2 = {
949
+ key: 1,
950
+ class: "bm-fc-select-material-temp__content__circle"
951
+ };
952
+ const _hoisted_8$2 = ["title"];
953
+ const _hoisted_9$2 = { class: "bm-fc-select-material-temp__content__item-time" };
954
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
955
+ __name: "select-material-temp",
956
+ props: ["visible", "fetchMaterialType", "fetchMaterialTemp"],
957
+ emits: ["update:visible", "select"],
958
+ setup(__props, { emit: emits }) {
959
+ const props = __props;
960
+ const treeData = ref([]);
961
+ const templateName = ref("");
962
+ const list = ref([]);
963
+ const selectTypeKeys = ref([]);
964
+ const params = computed(() => ({
965
+ timestamp: timestamp.value,
966
+ pageType: 1,
967
+ templateName: templateName.value,
968
+ categoryCode: selectTypeKeys.value?.[0],
969
+ secondCategoryCode: selectTypeKeys.value?.[1],
970
+ thirdCategoryCode: selectTypeKeys.value?.[2],
971
+ pageSize: pagination.pageSize,
972
+ pageNum: pagination.current
973
+ }));
974
+ const selectItem = ref({});
975
+ const pagination = reactive({
976
+ current: 1,
977
+ pageSize: 8,
978
+ total: 0
979
+ });
980
+ const timestamp = ref("");
981
+ function initType() {
982
+ props.fetchMaterialType({
983
+ level: 1,
984
+ relationCode: ""
985
+ }).then((result) => {
986
+ result.forEach((item) => {
987
+ item.isLeaf = false;
988
+ });
989
+ treeData.value = result;
990
+ });
991
+ }
992
+ function onLoadData(treeNode) {
993
+ return new Promise((resolve) => {
994
+ if (treeNode.dataRef.children) {
995
+ resolve();
996
+ return;
997
+ }
998
+ const level = treeNode.parent ? 3 : 2;
999
+ const isLeaf = level === 3;
1000
+ props.fetchMaterialType({
1001
+ level,
1002
+ relationCode: treeNode.dataRef.key
1003
+ }).then((data) => {
1004
+ data.forEach((item) => {
1005
+ item.isLeaf = isLeaf;
1006
+ });
1007
+ if (!data.length) {
1008
+ treeNode.dataRef.isLeaf = true;
1009
+ }
1010
+ treeNode.dataRef.children = data;
1011
+ treeData.value = [...treeData.value];
1012
+ }).finally(() => {
1013
+ resolve();
1014
+ });
1015
+ });
1016
+ }
1017
+ function getSelectTypeKeys(node) {
1018
+ const result = [];
1019
+ result.unshift(node.key);
1020
+ while (node.parent) {
1021
+ node = node.parent;
1022
+ result.unshift(node.key);
1023
+ }
1024
+ return result;
1025
+ }
1026
+ function handleTreeSelect(selectedKeys, e) {
1027
+ selectTypeKeys.value = getSelectTypeKeys(e.node);
1028
+ pagination.current = 1;
1029
+ getTem();
1030
+ }
1031
+ function getTem() {
1032
+ props.fetchMaterialTemp(params.value).then((data) => {
1033
+ list.value = data.list;
1034
+ pagination.total = data.total;
1035
+ timestamp.value = data.timestamp;
1036
+ });
1037
+ }
1038
+ function select(item) {
1039
+ selectItem.value = item;
1040
+ }
1041
+ function reset() {
1042
+ pagination.current = 1;
1043
+ templateName.value = "";
1044
+ getTem();
1045
+ }
1046
+ function search() {
1047
+ pagination.current = 1;
1048
+ getTem();
1049
+ }
1050
+ function pageChange(page) {
1051
+ pagination.current = page;
1052
+ getTem();
1053
+ }
1054
+ function handleOk() {
1055
+ emits("select", selectItem.value.templateCode);
1056
+ emits("update:visible", false);
1057
+ }
1058
+ initType();
1059
+ getTem();
1060
+ return (_ctx, _cache) => {
1061
+ return openBlock(), createBlock(unref(Modal), {
1062
+ title: "\u9009\u62E9\u7D20\u6750\u6A21\u677F",
1063
+ centered: "",
1064
+ width: 1e3,
1065
+ visible: __props.visible,
1066
+ "body-style": { padding: 0 },
1067
+ "onUpdate:visible": _cache[1] || (_cache[1] = ($event) => _ctx.$emit("update:visible", false)),
1068
+ onOk: handleOk
1069
+ }, {
1070
+ default: withCtx(() => [
1071
+ createVNode(unref(Layout), { class: "bm-fc-select-material-temp" }, {
1072
+ default: withCtx(() => [
1073
+ createVNode(unref(LayoutSider), { class: "bm-fc-select-material-temp__sider" }, {
1074
+ default: withCtx(() => [
1075
+ createVNode(unref(Tree), {
1076
+ "tree-data": treeData.value,
1077
+ "load-data": onLoadData,
1078
+ onSelect: handleTreeSelect
1079
+ }, null, 8, ["tree-data"])
1080
+ ]),
1081
+ _: 1
1082
+ }),
1083
+ createVNode(unref(LayoutContent), { class: "bm-fc-select-material-temp__content" }, {
1084
+ default: withCtx(() => [
1085
+ createVNode(unref(Input), {
1086
+ value: templateName.value,
1087
+ "onUpdate:value": _cache[0] || (_cache[0] = ($event) => templateName.value = $event),
1088
+ class: "bm-fc-select-material-temp__content__input",
1089
+ placeholder: "\u8BF7\u8F93\u5165\u6A21\u677F\u540D\u79F0\u641C\u7D22"
1090
+ }, null, 8, ["value"]),
1091
+ createVNode(unref(Button), {
1092
+ class: "bm-fc-select-material-temp__content__btn",
1093
+ onClick: reset
1094
+ }, {
1095
+ default: withCtx(() => [
1096
+ _hoisted_1$3
1097
+ ]),
1098
+ _: 1
1099
+ }),
1100
+ createVNode(unref(Button), {
1101
+ class: "bm-fc-select-material-temp__content__btn",
1102
+ type: "primary",
1103
+ onClick: search
1104
+ }, {
1105
+ default: withCtx(() => [
1106
+ createVNode(unref(SearchOutlined)),
1107
+ _hoisted_2$3
1108
+ ]),
1109
+ _: 1
1110
+ }),
1111
+ createVNode(unref(Row), { gutter: [16, 16] }, {
1112
+ default: withCtx(() => [
1113
+ (openBlock(true), createElementBlock(Fragment, null, renderList(list.value, (item) => {
1114
+ return openBlock(), createBlock(unref(Col), {
1115
+ key: item.id,
1116
+ span: 6
1117
+ }, {
1118
+ default: withCtx(() => [
1119
+ createElementVNode("div", _hoisted_3$3, [
1120
+ createElementVNode("div", _hoisted_4$2, [
1121
+ item.coverPlanUrl ? (openBlock(), createElementBlock("img", {
1122
+ key: 0,
1123
+ class: "bm-fc-select-material-temp__content__item-info__cover__img",
1124
+ src: item.coverPlanUrl,
1125
+ alt: ""
1126
+ }, null, 8, _hoisted_5$2)) : (openBlock(), createBlock(TempContent, {
1127
+ key: 1,
1128
+ content: item.htmlContent
1129
+ }, null, 8, ["content"]))
1130
+ ]),
1131
+ createElementVNode("div", {
1132
+ class: "bm-fc-select-material-temp__content__item-name",
1133
+ onClick: ($event) => select(item)
1134
+ }, [
1135
+ selectItem.value.id === item.id ? (openBlock(), createBlock(unref(CheckCircleFilled), {
1136
+ key: 0,
1137
+ class: "bm-fc-select-material-temp__content__check-icon"
1138
+ })) : (openBlock(), createElementBlock("span", _hoisted_7$2)),
1139
+ createElementVNode("span", {
1140
+ class: "bm-fc-select-material-temp__content__name",
1141
+ title: item.templateName
1142
+ }, toDisplayString(item.templateName), 9, _hoisted_8$2)
1143
+ ], 8, _hoisted_6$2),
1144
+ createElementVNode("div", _hoisted_9$2, toDisplayString(unref(dayjs)(item.lastUpdateTime).format("YYYY/MM/DD")), 1)
1145
+ ])
1146
+ ]),
1147
+ _: 2
1148
+ }, 1024);
1149
+ }), 128))
1150
+ ]),
1151
+ _: 1
1152
+ }),
1153
+ createVNode(unref(Pagination), {
1154
+ style: { "text-align": "right", "margin-top": "20px" },
1155
+ current: pagination.current,
1156
+ "page-size": pagination.pageSize,
1157
+ total: pagination.total,
1158
+ size: "small",
1159
+ "show-quick-jumper": "",
1160
+ onChange: pageChange
1161
+ }, null, 8, ["current", "page-size", "total"])
1162
+ ]),
1163
+ _: 1
1164
+ })
1165
+ ]),
1166
+ _: 1
1167
+ })
1168
+ ]),
1169
+ _: 1
1170
+ }, 8, ["visible"]);
1171
+ };
1172
+ }
1173
+ });
1174
+ var SelectMaterialTemp = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__file", "select-material-temp.vue"]]);
1175
+
1176
+ const _hoisted_1$2 = { class: "bm-dc-table-widget" };
1177
+ const _hoisted_2$2 = { class: "bm-dc-table-widget__title" };
1178
+ const _hoisted_3$2 = { class: "bm-dc-table-widget__title-samll" };
1179
+ const _hoisted_4$1 = { class: "bm-dc-table-widget__top-bar" };
1180
+ const _hoisted_5$1 = /* @__PURE__ */ createTextVNode("\u4E0B\u8F7D\u6A21\u677F");
1181
+ const _hoisted_6$1 = /* @__PURE__ */ createTextVNode("\u6279\u91CF\u5BFC\u5165");
1182
+ const _hoisted_7$1 = /* @__PURE__ */ createTextVNode("\u6279\u91CF\u5220\u9664");
1183
+ const _hoisted_8$1 = /* @__PURE__ */ createTextVNode(" \u65B0\u589E ");
1184
+ const _hoisted_9$1 = { class: "bm-dc-table-widget__table" };
1185
+ const _hoisted_10$1 = ["onClick"];
1186
+ const _hoisted_11$1 = ["onClick"];
1187
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
1188
+ __name: "table-widget",
1189
+ props: ["rule", "extraConfig"],
1190
+ emits: ["change"],
1191
+ setup(__props, { emit: emits }) {
1192
+ const props = __props;
1193
+ const productInfoKeyMap = {
1194
+ \u5546\u54C1\u540D\u79F0: "productName",
1195
+ \u5546\u54C1\u7B80\u79F0: "productShortName",
1196
+ \u5546\u54C1\u56FE\u7247: "picUrl",
1197
+ \u5EFA\u8BAE\u96F6\u552E\u4EF7: "retailPrice",
1198
+ \u5546\u54C1\u7BB1\u89C4: "carton",
1199
+ \u5546\u54C1\u5355\u4F4D: "unit"
1200
+ };
1201
+ const oper = "oper";
1202
+ const bmFloatTableRef = ref();
1203
+ const importFeature = computed(() => isShow("import"));
1204
+ const deleteFeature = computed(() => isShow("delete"));
1205
+ const copyFeature = computed(() => isShow("copy"));
1206
+ const columns = reactive([]);
1207
+ const data = reactive([]);
1208
+ const config = computed(() => ({
1209
+ columns: [...columns],
1210
+ data: [...data],
1211
+ checkboxConfig: {
1212
+ trigger: "cell"
1213
+ }
1214
+ }));
1215
+ const countText = computed(() => {
1216
+ const cache = {};
1217
+ props.rule.config.childRules?.forEach((rule) => {
1218
+ if (rule.name === "numInput" && rule.config.count) {
1219
+ cache[rule.field] = { title: rule.title.title, count: 0 };
1220
+ }
1221
+ });
1222
+ data.forEach((row) => {
1223
+ Object.keys(cache).forEach((key) => {
1224
+ if (!isNaN(row[key]))
1225
+ cache[key].count += row[key];
1226
+ });
1227
+ });
1228
+ if (Object.keys(cache).length)
1229
+ return `\uFF08\u5B57\u6BB5\u540D\u603B\u8BA1\uFF1A${Object.values(cache).reduce((pre, cur, index) => {
1230
+ if (index !== 0)
1231
+ pre += "\u3001";
1232
+ pre += `${cur.title}\uFF1A${cur.count}`;
1233
+ return pre;
1234
+ }, "")}\uFF09`;
1235
+ else
1236
+ return "";
1237
+ });
1238
+ const xGrid = computed(() => bmFloatTableRef.value.xGrid || {});
1239
+ const inputRef = ref();
1240
+ function isShow(key) {
1241
+ return props.rule.config.tableAdvancedFeatures.includes(key);
1242
+ }
1243
+ function initConfig() {
1244
+ columns.splice(0, columns.length);
1245
+ data.splice(0, data.length);
1246
+ const childRules = props.rule.config.childRules;
1247
+ const value = props.rule.value;
1248
+ if (deleteFeature.value) {
1249
+ columns.push({
1250
+ type: "checkbox",
1251
+ width: "54px"
1252
+ });
1253
+ }
1254
+ childRules?.length && columns.push(
1255
+ ...childRules.reduce((pre, cur) => {
1256
+ const name = cur.name;
1257
+ if (name === "product") {
1258
+ pre.push(...getProductColumn(cur));
1259
+ } else {
1260
+ pre.push(ruleList[name].tableRule(cur, props.extraConfig));
1261
+ }
1262
+ return pre;
1263
+ }, [])
1264
+ );
1265
+ columns.push({
1266
+ field: oper,
1267
+ title: "\u64CD\u4F5C",
1268
+ width: "100px",
1269
+ fixed: "right",
1270
+ slots: {
1271
+ default: "floatHandle"
1272
+ }
1273
+ });
1274
+ handleAdd(value);
1275
+ }
1276
+ function getRowData() {
1277
+ return props.rule.config.childRules?.reduce((pre, cur) => {
1278
+ if (cur.name === "date" && !cur.config.defaultValue) {
1279
+ pre[cur.field] = dayjs().format(cur.props.format);
1280
+ } else {
1281
+ pre[cur.field] = cur.value;
1282
+ }
1283
+ return pre;
1284
+ }, {});
1285
+ }
1286
+ function getProductColumn(rule) {
1287
+ const field = rule.field;
1288
+ const associatedFields = rule.config.associatedFields;
1289
+ const columns2 = [
1290
+ {
1291
+ field,
1292
+ title: "\u5546\u54C1\u7F16\u7801",
1293
+ headerClassName: rule.effect.required ? "is-required" : "",
1294
+ width: "138px",
1295
+ slots: {
1296
+ default({ row }) {
1297
+ return h(Input, {
1298
+ value: row[field],
1299
+ placeholder: "\u8BF7\u8F93\u5165",
1300
+ "onUpdate:value": (value) => {
1301
+ row[field] = value;
1302
+ },
1303
+ onChange() {
1304
+ queryProductInfo(rule, row);
1305
+ }
1306
+ });
1307
+ }
1308
+ }
1309
+ }
1310
+ ];
1311
+ if (associatedFields.length) {
1312
+ associatedFields.forEach((item) => {
1313
+ const childField = field + item.value;
1314
+ columns2.push({
1315
+ field: childField,
1316
+ title: item.label,
1317
+ width: "138px",
1318
+ slots: {
1319
+ default({ row }) {
1320
+ if (item.value === "\u5546\u54C1\u56FE\u7247" && row[childField]) {
1321
+ return h("img", {
1322
+ src: "/cloudStorage/read/read?p=" + row[childField],
1323
+ style: {
1324
+ width: "86px",
1325
+ height: "86px",
1326
+ padding: "8px"
1327
+ }
1328
+ });
1329
+ }
1330
+ return h(
1331
+ "div",
1332
+ {
1333
+ style: {
1334
+ color: "#9393A3"
1335
+ }
1336
+ },
1337
+ [row[childField] || "\u7CFB\u7EDF\u81EA\u52A8\u5E26\u51FA"]
1338
+ );
1339
+ }
1340
+ }
1341
+ });
1342
+ });
1343
+ }
1344
+ return columns2;
1345
+ }
1346
+ function handleAdd(rowData) {
1347
+ Array.isArray(rowData) ? data.push(...rowData) : data.push(getRowData());
1348
+ }
1349
+ function handleCopy(row) {
1350
+ data.push(cloneDeep(row));
1351
+ }
1352
+ function handleDelete(index) {
1353
+ data.splice(index, 1);
1354
+ }
1355
+ function handleBatchDelete() {
1356
+ const selected = xGrid.value.getCheckboxRecords();
1357
+ selected.forEach((item) => {
1358
+ const index = data.indexOf(item);
1359
+ handleDelete(index);
1360
+ });
1361
+ }
1362
+ function handleDownload() {
1363
+ xGrid.value.exportData({
1364
+ type: "csv",
1365
+ data: [],
1366
+ columnFilterMethod({ column }) {
1367
+ return isValidColumn(column);
1368
+ }
1369
+ });
1370
+ }
1371
+ function handleImport() {
1372
+ inputRef.value.click();
1373
+ }
1374
+ function emitChange() {
1375
+ emits("change", data);
1376
+ }
1377
+ function queryProductInfo(rule, row) {
1378
+ const field = rule.field;
1379
+ const associatedFields = rule?.config?.associatedFields;
1380
+ associatedFields.length && props.extraConfig.product.fetch({ productCode: row[field] }).then((data2) => {
1381
+ associatedFields.forEach((item) => {
1382
+ row[field + item.value] = data2[productInfoKeyMap[item.value]];
1383
+ });
1384
+ });
1385
+ }
1386
+ function handleChange(e) {
1387
+ const file = e.target.files[0];
1388
+ const reader = new FileReader();
1389
+ reader.onload = (fr) => {
1390
+ const rows = parseCsv(fr?.target?.result);
1391
+ const validColumns = columns.filter((c) => isValidColumn(c));
1392
+ rows.forEach((row) => {
1393
+ const rowData = {};
1394
+ row.forEach((item, index) => {
1395
+ rowData[validColumns[index].field] = item;
1396
+ });
1397
+ data.push(rowData);
1398
+ });
1399
+ e.target.value = "";
1400
+ };
1401
+ file && reader.readAsText(file, "GB2312");
1402
+ }
1403
+ function isValidColumn(c) {
1404
+ return c.type !== "checkbox" && c.field !== oper;
1405
+ }
1406
+ function parseCsv(result) {
1407
+ let data2 = [];
1408
+ if (result) {
1409
+ data2 = result.split("\r\n").slice(1).filter((item) => item).map((item) => item.split(","));
1410
+ }
1411
+ return data2;
1412
+ }
1413
+ watch(
1414
+ () => props.rule,
1415
+ () => {
1416
+ initConfig();
1417
+ },
1418
+ {
1419
+ immediate: true
1420
+ }
1421
+ );
1422
+ watch(
1423
+ () => data,
1424
+ () => {
1425
+ emitChange();
1426
+ },
1427
+ { deep: true, immediate: true }
1428
+ );
1429
+ return (_ctx, _cache) => {
1430
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
1431
+ createElementVNode("div", _hoisted_2$2, [
1432
+ createTextVNode(toDisplayString(__props.rule.title.title) + " ", 1),
1433
+ createElementVNode("span", _hoisted_3$2, toDisplayString(unref(countText)), 1),
1434
+ createElementVNode("div", _hoisted_4$1, [
1435
+ unref(importFeature) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
1436
+ createVNode(unref(Button), { onClick: handleDownload }, {
1437
+ default: withCtx(() => [
1438
+ _hoisted_5$1
1439
+ ]),
1440
+ _: 1
1441
+ }),
1442
+ createVNode(unref(Button), { onClick: handleImport }, {
1443
+ default: withCtx(() => [
1444
+ _hoisted_6$1
1445
+ ]),
1446
+ _: 1
1447
+ }),
1448
+ createElementVNode("input", {
1449
+ ref_key: "inputRef",
1450
+ ref: inputRef,
1451
+ style: { "display": "none" },
1452
+ name: "file",
1453
+ type: "file",
1454
+ accept: "text/csv",
1455
+ onChange: handleChange
1456
+ }, null, 544)
1457
+ ], 64)) : createCommentVNode("v-if", true),
1458
+ unref(deleteFeature) ? (openBlock(), createBlock(unref(Button), {
1459
+ key: 1,
1460
+ onClick: handleBatchDelete
1461
+ }, {
1462
+ default: withCtx(() => [
1463
+ _hoisted_7$1
1464
+ ]),
1465
+ _: 1
1466
+ })) : createCommentVNode("v-if", true),
1467
+ createVNode(unref(Button), {
1468
+ type: "primary",
1469
+ onClick: handleAdd
1470
+ }, {
1471
+ default: withCtx(() => [
1472
+ createVNode(unref(PlusOutlined)),
1473
+ _hoisted_8$1
1474
+ ]),
1475
+ _: 1
1476
+ })
1477
+ ])
1478
+ ]),
1479
+ createElementVNode("div", _hoisted_9$1, [
1480
+ createVNode(unref(FormItemRest), null, {
1481
+ default: withCtx(() => [
1482
+ createVNode(unref(BmFloatTable), {
1483
+ ref_key: "bmFloatTableRef",
1484
+ ref: bmFloatTableRef,
1485
+ config: unref(config)
1486
+ }, {
1487
+ floatHandle: withCtx(({ row, rowIndex }) => [
1488
+ unref(copyFeature) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
1489
+ createElementVNode("a", {
1490
+ onClick: ($event) => handleCopy(row)
1491
+ }, "\u590D\u5236", 8, _hoisted_10$1),
1492
+ createVNode(unref(Divider), { type: "vertical" })
1493
+ ], 64)) : createCommentVNode("v-if", true),
1494
+ createElementVNode("a", {
1495
+ onClick: ($event) => handleDelete(rowIndex)
1496
+ }, "\u5220\u9664", 8, _hoisted_11$1)
1497
+ ]),
1498
+ _: 1
1499
+ }, 8, ["config"])
1500
+ ]),
1501
+ _: 1
1502
+ })
1503
+ ])
1504
+ ]);
1505
+ };
1506
+ }
1507
+ });
1508
+ var TableWidget = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__file", "table-widget.vue"]]);
1509
+
1510
+ const _hoisted_1$1 = /* @__PURE__ */ createElementVNode("span", { class: "bm-fc-form-item-label is-required" }, "\u7D20\u6750\u6A21\u677F\uFF1A", -1);
1511
+ const _hoisted_2$1 = { key: 0 };
1512
+ const _hoisted_3$1 = /* @__PURE__ */ createTextVNode("\u66F4\u6362\u6A21\u677F");
1513
+ const _hoisted_4 = /* @__PURE__ */ createTextVNode(" \u9009\u62E9\u6A21\u677F ");
1514
+ const _hoisted_5 = /* @__PURE__ */ createElementVNode("span", { class: "bm-fc-form-item-label" }, "\u7D20\u6750\u7C7B\u578B\uFF1A", -1);
1515
+ const _hoisted_6 = /* @__PURE__ */ createElementVNode("span", { class: "bm-fc-form-item-label" }, "\u5C3A\u5BF8\uFF1A", -1);
1516
+ const _hoisted_7 = /* @__PURE__ */ createElementVNode("span", { class: "bm-fc-form-item-label" }, "\u5C01\u9762\u56FE\uFF1A", -1);
1517
+ const _hoisted_8 = ["src"];
1518
+ const _hoisted_9 = { key: 1 };
1519
+ const _hoisted_10 = /* @__PURE__ */ createElementVNode("span", { class: "bm-fc-form-item-label" }, "\u6A21\u677F\u7ED3\u6784\u56FE\uFF1A", -1);
1520
+ const _hoisted_11 = { key: 1 };
1521
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
1522
+ __name: "material-temp",
1523
+ props: [
1524
+ "uploadPictureRule",
1525
+ "extraConfig",
1526
+ "formCreateInject",
1527
+ "value"
1528
+ ],
1529
+ emits: ["change"],
1530
+ setup(__props, { emit: emits }) {
1531
+ const props = __props;
1532
+ const activeKey = ref("\u7D20\u67501");
1533
+ const visible = ref(false);
1534
+ computed(() => props.formCreateInject.rule.value || {});
1535
+ const panes = reactive([
1536
+ {
1537
+ key: "\u7D20\u67501",
1538
+ title: "\u7D20\u67501",
1539
+ tempSelected: {}
1540
+ }
1541
+ ]);
1542
+ computed(
1543
+ () => panes.find((pane) => pane.key === activeKey.value)
1544
+ );
1545
+ let index = 2;
1546
+ const measrueDicts = ref([]);
1547
+ function selectTemp() {
1548
+ visible.value = true;
1549
+ }
1550
+ function handleSelect(tempId) {
1551
+ return getTempDetail(tempId).then((result) => {
1552
+ const activePane2 = getAcitvePane();
1553
+ activePane2.tempSelected = result;
1554
+ activePane2.tableRule = getTableRule(result.coverageArr);
1555
+ });
1556
+ }
1557
+ function getAcitvePane() {
1558
+ return panes.find((pane) => pane.key === activeKey.value);
1559
+ }
1560
+ function getTempDetail(templateCode) {
1561
+ return props.extraConfig.fetchMaterialTempDetail({ templateCode });
1562
+ }
1563
+ function handleUpload(list) {
1564
+ getAcitvePane().uploadList = list;
1565
+ }
1566
+ function handleAdd() {
1567
+ const key = `\u7D20\u6750${index}`;
1568
+ panes.push({
1569
+ key,
1570
+ title: `\u7D20\u6750${index}`,
1571
+ tempSelected: {}
1572
+ });
1573
+ activeKey.value = key;
1574
+ index++;
1575
+ }
1576
+ function handleDelete(targetKey) {
1577
+ panes.splice(
1578
+ panes.findIndex((pane) => pane.key === targetKey),
1579
+ 1
1580
+ );
1581
+ }
1582
+ function getTableRule(coverageArr) {
1583
+ const fieldTypeMap = {
1584
+ 1: "input",
1585
+ 2: "numInput",
1586
+ 3: "date",
1587
+ 4: "input"
1588
+ };
1589
+ const formatMap = {
1590
+ 0: "YYYY-MM",
1591
+ 1: "YYYY-MM-DD",
1592
+ 2: "YYYY-MM-DD HH:mm"
1593
+ };
1594
+ const activePane2 = getAcitvePane();
1595
+ const childRules = coverageArr.filter((coverage) => coverage.fieldType === 4 || coverage.isEdit).map((coverage) => {
1596
+ const extraValues = JSON.parse(coverage.extraValues);
1597
+ const value = {
1598
+ name: fieldTypeMap[coverage.fieldType],
1599
+ title: {
1600
+ title: coverage.name
1601
+ },
1602
+ field: coverage.name,
1603
+ effect: {
1604
+ required: coverage.fieldType === 4 || coverage.isCheck
1605
+ },
1606
+ config: {
1607
+ fieldRatio: "140px"
1608
+ }
1609
+ };
1610
+ if (coverage.fieldType === 3) {
1611
+ value.props = {};
1612
+ value.props.format = formatMap[extraValues.format];
1613
+ }
1614
+ if (coverage.fieldType === 1 || coverage.fieldType === 2 || coverage.fieldType === 4) {
1615
+ value.props = {};
1616
+ value.props.placeholder = "\u8BF7\u8F93\u5165";
1617
+ }
1618
+ return value;
1619
+ });
1620
+ if (childRules.length)
1621
+ return {
1622
+ title: {
1623
+ title: "\u660E\u7EC6\u5217\u8868"
1624
+ },
1625
+ config: {
1626
+ tableAdvancedFeatures: ["import", "delete", "copy"],
1627
+ childRules
1628
+ },
1629
+ value: activePane2.tableData
1630
+ };
1631
+ else
1632
+ return void 0;
1633
+ }
1634
+ function handleTableDataChange(value) {
1635
+ getAcitvePane().tableData = value;
1636
+ }
1637
+ function emitChange() {
1638
+ emits("change", {
1639
+ index,
1640
+ panes: panes.map((pane) => ({
1641
+ key: pane.key,
1642
+ title: pane.title,
1643
+ tempIdSelected: pane.tempSelected.templateCode || pane.tempIdSelected,
1644
+ tableData: pane.tableData,
1645
+ uploadList: pane.uploadList
1646
+ }))
1647
+ });
1648
+ }
1649
+ function initValue(value) {
1650
+ index = props.value.index;
1651
+ panes.splice(0, panes.length);
1652
+ value.panes.forEach((pane, index2) => {
1653
+ pane.tempSelected = {};
1654
+ if (index2 === 0) {
1655
+ activeKey.value = pane.key;
1656
+ }
1657
+ panes.push(pane);
1658
+ });
1659
+ handTabChange();
1660
+ }
1661
+ function handTabChange() {
1662
+ const activePane2 = getAcitvePane();
1663
+ if (activePane2.tempIdSelected) {
1664
+ handleSelect(activePane2.tempIdSelected).then(() => {
1665
+ delete activePane2.tempIdSelected;
1666
+ });
1667
+ }
1668
+ }
1669
+ props.value && initValue(props.value);
1670
+ props.extraConfig.getDict().then((data) => {
1671
+ measrueDicts.value = data;
1672
+ });
1673
+ watch(
1674
+ () => panes,
1675
+ () => {
1676
+ emitChange();
1677
+ },
1678
+ {
1679
+ immediate: true,
1680
+ deep: true
1681
+ }
1682
+ );
1683
+ return (_ctx, _cache) => {
1684
+ return openBlock(), createElementBlock(Fragment, null, [
1685
+ createVNode(unref(Tabs), {
1686
+ activeKey: activeKey.value,
1687
+ "onUpdate:activeKey": _cache[0] || (_cache[0] = ($event) => activeKey.value = $event),
1688
+ class: "bm-fc-material-temp",
1689
+ type: "editable-card",
1690
+ "hide-add": "",
1691
+ size: "small",
1692
+ onEdit: handleDelete,
1693
+ onChange: handTabChange
1694
+ }, {
1695
+ rightExtra: withCtx(() => [
1696
+ createElementVNode("span", {
1697
+ class: "bm-fc-material-temp__add",
1698
+ onClick: handleAdd
1699
+ }, [
1700
+ createVNode(unref(PlusOutlined))
1701
+ ])
1702
+ ]),
1703
+ default: withCtx(() => [
1704
+ (openBlock(true), createElementBlock(Fragment, null, renderList(panes, (pane) => {
1705
+ return openBlock(), createBlock(unref(TabPane), {
1706
+ key: pane.key,
1707
+ tab: pane.title
1708
+ }, {
1709
+ default: withCtx(() => [
1710
+ createVNode(unref(FormItemRest), null, {
1711
+ default: withCtx(() => [
1712
+ createVNode(unref(Row), { gutter: [0, 24] }, {
1713
+ default: withCtx(() => [
1714
+ createVNode(unref(Col), { span: 8 }, {
1715
+ default: withCtx(() => [
1716
+ createVNode(unref(Row), null, {
1717
+ default: withCtx(() => [
1718
+ createVNode(unref(Col), null, {
1719
+ default: withCtx(() => [
1720
+ _hoisted_1$1
1721
+ ]),
1722
+ _: 1
1723
+ }),
1724
+ createVNode(unref(Col), { flex: 1 }, {
1725
+ default: withCtx(() => [
1726
+ pane.tempSelected.templateName ? (openBlock(), createElementBlock("div", _hoisted_2$1, [
1727
+ createTextVNode(toDisplayString(pane.tempSelected.templateName) + " ", 1),
1728
+ createVNode(unref(Button), {
1729
+ type: "link",
1730
+ onClick: selectTemp
1731
+ }, {
1732
+ default: withCtx(() => [
1733
+ _hoisted_3$1
1734
+ ]),
1735
+ _: 1
1736
+ })
1737
+ ])) : (openBlock(), createBlock(unref(Button), {
1738
+ key: 1,
1739
+ onClick: selectTemp
1740
+ }, {
1741
+ default: withCtx(() => [
1742
+ createVNode(unref(PlusOutlined)),
1743
+ _hoisted_4
1744
+ ]),
1745
+ _: 1
1746
+ }))
1747
+ ]),
1748
+ _: 2
1749
+ }, 1024)
1750
+ ]),
1751
+ _: 2
1752
+ }, 1024)
1753
+ ]),
1754
+ _: 2
1755
+ }, 1024),
1756
+ createVNode(unref(Col), { span: 8 }, {
1757
+ default: withCtx(() => [
1758
+ createVNode(unref(Row), null, {
1759
+ default: withCtx(() => [
1760
+ createVNode(unref(Col), null, {
1761
+ default: withCtx(() => [
1762
+ _hoisted_5
1763
+ ]),
1764
+ _: 1
1765
+ }),
1766
+ createVNode(unref(Col), {
1767
+ class: "bm-fc-form-item",
1768
+ flex: 1
1769
+ }, {
1770
+ default: withCtx(() => [
1771
+ createTextVNode(toDisplayString(pane.tempSelected.materialCategoryNameShow || "\u7CFB\u7EDF\u81EA\u52A8\u5E26\u51FA"), 1)
1772
+ ]),
1773
+ _: 2
1774
+ }, 1024)
1775
+ ]),
1776
+ _: 2
1777
+ }, 1024)
1778
+ ]),
1779
+ _: 2
1780
+ }, 1024),
1781
+ createVNode(unref(Col), { span: 8 }, {
1782
+ default: withCtx(() => [
1783
+ createVNode(unref(Row), null, {
1784
+ default: withCtx(() => [
1785
+ createVNode(unref(Col), null, {
1786
+ default: withCtx(() => [
1787
+ _hoisted_6
1788
+ ]),
1789
+ _: 1
1790
+ }),
1791
+ createVNode(unref(Col), {
1792
+ class: "bm-fc-form-item",
1793
+ flex: 1
1794
+ }, {
1795
+ default: withCtx(() => [
1796
+ createTextVNode(toDisplayString(measrueDicts.value.find(
1797
+ (dict) => dict.dictId + "" === pane.tempSelected.measure + ""
1798
+ )?.dictName || "\u7CFB\u7EDF\u81EA\u52A8\u83B7\u53D6"), 1)
1799
+ ]),
1800
+ _: 2
1801
+ }, 1024)
1802
+ ]),
1803
+ _: 2
1804
+ }, 1024)
1805
+ ]),
1806
+ _: 2
1807
+ }, 1024),
1808
+ createVNode(unref(Col), { span: 8 }, {
1809
+ default: withCtx(() => [
1810
+ createVNode(unref(Row), null, {
1811
+ default: withCtx(() => [
1812
+ createVNode(unref(Col), null, {
1813
+ default: withCtx(() => [
1814
+ _hoisted_7
1815
+ ]),
1816
+ _: 1
1817
+ }),
1818
+ createVNode(unref(Col), {
1819
+ class: "bm-fc-form-item",
1820
+ flex: 1
1821
+ }, {
1822
+ default: withCtx(() => [
1823
+ pane.tempSelected.coverPlanPath ? (openBlock(), createElementBlock("img", {
1824
+ key: 0,
1825
+ class: "bm-fc-form-item__cover",
1826
+ src: pane.tempSelected.coverPlanPath
1827
+ }, null, 8, _hoisted_8)) : (openBlock(), createElementBlock("span", _hoisted_9, "\u7CFB\u7EDF\u81EA\u52A8\u83B7\u53D6"))
1828
+ ]),
1829
+ _: 2
1830
+ }, 1024)
1831
+ ]),
1832
+ _: 2
1833
+ }, 1024)
1834
+ ]),
1835
+ _: 2
1836
+ }, 1024),
1837
+ createVNode(unref(Col), { span: 8 }, {
1838
+ default: withCtx(() => [
1839
+ createVNode(unref(Row), null, {
1840
+ default: withCtx(() => [
1841
+ createVNode(unref(Col), null, {
1842
+ default: withCtx(() => [
1843
+ _hoisted_10
1844
+ ]),
1845
+ _: 1
1846
+ }),
1847
+ createVNode(unref(Col), {
1848
+ class: "bm-fc-form-item",
1849
+ flex: 1
1850
+ }, {
1851
+ default: withCtx(() => [
1852
+ pane.tempSelected.content ? (openBlock(), createBlock(TempContent, {
1853
+ key: 0,
1854
+ class: "bm-fc-form-item__temp-content",
1855
+ content: pane.tempSelected.content
1856
+ }, null, 8, ["content"])) : (openBlock(), createElementBlock("span", _hoisted_11, "\u7CFB\u7EDF\u81EA\u52A8\u83B7\u53D6"))
1857
+ ]),
1858
+ _: 2
1859
+ }, 1024)
1860
+ ]),
1861
+ _: 2
1862
+ }, 1024)
1863
+ ]),
1864
+ _: 2
1865
+ }, 1024),
1866
+ !__props.uploadPictureRule.hidden ? (openBlock(), createBlock(unref(Col), {
1867
+ key: 0,
1868
+ span: 24
1869
+ }, {
1870
+ default: withCtx(() => [
1871
+ createVNode(unref(Row), null, {
1872
+ default: withCtx(() => [
1873
+ createVNode(unref(Col), null, {
1874
+ default: withCtx(() => [
1875
+ createElementVNode("span", {
1876
+ class: normalizeClass(["bm-fc-form-item-label", { "is-required": __props.uploadPictureRule.required }])
1877
+ }, "\u4E0A\u4F20\u53C2\u8003\u56FE\uFF1A", 2)
1878
+ ]),
1879
+ _: 1
1880
+ }),
1881
+ createVNode(unref(Col), {
1882
+ class: "bm-fc-form-item",
1883
+ flex: 1
1884
+ }, {
1885
+ default: withCtx(() => [
1886
+ createVNode(unref(Picture), {
1887
+ "upload-props": {
1888
+ listType: "picture-card",
1889
+ text: "\u4E0A\u4F20\u56FE\u7247",
1890
+ multiple: true
1891
+ },
1892
+ "extra-props": {
1893
+ maxCount: 9
1894
+ },
1895
+ "upload-request": __props.extraConfig.uploadRequest,
1896
+ "default-list": pane.uploadList,
1897
+ onUpdate: handleUpload
1898
+ }, null, 8, ["upload-request", "default-list"])
1899
+ ]),
1900
+ _: 2
1901
+ }, 1024)
1902
+ ]),
1903
+ _: 2
1904
+ }, 1024)
1905
+ ]),
1906
+ _: 2
1907
+ }, 1024)) : createCommentVNode("v-if", true)
1908
+ ]),
1909
+ _: 2
1910
+ }, 1024),
1911
+ pane.tableRule ? (openBlock(), createBlock(TableWidget, {
1912
+ key: 0,
1913
+ rule: pane.tableRule,
1914
+ onChange: handleTableDataChange
1915
+ }, null, 8, ["rule"])) : createCommentVNode("v-if", true)
1916
+ ]),
1917
+ _: 2
1918
+ }, 1024)
1919
+ ]),
1920
+ _: 2
1921
+ }, 1032, ["tab"]);
1922
+ }), 128))
1923
+ ]),
1924
+ _: 1
1925
+ }, 8, ["activeKey"]),
1926
+ createVNode(SelectMaterialTemp, {
1927
+ visible: visible.value,
1928
+ "onUpdate:visible": _cache[1] || (_cache[1] = ($event) => visible.value = $event),
1929
+ "fetch-material-type": __props.extraConfig.fetchMaterialType,
1930
+ "fetch-material-temp": __props.extraConfig.fetchMaterialTemp,
1931
+ onSelect: handleSelect
1932
+ }, null, 8, ["visible", "fetch-material-type", "fetch-material-temp"])
1933
+ ], 64);
1934
+ };
1935
+ }
1936
+ });
1937
+ var MaterialTemp = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__file", "material-temp.vue"]]);
1938
+
1939
+ var materialTemp = {
1940
+ name: 'materialTemp',
1941
+ rule(data, extraConfig) {
1942
+ return {
1943
+ native: true,
1944
+ type: 'div',
1945
+ children: [
1946
+ {
1947
+ native: true,
1948
+ type: 'div',
1949
+ children: ['素材信息'],
1950
+ class: 'bm-fc-head-line',
1951
+ },
1952
+ {
1953
+ type: 'MaterialTemp',
1954
+ component: MaterialTemp,
1955
+ field: data.field,
1956
+ props: {
1957
+ uploadPictureRule: data.config.uploadPictureRule,
1958
+ extraConfig: extraConfig.materialTemp,
1959
+ value: data.value,
1960
+ },
1961
+ inject: true,
1962
+ on: {
1963
+ change(inject, value) {
1964
+ inject.self.value = value;
1965
+ },
1966
+ },
1967
+ },
1968
+ ],
1969
+ class: 'bm-fc-module-widget',
1970
+ };
1971
+ },
1972
+ };
1973
+
1974
+ const _hoisted_1 = { class: "bm-fc-form-item-label" };
1975
+ const _hoisted_2 = ["src"];
1976
+ const _hoisted_3 = /* @__PURE__ */ createTextVNode("\u7CFB\u7EDF\u81EA\u52A8\u5E26\u51FA");
1977
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1978
+ __name: "product-info",
1979
+ props: [
1980
+ "associatedFields",
1981
+ "dataFiltering",
1982
+ "required",
1983
+ "extraConfig",
1984
+ "defalutValue"
1985
+ ],
1986
+ emits: ["change"],
1987
+ setup(__props, { emit: emits }) {
1988
+ const props = __props;
1989
+ const productInfo = ref({});
1990
+ const productInfoKeyMap = {
1991
+ \u5546\u54C1\u540D\u79F0: "productName",
1992
+ \u5546\u54C1\u7B80\u79F0: "productShortName",
1993
+ \u5546\u54C1\u56FE\u7247: "picUrl",
1994
+ \u5EFA\u8BAE\u96F6\u552E\u4EF7: "retailPrice",
1995
+ \u5546\u54C1\u7BB1\u89C4: "carton",
1996
+ \u5546\u54C1\u5355\u4F4D: "unit"
1997
+ };
1998
+ const unitMap = ["\u652F", "\u74F6", "\u5957", "\u7EC4", "\u7BB1", "\u4E2A", "\u5F20"];
1999
+ async function fetch(value) {
2000
+ productInfo.value = await props.extraConfig.fetch({
2001
+ productCode: value,
2002
+ filterByShopcode: props.dataFiltering
2003
+ }) || {};
2004
+ }
2005
+ function handleBlur(evt) {
2006
+ const value = evt.target.value;
2007
+ emitChange(value);
2008
+ fetch(value);
2009
+ }
2010
+ function getValue(value) {
2011
+ return productInfo.value[productInfoKeyMap[value]];
2012
+ }
2013
+ function emitChange(value) {
2014
+ emits("change", value);
2015
+ }
2016
+ watch(
2017
+ () => props.defalutValue,
2018
+ (val) => {
2019
+ val && fetch(val);
2020
+ },
2021
+ {
2022
+ immediate: true
2023
+ }
2024
+ );
2025
+ return (_ctx, _cache) => {
2026
+ return openBlock(), createBlock(unref(Row), { gutter: [0, 24] }, {
2027
+ default: withCtx(() => [
2028
+ createVNode(unref(Col), { span: 8 }, {
2029
+ default: withCtx(() => [
2030
+ createVNode(unref(Row), null, {
2031
+ default: withCtx(() => [
2032
+ createVNode(unref(Col), null, {
2033
+ default: withCtx(() => [
2034
+ createElementVNode("span", {
2035
+ class: normalizeClass([
2036
+ "bm-fc-form-item-label",
2037
+ props.required ? "is-required" : ""
2038
+ ])
2039
+ }, "\u5546\u54C1\u7F16\u53F7\uFF1A", 2)
2040
+ ]),
2041
+ _: 1
2042
+ }),
2043
+ createVNode(unref(Col), { flex: 1 }, {
2044
+ default: withCtx(() => [
2045
+ createVNode(unref(Input), {
2046
+ placeholder: "\u8BF7\u8F93\u5165",
2047
+ value: __props.defalutValue,
2048
+ onBlur: handleBlur
2049
+ }, null, 8, ["value"])
2050
+ ]),
2051
+ _: 1
2052
+ })
2053
+ ]),
2054
+ _: 1
2055
+ })
2056
+ ]),
2057
+ _: 1
2058
+ }),
2059
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.associatedFields, (field) => {
2060
+ return openBlock(), createBlock(unref(Col), {
2061
+ key: field.key,
2062
+ span: 8
2063
+ }, {
2064
+ default: withCtx(() => [
2065
+ createVNode(unref(Row), null, {
2066
+ default: withCtx(() => [
2067
+ createVNode(unref(Col), null, {
2068
+ default: withCtx(() => [
2069
+ createElementVNode("span", _hoisted_1, toDisplayString(field.label) + "\uFF1A", 1)
2070
+ ]),
2071
+ _: 2
2072
+ }, 1024),
2073
+ createVNode(unref(Col), {
2074
+ class: "bm-fc-form-item",
2075
+ flex: 1
2076
+ }, {
2077
+ default: withCtx(() => [
2078
+ getValue(field.value) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
2079
+ field.value === "\u5546\u54C1\u56FE\u7247" ? (openBlock(), createElementBlock("img", {
2080
+ key: 0,
2081
+ src: getValue(field.value)
2082
+ }, null, 8, _hoisted_2)) : field.value === "\u5546\u54C1\u5355\u4F4D" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
2083
+ createTextVNode(toDisplayString(unitMap[getValue(field.value)]), 1)
2084
+ ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [
2085
+ createTextVNode(toDisplayString(getValue(field.value)), 1)
2086
+ ], 64))
2087
+ ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
2088
+ _hoisted_3
2089
+ ], 64))
2090
+ ]),
2091
+ _: 2
2092
+ }, 1024)
2093
+ ]),
2094
+ _: 2
2095
+ }, 1024)
2096
+ ]),
2097
+ _: 2
2098
+ }, 1024);
2099
+ }), 128))
2100
+ ]),
2101
+ _: 1
2102
+ });
2103
+ };
2104
+ }
2105
+ });
2106
+ var ProductInfo = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__file", "product-info.vue"]]);
2107
+
2108
+ var product = {
2109
+ name: 'product',
2110
+ rule(data, extraConfig) {
2111
+ return {
2112
+ type: 'ProductInfo',
2113
+ component: ProductInfo,
2114
+ field: data.field,
2115
+ effect: {
2116
+ required: data.effect.required && '请输入商品编号',
2117
+ },
2118
+ props: {
2119
+ required: data.effect.required,
2120
+ associatedFields: data.config.associatedFields,
2121
+ dataFiltering: data.config.dataFiltering,
2122
+ extraConfig: extraConfig.product,
2123
+ defalutValue: data.value,
2124
+ },
2125
+ inject: true,
2126
+ on: {
2127
+ change(inject, value) {
2128
+ inject.self.value = value;
2129
+ nextTick(() => {
2130
+ inject.api.validateField(inject.self.field);
2131
+ });
2132
+ },
2133
+ },
2134
+ };
2135
+ },
2136
+ rowRule(data) {
2137
+ return {
2138
+ type: 'ProductInfo',
2139
+ component: ProductInfo,
2140
+ field: data.field,
2141
+ effect: {
2142
+ required: data.effect.required && '请输入商品编号',
2143
+ },
2144
+ props: {
2145
+ required: data.effect.required,
2146
+ associatedFields: data.config.associatedFields,
2147
+ dataFiltering: data.config.dataFiltering,
2148
+ defalutValue: data.value,
2149
+ },
2150
+ inject: true,
2151
+ on: {
2152
+ change(inject, value) {
2153
+ inject.self.value = value;
2154
+ },
2155
+ },
2156
+ };
2157
+ },
2158
+ };
2159
+
2160
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
2161
+ __name: "shop-widget",
2162
+ props: ["value", "extraConfig", "rule"],
2163
+ emits: ["change"],
2164
+ setup(__props, { emit: emits }) {
2165
+ const props = __props;
2166
+ const options = ref([]);
2167
+ const keyword = ref("");
2168
+ const debounceFetch = debounce((value) => {
2169
+ props.extraConfig.fetch(postData.value).then((data) => {
2170
+ if (value === keyword.value)
2171
+ options.value = data;
2172
+ });
2173
+ }, 300);
2174
+ const postData = computed(() => ({
2175
+ keyword: keyword.value,
2176
+ filterByUser: props.rule.config.dataFiltering
2177
+ }));
2178
+ function initOptions() {
2179
+ props.extraConfig.fetch(postData.value).then((data) => {
2180
+ options.value = data;
2181
+ });
2182
+ }
2183
+ function handleChange(value, option) {
2184
+ emits("change", option);
2185
+ }
2186
+ function handleSearch(value) {
2187
+ keyword.value = value;
2188
+ debounceFetch(value);
2189
+ }
2190
+ initOptions();
2191
+ return (_ctx, _cache) => {
2192
+ return openBlock(), createBlock(unref(Select), {
2193
+ value: __props.value,
2194
+ placeholder: "\u8BF7\u9009\u62E9",
2195
+ "show-search": "",
2196
+ "show-arrow": false,
2197
+ "default-active-first-option": false,
2198
+ "filter-option": false,
2199
+ "not-found-content": null,
2200
+ options: options.value,
2201
+ onChange: handleChange,
2202
+ onSearch: handleSearch
2203
+ }, null, 8, ["value", "options"]);
2204
+ };
2205
+ }
2206
+ });
2207
+ var ShopWidget = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__file", "shop-widget.vue"]]);
2208
+
2209
+ var shop = {
2210
+ name: 'shop',
2211
+ rule(data, extraConfig) {
2212
+ const shopExtraConfig = extraConfig.shop;
2213
+ return {
2214
+ type: 'ShopWidget',
2215
+ component: ShopWidget,
2216
+ title: data.title.title,
2217
+ field: data.field,
2218
+ effect: {
2219
+ required: data.effect.required && '请选择店铺',
2220
+ },
2221
+ props: {
2222
+ rule: data,
2223
+ extraConfig: shopExtraConfig,
2224
+ value: data.value,
2225
+ },
2226
+ inject: true,
2227
+ on: {
2228
+ change(inject, value) {
2229
+ const rule = inject.self;
2230
+ rule.value = value;
2231
+ nextTick(() => {
2232
+ setTimeout(() => {
2233
+ inject.api.validateField(rule.field);
2234
+ });
2235
+ });
2236
+ },
2237
+ },
2238
+ value: data.value,
2239
+ };
2240
+ },
2241
+ rowRule(data, extraConfig) {
2242
+ const shopExtraConfig = extraConfig.shop;
2243
+ return {
2244
+ type: 'ShopWidget',
2245
+ component: ShopWidget,
2246
+ title: data.title.title,
2247
+ field: data.field,
2248
+ effect: {
2249
+ required: data.effect.required && '请选择店铺',
2250
+ },
2251
+ props: {
2252
+ rule: data,
2253
+ extraConfig: shopExtraConfig,
2254
+ value: data.value,
2255
+ },
2256
+ inject: true,
2257
+ on: {
2258
+ change(inject, value) {
2259
+ const rule = inject.self;
2260
+ rule.value = value;
2261
+ nextTick(() => {
2262
+ setTimeout(() => {
2263
+ inject.api.validateField(rule.field);
2264
+ });
2265
+ });
2266
+ },
2267
+ },
2268
+ col: {
2269
+ span: 12,
2270
+ },
2271
+ value: data.value,
2272
+ };
2273
+ },
2274
+ tableRule(data, extraConfig) {
2275
+ const field = data.field;
2276
+ return {
2277
+ field,
2278
+ title: data.title.title,
2279
+ headerClassName: data.effect.required ? 'is-required' : '',
2280
+ width: '138px',
2281
+ slots: {
2282
+ default({ row }) {
2283
+ return h(ShopWidget, {
2284
+ rule: data,
2285
+ extraConfig: extraConfig.shop,
2286
+ value: row[field],
2287
+ onChange: (value) => {
2288
+ row[field] = value;
2289
+ },
2290
+ });
2291
+ },
2292
+ },
2293
+ };
2294
+ },
2295
+ };
2296
+
2297
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
2298
+ __name: "material-type-in-table",
2299
+ props: ["config", "multiple", "format", "value"],
2300
+ emits: ["change"],
2301
+ setup(__props, { emit: emits }) {
2302
+ const props = __props;
2303
+ const options = ref([]);
2304
+ function initOptions() {
2305
+ props.config.fetch({ level: 1, relationCode: "" }).then((result) => {
2306
+ result.forEach((item) => {
2307
+ item.isLeaf = props.format === 1;
2308
+ });
2309
+ options.value = result;
2310
+ });
2311
+ }
2312
+ function loadData(selectedOptions) {
2313
+ const optionLength = selectedOptions.length;
2314
+ const targetOption = selectedOptions[optionLength - 1];
2315
+ targetOption.loading = true;
2316
+ props.config.fetch({
2317
+ level: optionLength + 1,
2318
+ relationCode: targetOption.value
2319
+ }).then((result) => {
2320
+ result.forEach((item) => {
2321
+ item.isLeaf = props.format === optionLength + 1;
2322
+ });
2323
+ targetOption.children = result;
2324
+ }).finally(() => {
2325
+ targetOption.loading = false;
2326
+ });
2327
+ }
2328
+ function handleChange(v) {
2329
+ emits("change", v);
2330
+ }
2331
+ initOptions();
2332
+ return (_ctx, _cache) => {
2333
+ return openBlock(), createBlock(unref(Cascader), {
2334
+ value: __props.value,
2335
+ placeholder: "\u8BF7\u8F93\u5165",
2336
+ multiple: __props.multiple,
2337
+ options: options.value,
2338
+ "load-data": loadData,
2339
+ "onUpdate:value": handleChange
2340
+ }, null, 8, ["value", "multiple", "options"]);
2341
+ };
2342
+ }
2343
+ });
2344
+ var materialTypeInTable = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__file", "material-type-in-table.vue"]]);
2345
+
2346
+ FC.register({
2347
+ name: 'materialTypesOption',
2348
+ init({ value }, rule) {
2349
+ getOption(value, { level: 1, relationCode: '' }).then((data) => {
2350
+ data = isLeaf(data, rule.config.format === 1);
2351
+ if (rule.props) {
2352
+ rule.props.options = data;
2353
+ }
2354
+ else {
2355
+ (rule.props = {}).options = data;
2356
+ }
2357
+ });
2358
+ },
2359
+ });
2360
+ function getOption(config, data) {
2361
+ return config.fetch(data);
2362
+ }
2363
+ function isLeaf(data, value) {
2364
+ data.forEach((item) => {
2365
+ item.isLeaf = value;
2366
+ });
2367
+ return data;
2368
+ }
2369
+ var materialType = {
2370
+ name: 'materialType',
2371
+ rule(data, extraConfig) {
2372
+ return {
2373
+ type: 'cascader',
2374
+ field: data.field,
2375
+ title: '素材类型',
2376
+ validate: [
2377
+ {
2378
+ required: data.effect.required,
2379
+ type: 'array',
2380
+ min: 1,
2381
+ message: '请选择素材类型',
2382
+ },
2383
+ ],
2384
+ props: {
2385
+ placeholder: '请选择',
2386
+ multiple: data.props.multiple,
2387
+ loadData(inject, selectedOptions) {
2388
+ const optionLength = selectedOptions.length;
2389
+ const targetOption = selectedOptions[optionLength - 1];
2390
+ targetOption.loading = true;
2391
+ getOption(extraConfig.materialType, {
2392
+ level: optionLength + 1,
2393
+ relationCode: targetOption.value,
2394
+ })
2395
+ .then((result) => {
2396
+ result = isLeaf(result, inject.self.config.format === optionLength + 1);
2397
+ targetOption.children = result;
2398
+ })
2399
+ .finally(() => {
2400
+ targetOption.loading = false;
2401
+ });
2402
+ },
2403
+ },
2404
+ config: {
2405
+ format: data.config.format,
2406
+ },
2407
+ effect: {
2408
+ materialTypesOption: extraConfig.materialType,
2409
+ },
2410
+ inject: true,
2411
+ on: {
2412
+ change(inject, list) {
2413
+ const rule = inject.self;
2414
+ rule.value = list;
2415
+ nextTick(() => {
2416
+ inject.api.validateField(rule.field);
2417
+ });
2418
+ },
2419
+ },
2420
+ value: data.value,
2421
+ };
2422
+ },
2423
+ rowRule(data, extraConfig) {
2424
+ return {
2425
+ type: 'cascader',
2426
+ field: data.field,
2427
+ title: '素材类型',
2428
+ validate: [
2429
+ {
2430
+ required: data.effect.required,
2431
+ type: 'array',
2432
+ min: 1,
2433
+ message: '请选择素材类型',
2434
+ },
2435
+ ],
2436
+ props: {
2437
+ placeholder: '请选择',
2438
+ multiple: data.props.multiple,
2439
+ loadData(inject, selectedOptions) {
2440
+ const optionLength = selectedOptions.length;
2441
+ const targetOption = selectedOptions[optionLength - 1];
2442
+ targetOption.loading = true;
2443
+ getOption(extraConfig.materialType, optionLength + 1)
2444
+ .then((result) => {
2445
+ result = isLeaf(result, inject.self.config.format === optionLength + 1);
2446
+ targetOption.children = result;
2447
+ })
2448
+ .finally(() => {
2449
+ targetOption.loading = false;
2450
+ });
2451
+ },
2452
+ },
2453
+ config: {
2454
+ format: data.config.format,
2455
+ },
2456
+ effect: {
2457
+ materialTypesOption: extraConfig.materialType,
2458
+ },
2459
+ inject: true,
2460
+ on: {
2461
+ change(inject, list) {
2462
+ const rule = inject.self;
2463
+ rule.value = list;
2464
+ nextTick(() => {
2465
+ inject.api.validateField(rule.field);
2466
+ });
2467
+ },
2468
+ },
2469
+ col: {
2470
+ span: 12,
2471
+ },
2472
+ value: data.value,
2473
+ };
2474
+ },
2475
+ tableRule(data, extraConfig) {
2476
+ const field = data.field;
2477
+ return {
2478
+ field,
2479
+ title: '素材类型',
2480
+ headerClassName: data.effect.required ? 'is-required' : '',
2481
+ width: '138px',
2482
+ slots: {
2483
+ default({ row }) {
2484
+ return h(materialTypeInTable, {
2485
+ multiple: data.props.multiple,
2486
+ format: data.config.format,
2487
+ config: extraConfig.materialType,
2488
+ onChange: (value) => {
2489
+ row[field] = value;
2490
+ },
2491
+ value: row[field],
2492
+ });
2493
+ },
2494
+ },
2495
+ };
2496
+ },
2497
+ };
2498
+
2499
+ var row = {
2500
+ name: 'row',
2501
+ rule(data) {
2502
+ const children = [
2503
+ {
2504
+ type: 'row',
2505
+ props: {
2506
+ gutter: [0, 24],
2507
+ },
2508
+ children: [],
2509
+ class: 'bm-fc-row-widget',
2510
+ },
2511
+ ];
2512
+ if (data.config.showTitle) {
2513
+ children.unshift({
2514
+ native: true,
2515
+ type: 'div',
2516
+ children: [data.config.title],
2517
+ class: 'bm-fc-head-line',
2518
+ });
2519
+ }
2520
+ return {
2521
+ native: true,
2522
+ type: 'div',
2523
+ field: data.field,
2524
+ children,
2525
+ class: 'bm-fc-module-widget',
2526
+ };
2527
+ },
2528
+ };
2529
+
2530
+ var department = {
2531
+ name: 'department',
2532
+ rule(data, extraConfig) {
2533
+ return {
2534
+ type: 'StaffSelector',
2535
+ component: StaffSelector,
2536
+ field: data.field,
2537
+ title: data.title.title,
2538
+ props: {
2539
+ title: '添加部门',
2540
+ mode: data.props.limit ? 'radio' : 'multiple',
2541
+ placeholder: data.props.placeholder,
2542
+ immediateFetch: true,
2543
+ unitStr: '个',
2544
+ defaultSelected: data.value,
2545
+ load() {
2546
+ return __awaiter(this, void 0, void 0, function* () {
2547
+ return yield extraConfig.department.fetch();
2548
+ });
2549
+ },
2550
+ },
2551
+ effect: {
2552
+ required: data.effect.required && '请选择',
2553
+ },
2554
+ wrap: {
2555
+ wrapperCol: {
2556
+ span: fieldRatioMap[data.config.fieldRatio],
2557
+ },
2558
+ },
2559
+ inject: true,
2560
+ on: {
2561
+ change(inject, list) {
2562
+ const rule = inject.self;
2563
+ rule.value = list;
2564
+ inject.api.validateField(rule.field, () => {
2565
+ if (list.length) {
2566
+ inject.api.clearValidateState(rule.field);
2567
+ }
2568
+ });
2569
+ },
2570
+ },
2571
+ };
2572
+ },
2573
+ rowRule(data, extraConfig) {
2574
+ return {
2575
+ type: 'StaffSelector',
2576
+ component: StaffSelector,
2577
+ field: data.field,
2578
+ title: data.title.title,
2579
+ props: {
2580
+ title: '添加部门',
2581
+ mode: data.props.limit ? 'radio' : 'multiple',
2582
+ placeholder: data.props.placeholder,
2583
+ immediateFetch: true,
2584
+ unitStr: '个',
2585
+ defaultSelected: data.value,
2586
+ load() {
2587
+ return __awaiter(this, void 0, void 0, function* () {
2588
+ return yield extraConfig.department.fetch();
2589
+ });
2590
+ },
2591
+ },
2592
+ effect: {
2593
+ required: data.effect.required && '请选择',
2594
+ },
2595
+ col: {
2596
+ span: fieldRatioMap[data.config.fieldRatio],
2597
+ },
2598
+ inject: true,
2599
+ on: {
2600
+ change(inject, list) {
2601
+ const rule = inject.self;
2602
+ rule.value = list;
2603
+ inject.api.validateField(rule.field, () => {
2604
+ if (list.length) {
2605
+ inject.api.clearValidateState(rule.field);
2606
+ }
2607
+ });
2608
+ },
2609
+ },
2610
+ };
2611
+ },
2612
+ tableRule(data, extraConfig) {
2613
+ const field = data.field;
2614
+ return {
2615
+ field,
2616
+ title: data.title.title,
2617
+ headerClassName: data.effect.required ? 'is-required' : '',
2618
+ width: data.config.fieldRatio,
2619
+ slots: {
2620
+ default({ row }) {
2621
+ return h(StaffSelector, Object.assign({ title: '添加部门', mode: data.props.limit ? 'radio' : 'multiple', placeholder: data.props.placeholder, immediateFetch: true, unitStr: '个', onChange: (value) => {
2622
+ row[field] = value;
2623
+ }, defaultSelected: row[field] }, extraConfig.department));
2624
+ },
2625
+ },
2626
+ };
2627
+ },
2628
+ };
2629
+
2630
+ var table = {
2631
+ name: 'table',
2632
+ rule(data, extraConfig) {
2633
+ return {
2634
+ type: 'TableWidget',
2635
+ component: TableWidget,
2636
+ field: data.field,
2637
+ props: {
2638
+ rule: data,
2639
+ extraConfig,
2640
+ },
2641
+ inject: true,
2642
+ on: {
2643
+ change(inject, value) {
2644
+ inject.self.value = value;
2645
+ },
2646
+ },
2647
+ };
2648
+ },
2649
+ rowRule(data, extraConfig) {
2650
+ return {
2651
+ type: 'TableWidget',
2652
+ component: TableWidget,
2653
+ field: data.field,
2654
+ props: {
2655
+ rule: data,
2656
+ extraConfig,
2657
+ },
2658
+ inject: true,
2659
+ on: {
2660
+ change(inject, value) {
2661
+ inject.self.value = value;
2662
+ },
2663
+ },
2664
+ col: {
2665
+ span: 24,
2666
+ },
2667
+ };
2668
+ },
2669
+ };
2670
+
2671
+ var ruleList = {
2672
+ [input.name]: input,
2673
+ [textarea.name]: textarea,
2674
+ [numInput.name]: numInput,
2675
+ [radio.name]: radio,
2676
+ [checkbox.name]: checkbox,
2677
+ [date.name]: date,
2678
+ [dateRange.name]: dateRange,
2679
+ [instruction.name]: instruction,
2680
+ [picture.name]: picture,
2681
+ [file.name]: file,
2682
+ [people.name]: people,
2683
+ [department.name]: department,
2684
+ [materialTemp.name]: materialTemp,
2685
+ [product.name]: product,
2686
+ [shop.name]: shop,
2687
+ [materialType.name]: materialType,
2688
+ [row.name]: row,
2689
+ [table.name]: table,
2690
+ };
2691
+
2692
+ const _sfc_main = /* @__PURE__ */ defineComponent({
2693
+ __name: "form-create",
2694
+ props: ["fdRule", "extraConfig", "value"],
2695
+ emits: ["update:value"],
2696
+ setup(__props, { expose, emit: emits }) {
2697
+ const props = __props;
2698
+ const option = {
2699
+ wrap: {
2700
+ labelCol: {
2701
+ flex: "0 0 127px"
2702
+ },
2703
+ wrapperCol: {
2704
+ span: 24
2705
+ }
2706
+ },
2707
+ submitBtn: false
2708
+ };
2709
+ const fApi = ref();
2710
+ const rule = ref([]);
2711
+ function setRule(fdRule) {
2712
+ fdRule = getRuleData(fdRule);
2713
+ rule.value = fdRule.map((data) => {
2714
+ const childRules = data?.config?.childRules;
2715
+ const rule2 = ruleList[data.name].rule(data, props.extraConfig);
2716
+ if (data.name === "row" && childRules?.length) {
2717
+ const rowRule = rule2.children.find((item) => item.type === "row");
2718
+ childRules.forEach((ruleItem) => {
2719
+ rowRule.children.push(
2720
+ ruleList[ruleItem.name].rowRule(ruleItem, props.extraConfig)
2721
+ );
2722
+ });
2723
+ }
2724
+ return rule2;
2725
+ });
2726
+ }
2727
+ function handleValue(value) {
2728
+ emits("update:value", value);
2729
+ }
2730
+ function getRuleData(fdRule) {
2731
+ const ruleData = cloneDeep(fdRule);
2732
+ ruleData.forEach((rule2) => {
2733
+ if (rule2.name === "row") {
2734
+ rule2.config.childRules?.forEach((item) => {
2735
+ item.value = props.value[item.field];
2736
+ });
2737
+ }
2738
+ rule2.value = props.value[rule2.field];
2739
+ });
2740
+ return ruleData;
2741
+ }
2742
+ watch(
2743
+ () => props.fdRule,
2744
+ (fdRule) => {
2745
+ setRule(fdRule);
2746
+ },
2747
+ {
2748
+ immediate: true
2749
+ }
2750
+ );
2751
+ expose({ fApi });
2752
+ return (_ctx, _cache) => {
2753
+ const _component_formCreate = resolveComponent("formCreate", true);
2754
+ return openBlock(), createBlock(_component_formCreate, {
2755
+ api: fApi.value,
2756
+ "onUpdate:api": _cache[0] || (_cache[0] = ($event) => fApi.value = $event),
2757
+ "model-value": __props.value,
2758
+ option,
2759
+ rule: rule.value,
2760
+ "onUpdate:modelValue": handleValue
2761
+ }, null, 8, ["api", "model-value", "rule"]);
2762
+ };
2763
+ }
2764
+ });
2765
+ var FormCreate = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "form-create.vue"]]);
2766
+
2767
+ const BmFormCreate = withInstall(FormCreate);
2768
+
2769
+ export { BmFormCreate, BmFormCreate as default };