br-dionysus 0.5.1 → 0.6.1

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 (35) hide show
  1. package/README.md +290 -53
  2. package/createMd.js +62 -34
  3. package/dist/br-dionysus.es.js +1643 -1258
  4. package/dist/br-dionysus.umd.js +3 -3
  5. package/dist/index.css +1 -1
  6. package/dist/packages/Hook/useRemainingSpace/useRemainingSpace.d.ts +11 -0
  7. package/dist/packages/Hook/useTableConfig/useTableConfig.d.ts +35 -0
  8. package/dist/packages/MTableColumn/index.d.ts +4 -0
  9. package/dist/packages/MTableColumn/src/index.vue.d.ts +71 -0
  10. package/dist/packages/MTableColumnSet/index.d.ts +4 -0
  11. package/dist/packages/MTableColumnSet/src/index.vue.d.ts +53 -0
  12. package/dist/packages/index.d.ts +4 -0
  13. package/package.json +2 -1
  14. package/packages/Hook/useRemainingSpace/README.md +25 -0
  15. package/packages/Hook/useRemainingSpace/useRemainingSpace.ts +142 -0
  16. package/packages/Hook/useTableConfig/README.md +36 -0
  17. package/packages/Hook/useTableConfig/useTableConfig.ts +126 -0
  18. package/packages/MInline/docs/README.md +1 -1
  19. package/packages/MInputNumber/docs/README.md +1 -1
  20. package/packages/MSelectTable/docs/README.md +1 -1
  21. package/packages/MTable/docs/README.md +15 -16
  22. package/packages/MTableColumn/docs/README.md +24 -0
  23. package/packages/MTableColumn/docs/demo.vue +79 -0
  24. package/packages/MTableColumn/index.ts +10 -0
  25. package/packages/MTableColumn/src/index.vue +285 -0
  26. package/packages/MTableColumnSet/docs/README.md +30 -0
  27. package/packages/MTableColumnSet/docs/demo.vue +43 -0
  28. package/packages/MTableColumnSet/index.ts +10 -0
  29. package/packages/MTableColumnSet/src/index.vue +293 -0
  30. package/packages/README.md +1 -0
  31. package/packages/SkinConfig/docs/README.md +1 -1
  32. package/packages/TabPage/docs/README.md +2 -1
  33. package/packages/index.ts +8 -1
  34. package/packages/list.json +12 -0
  35. package/src/router.ts +10 -0
package/README.md CHANGED
@@ -2,32 +2,35 @@
2
2
 
3
3
  ## 组件列表
4
4
 
