@vue-start/pro 0.2.0 → 0.3.2

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
@@ -7,6 +7,7 @@ var lodash = require('lodash');
7
7
  var rxjs = require('rxjs');
8
8
  var hooks = require('@vue-start/hooks');
9
9
  var request = require('@vue-start/request');
10
+ var vueRouter = require('vue-router');
10
11
 
11
12
  function ownKeys(object, enumerableOnly) {
12
13
  var keys = Object.keys(object);
@@ -82,6 +83,50 @@ function _nonIterableSpread() {
82
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.");
83
84
  }
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
+
85
130
  var createUseRequestActor = function createUseRequestActor(filterFun) {
86
131
  return function (actors, callback) {
87
132
  var _useRequestProvide = request.useRequestProvide(),
@@ -154,17 +199,192 @@ var useComposeRequestActor = function useComposeRequestActor(actors, options, ca
154
199
  }, []);
155
200
  };
156
201
 
157
- /**
158
- * 获取Column的valueType,默认"text"
159
- * @param column
202
+ var treeDefaultNames = {
203
+ children: "children",
204
+ label: "label",
205
+ value: "value"
206
+ };
207
+ /**
208
+ * 根据value从treeData中找到对象
209
+ * @param data
210
+ * @param value
211
+ * @param fieldNames
212
+ * @param cb 对象:同步 方法:回调,可以理解为异步
213
+ */
214
+
215
+ var findTargetInTree = function findTargetInTree(data, value, fieldNames, cb) {
216
+ var index = lodash.findIndex(data, function (item) {
217
+ return lodash.get(item, (fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.value) || treeDefaultNames.value) === value;
218
+ });
219
+
220
+ if (index > -1) {
221
+ if (lodash.isFunction(cb)) {
222
+ cb(index, data[index], data);
223
+ } else {
224
+ cb.index = index;
225
+ cb.target = data[index];
226
+ cb.list = data;
227
+ }
228
+
229
+ return;
230
+ }
231
+
232
+ lodash.forEach(data, function (item) {
233
+ var children = lodash.get(item, (fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.children) || treeDefaultNames.children);
234
+
235
+ if (lodash.size(children) > 0) {
236
+ findTargetInTree(children, value, fieldNames, cb);
237
+ }
238
+ });
239
+ };
240
+ /**
241
+ * 根据value从treeData中找出对象及父列表
242
+ * @param data
243
+ * @param value
244
+ * @param fieldNames
245
+ * @param cb
246
+ * @param parent
247
+ */
248
+
249
+ var findTargetListInTree = function findTargetListInTree(data, value, fieldNames, cb) {
250
+ var parent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
251
+ var target = lodash.find(data, function (item) {
252
+ return lodash.get(item, (fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.value) || treeDefaultNames.value) === value;
253
+ });
254
+
255
+ if (target) {
256
+ if (lodash.isFunction(cb)) {
257
+ cb([].concat(_toConsumableArray(parent), [target]));
258
+ } else {
259
+ cb.list = [].concat(_toConsumableArray(parent), [target]);
260
+ }
261
+
262
+ return;
263
+ }
264
+
265
+ lodash.forEach(data, function (item) {
266
+ var children = lodash.get(item, (fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.children) || treeDefaultNames.children);
267
+
268
+ if (lodash.size(children) > 0) {
269
+ findTargetListInTree(children, value, fieldNames, cb, [].concat(_toConsumableArray(parent), [item]));
270
+ }
271
+ });
272
+ };
273
+
274
+ /**
275
+ * 剔除showState或showStateRules规则为!true的值
276
+ * @param values
277
+ * @param showState
278
+ * @param showStateRules
279
+ */
280
+
281
+ var getValidValues = function getValidValues(values, showState, showStateRules) {
282
+ if (showState) {
283
+ var invalidKeys = lodash.filter(lodash.keys(showState), function (key) {
284
+ return !showState[key];
285
+ });
286
+ return lodash.omit(values, invalidKeys);
287
+ }
288
+
289
+ if (showStateRules) {
290
+ var _invalidKeys = lodash.filter(lodash.keys(showStateRules), function (key) {
291
+ return !showStateRules[key](values);
292
+ });
293
+
294
+ return lodash.omit(values, _invalidKeys);
295
+ }
296
+
297
+ return values;
298
+ };
299
+ /**
300
+ * string类型的path转为arr
301
+ * @param path
302
+ */
303
+
304
+ var convertPathToList = function convertPathToList(path) {
305
+ if (!path) {
306
+ return undefined;
307
+ }
308
+
309
+ if (lodash.isArray(path)) {
310
+ return path;
311
+ }
312
+
313
+ if (path && lodash.isString(path) && path.indexOf(".") > 0) {
314
+ return lodash.split(path, ".");
315
+ }
316
+
317
+ return [path];
318
+ };
319
+ /**
320
+ * 将listState 中的数据通过id merge到 list item中
321
+ * ps:数组会替换
322
+ * 注意:mergeWith 会改变原始对象
323
+ * @param list
324
+ * @param listState
325
+ * @param id
326
+ */
327
+
328
+ var mergeStateToList = function mergeStateToList(list, listState, id) {
329
+ if (!listState || !id) {
330
+ return list;
331
+ }
332
+
333
+ return lodash.map(list, function (item) {
334
+ var idName = lodash.isFunction(id) ? id(item) : id; //如果listState中有值,merge处理
335
+
336
+ var stateData = lodash.get(listState, idName);
337
+
338
+ if (!stateData || lodash.isEmpty(stateData) || lodash.isFunction(stateData) || !lodash.isObject(stateData)) {
339
+ return item;
340
+ } //只有是对象(键值对)才合并
341
+
342
+
343
+ return lodash.mergeWith(item, stateData, function (objValue, srcValue) {
344
+ //如果是数组,替换
345
+ if (lodash.isArray(objValue) || lodash.isArray(srcValue)) {
346
+ return srcValue;
347
+ }
348
+ });
349
+ });
350
+ };
351
+
352
+ /**
353
+ * 唯一id
354
+ */
355
+
356
+ var generateId = function generateId() {
357
+ return Number(Math.random().toString().substr(3, 3) + Date.now()).toString(36);
358
+ };
359
+ /**
360
+ * ref 传递
361
+ */
362
+
363
+ var createExpose = function createExpose(methods, targetRef) {
364
+ return lodash.reduce(methods, function (pair, method) {
365
+ return _objectSpread2(_objectSpread2({}, pair), {}, _defineProperty({}, method, function () {
366
+ var _targetRef$value, _targetRef$value$meth;
367
+
368
+ for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
369
+ params[_key] = arguments[_key];
370
+ }
371
+
372
+ 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));
373
+ }));
374
+ }, {});
375
+ };
376
+
377
+ /**
378
+ * 获取Column的valueType,默认"text"
379
+ * @param column
160
380
  */
161
381
 
162
382
  var getColumnValueType = function getColumnValueType(column) {
163
383
  return column.formValueType || column.valueType || "text";
164
384
  };
165
- /**
166
- *获取Column的FormItem name
167
- * @param column
385
+ /**
386
+ *获取Column的FormItem name
387
+ * @param column
168
388
  */
169
389
 
170
390
  var getColumnFormItemName = function getColumnFormItemName(column) {
@@ -172,12 +392,12 @@ var getColumnFormItemName = function getColumnFormItemName(column) {
172
392
 
173
393
  return ((_column$formItemProps = column.formItemProps) === null || _column$formItemProps === void 0 ? void 0 : _column$formItemProps.name) || column.dataIndex;
174
394
  };
175
- /**
176
- * 根据Column生成FormItem VNode
177
- * formFieldProps中的slots参数会以v-slots的形式传递到FormItem的录入组件(子组件)中
178
- * @param formElementMap
179
- * @param column
180
- * @param needRules
395
+ /**
396
+ * 根据Column生成FormItem VNode
397
+ * formFieldProps中的slots参数会以v-slots的形式传递到FormItem的录入组件(子组件)中
398
+ * @param formElementMap
399
+ * @param column
400
+ * @param needRules
181
401
  */
182
402
 
183
403
  var getFormItemEl = function getFormItemEl(formElementMap, column) {
@@ -202,11 +422,11 @@ var getFormItemEl = function getFormItemEl(formElementMap, column) {
202
422
  showProps: column.showProps
203
423
  }), (_column$formFieldProp = column.formFieldProps) === null || _column$formFieldProp === void 0 ? void 0 : _column$formFieldProp.slots);
204
424
  };
205
- /**
206
- * 根据Column生成Item VNode
207
- * @param elementMap
208
- * @param column
209
- * @param value
425
+ /**
426
+ * 根据Column生成Item VNode
427
+ * @param elementMap
428
+ * @param column
429
+ * @param value
210
430
  */
211
431
 
