bm-admin-ui 1.0.22-alpha → 1.0.24-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/button/index.d.ts +307 -0
  2. package/es/components/button/src/button.d.ts +12 -0
  3. package/es/components/button/src/button.vue.d.ts +308 -0
  4. package/es/components/feedback/index.d.ts +1037 -0
  5. package/es/components/feedback/index.js +1306 -25
  6. package/es/components/feedback/src/bmAlert.vue.d.ts +193 -0
  7. package/es/components/feedback/src/bmModal.vue.d.ts +839 -0
  8. package/es/components/float-table/index.d.ts +70 -0
  9. package/es/components/float-table/index.js +28 -37
  10. package/es/components/float-table/src/float-table.vue.d.ts +69 -0
  11. package/es/components/flow-designer/index.d.ts +7 -0
  12. package/es/components/flow-designer/src/flow-designer.vue.d.ts +6 -0
  13. package/es/components/form-designer/index.d.ts +9 -0
  14. package/es/components/form-designer/index.js +9 -4178
  15. package/es/components/form-designer/src/form-designer.vue.d.ts +8 -0
  16. package/es/components/index.d.ts +13 -0
  17. package/es/components/index.js +0 -1
  18. package/es/components/input-tags-display/index.d.ts +113 -0
  19. package/es/components/input-tags-display/index.js +1187 -27
  20. package/es/components/input-tags-display/src/input-tags-display.vue.d.ts +110 -0
  21. package/es/components/multi-cascader-compose/index.d.ts +164 -0
  22. package/es/components/multi-cascader-compose/index.js +1199 -31
  23. package/es/components/multi-cascader-compose/src/multi-cascader-compose.vue.d.ts +164 -0
  24. package/es/components/multi-cascader-compose/src/props.d.ts +40 -0
  25. package/es/components/multi-cascader-compose/types.d.ts +10 -0
  26. package/es/components/over-tooltips/index.d.ts +35 -0
  27. package/es/components/over-tooltips/index.js +20 -27
  28. package/es/components/over-tooltips/src/over-tooltips.vue.d.ts +34 -0
  29. package/es/components/search-filter/index.d.ts +222 -0
  30. package/es/components/search-filter/index.js +1269 -57
  31. package/es/components/search-filter/src/search-filter.d.ts +77 -0
  32. package/es/components/search-filter/src/search-filter.vue.d.ts +221 -0
  33. package/es/components/search-filter/src/search-reset-btn.vue.d.ts +89 -0
  34. package/es/components/shops-filter/index.d.ts +99 -0
  35. package/es/components/shops-filter/index.js +1182 -24
  36. package/es/components/shops-filter/src/shops-filter.d.ts +25 -0
  37. package/es/components/shops-filter/src/shops-filter.vue.d.ts +98 -0
  38. package/es/components/staffs-selector/index.d.ts +109 -0
  39. package/es/components/staffs-selector/index.js +1241 -131
  40. package/es/components/staffs-selector/src/multipleCmp.vue.d.ts +97 -0
  41. package/es/components/staffs-selector/src/radioCmp.vue.d.ts +31 -0
  42. package/es/components/staffs-selector/src/staffs-selector.vue.d.ts +108 -0
  43. package/es/components/staffs-selector/src/variedCmp.vue.d.ts +62 -0
  44. package/es/components/timeline/index.d.ts +107 -0
  45. package/es/components/timeline/index.js +6 -6
  46. package/es/components/timeline/src/props.d.ts +24 -0
  47. package/es/components/timeline/src/timeline-item.vue.d.ts +65 -0
  48. package/es/components/timeline/src/timeline.vue.d.ts +42 -0
  49. package/es/components/upload/index.d.ts +136 -0
  50. package/es/components/upload/index.js +1336 -101
  51. package/es/components/upload/src/icons.d.ts +13 -0
  52. package/es/components/upload/src/upload.vue.d.ts +135 -0
  53. package/es/components/upload/utils/index.d.ts +7 -0
  54. package/es/index.d.ts +6 -0
  55. package/es/utils/bm-admin-ui-resolver.d.ts +9 -0
  56. package/es/utils/vxe-table.d.ts +6 -0
  57. package/es/utils/vxe-table.js +3 -4
  58. package/es/utils/with-install.d.ts +3 -0
  59. package/index.esm.js +47062 -0
  60. package/index.js +47092 -0
  61. package/lib/components/button/index.d.ts +307 -0
  62. package/lib/components/button/src/button.d.ts +12 -0
  63. package/lib/components/button/src/button.vue.d.ts +308 -0
  64. package/lib/components/feedback/index.d.ts +1037 -0
  65. package/lib/components/feedback/index.js +1304 -23
  66. package/lib/components/feedback/src/bmAlert.vue.d.ts +193 -0
  67. package/lib/components/feedback/src/bmModal.vue.d.ts +839 -0
  68. package/lib/components/float-table/index.d.ts +70 -0
  69. package/lib/components/float-table/index.js +28 -37
  70. package/lib/components/float-table/src/float-table.vue.d.ts +69 -0
  71. package/lib/components/flow-designer/index.d.ts +7 -0
  72. package/lib/components/flow-designer/src/flow-designer.vue.d.ts +6 -0
  73. package/lib/components/form-designer/index.d.ts +9 -0
  74. package/lib/components/form-designer/index.js +8 -4183
  75. package/lib/components/form-designer/src/form-designer.vue.d.ts +8 -0
  76. package/lib/components/index.d.ts +13 -0
  77. package/lib/components/index.js +0 -7
  78. package/lib/components/input-tags-display/index.d.ts +113 -0
  79. package/lib/components/input-tags-display/index.js +1187 -27
  80. package/lib/components/input-tags-display/src/input-tags-display.vue.d.ts +110 -0
  81. package/lib/components/multi-cascader-compose/index.d.ts +164 -0
  82. package/lib/components/multi-cascader-compose/index.js +1198 -30
  83. package/lib/components/multi-cascader-compose/src/multi-cascader-compose.vue.d.ts +164 -0
  84. package/lib/components/multi-cascader-compose/src/props.d.ts +40 -0
  85. package/lib/components/multi-cascader-compose/types.d.ts +10 -0
  86. package/lib/components/over-tooltips/index.d.ts +35 -0
  87. package/lib/components/over-tooltips/index.js +20 -27
  88. package/lib/components/over-tooltips/src/over-tooltips.vue.d.ts +34 -0
  89. package/lib/components/search-filter/index.d.ts +222 -0
  90. package/lib/components/search-filter/index.js +1268 -56
  91. package/lib/components/search-filter/src/search-filter.d.ts +77 -0
  92. package/lib/components/search-filter/src/search-filter.vue.d.ts +221 -0
  93. package/lib/components/search-filter/src/search-reset-btn.vue.d.ts +89 -0
  94. package/lib/components/shops-filter/index.d.ts +99 -0
  95. package/lib/components/shops-filter/index.js +1181 -23
  96. package/lib/components/shops-filter/src/shops-filter.d.ts +25 -0
  97. package/lib/components/shops-filter/src/shops-filter.vue.d.ts +98 -0
  98. package/lib/components/staffs-selector/index.d.ts +109 -0
  99. package/lib/components/staffs-selector/index.js +1240 -130
  100. package/lib/components/staffs-selector/src/multipleCmp.vue.d.ts +97 -0
  101. package/lib/components/staffs-selector/src/radioCmp.vue.d.ts +31 -0
  102. package/lib/components/staffs-selector/src/staffs-selector.vue.d.ts +108 -0
  103. package/lib/components/staffs-selector/src/variedCmp.vue.d.ts +62 -0
  104. package/lib/components/timeline/index.d.ts +107 -0
  105. package/lib/components/timeline/index.js +6 -6
  106. package/lib/components/timeline/src/props.d.ts +24 -0
  107. package/lib/components/timeline/src/timeline-item.vue.d.ts +65 -0
  108. package/lib/components/timeline/src/timeline.vue.d.ts +42 -0
  109. package/lib/components/upload/index.d.ts +136 -0
  110. package/lib/components/upload/index.js +1335 -100
  111. package/lib/components/upload/src/icons.d.ts +13 -0
  112. package/lib/components/upload/src/upload.vue.d.ts +135 -0
  113. package/lib/components/upload/utils/index.d.ts +7 -0
  114. package/lib/index.d.ts +6 -0
  115. package/lib/utils/bm-admin-ui-resolver.d.ts +9 -0
  116. package/lib/utils/vxe-table.d.ts +6 -0
  117. package/lib/utils/vxe-table.js +2 -3
  118. package/lib/utils/with-install.d.ts +3 -0
  119. package/package.json +4 -9
  120. package/theme-chalk/button.css +1 -1
  121. package/theme-chalk/feedback.css +1 -1
  122. package/theme-chalk/float-table.css +1 -1
  123. package/theme-chalk/floating-vue.css +1 -1
  124. package/theme-chalk/flow-designer.css +1 -1
  125. package/theme-chalk/index.css +1 -1
  126. package/theme-chalk/input-tags-display.css +1 -1
  127. package/theme-chalk/modal.css +1 -1
  128. package/theme-chalk/multi-cascader-compose.css +1 -1
  129. package/theme-chalk/over-tooltips.css +1 -1
  130. package/theme-chalk/search-filter.css +1 -1
  131. package/theme-chalk/staffs-selector.css +1 -1
  132. package/theme-chalk/timeline.css +1 -1
  133. package/theme-chalk/upload.css +1 -1
  134. package/types/components/button/index.d.ts +307 -0
  135. package/types/components/button/src/button.d.ts +12 -0
  136. package/types/components/button/src/button.vue.d.ts +308 -0
  137. package/types/components/feedback/index.d.ts +1037 -0
  138. package/types/components/feedback/src/bmAlert.vue.d.ts +193 -0
  139. package/types/components/feedback/src/bmModal.vue.d.ts +839 -0
  140. package/types/components/float-table/index.d.ts +70 -0
  141. package/types/components/float-table/src/float-table.vue.d.ts +69 -0
  142. package/types/components/flow-designer/index.d.ts +7 -0
  143. package/types/components/flow-designer/src/flow-designer.vue.d.ts +6 -0
  144. package/types/components/form-designer/index.d.ts +9 -0
  145. package/types/components/form-designer/src/form-designer.vue.d.ts +8 -0
  146. package/types/components/index.d.ts +13 -0
  147. package/types/components/input-tags-display/index.d.ts +113 -0
  148. package/types/components/input-tags-display/src/input-tags-display.vue.d.ts +110 -0
  149. package/types/components/multi-cascader-compose/index.d.ts +164 -0
  150. package/types/components/multi-cascader-compose/src/multi-cascader-compose.vue.d.ts +164 -0
  151. package/types/components/multi-cascader-compose/src/props.d.ts +40 -0
  152. package/types/components/multi-cascader-compose/types.d.ts +10 -0
  153. package/types/components/over-tooltips/index.d.ts +35 -0
  154. package/types/components/over-tooltips/src/over-tooltips.vue.d.ts +34 -0
  155. package/types/components/search-filter/index.d.ts +222 -0
  156. package/types/components/search-filter/src/search-filter.d.ts +77 -0
  157. package/types/components/search-filter/src/search-filter.vue.d.ts +221 -0
  158. package/types/components/search-filter/src/search-reset-btn.vue.d.ts +89 -0
  159. package/types/components/shops-filter/index.d.ts +99 -0
  160. package/types/components/shops-filter/src/shops-filter.d.ts +25 -0
  161. package/types/components/shops-filter/src/shops-filter.vue.d.ts +98 -0
  162. package/types/components/staffs-selector/index.d.ts +109 -0
  163. package/types/components/staffs-selector/src/multipleCmp.vue.d.ts +97 -0
  164. package/types/components/staffs-selector/src/radioCmp.vue.d.ts +31 -0
  165. package/types/components/staffs-selector/src/staffs-selector.vue.d.ts +108 -0
  166. package/types/components/staffs-selector/src/variedCmp.vue.d.ts +62 -0
  167. package/types/components/timeline/index.d.ts +107 -0
  168. package/types/components/timeline/src/props.d.ts +24 -0
  169. package/types/components/timeline/src/timeline-item.vue.d.ts +65 -0
  170. package/types/components/timeline/src/timeline.vue.d.ts +42 -0
  171. package/types/components/upload/index.d.ts +136 -0
  172. package/types/components/upload/src/icons.d.ts +13 -0
  173. package/types/components/upload/src/upload.vue.d.ts +135 -0
  174. package/types/components/upload/utils/index.d.ts +7 -0
  175. package/types/index.d.ts +6 -0
  176. package/types/utils/bm-admin-ui-resolver.d.ts +9 -0
  177. package/types/utils/vxe-table.d.ts +6 -0
  178. package/types/utils/with-install.d.ts +3 -0
  179. package/es/components/form-create/index.js +0 -2769
  180. package/es/utils/uniqueId.js +0 -5
  181. package/lib/components/form-create/index.js +0 -2781
  182. package/lib/utils/uniqueId.js +0 -8
  183. package/theme-chalk/form-create.css +0 -1
  184. package/theme-chalk/form-designer.css +0 -1
@@ -1,2781 +0,0 @@
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;