@icc-grow/web-components 1.0.0 → 1.1.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 (74) hide show
  1. package/README.md +15 -0
  2. package/dist/es/components/i-avatar-group/src/avatar-group.mjs +1 -1
  3. package/dist/es/components/i-form-item/src/form-item.mjs +1 -1
  4. package/dist/es/components/i-form-item/src/form-item.vue_vue_type_script_setup_true_lang.mjs +2 -1
  5. package/dist/es/components/i-image/src/image.vue_vue_type_script_setup_true_lang.mjs +20 -20
  6. package/dist/es/components/i-tooltip/src/tooltip-content.mjs +1 -1
  7. package/dist/es/style.css +1 -1
  8. package/dist/es/utils/use-intersection-observer.mjs +31 -0
  9. package/dist/lib/components/i-avatar-group/src/avatar-group.cjs +1 -1
  10. package/dist/lib/components/i-form-item/src/form-item.cjs +1 -1
  11. package/dist/lib/components/i-form-item/src/form-item.vue_vue_type_script_setup_true_lang.cjs +1 -1
  12. package/dist/lib/components/i-image/src/image.vue_vue_type_script_setup_true_lang.cjs +1 -1
  13. package/dist/lib/components/i-tooltip/src/tooltip-content.cjs +1 -1
  14. package/dist/lib/style.css +1 -1
  15. package/dist/lib/utils/use-intersection-observer.cjs +1 -0
  16. package/dist/types/components/i-form/index.d.ts +3 -3
  17. package/dist/types/components/i-form/index.d.ts.map +1 -1
  18. package/dist/types/components/i-form/src/form.vue.d.ts +1 -1
  19. package/dist/types/components/i-form/src/form.vue.d.ts.map +1 -1
  20. package/dist/types/components/i-form/src/types.d.ts +16 -4
  21. package/dist/types/components/i-form/src/types.d.ts.map +1 -1
  22. package/dist/types/components/i-form-item/index.d.ts +3 -3
  23. package/dist/types/components/i-form-item/index.d.ts.map +1 -1
  24. package/dist/types/components/i-form-item/src/form-item.vue.d.ts +2 -2
  25. package/dist/types/components/i-form-item/src/form-item.vue.d.ts.map +1 -1
  26. package/dist/types/components/i-form-item/src/types.d.ts +2 -2
  27. package/dist/types/components/i-form-item/src/types.d.ts.map +1 -1
  28. package/dist/types/components/i-tooltip/index.d.ts +9 -2
  29. package/dist/types/components/i-tooltip/index.d.ts.map +1 -1
  30. package/dist/types/components/i-tooltip/src/tooltip-content.vue.d.ts +15 -2
  31. package/dist/types/components/i-tooltip/src/tooltip-content.vue.d.ts.map +1 -1
  32. package/dist/types/components/i-tooltip/src/tooltip.vue.d.ts +18 -4
  33. package/dist/types/components/i-tooltip/src/tooltip.vue.d.ts.map +1 -1
  34. package/dist/types/utils/use-intersection-observer.d.ts +19 -0
  35. package/dist/types/utils/use-intersection-observer.d.ts.map +1 -0
  36. package/package.json +3 -4
  37. package/skills/icc-web-components/SKILL.md +0 -191
  38. package/skills/icc-web-components/patterns/crud-list.md +0 -195
  39. package/skills/icc-web-components/patterns/dialog-form.md +0 -180
  40. package/skills/icc-web-components/patterns/form-page.md +0 -139
  41. package/skills/icc-web-components/patterns/tabs-page.md +0 -164
  42. package/skills/icc-web-components/patterns/tree-manage.md +0 -169
  43. package/skills/icc-web-components/references/i-avatar.md +0 -29
  44. package/skills/icc-web-components/references/i-badge.md +0 -19
  45. package/skills/icc-web-components/references/i-card.md +0 -12
  46. package/skills/icc-web-components/references/i-color-picker.md +0 -17
  47. package/skills/icc-web-components/references/i-crud-page.md +0 -204
  48. package/skills/icc-web-components/references/i-dialog.md +0 -36
  49. package/skills/icc-web-components/references/i-draggable.md +0 -46
  50. package/skills/icc-web-components/references/i-dropdown.md +0 -21
  51. package/skills/icc-web-components/references/i-empty.md +0 -15
  52. package/skills/icc-web-components/references/i-feedback.md +0 -50
  53. package/skills/icc-web-components/references/i-form.md +0 -223
  54. package/skills/icc-web-components/references/i-icon.md +0 -21
  55. package/skills/icc-web-components/references/i-image.md +0 -34
  56. package/skills/icc-web-components/references/i-loading.md +0 -25
  57. package/skills/icc-web-components/references/i-menu.md +0 -22
  58. package/skills/icc-web-components/references/i-popover.md +0 -51
  59. package/skills/icc-web-components/references/i-progress.md +0 -14
  60. package/skills/icc-web-components/references/i-scrollbar.md +0 -20
  61. package/skills/icc-web-components/references/i-space.md +0 -15
  62. package/skills/icc-web-components/references/i-steps.md +0 -12
  63. package/skills/icc-web-components/references/i-tabs.md +0 -16
  64. package/skills/icc-web-components/references/i-tag.md +0 -35
  65. package/skills/icc-web-components/references/i-time-picker.md +0 -19
  66. package/skills/icc-web-components/references/i-transition.md +0 -17
  67. package/skills/icc-web-components/references/i-tree-select.md +0 -26
  68. package/skills/icc-web-components/references/i-tree.md +0 -34
  69. package/skills/icc-web-components/references/i-upload.md +0 -25
  70. package/skills/icc-web-components/references/i-virtual-list.md +0 -24
  71. package/skills/icc-web-components/references/i-virtual-table.md +0 -20
  72. package/skills/icc-web-components/rules/composition.md +0 -28
  73. package/skills/icc-web-components/rules/forms.md +0 -28
  74. package/skills/icc-web-components/rules/styling.md +0 -45