5
- + MInline([筛选](#MInlinetitle))
5
+ + MInline([筛选](#筛选))
6
6
 
7
- + MInputNumber([数值输入框组件](#MInputNumbertitle))
7
+ + MInputNumber([数值输入框组件](#数值输入框组件))
8
8
 
9
- + MSelectTable([下拉表格选择器](#MSelectTabletitle))
9
+ + MSelectTable([下拉表格选择器](#下拉表格选择器))
10
10
 
11
- + MTable([表格选择器](#MTabletitle))
11
+ + MTable([表格组件](#表格组件))
12
12
 
13
- + SkinConfig([皮肤设置](#SkinConfigtitle))
13
+ + MTableColumn([表格列组件](#表格列组件))
14
14
 
15
- + TabPage([标签页组件](#TabPagetitle))
16
- ---
15
+ + MTableColumnSet([表格头设置组件](#表格头设置组件))
17
16
 
18
- ### MInline(筛选)
19
- ---
17
+ + SkinConfig([皮肤设置](#皮肤设置))
20
18
 
19
+ + TabPage([标签页组件](#标签页组件))
20
+
21
+ + useRemainingSpace([计算获取剩余空间-hook](#计算获取剩余空间-hook))
22
+
23
+ + useTableConfig([表格组合-hook](#表格组合-hook))
21
24
 
22
25
 
23
- # 筛选
26
+ 筛选
24
27
  =================
25
28
 
26
29
  ### 1) 基础用法
27
30
 
28
31
 
29
32
 
30
- ```js
33
+ ```html
31
34
 
32
35
  <template>
33
36
  <div class="g-demo-m-inline-box">
@@ -185,20 +188,15 @@ const formInline = reactive({
185
188
  | switch | 当切换展开与折叠模式时触发,返回当前展开状态 | unfold(boolean) |
186
189
 
187
190
 
188
- ---
189
-
190
- ### MInputNumber(数值输入框组件)
191
- ---
192
-
193
191
 
194
192
 
195
- # 数值输入框组件
193
+ 数值输入框组件
196
194
  =================
197
195
 
198
196
  ### 1) 基础用法
199
197
 
200
198
 
201
- ```js
199
+ ```html
202
200
 
203
201
  <template>
204
202
  <div class="g-demo-m-input-number-box">
@@ -246,21 +244,16 @@ const test = ref<number>(0)
246
244
  | blur | 当 input 失去焦点时触发 | (event: Event) |
247
245
 
248
246
 
249
- ---
250
-
251
- ### MSelectTable(下拉表格选择器)
252
- ---
253
-
254
247
 
255
248
 
256
- # 下拉表格选择器
249
+ 下拉表格选择器
257
250
  =================
258
251
 
259
252
  ### 1) 基础用法
260
253
 
261
254
 
262
255
 
263
- ```js
256
+ ```html
264
257
 
265
258
  <template>
266
259
  <div class="g-m-select-table-box">
@@ -369,14 +362,9 @@ const remoteMethod = async (query: string = '') => {
369
362
  | selected | 单选模式点击行时触发 | selectedRow(所选行) |
370
363
 
371
364
 
372
- ---
373
-
374
- ### MTable(表格选择器)
375
- ---
376
-
377
365
 
378
366
 
379
- # 表格选择器
367
+ 表格组件
380
368
  =================
381
369
 
382
370
  ### 1) 基础用法
@@ -384,7 +372,7 @@ const remoteMethod = async (query: string = '') => {
384
372
 
385
373
 
386
374
 
387
- ```js
375
+ ```html
388
376
 
389
377
  <template>
390
378
  <div>
@@ -449,47 +437,224 @@ const pasteData = (obj: any, data: any) => {
449
437
  ### 2) Attributes
450
438
  | 参数 | 说明 | 类型 | 可选值 | 默认值 |
451
439
  | ----------- | ------- | ---------------------------- |-----|--------|
452
- |data |表格的数据 | Array | - | [] |
453
- |sole |行的唯一值 |String | number | key |
454
- |filtersValue |表格内容筛选 |Function | - | {} |
440
+ |data |表格的数据 | Array | - | [ ] |
441
+ |sole |行的唯一值 |String , number | - | key |
442
+ |filtersValue |表格内容筛选 |Function | - | () => void |
443
+ |其余参数 |参考el官网的table |any | - |https://element-plus.org/zh-CN/component/table.html|
455
444
  ## 要求
456
445
  ```
457
446
  sole 必须传递在表格数据内为唯一的值 如id key 等不会发生重复的关键字
458
447
  ```
459
448
 
460
449
  ### 3) Events
461
- | 方法名 | 说明 | 参数 |
450
+ | 方法名 | 说明 | 回调参数 |
462
451
  | ----------- | ------- | ---------------------------- |
463
- | pasteData | 表格粘贴方法 | {editRow,editColumn,arr,rowIndex},tableData|
452
+ | pasteData | 表格粘贴方法 | 共有2个参数,依次为粘贴动作的数据PasteAction ,表格原始数据tableData |
453
+ |其余方法 |参考el官网的table |https://element-plus.org/zh-CN/component/table.html|
464
454
 
465
- ##### 方法参数描述
466
- ```ts
467
- const editRow : Object // 返回粘贴的对应行的原始数据
455
+ ### 4) PasteAction
456
+ |参数 | 说明 | 类型 |
457
+ |-----|-------|-------|
458
+ |editRow|返回粘贴的对应行的原始数据|Object|
459
+ |editColumn|返回粘贴时鼠标所在列的 表格prop值|String|
460
+ |arr|返回粘贴时候处理之后的 数组信息|Array|
461
+ |rowIndex|根据sole的值 去data内查找 当前操作的 粘贴行在data内的序号|number|
468
462
 
469
- const editColumn: String // 返回粘贴时鼠标所在列的 表格prop值
463
+
464
+
470
465
 
471
- const arr: Array // 返回粘贴时候处理之后的 数组信息
472
466
 
473
- const rowIndex: number // 根据sole的值 去data内查找 当前操作的 粘贴行在data内的序号
467
+ 表格列组件
468
+ =================
474
469
 
475
- ```
470
+ ### 1) 基础用法
471
+
472
+
473
+
474
+
475
+ ```html
476
+
477
+ <template>
478
+ <div>
479
+ <el-table :data="tableData" style="width: 100%">
480
+ <MTableColumn
481
+ v-for="item in tableTitle"
482
+ :key="item.prop"
483
+ :prop="item.prop"
484
+ :label="item.label"
485
+ :minWidth="item.minWidth"
486
+ v-model:filtersValue="filtersValue"
487
+ showOverflowTooltip
488
+ />
489
+ </el-table>
490
+ </div>
491
+ </template>
492
+
493
+ <script setup lang="ts">
494
+ import { ref } from "vue";
495
+ interface FilterValue {
496
+ [key: string]: Array<string | number>
497
+ }
498
+ const filtersValue = ref<FilterValue>({})
499
+ interface User {
500
+ date: string;
501
+ name: string;
502
+ address: string;
503
+ tag: string;
504
+ }
505
+ const tableData = ref(<User[]>[
506
+ {
507
+ date: "2016-05-03",
508
+ name: "Tom",
509
+ address: "No. 189, Grove St, Los Angeles",
510
+ tag: "Home",
511
+ },
512
+ {
513
+ date: "2016-05-02",
514
+ name: "Tom",
515
+ address: "No. 189, Grove St, Los Angeles",
516
+ tag: "Office",
517
+ },
518
+ {
519
+ date: "2016-05-04",
520
+ name: "Tom",
521
+ address: "No. 189, Grove St, Los Angeles",
522
+ tag: "Home",
523
+ },
524
+ {
525
+ date: "2016-05-01",
526
+ name: "Tom",
527
+ address: "No. 189, Grove St, Los Angeles",
528
+ tag: "Office",
529
+ },
530
+ ])
531
+ const tableTitle = [
532
+ {
533
+ label: '日期',
534
+ prop: 'date',
535
+ minWidth: '172px'
536
+ },
537
+ {
538
+ label: '名称',
539
+ prop: 'name',
540
+ minWidth: '134px'
541
+ },
542
+ {
543
+ label: '地址',
544
+ prop: 'address',
545
+ minWidth: '134px'
546
+ },
547
+ {
548
+ label: '标签',
549
+ prop: 'tag',
550
+ minWidth: '134px'
551
+ }
552
+ ]
553
+ </script>
554
+
555
+ <style lang="scss"></style>
556
+
557
+
558
+ ```
559
+
560
+ ### 2) Attributes
561
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
562
+ | ------------------| --------------------------|-------------------|------------------------|---------|
563
+ |filtersValue | 列筛选过滤条件 | object | - | { } |
564
+ |filters | 表格筛选数据 | string[],number[] | - | any[] |
565
+ |filterMethod | 筛选方法 | Function | - | () => void |
566
+ |其余参数 | 参考el官网的table | any | - |https://element-plus.org/zh-CN/component/table.html|
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+ 表格头设置组件
575
+ =================
576
+
577
+ ### 1) 基础用法
578
+
579
+
580
+
581
+
582
+ ```html
583
+
584
+ <template>
585
+ <div>
586
+ <m-table-column-set v-model="tableConfig" foldMode />
587
+ <div>
588
+ {{ tableConfig }}
589
+ </div>
590
+ </div>
591
+ </template>
592
+
593
+ <script setup lang="ts">
594
+ import { ref } from "vue";
595
+ interface User {
596
+ date: string;
597
+ name: string;
598
+ address: string;
599
+ tag: string;
600
+ }
601
+
602
+
603
+ const tableConfig = ref({
604
+ 'date': {
605
+ minWidth: 100,
606
+ show: true,
607
+ sort: 0,
608
+ label: 'date'
609
+ },
610
+ 'name': {
611
+ minWidth: 100,
612
+ show: true,
613
+ sort: 1,
614
+ label: 'name'
615
+ },
616
+ 'address': {
617
+ minWidth: 100,
618
+ show: true,
619
+ sort: 2,
620
+ label: 'address'
621
+ },
622
+ })
623
+
624
+ </script>
625
+
626
+ <style lang="scss"></style>
476
627
 
477
628
 
478
- ---
629
+ ```
479
630
 
480
- ### SkinConfig(皮肤设置)
481
- ---
631
+ ### 2) Attributes
632
+
633
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
634
+ | --------------------- | ---------------------------------------------------- | ---------------------------------------- | ------ | ------ |
635
+ | model-value / v-model | 绑定值 | { [propName: string]: TableConfigItem } | - | {} |
636
+ | foldMode | 是否开启折叠 开启的话需要父级元素为flex布局/grid布局 | boolean | - | false |
637
+
638
+
639
+ ### 3) TableConfigItem
640
+ | 参数 | 说明 | 类型 |
641
+ | ----------- | ------------------------------------------------- | -------------------------- |
642
+ | minWidth | 最小列宽 | number,string |
643
+ | show | 是否显示 | boolean |
644
+ | sort | 排序 | number |
645
+ | label | 列名 | string |
646
+ | headerAlign | 表头对齐方式, 若不设置该项,则使用表格的对齐方式 | 'left' ,'center' , 'right' |
482
647
 
483
648
 
484
649
 
485
- # 皮肤设置
650
+ 皮肤设置
486
651
  =================
487
652
 
488
653
  ### 1) 基础用法
489
654
 
490
655
 
491
656
 
492
- ```js
657
+ ```html
493
658
 
494
659
  <template>
495
660
  <div class="g-demo-skin-config-box">
@@ -1174,14 +1339,86 @@ const list = ref<{ name: string, className: string }[]>([
1174
1339
  | change | 绑定值被改变时触发 | SkinConfig |
1175
1340
 
1176
1341
 
1177
- ---
1342
+
1343
+
1344
+ 标签页组件
1345
+ =================
1346
+
1178
1347
 
1179
- ### TabPage(标签页组件)
1180
- ---
1181
1348
 
1349
+ # 霸软组件Hook说明
1350
+
1351
+ ## Hook列表
1352
+
1353
+ + useRemainingSpace([计算获取剩余空间-hook](#计算获取剩余空间-hook))
1354
+
1355
+ + useTableConfig([表格组合-hook](#表格组合-hook))
1356
+
1357
+
1358
+ 计算获取剩余空间 hook
1359
+ =================
1360
+
1361
+ ### 1) 所需参数
1362
+
1363
+ | 名称 | 描述 | 类型 | 可选值 | 默认值 |
1364
+ |--------------|------|--------|:---:|:---:|
1365
+ | boxClassName | 父级空间 | string | - | - |
1366
+ | className | 排除空间 | string | - | - |
1367
+ | redundancy | 冗余值 | number | - | 0 |
1368
+
1369
+ ### 2) 返回值
1370
+
1371
+ | 名称 | 描述 | 类型 |
1372
+ |--------------|--------------------------------|-------------|
1373
+ | height | 计算之后的高度 | ref<number> |
1374
+ | tableCovered | 重新进行计算高度 (如弹窗表 抽屉表 等默认无DOM时使用) | function |
1375
+
1376
+
1377
+
1378
+
1379
+
1380
+
1381
+
1382
+
1383
+
1384
+
1385
+
1386
+
1387
+ 表格组合 hook
1388
+ =================
1389
+
1390
+ ### 1) 所需参数
1391
+
1392
+ | 名称 | 描述 | 类型 | 可选值 | 默认值 |
1393
+ |------------|--------|--------------|:---:|:---:|
1394
+ | name | 表格唯一标识 | string | - | - |
1395
+ | tableTitle | 列配置 | tableTitle[] | - | - |
1396
+ | tableData | 表格数据 | ref<any[]> | - | - |
1397
+
1398
+ ### 2) 返回值
1399
+
1400
+ | 名称 | 描述 | 类型 |
1401
+ |------------------|---------|-----------------------------------------|
1402
+ | tableTitle | 处理之后的表头 | TableTitle[] |
1403
+ | tableConfig | 表头的配置项 | { [propName: string]: TableConfigItem} |
1404
+ | headerDragend | 表格拖拽事件 | function |
1405
+ | initColumnFilter | 列的筛选 | function |
1406
+ | filtersValue | 过滤条件 | { [key: string]: Array<string,number>} |
1407
+
1408
+ ### 3) TableTitle
1409
+
1410
+ | 名称 | 描述 | 类型 |
1411
+ |---------------|----------------------------------------------------------------------|---------------------------------------------|
1412
+ | label | 显示的标题 | string |
1413
+ | prop | 字段对应列的字段名字也可以使用 property属性 | string |
1414
+ | minWidth? | 对应列的最小宽度与 width 的区别是 width 是固定的,min-width 会按比例分配剩余宽度 | number ,string, |
1415
+ | className? | 列的className | string |
1416
+ | sortable | 列是否能够排序 则代表用户希望远程排序,需要监听 Table 的 sort-change 事件 */ | Boolean |
1417
+ | filters? | 据过滤的选项, 数组格式,数组中的元素需要有 text 和 value 属性。 数组中的每个元素都需要有 text 和 value 属性 | {text:string,number,value:string,number} [] |
1418
+ | filterMethod? | 数据过滤使用的方法, 如果是多选的筛选项,对每一条数据会执行多次,任意一次返回 true 就会显示 | Function |
1419
+ | headerAlign? | 表头对齐方式, 若不设置该项,则使用表格的对齐方式 | 'left' , 'center' , 'right' |
1182
1420
 
1183
1421
 
1184
- # 标签页组件
1185
1422
 
1186
1423
 
1187
1424
 
package/createMd.js CHANGED
@@ -1,47 +1,75 @@
1
1
  const fs = require('fs') // 文件服务
2
-
3
2
  // 读取文件里面的MD文档
4
3
  const interiorFolderPath = './packages' // 默认路径
5
- const unwantedFolders = ['typings', 'Foo', 'Hook', 'Button']; // 不需要的文件夹名称
6
- fs.readdir(interiorFolderPath,'utf-8',(err,items)=>{
7
- if(err) return console.log(err);
8
- const folderNames = items.filter(item => fs.statSync(`${interiorFolderPath}/${item}`).isDirectory() && !unwantedFolders.includes(item))
9
- const mdGather= folderNames.map(item => ({ // 拿到处理后的每一个文件数据
10
- name:item,
11
- mdText:disFile(getMdContent(`${interiorFolderPath}/${item}/docs/README.md`)),
12
- demoText:getMdContent(`${interiorFolderPath}/${item}/docs/demo.vue`),
13
- }))
14
- let collectMD = `# 霸软业务组件库\r\n\r\n## 组件列表\r\n`
15
- mdGather.forEach(item => {
16
- // 取tittle
17
- const title = extractTitle(item.mdText)
18
- collectMD+= `\r\n+ ${item.name}([${title}](#${item.name}title))\r\n`
19
- })
20
- mdGather.forEach(item => {
21
- const title = extractTitle(item.mdText)
22
- collectMD+= `--- \r\n\r\n ### ${item.name}(${title})\r\n---\r\n\r\n`
23
- collectMD+=insertText(item.mdText,item.demoText)
24
- collectMD+='\r\n\r\n'
25
- })
26
- fs.writeFileSync('./README.md',collectMD)
27
- })
4
+ const hookFolderPath = './packages/Hook'
5
+ const unwantedFolders = ['typings', 'Foo', 'Hook', 'Button'] // 不需要的文件夹名称
6
+ let collectMD = `# 霸软业务组件库\r\n\r\n## 组件列表\r\n`
28
7
 
29
- const getMdContent = (path) =>{
30
- return fs.readFileSync(path,'utf-8')
8
+ const getMdContent = (path) => {
9
+ return fs.readFileSync(path, 'utf-8')
31
10
  }
32
11
  const disFile = (text) => {
33
12
  return text.replace(/<script setup>[\s\S]*?<\/script>/, '').replace(/<Preview[^>]*>[\s\S]*?<\/Preview>/, '')
34
13
  }
35
- const insertText = (text,demo) => {
36
- const regex = /### 1\) 基础用法([\s\S]*?)### 2\)/g;
14
+ const insertText = (text, demo) => {
15
+ const regex = /### 1\) 基础用法([\s\S]*?)### 2\)/g
37
16
  const newText = text.replace(regex, (match, p1) => {
38
- return `### 1) 基础用法${p1}\`\`\`js\r\n\r\n${demo}\r\n\r\n\`\`\`\r\n\r\n### 2)`;
39
- });
17
+ return `### 1) 基础用法${p1}\`\`\`html\r\n\r\n${demo}\r\n\r\n\`\`\`\r\n\r\n### 2)`
18
+ })
40
19
  return newText
41
20
  }
42
21
 
43
- const extractTitle = (text) =>{
44
- const regex = /# (\S+)/;
45
- const match = text.match(regex);
46
- return match[1]
22
+ const extractTitle = (text) => {
23
+ const _text = text.substring(0, text.indexOf('=')).trim()
24
+ const index = _text.lastIndexOf('\n') !== -1 ? _text.lastIndexOf('\n') : 0
25
+ const title = _text.substring(index)
26
+ return title.trim()
27
+ }
28
+
29
+ const main = () => {
30
+ const elFile = fs.readdirSync(interiorFolderPath, 'utf-8')
31
+ const folderNames = elFile.filter(item => fs.statSync(`${interiorFolderPath}/${item}`).isDirectory() && !unwantedFolders.includes(item))
32
+ const mdGather = folderNames.map(item => ({ // 拿到处理后的每一个文件数据
33
+ name: item,
34
+ mdText: disFile(getMdContent(`${interiorFolderPath}/${item}/docs/README.md`)),
35
+ demoText: getMdContent(`${interiorFolderPath}/${item}/docs/demo.vue`)
36
+ }))
37
+ // 写入组件MD
38
+
39
+ // 取title
40
+ mdGather.forEach(item => {
41
+ const title = extractTitle(item.mdText).replace(/ /g, '-')
42
+ collectMD += `\r\n+ ${item.name}([${title}](#${title}))\r\n`
43
+ })
44
+ const hookFile = fs.readdirSync(hookFolderPath, 'utf-8')
45
+ const hookFolderNames = hookFile.filter(item => fs.statSync(`${hookFolderPath}`).isDirectory() && item !== 'index.ts')
46
+ const hookMdGather = hookFolderNames.map(item => ({
47
+ name: item,
48
+ mdText: disFile(getMdContent(`${hookFolderPath}/${item}/README.md`))
49
+ }))
50
+ hookMdGather.forEach(item => {
51
+ const title = extractTitle(item.mdText).replace(/ /g, '-')
52
+ collectMD += `\r\n+ ${item.name}([${title}](#${title}))\r\n`
53
+ })
54
+
55
+ // 写入文档内容
56
+ mdGather.forEach(item => {
57
+ collectMD += insertText(item.mdText, item.demoText)
58
+ collectMD += '\r\n\r\n'
59
+ })
60
+ fs.writeFileSync('./README.md', collectMD)
61
+
62
+ // 写入hook MD
63
+ collectMD += '# 霸软组件Hook说明\r\n\r\n## Hook列表\r\n'
64
+ hookMdGather.forEach(item => {
65
+ const title = extractTitle(item.mdText).replace(/ /g, '-')
66
+ collectMD += `\r\n+ ${item.name}([${title}](#${title}))\r\n`
67
+ })
68
+ hookMdGather.forEach(item => {
69
+ collectMD += '\r\n\r\n'
70
+ collectMD += item.mdText
71
+ collectMD += '\r\n\r\n'
72
+ })
73
+ fs.writeFileSync('./README.md', collectMD)
47
74
  }
75
+ main()