cnhis-design-vue 0.3.8-beta → 3.0.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.
Files changed (39) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +22 -22
  3. package/env.d.ts +22 -22
  4. package/es/big-table/index.css +785 -7
  5. package/es/big-table/index.js +1862 -1450
  6. package/es/button-print/index.css +811 -9
  7. package/es/button-print/index.js +705 -774
  8. package/es/drag-layout/index.css +1044 -12
  9. package/es/drag-layout/index.js +705 -774
  10. package/es/grid/index.css +1045 -12
  11. package/es/grid/index.js +32 -40
  12. package/es/index.css +1044 -12
  13. package/es/index.js +1869 -1455
  14. package/package.json +8 -3
  15. package/packages/big-table/index.ts +8 -3
  16. package/packages/big-table/src/BigTable.vue +55 -312
  17. package/packages/big-table/src/FieldSet.vue +477 -0
  18. package/packages/big-table/src/assets/style/table-base.less +77 -81
  19. package/packages/big-table/src/assets/style/table-global.less +0 -8
  20. package/packages/big-table/src/components/TextOverTooltip.vue +1 -1
  21. package/packages/big-table/src/components/edit-form/edit-select-table.vue +13 -7
  22. package/packages/big-table/src/components/edit-form/edit-select.vue +24 -3
  23. package/packages/big-table/src/hooks/useEdit.ts +73 -0
  24. package/packages/big-table/src/hooks/useFormat.ts +1 -1
  25. package/packages/big-table/src/hooks/useNestTable.ts +1 -1
  26. package/packages/big-table/src/hooks/useTableParse.ts +3 -3
  27. package/packages/big-table/src/utils.ts +1 -1
  28. package/packages/button-print/index.ts +3 -3
  29. package/packages/button-print/src/ButtonPrint.vue +2 -2
  30. package/packages/button-print/src/components/IdentityVerification.vue +1 -1
  31. package/packages/drag-layout/index.ts +3 -3
  32. package/packages/drag-layout/src/DragLayout.vue +2 -2
  33. package/packages/grid/index.ts +3 -3
  34. package/packages/grid/src/Grid.tsx +1 -1
  35. package/src/core/{create.ts → create.js} +1 -1
  36. package/src/utils/{vexutils.ts → vexutils.js} +44 -44
  37. package/tsconfig.node.json +8 -8
  38. package/packages/big-table/src/components/SvgIcon.vue +0 -49
  39. package/packages/button-print/src/utils/crypto.js +0 -25