@@ -1,25 +0,0 @@
1
- # ILoading
2
-
3
- 加载中,指令 + 服务两种模式。
4
-
5
- **指令 v-loading**
6
-
7
- ```vue
8
- <ITable v-loading="loading" :data="list" :columns="columns" />
9
- ```
10
-
11
- **服务调用**
12
-
13
- ```typescript
14
- import { ILoading } from '@icc-grow/web-components'
15
-
16
- const instance = ILoading.service({
17
- target: '#container', // 目标容器,默认 document.body
18
- text: '加载中...',
19
- delay: 500, // 延迟展示(ms)
20
- minDuration: 300, // 最短展示(ms)
21
- })
22
-
23
- instance.close()
24
- instance.setText('正在处理...')
25
- ```
@@ -1,22 +0,0 @@
1
- # IMenu
2
-
3
- 侧边导航菜单。
4
-
5
- **Props**
6
-
7
- | Prop | Type | Default | Description |
8
- |------|------|---------|-------------|
9
- | items | `MenuRawData[]` | — | 菜单数据源(**必填**) |
10
- | props | `{ label?: string; icon?: string; children?: string; disabled?: string }` | — | 字段映射 |
11
- | rowKey | `string \| ((data) => MenuKey)` | `'value'` | 唯一标识 |
12
- | accordion | `boolean` | `true` | 手风琴 |
13
- | collapseBreakpoint | `number` | — | 自动折叠断点(px) |
14
- | indent | `number` | `30` | 每级缩进(px) |
15
- | collapsed | `boolean` | `false` | 折叠(**v-model:collapsed**) |
16
- | width | `number` | — | 宽度 |
17
-
18
- **Events**: `select` — `(item, ancestorChain)` · `collapse-change` — `(collapsed)`
19
-
20
- **Slots**: `item` — `{ raw, depth, active, isParent }`
21
-
22
- **Expose**: `collapse()` `expand()` `isCollapsed`
@@ -1,51 +0,0 @@
1
- # IPopover / ITooltip
2
-
3
- ## IPopover
4
-
5
- 点击/悬停弹出富文本浮层。
6
-
7
- **Props**
8
-
9
- | Prop | Type | Default | Description |
10
- |------|------|---------|-------------|
11
- | placement | `Placement` | `'bottom'` | 弹出位置 |
12
- | trigger | `'click' \| 'hover'` | `'click'` | 触发方式 |
13
- | visible | `boolean` | — | v-model:visible |
14
- | content | `string` | — | 文本内容 |
15
- | title | `string` | — | 标题 |
16
- | offset | `number` | — | 偏移量(px) |
17
- | showArrow | `boolean` | `true` | 箭头 |
18
- | openDelay | `number` | — | 打开延迟(ms) |
19
- | closeDelay | `number` | — | 关闭延迟(ms) |
20
- | disabled | `boolean` | `false` | 禁用 |
21
- | width | `number \| string` | — | 宽度 |
22
- | sameWidth | `boolean` | `false` | 宽度跟随触发器 |
23
-
24
- **Events**: `show` `hide`
25
-
26
- **Slots**: `default`(触发器)、`content`(弹出内容)
27
-
28
- **Expose**: `show()` `hide()`
29
-
30
- ---
31
-
32
- ## ITooltip
33
-
34
- 纯文字提示,组件/指令双模式。
35
-
36
- **组件 Props**
37
-
38
- | Prop | Type | Default | Description |
39
- |------|------|---------|-------------|
40
- | content | `string` | — | 提示内容 |
41
- | placement | `Placement` | `'top'` | 位置 |
42
- | trigger | `'hover' \| 'click' \| 'focus'` | `'hover'` | 触发 |
43
- | theme | `'dark' \| 'light'` | `'dark'` | 主题 |
44
- | disabled | `boolean` | `false` | 禁用 |
45
-
46
- **指令 v-tooltip**
47
-
48
- ```vue
49
- <IButton v-tooltip="'提示文字'">按钮</IButton>
50
- <IButton v-tooltip="{ content: '提示', placement: 'right' }">按钮</IButton>
51
- ```
@@ -1,14 +0,0 @@
1
- # IProgress
2
-
3
- 进度条(线性模式)。
4
-
5
- **Props**
6
-
7
- | Prop | Type | Default | Description |
8
- |------|------|---------|-------------|
9
- | percentage | `number` | — | 进度值 0-100(**必填**) |
10
- | label | `string` | — | 顶部标签文案 |
11
- | showValue | `boolean` | `false` | 显示进度文案 |
12
- | format | `(percentage) => string` | — | 自定义进度文案 |
13
- | height | `number` | — | 进度条高度(px) |
14
- | status | `'normal' \| 'success' \| 'warning' \| 'error'` | `'normal'` | 状态样式 |
@@ -1,20 +0,0 @@
1
- # IScrollbar
2
-
3
- 自定义滚动条容器。
4
-
5
- **Props**
6
-
7
- | Prop | Type | Default | Description |
8
- |------|------|---------|-------------|
9
- | height | `string \| number` | — | 容器高度 |
10
- | maxHeight | `string \| number` | — | 最大高度 |
11
- | tag | `string` | `'div'` | view 层标签 |
12
- | always | `boolean` | `false` | 始终显示滚动条 |
13
- | minThumbSize | `number` | — | 滑块最小尺寸(px) |
14
- | noresize | `boolean` | `false` | 关闭 ResizeObserver |
15
- | wrapClass | `string` | — | 滚动容器类名 |
16
- | contentClass | `string` | — | 内容容器类名 |
17
-
18
- **Events**: `scroll` — `({ scrollTop, scrollLeft })`
19
-
20
- **Expose**: `scrollTo(options)` `update()` `wrapRef`
@@ -1,15 +0,0 @@
1
- # ISpace
2
-
3
- 间距布局组件。
4
-
5
- **Props**
6
-
7
- | Prop | Type | Default | Description |
8
- |------|------|---------|-------------|
9
- | direction | `'horizontal' \| 'vertical'` | `'horizontal'` | 排列方向 |
10
- | size | `number` | `8` | 间距(px) |
11
- | align | `'start' \| 'center' \| 'end' \| 'baseline'` | — | 交叉轴对齐 |
12
- | wrap | `boolean` | `false` | 自动换行 |
13
- | fill | `boolean` | `false` | 子元素撑满 |
14
-
15
- **Slots**: `default`
@@ -1,12 +0,0 @@
1
- # ISteps
2
-
3
- 步骤条,数据驱动。
4
-
5
- **Props**
6
-
7
- | Prop | Type | Default | Description |
8
- |------|------|---------|-------------|
9
- | active | `number` | `0` | 当前步骤(**v-model:active**),从 0 开始 |
10
- | items | `StepItem[]` | — | 步骤数据(**必填**) |
11
-
12
- **StepItem**: `{ title: string; description?: string }`
@@ -1,16 +0,0 @@
1
- # ITabs
2
-
3
- 标签页,数据驱动。
4
-
5
- **Props**
6
-
7
- | Prop | Type | Default | Description |
8
- |------|------|---------|-------------|
9
- | options | `TabItem[]` | — | 标签数据(**必填**) |
10
- | disabled | `boolean` | `false` | 全局禁用 |
11
- | authList | `string[]` | — | 权限列表 |
12
- | authMethod | `(code, tab) => boolean` | — | 权限判断 |
13
-
14
- **TabItem**: `{ label, value, count?, disabled?, authCode? }`
15
-
16
- **Events**: `change` — `(value: TabValue)`
@@ -1,35 +0,0 @@
1
- # ITag / ITagGroup
2
-
3
- ## ITag
4
-
5
- **Props**
6
-
7
- | Prop | Type | Default | Description |
8
- |------|------|---------|-------------|
9
- | type | `'default' \| 'primary' \| 'success' \| 'warning' \| 'danger'` | `'default'` | 类型 |
10
- | disabled | `boolean` | `false` | 禁用 |
11
- | closable | `boolean` | `false` | 关闭按钮 |
12
- | round | `boolean` | `false` | 圆角 |
13
-
14
- **Events**: `click` `close`
15
-
16
- **Slots**: `default` `prefix`
17
-
18
- ---
19
-
20
- ## ITagGroup
21
-
22
- 数据驱动标签组。
23
-
24
- **Props**
25
-
26
- | Prop | Type | Default | Description |
27
- |------|------|---------|-------------|
28
- | options | `(string \| number \| Record<string, unknown>)[]` | `[]` | 标签数据 |
29
- | rowKey | `string` | — | 唯一标识字段 |
30
- | labelKey | `string` | — | 显示文案字段 |
31
- | tagLimit | `number` | — | 最大展示数,超出折叠 +N |
32
- | closable | `boolean` | `false` | 关闭按钮 |
33
- | type | `TagType` | `'default'` | 统一类型 |
34
-
35
- **Events**: `remove` — `(option, index)`
@@ -1,19 +0,0 @@
1
- # ITimePicker
2
-
3
- 时间选择器,HH:mm:ss 滚轮。
4
-
5
- **Props**
6
-
7
- | Prop | Type | Default | Description |
8
- |------|------|---------|-------------|
9
- | placeholder | `string` | — | 占位文本 |
10
- | disabled | `boolean` | `false` | 禁用 |
11
- | clearable | `boolean` | `false` | 可清空 |
12
- | validateEvent | `boolean` | `true` | 触发表单校验 |
13
- | disabledHours | `(hour) => boolean` | — | 小时禁用 |
14
- | disabledMinutes | `(minute, hour) => boolean` | — | 分钟禁用 |
15
- | disabledSeconds | `(second, hour, minute) => boolean` | — | 秒禁用 |
16
-
17
- **Events**: `change` `clear` `visible-change`
18
-
19
- **Expose**: `show()` `hide()` `focus()` `blur()`
@@ -1,17 +0,0 @@
1
- # ITransition
2
-
3
- 统一过渡动画组件。
4
-
5
- **Props**
6
-
7
- | Prop | Type | Default | Description |
8
- |------|------|---------|-------------|
9
- | name | `'fade' \| 'fade-down' \| 'slide-down' \| 'slide-up' \| 'slide-right' \| 'slide-left' \| 'fade-in-down' \| 'expand-down' \| 'bounce-right'` | — | 动画预设名(**必填**) |
10
- | duration | `number \| { enter: number; leave: number }` | — | 时长(ms) |
11
- | appear | `boolean` | `false` | 首次渲染播放进场动画 |
12
-
13
- **Events**: `before-enter` `enter` `after-enter` `before-leave` `leave` `after-leave`
14
-
15
- ```vue
16
- <ITransition name="fade"><div v-if="show">内容</div></ITransition>
17
- ```
@@ -1,26 +0,0 @@
1
- # ITreeSelect
2
-
3
- 树形选择器,ISelect 触发器 + ITree 面板。
4
-
5
- **Props**
6
-
7
- | Prop | Type | Default | Description |
8
- |------|------|---------|-------------|
9
- | data | `Record<string, unknown>[]` | — | 树形数据 |
10
- | props | `{ children?: string; label?: string; disabled?: string }` | — | 字段映射 |
11
- | rowKey | `string \| ((data) => TreeKey)` | — | 唯一标识 |
12
- | multiple | `boolean` | `false` | 多选 |
13
- | showCheckbox | `boolean \| ((data, node) => boolean)` | `false` | 显示 checkbox |
14
- | checkStrictly | `boolean` | `false` | 父子不关联 |
15
- | defaultExpandAll | `boolean` | `false` | 默认全展开 |
16
- | accordion | `boolean` | `false` | 手风琴 |
17
- | leafOnly | `boolean` | `false` | 仅选叶子 |
18
- | limit | `number` | — | 最大可选数 |
19
- | disabled | `boolean` | `false` | 禁用 |
20
- | clearable | `boolean` | `false` | 可清空 |
21
- | placeholder | `string` | — | 占位文本 |
22
- | tagLimit | `number` | — | 多选 Tag 最多展示数 |
23
-
24
- **Events**: `change` `clear` `visible-change` `exceed` `node-click`
25
-
26
- **Expose**: `show()` `hide()` `focus()` `blur()`
@@ -1,34 +0,0 @@
1
- # ITree
2
-
3
- 树形控件,虚拟渲染。
4
-
5
- **Props**
6
-
7
- | Prop | Type | Default | Description |
8
- |------|------|---------|-------------|
9
- | data | `Record<string, unknown>[]` | — | 树形数据 |
10
- | props | `{ children?: string; label?: string; disabled?: string; isLeaf?: string }` | — | 字段映射 |
11
- | rowKey | `string \| ((data) => TreeKey)` | — | 唯一标识 |
12
- | showCheckbox | `boolean \| ((data, node) => boolean)` | `false` | 显示 checkbox |
13
- | selectable | `boolean` | `false` | 可点击选中 |
14
- | multiple | `boolean` | `false` | 多选 |
15
- | checkStrictly | `boolean` | `false` | 父子不级联 |
16
- | defaultExpandAll | `boolean` | `false` | 默认全展开 |
17
- | defaultExpandedKeys | `TreeKey[]` | — | 默认展开节点 |
18
- | defaultCheckedKeys | `TreeKey[]` | — | 默认选中节点 |
19
- | accordion | `boolean` | `false` | 手风琴 |
20
- | leafOnly | `boolean` | `false` | 仅选叶子 |
21
- | limit | `number` | — | 最大可选数 |
22
- | height | `string` | — | 容器高度 |
23
- | maxHeight | `string` | `'500px'` | 最大高度 |
24
-
25
- **Events**
26
-
27
- | Event | Payload | Description |
28
- |-------|---------|-------------|
29
- | change | `(checkedKeys, halfCheckedKeys, checkedNodes, halfCheckedNodes)` | 选中变更 |
30
- | exceed | `(currentCount, limit)` | 超出限制 |
31
- | load | `(node, resolve)` | 懒加载 |
32
- | node-click | `(data, node, e)` | 节点点击 |
33
-
34
- **Expose**: `getCheckedKeys(leafOnly?)` `getHalfCheckedKeys()` `getCheckedNodes()` `setCheckedKeys(keys)`
@@ -1,25 +0,0 @@
1
- # IUpload
2
-
3
- 文件上传。
4
-
5
- **Props**
6
-
7
- | Prop | Type | Default | Description |
8
- |------|------|---------|-------------|
9
- | fileList | `UploadUserFile[]` | `[]` | 文件列表(**v-model:file-list**) |
10
- | directory | `string` | — | 上传目录 |
11
- | listType | `'list' \| 'card'` | `'list'` | 展示模式 |
12
- | accept | `string[]` | — | 允许的文件类型 |
13
- | multiple | `boolean` | `false` | 多选 |
14
- | limit | `number` | — | 最大文件数 |
15
- | maxSize | `number` | — | 单文件最大大小(字节) |
16
- | autoUpload | `boolean` | `true` | 选中后自动上传 |
17
- | disabled | `boolean` | `false` | 禁用 |
18
-
19
- **Events**: `success` `error` `remove` `exceed` `change`
20
-
21
- **Expose**: `submit()` `abort()` `retry(uid)`
22
-
23
- ```vue
24
- <IUpload v-model:file-list="files" directory="avatar" list-type="card" :accept="['image/*']" :limit="3" />
25
- ```
@@ -1,24 +0,0 @@
1
- # IVirtualList
2
-
3
- 虚拟列表,支持固定/动态高度。
4
-
5
- **Props**
6
-
7
- | Prop | Type | Default | Description |
8
- |------|------|---------|-------------|
9
- | data | `T[]` | `[]` | 数据源 |
10
- | rowKey | `keyof T \| string \| ((item) => string \| number)` | — | 唯一标识(**必填**) |
11
- | itemSize | `number` | — | 预估/固定高度 |
12
- | dynamic | `boolean` | `false` | 动态高度测量 |
13
- | buffer | `number` | — | 缓冲区节点数 |
14
- | height | `string \| number` | — | 容器高度 |
15
- | maxHeight | `string \| number` | — | 最大高度 |
16
- | loading | `boolean` | `false` | 加载中 |
17
- | finished | `boolean` | `false` | 已全部加载 |
18
- | distance | `number` | — | 触底距离(px) |
19
-
20
- **Events**: `scroll` `load`
21
-
22
- **Slots**: `default` — `{ item, index }`
23
-
24
- **Expose**: `scrollTo()` `scrollToAnchor(index)` `resetSizeCache()`
@@ -1,20 +0,0 @@
1
- # IVirtualTable
2
-
3
- 虚拟滚动表格,**API 对齐 ITable**,万级数据量。
4
-
5
- > ITable 基础 Props/Events/Expose 见 `i-crud-page.md`,此处仅列出虚拟滚动新增部分。
6
-
7
- **额外 Props**
8
-
9
- | Prop | Type | Default | Description |
10
- |------|------|---------|-------------|
11
- | rowKey | `string \| ((row) => string)` | — | **必填**,行唯一标识 |
12
- | itemSize | `number` | `50` | 每行预估高度 |
13
- | buffer | `number` | `5` | 缓冲区行数 |
14
- | loading | `boolean` | `false` | 加载中状态 |
15
- | finished | `boolean` | `false` | 是否已全部加载 |
16
- | distance | `number` | `50` | 触底距离(px) |
17
-
18
- **额外 Events**: `scroll` `load`
19
-
20
- **额外 Expose**: `scrollTo()` `scrollToRow(key)` `resetSizeCache()`
@@ -1,28 +0,0 @@
1
- # 组件组合规则
2
-
3
- > 多组件组合使用时的正确模式。具体代码见 [crud-list 模式](../patterns/crud-list.md)。
4
-
5
- ---
6
-
7
- ## 组件选择优先级
8
-
9
- 遇到 UI 需求时,按以下顺序选择:
10
-
11
- | 优先级 | 方案 | 示例 |
12
- | ------ | -------------- | --------------------------------- |
13
- | 1 | 组件库已有组件 | `IEmpty`, `IConfirm`, `IMessage` |
14
- | 2 | 组件库组件组合 | `IDialog` + `IForm` |
15
- | 3 | 自定义组件 | 业务特殊需求 |
16
-
17
- ---
18
-
19
- ## 禁止事项速查
20
-
21
- | 场景 | ❌ 禁止 | ✅ 正确方案 |
22
- | ------------ | -------------------------- | ------------------------------------------- |
23
- | 确认弹窗 | 用 `IDialog` 手写确认弹窗 | `IConfirm({ type, title, content })` |
24
- | 消息提示 | 手写 toast / div 通知 | `IMessage.success()` / `.error()` |
25
- | 空状态 | 手写空状态 div | `IEmpty` 组件 |
26
- | 加载状态 | 手写 loading 遮罩 | `v-loading` 指令 |
27
- | 弹窗表单 | 弹窗 + 表单混在页面组件中 | 抽离为独立子组件(如 `XxxFormDialog.vue`) |
28
- | 表格列格式化 | 为简单映射写 template 插槽 | 优先用 `TableColumn.formatter` |
@@ -1,28 +0,0 @@
1
- # 表单规则
2
-
3
- > 表单组件使用规范。完整代码见 [弹窗表单](../patterns/dialog-form.md) / [表单页](../patterns/form-page.md) / [CRUD 列表搜索区](../patterns/crud-list.md)。
4
-
5
- ---
6
-
7
- ## 核心原则
8
-
9
- | 原则 | 说明 |
10
- | ---- | ---- |
11
- | IForm + IFormItem 包裹 | 所有表单控件必须包在 `IForm > IFormItem` 结构中 |
12
- | 校验规则集中定义 | 统一放 `IForm` 的 `:rules` 属性,禁止散落在各 `IFormItem` 上 |
13
- | 提交前校验 | `await formRef.value?.validate()` |
14
- | 重置用 API | `formRef.value?.resetFields()`,禁止手动清空 |
15
- | 输入控件限宽 | 弹窗用 `w-full`,表单页用 `w-[400px]`,禁止全宽无限制 |
16
- | Select 数据驱动 | 用 `:options` 传数组,禁止手写 `<option>` 子元素 |
17
-
18
- ---
19
-
20
- ## 禁止事项速查
21
-
22
- | 禁止 | 替代方案 |
23
- | ---- | ---- |
24
- | `<input>` / `<select>` 原生元素 | `IInput` / `ISelect` 等组件 |
25
- | 不包裹 `IForm` 直接用表单控件 | `IForm + IFormItem` 结构 |
26
- | 校验规则散落在 `IFormItem` 上 | 统一放 `IForm` 的 `:rules` |
27
- | 手写搜索区布局 | `IPageLayout #search` 插槽 |
28
- | 表单输入框不限宽度 | 限制合理的固定宽度 |
@@ -1,45 +0,0 @@
1
- # 样式规则
2
-
3
- > 使用 `@icc-grow/web-components` 时的样式编写规范。
4
-
5
- ---
6
-
7
- ## 1. 颜色:只用语义 Tailwind Token
8
-
9
- 组件库通过 CSS 变量 `--i-color-{category}-{opacity}` 定义主题色,Tailwind Preset 自动映射为 class。
10
-
11
- **可用语义色**:`primary` / `danger` / `warning` / `success` / `black` / `white` / `gray`
12
-
13
- **命名规则**:`{属性}-{语义色}-{透明度}`,透明度数字越小越淡。
14
-
15
- ```
16
- bg-primary ← 主色背景
17
- text-danger ← 危险色文字
18
- bg-primary-5 ← 主色 5% 透明度(很淡的背景)
19
- border-black-10 ← 黑色 10% 透明度边框
20
- ```
21
-
22
- ---
23
-
24
- ## 2. BEM 类名约定
25
-
26
- | 层级 | 格式 | 示例 |
27
- | ---- | ---- | ---- |
28
- | Block | `{page-name}` | `user-list` |
29
- | Element | `{page-name}__{el}` | `user-list__header` |
30
- | Modifier | `{page-name}--{mod}` | `user-list--compact` |
31
-
32
- > 组件库内部使用 `i-` 前缀 BEM,页面代码**不要**用 `i-` 前缀。
33
-
34
- ---
35
-
36
- ## 3. 禁止事项速查
37
-
38
- | 禁止 | 替代方案 |
39
- | ---- | ---- |
40
- | 硬编码颜色 `#xxx` / `rgb()` | 语义 token:`bg-primary` / `text-danger` |
41
- | Tailwind 原生色 `bg-blue-500` | 语义色:`bg-primary` |
42
- | 手动 `gap-*` / `mr-*` 做按钮间距 | `ISpace` 组件 |
43
- | `style` 内联写颜色 | Tailwind class |
44
- | 擅自新增 CSS 变量 | 使用已有变量,不确定时询问 |
45
- | `border` 缺少 `border-solid` | 表单元素必须显式加 `border-solid` |