@vue-start/pro 0.4.10 → 0.4.12

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.
package/dist/index.js CHANGED
@@ -1,2715 +1 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var vue = require('vue');
6
- var lodash = require('lodash');
7
- var rxjs = require('rxjs');
8
- var hooks = require('@vue-start/hooks');
9
- var request = require('@vue-start/request');
10
- var vueRouter = require('vue-router');
11
-
12
- function ownKeys(object, enumerableOnly) {
13
- var keys = Object.keys(object);
14
-
15
- if (Object.getOwnPropertySymbols) {
16
- var symbols = Object.getOwnPropertySymbols(object);
17
- enumerableOnly && (symbols = symbols.filter(function (sym) {
18
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
19
- })), keys.push.apply(keys, symbols);
20
- }
21
-
22
- return keys;
23
- }
24
-
25
- function _objectSpread2(target) {
26
- for (var i = 1; i < arguments.length; i++) {
27
- var source = null != arguments[i] ? arguments[i] : {};
28
- i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
29
- _defineProperty(target, key, source[key]);
30
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
31
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
32
- });
33
- }
34
-
35
- return target;
36
- }
37
-
38
- function _defineProperty(obj, key, value) {
39
- if (key in obj) {
40
- Object.defineProperty(obj, key, {
41
- value: value,
42
- enumerable: true,
43
- configurable: true,
44
- writable: true
45
- });
46
- } else {
47
- obj[key] = value;
48
- }
49
-
50
- return obj;
51
- }
52
-
53
- function _toConsumableArray(arr) {
54
- return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
55
- }
56
-
57
- function _arrayWithoutHoles(arr) {
58
- if (Array.isArray(arr)) return _arrayLikeToArray(arr);
59
- }
60
-
61
- function _iterableToArray(iter) {
62
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
63
- }
64
-
65
- function _unsupportedIterableToArray(o, minLen) {
66
- if (!o) return;
67
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
68
- var n = Object.prototype.toString.call(o).slice(8, -1);
69
- if (n === "Object" && o.constructor) n = o.constructor.name;
70
- if (n === "Map" || n === "Set") return Array.from(o);
71
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
72
- }
73
-
74
- function _arrayLikeToArray(arr, len) {
75
- if (len == null || len > arr.length) len = arr.length;
76
-
77
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
78
-
79
- return arr2;
80
- }
81
-
82
- function _nonIterableSpread() {
83
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
84
- }
85
-
86
- function _isSlot$1(s) {
87
- return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !vue.isVNode(s);
88
- }
89
-
90
- var proGridProps = function proGridProps() {
91
- return {
92
- row: {
93
- type: Object,
94
- "default": undefined
95
- },
96
- col: {
97
- type: Object
98
- },
99
- items: {
100
- type: Array
101
- }
102
- };
103
- };
104
-
105
- var createGrid = function createGrid(Row, Col) {
106
- return vue.defineComponent({
107
- props: _objectSpread2({}, proGridProps()),
108
- setup: function setup(props) {
109
- return function () {
110
- var _slot;
111
-
112
- return vue.createVNode(Row, props.row, _isSlot$1(_slot = lodash.map(props.items, function (item) {
113
- return vue.createVNode(Col, vue.mergeProps({
114
- "key": item.rowKey
115
- }, props.col, item.col), {
116
- "default": function _default() {
117
- return [item.vNode];
118
- }
119
- });
120
- })) ? _slot : {
121
- "default": function _default() {
122
- return [_slot];
123
- }
124
- });
125
- };
126
- }
127
- });
128
- };
129
-
130
- var createUseRequestActor = function createUseRequestActor(filterFun) {
131
- return function (actors, callback) {
132
- var _useRequestProvide = request.useRequestProvide(),
133
- requestSubject$ = _useRequestProvide.requestSubject$;
134
-
135
- var nameSet = new Set(lodash.map(actors, function (actor) {
136
- return lodash.isString(actor) ? actor : actor.name;
137
- }));
138
- hooks.useEffect(function () {
139
- var sub = requestSubject$.pipe(rxjs.filter(filterFun), rxjs.tap(function (actor) {
140
- if (nameSet.has(actor.name)) {
141
- callback(actor);
142
- }
143
- })).subscribe();
144
- return function () {
145
- sub.unsubscribe();
146
- };
147
- }, []);
148
- };
149
- };
150
-
151
- var useDoneRequestActor = createUseRequestActor(request.isDoneRequestActor);
152
- var useFailedRequestActor = createUseRequestActor(request.isFailedRequestActor);
153
- var useComposeRequestActor = function useComposeRequestActor(actors, options, cancelWhileUnmount) {
154
- var _useRequestProvide2 = request.useRequestProvide(),
155
- requestSubject$ = _useRequestProvide2.requestSubject$,
156
- dispatchRequest = _useRequestProvide2.dispatchRequest;
157
-
158
- var nameSet = new Set(lodash.map(actors, function (actor) {
159
- return lodash.isString(actor) ? actor : actor.name;
160
- }));
161
- var lastRequestActors = {};
162
- hooks.useEffect(function () {
163
- var sub = rxjs.merge(requestSubject$.pipe(rxjs.filter(request.isPreRequestActor), rxjs.tap(function (actor) {
164
- if (nameSet.has(actor.name)) {
165
- var _options$onStart;
166
-
167
- (_options$onStart = options.onStart) === null || _options$onStart === void 0 ? void 0 : _options$onStart.call(options, actor);
168
- lastRequestActors[actor.name] = actor;
169
- }
170
- })), requestSubject$.pipe(rxjs.filter(request.isDoneRequestActor), rxjs.tap(function (actor) {
171
- if (nameSet.has(actor.name)) {
172
- var _options$onSuccess, _options$onFinish;
173
-
174
- (_options$onSuccess = options.onSuccess) === null || _options$onSuccess === void 0 ? void 0 : _options$onSuccess.call(options, actor);
175
- (_options$onFinish = options.onFinish) === null || _options$onFinish === void 0 ? void 0 : _options$onFinish.call(options, actor);
176
- lastRequestActors[actor.name] = undefined;
177
- }
178
- })), requestSubject$.pipe(rxjs.filter(request.isFailedRequestActor), rxjs.tap(function (actor) {
179
- if (nameSet.has(actor.name)) {
180
- var _options$onFailed, _options$onFinish2;
181
-
182
- (_options$onFailed = options.onFailed) === null || _options$onFailed === void 0 ? void 0 : _options$onFailed.call(options, actor);
183
- (_options$onFinish2 = options.onFinish) === null || _options$onFinish2 === void 0 ? void 0 : _options$onFinish2.call(options, actor);
184
- lastRequestActors[actor.name] = undefined;
185
- }
186
- }))).subscribe();
187
- return function () {
188
- sub.unsubscribe();
189
-
190
- if (cancelWhileUnmount) {
191
- //组件销毁的时候cancel请求
192
- lodash.forEach(lastRequestActors, function (actor) {
193
- actor && dispatchRequest(_objectSpread2(_objectSpread2({}, actor), {}, {
194
- stage: "CANCEL"
195
- }));
196
- });
197
- }
198
- };
199
- }, []);
200
- };
201
-
202
- /***************************************** curd模式 *****************************************/
203
-
204
- /**
205
- * 获取Column的valueType,默认"text"
206
- * @param column
207
- */
208
- var getColumnValueType = function getColumnValueType(column) {
209
- return column.formValueType || column.valueType || "text";
210
- };
211
- /**
212
- *获取Column的FormItem name
213
- * @param column
214
- */
215
-
216
- var getColumnFormItemName = function getColumnFormItemName(column) {
217
- var _column$formItemProps;
218
-
219
- return ((_column$formItemProps = column.formItemProps) === null || _column$formItemProps === void 0 ? void 0 : _column$formItemProps.name) || column.dataIndex;
220
- };
221
- /**
222
- * 根据Column生成FormItem VNode
223
- * formFieldProps中的slots参数会以v-slots的形式传递到FormItem的录入组件(子组件)中
224
- * @param formElementMap
225
- * @param column
226
- * @param needRules
227
- */
228
-
229
- var getFormItemEl = function getFormItemEl(formElementMap, column) {
230
- var _column$formFieldProp;
231
-
232
- var needRules = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
233
- var valueType = getColumnValueType(column);
234
- var Comp = lodash.get(formElementMap, valueType);
235
-
236
- if (!Comp) {
237
- return null;
238
- }
239
-
240
- var name = getColumnFormItemName(column);
241
- var itemProps = needRules ? column.formItemProps : lodash.omit(column.formItemProps, "rules");
242
- return vue.h(Comp, _objectSpread2(_objectSpread2({
243
- key: name,
244
- name: name,
245
- label: column.title
246
- }, itemProps), {}, {
247
- fieldProps: lodash.omit(column.formFieldProps, "slots"),
248
- showProps: column.showProps
249
- }), (_column$formFieldProp = column.formFieldProps) === null || _column$formFieldProp === void 0 ? void 0 : _column$formFieldProp.slots);
250
- };
251
- /**
252
- * 根据Column生成Item VNode
253
- * @param elementMap
254
- * @param column
255
- * @param value
256
- */
257
-
258
- var getItemEl = function getItemEl(elementMap, column, value) {
259
- var _column$formFieldProp2;
260
-
261
- var valueType = column.valueType || "text";
262
- var Comp = lodash.get(elementMap, valueType);
263
-
264
- if (!Comp) {
265
- return null;
266
- }
267
-
268
- return vue.h(Comp, _objectSpread2(_objectSpread2({}, lodash.omit(column.formFieldProps, "slots")), {}, {
269
- showProps: column.showProps,
270
- value: value
271
- }), (_column$formFieldProp2 = column.formFieldProps) === null || _column$formFieldProp2 === void 0 ? void 0 : _column$formFieldProp2.slots);
272
- };
273
- /***************************************** 通用模式 *****************************************/
274
-
275
- var renderElements = function renderElements(elementMap, elementConfigs) {
276
- return lodash.map(elementConfigs, function (elementConfig) {
277
- return renderElement(elementMap, elementConfig);
278
- });
279
- };
280
- /**
281
- * props转换
282
- */
283
-
284
- var convertPropsEl = function convertPropsEl(elementMap, elementConfig) {
285
- var _elementConfig$highCo;
286
-
287
- var elementProps = elementConfig.elementProps;
288
-
289
- var nextProps = _objectSpread2({}, elementConfig.elementProps);
290
-
291
- lodash.forEach((_elementConfig$highCo = elementConfig.highConfig$) === null || _elementConfig$highCo === void 0 ? void 0 : _elementConfig$highCo.registerPropsTrans, function (item) {
292
- var target = lodash.get(elementProps, item.name);
293
-
294
- if (!target || vue.isVNode(target)) {
295
- return;
296
- }
297
-
298
- if (lodash.isArray(target)) {
299
- //如果list中存在VNode,不转换
300
- if (lodash.some(target, function (sub) {
301
- return vue.isVNode(sub);
302
- })) {
303
- return;
304
- } //如果碰到特殊场景,可以替换成单个渲染模式
305
-
306
-
307
- lodash.set(nextProps, item.name, renderElements(elementMap, target));
308
- return;
309
- }
310
-
311
- if (!target.elementType) {
312
- return;
313
- }
314
-
315
- if (item.isFun) {
316
- lodash.set(nextProps, item.name, function () {
317
- for (var _len = arguments.length, params$ = new Array(_len), _key = 0; _key < _len; _key++) {
318
- params$[_key] = arguments[_key];
319
- }
320
-
321
- var ep = item.needParams ? _objectSpread2(_objectSpread2({}, target.elementProps), {}, {
322
- params$: params$
323
- }) : target.elementProps;
324
- return renderElement(elementMap, _objectSpread2(_objectSpread2({}, target), {}, {
325
- elementProps: ep
326
- }));
327
- });
328
- } else {
329
- lodash.set(nextProps, item.name, renderElement(elementMap, target));
330
- }
331
- });
332
- return nextProps;
333
- };
334
- /**
335
- * slots转换
336
- */
337
-
338
-
339
- var convertSlots = function convertSlots(elementMap, elementConfig) {
340
- var children = lodash.size(elementConfig.children) > 0 ? renderElements(elementMap, elementConfig.children) : undefined; //children插槽名称
341
-
342
- var childrenSlotName = elementConfig.childrenSlotName || "default";
343
- var validSlots = lodash.omit(elementConfig.slots, children ? childrenSlotName : ""); //如果slots注册的是 IElementConfig ,进行转换
344
-
345
- lodash.forEach(lodash.keys(validSlots), function (k) {
346
- var v = validSlots[k]; //IElementConfig
347
-
348
- if (v && !lodash.isFunction(v) && v.elementType) {
349
- validSlots[k] = function () {
350
- for (var _len2 = arguments.length, params$ = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
351
- params$[_key2] = arguments[_key2];
352
- }
353
-
354
- //如果需要params,在props中注入 params$
355
- var elementProps = v.needParams ? _objectSpread2(_objectSpread2({}, v.elementProps), {}, {
356
- params$: params$
357
- }) : v.elementProps;
358
- return renderElement(elementMap, _objectSpread2(_objectSpread2({}, v), {}, {
359
- elementProps: elementProps
360
- }));
361
- };
362
- }
363
- });
364
- return _objectSpread2(_defineProperty({}, childrenSlotName, children ? function () {
365
- return children;
366
- } : undefined), validSlots);
367
- };
368
- /**
369
- *
370
- * @param elementMap
371
- * @param elementConfig
372
- */
373
-
374
-
375
- var renderElement = function renderElement(elementMap, elementConfig) {
376
- var El = lodash.get(elementMap, elementConfig.elementType) || elementConfig.elementType; //如果有highConfig$,包裹一层Wrapper
377
-
378
- if (elementConfig.highConfig$) {
379
- return vue.h(Wrapper, {
380
- key: elementConfig.elementId,
381
- elementMap: elementMap,
382
- elementConfig: elementConfig
383
- });
384
- }
385
-
386
- var slots = convertSlots(elementMap, elementConfig);
387
- var elementProps = convertPropsEl(elementMap, elementConfig);
388
- return vue.h(El, _objectSpread2({
389
- key: elementConfig.elementId
390
- }, elementProps), slots);
391
- };
392
- /**
393
- * 获取第一层级属性名
394
- * 如:['aaa','bbb',...] 中的 'aaa'
395
- * 如:"aaa.bbb.ccc..." 中的 'aaa'
396
- */
397
-
398
- var getFirstPropName = function getFirstPropName(name) {
399
- if (lodash.isArray(name)) {
400
- return lodash.head(name);
401
- } else if (lodash.isString(name) && name.indexOf(".") > 0) {
402
- return name.substring(0, name.indexOf("."));
403
- }
404
-
405
- return name;
406
- };
407
- /**
408
- * 处理highConfig$
409
- */
410
-
411
- var Wrapper = vue.defineComponent({
412
- props: {
413
- elementMap: {
414
- type: Object
415
- },
416
- elementConfig: {
417
- type: Object
418
- }
419
- },
420
- setup: function setup(props) {
421
- var _useProModule = useProModule(),
422
- state = _useProModule.state,
423
- sendEvent = _useProModule.sendEvent;
424
-
425
- var elementMap = props.elementMap,
426
- elementConfig = props.elementConfig;
427
- var highConfig$ = elementConfig.highConfig$; //转换props
428
-
429
- var elementProps = convertPropsEl(elementMap, elementConfig); //事件订阅
430
-
431
- var events = lodash.reduce(highConfig$.registerEventList, function (pair, item) {
432
- return _objectSpread2(_objectSpread2({}, pair), {}, _defineProperty({}, item.name, function () {
433
- for (var _len3 = arguments.length, params = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
434
- params[_key3] = arguments[_key3];
435
- }
436
-
437
- sendEvent({
438
- type: item.sendEventName || elementConfig.elementId,
439
- payload: params
440
- });
441
- }));
442
- }, {}); //receiveStateList 订阅
443
-
444
- var receiveStates = vue.computed(function () {
445
- if (!highConfig$.registerStateList || lodash.size(highConfig$.registerStateList) <= 0) {
446
- return undefined;
447
- }
448
-
449
- var changeProps = _objectSpread2({}, elementProps); //赋值 && 返回一级属性名称
450
-
451
-
452
- var firstPropNameList = lodash.map(highConfig$.registerStateList, function (item) {
453
- var targetName = item.mapName || item.name; //从state中取值
454
-
455
- var value = lodash.get(state, item.name); //赋值
456
-
457
- lodash.set(changeProps, targetName, value); //返回一级属性名称
458
-
459
- return getFirstPropName(targetName);
460
- });
461
- return lodash.pick(changeProps, firstPropNameList);
462
- });
463
- var El = lodash.get(elementMap, elementConfig.elementType) || elementConfig.elementType;
464
- var slots = convertSlots(elementMap, elementConfig);
465
- return function () {
466
- //如果标记show$值为false,不渲染组件
467
- var show$ = lodash.get(receiveStates.value, "show$");
468
-
469
- if (show$ === false) {
470
- return null;
471
- }
472
-
473
- return vue.h(El, _objectSpread2(_objectSpread2(_objectSpread2({
474
- key: elementConfig.elementId
475
- }, elementProps), lodash.omit(receiveStates.value, "show$")), events), slots);
476
- };
477
- }
478
- });
479
-
480
- var ProModuleKey = Symbol("pro-module");
481
- var useProModule = function useProModule() {
482
- return vue.inject(ProModuleKey);
483
- };
484
- var provideProModule = function provideProModule(ctx) {
485
- vue.provide(ProModuleKey, ctx);
486
- };
487
- var RequestAction = {
488
- Success: "request-success$",
489
- Fail: "request-fail$"
490
- };
491
-
492
- var proModuleProps = function proModuleProps() {
493
- return {
494
- /**
495
- * module状态
496
- */
497
- state: {
498
- type: Object
499
- },
500
-
501
- /**
502
- * 组件集
503
- */
504
- elementMap: {
505
- type: Object
506
- },
507
-
508
- /**
509
- * 组件描述(树)
510
- */
511
- elementConfigs: {
512
- type: Array
513
- },
514
-
515
- /**
516
- * requests
517
- */
518
- requests: {
519
- type: Array
520
- }
521
- };
522
- };
523
-
524
- var ProModule = vue.defineComponent({
525
- props: _objectSpread2({}, proModuleProps()),
526
- setup: function setup(props, _ref) {
527
- var slots = _ref.slots,
528
- expose = _ref.expose;
529
-
530
- /*********************************** render ***************************************/
531
- var render = function render(elementConfig) {
532
- if (lodash.isArray(elementConfig)) {
533
- return renderElements(props.elementMap, elementConfig);
534
- }
535
-
536
- return renderElement(props.elementMap, elementConfig);
537
- };
538
- /*********************************** 事件处理 ***************************************/
539
-
540
-
541
- var subject$ = new rxjs.Subject(); //发送Module事件
542
-
543
- var sendEvent = function sendEvent(action) {
544
- subject$.next(action);
545
- };
546
- /*********************************** 页面状态 ***************************************/
547
-
548
-
549
- var state = props.state || vue.reactive({});
550
-
551
- var dispatch = function dispatch(action) {
552
- var prev = state[action.type];
553
- var data = lodash.isFunction(action.payload) ? action.payload(prev) : action.payload; //如果要更新的属性值是 object ,执行覆盖操作
554
-
555
- if (lodash.isObject(prev)) {
556
- hooks.setReactiveValue(state[action.type], data);
557
- return;
558
- }
559
-
560
- state[action.type] = data;
561
- };
562
- /*********************************** request ***************************************/
563
-
564
-
565
- var _useRequestProvide = request.useRequestProvide(),
566
- dispatchRequest = _useRequestProvide.dispatchRequest;
567
-
568
- var requestMap = lodash.reduce(props.requests, function (pair, item) {
569
- var _item$actor;
570
-
571
- return _objectSpread2(_objectSpread2({}, pair), {}, _defineProperty({}, (_item$actor = item.actor) === null || _item$actor === void 0 ? void 0 : _item$actor.name, item));
572
- }, {});
573
- var actionMap = lodash.reduce(props.requests, function (pair, item) {
574
- return _objectSpread2(_objectSpread2({}, pair), {}, _defineProperty({}, item.action, item));
575
- }, {}); //发送请求
576
-
577
- var sendRequest = function sendRequest(requestNameOrAction) {
578
- var requestOpts = lodash.get(requestMap, requestNameOrAction) || lodash.get(actionMap, requestNameOrAction);
579
-
580
- if (!requestOpts) {
581
- return;
582
- }
583
-
584
- var nextParams;
585
-
586
- for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
587
- params[_key - 1] = arguments[_key];
588
- }
589
-
590
- if (requestOpts.convertParams) {
591
- nextParams = requestOpts.convertParams.apply(requestOpts, params);
592
- } else {
593
- nextParams = lodash.get(params, 0);
594
- }
595
-
596
- dispatchRequest(requestOpts.actor, nextParams);
597
- };
598
-
599
- useComposeRequestActor(lodash.keys(requestMap), {
600
- onStart: function onStart(actor) {
601
- //如果设置了loading,将请求状态维护到state中
602
- var loadingName = lodash.get(requestMap, [actor.name, "loadingName"]);
603
-
604
- if (loadingName) {
605
- dispatch({
606
- type: loadingName,
607
- payload: true
608
- });
609
- }
610
- },
611
- onSuccess: function onSuccess(actor) {
612
- var _requestOpts$onSucces;
613
-
614
- var requestOpts = lodash.get(requestMap, actor.name); //如果设置了stateName,将结果维护到state中
615
-
616
- if (requestOpts !== null && requestOpts !== void 0 && requestOpts.stateName) {
617
- var _actor$res;
618
-
619
- var data = requestOpts.convertData ? requestOpts.convertData(actor) : (_actor$res = actor.res) === null || _actor$res === void 0 ? void 0 : _actor$res.data;
620
- dispatch({
621
- type: requestOpts.stateName,
622
- payload: data
623
- });
624
- } //发送成功事件
625
-
626
-
627
- sendEvent({
628
- type: RequestAction.Success,
629
- payload: {
630
- actor: actor,
631
- requestOpts: requestOpts
632
- }
633
- }); //回调事件
634
-
635
- (_requestOpts$onSucces = requestOpts.onSuccess) === null || _requestOpts$onSucces === void 0 ? void 0 : _requestOpts$onSucces.call(requestOpts, actor);
636
- },
637
- onFailed: function onFailed(actor) {
638
- var _requestOpts$onFailed;
639
-
640
- var requestOpts = lodash.get(requestMap, actor.name); //发送失败事件
641
-
642
- sendEvent({
643
- type: RequestAction.Fail,
644
- payload: {
645
- actor: actor,
646
- requestOpts: requestOpts
647
- }
648
- }); //回调事件
649
-
650
- (_requestOpts$onFailed = requestOpts.onFailed) === null || _requestOpts$onFailed === void 0 ? void 0 : _requestOpts$onFailed.call(requestOpts, actor);
651
- },
652
- onFinish: function onFinish(actor) {
653
- var loadingName = lodash.get(requestMap, [actor.name, "loadingName"]);
654
-
655
- if (loadingName) {
656
- dispatch({
657
- type: loadingName,
658
- payload: false
659
- });
660
- }
661
- }
662
- }, true);
663
- provideProModule({
664
- elementMap: props.elementMap,
665
- //
666
- subject$: subject$,
667
- sendEvent: sendEvent,
668
- //
669
- state: state,
670
- dispatch: dispatch,
671
- //
672
- requests: props.requests,
673
- sendRequest: sendRequest
674
- });
675
- expose({
676
- sendEvent: sendEvent,
677
- sendRequest: sendRequest
678
- });
679
- return function () {
680
- var _slots$default;
681
-
682
- return vue.createVNode(vue.Fragment, null, [lodash.size(props.elementConfigs) > 0 && render(props.elementConfigs), (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)]);
683
- };
684
- }
685
- });
686
-
687
- //订阅module事件
688
- var useModuleEvent = function useModuleEvent(cb) {
689
- var _useProModule = useProModule(),
690
- subject$ = _useProModule.subject$;
691
-
692
- hooks.useEffect(function () {
693
- var sub = subject$.subscribe({
694
- next: function next(action) {
695
- cb(action);
696
- }
697
- });
698
- return function () {
699
- return sub.unsubscribe();
700
- };
701
- }, []);
702
- };
703
-
704
- var ProCurdKey = Symbol("pro-curd");
705
- var useProCurd = function useProCurd() {
706
- return vue.inject(ProCurdKey);
707
- };
708
- var provideProCurd = function provideProCurd(ctx) {
709
- return vue.provide(ProCurdKey, ctx);
710
- };
711
- /************************************ 常量 *************************************/
712
-
713
- /**
714
- * curd 5种基础Action
715
- */
716
-
717
- exports.CurdAction = void 0;
718
-
719
- (function (CurdAction) {
720
- CurdAction["LIST"] = "LIST";
721
- CurdAction["DETAIL"] = "DETAIL";
722
- CurdAction["ADD"] = "ADD";
723
- CurdAction["EDIT"] = "EDIT";
724
- CurdAction["DELETE"] = "DELETE";
725
- })(exports.CurdAction || (exports.CurdAction = {}));
726
-
727
- /**
728
- * CurdAction 的子事件
729
- */
730
- exports.CurdSubAction = void 0;
731
-
732
- (function (CurdSubAction) {
733
- CurdSubAction["EMIT"] = "EMIT";
734
- CurdSubAction["EXECUTE"] = "EXECUTE";
735
- CurdSubAction["PAGE"] = "PAGE";
736
- CurdSubAction["SUCCESS"] = "SUCCESS";
737
- CurdSubAction["FAIL"] = "FAIL";
738
- })(exports.CurdSubAction || (exports.CurdSubAction = {}));
739
-
740
- /**
741
- * curd 操作模式
742
- */
743
- exports.CurdCurrentMode = void 0;
744
-
745
- (function (CurdCurrentMode) {
746
- CurdCurrentMode["ADD"] = "ADD";
747
- CurdCurrentMode["EDIT"] = "EDIT";
748
- CurdCurrentMode["DETAIL"] = "DETAIL";
749
- })(exports.CurdCurrentMode || (exports.CurdCurrentMode = {}));
750
-
751
- /**
752
- * curd add 模式下 标记 "确定" "确定并继续" 触发
753
- */
754
- exports.CurdAddAction = void 0;
755
-
756
- (function (CurdAddAction) {
757
- CurdAddAction["NORMAL"] = "NORMAL";
758
- CurdAddAction["CONTINUE"] = "CONTINUE";
759
- })(exports.CurdAddAction || (exports.CurdAddAction = {}));
760
-
761
- /**
762
- * 剔除showState或showStateRules规则为!true的值
763
- * @param values
764
- * @param showState
765
- * @param showStateRules
766
- */
767
-
768
- var getValidValues = function getValidValues(values, showState, showStateRules) {
769
- if (showState) {
770
- var invalidKeys = lodash.filter(lodash.keys(showState), function (key) {
771
- return !showState[key];
772
- });
773
- return lodash.omit(values, invalidKeys);
774
- }
775
-
776
- if (showStateRules) {
777
- var _invalidKeys = lodash.filter(lodash.keys(showStateRules), function (key) {
778
- return !showStateRules[key](values);
779
- });
780
-
781
- return lodash.omit(values, _invalidKeys);
782
- }
783
-
784
- return values;
785
- };
786
- /**
787
- * string类型的path转为arr
788
- * @param path
789
- */
790
-
791
- var convertPathToList = function convertPathToList(path) {
792
- if (!path) {
793
- return undefined;
794
- }
795
-
796
- if (lodash.isArray(path)) {
797
- return path;
798
- }
799
-
800
- if (path && lodash.isString(path) && path.indexOf(".") > 0) {
801
- return lodash.split(path, ".");
802
- }
803
-
804
- return [path];
805
- };
806
- /**
807
- * 将listState 中的数据通过id merge到 list item中
808
- * ps:数组会替换
809
- * 注意:mergeWith 会改变原始对象
810
- * @param list
811
- * @param listState
812
- * @param id
813
- */
814
-
815
- var mergeStateToList = function mergeStateToList(list, listState, id) {
816
- if (!listState || !id) {
817
- return list;
818
- }
819
-
820
- return lodash.map(list, function (item) {
821
- var idName = lodash.isFunction(id) ? id(item) : id; //如果listState中有值,merge处理
822
-
823
- var stateData = lodash.get(listState, idName);
824
-
825
- if (!stateData || lodash.isEmpty(stateData) || lodash.isFunction(stateData) || !lodash.isObject(stateData)) {
826
- return item;
827
- } //只有是对象(键值对)才合并
828
-
829
-
830
- return lodash.mergeWith(item, stateData, function (objValue, srcValue) {
831
- //如果是数组,替换
832
- if (lodash.isArray(objValue) || lodash.isArray(srcValue)) {
833
- return srcValue;
834
- }
835
- });
836
- });
837
- };
838
-
839
- /**
840
- * ref 传递
841
- */
842
-
843
- var createExpose = function createExpose(methods, targetRef) {
844
- return lodash.reduce(methods, function (pair, method) {
845
- return _objectSpread2(_objectSpread2({}, pair), {}, _defineProperty({}, method, function () {
846
- var _targetRef$value, _targetRef$value$meth;
847
-
848
- for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
849
- params[_key] = arguments[_key];
850
- }
851
-
852
- return (_targetRef$value = targetRef.value) === null || _targetRef$value === void 0 ? void 0 : (_targetRef$value$meth = _targetRef$value[method]) === null || _targetRef$value$meth === void 0 ? void 0 : _targetRef$value$meth.call.apply(_targetRef$value$meth, [_targetRef$value].concat(params));
853
- }));
854
- }, {});
855
- };
856
-
857
- var defaultPage = {
858
- page: 1,
859
- pageSize: 10
860
- };
861
-
862
- var proCurdProps = function proCurdProps() {
863
- return {
864
- /**
865
- * 配置(静态)
866
- */
867
- columns: {
868
- type: Array
869
- },
870
-
871
- /**
872
- * 配置(动态)
873
- * columns动态属性兼容
874
- */
875
- columnState: {
876
- type: Object
877
- },
878
-
879
- /**
880
- * 录入组件集
881
- */
882
- formElementMap: {
883
- type: Object
884
- },
885
-
886
- /**
887
- * 列表 或 详情 的唯一标识
888
- */
889
- rowKey: {
890
- type: String,
891
- "default": "id"
892
- },
893
-
894
- /**
895
- * operates
896
- */
897
- operates: {
898
- type: Array
899
- },
900
-
901
- /************************* 子组件props *******************************/
902
- listProps: {
903
- type: Object
904
- },
905
- formProps: {
906
- type: Object
907
- },
908
- descProps: {
909
- type: Object
910
- },
911
- modalProps: {
912
- type: Object
913
- }
914
- };
915
- };
916
-
917
- var CurdMethods = ["sendCurdEvent", "refreshList", "sendEvent", "sendRequest"];
918
- var Curd = vue.defineComponent({
919
- props: _objectSpread2({}, proCurdProps()),
920
- setup: function setup(props, _ref) {
921
- var slots = _ref.slots,
922
- expose = _ref.expose;
923
-
924
- var _ref2 = useProModule(),
925
- elementMap = _ref2.elementMap,
926
- state = _ref2.state,
927
- sendEvent = _ref2.sendEvent,
928
- sendRequest = _ref2.sendRequest;
929
- /**
930
- * columns columnState 合并
931
- */
932
-
933
-
934
- var columns = vue.computed(function () {
935
- return mergeStateToList(props.columns, props.columnState, function (item) {
936
- return getColumnFormItemName(item);
937
- });
938
- });
939
- /*********************************** 渲染组件 ***************************************/
940
- // 获取FormItem VNode
941
-
942
- var getFormItemVNode = function getFormItemVNode(column) {
943
- var needRules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
944
- return getFormItemEl(props.formElementMap, column, needRules);
945
- }; // 获取Item VNode
946
-
947
-
948
- var getItemVNode = function getItemVNode(column, value) {
949
- return getItemEl(elementMap, column, value);
950
- };
951
- /**
952
- * ${signName} 配置为true 会被选择
953
- * @param signName
954
- * @param opposite 如果为true,未配置(undefined)会被选择
955
- */
956
-
957
-
958
- var getSignColumns = function getSignColumns(signName, opposite) {
959
- var signColumns = lodash.filter(columns.value, function (item) {
960
- var sign = lodash.get(item, ["extra", signName]) || lodash.get(item, signName);
961
-
962
- if (opposite) {
963
- //不为false 即为选中
964
- return sign !== false;
965
- } //只有true 才为选中
966
-
967
-
968
- return sign;
969
- });
970
- return lodash.sortBy(signColumns, function (item) {
971
- return lodash.get(item, ["extra", "".concat(signName, "Sort")]) || lodash.get(item, "".concat(signName, "Sort"));
972
- });
973
- };
974
-
975
- var formColumns = vue.computed(function () {
976
- return getSignColumns("form", true);
977
- });
978
- var descColumns = vue.computed(function () {
979
- return getSignColumns("detail", true);
980
- });
981
- var tableColumns = vue.computed(function () {
982
- return getSignColumns("table", true);
983
- });
984
- var searchColumns = vue.computed(function () {
985
- return getSignColumns("search");
986
- });
987
- /******************************** 逻辑 *************************************/
988
- //上一次发起列表请求的参数
989
-
990
- var prevListParams; //刷新列表
991
-
992
- var handleSearch = function handleSearch(extra) {
993
- sendRequest(exports.CurdAction.LIST, _objectSpread2(_objectSpread2({}, prevListParams), extra));
994
- }; //发送事件
995
-
996
-
997
- var sendCurdEvent = function sendCurdEvent(event) {
998
- sendEvent({
999
- type: event.action,
1000
- payload: lodash.omit(event, "action", "source"),
1001
- source: event.source
1002
- });
1003
- }; //事件订阅
1004
-
1005
-
1006
- useModuleEvent(function (_ref3) {
1007
- var type = _ref3.type,
1008
- payload = _ref3.payload,
1009
- source = _ref3.source;
1010
-
1011
- //如果当前event存在source 不处理
1012
- if (source) {
1013
- return;
1014
- }
1015
-
1016
- var action = type;
1017
- var subAction = payload === null || payload === void 0 ? void 0 : payload.type;
1018
-
1019
- if (action === RequestAction.Success) {
1020
- //覆盖
1021
- action = lodash.get(payload, ["requestOpts", "action"]);
1022
- subAction = exports.CurdSubAction.SUCCESS;
1023
- }
1024
-
1025
- var _ref4 = payload,
1026
- values = _ref4.values,
1027
- record = _ref4.record;
1028
-
1029
- switch (action) {
1030
- case exports.CurdAction.LIST:
1031
- if (subAction === exports.CurdSubAction.EMIT) {
1032
- prevListParams = values;
1033
- handleSearch();
1034
- }
1035
-
1036
- return;
1037
-
1038
- case exports.CurdAction.ADD:
1039
- if (subAction === exports.CurdSubAction.EXECUTE) {
1040
- sendRequest(exports.CurdAction.ADD, values, state.detailData);
1041
- }
1042
-
1043
- return;
1044
-
1045
- case exports.CurdAction.EDIT:
1046
- if (subAction === exports.CurdSubAction.EXECUTE) {
1047
- sendRequest(exports.CurdAction.EDIT, values, state.detailData);
1048
- }
1049
-
1050
- return;
1051
-
1052
- case exports.CurdAction.DELETE:
1053
- if (subAction === exports.CurdSubAction.EMIT) {
1054
- sendRequest(exports.CurdAction.DELETE, record, props.rowKey);
1055
- } else if (subAction === exports.CurdSubAction.SUCCESS) {
1056
- handleSearch();
1057
- }
1058
-
1059
- return;
1060
- } //非 CurdAction 五种操作的其他请求
1061
-
1062
-
1063
- if (action && type === exports.CurdSubAction.EXECUTE) {
1064
- sendRequest(action, values);
1065
- }
1066
- });
1067
- var operateMap = lodash.reduce(props.operates, function (pair, item) {
1068
- return _objectSpread2(_objectSpread2({}, pair), {}, _defineProperty({}, item.action, item));
1069
- }, {}); //根据Action获取ICurdOperateOpts
1070
-
1071
- var getOperate = function getOperate(action) {
1072
- return lodash.get(operateMap, action);
1073
- };
1074
-
1075
- var listProps = vue.computed(function () {
1076
- return props.listProps;
1077
- });
1078
- var formProps = vue.computed(function () {
1079
- return props.formProps;
1080
- });
1081
- var descProps = vue.computed(function () {
1082
- return props.descProps;
1083
- });
1084
- var modalProps = vue.computed(function () {
1085
- return props.modalProps;
1086
- });
1087
- provideProCurd({
1088
- columns: columns,
1089
- getSignColumns: getSignColumns,
1090
- getFormItemVNode: getFormItemVNode,
1091
- getItemVNode: getItemVNode,
1092
- elementMap: elementMap,
1093
- formElementMap: props.formElementMap,
1094
- //
1095
- rowKey: props.rowKey,
1096
- curdState: state,
1097
- formColumns: formColumns,
1098
- descColumns: descColumns,
1099
- tableColumns: tableColumns,
1100
- searchColumns: searchColumns,
1101
- //
1102
- sendCurdEvent: sendCurdEvent,
1103
- //
1104
- operates: props.operates,
1105
- getOperate: getOperate,
1106
- //
1107
- refreshList: handleSearch,
1108
- //
1109
- listProps: listProps,
1110
- formProps: formProps,
1111
- descProps: descProps,
1112
- modalProps: modalProps
1113
- });
1114
- expose({
1115
- sendCurdEvent: sendCurdEvent,
1116
- refreshList: handleSearch
1117
- });
1118
- return function () {
1119
- var _slots$default;
1120
-
1121
- return (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots);
1122
- };
1123
- }
1124
- });
1125
- var ProCurd = vue.defineComponent({
1126
- props: _objectSpread2(_objectSpread2(_objectSpread2({}, lodash.omit(ProModule.props, "state", "requests")), Curd.props), {}, {
1127
- curdState: {
1128
- type: Object
1129
- }
1130
- }),
1131
- setup: function setup(props, _ref5) {
1132
- var _curdOperateOpts;
1133
-
1134
- var slots = _ref5.slots,
1135
- expose = _ref5.expose;
1136
- var moduleRef = vue.ref();
1137
- var curdRef = vue.ref();
1138
- var curdState = props.curdState || vue.reactive({
1139
- detailData: {}
1140
- });
1141
- /****************** 请求处理 **********************/
1142
- //curd默认网络属性
1143
-
1144
- var curdOperateOpts = (_curdOperateOpts = {}, _defineProperty(_curdOperateOpts, exports.CurdAction.LIST, {
1145
- convertParams: function convertParams(values) {
1146
- return values;
1147
- },
1148
- convertData: function convertData(actor) {
1149
- var _actor$res;
1150
-
1151
- return (_actor$res = actor.res) === null || _actor$res === void 0 ? void 0 : _actor$res.data;
1152
- },
1153
- loadingName: "listLoading",
1154
- stateName: "listData"
1155
- }), _defineProperty(_curdOperateOpts, exports.CurdAction.DETAIL, {
1156
- convertParams: function convertParams(record, rowKey) {
1157
- return lodash.pick(record, rowKey);
1158
- },
1159
- convertData: function convertData(actor) {
1160
- var _actor$res2;
1161
-
1162
- return (_actor$res2 = actor.res) === null || _actor$res2 === void 0 ? void 0 : _actor$res2.data;
1163
- },
1164
- loadingName: "detailLoading",
1165
- stateName: "detailData",
1166
- label: "详情"
1167
- }), _defineProperty(_curdOperateOpts, exports.CurdAction.ADD, {
1168
- convertParams: function convertParams(values, record) {
1169
- return {
1170
- body: _objectSpread2(_objectSpread2({}, record), values)
1171
- };
1172
- },
1173
- loadingName: "operateLoading",
1174
- label: "添加"
1175
- }), _defineProperty(_curdOperateOpts, exports.CurdAction.EDIT, {
1176
- convertParams: function convertParams(values, record) {
1177
- return {
1178
- body: _objectSpread2(_objectSpread2({}, record), values)
1179
- };
1180
- },
1181
- loadingName: "operateLoading",
1182
- label: "编辑"
1183
- }), _defineProperty(_curdOperateOpts, exports.CurdAction.DELETE, {
1184
- convertParams: function convertParams(record, rowKey) {
1185
- return lodash.pick(record, rowKey);
1186
- },
1187
- label: "删除"
1188
- }), _curdOperateOpts);
1189
- /****************************** columns分类 *************************************/
1190
-
1191
- var operates = lodash.map(props.operates, function (item) {
1192
- var curdOpts = lodash.get(curdOperateOpts, item.action);
1193
- return _objectSpread2(_objectSpread2({}, curdOpts), item);
1194
- }); //只取配置actor的项
1195
-
1196
- var requests = lodash.filter(operates, function (item) {
1197
- return item.actor;
1198
- });
1199
- var moduleKeys = lodash.keys(lodash.omit(ProModule.props, "state", "requests"));
1200
- expose({
1201
- sendCurdEvent: function sendCurdEvent(event) {
1202
- var _curdRef$value;
1203
-
1204
- (_curdRef$value = curdRef.value) === null || _curdRef$value === void 0 ? void 0 : _curdRef$value.sendCurdEvent(event);
1205
- },
1206
- refreshList: function refreshList(extra) {
1207
- var _curdRef$value2;
1208
-
1209
- (_curdRef$value2 = curdRef.value) === null || _curdRef$value2 === void 0 ? void 0 : _curdRef$value2.refreshList(extra);
1210
- },
1211
- sendEvent: function sendEvent(action) {
1212
- var _moduleRef$value;
1213
-
1214
- (_moduleRef$value = moduleRef.value) === null || _moduleRef$value === void 0 ? void 0 : _moduleRef$value.sendEvent(action);
1215
- },
1216
- sendRequest: function sendRequest(requestNameOrAction) {
1217
- var _moduleRef$value2;
1218
-
1219
- for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1220
- params[_key - 1] = arguments[_key];
1221
- }
1222
-
1223
- (_moduleRef$value2 = moduleRef.value) === null || _moduleRef$value2 === void 0 ? void 0 : _moduleRef$value2.sendRequest.apply(_moduleRef$value2, [requestNameOrAction].concat(params));
1224
- }
1225
- });
1226
- return function () {
1227
- return vue.createVNode(ProModule, vue.mergeProps({
1228
- "ref": moduleRef
1229
- }, lodash.pick(props, moduleKeys), {
1230
- "state": curdState,
1231
- "requests": requests
1232
- }), {
1233
- "default": function _default() {
1234
- return [vue.createVNode(Curd, vue.mergeProps({
1235
- "ref": curdRef
1236
- }, lodash.omit.apply(void 0, [props].concat(_toConsumableArray(moduleKeys), ["curdState", "operates"])), {
1237
- "operates": operates
1238
- }), slots)];
1239
- }
1240
- });
1241
- };
1242
- }
1243
- });
1244
-
1245
- var modalCurdProps = function modalCurdProps() {
1246
- return {
1247
- defaultAddRecord: {
1248
- type: Object
1249
- }
1250
- };
1251
- };
1252
-
1253
- /**
1254
- * 事件处理
1255
- */
1256
- var ModalCurd = vue.defineComponent({
1257
- props: _objectSpread2({}, modalCurdProps()),
1258
- setup: function setup(props) {
1259
- var _listProps$value;
1260
-
1261
- var _useProModule = useProModule(),
1262
- dispatch = _useProModule.dispatch,
1263
- sendRequest = _useProModule.sendRequest;
1264
-
1265
- var _useProCurd = useProCurd(),
1266
- rowKey = _useProCurd.rowKey,
1267
- curdState = _useProCurd.curdState,
1268
- listProps = _useProCurd.listProps,
1269
- getOperate = _useProCurd.getOperate,
1270
- refreshList = _useProCurd.refreshList;
1271
-
1272
- var pageState = listProps === null || listProps === void 0 ? void 0 : (_listProps$value = listProps.value) === null || _listProps$value === void 0 ? void 0 : _listProps$value.pageState; //发送详情接口
1273
-
1274
- var sendDetailRequest = function sendDetailRequest(record) {
1275
- var operateOpts = getOperate(exports.CurdAction.DETAIL);
1276
-
1277
- if (operateOpts !== null && operateOpts !== void 0 && operateOpts.actor) {
1278
- //如果注册了详情接口 发起请求
1279
- sendRequest(exports.CurdAction.DETAIL, record, rowKey);
1280
- } else {
1281
- //直接使用当前record作为详情数据
1282
- dispatch({
1283
- type: "detailData",
1284
- payload: record
1285
- });
1286
- }
1287
- };
1288
-
1289
- var dealDetail = function dealDetail(subAction, _ref) {
1290
- var record = _ref.record;
1291
-
1292
- if (subAction === exports.CurdSubAction.EMIT) {
1293
- dispatch({
1294
- type: "mode",
1295
- payload: exports.CurdCurrentMode.DETAIL
1296
- });
1297
- sendDetailRequest(record);
1298
- }
1299
- };
1300
-
1301
- var dealAdd = function dealAdd(subAction) {
1302
- if (subAction === exports.CurdSubAction.EMIT) {
1303
- dispatch({
1304
- type: "mode",
1305
- payload: exports.CurdCurrentMode.ADD
1306
- });
1307
- dispatch({
1308
- type: "detailData",
1309
- payload: props.defaultAddRecord || {}
1310
- });
1311
- } else if (subAction === exports.CurdSubAction.SUCCESS) {
1312
- //添加成功
1313
- if (pageState) {
1314
- pageState.page = 1; //重置当前页数
1315
- } //刷新List
1316
-
1317
-
1318
- refreshList();
1319
-
1320
- if (curdState.addAction === exports.CurdAddAction.CONTINUE) {
1321
- dispatch({
1322
- type: "detailData",
1323
- payload: props.defaultAddRecord || {}
1324
- });
1325
- } else {
1326
- dispatch({
1327
- type: "mode",
1328
- payload: undefined
1329
- });
1330
- }
1331
- }
1332
- };
1333
-
1334
- var dealEdit = function dealEdit(subAction, _ref2) {
1335
- var record = _ref2.record;
1336
-
1337
- if (subAction === exports.CurdSubAction.EMIT) {
1338
- dispatch({
1339
- type: "mode",
1340
- payload: exports.CurdCurrentMode.EDIT
1341
- });
1342
- sendDetailRequest(record);
1343
- } else if (subAction === exports.CurdSubAction.SUCCESS) {
1344
- // 编辑成功
1345
- dispatch({
1346
- type: "mode",
1347
- payload: undefined
1348
- }); //刷新列表
1349
-
1350
- refreshList();
1351
- }
1352
- };
1353
-
1354
- useModuleEvent(function (_ref3) {
1355
- var type = _ref3.type,
1356
- payload = _ref3.payload,
1357
- source = _ref3.source;
1358
-
1359
- if (source) {
1360
- return;
1361
- }
1362
-
1363
- var action = type;
1364
- var subAction = payload === null || payload === void 0 ? void 0 : payload.type;
1365
- var record = payload === null || payload === void 0 ? void 0 : payload.record;
1366
-
1367
- if (action === RequestAction.Success) {
1368
- //覆盖
1369
- action = lodash.get(payload, ["requestOpts", "action"]);
1370
- subAction = exports.CurdSubAction.SUCCESS;
1371
- }
1372
-
1373
- switch (action) {
1374
- case exports.CurdAction.DETAIL:
1375
- dealDetail(subAction, {
1376
- record: record
1377
- });
1378
- break;
1379
-
1380
- case exports.CurdAction.ADD:
1381
- dealAdd(subAction);
1382
- break;
1383
-
1384
- case exports.CurdAction.EDIT:
1385
- dealEdit(subAction, {
1386
- record: record
1387
- });
1388
- break;
1389
- }
1390
- });
1391
- return function () {
1392
- return null;
1393
- };
1394
- }
1395
- });
1396
- var ProModalCurd = vue.defineComponent({
1397
- props: _objectSpread2(_objectSpread2({}, ProCurd.props), ModalCurd.props),
1398
- setup: function setup(props, _ref4) {
1399
- var slots = _ref4.slots,
1400
- expose = _ref4.expose;
1401
- var curdRef = vue.ref();
1402
- expose(createExpose(CurdMethods, curdRef));
1403
- var invalidKeys = lodash.keys(ModalCurd.props);
1404
- return function () {
1405
- var _slots$default;
1406
-
1407
- return vue.createVNode(ProCurd, vue.mergeProps({
1408
- "ref": curdRef
1409
- }, lodash.omit(props, invalidKeys)), {
1410
- "default": function _default() {
1411
- return [vue.createVNode(ModalCurd, lodash.pick(props, invalidKeys), null), (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];
1412
- }
1413
- });
1414
- };
1415
- }
1416
- });
1417
-
1418
- var pageCurdProps = function pageCurdProps() {
1419
- return {
1420
- defaultAddRecord: {
1421
- type: Object
1422
- },
1423
- routeBack: {
1424
- type: Function
1425
- }
1426
- };
1427
- };
1428
-
1429
- var PageCurd = vue.defineComponent({
1430
- props: _objectSpread2({}, pageCurdProps()),
1431
- setup: function setup(props) {
1432
- var router = vueRouter.useRouter();
1433
- var route = vueRouter.useRoute();
1434
-
1435
- var _useProModule = useProModule(),
1436
- dispatch = _useProModule.dispatch,
1437
- sendRequest = _useProModule.sendRequest;
1438
-
1439
- var _useProCurd = useProCurd(),
1440
- rowKey = _useProCurd.rowKey,
1441
- curdState = _useProCurd.curdState;
1442
-
1443
- var dealList = function dealList(subAction) {
1444
- if (subAction === exports.CurdSubAction.PAGE) {
1445
- //其实就是个重置过程
1446
- dispatch({
1447
- type: "mode",
1448
- payload: undefined
1449
- });
1450
- dispatch({
1451
- type: "detailData",
1452
- payload: {}
1453
- });
1454
- dispatch({
1455
- type: "detailLoading",
1456
- payload: false
1457
- });
1458
- dispatch({
1459
- type: "addAction",
1460
- payload: undefined
1461
- });
1462
- }
1463
- };
1464
-
1465
- var dealDetail = function dealDetail(subAction, _ref) {
1466
- var record = _ref.record;
1467
-
1468
- if (subAction === exports.CurdSubAction.EMIT) {
1469
- router.push({
1470
- path: "".concat(route.path, "/detail"),
1471
- query: lodash.pick(record, rowKey)
1472
- });
1473
- } else if (subAction === exports.CurdSubAction.PAGE) {
1474
- dispatch({
1475
- type: "mode",
1476
- payload: exports.CurdCurrentMode.DETAIL
1477
- });
1478
- sendRequest(exports.CurdAction.DETAIL, route.query, rowKey);
1479
- }
1480
- };
1481
-
1482
- var dealAdd = function dealAdd(subAction) {
1483
- if (subAction === exports.CurdSubAction.EMIT) {
1484
- router.push({
1485
- path: "".concat(route.path, "/add")
1486
- });
1487
- } else if (subAction === exports.CurdSubAction.PAGE) {
1488
- dispatch({
1489
- type: "mode",
1490
- payload: exports.CurdCurrentMode.ADD
1491
- });
1492
- dispatch({
1493
- type: "detailData",
1494
- payload: props.defaultAddRecord || {}
1495
- });
1496
- } else if (subAction === exports.CurdSubAction.SUCCESS) {
1497
- if (curdState.addAction === exports.CurdAddAction.CONTINUE) {
1498
- dispatch({
1499
- type: "detailData",
1500
- payload: props.defaultAddRecord || {}
1501
- });
1502
- } else {
1503
- props.routeBack ? props.routeBack(exports.CurdAction.ADD) : router.go(-1);
1504
- }
1505
- }
1506
- };
1507
-
1508
- var dealEdit = function dealEdit(subAction, _ref2) {
1509
- var record = _ref2.record;
1510
-
1511
- if (subAction === exports.CurdSubAction.EMIT) {
1512
- router.push({
1513
- path: "".concat(route.path, "/edit"),
1514
- query: lodash.pick(record, rowKey)
1515
- });
1516
- } else if (subAction === exports.CurdSubAction.PAGE) {
1517
- dispatch({
1518
- type: "mode",
1519
- payload: exports.CurdCurrentMode.EDIT
1520
- });
1521
- sendRequest(exports.CurdAction.DETAIL, route.query, rowKey);
1522
- } else if (subAction === exports.CurdSubAction.SUCCESS) {
1523
- props.routeBack ? props.routeBack(exports.CurdAction.EDIT) : router.go(-1);
1524
- }
1525
- };
1526
-
1527
- useModuleEvent(function (_ref3) {
1528
- var type = _ref3.type,
1529
- payload = _ref3.payload,
1530
- source = _ref3.source;
1531
-
1532
- if (source) {
1533
- return;
1534
- }
1535
-
1536
- var action = type;
1537
- var subAction = payload === null || payload === void 0 ? void 0 : payload.type;
1538
- var record = payload === null || payload === void 0 ? void 0 : payload.record;
1539
-
1540
- if (action === RequestAction.Success) {
1541
- //覆盖
1542
- action = lodash.get(payload, ["requestOpts", "action"]);
1543
- subAction = exports.CurdSubAction.SUCCESS;
1544
- }
1545
-
1546
- switch (action) {
1547
- case exports.CurdAction.LIST:
1548
- dealList(subAction);
1549
- break;
1550
-
1551
- case exports.CurdAction.DETAIL:
1552
- dealDetail(subAction, {
1553
- record: record
1554
- });
1555
- break;
1556
-
1557
- case exports.CurdAction.ADD:
1558
- dealAdd(subAction);
1559
- break;
1560
-
1561
- case exports.CurdAction.EDIT:
1562
- dealEdit(subAction, {
1563
- record: record
1564
- });
1565
- break;
1566
- }
1567
- });
1568
- return function () {
1569
- return null;
1570
- };
1571
- }
1572
- });
1573
- var ProPageCurd = vue.defineComponent({
1574
- props: _objectSpread2(_objectSpread2({}, ProCurd.props), PageCurd.props),
1575
- setup: function setup(props, _ref4) {
1576
- var slots = _ref4.slots,
1577
- expose = _ref4.expose;
1578
- var curdRef = vue.ref();
1579
- expose(createExpose(CurdMethods, curdRef));
1580
- var invalidKeys = lodash.keys(PageCurd.props);
1581
- return function () {
1582
- var _slots$default;
1583
-
1584
- return vue.createVNode(ProCurd, vue.mergeProps({
1585
- "ref": curdRef
1586
- }, lodash.omit(props, invalidKeys)), {
1587
- "default": function _default() {
1588
- return [vue.createVNode(PageCurd, lodash.pick(props, invalidKeys), null), (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];
1589
- }
1590
- });
1591
- };
1592
- }
1593
- });
1594
-
1595
- function _isSlot(s) {
1596
- return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !vue.isVNode(s);
1597
- }
1598
-
1599
- var createCurdDesc = function createCurdDesc(Descriptions, DescriptionsItem) {
1600
- return vue.defineComponent({
1601
- props: _objectSpread2(_objectSpread2({}, Descriptions.props), {}, {
1602
- //重写Item content
1603
- renderItem: {
1604
- type: Function
1605
- },
1606
- //标记名称
1607
- signName: {
1608
- type: String
1609
- }
1610
- }),
1611
- setup: function setup(props, _ref) {
1612
- var slots = _ref.slots;
1613
-
1614
- var _useProCurd = useProCurd(),
1615
- getItemVNode = _useProCurd.getItemVNode,
1616
- curdState = _useProCurd.curdState,
1617
- descColumns = _useProCurd.descColumns,
1618
- getSignColumns = _useProCurd.getSignColumns;
1619
-
1620
- var descVNodes = vue.computed(function () {
1621
- var columns = props.signName ? getSignColumns(props.signName) : descColumns.value;
1622
- return lodash.map(columns, function (item) {
1623
- var _slot;
1624
-
1625
- var _props$renderItem;
1626
-
1627
- var vn = (_props$renderItem = props.renderItem) === null || _props$renderItem === void 0 ? void 0 : _props$renderItem.call(props, item);
1628
-
1629
- if (vn) {
1630
- return vn;
1631
- }
1632
-
1633
- var value = lodash.get(curdState.detailData, item.dataIndex);
1634
- return vue.createVNode(DescriptionsItem, vue.mergeProps({
1635
- "key": item.dataIndex,
1636
- "label": item.title
1637
- }, lodash.get(item.extra, "desc")), _isSlot(_slot = getItemVNode(item, value)) ? _slot : {
1638
- "default": function _default() {
1639
- return [_slot];
1640
- }
1641
- });
1642
- });
1643
- });
1644
- return function () {
1645
- var _slots$start, _slots$default;
1646
-
1647
- return vue.createVNode(Descriptions, props, _objectSpread2({
1648
- "default": function _default() {
1649
- return [(_slots$start = slots.start) === null || _slots$start === void 0 ? void 0 : _slots$start.call(slots), descVNodes.value, (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];
1650
- }
1651
- }, lodash.omit(slots, "default", "start")));
1652
- };
1653
- }
1654
- });
1655
- };
1656
-
1657
- var proCurdAddOrEditProps = function proCurdAddOrEditProps() {
1658
- return {
1659
- //标记名称
1660
- signName: {
1661
- type: String
1662
- },
1663
- //form model 绑定的curdState中的对象
1664
- modelName: {
1665
- type: String,
1666
- "default": "detailData"
1667
- },
1668
- //是否使用operate bar
1669
- operateBar: {
1670
- type: Boolean,
1671
- "default": true
1672
- },
1673
- //显示 确定并继续 按钮
1674
- showContinueAdd: {
1675
- type: Boolean,
1676
- "default": false
1677
- },
1678
- //
1679
- okText: {
1680
- type: String,
1681
- "default": "确定"
1682
- },
1683
- okButtonProps: {
1684
- type: Object
1685
- },
1686
- //
1687
- continueText: {
1688
- type: String,
1689
- "default": "确定并继续"
1690
- },
1691
- continueButtonProps: {
1692
- type: Object
1693
- }
1694
- };
1695
- };
1696
-
1697
- var createCurdForm = function createCurdForm(Form, Button, convertFormProps, formMethods) {
1698
- return vue.defineComponent({
1699
- inheritAttrs: false,
1700
- props: _objectSpread2(_objectSpread2({}, Form.props), proCurdAddOrEditProps()),
1701
- setup: function setup(props, _ref) {
1702
- var slots = _ref.slots,
1703
- attrs = _ref.attrs,
1704
- expose = _ref.expose;
1705
-
1706
- var _useProCurd = useProCurd(),
1707
- elementMap = _useProCurd.elementMap,
1708
- formElementMap = _useProCurd.formElementMap,
1709
- curdState = _useProCurd.curdState,
1710
- formColumns = _useProCurd.formColumns,
1711
- getSignColumns = _useProCurd.getSignColumns,
1712
- sendCurdEvent = _useProCurd.sendCurdEvent;
1713
-
1714
- var formRef = vue.ref();
1715
- var columns = vue.computed(function () {
1716
- if (props.signName) {
1717
- return getSignColumns(props.signName);
1718
- }
1719
-
1720
- return formColumns.value;
1721
- });
1722
-
1723
- var handleFinish = function handleFinish(values, originValues) {
1724
- if (attrs.onFinish) {
1725
- attrs.onFinish(values, originValues);
1726
- return;
1727
- }
1728
-
1729
- if (curdState.mode === exports.CurdCurrentMode.EDIT) {
1730
- //edit
1731
- sendCurdEvent({
1732
- action: exports.CurdAction.EDIT,
1733
- type: exports.CurdSubAction.EXECUTE,
1734
- values: values
1735
- });
1736
- } else {
1737
- //add
1738
- sendCurdEvent({
1739
- action: exports.CurdAction.ADD,
1740
- type: exports.CurdSubAction.EXECUTE,
1741
- values: values
1742
- });
1743
- }
1744
- };
1745
-
1746
- var handleAdd = function handleAdd() {
1747
- var _formRef$value;
1748
-
1749
- curdState.addAction = exports.CurdAddAction.NORMAL;
1750
- (_formRef$value = formRef.value) === null || _formRef$value === void 0 ? void 0 : _formRef$value.submit();
1751
- };
1752
-
1753
- var handleContinueAdd = function handleContinueAdd() {
1754
- var _formRef$value2;
1755
-
1756
- curdState.addAction = exports.CurdAddAction.CONTINUE;
1757
- (_formRef$value2 = formRef.value) === null || _formRef$value2 === void 0 ? void 0 : _formRef$value2.submit();
1758
- };
1759
-
1760
- expose(createExpose(formMethods, formRef));
1761
- return function () {
1762
- var _slots$divide, _slots$operateStart, _slots$operateCenter, _slots$operateEnd, _slots$default;
1763
-
1764
- return vue.createVNode(Form, vue.mergeProps({
1765
- "ref": formRef
1766
- }, lodash.omit(attrs, "onFinish"), props, {
1767
- "elementMap": props.elementMap || elementMap,
1768
- "formElementMap": props.formElementMap || formElementMap,
1769
- "columns": props.columns || columns.value,
1770
- "model": props.model || curdState[props.modelName],
1771
- "readonly": curdState.mode === exports.CurdCurrentMode.DETAIL,
1772
- "onFinish": handleFinish
1773
- }, convertFormProps === null || convertFormProps === void 0 ? void 0 : convertFormProps(curdState)), _objectSpread2({
1774
- "default": function _default() {
1775
- return [(_slots$divide = slots.divide) === null || _slots$divide === void 0 ? void 0 : _slots$divide.call(slots), props.operateBar && vue.createVNode("div", {
1776
- "class": "pro-curd-form-operate"
1777
- }, [(_slots$operateStart = slots.operateStart) === null || _slots$operateStart === void 0 ? void 0 : _slots$operateStart.call(slots), curdState.mode !== exports.CurdCurrentMode.DETAIL && vue.createVNode(Button, vue.mergeProps({
1778
- "onClick": handleAdd
1779
- }, props.okButtonProps, {
1780
- "loading": curdState.operateLoading
1781
- }), {
1782
- "default": function _default() {
1783
- return [props.okText];
1784
- }
1785
- }), (_slots$operateCenter = slots.operateCenter) === null || _slots$operateCenter === void 0 ? void 0 : _slots$operateCenter.call(slots), props.showContinueAdd && curdState.mode === exports.CurdCurrentMode.ADD && vue.createVNode(Button, vue.mergeProps({
1786
- "onClick": handleContinueAdd
1787
- }, props.continueButtonProps, {
1788
- "loading": curdState.operateLoading
1789
- }), {
1790
- "default": function _default() {
1791
- return [props.continueText];
1792
- }
1793
- }), (_slots$operateEnd = slots.operateEnd) === null || _slots$operateEnd === void 0 ? void 0 : _slots$operateEnd.call(slots)]), (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];
1794
- }
1795
- }, lodash.omit(slots, "default", "divide", "operateStart", "operateCenter", "operateEnd")));
1796
- };
1797
- }
1798
- });
1799
- };
1800
-
1801
- var proCurdListProps = function proCurdListProps() {
1802
- return {
1803
- /**
1804
- * extra 是否放到SearchForm中
1805
- */
1806
- extraInSearch: {
1807
- type: Boolean,
1808
- "default": undefined
1809
- },
1810
- //search
1811
- searchProps: {
1812
- type: Object
1813
- },
1814
- //table
1815
- tableProps: {
1816
- type: Object
1817
- },
1818
- //pagination是否展示
1819
- paginationProps: {
1820
- type: Object
1821
- },
1822
- showPagination: {
1823
- type: Boolean,
1824
- "default": true
1825
- },
1826
- //pageState
1827
- pageState: {
1828
- type: Object
1829
- }
1830
- };
1831
- };
1832
-
1833
- var createCurdList = function createCurdList(SearchForm, Table) {
1834
- return vue.defineComponent({
1835
- props: _objectSpread2({}, proCurdListProps()),
1836
- setup: function setup(props, _ref) {
1837
- var slots = _ref.slots;
1838
-
1839
- var _useProCurd = useProCurd(),
1840
- elementMap = _useProCurd.elementMap,
1841
- formElementMap = _useProCurd.formElementMap,
1842
- curdState = _useProCurd.curdState,
1843
- searchColumns = _useProCurd.searchColumns,
1844
- tableColumns = _useProCurd.tableColumns,
1845
- sendCurdEvent = _useProCurd.sendCurdEvent,
1846
- operates = _useProCurd.operates;
1847
- /******************* search pagination ********************/
1848
-
1849
-
1850
- var pageState = props.pageState || vue.reactive(_objectSpread2({}, defaultPage));
1851
- var prevValues;
1852
-
1853
- var handleSearch = function handleSearch() {
1854
- sendCurdEvent({
1855
- action: exports.CurdAction.LIST,
1856
- type: exports.CurdSubAction.EMIT,
1857
- values: _objectSpread2(_objectSpread2({}, prevValues), pageState)
1858
- });
1859
- };
1860
-
1861
- var executeSearchWithResetPage = function executeSearchWithResetPage(values) {
1862
- prevValues = values;
1863
- pageState.page = 1;
1864
- handleSearch();
1865
- };
1866
- /******************* table ********************/
1867
-
1868
-
1869
- var tableOperateItems = lodash.map(lodash.filter(operates, function (item) {
1870
- var action = item.action;
1871
- return action === exports.CurdAction.DETAIL || action === exports.CurdAction.EDIT || action === exports.CurdAction.DELETE || item.tableOperate;
1872
- }), function (operate) {
1873
- var item = _objectSpread2(_objectSpread2({}, lodash.pick(operate, "label", "element", "disabled", "sort", "onClick")), {}, {
1874
- show: !lodash.isUndefined(operate === null || operate === void 0 ? void 0 : operate.show) ? operate === null || operate === void 0 ? void 0 : operate.show : false,
1875
- value: operate.action
1876
- });
1877
-
1878
- if (!item.onClick) {
1879
- item.onClick = function (record) {
1880
- sendCurdEvent({
1881
- action: operate.action,
1882
- type: exports.CurdSubAction.EMIT,
1883
- record: record
1884
- });
1885
- };
1886
- }
1887
-
1888
- return item;
1889
- }); //新配置的operate item,添加默认发送事件方法
1890
-
1891
- var convertOperateItems = function convertOperateItems(list) {
1892
- return lodash.map(list, function (item) {
1893
- if (!item.onClick) {
1894
- return _objectSpread2(_objectSpread2({}, item), {}, {
1895
- onClick: function onClick(record) {
1896
- sendCurdEvent({
1897
- action: "operate",
1898
- type: item.value,
1899
- record: record
1900
- });
1901
- }
1902
- });
1903
- }
1904
-
1905
- return item;
1906
- });
1907
- };
1908
-
1909
- return function () {
1910
- var _curdState$listData, _slots$start, _props$searchProps, _slots$divide, _slots$divide2, _slots$footerStart, _slots$pagination, _curdState$listData2, _slots$footerEnd, _slots$end;
1911
-
1912
- var tableProps = props.tableProps;
1913
-
1914
- var rewriteTableProps = _objectSpread2(_objectSpread2({
1915
- elementMap: elementMap,
1916
- columns: tableColumns.value
1917
- }, lodash.omit(tableProps, "slots", "operate")), {}, {
1918
- operate: lodash.mergeWith({
1919
- items: tableOperateItems
1920
- }, tableProps === null || tableProps === void 0 ? void 0 : tableProps.operate, function (objValue, srcValue) {
1921
- if (lodash.isArray(objValue) && lodash.isArray(srcValue)) {
1922
- return lodash.concat(objValue, convertOperateItems(srcValue));
1923
- }
1924
- }),
1925
- paginationState: {
1926
- page: pageState.page,
1927
- pageSize: pageState.pageSize
1928
- },
1929
- loading: curdState.listLoading,
1930
- dataSource: (_curdState$listData = curdState.listData) === null || _curdState$listData === void 0 ? void 0 : _curdState$listData.dataSource
1931
- });
1932
-
1933
- var extra = slots.extra ? vue.createVNode("div", {
1934
- "class": "pro-curd-list-extra"
1935
- }, [slots.extra()]) : null;
1936
- return vue.createVNode(vue.Fragment, null, [(_slots$start = slots.start) === null || _slots$start === void 0 ? void 0 : _slots$start.call(slots), slots.search ? slots.search({
1937
- executeSearchWithResetPage: executeSearchWithResetPage
1938
- }) : vue.createVNode(SearchForm, vue.mergeProps({
1939
- "formElementMap": formElementMap,
1940
- "columns": searchColumns.value
1941
- }, lodash.omit(props.searchProps, "slots"), {
1942
- "onFinish": executeSearchWithResetPage
1943
- }), _objectSpread2({
1944
- "default": function _default() {
1945
- return [props.extraInSearch && extra];
1946
- }
1947
- }, (_props$searchProps = props.searchProps) === null || _props$searchProps === void 0 ? void 0 : _props$searchProps.slots)), (_slots$divide = slots.divide) === null || _slots$divide === void 0 ? void 0 : _slots$divide.call(slots), !props.extraInSearch && extra, slots.table ? slots.table(rewriteTableProps) : vue.createVNode(Table, rewriteTableProps, tableProps === null || tableProps === void 0 ? void 0 : tableProps.slots), (_slots$divide2 = slots.divide2) === null || _slots$divide2 === void 0 ? void 0 : _slots$divide2.call(slots), props.showPagination && vue.createVNode("div", {
1948
- "class": "pro-curd-list-footer"
1949
- }, [(_slots$footerStart = slots.footerStart) === null || _slots$footerStart === void 0 ? void 0 : _slots$footerStart.call(slots), (_slots$pagination = slots.pagination) === null || _slots$pagination === void 0 ? void 0 : _slots$pagination.call(slots, pageState, (_curdState$listData2 = curdState.listData) === null || _curdState$listData2 === void 0 ? void 0 : _curdState$listData2.total, handleSearch), (_slots$footerEnd = slots.footerEnd) === null || _slots$footerEnd === void 0 ? void 0 : _slots$footerEnd.call(slots)]), (_slots$end = slots.end) === null || _slots$end === void 0 ? void 0 : _slots$end.call(slots)]);
1950
- };
1951
- }
1952
- });
1953
- };
1954
-
1955
- /**
1956
- * ProFormList ctx
1957
- */
1958
-
1959
- var ProFormListKey = Symbol("pro-form-list");
1960
- var useProFormList = function useProFormList() {
1961
- return vue.inject(ProFormListKey);
1962
- };
1963
- var provideProFormList = function provideProFormList(ctx) {
1964
- vue.provide(ProFormListKey, ctx);
1965
- };
1966
- var FormListProvider = vue.defineComponent({
1967
- props: {
1968
- pathList: {
1969
- type: Array
1970
- }
1971
- },
1972
- setup: function setup(props, _ref) {
1973
- var slots = _ref.slots;
1974
- provideProFormList({
1975
- pathList: props.pathList
1976
- });
1977
- return function () {
1978
- var _slots$default;
1979
-
1980
- return (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots);
1981
- };
1982
- }
1983
- });
1984
-
1985
- var createFormList = function createFormList(FormItem) {
1986
- return vue.defineComponent({
1987
- props: _objectSpread2(_objectSpread2({}, FormItem.props), {}, {
1988
- //每行默认id
1989
- rowKey: {
1990
- type: String,
1991
- "default": "id"
1992
- }
1993
- }),
1994
- setup: function setup(props, _ref2) {
1995
- var slots = _ref2.slots;
1996
-
1997
- var _useProForm = useProForm(),
1998
- formState = _useProForm.formState,
1999
- readonly = _useProForm.readonly;
2000
-
2001
- var formListCtx = useProFormList();
2002
- var nameList = convertPathToList(props.name);
2003
- var path = formListCtx !== null && formListCtx !== void 0 && formListCtx.pathList ? [].concat(_toConsumableArray(formListCtx.pathList), _toConsumableArray(nameList)) : nameList;
2004
-
2005
- var handleAdd = function handleAdd() {
2006
- var targetList = lodash.get(formState, path);
2007
-
2008
- if (!lodash.isArray(targetList)) {
2009
- targetList = [];
2010
- }
2011
-
2012
- targetList.push(_defineProperty({}, props.rowKey, new Date().valueOf()));
2013
- lodash.set(formState, path, targetList);
2014
- };
2015
-
2016
- var handleRemove = function handleRemove(index) {
2017
- var targetList = lodash.get(formState, path);
2018
-
2019
- if (lodash.size(targetList) <= 0) {
2020
- return;
2021
- }
2022
-
2023
- targetList.splice(index, 1);
2024
- };
2025
-
2026
- return function () {
2027
- var _slots$add;
2028
-
2029
- return vue.createVNode(FormItem, lodash.omit(props, "rowKey"), {
2030
- "default": function _default() {
2031
- return [lodash.map(lodash.get(formState, path), function (item, index) {
2032
- var _slots$default2, _slots$itemAdd, _slots$itemMinus;
2033
-
2034
- return vue.createVNode(FormListProvider, {
2035
- "key": item[props.rowKey] || index,
2036
- "pathList": [].concat(_toConsumableArray(path), [index])
2037
- }, {
2038
- "default": function _default() {
2039
- return [vue.createVNode("div", {
2040
- "class": "pro-form-list-item"
2041
- }, [(_slots$default2 = slots["default"]) === null || _slots$default2 === void 0 ? void 0 : _slots$default2.call(slots), !readonly.value && vue.createVNode(vue.Fragment, null, [vue.createVNode("div", {
2042
- "class": "pro-form-list-item-add",
2043
- "onClick": handleAdd
2044
- }, [(_slots$itemAdd = slots.itemAdd) === null || _slots$itemAdd === void 0 ? void 0 : _slots$itemAdd.call(slots)]), vue.createVNode("div", {
2045
- "class": "pro-form-list-item-minus",
2046
- "onClick": function onClick() {
2047
- return handleRemove(index);
2048
- }
2049
- }, [(_slots$itemMinus = slots.itemMinus) === null || _slots$itemMinus === void 0 ? void 0 : _slots$itemMinus.call(slots)])])])];
2050
- }
2051
- });
2052
- }), !readonly.value && vue.createVNode("div", {
2053
- "class": "pro-form-list-add",
2054
- "onClick": handleAdd
2055
- }, [(_slots$add = slots.add) === null || _slots$add === void 0 ? void 0 : _slots$add.call(slots)])];
2056
- }
2057
- });
2058
- };
2059
- }
2060
- });
2061
- };
2062
-
2063
- var ProFormKey = Symbol("pro-form");
2064
- var useProForm = function useProForm() {
2065
- return vue.inject(ProFormKey);
2066
- };
2067
-
2068
- var provideProForm = function provideProForm(ctx) {
2069
- vue.provide(ProFormKey, ctx);
2070
- };
2071
-
2072
- var proFormProps = function proFormProps() {
2073
- return {
2074
- /**
2075
- * 同 antd 或 element form中的model
2076
- */
2077
- model: {
2078
- type: Object
2079
- },
2080
-
2081
- /**
2082
- * 子组件是否只读样式
2083
- */
2084
- readonly: {
2085
- type: Boolean,
2086
- "default": undefined
2087
- },
2088
-
2089
- /**
2090
- * FormComponent 根据此项来确定组件是否显示
2091
- * rules 根据rules中方法生成showState对象
2092
- */
2093
- showState: {
2094
- type: Object
2095
- },
2096
- showStateRules: {
2097
- type: Object
2098
- },
2099
-
2100
- /**
2101
- * 是否只读
2102
- */
2103
- readonlyState: {
2104
- type: Object
2105
- },
2106
- readonlyStateRules: {
2107
- type: Object
2108
- },
2109
-
2110
- /**
2111
- * 是否disabled
2112
- */
2113
- disableState: {
2114
- type: Object
2115
- },
2116
- disableStateRules: {
2117
- type: Object
2118
- },
2119
-
2120
- /**
2121
- *
2122
- */
2123
- columns: {
2124
- type: Array
2125
- },
2126
- columnState: {
2127
- type: Object
2128
- },
2129
-
2130
- /**
2131
- * 展示控件集合,readonly模式下使用这些组件渲染
2132
- */
2133
- elementMap: {
2134
- type: Object
2135
- },
2136
-
2137
- /**
2138
- * 录入控件集合
2139
- */
2140
- formElementMap: {
2141
- type: Object
2142
- },
2143
-
2144
- /**
2145
- * 是否启用rules验证
2146
- */
2147
- needRules: {
2148
- type: Boolean,
2149
- "default": true
2150
- },
2151
-
2152
- /**
2153
- * provide传递
2154
- */
2155
- provideExtra: {
2156
- type: Object
2157
- }
2158
- };
2159
- };
2160
-
2161
- var createForm = function createForm(Form, Grid, formMethods) {
2162
- return vue.defineComponent({
2163
- inheritAttrs: false,
2164
- props: _objectSpread2(_objectSpread2(_objectSpread2({}, Form.props), proFormProps()), lodash.omit(Grid.props, "items")),
2165
- setup: function setup(props, _ref) {
2166
- var slots = _ref.slots,
2167
- emit = _ref.emit,
2168
- expose = _ref.expose,
2169
- attrs = _ref.attrs;
2170
- var formState = props.model || vue.reactive({}); //组件状态相关
2171
-
2172
- var showState = props.showState || vue.reactive({});
2173
- var readonlyState = props.readonlyState || vue.reactive({});
2174
- var disableState = props.disableState || vue.reactive({}); //formState改变情况下,更新 showState,readonlyState,disableState状态
2175
-
2176
- hooks.useEffect(function () {
2177
- if (props.showStateRules) {
2178
- lodash.forEach(props.showStateRules, function (fn, key) {
2179
- showState[key] = fn(formState);
2180
- });
2181
- }
2182
-
2183
- if (props.readonlyStateRules) {
2184
- lodash.forEach(props.readonlyStateRules, function (fn, key) {
2185
- readonlyState[key] = fn(formState);
2186
- });
2187
- }
2188
-
2189
- if (props.disableStateRules) {
2190
- lodash.forEach(props.disableStateRules, function (fn, key) {
2191
- disableState[key] = fn(formState);
2192
- });
2193
- }
2194
- }, formState); //readonly
2195
-
2196
- var readonly = vue.computed(function () {
2197
- return props.readonly;
2198
- }); //columns合并
2199
-
2200
- var columns = vue.computed(function () {
2201
- return mergeStateToList(props.columns, props.columnState, function (item) {
2202
- return getColumnFormItemName(item);
2203
- });
2204
- });
2205
-
2206
- var handleFinish = function handleFinish(values) {
2207
- //删除不显示的值再触发事件
2208
- var showValues = getValidValues(values, showState, props.showStateRules);
2209
- emit("finish", showValues, values);
2210
- };
2211
-
2212
- var formRef = vue.ref();
2213
- expose(createExpose(formMethods, formRef));
2214
- provideProForm(_objectSpread2({
2215
- formState: formState,
2216
- showState: showState,
2217
- readonlyState: readonlyState,
2218
- disableState: disableState,
2219
- //
2220
- elementMap: props.elementMap,
2221
- formElementMap: props.formElementMap,
2222
- //
2223
- readonly: readonly,
2224
- //
2225
- columns: columns,
2226
- //
2227
- formRef: formRef
2228
- }, props.provideExtra)); //为了不warning ...
2229
-
2230
- provideProFormList({});
2231
- var invalidKeys = lodash.keys(proFormProps());
2232
- var gridKeys = lodash.keys(lodash.omit(Grid.props, "items"));
2233
- return function () {
2234
- var _slots$start, _slots$default;
2235
-
2236
- return vue.createVNode(Form, vue.mergeProps({
2237
- "ref": formRef
2238
- }, lodash.omit(attrs, "onFinish"), lodash.omit.apply(void 0, [props].concat(_toConsumableArray(invalidKeys), _toConsumableArray(gridKeys), ["onFinish"])), {
2239
- "model": formState,
2240
- "onFinish": handleFinish
2241
- }), _objectSpread2({
2242
- "default": function _default() {
2243
- return [(_slots$start = slots.start) === null || _slots$start === void 0 ? void 0 : _slots$start.call(slots), props.formElementMap && lodash.size(columns.value) > 0 && vue.createVNode(vue.Fragment, null, [props.row ? vue.createVNode(Grid, {
2244
- "row": props.row,
2245
- "col": props.col,
2246
- "items": lodash.map(columns.value, function (item) {
2247
- return {
2248
- rowKey: getColumnFormItemName(item),
2249
- vNode: getFormItemEl(props.formElementMap, item, props.needRules),
2250
- col: lodash.get(item, ["extra", "col"])
2251
- };
2252
- })
2253
- }, null) : lodash.map(columns.value, function (item) {
2254
- return getFormItemEl(props.formElementMap, item, props.needRules);
2255
- })]), (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];
2256
- }
2257
- }, lodash.omit(slots, "default")));
2258
- };
2259
- }
2260
- });
2261
- };
2262
-
2263
- exports.SearchMode = void 0;
2264
-
2265
- (function (SearchMode) {
2266
- SearchMode["AUTO"] = "AUTO";
2267
- SearchMode["MANUAL"] = "MANUAL";
2268
- })(exports.SearchMode || (exports.SearchMode = {}));
2269
-
2270
- var proSearchFormProps = function proSearchFormProps() {
2271
- return {
2272
- /**
2273
- * 需要监听的对象
2274
- */
2275
- model: {
2276
- type: Object
2277
- },
2278
-
2279
- /**
2280
- * 初始化触发 onFinish
2281
- */
2282
- initEmit: {
2283
- type: Boolean,
2284
- "default": true
2285
- },
2286
-
2287
- /**
2288
- * 模式 自动触发或者手动触发 onFinish
2289
- */
2290
- searchMode: {
2291
- type: String,
2292
- "default": exports.SearchMode.AUTO
2293
- },
2294
-
2295
- /**
2296
- * 配置 同ProForm中的columns
2297
- * 可以根据column中valueType计算出默认的debounceKeys
2298
- */
2299
- columns: {
2300
- type: Array
2301
- },
2302
-
2303
- /**
2304
- * 需要debounce处理的字段
2305
- */
2306
- debounceKeys: {
2307
- type: Array
2308
- },
2309
- //默认 valueType 为 text 的控件会debounce处理
2310
- debounceTypes: {
2311
- type: Array,
2312
- "default": ["text"]
2313
- },
2314
- debounceTime: {
2315
- type: Number,
2316
- "default": 800
2317
- }
2318
- };
2319
- };
2320
-
2321
- /**
2322
- * 该组件只是个模式,最终返回null,不做任何渲染,应配合着ProForm的包装类一起使用
2323
- * 针对传入的model(监听对象)做相应的finish(回调)处理
2324
- */
2325
- var createSearchForm = function createSearchForm(Form, Props, formMethods) {
2326
- return vue.defineComponent({
2327
- props: _objectSpread2(_objectSpread2(_objectSpread2({}, Form.props), Props), proSearchFormProps()),
2328
- setup: function setup(props, _ref) {
2329
- var slots = _ref.slots,
2330
- expose = _ref.expose;
2331
- var formState = props.model || vue.reactive({});
2332
- var valueTypeSet = new Set(props.debounceTypes); //根据column valueType 算出默认需要debounce处理的属性集合
2333
-
2334
- var defaultDebounceKeys = lodash.map(lodash.filter(props.columns, function (column) {
2335
- var valueType = getColumnValueType(column); //默认input组件的触发事件需要debounce处理
2336
-
2337
- return valueTypeSet.has(valueType);
2338
- }), function (column) {
2339
- return getColumnFormItemName(column);
2340
- });
2341
- var formRef = vue.ref();
2342
- expose(createExpose(formMethods, formRef));
2343
-
2344
- var handleFinish = function handleFinish() {
2345
- var _formRef$value;
2346
-
2347
- (_formRef$value = formRef.value) === null || _formRef$value === void 0 ? void 0 : _formRef$value.submit();
2348
- };
2349
-
2350
- var debounceFinish = lodash.debounce(function () {
2351
- handleFinish();
2352
- }, props.debounceTime); //初始化
2353
-
2354
- hooks.useEffect(function () {
2355
- if (props.initEmit) {
2356
- handleFinish();
2357
- }
2358
- }, []);
2359
-
2360
- var isDebounceDataChange = function isDebounceDataChange(state, prevState, debounceKeys) {
2361
- return lodash.some(debounceKeys, function (key) {
2362
- return lodash.get(state, key) !== lodash.get(prevState, key);
2363
- });
2364
- }; //监听
2365
-
2366
-
2367
- hooks.useWatch(function (state, prevState) {
2368
- if (props.searchMode !== exports.SearchMode.AUTO) {
2369
- return;
2370
- } //如果改变的值中包括debounceKeys中注册的 延时触发
2371
-
2372
-
2373
- var debounceKeys = lodash.size(props.debounceKeys) > 0 ? props.debounceKeys : defaultDebounceKeys;
2374
-
2375
- if (lodash.size(debounceKeys) > 0 && isDebounceDataChange(state, prevState, debounceKeys)) {
2376
- debounceFinish();
2377
- return;
2378
- }
2379
-
2380
- handleFinish();
2381
- }, function () {
2382
- return lodash.clone(formState);
2383
- });
2384
- var invalidKeys = lodash.keys(lodash.omit(proSearchFormProps(), "columns"));
2385
- return function () {
2386
- return vue.createVNode(Form, vue.mergeProps({
2387
- "ref": formRef
2388
- }, lodash.omit(props, invalidKeys), {
2389
- "model": formState
2390
- }), slots);
2391
- };
2392
- }
2393
- });
2394
- };
2395
-
2396
- var proFormItemProps = function proFormItemProps() {
2397
- return {
2398
- readonly: {
2399
- type: Boolean,
2400
- "default": undefined
2401
- },
2402
- fieldProps: {
2403
- type: Object
2404
- },
2405
- showProps: {
2406
- type: Object
2407
- },
2408
- slots: {
2409
- type: Object
2410
- }
2411
- };
2412
- };
2413
-
2414
- var createFormItemCompFn = function createFormItemCompFn(FormItem, convertInputCompProps) {
2415
- return function (_ref) {
2416
- var InputComp = _ref.InputComp,
2417
- valueType = _ref.valueType,
2418
- name = _ref.name;
2419
- return vue.defineComponent({
2420
- name: name,
2421
- props: _objectSpread2(_objectSpread2({}, FormItem.props), proFormItemProps()),
2422
- setup: function setup(props, _ref2) {
2423
- var slots = _ref2.slots;
2424
-
2425
- var _useProForm = useProForm(),
2426
- formState = _useProForm.formState,
2427
- showState = _useProForm.showState,
2428
- readonlyState = _useProForm.readonlyState,
2429
- disableState = _useProForm.disableState,
2430
- formReadonly = _useProForm.readonly,
2431
- elementMap = _useProForm.elementMap;
2432
-
2433
- var formListCtx = useProFormList(); //优先级 props.readonly > readonlyState > formContext.readonly
2434
-
2435
- var readonly = vue.computed(function () {
2436
- if (lodash.isBoolean(props.readonly)) {
2437
- return props.readonly;
2438
- } else if (lodash.isBoolean(readonlyState[props.name])) {
2439
- return readonlyState[props.name];
2440
- }
2441
-
2442
- return formReadonly.value;
2443
- });
2444
- var nameList = convertPathToList(props.name);
2445
- var path = formListCtx !== null && formListCtx !== void 0 && formListCtx.pathList ? [].concat(_toConsumableArray(formListCtx.pathList), _toConsumableArray(nameList)) : nameList;
2446
-
2447
- var setValue = function setValue(v) {
2448
- lodash.set(formState, path, v);
2449
- };
2450
-
2451
- var invalidKeys = lodash.keys(proFormItemProps());
2452
- return function () {
2453
- var show = lodash.get(showState, path);
2454
-
2455
- if (lodash.isBoolean(show) && !show) {
2456
- return null;
2457
- }
2458
-
2459
- var value = lodash.get(formState, path); //valueType对应的展示组件
2460
-
2461
- var ShowComp = lodash.get(elementMap, valueType);
2462
- return vue.createVNode(FormItem, vue.mergeProps(lodash.omit.apply(void 0, [props].concat(_toConsumableArray(invalidKeys), ["name", "slots"])), {
2463
- "name": path
2464
- }), _objectSpread2({
2465
- "default": function _default() {
2466
- return [readonly.value ? vue.createVNode(vue.Fragment, null, [ShowComp ? vue.createVNode(ShowComp, vue.mergeProps({
2467
- "value": value
2468
- }, props.fieldProps, {
2469
- "showProps": props.showProps
2470
- }), slots) : vue.createVNode("span", null, [value])]) : vue.createVNode(InputComp, vue.mergeProps(convertInputCompProps(value, setValue, lodash.get(disableState, path)), props.fieldProps), slots)];
2471
- }
2472
- }, props.slots));
2473
- };
2474
- }
2475
- });
2476
- };
2477
- };
2478
-
2479
- var ProTableKey = Symbol("pro-table");
2480
- var useProTable = function useProTable() {
2481
- return vue.inject(ProTableKey);
2482
- };
2483
-
2484
- var provideProTable = function provideProTable(ctx) {
2485
- vue.provide(ProTableKey, ctx);
2486
- };
2487
-
2488
- var proTableProps = function proTableProps() {
2489
- return {
2490
- //操作栏
2491
- operate: {
2492
- type: Object
2493
- },
2494
- //默认空字符串
2495
- columnEmptyText: {
2496
- type: String
2497
- },
2498
-
2499
- /**
2500
- * 公共column,会merge到columns item中
2501
- */
2502
- column: {
2503
- type: Object
2504
- },
2505
- //
2506
- columns: {
2507
- type: Array
2508
- },
2509
- columnState: {
2510
- type: Object
2511
- },
2512
-
2513
- /**
2514
- * 展示控件集合,readonly模式下使用这些组件渲染
2515
- */
2516
- elementMap: {
2517
- type: Object
2518
- },
2519
-
2520
- /**
2521
- * 序号
2522
- */
2523
- serialNumber: {
2524
- type: Boolean
2525
- },
2526
-
2527
- /**
2528
- * 分页
2529
- */
2530
- paginationState: {
2531
- type: Object
2532
- },
2533
-
2534
- /**
2535
- * provide传递
2536
- */
2537
- provideExtra: {
2538
- type: Object
2539
- }
2540
- };
2541
- };
2542
-
2543
- var createTable = function createTable(Table, Props, tableMethods) {
2544
- return vue.defineComponent({
2545
- props: _objectSpread2(_objectSpread2(_objectSpread2({}, Table.props), Props), proTableProps()),
2546
- setup: function setup(props, _ref) {
2547
- var slots = _ref.slots,
2548
- expose = _ref.expose;
2549
-
2550
- var createNumberColumn = function createNumberColumn() {
2551
- return _objectSpread2(_objectSpread2({
2552
- title: "序号",
2553
- dataIndex: "serialNumber",
2554
- width: 80
2555
- }, props.column), {}, {
2556
- customRender: function customRender(_ref2) {
2557
- var _props$paginationStat, _props$paginationStat2;
2558
-
2559
- var index = _ref2.index;
2560
-
2561
- if ((_props$paginationStat = props.paginationState) !== null && _props$paginationStat !== void 0 && _props$paginationStat.page && (_props$paginationStat2 = props.paginationState) !== null && _props$paginationStat2 !== void 0 && _props$paginationStat2.pageSize) {
2562
- return props.paginationState.pageSize * (props.paginationState.page - 1) + index + 1;
2563
- }
2564
-
2565
- return index + 1;
2566
- }
2567
- });
2568
- };
2569
-
2570
- var createOperateColumn = function createOperateColumn() {
2571
- var operate = props.operate; //将itemState补充的信息拼到item中
2572
-
2573
- var items = lodash.map(operate.items, function (i) {
2574
- return _objectSpread2(_objectSpread2({}, i), lodash.get(operate.itemState, i.value));
2575
- }); //排序
2576
-
2577
- var sortedItems = lodash.sortBy(items, function (item) {
2578
- return item.sort;
2579
- });
2580
- return _objectSpread2(_objectSpread2(_objectSpread2({}, props.column), {}, {
2581
- title: "操作",
2582
- dataIndex: "operate",
2583
- fixed: "right"
2584
- }, operate.column), {}, {
2585
- customRender: function customRender(_ref3) {
2586
- var record = _ref3.record;
2587
- var showItems = lodash.filter(sortedItems, function (item) {
2588
- if (item.show && lodash.isFunction(item.show)) {
2589
- return item.show(record);
2590
- }
2591
-
2592
- if (item.show === false) {
2593
- return false;
2594
- }
2595
-
2596
- return true;
2597
- });
2598
- return vue.createVNode("div", {
2599
- "class": "pro-table-operate"
2600
- }, [lodash.map(showItems, function (item) {
2601
- //自定义
2602
- if (lodash.isFunction(item.element)) {
2603
- return item.element(record, item);
2604
- }
2605
-
2606
- return vue.createVNode("div", {
2607
- "class": "pro-table-operate-item",
2608
- "key": item.value,
2609
- "onClick": function onClick() {
2610
- var _item$onClick;
2611
-
2612
- (_item$onClick = item.onClick) === null || _item$onClick === void 0 ? void 0 : _item$onClick.call(item, record);
2613
- }
2614
- }, [item.label]);
2615
- })]);
2616
- }
2617
- });
2618
- };
2619
-
2620
- var columns = vue.computed(function () {
2621
- var mergeColumns = mergeStateToList(props.columns, props.columnState, function (item) {
2622
- return item.dataIndex;
2623
- }); //根据valueType选择对应的展示组件
2624
-
2625
- var columns = lodash.map(mergeColumns, function (item) {
2626
- //merge公共item
2627
- var nextItem = _objectSpread2(_objectSpread2({}, props.column), item);
2628
-
2629
- if (!item.customRender) {
2630
- nextItem.customRender = function (_ref4) {
2631
- var text = _ref4.text;
2632
- var vn = getItemEl(props.elementMap, _objectSpread2(_objectSpread2({}, item), {}, {
2633
- showProps: _objectSpread2(_objectSpread2({}, item.showProps), {}, {
2634
- content: props.columnEmptyText
2635
- })
2636
- }), text); //如果找不到注册的组件,使用当前值 及 columnEmptyText
2637
-
2638
- return vn || text || props.columnEmptyText;
2639
- };
2640
- }
2641
-
2642
- return nextItem;
2643
- }); //处理序号
2644
-
2645
- if (props.serialNumber) {
2646
- columns.unshift(createNumberColumn());
2647
- } //处理operate
2648
-
2649
-
2650
- if (props.operate && props.operate.items && lodash.some(props.operate.items, function (item) {
2651
- return item.show;
2652
- })) {
2653
- columns.push(createOperateColumn());
2654
- }
2655
-
2656
- return columns;
2657
- });
2658
- var tableRef = vue.ref();
2659
- provideProTable(_objectSpread2({
2660
- columns: columns,
2661
- tableRef: tableRef
2662
- }, props.provideExtra));
2663
- expose(createExpose(tableMethods || [], tableRef));
2664
- var invalidKeys = lodash.keys(proTableProps());
2665
- return function () {
2666
- return vue.createVNode(Table, vue.mergeProps({
2667
- "ref": tableRef
2668
- }, lodash.omit(props, invalidKeys), {
2669
- "columns": columns.value
2670
- }), slots);
2671
- };
2672
- }
2673
- });
2674
- };
2675
-
2676
- exports.CurdMethods = CurdMethods;
2677
- exports.ProCurd = ProCurd;
2678
- exports.ProModalCurd = ProModalCurd;
2679
- exports.ProModule = ProModule;
2680
- exports.ProPageCurd = ProPageCurd;
2681
- exports.RequestAction = RequestAction;
2682
- exports.Wrapper = Wrapper;
2683
- exports.convertPathToList = convertPathToList;
2684
- exports.createCurdDesc = createCurdDesc;
2685
- exports.createCurdForm = createCurdForm;
2686
- exports.createCurdList = createCurdList;
2687
- exports.createExpose = createExpose;
2688
- exports.createForm = createForm;
2689
- exports.createFormItemCompFn = createFormItemCompFn;
2690
- exports.createFormList = createFormList;
2691
- exports.createGrid = createGrid;
2692
- exports.createSearchForm = createSearchForm;
2693
- exports.createTable = createTable;
2694
- exports.defaultPage = defaultPage;
2695
- exports.getColumnFormItemName = getColumnFormItemName;
2696
- exports.getColumnValueType = getColumnValueType;
2697
- exports.getFirstPropName = getFirstPropName;
2698
- exports.getFormItemEl = getFormItemEl;
2699
- exports.getItemEl = getItemEl;
2700
- exports.getValidValues = getValidValues;
2701
- exports.mergeStateToList = mergeStateToList;
2702
- exports.provideProCurd = provideProCurd;
2703
- exports.provideProFormList = provideProFormList;
2704
- exports.provideProModule = provideProModule;
2705
- exports.renderElement = renderElement;
2706
- exports.renderElements = renderElements;
2707
- exports.useComposeRequestActor = useComposeRequestActor;
2708
- exports.useDoneRequestActor = useDoneRequestActor;
2709
- exports.useFailedRequestActor = useFailedRequestActor;
2710
- exports.useModuleEvent = useModuleEvent;
2711
- exports.useProCurd = useProCurd;
2712
- exports.useProForm = useProForm;
2713
- exports.useProFormList = useProFormList;
2714
- exports.useProModule = useProModule;
2715
- exports.useProTable = useProTable;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("vue"),t=require("lodash"),R=require("rxjs"),k=require("@vue-start/hooks"),j=require("@vue-start/request"),le=require("vue-router");function Fe(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!n.isVNode(e)}const Re=()=>({row:{type:Object,default:void 0},col:{type:Object},items:{type:Array}}),we=(e,o)=>n.defineComponent({props:{...Re()},setup:s=>()=>{let r;return n.createVNode(e,s.row,Fe(r=t.map(s.items,d=>n.createVNode(o,n.mergeProps({key:d.rowKey},s.col,d.col),{default:()=>[d.vNode]})))?r:{default:()=>[r]})}}),Ee=e=>(o,s)=>{const{requestSubject$:r}=j.useRequestProvide(),d=new Set(t.map(o,a=>t.isString(a)?a:a.name));k.useEffect(()=>{const a=r.pipe(R.filter(e),R.tap(l=>{d.has(l.name)&&s(l)})).subscribe();return()=>{a.unsubscribe()}},[])},je=Ee(j.isDoneRequestActor),ke=Ee(j.isFailedRequestActor),Pe=(e,o,s)=>{const{requestSubject$:r,dispatchRequest:d}=j.useRequestProvide(),a=new Set(t.map(e,y=>t.isString(y)?y:y.name)),l={};k.useEffect(()=>{const y=R.merge(r.pipe(R.filter(j.isDoneRequestActor),R.tap(E=>{var P,f;a.has(E.name)&&((P=o.onSuccess)==null||P.call(o,E),(f=o.onFinish)==null||f.call(o,E),l[E.name]=void 0)})),r.pipe(R.filter(j.isFailedRequestActor),R.tap(E=>{var P,f;a.has(E.name)&&((P=o.onFailed)==null||P.call(o,E),(f=o.onFinish)==null||f.call(o,E),l[E.name]=void 0)}))).subscribe();return()=>{y.unsubscribe(),s&&t.forEach(l,E=>{E&&d({...E,stage:"CANCEL"})})}},[])},re=e=>e.formValueType||e.valueType||"text",x=e=>{var o;return((o=e.formItemProps)==null?void 0:o.name)||e.dataIndex},_=(e,o,s=!0)=>{var y;const r=re(o),d=t.get(e,r);if(!d)return null;const a=x(o),l=s?o.formItemProps:t.omit(o.formItemProps,"rules");return n.h(d,{key:a,name:a,label:o.title,...l,fieldProps:t.omit(o.formFieldProps,"slots"),showProps:o.showProps},(y=o.formFieldProps)==null?void 0:y.slots)},ne=(e,o,s)=>{var a;const r=o.valueType||"text",d=t.get(e,r);return d?n.h(d,{...t.omit(o.formFieldProps,"slots"),showProps:o.showProps,value:s},(a=o.formFieldProps)==null?void 0:a.slots):null},H=(e,o)=>t.map(o,s=>K(e,s)),Se=(e,o)=>{var d;const s=o.elementProps,r={...o.elementProps};return t.forEach((d=o.highConfig$)==null?void 0:d.registerPropsTrans,a=>{const l=t.get(s,a.name);if(!(!l||n.isVNode(l))){if(t.isArray(l)){if(t.some(l,y=>n.isVNode(y)))return;t.set(r,a.name,H(e,l));return}!l.elementType||(a.isFun?t.set(r,a.name,(...y)=>{const E=a.needParams?{...l.elementProps,params$:y}:l.elementProps;return K(e,{...l,elementProps:E})}):t.set(r,a.name,K(e,l)))}}),r},he=(e,o)=>{const s=t.size(o.children)>0?H(e,o.children):void 0,r=o.childrenSlotName||"default",d=t.omit(o.slots,s?r:"");return t.forEach(t.keys(d),a=>{const l=d[a];l&&!t.isFunction(l)&&l.elementType&&(d[a]=(...y)=>{const E=l.needParams?{...l.elementProps,params$:y}:l.elementProps;return K(e,{...l,elementProps:E})})}),{[r]:s?()=>s:void 0,...d}},K=(e,o)=>{const s=t.get(e,o.elementType)||o.elementType;if(o.highConfig$)return n.h(be,{key:o.elementId,elementMap:e,elementConfig:o});const r=he(e,o),d=Se(e,o);return n.h(s,{key:o.elementId,...d},r)},ve=e=>t.isArray(e)?t.head(e):t.isString(e)&&e.indexOf(".")>0?e.substring(0,e.indexOf(".")):e,be=n.defineComponent({props:{elementMap:{type:Object},elementConfig:{type:Object}},setup:e=>{const{state:o,sendEvent:s}=$(),{elementMap:r,elementConfig:d}=e,a=d.highConfig$,l=Se(r,d),y=t.reduce(a.registerEventList,(p,c)=>({...p,[c.name]:(...u)=>{s({type:c.sendEventName||d.elementId,payload:u})}}),{}),E=n.computed(()=>{if(!a.registerStateList||t.size(a.registerStateList)<=0)return;const p={...l},c=t.map(a.registerStateList,u=>{const i=u.mapName||u.name,m=t.get(o,u.name);return t.set(p,i,m),ve(i)});return t.pick(p,c)}),P=t.get(r,d.elementType)||d.elementType,f=he(r,d);return()=>t.get(E.value,"show$")===!1?null:n.h(P,{key:d.elementId,...l,...t.omit(E.value,"show$"),...y},f)}}),Ce=Symbol("pro-module"),$=()=>n.inject(Ce),Te=e=>{n.provide(Ce,e)},U={Success:"request-success$",Fail:"request-fail$"},Ve=()=>({state:{type:Object},elementMap:{type:Object},elementConfigs:{type:Array},requests:{type:Array}}),W=n.defineComponent({props:{...Ve()},setup:(e,{slots:o,expose:s})=>{const r=c=>t.isArray(c)?H(e.elementMap,c):K(e.elementMap,c),d=new R.Subject,a=c=>{d.next(c)},l=e.state||n.reactive({}),y=c=>{const u=l[c.type],i=t.isFunction(c.payload)?c.payload(u):c.payload;if(t.isObject(u)){k.setReactiveValue(l[c.type],i);return}l[c.type]=i},{dispatchRequest:E}=j.useRequestProvide(),P=t.reduce(e.requests,(c,u)=>{var i;return{...c,[(i=u.actor)==null?void 0:i.name]:u}},{}),f=t.reduce(e.requests,(c,u)=>({...c,[u.action]:u}),{}),p=(c,...u)=>{const i=t.get(P,c)||t.get(f,c);if(!i)return;let m;i.convertParams?m=i.convertParams(...u):m=t.get(u,0),i.loadingName&&y({type:i.loadingName,payload:!0}),E(i.actor,m)};return Pe(t.keys(P),{onSuccess:c=>{var i,m;const u=t.get(P,c.name);if(u!=null&&u.stateName){const h=u.convertData?u.convertData(c):(i=c.res)==null?void 0:i.data;y({type:u.stateName,payload:h})}a({type:U.Success,payload:{actor:c,requestOpts:u}}),(m=u.onSuccess)==null||m.call(u,c)},onFailed:c=>{var i;const u=t.get(P,c.name);a({type:U.Fail,payload:{actor:c,requestOpts:u}}),(i=u.onFailed)==null||i.call(u,c)},onFinish:c=>{const u=t.get(P,[c.name,"loadingName"]);u&&y({type:u,payload:!1})}},!0),Te({elementMap:e.elementMap,subject$:d,sendEvent:a,state:l,dispatch:y,requests:e.requests,sendRequest:p}),s({sendEvent:a,sendRequest:p}),()=>{var c;return n.createVNode(n.Fragment,null,[t.size(e.elementConfigs)>0&&r(e.elementConfigs),(c=o.default)==null?void 0:c.call(o)])}}}),J=e=>{const{subject$:o}=$();k.useEffect(()=>{const s=o.subscribe({next:r=>{e(r)}});return()=>s.unsubscribe()},[])},qe=()=>({elementMap:{type:Object},formElementMap:{type:Object},columns:{type:Array},columnState:{type:Object}}),Q=qe(),xe=()=>({config:{type:Object,default:{}}}),oe=Symbol("pro-config"),Y=()=>n.inject(oe)||{},Ke=n.defineComponent({props:{...xe()},setup:(e,{slots:o})=>(n.provide(oe,e.config),()=>{var s;return(s=o.default)==null?void 0:s.call(o)})}),Ue=(e={})=>o=>{o.provide(oe,e)},De=Symbol("pro-curd"),z=()=>n.inject(De),Ne=e=>n.provide(De,e);var C=(e=>(e.LIST="LIST",e.DETAIL="DETAIL",e.ADD="ADD",e.EDIT="EDIT",e.DELETE="DELETE",e))(C||{}),T=(e=>(e.EMIT="EMIT",e.EXECUTE="EXECUTE",e.PAGE="PAGE",e.SUCCESS="SUCCESS",e.FAIL="FAIL",e))(T||{}),F=(e=>(e.ADD="ADD",e.EDIT="EDIT",e.DETAIL="DETAIL",e))(F||{}),B=(e=>(e.NORMAL="NORMAL",e.CONTINUE="CONTINUE",e))(B||{});const Ae=(e,o,s)=>{if(o){const r=t.filter(t.keys(o),d=>!o[d]);return t.omit(e,r)}if(s){const r=t.filter(t.keys(s),d=>!s[d](e));return t.omit(e,r)}return e},ae=e=>{if(!!e)return t.isArray(e)?e:e&&t.isString(e)&&e.indexOf(".")>0?t.split(e,"."):[e]},Z=(e,o,s)=>!o||!s?e:t.map(e,r=>{const d=t.isFunction(s)?s(r):s,a=t.get(o,d);return!a||t.isEmpty(a)||t.isFunction(a)||!t.isObject(a)?r:t.mergeWith(r,a,(l,y)=>{if(t.isArray(l)||t.isArray(y))return y})}),V=(e,o)=>t.reduce(e,(s,r)=>({...s,[r]:(...d)=>{var a,l;return(l=(a=o.value)==null?void 0:a[r])==null?void 0:l.call(a,...d)}}),{}),Ie={page:1,pageSize:10},Be=()=>({rowKey:{type:String,default:"id"},operates:{type:Array},listProps:{type:Object},formProps:{type:Object},descProps:{type:Object},modalProps:{type:Object}}),ce=["sendCurdEvent","refreshList","sendEvent","sendRequest"],me=n.defineComponent({props:{...Q,...Be()},setup:(e,{slots:o,expose:s})=>{const{elementMap:r,state:d,sendEvent:a,sendRequest:l}=$(),y=n.computed(()=>Z(e.columns,e.columnState,b=>x(b))),E=(b,A=!0)=>_(e.formElementMap,b,A),P=(b,A)=>ne(r,b,A),f=(b,A)=>{const q=t.filter(y.value,L=>{const O=t.get(L,["extra",b])||t.get(L,b);return A?O!==!1:O});return t.sortBy(q,L=>t.get(L,["extra",`${b}Sort`])||t.get(L,`${b}Sort`))},p=n.computed(()=>f("form",!0)),c=n.computed(()=>f("detail",!0)),u=n.computed(()=>f("table",!0)),i=n.computed(()=>f("search"));let m;const h=b=>{l(C.LIST,{...m,...b})},g=b=>{a({type:b.action,payload:t.omit(b,"action","source"),source:b.source})};J(({type:b,payload:A,source:q})=>{if(q)return;let L=b,O=A==null?void 0:A.type;L===U.Success&&(L=t.get(A,["requestOpts","action"]),O=T.SUCCESS);const{values:w,record:X}=A;switch(L){case C.LIST:O===T.EMIT&&(m=w,h());return;case C.ADD:O===T.EXECUTE&&l(C.ADD,w,d.detailData);return;case C.EDIT:O===T.EXECUTE&&l(C.EDIT,w,d.detailData);return;case C.DELETE:O===T.EMIT?l(C.DELETE,X,e.rowKey):O===T.SUCCESS&&h();return}L&&b===T.EXECUTE&&l(L,w)});const S=t.reduce(e.operates,(b,A)=>({...b,[A.action]:A}),{}),v=b=>t.get(S,b),I=n.computed(()=>e.listProps),M=n.computed(()=>e.formProps),D=n.computed(()=>e.descProps),N=n.computed(()=>e.modalProps);return Ne({columns:y,getSignColumns:f,getFormItemVNode:E,getItemVNode:P,elementMap:r,formElementMap:e.formElementMap,rowKey:e.rowKey,curdState:d,formColumns:p,descColumns:c,tableColumns:u,searchColumns:i,sendCurdEvent:g,operates:e.operates,getOperate:v,refreshList:h,listProps:I,formProps:M,descProps:D,modalProps:N}),s({sendCurdEvent:g,refreshList:h}),()=>{var b;return(b=o.default)==null?void 0:b.call(o)}}}),G=n.defineComponent({props:{...t.omit(W.props,"state","requests"),...me.props,curdState:{type:Object}},setup:(e,{slots:o,expose:s})=>{const{elementMap:r,formElementMap:d}=Y(),a=n.ref(),l=n.ref(),y=e.curdState||n.reactive({detailData:{}}),E={[C.LIST]:{convertParams:c=>c,convertData:c=>{var u;return(u=c.res)==null?void 0:u.data},loadingName:"listLoading",stateName:"listData"},[C.DETAIL]:{convertParams:(c,u)=>t.pick(c,u),convertData:c=>{var u;return(u=c.res)==null?void 0:u.data},loadingName:"detailLoading",stateName:"detailData",label:"\u8BE6\u60C5"},[C.ADD]:{convertParams:(c,u)=>({body:{...u,...c}}),loadingName:"operateLoading",label:"\u6DFB\u52A0"},[C.EDIT]:{convertParams:(c,u)=>({body:{...u,...c}}),loadingName:"operateLoading",label:"\u7F16\u8F91"},[C.DELETE]:{convertParams:(c,u)=>t.pick(c,u),label:"\u5220\u9664"}},P=t.map(e.operates,c=>({...t.get(E,c.action),...c})),f=t.filter(P,c=>c.actor),p=t.keys(t.omit(W.props,"state","requests"));return s({sendCurdEvent:c=>{var u;(u=l.value)==null||u.sendCurdEvent(c)},refreshList:c=>{var u;(u=l.value)==null||u.refreshList(c)},sendEvent:c=>{var u;(u=a.value)==null||u.sendEvent(c)},sendRequest:(c,...u)=>{var i;(i=a.value)==null||i.sendRequest(c,...u)}}),()=>n.createVNode(W,n.mergeProps({ref:a},t.pick(e,p),{elementMap:e.elementMap||r,state:y,requests:f}),{default:()=>[n.createVNode(me,n.mergeProps({ref:l},t.omit(e,...p,"curdState","operates"),{formElementMap:e.formElementMap||d,operates:P}),o)]})}}),$e=()=>({defaultAddRecord:{type:Object}}),ee=n.defineComponent({props:{...$e()},setup:e=>{var u;const{dispatch:o,sendRequest:s}=$(),{rowKey:r,curdState:d,listProps:a,getOperate:l,refreshList:y}=z(),E=(u=a==null?void 0:a.value)==null?void 0:u.pageState,P=i=>{const m=l(C.DETAIL);m!=null&&m.actor?s(C.DETAIL,i,r):o({type:"detailData",payload:t.cloneDeep(i)})},f=(i,{record:m})=>{i===T.EMIT&&(o({type:"mode",payload:F.DETAIL}),P(m))},p=i=>{i===T.EMIT?(o({type:"mode",payload:F.ADD}),o({type:"detailData",payload:e.defaultAddRecord||{}})):i===T.SUCCESS&&(E&&(E.page=1),y(),d.addAction===B.CONTINUE?o({type:"detailData",payload:e.defaultAddRecord||{}}):o({type:"mode",payload:void 0}))},c=(i,{record:m})=>{i===T.EMIT?(o({type:"mode",payload:F.EDIT}),P(m)):i===T.SUCCESS&&(o({type:"mode",payload:void 0}),y())};return J(({type:i,payload:m,source:h})=>{if(h)return;let g=i,S=m==null?void 0:m.type;const v=m==null?void 0:m.record;switch(g===U.Success&&(g=t.get(m,["requestOpts","action"]),S=T.SUCCESS),g){case C.DETAIL:f(S,{record:v});break;case C.ADD:p(S);break;case C.EDIT:c(S,{record:v});break}}),()=>null}}),ze=n.defineComponent({props:{...G.props,...ee.props},setup:(e,{slots:o,expose:s})=>{const r=n.ref();s(V(ce,r));const d=t.keys(ee.props);return()=>n.createVNode(G,n.mergeProps({ref:r},t.omit(e,d)),{default:()=>{var a;return[n.createVNode(ee,t.pick(e,d),null),(a=o.default)==null?void 0:a.call(o)]}})}}),Ge=()=>({defaultAddRecord:{type:Object},routeBack:{type:Function}}),te=n.defineComponent({props:{...Ge()},setup:e=>{const o=le.useRouter(),s=le.useRoute(),{dispatch:r,sendRequest:d}=$(),{rowKey:a,curdState:l}=z(),y=p=>{p===T.PAGE&&(r({type:"mode",payload:void 0}),r({type:"detailData",payload:{}}),r({type:"detailLoading",payload:!1}),r({type:"addAction",payload:void 0}))},E=(p,{record:c})=>{p===T.EMIT?o.push({path:`${s.path}/detail`,query:t.pick(c,a)}):p===T.PAGE&&(r({type:"mode",payload:F.DETAIL}),d(C.DETAIL,s.query,a))},P=p=>{p===T.EMIT?o.push({path:`${s.path}/add`}):p===T.PAGE?(r({type:"mode",payload:F.ADD}),r({type:"detailData",payload:e.defaultAddRecord||{}})):p===T.SUCCESS&&(l.addAction===B.CONTINUE?r({type:"detailData",payload:e.defaultAddRecord||{}}):e.routeBack?e.routeBack(C.ADD):o.go(-1))},f=(p,{record:c})=>{p===T.EMIT?o.push({path:`${s.path}/edit`,query:t.pick(c,a)}):p===T.PAGE?(r({type:"mode",payload:F.EDIT}),d(C.DETAIL,s.query,a)):p===T.SUCCESS&&(e.routeBack?e.routeBack(C.EDIT):o.go(-1))};return J(({type:p,payload:c,source:u})=>{if(u)return;let i=p,m=c==null?void 0:c.type;const h=c==null?void 0:c.record;switch(i===U.Success&&(i=t.get(c,["requestOpts","action"]),m=T.SUCCESS),i){case C.LIST:y(m);break;case C.DETAIL:E(m,{record:h});break;case C.ADD:P(m);break;case C.EDIT:f(m,{record:h});break}}),()=>null}}),Xe=n.defineComponent({props:{...G.props,...te.props},setup:(e,{slots:o,expose:s})=>{const r=n.ref();s(V(ce,r));const d=t.keys(te.props);return()=>n.createVNode(G,n.mergeProps({ref:r},t.omit(e,d)),{default:()=>{var a;return[n.createVNode(te,t.pick(e,d),null),(a=o.default)==null?void 0:a.call(o)]}})}});function We(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!n.isVNode(e)}const _e=(e,o)=>n.defineComponent({props:{...e.props,renderItem:{type:Function},signName:{type:String}},setup:(s,{slots:r})=>{const{getItemVNode:d,curdState:a,descColumns:l,getSignColumns:y}=z(),E=n.computed(()=>{const P=s.signName?y(s.signName):l.value;return t.map(P,f=>{var i;let p;const c=(i=s.renderItem)==null?void 0:i.call(s,f);if(c)return c;const u=t.get(a.detailData,f.dataIndex);return n.createVNode(o,n.mergeProps({key:f.dataIndex,label:f.title},t.get(f.extra,"desc")),We(p=d(f,u))?p:{default:()=>[p]})})});return()=>n.createVNode(e,s,{default:()=>{var P,f;return[(P=r.start)==null?void 0:P.call(r),E.value,(f=r.default)==null?void 0:f.call(r)]},...t.omit(r,"default","start")})}}),He=()=>({signName:{type:String},modelName:{type:String,default:"detailData"},operateBar:{type:Boolean,default:!0},showContinueAdd:{type:Boolean,default:!1},okText:{type:String,default:"\u786E\u5B9A"},okButtonProps:{type:Object},continueText:{type:String,default:"\u786E\u5B9A\u5E76\u7EE7\u7EED"},continueButtonProps:{type:Object}}),Je=(e,o,s,r)=>n.defineComponent({inheritAttrs:!1,props:{...e.props,...He()},setup:(d,{slots:a,attrs:l,expose:y})=>{const{elementMap:E,formElementMap:P,curdState:f,formColumns:p,getSignColumns:c,sendCurdEvent:u}=z(),i=n.ref(),m=n.computed(()=>d.signName?c(d.signName):p.value),h=(v,I)=>{if(l.onFinish){l.onFinish(v,I);return}f.mode===F.EDIT?u({action:C.EDIT,type:T.EXECUTE,values:v}):u({action:C.ADD,type:T.EXECUTE,values:v})},g=()=>{var v;f.addAction=B.NORMAL,(v=i.value)==null||v.submit()},S=()=>{var v;f.addAction=B.CONTINUE,(v=i.value)==null||v.submit()};return y(V(r,i)),()=>n.createVNode(e,n.mergeProps({ref:i},t.omit(l,"onFinish"),d,{elementMap:d.elementMap||E,formElementMap:d.formElementMap||P,columns:d.columns||m.value,model:d.model||f[d.modelName],readonly:f.mode===F.DETAIL,onFinish:h},s==null?void 0:s(f)),{default:()=>{var v,I,M,D,N;return[(v=a.divide)==null?void 0:v.call(a),d.operateBar&&n.createVNode("div",{class:"pro-curd-form-operate"},[(I=a.operateStart)==null?void 0:I.call(a),f.mode!==F.DETAIL&&n.createVNode(o,n.mergeProps({onClick:g},d.okButtonProps,{loading:f.operateLoading}),{default:()=>[d.okText]}),(M=a.operateCenter)==null?void 0:M.call(a),d.showContinueAdd&&f.mode===F.ADD&&n.createVNode(o,n.mergeProps({onClick:S},d.continueButtonProps,{loading:f.operateLoading}),{default:()=>[d.continueText]}),(D=a.operateEnd)==null?void 0:D.call(a)]),(N=a.default)==null?void 0:N.call(a)]},...t.omit(a,"default","divide","operateStart","operateCenter","operateEnd")})}}),Qe=()=>({extraInSearch:{type:Boolean,default:void 0},searchProps:{type:Object},tableProps:{type:Object},paginationProps:{type:Object},showPagination:{type:Boolean,default:!0},pageState:{type:Object}}),Ye=(e,o)=>n.defineComponent({props:{...Qe()},setup:(s,{slots:r})=>{const{elementMap:d,formElementMap:a,curdState:l,searchColumns:y,tableColumns:E,sendCurdEvent:P,operates:f}=z(),p=s.pageState||n.reactive({...Ie});let c;const u=()=>{P({action:C.LIST,type:T.EMIT,values:{...c,...p}})},i=g=>{c=g,p.page=1,u()},m=t.map(t.filter(f,g=>{const S=g.action;return S===C.DETAIL||S===C.EDIT||S===C.DELETE||g.tableOperate}),g=>{const S={...t.pick(g,"label","element","disabled","sort","onClick"),show:t.isUndefined(g==null?void 0:g.show)?!1:g==null?void 0:g.show,value:g.action};return S.onClick||(S.onClick=v=>{P({action:g.action,type:T.EMIT,record:v})}),S}),h=g=>t.map(g,S=>S.onClick?S:{...S,onClick:v=>{P({action:"operate",type:S.value,record:v})}});return()=>{var I,M,D,N,b,A,q,L,O,w;const g=s.tableProps,S={elementMap:d,columns:E.value,...t.omit(g,"slots","operate"),operate:t.mergeWith({items:m},g==null?void 0:g.operate,(X,ie)=>{if(t.isArray(X)&&t.isArray(ie))return t.concat(X,h(ie))}),paginationState:{page:p.page,pageSize:p.pageSize},loading:l.listLoading,dataSource:(I=l.listData)==null?void 0:I.dataSource},v=r.extra?n.createVNode("div",{class:"pro-curd-list-extra"},[r.extra()]):null;return n.createVNode(n.Fragment,null,[(M=r.start)==null?void 0:M.call(r),r.search?r.search({executeSearchWithResetPage:i}):n.createVNode(e,n.mergeProps({formElementMap:a,columns:y.value},t.omit(s.searchProps,"slots"),{onFinish:i}),{default:()=>[s.extraInSearch&&v],...(D=s.searchProps)==null?void 0:D.slots}),(N=r.divide)==null?void 0:N.call(r),!s.extraInSearch&&v,r.table?r.table(S):n.createVNode(o,S,g==null?void 0:g.slots),(b=r.divide2)==null?void 0:b.call(r),s.showPagination&&n.createVNode("div",{class:"pro-curd-list-footer"},[(A=r.footerStart)==null?void 0:A.call(r),(L=r.pagination)==null?void 0:L.call(r,p,(q=l.listData)==null?void 0:q.total,u),(O=r.footerEnd)==null?void 0:O.call(r)]),(w=r.end)==null?void 0:w.call(r)])}}}),Le=Symbol("pro-form-list"),se=()=>n.inject(Le),ue=e=>{n.provide(Le,e)},Ze=n.defineComponent({props:{pathList:{type:Array}},setup:(e,{slots:o})=>(ue({pathList:e.pathList}),()=>{var s;return(s=o.default)==null?void 0:s.call(o)})}),et=e=>n.defineComponent({props:{...e.props,rowKey:{type:String,default:"id"}},setup:(o,{slots:s})=>{const{formState:r,readonly:d}=de(),a=se(),l=ae(o.name),y=a!=null&&a.pathList?[...a.pathList,...l]:l,E=()=>{let f=t.get(r,y);t.isArray(f)||(f=[]),f.push({[o.rowKey]:new Date().valueOf()}),t.set(r,y,f)},P=f=>{const p=t.get(r,y);t.size(p)<=0||p.splice(f,1)};return()=>n.createVNode(e,t.omit(o,"rowKey"),{default:()=>{var f;return[t.map(t.get(r,y),(p,c)=>n.createVNode(Ze,{key:p[o.rowKey]||c,pathList:[...y,c]},{default:()=>{var u,i,m;return[n.createVNode("div",{class:"pro-form-list-item"},[(u=s.default)==null?void 0:u.call(s),!d.value&&n.createVNode(n.Fragment,null,[n.createVNode("div",{class:"pro-form-list-item-add",onClick:E},[(i=s.itemAdd)==null?void 0:i.call(s)]),n.createVNode("div",{class:"pro-form-list-item-minus",onClick:()=>P(c)},[(m=s.itemMinus)==null?void 0:m.call(s)])])])]}})),!d.value&&n.createVNode("div",{class:"pro-form-list-add",onClick:E},[(f=s.add)==null?void 0:f.call(s)])]}})}}),Me=Symbol("pro-form"),de=()=>n.inject(Me),tt=e=>{n.provide(Me,e)},fe=()=>({model:{type:Object},readonly:{type:Boolean,default:void 0},showState:{type:Object},showStateRules:{type:Object},readonlyState:{type:Object},readonlyStateRules:{type:Object},disableState:{type:Object},disableStateRules:{type:Object},needRules:{type:Boolean,default:!0},provideExtra:{type:Object}}),rt=(e,o,s)=>n.defineComponent({inheritAttrs:!1,props:{...e.props,...Q,...fe(),...t.omit(o.props,"items")},setup:(r,{slots:d,emit:a,expose:l,attrs:y})=>{const{elementMap:E,formElementMap:P}=Y(),f=r.elementMap||E,p=r.formElementMap||P,c=r.model||n.reactive({}),u=r.showState||n.reactive({}),i=r.readonlyState||n.reactive({}),m=r.disableState||n.reactive({});k.useEffect(()=>{r.showStateRules&&t.forEach(r.showStateRules,(D,N)=>{u[N]=D(c)}),r.readonlyStateRules&&t.forEach(r.readonlyStateRules,(D,N)=>{i[N]=D(c)}),r.disableStateRules&&t.forEach(r.disableStateRules,(D,N)=>{m[N]=D(c)})},c);const h=n.computed(()=>r.readonly),g=n.computed(()=>Z(r.columns,r.columnState,D=>x(D))),S=D=>{const N=Ae(D,u,r.showStateRules);a("finish",N,D)},v=n.ref();l(V(s,v)),tt({formState:c,showState:u,readonlyState:i,disableState:m,elementMap:f,formElementMap:p,readonly:h,columns:g,formRef:v,...r.provideExtra}),ue({});const I=t.keys(fe()),M=t.keys(t.omit(o.props,"items"));return()=>n.createVNode(e,n.mergeProps({ref:v},t.omit(y,"onFinish"),t.omit(r,...I,...M,"onFinish"),{model:c,onFinish:S}),{default:()=>{var D,N;return[(D=d.start)==null?void 0:D.call(d),p&&t.size(g.value)>0&&n.createVNode(n.Fragment,null,[r.row?n.createVNode(o,{row:r.row,col:r.col,items:t.map(g.value,b=>({rowKey:x(b),vNode:_(p,b,r.needRules),col:t.get(b,["extra","col"])}))},null):t.map(g.value,b=>_(p,b,r.needRules))]),(N=d.default)==null?void 0:N.call(d)]},...t.omit(d,"default")})}});exports.SearchMode=void 0;(function(e){e.AUTO="AUTO",e.MANUAL="MANUAL"})(exports.SearchMode||(exports.SearchMode={}));const pe=()=>({initEmit:{type:Boolean,default:!0},searchMode:{type:String,default:exports.SearchMode.AUTO},debounceKeys:{type:Array},debounceTypes:{type:Array,default:["text"]},debounceTime:{type:Number,default:800}}),nt=(e,o,s)=>n.defineComponent({props:{...e.props,...o,...pe()},setup:(r,{slots:d,expose:a})=>{const l=r.model||n.reactive({}),y=new Set(r.debounceTypes),E=t.map(t.filter(r.columns,i=>{const m=re(i);return y.has(m)}),i=>x(i)),P=n.ref();a(V(s,P));const f=()=>{var i;(i=P.value)==null||i.submit()},p=t.debounce(()=>{f()},r.debounceTime);k.useEffect(()=>{r.initEmit&&f()},[]);const c=(i,m,h)=>t.some(h,g=>t.get(i,g)!==t.get(m,g));k.useWatch((i,m)=>{if(r.searchMode!==exports.SearchMode.AUTO)return;const h=t.size(r.debounceKeys)>0?r.debounceKeys:E;if(t.size(h)>0&&c(i,m,h)){p();return}f()},()=>t.clone(l));const u=t.keys(t.omit(pe(),"columns"));return()=>n.createVNode(e,n.mergeProps({ref:P},t.omit(r,u),{model:l}),d)}}),ye=()=>({readonly:{type:Boolean,default:void 0},fieldProps:{type:Object},showProps:{type:Object},slots:{type:Object}}),ot=(e,o)=>({InputComp:s,valueType:r,name:d})=>n.defineComponent({name:d,props:{...e.props,...ye()},setup:(a,{slots:l})=>{const{formState:y,showState:E,readonlyState:P,disableState:f,readonly:p,elementMap:c}=de(),u=se(),i=n.computed(()=>t.isBoolean(a.readonly)?a.readonly:t.isBoolean(P[a.name])?P[a.name]:p.value),m=ae(a.name),h=u!=null&&u.pathList?[...u.pathList,...m]:m,g=v=>{t.set(y,h,v)},S=t.keys(ye());return()=>{const v=t.get(E,h);if(t.isBoolean(v)&&!v)return null;const I=t.get(y,h),M=t.get(c,r);return n.createVNode(e,n.mergeProps(t.omit(a,...S,"name","slots"),{name:h}),{default:()=>[i.value?n.createVNode(n.Fragment,null,[M?n.createVNode(M,n.mergeProps({value:I},a.fieldProps,{showProps:a.showProps}),l):n.createVNode("span",null,[I])]):n.createVNode(s,n.mergeProps(o(I,g,t.get(f,h)),a.fieldProps),l)],...a.slots})}}}),Oe=Symbol("pro-table"),at=()=>n.inject(Oe),ct=e=>{n.provide(Oe,e)},ge=()=>({operate:{type:Object},columnEmptyText:{type:String},column:{type:Object},serialNumber:{type:Boolean},paginationState:{type:Object},provideExtra:{type:Object}}),st=(e,o,s)=>n.defineComponent({props:{...e.props,...Q,...o,...ge()},setup:(r,{slots:d,expose:a})=>{const{elementMap:l}=Y(),y=r.elementMap||l,E=()=>({title:"\u5E8F\u53F7",dataIndex:"serialNumber",width:80,...r.column,customRender:({index:u})=>{var i,m;return((i=r.paginationState)==null?void 0:i.page)&&((m=r.paginationState)==null?void 0:m.pageSize)?r.paginationState.pageSize*(r.paginationState.page-1)+u+1:u+1}}),P=()=>{const u=r.operate,i=t.map(u.items,h=>({...h,...t.get(u.itemState,h.value)})),m=t.sortBy(i,h=>h.sort);return{...r.column,title:"\u64CD\u4F5C",dataIndex:"operate",fixed:"right",...u.column,customRender:({record:h})=>{const g=t.filter(m,S=>S.show&&t.isFunction(S.show)?S.show(h):S.show!==!1);return n.createVNode("div",{class:"pro-table-operate"},[t.map(g,S=>t.isFunction(S.element)?S.element(h,S):n.createVNode("div",{class:"pro-table-operate-item",key:S.value,onClick:()=>{var v;(v=S.onClick)==null||v.call(S,h)}},[S.label]))])}}},f=n.computed(()=>{const u=Z(r.columns,r.columnState,m=>m.dataIndex),i=t.map(u,m=>{const h={...r.column,...m};return m.customRender||(h.customRender=({text:g})=>ne(y,{...m,showProps:{...m.showProps,content:r.columnEmptyText}},g)||g||r.columnEmptyText),h});return r.serialNumber&&i.unshift(E()),r.operate&&r.operate.items&&t.some(r.operate.items,m=>m.show)&&i.push(P()),i}),p=n.ref();ct({columns:f,tableRef:p,...r.provideExtra}),a(V(s||[],p));const c=t.keys(ge());return()=>n.createVNode(e,n.mergeProps({ref:p},t.omit(r,c),{columns:f.value}),d)}});exports.CurdAction=C;exports.CurdAddAction=B;exports.CurdCurrentMode=F;exports.CurdMethods=ce;exports.CurdSubAction=T;exports.ProConfig=Ke;exports.ProCurd=G;exports.ProModalCurd=ze;exports.ProModule=W;exports.ProPageCurd=Xe;exports.RequestAction=U;exports.Wrapper=be;exports.convertPathToList=ae;exports.createCurdDesc=_e;exports.createCurdForm=Je;exports.createCurdList=Ye;exports.createExpose=V;exports.createForm=rt;exports.createFormItemCompFn=ot;exports.createFormList=et;exports.createGrid=we;exports.createProConfig=Ue;exports.createSearchForm=nt;exports.createTable=st;exports.defaultPage=Ie;exports.getColumnFormItemName=x;exports.getColumnValueType=re;exports.getFirstPropName=ve;exports.getFormItemEl=_;exports.getItemEl=ne;exports.getValidValues=Ae;exports.mergeStateToList=Z;exports.proBaseProps=Q;exports.provideProCurd=Ne;exports.provideProFormList=ue;exports.provideProModule=Te;exports.renderElement=K;exports.renderElements=H;exports.useComposeRequestActor=Pe;exports.useDoneRequestActor=je;exports.useFailedRequestActor=ke;exports.useModuleEvent=J;exports.useProConfig=Y;exports.useProCurd=z;exports.useProForm=de;exports.useProFormList=se;exports.useProModule=$;exports.useProTable=at;