@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 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
- import { VtkStepper, VtkPage, storage } from '@yxhl/specter-pui'
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
- export default {
32
- components: {
33
- VtkStepper,
34
- VtkPage
35
- },
36
- setup() {
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
- - **VtkArea** - 地区选择组件
47
- - **VtkCheckbox** - 复选框组件
48
- - **VtkCount** - 计数器组件
49
- - **VtkDatePicker** - 日期选择器
50
- - **VtkEmpty** - 空状态组件
51
- - **VtkFab** - 浮动按钮
52
- - **VtkFormItem** - 表单项组件
53
- - **VtkImg** - 图片组件
54
- - **VtkPage** - 分页组件
55
- - **VtkPdf** - PDF 查看器
56
- - **VtkProj** - 项目组件
57
- - **VtkRadio** - 单选框组件
58
- - **VtkSearch** - 搜索组件
59
- - **VtkSelect** - 下拉选择组件
60
- - **VtkStepper** - 步骤条组件
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
- ### request - HTTP 请求
553
+ ---
554
+
555
+ ### 2. Request - HTTP 请求
556
+
557
+ 封装的 Axios 请求工具,自动处理 token 和错误。
558
+
559
+ **使用方式:**
560
+
78
561
  ```javascript
79
- import { request } from '@yxhl/specter-pui'
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
- request.get('/api/data')
82
- request.post('/api/data', { data })
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
- ### themes - 主题管理
592
+ **或者直接导入:**
593
+
86
594
  ```javascript
87
- import { themes } from '@yxhl/specter-pui'
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
- themes.toggle() // 切换主题
618
+ // 分析级别
619
+ proxy.$vtk.filters.analyLevel('level_code')
90
620
  ```
91
621
 
92
- ### Composables
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
- import { usePage, useVtk } from '@yxhl/specter-pui'
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
- const vtk = useVtk()
101
- vtk.message.success('操作成功')
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@latest
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
- ## 📄 License
809
+ ---
117
810
 
118
- MIT
811
+ ### 2. 消息组件不显示
119
812
 
120
- ## 👥 Author
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)