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 +155 -5
- package/dist/es-plus.js +304 -304
- package/dist/es-plus.js.map +1 -1
- package/dist/es-plus.umd.cjs +1 -1
- package/dist/es-plus.umd.cjs.map +1 -1
- package/dist/resolver.cjs +97 -0
- package/dist/resolver.d.ts +25 -0
- package/dist/resolver.mjs +74 -0
- package/dist/src/components/es-dialog/src/component.vue.d.ts +2 -4
- package/dist/src/resolver.d.ts +44 -0
- package/dist/style.css +1 -1
- package/package.json +88 -83
package/README.md
CHANGED
|
@@ -17,7 +17,10 @@
|
|
|
17
17
|
- **自适应高度** — `ResizeObserver` 自动重算表格高度,表单展开/收起自动响应
|
|
18
18
|
- **跨页选择** — `rowkey` + `cachePageSelection` 解决分页选择丢失痛点
|
|
19
19
|
- **任意后端适配** — `configTableOut` + `qrcb` 配置化适配不同后端响应格式
|
|
20
|
-
-
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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
|
- 初始发布
|