212
432
  var getItemEl = function getItemEl(elementMap, column, value) {
@@ -238,44 +458,44 @@ var RequestAction = {
238
458
 
239
459
  var proModuleProps = function proModuleProps() {
240
460
  return {
241
- /**
242
- * module状态
461
+ /**
462
+ * module状态
243
463
  */
244
464
  state: {
245
465
  type: Object
246
466
  },
247
467
 
248
- /**
249
- * 配置(静态)
468
+ /**
469
+ * 配置(静态)
250
470
  */
251
471
  columns: {
252
472
  type: Array
253
473
  },
254
474
 
255
- /**
256
- * 配置(动态)
257
- * columns动态属性兼容
475
+ /**
476
+ * 配置(动态)
477
+ * columns动态属性兼容
258
478
  */
259
479
  columnState: {
260
480
  type: Object
261
481
  },
262
482
 
263
- /**
264
- * 展示组件集
483
+ /**
484
+ * 展示组件集
265
485
  */
266
486
  elementMap: {
267
487
  type: Object
268
488
  },
269
489
 
270
- /**
271
- * 录入组件集
490
+ /**
491
+ * 录入组件集
272
492
  */
273
493
  formElementMap: {
274
494
  type: Object
275
495
  },
276
496
 
277
- /**
278
- * requests
497
+ /**
498
+ * requests
279
499
  */
280
500
  requests: {
281
501
  type: Array
@@ -286,27 +506,15 @@ var proModuleProps = function proModuleProps() {
286
506
  var ProModule = vue.defineComponent({
287
507
  props: _objectSpread2({}, proModuleProps()),
288
508
  setup: function setup(props, _ref) {
289
- var slots = _ref.slots;
509
+ var slots = _ref.slots,
510
+ expose = _ref.expose;
290
511
 
291
- /**
292
- * columns columnState 合并
512
+ /**
513
+ * columns columnState 合并
293
514
  */
294
515
  var columns = vue.computed(function () {
295
- return lodash.map(props.columns, function (item) {
296
- //如果columnState中有值,merge处理
297
- var mapData = lodash.get(props.columnState, getColumnFormItemName(item));
298
-
299
- if (lodash.isObject(mapData) && !lodash.isEmpty(mapData) && !lodash.isArray(mapData) && !lodash.isFunction(mapData)) {
300
- //合并
301
- return lodash.mergeWith(item, mapData, function (objValue, srcValue) {
302
- //如果是数组,替换
303
- if (lodash.isArray(objValue) || lodash.isArray(srcValue)) {
304
- return srcValue;
305
- }
306
- });
307
- }
308
-
309
- return item;
516
+ return mergeStateToList(props.columns, props.columnState, function (item) {
517
+ return getColumnFormItemName(item);
310
518
  });
311
519
  });
312
520
  /*********************************** 渲染组件 ***************************************/
@@ -460,6 +668,10 @@ var ProModule = vue.defineComponent({
460
668
  requests: props.requests,
461
669
  sendRequest: sendRequest
462
670
  });
671
+ expose({
672
+ sendEvent: sendEvent,
673
+ sendRequest: sendRequest
674
+ });
463
675
  return function () {
464
676
  var _slots$default;
465
677
 
@@ -542,18 +754,23 @@ exports.CurdAddAction = void 0;
542
754
  CurdAddAction["CONTINUE"] = "CONTINUE";
543
755
  })(exports.CurdAddAction || (exports.CurdAddAction = {}));
544
756
 
757
+ var defaultPage = {
758
+ page: 1,
759
+ pageSize: 10
760
+ };
761
+
545
762
  var proCurdProps = function proCurdProps() {
546
763
  return {
547
- /**
548
- * 列表 或 详情 的唯一标识
764
+ /**
765
+ * 列表 或 详情 的唯一标识
549
766
  */
550
767
  rowKey: {
551
768
  type: String,
552
769
  "default": "id"
553
770
  },
554
771
 
555
- /**
556
- * operates
772
+ /**
773
+ * operates
557
774
  */
558
775
  operates: {
559
776
  type: Array
@@ -578,17 +795,18 @@ var proCurdProps = function proCurdProps() {
578
795
  var Curd = vue.defineComponent({
579
796
  props: _objectSpread2({}, proCurdProps()),
580
797
  setup: function setup(props, _ref) {
581
- var slots = _ref.slots;
798
+ var slots = _ref.slots,
799
+ expose = _ref.expose;
582
800
 
583
801
  var _ref2 = useProModule(),
584
802
  columns = _ref2.columns,
585
803
  state = _ref2.state,
586
804
  sendEvent = _ref2.sendEvent,
587
805
  sendRequest = _ref2.sendRequest;
588
- /**
589
- * 排序
590
- * @param list
591
- * @param propName
806
+ /**
807
+ * 排序
808
+ * @param list
809
+ * @param propName
592
810
  */
593
811
 
594
812
 
@@ -597,8 +815,8 @@ var Curd = vue.defineComponent({
597
815
  return lodash.get(item, propName);
598
816
  });
599
817
  };
600
- /**
601
- * 非 hideInForm columns
818
+ /**
819
+ * 非 hideInForm columns
602
820
  */
603
821
 
604
822
 
@@ -607,8 +825,8 @@ var Curd = vue.defineComponent({
607
825
  return !item.hideInForm;
608
826
  }), "formSort");
609
827
  });
610
- /**
611
- * 非 hideInDetail columns
828
+ /**
829
+ * 非 hideInDetail columns
612
830
  */
613
831
 
614
832
  var descColumns = vue.computed(function () {
@@ -616,8 +834,8 @@ var Curd = vue.defineComponent({
616
834
  return !item.hideInDetail;
617
835
  }), "descSort");
618
836
  });
619
- /**
620
- * 非 hideInTable columns
837
+ /**
838
+ * 非 hideInTable columns
621
839
  */
622
840
 
623
841
  var tableColumns = vue.computed(function () {
@@ -625,8 +843,8 @@ var Curd = vue.defineComponent({
625
843
  return !item.hideInTable;
626
844
  }), "tableSort");
627
845
  });
628
- /**
629
- * search columns
846
+ /**
847
+ * search columns
630
848
  */
631
849
 
632
850
  var searchColumns = vue.computed(function () {
@@ -647,12 +865,18 @@ var Curd = vue.defineComponent({
647
865
  var sendCurdEvent = function sendCurdEvent(event) {
648
866
  sendEvent({
649
867
  type: event.action,
650
- payload: lodash.omit(event, "action")
868
+ payload: lodash.omit(event, "action", "source"),
869
+ source: event.source
651
870
  });
652
871
  }; //事件订阅
653
872
 
654
873
 
655
874
  useModuleEvent(function (event) {
875
+ //如果当前event存在source 不处理
876
+ if (event.source) {
877
+ return;
878
+ }
879
+
656
880
  var action = event.type;
657
881
  var _ref3 = event.payload,
658
882
  type = _ref3.type,
@@ -729,6 +953,11 @@ var Curd = vue.defineComponent({
729
953
  descProps: descProps,
730
954
  modalProps: modalProps
731
955
  });
956
+ expose({
957
+ sendCurdEvent: sendCurdEvent,
958
+ getOperate: getOperate,
959
+ refreshList: handleSearch
960
+ });
732
961
  return function () {
733
962
  var _slots$default;
734
963
 
@@ -745,7 +974,10 @@ var ProCurd = vue.defineComponent({
745
974
  setup: function setup(props, _ref4) {
746
975
  var _curdOperateOpts;
747
976
 
748
- var slots = _ref4.slots;
977
+ var slots = _ref4.slots,
978
+ expose = _ref4.expose;
979
+ var moduleRef = vue.ref();
980
+ var curdRef = vue.ref();
749
981
  var curdState = props.curdState || vue.reactive({
750
982
  detailData: {}
751
983
  });
@@ -797,183 +1029,913 @@ var ProCurd = vue.defineComponent({
797
1029
  },
798
1030
  label: "删除"
799
1031
  }), _curdOperateOpts);
1032
+ /****************************** columns分类 *************************************/
1033
+
800
1034
  var requests = lodash.map(props.operates, function (item) {
801
1035
  var curdOpts = lodash.get(curdOperateOpts, item.action);
802
1036
  return _objectSpread2(_objectSpread2({}, curdOpts), item);
803
1037
  });
804
1038
  var moduleKeys = lodash.keys(lodash.omit(ProModule.props, "state", "requests"));
1039
+ expose({
1040
+ moduleRef: moduleRef,
1041
+ curdRef: curdRef
1042
+ });
805
1043
  return function () {
806
- return vue.h(ProModule, _objectSpread2(_objectSpread2({}, lodash.pick(props, moduleKeys)), {}, {
807
- state: curdState,
808
- requests: requests
809
- }), vue.h(Curd, _objectSpread2(_objectSpread2({}, lodash.omit.apply(void 0, [props].concat(_toConsumableArray(moduleKeys), ["curdState", "operates"]))), {}, {
810
- operates: requests
811
- }), slots));
1044
+ return vue.createVNode(ProModule, vue.mergeProps({
1045
+ "ref": moduleRef
1046
+ }, lodash.pick(props, moduleKeys), {
1047
+ "state": curdState,
1048
+ "requests": requests
1049
+ }), {
1050
+ "default": function _default() {
1051
+ return [vue.createVNode(Curd, vue.mergeProps({
1052
+ "ref": curdRef
1053
+ }, lodash.omit.apply(void 0, [props].concat(_toConsumableArray(moduleKeys), ["curdState", "operates"])), {
1054
+ "operates": requests
1055
+ }), slots)];
1056
+ }
1057
+ });
812
1058
  };
813
1059
  }
814
1060
  });
815
1061
 
816
- var ProFormKey = Symbol("pro-form");
817
- var useProForm = function useProForm() {
818
- return vue.inject(ProFormKey);
819
- };
820
-
821
- var provideProForm = function provideProForm(ctx) {
822
- vue.provide(ProFormKey, ctx);
823
- };
824
-
825
- var proFormProps = function proFormProps() {
1062
+ var modalCurdProps = function modalCurdProps() {
826
1063
  return {
827
- /**
828
- * 同 antd 或 element form中的model
829
- */
830
- model: {
1064
+ defaultAddRecord: {
831
1065
  type: Object
832
- },
1066
+ }
1067
+ };
1068
+ };
833
1069
 
834
- /**
835
- * 子组件是否只读样式
836
- */
837
- readonly: {
838
- type: Boolean,
839
- "default": undefined
840
- },
1070
+ /**
1071
+ * 事件处理
1072
+ */
1073
+ var ModalCurd = vue.defineComponent({
1074
+ props: _objectSpread2({}, modalCurdProps()),
1075
+ setup: function setup(props) {
1076
+ var _listProps$value;
1077
+
1078
+ var _useProModule = useProModule(),
1079
+ dispatch = _useProModule.dispatch,
1080
+ sendRequest = _useProModule.sendRequest;
1081
+
1082
+ var _useProCurd = useProCurd(),
1083
+ rowKey = _useProCurd.rowKey,
1084
+ curdState = _useProCurd.curdState,
1085
+ listProps = _useProCurd.listProps,
1086
+ getOperate = _useProCurd.getOperate,
1087
+ refreshList = _useProCurd.refreshList;
1088
+
1089
+ 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)); //发送详情接口
1090
+
1091
+ var sendDetailRequest = function sendDetailRequest(record) {
1092
+ var operateOpts = getOperate(exports.CurdAction.DETAIL);
1093
+
1094
+ if (operateOpts !== null && operateOpts !== void 0 && operateOpts.actor) {
1095
+ //如果注册了详情接口 发起请求
1096
+ sendRequest(exports.CurdAction.DETAIL, record, rowKey);
1097
+ } else {
1098
+ //直接使用当前record作为详情数据
1099
+ dispatch({
1100
+ type: "detailData",
1101
+ payload: record
1102
+ });
1103
+ }
1104
+ };
841
1105
 
842
- /**
843
- * FormComponent 根据此项来确定组件是否显示
844
- * rules 根据rules中方法生成showState对象
845
- */
846
- showState: {
847
- type: Object
848
- },
849
- showStateRules: {
850
- type: Object
851
- },
1106
+ var dealDetail = function dealDetail(subAction, _ref) {
1107
+ var record = _ref.record;
852
1108
 
853
- /**
854
- * 是否只读
855
- */
856
- readonlyState: {
857
- type: Object
858
- },
859
- readonlyStateRules: {
860
- type: Object
861
- },
1109
+ if (subAction === exports.CurdSubAction.EMIT) {
1110
+ dispatch({
1111
+ type: "mode",
1112
+ payload: exports.CurdCurrentMode.DETAIL
1113
+ });
1114
+ sendDetailRequest(record);
1115
+ }
1116
+ };
862
1117
 
863
- /**
864
- * 是否disabled
865
- */
866
- disableState: {
867
- type: Object
868
- },
869
- disableStateRules: {
870
- type: Object
871
- },
1118
+ var dealAdd = function dealAdd(subAction) {
1119
+ if (subAction === exports.CurdSubAction.EMIT) {
1120
+ dispatch({
1121
+ type: "mode",
1122
+ payload: exports.CurdCurrentMode.ADD
1123
+ });
1124
+ dispatch({
1125
+ type: "detailData",
1126
+ payload: props.defaultAddRecord || {}
1127
+ });
1128
+ } else if (subAction === exports.CurdSubAction.SUCCESS) {
1129
+ //添加成功
1130
+ pageState.page = 1; //重置当前页数
1131
+ //刷新List
872
1132
 
873
- /**
874
- *
875
- */
876
- columns: {
877
- type: Array
878
- },
1133
+ refreshList({
1134
+ page: 1
1135
+ });
879
1136
 
880
- /**
881
- * 展示控件集合,readonly模式下使用这些组件渲染
882
- */
883
- elementMap: {
884
- type: Object
885
- },
1137
+ if (curdState.addAction === exports.CurdAddAction.CONTINUE) {
1138
+ dispatch({
1139
+ type: "detailData",
1140
+ payload: props.defaultAddRecord || {}
1141
+ });
1142
+ } else {
1143
+ dispatch({
1144
+ type: "mode",
1145
+ payload: undefined
1146
+ });
1147
+ }
1148
+ }
1149
+ };
886
1150
 
887
- /**
888
- * 录入控件集合
889
- */
890
- formElementMap: {
891
- type: Object
892
- },
1151
+ var dealEdit = function dealEdit(subAction, _ref2) {
1152
+ var record = _ref2.record;
893
1153
 
894
- /**
895
- * 是否启用rules验证
896
- */
897
- needRules: {
898
- type: Boolean,
899
- "default": true
900
- },
1154
+ if (subAction === exports.CurdSubAction.EMIT) {
1155
+ dispatch({
1156
+ type: "mode",
1157
+ payload: exports.CurdCurrentMode.EDIT
1158
+ });
1159
+ sendDetailRequest(record);
1160
+ } else if (subAction === exports.CurdSubAction.SUCCESS) {
1161
+ // 编辑成功
1162
+ dispatch({
1163
+ type: "mode",
1164
+ payload: undefined
1165
+ }); //刷新列表
1166
+
1167
+ refreshList();
1168
+ }
1169
+ };
901
1170
 
902
- /**
903
- * provide传递
904
- */
905
- provideExtra: {
1171
+ var dealDelete = function dealDelete(subAction) {
1172
+ if (subAction === exports.CurdSubAction.SUCCESS) {
1173
+ //刷新列表
1174
+ refreshList();
1175
+ }
1176
+ };
1177
+
1178
+ useModuleEvent(function (_ref3) {
1179
+ var type = _ref3.type,
1180
+ payload = _ref3.payload,
1181
+ source = _ref3.source;
1182
+
1183
+ if (source) {
1184
+ return;
1185
+ }
1186
+
1187
+ var action = type;
1188
+ var subAction = payload === null || payload === void 0 ? void 0 : payload.type;
1189
+ var record = payload === null || payload === void 0 ? void 0 : payload.record;
1190
+
1191
+ if (action === RequestAction.Success) {
1192
+ //覆盖
1193
+ action = lodash.get(payload, ["requestOpts", "action"]);
1194
+ subAction = exports.CurdSubAction.SUCCESS;
1195
+ }
1196
+
1197
+ switch (action) {
1198
+ case exports.CurdAction.DETAIL:
1199
+ dealDetail(subAction, {
1200
+ record: record
1201
+ });
1202
+ break;
1203
+
1204
+ case exports.CurdAction.ADD:
1205
+ dealAdd(subAction);
1206
+ break;
1207
+
1208
+ case exports.CurdAction.EDIT:
1209
+ dealEdit(subAction, {
1210
+ record: record
1211
+ });
1212
+ break;
1213
+
1214
+ case exports.CurdAction.DELETE:
1215
+ dealDelete(subAction);
1216
+ break;
1217
+ }
1218
+ });
1219
+ return function () {
1220
+ return null;
1221
+ };
1222
+ }
1223
+ });
1224
+ var ProModalCurd = vue.defineComponent({
1225
+ props: _objectSpread2(_objectSpread2({}, ProCurd.props), ModalCurd.props),
1226
+ setup: function setup(props, _ref4) {
1227
+ var slots = _ref4.slots;
1228
+ var invalidKeys = lodash.keys(ModalCurd.props);
1229
+ return function () {
1230
+ var _slots$default;
1231
+
1232
+ return vue.createVNode(ProCurd, lodash.omit(props, invalidKeys), {
1233
+ "default": function _default() {
1234
+ return [vue.createVNode(ModalCurd, lodash.pick(props, invalidKeys), null), (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];
1235
+ }
1236
+ });
1237
+ };
1238
+ }
1239
+ });
1240
+
1241
+ var pageCurdProps = function pageCurdProps() {
1242
+ return {
1243
+ defaultAddRecord: {
906
1244
  type: Object
1245
+ },
1246
+ routeBack: {
1247
+ type: Function
907
1248
  }
908
1249
  };
909
1250
  };
910
1251
 
911
- var ProForm = vue.defineComponent({
912
- props: _objectSpread2({}, proFormProps()),
913
- setup: function setup(props, _ref) {
914
- var slots = _ref.slots;
915
- var formState = props.model || vue.reactive({}); //组件状态相关
1252
+ var PageCurd = vue.defineComponent({
1253
+ props: _objectSpread2({}, pageCurdProps()),
1254
+ setup: function setup(props) {
1255
+ var router = vueRouter.useRouter();
1256
+ var route = vueRouter.useRoute();
1257
+
1258
+ var _useProModule = useProModule(),
1259
+ dispatch = _useProModule.dispatch,
1260
+ sendRequest = _useProModule.sendRequest;
1261
+
1262
+ var _useProCurd = useProCurd(),
1263
+ rowKey = _useProCurd.rowKey,
1264
+ curdState = _useProCurd.curdState;
1265
+
1266
+ var dealList = function dealList(subAction) {
1267
+ if (subAction === exports.CurdSubAction.PAGE) {
1268
+ //其实就是个重置过程
1269
+ dispatch({
1270
+ type: "mode",
1271
+ payload: undefined
1272
+ });
1273
+ dispatch({
1274
+ type: "detailData",
1275
+ payload: {}
1276
+ });
1277
+ dispatch({
1278
+ type: "detailLoading",
1279
+ payload: false
1280
+ });
1281
+ dispatch({
1282
+ type: "addAction",
1283
+ payload: undefined
1284
+ });
1285
+ }
1286
+ };
916
1287
 
917
- var showState = props.showState || vue.reactive({});
918
- var readonlyState = props.readonlyState || vue.reactive({});
919
- var disableState = props.disableState || vue.reactive({}); //formState改变情况下,更新 showState,readonlyState,disableState状态
1288
+ var dealDetail = function dealDetail(subAction, _ref) {
1289
+ var record = _ref.record;
920
1290
 
921
- hooks.useEffect(function () {
922
- if (props.showStateRules) {
923
- lodash.forEach(props.showStateRules, function (fn, key) {
924
- showState[key] = fn(formState);
1291
+ if (subAction === exports.CurdSubAction.EMIT) {
1292
+ router.push({
1293
+ path: "".concat(route.path, "/detail"),
1294
+ query: lodash.pick(record, rowKey)
1295
+ });
1296
+ } else if (subAction === exports.CurdSubAction.PAGE) {
1297
+ dispatch({
1298
+ type: "mode",
1299
+ payload: exports.CurdCurrentMode.DETAIL
925
1300
  });
1301
+ sendRequest(exports.CurdAction.DETAIL, route.query, rowKey);
926
1302
  }
1303
+ };
927
1304
 
928
- if (props.readonlyStateRules) {
929
- lodash.forEach(props.readonlyStateRules, function (fn, key) {
930
- readonlyState[key] = fn(formState);
1305
+ var dealAdd = function dealAdd(subAction) {
1306
+ if (subAction === exports.CurdSubAction.EMIT) {
1307
+ router.push({
1308
+ path: "".concat(route.path, "/add")
931
1309
  });
1310
+ } else if (subAction === exports.CurdSubAction.PAGE) {
1311
+ dispatch({
1312
+ type: "mode",
1313
+ payload: exports.CurdCurrentMode.ADD
1314
+ });
1315
+ dispatch({
1316
+ type: "detailData",
1317
+ payload: props.defaultAddRecord || {}
1318
+ });
1319
+ } else if (subAction === exports.CurdSubAction.SUCCESS) {
1320
+ if (curdState.addAction === exports.CurdAddAction.CONTINUE) {
1321
+ dispatch({
1322
+ type: "detailData",
1323
+ payload: props.defaultAddRecord || {}
1324
+ });
1325
+ } else {
1326
+ props.routeBack ? props.routeBack(exports.CurdAction.ADD) : router.go(-1);
1327
+ }
932
1328
  }
1329
+ };
933
1330
 
934
- if (props.disableStateRules) {
935
- lodash.forEach(props.disableStateRules, function (fn, key) {
936
- disableState[key] = fn(formState);
1331
+ var dealEdit = function dealEdit(subAction, _ref2) {
1332
+ var record = _ref2.record;
1333
+
1334
+ if (subAction === exports.CurdSubAction.EMIT) {
1335
+ router.push({
1336
+ path: "".concat(route.path, "/edit"),
1337
+ query: lodash.pick(record, rowKey)
1338
+ });
1339
+ } else if (subAction === exports.CurdSubAction.PAGE) {
1340
+ dispatch({
1341
+ type: "mode",
1342
+ payload: exports.CurdCurrentMode.EDIT
937
1343
  });
1344
+ sendRequest(exports.CurdAction.DETAIL, route.query, rowKey);
1345
+ } else if (subAction === exports.CurdSubAction.SUCCESS) {
1346
+ props.routeBack ? props.routeBack(exports.CurdAction.EDIT) : router.go(-1);
938
1347
  }
939
- }, formState); //转换为ref对象
1348
+ };
940
1349
 
941
- var readonly = vue.computed(function () {
942
- return props.readonly;
943
- });
944
- /**
945
- * 将columns 转化为FormItem VNode对象
946
- */
1350
+ useModuleEvent(function (_ref3) {
1351
+ var type = _ref3.type,
1352
+ payload = _ref3.payload,
1353
+ source = _ref3.source;
947
1354
 
948
- var formItemVNodes = vue.computed(function () {
949
- if (lodash.size(props.formElementMap) <= 0) {
950
- return [];
1355
+ if (source) {
1356
+ return;
951
1357
  }
952
1358
 
953
- return lodash.map(props.columns, function (item) {
954
- return getFormItemEl(props.formElementMap, item, props.needRules);
955
- });
1359
+ var action = type;
1360
+ var subAction = payload === null || payload === void 0 ? void 0 : payload.type;
1361
+ var record = payload === null || payload === void 0 ? void 0 : payload.record;
1362
+
1363
+ if (action === RequestAction.Success) {
1364
+ //覆盖
1365
+ action = lodash.get(payload, ["requestOpts", "action"]);
1366
+ subAction = exports.CurdSubAction.SUCCESS;
1367
+ }
1368
+
1369
+ switch (action) {
1370
+ case exports.CurdAction.LIST:
1371
+ dealList(subAction);
1372
+ break;
1373
+
1374
+ case exports.CurdAction.DETAIL:
1375
+ dealDetail(subAction, {
1376
+ record: record
1377
+ });
1378
+ break;
1379
+
1380
+ case exports.CurdAction.ADD:
1381
+ dealAdd(subAction);
1382
+ break;
1383
+
1384
+ case exports.CurdAction.EDIT:
1385
+ dealEdit(subAction, {
1386
+ record: record
1387
+ });
1388
+ break;
1389
+ }
956
1390
  });
957
- provideProForm(_objectSpread2({
958
- formState: formState,
959
- showState: showState,
960
- readonlyState: readonlyState,
961
- disableState: disableState,
962
- //
963
- elementMap: props.elementMap,
964
- //
965
- readonly: readonly,
966
- //
967
- formItemVNodes: formItemVNodes
968
- }, props.provideExtra));
1391
+ return function () {
1392
+ return null;
1393
+ };
1394
+ }
1395
+ });
1396
+ var ProPageCurd = vue.defineComponent({
1397
+ props: _objectSpread2(_objectSpread2({}, ProCurd.props), PageCurd.props),
1398
+ setup: function setup(props, _ref4) {
1399
+ var slots = _ref4.slots;
1400
+ var invalidKeys = lodash.keys(PageCurd.props);
969
1401
  return function () {
970
1402
  var _slots$default;
971
1403
 
972
- return (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots);
1404
+ return vue.createVNode(ProCurd, lodash.omit(props, invalidKeys), {
1405
+ "default": function _default() {
1406
+ return [vue.createVNode(PageCurd, lodash.pick(props, invalidKeys), null), (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];
1407
+ }
1408
+ });
973
1409
  };
974
1410
  }
975
1411
  });
976
1412
 
1413
+ function _isSlot(s) {
1414
+ return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !vue.isVNode(s);
1415
+ }
1416
+
1417
+ var createCurdDesc = function createCurdDesc(Descriptions, DescriptionsItem) {
1418
+ return vue.defineComponent({
1419
+ props: _objectSpread2({}, Descriptions.props),
1420
+ setup: function setup(props, _ref) {
1421
+ var slots = _ref.slots;
1422
+
1423
+ var _useProModule = useProModule(),
1424
+ getItemVNode = _useProModule.getItemVNode;
1425
+
1426
+ var _useProCurd = useProCurd(),
1427
+ curdState = _useProCurd.curdState,
1428
+ descColumns = _useProCurd.descColumns;
1429
+
1430
+ var descVNodes = vue.computed(function () {
1431
+ return lodash.map(descColumns.value, function (item) {
1432
+ var _slot;
1433
+
1434
+ var value = lodash.get(curdState.detailData, item.dataIndex);
1435
+ return vue.createVNode(DescriptionsItem, vue.mergeProps({
1436
+ "key": item.dataIndex,
1437
+ "label": item.title
1438
+ }, lodash.get(item.extra, "desc")), _isSlot(_slot = getItemVNode(item, value)) ? _slot : {
1439
+ "default": function _default() {
1440
+ return [_slot];
1441
+ }
1442
+ });
1443
+ });
1444
+ });
1445
+ return function () {
1446
+ var _slots$start, _slots$default;
1447
+
1448
+ return vue.createVNode(Descriptions, props, _objectSpread2({
1449
+ "default": function _default() {
1450
+ return [(_slots$start = slots.start) === null || _slots$start === void 0 ? void 0 : _slots$start.call(slots), descVNodes, (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];
1451
+ }
1452
+ }, lodash.omit(slots, "default", "start")));
1453
+ };
1454
+ }
1455
+ });
1456
+ };
1457
+
1458
+ var proCurdAddOrEditProps = function proCurdAddOrEditProps() {
1459
+ return {
1460
+ //是否使用operate bar
1461
+ operateBar: {
1462
+ type: Boolean,
1463
+ "default": true
1464
+ },
1465
+ //显示 确定并继续 按钮
1466
+ showContinueAdd: {
1467
+ type: Boolean,
1468
+ "default": false
1469
+ },
1470
+ //
1471
+ okText: {
1472
+ type: String,
1473
+ "default": "确定"
1474
+ },
1475
+ okButtonProps: {
1476
+ type: Object
1477
+ },
1478
+ //
1479
+ continueText: {
1480
+ type: String,
1481
+ "default": "确定并继续"
1482
+ },
1483
+ continueButtonProps: {
1484
+ type: Object
1485
+ }
1486
+ };
1487
+ };
1488
+
1489
+ var createCurdForm = function createCurdForm(Form, Button, convertFormProps) {
1490
+ return vue.defineComponent({
1491
+ props: _objectSpread2(_objectSpread2({}, Form.props), proCurdAddOrEditProps()),
1492
+ setup: function setup(props, _ref) {
1493
+ var slots = _ref.slots;
1494
+
1495
+ var _useProModule = useProModule(),
1496
+ elementMap = _useProModule.elementMap,
1497
+ formElementMap = _useProModule.formElementMap;
1498
+
1499
+ var _useProCurd = useProCurd(),
1500
+ curdState = _useProCurd.curdState,
1501
+ formColumns = _useProCurd.formColumns,
1502
+ sendCurdEvent = _useProCurd.sendCurdEvent;
1503
+
1504
+ var formRef = vue.ref();
1505
+
1506
+ var handleFinish = function handleFinish(values) {
1507
+ if (curdState.mode === exports.CurdCurrentMode.EDIT) {
1508
+ //edit
1509
+ sendCurdEvent({
1510
+ action: exports.CurdAction.EDIT,
1511
+ type: exports.CurdSubAction.EXECUTE,
1512
+ values: values
1513
+ });
1514
+ } else {
1515
+ //add
1516
+ sendCurdEvent({
1517
+ action: exports.CurdAction.ADD,
1518
+ type: exports.CurdSubAction.EXECUTE,
1519
+ values: values
1520
+ });
1521
+ }
1522
+ };
1523
+
1524
+ var handleAdd = function handleAdd() {
1525
+ var _formRef$value;
1526
+
1527
+ curdState.addAction = exports.CurdAddAction.NORMAL;
1528
+ (_formRef$value = formRef.value) === null || _formRef$value === void 0 ? void 0 : _formRef$value.submit();
1529
+ };
1530
+
1531
+ var handleContinueAdd = function handleContinueAdd() {
1532
+ var _formRef$value2;
1533
+
1534
+ curdState.addAction = exports.CurdAddAction.CONTINUE;
1535
+ (_formRef$value2 = formRef.value) === null || _formRef$value2 === void 0 ? void 0 : _formRef$value2.submit();
1536
+ };
1537
+
1538
+ return function () {
1539
+ var _slots$divide, _slots$operateStart, _slots$operateCenter, _slots$operateEnd, _slots$default;
1540
+
1541
+ return vue.createVNode(Form, vue.mergeProps({
1542
+ "ref": formRef
1543
+ }, props, {
1544
+ "elementMap": props.elementMap || elementMap,
1545
+ "formElementMap": props.formElementMap || formElementMap,
1546
+ "columns": formColumns.value,
1547
+ "model": curdState.detailData,
1548
+ "readonly": curdState.mode === exports.CurdCurrentMode.DETAIL,
1549
+ "onFinish": handleFinish
1550
+ }, convertFormProps === null || convertFormProps === void 0 ? void 0 : convertFormProps(curdState)), _objectSpread2({
1551
+ "default": function _default() {
1552
+ return [(_slots$divide = slots.divide) === null || _slots$divide === void 0 ? void 0 : _slots$divide.call(slots), props.operateBar && vue.createVNode("div", {
1553
+ "class": "pro-curd-form-operate"
1554
+ }, [(_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({
1555
+ "onClick": handleAdd
1556
+ }, props.okButtonProps, {
1557
+ "loading": curdState.operateLoading
1558
+ }), {
1559
+ "default": function _default() {
1560
+ return [props.okText];
1561
+ }
1562
+ }), (_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({
1563
+ "onClick": handleContinueAdd
1564
+ }, props.continueButtonProps, {
1565
+ "loading": curdState.operateLoading
1566
+ }), {
1567
+ "default": function _default() {
1568
+ return [props.continueText];
1569
+ }
1570
+ }), (_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)];
1571
+ }
1572
+ }, lodash.omit(slots, "default", "divide", "operateStart", "operateCenter", "operateEnd")));
1573
+ };
1574
+ }
1575
+ });
1576
+ };
1577
+
1578
+ var proCurdListProps = function proCurdListProps() {
1579
+ return {
1580
+ /**
1581
+ * extra 是否放到SearchForm中
1582
+ */
1583
+ extraInSearch: {
1584
+ type: Boolean,
1585
+ "default": undefined
1586
+ },
1587
+ //search
1588
+ searchProps: {
1589
+ type: Object
1590
+ },
1591
+ //table
1592
+ tableProps: {
1593
+ type: Object
1594
+ },
1595
+ //pageState
1596
+ pageState: {
1597
+ type: Object
1598
+ }
1599
+ };
1600
+ };
1601
+
1602
+ var createCurdList = function createCurdList(SearchForm, Table) {
1603
+ return vue.defineComponent({
1604
+ props: _objectSpread2({}, proCurdListProps()),
1605
+ setup: function setup(props, _ref) {
1606
+ var slots = _ref.slots;
1607
+
1608
+ var _useProModule = useProModule(),
1609
+ elementMap = _useProModule.elementMap,
1610
+ formElementMap = _useProModule.formElementMap;
1611
+
1612
+ var _useProCurd = useProCurd(),
1613
+ curdState = _useProCurd.curdState,
1614
+ searchColumns = _useProCurd.searchColumns,
1615
+ tableColumns = _useProCurd.tableColumns,
1616
+ getOperate = _useProCurd.getOperate,
1617
+ sendCurdEvent = _useProCurd.sendCurdEvent;
1618
+ /******************* search pagination ********************/
1619
+
1620
+
1621
+ var pageState = props.pageState || vue.reactive(_objectSpread2({}, defaultPage));
1622
+ var prevValues;
1623
+
1624
+ var handleSearch = function handleSearch() {
1625
+ sendCurdEvent({
1626
+ action: exports.CurdAction.LIST,
1627
+ type: exports.CurdSubAction.EMIT,
1628
+ values: _objectSpread2(_objectSpread2({}, prevValues), pageState)
1629
+ });
1630
+ };
1631
+
1632
+ var executeSearchWithResetPage = function executeSearchWithResetPage(values) {
1633
+ prevValues = values;
1634
+ pageState.page = 1;
1635
+ handleSearch();
1636
+ };
1637
+ /******************* table ********************/
1638
+
1639
+
1640
+ var createTableItem = function createTableItem(action) {
1641
+ var operate = getOperate(action);
1642
+
1643
+ var item = _objectSpread2(_objectSpread2({}, lodash.pick(operate, "label", "element", "disabled", "sort", "onClick")), {}, {
1644
+ show: !lodash.isUndefined(operate === null || operate === void 0 ? void 0 : operate.show) ? operate === null || operate === void 0 ? void 0 : operate.show : false,
1645
+ value: action
1646
+ });
1647
+
1648
+ if (!item.onClick) {
1649
+ return _objectSpread2(_objectSpread2({}, item), {}, {
1650
+ onClick: function onClick(record) {
1651
+ //默认发送事件
1652
+ sendCurdEvent({
1653
+ action: action,
1654
+ type: exports.CurdSubAction.EMIT,
1655
+ record: record
1656
+ });
1657
+ }
1658
+ });
1659
+ }
1660
+
1661
+ return item;
1662
+ }; //table操作栏 items
1663
+
1664
+
1665
+ var tableOperateItems = [createTableItem(exports.CurdAction.DETAIL), createTableItem(exports.CurdAction.EDIT), createTableItem(exports.CurdAction.DELETE)]; //新配置的operate item,添加默认发送事件方法
1666
+
1667
+ var convertOperateItems = function convertOperateItems(list) {
1668
+ return lodash.map(list, function (item) {
1669
+ if (!item.onClick) {
1670
+ return _objectSpread2(_objectSpread2({}, item), {}, {
1671
+ onClick: function onClick(record) {
1672
+ sendCurdEvent({
1673
+ action: "operate",
1674
+ type: item.value,
1675
+ record: record
1676
+ });
1677
+ }
1678
+ });
1679
+ }
1680
+
1681
+ return item;
1682
+ });
1683
+ };
1684
+
1685
+ return function () {
1686
+ var _props$searchProps, _slots$divide, _curdState$listData, _slots$divide2, _slots$footerStart, _slots$pagination, _curdState$listData2, _slots$footerEnd;
1687
+
1688
+ var tableProps = props.tableProps;
1689
+ var extra = slots.extra ? vue.createVNode("div", {
1690
+ "class": "pro-curd-list-extra"
1691
+ }, [slots.extra()]) : null;
1692
+ return vue.createVNode(vue.Fragment, null, [vue.createVNode(SearchForm, vue.mergeProps({
1693
+ "formElementMap": formElementMap
1694
+ }, lodash.omit(props.searchProps, "slots"), {
1695
+ "columns": searchColumns.value,
1696
+ "onFinish": executeSearchWithResetPage
1697
+ }), _objectSpread2({
1698
+ "default": function _default() {
1699
+ return [props.extraInSearch && extra];
1700
+ }
1701
+ }, (_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() : vue.createVNode(Table, vue.mergeProps({
1702
+ "elementMap": elementMap
1703
+ }, lodash.omit(tableProps, "slots", "operate"), {
1704
+ "operate": lodash.mergeWith({
1705
+ items: tableOperateItems
1706
+ }, tableProps === null || tableProps === void 0 ? void 0 : tableProps.operate, function (objValue, srcValue) {
1707
+ if (lodash.isArray(objValue) && lodash.isArray(srcValue)) {
1708
+ return lodash.concat(objValue, convertOperateItems(srcValue));
1709
+ }
1710
+ }),
1711
+ "paginationState": {
1712
+ page: pageState.page,
1713
+ pageSize: pageState.pageSize
1714
+ },
1715
+ "columns": tableColumns.value,
1716
+ "loading": curdState.listLoading,
1717
+ "dataSource": (_curdState$listData = curdState.listData) === null || _curdState$listData === void 0 ? void 0 : _curdState$listData.dataSource
1718
+ }), tableProps === null || tableProps === void 0 ? void 0 : tableProps.slots), (_slots$divide2 = slots.divide2) === null || _slots$divide2 === void 0 ? void 0 : _slots$divide2.call(slots), vue.createVNode("div", {
1719
+ "class": "pro-curd-list-footer"
1720
+ }, [(_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)])]);
1721
+ };
1722
+ }
1723
+ });
1724
+ };
1725
+
1726
+ var ProFormKey = Symbol("pro-form");
1727
+ var useProForm = function useProForm() {
1728
+ return vue.inject(ProFormKey);
1729
+ };
1730
+
1731
+ var provideProForm = function provideProForm(ctx) {
1732
+ vue.provide(ProFormKey, ctx);
1733
+ };
1734
+
1735
+ var proFormProps = function proFormProps() {
1736
+ return {
1737
+ /**
1738
+ * 同 antd 或 element form中的model
1739
+ */
1740
+ model: {
1741
+ type: Object
1742
+ },
1743
+
1744
+ /**
1745
+ * 子组件是否只读样式
1746
+ */
1747
+ readonly: {
1748
+ type: Boolean,
1749
+ "default": undefined
1750
+ },
1751
+
1752
+ /**
1753
+ * FormComponent 根据此项来确定组件是否显示
1754
+ * rules 根据rules中方法生成showState对象
1755
+ */
1756
+ showState: {
1757
+ type: Object
1758
+ },
1759
+ showStateRules: {
1760
+ type: Object
1761
+ },
1762
+
1763
+ /**
1764
+ * 是否只读
1765
+ */
1766
+ readonlyState: {
1767
+ type: Object
1768
+ },
1769
+ readonlyStateRules: {
1770
+ type: Object
1771
+ },
1772
+
1773
+ /**
1774
+ * 是否disabled
1775
+ */
1776
+ disableState: {
1777
+ type: Object
1778
+ },
1779
+ disableStateRules: {
1780
+ type: Object
1781
+ },
1782
+
1783
+ /**
1784
+ *
1785
+ */
1786
+ columns: {
1787
+ type: Array
1788
+ },
1789
+ columnState: {
1790
+ type: Object
1791
+ },
1792
+
1793
+ /**
1794
+ * 展示控件集合,readonly模式下使用这些组件渲染
1795
+ */
1796
+ elementMap: {
1797
+ type: Object
1798
+ },
1799
+
1800
+ /**
1801
+ * 录入控件集合
1802
+ */
1803
+ formElementMap: {
1804
+ type: Object
1805
+ },
1806
+
1807
+ /**
1808
+ * 是否启用rules验证
1809
+ */
1810
+ needRules: {
1811
+ type: Boolean,
1812
+ "default": true
1813
+ },
1814
+
1815
+ /**
1816
+ * provide传递
1817
+ */
1818
+ provideExtra: {
1819
+ type: Object
1820
+ }
1821
+ };
1822
+ };
1823
+
1824
+ var createForm = function createForm(Form, Grid) {
1825
+ return vue.defineComponent({
1826
+ inheritAttrs: false,
1827
+ props: _objectSpread2(_objectSpread2(_objectSpread2({}, Form.props), proFormProps()), lodash.omit(Grid.props, "items")),
1828
+ setup: function setup(props, _ref) {
1829
+ var slots = _ref.slots,
1830
+ emit = _ref.emit,
1831
+ expose = _ref.expose,
1832
+ attrs = _ref.attrs;
1833
+ var formState = props.model || vue.reactive({}); //组件状态相关
1834
+
1835
+ var showState = props.showState || vue.reactive({});
1836
+ var readonlyState = props.readonlyState || vue.reactive({});
1837
+ var disableState = props.disableState || vue.reactive({}); //formState改变情况下,更新 showState,readonlyState,disableState状态
1838
+
1839
+ hooks.useEffect(function () {
1840
+ if (props.showStateRules) {
1841
+ lodash.forEach(props.showStateRules, function (fn, key) {
1842
+ showState[key] = fn(formState);
1843
+ });
1844
+ }
1845
+
1846
+ if (props.readonlyStateRules) {
1847
+ lodash.forEach(props.readonlyStateRules, function (fn, key) {
1848
+ readonlyState[key] = fn(formState);
1849
+ });
1850
+ }
1851
+
1852
+ if (props.disableStateRules) {
1853
+ lodash.forEach(props.disableStateRules, function (fn, key) {
1854
+ disableState[key] = fn(formState);
1855
+ });
1856
+ }
1857
+ }, formState); //readonly
1858
+
1859
+ var readonly = vue.computed(function () {
1860
+ return props.readonly;
1861
+ }); //columns合并
1862
+
1863
+ var columns = vue.computed(function () {
1864
+ return mergeStateToList(props.columns, props.columnState, function (item) {
1865
+ return getColumnFormItemName(item);
1866
+ });
1867
+ });
1868
+
1869
+ var handleFinish = function handleFinish(values) {
1870
+ //删除不显示的值再触发事件
1871
+ var showValues = getValidValues(values, showState, props.showStateRules);
1872
+ emit("finish", showValues, values);
1873
+ };
1874
+
1875
+ var formRef = vue.ref();
1876
+ expose({
1877
+ submit: function submit() {
1878
+ var _formRef$value;
1879
+
1880
+ (_formRef$value = formRef.value) === null || _formRef$value === void 0 ? void 0 : _formRef$value.submit();
1881
+ },
1882
+ resetFields: function resetFields() {
1883
+ var _formRef$value2;
1884
+
1885
+ for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
1886
+ params[_key] = arguments[_key];
1887
+ }
1888
+
1889
+ (_formRef$value2 = formRef.value) === null || _formRef$value2 === void 0 ? void 0 : _formRef$value2.resetFields.apply(_formRef$value2, params);
1890
+ }
1891
+ });
1892
+ provideProForm(_objectSpread2({
1893
+ formState: formState,
1894
+ showState: showState,
1895
+ readonlyState: readonlyState,
1896
+ disableState: disableState,
1897
+ //
1898
+ elementMap: props.elementMap,
1899
+ formElementMap: props.formElementMap,
1900
+ //
1901
+ readonly: readonly,
1902
+ //
1903
+ columns: columns,
1904
+ //
1905
+ formRef: formRef
1906
+ }, props.provideExtra));
1907
+ var invalidKeys = lodash.keys(proFormProps());
1908
+ var gridKeys = lodash.keys(lodash.omit(Grid.props, "items"));
1909
+ return function () {
1910
+ var _slots$start, _slots$default;
1911
+
1912
+ return vue.createVNode(Form, vue.mergeProps({
1913
+ "ref": formRef
1914
+ }, lodash.omit(attrs, "onFinish"), lodash.omit.apply(void 0, [props].concat(_toConsumableArray(invalidKeys), _toConsumableArray(gridKeys), ["onFinish"])), {
1915
+ "model": formState,
1916
+ "onFinish": handleFinish
1917
+ }), _objectSpread2({
1918
+ "default": function _default() {
1919
+ 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, {
1920
+ "row": props.row,
1921
+ "col": props.col,
1922
+ "items": lodash.map(columns.value, function (item) {
1923
+ return {
1924
+ rowKey: getColumnFormItemName(item),
1925
+ vNode: getFormItemEl(props.formElementMap, item, props.needRules),
1926
+ col: lodash.get(item, ["extra", "col"])
1927
+ };
1928
+ })
1929
+ }, null) : lodash.map(columns.value, function (item) {
1930
+ return getFormItemEl(props.formElementMap, item, props.needRules);
1931
+ })]), (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];
1932
+ }
1933
+ }, lodash.omit(slots, "default")));
1934
+ };
1935
+ }
1936
+ });
1937
+ };
1938
+
977
1939
  exports.SearchMode = void 0;
978
1940
 
979
1941
  (function (SearchMode) {
@@ -1021,6 +1983,11 @@ var proSearchFormProps = function proSearchFormProps() {
1021
1983
  debounceKeys: {
1022
1984
  type: Array
1023
1985
  },
1986
+ //默认 valueType 为 text 的控件会debounce处理
1987
+ debounceTypes: {
1988
+ type: Array,
1989
+ "default": ["text"]
1990
+ },
1024
1991
  debounceTime: {
1025
1992
  type: Number,
1026
1993
  "default": 800
@@ -1032,106 +1999,73 @@ var proSearchFormProps = function proSearchFormProps() {
1032
1999
  * 该组件只是个模式,最终返回null,不做任何渲染,应配合着ProForm的包装类一起使用
1033
2000
  * 针对传入的model(监听对象)做相应的finish(回调)处理
1034
2001
  */
1035
- var ProSearchForm = vue.defineComponent({
1036
- props: _objectSpread2({}, proSearchFormProps()),
1037
- setup: function setup(props, _ref) {
1038
- var emit = _ref.emit;
1039
- //根据column valueType 算出默认需要debounce处理的属性集合
1040
- var defaultDebounceKeys = lodash.map(lodash.filter(props.columns, function (column) {
1041
- var valueType = getColumnValueType(column); //默认input组件的触发事件需要debounce处理
1042
-
1043
- return valueType === "text";
1044
- }), function (column) {
1045
- return getColumnFormItemName(column);
1046
- });
1047
-
1048
- var handleFinish = function handleFinish() {
1049
- emit("finish");
1050
- };
1051
-
1052
- var debounceFinish = lodash.debounce(function () {
1053
- handleFinish();
1054
- }, props.debounceTime); //初始化
1055
-
1056
- hooks.useEffect(function () {
1057
- if (props.initEmit) {
1058
- handleFinish();
1059
- }
1060
- }, []);
1061
-
1062
- var isDebounceDataChange = function isDebounceDataChange(state, prevState, debounceKeys) {
1063
- return lodash.some(debounceKeys, function (key) {
1064
- return lodash.get(state, key) !== lodash.get(prevState, key);
2002
+ var createSearchForm = function createSearchForm(Form, Props) {
2003
+ return vue.defineComponent({
2004
+ props: _objectSpread2(_objectSpread2(_objectSpread2({}, Form.props), Props), proSearchFormProps()),
2005
+ setup: function setup(props, _ref) {
2006
+ var slots = _ref.slots;
2007
+ var formState = props.model || vue.reactive({});
2008
+ var valueTypeSet = new Set(props.debounceTypes); //根据column valueType 算出默认需要debounce处理的属性集合
2009
+
2010
+ var defaultDebounceKeys = lodash.map(lodash.filter(props.columns, function (column) {
2011
+ var valueType = getColumnValueType(column); //默认input组件的触发事件需要debounce处理
2012
+
2013
+ return valueTypeSet.has(valueType);
2014
+ }), function (column) {
2015
+ return getColumnFormItemName(column);
1065
2016
  });
1066
- }; //监听
1067
-
1068
-
1069
- hooks.useWatch(function (state, prevState) {
1070
- if (props.searchMode !== exports.SearchMode.AUTO) {
1071
- return;
1072
- } //如果改变的值中包括debounceKeys中注册的 延时触发
1073
-
2017
+ var formRef = vue.ref();
1074
2018
 
1075
- var debounceKeys = lodash.size(props.debounceKeys) > 0 ? props.debounceKeys : defaultDebounceKeys;
2019
+ var handleFinish = function handleFinish() {
2020
+ var _formRef$value;
1076
2021
 
1077
- if (lodash.size(debounceKeys) > 0 && isDebounceDataChange(state, prevState, debounceKeys)) {
1078
- debounceFinish();
1079
- return;
1080
- }
2022
+ (_formRef$value = formRef.value) === null || _formRef$value === void 0 ? void 0 : _formRef$value.submit();
2023
+ };
1081
2024
 
1082
- handleFinish();
1083
- }, function () {
1084
- return lodash.clone(props.model);
1085
- });
1086
- return function () {
1087
- return null;
1088
- };
1089
- }
1090
- });
2025
+ var debounceFinish = lodash.debounce(function () {
2026
+ handleFinish();
2027
+ }, props.debounceTime); //初始化
1091
2028
 
1092
- /**
1093
- * 剔除showState或showStateRules规则为!true的值
1094
- * @param values
1095
- * @param showState
1096
- * @param showStateRules
1097
- */
1098
- var getValidValues = function getValidValues(values, showState, showStateRules) {
1099
- if (showState) {
1100
- var invalidKeys = lodash.filter(lodash.keys(showState), function (key) {
1101
- return !showState[key];
1102
- });
1103
- return lodash.omit(values, invalidKeys);
1104
- }
2029
+ hooks.useEffect(function () {
2030
+ if (props.initEmit) {
2031
+ handleFinish();
2032
+ }
2033
+ }, []);
1105
2034
 
1106
- if (showStateRules) {
1107
- var _invalidKeys = lodash.filter(lodash.keys(showStateRules), function (key) {
1108
- return !showStateRules[key](values);
1109
- });
2035
+ var isDebounceDataChange = function isDebounceDataChange(state, prevState, debounceKeys) {
2036
+ return lodash.some(debounceKeys, function (key) {
2037
+ return lodash.get(state, key) !== lodash.get(prevState, key);
2038
+ });
2039
+ }; //监听
1110
2040
 
1111
- return lodash.omit(values, _invalidKeys);
1112
- }
1113
2041
 
1114
- return values;
1115
- };
1116
- /**
1117
- * string类型的path转为arr
1118
- * @param path
1119
- */
2042
+ hooks.useWatch(function (state, prevState) {
2043
+ if (props.searchMode !== exports.SearchMode.AUTO) {
2044
+ return;
2045
+ } //如果改变的值中包括debounceKeys中注册的 延时触发
1120
2046
 
1121
- var convertPathToList = function convertPathToList(path) {
1122
- if (!path) {
1123
- return undefined;
1124
- }
1125
2047
 
1126
- if (lodash.isArray(path)) {
1127
- return path;
1128
- }
2048
+ var debounceKeys = lodash.size(props.debounceKeys) > 0 ? props.debounceKeys : defaultDebounceKeys;
1129
2049
 
1130
- if (path && lodash.isString(path) && path.indexOf(".") > 0) {
1131
- return lodash.split(path, ".");
1132
- }
2050
+ if (lodash.size(debounceKeys) > 0 && isDebounceDataChange(state, prevState, debounceKeys)) {
2051
+ debounceFinish();
2052
+ return;
2053
+ }
1133
2054
 
1134
- return [path];
2055
+ handleFinish();
2056
+ }, function () {
2057
+ return lodash.clone(formState);
2058
+ });
2059
+ var invalidKeys = lodash.keys(lodash.omit(proSearchFormProps(), "columns"));
2060
+ return function () {
2061
+ return vue.createVNode(Form, vue.mergeProps({
2062
+ "ref": formRef
2063
+ }, lodash.omit(props, invalidKeys), {
2064
+ "model": formState
2065
+ }), slots);
2066
+ };
2067
+ }
2068
+ });
1135
2069
  };
1136
2070
 
1137
2071
  /**
@@ -1166,86 +2100,83 @@ var FormListProvider = vue.defineComponent({
1166
2100
  }
1167
2101
  });
1168
2102
 
1169
- var proFormListProps = function proFormListProps() {
1170
- return {
1171
- //每行默认id
1172
- rowKey: {
1173
- type: String,
1174
- "default": "id"
1175
- },
1176
- //name
1177
- name: {
1178
- type: [String, Number, Array],
1179
- required: true
1180
- }
1181
- };
1182
- };
1183
-
1184
- var ProFormList = vue.defineComponent({
1185
- props: _objectSpread2({}, proFormListProps()),
1186
- setup: function setup(props, _ref2) {
1187
- var slots = _ref2.slots;
1188
-
1189
- var _useProForm = useProForm(),
1190
- formState = _useProForm.formState,
1191
- readonly = _useProForm.readonly;
2103
+ var createFormList = function createFormList(FormItem) {
2104
+ return vue.defineComponent({
2105
+ props: _objectSpread2(_objectSpread2({}, FormItem.props), {}, {
2106
+ //每行默认id
2107
+ rowKey: {
2108
+ type: String,
2109
+ "default": "id"
2110
+ }
2111
+ }),
2112
+ setup: function setup(props, _ref2) {
2113
+ var slots = _ref2.slots;
1192
2114
 
1193
- var formListCtx = useProFormList();
1194
- var nameList = convertPathToList(props.name);
1195
- var path = formListCtx !== null && formListCtx !== void 0 && formListCtx.pathList ? [].concat(_toConsumableArray(formListCtx.pathList), _toConsumableArray(nameList)) : nameList;
2115
+ var _useProForm = useProForm(),
2116
+ formState = _useProForm.formState,
2117
+ readonly = _useProForm.readonly;
1196
2118
 
1197
- var handleAdd = function handleAdd() {
1198
- var targetList = lodash.get(formState, path);
2119
+ var formListCtx = useProFormList();
2120
+ var nameList = convertPathToList(props.name);
2121
+ var path = formListCtx !== null && formListCtx !== void 0 && formListCtx.pathList ? [].concat(_toConsumableArray(formListCtx.pathList), _toConsumableArray(nameList)) : nameList;
1199
2122
 
1200
- if (!lodash.isArray(targetList)) {
1201
- targetList = [];
1202
- }
2123
+ var handleAdd = function handleAdd() {
2124
+ var targetList = lodash.get(formState, path);
1203
2125
 
1204
- targetList.push(_defineProperty({}, props.rowKey, new Date().valueOf()));
1205
- lodash.set(formState, path, targetList);
1206
- };
2126
+ if (!lodash.isArray(targetList)) {
2127
+ targetList = [];
2128
+ }
1207
2129
 
1208
- var handleRemove = function handleRemove(index) {
1209
- var targetList = lodash.get(formState, path);
2130
+ targetList.push(_defineProperty({}, props.rowKey, new Date().valueOf()));
2131
+ lodash.set(formState, path, targetList);
2132
+ };
1210
2133
 
1211
- if (lodash.size(targetList) <= 0) {
1212
- return;
1213
- }
2134
+ var handleRemove = function handleRemove(index) {
2135
+ var targetList = lodash.get(formState, path);
1214
2136
 
1215
- targetList.splice(index, 1);
1216
- };
2137
+ if (lodash.size(targetList) <= 0) {
2138
+ return;
2139
+ }
1217
2140
 
1218
- return function () {
1219
- var _slots$add;
2141
+ targetList.splice(index, 1);
2142
+ };
1220
2143
 
1221
- return vue.createVNode(vue.Fragment, null, [lodash.map(lodash.get(formState, path), function (item, index) {
1222
- var _slots$default2, _slots$itemAdd, _slots$itemMinus;
2144
+ return function () {
2145
+ var _slots$add;
1223
2146
 
1224
- return vue.createVNode(FormListProvider, {
1225
- "key": index,
1226
- "pathList": [].concat(_toConsumableArray(path), [index])
1227
- }, {
2147
+ return vue.createVNode(FormItem, lodash.omit(props, "rowKey"), {
1228
2148
  "default": function _default() {
1229
- return [vue.createVNode("div", {
1230
- "class": "pro-form-list-item"
1231
- }, [(_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", {
1232
- "class": "pro-form-list-item-add",
2149
+ return [lodash.map(lodash.get(formState, path), function (item, index) {
2150
+ var _slots$default2, _slots$itemAdd, _slots$itemMinus;
2151
+
2152
+ return vue.createVNode(FormListProvider, {
2153
+ "key": item[props.rowKey] || index,
2154
+ "pathList": [].concat(_toConsumableArray(path), [index])
2155
+ }, {
2156
+ "default": function _default() {
2157
+ return [vue.createVNode("div", {
2158
+ "class": "pro-form-list-item"
2159
+ }, [(_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", {
2160
+ "class": "pro-form-list-item-add",
2161
+ "onClick": handleAdd
2162
+ }, [(_slots$itemAdd = slots.itemAdd) === null || _slots$itemAdd === void 0 ? void 0 : _slots$itemAdd.call(slots)]), vue.createVNode("div", {
2163
+ "class": "pro-form-list-item-minus",
2164
+ "onClick": function onClick() {
2165
+ return handleRemove(index);
2166
+ }
2167
+ }, [(_slots$itemMinus = slots.itemMinus) === null || _slots$itemMinus === void 0 ? void 0 : _slots$itemMinus.call(slots)])])])];
2168
+ }
2169
+ });
2170
+ }), !readonly.value && vue.createVNode("div", {
2171
+ "class": "pro-form-list-add",
1233
2172
  "onClick": handleAdd
1234
- }, [(_slots$itemAdd = slots.itemAdd) === null || _slots$itemAdd === void 0 ? void 0 : _slots$itemAdd.call(slots)]), vue.createVNode("div", {
1235
- "class": "pro-form-list-item-minus",
1236
- "onClick": function onClick() {
1237
- return handleRemove(index);
1238
- }
1239
- }, [(_slots$itemMinus = slots.itemMinus) === null || _slots$itemMinus === void 0 ? void 0 : _slots$itemMinus.call(slots)])])])];
2173
+ }, [(_slots$add = slots.add) === null || _slots$add === void 0 ? void 0 : _slots$add.call(slots)])];
1240
2174
  }
1241
2175
  });
1242
- }), !readonly.value && vue.createVNode("div", {
1243
- "class": "pro-form-list-add",
1244
- "onClick": handleAdd
1245
- }, [(_slots$add = slots.add) === null || _slots$add === void 0 ? void 0 : _slots$add.call(slots)])]);
1246
- };
1247
- }
1248
- });
2176
+ };
2177
+ }
2178
+ });
2179
+ };
1249
2180
 
1250
2181
  var proFormItemProps = function proFormItemProps() {
1251
2182
  return {
@@ -1350,8 +2281,8 @@ var proTableProps = function proTableProps() {
1350
2281
  type: String
1351
2282
  },
1352
2283
 
1353
- /**
1354
- * 公共column,会merge到columns item中
2284
+ /**
2285
+ * 公共column,会merge到columns item中
1355
2286
  */
1356
2287
  column: {
1357
2288
  type: Object
@@ -1360,23 +2291,33 @@ var proTableProps = function proTableProps() {
1360
2291
  columns: {
1361
2292
  type: Array
1362
2293
  },
2294
+ columnState: {
2295
+ type: Object
2296
+ },
1363
2297
 
1364
- /**
1365
- * 展示控件集合,readonly模式下使用这些组件渲染
2298
+ /**
2299
+ * 展示控件集合,readonly模式下使用这些组件渲染
1366
2300
  */
1367
2301
  elementMap: {
1368
2302
  type: Object
1369
2303
  },
1370
2304
 
1371
- /**
1372
- * loading
2305
+ /**
2306
+ * 序号
1373
2307
  */
1374
- loading: {
2308
+ serialNumber: {
1375
2309
  type: Boolean
1376
2310
  },
1377
2311
 
1378
- /**
1379
- * provide传递
2312
+ /**
2313
+ * 分页
2314
+ */
2315
+ paginationState: {
2316
+ type: Object
2317
+ },
2318
+
2319
+ /**
2320
+ * provide传递
1380
2321
  */
1381
2322
  provideExtra: {
1382
2323
  type: Object
@@ -1384,37 +2325,35 @@ var proTableProps = function proTableProps() {
1384
2325
  };
1385
2326
  };
1386
2327
 
1387
- var ProTable = vue.defineComponent({
1388
- props: _objectSpread2({}, proTableProps()),
1389
- setup: function setup(props, _ref) {
1390
- var slots = _ref.slots;
1391
- var columns = vue.computed(function () {
1392
- //根据valueType选择对应的展示组件
1393
- var columns = lodash.map(props.columns, function (item) {
1394
- //merge公共item
1395
- var nextItem = lodash.merge(props.column, item);
1396
-
1397
- if (!item.customRender) {
1398
- nextItem.customRender = function (_ref2) {
1399
- var text = _ref2.text;
1400
- var vn = getItemEl(props.elementMap, _objectSpread2(_objectSpread2({}, item), {}, {
1401
- showProps: _objectSpread2(_objectSpread2({}, item.showProps), {}, {
1402
- content: props.columnEmptyText
1403
- })
1404
- }), text); //如果找不到注册的组件,使用当前值 及 columnEmptyText
2328
+ var createTable = function createTable(Table, Props) {
2329
+ return vue.defineComponent({
2330
+ props: _objectSpread2(_objectSpread2(_objectSpread2({}, Table.props), Props), proTableProps()),
2331
+ setup: function setup(props, _ref) {
2332
+ var slots = _ref.slots;
2333
+
2334
+ var createNumberColumn = function createNumberColumn() {
2335
+ return _objectSpread2(_objectSpread2({
2336
+ title: "序号",
2337
+ dataIndex: "serialNumber",
2338
+ width: 80
2339
+ }, props.column), {}, {
2340
+ customRender: function customRender(_ref2) {
2341
+ var _props$paginationStat, _props$paginationStat2;
1405
2342
 
1406
- return vn || text || props.columnEmptyText;
1407
- };
1408
- }
2343
+ var index = _ref2.index;
1409
2344
 
1410
- return nextItem;
1411
- });
1412
- var operate = props.operate; //处理operate
2345
+ 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) {
2346
+ return props.paginationState.pageSize * (props.paginationState.page - 1) + index + 1;
2347
+ }
2348
+
2349
+ return index + 1;
2350
+ }
2351
+ });
2352
+ };
2353
+
2354
+ var createOperateColumn = function createOperateColumn() {
2355
+ var operate = props.operate; //将itemState补充的信息拼到item中
1413
2356
 
1414
- if (operate && operate.items && lodash.some(operate.items, function (item) {
1415
- return item.show;
1416
- })) {
1417
- //将itemState补充的信息拼到item中
1418
2357
  var items = lodash.map(operate.items, function (i) {
1419
2358
  return _objectSpread2(_objectSpread2({}, i), lodash.get(operate.itemState, i.value));
1420
2359
  }); //排序
@@ -1422,14 +2361,14 @@ var ProTable = vue.defineComponent({
1422
2361
  var sortedItems = lodash.sortBy(items, function (item) {
1423
2362
  return item.sort;
1424
2363
  });
1425
- columns.push(_objectSpread2(_objectSpread2({
2364
+ return _objectSpread2(_objectSpread2(_objectSpread2({}, props.column), {}, {
1426
2365
  title: "操作",
1427
2366
  dataIndex: "operate",
1428
2367
  fixed: "right"
1429
- }, props.column), {}, {
2368
+ }, operate.column), {}, {
1430
2369
  customRender: function customRender(_ref3) {
1431
2370
  var record = _ref3.record;
1432
- var validItems = lodash.filter(sortedItems, function (item) {
2371
+ var showItems = lodash.filter(sortedItems, function (item) {
1433
2372
  if (item.show && lodash.isFunction(item.show)) {
1434
2373
  return item.show(record);
1435
2374
  }
@@ -1442,7 +2381,7 @@ var ProTable = vue.defineComponent({
1442
2381
  });
1443
2382
  return vue.createVNode("div", {
1444
2383
  "class": "pro-table-operate"
1445
- }, [lodash.map(validItems, function (item) {
2384
+ }, [lodash.map(showItems, function (item) {
1446
2385
  //自定义
1447
2386
  if (lodash.isFunction(item.element)) {
1448
2387
  return item.element(record, item);
@@ -1459,36 +2398,90 @@ var ProTable = vue.defineComponent({
1459
2398
  }, [item.label]);
1460
2399
  })]);
1461
2400
  }
1462
- }, operate.column));
1463
- }
2401
+ });
2402
+ };
1464
2403
 
1465
- return columns;
1466
- });
1467
- provideProTable(_objectSpread2({
1468
- columns: columns
1469
- }, props.provideExtra));
1470
- return function () {
1471
- var _slots$default;
2404
+ var columns = vue.computed(function () {
2405
+ var mergeColumns = mergeStateToList(props.columns, props.columnState, function (item) {
2406
+ return item.dataIndex;
2407
+ }); //根据valueType选择对应的展示组件
2408
+
2409
+ var columns = lodash.map(mergeColumns, function (item) {
2410
+ //merge公共item
2411
+ var nextItem = _objectSpread2(_objectSpread2({}, props.column), item);
2412
+
2413
+ if (!item.customRender) {
2414
+ nextItem.customRender = function (_ref4) {
2415
+ var text = _ref4.text;
2416
+ var vn = getItemEl(props.elementMap, _objectSpread2(_objectSpread2({}, item), {}, {
2417
+ showProps: _objectSpread2(_objectSpread2({}, item.showProps), {}, {
2418
+ content: props.columnEmptyText
2419
+ })
2420
+ }), text); //如果找不到注册的组件,使用当前值 及 columnEmptyText
2421
+
2422
+ return vn || text || props.columnEmptyText;
2423
+ };
2424
+ }
1472
2425
 
1473
- return (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots, columns.value);
1474
- };
1475
- }
1476
- });
2426
+ return nextItem;
2427
+ }); //处理序号
2428
+
2429
+ if (props.serialNumber) {
2430
+ columns.unshift(createNumberColumn());
2431
+ } //处理operate
2432
+
2433
+
2434
+ if (props.operate && props.operate.items && lodash.some(props.operate.items, function (item) {
2435
+ return item.show;
2436
+ })) {
2437
+ columns.push(createOperateColumn());
2438
+ }
2439
+
2440
+ return columns;
2441
+ });
2442
+ var tableRef = vue.ref();
2443
+ provideProTable(_objectSpread2({
2444
+ columns: columns,
2445
+ tableRef: tableRef
2446
+ }, props.provideExtra));
2447
+ var invalidKeys = lodash.keys(proTableProps());
2448
+ return function () {
2449
+ return vue.createVNode(Table, vue.mergeProps({
2450
+ "ref": tableRef
2451
+ }, lodash.omit(props, invalidKeys), {
2452
+ "columns": columns.value
2453
+ }), slots);
2454
+ };
2455
+ }
2456
+ });
2457
+ };
1477
2458
 
1478
2459
  exports.ProCurd = ProCurd;
1479
- exports.ProForm = ProForm;
1480
- exports.ProFormList = ProFormList;
2460
+ exports.ProModalCurd = ProModalCurd;
1481
2461
  exports.ProModule = ProModule;
1482
- exports.ProSearchForm = ProSearchForm;
1483
- exports.ProTable = ProTable;
2462
+ exports.ProPageCurd = ProPageCurd;
1484
2463
  exports.RequestAction = RequestAction;
1485
2464
  exports.convertPathToList = convertPathToList;
2465
+ exports.createCurdDesc = createCurdDesc;
2466
+ exports.createCurdForm = createCurdForm;
2467
+ exports.createCurdList = createCurdList;
2468
+ exports.createExpose = createExpose;
2469
+ exports.createForm = createForm;
1486
2470
  exports.createFormItemCompFn = createFormItemCompFn;
2471
+ exports.createFormList = createFormList;
2472
+ exports.createGrid = createGrid;
2473
+ exports.createSearchForm = createSearchForm;
2474
+ exports.createTable = createTable;
2475
+ exports.defaultPage = defaultPage;
2476
+ exports.findTargetInTree = findTargetInTree;
2477
+ exports.findTargetListInTree = findTargetListInTree;
2478
+ exports.generateId = generateId;
1487
2479
  exports.getColumnFormItemName = getColumnFormItemName;
1488
2480
  exports.getColumnValueType = getColumnValueType;
1489
2481
  exports.getFormItemEl = getFormItemEl;
1490
2482
  exports.getItemEl = getItemEl;
1491
2483
  exports.getValidValues = getValidValues;
2484
+ exports.mergeStateToList = mergeStateToList;
1492
2485
  exports.provideProCurd = provideProCurd;
1493
2486
  exports.provideProModule = provideProModule;
1494
2487
  exports.useComposeRequestActor = useComposeRequestActor;