@vue-start/pro 0.4.9 → 0.4.11

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,2729 +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
- * 5种Action 的子事件
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 (event) {
1007
- //如果当前event存在source 不处理
1008
- if (event.source) {
1009
- return;
1010
- }
1011
-
1012
- var action = event.type;
1013
- var _ref3 = event.payload,
1014
- type = _ref3.type,
1015
- values = _ref3.values,
1016
- record = _ref3.record;
1017
-
1018
- switch (action) {
1019
- case exports.CurdAction.LIST:
1020
- if (type === exports.CurdSubAction.EMIT) {
1021
- prevListParams = values;
1022
- handleSearch();
1023
- }
1024
-
1025
- return;
1026
-
1027
- case exports.CurdAction.ADD:
1028
- if (type === exports.CurdSubAction.EXECUTE) {
1029
- sendRequest(exports.CurdAction.ADD, values, state.detailData);
1030
- }
1031
-
1032
- return;
1033
-
1034
- case exports.CurdAction.EDIT:
1035
- if (type === exports.CurdSubAction.EXECUTE) {
1036
- sendRequest(exports.CurdAction.EDIT, values, state.detailData);
1037
- }
1038
-
1039
- return;
1040
-
1041
- case exports.CurdAction.DELETE:
1042
- if (type === exports.CurdSubAction.EMIT) {
1043
- sendRequest(exports.CurdAction.DELETE, record, props.rowKey);
1044
- }
1045
-
1046
- return;
1047
- } //非 CurdAction 五种操作的其他请求
1048
-
1049
-
1050
- if (action && type === exports.CurdSubAction.EXECUTE) {
1051
- sendRequest(action, values);
1052
- }
1053
- });
1054
- var operateMap = lodash.reduce(props.operates, function (pair, item) {
1055
- return _objectSpread2(_objectSpread2({}, pair), {}, _defineProperty({}, item.action, item));
1056
- }, {}); //根据Action获取ICurdOperateOpts
1057
-
1058
- var getOperate = function getOperate(action) {
1059
- return lodash.get(operateMap, action);
1060
- };
1061
-
1062
- var listProps = vue.computed(function () {
1063
- return props.listProps;
1064
- });
1065
- var formProps = vue.computed(function () {
1066
- return props.formProps;
1067
- });
1068
- var descProps = vue.computed(function () {
1069
- return props.descProps;
1070
- });
1071
- var modalProps = vue.computed(function () {
1072
- return props.modalProps;
1073
- });
1074
- provideProCurd({
1075
- columns: columns,
1076
- getSignColumns: getSignColumns,
1077
- getFormItemVNode: getFormItemVNode,
1078
- getItemVNode: getItemVNode,
1079
- elementMap: elementMap,
1080
- formElementMap: props.formElementMap,
1081
- //
1082
- rowKey: props.rowKey,
1083
- curdState: state,
1084
- formColumns: formColumns,
1085
- descColumns: descColumns,
1086
- tableColumns: tableColumns,
1087
- searchColumns: searchColumns,
1088
- //
1089
- sendCurdEvent: sendCurdEvent,
1090
- //
1091
- getOperate: getOperate,
1092
- //
1093
- refreshList: handleSearch,
1094
- //
1095
- listProps: listProps,
1096
- formProps: formProps,
1097
- descProps: descProps,
1098
- modalProps: modalProps
1099
- });
1100
- expose({
1101
- sendCurdEvent: sendCurdEvent,
1102
- refreshList: handleSearch
1103
- });
1104
- return function () {
1105
- var _slots$default;
1106
-
1107
- return (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots);
1108
- };
1109
- }
1110
- });
1111
- var ProCurd = vue.defineComponent({
1112
- props: _objectSpread2(_objectSpread2(_objectSpread2({}, lodash.omit(ProModule.props, "state", "requests")), Curd.props), {}, {
1113
- curdState: {
1114
- type: Object
1115
- }
1116
- }),
1117
- setup: function setup(props, _ref4) {
1118
- var _curdOperateOpts;
1119
-
1120
- var slots = _ref4.slots,
1121
- expose = _ref4.expose;
1122
- var moduleRef = vue.ref();
1123
- var curdRef = vue.ref();
1124
- var curdState = props.curdState || vue.reactive({
1125
- detailData: {}
1126
- });
1127
- /****************** 请求处理 **********************/
1128
- //curd默认网络属性
1129
-
1130
- var curdOperateOpts = (_curdOperateOpts = {}, _defineProperty(_curdOperateOpts, exports.CurdAction.LIST, {
1131
- convertParams: function convertParams(values) {
1132
- return values;
1133
- },
1134
- convertData: function convertData(actor) {
1135
- var _actor$res;
1136
-
1137
- return (_actor$res = actor.res) === null || _actor$res === void 0 ? void 0 : _actor$res.data;
1138
- },
1139
- loadingName: "listLoading",
1140
- stateName: "listData"
1141
- }), _defineProperty(_curdOperateOpts, exports.CurdAction.DETAIL, {
1142
- convertParams: function convertParams(record, rowKey) {
1143
- return lodash.pick(record, rowKey);
1144
- },
1145
- convertData: function convertData(actor) {
1146
- var _actor$res2;
1147
-
1148
- return (_actor$res2 = actor.res) === null || _actor$res2 === void 0 ? void 0 : _actor$res2.data;
1149
- },
1150
- loadingName: "detailLoading",
1151
- stateName: "detailData",
1152
- label: "详情"
1153
- }), _defineProperty(_curdOperateOpts, exports.CurdAction.ADD, {
1154
- convertParams: function convertParams(values, record) {
1155
- return {
1156
- body: _objectSpread2(_objectSpread2({}, record), values)
1157
- };
1158
- },
1159
- loadingName: "operateLoading",
1160
- label: "添加"
1161
- }), _defineProperty(_curdOperateOpts, exports.CurdAction.EDIT, {
1162
- convertParams: function convertParams(values, record) {
1163
- return {
1164
- body: _objectSpread2(_objectSpread2({}, record), values)
1165
- };
1166
- },
1167
- loadingName: "operateLoading",
1168
- label: "编辑"
1169
- }), _defineProperty(_curdOperateOpts, exports.CurdAction.DELETE, {
1170
- convertParams: function convertParams(record, rowKey) {
1171
- return lodash.pick(record, rowKey);
1172
- },
1173
- label: "删除"
1174
- }), _curdOperateOpts);
1175
- /****************************** columns分类 *************************************/
1176
-
1177
- var operates = lodash.map(props.operates, function (item) {
1178
- var curdOpts = lodash.get(curdOperateOpts, item.action);
1179
- return _objectSpread2(_objectSpread2({}, curdOpts), item);
1180
- }); //只取配置actor的项
1181
-
1182
- var requests = lodash.filter(operates, function (item) {
1183
- return item.actor;
1184
- });
1185
- var moduleKeys = lodash.keys(lodash.omit(ProModule.props, "state", "requests"));
1186
- expose({
1187
- sendCurdEvent: function sendCurdEvent(event) {
1188
- var _curdRef$value;
1189
-
1190
- (_curdRef$value = curdRef.value) === null || _curdRef$value === void 0 ? void 0 : _curdRef$value.sendCurdEvent(event);
1191
- },
1192
- refreshList: function refreshList(extra) {
1193
- var _curdRef$value2;
1194
-
1195
- (_curdRef$value2 = curdRef.value) === null || _curdRef$value2 === void 0 ? void 0 : _curdRef$value2.refreshList(extra);
1196
- },
1197
- sendEvent: function sendEvent(action) {
1198
- var _moduleRef$value;
1199
-
1200
- (_moduleRef$value = moduleRef.value) === null || _moduleRef$value === void 0 ? void 0 : _moduleRef$value.sendEvent(action);
1201
- },
1202
- sendRequest: function sendRequest(requestNameOrAction) {
1203
- var _moduleRef$value2;
1204
-
1205
- for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1206
- params[_key - 1] = arguments[_key];
1207
- }
1208
-
1209
- (_moduleRef$value2 = moduleRef.value) === null || _moduleRef$value2 === void 0 ? void 0 : _moduleRef$value2.sendRequest.apply(_moduleRef$value2, [requestNameOrAction].concat(params));
1210
- }
1211
- });
1212
- return function () {
1213
- return vue.createVNode(ProModule, vue.mergeProps({
1214
- "ref": moduleRef
1215
- }, lodash.pick(props, moduleKeys), {
1216
- "state": curdState,
1217
- "requests": requests
1218
- }), {
1219
- "default": function _default() {
1220
- return [vue.createVNode(Curd, vue.mergeProps({
1221
- "ref": curdRef
1222
- }, lodash.omit.apply(void 0, [props].concat(_toConsumableArray(moduleKeys), ["curdState", "operates"])), {
1223
- "operates": operates
1224
- }), slots)];
1225
- }
1226
- });
1227
- };
1228
- }
1229
- });
1230
-
1231
- var modalCurdProps = function modalCurdProps() {
1232
- return {
1233
- defaultAddRecord: {
1234
- type: Object
1235
- }
1236
- };
1237
- };
1238
-
1239
- /**
1240
- * 事件处理
1241
- */
1242
- var ModalCurd = vue.defineComponent({
1243
- props: _objectSpread2({}, modalCurdProps()),
1244
- setup: function setup(props) {
1245
- var _listProps$value;
1246
-
1247
- var _useProModule = useProModule(),
1248
- dispatch = _useProModule.dispatch,
1249
- sendRequest = _useProModule.sendRequest;
1250
-
1251
- var _useProCurd = useProCurd(),
1252
- rowKey = _useProCurd.rowKey,
1253
- curdState = _useProCurd.curdState,
1254
- listProps = _useProCurd.listProps,
1255
- getOperate = _useProCurd.getOperate,
1256
- refreshList = _useProCurd.refreshList;
1257
-
1258
- var pageState = (listProps === null || listProps === void 0 ? void 0 : (_listProps$value = listProps.value) === null || _listProps$value === void 0 ? void 0 : _listProps$value.pageState) || vue.reactive(_objectSpread2({}, defaultPage)); //发送详情接口
1259
-
1260
- var sendDetailRequest = function sendDetailRequest(record) {
1261
- var operateOpts = getOperate(exports.CurdAction.DETAIL);
1262
-
1263
- if (operateOpts !== null && operateOpts !== void 0 && operateOpts.actor) {
1264
- //如果注册了详情接口 发起请求
1265
- sendRequest(exports.CurdAction.DETAIL, record, rowKey);
1266
- } else {
1267
- //直接使用当前record作为详情数据
1268
- dispatch({
1269
- type: "detailData",
1270
- payload: record
1271
- });
1272
- }
1273
- };
1274
-
1275
- var dealDetail = function dealDetail(subAction, _ref) {
1276
- var record = _ref.record;
1277
-
1278
- if (subAction === exports.CurdSubAction.EMIT) {
1279
- dispatch({
1280
- type: "mode",
1281
- payload: exports.CurdCurrentMode.DETAIL
1282
- });
1283
- sendDetailRequest(record);
1284
- }
1285
- };
1286
-
1287
- var dealAdd = function dealAdd(subAction) {
1288
- if (subAction === exports.CurdSubAction.EMIT) {
1289
- dispatch({
1290
- type: "mode",
1291
- payload: exports.CurdCurrentMode.ADD
1292
- });
1293
- dispatch({
1294
- type: "detailData",
1295
- payload: props.defaultAddRecord || {}
1296
- });
1297
- } else if (subAction === exports.CurdSubAction.SUCCESS) {
1298
- //添加成功
1299
- pageState.page = 1; //重置当前页数
1300
- //刷新List
1301
-
1302
- refreshList({
1303
- page: 1
1304
- });
1305
-
1306
- if (curdState.addAction === exports.CurdAddAction.CONTINUE) {
1307
- dispatch({
1308
- type: "detailData",
1309
- payload: props.defaultAddRecord || {}
1310
- });
1311
- } else {
1312
- dispatch({
1313
- type: "mode",
1314
- payload: undefined
1315
- });
1316
- }
1317
- }
1318
- };
1319
-
1320
- var dealEdit = function dealEdit(subAction, _ref2) {
1321
- var record = _ref2.record;
1322
-
1323
- if (subAction === exports.CurdSubAction.EMIT) {
1324
- dispatch({
1325
- type: "mode",
1326
- payload: exports.CurdCurrentMode.EDIT
1327
- });
1328
- sendDetailRequest(record);
1329
- } else if (subAction === exports.CurdSubAction.SUCCESS) {
1330
- // 编辑成功
1331
- dispatch({
1332
- type: "mode",
1333
- payload: undefined
1334
- }); //刷新列表
1335
-
1336
- refreshList();
1337
- }
1338
- };
1339
-
1340
- var dealDelete = function dealDelete(subAction) {
1341
- if (subAction === exports.CurdSubAction.SUCCESS) {
1342
- //刷新列表
1343
- refreshList();
1344
- }
1345
- };
1346
-
1347
- useModuleEvent(function (_ref3) {
1348
- var type = _ref3.type,
1349
- payload = _ref3.payload,
1350
- source = _ref3.source;
1351
-
1352
- if (source) {
1353
- return;
1354
- }
1355
-
1356
- var action = type;
1357
- var subAction = payload === null || payload === void 0 ? void 0 : payload.type;
1358
- var record = payload === null || payload === void 0 ? void 0 : payload.record;
1359
-
1360
- if (action === RequestAction.Success) {
1361
- //覆盖
1362
- action = lodash.get(payload, ["requestOpts", "action"]);
1363
- subAction = exports.CurdSubAction.SUCCESS;
1364
- }
1365
-
1366
- switch (action) {
1367
- case exports.CurdAction.DETAIL:
1368
- dealDetail(subAction, {
1369
- record: record
1370
- });
1371
- break;
1372
-
1373
- case exports.CurdAction.ADD:
1374
- dealAdd(subAction);
1375
- break;
1376
-
1377
- case exports.CurdAction.EDIT:
1378
- dealEdit(subAction, {
1379
- record: record
1380
- });
1381
- break;
1382
-
1383
- case exports.CurdAction.DELETE:
1384
- dealDelete(subAction);
1385
- break;
1386
- }
1387
- });
1388
- return function () {
1389
- return null;
1390
- };
1391
- }
1392
- });
1393
- var ProModalCurd = vue.defineComponent({
1394
- props: _objectSpread2(_objectSpread2({}, ProCurd.props), ModalCurd.props),
1395
- setup: function setup(props, _ref4) {
1396
- var slots = _ref4.slots,
1397
- expose = _ref4.expose;
1398
- var curdRef = vue.ref();
1399
- expose(createExpose(CurdMethods, curdRef));
1400
- var invalidKeys = lodash.keys(ModalCurd.props);
1401
- return function () {
1402
- var _slots$default;
1403
-
1404
- return vue.createVNode(ProCurd, vue.mergeProps({
1405
- "ref": curdRef
1406
- }, lodash.omit(props, invalidKeys)), {
1407
- "default": function _default() {
1408
- return [vue.createVNode(ModalCurd, lodash.pick(props, invalidKeys), null), (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];
1409
- }
1410
- });
1411
- };
1412
- }
1413
- });
1414
-
1415
- var pageCurdProps = function pageCurdProps() {
1416
- return {
1417
- defaultAddRecord: {
1418
- type: Object
1419
- },
1420
- routeBack: {
1421
- type: Function
1422
- }
1423
- };
1424
- };
1425
-
1426
- var PageCurd = vue.defineComponent({
1427
- props: _objectSpread2({}, pageCurdProps()),
1428
- setup: function setup(props) {
1429
- var router = vueRouter.useRouter();
1430
- var route = vueRouter.useRoute();
1431
-
1432
- var _useProModule = useProModule(),
1433
- dispatch = _useProModule.dispatch,
1434
- sendRequest = _useProModule.sendRequest;
1435
-
1436
- var _useProCurd = useProCurd(),
1437
- rowKey = _useProCurd.rowKey,
1438
- curdState = _useProCurd.curdState,
1439
- refreshList = _useProCurd.refreshList;
1440
-
1441
- var dealList = function dealList(subAction) {
1442
- if (subAction === exports.CurdSubAction.PAGE) {
1443
- //其实就是个重置过程
1444
- dispatch({
1445
- type: "mode",
1446
- payload: undefined
1447
- });
1448
- dispatch({
1449
- type: "detailData",
1450
- payload: {}
1451
- });
1452
- dispatch({
1453
- type: "detailLoading",
1454
- payload: false
1455
- });
1456
- dispatch({
1457
- type: "addAction",
1458
- payload: undefined
1459
- });
1460
- }
1461
- };
1462
-
1463
- var dealDetail = function dealDetail(subAction, _ref) {
1464
- var record = _ref.record;
1465
-
1466
- if (subAction === exports.CurdSubAction.EMIT) {
1467
- router.push({
1468
- path: "".concat(route.path, "/detail"),
1469
- query: lodash.pick(record, rowKey)
1470
- });
1471
- } else if (subAction === exports.CurdSubAction.PAGE) {
1472
- dispatch({
1473
- type: "mode",
1474
- payload: exports.CurdCurrentMode.DETAIL
1475
- });
1476
- sendRequest(exports.CurdAction.DETAIL, route.query, rowKey);
1477
- }
1478
- };
1479
-
1480
- var dealAdd = function dealAdd(subAction) {
1481
- if (subAction === exports.CurdSubAction.EMIT) {
1482
- router.push({
1483
- path: "".concat(route.path, "/add")
1484
- });
1485
- } else if (subAction === exports.CurdSubAction.PAGE) {
1486
- dispatch({
1487
- type: "mode",
1488
- payload: exports.CurdCurrentMode.ADD
1489
- });
1490
- dispatch({
1491
- type: "detailData",
1492
- payload: props.defaultAddRecord || {}
1493
- });
1494
- } else if (subAction === exports.CurdSubAction.SUCCESS) {
1495
- if (curdState.addAction === exports.CurdAddAction.CONTINUE) {
1496
- dispatch({
1497
- type: "detailData",
1498
- payload: props.defaultAddRecord || {}
1499
- });
1500
- } else {
1501
- props.routeBack ? props.routeBack(exports.CurdAction.ADD) : router.go(-1);
1502
- }
1503
- }
1504
- };
1505
-
1506
- var dealEdit = function dealEdit(subAction, _ref2) {
1507
- var record = _ref2.record;
1508
-
1509
- if (subAction === exports.CurdSubAction.EMIT) {
1510
- router.push({
1511
- path: "".concat(route.path, "/edit"),
1512
- query: lodash.pick(record, rowKey)
1513
- });
1514
- } else if (subAction === exports.CurdSubAction.PAGE) {
1515
- dispatch({
1516
- type: "mode",
1517
- payload: exports.CurdCurrentMode.EDIT
1518
- });
1519
- sendRequest(exports.CurdAction.DETAIL, route.query, rowKey);
1520
- } else if (subAction === exports.CurdSubAction.SUCCESS) {
1521
- props.routeBack ? props.routeBack(exports.CurdAction.EDIT) : router.go(-1);
1522
- }
1523
- };
1524
-
1525
- var dealDelete = function dealDelete(subAction) {
1526
- if (subAction === exports.CurdSubAction.SUCCESS) {
1527
- //刷新列表
1528
- refreshList();
1529
- }
1530
- };
1531
-
1532
- useModuleEvent(function (_ref3) {
1533
- var type = _ref3.type,
1534
- payload = _ref3.payload,
1535
- source = _ref3.source;
1536
-
1537
- if (source) {
1538
- return;
1539
- }
1540
-
1541
- var action = type;
1542
- var subAction = payload === null || payload === void 0 ? void 0 : payload.type;
1543
- var record = payload === null || payload === void 0 ? void 0 : payload.record;
1544
-
1545
- if (action === RequestAction.Success) {
1546
- //覆盖
1547
- action = lodash.get(payload, ["requestOpts", "action"]);
1548
- subAction = exports.CurdSubAction.SUCCESS;
1549
- }
1550
-
1551
- switch (action) {
1552
- case exports.CurdAction.LIST:
1553
- dealList(subAction);
1554
- break;
1555
-
1556
- case exports.CurdAction.DETAIL:
1557
- dealDetail(subAction, {
1558
- record: record
1559
- });
1560
- break;
1561
-
1562
- case exports.CurdAction.ADD:
1563
- dealAdd(subAction);
1564
- break;
1565
-
1566
- case exports.CurdAction.EDIT:
1567
- dealEdit(subAction, {
1568
- record: record
1569
- });
1570
- break;
1571
-
1572
- case exports.CurdAction.DELETE:
1573
- dealDelete(subAction);
1574
- break;
1575
- }
1576
- });
1577
- return function () {
1578
- return null;
1579
- };
1580
- }
1581
- });
1582
- var ProPageCurd = vue.defineComponent({
1583
- props: _objectSpread2(_objectSpread2({}, ProCurd.props), PageCurd.props),
1584
- setup: function setup(props, _ref4) {
1585
- var slots = _ref4.slots,
1586
- expose = _ref4.expose;
1587
- var curdRef = vue.ref();
1588
- expose(createExpose(CurdMethods, curdRef));
1589
- var invalidKeys = lodash.keys(PageCurd.props);
1590
- return function () {
1591
- var _slots$default;
1592
-
1593
- return vue.createVNode(ProCurd, vue.mergeProps({
1594
- "ref": curdRef
1595
- }, lodash.omit(props, invalidKeys)), {
1596
- "default": function _default() {
1597
- return [vue.createVNode(PageCurd, lodash.pick(props, invalidKeys), null), (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];
1598
- }
1599
- });
1600
- };
1601
- }
1602
- });
1603
-
1604
- function _isSlot(s) {
1605
- return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !vue.isVNode(s);
1606
- }
1607
-
1608
- var createCurdDesc = function createCurdDesc(Descriptions, DescriptionsItem) {
1609
- return vue.defineComponent({
1610
- props: _objectSpread2(_objectSpread2({}, Descriptions.props), {}, {
1611
- //重写Item content
1612
- renderItem: {
1613
- type: Function
1614
- },
1615
- //标记名称
1616
- signName: {
1617
- type: String
1618
- }
1619
- }),
1620
- setup: function setup(props, _ref) {
1621
- var slots = _ref.slots;
1622
-
1623
- var _useProCurd = useProCurd(),
1624
- getItemVNode = _useProCurd.getItemVNode,
1625
- curdState = _useProCurd.curdState,
1626
- descColumns = _useProCurd.descColumns,
1627
- getSignColumns = _useProCurd.getSignColumns;
1628
-
1629
- var descVNodes = vue.computed(function () {
1630
- var columns = props.signName ? getSignColumns(props.signName) : descColumns.value;
1631
- return lodash.map(columns, function (item) {
1632
- var _slot;
1633
-
1634
- var _props$renderItem;
1635
-
1636
- var vn = (_props$renderItem = props.renderItem) === null || _props$renderItem === void 0 ? void 0 : _props$renderItem.call(props, item);
1637
-
1638
- if (vn) {
1639
- return vn;
1640
- }
1641
-
1642
- var value = lodash.get(curdState.detailData, item.dataIndex);
1643
- return vue.createVNode(DescriptionsItem, vue.mergeProps({
1644
- "key": item.dataIndex,
1645
- "label": item.title
1646
- }, lodash.get(item.extra, "desc")), _isSlot(_slot = getItemVNode(item, value)) ? _slot : {
1647
- "default": function _default() {
1648
- return [_slot];
1649
- }
1650
- });
1651
- });
1652
- });
1653
- return function () {
1654
- var _slots$start, _slots$default;
1655
-
1656
- return vue.createVNode(Descriptions, props, _objectSpread2({
1657
- "default": function _default() {
1658
- 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)];
1659
- }
1660
- }, lodash.omit(slots, "default", "start")));
1661
- };
1662
- }
1663
- });
1664
- };
1665
-
1666
- var proCurdAddOrEditProps = function proCurdAddOrEditProps() {
1667
- return {
1668
- //标记名称
1669
- signName: {
1670
- type: String
1671
- },
1672
- //form model 绑定的curdState中的对象
1673
- modelName: {
1674
- type: String,
1675
- "default": "detailData"
1676
- },
1677
- //是否使用operate bar
1678
- operateBar: {
1679
- type: Boolean,
1680
- "default": true
1681
- },
1682
- //显示 确定并继续 按钮
1683
- showContinueAdd: {
1684
- type: Boolean,
1685
- "default": false
1686
- },
1687
- //
1688
- okText: {
1689
- type: String,
1690
- "default": "确定"
1691
- },
1692
- okButtonProps: {
1693
- type: Object
1694
- },
1695
- //
1696
- continueText: {
1697
- type: String,
1698
- "default": "确定并继续"
1699
- },
1700
- continueButtonProps: {
1701
- type: Object
1702
- }
1703
- };
1704
- };
1705
-
1706
- var createCurdForm = function createCurdForm(Form, Button, convertFormProps, formMethods) {
1707
- return vue.defineComponent({
1708
- inheritAttrs: false,
1709
- props: _objectSpread2(_objectSpread2({}, Form.props), proCurdAddOrEditProps()),
1710
- setup: function setup(props, _ref) {
1711
- var slots = _ref.slots,
1712
- attrs = _ref.attrs,
1713
- expose = _ref.expose;
1714
-
1715
- var _useProCurd = useProCurd(),
1716
- elementMap = _useProCurd.elementMap,
1717
- formElementMap = _useProCurd.formElementMap,
1718
- curdState = _useProCurd.curdState,
1719
- formColumns = _useProCurd.formColumns,
1720
- getSignColumns = _useProCurd.getSignColumns,
1721
- sendCurdEvent = _useProCurd.sendCurdEvent;
1722
-
1723
- var formRef = vue.ref();
1724
- var columns = vue.computed(function () {
1725
- if (props.signName) {
1726
- return getSignColumns(props.signName);
1727
- }
1728
-
1729
- return formColumns.value;
1730
- });
1731
-
1732
- var handleFinish = function handleFinish(values, originValues) {
1733
- if (attrs.onFinish) {
1734
- attrs.onFinish(values, originValues);
1735
- return;
1736
- }
1737
-
1738
- if (curdState.mode === exports.CurdCurrentMode.EDIT) {
1739
- //edit
1740
- sendCurdEvent({
1741
- action: exports.CurdAction.EDIT,
1742
- type: exports.CurdSubAction.EXECUTE,
1743
- values: values
1744
- });
1745
- } else {
1746
- //add
1747
- sendCurdEvent({
1748
- action: exports.CurdAction.ADD,
1749
- type: exports.CurdSubAction.EXECUTE,
1750
- values: values
1751
- });
1752
- }
1753
- };
1754
-
1755
- var handleAdd = function handleAdd() {
1756
- var _formRef$value;
1757
-
1758
- curdState.addAction = exports.CurdAddAction.NORMAL;
1759
- (_formRef$value = formRef.value) === null || _formRef$value === void 0 ? void 0 : _formRef$value.submit();
1760
- };
1761
-
1762
- var handleContinueAdd = function handleContinueAdd() {
1763
- var _formRef$value2;
1764
-
1765
- curdState.addAction = exports.CurdAddAction.CONTINUE;
1766
- (_formRef$value2 = formRef.value) === null || _formRef$value2 === void 0 ? void 0 : _formRef$value2.submit();
1767
- };
1768
-
1769
- expose(createExpose(formMethods, formRef));
1770
- return function () {
1771
- var _slots$divide, _slots$operateStart, _slots$operateCenter, _slots$operateEnd, _slots$default;
1772
-
1773
- return vue.createVNode(Form, vue.mergeProps({
1774
- "ref": formRef
1775
- }, lodash.omit(attrs, "onFinish"), props, {
1776
- "elementMap": props.elementMap || elementMap,
1777
- "formElementMap": props.formElementMap || formElementMap,
1778
- "columns": props.columns || columns.value,
1779
- "model": props.model || curdState[props.modelName],
1780
- "readonly": curdState.mode === exports.CurdCurrentMode.DETAIL,
1781
- "onFinish": handleFinish
1782
- }, convertFormProps === null || convertFormProps === void 0 ? void 0 : convertFormProps(curdState)), _objectSpread2({
1783
- "default": function _default() {
1784
- return [(_slots$divide = slots.divide) === null || _slots$divide === void 0 ? void 0 : _slots$divide.call(slots), props.operateBar && vue.createVNode("div", {
1785
- "class": "pro-curd-form-operate"
1786
- }, [(_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({
1787
- "onClick": handleAdd
1788
- }, props.okButtonProps, {
1789
- "loading": curdState.operateLoading
1790
- }), {
1791
- "default": function _default() {
1792
- return [props.okText];
1793
- }
1794
- }), (_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({
1795
- "onClick": handleContinueAdd
1796
- }, props.continueButtonProps, {
1797
- "loading": curdState.operateLoading
1798
- }), {
1799
- "default": function _default() {
1800
- return [props.continueText];
1801
- }
1802
- }), (_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)];
1803
- }
1804
- }, lodash.omit(slots, "default", "divide", "operateStart", "operateCenter", "operateEnd")));
1805
- };
1806
- }
1807
- });
1808
- };
1809
-
1810
- var proCurdListProps = function proCurdListProps() {
1811
- return {
1812
- /**
1813
- * extra 是否放到SearchForm中
1814
- */
1815
- extraInSearch: {
1816
- type: Boolean,
1817
- "default": undefined
1818
- },
1819
- //search
1820
- searchProps: {
1821
- type: Object
1822
- },
1823
- //table
1824
- tableProps: {
1825
- type: Object
1826
- },
1827
- //pagination是否展示
1828
- paginationProps: {
1829
- type: Object
1830
- },
1831
- showPagination: {
1832
- type: Boolean,
1833
- "default": true
1834
- },
1835
- //pageState
1836
- pageState: {
1837
- type: Object
1838
- }
1839
- };
1840
- };
1841
-
1842
- var createCurdList = function createCurdList(SearchForm, Table) {
1843
- return vue.defineComponent({
1844
- props: _objectSpread2({}, proCurdListProps()),
1845
- setup: function setup(props, _ref) {
1846
- var slots = _ref.slots;
1847
-
1848
- var _useProCurd = useProCurd(),
1849
- elementMap = _useProCurd.elementMap,
1850
- formElementMap = _useProCurd.formElementMap,
1851
- curdState = _useProCurd.curdState,
1852
- searchColumns = _useProCurd.searchColumns,
1853
- tableColumns = _useProCurd.tableColumns,
1854
- getOperate = _useProCurd.getOperate,
1855
- sendCurdEvent = _useProCurd.sendCurdEvent;
1856
- /******************* search pagination ********************/
1857
-
1858
-
1859
- var pageState = props.pageState || vue.reactive(_objectSpread2({}, defaultPage));
1860
- var prevValues;
1861
-
1862
- var handleSearch = function handleSearch() {
1863
- sendCurdEvent({
1864
- action: exports.CurdAction.LIST,
1865
- type: exports.CurdSubAction.EMIT,
1866
- values: _objectSpread2(_objectSpread2({}, prevValues), pageState)
1867
- });
1868
- };
1869
-
1870
- var executeSearchWithResetPage = function executeSearchWithResetPage(values) {
1871
- prevValues = values;
1872
- pageState.page = 1;
1873
- handleSearch();
1874
- };
1875
- /******************* table ********************/
1876
-
1877
-
1878
- var createTableItem = function createTableItem(action) {
1879
- var operate = getOperate(action);
1880
-
1881
- var item = _objectSpread2(_objectSpread2({}, lodash.pick(operate, "label", "element", "disabled", "sort", "onClick")), {}, {
1882
- show: !lodash.isUndefined(operate === null || operate === void 0 ? void 0 : operate.show) ? operate === null || operate === void 0 ? void 0 : operate.show : false,
1883
- value: action
1884
- });
1885
-
1886
- if (!item.onClick) {
1887
- return _objectSpread2(_objectSpread2({}, item), {}, {
1888
- onClick: function onClick(record) {
1889
- //默认发送事件
1890
- sendCurdEvent({
1891
- action: action,
1892
- type: exports.CurdSubAction.EMIT,
1893
- record: record
1894
- });
1895
- }
1896
- });
1897
- }
1898
-
1899
- return item;
1900
- }; //table操作栏 items
1901
-
1902
-
1903
- var tableOperateItems = [createTableItem(exports.CurdAction.DETAIL), createTableItem(exports.CurdAction.EDIT), createTableItem(exports.CurdAction.DELETE)]; //新配置的operate item,添加默认发送事件方法
1904
-
1905
- var convertOperateItems = function convertOperateItems(list) {
1906
- return lodash.map(list, function (item) {
1907
- if (!item.onClick) {
1908
- return _objectSpread2(_objectSpread2({}, item), {}, {
1909
- onClick: function onClick(record) {
1910
- sendCurdEvent({
1911
- action: "operate",
1912
- type: item.value,
1913
- record: record
1914
- });
1915
- }
1916
- });
1917
- }
1918
-
1919
- return item;
1920
- });
1921
- };
1922
-
1923
- return function () {
1924
- var _curdState$listData, _slots$start, _props$searchProps, _slots$divide, _slots$divide2, _slots$footerStart, _slots$pagination, _curdState$listData2, _slots$footerEnd, _slots$end;
1925
-
1926
- var tableProps = props.tableProps;
1927
-
1928
- var rewriteTableProps = _objectSpread2(_objectSpread2({
1929
- elementMap: elementMap,
1930
- columns: tableColumns.value
1931
- }, lodash.omit(tableProps, "slots", "operate")), {}, {
1932
- operate: lodash.mergeWith({
1933
- items: tableOperateItems
1934
- }, tableProps === null || tableProps === void 0 ? void 0 : tableProps.operate, function (objValue, srcValue) {
1935
- if (lodash.isArray(objValue) && lodash.isArray(srcValue)) {
1936
- return lodash.concat(objValue, convertOperateItems(srcValue));
1937
- }
1938
- }),
1939
- paginationState: {
1940
- page: pageState.page,
1941
- pageSize: pageState.pageSize
1942
- },
1943
- loading: curdState.listLoading,
1944
- dataSource: (_curdState$listData = curdState.listData) === null || _curdState$listData === void 0 ? void 0 : _curdState$listData.dataSource
1945
- });
1946
-
1947
- var extra = slots.extra ? vue.createVNode("div", {
1948
- "class": "pro-curd-list-extra"
1949
- }, [slots.extra()]) : null;
1950
- 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({
1951
- executeSearchWithResetPage: executeSearchWithResetPage
1952
- }) : vue.createVNode(SearchForm, vue.mergeProps({
1953
- "formElementMap": formElementMap,
1954
- "columns": searchColumns.value
1955
- }, lodash.omit(props.searchProps, "slots"), {
1956
- "onFinish": executeSearchWithResetPage
1957
- }), _objectSpread2({
1958
- "default": function _default() {
1959
- return [props.extraInSearch && extra];
1960
- }
1961
- }, (_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", {
1962
- "class": "pro-curd-list-footer"
1963
- }, [(_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)]);
1964
- };
1965
- }
1966
- });
1967
- };
1968
-
1969
- /**
1970
- * ProFormList ctx
1971
- */
1972
-
1973
- var ProFormListKey = Symbol("pro-form-list");
1974
- var useProFormList = function useProFormList() {
1975
- return vue.inject(ProFormListKey);
1976
- };
1977
- var provideProFormList = function provideProFormList(ctx) {
1978
- vue.provide(ProFormListKey, ctx);
1979
- };
1980
- var FormListProvider = vue.defineComponent({
1981
- props: {
1982
- pathList: {
1983
- type: Array
1984
- }
1985
- },
1986
- setup: function setup(props, _ref) {
1987
- var slots = _ref.slots;
1988
- provideProFormList({
1989
- pathList: props.pathList
1990
- });
1991
- return function () {
1992
- var _slots$default;
1993
-
1994
- return (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots);
1995
- };
1996
- }
1997
- });
1998
-
1999
- var createFormList = function createFormList(FormItem) {
2000
- return vue.defineComponent({
2001
- props: _objectSpread2(_objectSpread2({}, FormItem.props), {}, {
2002
- //每行默认id
2003
- rowKey: {
2004
- type: String,
2005
- "default": "id"
2006
- }
2007
- }),
2008
- setup: function setup(props, _ref2) {
2009
- var slots = _ref2.slots;
2010
-
2011
- var _useProForm = useProForm(),
2012
- formState = _useProForm.formState,
2013
- readonly = _useProForm.readonly;
2014
-
2015
- var formListCtx = useProFormList();
2016
- var nameList = convertPathToList(props.name);
2017
- var path = formListCtx !== null && formListCtx !== void 0 && formListCtx.pathList ? [].concat(_toConsumableArray(formListCtx.pathList), _toConsumableArray(nameList)) : nameList;
2018
-
2019
- var handleAdd = function handleAdd() {
2020
- var targetList = lodash.get(formState, path);
2021
-
2022
- if (!lodash.isArray(targetList)) {
2023
- targetList = [];
2024
- }
2025
-
2026
- targetList.push(_defineProperty({}, props.rowKey, new Date().valueOf()));
2027
- lodash.set(formState, path, targetList);
2028
- };
2029
-
2030
- var handleRemove = function handleRemove(index) {
2031
- var targetList = lodash.get(formState, path);
2032
-
2033
- if (lodash.size(targetList) <= 0) {
2034
- return;
2035
- }
2036
-
2037
- targetList.splice(index, 1);
2038
- };
2039
-
2040
- return function () {
2041
- var _slots$add;
2042
-
2043
- return vue.createVNode(FormItem, lodash.omit(props, "rowKey"), {
2044
- "default": function _default() {
2045
- return [lodash.map(lodash.get(formState, path), function (item, index) {
2046
- var _slots$default2, _slots$itemAdd, _slots$itemMinus;
2047
-
2048
- return vue.createVNode(FormListProvider, {
2049
- "key": item[props.rowKey] || index,
2050
- "pathList": [].concat(_toConsumableArray(path), [index])
2051
- }, {
2052
- "default": function _default() {
2053
- return [vue.createVNode("div", {
2054
- "class": "pro-form-list-item"
2055
- }, [(_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", {
2056
- "class": "pro-form-list-item-add",
2057
- "onClick": handleAdd
2058
- }, [(_slots$itemAdd = slots.itemAdd) === null || _slots$itemAdd === void 0 ? void 0 : _slots$itemAdd.call(slots)]), vue.createVNode("div", {
2059
- "class": "pro-form-list-item-minus",
2060
- "onClick": function onClick() {
2061
- return handleRemove(index);
2062
- }
2063
- }, [(_slots$itemMinus = slots.itemMinus) === null || _slots$itemMinus === void 0 ? void 0 : _slots$itemMinus.call(slots)])])])];
2064
- }
2065
- });
2066
- }), !readonly.value && vue.createVNode("div", {
2067
- "class": "pro-form-list-add",
2068
- "onClick": handleAdd
2069
- }, [(_slots$add = slots.add) === null || _slots$add === void 0 ? void 0 : _slots$add.call(slots)])];
2070
- }
2071
- });
2072
- };
2073
- }
2074
- });
2075
- };
2076
-
2077
- var ProFormKey = Symbol("pro-form");
2078
- var useProForm = function useProForm() {
2079
- return vue.inject(ProFormKey);
2080
- };
2081
-
2082
- var provideProForm = function provideProForm(ctx) {
2083
- vue.provide(ProFormKey, ctx);
2084
- };
2085
-
2086
- var proFormProps = function proFormProps() {
2087
- return {
2088
- /**
2089
- * 同 antd 或 element form中的model
2090
- */
2091
- model: {
2092
- type: Object
2093
- },
2094
-
2095
- /**
2096
- * 子组件是否只读样式
2097
- */
2098
- readonly: {
2099
- type: Boolean,
2100
- "default": undefined
2101
- },
2102
-
2103
- /**
2104
- * FormComponent 根据此项来确定组件是否显示
2105
- * rules 根据rules中方法生成showState对象
2106
- */
2107
- showState: {
2108
- type: Object
2109
- },
2110
- showStateRules: {
2111
- type: Object
2112
- },
2113
-
2114
- /**
2115
- * 是否只读
2116
- */
2117
- readonlyState: {
2118
- type: Object
2119
- },
2120
- readonlyStateRules: {
2121
- type: Object
2122
- },
2123
-
2124
- /**
2125
- * 是否disabled
2126
- */
2127
- disableState: {
2128
- type: Object
2129
- },
2130
- disableStateRules: {
2131
- type: Object
2132
- },
2133
-
2134
- /**
2135
- *
2136
- */
2137
- columns: {
2138
- type: Array
2139
- },
2140
- columnState: {
2141
- type: Object
2142
- },
2143
-
2144
- /**
2145
- * 展示控件集合,readonly模式下使用这些组件渲染
2146
- */
2147
- elementMap: {
2148
- type: Object
2149
- },
2150
-
2151
- /**
2152
- * 录入控件集合
2153
- */
2154
- formElementMap: {
2155
- type: Object
2156
- },
2157
-
2158
- /**
2159
- * 是否启用rules验证
2160
- */
2161
- needRules: {
2162
- type: Boolean,
2163
- "default": true
2164
- },
2165
-
2166
- /**
2167
- * provide传递
2168
- */
2169
- provideExtra: {
2170
- type: Object
2171
- }
2172
- };
2173
- };
2174
-
2175
- var createForm = function createForm(Form, Grid, formMethods) {
2176
- return vue.defineComponent({
2177
- inheritAttrs: false,
2178
- props: _objectSpread2(_objectSpread2(_objectSpread2({}, Form.props), proFormProps()), lodash.omit(Grid.props, "items")),
2179
- setup: function setup(props, _ref) {
2180
- var slots = _ref.slots,
2181
- emit = _ref.emit,
2182
- expose = _ref.expose,
2183
- attrs = _ref.attrs;
2184
- var formState = props.model || vue.reactive({}); //组件状态相关
2185
-
2186
- var showState = props.showState || vue.reactive({});
2187
- var readonlyState = props.readonlyState || vue.reactive({});
2188
- var disableState = props.disableState || vue.reactive({}); //formState改变情况下,更新 showState,readonlyState,disableState状态
2189
-
2190
- hooks.useEffect(function () {
2191
- if (props.showStateRules) {
2192
- lodash.forEach(props.showStateRules, function (fn, key) {
2193
- showState[key] = fn(formState);
2194
- });
2195
- }
2196
-
2197
- if (props.readonlyStateRules) {
2198
- lodash.forEach(props.readonlyStateRules, function (fn, key) {
2199
- readonlyState[key] = fn(formState);
2200
- });
2201
- }
2202
-
2203
- if (props.disableStateRules) {
2204
- lodash.forEach(props.disableStateRules, function (fn, key) {
2205
- disableState[key] = fn(formState);
2206
- });
2207
- }
2208
- }, formState); //readonly
2209
-
2210
- var readonly = vue.computed(function () {
2211
- return props.readonly;
2212
- }); //columns合并
2213
-
2214
- var columns = vue.computed(function () {
2215
- return mergeStateToList(props.columns, props.columnState, function (item) {
2216
- return getColumnFormItemName(item);
2217
- });
2218
- });
2219
-
2220
- var handleFinish = function handleFinish(values) {
2221
- //删除不显示的值再触发事件
2222
- var showValues = getValidValues(values, showState, props.showStateRules);
2223
- emit("finish", showValues, values);
2224
- };
2225
-
2226
- var formRef = vue.ref();
2227
- expose(createExpose(formMethods, formRef));
2228
- provideProForm(_objectSpread2({
2229
- formState: formState,
2230
- showState: showState,
2231
- readonlyState: readonlyState,
2232
- disableState: disableState,
2233
- //
2234
- elementMap: props.elementMap,
2235
- formElementMap: props.formElementMap,
2236
- //
2237
- readonly: readonly,
2238
- //
2239
- columns: columns,
2240
- //
2241
- formRef: formRef
2242
- }, props.provideExtra)); //为了不warning ...
2243
-
2244
- provideProFormList({});
2245
- var invalidKeys = lodash.keys(proFormProps());
2246
- var gridKeys = lodash.keys(lodash.omit(Grid.props, "items"));
2247
- return function () {
2248
- var _slots$start, _slots$default;
2249
-
2250
- return vue.createVNode(Form, vue.mergeProps({
2251
- "ref": formRef
2252
- }, lodash.omit(attrs, "onFinish"), lodash.omit.apply(void 0, [props].concat(_toConsumableArray(invalidKeys), _toConsumableArray(gridKeys), ["onFinish"])), {
2253
- "model": formState,
2254
- "onFinish": handleFinish
2255
- }), _objectSpread2({
2256
- "default": function _default() {
2257
- 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, {
2258
- "row": props.row,
2259
- "col": props.col,
2260
- "items": lodash.map(columns.value, function (item) {
2261
- return {
2262
- rowKey: getColumnFormItemName(item),
2263
- vNode: getFormItemEl(props.formElementMap, item, props.needRules),
2264
- col: lodash.get(item, ["extra", "col"])
2265
- };
2266
- })
2267
- }, null) : lodash.map(columns.value, function (item) {
2268
- return getFormItemEl(props.formElementMap, item, props.needRules);
2269
- })]), (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];
2270
- }
2271
- }, lodash.omit(slots, "default")));
2272
- };
2273
- }
2274
- });
2275
- };
2276
-
2277
- exports.SearchMode = void 0;
2278
-
2279
- (function (SearchMode) {
2280
- SearchMode["AUTO"] = "AUTO";
2281
- SearchMode["MANUAL"] = "MANUAL";
2282
- })(exports.SearchMode || (exports.SearchMode = {}));
2283
-
2284
- var proSearchFormProps = function proSearchFormProps() {
2285
- return {
2286
- /**
2287
- * 需要监听的对象
2288
- */
2289
- model: {
2290
- type: Object
2291
- },
2292
-
2293
- /**
2294
- * 初始化触发 onFinish
2295
- */
2296
- initEmit: {
2297
- type: Boolean,
2298
- "default": true
2299
- },
2300
-
2301
- /**
2302
- * 模式 自动触发或者手动触发 onFinish
2303
- */
2304
- searchMode: {
2305
- type: String,
2306
- "default": exports.SearchMode.AUTO
2307
- },
2308
-
2309
- /**
2310
- * 配置 同ProForm中的columns
2311
- * 可以根据column中valueType计算出默认的debounceKeys
2312
- */
2313
- columns: {
2314
- type: Array
2315
- },
2316
-
2317
- /**
2318
- * 需要debounce处理的字段
2319
- */
2320
- debounceKeys: {
2321
- type: Array
2322
- },
2323
- //默认 valueType 为 text 的控件会debounce处理
2324
- debounceTypes: {
2325
- type: Array,
2326
- "default": ["text"]
2327
- },
2328
- debounceTime: {
2329
- type: Number,
2330
- "default": 800
2331
- }
2332
- };
2333
- };
2334
-
2335
- /**
2336
- * 该组件只是个模式,最终返回null,不做任何渲染,应配合着ProForm的包装类一起使用
2337
- * 针对传入的model(监听对象)做相应的finish(回调)处理
2338
- */
2339
- var createSearchForm = function createSearchForm(Form, Props, formMethods) {
2340
- return vue.defineComponent({
2341
- props: _objectSpread2(_objectSpread2(_objectSpread2({}, Form.props), Props), proSearchFormProps()),
2342
- setup: function setup(props, _ref) {
2343
- var slots = _ref.slots,
2344
- expose = _ref.expose;
2345
- var formState = props.model || vue.reactive({});
2346
- var valueTypeSet = new Set(props.debounceTypes); //根据column valueType 算出默认需要debounce处理的属性集合
2347
-
2348
- var defaultDebounceKeys = lodash.map(lodash.filter(props.columns, function (column) {
2349
- var valueType = getColumnValueType(column); //默认input组件的触发事件需要debounce处理
2350
-
2351
- return valueTypeSet.has(valueType);
2352
- }), function (column) {
2353
- return getColumnFormItemName(column);
2354
- });
2355
- var formRef = vue.ref();
2356
- expose(createExpose(formMethods, formRef));
2357
-
2358
- var handleFinish = function handleFinish() {
2359
- var _formRef$value;
2360
-
2361
- (_formRef$value = formRef.value) === null || _formRef$value === void 0 ? void 0 : _formRef$value.submit();
2362
- };
2363
-
2364
- var debounceFinish = lodash.debounce(function () {
2365
- handleFinish();
2366
- }, props.debounceTime); //初始化
2367
-
2368
- hooks.useEffect(function () {
2369
- if (props.initEmit) {
2370
- handleFinish();
2371
- }
2372
- }, []);
2373
-
2374
- var isDebounceDataChange = function isDebounceDataChange(state, prevState, debounceKeys) {
2375
- return lodash.some(debounceKeys, function (key) {
2376
- return lodash.get(state, key) !== lodash.get(prevState, key);
2377
- });
2378
- }; //监听
2379
-
2380
-
2381
- hooks.useWatch(function (state, prevState) {
2382
- if (props.searchMode !== exports.SearchMode.AUTO) {
2383
- return;
2384
- } //如果改变的值中包括debounceKeys中注册的 延时触发
2385
-
2386
-
2387
- var debounceKeys = lodash.size(props.debounceKeys) > 0 ? props.debounceKeys : defaultDebounceKeys;
2388
-
2389
- if (lodash.size(debounceKeys) > 0 && isDebounceDataChange(state, prevState, debounceKeys)) {
2390
- debounceFinish();
2391
- return;
2392
- }
2393
-
2394
- handleFinish();
2395
- }, function () {
2396
- return lodash.clone(formState);
2397
- });
2398
- var invalidKeys = lodash.keys(lodash.omit(proSearchFormProps(), "columns"));
2399
- return function () {
2400
- return vue.createVNode(Form, vue.mergeProps({
2401
- "ref": formRef
2402
- }, lodash.omit(props, invalidKeys), {
2403
- "model": formState
2404
- }), slots);
2405
- };
2406
- }
2407
- });
2408
- };
2409
-
2410
- var proFormItemProps = function proFormItemProps() {
2411
- return {
2412
- readonly: {
2413
- type: Boolean,
2414
- "default": undefined
2415
- },
2416
- fieldProps: {
2417
- type: Object
2418
- },
2419
- showProps: {
2420
- type: Object
2421
- },
2422
- slots: {
2423
- type: Object
2424
- }
2425
- };
2426
- };
2427
-
2428
- var createFormItemCompFn = function createFormItemCompFn(FormItem, convertInputCompProps) {
2429
- return function (_ref) {
2430
- var InputComp = _ref.InputComp,
2431
- valueType = _ref.valueType,
2432
- name = _ref.name;
2433
- return vue.defineComponent({
2434
- name: name,
2435
- props: _objectSpread2(_objectSpread2({}, FormItem.props), proFormItemProps()),
2436
- setup: function setup(props, _ref2) {
2437
- var slots = _ref2.slots;
2438
-
2439
- var _useProForm = useProForm(),
2440
- formState = _useProForm.formState,
2441
- showState = _useProForm.showState,
2442
- readonlyState = _useProForm.readonlyState,
2443
- disableState = _useProForm.disableState,
2444
- formReadonly = _useProForm.readonly,
2445
- elementMap = _useProForm.elementMap;
2446
-
2447
- var formListCtx = useProFormList(); //优先级 props.readonly > readonlyState > formContext.readonly
2448
-
2449
- var readonly = vue.computed(function () {
2450
- if (lodash.isBoolean(props.readonly)) {
2451
- return props.readonly;
2452
- } else if (lodash.isBoolean(readonlyState[props.name])) {
2453
- return readonlyState[props.name];
2454
- }
2455
-
2456
- return formReadonly.value;
2457
- });
2458
- var nameList = convertPathToList(props.name);
2459
- var path = formListCtx !== null && formListCtx !== void 0 && formListCtx.pathList ? [].concat(_toConsumableArray(formListCtx.pathList), _toConsumableArray(nameList)) : nameList;
2460
-
2461
- var setValue = function setValue(v) {
2462
- lodash.set(formState, path, v);
2463
- };
2464
-
2465
- var invalidKeys = lodash.keys(proFormItemProps());
2466
- return function () {
2467
- var show = lodash.get(showState, path);
2468
-
2469
- if (lodash.isBoolean(show) && !show) {
2470
- return null;
2471
- }
2472
-
2473
- var value = lodash.get(formState, path); //valueType对应的展示组件
2474
-
2475
- var ShowComp = lodash.get(elementMap, valueType);
2476
- return vue.createVNode(FormItem, vue.mergeProps(lodash.omit.apply(void 0, [props].concat(_toConsumableArray(invalidKeys), ["name", "slots"])), {
2477
- "name": path
2478
- }), _objectSpread2({
2479
- "default": function _default() {
2480
- return [readonly.value ? vue.createVNode(vue.Fragment, null, [ShowComp ? vue.createVNode(ShowComp, vue.mergeProps({
2481
- "value": value
2482
- }, props.fieldProps, {
2483
- "showProps": props.showProps
2484
- }), slots) : vue.createVNode("span", null, [value])]) : vue.createVNode(InputComp, vue.mergeProps(convertInputCompProps(value, setValue, lodash.get(disableState, path)), props.fieldProps), slots)];
2485
- }
2486
- }, props.slots));
2487
- };
2488
- }
2489
- });
2490
- };
2491
- };
2492
-
2493
- var ProTableKey = Symbol("pro-table");
2494
- var useProTable = function useProTable() {
2495
- return vue.inject(ProTableKey);
2496
- };
2497
-
2498
- var provideProTable = function provideProTable(ctx) {
2499
- vue.provide(ProTableKey, ctx);
2500
- };
2501
-
2502
- var proTableProps = function proTableProps() {
2503
- return {
2504
- //操作栏
2505
- operate: {
2506
- type: Object
2507
- },
2508
- //默认空字符串
2509
- columnEmptyText: {
2510
- type: String
2511
- },
2512
-
2513
- /**
2514
- * 公共column,会merge到columns item中
2515
- */
2516
- column: {
2517
- type: Object
2518
- },
2519
- //
2520
- columns: {
2521
- type: Array
2522
- },
2523
- columnState: {
2524
- type: Object
2525
- },
2526
-
2527
- /**
2528
- * 展示控件集合,readonly模式下使用这些组件渲染
2529
- */
2530
- elementMap: {
2531
- type: Object
2532
- },
2533
-
2534
- /**
2535
- * 序号
2536
- */
2537
- serialNumber: {
2538
- type: Boolean
2539
- },
2540
-
2541
- /**
2542
- * 分页
2543
- */
2544
- paginationState: {
2545
- type: Object
2546
- },
2547
-
2548
- /**
2549
- * provide传递
2550
- */
2551
- provideExtra: {
2552
- type: Object
2553
- }
2554
- };
2555
- };
2556
-
2557
- var createTable = function createTable(Table, Props, tableMethods) {
2558
- return vue.defineComponent({
2559
- props: _objectSpread2(_objectSpread2(_objectSpread2({}, Table.props), Props), proTableProps()),
2560
- setup: function setup(props, _ref) {
2561
- var slots = _ref.slots,
2562
- expose = _ref.expose;
2563
-
2564
- var createNumberColumn = function createNumberColumn() {
2565
- return _objectSpread2(_objectSpread2({
2566
- title: "序号",
2567
- dataIndex: "serialNumber",
2568
- width: 80
2569
- }, props.column), {}, {
2570
- customRender: function customRender(_ref2) {
2571
- var _props$paginationStat, _props$paginationStat2;
2572
-
2573
- var index = _ref2.index;
2574
-
2575
- 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) {
2576
- return props.paginationState.pageSize * (props.paginationState.page - 1) + index + 1;
2577
- }
2578
-
2579
- return index + 1;
2580
- }
2581
- });
2582
- };
2583
-
2584
- var createOperateColumn = function createOperateColumn() {
2585
- var operate = props.operate; //将itemState补充的信息拼到item中
2586
-
2587
- var items = lodash.map(operate.items, function (i) {
2588
- return _objectSpread2(_objectSpread2({}, i), lodash.get(operate.itemState, i.value));
2589
- }); //排序
2590
-
2591
- var sortedItems = lodash.sortBy(items, function (item) {
2592
- return item.sort;
2593
- });
2594
- return _objectSpread2(_objectSpread2(_objectSpread2({}, props.column), {}, {
2595
- title: "操作",
2596
- dataIndex: "operate",
2597
- fixed: "right"
2598
- }, operate.column), {}, {
2599
- customRender: function customRender(_ref3) {
2600
- var record = _ref3.record;
2601
- var showItems = lodash.filter(sortedItems, function (item) {
2602
- if (item.show && lodash.isFunction(item.show)) {
2603
- return item.show(record);
2604
- }
2605
-
2606
- if (item.show === false) {
2607
- return false;
2608
- }
2609
-
2610
- return true;
2611
- });
2612
- return vue.createVNode("div", {
2613
- "class": "pro-table-operate"
2614
- }, [lodash.map(showItems, function (item) {
2615
- //自定义
2616
- if (lodash.isFunction(item.element)) {
2617
- return item.element(record, item);
2618
- }
2619
-
2620
- return vue.createVNode("div", {
2621
- "class": "pro-table-operate-item",
2622
- "key": item.value,
2623
- "onClick": function onClick() {
2624
- var _item$onClick;
2625
-
2626
- (_item$onClick = item.onClick) === null || _item$onClick === void 0 ? void 0 : _item$onClick.call(item, record);
2627
- }
2628
- }, [item.label]);
2629
- })]);
2630
- }
2631
- });
2632
- };
2633
-
2634
- var columns = vue.computed(function () {
2635
- var mergeColumns = mergeStateToList(props.columns, props.columnState, function (item) {
2636
- return item.dataIndex;
2637
- }); //根据valueType选择对应的展示组件
2638
-
2639
- var columns = lodash.map(mergeColumns, function (item) {
2640
- //merge公共item
2641
- var nextItem = _objectSpread2(_objectSpread2({}, props.column), item);
2642
-
2643
- if (!item.customRender) {
2644
- nextItem.customRender = function (_ref4) {
2645
- var text = _ref4.text;
2646
- var vn = getItemEl(props.elementMap, _objectSpread2(_objectSpread2({}, item), {}, {
2647
- showProps: _objectSpread2(_objectSpread2({}, item.showProps), {}, {
2648
- content: props.columnEmptyText
2649
- })
2650
- }), text); //如果找不到注册的组件,使用当前值 及 columnEmptyText
2651
-
2652
- return vn || text || props.columnEmptyText;
2653
- };
2654
- }
2655
-
2656
- return nextItem;
2657
- }); //处理序号
2658
-
2659
- if (props.serialNumber) {
2660
- columns.unshift(createNumberColumn());
2661
- } //处理operate
2662
-
2663
-
2664
- if (props.operate && props.operate.items && lodash.some(props.operate.items, function (item) {
2665
- return item.show;
2666
- })) {
2667
- columns.push(createOperateColumn());
2668
- }
2669
-
2670
- return columns;
2671
- });
2672
- var tableRef = vue.ref();
2673
- provideProTable(_objectSpread2({
2674
- columns: columns,
2675
- tableRef: tableRef
2676
- }, props.provideExtra));
2677
- expose(createExpose(tableMethods || [], tableRef));
2678
- var invalidKeys = lodash.keys(proTableProps());
2679
- return function () {
2680
- return vue.createVNode(Table, vue.mergeProps({
2681
- "ref": tableRef
2682
- }, lodash.omit(props, invalidKeys), {
2683
- "columns": columns.value
2684
- }), slots);
2685
- };
2686
- }
2687
- });
2688
- };
2689
-
2690
- exports.CurdMethods = CurdMethods;
2691
- exports.ProCurd = ProCurd;
2692
- exports.ProModalCurd = ProModalCurd;
2693
- exports.ProModule = ProModule;
2694
- exports.ProPageCurd = ProPageCurd;
2695
- exports.RequestAction = RequestAction;
2696
- exports.Wrapper = Wrapper;
2697
- exports.convertPathToList = convertPathToList;
2698
- exports.createCurdDesc = createCurdDesc;
2699
- exports.createCurdForm = createCurdForm;
2700
- exports.createCurdList = createCurdList;
2701
- exports.createExpose = createExpose;
2702
- exports.createForm = createForm;
2703
- exports.createFormItemCompFn = createFormItemCompFn;
2704
- exports.createFormList = createFormList;
2705
- exports.createGrid = createGrid;
2706
- exports.createSearchForm = createSearchForm;
2707
- exports.createTable = createTable;
2708
- exports.defaultPage = defaultPage;
2709
- exports.getColumnFormItemName = getColumnFormItemName;
2710
- exports.getColumnValueType = getColumnValueType;
2711
- exports.getFirstPropName = getFirstPropName;
2712
- exports.getFormItemEl = getFormItemEl;
2713
- exports.getItemEl = getItemEl;
2714
- exports.getValidValues = getValidValues;
2715
- exports.mergeStateToList = mergeStateToList;
2716
- exports.provideProCurd = provideProCurd;
2717
- exports.provideProFormList = provideProFormList;
2718
- exports.provideProModule = provideProModule;
2719
- exports.renderElement = renderElement;
2720
- exports.renderElements = renderElements;
2721
- exports.useComposeRequestActor = useComposeRequestActor;
2722
- exports.useDoneRequestActor = useDoneRequestActor;
2723
- exports.useFailedRequestActor = useFailedRequestActor;
2724
- exports.useModuleEvent = useModuleEvent;
2725
- exports.useProCurd = useProCurd;
2726
- exports.useProForm = useProForm;
2727
- exports.useProFormList = useProFormList;
2728
- exports.useProModule = useProModule;
2729
- exports.useProTable = useProTable;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("vue"),t=require("lodash"),M=require("rxjs"),k=require("@vue-start/hooks"),w=require("@vue-start/request"),se=require("vue-router");function Le(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!n.isVNode(e)}const Oe=()=>({row:{type:Object,default:void 0},col:{type:Object},items:{type:Array}}),Me=(e,a)=>n.defineComponent({props:{...Oe()},setup:c=>()=>{let r;return n.createVNode(e,c.row,Le(r=t.map(c.items,u=>n.createVNode(a,n.mergeProps({key:u.rowKey},c.col,u.col),{default:()=>[u.vNode]})))?r:{default:()=>[r]})}}),pe=e=>(a,c)=>{const{requestSubject$:r}=w.useRequestProvide(),u=new Set(t.map(a,o=>t.isString(o)?o:o.name));k.useEffect(()=>{const o=r.pipe(M.filter(e),M.tap(f=>{u.has(f.name)&&c(f)})).subscribe();return()=>{o.unsubscribe()}},[])},Fe=pe(w.isDoneRequestActor),Re=pe(w.isFailedRequestActor),ye=(e,a,c)=>{const{requestSubject$:r,dispatchRequest:u}=w.useRequestProvide(),o=new Set(t.map(e,y=>t.isString(y)?y:y.name)),f={};k.useEffect(()=>{const y=M.merge(r.pipe(M.filter(w.isDoneRequestActor),M.tap(g=>{var E,s;o.has(g.name)&&((E=a.onSuccess)==null||E.call(a,g),(s=a.onFinish)==null||s.call(a,g),f[g.name]=void 0)})),r.pipe(M.filter(w.isFailedRequestActor),M.tap(g=>{var E,s;o.has(g.name)&&((E=a.onFailed)==null||E.call(a,g),(s=a.onFinish)==null||s.call(a,g),f[g.name]=void 0)}))).subscribe();return()=>{y.unsubscribe(),c&&t.forEach(f,g=>{g&&u({...g,stage:"CANCEL"})})}},[])},ee=e=>e.formValueType||e.valueType||"text",x=e=>{var a;return((a=e.formItemProps)==null?void 0:a.name)||e.dataIndex},_=(e,a,c=!0)=>{var y;const r=ee(a),u=t.get(e,r);if(!u)return null;const o=x(a),f=c?a.formItemProps:t.omit(a.formItemProps,"rules");return n.h(u,{key:o,name:o,label:a.title,...f,fieldProps:t.omit(a.formFieldProps,"slots"),showProps:a.showProps},(y=a.formFieldProps)==null?void 0:y.slots)},te=(e,a,c)=>{var o;const r=a.valueType||"text",u=t.get(e,r);return u?n.h(u,{...t.omit(a.formFieldProps,"slots"),showProps:a.showProps,value:c},(o=a.formFieldProps)==null?void 0:o.slots):null},H=(e,a)=>t.map(a,c=>K(e,c)),ge=(e,a)=>{var u;const c=a.elementProps,r={...a.elementProps};return t.forEach((u=a.highConfig$)==null?void 0:u.registerPropsTrans,o=>{const f=t.get(c,o.name);if(!(!f||n.isVNode(f))){if(t.isArray(f)){if(t.some(f,y=>n.isVNode(y)))return;t.set(r,o.name,H(e,f));return}!f.elementType||(o.isFun?t.set(r,o.name,(...y)=>{const g=o.needParams?{...f.elementProps,params$:y}:f.elementProps;return K(e,{...f,elementProps:g})}):t.set(r,o.name,K(e,f)))}}),r},Ee=(e,a)=>{const c=t.size(a.children)>0?H(e,a.children):void 0,r=a.childrenSlotName||"default",u=t.omit(a.slots,c?r:"");return t.forEach(t.keys(u),o=>{const f=u[o];f&&!t.isFunction(f)&&f.elementType&&(u[o]=(...y)=>{const g=f.needParams?{...f.elementProps,params$:y}:f.elementProps;return K(e,{...f,elementProps:g})})}),{[r]:c?()=>c:void 0,...u}},K=(e,a)=>{const c=t.get(e,a.elementType)||a.elementType;if(a.highConfig$)return n.h(he,{key:a.elementId,elementMap:e,elementConfig:a});const r=Ee(e,a),u=ge(e,a);return n.h(c,{key:a.elementId,...u},r)},Se=e=>t.isArray(e)?t.head(e):t.isString(e)&&e.indexOf(".")>0?e.substring(0,e.indexOf(".")):e,he=n.defineComponent({props:{elementMap:{type:Object},elementConfig:{type:Object}},setup:e=>{const{state:a,sendEvent:c}=$(),{elementMap:r,elementConfig:u}=e,o=u.highConfig$,f=ge(r,u),y=t.reduce(o.registerEventList,(d,i)=>({...d,[i.name]:(...m)=>{c({type:i.sendEventName||u.elementId,payload:m})}}),{}),g=n.computed(()=>{if(!o.registerStateList||t.size(o.registerStateList)<=0)return;const d={...f},i=t.map(o.registerStateList,m=>{const l=m.mapName||m.name,p=t.get(a,m.name);return t.set(d,l,p),Se(l)});return t.pick(d,i)}),E=t.get(r,u.elementType)||u.elementType,s=Ee(r,u);return()=>t.get(g.value,"show$")===!1?null:n.h(E,{key:u.elementId,...f,...t.omit(g.value,"show$"),...y},s)}}),Pe=Symbol("pro-module"),$=()=>n.inject(Pe),ve=e=>{n.provide(Pe,e)},U={Success:"request-success$",Fail:"request-fail$"},je=()=>({state:{type:Object},elementMap:{type:Object},elementConfigs:{type:Array},requests:{type:Array}}),W=n.defineComponent({props:{...je()},setup:(e,{slots:a,expose:c})=>{const r=i=>t.isArray(i)?H(e.elementMap,i):K(e.elementMap,i),u=new M.Subject,o=i=>{u.next(i)},f=e.state||n.reactive({}),y=i=>{const m=f[i.type],l=t.isFunction(i.payload)?i.payload(m):i.payload;if(t.isObject(m)){k.setReactiveValue(f[i.type],l);return}f[i.type]=l},{dispatchRequest:g}=w.useRequestProvide(),E=t.reduce(e.requests,(i,m)=>{var l;return{...i,[(l=m.actor)==null?void 0:l.name]:m}},{}),s=t.reduce(e.requests,(i,m)=>({...i,[m.action]:m}),{}),d=(i,...m)=>{const l=t.get(E,i)||t.get(s,i);if(!l)return;let p;l.convertParams?p=l.convertParams(...m):p=t.get(m,0),l.loadingName&&y({type:l.loadingName,payload:!0}),g(l.actor,p)};return ye(t.keys(E),{onSuccess:i=>{var l,p;const m=t.get(E,i.name);if(m!=null&&m.stateName){const S=m.convertData?m.convertData(i):(l=i.res)==null?void 0:l.data;y({type:m.stateName,payload:S})}o({type:U.Success,payload:{actor:i,requestOpts:m}}),(p=m.onSuccess)==null||p.call(m,i)},onFailed:i=>{var l;const m=t.get(E,i.name);o({type:U.Fail,payload:{actor:i,requestOpts:m}}),(l=m.onFailed)==null||l.call(m,i)},onFinish:i=>{const m=t.get(E,[i.name,"loadingName"]);m&&y({type:m,payload:!1})}},!0),ve({elementMap:e.elementMap,subject$:u,sendEvent:o,state:f,dispatch:y,requests:e.requests,sendRequest:d}),c({sendEvent:o,sendRequest:d}),()=>{var i;return n.createVNode(n.Fragment,null,[t.size(e.elementConfigs)>0&&r(e.elementConfigs),(i=a.default)==null?void 0:i.call(a)])}}}),J=e=>{const{subject$:a}=$();k.useEffect(()=>{const c=a.subscribe({next:r=>{e(r)}});return()=>c.unsubscribe()},[])},be=Symbol("pro-curd"),z=()=>n.inject(be),Ce=e=>n.provide(be,e);var b=(e=>(e.LIST="LIST",e.DETAIL="DETAIL",e.ADD="ADD",e.EDIT="EDIT",e.DELETE="DELETE",e))(b||{}),T=(e=>(e.EMIT="EMIT",e.EXECUTE="EXECUTE",e.PAGE="PAGE",e.SUCCESS="SUCCESS",e.FAIL="FAIL",e))(T||{}),L=(e=>(e.ADD="ADD",e.EDIT="EDIT",e.DETAIL="DETAIL",e))(L||{}),B=(e=>(e.NORMAL="NORMAL",e.CONTINUE="CONTINUE",e))(B||{});const Te=(e,a,c)=>{if(a){const r=t.filter(t.keys(a),u=>!a[u]);return t.omit(e,r)}if(c){const r=t.filter(t.keys(c),u=>!c[u](e));return t.omit(e,r)}return e},re=e=>{if(!!e)return t.isArray(e)?e:e&&t.isString(e)&&e.indexOf(".")>0?t.split(e,"."):[e]},Q=(e,a,c)=>!a||!c?e:t.map(e,r=>{const u=t.isFunction(c)?c(r):c,o=t.get(a,u);return!o||t.isEmpty(o)||t.isFunction(o)||!t.isObject(o)?r:t.mergeWith(r,o,(f,y)=>{if(t.isArray(f)||t.isArray(y))return y})}),V=(e,a)=>t.reduce(e,(c,r)=>({...c,[r]:(...u)=>{var o,f;return(f=(o=a.value)==null?void 0:o[r])==null?void 0:f.call(o,...u)}}),{}),De={page:1,pageSize:10},we=()=>({columns:{type:Array},columnState:{type:Object},formElementMap:{type:Object},rowKey:{type:String,default:"id"},operates:{type:Array},listProps:{type:Object},formProps:{type:Object},descProps:{type:Object},modalProps:{type:Object}}),ne=["sendCurdEvent","refreshList","sendEvent","sendRequest"],de=n.defineComponent({props:{...we()},setup:(e,{slots:a,expose:c})=>{const{elementMap:r,state:u,sendEvent:o,sendRequest:f}=$(),y=n.computed(()=>Q(e.columns,e.columnState,C=>x(C))),g=(C,N=!0)=>_(e.formElementMap,C,N),E=(C,N)=>te(r,C,N),s=(C,N)=>{const q=t.filter(y.value,A=>{const I=t.get(A,["extra",C])||t.get(A,C);return N?I!==!1:I});return t.sortBy(q,A=>t.get(A,["extra",`${C}Sort`])||t.get(A,`${C}Sort`))},d=n.computed(()=>s("form",!0)),i=n.computed(()=>s("detail",!0)),m=n.computed(()=>s("table",!0)),l=n.computed(()=>s("search"));let p;const S=C=>{f(b.LIST,{...p,...C})},h=C=>{o({type:C.action,payload:t.omit(C,"action","source"),source:C.source})};J(({type:C,payload:N,source:q})=>{if(q)return;let A=C,I=N==null?void 0:N.type;A===U.Success&&(A=t.get(N,["requestOpts","action"]),I=T.SUCCESS);const{values:j,record:X}=N;switch(A){case b.LIST:I===T.EMIT&&(p=j,S());return;case b.ADD:I===T.EXECUTE&&f(b.ADD,j,u.detailData);return;case b.EDIT:I===T.EXECUTE&&f(b.EDIT,j,u.detailData);return;case b.DELETE:I===T.EMIT?f(b.DELETE,X,e.rowKey):I===T.SUCCESS&&S();return}A&&C===T.EXECUTE&&f(A,j)});const P=t.reduce(e.operates,(C,N)=>({...C,[N.action]:N}),{}),v=C=>t.get(P,C),D=n.computed(()=>e.listProps),O=n.computed(()=>e.formProps),F=n.computed(()=>e.descProps),R=n.computed(()=>e.modalProps);return Ce({columns:y,getSignColumns:s,getFormItemVNode:g,getItemVNode:E,elementMap:r,formElementMap:e.formElementMap,rowKey:e.rowKey,curdState:u,formColumns:d,descColumns:i,tableColumns:m,searchColumns:l,sendCurdEvent:h,operates:e.operates,getOperate:v,refreshList:S,listProps:D,formProps:O,descProps:F,modalProps:R}),c({sendCurdEvent:h,refreshList:S}),()=>{var C;return(C=a.default)==null?void 0:C.call(a)}}}),G=n.defineComponent({props:{...t.omit(W.props,"state","requests"),...de.props,curdState:{type:Object}},setup:(e,{slots:a,expose:c})=>{const r=n.ref(),u=n.ref(),o=e.curdState||n.reactive({detailData:{}}),f={[b.LIST]:{convertParams:s=>s,convertData:s=>{var d;return(d=s.res)==null?void 0:d.data},loadingName:"listLoading",stateName:"listData"},[b.DETAIL]:{convertParams:(s,d)=>t.pick(s,d),convertData:s=>{var d;return(d=s.res)==null?void 0:d.data},loadingName:"detailLoading",stateName:"detailData",label:"\u8BE6\u60C5"},[b.ADD]:{convertParams:(s,d)=>({body:{...d,...s}}),loadingName:"operateLoading",label:"\u6DFB\u52A0"},[b.EDIT]:{convertParams:(s,d)=>({body:{...d,...s}}),loadingName:"operateLoading",label:"\u7F16\u8F91"},[b.DELETE]:{convertParams:(s,d)=>t.pick(s,d),label:"\u5220\u9664"}},y=t.map(e.operates,s=>({...t.get(f,s.action),...s})),g=t.filter(y,s=>s.actor),E=t.keys(t.omit(W.props,"state","requests"));return c({sendCurdEvent:s=>{var d;(d=u.value)==null||d.sendCurdEvent(s)},refreshList:s=>{var d;(d=u.value)==null||d.refreshList(s)},sendEvent:s=>{var d;(d=r.value)==null||d.sendEvent(s)},sendRequest:(s,...d)=>{var i;(i=r.value)==null||i.sendRequest(s,...d)}}),()=>n.createVNode(W,n.mergeProps({ref:r},t.pick(e,E),{state:o,requests:g}),{default:()=>[n.createVNode(de,n.mergeProps({ref:u},t.omit(e,...E,"curdState","operates"),{operates:y}),a)]})}}),ke=()=>({defaultAddRecord:{type:Object}}),Y=n.defineComponent({props:{...ke()},setup:e=>{var m;const{dispatch:a,sendRequest:c}=$(),{rowKey:r,curdState:u,listProps:o,getOperate:f,refreshList:y}=z(),g=(m=o==null?void 0:o.value)==null?void 0:m.pageState,E=l=>{const p=f(b.DETAIL);p!=null&&p.actor?c(b.DETAIL,l,r):a({type:"detailData",payload:t.cloneDeep(l)})},s=(l,{record:p})=>{l===T.EMIT&&(a({type:"mode",payload:L.DETAIL}),E(p))},d=l=>{l===T.EMIT?(a({type:"mode",payload:L.ADD}),a({type:"detailData",payload:e.defaultAddRecord||{}})):l===T.SUCCESS&&(g&&(g.page=1),y(),u.addAction===B.CONTINUE?a({type:"detailData",payload:e.defaultAddRecord||{}}):a({type:"mode",payload:void 0}))},i=(l,{record:p})=>{l===T.EMIT?(a({type:"mode",payload:L.EDIT}),E(p)):l===T.SUCCESS&&(a({type:"mode",payload:void 0}),y())};return J(({type:l,payload:p,source:S})=>{if(S)return;let h=l,P=p==null?void 0:p.type;const v=p==null?void 0:p.record;switch(h===U.Success&&(h=t.get(p,["requestOpts","action"]),P=T.SUCCESS),h){case b.DETAIL:s(P,{record:v});break;case b.ADD:d(P);break;case b.EDIT:i(P,{record:v});break}}),()=>null}}),Ve=n.defineComponent({props:{...G.props,...Y.props},setup:(e,{slots:a,expose:c})=>{const r=n.ref();c(V(ne,r));const u=t.keys(Y.props);return()=>n.createVNode(G,n.mergeProps({ref:r},t.omit(e,u)),{default:()=>{var o;return[n.createVNode(Y,t.pick(e,u),null),(o=a.default)==null?void 0:o.call(a)]}})}}),qe=()=>({defaultAddRecord:{type:Object},routeBack:{type:Function}}),Z=n.defineComponent({props:{...qe()},setup:e=>{const a=se.useRouter(),c=se.useRoute(),{dispatch:r,sendRequest:u}=$(),{rowKey:o,curdState:f}=z(),y=d=>{d===T.PAGE&&(r({type:"mode",payload:void 0}),r({type:"detailData",payload:{}}),r({type:"detailLoading",payload:!1}),r({type:"addAction",payload:void 0}))},g=(d,{record:i})=>{d===T.EMIT?a.push({path:`${c.path}/detail`,query:t.pick(i,o)}):d===T.PAGE&&(r({type:"mode",payload:L.DETAIL}),u(b.DETAIL,c.query,o))},E=d=>{d===T.EMIT?a.push({path:`${c.path}/add`}):d===T.PAGE?(r({type:"mode",payload:L.ADD}),r({type:"detailData",payload:e.defaultAddRecord||{}})):d===T.SUCCESS&&(f.addAction===B.CONTINUE?r({type:"detailData",payload:e.defaultAddRecord||{}}):e.routeBack?e.routeBack(b.ADD):a.go(-1))},s=(d,{record:i})=>{d===T.EMIT?a.push({path:`${c.path}/edit`,query:t.pick(i,o)}):d===T.PAGE?(r({type:"mode",payload:L.EDIT}),u(b.DETAIL,c.query,o)):d===T.SUCCESS&&(e.routeBack?e.routeBack(b.EDIT):a.go(-1))};return J(({type:d,payload:i,source:m})=>{if(m)return;let l=d,p=i==null?void 0:i.type;const S=i==null?void 0:i.record;switch(l===U.Success&&(l=t.get(i,["requestOpts","action"]),p=T.SUCCESS),l){case b.LIST:y(p);break;case b.DETAIL:g(p,{record:S});break;case b.ADD:E(p);break;case b.EDIT:s(p,{record:S});break}}),()=>null}}),xe=n.defineComponent({props:{...G.props,...Z.props},setup:(e,{slots:a,expose:c})=>{const r=n.ref();c(V(ne,r));const u=t.keys(Z.props);return()=>n.createVNode(G,n.mergeProps({ref:r},t.omit(e,u)),{default:()=>{var o;return[n.createVNode(Z,t.pick(e,u),null),(o=a.default)==null?void 0:o.call(a)]}})}});function Ke(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!n.isVNode(e)}const Ue=(e,a)=>n.defineComponent({props:{...e.props,renderItem:{type:Function},signName:{type:String}},setup:(c,{slots:r})=>{const{getItemVNode:u,curdState:o,descColumns:f,getSignColumns:y}=z(),g=n.computed(()=>{const E=c.signName?y(c.signName):f.value;return t.map(E,s=>{var l;let d;const i=(l=c.renderItem)==null?void 0:l.call(c,s);if(i)return i;const m=t.get(o.detailData,s.dataIndex);return n.createVNode(a,n.mergeProps({key:s.dataIndex,label:s.title},t.get(s.extra,"desc")),Ke(d=u(s,m))?d:{default:()=>[d]})})});return()=>n.createVNode(e,c,{default:()=>{var E,s;return[(E=r.start)==null?void 0:E.call(r),g.value,(s=r.default)==null?void 0:s.call(r)]},...t.omit(r,"default","start")})}}),Be=()=>({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}}),$e=(e,a,c,r)=>n.defineComponent({inheritAttrs:!1,props:{...e.props,...Be()},setup:(u,{slots:o,attrs:f,expose:y})=>{const{elementMap:g,formElementMap:E,curdState:s,formColumns:d,getSignColumns:i,sendCurdEvent:m}=z(),l=n.ref(),p=n.computed(()=>u.signName?i(u.signName):d.value),S=(v,D)=>{if(f.onFinish){f.onFinish(v,D);return}s.mode===L.EDIT?m({action:b.EDIT,type:T.EXECUTE,values:v}):m({action:b.ADD,type:T.EXECUTE,values:v})},h=()=>{var v;s.addAction=B.NORMAL,(v=l.value)==null||v.submit()},P=()=>{var v;s.addAction=B.CONTINUE,(v=l.value)==null||v.submit()};return y(V(r,l)),()=>n.createVNode(e,n.mergeProps({ref:l},t.omit(f,"onFinish"),u,{elementMap:u.elementMap||g,formElementMap:u.formElementMap||E,columns:u.columns||p.value,model:u.model||s[u.modelName],readonly:s.mode===L.DETAIL,onFinish:S},c==null?void 0:c(s)),{default:()=>{var v,D,O,F,R;return[(v=o.divide)==null?void 0:v.call(o),u.operateBar&&n.createVNode("div",{class:"pro-curd-form-operate"},[(D=o.operateStart)==null?void 0:D.call(o),s.mode!==L.DETAIL&&n.createVNode(a,n.mergeProps({onClick:h},u.okButtonProps,{loading:s.operateLoading}),{default:()=>[u.okText]}),(O=o.operateCenter)==null?void 0:O.call(o),u.showContinueAdd&&s.mode===L.ADD&&n.createVNode(a,n.mergeProps({onClick:P},u.continueButtonProps,{loading:s.operateLoading}),{default:()=>[u.continueText]}),(F=o.operateEnd)==null?void 0:F.call(o)]),(R=o.default)==null?void 0:R.call(o)]},...t.omit(o,"default","divide","operateStart","operateCenter","operateEnd")})}}),ze=()=>({extraInSearch:{type:Boolean,default:void 0},searchProps:{type:Object},tableProps:{type:Object},paginationProps:{type:Object},showPagination:{type:Boolean,default:!0},pageState:{type:Object}}),Ge=(e,a)=>n.defineComponent({props:{...ze()},setup:(c,{slots:r})=>{const{elementMap:u,formElementMap:o,curdState:f,searchColumns:y,tableColumns:g,sendCurdEvent:E,operates:s}=z(),d=c.pageState||n.reactive({...De});let i;const m=()=>{E({action:b.LIST,type:T.EMIT,values:{...i,...d}})},l=h=>{i=h,d.page=1,m()},p=t.map(t.filter(s,h=>{const P=h.action;return P===b.DETAIL||P===b.EDIT||P===b.DELETE||h.tableOperate}),h=>{const P={...t.pick(h,"label","element","disabled","sort","onClick"),show:t.isUndefined(h==null?void 0:h.show)?!1:h==null?void 0:h.show,value:h.action};return P.onClick||(P.onClick=v=>{E({action:h.action,type:T.EMIT,record:v})}),P}),S=h=>t.map(h,P=>P.onClick?P:{...P,onClick:v=>{E({action:"operate",type:P.value,record:v})}});return()=>{var D,O,F,R,C,N,q,A,I,j;const h=c.tableProps,P={elementMap:u,columns:g.value,...t.omit(h,"slots","operate"),operate:t.mergeWith({items:p},h==null?void 0:h.operate,(X,ue)=>{if(t.isArray(X)&&t.isArray(ue))return t.concat(X,S(ue))}),paginationState:{page:d.page,pageSize:d.pageSize},loading:f.listLoading,dataSource:(D=f.listData)==null?void 0:D.dataSource},v=r.extra?n.createVNode("div",{class:"pro-curd-list-extra"},[r.extra()]):null;return n.createVNode(n.Fragment,null,[(O=r.start)==null?void 0:O.call(r),r.search?r.search({executeSearchWithResetPage:l}):n.createVNode(e,n.mergeProps({formElementMap:o,columns:y.value},t.omit(c.searchProps,"slots"),{onFinish:l}),{default:()=>[c.extraInSearch&&v],...(F=c.searchProps)==null?void 0:F.slots}),(R=r.divide)==null?void 0:R.call(r),!c.extraInSearch&&v,r.table?r.table(P):n.createVNode(a,P,h==null?void 0:h.slots),(C=r.divide2)==null?void 0:C.call(r),c.showPagination&&n.createVNode("div",{class:"pro-curd-list-footer"},[(N=r.footerStart)==null?void 0:N.call(r),(A=r.pagination)==null?void 0:A.call(r,d,(q=f.listData)==null?void 0:q.total,m),(I=r.footerEnd)==null?void 0:I.call(r)]),(j=r.end)==null?void 0:j.call(r)])}}}),Ne=Symbol("pro-form-list"),ae=()=>n.inject(Ne),oe=e=>{n.provide(Ne,e)},Xe=n.defineComponent({props:{pathList:{type:Array}},setup:(e,{slots:a})=>(oe({pathList:e.pathList}),()=>{var c;return(c=a.default)==null?void 0:c.call(a)})}),We=e=>n.defineComponent({props:{...e.props,rowKey:{type:String,default:"id"}},setup:(a,{slots:c})=>{const{formState:r,readonly:u}=ce(),o=ae(),f=re(a.name),y=o!=null&&o.pathList?[...o.pathList,...f]:f,g=()=>{let s=t.get(r,y);t.isArray(s)||(s=[]),s.push({[a.rowKey]:new Date().valueOf()}),t.set(r,y,s)},E=s=>{const d=t.get(r,y);t.size(d)<=0||d.splice(s,1)};return()=>n.createVNode(e,t.omit(a,"rowKey"),{default:()=>{var s;return[t.map(t.get(r,y),(d,i)=>n.createVNode(Xe,{key:d[a.rowKey]||i,pathList:[...y,i]},{default:()=>{var m,l,p;return[n.createVNode("div",{class:"pro-form-list-item"},[(m=c.default)==null?void 0:m.call(c),!u.value&&n.createVNode(n.Fragment,null,[n.createVNode("div",{class:"pro-form-list-item-add",onClick:g},[(l=c.itemAdd)==null?void 0:l.call(c)]),n.createVNode("div",{class:"pro-form-list-item-minus",onClick:()=>E(i)},[(p=c.itemMinus)==null?void 0:p.call(c)])])])]}})),!u.value&&n.createVNode("div",{class:"pro-form-list-add",onClick:g},[(s=c.add)==null?void 0:s.call(c)])]}})}}),Ae=Symbol("pro-form"),ce=()=>n.inject(Ae),_e=e=>{n.provide(Ae,e)},ie=()=>({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},columns:{type:Array},columnState:{type:Object},elementMap:{type:Object},formElementMap:{type:Object},needRules:{type:Boolean,default:!0},provideExtra:{type:Object}}),He=(e,a,c)=>n.defineComponent({inheritAttrs:!1,props:{...e.props,...ie(),...t.omit(a.props,"items")},setup:(r,{slots:u,emit:o,expose:f,attrs:y})=>{const g=r.model||n.reactive({}),E=r.showState||n.reactive({}),s=r.readonlyState||n.reactive({}),d=r.disableState||n.reactive({});k.useEffect(()=>{r.showStateRules&&t.forEach(r.showStateRules,(P,v)=>{E[v]=P(g)}),r.readonlyStateRules&&t.forEach(r.readonlyStateRules,(P,v)=>{s[v]=P(g)}),r.disableStateRules&&t.forEach(r.disableStateRules,(P,v)=>{d[v]=P(g)})},g);const i=n.computed(()=>r.readonly),m=n.computed(()=>Q(r.columns,r.columnState,P=>x(P))),l=P=>{const v=Te(P,E,r.showStateRules);o("finish",v,P)},p=n.ref();f(V(c,p)),_e({formState:g,showState:E,readonlyState:s,disableState:d,elementMap:r.elementMap,formElementMap:r.formElementMap,readonly:i,columns:m,formRef:p,...r.provideExtra}),oe({});const S=t.keys(ie()),h=t.keys(t.omit(a.props,"items"));return()=>n.createVNode(e,n.mergeProps({ref:p},t.omit(y,"onFinish"),t.omit(r,...S,...h,"onFinish"),{model:g,onFinish:l}),{default:()=>{var P,v;return[(P=u.start)==null?void 0:P.call(u),r.formElementMap&&t.size(m.value)>0&&n.createVNode(n.Fragment,null,[r.row?n.createVNode(a,{row:r.row,col:r.col,items:t.map(m.value,D=>({rowKey:x(D),vNode:_(r.formElementMap,D,r.needRules),col:t.get(D,["extra","col"])}))},null):t.map(m.value,D=>_(r.formElementMap,D,r.needRules))]),(v=u.default)==null?void 0:v.call(u)]},...t.omit(u,"default")})}});exports.SearchMode=void 0;(function(e){e.AUTO="AUTO",e.MANUAL="MANUAL"})(exports.SearchMode||(exports.SearchMode={}));const le=()=>({model:{type:Object},initEmit:{type:Boolean,default:!0},searchMode:{type:String,default:exports.SearchMode.AUTO},columns:{type:Array},debounceKeys:{type:Array},debounceTypes:{type:Array,default:["text"]},debounceTime:{type:Number,default:800}}),Je=(e,a,c)=>n.defineComponent({props:{...e.props,...a,...le()},setup:(r,{slots:u,expose:o})=>{const f=r.model||n.reactive({}),y=new Set(r.debounceTypes),g=t.map(t.filter(r.columns,l=>{const p=ee(l);return y.has(p)}),l=>x(l)),E=n.ref();o(V(c,E));const s=()=>{var l;(l=E.value)==null||l.submit()},d=t.debounce(()=>{s()},r.debounceTime);k.useEffect(()=>{r.initEmit&&s()},[]);const i=(l,p,S)=>t.some(S,h=>t.get(l,h)!==t.get(p,h));k.useWatch((l,p)=>{if(r.searchMode!==exports.SearchMode.AUTO)return;const S=t.size(r.debounceKeys)>0?r.debounceKeys:g;if(t.size(S)>0&&i(l,p,S)){d();return}s()},()=>t.clone(f));const m=t.keys(t.omit(le(),"columns"));return()=>n.createVNode(e,n.mergeProps({ref:E},t.omit(r,m),{model:f}),u)}}),me=()=>({readonly:{type:Boolean,default:void 0},fieldProps:{type:Object},showProps:{type:Object},slots:{type:Object}}),Qe=(e,a)=>({InputComp:c,valueType:r,name:u})=>n.defineComponent({name:u,props:{...e.props,...me()},setup:(o,{slots:f})=>{const{formState:y,showState:g,readonlyState:E,disableState:s,readonly:d,elementMap:i}=ce(),m=ae(),l=n.computed(()=>t.isBoolean(o.readonly)?o.readonly:t.isBoolean(E[o.name])?E[o.name]:d.value),p=re(o.name),S=m!=null&&m.pathList?[...m.pathList,...p]:p,h=v=>{t.set(y,S,v)},P=t.keys(me());return()=>{const v=t.get(g,S);if(t.isBoolean(v)&&!v)return null;const D=t.get(y,S),O=t.get(i,r);return n.createVNode(e,n.mergeProps(t.omit(o,...P,"name","slots"),{name:S}),{default:()=>[l.value?n.createVNode(n.Fragment,null,[O?n.createVNode(O,n.mergeProps({value:D},o.fieldProps,{showProps:o.showProps}),f):n.createVNode("span",null,[D])]):n.createVNode(c,n.mergeProps(a(D,h,t.get(s,S)),o.fieldProps),f)],...o.slots})}}}),Ie=Symbol("pro-table"),Ye=()=>n.inject(Ie),Ze=e=>{n.provide(Ie,e)},fe=()=>({operate:{type:Object},columnEmptyText:{type:String},column:{type:Object},columns:{type:Array},columnState:{type:Object},elementMap:{type:Object},serialNumber:{type:Boolean},paginationState:{type:Object},provideExtra:{type:Object}}),et=(e,a,c)=>n.defineComponent({props:{...e.props,...a,...fe()},setup:(r,{slots:u,expose:o})=>{const f=()=>({title:"\u5E8F\u53F7",dataIndex:"serialNumber",width:80,...r.column,customRender:({index:d})=>{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)+d+1:d+1}}),y=()=>{const d=r.operate,i=t.map(d.items,l=>({...l,...t.get(d.itemState,l.value)})),m=t.sortBy(i,l=>l.sort);return{...r.column,title:"\u64CD\u4F5C",dataIndex:"operate",fixed:"right",...d.column,customRender:({record:l})=>{const p=t.filter(m,S=>S.show&&t.isFunction(S.show)?S.show(l):S.show!==!1);return n.createVNode("div",{class:"pro-table-operate"},[t.map(p,S=>t.isFunction(S.element)?S.element(l,S):n.createVNode("div",{class:"pro-table-operate-item",key:S.value,onClick:()=>{var h;(h=S.onClick)==null||h.call(S,l)}},[S.label]))])}}},g=n.computed(()=>{const d=Q(r.columns,r.columnState,m=>m.dataIndex),i=t.map(d,m=>{const l={...r.column,...m};return m.customRender||(l.customRender=({text:p})=>te(r.elementMap,{...m,showProps:{...m.showProps,content:r.columnEmptyText}},p)||p||r.columnEmptyText),l});return r.serialNumber&&i.unshift(f()),r.operate&&r.operate.items&&t.some(r.operate.items,m=>m.show)&&i.push(y()),i}),E=n.ref();Ze({columns:g,tableRef:E,...r.provideExtra}),o(V(c||[],E));const s=t.keys(fe());return()=>n.createVNode(e,n.mergeProps({ref:E},t.omit(r,s),{columns:g.value}),u)}});exports.CurdAction=b;exports.CurdAddAction=B;exports.CurdCurrentMode=L;exports.CurdMethods=ne;exports.CurdSubAction=T;exports.ProCurd=G;exports.ProModalCurd=Ve;exports.ProModule=W;exports.ProPageCurd=xe;exports.RequestAction=U;exports.Wrapper=he;exports.convertPathToList=re;exports.createCurdDesc=Ue;exports.createCurdForm=$e;exports.createCurdList=Ge;exports.createExpose=V;exports.createForm=He;exports.createFormItemCompFn=Qe;exports.createFormList=We;exports.createGrid=Me;exports.createSearchForm=Je;exports.createTable=et;exports.defaultPage=De;exports.getColumnFormItemName=x;exports.getColumnValueType=ee;exports.getFirstPropName=Se;exports.getFormItemEl=_;exports.getItemEl=te;exports.getValidValues=Te;exports.mergeStateToList=Q;exports.provideProCurd=Ce;exports.provideProFormList=oe;exports.provideProModule=ve;exports.renderElement=K;exports.renderElements=H;exports.useComposeRequestActor=ye;exports.useDoneRequestActor=Fe;exports.useFailedRequestActor=Re;exports.useModuleEvent=J;exports.useProCurd=z;exports.useProForm=ce;exports.useProFormList=ae;exports.useProModule=$;exports.useProTable=Ye;