@zkwq/business 0.2.1 → 0.2.21
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 +2129 -0
- package/dist/css/AggsItemH.css +3 -2
- package/dist/css/AggsItemH.min.css +1 -1
- package/dist/css/AggsItemV.css +26 -25
- package/dist/css/AggsItemV.min.css +1 -1
- package/dist/css/Annex.css +1 -0
- package/dist/css/AppDialog.css +1 -0
- package/dist/css/AppNumberBoard.css +1 -0
- package/dist/css/AppTip.css +1 -0
- package/dist/css/Author.css +1 -0
- package/dist/css/AuthorX.css +1 -0
- package/dist/css/Avatar.css +2 -1
- package/dist/css/Avatar.min.css +1 -1
- package/dist/css/AvatarGroup.css +1 -0
- package/dist/css/BounceLoading.css +1 -0
- package/dist/css/CaptchaDialog.css +3 -0
- package/dist/css/CaptchaDialog.min.css +1 -0
- package/dist/css/CaptchaFormItem.css +123 -0
- package/dist/css/CaptchaFormItem.min.css +1 -0
- package/dist/css/CircleTranslateButton.css +1 -0
- package/dist/css/Cover.css +1 -0
- package/dist/css/DatePickerX.css +1 -0
- package/dist/css/HoverCard.css +2 -0
- package/dist/css/Institution.css +1 -0
- package/dist/css/InstitutionAvatar.css +1 -0
- package/dist/css/InstitutionProfile.css +1 -0
- package/dist/css/InstitutionX.css +1 -0
- package/dist/css/ReadableItem.css +8 -3
- package/dist/css/ReadableItem.min.css +1 -1
- package/dist/css/UserProfile.css +1 -0
- package/dist/css/XCard.css +1 -0
- package/dist/css/XHeader.css +1 -0
- package/dist/css/XTab.css +1 -0
- package/dist/css/index.css +4745 -1924
- package/dist/css/index.min.css +1 -1
- package/dist/index.css +1 -1
- package/dist/index.js +6933 -7209
- package/dist/index.min.css +1 -1
- package/dist/index.min.js +6 -6
- package/dist/index.umd.cjs +10 -28
- package/dist/index.umd.min.cjs +7 -7
- package/package.json +3 -3
- package/vite.config.js +7 -1
- package/vite.config.js.timestamp-1735266230435.mjs +0 -76
- package/vite.config.js.timestamp-1758276345740.mjs +0 -76
package/README.md
ADDED
|
@@ -0,0 +1,2129 @@
|
|
|
1
|
+
# Business 组件库
|
|
2
|
+
|
|
3
|
+
## 目录
|
|
4
|
+
|
|
5
|
+
- [简介](#简介)
|
|
6
|
+
- [安装](#安装)
|
|
7
|
+
- [使用方式](#使用方式)
|
|
8
|
+
- [完整引入](#完整引入)
|
|
9
|
+
- [按需引入](#按需引入)
|
|
10
|
+
- [基础UI组件](#基础ui组件)
|
|
11
|
+
- [示例](#示例)
|
|
12
|
+
- [普通组件](#普通组件)
|
|
13
|
+
- [AggsItemH(水平聚合项组件)](#aggsh)
|
|
14
|
+
- [AggsItemV(垂直聚合项组件)](#aggsv)
|
|
15
|
+
- [ReadableItem(可读项组件)](#readableitem)
|
|
16
|
+
- [BounceLoading(弹跳加载动画组件)](#bounceloading)
|
|
17
|
+
- [AppDialog(应用对话框组件)](#appdialog)
|
|
18
|
+
- [SmoothNumber(平滑数字变化组件)](#smoothnumber)
|
|
19
|
+
- [Avatar(头像组件)](#avatar)
|
|
20
|
+
- [Ripple(水波纹指令)](#ripple)
|
|
21
|
+
- [CircleTranslateButton(圆形翻译按钮组件)](#circletranslatebutton)
|
|
22
|
+
- [Annex(附件组件)](#annex)
|
|
23
|
+
- [XCard(卡片组件)](#xcard)
|
|
24
|
+
- [XHeader(头部组件)](#xheader)
|
|
25
|
+
- [XTab(标签页组件)](#xtab)
|
|
26
|
+
- [Cover(封面组件)](#cover)
|
|
27
|
+
- [WangEditor(富文本编辑器组件)](#wangeditor)
|
|
28
|
+
- [AppNumberBoard(数字面板组件)](#appnumberboard)
|
|
29
|
+
- [UserProfile(用户资料组件)](#userprofile)
|
|
30
|
+
- [InstitutionAvatar(机构头像组件)](#institutionavatar)
|
|
31
|
+
- [InstitutionProfile(机构资料组件)](#institutionprofile)
|
|
32
|
+
- [InstitutionX(机构扩展组件)](#institutionx)
|
|
33
|
+
- [Institution(机构组件)](#institution)
|
|
34
|
+
- [AuthorX(作者扩展组件)](#authorx)
|
|
35
|
+
- [Author(作者组件)](#author)
|
|
36
|
+
- [AuthorOrIns(作者或机构组件)](#authororins)
|
|
37
|
+
- [AppTip(应用提示组件)](#apptip)
|
|
38
|
+
- [DatePickerX(日期选择器扩展组件)](#datepickerx)
|
|
39
|
+
- [Keywords(关键词组件)](#keywords)
|
|
40
|
+
- [ImageViewer(图片查看器组件)](#imageviewer)
|
|
41
|
+
- [HoverCard(悬停卡片组件)](#hovercard)
|
|
42
|
+
- [FollowButton(关注按钮组件)](#followbutton)
|
|
43
|
+
- [AvatarGroup(头像组组件)](#avatargroup)
|
|
44
|
+
- [工具函数](#工具函数)
|
|
45
|
+
- [加密与哈希函数](#加密与哈希函数)
|
|
46
|
+
- [ID与字符串生成函数](#id与字符串生成函数)
|
|
47
|
+
- [数据验证与处理函数](#数据验证与处理函数)
|
|
48
|
+
- [数据转换函数](#数据转换函数)
|
|
49
|
+
- [URL与参数处理函数](#url与参数处理函数)
|
|
50
|
+
- [数据存储函数](#数据存储函数)
|
|
51
|
+
- [其他工具函数](#其他工具函数)
|
|
52
|
+
- [Base64Util(Base64编码解码工具)](#base64util)
|
|
53
|
+
- [http(HTTP请求工具)](#http)
|
|
54
|
+
- [CONSTANT(常量集合)](#constant)
|
|
55
|
+
- [ScrollTool(滚动工具)](#scrolltool)
|
|
56
|
+
- [Quote(引用工具)](#quote)
|
|
57
|
+
- [Bus(事件总线)](#bus)
|
|
58
|
+
- [HighLight(高亮工具)](#highlight)
|
|
59
|
+
- [服务模块](#服务模块)
|
|
60
|
+
- [日志服务](#日志服务)
|
|
61
|
+
- [资源导出服务](#资源导出服务)
|
|
62
|
+
- [用户服务](#用户服务)
|
|
63
|
+
- [文件服务](#文件服务)
|
|
64
|
+
- [数据统计服务](#数据统计服务)
|
|
65
|
+
- [关注服务](#关注服务)
|
|
66
|
+
- [搜索服务](#搜索服务)
|
|
67
|
+
- [指令](#指令)
|
|
68
|
+
- [v-ripple](#v-ripple)
|
|
69
|
+
- [样式](#样式)
|
|
70
|
+
- [贡献](#贡献)
|
|
71
|
+
- [许可证](#许可证)
|
|
72
|
+
|
|
73
|
+
## 简介
|
|
74
|
+
|
|
75
|
+
Business 是一个基于 Vue.js 的企业级组件库,提供了丰富的 UI 组件、工具函数和服务模块,帮助快速构建企业级应用。
|
|
76
|
+
|
|
77
|
+
## 安装
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npm install @zkwq-x/business
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 使用方式
|
|
84
|
+
|
|
85
|
+
### 完整引入
|
|
86
|
+
|
|
87
|
+
```javascript
|
|
88
|
+
import Vue from 'vue';
|
|
89
|
+
import Business from '@zkwq-x/business';
|
|
90
|
+
import '@zkwq-x/business/style/index.scss';
|
|
91
|
+
|
|
92
|
+
Vue.use(Business);
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 按需引入
|
|
96
|
+
|
|
97
|
+
```javascript
|
|
98
|
+
import { ComponentName } from '@zkwq-x/business';
|
|
99
|
+
import '@zkwq-x/business/style/index.scss';
|
|
100
|
+
|
|
101
|
+
export default {
|
|
102
|
+
components: {
|
|
103
|
+
ComponentName
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## 基础UI组件
|
|
109
|
+
|
|
110
|
+
基础UI组件使用方法与 Element-UI 完全一致,只需将 `el-` 前缀替换为 `base-` 前缀即可。
|
|
111
|
+
|
|
112
|
+
### 示例
|
|
113
|
+
|
|
114
|
+
```vue
|
|
115
|
+
<!-- Element-UI 用法 -->
|
|
116
|
+
<el-button type="primary">按钮</el-button>
|
|
117
|
+
<el-input v-model="input" placeholder="请输入内容"></el-input>
|
|
118
|
+
<el-table :data="tableData">
|
|
119
|
+
<el-table-column prop="date" label="日期"></el-table-column>
|
|
120
|
+
</el-table>
|
|
121
|
+
|
|
122
|
+
<!-- Business 组件库用法 -->
|
|
123
|
+
<base-button type="primary">按钮</base-button>
|
|
124
|
+
<base-input v-model="input" placeholder="请输入内容"></base-input>
|
|
125
|
+
<base-table :data="tableData">
|
|
126
|
+
<base-table-column prop="date" label="日期"></base-table-column>
|
|
127
|
+
</base-table>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## 普通组件
|
|
131
|
+
|
|
132
|
+
### AggsItemH
|
|
133
|
+
|
|
134
|
+
水平聚合项组件,用于展示水平排列的聚合数据。
|
|
135
|
+
|
|
136
|
+
#### Props
|
|
137
|
+
|
|
138
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
139
|
+
|------|------|------|--------|--------|
|
|
140
|
+
| title | 聚合项标题 | String | - | - |
|
|
141
|
+
| datas | 聚合数据数组 | Array | - | - |
|
|
142
|
+
| single | 是否单选模式 | Boolean | - | false |
|
|
143
|
+
| notAll | 是否不显示"全部"选项 | Boolean | - | false |
|
|
144
|
+
| checkList | 已选中的项列表 | Array | - | [] |
|
|
145
|
+
|
|
146
|
+
#### Events
|
|
147
|
+
|
|
148
|
+
| 事件名 | 说明 | 回调参数 |
|
|
149
|
+
|--------|------|----------|
|
|
150
|
+
| change | 选中项发生变化时触发 | 选中的项的key数组 |
|
|
151
|
+
|
|
152
|
+
#### 示例
|
|
153
|
+
|
|
154
|
+
```vue
|
|
155
|
+
<template>
|
|
156
|
+
<aggs-item-h
|
|
157
|
+
title="分类"
|
|
158
|
+
:datas="categories"
|
|
159
|
+
:check-list.sync="selectedCategories"
|
|
160
|
+
@change="handleCategoryChange"
|
|
161
|
+
/>
|
|
162
|
+
</template>
|
|
163
|
+
|
|
164
|
+
<script>
|
|
165
|
+
export default {
|
|
166
|
+
data() {
|
|
167
|
+
return {
|
|
168
|
+
categories: [
|
|
169
|
+
{ key: 'tech', name: '技术', value: 100 },
|
|
170
|
+
{ key: 'design', name: '设计', value: 80 },
|
|
171
|
+
{ key: 'product', name: '产品', value: 60 }
|
|
172
|
+
],
|
|
173
|
+
selectedCategories: []
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
methods: {
|
|
177
|
+
handleCategoryChange(selectedKeys) {
|
|
178
|
+
console.log('选中的分类:', selectedKeys);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
</script>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### AggsItemV
|
|
186
|
+
|
|
187
|
+
垂直聚合项组件,用于展示垂直排列的聚合数据。
|
|
188
|
+
|
|
189
|
+
#### Props
|
|
190
|
+
|
|
191
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
192
|
+
|------|------|------|--------|--------|
|
|
193
|
+
| title | 聚合项标题 | String | - | - |
|
|
194
|
+
| datas | 聚合数据数组 | Array | - | - |
|
|
195
|
+
| single | 是否单选模式 | Boolean | - | false |
|
|
196
|
+
| notAll | 是否不显示"全部"选项 | Boolean | - | false |
|
|
197
|
+
| checkList | 已选中的项列表 | Array | - | [] |
|
|
198
|
+
|
|
199
|
+
#### Events
|
|
200
|
+
|
|
201
|
+
| 事件名 | 说明 | 回调参数 |
|
|
202
|
+
|--------|------|----------|
|
|
203
|
+
| change | 选中项发生变化时触发 | 选中的项的key数组 |
|
|
204
|
+
|
|
205
|
+
#### 示例
|
|
206
|
+
|
|
207
|
+
```vue
|
|
208
|
+
<template>
|
|
209
|
+
<aggs-item-v
|
|
210
|
+
title="标签"
|
|
211
|
+
:datas="tags"
|
|
212
|
+
:check-list.sync="selectedTags"
|
|
213
|
+
@change="handleTagChange"
|
|
214
|
+
/>
|
|
215
|
+
</template>
|
|
216
|
+
|
|
217
|
+
<script>
|
|
218
|
+
export default {
|
|
219
|
+
data() {
|
|
220
|
+
return {
|
|
221
|
+
tags: [
|
|
222
|
+
{ key: 'vue', name: 'Vue', value: 100 },
|
|
223
|
+
{ key: 'react', name: 'React', value: 80 },
|
|
224
|
+
{ key: 'angular', name: 'Angular', value: 60 }
|
|
225
|
+
],
|
|
226
|
+
selectedTags: []
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
methods: {
|
|
230
|
+
handleTagChange(selectedKeys) {
|
|
231
|
+
console.log('选中的标签:', selectedKeys);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
</script>
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### ReadableItem
|
|
239
|
+
|
|
240
|
+
可读项组件,用于展示格式化的可读内容,包括作者信息、摘要、关键词等。
|
|
241
|
+
|
|
242
|
+
#### Props
|
|
243
|
+
|
|
244
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
245
|
+
|------|------|------|--------|--------|
|
|
246
|
+
| readable | 可读内容对象,包含标题、作者、摘要等信息 | Object | - | - |
|
|
247
|
+
| showCPC | 是否显示CPC(分类号)信息 | Boolean | true/false | true |
|
|
248
|
+
| authorHover | 是否启用作者悬停效果 | Boolean | true/false | true |
|
|
249
|
+
| openSearch | 是否开启搜索功能 | Boolean | true/false | false |
|
|
250
|
+
| notShowCover | 是否不显示封面图 | Boolean | true/false | false |
|
|
251
|
+
|
|
252
|
+
#### Events
|
|
253
|
+
|
|
254
|
+
| 事件名 | 说明 | 参数 |
|
|
255
|
+
|--------|------|------|
|
|
256
|
+
| skip | 跳转事件,当用户点击跳转链接时触发 | type - 跳转类型, scholar - 学者对象 |
|
|
257
|
+
| follow | 关注事件,当用户点击关注按钮时触发 | scholar - 被关注的学者对象 |
|
|
258
|
+
| disfollow | 取消关注事件,当用户点击取消关注按钮时触发 | scholar - 被取消关注的学者对象 |
|
|
259
|
+
|
|
260
|
+
#### 方法
|
|
261
|
+
|
|
262
|
+
| 方法名 | 说明 | 参数 |
|
|
263
|
+
|--------|------|------|
|
|
264
|
+
| handleSkip | 处理跳转事件 | type - 跳转类型, scholar - 学者对象 |
|
|
265
|
+
| handleFollow | 处理关注事件 | scholar - 学者对象 |
|
|
266
|
+
| handleDisfollow | 处理取消关注事件 | scholar - 学者对象 |
|
|
267
|
+
| handleMore | 展开完整摘要 | - |
|
|
268
|
+
| handLess | 收起摘要 | - |
|
|
269
|
+
| showAllAuthor | 显示所有作者 | - |
|
|
270
|
+
|
|
271
|
+
#### 示例
|
|
272
|
+
|
|
273
|
+
```vue
|
|
274
|
+
<template>
|
|
275
|
+
<readable-item
|
|
276
|
+
:readable="readableData"
|
|
277
|
+
:showCPC="true"
|
|
278
|
+
:authorHover="true"
|
|
279
|
+
:openSearch="false"
|
|
280
|
+
:notShowCover="false"
|
|
281
|
+
@skip="handleSkipEvent"
|
|
282
|
+
@follow="handleFollowEvent"
|
|
283
|
+
@disfollow="handleDisfollowEvent"
|
|
284
|
+
/>
|
|
285
|
+
</template>
|
|
286
|
+
|
|
287
|
+
<script>
|
|
288
|
+
export default {
|
|
289
|
+
data() {
|
|
290
|
+
return {
|
|
291
|
+
readableData: {
|
|
292
|
+
title: "论文标题",
|
|
293
|
+
authors: [
|
|
294
|
+
{ name: "作者1", id: "1" },
|
|
295
|
+
{ name: "作者2", id: "2" }
|
|
296
|
+
],
|
|
297
|
+
abstract: "论文摘要内容...",
|
|
298
|
+
keywords: ["关键词1", "关键词2"],
|
|
299
|
+
doi: "10.1000/182",
|
|
300
|
+
publish_time: "2023-01-01",
|
|
301
|
+
source: "期刊名称",
|
|
302
|
+
cpc: ["G06F 16/9535"]
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
methods: {
|
|
307
|
+
handleSkipEvent(type, scholar) {
|
|
308
|
+
console.log('跳转事件:', type, scholar);
|
|
309
|
+
},
|
|
310
|
+
handleFollowEvent(scholar) {
|
|
311
|
+
console.log('关注学者:', scholar);
|
|
312
|
+
},
|
|
313
|
+
handleDisfollowEvent(scholar) {
|
|
314
|
+
console.log('取消关注学者:', scholar);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
</script>
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### BounceLoading
|
|
322
|
+
|
|
323
|
+
弹跳加载动画组件。
|
|
324
|
+
|
|
325
|
+
#### 示例
|
|
326
|
+
|
|
327
|
+
```vue
|
|
328
|
+
<template>
|
|
329
|
+
<bounce-loading />
|
|
330
|
+
</template>
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### AppDialog
|
|
334
|
+
|
|
335
|
+
应用对话框组件。
|
|
336
|
+
|
|
337
|
+
#### Props
|
|
338
|
+
|
|
339
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
340
|
+
|------|------|------|--------|--------|
|
|
341
|
+
| originTitle | 标题是否靠左显示 | Boolean | - | false |
|
|
342
|
+
| dialogTitle | 对话框标题 | String | - | - |
|
|
343
|
+
| dialogSubtitle | 对话框副标题 | String | - | - |
|
|
344
|
+
| staticDialog | 是否静态对话框(不可点击遮罩关闭) | Boolean | - | false |
|
|
345
|
+
| width | 对话框宽度 | String | - | '536px' |
|
|
346
|
+
| top | 对话框距离顶部的距离 | String | - | '15vh' |
|
|
347
|
+
| appendToBody | 是否将对话框插入至 body 元素上 | Boolean | - | true |
|
|
348
|
+
| autoHide | 点击关闭按钮时是否自动隐藏 | Boolean | - | true |
|
|
349
|
+
| hideCloseButton | 是否隐藏关闭按钮 | Boolean | - | false |
|
|
350
|
+
| fullPage | 是否全屏显示 | Boolean | - | false |
|
|
351
|
+
| customClass | 自定义类名 | String | - | - |
|
|
352
|
+
| dialogClass | 对话框自定义类名 | String | - | - |
|
|
353
|
+
| modalClass | 遮罩自定义类名 | String | - | - |
|
|
354
|
+
| destroyOnClose | 关闭时销毁对话框中的元素 | Boolean | - | false |
|
|
355
|
+
|
|
356
|
+
#### Events
|
|
357
|
+
|
|
358
|
+
| 事件名 | 说明 | 回调参数 |
|
|
359
|
+
|--------|------|----------|
|
|
360
|
+
| hide | 点击关闭按钮时触发 | - |
|
|
361
|
+
| on-scroll | 滚动时触发 | (moveY: number) |
|
|
362
|
+
|
|
363
|
+
#### Methods
|
|
364
|
+
|
|
365
|
+
| 方法名 | 说明 | 参数 |
|
|
366
|
+
|--------|------|------|
|
|
367
|
+
| show | 显示对话框 | - |
|
|
368
|
+
| hide | 隐藏对话框 | - |
|
|
369
|
+
| scrollTop | 滚动到顶部 | - |
|
|
370
|
+
| scrollBottom | 滚动到底部 | - |
|
|
371
|
+
|
|
372
|
+
#### 示例
|
|
373
|
+
|
|
374
|
+
```vue
|
|
375
|
+
<template>
|
|
376
|
+
<div>
|
|
377
|
+
<base-button @click="showDialog = true">显示对话框</base-button>
|
|
378
|
+
<app-dialog
|
|
379
|
+
v-model="showDialog"
|
|
380
|
+
dialog-title="提示"
|
|
381
|
+
dialog-subtitle="这是一个对话框副标题"
|
|
382
|
+
@hide="handleHide"
|
|
383
|
+
>
|
|
384
|
+
<p>这是对话框内容</p>
|
|
385
|
+
<base-button @click="hideDialog">关闭</base-button>
|
|
386
|
+
</app-dialog>
|
|
387
|
+
</div>
|
|
388
|
+
</template>
|
|
389
|
+
|
|
390
|
+
<script>
|
|
391
|
+
export default {
|
|
392
|
+
data() {
|
|
393
|
+
return {
|
|
394
|
+
showDialog: false
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
methods: {
|
|
398
|
+
hideDialog() {
|
|
399
|
+
this.showDialog = false;
|
|
400
|
+
},
|
|
401
|
+
handleHide() {
|
|
402
|
+
console.log('对话框关闭');
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
</script>
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### SmoothNumber
|
|
410
|
+
|
|
411
|
+
平滑数字变化组件。
|
|
412
|
+
|
|
413
|
+
#### Props
|
|
414
|
+
|
|
415
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
416
|
+
|------|------|------|--------|--------|
|
|
417
|
+
| value | 目标数值 | Number | - | - |
|
|
418
|
+
| duration | 动画持续时间(毫秒) | Number | - | 1000 |
|
|
419
|
+
|
|
420
|
+
#### 示例
|
|
421
|
+
|
|
422
|
+
```vue
|
|
423
|
+
<template>
|
|
424
|
+
<smooth-number :value="number" :duration="1000" />
|
|
425
|
+
<base-button @click="number += 100">增加100</base-button>
|
|
426
|
+
</template>
|
|
427
|
+
|
|
428
|
+
<script>
|
|
429
|
+
export default {
|
|
430
|
+
data() {
|
|
431
|
+
return {
|
|
432
|
+
number: 1000
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
</script>
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
### Avatar
|
|
440
|
+
|
|
441
|
+
头像组件。
|
|
442
|
+
|
|
443
|
+
#### Props
|
|
444
|
+
|
|
445
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
446
|
+
|------|------|------|--------|--------|
|
|
447
|
+
| url | 头像图片URL | String | - | - |
|
|
448
|
+
| size | 头像大小(像素) | Number | - | 0 |
|
|
449
|
+
| round | 是否圆形头像 | Boolean | - | false |
|
|
450
|
+
| pointer | 是否显示指针样式 | Boolean | - | true |
|
|
451
|
+
|
|
452
|
+
#### 示例
|
|
453
|
+
|
|
454
|
+
```vue
|
|
455
|
+
<template>
|
|
456
|
+
<div>
|
|
457
|
+
<avatar :src="avatarUrl" :size="40" />
|
|
458
|
+
<avatar :src="avatarUrl" :size="60" :round="true" />
|
|
459
|
+
<avatar :size="80" />
|
|
460
|
+
</div>
|
|
461
|
+
</template>
|
|
462
|
+
|
|
463
|
+
<script>
|
|
464
|
+
export default {
|
|
465
|
+
data() {
|
|
466
|
+
return {
|
|
467
|
+
avatarUrl: 'https://example.com/avatar.jpg'
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
</script>
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### Ripple
|
|
475
|
+
|
|
476
|
+
水波纹指令。
|
|
477
|
+
|
|
478
|
+
#### 示例
|
|
479
|
+
|
|
480
|
+
```vue
|
|
481
|
+
<template>
|
|
482
|
+
<button v-ipple>点击我</button>
|
|
483
|
+
</template>
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
### CircleTranslateButton
|
|
487
|
+
|
|
488
|
+
圆形翻译按钮组件。
|
|
489
|
+
|
|
490
|
+
#### Props
|
|
491
|
+
|
|
492
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
493
|
+
|------|------|------|--------|--------|
|
|
494
|
+
| text | 要翻译的文本 | String | - | - |
|
|
495
|
+
|
|
496
|
+
#### Events
|
|
497
|
+
|
|
498
|
+
| 事件名 | 说明 | 回调参数 |
|
|
499
|
+
|--------|------|----------|
|
|
500
|
+
| translate | 点击翻译按钮时触发 | (text: string) |
|
|
501
|
+
|
|
502
|
+
#### 示例
|
|
503
|
+
|
|
504
|
+
```vue
|
|
505
|
+
<template>
|
|
506
|
+
<circle-translate-button text="Hello World" @translate="handleTranslate" />
|
|
507
|
+
</template>
|
|
508
|
+
|
|
509
|
+
<script>
|
|
510
|
+
export default {
|
|
511
|
+
methods: {
|
|
512
|
+
handleTranslate(text) {
|
|
513
|
+
console.log('翻译文本:', text);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
</script>
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
### Annex
|
|
521
|
+
|
|
522
|
+
附件组件。
|
|
523
|
+
|
|
524
|
+
#### Props
|
|
525
|
+
|
|
526
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
527
|
+
|------|------|------|--------|--------|
|
|
528
|
+
| files | 文件列表 | Array | - | - |
|
|
529
|
+
|
|
530
|
+
#### Events
|
|
531
|
+
|
|
532
|
+
| 事件名 | 说明 | 回调参数 |
|
|
533
|
+
|--------|------|----------|
|
|
534
|
+
| remove | 移除文件时触发 | (file: object) |
|
|
535
|
+
|
|
536
|
+
#### 示例
|
|
537
|
+
|
|
538
|
+
```vue
|
|
539
|
+
<template>
|
|
540
|
+
<annex :files="fileList" @remove="handleRemove" />
|
|
541
|
+
</template>
|
|
542
|
+
|
|
543
|
+
<script>
|
|
544
|
+
export default {
|
|
545
|
+
data() {
|
|
546
|
+
return {
|
|
547
|
+
fileList: [
|
|
548
|
+
{ name: 'document.pdf', url: 'https://example.com/document.pdf' }
|
|
549
|
+
]
|
|
550
|
+
}
|
|
551
|
+
},
|
|
552
|
+
methods: {
|
|
553
|
+
handleRemove(file) {
|
|
554
|
+
console.log('移除文件:', file);
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
</script>
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
### XCard
|
|
562
|
+
|
|
563
|
+
卡片组件。
|
|
564
|
+
|
|
565
|
+
#### Props
|
|
566
|
+
|
|
567
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
568
|
+
|------|------|------|--------|--------|
|
|
569
|
+
| title | 卡片标题 | String | - | - |
|
|
570
|
+
| shadow | 阴影显示时机 | String/Boolean | never/always/hover/false | false |
|
|
571
|
+
| border | 是否显示边框 | Boolean | - | false |
|
|
572
|
+
| headerStyle | 头部样式 | Object | - | - |
|
|
573
|
+
| coverStyle | 封面样式 | Object | - | - |
|
|
574
|
+
| contentStyle | 内容样式 | Object | - | - |
|
|
575
|
+
| footerStyle | 底部样式 | Object | - | - |
|
|
576
|
+
| actionStyle | 操作区样式 | Object | - | - |
|
|
577
|
+
|
|
578
|
+
#### Slots
|
|
579
|
+
|
|
580
|
+
| 插槽名 | 说明 |
|
|
581
|
+
|--------|------|
|
|
582
|
+
| header | 卡片头部内容 |
|
|
583
|
+
| extra | 卡片头部右侧操作区 |
|
|
584
|
+
| cover | 卡片封面内容 |
|
|
585
|
+
| default | 卡片主体内容 |
|
|
586
|
+
| footer | 卡片底部内容 |
|
|
587
|
+
| action | 卡片操作区内容 |
|
|
588
|
+
|
|
589
|
+
#### 示例
|
|
590
|
+
|
|
591
|
+
```vue
|
|
592
|
+
<template>
|
|
593
|
+
<x-card title="卡片标题" :shadow="true" :border="true">
|
|
594
|
+
<template v-slot:extra>
|
|
595
|
+
<base-button size="mini">更多</base-button>
|
|
596
|
+
</template>
|
|
597
|
+
<p>这是卡片内容</p>
|
|
598
|
+
<template v-slot:footer>
|
|
599
|
+
<base-button>确定</base-button>
|
|
600
|
+
<base-button type="text">取消</base-button>
|
|
601
|
+
</template>
|
|
602
|
+
</x-card>
|
|
603
|
+
</template>
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
### XHeader
|
|
607
|
+
|
|
608
|
+
头部组件。
|
|
609
|
+
|
|
610
|
+
#### Props
|
|
611
|
+
|
|
612
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
613
|
+
|------|------|------|--------|--------|
|
|
614
|
+
| back | 是否显示返回按钮 | Boolean | - | false |
|
|
615
|
+
| backText | 返回按钮文本 | String | - | '返回' |
|
|
616
|
+
| backIcon | 返回按钮图标 | String | - | 'back' |
|
|
617
|
+
| backHome | 返回按钮点击回调 | Function | - | - |
|
|
618
|
+
|
|
619
|
+
#### Slots
|
|
620
|
+
|
|
621
|
+
| 插槽名 | 说明 |
|
|
622
|
+
|--------|------|
|
|
623
|
+
| back | 自定义返回按钮内容 |
|
|
624
|
+
| default | 头部右侧内容 |
|
|
625
|
+
|
|
626
|
+
#### 示例
|
|
627
|
+
|
|
628
|
+
```vue
|
|
629
|
+
<template>
|
|
630
|
+
<x-header :back="true" back-home="handleBackHome">
|
|
631
|
+
<base-button>操作</base-button>
|
|
632
|
+
</x-header>
|
|
633
|
+
</template>
|
|
634
|
+
|
|
635
|
+
<script>
|
|
636
|
+
export default {
|
|
637
|
+
methods: {
|
|
638
|
+
handleBackHome() {
|
|
639
|
+
this.$router.push('/');
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
</script>
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
### XTab
|
|
647
|
+
|
|
648
|
+
标签页组件。
|
|
649
|
+
|
|
650
|
+
#### Props
|
|
651
|
+
|
|
652
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
653
|
+
|------|------|------|--------|--------|
|
|
654
|
+
| data | 标签页数据 | Array | - | [{name:'菜单1',value:'菜单1'},{name:'菜单2',value:'菜单2'}] |
|
|
655
|
+
| actived | 当前激活的标签页 | String/Number | - | - |
|
|
656
|
+
| vertical | 是否垂直显示 | Boolean | - | false |
|
|
657
|
+
|
|
658
|
+
#### Events
|
|
659
|
+
|
|
660
|
+
| 事件名 | 说明 | 回调参数 |
|
|
661
|
+
|--------|------|----------|
|
|
662
|
+
| change | 切换标签页时触发 | (value: string/number) |
|
|
663
|
+
|
|
664
|
+
#### Slots
|
|
665
|
+
|
|
666
|
+
| 插槽名 | 说明 | 作用域参数 |
|
|
667
|
+
|--------|------|------------|
|
|
668
|
+
| default | 标签页内容 | item: 标签页数据对象 |
|
|
669
|
+
|
|
670
|
+
#### 示例
|
|
671
|
+
|
|
672
|
+
```vue
|
|
673
|
+
<template>
|
|
674
|
+
<div>
|
|
675
|
+
<x-tab v-model="activeTab" :data="tabs" @change="handleTabChange">
|
|
676
|
+
<template v-slot:default="{ item }">
|
|
677
|
+
{{ item.name }}
|
|
678
|
+
</template>
|
|
679
|
+
</x-tab>
|
|
680
|
+
<div v-if="activeTab === 'tab1'">
|
|
681
|
+
<p>标签页1内容</p>
|
|
682
|
+
</div>
|
|
683
|
+
<div v-if="activeTab === 'tab2'">
|
|
684
|
+
<p>标签页2内容</p>
|
|
685
|
+
</div>
|
|
686
|
+
</div>
|
|
687
|
+
</template>
|
|
688
|
+
|
|
689
|
+
<script>
|
|
690
|
+
export default {
|
|
691
|
+
data() {
|
|
692
|
+
return {
|
|
693
|
+
activeTab: 'tab1',
|
|
694
|
+
tabs: [
|
|
695
|
+
{ name: '标签1', value: 'tab1' },
|
|
696
|
+
{ name: '标签2', value: 'tab2' }
|
|
697
|
+
]
|
|
698
|
+
}
|
|
699
|
+
},
|
|
700
|
+
methods: {
|
|
701
|
+
handleTabChange(value) {
|
|
702
|
+
console.log('切换到标签:', value);
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
</script>
|
|
707
|
+
```
|
|
708
|
+
|
|
709
|
+
### Cover
|
|
710
|
+
|
|
711
|
+
封面组件。
|
|
712
|
+
|
|
713
|
+
#### Props
|
|
714
|
+
|
|
715
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
716
|
+
|------|------|------|--------|--------|
|
|
717
|
+
| src | 封面图片URL | String | - | - |
|
|
718
|
+
| title | 封面标题 | String | - | - |
|
|
719
|
+
|
|
720
|
+
#### 示例
|
|
721
|
+
|
|
722
|
+
```vue
|
|
723
|
+
<template>
|
|
724
|
+
<cover :src="coverUrl" :title="title" />
|
|
725
|
+
</template>
|
|
726
|
+
|
|
727
|
+
<script>
|
|
728
|
+
export default {
|
|
729
|
+
data() {
|
|
730
|
+
return {
|
|
731
|
+
coverUrl: 'https://example.com/cover.jpg',
|
|
732
|
+
title: '封面标题'
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
</script>
|
|
737
|
+
```
|
|
738
|
+
|
|
739
|
+
### WangEditor
|
|
740
|
+
|
|
741
|
+
富文本编辑器组件。
|
|
742
|
+
|
|
743
|
+
#### Props
|
|
744
|
+
|
|
745
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
746
|
+
|------|------|------|--------|--------|
|
|
747
|
+
| userId | 用户ID(必需) | String | - | - |
|
|
748
|
+
| value | 编辑器内容 | String | - | '' |
|
|
749
|
+
| placeholder | 占位符文本 | String | - | '' |
|
|
750
|
+
| plugins | 插件列表 | Array | - | [] |
|
|
751
|
+
|
|
752
|
+
#### Events
|
|
753
|
+
|
|
754
|
+
| 事件名 | 说明 | 回调参数 |
|
|
755
|
+
|--------|------|----------|
|
|
756
|
+
| update:value | 内容变化时触发 | (value: string) |
|
|
757
|
+
|
|
758
|
+
#### 示例
|
|
759
|
+
|
|
760
|
+
```vue
|
|
761
|
+
<template>
|
|
762
|
+
<wang-editor
|
|
763
|
+
v-model="content"
|
|
764
|
+
:user-id="userId"
|
|
765
|
+
placeholder="请输入内容"
|
|
766
|
+
/>
|
|
767
|
+
</template>
|
|
768
|
+
|
|
769
|
+
<script>
|
|
770
|
+
export default {
|
|
771
|
+
data() {
|
|
772
|
+
return {
|
|
773
|
+
content: '<p>初始内容</p>',
|
|
774
|
+
userId: 'user123'
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
</script>
|
|
779
|
+
```
|
|
780
|
+
|
|
781
|
+
### AppNumberBoard
|
|
782
|
+
|
|
783
|
+
数字面板组件。
|
|
784
|
+
|
|
785
|
+
#### Props
|
|
786
|
+
|
|
787
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
788
|
+
|------|------|------|--------|--------|
|
|
789
|
+
| numbers | 数字数据数组 | Array | - | - |
|
|
790
|
+
|
|
791
|
+
#### 示例
|
|
792
|
+
|
|
793
|
+
```vue
|
|
794
|
+
<template>
|
|
795
|
+
<app-number-board :numbers="numbers" />
|
|
796
|
+
</template>
|
|
797
|
+
|
|
798
|
+
<script>
|
|
799
|
+
export default {
|
|
800
|
+
data() {
|
|
801
|
+
return {
|
|
802
|
+
numbers: [
|
|
803
|
+
{ label: '访问量', value: 1234 },
|
|
804
|
+
{ label: '用户数', value: 567 }
|
|
805
|
+
]
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
</script>
|
|
810
|
+
```
|
|
811
|
+
|
|
812
|
+
### UserProfile
|
|
813
|
+
|
|
814
|
+
用户资料组件。
|
|
815
|
+
|
|
816
|
+
#### Props
|
|
817
|
+
|
|
818
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
819
|
+
|------|------|------|--------|--------|
|
|
820
|
+
| profile | 用户资料对象 | Object | - | - |
|
|
821
|
+
| avatarSize | 头像大小 | Number | - | 60 |
|
|
822
|
+
| avatarRound | 是否圆形头像 | Boolean | - | false |
|
|
823
|
+
| themeLight | 是否使用浅色主题 | Boolean | - | false |
|
|
824
|
+
| disableTitle | 是否禁用职称显示 | Boolean | - | false |
|
|
825
|
+
| disableInstitution | 是否禁用机构显示 | Boolean | - | false |
|
|
826
|
+
| disableEmail | 是否禁用邮箱显示 | Boolean | - | false |
|
|
827
|
+
|
|
828
|
+
#### 示例
|
|
829
|
+
|
|
830
|
+
```vue
|
|
831
|
+
<template>
|
|
832
|
+
<user-profile
|
|
833
|
+
:user-info="userInfo"
|
|
834
|
+
:avatar-size="80"
|
|
835
|
+
:avatar-round="true"
|
|
836
|
+
/>
|
|
837
|
+
</template>
|
|
838
|
+
|
|
839
|
+
<script>
|
|
840
|
+
export default {
|
|
841
|
+
data() {
|
|
842
|
+
return {
|
|
843
|
+
userInfo: {
|
|
844
|
+
name: '张三',
|
|
845
|
+
avatar: 'https://example.com/avatar.jpg',
|
|
846
|
+
email: 'zhangsan@example.com',
|
|
847
|
+
professional_title: ['高级工程师'],
|
|
848
|
+
position: ['前端开发'],
|
|
849
|
+
affiliation: ['示例公司']
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
</script>
|
|
855
|
+
```
|
|
856
|
+
|
|
857
|
+
### InstitutionAvatar
|
|
858
|
+
|
|
859
|
+
机构头像组件。
|
|
860
|
+
|
|
861
|
+
#### Props
|
|
862
|
+
|
|
863
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
864
|
+
|------|------|------|--------|--------|
|
|
865
|
+
| src | 头像图片URL | String | - | - |
|
|
866
|
+
| name | 机构名称 | String | - | - |
|
|
867
|
+
|
|
868
|
+
#### 示例
|
|
869
|
+
|
|
870
|
+
```vue
|
|
871
|
+
<template>
|
|
872
|
+
<institution-avatar :src="logoUrl" :name="institutionName" />
|
|
873
|
+
</template>
|
|
874
|
+
|
|
875
|
+
<script>
|
|
876
|
+
export default {
|
|
877
|
+
data() {
|
|
878
|
+
return {
|
|
879
|
+
logoUrl: 'https://example.com/logo.jpg',
|
|
880
|
+
institutionName: '示例机构'
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
</script>
|
|
885
|
+
```
|
|
886
|
+
|
|
887
|
+
### InstitutionProfile
|
|
888
|
+
|
|
889
|
+
机构资料组件。
|
|
890
|
+
|
|
891
|
+
#### Props
|
|
892
|
+
|
|
893
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
894
|
+
|------|------|------|--------|--------|
|
|
895
|
+
| institution | 机构资料对象 | Object | - | - |
|
|
896
|
+
|
|
897
|
+
#### 示例
|
|
898
|
+
|
|
899
|
+
```vue
|
|
900
|
+
<template>
|
|
901
|
+
<institution-profile :institution="institutionInfo" />
|
|
902
|
+
</template>
|
|
903
|
+
|
|
904
|
+
<script>
|
|
905
|
+
export default {
|
|
906
|
+
data() {
|
|
907
|
+
return {
|
|
908
|
+
institutionInfo: {
|
|
909
|
+
name: '示例机构',
|
|
910
|
+
logo: 'https://example.com/logo.jpg',
|
|
911
|
+
description: '这是一个示例机构'
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
</script>
|
|
917
|
+
```
|
|
918
|
+
|
|
919
|
+
### InstitutionX
|
|
920
|
+
|
|
921
|
+
机构扩展组件。
|
|
922
|
+
|
|
923
|
+
#### Props
|
|
924
|
+
|
|
925
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
926
|
+
|------|------|------|--------|--------|
|
|
927
|
+
| institution | 机构数据对象 | Object | - | - |
|
|
928
|
+
|
|
929
|
+
#### 示例
|
|
930
|
+
|
|
931
|
+
```vue
|
|
932
|
+
<template>
|
|
933
|
+
<institution-x :institution="institutionInfo" />
|
|
934
|
+
</template>
|
|
935
|
+
|
|
936
|
+
<script>
|
|
937
|
+
export default {
|
|
938
|
+
data() {
|
|
939
|
+
return {
|
|
940
|
+
institutionInfo: {
|
|
941
|
+
name: '示例机构',
|
|
942
|
+
logo: 'https://example.com/logo.jpg'
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
</script>
|
|
948
|
+
```
|
|
949
|
+
|
|
950
|
+
### Institution
|
|
951
|
+
|
|
952
|
+
机构组件。
|
|
953
|
+
|
|
954
|
+
#### Props
|
|
955
|
+
|
|
956
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
957
|
+
|------|------|------|--------|--------|
|
|
958
|
+
| data | 机构数据对象 | Object | - | - |
|
|
959
|
+
|
|
960
|
+
#### 示例
|
|
961
|
+
|
|
962
|
+
```vue
|
|
963
|
+
<template>
|
|
964
|
+
<institution :data="institutionData" />
|
|
965
|
+
</template>
|
|
966
|
+
|
|
967
|
+
<script>
|
|
968
|
+
export default {
|
|
969
|
+
data() {
|
|
970
|
+
return {
|
|
971
|
+
institutionData: {
|
|
972
|
+
name: '示例机构',
|
|
973
|
+
description: '机构描述'
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
</script>
|
|
979
|
+
```
|
|
980
|
+
|
|
981
|
+
### AuthorX
|
|
982
|
+
|
|
983
|
+
作者扩展组件。
|
|
984
|
+
|
|
985
|
+
#### Props
|
|
986
|
+
|
|
987
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
988
|
+
|------|------|------|--------|--------|
|
|
989
|
+
| author | 作者数据对象 | Object | - | - |
|
|
990
|
+
|
|
991
|
+
#### 示例
|
|
992
|
+
|
|
993
|
+
```vue
|
|
994
|
+
<template>
|
|
995
|
+
<author-x :author="authorInfo" />
|
|
996
|
+
</template>
|
|
997
|
+
|
|
998
|
+
<script>
|
|
999
|
+
export default {
|
|
1000
|
+
data() {
|
|
1001
|
+
return {
|
|
1002
|
+
authorInfo: {
|
|
1003
|
+
name: '张三',
|
|
1004
|
+
avatar: 'https://example.com/avatar.jpg'
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
</script>
|
|
1010
|
+
```
|
|
1011
|
+
|
|
1012
|
+
### Author
|
|
1013
|
+
|
|
1014
|
+
作者组件。
|
|
1015
|
+
|
|
1016
|
+
#### Props
|
|
1017
|
+
|
|
1018
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
1019
|
+
|------|------|------|--------|--------|
|
|
1020
|
+
| data | 作者数据对象 | Object | - | - |
|
|
1021
|
+
|
|
1022
|
+
#### 示例
|
|
1023
|
+
|
|
1024
|
+
```vue
|
|
1025
|
+
<template>
|
|
1026
|
+
<author :data="authorData" />
|
|
1027
|
+
</template>
|
|
1028
|
+
|
|
1029
|
+
<script>
|
|
1030
|
+
export default {
|
|
1031
|
+
data() {
|
|
1032
|
+
return {
|
|
1033
|
+
authorData: {
|
|
1034
|
+
name: '张三',
|
|
1035
|
+
description: '作者描述'
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
</script>
|
|
1041
|
+
```
|
|
1042
|
+
|
|
1043
|
+
### AuthorOrIns
|
|
1044
|
+
|
|
1045
|
+
作者或机构组件。
|
|
1046
|
+
|
|
1047
|
+
#### Props
|
|
1048
|
+
|
|
1049
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
1050
|
+
|------|------|------|--------|--------|
|
|
1051
|
+
| data | 数据对象 | Object | - | - |
|
|
1052
|
+
|
|
1053
|
+
#### 示例
|
|
1054
|
+
|
|
1055
|
+
```vue
|
|
1056
|
+
<template>
|
|
1057
|
+
<author-or-ins :data="data" />
|
|
1058
|
+
</template>
|
|
1059
|
+
|
|
1060
|
+
<script>
|
|
1061
|
+
export default {
|
|
1062
|
+
data() {
|
|
1063
|
+
return {
|
|
1064
|
+
data: {
|
|
1065
|
+
type: 'author', // 或 'institution'
|
|
1066
|
+
name: '张三',
|
|
1067
|
+
avatar: 'https://example.com/avatar.jpg'
|
|
1068
|
+
}
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
</script>
|
|
1073
|
+
```
|
|
1074
|
+
|
|
1075
|
+
### AppTip
|
|
1076
|
+
|
|
1077
|
+
应用提示组件。
|
|
1078
|
+
|
|
1079
|
+
#### Props
|
|
1080
|
+
|
|
1081
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
1082
|
+
|------|------|------|--------|--------|
|
|
1083
|
+
| type | 提示类型 | String | info/success/warning/error | info |
|
|
1084
|
+
| closable | 是否可关闭 | Boolean | - | true |
|
|
1085
|
+
|
|
1086
|
+
#### 示例
|
|
1087
|
+
|
|
1088
|
+
```vue
|
|
1089
|
+
<template>
|
|
1090
|
+
<app-tip type="info" :closable="true">
|
|
1091
|
+
这是一个提示信息
|
|
1092
|
+
</app-tip>
|
|
1093
|
+
</template>
|
|
1094
|
+
```
|
|
1095
|
+
|
|
1096
|
+
### DatePickerX
|
|
1097
|
+
|
|
1098
|
+
日期选择器扩展组件。
|
|
1099
|
+
|
|
1100
|
+
#### Props
|
|
1101
|
+
|
|
1102
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
1103
|
+
|------|------|------|--------|--------|
|
|
1104
|
+
| value | 选中日期 | Date | - | - |
|
|
1105
|
+
|
|
1106
|
+
#### Events
|
|
1107
|
+
|
|
1108
|
+
| 事件名 | 说明 | 回调参数 |
|
|
1109
|
+
|--------|------|----------|
|
|
1110
|
+
| input | 选中日期变化时触发 | (date: Date) |
|
|
1111
|
+
|
|
1112
|
+
#### 示例
|
|
1113
|
+
|
|
1114
|
+
```vue
|
|
1115
|
+
<template>
|
|
1116
|
+
<date-picker-x v-model="date" />
|
|
1117
|
+
</template>
|
|
1118
|
+
|
|
1119
|
+
<script>
|
|
1120
|
+
export default {
|
|
1121
|
+
data() {
|
|
1122
|
+
return {
|
|
1123
|
+
date: new Date()
|
|
1124
|
+
}
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
</script>
|
|
1128
|
+
```
|
|
1129
|
+
|
|
1130
|
+
### Keywords
|
|
1131
|
+
|
|
1132
|
+
关键词组件。
|
|
1133
|
+
|
|
1134
|
+
#### Props
|
|
1135
|
+
|
|
1136
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
1137
|
+
|------|------|------|--------|--------|
|
|
1138
|
+
| words | 关键词数组 | Array | - | - |
|
|
1139
|
+
|
|
1140
|
+
#### Events
|
|
1141
|
+
|
|
1142
|
+
| 事件名 | 说明 | 回调参数 |
|
|
1143
|
+
|--------|------|----------|
|
|
1144
|
+
| click | 点击关键词时触发 | (keyword: string) |
|
|
1145
|
+
|
|
1146
|
+
#### 示例
|
|
1147
|
+
|
|
1148
|
+
```vue
|
|
1149
|
+
<template>
|
|
1150
|
+
<keywords :words="keywords" @click="handleKeywordClick" />
|
|
1151
|
+
</template>
|
|
1152
|
+
|
|
1153
|
+
<script>
|
|
1154
|
+
export default {
|
|
1155
|
+
data() {
|
|
1156
|
+
return {
|
|
1157
|
+
keywords: ['Vue', 'React', 'Angular']
|
|
1158
|
+
}
|
|
1159
|
+
},
|
|
1160
|
+
methods: {
|
|
1161
|
+
handleKeywordClick(keyword) {
|
|
1162
|
+
console.log('点击关键词:', keyword);
|
|
1163
|
+
}
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
</script>
|
|
1167
|
+
```
|
|
1168
|
+
|
|
1169
|
+
### ImageViewer
|
|
1170
|
+
|
|
1171
|
+
图片查看器组件。
|
|
1172
|
+
|
|
1173
|
+
#### Props
|
|
1174
|
+
|
|
1175
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
1176
|
+
|------|------|------|--------|--------|
|
|
1177
|
+
| url | 图片URL | String | - | - |
|
|
1178
|
+
| visible | 是否显示查看器 | Boolean | - | false |
|
|
1179
|
+
|
|
1180
|
+
#### Events
|
|
1181
|
+
|
|
1182
|
+
| 事件名 | 说明 | 回调参数 |
|
|
1183
|
+
|--------|------|----------|
|
|
1184
|
+
| close | 关闭查看器时触发 | - |
|
|
1185
|
+
|
|
1186
|
+
#### 示例
|
|
1187
|
+
|
|
1188
|
+
```vue
|
|
1189
|
+
<template>
|
|
1190
|
+
<div>
|
|
1191
|
+
<base-button @click="showViewer">查看图片</base-button>
|
|
1192
|
+
<image-viewer
|
|
1193
|
+
:url="imageUrl"
|
|
1194
|
+
:visible="visible"
|
|
1195
|
+
@close="handleClose"
|
|
1196
|
+
/>
|
|
1197
|
+
</div>
|
|
1198
|
+
</template>
|
|
1199
|
+
|
|
1200
|
+
<script>
|
|
1201
|
+
export default {
|
|
1202
|
+
data() {
|
|
1203
|
+
return {
|
|
1204
|
+
imageUrl: 'https://example.com/image.jpg',
|
|
1205
|
+
visible: false
|
|
1206
|
+
}
|
|
1207
|
+
},
|
|
1208
|
+
methods: {
|
|
1209
|
+
showViewer() {
|
|
1210
|
+
this.visible = true;
|
|
1211
|
+
},
|
|
1212
|
+
handleClose() {
|
|
1213
|
+
this.visible = false;
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
1217
|
+
</script>
|
|
1218
|
+
```
|
|
1219
|
+
|
|
1220
|
+
### HoverCard
|
|
1221
|
+
|
|
1222
|
+
悬停卡片组件。
|
|
1223
|
+
|
|
1224
|
+
#### Slots
|
|
1225
|
+
|
|
1226
|
+
| 插槽名 | 说明 |
|
|
1227
|
+
|--------|------|
|
|
1228
|
+
| trigger | 触发悬停的内容 |
|
|
1229
|
+
| content | 悬停显示的内容 |
|
|
1230
|
+
|
|
1231
|
+
#### 示例
|
|
1232
|
+
|
|
1233
|
+
```vue
|
|
1234
|
+
<template>
|
|
1235
|
+
<hover-card>
|
|
1236
|
+
<template v-slot:trigger>
|
|
1237
|
+
<button>悬停查看</button>
|
|
1238
|
+
</template>
|
|
1239
|
+
<template v-slot:content>
|
|
1240
|
+
<p>这是悬停显示的内容</p>
|
|
1241
|
+
</template>
|
|
1242
|
+
</hover-card>
|
|
1243
|
+
</template>
|
|
1244
|
+
```
|
|
1245
|
+
|
|
1246
|
+
### FollowButton
|
|
1247
|
+
|
|
1248
|
+
关注按钮组件。
|
|
1249
|
+
|
|
1250
|
+
#### Props
|
|
1251
|
+
|
|
1252
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
1253
|
+
|------|------|------|--------|--------|
|
|
1254
|
+
| following | 是否已关注 | Boolean | - | false |
|
|
1255
|
+
|
|
1256
|
+
#### Events
|
|
1257
|
+
|
|
1258
|
+
| 事件名 | 说明 | 回调参数 |
|
|
1259
|
+
|--------|------|----------|
|
|
1260
|
+
| toggle | 切换关注状态时触发 | (following: boolean) |
|
|
1261
|
+
|
|
1262
|
+
#### 示例
|
|
1263
|
+
|
|
1264
|
+
```vue
|
|
1265
|
+
<template>
|
|
1266
|
+
<follow-button :following="isFollowing" @toggle="handleToggle" />
|
|
1267
|
+
</template>
|
|
1268
|
+
|
|
1269
|
+
<script>
|
|
1270
|
+
export default {
|
|
1271
|
+
data() {
|
|
1272
|
+
return {
|
|
1273
|
+
isFollowing: false
|
|
1274
|
+
}
|
|
1275
|
+
},
|
|
1276
|
+
methods: {
|
|
1277
|
+
handleToggle(following) {
|
|
1278
|
+
this.isFollowing = following;
|
|
1279
|
+
console.log('关注状态:', following);
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
}
|
|
1283
|
+
</script>
|
|
1284
|
+
```
|
|
1285
|
+
|
|
1286
|
+
### AvatarGroup
|
|
1287
|
+
|
|
1288
|
+
头像组组件。
|
|
1289
|
+
|
|
1290
|
+
#### Props
|
|
1291
|
+
|
|
1292
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
1293
|
+
|------|------|------|--------|--------|
|
|
1294
|
+
| avatars | 头像数据数组 | Array | - | - |
|
|
1295
|
+
| max | 最大显示数量 | Number | - | - |
|
|
1296
|
+
|
|
1297
|
+
#### 示例
|
|
1298
|
+
|
|
1299
|
+
```vue
|
|
1300
|
+
<template>
|
|
1301
|
+
<avatar-group :avatars="avatars" :max="3" />
|
|
1302
|
+
</template>
|
|
1303
|
+
|
|
1304
|
+
<script>
|
|
1305
|
+
export default {
|
|
1306
|
+
data() {
|
|
1307
|
+
return {
|
|
1308
|
+
avatars: [
|
|
1309
|
+
{ src: 'https://example.com/avatar1.jpg', name: '用户1' },
|
|
1310
|
+
{ src: 'https://example.com/avatar2.jpg', name: '用户2' },
|
|
1311
|
+
{ src: 'https://example.com/avatar3.jpg', name: '用户3' },
|
|
1312
|
+
{ src: 'https://example.com/avatar4.jpg', name: '用户4' }
|
|
1313
|
+
]
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
}
|
|
1317
|
+
</script>
|
|
1318
|
+
```
|
|
1319
|
+
|
|
1320
|
+
## 工具函数
|
|
1321
|
+
|
|
1322
|
+
### 加密与哈希函数
|
|
1323
|
+
|
|
1324
|
+
#### MD5(message)
|
|
1325
|
+
- **功能**: 计算字符串的MD5哈希值
|
|
1326
|
+
- **参数**:
|
|
1327
|
+
- `message` (String): 要计算哈希值的字符串
|
|
1328
|
+
- **返回值**: String - 十六进制格式的MD5哈希值
|
|
1329
|
+
- **示例**:
|
|
1330
|
+
```javascript
|
|
1331
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1332
|
+
|
|
1333
|
+
const hash = BaseUtil.MD5('hello world')
|
|
1334
|
+
console.log(hash) // 输出: 5eb63bbbe01eeed093cb22bb8f5acdc3
|
|
1335
|
+
```
|
|
1336
|
+
|
|
1337
|
+
#### encryptAES(data, key)
|
|
1338
|
+
- **功能**: 使用AES算法加密数据
|
|
1339
|
+
- **参数**:
|
|
1340
|
+
- `data` (String): 要加密的数据
|
|
1341
|
+
- `key` (String): 加密密钥
|
|
1342
|
+
- **返回值**: String - 加密后的字符串
|
|
1343
|
+
- **示例**:
|
|
1344
|
+
```javascript
|
|
1345
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1346
|
+
|
|
1347
|
+
const encrypted = BaseUtil.encryptAES('sensitive data', 'secret-key')
|
|
1348
|
+
```
|
|
1349
|
+
|
|
1350
|
+
#### decryptAES(encrypted, key)
|
|
1351
|
+
- **功能**: 使用AES算法解密数据
|
|
1352
|
+
- **参数**:
|
|
1353
|
+
- `encrypted` (String): 加密的数据
|
|
1354
|
+
- `key` (String): 解密密钥
|
|
1355
|
+
- **返回值**: String - 解密后的原始数据
|
|
1356
|
+
- **示例**:
|
|
1357
|
+
```javascript
|
|
1358
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1359
|
+
|
|
1360
|
+
const decrypted = BaseUtil.decryptAES(encryptedData, 'secret-key')
|
|
1361
|
+
```
|
|
1362
|
+
|
|
1363
|
+
### ID与字符串生成函数
|
|
1364
|
+
|
|
1365
|
+
#### generateId()
|
|
1366
|
+
- **功能**: 生成一个随机ID
|
|
1367
|
+
- **参数**: 无
|
|
1368
|
+
- **返回值**: Number - 0-9999之间的随机整数
|
|
1369
|
+
- **示例**:
|
|
1370
|
+
```javascript
|
|
1371
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1372
|
+
|
|
1373
|
+
const id = BaseUtil.generateId()
|
|
1374
|
+
console.log(id) // 输出: 1234 (示例)
|
|
1375
|
+
```
|
|
1376
|
+
|
|
1377
|
+
#### randomString(length)
|
|
1378
|
+
- **功能**: 生成指定长度的随机字符串
|
|
1379
|
+
- **参数**:
|
|
1380
|
+
- `length` (Number): 字符串长度
|
|
1381
|
+
- **返回值**: String - 包含数字和小写字母的随机字符串
|
|
1382
|
+
- **示例**:
|
|
1383
|
+
```javascript
|
|
1384
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1385
|
+
|
|
1386
|
+
const str = BaseUtil.randomString(8)
|
|
1387
|
+
console.log(str) // 输出: "a1b2c3d4" (示例)
|
|
1388
|
+
```
|
|
1389
|
+
|
|
1390
|
+
#### generateUUID()
|
|
1391
|
+
- **功能**: 生成UUID字符串
|
|
1392
|
+
- **参数**: 无
|
|
1393
|
+
- **返回值**: String - UUID格式的字符串
|
|
1394
|
+
- **示例**:
|
|
1395
|
+
```javascript
|
|
1396
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1397
|
+
|
|
1398
|
+
const uuid = BaseUtil.generateUUID()
|
|
1399
|
+
console.log(uuid) // 输出: "f47ac10b-58cc-4372-a567-0e02b2c3d479" (示例)
|
|
1400
|
+
```
|
|
1401
|
+
|
|
1402
|
+
### 数据验证与处理函数
|
|
1403
|
+
|
|
1404
|
+
#### isEmpty(val)
|
|
1405
|
+
- **功能**: 检查值是否为空(null、undefined、空字符串、空数组、空对象)
|
|
1406
|
+
- **参数**:
|
|
1407
|
+
- `val` (Any): 要检查的值
|
|
1408
|
+
- **返回值**: Boolean - 如果值为空返回true,否则返回false
|
|
1409
|
+
- **示例**:
|
|
1410
|
+
```javascript
|
|
1411
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1412
|
+
|
|
1413
|
+
console.log(BaseUtil.isEmpty(null)) // true
|
|
1414
|
+
console.log(BaseUtil.isEmpty('')) // true
|
|
1415
|
+
console.log(BaseUtil.isEmpty([])) // true
|
|
1416
|
+
console.log(BaseUtil.isEmpty({})) // true
|
|
1417
|
+
console.log(BaseUtil.isEmpty('hello')) // false
|
|
1418
|
+
```
|
|
1419
|
+
|
|
1420
|
+
#### isArrayEmpty(val)
|
|
1421
|
+
- **功能**: 检查数组是否为空或未定义
|
|
1422
|
+
- **参数**:
|
|
1423
|
+
- `val` (Array): 要检查的数组
|
|
1424
|
+
- **返回值**: Boolean - 如果数组为空或未定义返回true,否则返回false
|
|
1425
|
+
- **示例**:
|
|
1426
|
+
```javascript
|
|
1427
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1428
|
+
|
|
1429
|
+
console.log(BaseUtil.isArrayEmpty([])) // true
|
|
1430
|
+
console.log(BaseUtil.isArrayEmpty([1, 2, 3])) // false
|
|
1431
|
+
console.log(BaseUtil.isArrayEmpty(undefined)) // true
|
|
1432
|
+
```
|
|
1433
|
+
|
|
1434
|
+
#### isObjectEmpty(val)
|
|
1435
|
+
- **功能**: 检查对象是否为空或未定义
|
|
1436
|
+
- **参数**:
|
|
1437
|
+
- `val` (Object): 要检查的对象
|
|
1438
|
+
- **返回值**: Boolean - 如果对象为空或未定义返回true,否则返回false
|
|
1439
|
+
- **示例**:
|
|
1440
|
+
```javascript
|
|
1441
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1442
|
+
|
|
1443
|
+
console.log(BaseUtil.isObjectEmpty({})) // true
|
|
1444
|
+
console.log(BaseUtil.isObjectEmpty({a: 1})) // false
|
|
1445
|
+
console.log(BaseUtil.isObjectEmpty(undefined)) // true
|
|
1446
|
+
```
|
|
1447
|
+
|
|
1448
|
+
#### isFunction(val)
|
|
1449
|
+
- **功能**: 检查值是否为函数
|
|
1450
|
+
- **参数**:
|
|
1451
|
+
- `val` (Any): 要检查的值
|
|
1452
|
+
- **返回值**: Boolean - 如果值是函数返回true,否则返回false
|
|
1453
|
+
- **示例**:
|
|
1454
|
+
```javascript
|
|
1455
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1456
|
+
|
|
1457
|
+
console.log(BaseUtil.isFunction(() => {})) // true
|
|
1458
|
+
console.log(BaseUtil.isFunction(function() {})) // true
|
|
1459
|
+
console.log(BaseUtil.isFunction('hello')) // false
|
|
1460
|
+
```
|
|
1461
|
+
|
|
1462
|
+
### 数据转换函数
|
|
1463
|
+
|
|
1464
|
+
#### formatFileSize(bytes)
|
|
1465
|
+
- **功能**: 格式化文件大小为人类可读的格式
|
|
1466
|
+
- **参数**:
|
|
1467
|
+
- `bytes` (Number): 文件大小(字节)
|
|
1468
|
+
- **返回值**: String - 格式化后的文件大小(如 "1.5 MB")
|
|
1469
|
+
- **示例**:
|
|
1470
|
+
```javascript
|
|
1471
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1472
|
+
|
|
1473
|
+
console.log(BaseUtil.formatFileSize(1024)) // "1 KB"
|
|
1474
|
+
console.log(BaseUtil.formatFileSize(1048576)) // "1 MB"
|
|
1475
|
+
console.log(BaseUtil.formatFileSize(1073741824)) // "1 GB"
|
|
1476
|
+
```
|
|
1477
|
+
|
|
1478
|
+
#### formatDate(date, format)
|
|
1479
|
+
- **功能**: 格式化日期
|
|
1480
|
+
- **参数**:
|
|
1481
|
+
- `date` (Date|String|Number): 日期对象、时间戳或日期字符串
|
|
1482
|
+
- `format` (String): 日期格式,默认为 "YYYY-MM-DD"
|
|
1483
|
+
- **返回值**: String - 格式化后的日期字符串
|
|
1484
|
+
- **示例**:
|
|
1485
|
+
```javascript
|
|
1486
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1487
|
+
|
|
1488
|
+
console.log(BaseUtil.formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss')) // "2023-12-22 14:30:00" (示例)
|
|
1489
|
+
console.log(BaseUtil.formatDate(1671694200000, 'YYYY/MM/DD')) // "2022/12/22" (示例)
|
|
1490
|
+
```
|
|
1491
|
+
|
|
1492
|
+
#### formatNumber(num, digits)
|
|
1493
|
+
- **功能**: 格式化数字,添加千位分隔符
|
|
1494
|
+
- **参数**:
|
|
1495
|
+
- `num` (Number): 要格式化的数字
|
|
1496
|
+
- `digits` (Number): 保留的小数位数,默认为2
|
|
1497
|
+
- **返回值**: String - 格式化后的数字字符串
|
|
1498
|
+
- **示例**:
|
|
1499
|
+
```javascript
|
|
1500
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1501
|
+
|
|
1502
|
+
console.log(BaseUtil.formatNumber(1234567.891)) // "1,234,567.89"
|
|
1503
|
+
console.log(BaseUtil.formatNumber(1234567.891, 0)) // "1,234,568"
|
|
1504
|
+
```
|
|
1505
|
+
|
|
1506
|
+
### URL与参数处理函数
|
|
1507
|
+
|
|
1508
|
+
#### getQueryString(name)
|
|
1509
|
+
- **功能**: 获取URL查询字符串参数值
|
|
1510
|
+
- **参数**:
|
|
1511
|
+
- `name` (String): 参数名
|
|
1512
|
+
- **返回值**: String - 参数值,如果不存在则返回null
|
|
1513
|
+
- **示例**:
|
|
1514
|
+
```javascript
|
|
1515
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1516
|
+
|
|
1517
|
+
// 假设当前URL为: https://example.com?id=123&name=test
|
|
1518
|
+
console.log(BaseUtil.getQueryString('id')) // "123"
|
|
1519
|
+
console.log(BaseUtil.getQueryString('name')) // "test"
|
|
1520
|
+
console.log(BaseUtil.getQueryString('nonexistent')) // null
|
|
1521
|
+
```
|
|
1522
|
+
|
|
1523
|
+
#### setQueryString(url, params)
|
|
1524
|
+
- **功能**: 设置URL查询字符串参数
|
|
1525
|
+
- **参数**:
|
|
1526
|
+
- `url` (String): 原始URL
|
|
1527
|
+
- `params` (Object): 要设置的参数对象
|
|
1528
|
+
- **返回值**: String - 设置参数后的URL
|
|
1529
|
+
- **示例**:
|
|
1530
|
+
```javascript
|
|
1531
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1532
|
+
|
|
1533
|
+
const newUrl = BaseUtil.setQueryString('https://example.com', { id: 123, name: 'test' })
|
|
1534
|
+
console.log(newUrl) // "https://example.com?id=123&name=test"
|
|
1535
|
+
```
|
|
1536
|
+
|
|
1537
|
+
### 数据存储函数
|
|
1538
|
+
|
|
1539
|
+
#### setLocalStorage(key, value)
|
|
1540
|
+
- **功能**: 设置本地存储数据
|
|
1541
|
+
- **参数**:
|
|
1542
|
+
- `key` (String): 存储键名
|
|
1543
|
+
- `value` (Any): 要存储的值(会自动序列化为JSON)
|
|
1544
|
+
- **返回值**: 无
|
|
1545
|
+
- **示例**:
|
|
1546
|
+
```javascript
|
|
1547
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1548
|
+
|
|
1549
|
+
BaseUtil.setLocalStorage('user', { id: 1, name: 'John' })
|
|
1550
|
+
```
|
|
1551
|
+
|
|
1552
|
+
#### getLocalStorage(key)
|
|
1553
|
+
- **功能**: 获取本地存储数据
|
|
1554
|
+
- **参数**:
|
|
1555
|
+
- `key` (String): 存储键名
|
|
1556
|
+
- **返回值**: Any - 存储的值(会自动反序列化JSON),如果不存在则返回null
|
|
1557
|
+
- **示例**:
|
|
1558
|
+
```javascript
|
|
1559
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1560
|
+
|
|
1561
|
+
const user = BaseUtil.getLocalStorage('user')
|
|
1562
|
+
console.log(user) // { id: 1, name: 'John' } (示例)
|
|
1563
|
+
```
|
|
1564
|
+
|
|
1565
|
+
#### removeLocalStorage(key)
|
|
1566
|
+
- **功能**: 删除本地存储数据
|
|
1567
|
+
- **参数**:
|
|
1568
|
+
- `key` (String): 存储键名
|
|
1569
|
+
- **返回值**: 无
|
|
1570
|
+
- **示例**:
|
|
1571
|
+
```javascript
|
|
1572
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1573
|
+
|
|
1574
|
+
BaseUtil.removeLocalStorage('user')
|
|
1575
|
+
```
|
|
1576
|
+
|
|
1577
|
+
### 其他工具函数
|
|
1578
|
+
|
|
1579
|
+
#### debounce(func, wait)
|
|
1580
|
+
- **功能**: 创建防抖函数
|
|
1581
|
+
- **参数**:
|
|
1582
|
+
- `func` (Function): 要防抖的函数
|
|
1583
|
+
- `wait` (Number): 等待时间(毫秒)
|
|
1584
|
+
- **返回值**: Function - 防抖后的函数
|
|
1585
|
+
- **示例**:
|
|
1586
|
+
```javascript
|
|
1587
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1588
|
+
|
|
1589
|
+
const debouncedSearch = BaseUtil.debounce((query) => {
|
|
1590
|
+
console.log('搜索:', query)
|
|
1591
|
+
}, 300)
|
|
1592
|
+
|
|
1593
|
+
debouncedSearch('test') // 只在停止输入300ms后执行
|
|
1594
|
+
```
|
|
1595
|
+
|
|
1596
|
+
#### throttle(func, wait)
|
|
1597
|
+
- **功能**: 创建节流函数
|
|
1598
|
+
- **参数**:
|
|
1599
|
+
- `func` (Function): 要节流的函数
|
|
1600
|
+
- `wait` (Number): 等待时间(毫秒)
|
|
1601
|
+
- **返回值**: Function - 节流后的函数
|
|
1602
|
+
- **示例**:
|
|
1603
|
+
```javascript
|
|
1604
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1605
|
+
|
|
1606
|
+
const throttledScroll = BaseUtil.throttle(() => {
|
|
1607
|
+
console.log('滚动事件')
|
|
1608
|
+
}, 100)
|
|
1609
|
+
|
|
1610
|
+
window.addEventListener('scroll', throttledScroll)
|
|
1611
|
+
```
|
|
1612
|
+
|
|
1613
|
+
#### deepClone(obj)
|
|
1614
|
+
- **功能**: 深度克隆对象
|
|
1615
|
+
- **参数**:
|
|
1616
|
+
- `obj` (Any): 要克隆的对象
|
|
1617
|
+
- **返回值**: Any - 克隆后的对象
|
|
1618
|
+
- **示例**:
|
|
1619
|
+
```javascript
|
|
1620
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1621
|
+
|
|
1622
|
+
const original = { a: 1, b: { c: 2 } }
|
|
1623
|
+
const cloned = BaseUtil.deepClone(original)
|
|
1624
|
+
|
|
1625
|
+
cloned.b.c = 3
|
|
1626
|
+
console.log(original.b.c) // 2 (原对象未受影响)
|
|
1627
|
+
console.log(cloned.b.c) // 3
|
|
1628
|
+
```
|
|
1629
|
+
|
|
1630
|
+
### Base64Util
|
|
1631
|
+
|
|
1632
|
+
Base64 编码解码工具。
|
|
1633
|
+
|
|
1634
|
+
#### 方法
|
|
1635
|
+
|
|
1636
|
+
| 方法名 | 说明 | 参数 | 返回值 |
|
|
1637
|
+
|--------|------|------|--------|
|
|
1638
|
+
| encode | Base64编码 | (str: string) | string |
|
|
1639
|
+
| decode | Base64解码 | (str: string) | string |
|
|
1640
|
+
|
|
1641
|
+
#### 示例
|
|
1642
|
+
|
|
1643
|
+
```javascript
|
|
1644
|
+
import { Base64Util } from '@zkwq-x/business';
|
|
1645
|
+
|
|
1646
|
+
// 编码
|
|
1647
|
+
const encoded = Base64Util.encode('hello world');
|
|
1648
|
+
|
|
1649
|
+
// 解码
|
|
1650
|
+
const decoded = Base64Util.decode(encoded);
|
|
1651
|
+
```
|
|
1652
|
+
|
|
1653
|
+
### http
|
|
1654
|
+
|
|
1655
|
+
HTTP 请求工具。
|
|
1656
|
+
|
|
1657
|
+
#### 方法
|
|
1658
|
+
|
|
1659
|
+
| 方法名 | 说明 | 参数 | 返回值 |
|
|
1660
|
+
|--------|------|------|--------|
|
|
1661
|
+
| get | GET请求 | (url: string, config?: object) | Promise |
|
|
1662
|
+
| post | POST请求 | (url: string, data?: any, config?: object) | Promise |
|
|
1663
|
+
| put | PUT请求 | (url: string, data?: any, config?: object) | Promise |
|
|
1664
|
+
| delete | DELETE请求 | (url: string, config?: object) | Promise |
|
|
1665
|
+
|
|
1666
|
+
#### 示例
|
|
1667
|
+
|
|
1668
|
+
```javascript
|
|
1669
|
+
import { http } from '@zkwq-x/business';
|
|
1670
|
+
|
|
1671
|
+
// GET 请求
|
|
1672
|
+
http.get('/api/data').then(response => {
|
|
1673
|
+
console.log(response.data);
|
|
1674
|
+
});
|
|
1675
|
+
|
|
1676
|
+
// POST 请求
|
|
1677
|
+
http.post('/api/data', { name: 'test' }).then(response => {
|
|
1678
|
+
console.log(response.data);
|
|
1679
|
+
});
|
|
1680
|
+
```
|
|
1681
|
+
|
|
1682
|
+
### CONSTANT
|
|
1683
|
+
|
|
1684
|
+
常量集合。
|
|
1685
|
+
|
|
1686
|
+
#### 属性
|
|
1687
|
+
|
|
1688
|
+
| 属性名 | 说明 | 类型 |
|
|
1689
|
+
|--------|------|------|
|
|
1690
|
+
| API_BASE_URL | API基础URL | string |
|
|
1691
|
+
| STATUS_CODE | 状态码常量 | object |
|
|
1692
|
+
|
|
1693
|
+
#### 示例
|
|
1694
|
+
|
|
1695
|
+
```javascript
|
|
1696
|
+
import { CONSTANT } from '@zkwq-x/business';
|
|
1697
|
+
|
|
1698
|
+
// 使用常量
|
|
1699
|
+
console.log(CONSTANT.API_BASE_URL);
|
|
1700
|
+
console.log(CONSTANT.STATUS_CODE.SUCCESS);
|
|
1701
|
+
```
|
|
1702
|
+
|
|
1703
|
+
### ScrollTool
|
|
1704
|
+
|
|
1705
|
+
滚动工具。
|
|
1706
|
+
|
|
1707
|
+
#### 方法
|
|
1708
|
+
|
|
1709
|
+
| 方法名 | 说明 | 参数 |
|
|
1710
|
+
|--------|------|------|
|
|
1711
|
+
| scrollToTop | 滚动到顶部 | - |
|
|
1712
|
+
| scrollToElement | 滚动到指定元素 | (selector: string) |
|
|
1713
|
+
| scrollBottom | 滚动到底部 | - |
|
|
1714
|
+
|
|
1715
|
+
#### 示例
|
|
1716
|
+
|
|
1717
|
+
```javascript
|
|
1718
|
+
import { ScrollTool } from '@zkwq-x/business';
|
|
1719
|
+
|
|
1720
|
+
// 滚动到顶部
|
|
1721
|
+
ScrollTool.scrollToTop();
|
|
1722
|
+
|
|
1723
|
+
// 滚动到指定元素
|
|
1724
|
+
ScrollTool.scrollToElement('#target');
|
|
1725
|
+
```
|
|
1726
|
+
|
|
1727
|
+
### Quote
|
|
1728
|
+
|
|
1729
|
+
引用工具。
|
|
1730
|
+
|
|
1731
|
+
#### 方法
|
|
1732
|
+
|
|
1733
|
+
| 方法名 | 说明 | 参数 | 返回值 |
|
|
1734
|
+
|--------|------|------|--------|
|
|
1735
|
+
| format | 格式化引用 | (text: string) | string |
|
|
1736
|
+
|
|
1737
|
+
#### 示例
|
|
1738
|
+
|
|
1739
|
+
```javascript
|
|
1740
|
+
import { Quote } from '@zkwq-x/business';
|
|
1741
|
+
|
|
1742
|
+
// 格式化引用
|
|
1743
|
+
const formattedQuote = Quote.format('这是一段引用文本');
|
|
1744
|
+
```
|
|
1745
|
+
|
|
1746
|
+
### Bus
|
|
1747
|
+
|
|
1748
|
+
事件总线。
|
|
1749
|
+
|
|
1750
|
+
#### 方法
|
|
1751
|
+
|
|
1752
|
+
| 方法名 | 说明 | 参数 |
|
|
1753
|
+
|--------|------|------|
|
|
1754
|
+
| on | 监听事件 | (type: string, callBack: Function) |
|
|
1755
|
+
| trigger | 触发事件 | (type: string, options: any) |
|
|
1756
|
+
| remove | 移除事件监听 | (type: string, callBack: Function) |
|
|
1757
|
+
|
|
1758
|
+
#### 示例
|
|
1759
|
+
|
|
1760
|
+
```javascript
|
|
1761
|
+
import { Bus } from '@zkwq-x/business';
|
|
1762
|
+
|
|
1763
|
+
// 监听事件
|
|
1764
|
+
Bus.on('custom-event', (data) => {
|
|
1765
|
+
console.log('接收到事件:', data)
|
|
1766
|
+
})
|
|
1767
|
+
|
|
1768
|
+
// 触发事件
|
|
1769
|
+
Bus.trigger('custom-event', { message: 'Hello World' })
|
|
1770
|
+
|
|
1771
|
+
// 移除事件监听
|
|
1772
|
+
const handler = (data) => console.log(data)
|
|
1773
|
+
Bus.on('another-event', handler)
|
|
1774
|
+
Bus.remove('another-event', handler)
|
|
1775
|
+
```
|
|
1776
|
+
|
|
1777
|
+
### HighLight
|
|
1778
|
+
|
|
1779
|
+
高亮工具。
|
|
1780
|
+
|
|
1781
|
+
#### 方法
|
|
1782
|
+
|
|
1783
|
+
| 方法名 | 说明 | 参数 | 返回值 |
|
|
1784
|
+
|--------|------|------|--------|
|
|
1785
|
+
| highlight | 高亮文本 | (text: string, keyword: string) | string |
|
|
1786
|
+
|
|
1787
|
+
#### 示例
|
|
1788
|
+
|
|
1789
|
+
```javascript
|
|
1790
|
+
import { HighLight } from '@zkwq-x/business';
|
|
1791
|
+
|
|
1792
|
+
// 高亮文本
|
|
1793
|
+
const highlightedText = HighLight.highlight('原始文本', '关键词');
|
|
1794
|
+
```
|
|
1795
|
+
|
|
1796
|
+
## 服务模块
|
|
1797
|
+
|
|
1798
|
+
### 日志服务
|
|
1799
|
+
|
|
1800
|
+
#### SaveLog(params, application, user, module)
|
|
1801
|
+
- **功能**: 保存用户操作日志
|
|
1802
|
+
- **参数**:
|
|
1803
|
+
- `params` (Object): 日志参数对象
|
|
1804
|
+
- `application` (String): 应用名称
|
|
1805
|
+
- `user` (Object): 用户对象
|
|
1806
|
+
- `module` (String): 模块名称,默认为'后台管理'
|
|
1807
|
+
- **返回值**: Promise - 请求Promise对象
|
|
1808
|
+
- **示例**:
|
|
1809
|
+
```javascript
|
|
1810
|
+
import { Service } from '@zkwq-x/business'
|
|
1811
|
+
|
|
1812
|
+
Service.SaveLog(
|
|
1813
|
+
{ action: 'login', ip: '192.168.1.1' },
|
|
1814
|
+
'管理系统',
|
|
1815
|
+
{ id: 1, name: 'admin' },
|
|
1816
|
+
'用户管理'
|
|
1817
|
+
).then(() => {
|
|
1818
|
+
console.log('日志保存成功')
|
|
1819
|
+
})
|
|
1820
|
+
```
|
|
1821
|
+
|
|
1822
|
+
### 资源导出服务
|
|
1823
|
+
|
|
1824
|
+
#### ExportResource(params)
|
|
1825
|
+
- **功能**: 导出资源文件
|
|
1826
|
+
- **参数**:
|
|
1827
|
+
- `params` (Object): 导出参数对象
|
|
1828
|
+
- **返回值**: Promise<Blob> - 返回文件数据的Promise
|
|
1829
|
+
- **示例**:
|
|
1830
|
+
```javascript
|
|
1831
|
+
import { Service } from '@zkwq-x/business'
|
|
1832
|
+
|
|
1833
|
+
Service.ExportResource({ type: 'excel', ids: [1, 2, 3] }).then(blob => {
|
|
1834
|
+
// 创建下载链接
|
|
1835
|
+
const url = window.URL.createObjectURL(blob)
|
|
1836
|
+
const link = document.createElement('a')
|
|
1837
|
+
link.href = url
|
|
1838
|
+
link.download = 'export.xlsx'
|
|
1839
|
+
link.click()
|
|
1840
|
+
})
|
|
1841
|
+
```
|
|
1842
|
+
|
|
1843
|
+
#### ExportResourceTxt(params)
|
|
1844
|
+
- **功能**: 导出资源为文本文件
|
|
1845
|
+
- **参数**:
|
|
1846
|
+
- `params` (Object): 导出参数对象
|
|
1847
|
+
- **返回值**: Promise<Blob> - 返回文本文件数据的Promise
|
|
1848
|
+
- **示例**:
|
|
1849
|
+
```javascript
|
|
1850
|
+
import { Service } from '@zkwq-x/business'
|
|
1851
|
+
|
|
1852
|
+
Service.ExportResourceTxt({ format: 'txt', content: '导出内容' }).then(blob => {
|
|
1853
|
+
const url = window.URL.createObjectURL(blob)
|
|
1854
|
+
const link = document.createElement('a')
|
|
1855
|
+
link.href = url
|
|
1856
|
+
link.download = 'export.txt'
|
|
1857
|
+
link.click()
|
|
1858
|
+
})
|
|
1859
|
+
```
|
|
1860
|
+
|
|
1861
|
+
### 用户服务
|
|
1862
|
+
|
|
1863
|
+
#### GetUserV2(uid, user_id, app_id)
|
|
1864
|
+
- **功能**: 获取用户信息(V2版本)
|
|
1865
|
+
- **参数**:
|
|
1866
|
+
- `uid` (String): 用户ID
|
|
1867
|
+
- `user_id` (String): 当前用户ID
|
|
1868
|
+
- `app_id` (String): 应用ID
|
|
1869
|
+
- **返回值**: Promise - 包含用户信息的Promise
|
|
1870
|
+
- **示例**:
|
|
1871
|
+
```javascript
|
|
1872
|
+
import { Service } from '@zkwq-x/business'
|
|
1873
|
+
|
|
1874
|
+
Service.GetUserV2('user123', 'current_user456', 'app789').then(user => {
|
|
1875
|
+
console.log('用户信息:', user)
|
|
1876
|
+
}).catch(error => {
|
|
1877
|
+
console.error('获取用户信息失败:', error)
|
|
1878
|
+
})
|
|
1879
|
+
```
|
|
1880
|
+
|
|
1881
|
+
#### GetUser(uid)
|
|
1882
|
+
- **功能**: 获取用户信息
|
|
1883
|
+
- **参数**:
|
|
1884
|
+
- `uid` (String): 用户ID
|
|
1885
|
+
- **返回值**: Promise - 包含用户信息的Promise
|
|
1886
|
+
- **示例**:
|
|
1887
|
+
```javascript
|
|
1888
|
+
import { Service } from '@zkwq-x/business'
|
|
1889
|
+
|
|
1890
|
+
Service.GetUser('user123').then(user => {
|
|
1891
|
+
console.log('用户信息:', user)
|
|
1892
|
+
})
|
|
1893
|
+
```
|
|
1894
|
+
|
|
1895
|
+
#### GetUsers(uids)
|
|
1896
|
+
- **功能**: 批量获取用户信息
|
|
1897
|
+
- **参数**:
|
|
1898
|
+
- `uids` (Array): 用户ID数组
|
|
1899
|
+
- **返回值**: Promise - 包含用户信息数组的Promise
|
|
1900
|
+
- **示例**:
|
|
1901
|
+
```javascript
|
|
1902
|
+
import { Service } from '@zkwq-x/business'
|
|
1903
|
+
|
|
1904
|
+
Service.GetUsers(['user1', 'user2', 'user3']).then(users => {
|
|
1905
|
+
console.log('用户列表:', users)
|
|
1906
|
+
})
|
|
1907
|
+
```
|
|
1908
|
+
|
|
1909
|
+
#### UpdateUser(uid, data)
|
|
1910
|
+
- **功能**: 更新用户信息
|
|
1911
|
+
- **参数**:
|
|
1912
|
+
- `uid` (String): 用户ID
|
|
1913
|
+
- `data` (Object): 要更新的用户数据
|
|
1914
|
+
- **返回值**: Promise - 更新结果的Promise
|
|
1915
|
+
- **示例**:
|
|
1916
|
+
```javascript
|
|
1917
|
+
import { Service } from '@zkwq-x/business'
|
|
1918
|
+
|
|
1919
|
+
Service.UpdateUser('user123', { name: '新名称', email: 'new@example.com' }).then(result => {
|
|
1920
|
+
console.log('用户信息更新成功:', result)
|
|
1921
|
+
})
|
|
1922
|
+
```
|
|
1923
|
+
|
|
1924
|
+
### 文件服务
|
|
1925
|
+
|
|
1926
|
+
#### UploadFile(file, options)
|
|
1927
|
+
- **功能**: 上传文件
|
|
1928
|
+
- **参数**:
|
|
1929
|
+
- `file` (File): 要上传的文件对象
|
|
1930
|
+
- `options` (Object): 上传选项,包含类型、路径等
|
|
1931
|
+
- **返回值**: Promise - 包含上传结果和文件信息的Promise
|
|
1932
|
+
- **示例**:
|
|
1933
|
+
```javascript
|
|
1934
|
+
import { Service } from '@zkwq-x/business'
|
|
1935
|
+
|
|
1936
|
+
const fileInput = document.getElementById('file-input')
|
|
1937
|
+
const file = fileInput.files[0]
|
|
1938
|
+
|
|
1939
|
+
Service.UploadFile(file, { type: 'avatar', folder: 'user' }).then(result => {
|
|
1940
|
+
console.log('文件上传成功:', result.url)
|
|
1941
|
+
})
|
|
1942
|
+
```
|
|
1943
|
+
|
|
1944
|
+
#### GetFileUrl(fileId)
|
|
1945
|
+
- **功能**: 获取文件访问URL
|
|
1946
|
+
- **参数**:
|
|
1947
|
+
- `fileId` (String): 文件ID
|
|
1948
|
+
- **返回值**: Promise - 包含文件URL的Promise
|
|
1949
|
+
- **示例**:
|
|
1950
|
+
```javascript
|
|
1951
|
+
import { Service } from '@zkwq-x/business'
|
|
1952
|
+
|
|
1953
|
+
Service.GetFileUrl('file123').then(url => {
|
|
1954
|
+
console.log('文件URL:', url)
|
|
1955
|
+
})
|
|
1956
|
+
```
|
|
1957
|
+
|
|
1958
|
+
#### DeleteFile(fileId)
|
|
1959
|
+
- **功能**: 删除文件
|
|
1960
|
+
- **参数**:
|
|
1961
|
+
- `fileId` (String): 文件ID
|
|
1962
|
+
- **返回值**: Promise - 删除结果的Promise
|
|
1963
|
+
- **示例**:
|
|
1964
|
+
```javascript
|
|
1965
|
+
import { Service } from '@zkwq-x/business'
|
|
1966
|
+
|
|
1967
|
+
Service.DeleteFile('file123').then(() => {
|
|
1968
|
+
console.log('文件删除成功')
|
|
1969
|
+
})
|
|
1970
|
+
```
|
|
1971
|
+
|
|
1972
|
+
### 数据统计服务
|
|
1973
|
+
|
|
1974
|
+
#### GetStatistics(params)
|
|
1975
|
+
- **功能**: 获取统计数据
|
|
1976
|
+
- **参数**:
|
|
1977
|
+
- `params` (Object): 统计参数,包含时间范围、类型等
|
|
1978
|
+
- **返回值**: Promise - 包含统计数据的Promise
|
|
1979
|
+
- **示例**:
|
|
1980
|
+
```javascript
|
|
1981
|
+
import { Service } from '@zkwq-x/business'
|
|
1982
|
+
|
|
1983
|
+
Service.GetStatistics({
|
|
1984
|
+
startDate: '2023-01-01',
|
|
1985
|
+
endDate: '2023-12-31',
|
|
1986
|
+
type: 'user_activity'
|
|
1987
|
+
}).then(data => {
|
|
1988
|
+
console.log('统计数据:', data)
|
|
1989
|
+
})
|
|
1990
|
+
```
|
|
1991
|
+
|
|
1992
|
+
#### GetReport(params)
|
|
1993
|
+
- **功能**: 获取报告数据
|
|
1994
|
+
- **参数**:
|
|
1995
|
+
- `params` (Object): 报告参数,包含报告类型、筛选条件等
|
|
1996
|
+
- **返回值**: Promise - 包含报告数据的Promise
|
|
1997
|
+
- **示例**:
|
|
1998
|
+
```javascript
|
|
1999
|
+
import { Service } from '@zkwq-x/business'
|
|
2000
|
+
|
|
2001
|
+
Service.GetReport({
|
|
2002
|
+
type: 'monthly',
|
|
2003
|
+
month: '2023-12',
|
|
2004
|
+
format: 'json'
|
|
2005
|
+
}).then(report => {
|
|
2006
|
+
console.log('报告数据:', report)
|
|
2007
|
+
})
|
|
2008
|
+
```
|
|
2009
|
+
|
|
2010
|
+
### 关注服务
|
|
2011
|
+
|
|
2012
|
+
#### FollowUser(userId, targetUserId)
|
|
2013
|
+
- **功能**: 关注用户
|
|
2014
|
+
- **参数**:
|
|
2015
|
+
- `userId` (String): 当前用户ID
|
|
2016
|
+
- `targetUserId` (String): 要关注的用户ID
|
|
2017
|
+
- **返回值**: Promise - 关注结果的Promise
|
|
2018
|
+
- **示例**:
|
|
2019
|
+
```javascript
|
|
2020
|
+
import { Service } from '@zkwq-x/business'
|
|
2021
|
+
|
|
2022
|
+
Service.FollowUser('current_user', 'target_user').then(() => {
|
|
2023
|
+
console.log('关注成功')
|
|
2024
|
+
})
|
|
2025
|
+
```
|
|
2026
|
+
|
|
2027
|
+
#### UnfollowUser(userId, targetUserId)
|
|
2028
|
+
- **功能**: 取消关注用户
|
|
2029
|
+
- **参数**:
|
|
2030
|
+
- `userId` (String): 当前用户ID
|
|
2031
|
+
- `targetUserId` (String): 要取消关注的用户ID
|
|
2032
|
+
- **返回值**: Promise - 取消关注结果的Promise
|
|
2033
|
+
- **示例**:
|
|
2034
|
+
```javascript
|
|
2035
|
+
import { Service } from '@zkwq-x/business'
|
|
2036
|
+
|
|
2037
|
+
Service.UnfollowUser('current_user', 'target_user').then(() => {
|
|
2038
|
+
console.log('取消关注成功')
|
|
2039
|
+
})
|
|
2040
|
+
```
|
|
2041
|
+
|
|
2042
|
+
#### GetFollowers(userId)
|
|
2043
|
+
- **功能**: 获取用户粉丝列表
|
|
2044
|
+
- **参数**:
|
|
2045
|
+
- `userId` (String): 用户ID
|
|
2046
|
+
- **返回值**: Promise - 包含粉丝列表的Promise
|
|
2047
|
+
- **示例**:
|
|
2048
|
+
```javascript
|
|
2049
|
+
import { Service } from '@zkwq-x/business'
|
|
2050
|
+
|
|
2051
|
+
Service.GetFollowers('user123').then(followers => {
|
|
2052
|
+
console.log('粉丝列表:', followers)
|
|
2053
|
+
})
|
|
2054
|
+
```
|
|
2055
|
+
|
|
2056
|
+
#### GetFollowing(userId)
|
|
2057
|
+
- **功能**: 获取用户关注列表
|
|
2058
|
+
- **参数**:
|
|
2059
|
+
- `userId` (String): 用户ID
|
|
2060
|
+
- **返回值**: Promise - 包含关注列表的Promise
|
|
2061
|
+
- **示例**:
|
|
2062
|
+
```javascript
|
|
2063
|
+
import { Service } from '@zkwq-x/business'
|
|
2064
|
+
|
|
2065
|
+
Service.GetFollowing('user123').then(following => {
|
|
2066
|
+
console.log('关注列表:', following)
|
|
2067
|
+
})
|
|
2068
|
+
```
|
|
2069
|
+
|
|
2070
|
+
### 搜索服务
|
|
2071
|
+
|
|
2072
|
+
#### Search(query, options)
|
|
2073
|
+
- **功能**: 执行搜索
|
|
2074
|
+
- **参数**:
|
|
2075
|
+
- `query` (String): 搜索关键词
|
|
2076
|
+
- `options` (Object): 搜索选项,包含类型、分页等
|
|
2077
|
+
- **返回值**: Promise - 包含搜索结果的Promise
|
|
2078
|
+
- **示例**:
|
|
2079
|
+
```javascript
|
|
2080
|
+
import { Service } from '@zkwq-x/business'
|
|
2081
|
+
|
|
2082
|
+
Service.Search('Vue.js', { type: 'articles', page: 1, pageSize: 10 }).then(results => {
|
|
2083
|
+
console.log('搜索结果:', results)
|
|
2084
|
+
})
|
|
2085
|
+
```
|
|
2086
|
+
|
|
2087
|
+
#### GetSearchSuggestions(query)
|
|
2088
|
+
- **功能**: 获取搜索建议
|
|
2089
|
+
- **参数**:
|
|
2090
|
+
- `query` (String): 搜索关键词
|
|
2091
|
+
- **返回值**: Promise - 包含搜索建议列表的Promise
|
|
2092
|
+
- **示例**:
|
|
2093
|
+
```javascript
|
|
2094
|
+
import { Service } from '@zkwq-x/business'
|
|
2095
|
+
|
|
2096
|
+
Service.GetSearchSuggestions('Vue').then(suggestions => {
|
|
2097
|
+
console.log('搜索建议:', suggestions)
|
|
2098
|
+
})
|
|
2099
|
+
```
|
|
2100
|
+
|
|
2101
|
+
## 指令
|
|
2102
|
+
|
|
2103
|
+
### v-ripple
|
|
2104
|
+
|
|
2105
|
+
水波纹指令,为元素添加点击水波纹效果。
|
|
2106
|
+
|
|
2107
|
+
#### 示例
|
|
2108
|
+
|
|
2109
|
+
```vue
|
|
2110
|
+
<template>
|
|
2111
|
+
<button v-ipple>点击我有水波纹效果</button>
|
|
2112
|
+
</template>
|
|
2113
|
+
```
|
|
2114
|
+
|
|
2115
|
+
## 样式
|
|
2116
|
+
|
|
2117
|
+
组件库提供了完整的样式文件,引入方式:
|
|
2118
|
+
|
|
2119
|
+
```javascript
|
|
2120
|
+
import '@zkwq-x/business/style/index.scss';
|
|
2121
|
+
```
|
|
2122
|
+
|
|
2123
|
+
## 贡献
|
|
2124
|
+
|
|
2125
|
+
欢迎提交 Issue 和 Pull Request 来完善组件库。
|
|
2126
|
+
|
|
2127
|
+
## 许可证
|
|
2128
|
+
|
|
2129
|
+
[MIT License](LICENSE)
|