es-plus-ui 1.2.0 → 1.3.0

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
@@ -17,7 +17,10 @@
17
17
  - **自适应高度** — `ResizeObserver` 自动重算表格高度,表单展开/收起自动响应
18
18
  - **跨页选择** — `rowkey` + `cachePageSelection` 解决分页选择丢失痛点
19
19
  - **任意后端适配** — `configTableOut` + `qrcb` 配置化适配不同后端响应格式
20
- - **TypeScript**完整类型定义
20
+ - **权限控制**`permissionValue` 声明式按钮权限,无需 v-if
21
+ - **国际化** — `labelKey` + 自定义翻译函数,兼容任意 i18n 方案
22
+ - **TypeScript** — 完整类型定义,11 个核心接口可导入
23
+ - **AI 原生支持** — 配套 [@es-plus/mcp-server](https://www.npmjs.com/package/@es-plus/mcp-server) 和 [@es-plus/cli](https://www.npmjs.com/package/@es-plus/cli)
21
24
  - **13 种表单类型** — Input、Select、datePicker、timePicker、Slider、ColorPicker、Transfer、Cascader、Radio、Checkbox、Switch、Rate、Upload
22
25
 
23
26
  ## 为什么选择 es-plus-ui?
@@ -64,6 +67,27 @@ app.use(EsPlus)
64
67
  app.mount('#app')
65
68
  ```
66
69
 
70
+ ### 自动按需导入(unplugin-vue-components)
71
+
72
+ 如果项目使用 `ElementPlusResolver` 按需导入 Element Plus,**必须同时配置 `EsPlusResolver`**,否则 es-plus 内部依赖的 EP 组件样式不会被注入:
73
+
74
+ ```typescript
75
+ // vite.config.ts
76
+ import Components from 'unplugin-vue-components/vite'
77
+ import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
78
+ import { EsPlusResolver } from 'es-plus-ui/resolver'
79
+
80
+ export default defineConfig({
81
+ plugins: [
82
+ Components({
83
+ resolvers: [ElementPlusResolver(), EsPlusResolver()]
84
+ })
85
+ ]
86
+ })
87
+ ```
88
+
89
+ `EsPlusResolver` 会在检测到 `<es-table>`、`<es-form>` 等组件时,自动注入 es-plus 自身样式及其依赖的全部 Element Plus 组件样式。与 `ElementPlusResolver` 不冲突、不重复。
90
+
67
91
  ### 全局配置
68
92
 
69
93
  通过 `app.use(EsPlus, options)` 第二个参数配置全局默认值,避免每个组件重复传入相同的请求方法、字段映射、分页布局等配置:
@@ -187,7 +211,7 @@ const items = [
187
211
  ]
188
212
  const btns = [
189
213
  { name: '查询', type: 'primary', key: 'query', triggerEvent: true },
190
- { name: '重置', key: 'reset', triggerEvent: true }
214
+ { name: '重置', key: 'rest', triggerEvent: true }
191
215
  ]
192
216
  </script>
193
217
  ```
@@ -347,7 +371,7 @@ function openAddDialog() {
347
371
  | click | `(model, formRef, httpRequestInstance?) => void` | 点击回调 |
348
372
  | triggerEvent | `boolean` | `true` 时自动触发表格查询/表单重置 |
349
373
 
350
- > `triggerEvent: true` + `key: 'query'` → 自动调用父级 EsTable 的 `httpRequestInstance`;`triggerEvent: true` + `key: 'reset'` → 自动重置表单。
374
+ > `triggerEvent: true` + `key: 'query'` → 自动调用父级 EsTable 的 `httpRequestInstance`;`triggerEvent: true` + `key: 'rest'` → 自动重置表单。
351
375
 
352
376
  ### Events
353
377
 
@@ -901,7 +925,7 @@ const queryItems = [
901
925
  ]
902
926
  const queryBtns = [
903
927
  { name: '查询', type: 'primary', key: 'query', triggerEvent: true },
904
- { name: '重置', key: 'reset', triggerEvent: true }
928
+ { name: '重置', key: 'rest', triggerEvent: true }
905
929
  ]
906
930
  const tableOptions = {
907
931
  httpRequest: mockRequest,
@@ -910,7 +934,7 @@ const tableOptions = {
910
934
  }
911
935
  ```
912
936
 
913
- > `triggerEvent: true` + `key: 'query'` → EsForm 自动调用父级 EsTable 的 `httpRequestInstance`;`key: 'reset'` → 自动重置表单。
937
+ > `triggerEvent: true` + `key: 'query'` → EsForm 自动调用父级 EsTable 的 `httpRequestInstance`;`key: 'rest'` → 自动重置表单。
914
938
 
915
939
  ### CRUD 弹窗
916
940
 
@@ -1042,8 +1066,134 @@ const handleSelectionChange = (rows) => {
1042
1066
 
1043
1067
  ---
1044
1068
 
1069
+ ## 权限控制
1070
+
1071
+ 安装时配置权限函数,按钮自动按权限显隐,无需 v-if:
1072
+
1073
+ ```typescript
1074
+ app.use(ESPlus, {
1075
+ permission: (value) => userPermissions.includes(value)
1076
+ })
1077
+ ```
1078
+
1079
+ 在任意 `BtnConfig` 中声明 `permissionValue`:
1080
+
1081
+ ```typescript
1082
+ const btns = [
1083
+ { name: '新增', type: 'primary', permissionValue: 'user:add', click: () => add() },
1084
+ { name: '删除', type: 'danger', permissionValue: 'user:delete', click: (row) => del(row) }
1085
+ ]
1086
+ // 用户无 'user:delete' 权限时,删除按钮自动隐藏
1087
+ ```
1088
+
1089
+ 适用于 EsForm `configBtn`、EsTable `configBtn`、表格列 `btns`、useDialog `configBtn`。
1090
+
1091
+ ---
1092
+
1093
+ ## 国际化(i18n)
1094
+
1095
+ 安装时配置翻译函数,兼容任意 i18n 库:
1096
+
1097
+ ```typescript
1098
+ app.use(ESPlus, {
1099
+ t: (key) => i18n.global.t(key)
1100
+ })
1101
+ ```
1102
+
1103
+ 表单项和表格列使用 `labelKey` 字段:
1104
+
1105
+ ```typescript
1106
+ const formItems = [
1107
+ { prop: 'name', label: '姓名', labelKey: 'form.name', formtype: 'Input' }
1108
+ ]
1109
+ const columns = [
1110
+ { prop: 'name', label: '姓名', labelKey: 'table.name' }
1111
+ ]
1112
+ // 有 labelKey 且配置了 t 函数时,使用 t(labelKey);否则回退到 label
1113
+ ```
1114
+
1115
+ ---
1116
+
1117
+ ## EsCrudPage — 一键 CRUD 页面
1118
+
1119
+ 传入 Schema 即可生成完整的查询表单 + 数据表格 + 弹窗编辑页面:
1120
+
1121
+ ```vue
1122
+ <template>
1123
+ <es-crud-page :schema="schema" :http-request="fetchList" />
1124
+ </template>
1125
+
1126
+ <script setup>
1127
+ const schema = {
1128
+ formItems: [
1129
+ { prop: 'name', label: '姓名', formtype: 'Input', span: 6 },
1130
+ { prop: 'status', label: '状态', formtype: 'Select', span: 6,
1131
+ dataOptions: [{ label: '启用', value: 1 }, { label: '禁用', value: 0 }] }
1132
+ ],
1133
+ columns: [
1134
+ { prop: 'name', label: '姓名' },
1135
+ { prop: 'status', label: '状态' }
1136
+ ],
1137
+ actions: ['add', 'edit', 'delete']
1138
+ }
1139
+ </script>
1140
+ ```
1141
+
1142
+ ```typescript
1143
+ import type { CrudPageSchema, CrudAction } from 'es-plus-ui'
1144
+ ```
1145
+
1146
+ ---
1147
+
1148
+ ## AI 工具链
1149
+
1150
+ ES-Plus 配套两个官方 AI 工具,支持自然语言生成完整 CRUD 页面:
1151
+
1152
+ ### @es-plus/mcp-server
1153
+
1154
+ 让 Claude Code、Cursor 等 AI 编码工具直接调用 CRUD 生成能力:
1155
+
1156
+ ```bash
1157
+ claude mcp add es-plus -- npx -y @es-plus/mcp-server
1158
+ ```
1159
+
1160
+ 在 AI 对话中直接说"生成一个用户管理页面",AI 自动调用 MCP Server 生成完整 .vue 文件。
1161
+
1162
+ 详见:[@es-plus/mcp-server](https://www.npmjs.com/package/@es-plus/mcp-server)
1163
+
1164
+ ### @es-plus/cli
1165
+
1166
+ 终端生成 CRUD 页面、校验配置、生成脚手架:
1167
+
1168
+ ```bash
1169
+ npx @es-plus/cli create user-management
1170
+ npx @es-plus/cli validate ./config.json --schema form-item
1171
+ npx @es-plus/cli scaffold dashboard --features query,table,dialog
1172
+ ```
1173
+
1174
+ 详见:[@es-plus/cli](https://www.npmjs.com/package/@es-plus/cli)
1175
+
1176
+ ---
1177
+
1045
1178
  ## 更新日志
1046
1179
 
1180
+ ### v1.3.0
1181
+
1182
+ - 新增 `EsPlusResolver` — 适配 `unplugin-vue-components` 按需导入场景,自动注入 ES-Plus 内部依赖的 Element Plus 组件样式
1183
+ - 新增 `es-plus-ui/resolver` 子路径导出(支持 ESM/CJS + TypeScript 类型)
1184
+ - 修复组件注册失败问题 — EsTable、EsDialog、SvgIcon 补充 `defineOptions({ name })` 声明,打包后 `component.name` 不再为 undefined
1185
+
1186
+ ### v1.2.0
1187
+
1188
+ - 导出全部 TypeScript 类型定义(FormItemOption、TableColumn 等 11 个核心接口)
1189
+ - 新增 EsCrudPage 一键 CRUD 页面组件
1190
+ - 新增权限控制(permissionValue 声明式按钮权限)
1191
+ - 新增国际化支持(labelKey + 自定义翻译函数)
1192
+ - 新增 @es-plus/mcp-server AI 编码工具集成
1193
+ - 新增 @es-plus/cli 命令行工具
1194
+ - 修复 EsForm 按钮模板嵌套问题
1195
+ - 修复 EsDialog v-if/v-for 优先级问题
1196
+
1047
1197
  ### v1.0.0
1048
1198
 
1049
1199
  - 初始发布