br-dionysus 1.8.4 → 1.8.6

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 (63) hide show
  1. package/README.md +861 -88
  2. package/attributes.json +1 -1
  3. package/cypress/e2e/2-advanced-examples/actions.cy.js +3 -3
  4. package/cypress/e2e/2-advanced-examples/assertions.cy.js +2 -2
  5. package/cypress/e2e/2-advanced-examples/cypress_api.cy.js +5 -6
  6. package/cypress/e2e/2-advanced-examples/files.cy.js +1 -1
  7. package/cypress/e2e/2-advanced-examples/misc.cy.js +1 -1
  8. package/cypress/e2e/2-advanced-examples/navigation.cy.js +1 -1
  9. package/cypress/e2e/2-advanced-examples/network_requests.cy.js +22 -22
  10. package/cypress/e2e/2-advanced-examples/spies_stubs_clocks.cy.js +7 -7
  11. package/cypress/e2e/2-advanced-examples/storage.cy.js +8 -8
  12. package/cypress/e2e/2-advanced-examples/utilities.cy.js +15 -15
  13. package/dist/br-dionysus.es.js +4708 -4519
  14. package/dist/br-dionysus.umd.js +8 -8
  15. package/dist/index.css +1 -1
  16. package/dist/packages/Hook/useFormInline/useFormInline.d.ts +25 -0
  17. package/dist/packages/Hook/usePackageConfig/usePackageConfig.d.ts +1 -1
  18. package/dist/packages/MDialog/src/MDialog.vue.d.ts +1 -1
  19. package/dist/packages/MInline/src/MInline.vue.d.ts +7 -0
  20. package/dist/packages/MInputNumber/src/MInputNumber.vue.d.ts +2 -2
  21. package/dist/packages/MSelectTable/src/MSelectTable.vue.d.ts +2 -2
  22. package/dist/packages/MSelectTableV1/src/MSelectTableV1.vue.d.ts +3 -3
  23. package/dist/packages/MSelectV2/src/MSelectV2.vue.d.ts +1 -1
  24. package/dist/packages/MTableColumnSet/src/MTableColumnSet.vue.d.ts +1 -1
  25. package/dist/packages/MTableSuper/index.d.ts +4 -0
  26. package/dist/packages/MTableSuper/src/MTableSuper.vue.d.ts +11 -0
  27. package/dist/packages/MTableSuper/src/token.d.ts +23 -0
  28. package/dist/packages/MTableV2/src/MTableV2.vue.d.ts +7 -0
  29. package/dist/packages/Tool/slotsToData/slotsToData.d.ts +19 -0
  30. package/dist/packages/index.d.ts +1 -0
  31. package/package.json +1 -1
  32. package/packages/Hook/useFormInline/README.md +45 -0
  33. package/packages/Hook/useFormInline/demo.vue +141 -0
  34. package/packages/Hook/useFormInline/useFormInline.ts +60 -0
  35. package/packages/Hook/usePackageConfig/usePackageConfig.ts +1 -1
  36. package/packages/Hook/useTableConfig/demo.vue +1 -1
  37. package/packages/Hook/useTableConfig/useTableConfig.ts +10 -10
  38. package/packages/MDialog/src/MDialog.vue +12 -1
  39. package/packages/MInline/docs/README.md +7 -6
  40. package/packages/MInline/docs/demo.vue +16 -13
  41. package/packages/MInline/src/MInline.vue +127 -3
  42. package/packages/MInputNumber/docs/demo.vue +42 -2
  43. package/packages/MInputNumber/src/MInputNumber.vue +7 -7
  44. package/packages/MSelectTable/src/MSelectTable.vue +1 -1
  45. package/packages/MTable/src/MTable.vue +0 -32
  46. package/packages/MTableColumn/src/MTableColumn.vue +0 -41
  47. package/packages/MTableSuper/docs/README.md +48 -0
  48. package/packages/MTableSuper/docs/demo.vue +246 -0
  49. package/packages/MTableSuper/index.ts +10 -0
  50. package/packages/MTableSuper/src/MTableSuper.vue +140 -0
  51. package/packages/MTableSuper/src/token.ts +24 -0
  52. package/packages/MTableV2/docs/README.md +1 -0
  53. package/packages/MTableV2/docs/demo.vue +9 -7
  54. package/packages/MTableV2/src/MTableV2.vue +49 -5
  55. package/packages/SkinConfig/src/useSkin.ts +2 -2
  56. package/packages/Tool/slotsToData/README.md +26 -0
  57. package/packages/Tool/slotsToData/slotsToData.ts +38 -0
  58. package/packages/index.ts +3 -0
  59. package/packages/list.json +6 -0
  60. package/packages/typings/global.d.ts +2 -2
  61. package/src/router.ts +5 -0
  62. package/tags.json +1 -1
  63. package/web-types.json +1 -1
package/README.md CHANGED
@@ -22,12 +22,16 @@
22
22
 
