@suzhou-lab/page-components 1.0.0 → 1.0.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.
package/README.md CHANGED
@@ -46,23 +46,23 @@ npm install 装组件 → npx install-skills 部署技能 → 组件和AI技能
46
46
 
47
47
  ```
48
48
  ┌──────────────────────────────────────────┐
49
- │ #aside(可选) │ 主区域 │
50
- │ 左侧面板 │ ┌────────────────┐ │
51
- │ │ │ #filter 筛选区 │ │
52
- │ │ ├────────────────┤ │
53
- │ │ │ #toolbar 工具栏 │ │
54
- │ │ ├────────────────┤ │
55
- │ │ │ default slot │ │
56
- │ │ │ <el-table> │ │
57
- │ │ ├────────────────┤ │
58
- │ │ │ #pagination │ │
49
+ │ #aside(可选) │ 主区域 │ #right(可选) │
50
+ │ 左侧面板 │ ┌────────────────┐ │ 右侧面板 │
51
+ │ │ │ #filter 筛选区 │ │
52
+ │ │ ├────────────────┤ │
53
+ │ │ │ #toolbar 工具栏 │ │
54
+ │ │ ├────────────────┤ │
55
+ │ │ │ default slot │ │
56
+ │ │ │ <el-table> │ │
57
+ │ │ ├────────────────┤ │
58
+ │ │ │ #pagination │ │
59
59
  │ │ └────────────────┘ │
60
60
  └──────────────────────────────────────────┘
61
61
  ```
62
62
 
63
63
  核心能力:
64
64
  - **自动计算表格高度**:通过 `ResizeObserver` 监听容器变化,提供 `tableHeight` 给表格 `:height` 绑定
65
- - **插槽驱动**:`#filter`、`#toolbar`、`#pagination`、`#aside` 四个插槽,按需使用
65
+ - **插槽驱动**:`#filter`、`#toolbar`、`#pagination`、`#aside`、`#right` 五个插槽,按需使用
66
66
 
67
67
  ### 2.3 filter-form:配置驱动筛选
68
68
 
