@zl-ui-kit/components 0.10.1 → 0.10.3

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 (2) hide show
  1. package/README.md +278 -39
  2. package/package.json +6 -6
package/README.md CHANGED
@@ -41,6 +41,7 @@ ZL UI 业务组件库 —— Element Plus 体系,`Zl` 前缀,55 个业务组
41
41
  - [6.2 Mock 模块(playground 离线联调)](#62-mock-模块playground-离线联调)
42
42
  - [6.3 组件对接实战(对应 `/use-request` 页面)](#63-组件对接实战对应-use-request-页面)
43
43
  - [6.4 常见坑位](#64-常见坑位)
44
+ - [6.5 组合用法范式(列表页 / 抽屉表单 / 卡片列表)](#65-组合用法范式列表页-抽屉表单-卡片列表)
44
45
  - [7. 表单与交互组件](#7-表单与交互组件)
45
46
  - [ZlForm —— schema 驱动](#zlform-schema-驱动)
46
47
  - [ZlSearch —— 查询条](#zlsearch-查询条)
@@ -992,6 +993,234 @@ req.cancel() // 取消进行中请求
992
993
 
993
994
  ---
994
995
 
996
+ ### 6.5 组合用法范式(列表页 / 抽屉表单 / 卡片列表)
997
+
998
+ §6.3 与 §7 是「单组件」用法;这里给出三种最常见的**页面级组合范式**,把数据组件、`ZlForm`、`ZlAction` 与 `useRequest` 家族串起来。命名与字段均按当前 Element Plus 版组件的实际 API 书写,可直接套用。
999
+
1000
+ #### 6.5.1 列表页范式:ZlSearchTable + usePageableRequest(内置)
1001
+
1002
+ `ZlSearchTable` 内部已用 `usePageableRequest` 驱动分页与查询,页面只需传 `request` / `columns` / `queryItems`;新增、导入、导出等按钮统一放进 `search-actions` 插槽;行内操作交给列的 `actions`;字典列与超长列用同名插槽(`#<prop>`)接管。
1003
+
1004
+ ```vue
1005
+ <script setup lang="ts">
1006
+ import { ref } from 'vue'
1007
+ import { ZlSearchTable, ZlAction, ZlDictTag, ZlAutoTooltip } from '@zl-ui-kit/components'
1008
+ import { useRequest, useDict, useGlobalMessage } from '@zl-ui-kit/composables'
1009
+ import EditDrawer from './EditDrawer.vue'
1010
+
1011
+ const { Message, Modal } = useGlobalMessage()
1012
+ const statusOptions = useDict('resourceStatus') // 字典项数组,渲染用 statusOptions.value
1013
+
1014
+ // 列定义:prop 命名;slot:true 的列用同名插槽 #<prop> 接管;actions 列渲染行内操作
1015
+ const columns = [
1016
+ { prop: 'name', label: '名称', minWidth: 160 },
1017
+ { prop: 'type', label: '类型', width: 120 },
1018
+ { prop: 'status', label: '状态', width: 100, slot: true },
1019
+ {
1020
+ prop: 'actions',
1021
+ label: '操作',
1022
+ width: 180,
1023
+ fixed: 'right',
1024
+ actions: [
1025
+ { label: '编辑', handler: (row: any) => openEdit(row) },
1026
+ { label: '删除', visible: (row: any) => row.id !== 1, handler: (row: any) => onDelete(row) },
1027
+ ],
1028
+ },
1029
+ ]
1030
+
1031
+ const queryItems = [
1032
+ {
1033
+ model: 'keyword',
1034
+ label: '名称',
1035
+ component: 'el-input',
1036
+ props: { placeholder: '请输入名称', clearable: true },
1037
+ },
1038
+ {
1039
+ model: 'status',
1040
+ label: '状态',
1041
+ component: 'el-select',
1042
+ props: { options: statusOptions, clearable: true },
1043
+ },
1044
+ ]
1045
+
1046
+ const tableRef = ref()
1047
+ const editVisible = ref(false)
1048
+ const editData = ref<any>({})
1049
+
1050
+ function openEdit(row?: any) {
1051
+ editData.value = row ? { ...row } : {}
1052
+ editVisible.value = true
1053
+ }
1054
+
1055
+ // 删除:确认框 + 反馈 + 原地重查(保持当前页码)
1056
+ function onDelete(row: any) {
1057
+ Modal.confirmPromise({ title: '确认删除', content: `确认删除「${row.name}」?` }, async () => {
1058
+ await removeApi(row.id)
1059
+ Message.success('删除成功')
1060
+ tableRef.value?.refresh()
1061
+ })
1062
+ }
1063
+
1064
+ // 导出:带 loading 的单次请求;outputFile 选项触发浏览器下载
1065
+ const { loading: exportLoading, run: runExport } = useRequest(exportApi, {
1066
+ manual: true,
1067
+ outputFile: () => `list_${Date.now()}.xlsx`,
1068
+ })
1069
+ function onExport() {
1070
+ runExport(tableRef.value?.search.params) // 用当前查询条件导出
1071
+ }
1072
+ </script>
1073
+
1074
+ <template>
1075
+ <ZlSearchTable
1076
+ ref="tableRef"
1077
+ :request="getPageApi"
1078
+ :columns="columns"
1079
+ :query-items="queryItems"
1080
+ :pagination="{ pageSize: 10 }"
1081
+ height="420"
1082
+ >
1083
+ <!-- 查询条右侧操作区:新增 / 导出 统一归位到这里 -->
1084
+ <template #search-actions>
1085
+ <ZlAction
1086
+ :actions="[
1087
+ { label: '新增', icon: 'zl:plus', handler: () => openEdit() },
1088
+ { label: '导出', icon: 'zl:download', disabled: exportLoading, handler: onExport },
1089
+ ]"
1090
+ />
1091
+ </template>
1092
+
1093
+ <!-- 状态列:字典标签(全局 setDictSource 已注册,无需逐行传 dict) -->
1094
+ <template #status="{ row }">
1095
+ <ZlDictTag dict-key="resourceStatus" :value="row.status" />
1096
+ </template>
1097
+
1098
+ <!-- 名称列:超长省略 + 悬浮提示 -->
1099
+ <template #name="{ row }">
1100
+ <ZlAutoTooltip>{{ row.name }}</ZlAutoTooltip>
1101
+ </template>
1102
+ </ZlSearchTable>
1103
+
1104
+ <!-- 新增 / 编辑抽屉(实现见 6.5.2) -->
1105
+ <EditDrawer v-model:visible="editVisible" :data="editData" @saved="tableRef?.refresh()" />
1106
+ </template>
1107
+ ```
1108
+
1109
+ > 行内改状态、删除后刷新用 `tableRef.refresh()`(原地重查、保持页码);换查询条件由 `ZlSearch` 自动回到第 1 页。`search-actions` 之外的批量按钮(如「导入」)也可放进这里。
1110
+
1111
+ #### 6.5.2 抽屉表单范式:ZlDrawer + ZlForm + useRequest
1112
+
1113
+ 新增 / 编辑 / 详情建议抽成独立的抽屉子组件,用 `defineModel('visible')` 承接父级 `v-model:visible`,内部用 `ZlForm` 的 `validate()` 校验,保存走 `useRequest`,反馈用 `useGlobalMessage`,保存成功后再通知父级 `refresh()`。
1114
+
1115
+ ```vue
1116
+ <script setup lang="ts">
1117
+ import { ref, watch } from 'vue'
1118
+ import { ZlDrawer, ZlForm } from '@zl-ui-kit/components'
1119
+ import { useRequest, useDict, useGlobalMessage } from '@zl-ui-kit/composables'
1120
+
1121
+ const props = defineProps<{ data?: any }>()
1122
+ const emit = defineEmits<{ saved: [] }>()
1123
+ const visible = defineModel<boolean>('visible', { required: true })
1124
+
1125
+ const { Message } = useGlobalMessage()
1126
+ const typeOptions = useDict('resourceType')
1127
+
1128
+ const model = ref<any>({})
1129
+ const formRef = ref()
1130
+
1131
+ // 打开即回填:新增给默认值,编辑用传入行数据
1132
+ watch(
1133
+ visible,
1134
+ (open) => {
1135
+ if (open) model.value = props.data ? { ...props.data } : { status: 'enabled' }
1136
+ },
1137
+ { immediate: true },
1138
+ )
1139
+
1140
+ const items = [
1141
+ { model: 'name', label: '名称', component: 'el-input', rules: [{ required: true, message: '请输入名称' }] },
1142
+ { model: 'type', label: '类型', component: 'el-select', props: { options: typeOptions } },
1143
+ {
1144
+ model: 'status',
1145
+ label: '状态',
1146
+ component: 'ZlSwitch',
1147
+ props: { checkedValue: 'enabled', uncheckedValue: 'disabled' },
1148
+ },
1149
+ ]
1150
+
1151
+ // 确定回调:校验 → 保存 → 关闭 → 通知父级刷新
1152
+ async function onSubmit() {
1153
+ await formRef.value?.validate()
1154
+ const isEdit = !!props.data?.id
1155
+ await saveApi({ ...model.value, id: props.data?.id })
1156
+ Message.success(isEdit ? '修改成功' : '新增成功')
1157
+ visible.value = false
1158
+ emit('saved')
1159
+ }
1160
+ </script>
1161
+
1162
+ <template>
1163
+ <ZlDrawer
1164
+ v-model:visible="visible"
1165
+ :title="data?.id ? '编辑' : '新增'"
1166
+ :on-ok="onSubmit"
1167
+ :auto-close-after-confirm="false"
1168
+ >
1169
+ <ZlForm ref="formRef" :model="model" :items="items" label-width="auto" />
1170
+ </ZlDrawer>
1171
+ </template>
1172
+ ```
1173
+
1174
+ > `ZlForm` 的 `validate()` 返回 `Promise<boolean>`(`0.9.0` 及更早版本成功时 `resolve(undefined)`,判断成功请用 `await` 捕获异常而非当布尔用)。表单数据用 `:model` 传入,`props` 里的 `update:modelValue` 会写回该对象,无需手写 `v-model`。`ZlDrawer` 的 `onOk` 异步期间确定按钮自动保持 loading,`auto-close-after-confirm` 默认 `true`,需要自行控制关闭时设为 `false`。
1175
+
1176
+ #### 6.5.3 卡片列表范式:ZlCardPage + ZlCard + ZlAction
1177
+
1178
+ 分页卡片列表用 `ZlCardPage`(内部同样 `usePageableRequest`),默认插槽逐项渲染 `ZlCard`;卡片的图标、标题、副标题、底部操作区用具名插槽;底部操作按钮同样用 `ZlAction`,状态角标用 `ZlDictTag`。
1179
+
1180
+ ```vue
1181
+ <script setup lang="ts">
1182
+ import { ZlCardPage, ZlCard, ZlAction, ZlIcon, ZlDictTag } from '@zl-ui-kit/components'
1183
+ import { useDict } from '@zl-ui-kit/composables'
1184
+
1185
+ const typeOptions = useDict('resourceType')
1186
+
1187
+ function cardActions(data: any) {
1188
+ return [
1189
+ { label: '查看', icon: 'zl:eye', handler: () => open(data) },
1190
+ { label: '编辑', icon: 'zl:edit', handler: () => openEdit(data) },
1191
+ ]
1192
+ }
1193
+ </script>
1194
+
1195
+ <template>
1196
+ <ZlCardPage :request="getPageApi" :query-items="queryItems" :pagination="{ pageSize: 30 }">
1197
+ <!-- 顶部操作区:新增统一放这里 -->
1198
+ <template #search-actions>
1199
+ <ZlAction :actions="[{ label: '新增', icon: 'zl:plus', handler: onAdd }]" />
1200
+ </template>
1201
+
1202
+ <!-- 逐项渲染卡片 -->
1203
+ <template #default="{ data }">
1204
+ <ZlCard>
1205
+ <template #icon>
1206
+ <ZlIcon :icon="`zl:${data.type === '数据库' ? 'database' : 'folder'}`" />
1207
+ </template>
1208
+ <template #title>{{ data.name }}</template>
1209
+ <template #subtitle>{{ data.createTime }}</template>
1210
+ <template #footer>
1211
+ <ZlDictTag dict-key="resourceStatus" :value="data.status" />
1212
+ <ZlAction :actions="cardActions(data)" />
1213
+ </template>
1214
+ </ZlCard>
1215
+ </template>
1216
+ </ZlCardPage>
1217
+ </template>
1218
+ ```
1219
+
1220
+ > 卡片列表的分页键名、条件重查(如页签切换)与列表页一致,参见 §6.3 ②。`ZlCard` 的 `icon` / `title` / `subtitle` / `footer` 均为具名插槽;需要正文区时用默认插槽。`ZlIcon` 的 `icon` 传 `zl:` 前缀图标名,未注册的图标会渲染空白。
1221
+
1222
+ ---
1223
+
995
1224
  ## 7. 表单与交互组件
996
1225
 
997
1226
  ### ZlForm —— schema 驱动
@@ -3262,10 +3491,12 @@ import { ZlAction } from '@zl-ui-kit/components'
3262
3491
  </script>
3263
3492
 
3264
3493
  <template>
3265
- <ZlAction />
3494
+ <ZlAction :actions="actions" />
3266
3495
  </template>
3267
3496
  ```
3268
3497
 
3498
+ > 示例中的 `actions` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
3499
+
3269
3500
  > 把 `$attrs` 透传给 `ZlActionList`,未列出的属性会继续下传
3270
3501
 
3271
3502
  > 纯容器组件:不接收 props,也无自定义事件/插槽/暴露方法。
@@ -3653,7 +3884,7 @@ import { ZlCardPage } from '@zl-ui-kit/components'
3653
3884
  </script>
3654
3885
 
3655
3886
  <template>
3656
- <ZlCardPage :request="mockPageRequest" card-min-width="180px" />
3887
+ <ZlCardPage :request="mockPageRequest" card-min-width="200px" />
3657
3888
  </template>
3658
3889
  ```
3659
3890
 
@@ -3894,11 +4125,11 @@ import { ZlDictTag } from '@zl-ui-kit/components'
3894
4125
  </script>
3895
4126
 
3896
4127
  <template>
3897
- <ZlDictTag dict-key="dictTagDemo" value="1" :dict="dict" />
4128
+ <ZlDictTag dict-key="resourceStatus" :value="data.status" />
3898
4129
  </template>
3899
4130
  ```
3900
4131
 
3901
- > 示例中的 `dict` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
4132
+ > 示例中的 `value` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
3902
4133
 
3903
4134
  **props**
3904
4135
 
@@ -3928,10 +4159,12 @@ import { ZlDrawer } from '@zl-ui-kit/components'
3928
4159
  </script>
3929
4160
 
3930
4161
  <template>
3931
- <ZlDrawer v-model:visible="value" title="抽屉标题" />
4162
+ <ZlDrawer v-model:visible="value" title="新增" :on-ok="onOk" />
3932
4163
  </template>
3933
4164
  ```
3934
4165
 
4166
+ > 示例中的 `onOk` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
4167
+
3935
4168
  **插槽用法**
3936
4169
 
3937
4170
  ```vue
@@ -4163,7 +4396,7 @@ import { ZlForm } from '@zl-ui-kit/components'
4163
4396
  </script>
4164
4397
 
4165
4398
  <template>
4166
- <ZlForm :model="model" :items="items" label-width="80px" style="max-width: 420px" />
4399
+ <ZlForm :model="model.value" :items="items" label-width="80px" />
4167
4400
  </template>
4168
4401
  ```
4169
4402
 
@@ -4396,10 +4629,12 @@ import { ZlIcon } from '@zl-ui-kit/components'
4396
4629
  </script>
4397
4630
 
4398
4631
  <template>
4399
- <ZlIcon icon="zl:bug" />
4632
+ <ZlIcon :icon="icon" />
4400
4633
  </template>
4401
4634
  ```
4402
4635
 
4636
+ > 示例中的 `icon` 是数组 / 对象 / 函数等非字面量入参,由调用方提供数据;其余属性写法可直接照搬。
4637
+
4403
4638
  **插槽用法**
4404
4639
 
4405
4640
  ```vue
@@ -4876,10 +5111,10 @@ import { ZlSearchTable } from '@zl-ui-kit/components'
4876
5111
  <template>
4877
5112
  <ZlSearchTable
4878
5113
  :request="mockPageRequest"
4879
- :columns="tableColumns"
5114
+ :columns="columns"
4880
5115
  :query-items="queryItems"
4881
5116
  :pagination="{ pageSize: 5 }"
4882
- height="320"
5117
+ height="340"
4883
5118
  />
4884
5119
  </template>
4885
5120
  ```
@@ -5953,7 +6188,7 @@ ZlGrid 子项 schema
5953
6188
  ## 15. 组件替换规范(Element Plus → Zl-*)
5954
6189
 
5955
6190
  > 本规范约定:宿主项目引入本组件库后,**优先使用 Zl 系列组件替代对应的 Element Plus 组件**,并**复用 `@zl-ui-kit/utils` 的工具方法替代重复实现**,以保证主题、国际化、字典、权限与交互体验统一。
5956
- > 规范持续补充中——新增替换项请追加到 §15.2(组件)/ §15.4(工具方法)对照表,并在对应规则处补充示例。各组件的具体 props / 插槽 / 事件以 §14 组件 API 参考与 playground 示例为准。
6191
+ > 规范持续补充中——新增替换项请追加到 §15.2(组件)/ §15.4(工具方法)对照表,hooks 类替换补进 §15.1 规则,并在对应规则处补充示例。各组件的具体 props / 插槽 / 事件以 §14 组件 API 参考与 playground 示例为准。
5957
6192
 
5958
6193
  ### 15.1 核心替换规则
5959
6194
 
@@ -5969,38 +6204,42 @@ ZlGrid 子项 schema
5969
6204
  10. **列表页操作按钮归位**:使用 `ZlSearchTable` 或 `ZlCardPage` 替换的列表页,其「新增 / 导入 / 导出」等操作按钮统一放进对应组件的 `search-actions` 插槽(亦兼容 camelCase `searchActions`)。
5970
6205
  11. **其余 Element Plus 组件**:剩余 `el-` 开头的 Element Plus 组件,均按 §3 组件总览的命名对应关系替换为对应的 Zl 组件(如 `el-tree`→`ZlTree`、`el-upload`→`ZlUpload`、`el-tag`→`ZlTag`、`el-tabs`→`ZlTabs` 等)。
5971
6206
  12. **工具方法复用**:宿主项目里使用的工具类方法,需先与 `@zl-ui-kit/utils` 中的工具方法比对(完整清单见 §12.2,精确签名见 §12.3);若存在**最终效果一致**的实现,统一使用 `@zl-ui-kit/utils` 的方法替换,避免重复实现与行为不一致。
5972
- 13. **先读透传契约**:动手替换前读完 [§15.5 迁移行为差异与透传契约](#155-迁移行为差异与透传契约必读)——未列在 props 表的属性与事件大多直接透传给内部 `el-*`,而少数默认值 / 入参语义与 EP 不等价,需逐条核对。
6207
+ 13. **字典加载与翻译**:宿主页面里「请求字典接口 → 存成选项数组 → 再用 `Record<value, label>` 把码值转中文」的自建逻辑,统一换成 `useDict` + `ZlDictTag` —— 应用入口用 `setDictSource(...)` 注册**一次**数据源(静态表,或 `(key) => api.getDict(key)` 异步加载),页面内用 `useDict(key)` 取字典项与 `value → label` 映射(`useDict(key).value` 是 `DictItem[]`,`useDict(key).label.value[code]` 是中文)供下拉 / 单选等选项使用,表格与详情里的字典列直接用 `<ZlDictTag :dict-key="key" :value="row.xxx" />` 渲染;**不要在页面里各自请求字典接口,也不要再维护 label 常量表**(同一字典被多处重复请求、各处文案不一致,正是这类自建逻辑的典型副作用)。两个易踩点:`dictKey` 是**全局缓存键**(同一 key 只加载一次、跨组件复用),列表里**不要逐行直传不同的 `:dict`**(会覆盖全局同名缓存、最后一行赢,行级字典请用专属 key);`DictItem.value` 是字符串且与业务值做**严格相等**比较,后端返回数字码时要先 `String()`。详见 §6.3 ⑤ 与 §12.1.3。
6208
+ 14. **提示消息**:页面里的 `ElMessage` / `ElMessageBox` / `ElNotification`(含 `ElMessage.success(...)`、`ElMessageBox.confirm(...)`、`ElNotification({...})` 等写法)统一改用 `useGlobalMessage()` 取实例 —— `const { Message, Modal, Notification } = useGlobalMessage()`;其中 `Modal` 在 `ElMessageBox` 之上扩展了 `confirmPromise(config, onOk, onCancel)`,需要「二次确认 + 执行异步操作(如删除)」时优先用它:返回 `'Ok' | 'Cancel' | false`,由它统一处理关闭时机与 `onOk` 抛错(`throwOnOk` / `throwOnCancel` 可控),不必每处各写一遍 `.then/.catch`;同时保证与组件库走**同一份 element-plus 实例**(peer 依赖),而不是再引入一套 EP。详见 §12.1.4。
6209
+ 15. **先读透传契约**:动手替换前读完 [§15.5 迁移行为差异与透传契约](#155-迁移行为差异与透传契约必读)——未列在 props 表的属性与事件大多直接透传给内部 `el-*`,而少数默认值 / 入参语义与 EP 不等价,需逐条核对。
5973
6210
 
5974
6211
  ### 15.2 常用 el-* → Zl-* 对照表(持续补充)
5975
6212
 
5976
- | Element Plus 组件 | 替换为 | 说明 |
5977
- | ------------------------------------------------- | ------------------- | -------------------------------------------------- |
5978
- | `el-table`(普通 / 分页列表) | `ZlSearchTable` | 自带查询条、分页、loading |
5979
- | `el-table`(卡片分页列表) | `ZlCardPage` | 卡片式分页列表 |
5980
- | `el-table`(纯表格,无查询) | `ZlTable` | 普通表格展示 |
5981
- | `el-dialog` / `el-drawer` | `ZlDrawer` | 所有弹窗统一为抽屉 |
5982
- | `el-form` | `ZlForm` | 弹窗内新增 / 编辑 / 详情表单(schema 驱动) |
5983
- | `el-card` | `ZlCard` | 卡片容器 |
5984
- | `el-button`(操作栏 / 卡片内) | `ZlAction` | 操作列与卡片按钮;页面级独立按钮仍可用 `el-button` |
5985
- | `el-tooltip`(超长省略) | `ZlAutoTooltip` | 文字溢出时自动提示 |
5986
- | `el-icon` | `ZlIcon` | 需先注册图标集(§4.1) |
5987
- | `el-tree` | `ZlTree` | 勾选多选 / 字段映射 / 暴露方法见 §7 › ZlTree |
5988
- | `el-upload` | `ZlUpload` | |
5989
- | `el-tag` | `ZlTag` | |
5990
- | `el-tabs` | `ZlTabs` | 页签内容默认懒挂载,差异见 §15.5 |
5991
- | `el-radio`(标签式) | `ZlRadioTag` | 仅此形态封装 |
5992
- | `el-checkbox`(标签式) | `ZlCheckboxTag` | 仅此形态封装 |
5993
- | `el-checkbox`(全选 / 半选) | `ZlCheckAll` | 自带半选态,可替代表头全选勾选框 |
5994
- | `el-radio` / `el-checkbox`(普通单选框 / 复选框) | —(**有意不封装**) | 继续用 `el-*`,库内无对应物(见 §15.5) |
5995
- | `el-radio-group` / `el-checkbox-group` | —(**有意不封装**) | 继续用 `el-*`,组内选项自行渲染 |
5996
- | `el-switch` | `ZlSwitch` | |
5997
- | `el-popconfirm` | `ZlPopconfirm` | |
5998
- | `el-empty` | `ZlEmpty` | |
5999
- | `el-avatar` | `ZlAvatar` | |
6000
- | `el-descriptions` | `ZlDescription` | |
6001
- | `el-text` | `ZlText` | |
6002
- | `el-pagination` | `ZlPagination` | |
6003
- | `el-select`(树形) | `ZlTreeSelect` | |
6213
+ | Element Plus 组件 | 替换为 | 说明 |
6214
+ | ------------------------------------------------- | -------------------- | ------------------------------------------------------------------ |
6215
+ | `el-table`(普通 / 分页列表) | `ZlSearchTable` | 自带查询条、分页、loading |
6216
+ | `el-table`(卡片分页列表) | `ZlCardPage` | 卡片式分页列表 |
6217
+ | `el-table`(纯表格,无查询) | `ZlTable` | 普通表格展示 |
6218
+ | `el-dialog` / `el-drawer` | `ZlDrawer` | 所有弹窗统一为抽屉 |
6219
+ | `el-form` | `ZlForm` | 弹窗内新增 / 编辑 / 详情表单(schema 驱动) |
6220
+ | `el-card` | `ZlCard` | 卡片容器 |
6221
+ | `el-button`(操作栏 / 卡片内) | `ZlAction` | 操作列与卡片按钮;页面级独立按钮仍可用 `el-button` |
6222
+ | `el-tooltip`(超长省略) | `ZlAutoTooltip` | 文字溢出时自动提示 |
6223
+ | `el-icon` | `ZlIcon` | 需先注册图标集(§4.1) |
6224
+ | `el-tree` | `ZlTree` | 勾选多选 / 字段映射 / 暴露方法见 §7 › ZlTree |
6225
+ | `el-upload` | `ZlUpload` | |
6226
+ | `el-tag` | `ZlTag` | |
6227
+ | `el-tabs` | `ZlTabs` | 页签内容默认懒挂载,差异见 §15.5 |
6228
+ | `el-radio`(标签式) | `ZlRadioTag` | 仅此形态封装 |
6229
+ | `el-checkbox`(标签式) | `ZlCheckboxTag` | 仅此形态封装 |
6230
+ | `el-checkbox`(全选 / 半选) | `ZlCheckAll` | 自带半选态,可替代表头全选勾选框 |
6231
+ | `el-radio` / `el-checkbox`(普通单选框 / 复选框) | —(**有意不封装**) | 继续用 `el-*`,库内无对应物(见 §15.5) |
6232
+ | `el-radio-group` / `el-checkbox-group` | —(**有意不封装**) | 继续用 `el-*`,组内选项自行渲染 |
6233
+ | `el-switch` | `ZlSwitch` | |
6234
+ | `el-popconfirm` | `ZlPopconfirm` | |
6235
+ | `el-empty` | `ZlEmpty` | |
6236
+ | `el-avatar` | `ZlAvatar` | |
6237
+ | `el-descriptions` | `ZlDescription` | |
6238
+ | `el-text` | `ZlText` | |
6239
+ | `el-pagination` | `ZlPagination` | |
6240
+ | `el-select`(树形) | `ZlTreeSelect` | |
6241
+ | `ElMessage` / `ElNotification`(提示消息) | `useGlobalMessage()` | 非组件,用 hook 取 `Message` / `Notification` 实例(§12.1.4) |
6242
+ | `ElMessageBox`(确认框) | `useGlobalMessage()` | 取 `Modal`(扩展 `confirmPromise`),二次确认 + 异步操作统一在这里 |
6004
6243
 
6005
6244
  > 未在上表中的 `el-*` 组件,请对照 §3 组件总览的命名与用途选择对应 Zl 组件;若暂无对应实现,暂保留 `el-*`,并在本规范登记为待补充项。
6006
6245
  > 替换前请先读 **[§15.5 迁移行为差异与透传契约](#155-迁移行为差异与透传契约必读)**:哪些属性默认直接透传、哪些行为与 EP 不等价。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zl-ui-kit/components",
3
- "version": "0.10.1",
3
+ "version": "0.10.3",
4
4
  "type": "module",
5
5
  "description": "ZL UI 业务组件库(Element Plus 体系,Zl 前缀)——首批:Icon/AutoTooltip/Tag/CornerTag/Text/Title/Copy/Empty/Pagination/DictTag",
6
6
  "license": "MIT",
@@ -39,9 +39,9 @@
39
39
  "file-type": "^20.4.1",
40
40
  "dt-sql-parser": "^4.3.1",
41
41
  "sql-formatter": "^15.4.2",
42
- "@zl-ui-kit/composables": "0.10.1",
43
- "@zl-ui-kit/utils": "0.10.1",
44
- "@zl-ui-kit/icons": "0.10.1"
42
+ "@zl-ui-kit/composables": "0.10.3",
43
+ "@zl-ui-kit/utils": "0.10.3",
44
+ "@zl-ui-kit/icons": "0.10.3"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "@vueuse/core": "^12.3.0",
@@ -98,10 +98,10 @@
98
98
  "@vue-office/pdf": "^2.0.10",
99
99
  "@vue-office/pptx": "1.0.1",
100
100
  "echarts": "^5.6.0",
101
+ "@jichuang/vite-config": "1.0.0",
101
102
  "@jichuang/tsconfig": "1.0.0",
102
103
  "@jichuang/eslint-config": "1.0.0",
103
- "@zl-ui-kit/theme": "0.10.1",
104
- "@jichuang/vite-config": "1.0.0"
104
+ "@zl-ui-kit/theme": "0.10.3"
105
105
  },
106
106
  "repository": {
107
107
  "type": "git",