@yxhl/specter-pui-vtk 1.0.77 → 1.0.79
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 +453 -453
- package/dist/specter-pui-vtk.css +1 -1
- package/dist/specter-pui.es.js +4 -4
- 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/assets/img/empty.svg +1 -0
- package/src/commons/index.js +20 -20
- package/src/commons/location.js +128 -128
- package/src/components/assembly/VtkDateSelector.vue +40 -40
- package/src/components/assembly/VtkDateTimePicker.vue +1370 -1370
- package/src/components/assembly/VtkEmptyNew.vue +26 -0
- package/src/components/assembly/VtkUpload.vue +602 -602
- package/src/components/message/toast.vue +3 -3
- package/src/index.js +20 -20
package/README.md
CHANGED
|
@@ -1,453 +1,453 @@
|
|
|
1
|
-
# @yxhl/specter-pui-vtk
|
|
2
|
-
|
|
3
|
-
基于 Vue 3 + Vuetify 3 的业务组件库,内置常用业务组件、消息能力、请求封装、存储工具和格式化方法。
|
|
4
|
-
|
|
5
|
-
## 目录
|
|
6
|
-
|
|
7
|
-
- [安装](#安装)
|
|
8
|
-
- [快速开始](#快速开始)
|
|
9
|
-
- [全局能力](#全局能力)
|
|
10
|
-
- [组件使用](#组件使用)
|
|
11
|
-
- [工具方法](#工具方法)
|
|
12
|
-
- [配置说明](#配置说明)
|
|
13
|
-
- [开发与发布](#开发与发布)
|
|
14
|
-
- [常见问题](#常见问题)
|
|
15
|
-
|
|
16
|
-
## 安装
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
npm install @yxhl/specter-pui-vtk
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
适用环境:
|
|
23
|
-
|
|
24
|
-
- Vue 3.x
|
|
25
|
-
- Vuetify 3.x
|
|
26
|
-
- Node.js >= 16
|
|
27
|
-
|
|
28
|
-
## 快速开始
|
|
29
|
-
|
|
30
|
-
### 1. 在 `main.js` 中注册组件库
|
|
31
|
-
|
|
32
|
-
```js
|
|
33
|
-
import { createApp } from "vue";
|
|
34
|
-
import App from "./App.vue";
|
|
35
|
-
import SpecterPuiVtk from "@yxhl/specter-pui-vtk";
|
|
36
|
-
import "@yxhl/specter-pui-vtk/dist/specter-pui-vtk.css";
|
|
37
|
-
|
|
38
|
-
const app = createApp(App);
|
|
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
|
-
window.VITE_APP_API_URL = import.meta.env.VITE_APP_API_URL;
|
|
48
|
-
|
|
49
|
-
app.use(SpecterPuiVtk);
|
|
50
|
-
app.mount("#app");
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### 2. 在根组件挂载消息组件
|
|
54
|
-
|
|
55
|
-
`proxy.$vtk.message` 依赖全局消息组件,建议在 `App.vue` 中加入:
|
|
56
|
-
|
|
57
|
-
```vue
|
|
58
|
-
<template>
|
|
59
|
-
<v-app>
|
|
60
|
-
<router-view />
|
|
61
|
-
<vtk-message />
|
|
62
|
-
</v-app>
|
|
63
|
-
</template>
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### 3. 基础使用示例
|
|
67
|
-
|
|
68
|
-
```vue
|
|
69
|
-
<template>
|
|
70
|
-
<VtkStepper :el="step" list="基础信息,详细信息,完成" />
|
|
71
|
-
<VtkPage v-model="pageData" @change="loadData" />
|
|
72
|
-
</template>
|
|
73
|
-
|
|
74
|
-
<script setup>
|
|
75
|
-
import { ref } from "vue";
|
|
76
|
-
|
|
77
|
-
const step = ref(1);
|
|
78
|
-
const pageData = ref({
|
|
79
|
-
pageno: 1,
|
|
80
|
-
pageCount: 1,
|
|
81
|
-
rowCount: 0,
|
|
82
|
-
limit: 10
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
const loadData = () => {
|
|
86
|
-
console.log("分页变化", pageData.value);
|
|
87
|
-
};
|
|
88
|
-
</script>
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## 全局能力
|
|
92
|
-
|
|
93
|
-
安装后可以通过 `this.$vtk` 或 `getCurrentInstance().proxy.$vtk` 使用以下能力:
|
|
94
|
-
|
|
95
|
-
```js
|
|
96
|
-
const { proxy } = getCurrentInstance();
|
|
97
|
-
|
|
98
|
-
proxy.$vtk.request;
|
|
99
|
-
proxy.$vtk.storage;
|
|
100
|
-
proxy.$vtk.message;
|
|
101
|
-
proxy.$vtk.location;
|
|
102
|
-
proxy.$vtk.Validation;
|
|
103
|
-
proxy.$vtk.filters;
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
其中:
|
|
107
|
-
|
|
108
|
-
- `request`:HTTP 请求封装
|
|
109
|
-
- `storage`:本地存储封装
|
|
110
|
-
- `message`:全局消息、确认框、加载框
|
|
111
|
-
- `Validation`:表单校验方法
|
|
112
|
-
- `filters`:字典转换、脱敏、格式化等工具
|
|
113
|
-
|
|
114
|
-
## 组件使用
|
|
115
|
-
|
|
116
|
-
组件库默认全局注册,注册插件后可直接在模板中使用。
|
|
117
|
-
|
|
118
|
-
### 常用组件列表
|
|
119
|
-
|
|
120
|
-
- `VtkArea`:地区下拉选择
|
|
121
|
-
- `VtkAreaTabs`:Tab 版地区选择
|
|
122
|
-
- `VtkDept`:人员选择
|
|
123
|
-
- `VtkBreadcrumb`:面包屑导航
|
|
124
|
-
- `VtkStepper`:步骤条
|
|
125
|
-
- `VtkPage`:分页
|
|
126
|
-
- `VtkFormItem`:表单项包装
|
|
127
|
-
- `VtkSelect`:下拉选择
|
|
128
|
-
- `VtkCheckbox`:复选框组
|
|
129
|
-
- `VtkRadio`:单选框组
|
|
130
|
-
- `VtkDatePicker`:日期选择
|
|
131
|
-
- `VtkDateSelector`:高级日期选择
|
|
132
|
-
- `VtkImg`:图片预览
|
|
133
|
-
- `VtkPdf`:PDF 查看
|
|
134
|
-
- `VtkUpload`:文件上传
|
|
135
|
-
- `VtkEmpty`:空状态
|
|
136
|
-
- `VtkFab`:悬浮按钮
|
|
137
|
-
|
|
138
|
-
### VtkArea
|
|
139
|
-
|
|
140
|
-
```vue
|
|
141
|
-
<template>
|
|
142
|
-
<VtkArea v-model="areaCode" />
|
|
143
|
-
</template>
|
|
144
|
-
|
|
145
|
-
<script setup>
|
|
146
|
-
import { ref } from "vue";
|
|
147
|
-
|
|
148
|
-
const areaCode = ref("");
|
|
149
|
-
</script>
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
常用属性:
|
|
153
|
-
|
|
154
|
-
- `v-model`:地区编码
|
|
155
|
-
- `maxArea`:最大地区层级
|
|
156
|
-
- `minArea`:最小地区层级
|
|
157
|
-
|
|
158
|
-
### VtkDept
|
|
159
|
-
|
|
160
|
-
```vue
|
|
161
|
-
<template>
|
|
162
|
-
<VBtn @click="openDept">选择人员</VBtn>
|
|
163
|
-
<VtkDept ref="deptRef" :multiple="true" @selected="handleSelected" />
|
|
164
|
-
</template>
|
|
165
|
-
|
|
166
|
-
<script setup>
|
|
167
|
-
import { ref } from "vue";
|
|
168
|
-
|
|
169
|
-
const deptRef = ref(null);
|
|
170
|
-
|
|
171
|
-
const openDept = () => {
|
|
172
|
-
deptRef.value?.add();
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
const handleSelected = (persons) => {
|
|
176
|
-
console.log(persons);
|
|
177
|
-
};
|
|
178
|
-
</script>
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
### VtkDateSelector
|
|
182
|
-
|
|
183
|
-
```vue
|
|
184
|
-
<template>
|
|
185
|
-
<VtkDateSelector v-model="date" placeholder="请选择日期" />
|
|
186
|
-
|
|
187
|
-
<VtkDateSelector
|
|
188
|
-
v-model="dateRange"
|
|
189
|
-
mode="range"
|
|
190
|
-
display-mode="month"
|
|
191
|
-
placeholder="请选择月份范围"
|
|
192
|
-
/>
|
|
193
|
-
</template>
|
|
194
|
-
|
|
195
|
-
<script setup>
|
|
196
|
-
import { ref } from "vue";
|
|
197
|
-
|
|
198
|
-
const date = ref("");
|
|
199
|
-
const dateRange = ref([]);
|
|
200
|
-
</script>
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
常用属性:
|
|
204
|
-
|
|
205
|
-
- `display-mode`:`day` / `week` / `month` / `year`
|
|
206
|
-
- `mode`:`single` / `range`
|
|
207
|
-
- `inline`:是否内联显示
|
|
208
|
-
- `singlePanel`:范围选择时是否单面板
|
|
209
|
-
- `disableFuture`:是否禁用未来日期
|
|
210
|
-
|
|
211
|
-
### VtkUpload
|
|
212
|
-
|
|
213
|
-
```vue
|
|
214
|
-
<template>
|
|
215
|
-
<VtkUpload
|
|
216
|
-
v-model="files"
|
|
217
|
-
action="/api/upload"
|
|
218
|
-
list-type="picture-card"
|
|
219
|
-
accept=".jpg,.png,.pdf,.xlsx"
|
|
220
|
-
:limit="5"
|
|
221
|
-
:max-size="5"
|
|
222
|
-
tip="支持 jpg/png/pdf/xlsx,单文件不超过 5MB"
|
|
223
|
-
/>
|
|
224
|
-
</template>
|
|
225
|
-
|
|
226
|
-
<script setup>
|
|
227
|
-
import { ref } from "vue";
|
|
228
|
-
|
|
229
|
-
const files = ref([]);
|
|
230
|
-
</script>
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
常用属性:
|
|
234
|
-
|
|
235
|
-
- `action`:上传接口地址
|
|
236
|
-
- `listType`:`text` / `picture` / `picture-card`
|
|
237
|
-
- `limit`:最大文件数
|
|
238
|
-
- `maxSize`:单文件大小限制,单位 MB
|
|
239
|
-
- `beforeUpload`:上传前校验
|
|
240
|
-
- `beforeRemove`:删除前校验
|
|
241
|
-
|
|
242
|
-
## 工具方法
|
|
243
|
-
|
|
244
|
-
### 1. request
|
|
245
|
-
|
|
246
|
-
```js
|
|
247
|
-
const { proxy } = getCurrentInstance();
|
|
248
|
-
|
|
249
|
-
proxy.$vtk.request.getForm("/api/user", { id: 1 });
|
|
250
|
-
proxy.$vtk.request.postForm("/api/user", { name: "test" });
|
|
251
|
-
proxy.$vtk.request.getJson("/api/user", { id: 1 });
|
|
252
|
-
proxy.$vtk.request.postJson("/api/user", { name: "test" });
|
|
253
|
-
proxy.$vtk.request.imp("/api/upload", formData);
|
|
254
|
-
proxy.$vtk.request.exp("/api/export", { id: 1 });
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
说明:
|
|
258
|
-
|
|
259
|
-
- 自动读取 token 并注入请求头
|
|
260
|
-
- `baseURL` 来自 `window.VITE_APP_API_URL`
|
|
261
|
-
- 登录失效时会自动弹窗并回到首页
|
|
262
|
-
|
|
263
|
-
### 2. storage
|
|
264
|
-
|
|
265
|
-
```js
|
|
266
|
-
const { proxy } = getCurrentInstance();
|
|
267
|
-
|
|
268
|
-
proxy.$vtk.storage.set("key", "value");
|
|
269
|
-
proxy.$vtk.storage.set("user", { name: "admin" });
|
|
270
|
-
|
|
271
|
-
proxy.$vtk.storage.get("key");
|
|
272
|
-
proxy.$vtk.storage.remove("key");
|
|
273
|
-
proxy.$vtk.storage.clear();
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
### 3. message
|
|
277
|
-
|
|
278
|
-
```js
|
|
279
|
-
const { proxy } = getCurrentInstance();
|
|
280
|
-
|
|
281
|
-
proxy.$vtk.message.success("操作成功");
|
|
282
|
-
proxy.$vtk.message.error("操作失败");
|
|
283
|
-
proxy.$vtk.message.warning("警告信息");
|
|
284
|
-
proxy.$vtk.message.info("提示信息");
|
|
285
|
-
proxy.$vtk.message.toast("普通提示");
|
|
286
|
-
|
|
287
|
-
proxy.$vtk.message.confirm({
|
|
288
|
-
title: "提示",
|
|
289
|
-
text: "确认删除吗?",
|
|
290
|
-
onConfirm: () => console.log("confirm"),
|
|
291
|
-
onCancel: () => console.log("cancel")
|
|
292
|
-
});
|
|
293
|
-
|
|
294
|
-
proxy.$vtk.message.alert({
|
|
295
|
-
title: "提示",
|
|
296
|
-
text: "保存成功"
|
|
297
|
-
});
|
|
298
|
-
|
|
299
|
-
proxy.$vtk.message.loading.show();
|
|
300
|
-
proxy.$vtk.message.loading.hide();
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
### 4. Validation
|
|
304
|
-
|
|
305
|
-
```js
|
|
306
|
-
const { proxy } = getCurrentInstance();
|
|
307
|
-
|
|
308
|
-
const rules = [
|
|
309
|
-
proxy.$vtk.Validation.required("不能为空"),
|
|
310
|
-
proxy.$vtk.Validation.mobile("手机号格式不正确")
|
|
311
|
-
];
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
### 5. filters
|
|
315
|
-
|
|
316
|
-
`dictionary.js`、`mask.js`、`format.js` 中的方法会一起挂到 `$vtk.filters`,同时字典方法也会被直接导出。
|
|
317
|
-
|
|
318
|
-
```js
|
|
319
|
-
const { proxy } = getCurrentInstance();
|
|
320
|
-
|
|
321
|
-
proxy.$vtk.filters.dict("1", "0:禁用/1:启用");
|
|
322
|
-
proxy.$vtk.filters.analyType("1");
|
|
323
|
-
proxy.$vtk.filters.analyLevel("2");
|
|
324
|
-
proxy.$vtk.filters.mobile("13812345678");
|
|
325
|
-
proxy.$vtk.filters.idcard("330101199001011234");
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
### 6. appendAppParams
|
|
329
|
-
|
|
330
|
-
用于根据应用 `aid` 获取真实地址,或对已有 URL 追加参数。
|
|
331
|
-
|
|
332
|
-
```js
|
|
333
|
-
const { proxy } = getCurrentInstance();
|
|
334
|
-
|
|
335
|
-
const url1 = await proxy.$vtk.location.appendAppParams(
|
|
336
|
-
"1226652a-3245-11ec-ad84-506b4bfd2204",
|
|
337
|
-
{ name: "xiong" },
|
|
338
|
-
"fwez"
|
|
339
|
-
);
|
|
340
|
-
|
|
341
|
-
const url2 = await proxy.$vtk.location.appendAppParams(
|
|
342
|
-
"https://mis.hzcl.org.cn/test#/page",
|
|
343
|
-
{ name: "xiong" },
|
|
344
|
-
"fwez"
|
|
345
|
-
);
|
|
346
|
-
|
|
347
|
-
const stoken = proxy.$vtk.location.GetQueryString("stoken");
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
当前逻辑:
|
|
351
|
-
|
|
352
|
-
- 如果第一个参数是 `aid`,会请求 `/kudas/xfwez/apps`
|
|
353
|
-
- 接口参数格式:`{ aid }`
|
|
354
|
-
- 默认取返回结果中的 `puri`
|
|
355
|
-
- `sobject` 中的参数会自动拼接到结果 URL 上
|
|
356
|
-
- 如果 URL 已有同名参数,则不会重复追加
|
|
357
|
-
|
|
358
|
-
## 配置说明
|
|
359
|
-
|
|
360
|
-
### VTK_CONFIG
|
|
361
|
-
|
|
362
|
-
```js
|
|
363
|
-
window.VTK_CONFIG = {
|
|
364
|
-
storageKeys: {
|
|
365
|
-
user: "_mis_acis_users",
|
|
366
|
-
token: "_mis_acis_token"
|
|
367
|
-
}
|
|
368
|
-
};
|
|
369
|
-
```
|
|
370
|
-
|
|
371
|
-
默认值:
|
|
372
|
-
|
|
373
|
-
- `user`: `_mis_acis_users`
|
|
374
|
-
- `token`: `_mis_acis_token`
|
|
375
|
-
|
|
376
|
-
### API 地址
|
|
377
|
-
|
|
378
|
-
```js
|
|
379
|
-
window.VITE_APP_API_URL = import.meta.env.VITE_APP_API_URL;
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
也可以在 `.env` 中配置:
|
|
383
|
-
|
|
384
|
-
```env
|
|
385
|
-
VITE_APP_API_URL=https://api.example.com
|
|
386
|
-
VITE_MIS_USERS=_mis_acis_users
|
|
387
|
-
VITE_MIS_TOKEN=_mis_acis_token
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
## 开发与发布
|
|
391
|
-
|
|
392
|
-
### 本地开发
|
|
393
|
-
|
|
394
|
-
```bash
|
|
395
|
-
npm run dev
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
### 打包
|
|
399
|
-
|
|
400
|
-
```bash
|
|
401
|
-
npm run build
|
|
402
|
-
```
|
|
403
|
-
|
|
404
|
-
### 发布前版本更新
|
|
405
|
-
|
|
406
|
-
```bash
|
|
407
|
-
npm version patch
|
|
408
|
-
npm version minor
|
|
409
|
-
npm version major
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
### 发布
|
|
413
|
-
|
|
414
|
-
```bash
|
|
415
|
-
npm publish --access public
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
## 常见问题
|
|
419
|
-
|
|
420
|
-
### 1. 组件未生效
|
|
421
|
-
|
|
422
|
-
请确认:
|
|
423
|
-
|
|
424
|
-
- 已执行 `app.use(SpecterPuiVtk)`
|
|
425
|
-
- 已引入样式 `@yxhl/specter-pui-vtk/dist/specter-pui-vtk.css`
|
|
426
|
-
|
|
427
|
-
### 2. 消息组件不显示
|
|
428
|
-
|
|
429
|
-
请确认根组件中已挂载:
|
|
430
|
-
|
|
431
|
-
```vue
|
|
432
|
-
<vtk-message />
|
|
433
|
-
```
|
|
434
|
-
|
|
435
|
-
### 3. 请求地址是 `undefined`
|
|
436
|
-
|
|
437
|
-
请确认已设置:
|
|
438
|
-
|
|
439
|
-
```js
|
|
440
|
-
window.VITE_APP_API_URL = import.meta.env.VITE_APP_API_URL;
|
|
441
|
-
```
|
|
442
|
-
|
|
443
|
-
### 4. 组件读取不到用户信息
|
|
444
|
-
|
|
445
|
-
请确认用户信息已写入本地存储,并且 key 与 `window.VTK_CONFIG.storageKeys.user` 一致。
|
|
446
|
-
|
|
447
|
-
## 版本
|
|
448
|
-
|
|
449
|
-
当前版本:`1.0.68`
|
|
450
|
-
|
|
451
|
-
## License
|
|
452
|
-
|
|
453
|
-
MIT
|
|
1
|
+
# @yxhl/specter-pui-vtk
|
|
2
|
+
|
|
3
|
+
基于 Vue 3 + Vuetify 3 的业务组件库,内置常用业务组件、消息能力、请求封装、存储工具和格式化方法。
|
|
4
|
+
|
|
5
|
+
## 目录
|
|
6
|
+
|
|
7
|
+
- [安装](#安装)
|
|
8
|
+
- [快速开始](#快速开始)
|
|
9
|
+
- [全局能力](#全局能力)
|
|
10
|
+
- [组件使用](#组件使用)
|
|
11
|
+
- [工具方法](#工具方法)
|
|
12
|
+
- [配置说明](#配置说明)
|
|
13
|
+
- [开发与发布](#开发与发布)
|
|
14
|
+
- [常见问题](#常见问题)
|
|
15
|
+
|
|
16
|
+
## 安装
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @yxhl/specter-pui-vtk
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
适用环境:
|
|
23
|
+
|
|
24
|
+
- Vue 3.x
|
|
25
|
+
- Vuetify 3.x
|
|
26
|
+
- Node.js >= 16
|
|
27
|
+
|
|
28
|
+
## 快速开始
|
|
29
|
+
|
|
30
|
+
### 1. 在 `main.js` 中注册组件库
|
|
31
|
+
|
|
32
|
+
```js
|
|
33
|
+
import { createApp } from "vue";
|
|
34
|
+
import App from "./App.vue";
|
|
35
|
+
import SpecterPuiVtk from "@yxhl/specter-pui-vtk";
|
|
36
|
+
import "@yxhl/specter-pui-vtk/dist/specter-pui-vtk.css";
|
|
37
|
+
|
|
38
|
+
const app = createApp(App);
|
|
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
|
+
window.VITE_APP_API_URL = import.meta.env.VITE_APP_API_URL;
|
|
48
|
+
|
|
49
|
+
app.use(SpecterPuiVtk);
|
|
50
|
+
app.mount("#app");
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 2. 在根组件挂载消息组件
|
|
54
|
+
|
|
55
|
+
`proxy.$vtk.message` 依赖全局消息组件,建议在 `App.vue` 中加入:
|
|
56
|
+
|
|
57
|
+
```vue
|
|
58
|
+
<template>
|
|
59
|
+
<v-app>
|
|
60
|
+
<router-view />
|
|
61
|
+
<vtk-message />
|
|
62
|
+
</v-app>
|
|
63
|
+
</template>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 3. 基础使用示例
|
|
67
|
+
|
|
68
|
+
```vue
|
|
69
|
+
<template>
|
|
70
|
+
<VtkStepper :el="step" list="基础信息,详细信息,完成" />
|
|
71
|
+
<VtkPage v-model="pageData" @change="loadData" />
|
|
72
|
+
</template>
|
|
73
|
+
|
|
74
|
+
<script setup>
|
|
75
|
+
import { ref } from "vue";
|
|
76
|
+
|
|
77
|
+
const step = ref(1);
|
|
78
|
+
const pageData = ref({
|
|
79
|
+
pageno: 1,
|
|
80
|
+
pageCount: 1,
|
|
81
|
+
rowCount: 0,
|
|
82
|
+
limit: 10
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
const loadData = () => {
|
|
86
|
+
console.log("分页变化", pageData.value);
|
|
87
|
+
};
|
|
88
|
+
</script>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## 全局能力
|
|
92
|
+
|
|
93
|
+
安装后可以通过 `this.$vtk` 或 `getCurrentInstance().proxy.$vtk` 使用以下能力:
|
|
94
|
+
|
|
95
|
+
```js
|
|
96
|
+
const { proxy } = getCurrentInstance();
|
|
97
|
+
|
|
98
|
+
proxy.$vtk.request;
|
|
99
|
+
proxy.$vtk.storage;
|
|
100
|
+
proxy.$vtk.message;
|
|
101
|
+
proxy.$vtk.location;
|
|
102
|
+
proxy.$vtk.Validation;
|
|
103
|
+
proxy.$vtk.filters;
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
其中:
|
|
107
|
+
|
|
108
|
+
- `request`:HTTP 请求封装
|
|
109
|
+
- `storage`:本地存储封装
|
|
110
|
+
- `message`:全局消息、确认框、加载框
|
|
111
|
+
- `Validation`:表单校验方法
|
|
112
|
+
- `filters`:字典转换、脱敏、格式化等工具
|
|
113
|
+
|
|
114
|
+
## 组件使用
|
|
115
|
+
|
|
116
|
+
组件库默认全局注册,注册插件后可直接在模板中使用。
|
|
117
|
+
|
|
118
|
+
### 常用组件列表
|
|
119
|
+
|
|
120
|
+
- `VtkArea`:地区下拉选择
|
|
121
|
+
- `VtkAreaTabs`:Tab 版地区选择
|
|
122
|
+
- `VtkDept`:人员选择
|
|
123
|
+
- `VtkBreadcrumb`:面包屑导航
|
|
124
|
+
- `VtkStepper`:步骤条
|
|
125
|
+
- `VtkPage`:分页
|
|
126
|
+
- `VtkFormItem`:表单项包装
|
|
127
|
+
- `VtkSelect`:下拉选择
|
|
128
|
+
- `VtkCheckbox`:复选框组
|
|
129
|
+
- `VtkRadio`:单选框组
|
|
130
|
+
- `VtkDatePicker`:日期选择
|
|
131
|
+
- `VtkDateSelector`:高级日期选择
|
|
132
|
+
- `VtkImg`:图片预览
|
|
133
|
+
- `VtkPdf`:PDF 查看
|
|
134
|
+
- `VtkUpload`:文件上传
|
|
135
|
+
- `VtkEmpty`:空状态
|
|
136
|
+
- `VtkFab`:悬浮按钮
|
|
137
|
+
|
|
138
|
+
### VtkArea
|
|
139
|
+
|
|
140
|
+
```vue
|
|
141
|
+
<template>
|
|
142
|
+
<VtkArea v-model="areaCode" />
|
|
143
|
+
</template>
|
|
144
|
+
|
|
145
|
+
<script setup>
|
|
146
|
+
import { ref } from "vue";
|
|
147
|
+
|
|
148
|
+
const areaCode = ref("");
|
|
149
|
+
</script>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
常用属性:
|
|
153
|
+
|
|
154
|
+
- `v-model`:地区编码
|
|
155
|
+
- `maxArea`:最大地区层级
|
|
156
|
+
- `minArea`:最小地区层级
|
|
157
|
+
|
|
158
|
+
### VtkDept
|
|
159
|
+
|
|
160
|
+
```vue
|
|
161
|
+
<template>
|
|
162
|
+
<VBtn @click="openDept">选择人员</VBtn>
|
|
163
|
+
<VtkDept ref="deptRef" :multiple="true" @selected="handleSelected" />
|
|
164
|
+
</template>
|
|
165
|
+
|
|
166
|
+
<script setup>
|
|
167
|
+
import { ref } from "vue";
|
|
168
|
+
|
|
169
|
+
const deptRef = ref(null);
|
|
170
|
+
|
|
171
|
+
const openDept = () => {
|
|
172
|
+
deptRef.value?.add();
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
const handleSelected = (persons) => {
|
|
176
|
+
console.log(persons);
|
|
177
|
+
};
|
|
178
|
+
</script>
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### VtkDateSelector
|
|
182
|
+
|
|
183
|
+
```vue
|
|
184
|
+
<template>
|
|
185
|
+
<VtkDateSelector v-model="date" placeholder="请选择日期" />
|
|
186
|
+
|
|
187
|
+
<VtkDateSelector
|
|
188
|
+
v-model="dateRange"
|
|
189
|
+
mode="range"
|
|
190
|
+
display-mode="month"
|
|
191
|
+
placeholder="请选择月份范围"
|
|
192
|
+
/>
|
|
193
|
+
</template>
|
|
194
|
+
|
|
195
|
+
<script setup>
|
|
196
|
+
import { ref } from "vue";
|
|
197
|
+
|
|
198
|
+
const date = ref("");
|
|
199
|
+
const dateRange = ref([]);
|
|
200
|
+
</script>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
常用属性:
|
|
204
|
+
|
|
205
|
+
- `display-mode`:`day` / `week` / `month` / `year`
|
|
206
|
+
- `mode`:`single` / `range`
|
|
207
|
+
- `inline`:是否内联显示
|
|
208
|
+
- `singlePanel`:范围选择时是否单面板
|
|
209
|
+
- `disableFuture`:是否禁用未来日期
|
|
210
|
+
|
|
211
|
+
### VtkUpload
|
|
212
|
+
|
|
213
|
+
```vue
|
|
214
|
+
<template>
|
|
215
|
+
<VtkUpload
|
|
216
|
+
v-model="files"
|
|
217
|
+
action="/api/upload"
|
|
218
|
+
list-type="picture-card"
|
|
219
|
+
accept=".jpg,.png,.pdf,.xlsx"
|
|
220
|
+
:limit="5"
|
|
221
|
+
:max-size="5"
|
|
222
|
+
tip="支持 jpg/png/pdf/xlsx,单文件不超过 5MB"
|
|
223
|
+
/>
|
|
224
|
+
</template>
|
|
225
|
+
|
|
226
|
+
<script setup>
|
|
227
|
+
import { ref } from "vue";
|
|
228
|
+
|
|
229
|
+
const files = ref([]);
|
|
230
|
+
</script>
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
常用属性:
|
|
234
|
+
|
|
235
|
+
- `action`:上传接口地址
|
|
236
|
+
- `listType`:`text` / `picture` / `picture-card`
|
|
237
|
+
- `limit`:最大文件数
|
|
238
|
+
- `maxSize`:单文件大小限制,单位 MB
|
|
239
|
+
- `beforeUpload`:上传前校验
|
|
240
|
+
- `beforeRemove`:删除前校验
|
|
241
|
+
|
|
242
|
+
## 工具方法
|
|
243
|
+
|
|
244
|
+
### 1. request
|
|
245
|
+
|
|
246
|
+
```js
|
|
247
|
+
const { proxy } = getCurrentInstance();
|
|
248
|
+
|
|
249
|
+
proxy.$vtk.request.getForm("/api/user", { id: 1 });
|
|
250
|
+
proxy.$vtk.request.postForm("/api/user", { name: "test" });
|
|
251
|
+
proxy.$vtk.request.getJson("/api/user", { id: 1 });
|
|
252
|
+
proxy.$vtk.request.postJson("/api/user", { name: "test" });
|
|
253
|
+
proxy.$vtk.request.imp("/api/upload", formData);
|
|
254
|
+
proxy.$vtk.request.exp("/api/export", { id: 1 });
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
说明:
|
|
258
|
+
|
|
259
|
+
- 自动读取 token 并注入请求头
|
|
260
|
+
- `baseURL` 来自 `window.VITE_APP_API_URL`
|
|
261
|
+
- 登录失效时会自动弹窗并回到首页
|
|
262
|
+
|
|
263
|
+
### 2. storage
|
|
264
|
+
|
|
265
|
+
```js
|
|
266
|
+
const { proxy } = getCurrentInstance();
|
|
267
|
+
|
|
268
|
+
proxy.$vtk.storage.set("key", "value");
|
|
269
|
+
proxy.$vtk.storage.set("user", { name: "admin" });
|
|
270
|
+
|
|
271
|
+
proxy.$vtk.storage.get("key");
|
|
272
|
+
proxy.$vtk.storage.remove("key");
|
|
273
|
+
proxy.$vtk.storage.clear();
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### 3. message
|
|
277
|
+
|
|
278
|
+
```js
|
|
279
|
+
const { proxy } = getCurrentInstance();
|
|
280
|
+
|
|
281
|
+
proxy.$vtk.message.success("操作成功");
|
|
282
|
+
proxy.$vtk.message.error("操作失败");
|
|
283
|
+
proxy.$vtk.message.warning("警告信息");
|
|
284
|
+
proxy.$vtk.message.info("提示信息");
|
|
285
|
+
proxy.$vtk.message.toast("普通提示");
|
|
286
|
+
|
|
287
|
+
proxy.$vtk.message.confirm({
|
|
288
|
+
title: "提示",
|
|
289
|
+
text: "确认删除吗?",
|
|
290
|
+
onConfirm: () => console.log("confirm"),
|
|
291
|
+
onCancel: () => console.log("cancel")
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
proxy.$vtk.message.alert({
|
|
295
|
+
title: "提示",
|
|
296
|
+
text: "保存成功"
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
proxy.$vtk.message.loading.show();
|
|
300
|
+
proxy.$vtk.message.loading.hide();
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### 4. Validation
|
|
304
|
+
|
|
305
|
+
```js
|
|
306
|
+
const { proxy } = getCurrentInstance();
|
|
307
|
+
|
|
308
|
+
const rules = [
|
|
309
|
+
proxy.$vtk.Validation.required("不能为空"),
|
|
310
|
+
proxy.$vtk.Validation.mobile("手机号格式不正确")
|
|
311
|
+
];
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### 5. filters
|
|
315
|
+
|
|
316
|
+
`dictionary.js`、`mask.js`、`format.js` 中的方法会一起挂到 `$vtk.filters`,同时字典方法也会被直接导出。
|
|
317
|
+
|
|
318
|
+
```js
|
|
319
|
+
const { proxy } = getCurrentInstance();
|
|
320
|
+
|
|
321
|
+
proxy.$vtk.filters.dict("1", "0:禁用/1:启用");
|
|
322
|
+
proxy.$vtk.filters.analyType("1");
|
|
323
|
+
proxy.$vtk.filters.analyLevel("2");
|
|
324
|
+
proxy.$vtk.filters.mobile("13812345678");
|
|
325
|
+
proxy.$vtk.filters.idcard("330101199001011234");
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### 6. appendAppParams
|
|
329
|
+
|
|
330
|
+
用于根据应用 `aid` 获取真实地址,或对已有 URL 追加参数。
|
|
331
|
+
|
|
332
|
+
```js
|
|
333
|
+
const { proxy } = getCurrentInstance();
|
|
334
|
+
|
|
335
|
+
const url1 = await proxy.$vtk.location.appendAppParams(
|
|
336
|
+
"1226652a-3245-11ec-ad84-506b4bfd2204",
|
|
337
|
+
{ name: "xiong" },
|
|
338
|
+
"fwez"
|
|
339
|
+
);
|
|
340
|
+
|
|
341
|
+
const url2 = await proxy.$vtk.location.appendAppParams(
|
|
342
|
+
"https://mis.hzcl.org.cn/test#/page",
|
|
343
|
+
{ name: "xiong" },
|
|
344
|
+
"fwez"
|
|
345
|
+
);
|
|
346
|
+
|
|
347
|
+
const stoken = proxy.$vtk.location.GetQueryString("stoken");
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
当前逻辑:
|
|
351
|
+
|
|
352
|
+
- 如果第一个参数是 `aid`,会请求 `/kudas/xfwez/apps`
|
|
353
|
+
- 接口参数格式:`{ aid }`
|
|
354
|
+
- 默认取返回结果中的 `puri`
|
|
355
|
+
- `sobject` 中的参数会自动拼接到结果 URL 上
|
|
356
|
+
- 如果 URL 已有同名参数,则不会重复追加
|
|
357
|
+
|
|
358
|
+
## 配置说明
|
|
359
|
+
|
|
360
|
+
### VTK_CONFIG
|
|
361
|
+
|
|
362
|
+
```js
|
|
363
|
+
window.VTK_CONFIG = {
|
|
364
|
+
storageKeys: {
|
|
365
|
+
user: "_mis_acis_users",
|
|
366
|
+
token: "_mis_acis_token"
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
默认值:
|
|
372
|
+
|
|
373
|
+
- `user`: `_mis_acis_users`
|
|
374
|
+
- `token`: `_mis_acis_token`
|
|
375
|
+
|
|
376
|
+
### API 地址
|
|
377
|
+
|
|
378
|
+
```js
|
|
379
|
+
window.VITE_APP_API_URL = import.meta.env.VITE_APP_API_URL;
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
也可以在 `.env` 中配置:
|
|
383
|
+
|
|
384
|
+
```env
|
|
385
|
+
VITE_APP_API_URL=https://api.example.com
|
|
386
|
+
VITE_MIS_USERS=_mis_acis_users
|
|
387
|
+
VITE_MIS_TOKEN=_mis_acis_token
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
## 开发与发布
|
|
391
|
+
|
|
392
|
+
### 本地开发
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
npm run dev
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### 打包
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
npm run build
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### 发布前版本更新
|
|
405
|
+
|
|
406
|
+
```bash
|
|
407
|
+
npm version patch
|
|
408
|
+
npm version minor
|
|
409
|
+
npm version major
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
### 发布
|
|
413
|
+
|
|
414
|
+
```bash
|
|
415
|
+
npm publish --access public
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
## 常见问题
|
|
419
|
+
|
|
420
|
+
### 1. 组件未生效
|
|
421
|
+
|
|
422
|
+
请确认:
|
|
423
|
+
|
|
424
|
+
- 已执行 `app.use(SpecterPuiVtk)`
|
|
425
|
+
- 已引入样式 `@yxhl/specter-pui-vtk/dist/specter-pui-vtk.css`
|
|
426
|
+
|
|
427
|
+
### 2. 消息组件不显示
|
|
428
|
+
|
|
429
|
+
请确认根组件中已挂载:
|
|
430
|
+
|
|
431
|
+
```vue
|
|
432
|
+
<vtk-message />
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### 3. 请求地址是 `undefined`
|
|
436
|
+
|
|
437
|
+
请确认已设置:
|
|
438
|
+
|
|
439
|
+
```js
|
|
440
|
+
window.VITE_APP_API_URL = import.meta.env.VITE_APP_API_URL;
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
### 4. 组件读取不到用户信息
|
|
444
|
+
|
|
445
|
+
请确认用户信息已写入本地存储,并且 key 与 `window.VTK_CONFIG.storageKeys.user` 一致。
|
|
446
|
+
|
|
447
|
+
## 版本
|
|
448
|
+
|
|
449
|
+
当前版本:`1.0.68`
|
|
450
|
+
|
|
451
|
+
## License
|
|
452
|
+
|
|
453
|
+
MIT
|