@yxhl/specter-pui-vtk 1.0.41 → 1.0.43
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 +836 -58
- package/dist/specter-pui-vtk.css +1 -1
- package/dist/specter-pui.es.js +2579 -2070
- package/dist/specter-pui.es.js.map +1 -1
- package/dist/specter-pui.umd.js +1 -1
- package/dist/specter-pui.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/components/assembly/VtkDateSelector.vue +1136 -0
- package/src/index.js +4 -0
- package/src/components/README.md +0 -35
package/README.md
CHANGED
|
@@ -1,72 +1,548 @@
|
|
|
1
|
-
# @yxhl/specter-pui
|
|
1
|
+
# @yxhl/specter-pui-vtk
|
|
2
2
|
|
|
3
|
-
雅心互联 Vue 3 + Vuetify 3 智能组件库
|
|
3
|
+
> 雅心互联 Vue 3 + Vuetify 3 智能组件库
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
基于 Vuetify 3 的企业级 Vue 3 组件库,提供丰富的业务组件和工具函数。
|
|
6
|
+
|
|
7
|
+
## 📋 目录
|
|
8
|
+
|
|
9
|
+
- [快速开始](#快速开始)
|
|
10
|
+
- [安装配置](#安装配置)
|
|
11
|
+
- [组件文档](#组件文档)
|
|
12
|
+
- [公用方法](#公用方法)
|
|
13
|
+
- [配置选项](#配置选项)
|
|
14
|
+
- [更新迭代](#更新迭代)
|
|
15
|
+
- [常见问题](#常见问题)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 快速开始
|
|
20
|
+
|
|
21
|
+
### 1. 安装组件库
|
|
6
22
|
|
|
7
23
|
```bash
|
|
8
24
|
npm install @yxhl/specter-pui-vtk
|
|
9
25
|
```
|
|
10
26
|
|
|
11
|
-
|
|
27
|
+
### 2. 引入组件库
|
|
12
28
|
|
|
13
|
-
|
|
29
|
+
在 `src/main.js` 或 `src/main.ts` 中:
|
|
14
30
|
|
|
15
31
|
```javascript
|
|
16
32
|
import { createApp } from 'vue'
|
|
17
33
|
import App from './App.vue'
|
|
18
|
-
import SpecterPuiVtk from '@yxhl/specter-pui'
|
|
19
|
-
import '@yxhl/specter-pui/dist/specter-pui.css'
|
|
34
|
+
import SpecterPuiVtk from '@yxhl/specter-pui-vtk'
|
|
35
|
+
import '@yxhl/specter-pui-vtk/dist/specter-pui-vtk.css'
|
|
20
36
|
|
|
21
37
|
const app = createApp(App)
|
|
38
|
+
|
|
39
|
+
// 配置组件库(可选)
|
|
40
|
+
window.VTK_CONFIG = {
|
|
41
|
+
storageKeys: {
|
|
42
|
+
user: import.meta.env.VITE_MIS_USERS || '_mis_acis_users',
|
|
43
|
+
token: import.meta.env.VITE_MIS_TOKEN || '_mis_acis_token'
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// 配置 API 地址(可选)
|
|
48
|
+
window.VITE_APP_API_URL = import.meta.env.VITE_APP_API_URL
|
|
49
|
+
|
|
22
50
|
app.use(SpecterPuiVtk)
|
|
23
51
|
app.mount('#app')
|
|
24
52
|
```
|
|
25
53
|
|
|
26
|
-
###
|
|
54
|
+
### 3. 使用组件
|
|
55
|
+
|
|
56
|
+
```vue
|
|
57
|
+
<template>
|
|
58
|
+
<VtkStepper :el="currentStep" list="步骤1,步骤2,步骤3" />
|
|
59
|
+
<VtkPage v-model="page" :total="total" />
|
|
60
|
+
</template>
|
|
61
|
+
|
|
62
|
+
<script setup>
|
|
63
|
+
import { ref } from 'vue'
|
|
64
|
+
|
|
65
|
+
const currentStep = ref(1)
|
|
66
|
+
const page = ref({ pageno: 1, limit: 10 })
|
|
67
|
+
const total = ref(100)
|
|
68
|
+
</script>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 安装配置
|
|
74
|
+
|
|
75
|
+
### 环境要求
|
|
76
|
+
|
|
77
|
+
- Vue 3.x
|
|
78
|
+
- Vuetify 3.x
|
|
79
|
+
- Node.js >= 16
|
|
80
|
+
|
|
81
|
+
### 完整配置示例
|
|
27
82
|
|
|
28
83
|
```javascript
|
|
29
|
-
|
|
84
|
+
// main.js
|
|
85
|
+
import { createApp } from 'vue'
|
|
86
|
+
import App from './App.vue'
|
|
87
|
+
import SpecterPuiVtk from '@yxhl/specter-pui-vtk'
|
|
88
|
+
import '@yxhl/specter-pui-vtk/dist/specter-pui-vtk.css'
|
|
30
89
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
storage.set('key', 'value')
|
|
90
|
+
const app = createApp(App)
|
|
91
|
+
|
|
92
|
+
// 1. 配置存储键名(可选)
|
|
93
|
+
window.VTK_CONFIG = {
|
|
94
|
+
storageKeys: {
|
|
95
|
+
user: import.meta.env.VITE_MIS_USERS || '_mis_acis_users',
|
|
96
|
+
token: import.meta.env.VITE_MIS_TOKEN || '_mis_acis_token'
|
|
39
97
|
}
|
|
40
98
|
}
|
|
99
|
+
|
|
100
|
+
// 2. 配置 API 基础地址(可选)
|
|
101
|
+
window.VITE_APP_API_URL = import.meta.env.VITE_APP_API_URL
|
|
102
|
+
|
|
103
|
+
// 3. 注册组件库
|
|
104
|
+
app.use(SpecterPuiVtk)
|
|
105
|
+
|
|
106
|
+
// 4. 添加消息组件到模板(必需)
|
|
107
|
+
// 在 App.vue 中添加:
|
|
108
|
+
// <template>
|
|
109
|
+
// <v-app>
|
|
110
|
+
// <router-view />
|
|
111
|
+
// <vtk-message />
|
|
112
|
+
// </v-app>
|
|
113
|
+
// </template>
|
|
114
|
+
|
|
115
|
+
app.mount('#app')
|
|
41
116
|
```
|
|
42
117
|
|
|
43
|
-
|
|
118
|
+
### 环境变量配置
|
|
119
|
+
|
|
120
|
+
在项目根目录创建 `.env` 文件:
|
|
121
|
+
|
|
122
|
+
```env
|
|
123
|
+
# API 基础地址
|
|
124
|
+
VITE_APP_API_URL=https://api.example.com
|
|
125
|
+
|
|
126
|
+
# 存储键名(可选)
|
|
127
|
+
VITE_MIS_USERS=my_user_key
|
|
128
|
+
VITE_MIS_TOKEN=my_token_key
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 组件文档
|
|
44
134
|
|
|
45
135
|
### 基础组件
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
136
|
+
|
|
137
|
+
#### VtkArea - 地区选择组件
|
|
138
|
+
|
|
139
|
+
地区选择下拉组件,支持省市区三级联动。
|
|
140
|
+
|
|
141
|
+
**Props:**
|
|
142
|
+
- `modelValue` (String): 绑定值,地区代码
|
|
143
|
+
- `placeholder` (String): 占位文本,默认 "请选择地区"
|
|
144
|
+
|
|
145
|
+
**Events:**
|
|
146
|
+
- `update:modelValue`: 值变化时触发
|
|
147
|
+
- `change`: 选择变化时触发
|
|
148
|
+
|
|
149
|
+
**使用示例:**
|
|
150
|
+
```vue
|
|
151
|
+
<VtkArea v-model="areaCode" placeholder="选择地区" @change="handleChange" />
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
#### VtkAreaTabs - 地区选择组件(Tab 版)
|
|
157
|
+
|
|
158
|
+
带 Tab 切换的地区选择组件,支持多级地区选择。
|
|
159
|
+
|
|
160
|
+
**Props:**
|
|
161
|
+
- `modelValue` (String): 绑定值,地区代码
|
|
162
|
+
- `minArea` (Number): 最小地区级别(2=省,4=市,6=区县,9=街镇,12=村社)
|
|
163
|
+
- `areaNode` (Number): 显示的地区节点数量
|
|
164
|
+
|
|
165
|
+
**Events:**
|
|
166
|
+
- `update:modelValue`: 值变化时触发
|
|
167
|
+
- `change`: 选择变化时触发
|
|
168
|
+
|
|
169
|
+
**使用示例:**
|
|
170
|
+
```vue
|
|
171
|
+
<!-- 基础使用 -->
|
|
172
|
+
<VtkAreaTabs v-model="areaCode" @change="handleChange" />
|
|
173
|
+
|
|
174
|
+
<!-- 限制到区县级别 -->
|
|
175
|
+
<VtkAreaTabs v-model="areaCode" :min-area="6" />
|
|
176
|
+
|
|
177
|
+
<!-- 只显示最后2级地区名称 -->
|
|
178
|
+
<VtkAreaTabs v-model="areaCode" :area-node="2" />
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
#### VtkDept - 人员选择组件
|
|
184
|
+
|
|
185
|
+
地区-部门-人员三级联动选择组件,支持单选和多选。
|
|
186
|
+
|
|
187
|
+
**Props:**
|
|
188
|
+
- `multiple` (Boolean): 是否多选,默认 false
|
|
189
|
+
|
|
190
|
+
**Events:**
|
|
191
|
+
- `selected`: 选择完成时触发,参数为选中的人员数组
|
|
192
|
+
|
|
193
|
+
**Methods:**
|
|
194
|
+
- `add()`: 打开选择对话框
|
|
195
|
+
- `close()`: 关闭选择对话框
|
|
196
|
+
|
|
197
|
+
**使用示例:**
|
|
198
|
+
```vue
|
|
199
|
+
<template>
|
|
200
|
+
<VBtn @click="openDept">选择人员</VBtn>
|
|
201
|
+
<VtkDept
|
|
202
|
+
ref="deptRef"
|
|
203
|
+
:multiple="true"
|
|
204
|
+
@selected="handleSelected"
|
|
205
|
+
/>
|
|
206
|
+
</template>
|
|
207
|
+
|
|
208
|
+
<script setup>
|
|
209
|
+
import { ref } from 'vue'
|
|
210
|
+
|
|
211
|
+
const deptRef = ref(null)
|
|
212
|
+
|
|
213
|
+
const openDept = () => {
|
|
214
|
+
deptRef.value?.add()
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const handleSelected = (persons) => {
|
|
218
|
+
console.log('选中的人员:', persons)
|
|
219
|
+
}
|
|
220
|
+
</script>
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
#### VtkBreadcrumb - 面包屑导航
|
|
226
|
+
|
|
227
|
+
面包屑导航组件,支持自定义返回路径。
|
|
228
|
+
|
|
229
|
+
**Props:**
|
|
230
|
+
- `items` (Array): 面包屑项数组,格式:`[{ title: '首页', to: '/home' }]`
|
|
231
|
+
- `showBack` (Boolean): 是否显示返回按钮,默认 true
|
|
232
|
+
- `backTo` (String): 返回路径
|
|
233
|
+
- `backText` (String): 返回按钮文本,默认 "返回"
|
|
234
|
+
|
|
235
|
+
**Events:**
|
|
236
|
+
- `back`: 点击返回按钮时触发
|
|
237
|
+
|
|
238
|
+
**使用示例:**
|
|
239
|
+
```vue
|
|
240
|
+
<VtkBreadcrumb
|
|
241
|
+
:items="[
|
|
242
|
+
{ title: '首页', to: '/home' },
|
|
243
|
+
{ title: '用户管理', to: '/users' },
|
|
244
|
+
{ title: '用户详情' }
|
|
245
|
+
]"
|
|
246
|
+
back-to="/home"
|
|
247
|
+
@back="handleBack"
|
|
248
|
+
/>
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
#### VtkStepper - 步骤条组件
|
|
254
|
+
|
|
255
|
+
步骤条组件,用于展示多步骤流程。
|
|
256
|
+
|
|
257
|
+
**Props:**
|
|
258
|
+
- `el` (Number): 当前步骤,从 1 开始
|
|
259
|
+
- `list` (String): 步骤列表,逗号分隔,如 "步骤1,步骤2,步骤3"
|
|
260
|
+
|
|
261
|
+
**Slots:**
|
|
262
|
+
- `1`, `2`, `3`...: 各步骤的内容插槽
|
|
263
|
+
|
|
264
|
+
**使用示例:**
|
|
265
|
+
```vue
|
|
266
|
+
<VtkStepper :el="currentStep" list="基础信息,详细信息,完成">
|
|
267
|
+
<template #1>
|
|
268
|
+
<div>步骤1的内容</div>
|
|
269
|
+
</template>
|
|
270
|
+
<template #2>
|
|
271
|
+
<div>步骤2的内容</div>
|
|
272
|
+
</template>
|
|
273
|
+
<template #3>
|
|
274
|
+
<div>步骤3的内容</div>
|
|
275
|
+
</template>
|
|
276
|
+
</VtkStepper>
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
#### VtkPage - 分页组件
|
|
282
|
+
|
|
283
|
+
分页组件,支持页码和每页数量选择。
|
|
284
|
+
|
|
285
|
+
**Props:**
|
|
286
|
+
- `modelValue` (Object): 绑定值,格式:`{ pageno: 1, pageCount: 10, rowCount: 100, limit: 10 }`
|
|
287
|
+
|
|
288
|
+
**Events:**
|
|
289
|
+
- `update:modelValue`: 分页变化时触发
|
|
290
|
+
- `change`: 分页变化时触发
|
|
291
|
+
|
|
292
|
+
**使用示例:**
|
|
293
|
+
```vue
|
|
294
|
+
<VtkPage v-model="pageData" @change="loadData" />
|
|
295
|
+
|
|
296
|
+
<script setup>
|
|
297
|
+
const pageData = ref({
|
|
298
|
+
pageno: 1, // 当前页
|
|
299
|
+
pageCount: 10, // 总页数
|
|
300
|
+
rowCount: 100, // 总记录数
|
|
301
|
+
limit: 10 // 每页数量
|
|
302
|
+
})
|
|
303
|
+
</script>
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
#### VtkFormItem - 表单项组件
|
|
309
|
+
|
|
310
|
+
表单项组件,提供标签和帮助文本。
|
|
311
|
+
|
|
312
|
+
**Props:**
|
|
313
|
+
- `label` (String): 标签文本
|
|
314
|
+
- `must` (Boolean): 是否必填,显示红色星号
|
|
315
|
+
- `left` (Boolean): 标签左对齐
|
|
316
|
+
- `help` (String): 帮助文本,支持 HTML
|
|
317
|
+
|
|
318
|
+
**Slots:**
|
|
319
|
+
- `default`: 表单控件插槽
|
|
320
|
+
|
|
321
|
+
**使用示例:**
|
|
322
|
+
```vue
|
|
323
|
+
<VtkFormItem
|
|
324
|
+
label="用户名:"
|
|
325
|
+
must
|
|
326
|
+
left
|
|
327
|
+
help="请输入4-20位字符"
|
|
328
|
+
>
|
|
329
|
+
<VTextField v-model="username" />
|
|
330
|
+
</VtkFormItem>
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
#### VtkSelect - 下拉选择组件
|
|
336
|
+
|
|
337
|
+
下拉选择组件,支持字符串格式的选项列表。
|
|
338
|
+
|
|
339
|
+
**Props:**
|
|
340
|
+
- `modelValue`: 绑定值
|
|
341
|
+
- `list` (String): 选项列表,格式:`"value1:label1/value2:label2"`
|
|
342
|
+
- `placeholder` (String): 占位文本
|
|
343
|
+
- 其他 Vuetify VSelect 的 props
|
|
344
|
+
|
|
345
|
+
**使用示例:**
|
|
346
|
+
```vue
|
|
347
|
+
<VtkSelect
|
|
348
|
+
v-model="selected"
|
|
349
|
+
list="1:选项1/2:选项2/3:选项3"
|
|
350
|
+
placeholder="请选择"
|
|
351
|
+
/>
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
#### VtkCheckbox - 复选框组件
|
|
357
|
+
|
|
358
|
+
复选框组件,支持字符串格式的选项列表。
|
|
359
|
+
|
|
360
|
+
**Props:**
|
|
361
|
+
- `modelValue`: 绑定值
|
|
362
|
+
- `list` (String): 选项列表,格式:`"value1:label1/value2:label2"`
|
|
363
|
+
|
|
364
|
+
**使用示例:**
|
|
365
|
+
```vue
|
|
366
|
+
<VtkCheckbox
|
|
367
|
+
v-model="selected"
|
|
368
|
+
list="1:选项1/2:选项2/3:选项3"
|
|
369
|
+
/>
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
#### VtkRadio - 单选框组件
|
|
375
|
+
|
|
376
|
+
单选框组件,支持字符串格式的选项列表。
|
|
377
|
+
|
|
378
|
+
**Props:**
|
|
379
|
+
- `modelValue`: 绑定值
|
|
380
|
+
- `list` (String): 选项列表,格式:`"value1:label1/value2:label2"`
|
|
381
|
+
|
|
382
|
+
**使用示例:**
|
|
383
|
+
```vue
|
|
384
|
+
<VtkRadio
|
|
385
|
+
v-model="selected"
|
|
386
|
+
list="1:选项1/2:选项2/3:选项3"
|
|
387
|
+
/>
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
#### VtkDatePicker - 日期选择器
|
|
393
|
+
|
|
394
|
+
日期选择器组件。
|
|
395
|
+
|
|
396
|
+
**Props:**
|
|
397
|
+
- `modelValue`: 绑定值
|
|
398
|
+
- `placeholder` (String): 占位文本
|
|
399
|
+
|
|
400
|
+
**使用示例:**
|
|
401
|
+
```vue
|
|
402
|
+
<VtkDatePicker v-model="date" placeholder="选择日期" />
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
#### VtkImg - 图片组件
|
|
408
|
+
|
|
409
|
+
图片展示组件,支持预览和列表展示。
|
|
410
|
+
|
|
411
|
+
**Props:**
|
|
412
|
+
- `list` (Array): 图片列表,格式:`[{ url: '', title: '', description: '' }]`
|
|
413
|
+
|
|
414
|
+
**使用示例:**
|
|
415
|
+
```vue
|
|
416
|
+
<VtkImg :list="imageList" />
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
---
|
|
420
|
+
|
|
421
|
+
#### VtkPdf - PDF 查看器
|
|
422
|
+
|
|
423
|
+
PDF 文件查看组件。
|
|
424
|
+
|
|
425
|
+
**Props:**
|
|
426
|
+
- `list` (Array): PDF 列表,格式:`[{ url: '', title: '', description: '' }]`
|
|
427
|
+
|
|
428
|
+
**使用示例:**
|
|
429
|
+
```vue
|
|
430
|
+
<VtkPdf :list="pdfList" />
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
#### VtkEmpty - 空状态组件
|
|
436
|
+
|
|
437
|
+
空状态展示组件。
|
|
438
|
+
|
|
439
|
+
**Props:**
|
|
440
|
+
- `text` (String): 提示文本,默认 "暂无数据"
|
|
441
|
+
|
|
442
|
+
**使用示例:**
|
|
443
|
+
```vue
|
|
444
|
+
<VtkEmpty text="暂无内容" />
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
#### VtkFab - 浮动按钮
|
|
450
|
+
|
|
451
|
+
浮动操作按钮组件。
|
|
452
|
+
|
|
453
|
+
**使用示例:**
|
|
454
|
+
```vue
|
|
455
|
+
<VtkFab />
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
---
|
|
61
459
|
|
|
62
460
|
### 消息组件
|
|
63
|
-
- **vtkMessage** - 全局消息提示
|
|
64
461
|
|
|
65
|
-
|
|
462
|
+
#### vtkMessage - 全局消息
|
|
463
|
+
|
|
464
|
+
全局消息提示组件,需要在 App.vue 中添加 `<vtk-message />` 组件。
|
|
465
|
+
|
|
466
|
+
**方法:**
|
|
467
|
+
|
|
468
|
+
```javascript
|
|
469
|
+
// 在组件中使用
|
|
470
|
+
const { proxy } = getCurrentInstance()
|
|
471
|
+
|
|
472
|
+
// 成功提示
|
|
473
|
+
proxy.$vtk.message.success('操作成功')
|
|
474
|
+
|
|
475
|
+
// 错误提示
|
|
476
|
+
proxy.$vtk.message.error('操作失败')
|
|
477
|
+
|
|
478
|
+
// 警告提示
|
|
479
|
+
proxy.$vtk.message.warning('警告信息')
|
|
480
|
+
|
|
481
|
+
// 信息提示
|
|
482
|
+
proxy.$vtk.message.info('提示信息')
|
|
483
|
+
|
|
484
|
+
// Toast 提示
|
|
485
|
+
proxy.$vtk.message.toast('提示文本', { color: 'primary' })
|
|
486
|
+
|
|
487
|
+
// 确认对话框
|
|
488
|
+
proxy.$vtk.message.confirm({
|
|
489
|
+
title: '提示',
|
|
490
|
+
text: '确认删除吗?',
|
|
491
|
+
onConfirm: () => {
|
|
492
|
+
console.log('确认')
|
|
493
|
+
},
|
|
494
|
+
onCancel: () => {
|
|
495
|
+
console.log('取消')
|
|
496
|
+
}
|
|
497
|
+
})
|
|
498
|
+
|
|
499
|
+
// Alert 对话框
|
|
500
|
+
proxy.$vtk.message.alert({
|
|
501
|
+
title: '提示',
|
|
502
|
+
text: '操作成功',
|
|
503
|
+
onConfirm: () => {
|
|
504
|
+
console.log('确认')
|
|
505
|
+
}
|
|
506
|
+
})
|
|
507
|
+
|
|
508
|
+
// Loading 加载
|
|
509
|
+
proxy.$vtk.message.loading.show()
|
|
510
|
+
proxy.$vtk.message.loading.hide()
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
---
|
|
514
|
+
|
|
515
|
+
## 公用方法
|
|
516
|
+
|
|
517
|
+
### 1. Storage - 本地存储
|
|
518
|
+
|
|
519
|
+
封装的本地存储工具,支持 localStorage 和 sessionStorage。
|
|
520
|
+
|
|
521
|
+
**使用方式:**
|
|
522
|
+
|
|
523
|
+
```javascript
|
|
524
|
+
import { getCurrentInstance } from 'vue'
|
|
525
|
+
|
|
526
|
+
const { proxy } = getCurrentInstance()
|
|
527
|
+
|
|
528
|
+
// 设置值
|
|
529
|
+
proxy.$vtk.storage.set('key', 'value')
|
|
530
|
+
proxy.$vtk.storage.set('key', { name: 'test' }) // 自动序列化对象
|
|
531
|
+
|
|
532
|
+
// 获取值
|
|
533
|
+
const value = proxy.$vtk.storage.get('key')
|
|
534
|
+
|
|
535
|
+
// 删除值
|
|
536
|
+
proxy.$vtk.storage.remove('key')
|
|
537
|
+
|
|
538
|
+
// 清空所有
|
|
539
|
+
proxy.$vtk.storage.clear()
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
**或者直接导入:**
|
|
66
543
|
|
|
67
|
-
### storage - 本地存储
|
|
68
544
|
```javascript
|
|
69
|
-
import { storage } from '@yxhl/specter-pui'
|
|
545
|
+
import { storage } from '@yxhl/specter-pui-vtk'
|
|
70
546
|
|
|
71
547
|
storage.set('key', 'value')
|
|
72
548
|
storage.get('key')
|
|
@@ -74,49 +550,351 @@ storage.remove('key')
|
|
|
74
550
|
storage.clear()
|
|
75
551
|
```
|
|
76
552
|
|
|
77
|
-
|
|
553
|
+
---
|
|
554
|
+
|
|
555
|
+
### 2. Request - HTTP 请求
|
|
556
|
+
|
|
557
|
+
封装的 Axios 请求工具,自动处理 token 和错误。
|
|
558
|
+
|
|
559
|
+
**使用方式:**
|
|
560
|
+
|
|
78
561
|
```javascript
|
|
79
|
-
|
|
562
|
+
const { proxy } = getCurrentInstance()
|
|
563
|
+
|
|
564
|
+
// GET 请求(表单格式)
|
|
565
|
+
proxy.$vtk.request.getForm('/api/user', { id: 1 })
|
|
566
|
+
|
|
567
|
+
// POST 请求(表单格式)
|
|
568
|
+
proxy.$vtk.request.postForm('/api/user', { name: 'test' })
|
|
569
|
+
|
|
570
|
+
// GET 请求(JSON 格式)
|
|
571
|
+
proxy.$vtk.request.getJson('/api/user', { id: 1 })
|
|
80
572
|
|
|
81
|
-
|
|
82
|
-
request.
|
|
573
|
+
// POST 请求(JSON 格式)
|
|
574
|
+
proxy.$vtk.request.postJson('/api/user', { name: 'test' })
|
|
575
|
+
|
|
576
|
+
// 文件上传
|
|
577
|
+
proxy.$vtk.request.imp('/api/upload', formData)
|
|
578
|
+
|
|
579
|
+
// 文件下载
|
|
580
|
+
proxy.$vtk.request.exp('/api/download', { id: 1 })
|
|
581
|
+
|
|
582
|
+
// 自定义请求
|
|
583
|
+
proxy.$vtk.request.http(
|
|
584
|
+
'/api/data',
|
|
585
|
+
{ key: 'value' },
|
|
586
|
+
'POST',
|
|
587
|
+
{ 'content-type': 'application/json' },
|
|
588
|
+
null
|
|
589
|
+
)
|
|
83
590
|
```
|
|
84
591
|
|
|
85
|
-
|
|
592
|
+
**或者直接导入:**
|
|
593
|
+
|
|
86
594
|
```javascript
|
|
87
|
-
import {
|
|
595
|
+
import { request } from '@yxhl/specter-pui-vtk'
|
|
596
|
+
|
|
597
|
+
request.getForm('/api/user')
|
|
598
|
+
request.postJson('/api/user', { name: 'test' })
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
---
|
|
602
|
+
|
|
603
|
+
### 3. Filters - 过滤器方法
|
|
604
|
+
|
|
605
|
+
提供常用的数据格式化方法。
|
|
606
|
+
|
|
607
|
+
**字典过滤:**
|
|
608
|
+
|
|
609
|
+
```javascript
|
|
610
|
+
const { proxy } = getCurrentInstance()
|
|
611
|
+
|
|
612
|
+
// 字典转换
|
|
613
|
+
proxy.$vtk.filters.dict('1', 'status') // 根据字典类型转换值
|
|
614
|
+
|
|
615
|
+
// 分析类型
|
|
616
|
+
proxy.$vtk.filters.analyType('type_code')
|
|
88
617
|
|
|
89
|
-
|
|
618
|
+
// 分析级别
|
|
619
|
+
proxy.$vtk.filters.analyLevel('level_code')
|
|
90
620
|
```
|
|
91
621
|
|
|
92
|
-
|
|
622
|
+
**脱敏方法:**
|
|
623
|
+
|
|
624
|
+
```javascript
|
|
625
|
+
// 手机号脱敏
|
|
626
|
+
proxy.$vtk.filters.mobile('13812345678') // 138****5678
|
|
627
|
+
|
|
628
|
+
// 身份证脱敏
|
|
629
|
+
proxy.$vtk.filters.idcard('110101199001011234') // 110101********1234
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
**格式化方法:**
|
|
633
|
+
|
|
634
|
+
```javascript
|
|
635
|
+
// 日期格式化
|
|
636
|
+
proxy.$vtk.filters.date('2024-01-01', 'YYYY-MM-DD')
|
|
637
|
+
|
|
638
|
+
// 数字格式化
|
|
639
|
+
proxy.$vtk.filters.num(1234.56, 2) // 1,234.56
|
|
640
|
+
|
|
641
|
+
// 年龄计算
|
|
642
|
+
proxy.$vtk.filters.age('1990-01-01') // 34
|
|
643
|
+
|
|
644
|
+
// 文本截取
|
|
645
|
+
proxy.$vtk.filters.txt('很长的文本...', 10) // 很长的文本...
|
|
646
|
+
|
|
647
|
+
// 绝对值
|
|
648
|
+
proxy.$vtk.filters.abs(-123) // 123
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
---
|
|
652
|
+
|
|
653
|
+
### 4. Validation - 表单验证
|
|
654
|
+
|
|
655
|
+
提供常用的表单验证规则。
|
|
656
|
+
|
|
657
|
+
**使用方式:**
|
|
658
|
+
|
|
659
|
+
```javascript
|
|
660
|
+
const { proxy } = getCurrentInstance()
|
|
661
|
+
|
|
662
|
+
// 必填验证
|
|
663
|
+
const rules = [
|
|
664
|
+
proxy.$vtk.Validation.required('用户名不能为空')
|
|
665
|
+
]
|
|
666
|
+
|
|
667
|
+
// 邮箱验证
|
|
668
|
+
const emailRules = [
|
|
669
|
+
proxy.$vtk.Validation.email('请输入正确的邮箱')
|
|
670
|
+
]
|
|
671
|
+
|
|
672
|
+
// 手机号验证
|
|
673
|
+
const mobileRules = [
|
|
674
|
+
proxy.$vtk.Validation.mobile('请输入正确的手机号')
|
|
675
|
+
]
|
|
676
|
+
|
|
677
|
+
// 自定义验证
|
|
678
|
+
const customRules = [
|
|
679
|
+
(v) => !!v || '不能为空',
|
|
680
|
+
(v) => v.length >= 6 || '至少6个字符'
|
|
681
|
+
]
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
---
|
|
685
|
+
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
## 配置选项
|
|
689
|
+
|
|
690
|
+
### 存储键名配置
|
|
691
|
+
|
|
692
|
+
组件库使用 localStorage 存储用户信息和 token,可以通过配置自定义键名。
|
|
693
|
+
|
|
694
|
+
**配置方式:**
|
|
695
|
+
|
|
696
|
+
```javascript
|
|
697
|
+
// main.js
|
|
698
|
+
window.VTK_CONFIG = {
|
|
699
|
+
storageKeys: {
|
|
700
|
+
user: import.meta.env.VITE_MIS_USERS || '_mis_acis_users',
|
|
701
|
+
token: import.meta.env.VITE_MIS_TOKEN || '_mis_acis_token'
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
**默认值:**
|
|
707
|
+
- `user`: `_mis_acis_users`
|
|
708
|
+
- `token`: `_mis_acis_token`
|
|
709
|
+
|
|
710
|
+
---
|
|
711
|
+
|
|
712
|
+
### API 基础地址配置
|
|
713
|
+
|
|
714
|
+
配置 HTTP 请求的基础地址。
|
|
715
|
+
|
|
716
|
+
**配置方式:**
|
|
717
|
+
|
|
93
718
|
```javascript
|
|
94
|
-
|
|
719
|
+
// main.js
|
|
720
|
+
window.VITE_APP_API_URL = import.meta.env.VITE_APP_API_URL
|
|
721
|
+
```
|
|
722
|
+
|
|
723
|
+
**或在 .env 文件中:**
|
|
724
|
+
|
|
725
|
+
```env
|
|
726
|
+
VITE_APP_API_URL=https://api.example.com
|
|
727
|
+
```
|
|
728
|
+
|
|
729
|
+
---
|
|
730
|
+
|
|
731
|
+
## 更新迭代
|
|
732
|
+
|
|
733
|
+
### 组件库维护者
|
|
95
734
|
|
|
96
|
-
|
|
97
|
-
const { page, pageSize, total } = usePage()
|
|
735
|
+
#### 1. 修改组件
|
|
98
736
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
737
|
+
在 `pui-vtks/src/` 目录下修改组件代码。
|
|
738
|
+
|
|
739
|
+
#### 2. 构建组件库
|
|
740
|
+
|
|
741
|
+
```bash
|
|
742
|
+
cd pui-vtks
|
|
743
|
+
npm run build
|
|
102
744
|
```
|
|
103
745
|
|
|
104
|
-
|
|
746
|
+
#### 3. 更新版本号
|
|
747
|
+
|
|
748
|
+
```bash
|
|
749
|
+
# 补丁版本 (1.0.0 -> 1.0.1)
|
|
750
|
+
npm version patch
|
|
751
|
+
|
|
752
|
+
# 小版本 (1.0.0 -> 1.1.0)
|
|
753
|
+
npm version minor
|
|
754
|
+
|
|
755
|
+
# 大版本 (1.0.0 -> 2.0.0)
|
|
756
|
+
npm version major
|
|
757
|
+
```
|
|
105
758
|
|
|
106
|
-
|
|
759
|
+
#### 4. 发布到 npm
|
|
760
|
+
|
|
761
|
+
```bash
|
|
762
|
+
npm config set //registry.npmjs.org/:_authToken=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
|
|
763
|
+
npm publish --access public
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
---
|
|
767
|
+
|
|
768
|
+
### 项目使用者
|
|
769
|
+
|
|
770
|
+
#### 更新组件库
|
|
107
771
|
|
|
108
772
|
```bash
|
|
109
773
|
# 更新到最新版本
|
|
110
|
-
npm update @yxhl/specter-pui
|
|
774
|
+
npm update @yxhl/specter-pui-vtk
|
|
111
775
|
|
|
112
776
|
# 或指定版本
|
|
113
|
-
npm install @yxhl/specter-pui@
|
|
777
|
+
npm install @yxhl/specter-pui-vtk@1.0.5
|
|
778
|
+
|
|
779
|
+
# 强制重新安装
|
|
780
|
+
rm -rf node_modules package-lock.json
|
|
781
|
+
npm install
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
#### 查看当前版本
|
|
785
|
+
|
|
786
|
+
```bash
|
|
787
|
+
npm list @yxhl/specter-pui-vtk
|
|
788
|
+
```
|
|
789
|
+
|
|
790
|
+
---
|
|
791
|
+
|
|
792
|
+
## 常见问题
|
|
793
|
+
|
|
794
|
+
### 1. 组件未定义
|
|
795
|
+
|
|
796
|
+
**问题:** 使用组件时提示组件未定义
|
|
797
|
+
|
|
798
|
+
**解决:**
|
|
799
|
+
- 确保在 main.js 中正确引入并注册了组件库
|
|
800
|
+
- 确保引入了 CSS 文件
|
|
801
|
+
|
|
802
|
+
```javascript
|
|
803
|
+
import SpecterPuiVtk from '@yxhl/specter-pui-vtk'
|
|
804
|
+
import '@yxhl/specter-pui-vtk/dist/specter-pui-vtk.css'
|
|
805
|
+
|
|
806
|
+
app.use(SpecterPuiVtk)
|
|
114
807
|
```
|
|
115
808
|
|
|
116
|
-
|
|
809
|
+
---
|
|
117
810
|
|
|
118
|
-
|
|
811
|
+
### 2. 消息组件不显示
|
|
119
812
|
|
|
120
|
-
|
|
813
|
+
**问题:** 调用 `proxy.$vtk.message` 方法后没有显示
|
|
814
|
+
|
|
815
|
+
**解决:**
|
|
816
|
+
- 确保在 App.vue 中添加了 `<vtk-message />` 组件
|
|
817
|
+
|
|
818
|
+
```vue
|
|
819
|
+
<template>
|
|
820
|
+
<v-app>
|
|
821
|
+
<router-view />
|
|
822
|
+
<vtk-message />
|
|
823
|
+
</v-app>
|
|
824
|
+
</template>
|
|
825
|
+
```
|
|
826
|
+
|
|
827
|
+
---
|
|
828
|
+
|
|
829
|
+
### 3. API 请求 baseURL 为 undefined
|
|
830
|
+
|
|
831
|
+
**问题:** HTTP 请求的 baseURL 是 undefined
|
|
832
|
+
|
|
833
|
+
**解决:**
|
|
834
|
+
- 在 main.js 中配置 API 地址
|
|
835
|
+
|
|
836
|
+
```javascript
|
|
837
|
+
window.VITE_APP_API_URL = import.meta.env.VITE_APP_API_URL
|
|
838
|
+
```
|
|
839
|
+
|
|
840
|
+
- 或在 .env 文件中配置
|
|
841
|
+
|
|
842
|
+
```env
|
|
843
|
+
VITE_APP_API_URL=https://api.example.com
|
|
844
|
+
```
|
|
845
|
+
|
|
846
|
+
---
|
|
847
|
+
|
|
848
|
+
### 4. 用户信息获取失败
|
|
849
|
+
|
|
850
|
+
**问题:** 组件无法获取用户信息
|
|
851
|
+
|
|
852
|
+
**解决:**
|
|
853
|
+
- 确保在 localStorage 中存储了用户信息
|
|
854
|
+
- 如果使用自定义键名,需要配置 `window.VTK_CONFIG`
|
|
855
|
+
|
|
856
|
+
```javascript
|
|
857
|
+
window.VTK_CONFIG = {
|
|
858
|
+
storageKeys: {
|
|
859
|
+
user: 'my_custom_user_key'
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
```
|
|
863
|
+
|
|
864
|
+
---
|
|
865
|
+
|
|
866
|
+
### 5. 组件样式异常
|
|
867
|
+
|
|
868
|
+
**问题:** 组件样式显示不正常
|
|
869
|
+
|
|
870
|
+
**解决:**
|
|
871
|
+
- 确保引入了 CSS 文件
|
|
872
|
+
- 确保 Vuetify 已正确配置
|
|
873
|
+
- 检查是否有样式冲突
|
|
874
|
+
|
|
875
|
+
```javascript
|
|
876
|
+
import '@yxhl/specter-pui-vtk/dist/specter-pui-vtk.css'
|
|
877
|
+
```
|
|
878
|
+
|
|
879
|
+
---
|
|
880
|
+
|
|
881
|
+
## 版本历史
|
|
882
|
+
|
|
883
|
+
### v1.0.0
|
|
884
|
+
- 初始版本发布
|
|
885
|
+
- 包含基础组件和工具函数
|
|
886
|
+
|
|
887
|
+
---
|
|
888
|
+
|
|
889
|
+
## 许可证
|
|
890
|
+
|
|
891
|
+
MIT License
|
|
892
|
+
|
|
893
|
+
## 作者
|
|
121
894
|
|
|
122
895
|
yxhl <17363318852@139.com>
|
|
896
|
+
|
|
897
|
+
## 链接
|
|
898
|
+
|
|
899
|
+
- [npm 包](https://www.npmjs.com/package/@yxhl/specter-pui-vtk)
|
|
900
|
+
- [问题反馈](https://gitee.com/liangthink/specter-core-vue/issues)
|