vsoft-ui 1.0.3 → 1.0.5
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 +141 -156
- package/dist/vsoft-ui.es.js +1122 -157
- package/dist/vsoft-ui.umd.js +1 -1
- package/package.json +28 -43
- package/dist/components/button/index.d.ts +0 -3
- package/dist/components/button/src/Button.vue.d.ts +0 -24
- package/dist/components/input/index.d.ts +0 -3
- package/dist/components/input/src/Input.vue.d.ts +0 -27
- package/dist/directives/permission.d.ts +0 -11
- package/dist/hooks/usePermission.d.ts +0 -12
- package/dist/index.d.ts +0 -10
- package/dist/utils/permission.d.ts +0 -33
package/README.md
CHANGED
|
@@ -1,214 +1,199 @@
|
|
|
1
1
|
# VSoft UI
|
|
2
2
|
|
|
3
|
-
基于 Element Plus
|
|
3
|
+
基于 Element Plus 的二次封装组件库,包含全局权限控制功能。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
[](https://github.com/your-username/vsoft-ui/blob/main/LICENSE)
|
|
7
|
-
[](https://vuejs.org/)
|
|
8
|
-
[](https://element-plus.org/)
|
|
9
|
-
|
|
10
|
-
## 简介
|
|
11
|
-
|
|
12
|
-
VSoft UI 是一个基于 Vue 3 和 Element Plus 的二次封装组件库,专注于提供简单高效的权限控制解决方案。通过组件级、指令级和 Hook 级三种权限控制方式,帮助开发者快速构建具有权限管理功能的应用。
|
|
13
|
-
|
|
14
|
-
## 主要特性
|
|
15
|
-
|
|
16
|
-
- 📦 基于 Element Plus,提供一致的设计语言
|
|
17
|
-
- 🔒 内置权限控制功能,支持三种权限控制方式
|
|
18
|
-
- 🚀 零学习成本,基于 Vue 3 Composition API
|
|
19
|
-
- 📝 完整的 TypeScript 支持
|
|
20
|
-
- 🛠️ 丰富的示例和详细文档
|
|
21
|
-
|
|
22
|
-
## 快速开始
|
|
23
|
-
|
|
24
|
-
### 安装
|
|
5
|
+
## 安装
|
|
25
6
|
|
|
26
7
|
```bash
|
|
27
|
-
|
|
28
|
-
|
|
8
|
+
npm install vsoft-ui element-plus @element-plus/icons-vue
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 使用
|
|
29
12
|
|
|
30
|
-
|
|
31
|
-
npm install vsoft-ui
|
|
13
|
+
### 1. 引入样式
|
|
32
14
|
|
|
33
|
-
|
|
34
|
-
|
|
15
|
+
```js
|
|
16
|
+
// 引入 Element Plus 样式
|
|
17
|
+
import 'element-plus/dist/index.css'
|
|
35
18
|
```
|
|
36
19
|
|
|
37
|
-
###
|
|
20
|
+
### 2. 注册组件库
|
|
38
21
|
|
|
39
|
-
```
|
|
22
|
+
```js
|
|
23
|
+
// main.ts
|
|
40
24
|
import { createApp } from 'vue'
|
|
41
|
-
import ElementPlus from 'element-plus'
|
|
42
|
-
import 'element-plus/dist/index.css'
|
|
43
|
-
import VSoftUI from 'vsoft-ui'
|
|
44
25
|
import App from './App.vue'
|
|
26
|
+
import VSoftUI from 'vsoft-ui'
|
|
45
27
|
|
|
46
28
|
const app = createApp(App)
|
|
47
|
-
|
|
29
|
+
|
|
30
|
+
// 安装组件库
|
|
48
31
|
app.use(VSoftUI)
|
|
32
|
+
|
|
49
33
|
app.mount('#app')
|
|
50
34
|
```
|
|
51
35
|
|
|
52
|
-
###
|
|
53
|
-
|
|
54
|
-
在应用启动时设置用户权限:
|
|
36
|
+
### 3. 权限控制配置
|
|
55
37
|
|
|
56
|
-
```
|
|
57
|
-
//
|
|
58
|
-
import {
|
|
38
|
+
```js
|
|
39
|
+
// 在适当的位置设置权限
|
|
40
|
+
import { usePermission } from 'vsoft-ui'
|
|
59
41
|
|
|
60
|
-
|
|
61
|
-
|
|
42
|
+
const { setPermissions } = usePermission()
|
|
43
|
+
setPermissions(['user:view', 'user:edit', 'button:click'])
|
|
62
44
|
```
|
|
63
45
|
|
|
64
46
|
## 组件使用
|
|
65
47
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
```vue
|
|
69
|
-
<template>
|
|
70
|
-
<!-- 基本用法 -->
|
|
71
|
-
<v-button type="primary">主要按钮</v-button>
|
|
72
|
-
|
|
73
|
-
<!-- 权限控制 -->
|
|
74
|
-
<v-button type="success" permission="button:add">添加按钮</v-button>
|
|
75
|
-
<v-button type="warning" permission="['button:edit', 'button:update']">编辑按钮</v-button>
|
|
76
|
-
<v-button type="danger" permission="['button:delete', 'button:manage']" permission-mode="all">删除按钮</v-button>
|
|
77
|
-
</template>
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### 输入框组件
|
|
48
|
+
所有组件均以 `V` 开头,保持与 Element Plus API 一致:
|
|
81
49
|
|
|
82
50
|
```vue
|
|
83
51
|
<template>
|
|
84
|
-
<!--
|
|
85
|
-
<v-
|
|
52
|
+
<!-- 权限控制指令 -->
|
|
53
|
+
<v-button v-permission="'user:view'" type="primary">查看</v-button>
|
|
54
|
+
<v-button v-permission="'user:edit'" type="success">编辑</v-button>
|
|
86
55
|
|
|
87
|
-
<!--
|
|
88
|
-
<v-
|
|
56
|
+
<!-- 普通组件 -->
|
|
57
|
+
<v-form>
|
|
58
|
+
<v-form-item label="用户名" prop="username">
|
|
59
|
+
<v-input v-model="form.username" placeholder="请输入用户名"></v-input>
|
|
60
|
+
</v-form-item>
|
|
61
|
+
</v-form>
|
|
89
62
|
</template>
|
|
90
63
|
|
|
91
|
-
<script setup
|
|
92
|
-
import { ref } from 'vue'
|
|
64
|
+
<script setup>
|
|
65
|
+
import { ref, reactive } from 'vue'
|
|
93
66
|
|
|
94
|
-
const
|
|
67
|
+
const form = reactive({
|
|
68
|
+
username: ''
|
|
69
|
+
})
|
|
95
70
|
</script>
|
|
96
71
|
```
|
|
97
72
|
|
|
98
73
|
## 权限控制
|
|
99
74
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
### 1. 组件级权限控制
|
|
103
|
-
|
|
104
|
-
所有 VSoft UI 组件都支持 `permission` 和 `permission-mode` 属性:
|
|
75
|
+
### 指令方式
|
|
105
76
|
|
|
106
77
|
```vue
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
<v-button permission="button:add">添加按钮</v-button>
|
|
110
|
-
|
|
111
|
-
<!-- 多权限控制(任一权限) -->
|
|
112
|
-
<v-button permission="['button:edit', 'button:update']">编辑按钮</v-button>
|
|
113
|
-
|
|
114
|
-
<!-- 多权限控制(所有权限) -->
|
|
115
|
-
<v-button permission="['button:delete', 'button:manage']" permission-mode="all">删除按钮</v-button>
|
|
116
|
-
</template>
|
|
117
|
-
```
|
|
78
|
+
<!-- 单个权限 -->
|
|
79
|
+
<v-button v-permission="'user:view'">查看</v-button>
|
|
118
80
|
|
|
119
|
-
|
|
81
|
+
<!-- any 模式 - 满足任一权限 -->
|
|
82
|
+
<v-button v-permission:any="['user:view', 'user:edit']">编辑</v-button>
|
|
120
83
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
```vue
|
|
124
|
-
<template>
|
|
125
|
-
<!-- 基本权限控制 -->
|
|
126
|
-
<el-button v-permission="'button:delete'" type="danger">删除按钮</el-button>
|
|
127
|
-
|
|
128
|
-
<!-- 使用 any 修饰符 -->
|
|
129
|
-
<el-button v-permission:any="['button:edit', 'button:update']" type="warning">编辑按钮</el-button>
|
|
130
|
-
|
|
131
|
-
<!-- 使用 all 修饰符 -->
|
|
132
|
-
<el-button v-permission:all="['button:manage', 'button:admin']" type="primary">管理按钮</el-button>
|
|
133
|
-
</template>
|
|
84
|
+
<!-- all 模式 - 满足所有权限 -->
|
|
85
|
+
<v-button v-permission:all="['user:view', 'user:admin']">管理</v-button>
|
|
134
86
|
```
|
|
135
87
|
|
|
136
|
-
###
|
|
137
|
-
|
|
138
|
-
使用 `usePermission` Hook 进行更灵活的权限判断:
|
|
88
|
+
### 组合式函数
|
|
139
89
|
|
|
140
90
|
```vue
|
|
141
91
|
<template>
|
|
142
|
-
<
|
|
143
|
-
<el-button v-if="canEdit" type="success" @click="handleEdit">编辑按钮</el-button>
|
|
92
|
+
<v-button @click="checkPermission">检查权限</v-button>
|
|
144
93
|
</template>
|
|
145
94
|
|
|
146
|
-
<script setup
|
|
95
|
+
<script setup>
|
|
147
96
|
import { usePermission } from 'vsoft-ui'
|
|
148
97
|
|
|
149
|
-
const { hasPermission } = usePermission()
|
|
150
|
-
|
|
151
|
-
const canAdd = hasPermission('button:add')
|
|
152
|
-
const canEdit = hasPermission('button:edit')
|
|
98
|
+
const { hasPermission, hasAllPermissions } = usePermission()
|
|
153
99
|
|
|
154
|
-
const
|
|
155
|
-
const
|
|
100
|
+
const checkPermission = () => {
|
|
101
|
+
const canView = hasPermission('user:view')
|
|
102
|
+
const canAdmin = hasAllPermissions(['user:view', 'user:admin'])
|
|
103
|
+
console.log(canView, canAdmin)
|
|
104
|
+
}
|
|
156
105
|
</script>
|
|
157
106
|
```
|
|
158
107
|
|
|
159
|
-
##
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
108
|
+
## 组件列表
|
|
109
|
+
|
|
110
|
+
- VAffix
|
|
111
|
+
- VAlert
|
|
112
|
+
- VAside
|
|
113
|
+
- VAvatar
|
|
114
|
+
- VBacktop
|
|
115
|
+
- VBadge
|
|
116
|
+
- VBreadcrumb
|
|
117
|
+
- VBreadcrumbItem
|
|
118
|
+
- VButton
|
|
119
|
+
- VCalendar
|
|
120
|
+
- VCard
|
|
121
|
+
- VCarousel
|
|
122
|
+
- VCarouselItem
|
|
123
|
+
- VCascader
|
|
124
|
+
- VCheckbox
|
|
125
|
+
- VCheckboxButton
|
|
126
|
+
- VCollapse
|
|
127
|
+
- VCollapseItem
|
|
128
|
+
- VColorPicker
|
|
129
|
+
- VConfigProvider
|
|
130
|
+
- VContainer
|
|
131
|
+
- VDatePicker
|
|
132
|
+
- VDialog
|
|
133
|
+
- VDivider
|
|
134
|
+
- VDrawer
|
|
135
|
+
- VDropdown
|
|
136
|
+
- VDropdownItem
|
|
137
|
+
- VDropdownMenu
|
|
138
|
+
- VEmpty
|
|
139
|
+
- VFooter
|
|
140
|
+
- VForm
|
|
141
|
+
- VFormItem
|
|
142
|
+
- VHeader
|
|
143
|
+
- VIcon
|
|
144
|
+
- VImage
|
|
145
|
+
- VInput
|
|
146
|
+
- VInputNumber
|
|
147
|
+
- VLink
|
|
148
|
+
- VMain
|
|
149
|
+
- VMenu
|
|
150
|
+
- VMenuGroup
|
|
151
|
+
- VMenuItem
|
|
152
|
+
- VOption
|
|
153
|
+
- VOptionGroup
|
|
154
|
+
- VPagination
|
|
155
|
+
- VPopconfirm
|
|
156
|
+
- VPopper
|
|
157
|
+
- VProgress
|
|
158
|
+
- VRadio
|
|
159
|
+
- VRadioButton
|
|
160
|
+
- VRate
|
|
161
|
+
- VScrollbar
|
|
162
|
+
- VSelect
|
|
163
|
+
- VSelectV2
|
|
164
|
+
- VSlider
|
|
165
|
+
- VSpace
|
|
166
|
+
- VStep
|
|
167
|
+
- VSteps
|
|
168
|
+
- VSubMenu
|
|
169
|
+
- VSwitch
|
|
170
|
+
- VTable
|
|
171
|
+
- VTableColumn
|
|
172
|
+
- VTabPane
|
|
173
|
+
- VTabs
|
|
174
|
+
- VTag
|
|
175
|
+
- VTimeline
|
|
176
|
+
- VTimelineItem
|
|
177
|
+
- VTimePicker
|
|
178
|
+
- VTooltip
|
|
179
|
+
- VTransfer
|
|
180
|
+
- VTree
|
|
181
|
+
- VTreeNode
|
|
182
|
+
- VUpload
|
|
183
|
+
- VUploadDragger
|
|
184
|
+
|
|
185
|
+
## 注意事项
|
|
186
|
+
|
|
187
|
+
1. 本组件库基于 Element Plus,使用前请确保已安装 Element Plus 和 @element-plus/icons-vue
|
|
188
|
+
2. 请手动引入 Element Plus 样式:`import 'element-plus/dist/index.css'`
|
|
189
|
+
3. 组件库已自动安装 Element Plus,无需再次单独安装
|
|
190
|
+
4. 所有组件均保持与 Element Plus API 一致,使用方式相同
|
|
196
191
|
|
|
197
192
|
## 更新日志
|
|
198
193
|
|
|
199
|
-
|
|
194
|
+
- 1.0.0: 初始版本,包含权限控制和基础组件
|
|
195
|
+
- 1.0.4: 优化打包配置,修复样式问题
|
|
200
196
|
|
|
201
|
-
|
|
202
|
-
- 优化权限控制逻辑
|
|
203
|
-
- 完善文档内容
|
|
204
|
-
|
|
205
|
-
### v1.0.1
|
|
206
|
-
|
|
207
|
-
- 修复组件级权限控制问题
|
|
208
|
-
- 优化组件传参机制
|
|
209
|
-
|
|
210
|
-
### v1.0.0
|
|
197
|
+
## 许可证
|
|
211
198
|
|
|
212
|
-
|
|
213
|
-
- 实现 Button 和 Input 组件
|
|
214
|
-
- 添加三种权限控制方式
|
|
199
|
+
MIT
|