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