package/package.json CHANGED
@@ -1,20 +1,22 @@
1
1
  {
2
2
  "name": "cnhis-design-vue",
3
3
  "private": false,
4
- "version": "0.3.8-beta",
4
+ "version": "3.0.0",
5
5
  "main": "es/index.js",
6
+ "module": "es/index.js",
6
7
  "scripts": {
7
8
  "dev": "vite --host --port 3200",
8
9
  "build:docs": "vite build",
9
10
  "build:es": "npm run build:packges",
10
11
  "build:packges": "rollup -c build/config.component.ts",
11
12
  "build:packges:dts": "rollup -c build/config.component.dts.ts",
12
- "preview": "vite preview"
13
+ "preview": "vite preview",
14
+ "release": "standard-version"
13
15
  },
14
16
  "peerDependencies": {
15
- "naive-ui": "^2.28.1",
16
17
  "@vicons/ionicons5": "^0.12.0",
17
18
  "axios": "^0.26.1",
19
+ "naive-ui": "^2.28.1",
18
20
  "qs": "^6.10.3"
19
21
  },
20
22
  "dependencies": {
@@ -31,6 +33,7 @@
31
33
  "xe-utils": "^3.5.4"
32
34
  },
33
35
  "devDependencies": {
36
+ "@rollup/plugin-alias": "^3.1.9",
34
37
  "@rollup/plugin-commonjs": "^21.0.3",
35
38
  "@rollup/plugin-image": "^2.1.1",
36
39
  "@rollup/plugin-node-resolve": "^13.1.3",
@@ -44,6 +47,7 @@
44
47
  "eslint-plugin-vue": "^8.5.0",
45
48
  "less": "^4.1.2",
46
49
  "rollup": "^2.70.0",
50
+ "rollup-plugin-delete": "^2.0.0",
47
51
  "rollup-plugin-esbuild": "^4.9.1",
48
52
  "rollup-plugin-external-globals": "^0.6.1",
49
53
  "rollup-plugin-jsx": "^1.0.3",
@@ -52,6 +56,7 @@
52
56
  "rollup-plugin-typescript2": "^0.31.2",
53
57
  "rollup-plugin-vue": "^6.0.0",
54
58
  "rollup-plugin-vue-jsx-compat": "0.0.6",
59
+ "standard-version": "^9.3.2",
55
60
  "typescript": "^4.5.4",
56
61
  "vite": "^2.8.0",
57
62
  "vue-tsc": "^0.29.8"
@@ -2,16 +2,21 @@ import type { App } from "vue";
2
2
  // import XEUtils from "xe-utils";
3
3
  // 导入组件
4
4
  import BigTable from "./src/BigTable.vue"
5
+ import FieldSet from './src/FieldSet.vue'
5
6
 
6
- type SFCWithInstall<T> = T & { install(app: App): void }; // vue 安装
7
+ // type SFCWithInstall<T> = T & { install(app: App): void }; // vue 安装
7
8
 
8
9
  // 为组件提供 install 安装方法,供按需引入
9
10
  BigTable.install = function(app: App) {
10
11
  app.component(BigTable.name, BigTable);
12
+ app.component(FieldSet.name, FieldSet)
11
13
  // app.config.globalProperties.$utils = XEUtils;
12
14
  };
13
15
 
14
- const CBigTable: SFCWithInstall<typeof BigTable> = BigTable; // 增加类型
16
+ // const CBigTable: SFCWithInstall<typeof BigTable> = BigTable; // 增加类型
15
17
 
18
+ Object.assign(BigTable, {
19
+ FieldSet
20
+ });
16
21
  // 默认导出组件
17
- export default CBigTable;
22
+ export default BigTable;
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div
3
- class="big-table"
3
+ class="big-table custom-big-table"
4
4
  :class="{
5
5
  mt: state.visibleCheckAllWrap || state.visibleTreeCheck || state.hasRefresh,
6
6
  'expand-padding': !props.isNestTable,
@@ -155,7 +155,7 @@
155
155
  </template>
156
156
 
157
157
  <script lang="tsx">
158
- import create from '@/core/create';
158
+ import create from '@/core/create.js';
159
159
  export default create({
160
160
  name: "BigTable"
161
161
  })
@@ -171,11 +171,12 @@ import { useFormat } from "./hooks/useFormat";
171
171
  import { useTableParse } from "./hooks/useTableParse";
172
172
  import { useBatchEditing } from "./hooks/useBatchEditing";
173
173
  import { useNestTable } from "./hooks/useNestTable";
174
+ import { useEdit } from './hooks/useEdit';
174
175
  import { SettingsSharp, SyncOutline, CopyOutline, CaretDown, CaretForward } from "@vicons/ionicons5";
175
176
  import NoData from "./components/NoData.vue";
176
177
  import TextOverTooltip from "./components/TextOverTooltip.vue";
177
- // import SvgIcon from '@/component/svg/index.vue';
178
- import SvgIcon from "./components/SvgIcon.vue";
178
+ import SvgIcon from '@/component/svg/index.vue';
179
+ // import SvgIcon from "./components/SvgIcon.vue";
179
180
  // import EditForm from './components/edit-form/EditForm.vue';
180
181
  import EditSelectTable from './components/edit-form/edit-select-table.vue'
181
182
  import EditInput from './components/edit-form/edit-input.vue'
@@ -200,8 +201,8 @@ import {
200
201
  NEmpty
201
202
  } from "naive-ui";
202
203
  import { useMessage } from 'naive-ui'
203
- import CGrid from '~/grid';
204
- import vexutils from '@/utils/vexutils';
204
+ import CGrid from '~/grid/index.ts';
205
+ import vexutils from '@/utils/vexutils.js';
205
206
  import {
206
207
  getEvaluate,
207
208
  getMapVal,
@@ -275,6 +276,7 @@ const {
275
276
  recordClickBtnInfo,
276
277
  getInlineOpreateRow
277
278
  }: any = useBatchEditing(props, state, emit, xGrid);
279
+ const { initEditTable, activeMethod, deleteRow, onClickSelectTable } = useEdit(props, state, emit, xGrid)
278
280
 
279
281
  const {
280
282
  isAboutNestTable,
@@ -436,7 +438,6 @@ const loadData = async (data: any) => {
436
438
  state.originFormatList = formatList;
437
439
 
438
440
  setGroupTitleToFristColumnFieldData(formatList);
439
- console.log("formatList--------------", formatList);
440
441
  state.curAbleCheckedLen = list.filter((item: any) => checkMethod({ row: item })).length;
441
442
 
442
443
  // 非子列表触发
@@ -458,8 +459,9 @@ const loadData = async (data: any) => {
458
459
  // 暂时 不知道是否影响其它????
459
460
  // 还是用loadData较好,树表展开需要在更新数据后保留上一次的状态
460
461
  // table.clearSort(); // <-- table.loadData 不会清空sort选项,导致sortChange重复触发
461
- console.log("table--------------", formatList);
462
462
  await table.loadData(formatList);
463
+ initEditTable()
464
+
463
465
 
464
466
  table.setCurrentRow({});
465
467
  setCurrentPageRowChecked();
@@ -523,7 +525,8 @@ const formatColumns = (map: any) => {
523
525
  if (isEdit) {
524
526
  state.editConfig = Object.assign(state.editConfig, editConfig, {
525
527
  mode: 'cell',
526
- autoClear: true
528
+ autoClear: true,
529
+ activeMethod
527
530
  })
528
531
  }
529
532
  if (selectType) {
@@ -574,7 +577,7 @@ const formatColumns = (map: any) => {
574
577
  slots: {
575
578
  header: () => {
576
579
  return [
577
- tableNoSetting.value ? null : <NIcon size="14" color="#0e7a0d" component={SettingsSharp} onClick={() => showDrawer()} />
580
+ tableNoSetting.value ? null : <NIcon size="14" color="#777" component={SettingsSharp} onClick={() => showDrawer()} />
578
581
  ];
579
582
  },
580
583
  },
@@ -649,11 +652,22 @@ const formatColumns = (map: any) => {
649
652
  // return formatter(params, item);
650
653
  // },
651
654
  // },
652
- slots: isEdit ? {
653
- edit: (params: any) => formatterEdit(params, item)
654
- } : {
655
- default: (params: any) => formatter(params, item)
655
+ slots: {
656
+ edit: (params: any) => {
657
+ if (isEdit && item.isEdit && item.columnName !== 'operatorColumn') {
658
+ return formatterEdit(params, item)
659
+ } else {
660
+ return <span>{params.row[item.columnName]}</span>
661
+ }
656
662
  },
663
+ default: (params: any) => {
664
+ if(!isEdit || item.columnName === 'operatorColumn' || !item.isEdit) {
665
+ return formatter(params, item)
666
+ } else {
667
+ return <span>{params.row[item.columnName]}</span>
668
+ }
669
+ }
670
+ },
657
671
  editRender: isEdit ? {} : generateEditRender(item)
658
672
  });
659
673
 
@@ -703,19 +717,35 @@ const formatterEdit = (params: any, col: any) => {
703
717
  row,
704
718
  col
705
719
  }
706
- return <EditSelectTable {...propsData} v-model={[row[col.columnName], 'value']} />
720
+ return <EditSelectTable {...propsData} v-model={[row[col.columnName], 'value']} onClickSelectTable={onClickSelectTable} />
707
721
  }
708
722
  if (formType === 'input') {
709
723
  return <EditInput v-model={[row[col.columnName], 'value']} />
710
724
  }
711
725
  if (formType === 'select') {
712
726
  const propsData = {
713
- col
727
+ col,
728
+ row
714
729
  }
715
- return <EditSelect {...propsData} v-model={[row[col.columnName], 'value']} />
730
+ return <EditSelect {...propsData} v-model={[row[col.columnName], 'value']} onSetOptions={(options: any[]) => row[`${col.columnName}_options`] = options} />
716
731
  }
717
732
  }
718
-
733
+ const getEditBtn = (row: any, col: any) => {
734
+ return col.tileBtnList.map((btn: any) => {
735
+ if (btn.settingObj[0].trigger_type === 'DELETE') {
736
+ return <NPopconfirm
737
+ onPositiveClick={() => deleteRow(row)}
738
+ >
739
+ {{
740
+ trigger: () => <NButton color={btn.settingObj[0].color || '#999'} text>{btn.name}</NButton>,
741
+ default: () => '是否确认删除?'
742
+ }}
743
+ </NPopconfirm>
744
+ } else {
745
+ return null
746
+ }
747
+ })
748
+ }
719
749
  // 表格渲染逻辑
720
750
  const formatter = (params: any, col: any) => {
721
751
  let { row, column, $rowIndex } = params;
@@ -797,8 +827,11 @@ const formatter = (params: any, col: any) => {
797
827
  if (attrType === "QR_CODE") {
798
828
  return getOrCode(row, own, attrType);
799
829
  }
800
-
801
830
  if (column.property === "operatorColumn") {
831
+ if (props.columnConfig.isEdit && !row.initRow) {
832
+ return getEditBtn(row, col)
833
+ }
834
+
802
835
  if (state.showButtonTop != 0 || props.isBatchEditing) return;
803
836
  const inlineBtnList = generateInlineBtnList(row, $rowIndex);
804
837
  const tileBtnList = getTileBtnList(row, $rowIndex);
@@ -1455,27 +1488,14 @@ const setCheckedMehod = (setChecked: any, row: any) => {
1455
1488
  }
1456
1489
  updateAddCheckedRows(row);
1457
1490
  }
1458
- //
1459
- const getFormType = (field: string) => {
1460
- const obj = props.columnConfig.fieldList.find((v: any) => v.columnName === field)
1461
- return obj ? obj.formType || '' : ''
1462
- }
1463
1491
  //行点击
1464
1492
  const handlerClickRow = (data: any) => {
1465
- console.log("data.", data);
1493
+ // console.log("data.", data);
1466
1494
  if (isScanMultiTable.value || props.isInlineOperating) return false;
1467
1495
  if (vexutils.has(data?.row, GROUP_TITLE_KEY)) return false;
1468
1496
  if (state.isTriggerSelectionChange && state.isTree == 0) return false;
1469
1497
  let table = xGrid.value;
1470
1498
 
1471
- const formType = getFormType(data.column.field)
1472
- console.log('formType---', formType)
1473
- if (formType === 'selectTable') {
1474
- // table.clearActived().then(() => {
1475
- table.setActiveCell(data.row, data.column.field)
1476
- // })
1477
- }
1478
-
1479
1499
  // 嵌套表与主表click切换时需要清除上次的选中
1480
1500
  isAboutNestTable.value && emit('resetNestLastClickTable', table);
1481
1501
 
@@ -2554,288 +2574,11 @@ const clearChecked = () => {
2554
2574
  state.treeTableLength = 0;
2555
2575
  }
2556
2576
  defineExpose({
2557
- loadColumnAndData,
2558
- getCheckboxRecords,
2559
- clearChecked,
2560
- setCurrentRow,
2561
- loadColumn,
2562
- removeInsert,
2577
+ formatData,
2563
2578
  xGrid
2564
2579
  })
2565
2580
 
2566
2581
  </script>
2567
- <style lang="less" scoped>
2568
- .big-table {
2569
- position: relative;
2570
-
2571
- &:deep(.img-wrap) {
2572
- padding: 2px 0;
2573
- line-height: 1;
2574
- height: 100%;
2575
- display: flex;
2576
- align-items: center;
2577
-
2578
- img {
2579
- max-height: 100%;
2580
- object-fit: contain;
2581
- cursor: pointer;
2582
- }
2583
- &.img-circle {
2584
- img {
2585
- width: 28px;
2586
- border-radius: 50%;
2587
- object-fit: contain;
2588
- }
2589
- }
2590
- }
2591
- .bigTable-qr-span {
2592
- position: relative;
2593
- display: inline-block;
2594
- height: 100%;
2595
- .bigTable-qr-img {
2596
- max-height: 96%;
2597
- }
2598
- > span {
2599
- position: absolute;
2600
- top: 0;
2601
- left: 0;
2602
- justify-content: center;
2603
- align-items: center;
2604
- width: 100%;
2605
- height: 100%;
2606
- background: rgba(0, 0, 0, 0.7);
2607
- color: #fff;
2608
- display: none;
2609
- cursor: pointer;
2610
- }
2611
- &:hover {
2612
- > span {
2613
- display: inline-flex;
2614
- }
2615
- }
2616
- }
2617
-
2618
- /* 行内表单样式 */
2619
- &:deep(.base-form) {
2620
- overflow: hidden !important;
2621
- display: flex;
2622
- align-items: center;
2623
- width: 100%;
2624
- }
2625
- &:deep(.base-form-content) {
2626
- width: 100%;
2627
- }
2628
- &:deep(textarea) {
2629
- height: 32px;
2630
- margin-bottom: 0;
2631
- resize: none;
2632
- }
2633
- &:deep(.formItem-select-multiple) {
2634
- display: flex;
2635
- align-items: center;
2636
- width: 100%;
2637
- line-height: 40px;
2638
- }
2639
- /* 行内表单样式 */
2640
-
2641
- &.mt {
2642
- margin-top: 26px;
2643
- height: calc(100% - 78px) !important;
2644
- }
2645
-
2646
- &.expand-padding {
2647
- &:deep(.vxe-table .vxe-body--expanded-cell) {
2648
- padding-left: 66px !important;
2649
- padding-right: 66px !important;
2650
- }
2651
- }
2652
-
2653
- th.vxe-header--column {
2654
- cursor: pointer;
2655
- }
2656
- .row-btn {
2657
- margin-right: 10px;
2658
- }
2659
- &:deep(.vxe-table) {
2660
- transform: translateZ(0);
2661
- .vxe-table--empty-content {
2662
- width: 100%;
2663
- height: 100%;
2664
- > div {
2665
- width: 100%;
2666
- height: 100%;
2667
- .no-data-tip {
2668
- display: inline-flex;
2669
- }
2670
- }
2671
- }
2672
- .col--checkbox,
2673
- .col--seq {
2674
- .vxe-cell {
2675
- padding: 0;
2676
- .vxe-checkbox--label {
2677
- padding-left: 0;
2678
- }
2679
- }
2680
- }
2681
- .vxe-cell .vxe-tree-cell {
2682
- height: 100%;
2683
- }
2684
-
2685
- .scan-multi-delete {
2686
- color: #F06F64;
2687
- }
2688
-
2689
- .vxe-table--header {
2690
- background-color: #f2f2f2;
2691
- .vxe-header--column .vxe-cell--title {
2692
- height: 100%;
2693
- line-height: unset;
2694
- width: 100%;
2695
- }
2696
- }
2697
- .vxe-table--footer-wrapper.body--wrapper,
2698
- .vxe-table--body-wrapper {
2699
- &::-webkit-scrollbar {
2700
- width: 10px;
2701
- height: 10px;
2702
- background-color: #f2f2f2;
2703
- }
2704
- &::-webkit-scrollbar-thumb:hover {
2705
- background-color: #b2b2b2;
2706
- }
2707
- }
2708
- .vxe-footer--row .vxe-footer--column {
2709
- > .vxe-cell .vxe-cell--item {
2710
- height: 30px;
2711
- line-height: 30px;
2712
- }
2713
- }
2714
- .vxe-cell--checkbox.is--disabled {
2715
- .vxe-checkbox--icon {
2716
- display: none;
2717
- }
2718
- }
2719
- }
2720
- &:deep(.filter-box) {
2721
- display: flex;
2722
- align-items: center;
2723
- width: 100%;
2724
- .text-over-tooltip-components {
2725
- max-width: calc(100% - 20px);
2726
- }
2727
- .vxe-filter--btn {
2728
- border-top-color: #c0c4cc;
2729
- border-right-color: #c0c4cc;
2730
- }
2731
- .vxe-filter--btn.active {
2732
- border-top-color: #35393c;
2733
- border-right-color: #35393c;
2734
- }
2735
- .vxe-filter--btn.checked {
2736
- border-top-color: #5585f5;
2737
- border-right-color: #5585f5;
2738
- }
2739
- }
2740
- &:deep(.disabled-checked-tips) {
2741
- position: absolute;
2742
- left: 6px;
2743
- top: 50%;
2744
- bottom: 0;
2745
- right: 0;
2746
- box-sizing: border-box;
2747
- width: 16px;
2748
- height: 16px;
2749
- margin-top: -8px;
2750
- overflow: hidden;
2751
- border-radius: 50%;
2752
- border: 2px solid #ff1818;
2753
- background: #fff;
2754
- &::after {
2755
- position: absolute;
2756
- content: '';
2757
- width: 16px;
2758
- height: 2px;
2759
- background-color: #ff1818;
2760
- transform: rotate(45deg);
2761
- transform-origin: 0 2px;
2762
- left: 0;
2763
- top: 0;
2764
- }
2765
- }
2766
- }
2767
-
2768
- .refresh {
2769
- display: flex;
2770
- align-items: center;
2771
- background-color: #fff;
2772
- box-shadow: 0px 2px 4px 0px rgba(108, 108, 108, 0.13);
2773
- color: #5585f5;
2774
- font-size: 12px;
2775
- height: 27px;
2776
-
2777
- position: absolute;
2778
- right: 0;
2779
- top: 6px;
2780
- z-index: 1;
2781
-
2782
- padding-left: 14px;
2783
- padding-right: 14px;
2784
- border-top-left-radius: 14px;
2785
- border-bottom-left-radius: 14px;
2786
-
2787
- cursor: pointer;
2788
- }
2789
- .refresh-row {
2790
- margin-left: 3px;
2791
- margin-bottom: 0;
2792
- }
2793
-
2794
- .check-wrap {
2795
- background: #ffffe9;
2796
- display: block;
2797
- width: 100%;
2798
- line-height: 26px;
2799
- display: flex;
2800
- justify-content: center;
2801
-
2802
- position: absolute;
2803
- margin-top: -26px;
2804
-
2805
- .check-wrap-title,
2806
- .check-wrap-btn {
2807
- color: #000000;
2808
- font-size: 12px;
2809
- margin-bottom: 0px;
2810
- cursor: pointer;
2811
- }
2812
-
2813
- .check-wrap-btn {
2814
- color: #5585f5;
2815
- }
2816
- }
2817
-
2818
- .percent-wrap {
2819
- display: flex;
2820
- flex-direction: column;
2821
- justify-content: center;
2822
- align-items: center;
2823
- text-align: center;
2824
- .percent-value {
2825
- line-height: 1;
2826
- margin-bottom: -4px;
2827
- margin-top: 4px;
2828
- }
2829
- }
2830
- .domPropsInnerHTML-span {
2831
- height: 100%;
2832
- &:deep(img) {
2833
- display: inline-block;
2834
- height: var(--tableImageHeight);
2835
- width: var(--tableImageWidth);
2836
- }
2837
- }
2838
- </style>
2839
-
2582
+ <style lang="less" src="./assets/style/table-base.less"></style>
2840
2583
  <style lang="less" src="./assets/style/table-global.less">
2841
2584
  </style>