vsoft-ui 1.0.1 → 1.0.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.
package/README.md CHANGED
@@ -1,126 +1,214 @@
1
- # VS UI
2
-
3
- 一个基于 Element Plus 的 Vue 3 组件库。
4
-
5
- ## 特性
6
-
7
- - 🎨 基于 Element Plus,API 保持一致
8
- - ⚡️ Vue 3 Composition API
9
- - 📦 TypeScript 支持
10
- - 🎯 按需引入
11
- - 📱 响应式设计
12
- - 🔐 **全局权限管理系统** - 所有组件支持权限控制
13
-
14
- ## 安装
15
-
16
- ```bash
17
- # 使用 pnpm(推荐)
18
- pnpm add vsoft-ui
19
-
20
- # 使用 npm
21
- npm install vsoft-ui
22
-
23
- # 使用 yarn
24
- yarn add vsoft-ui
25
- ```
26
-
27
- ## 快速开始
28
-
29
- ### 安装
30
-
31
- ```bash
32
- # 使用 pnpm(推荐)
33
- pnpm add vsoft-ui
34
-
35
- # 使用 npm
36
- npm install vsoft-ui
37
-
38
- # 使用 yarn
39
- yarn add vsoft-ui
40
- ```
41
-
42
- ### 完整引入
43
-
44
- ```javascript
45
- import { createApp } from 'vue'
46
- import App from './App.vue'
47
- import VsUI from 'vsoft-ui'
48
- import 'vsoft-ui/style.css'
49
-
50
- const app = createApp(App)
51
-
52
- // 初始化权限(可选)
53
- app.use(VsUI, {
54
- permissions: ['user:view', 'user:edit', 'user:delete']
55
- })
56
-
57
- app.mount('#app')
58
- ```
59
-
60
- ### 按需引入
61
-
62
- ```vue
63
- <template>
64
- <vs-button type="primary">按钮</vs-button>
65
- </template>
66
-
67
- <script setup>
68
- import { VsButton } from 'vsoft-ui'
69
- </script>
70
- ```
71
-
72
- > 📖 更多使用示例请查看 [USAGE.md](./USAGE.md)
73
-
74
- ## 开发
75
-
76
- ```bash
77
- # 安装依赖
78
- pnpm install
79
-
80
- # 启动开发服务器
81
- pnpm dev
82
-
83
- # 构建组件库
84
- pnpm build
85
-
86
- # 启动文档开发服务器
87
- pnpm dev:docs
88
-
89
- # 构建文档
90
- pnpm build:docs
91
- ```
92
-
93
- ## 项目结构
94
-
95
- ```
96
- vs-ui/
97
- ├── src/ # 组件库源码
98
- │ ├── components/ # 组件目录
99
- │ ├── install.ts # 安装函数
100
- │ └── index.ts # 入口文件
101
- ├── docs/ # VitePress 文档
102
- │ ├── .vitepress/ # VitePress 配置
103
- │ ├── guide/ # 指南文档
104
- │ └── components/ # 组件文档
105
- ├── dist/ # 构建输出目录
106
- ├── vite.config.ts # Vite 配置
107
- ├── tsconfig.json # TypeScript 配置
108
- └── package.json # 项目配置
109
- ```
110
-
111
- ## 组件列表
112
-
113
- - Button 按钮
114
- - Card 卡片
115
- - Table 表格(支持后端控制列显示/隐藏、排序和权限控制)
116
-
117
- 更多组件正在开发中...
118
-
119
- ## 浏览器支持
120
-
121
- 现代浏览器和 IE11+(需要 polyfills)
122
-
123
- ## 许可证
124
-
125
- MIT
126
-
1
+ # VSoft UI
2
+
3
+ 基于 Element Plus 的 Vue3 组件库,支持全局权限控制
4
+
5
+ [![npm version](https://img.shields.io/npm/v/vsoft-ui.svg)](https://www.npmjs.com/package/vsoft-ui)
6
+ [![license](https://img.shields.io/npm/l/vsoft-ui.svg)](https://github.com/your-username/vsoft-ui/blob/main/LICENSE)
7
+ [![vue](https://img.shields.io/badge/Vue-3.3+-brightgreen.svg)](https://vuejs.org/)
8
+ [![element-plus](https://img.shields.io/badge/Element%20Plus-2.13+-blue.svg)](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
+ ### 安装
25
+
26
+ ```bash
27
+ # 使用 pnpm(推荐)
28
+ pnpm add vsoft-ui
29
+
30
+ # 或使用 npm
31
+ npm install vsoft-ui
32
+
33
+ # 或使用 yarn
34
+ yarn add vsoft-ui
35
+ ```
36
+
37
+ ### 引入
38
+
39
+ ```typescript
40
+ import { createApp } from 'vue'
41
+ import ElementPlus from 'element-plus'
42
+ import 'element-plus/dist/index.css'
43
+ import VSoftUI from 'vsoft-ui'
44
+ import App from './App.vue'
45
+
46
+ const app = createApp(App)
47
+ app.use(ElementPlus)
48
+ app.use(VSoftUI)
49
+ app.mount('#app')
50
+ ```
51
+
52
+ ### 设置权限
53
+
54
+ 在应用启动时设置用户权限:
55
+
56
+ ```typescript
57
+ // main.ts
58
+ import { permission } from 'vsoft-ui'
59
+
60
+ // 设置用户权限
61
+ permission.setPermissions(['button:add', 'button:edit', 'input:query'])
62
+ ```
63
+
64
+ ## 组件使用
65
+
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
+ ### 输入框组件
81
+
82
+ ```vue
83
+ <template>
84
+ <!-- 基本用法 -->
85
+ <v-input v-model="value" placeholder="请输入内容" />
86
+
87
+ <!-- 权限控制 -->
88
+ <v-input v-model="value" permission="input:query" placeholder="查询输入框" />
89
+ </template>
90
+
91
+ <script setup lang="ts">
92
+ import { ref } from 'vue'
93
+
94
+ const value = ref('')
95
+ </script>
96
+ ```
97
+
98
+ ## 权限控制
99
+
100
+ VSoft UI 提供三种权限控制方式:
101
+
102
+ ### 1. 组件级权限控制
103
+
104
+ 所有 VSoft UI 组件都支持 `permission` 和 `permission-mode` 属性:
105
+
106
+ ```vue
107
+ <template>
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
+ ```
118
+
119
+ ### 2. 指令级权限控制
120
+
121
+ 使用 `v-permission` 指令对任何元素进行权限控制:
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>
134
+ ```
135
+
136
+ ### 3. Hook 级权限控制
137
+
138
+ 使用 `usePermission` Hook 进行更灵活的权限判断:
139
+
140
+ ```vue
141
+ <template>
142
+ <el-button v-if="canAdd" type="primary" @click="handleAdd">添加按钮</el-button>
143
+ <el-button v-if="canEdit" type="success" @click="handleEdit">编辑按钮</el-button>
144
+ </template>
145
+
146
+ <script setup lang="ts">
147
+ import { usePermission } from 'vsoft-ui'
148
+
149
+ const { hasPermission } = usePermission()
150
+
151
+ const canAdd = hasPermission('button:add')
152
+ const canEdit = hasPermission('button:edit')
153
+
154
+ const handleAdd = () => { /* ... */ }
155
+ const handleEdit = () => { /* ... */ }
156
+ </script>
157
+ ```
158
+
159
+ ## 开发
160
+
161
+ ### 运行示例
162
+
163
+ ```bash
164
+ pnpm dev
165
+ ```
166
+
167
+ ### 构建
168
+
169
+ ```bash
170
+ pnpm build
171
+ ```
172
+
173
+ ### 文档
174
+
175
+ ```bash
176
+ # 启动文档开发服务器
177
+ pnpm dev:docs
178
+
179
+ # 构建文档
180
+ pnpm build:docs
181
+ ```
182
+
183
+ ## 文档
184
+
185
+ - [完整文档](https://your-username.github.io/vsoft-ui/)
186
+ - [权限控制指南](/permission/usage)
187
+ - [组件文档](/components)
188
+
189
+ ## 贡献
190
+
191
+ 欢迎提交 Issue 和 Pull Request!
192
+
193
+ ## 许可证
194
+
195
+ [MIT](LICENSE)
196
+
197
+ ## 更新日志
198
+
199
+ ### v1.0.2
200
+
201
+ - 修复组件构建问题
202
+ - 优化权限控制逻辑
203
+ - 完善文档内容
204
+
205
+ ### v1.0.1
206
+
207
+ - 修复组件级权限控制问题
208
+ - 优化组件传参机制
209
+
210
+ ### v1.0.0
211
+
212
+ - 初始版本发布
213
+ - 实现 Button 和 Input 组件
214
+ - 添加三种权限控制方式
@@ -0,0 +1,3 @@
1
+ import { default as Button } from './src/Button.vue';
2
+ export { Button };
3
+ export default Button;
@@ -0,0 +1,24 @@
1
+ interface Props {
2
+ permission?: string | string[];
3
+ permissionMode?: 'any' | 'all';
4
+ }
5
+ declare function __VLS_template(): {
6
+ attrs: Partial<{}>;
7
+ slots: {
8
+ default?(_: {}): any;
9
+ };
10
+ refs: {};
11
+ rootEl: any;
12
+ };
13
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
14
+ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
15
+ permission: string | string[];
16
+ permissionMode: "any" | "all";
17
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
18
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
19
+ export default _default;
20
+ type __VLS_WithTemplateSlots<T, S> = T & {
21
+ new (): {
22
+ $slots: S;
23
+ };
24
+ };
@@ -0,0 +1,3 @@
1
+ import { default as Input } from './src/Input.vue';
2
+ export { Input };
3
+ export default Input;
@@ -0,0 +1,27 @@
1
+ interface Props {
2
+ permission?: string | string[];
3
+ permissionMode?: 'any' | 'all';
4
+ }
5
+ declare function __VLS_template(): {
6
+ attrs: Partial<{}>;
7
+ slots: {
8
+ prepend?(_: {}): any;
9
+ append?(_: {}): any;
10
+ prefix?(_: {}): any;
11
+ suffix?(_: {}): any;
12
+ };
13
+ refs: {};
14
+ rootEl: any;
15
+ };
16
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
17
+ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
18
+ permission: string | string[];
19
+ permissionMode: "any" | "all";
20
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
21
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
22
+ export default _default;
23
+ type __VLS_WithTemplateSlots<T, S> = T & {
24
+ new (): {
25
+ $slots: S;
26
+ };
27
+ };
@@ -0,0 +1,11 @@
1
+ import { App } from 'vue';
2
+ declare global {
3
+ interface HTMLElement {
4
+ _permissionOriginalParent?: Node | null;
5
+ _permissionNextSibling?: Node | null;
6
+ }
7
+ }
8
+ /**
9
+ * 安装权限指令
10
+ */
11
+ export declare function setupPermissionDirective(app: App): void;
@@ -0,0 +1,12 @@
1
+ import { Ref } from 'vue';
2
+ export interface UsePermissionOptions {
3
+ mode?: 'any' | 'all';
4
+ }
5
+ export declare function usePermission(): {
6
+ permissions: Ref<string[], string[]>;
7
+ hasPermission: (requiredPermissions: string | string[]) => boolean;
8
+ hasAnyPermission: (requiredPermissions: string | string[]) => boolean;
9
+ hasAllPermissions: (requiredPermissions: string | string[]) => boolean;
10
+ createPermissionComputed: (requiredPermissions: Ref<string | string[]> | string | string[], options?: UsePermissionOptions) => import('vue').ComputedRef<boolean>;
11
+ setPermissions: (permissions: string[]) => void;
12
+ };
package/dist/index.d.ts CHANGED
@@ -1,16 +1,10 @@
1
- import { install } from './install';
2
-
3
- export * from './components';
4
- export { install };
5
- export type { InstallOptions } from './install';
6
- export { usePermission, PermissionService, createPermissionService } from './permission';
7
- declare const _default: {
8
- install: typeof install;
9
- version: string;
1
+ import { App } from 'vue';
2
+ import { default as Button } from './components/button';
3
+ import { default as Input } from './components/input';
4
+ import { permission } from './utils/permission';
5
+ import { usePermission } from './hooks/usePermission';
6
+ declare const VSoftUI: {
7
+ install(app: App): void;
10
8
  };
11
- export default _default;
12
- declare module 'vue' {
13
- interface GlobalComponents {
14
- [key: string]: any;
15
- }
16
- }
9
+ export { Button, Input, permission, usePermission, VSoftUI };
10
+ export default VSoftUI;
@@ -0,0 +1,33 @@
1
+ declare class Permission {
2
+ private permissions;
3
+ /**
4
+ * 设置用户权限
5
+ * @param permissions 权限数组
6
+ */
7
+ setPermissions(permissions: string[]): void;
8
+ /**
9
+ * 获取当前用户权限
10
+ * @returns 权限数组
11
+ */
12
+ getPermissions(): string[];
13
+ /**
14
+ * 检查是否拥有任一权限
15
+ * @param requiredPermissions 需要的权限
16
+ * @returns 是否拥有权限
17
+ */
18
+ hasAny(requiredPermissions: string | string[]): boolean;
19
+ /**
20
+ * 检查是否拥有所有权限
21
+ * @param requiredPermissions 需要的权限
22
+ * @returns 是否拥有权限
23
+ */
24
+ hasAll(requiredPermissions: string | string[]): boolean;
25
+ /**
26
+ * 检查是否拥有指定权限
27
+ * @param requiredPermissions 需要的权限
28
+ * @returns 是否拥有权限
29
+ */
30
+ hasPermission(requiredPermissions: string | string[]): boolean;
31
+ }
32
+ export declare const permission: Permission;
33
+ export {};