@@ -82,7 +82,7 @@ filterItems() {
82
82
 
83
83
  支持的 `type`:`input`、`select`、`yearpicker`、`monthpicker`、`datepicker`、`daterange`、`cascader`、`custom`。
84
84
 
85
- 高级特性:条件显隐(`visible`)、联动回调(`onChange`)、折叠展开(超过一行自动折叠)。
85
+ 高级特性:条件显隐(`visible`)、联动回调(`onChange`)、折叠展开(超过一行自动折叠)、列数配置(`columns` 属性)。
86
86
 
87
87
  ---
88
88
 
@@ -497,3 +497,74 @@ npx install-skills
497
497
  - `collect-ui`(采集)
498
498
  - `review-ui`(评审)
499
499
  - 其他基于 Vue 2 + Vue CLI 3 + Element UI + qiankun 的微应用
500
+
501
+ ---
502
+
503
+ ## 9. 组件 API
504
+
505
+ ### 9.1 `<list-page>`
506
+
507
+ **Props**
508
+
509
+ | 属性 | 类型 | 默认值 | 说明 |
510
+ |------|------|--------|------|
511
+ | `asideWidth` | `String` | `'240px'` | 左侧面板宽度 |
512
+
513
+ **Slots**
514
+
515
+ | 插槽 | 说明 |
516
+ |------|------|
517
+ | `#aside` | 左侧面板,有内容时自动显示 |
518
+ | `#filter` | 筛选区,放 `<filter-form>` |
519
+ | `#toolbar` | 工具栏按钮区 |
520
+ | default | 主内容区,放 `<el-table>` |
521
+ | `#pagination` | 分页区 |
522
+ | `#right` | 右侧面板,如"已选项目列表"等并排面板 |
523
+
524
+ **Provide**
525
+
526
+ | 注入值 | 说明 |
527
+ |--------|------|
528
+ | `listPage.tableHeight` | 动态计算的表格可用高度,表格通过 `inject` + `:height="tableHeight"` 绑定 |
529
+
530
+ ### 9.2 `<filter-form>`
531
+
532
+ **Props**
533
+
534
+ | 属性 | 类型 | 默认值 | 说明 |
535
+ |------|------|--------|------|
536
+ | `items` | `Array` | `[]` | 筛选项配置数组,每项见下方 Item 字段 |
537
+ | `model` / `v-model` | `Object` | `{}` | 筛选数据双向绑定 |
538
+ | `columns` | `Number` | `4` | 每行列数:`3`(一行 3 个)或 `4`(一行 4 个) |
539
+ | `collapsed` | `Boolean` | `true` | 初始是否折叠 |
540
+ | `defaultRowCount` | `Number` | `1` | 折叠时显示的行数 |
541
+ | `loading` | `Boolean` | `false` | 查询按钮 loading 状态 |
542
+ | `labelWidth` | `String` | `'112px'` | 标签宽度 |
543
+
544
+ **Events**
545
+
546
+ | 事件 | 参数 | 说明 |
547
+ |------|------|------|
548
+ | `@search` | `model` | 点击查询按钮,参数为当前筛选数据 |
549
+ | `@reset` | `model` | 点击重置按钮,参数为重置后的筛选数据 |
550
+
551
+ **Item 配置字段**
552
+
553
+ | 字段 | 类型 | 说明 |
554
+ |------|------|------|
555
+ | `label` | `String` | 标签文本 |
556
+ | `prop` | `String` | 绑定到 model 的字段名 |
557
+ | `type` | `String` | 控件类型:`input` \| `select` \| `yearpicker` \| `monthpicker` \| `datepicker` \| `daterange` \| `cascader` \| `custom` |
558
+ | `span` | `Number` | 栅格宽度(默认 `24 / columns`),如 `8`(3 列)或 `6`(4 列) |
559
+ | `options` | `Array \| Function` | 选项列表,格式 `[{ value, label }]`,支持函数动态返回 |
560
+ | `visible` | `Boolean \| Function` | 条件显隐,支持函数动态判断 |
561
+ | `onChange` | `Function` | 值变化回调,参数 `(value, model)` |
562
+ | `placeholder` | `String` | 占位文本 |
563
+ | `clearable` | `Boolean` | 是否可清空(默认 `true`) |
564
+ | `filterable` | `Boolean` | 是否可搜索(select/cascader 默认 `true`) |
565
+ | `disabled` | `Boolean` | 是否禁用 |
566
+ | `multiple` | `Boolean` | 是否多选(select) |
567
+ | `cascaderProps` | `Object` | cascader 的 `:props` 配置 |
568
+ | `valueFormat` | `String` | 日期控件值格式 |
569
+ | `component` | `Component` | 自定义组件(type=`custom` 时) |
570
+ | `attrs` | `Object` | 自定义组件的额外属性 |
package/filter-form.vue CHANGED
@@ -2,7 +2,7 @@
2
2
  <div class="filter-form" ref="filterForm">
3
3
  <el-form :inline="false" label-position="right">
4
4
  <el-row type="flex" :gutter="16">
5
- <el-col v-for="(item, idx) in visibleItems" :key="item.prop || idx" :span="item.span || 6"
5
+ <el-col v-for="(item, idx) in visibleItems" :key="item.prop || idx" :span="item.span || defaultSpan"
6
6
  :class="{ 'is-hidden': !getItemVisible(item) }">
7
7
  <el-form-item :label="item.label" :label-width="labelWidth">
8
8
  <el-input v-if="item.type === 'input'" v-model="internalModel[item.prop]"
@@ -95,6 +95,11 @@ export default {
95
95
  type: Boolean,
96
96
  default: true
97
97
  },
98
+ // 列数:3(一行3个)或 4(一行4个),默认 4
99
+ columns: {
100
+ type: Number,
101
+ default: 4
102
+ },
98
103
  defaultRowCount: {
99
104
  type: Number,
100
105
  default: 1
@@ -115,8 +120,11 @@ export default {
115
120
  }
116
121
  },
117
122
  computed: {
123
+ defaultSpan() {
124
+ return 24 / this.columns
125
+ },
118
126
  colsPerRow() {
119
- return 24 / ((this.items[0] && this.items[0].span) || 6)
127
+ return this.columns
120
128
  },
121
129
  maxVisible() {
122
130
  return this.defaultRowCount * this.colsPerRow
package/list-page.vue CHANGED
@@ -22,6 +22,9 @@
22
22
  </div>
23
23
  </el-card>
24
24
  </el-main>
25
+ <template v-if="$slots.right">
26
+ <slot name="right" />
27
+ </template>
25
28
  </el-container>
26
29
  </template>
27
30
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@suzhou-lab/page-components",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "苏州实验室 UMC 微应用统一列表页面组件 — list-page 布局容器 + filter-form 配置驱动筛选表单,附带 AI 改造技能",
5
5
  "main": "index.js",
6
6
  "bin": {