@vue-start/pro 0.3.2 → 0.4.0

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
@@ -199,186 +199,12 @@ var useComposeRequestActor = function useComposeRequestActor(actors, options, ca
199
199
  }, []);
200
200
  };
201
201
 
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
- };
202
+ /***************************************** curd模式 *****************************************/
376
203
 
377
204
  /**
378
205
  * 获取Column的valueType,默认"text"
379
206
  * @param column
380
207
  */
381
-
382
208
  var getColumnValueType = function getColumnValueType(column) {
383
209
  return column.formValueType || column.valueType || "text";
384
210
  };
@@ -444,6 +270,213 @@ var getItemEl = function getItemEl(elementMap, column, value) {
444
270
  value: value
445
271
  }), (_column$formFieldProp2 = column.formFieldProps) === null || _column$formFieldProp2 === void 0 ? void 0 : _column$formFieldProp2.slots);
446
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
+
447
480
  var ProModuleKey = Symbol("pro-module");
448
481
  var useProModule = function useProModule() {
449
482
  return vue.inject(ProModuleKey);
@@ -466,32 +499,17 @@ var proModuleProps = function proModuleProps() {
466
499
  },
467
500
 
468
501
  /**
469
- * 配置(静态)
470
- */
471
- columns: {
472
- type: Array
473
- },
474
-
475
- /**
476
- * 配置(动态)
477
- * columns动态属性兼容
478
- */
479
- columnState: {
480
- type: Object
481
- },
482
-
483
- /**
484
- * 展示组件集
502
+ * 组件集
485
503
  */
486
504
  elementMap: {
487
505
  type: Object
488
506
  },
489
507
 
490
508
  /**
491
- * 录入组件集
509
+ * 组件描述(树)
492
510
  */
493
- formElementMap: {
494
- type: Object
511
+ elementConfigs: {
512
+ type: Array
495
513
  },
496
514
 
497
515
  /**
@@ -501,33 +519,21 @@ var proModuleProps = function proModuleProps() {
501
519
  type: Array
502
520
  }
503
521
  };
504
- };
505
-
506
- var ProModule = vue.defineComponent({
507
- props: _objectSpread2({}, proModuleProps()),
508
- setup: function setup(props, _ref) {
509
- var slots = _ref.slots,
510
- expose = _ref.expose;
511
-
512
- /**
513
- * columns columnState 合并
514
- */
515
- var columns = vue.computed(function () {
516
- return mergeStateToList(props.columns, props.columnState, function (item) {
517
- return getColumnFormItemName(item);
518
- });
519
- });
520
- /*********************************** 渲染组件 ***************************************/
521
- // 获取FormItem VNode
522
+ };
522
523
 
523
- var getFormItemVNode = function getFormItemVNode(column) {
524
- var needRules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
525
- return getFormItemEl(props.formElementMap, column, needRules);
526
- }; // 获取Item VNode
524
+ var ProModule = vue.defineComponent({
525
+ props: _objectSpread2({}, proModuleProps()),
526
+ setup: function setup(props, _ref) {
527
+ var slots = _ref.slots,
528
+ expose = _ref.expose;
527
529
 
530
+ /*********************************** render ***************************************/
531
+ var render = function render(elementConfig) {
532
+ if (lodash.isArray(elementConfig)) {
533
+ return renderElements(props.elementMap, elementConfig);
534
+ }
528
535
 
529
- var getItemVNode = function getItemVNode(column, value) {
530
- return getItemEl(props.elementMap, column, value);
536
+ return renderElement(props.elementMap, elementConfig);
531
537
  };
532
538
  /*********************************** 事件处理 ***************************************/
533
539
 
@@ -543,13 +549,15 @@ var ProModule = vue.defineComponent({
543
549
  var state = props.state || vue.reactive({});
544
550
 
545
551
  var dispatch = function dispatch(action) {
546
- //如果要更新的属性值是 object ,执行覆盖操作
547
- if (lodash.isObject(state[action.type])) {
548
- hooks.setReactiveValue(state[action.type], action.payload);
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);
549
557
  return;
550
558
  }
551
559
 
552
- state[action.type] = action.payload;
560
+ state[action.type] = data;
553
561
  };
554
562
  /*********************************** request ***************************************/
555
563
 
@@ -653,11 +661,7 @@ var ProModule = vue.defineComponent({
653
661
  }
654
662
  }, true);
655
663
  provideProModule({
656
- columns: columns,
657
- getFormItemVNode: getFormItemVNode,
658
- getItemVNode: getItemVNode,
659
664
  elementMap: props.elementMap,
660
- formElementMap: props.formElementMap,
661
665
  //
662
666
  subject$: subject$,
663
667
  sendEvent: sendEvent,
@@ -675,7 +679,7 @@ var ProModule = vue.defineComponent({
675
679
  return function () {
676
680
  var _slots$default;
677
681
 
678
- return (_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots);
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)]);
679
683
  };
680
684
  }
681
685
  });
@@ -754,6 +758,181 @@ exports.CurdAddAction = void 0;
754
758
  CurdAddAction["CONTINUE"] = "CONTINUE";
755
759
  })(exports.CurdAddAction || (exports.CurdAddAction = {}));
756
760
 
761
+ var treeDefaultNames = {
762
+ children: "children",
763
+ label: "label",
764
+ value: "value"
765
+ };
766
+ /**
767
+ * 根据value从treeData中找到对象
768
+ * @param data
769
+ * @param value
770
+ * @param fieldNames
771
+ * @param cb 对象:同步 方法:回调,可以理解为异步
772
+ */
773
+
774
+ var findTargetInTree = function findTargetInTree(data, value, fieldNames, cb) {
775
+ var index = lodash.findIndex(data, function (item) {
776
+ return lodash.get(item, (fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.value) || treeDefaultNames.value) === value;
777
+ });
778
+
779
+ if (index > -1) {
780
+ if (lodash.isFunction(cb)) {
781
+ cb(index, data[index], data);
782
+ } else {
783
+ cb.index = index;
784
+ cb.target = data[index];
785
+ cb.list = data;
786
+ }
787
+
788
+ return;
789
+ }
790
+
791
+ lodash.forEach(data, function (item) {
792
+ var children = lodash.get(item, (fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.children) || treeDefaultNames.children);
793
+
794
+ if (lodash.size(children) > 0) {
795
+ findTargetInTree(children, value, fieldNames, cb);
796
+ }
797
+ });
798
+ };
799
+ /**
800
+ * 根据value从treeData中找出对象及父列表
801
+ * @param data
802
+ * @param value
803
+ * @param fieldNames
804
+ * @param cb
805
+ * @param parent
806
+ */
807
+
808
+ var findTargetListInTree = function findTargetListInTree(data, value, fieldNames, cb) {
809
+ var parent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
810
+ var target = lodash.find(data, function (item) {
811
+ return lodash.get(item, (fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.value) || treeDefaultNames.value) === value;
812
+ });
813
+
814
+ if (target) {
815
+ if (lodash.isFunction(cb)) {
816
+ cb([].concat(_toConsumableArray(parent), [target]));
817
+ } else {
818
+ cb.list = [].concat(_toConsumableArray(parent), [target]);
819
+ }
820
+
821
+ return;
822
+ }
823
+
824
+ lodash.forEach(data, function (item) {
825
+ var children = lodash.get(item, (fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.children) || treeDefaultNames.children);
826
+
827
+ if (lodash.size(children) > 0) {
828
+ findTargetListInTree(children, value, fieldNames, cb, [].concat(_toConsumableArray(parent), [item]));
829
+ }
830
+ });
831
+ };
832
+
833
+ /**
834
+ * 剔除showState或showStateRules规则为!true的值
835
+ * @param values
836
+ * @param showState
837
+ * @param showStateRules
838
+ */
839
+
840
+ var getValidValues = function getValidValues(values, showState, showStateRules) {
841
+ if (showState) {
842
+ var invalidKeys = lodash.filter(lodash.keys(showState), function (key) {
843
+ return !showState[key];
844
+ });
845
+ return lodash.omit(values, invalidKeys);
846
+ }
847
+
848
+ if (showStateRules) {
849
+ var _invalidKeys = lodash.filter(lodash.keys(showStateRules), function (key) {
850
+ return !showStateRules[key](values);
851
+ });
852
+
853
+ return lodash.omit(values, _invalidKeys);
854
+ }
855
+
856
+ return values;
857
+ };
858
+ /**
859
+ * string类型的path转为arr
860
+ * @param path
861
+ */
862
+
863
+ var convertPathToList = function convertPathToList(path) {
864
+ if (!path) {
865
+ return undefined;
866
+ }
867
+
868
+ if (lodash.isArray(path)) {
869
+ return path;
870
+ }
871
+
872
+ if (path && lodash.isString(path) && path.indexOf(".") > 0) {
873
+ return lodash.split(path, ".");
874
+ }
875
+
876
+ return [path];
877
+ };
878
+ /**
879
+ * 将listState 中的数据通过id merge到 list item中
880
+ * ps:数组会替换
881
+ * 注意:mergeWith 会改变原始对象
882
+ * @param list
883
+ * @param listState
884
+ * @param id
885
+ */
886
+
887
+ var mergeStateToList = function mergeStateToList(list, listState, id) {
888
+ if (!listState || !id) {
889
+ return list;
890
+ }
891
+
892
+ return lodash.map(list, function (item) {
893
+ var idName = lodash.isFunction(id) ? id(item) : id; //如果listState中有值,merge处理
894
+
895
+ var stateData = lodash.get(listState, idName);
896
+
897
+ if (!stateData || lodash.isEmpty(stateData) || lodash.isFunction(stateData) || !lodash.isObject(stateData)) {
898
+ return item;
899
+ } //只有是对象(键值对)才合并
900
+
901
+
902
+ return lodash.mergeWith(item, stateData, function (objValue, srcValue) {
903
+ //如果是数组,替换
904
+ if (lodash.isArray(objValue) || lodash.isArray(srcValue)) {
905
+ return srcValue;
906
+ }
907
+ });
908
+ });
909
+ };
910
+
911
+ /**
912
+ * 唯一id
913
+ */
914
+
915
+ var generateId = function generateId() {
916
+ return Number(Math.random().toString().substr(3, 3) + Date.now()).toString(36);
917
+ };
918
+ /**
919
+ * ref 传递
920
+ */
921
+
922
+ var createExpose = function createExpose(methods, targetRef) {
923
+ return lodash.reduce(methods, function (pair, method) {
924
+ return _objectSpread2(_objectSpread2({}, pair), {}, _defineProperty({}, method, function () {
925
+ var _targetRef$value, _targetRef$value$meth;
926
+
927
+ for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
928
+ params[_key] = arguments[_key];
929
+ }
930
+
931
+ 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));
932
+ }));
933
+ }, {});
934
+ };
935
+
757
936
  var defaultPage = {
758
937
  page: 1,
759
938
  pageSize: 10
@@ -761,16 +940,38 @@ var defaultPage = {
761
940
 
762
941
  var proCurdProps = function proCurdProps() {
763
942
  return {
764
- /**
765
- * 列表 或 详情 的唯一标识
943
+ /**
944
+ * 配置(静态)
945
+ */
946
+ columns: {
947
+ type: Array
948
+ },
949
+
950
+ /**
951
+ * 配置(动态)
952
+ * columns动态属性兼容
953
+ */
954
+ columnState: {
955
+ type: Object
956
+ },
957
+
958
+ /**
959
+ * 录入组件集
960
+ */
961
+ formElementMap: {
962
+ type: Object
963
+ },
964
+
965
+ /**
966
+ * 列表 或 详情 的唯一标识
766
967
  */
767
968
  rowKey: {
768
969
  type: String,
769
970
  "default": "id"
770
971
  },
771
972
 
772
- /**
773
- * operates
973
+ /**
974
+ * operates
774
975
  */
775
976
  operates: {
776
977
  type: Array
@@ -799,58 +1000,67 @@ var Curd = vue.defineComponent({
799
1000
  expose = _ref.expose;
800
1001
 
801
1002
  var _ref2 = useProModule(),
802
- columns = _ref2.columns,
1003
+ elementMap = _ref2.elementMap,
803
1004
  state = _ref2.state,
804
1005
  sendEvent = _ref2.sendEvent,
805
1006
  sendRequest = _ref2.sendRequest;
806
- /**
807
- * 排序
808
- * @param list
809
- * @param propName
1007
+ /**
1008
+ * columns columnState 合并
810
1009
  */
811
1010
 
812
1011
 
813
- var dealSort = function dealSort(list, propName) {
814
- return lodash.sortBy(list, function (item) {
815
- return lodash.get(item, propName);
1012
+ var columns = vue.computed(function () {
1013
+ return mergeStateToList(props.columns, props.columnState, function (item) {
1014
+ return getColumnFormItemName(item);
816
1015
  });
1016
+ });
1017
+ /*********************************** 渲染组件 ***************************************/
1018
+ // 获取FormItem VNode
1019
+
1020
+ var getFormItemVNode = function getFormItemVNode(column) {
1021
+ var needRules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
1022
+ return getFormItemEl(props.formElementMap, column, needRules);
1023
+ }; // 获取Item VNode
1024
+
1025
+
1026
+ var getItemVNode = function getItemVNode(column, value) {
1027
+ return getItemEl(elementMap, column, value);
817
1028
  };
818
- /**
819
- * hideInForm columns
1029
+ /**
1030
+ * ${signName} 配置为true 会被选择
1031
+ * @param signName
1032
+ * @param opposite 如果为true,未配置(undefined)会被选择
820
1033
  */
821
1034
 
822
1035
 
1036
+ var getSignColumns = function getSignColumns(signName, opposite) {
1037
+ var signColumns = lodash.filter(columns.value, function (item) {
1038
+ var sign = lodash.get(item, ["extra", signName]) || lodash.get(item, signName);
1039
+
1040
+ if (opposite) {
1041
+ //不为false 即为选中
1042
+ return sign !== false;
1043
+ } //只有true 才为选中
1044
+
1045
+
1046
+ return sign;
1047
+ });
1048
+ return lodash.sortBy(signColumns, function (item) {
1049
+ return lodash.get(item, ["extra", "".concat(signName, "Sort")]) || lodash.get(item, "".concat(signName, "Sort"));
1050
+ });
1051
+ };
1052
+
823
1053
  var formColumns = vue.computed(function () {
824
- return dealSort(lodash.filter(columns.value, function (item) {
825
- return !item.hideInForm;
826
- }), "formSort");
1054
+ return getSignColumns("form", true);
827
1055
  });
828
- /**
829
- * 非 hideInDetail columns
830
- */
831
-
832
1056
  var descColumns = vue.computed(function () {
833
- return dealSort(lodash.filter(columns.value, function (item) {
834
- return !item.hideInDetail;
835
- }), "descSort");
1057
+ return getSignColumns("detail", true);
836
1058
  });
837
- /**
838
- * 非 hideInTable columns
839
- */
840
-
841
1059
  var tableColumns = vue.computed(function () {
842
- return dealSort(lodash.filter(columns.value, function (item) {
843
- return !item.hideInTable;
844
- }), "tableSort");
1060
+ return getSignColumns("table", true);
845
1061
  });
846
- /**
847
- * search columns
848
- */
849
-
850
1062
  var searchColumns = vue.computed(function () {
851
- return dealSort(lodash.filter(columns.value, function (item) {
852
- return !!item.search;
853
- }), "searchSort");
1063
+ return getSignColumns("search");
854
1064
  });
855
1065
  /******************************** 逻辑 *************************************/
856
1066
  //上一次发起列表请求的参数
@@ -935,6 +1145,13 @@ var Curd = vue.defineComponent({
935
1145
  return props.modalProps;
936
1146
  });
937
1147
  provideProCurd({
1148
+ columns: columns,
1149
+ getSignColumns: getSignColumns,
1150
+ getFormItemVNode: getFormItemVNode,
1151
+ getItemVNode: getItemVNode,
1152
+ elementMap: elementMap,
1153
+ formElementMap: props.formElementMap,
1154
+ //
938
1155
  rowKey: props.rowKey,
939
1156
  curdState: state,
940
1157
  formColumns: formColumns,
@@ -1416,14 +1633,17 @@ function _isSlot(s) {
1416
1633
 
1417
1634
  var createCurdDesc = function createCurdDesc(Descriptions, DescriptionsItem) {
1418
1635
  return vue.defineComponent({
1419
- props: _objectSpread2({}, Descriptions.props),
1636
+ props: _objectSpread2(_objectSpread2({}, Descriptions.props), {}, {
1637
+ //重写Item content
1638
+ renderItem: {
1639
+ type: Function
1640
+ }
1641
+ }),
1420
1642
  setup: function setup(props, _ref) {
1421
1643
  var slots = _ref.slots;
1422
1644
 
1423
- var _useProModule = useProModule(),
1424
- getItemVNode = _useProModule.getItemVNode;
1425
-
1426
1645
  var _useProCurd = useProCurd(),
1646
+ getItemVNode = _useProCurd.getItemVNode,
1427
1647
  curdState = _useProCurd.curdState,
1428
1648
  descColumns = _useProCurd.descColumns;
1429
1649
 
@@ -1431,6 +1651,14 @@ var createCurdDesc = function createCurdDesc(Descriptions, DescriptionsItem) {
1431
1651
  return lodash.map(descColumns.value, function (item) {
1432
1652
  var _slot;
1433
1653
 
1654
+ var _props$renderItem;
1655
+
1656
+ var vn = (_props$renderItem = props.renderItem) === null || _props$renderItem === void 0 ? void 0 : _props$renderItem.call(props, item);
1657
+
1658
+ if (vn) {
1659
+ return vn;
1660
+ }
1661
+
1434
1662
  var value = lodash.get(curdState.detailData, item.dataIndex);
1435
1663
  return vue.createVNode(DescriptionsItem, vue.mergeProps({
1436
1664
  "key": item.dataIndex,
@@ -1447,7 +1675,7 @@ var createCurdDesc = function createCurdDesc(Descriptions, DescriptionsItem) {
1447
1675
 
1448
1676
  return vue.createVNode(Descriptions, props, _objectSpread2({
1449
1677
  "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)];
1678
+ 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)];
1451
1679
  }
1452
1680
  }, lodash.omit(slots, "default", "start")));
1453
1681
  };
@@ -1492,11 +1720,9 @@ var createCurdForm = function createCurdForm(Form, Button, convertFormProps) {
1492
1720
  setup: function setup(props, _ref) {
1493
1721
  var slots = _ref.slots;
1494
1722
 
1495
- var _useProModule = useProModule(),
1496
- elementMap = _useProModule.elementMap,
1497
- formElementMap = _useProModule.formElementMap;
1498
-
1499
1723
  var _useProCurd = useProCurd(),
1724
+ elementMap = _useProCurd.elementMap,
1725
+ formElementMap = _useProCurd.formElementMap,
1500
1726
  curdState = _useProCurd.curdState,
1501
1727
  formColumns = _useProCurd.formColumns,
1502
1728
  sendCurdEvent = _useProCurd.sendCurdEvent;
@@ -1605,11 +1831,9 @@ var createCurdList = function createCurdList(SearchForm, Table) {
1605
1831
  setup: function setup(props, _ref) {
1606
1832
  var slots = _ref.slots;
1607
1833
 
1608
- var _useProModule = useProModule(),
1609
- elementMap = _useProModule.elementMap,
1610
- formElementMap = _useProModule.formElementMap;
1611
-
1612
1834
  var _useProCurd = useProCurd(),
1835
+ elementMap = _useProCurd.elementMap,
1836
+ formElementMap = _useProCurd.formElementMap,
1613
1837
  curdState = _useProCurd.curdState,
1614
1838
  searchColumns = _useProCurd.searchColumns,
1615
1839
  tableColumns = _useProCurd.tableColumns,
@@ -2461,6 +2685,7 @@ exports.ProModalCurd = ProModalCurd;
2461
2685
  exports.ProModule = ProModule;
2462
2686
  exports.ProPageCurd = ProPageCurd;
2463
2687
  exports.RequestAction = RequestAction;
2688
+ exports.Wrapper = Wrapper;
2464
2689
  exports.convertPathToList = convertPathToList;
2465
2690
  exports.createCurdDesc = createCurdDesc;
2466
2691
  exports.createCurdForm = createCurdForm;
@@ -2478,12 +2703,15 @@ exports.findTargetListInTree = findTargetListInTree;
2478
2703
  exports.generateId = generateId;
2479
2704
  exports.getColumnFormItemName = getColumnFormItemName;
2480
2705
  exports.getColumnValueType = getColumnValueType;
2706
+ exports.getFirstPropName = getFirstPropName;
2481
2707
  exports.getFormItemEl = getFormItemEl;
2482
2708
  exports.getItemEl = getItemEl;
2483
2709
  exports.getValidValues = getValidValues;
2484
2710
  exports.mergeStateToList = mergeStateToList;
2485
2711
  exports.provideProCurd = provideProCurd;
2486
2712
  exports.provideProModule = provideProModule;
2713
+ exports.renderElement = renderElement;
2714
+ exports.renderElements = renderElements;
2487
2715
  exports.useComposeRequestActor = useComposeRequestActor;
2488
2716
  exports.useDoneRequestActor = useDoneRequestActor;
2489
2717
  exports.useFailedRequestActor = useFailedRequestActor;