23
23
  + MTableColumnSet([表格头设置组件](#表格头设置组件))
24
24
 
25
+ + MTableSuper([整合表格组件](#整合表格组件))
26
+
25
27
  + MTableV2([虚拟化表格](#虚拟化表格))
26
28
 
27
29
  + SkinConfig([皮肤设置](#皮肤设置))
28
30
 
29
31
  + TabPage([标签页组件](#标签页组件))
30
32
 
33
+ + useFormInline([筛选项配置化-hook](#筛选项配置化-hook))
34
+
31
35
  + usePackageConfig([配置保存与获取-hook](#配置保存与获取-hook))
32
36
 
33
37
  + useRemainingSpace([计算获取剩余空间-hook](#计算获取剩余空间-hook))
@@ -308,38 +312,38 @@ const open3 = () => {
308
312
  </el-input>
309
313
  </el-form-item>
310
314
  <el-form-item
311
- label="编码"
312
- prop="code"
315
+ label="类型"
316
+ prop="type"
313
317
  data-item
314
318
  >
315
319
  <el-input
316
- v-model="formInline.code"
320
+ v-model="formInline.type"
317
321
  clearable
318
- placeholder="请输入编码"
322
+ placeholder="请输入类型"
319
323
  >
320
324
  </el-input>
321
325
  </el-form-item>
322
326
  <el-form-item
323
- label="角色名"
324
- prop="name"
327
+ label="地区"
328
+ prop="region"
325
329
  data-item
326
330
  >
327
331
  <el-input
328
- v-model="formInline.name"
332
+ v-model="formInline.region"
329
333
  clearable
330
- placeholder="请输入角色名"
334
+ placeholder="请输入地区"
331
335
  >
332
336
  </el-input>
333
337
  </el-form-item>
334
338
  <el-form-item
335
- label="时间"
336
- prop="time"
339
+ label="等级"
340
+ prop="level"
337
341
  data-item
338
342
  >
339
343
  <el-input
340
- v-model="formInline.time"
344
+ v-model="formInline.level"
341
345
  clearable
342
- placeholder="请输入时间"
346
+ placeholder="请输入等级"
343
347
  >
344
348
  </el-input>
345
349
  </el-form-item>
@@ -365,7 +369,10 @@ import { reactive } from 'vue'
365
369
  const formInline = reactive({
366
370
  name: '',
367
371
  code: '',
368
- time: ''
372
+ time: '',
373
+ type: '',
374
+ region: '',
375
+ level: ''
369
376
  })
370
377
  </script>
371
378
 
@@ -380,15 +387,16 @@ const formInline = reactive({
380
387
 
381
388
  ### 2) Attributes
382
389
 
383
- | 参数 | 说明 | 类型 | 可选值 | 默认值 |
384
- |----------|:-----:|:------:|:-------------------------:|:-------:|
385
- | minWidth | 列最小宽度 | number | - | 200 |
386
- | maxWidth | 列最大宽度 | number | - | 300 |
387
- | size | 组件尺寸 | enum | large \| default \| small | default |
390
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
391
+ |-----------|:-----:|:------:|:-------------------------:|:-------:|
392
+ | minWidth | 列最小宽度 | number | - | 200 |
393
+ | maxWidth | 列最大宽度 | number | - | 300 |
394
+ | size | 组件尺寸 | enum | large \| default \| small | default |
395
+ | configKey | 配置key | string | - | - |
388
396
 
389
397
  ### 2) Events
390
398
 
391
- | 方法名 | 说明 | 参数 |
399
+ | 事件名 | 说明 | 参数 |
392
400
  |--------|:----------------------:|:---------------:|
393
401
  | switch | 当切换展开与折叠模式时触发,返回当前展开状态 | unfold(boolean) |
394
402
 
@@ -405,14 +413,54 @@ const formInline = reactive({
405
413
 
406
414
  <template>
407
415
  <div class="g-demo-m-input-number-box">
408
- <m-input-number v-model="test"></m-input-number>
416
+ <m-input-number
417
+ v-model="test"
418
+ @input="numberInput"
419
+ @change="numberChange"
420
+ ></m-input-number>
421
+ <h5>对比组</h5>
422
+ <el-input-number
423
+ v-model="test2"
424
+ @input="numberInput2"
425
+ @change="numberChange2"
426
+ ></el-input-number>
409
427
  </div>
410
428
  </template>
411
429
 
412
430
  <script setup lang="ts">
413
- import { ref } from 'vue'
431
+ import { ref, watch } from 'vue'
414
432
 
415
433
  const test = ref<number>(0)
434
+ const numberInput = (val: number) => {
435
+ console.log('m1', val)
436
+ console.log('m2', test.value)
437
+ }
438
+ const numberChange = (val: number) => {
439
+ console.log('m3', val)
440
+ console.log('m4', test.value)
441
+ }
442
+ watch(
443
+ () => test.value,
444
+ () => {
445
+ console.log('m5', test.value)
446
+ }
447
+ )
448
+
449
+ const test2 = ref<number>(0)
450
+ const numberInput2 = (val: number) => {
451
+ console.log('e1', val)
452
+ console.log('e2', test2.value)
453
+ }
454
+ const numberChange2 = (val: number) => {
455
+ console.log('e3', val)
456
+ console.log('e4', test2.value)
457
+ }
458
+ watch(
459
+ () => test2.value,
460
+ () => {
461
+ console.log('e5', test2.value)
462
+ }
463
+ )
416
464
  </script>
417
465
 
418
466
  <style scoped>
@@ -1490,7 +1538,7 @@ const tableConfig = ref({
1490
1538
 
1491
1539
 
1492
1540
 
1493
- 虚拟化表格
1541
+ 整合表格组件
1494
1542
  =================
1495
1543
 
1496
1544
  ### 1) 基础用法
@@ -1501,55 +1549,242 @@ const tableConfig = ref({
1501
1549
 
1502
1550
  <template>
1503
1551
  <div class="g-box">
1504
- <p @click="test">{{ tableConfig }}</p>
1505
- <MTableV2
1552
+ <h3>基础功能</h3>
1553
+ <MTableSuper
1506
1554
  :data="tableData"
1507
- :columns="tableTitle"
1508
- :height="500"
1555
+ v-if="!tableData"
1509
1556
  border
1510
- fixed
1557
+ >
1558
+ <MTableColumn
1559
+ v-for="item in tableTitle"
1560
+ :key="item.prop"
1561
+ :prop="item.prop"
1562
+ :label="item.label"
1563
+ :align="item.align"
1564
+ :minWidth="item.minWidth"
1565
+ :className="item.className"
1566
+ :filters="item.filters"
1567
+ :headerAlign="item.headerAlign"
1568
+ :fixed="item.fixed"
1569
+ v-model:filtersValue="filtersValue"
1570
+ showOverflowTooltip
1571
+ ></MTableColumn>
1572
+ </MTableSuper>
1573
+ <h3>带选择的表格</h3>
1574
+ <MTableSuper
1575
+ :data="tableData"
1576
+ border
1577
+ >
1578
+ <el-table-column
1579
+ fixed="left"
1580
+ type="selection"
1581
+ />
1582
+ <el-table-column
1583
+ prop="name"
1584
+ label="名称"
1585
+ >
1586
+ <el-table-column
1587
+ prop="date"
1588
+ label="时间"
1589
+ ></el-table-column>
1590
+ <el-table-column
1591
+ prop="address"
1592
+ label="地址"
1593
+ ></el-table-column>
1594
+ </el-table-column>
1595
+ <MTableColumn
1596
+ v-for="item in tableTitle"
1597
+ :key="item.prop"
1598
+ :prop="item.prop"
1599
+ :label="item.label"
1600
+ :align="item.align"
1601
+ :minWidth="item.minWidth"
1602
+ :className="item.className"
1603
+ :filters="item.filters"
1604
+ :headerAlign="item.headerAlign"
1605
+ :fixed="item.fixed"
1606
+ v-model:filtersValue="filtersValue"
1607
+ showOverflowTooltip
1608
+ >
1609
+ </MTableColumn>
1610
+ </MTableSuper>
1611
+ <h3>展开列</h3>
1612
+ <MTableSuper
1613
+ v-if="!tableData"
1614
+ class="style.box"
1615
+ :data="tableData"
1616
+ border
1617
+ :filtersValue="filtersValue"
1618
+ scrollbarAlwaysOn
1511
1619
  v-model:tableConfig="tableConfig"
1512
- tableConfigKey="MTableV2Demo"
1513
- ></MTableV2>
1620
+ rowKey="id"
1621
+ tableConfigKey="tableConfigKey"
1622
+ @headerDragend="headerDragend"
1623
+ expandProp="sn"
1624
+ @privateExpandChange="privateExpandChange"
1625
+ >
1626
+ <el-table-column
1627
+ fixed="left"
1628
+ type="selection"
1629
+ />
1630
+ <MTableColumn
1631
+ type="expand"
1632
+ width="1"
1633
+ >
1634
+ <template #default="props">
1635
+ <h1>index{{ props.index }}</h1>
1636
+ <h1>$index{{ props.$index }}</h1>
1637
+ <h1>测试</h1>
1638
+ </template>
1639
+ </MTableColumn>
1640
+ <MTableColumn
1641
+ v-for="item in tableTitle"
1642
+ :key="item.prop"
1643
+ :prop="item.prop"
1644
+ :label="item.label"
1645
+ :align="item.align"
1646
+ :minWidth="item.minWidth"
1647
+ :className="item.className"
1648
+ :filters="item.filters"
1649
+ :headerAlign="item.headerAlign"
1650
+ :fixed="item.fixed"
1651
+ v-model:filtersValue="filtersValue"
1652
+ showOverflowTooltip
1653
+ >
1654
+ </MTableColumn>
1655
+ </MTableSuper>
1656
+ <h3>树状表格</h3>
1657
+ <MTableSuper
1658
+ v-if="!tableData"
1659
+ class="style.box"
1660
+ :data="tableData"
1661
+ border
1662
+ @headerDragend="headerDragend"
1663
+ :filtersValue="filtersValue"
1664
+ scrollbarAlwaysOn
1665
+ v-model:tableConfig="tableConfig"
1666
+ rowKey="id"
1667
+ tableConfigKey="tableConfigKey"
1668
+ @expandChange="privateExpandChange"
1669
+ >
1670
+ <MTableColumn
1671
+ v-for="item in tableTitle"
1672
+ :key="item.prop"
1673
+ :prop="item.prop"
1674
+ :label="item.label"
1675
+ :align="item.align"
1676
+ :minWidth="item.minWidth"
1677
+ :className="item.className"
1678
+ :filters="item.filters"
1679
+ :headerAlign="item.headerAlign"
1680
+ :fixed="item.fixed"
1681
+ v-model:filtersValue="filtersValue"
1682
+ showOverflowTooltip
1683
+ >
1684
+ </MTableColumn>
1685
+ </MTableSuper>
1514
1686
  </div>
1515
1687
  </template>
1516
1688
 
1517
1689
  <script setup lang="ts">
1518
1690
  import { ref } from 'vue'
1519
- import useTableV2Config from 'packages/Hook/useTableV2Config/useTableV2Config'
1691
+ import { useTableConfig } from 'packages/index'
1692
+ import { MTableColumn } from 'packages/MTableColumn'
1693
+
1694
+ const privateExpandChange = (row: any, expandedRows: any[]) => {
1695
+ console.log('row', row)
1696
+ console.log('expandedRows', expandedRows)
1697
+ }
1698
+
1699
+ // const test = (data: any) => {
1700
+ // console.log('data', data)
1701
+ // }
1520
1702
 
1521
1703
  const tableData = ref<any[]>([])
1522
- const { tableTitle, tableConfig, filtersValue } = useTableV2Config('MTableV2Demo', [{
1523
- title: '序号',
1524
- key: 'sn',
1525
- dataKey: 'sn',
1526
- width: 300
1704
+ const { tableTitle, headerDragend, tableConfig, filtersValue } = useTableConfig('MTableDemo', [{
1705
+ label: '序号',
1706
+ prop: 'sn',
1707
+ minWidth: 200
1708
+ // fixed: 'right'
1527
1709
  }, {
1528
- title: '时间',
1529
- key: 'date',
1530
- dataKey: 'date',
1531
- width: 300
1710
+ label: '时间',
1711
+ prop: 'date',
1712
+ minWidth: 200
1713
+ // fixed: 'left'
1532
1714
  }, {
1533
- title: '地址',
1534
- key: 'address',
1535
- dataKey: 'address',
1536
- width: 300
1715
+ label: '地址',
1716
+ prop: 'address',
1717
+ minWidth: 200
1537
1718
  }, {
1538
- title: '名称',
1539
- key: 'name',
1540
- dataKey: 'name',
1541
- width: 300
1719
+ label: '名称',
1720
+ prop: 'name',
1721
+ minWidth: 200
1542
1722
  }], tableData)
1723
+ console.log('tableTitle', tableTitle.value)
1543
1724
 
1544
- const test = () => {
1545
- filtersValue.value = {}
1546
- }
1547
1725
  tableData.value = [{
1548
1726
  id: 1,
1549
- sn: 'sn',
1550
- date: 'date',
1551
- address: 'address',
1552
- name: 'name'
1727
+ sn: 1,
1728
+ date: '2016-05-03',
1729
+ name: 'Tom1',
1730
+ address: 'No. 189',
1731
+ tag: 'Home',
1732
+ pid: 0
1733
+ }, {
1734
+ id: 2,
1735
+ sn: 2,
1736
+ date: '2016-05-02',
1737
+ name: 'Tom2',
1738
+ address: 'No. 189, Grove St, Los Angeles',
1739
+ tag: 'Office',
1740
+ pid: 0,
1741
+ children: [{
1742
+ id: 21,
1743
+ sn: 1,
1744
+ date: '2016-05-02',
1745
+ name: 'Tom21',
1746
+ address: 'No. 189, Grove St, Los Angeles',
1747
+ tag: 'Office'
1748
+ }, {
1749
+ id: 22,
1750
+ sn: 2,
1751
+ date: '2016-05-02',
1752
+ name: 'Tom22',
1753
+ address: 'No. 189, Grove St, Los Angeles',
1754
+ tag: 'Office'
1755
+ }]
1756
+ }, {
1757
+ id: 3,
1758
+ sn: 3,
1759
+ date: '2016-05-04',
1760
+ name: 'Tom3',
1761
+ address: 'No. 189',
1762
+ tag: 'Home',
1763
+ pid: 0
1764
+ }, {
1765
+ id: 4,
1766
+ sn: 4,
1767
+ date: '2016-05-01',
1768
+ name: 'Tom4',
1769
+ address: 'No. 189, Grove St, Los Angeles',
1770
+ tag: 'Office',
1771
+ pid: 0
1772
+ }, {
1773
+ id: 5,
1774
+ sn: 5,
1775
+ date: '2016-05-05',
1776
+ name: 'Tom4',
1777
+ address: 'No. 189, Grove St, Los Angeles',
1778
+ tag: 'Office',
1779
+ pid: 0
1780
+ }, {
1781
+ id: 6,
1782
+ sn: 6,
1783
+ date: '2016-06-01',
1784
+ name: 'Tom4',
1785
+ address: 'No. 189, Grove St, Los Angeles',
1786
+ tag: 'Office',
1787
+ pid: 0
1553
1788
  }]
1554
1789
  </script>
1555
1790
 
@@ -1564,17 +1799,131 @@ tableData.value = [{
1564
1799
 
1565
1800
  ### 2) Attributes
1566
1801
 
1567
- | 参数 | 说明 | 类型 | 可选值 | 默认值 |
1568
- |--------------------|---------------------------------------------------|----------------------------|---------------------------|-----------------------------------------------------------------------------------|
1569
- | size | 尺寸 | string | small \| large \| default | default |
1570
- | data | 要在表中渲染的数据数组 | any[] | - | [] |
1571
- | columns | 表格列配置 | TableV2Title[] | - | [] |
1572
- | filtersValue | 表格内容筛选(当为null时,不显示筛选图标) | FilterValue \| null | - | null |
1802
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
1803
+ |----------------|-----------------------------|------------------|-----|-----------------------------------------------------|
1804
+ | data | 表格的数据 | Array | - | [ ] |
1805
+ | sole | 行的唯一值 | String , number | - | key |
1806
+ | filtersValue | 表格内容筛选(当为null时,不显示筛选图标) | Function \| null | - | null |
1807
+ | expandProp | 展开图标列(如使用这个属性则必须存在rowKey属性) | string | - | '' |
1808
+ | tableConfigKey | 表格配置key | string | - | '' |
1809
+ | 其余参数 | 参考el官网的table | any | - | https://element-plus.org/zh-CN/component/table.html |
1810
+
1811
+ ## 要求
1812
+
1813
+ ```
1814
+ sole 必须传递在表格数据内为唯一的值 如id key 等不会发生重复的关键字
1815
+ ```
1816
+
1817
+ ### 3) Events
1818
+
1819
+ | 方法名 | 说明 | 回调参数 |
1820
+ |---------------------|--------------------------------------|-----------------------------------------------------|
1821
+ | pasteData | 表格粘贴方法 | 共有2个参数,依次为粘贴动作的数据PasteAction ,表格原始数据tableData |
1822
+ | update:tableConfig | 表格配置更新 | \[tableConfig: TableConfig] |
1823
+ | privateExpandChange | expandProp模式下 当用户对某一行展开或者关闭的时候会触发该事件 | [row: any, expandedRows: any[]] |
1824
+ | 其余方法 | 参考el官网的table | https://element-plus.org/zh-CN/component/table.html |
1825
+
1826
+ ### 4) PasteAction
1827
+
1828
+ | 参数 | 说明 | 类型 |
1829
+ |------------|----------------------------------------|--------|
1830
+ | editRow | 返回粘贴的对应行的原始数据 | Object |
1831
+ | editColumn | 返回粘贴时鼠标所在列的 表格prop值 | String |
1832
+ | arr | 返回粘贴时候处理之后的 数组信息 | Array |
1833
+ | rowIndex | 根据sole的值 去data内查找 当前操作的 粘贴行在data内的序号 | number |
1834
+
1835
+
1836
+
1837
+
1838
+
1839
+ 虚拟化表格
1840
+ =================
1841
+
1842
+ ### 1) 基础用法
1843
+
1844
+
1845
+
1846
+ ```html
1847
+
1848
+ <template>
1849
+ <div class="g-box">
1850
+ <p @click="test">{{ tableConfig }}</p>
1851
+ <MTableV2
1852
+ :data="tableData"
1853
+ :columns="tableTitle"
1854
+ :height="500"
1855
+ border
1856
+ fixed
1857
+ v-model:tableConfig="tableConfig"
1858
+ tableConfigKey="MTableV2Demo"
1859
+ ></MTableV2>
1860
+ </div>
1861
+ </template>
1862
+
1863
+ <script setup lang="ts">
1864
+ import { ref } from 'vue'
1865
+ import useTableV2Config from 'packages/Hook/useTableV2Config/useTableV2Config'
1866
+
1867
+ const tableData = ref<any[]>([])
1868
+ const { tableTitle, tableConfig, filtersValue } = useTableV2Config('MTableV2Demo', [{
1869
+ title: '序号',
1870
+ key: 'sn',
1871
+ dataKey: 'sn',
1872
+ width: 300
1873
+ }, {
1874
+ title: '时间',
1875
+ key: 'date',
1876
+ dataKey: 'date',
1877
+ width: 300
1878
+ }, {
1879
+ title: '地址',
1880
+ key: 'address',
1881
+ dataKey: 'address',
1882
+ width: 300
1883
+ }, {
1884
+ title: '名称',
1885
+ key: 'name',
1886
+ dataKey: 'name',
1887
+ width: 300
1888
+ }], tableData)
1889
+
1890
+ const test = () => {
1891
+ filtersValue.value = {}
1892
+ }
1893
+ for (let i = 0; i < 1000; i++) {
1894
+ tableData.value.push({
1895
+ id: i,
1896
+ sn: 'sn' + i,
1897
+ date: 'date' + i,
1898
+ address: 'address' + i,
1899
+ name: 'name' + i
1900
+ })
1901
+ }
1902
+ </script>
1903
+
1904
+ <style lang="scss" scoped>
1905
+ .g-box {
1906
+ max-width: 1000px;
1907
+ }
1908
+ </style>
1909
+
1910
+
1911
+ ```
1912
+
1913
+ ### 2) Attributes
1914
+
1915
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
1916
+ |--------------------|---------------------------------------------------|----------------------------|---------------------------|-----------------------------------------------------------------------------------|
1917
+ | size | 尺寸 | string | small \| large \| default | default |
1918
+ | data | 要在表中渲染的数据数组 | any[] | - | [] |
1919
+ | columns | 表格列配置 | TableV2Title[] | - | [] |
1920
+ | filtersValue | 表格内容筛选(当为null时,不显示筛选图标) | FilterValue \| null | - | null |
1573
1921
  | tableConfig | 表格配置 | TableConfig \| null | - | null |
1574
1922
  | tableConfigKey | 表格配置key | string | - | '' |
1575
1923
  | fixed | 单元格宽度是自适应还是固定 | boolean | - | false |
1576
1924
  | estimatedRowHeight | 渲染动态的单元格的预估高度 | number \| null | - | null |
1577
1925
  | headerHeight | Header 的高度由height设置。 如果传入数组,它会使 header row 等于数组长度 | number \| number[] \| null | - | null |
1926
+ | cellWidthAdaptive | 单元格宽度自适应 | boolean | - | false |
1578
1927
  | 其余参数 | 参考el官网的table | any | - | https://element-plus.org/zh-CN/component/table-v2.html#tablev2-%E5%B1%9E%E6%80%A7 |
1579
1928
 
1580
1929
  ### 3) Events
@@ -2343,6 +2692,8 @@ const list = ref<{ name: string, className: string }[]>([
2343
2692
 
2344
2693
  ## Hook列表
2345
2694
 
2695
+ + useFormInline([筛选项配置化-hook](#筛选项配置化-hook))
2696
+
2346
2697
  + usePackageConfig([配置保存与获取-hook](#配置保存与获取-hook))
2347
2698
 
2348
2699
  + useRemainingSpace([计算获取剩余空间-hook](#计算获取剩余空间-hook))
@@ -2356,6 +2707,51 @@ const list = ref<{ name: string, className: string }[]>([
2356
2707
 
2357
2708
 
2358
2709
 
2710
+ 筛选项配置化 hook
2711
+ =================
2712
+
2713
+ ### 1) 基础用法
2714
+
2715
+
2716
+
2717
+ ### 2) 所需参数
2718
+
2719
+ | 名称 | 描述 | 类型 | 可选值 | 默认值 |
2720
+ |-----------|---------------|---------------------------------|:---:|:----:|
2721
+ | configKey | 当前配置标识,即唯一key | string | - | '' |
2722
+ | data | 筛选条件关联key map | <T extends Record<string, any>> | - | - |
2723
+ | isConfig | 是否开启配置 | boolean | - | true |
2724
+
2725
+ ### 2) 返回值
2726
+
2727
+ | 名称 | 描述 | 类型 |
2728
+ |----|-----|------------------------------------|
2729
+ | - | 返回值 | UseFormInlineReturnType<T> \| void |
2730
+
2731
+ #### 2.1) UseFormInlineReturnType
2732
+
2733
+ | 名称 | 描述 | 类型 |
2734
+ |-----------------|---------------|------------|
2735
+ | \[K in keyof T] | 筛选条件关联key map | T\[K] |
2736
+ | reset | 重置方法 | () => void |
2737
+
2738
+ ### 3) 配置结构 FormInlineConfigType<T>
2739
+
2740
+ | 名称 | 描述 | 类型 |
2741
+ |--------------|------|---------|
2742
+ | sort | 排序 | number |
2743
+ | defaultValue | 默认值 | any |
2744
+ | show | 是否显示 | boolean |
2745
+
2746
+
2747
+
2748
+
2749
+
2750
+
2751
+
2752
+
2753
+
2754
+
2359
2755
  配置保存与获取 hook
2360
2756
  =================
2361
2757
 
@@ -2552,6 +2948,8 @@ const list = ref<{ name: string, className: string }[]>([
2552
2948
  + createHash([](#))
2553
2949
 
2554
2950
  + moneyFormat([](#))
2951
+
2952
+ + slotsToData([](#))
2555
2953
 
2556
2954
 
2557
2955
  对话框
@@ -2823,38 +3221,38 @@ const open3 = () => {
2823
3221
  </el-input>
2824
3222
  </el-form-item>
2825
3223
  <el-form-item
2826
- label="编码"
2827
- prop="code"
3224
+ label="类型"
3225
+ prop="type"
2828
3226
  data-item
2829
3227
  >
2830
3228
  <el-input
2831
- v-model="formInline.code"
3229
+ v-model="formInline.type"
2832
3230
  clearable
2833
- placeholder="请输入编码"
3231
+ placeholder="请输入类型"
2834
3232
  >
2835
3233
  </el-input>
2836
3234
  </el-form-item>
2837
3235
  <el-form-item
2838
- label="角色名"
2839
- prop="name"
3236
+ label="地区"
3237
+ prop="region"
2840
3238
  data-item
2841
3239
  >
2842
3240
  <el-input
2843
- v-model="formInline.name"
3241
+ v-model="formInline.region"
2844
3242
  clearable
2845
- placeholder="请输入角色名"
3243
+ placeholder="请输入地区"
2846
3244
  >
2847
3245
  </el-input>
2848
3246
  </el-form-item>
2849
3247
  <el-form-item
2850
- label="时间"
2851
- prop="time"
3248
+ label="等级"
3249
+ prop="level"
2852
3250
  data-item
2853
3251
  >
2854
3252
  <el-input
2855
- v-model="formInline.time"
3253
+ v-model="formInline.level"
2856
3254
  clearable
2857
- placeholder="请输入时间"
3255
+ placeholder="请输入等级"
2858
3256
  >
2859
3257
  </el-input>
2860
3258
  </el-form-item>
@@ -2880,7 +3278,10 @@ import { reactive } from 'vue'
2880
3278
  const formInline = reactive({
2881
3279
  name: '',
2882
3280
  code: '',
2883
- time: ''
3281
+ time: '',
3282
+ type: '',
3283
+ region: '',
3284
+ level: ''
2884
3285
  })
2885
3286
  </script>
2886
3287
 
@@ -2895,15 +3296,16 @@ const formInline = reactive({
2895
3296
 
2896
3297
  ### 2) Attributes
2897
3298
 
2898
- | 参数 | 说明 | 类型 | 可选值 | 默认值 |
2899
- |----------|:-----:|:------:|:-------------------------:|:-------:|
2900
- | minWidth | 列最小宽度 | number | - | 200 |
2901
- | maxWidth | 列最大宽度 | number | - | 300 |
2902
- | size | 组件尺寸 | enum | large \| default \| small | default |
3299
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
3300
+ |-----------|:-----:|:------:|:-------------------------:|:-------:|
3301
+ | minWidth | 列最小宽度 | number | - | 200 |
3302
+ | maxWidth | 列最大宽度 | number | - | 300 |
3303
+ | size | 组件尺寸 | enum | large \| default \| small | default |
3304
+ | configKey | 配置key | string | - | - |
2903
3305
 
2904
3306
  ### 2) Events
2905
3307
 
2906
- | 方法名 | 说明 | 参数 |
3308
+ | 事件名 | 说明 | 参数 |
2907
3309
  |--------|:----------------------:|:---------------:|
2908
3310
  | switch | 当切换展开与折叠模式时触发,返回当前展开状态 | unfold(boolean) |
2909
3311
 
@@ -2920,14 +3322,54 @@ const formInline = reactive({
2920
3322
 
2921
3323
  <template>
2922
3324
  <div class="g-demo-m-input-number-box">
2923
- <m-input-number v-model="test"></m-input-number>
3325
+ <m-input-number
3326
+ v-model="test"
3327
+ @input="numberInput"
3328
+ @change="numberChange"
3329
+ ></m-input-number>
3330
+ <h5>对比组</h5>
3331
+ <el-input-number
3332
+ v-model="test2"
3333
+ @input="numberInput2"
3334
+ @change="numberChange2"
3335
+ ></el-input-number>
2924
3336
  </div>
2925
3337
  </template>
2926
3338
 
2927
3339
  <script setup lang="ts">
2928
- import { ref } from 'vue'
3340
+ import { ref, watch } from 'vue'
2929
3341
 
2930
3342
  const test = ref<number>(0)
3343
+ const numberInput = (val: number) => {
3344
+ console.log('m1', val)
3345
+ console.log('m2', test.value)
3346
+ }
3347
+ const numberChange = (val: number) => {
3348
+ console.log('m3', val)
3349
+ console.log('m4', test.value)
3350
+ }
3351
+ watch(
3352
+ () => test.value,
3353
+ () => {
3354
+ console.log('m5', test.value)
3355
+ }
3356
+ )
3357
+
3358
+ const test2 = ref<number>(0)
3359
+ const numberInput2 = (val: number) => {
3360
+ console.log('e1', val)
3361
+ console.log('e2', test2.value)
3362
+ }
3363
+ const numberChange2 = (val: number) => {
3364
+ console.log('e3', val)
3365
+ console.log('e4', test2.value)
3366
+ }
3367
+ watch(
3368
+ () => test2.value,
3369
+ () => {
3370
+ console.log('e5', test2.value)
3371
+ }
3372
+ )
2931
3373
  </script>
2932
3374
 
2933
3375
  <style scoped>
@@ -4005,6 +4447,304 @@ const tableConfig = ref({
4005
4447
 
4006
4448
 
4007
4449
 
4450
+ 整合表格组件
4451
+ =================
4452
+
4453
+ ### 1) 基础用法
4454
+
4455
+
4456
+
4457
+ ```html
4458
+
4459
+ <template>
4460
+ <div class="g-box">
4461
+ <h3>基础功能</h3>
4462
+ <MTableSuper
4463
+ :data="tableData"
4464
+ v-if="!tableData"
4465
+ border
4466
+ >
4467
+ <MTableColumn
4468
+ v-for="item in tableTitle"
4469
+ :key="item.prop"
4470
+ :prop="item.prop"
4471
+ :label="item.label"
4472
+ :align="item.align"
4473
+ :minWidth="item.minWidth"
4474
+ :className="item.className"
4475
+ :filters="item.filters"
4476
+ :headerAlign="item.headerAlign"
4477
+ :fixed="item.fixed"
4478
+ v-model:filtersValue="filtersValue"
4479
+ showOverflowTooltip
4480
+ ></MTableColumn>
4481
+ </MTableSuper>
4482
+ <h3>带选择的表格</h3>
4483
+ <MTableSuper
4484
+ :data="tableData"
4485
+ border
4486
+ >
4487
+ <el-table-column
4488
+ fixed="left"
4489
+ type="selection"
4490
+ />
4491
+ <el-table-column
4492
+ prop="name"
4493
+ label="名称"
4494
+ >
4495
+ <el-table-column
4496
+ prop="date"
4497
+ label="时间"
4498
+ ></el-table-column>
4499
+ <el-table-column
4500
+ prop="address"
4501
+ label="地址"
4502
+ ></el-table-column>
4503
+ </el-table-column>
4504
+ <MTableColumn
4505
+ v-for="item in tableTitle"
4506
+ :key="item.prop"
4507
+ :prop="item.prop"
4508
+ :label="item.label"
4509
+ :align="item.align"
4510
+ :minWidth="item.minWidth"
4511
+ :className="item.className"
4512
+ :filters="item.filters"
4513
+ :headerAlign="item.headerAlign"
4514
+ :fixed="item.fixed"
4515
+ v-model:filtersValue="filtersValue"
4516
+ showOverflowTooltip
4517
+ >
4518
+ </MTableColumn>
4519
+ </MTableSuper>
4520
+ <h3>展开列</h3>
4521
+ <MTableSuper
4522
+ v-if="!tableData"
4523
+ class="style.box"
4524
+ :data="tableData"
4525
+ border
4526
+ :filtersValue="filtersValue"
4527
+ scrollbarAlwaysOn
4528
+ v-model:tableConfig="tableConfig"
4529
+ rowKey="id"
4530
+ tableConfigKey="tableConfigKey"
4531
+ @headerDragend="headerDragend"
4532
+ expandProp="sn"
4533
+ @privateExpandChange="privateExpandChange"
4534
+ >
4535
+ <el-table-column
4536
+ fixed="left"
4537
+ type="selection"
4538
+ />
4539
+ <MTableColumn
4540
+ type="expand"
4541
+ width="1"
4542
+ >
4543
+ <template #default="props">
4544
+ <h1>index{{ props.index }}</h1>
4545
+ <h1>$index{{ props.$index }}</h1>
4546
+ <h1>测试</h1>
4547
+ </template>
4548
+ </MTableColumn>
4549
+ <MTableColumn
4550
+ v-for="item in tableTitle"
4551
+ :key="item.prop"
4552
+ :prop="item.prop"
4553
+ :label="item.label"
4554
+ :align="item.align"
4555
+ :minWidth="item.minWidth"
4556
+ :className="item.className"
4557
+ :filters="item.filters"
4558
+ :headerAlign="item.headerAlign"
4559
+ :fixed="item.fixed"
4560
+ v-model:filtersValue="filtersValue"
4561
+ showOverflowTooltip
4562
+ >
4563
+ </MTableColumn>
4564
+ </MTableSuper>
4565
+ <h3>树状表格</h3>
4566
+ <MTableSuper
4567
+ v-if="!tableData"
4568
+ class="style.box"
4569
+ :data="tableData"
4570
+ border
4571
+ @headerDragend="headerDragend"
4572
+ :filtersValue="filtersValue"
4573
+ scrollbarAlwaysOn
4574
+ v-model:tableConfig="tableConfig"
4575
+ rowKey="id"
4576
+ tableConfigKey="tableConfigKey"
4577
+ @expandChange="privateExpandChange"
4578
+ >
4579
+ <MTableColumn
4580
+ v-for="item in tableTitle"
4581
+ :key="item.prop"
4582
+ :prop="item.prop"
4583
+ :label="item.label"
4584
+ :align="item.align"
4585
+ :minWidth="item.minWidth"
4586
+ :className="item.className"
4587
+ :filters="item.filters"
4588
+ :headerAlign="item.headerAlign"
4589
+ :fixed="item.fixed"
4590
+ v-model:filtersValue="filtersValue"
4591
+ showOverflowTooltip
4592
+ >
4593
+ </MTableColumn>
4594
+ </MTableSuper>
4595
+ </div>
4596
+ </template>
4597
+
4598
+ <script setup lang="ts">
4599
+ import { ref } from 'vue'
4600
+ import { useTableConfig } from 'packages/index'
4601
+ import { MTableColumn } from 'packages/MTableColumn'
4602
+
4603
+ const privateExpandChange = (row: any, expandedRows: any[]) => {
4604
+ console.log('row', row)
4605
+ console.log('expandedRows', expandedRows)
4606
+ }
4607
+
4608
+ // const test = (data: any) => {
4609
+ // console.log('data', data)
4610
+ // }
4611
+
4612
+ const tableData = ref<any[]>([])
4613
+ const { tableTitle, headerDragend, tableConfig, filtersValue } = useTableConfig('MTableDemo', [{
4614
+ label: '序号',
4615
+ prop: 'sn',
4616
+ minWidth: 200
4617
+ // fixed: 'right'
4618
+ }, {
4619
+ label: '时间',
4620
+ prop: 'date',
4621
+ minWidth: 200
4622
+ // fixed: 'left'
4623
+ }, {
4624
+ label: '地址',
4625
+ prop: 'address',
4626
+ minWidth: 200
4627
+ }, {
4628
+ label: '名称',
4629
+ prop: 'name',
4630
+ minWidth: 200
4631
+ }], tableData)
4632
+ console.log('tableTitle', tableTitle.value)
4633
+
4634
+ tableData.value = [{
4635
+ id: 1,
4636
+ sn: 1,
4637
+ date: '2016-05-03',
4638
+ name: 'Tom1',
4639
+ address: 'No. 189',
4640
+ tag: 'Home',
4641
+ pid: 0
4642
+ }, {
4643
+ id: 2,
4644
+ sn: 2,
4645
+ date: '2016-05-02',
4646
+ name: 'Tom2',
4647
+ address: 'No. 189, Grove St, Los Angeles',
4648
+ tag: 'Office',
4649
+ pid: 0,
4650
+ children: [{
4651
+ id: 21,
4652
+ sn: 1,
4653
+ date: '2016-05-02',
4654
+ name: 'Tom21',
4655
+ address: 'No. 189, Grove St, Los Angeles',
4656
+ tag: 'Office'
4657
+ }, {
4658
+ id: 22,
4659
+ sn: 2,
4660
+ date: '2016-05-02',
4661
+ name: 'Tom22',
4662
+ address: 'No. 189, Grove St, Los Angeles',
4663
+ tag: 'Office'
4664
+ }]
4665
+ }, {
4666
+ id: 3,
4667
+ sn: 3,
4668
+ date: '2016-05-04',
4669
+ name: 'Tom3',
4670
+ address: 'No. 189',
4671
+ tag: 'Home',
4672
+ pid: 0
4673
+ }, {
4674
+ id: 4,
4675
+ sn: 4,
4676
+ date: '2016-05-01',
4677
+ name: 'Tom4',
4678
+ address: 'No. 189, Grove St, Los Angeles',
4679
+ tag: 'Office',
4680
+ pid: 0
4681
+ }, {
4682
+ id: 5,
4683
+ sn: 5,
4684
+ date: '2016-05-05',
4685
+ name: 'Tom4',
4686
+ address: 'No. 189, Grove St, Los Angeles',
4687
+ tag: 'Office',
4688
+ pid: 0
4689
+ }, {
4690
+ id: 6,
4691
+ sn: 6,
4692
+ date: '2016-06-01',
4693
+ name: 'Tom4',
4694
+ address: 'No. 189, Grove St, Los Angeles',
4695
+ tag: 'Office',
4696
+ pid: 0
4697
+ }]
4698
+ </script>
4699
+
4700
+ <style lang="scss" scoped>
4701
+ .g-box {
4702
+ max-width: 1000px;
4703
+ }
4704
+ </style>
4705
+
4706
+
4707
+ ```
4708
+
4709
+ ### 2) Attributes
4710
+
4711
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
4712
+ |----------------|-----------------------------|------------------|-----|-----------------------------------------------------|
4713
+ | data | 表格的数据 | Array | - | [ ] |
4714
+ | sole | 行的唯一值 | String , number | - | key |
4715
+ | filtersValue | 表格内容筛选(当为null时,不显示筛选图标) | Function \| null | - | null |
4716
+ | expandProp | 展开图标列(如使用这个属性则必须存在rowKey属性) | string | - | '' |
4717
+ | tableConfigKey | 表格配置key | string | - | '' |
4718
+ | 其余参数 | 参考el官网的table | any | - | https://element-plus.org/zh-CN/component/table.html |
4719
+
4720
+ ## 要求
4721
+
4722
+ ```
4723
+ sole 必须传递在表格数据内为唯一的值 如id key 等不会发生重复的关键字
4724
+ ```
4725
+
4726
+ ### 3) Events
4727
+
4728
+ | 方法名 | 说明 | 回调参数 |
4729
+ |---------------------|--------------------------------------|-----------------------------------------------------|
4730
+ | pasteData | 表格粘贴方法 | 共有2个参数,依次为粘贴动作的数据PasteAction ,表格原始数据tableData |
4731
+ | update:tableConfig | 表格配置更新 | \[tableConfig: TableConfig] |
4732
+ | privateExpandChange | expandProp模式下 当用户对某一行展开或者关闭的时候会触发该事件 | [row: any, expandedRows: any[]] |
4733
+ | 其余方法 | 参考el官网的table | https://element-plus.org/zh-CN/component/table.html |
4734
+
4735
+ ### 4) PasteAction
4736
+
4737
+ | 参数 | 说明 | 类型 |
4738
+ |------------|----------------------------------------|--------|
4739
+ | editRow | 返回粘贴的对应行的原始数据 | Object |
4740
+ | editColumn | 返回粘贴时鼠标所在列的 表格prop值 | String |
4741
+ | arr | 返回粘贴时候处理之后的 数组信息 | Array |
4742
+ | rowIndex | 根据sole的值 去data内查找 当前操作的 粘贴行在data内的序号 | number |
4743
+
4744
+
4745
+
4746
+
4747
+
4008
4748
  虚拟化表格
4009
4749
  =================
4010
4750
 
@@ -4059,13 +4799,15 @@ const { tableTitle, tableConfig, filtersValue } = useTableV2Config('MTableV2Demo
4059
4799
  const test = () => {
4060
4800
  filtersValue.value = {}
4061
4801
  }
4062
- tableData.value = [{
4063
- id: 1,
4064
- sn: 'sn',
4065
- date: 'date',
4066
- address: 'address',
4067
- name: 'name'
4068
- }]
4802
+ for (let i = 0; i < 1000; i++) {
4803
+ tableData.value.push({
4804
+ id: i,
4805
+ sn: 'sn' + i,
4806
+ date: 'date' + i,
4807
+ address: 'address' + i,
4808
+ name: 'name' + i
4809
+ })
4810
+ }
4069
4811
  </script>
4070
4812
 
4071
4813
  <style lang="scss" scoped>
@@ -4090,6 +4832,7 @@ tableData.value = [{
4090
4832
  | fixed | 单元格宽度是自适应还是固定 | boolean | - | false |
4091
4833
  | estimatedRowHeight | 渲染动态的单元格的预估高度 | number \| null | - | null |
4092
4834
  | headerHeight | Header 的高度由height设置。 如果传入数组,它会使 header row 等于数组长度 | number \| number[] \| null | - | null |
4835
+ | cellWidthAdaptive | 单元格宽度自适应 | boolean | - | false |
4093
4836
  | 其余参数 | 参考el官网的table | any | - | https://element-plus.org/zh-CN/component/table-v2.html#tablev2-%E5%B1%9E%E6%80%A7 |
4094
4837
 
4095
4838
  ### 3) Events
@@ -4929,3 +5672,33 @@ const list = ref<{ name: string, className: string }[]>([
4929
5672
  | repairZero | 末尾补到几位零 | number | - |
4930
5673
 
4931
5674
 
5675
+
5676
+
5677
+ ## vue3的slots转json
5678
+
5679
+ ### 1) 参数
5680
+
5681
+ | 参数 | 描述 | 类型 | 默认值 |
5682
+ |-------|-------------|--------|-----------|
5683
+ | slots | vue的slots对象 | Slots | - |
5684
+ | name | 插槽名 | string | 'default' |
5685
+
5686
+ ### 2) 返参
5687
+
5688
+ | 参数 | 描述 | 类型 | 默认值 |
5689
+ |----|--------------|-------------------|-----|
5690
+ | - | 格式化后的slots数据 | SlotsToDataReturn | [] |
5691
+
5692
+ #### 2.1) SlotsToDataReturn
5693
+ | 参数 | 描述 | 类型 | 默认值 |
5694
+ |-------------------|--------------|-------------------------|-----|
5695
+ | SlotsToDataReturn | 格式化后的slots数据 | SlotsToDataReturnItem[] | [] |
5696
+
5697
+ #### 2.1) SlotsToDataReturn
5698
+ | 参数 | 描述 | 类型 | 默认值 |
5699
+ |----------|---------------|-----------------------------|-----|
5700
+ | name | 标签名 | string | - |
5701
+ | props | 组件标签上的props参数 | Record<string, any> \| null | - |
5702
+ | children | 子级 | SlotsToDataReturnItem[] | - |
5703
+
5704
+