common-utils-kit 1.1.31 → 1.1.33
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/.eslintrc.js +8 -4
- package/README.md +283 -15
- package/lib/element/index.common.js +5622 -10
- package/lib/element/index.umd.js +5622 -10
- package/lib/element/index.umd.min.js +1 -1
- package/lib/index.common.js +89646 -10803
- package/lib/index.umd.js +89640 -10797
- package/lib/index.umd.min.js +24 -1
- package/lib/utils-kit.css +60 -0
- package/lib/utils-kit.css.map +1 -1
- package/package.json +6 -2
- package/.vscode/extensions.json +0 -14
- package/.vscode/settings.json +0 -6
package/.eslintrc.js
CHANGED
|
@@ -25,10 +25,14 @@ module.exports = {
|
|
|
25
25
|
'no-underscore-dangle': 'off',
|
|
26
26
|
'new-cap': 'off',
|
|
27
27
|
'no-plusplus': 'off',
|
|
28
|
-
'vue/multi-word-component-names':'off',
|
|
29
|
-
'vue/first-attribute-linebreak':'off',
|
|
30
|
-
'vue/component-definition-name-casing':'off',
|
|
31
|
-
'vue/attributes-order':'off'
|
|
28
|
+
'vue/multi-word-component-names': 'off',
|
|
29
|
+
'vue/first-attribute-linebreak': 'off',
|
|
30
|
+
'vue/component-definition-name-casing': 'off',
|
|
31
|
+
'vue/attributes-order': 'off',
|
|
32
|
+
'vue/no-mutating-props': 'off',
|
|
33
|
+
'vue/html-indent': 'off',
|
|
34
|
+
// 👇 新增这一行 👇
|
|
35
|
+
'vue/html-closing-bracket-newline': 'off'
|
|
32
36
|
},
|
|
33
37
|
overrides: [
|
|
34
38
|
{
|
package/README.md
CHANGED
|
@@ -84,21 +84,7 @@ this.$test.email("200") //false
|
|
|
84
84
|
- `v-relative-time` - 指令接受以下参数:
|
|
85
85
|
- **过去时间戳**:过去的时间戳(如 `1699795200000`)
|
|
86
86
|
|
|
87
|
-
### 6. `v-
|
|
88
|
-
**描述**: 限制输入框的输入内容。
|
|
89
|
-
```html
|
|
90
|
-
<el-input v-replace:price="inputValue" />
|
|
91
|
-
```
|
|
92
|
-
**参数说明**:
|
|
93
|
-
- `v-relative-time` - 指令接受以下参数:
|
|
94
|
-
- **限制类型**:允许两位小数的金额`price`(如 price)
|
|
95
|
-
- **限制类型**仅允许正数`plusPrice`(如 price)。
|
|
96
|
-
- **限制类型**仅允许正整数`num`(如 price)。
|
|
97
|
-
- **限制类型**仅允许自然数`natural`(如 price)。
|
|
98
|
-
- **输入内容**限制输入的内容(如 inputValue)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
### 7. `v-el-drag-dialog`
|
|
87
|
+
### 6. `v-el-drag-dialog`
|
|
102
88
|
**描述**: 可拖拽的对话框(仅用于element-ui)。
|
|
103
89
|
```html
|
|
104
90
|
<el-dialog v-el-drag-dialog>
|
|
@@ -107,6 +93,23 @@ this.$test.email("200") //false
|
|
|
107
93
|
</el-dialog>
|
|
108
94
|
```
|
|
109
95
|
|
|
96
|
+
### 7. `v-input-rule`
|
|
97
|
+
**描述**: 按规则限制输入框内容,兼容原生 input 和 Element UI `el-input`。
|
|
98
|
+
```html
|
|
99
|
+
<el-input v-model="amount" v-input-rule:priceRange="[0, 1000000]" placeholder="金额范围" />
|
|
100
|
+
<el-input v-model="optionalCount" v-input-rule:range.empty="[0, 10000]" placeholder="允许清空的整数范围" />
|
|
101
|
+
```
|
|
102
|
+
**参数说明**:
|
|
103
|
+
- `price`:允许正负金额,最多两位小数。
|
|
104
|
+
- `plusPrice`:允许非负金额,最多两位小数。
|
|
105
|
+
- `positivePrice`:允许正数金额,最终事件中小于等于 0 会清空。
|
|
106
|
+
- `integer`:允许正负整数。
|
|
107
|
+
- `plusInteger`:允许非负整数。
|
|
108
|
+
- `positiveInteger`:允许正整数。
|
|
109
|
+
- `range`:只允许数字,并按 `[min, max]` 限制范围。
|
|
110
|
+
- `priceRange`:只允许金额,最多两位小数,并按 `[min, max]` 限制范围;最终事件会补齐两位小数。
|
|
111
|
+
- `.empty`:用于 `range` / `priceRange`,传入最小值时仍允许最终值为空。
|
|
112
|
+
|
|
110
113
|
## 文件插件(files)
|
|
111
114
|
```html
|
|
112
115
|
1. downloadBase64File(base64文件下载)
|
|
@@ -143,11 +146,276 @@ this.$test.email("200") //false
|
|
|
143
146
|
2. throttle(节流)
|
|
144
147
|
3. sleep(睡眠阻塞延时)
|
|
145
148
|
```
|
|
149
|
+
|
|
150
|
+
## 请求取消(request.AxiosCanceler)
|
|
151
|
+
```js
|
|
152
|
+
import { request } from 'common-utils-kit';
|
|
153
|
+
|
|
154
|
+
const canceler = new request.AxiosCanceler({ type: 'abort' });
|
|
155
|
+
const config = { method: 'get', url: '/api/list', params: { pageNum: 1 } };
|
|
156
|
+
canceler.addPending(config);
|
|
157
|
+
canceler.removePending(config);
|
|
158
|
+
canceler.removeAllPending();
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## 请求封装(request)
|
|
162
|
+
```js
|
|
163
|
+
import { request } from 'common-utils-kit';
|
|
164
|
+
|
|
165
|
+
const http = new request.RequestHttp({
|
|
166
|
+
baseURL: '/api',
|
|
167
|
+
timeout: 60000,
|
|
168
|
+
withCredentials: true,
|
|
169
|
+
}, {
|
|
170
|
+
getToken: () => localStorage.getItem('token'),
|
|
171
|
+
tokenHeader: 'token',
|
|
172
|
+
showLoading: () => {},
|
|
173
|
+
hideLoading: () => {},
|
|
174
|
+
message: Message,
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
http.get('/user/info', { id: 1 }, { cancel: true, loading: false });
|
|
178
|
+
http.post('/user/save', { name: '张三' });
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
请求选项:
|
|
182
|
+
|
|
183
|
+
- `cancel`:是否启用重复请求取消,默认启用。
|
|
184
|
+
- `loading`:是否调用 loading 回调,默认启用。
|
|
185
|
+
- `getToken`:业务项目注入的 token 获取函数。
|
|
186
|
+
- `tokenHeader`:token 写入的请求头字段名,默认 `token`。
|
|
187
|
+
- `message`:业务项目注入的提示对象,兼容 Element UI `Message`。
|
|
188
|
+
|
|
189
|
+
## WebSocket(websocket)
|
|
190
|
+
```js
|
|
191
|
+
import { websocket } from 'common-utils-kit';
|
|
192
|
+
|
|
193
|
+
const client = websocket.createSocketClient({
|
|
194
|
+
url: 'ws://example.com/socket',
|
|
195
|
+
heartMessage: 'ping',
|
|
196
|
+
heartTime: 60000,
|
|
197
|
+
reconnectTime: 5000,
|
|
198
|
+
onMessage: event => console.log(event.data),
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
client.connect();
|
|
202
|
+
client.send({ type: 'hello' });
|
|
203
|
+
client.close();
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## 表格工具(table)
|
|
207
|
+
|
|
208
|
+
示例工程可在 `/element/table` 页面查看合并行展示效果。
|
|
209
|
+
|
|
210
|
+
```vue
|
|
211
|
+
<template>
|
|
212
|
+
<el-table
|
|
213
|
+
:data="tableData"
|
|
214
|
+
:span-method="spanMethod"
|
|
215
|
+
border
|
|
216
|
+
>
|
|
217
|
+
<el-table-column prop="region" label="区域" />
|
|
218
|
+
<el-table-column prop="city" label="城市" />
|
|
219
|
+
<el-table-column prop="store" label="门店" />
|
|
220
|
+
<el-table-column prop="count" label="数量" />
|
|
221
|
+
</el-table>
|
|
222
|
+
</template>
|
|
223
|
+
|
|
224
|
+
<script>
|
|
225
|
+
import { table } from 'common-utils-kit';
|
|
226
|
+
|
|
227
|
+
export default {
|
|
228
|
+
data() {
|
|
229
|
+
return {
|
|
230
|
+
tableData: [],
|
|
231
|
+
spanMethod: () => [1, 1],
|
|
232
|
+
sourceData: [
|
|
233
|
+
{ region: '华东', city: '杭州', store: '西湖店', count: 12 },
|
|
234
|
+
{ region: '华南', city: '广州', store: '天河店', count: 8 },
|
|
235
|
+
{ region: '华东', city: '上海', store: '浦东店', count: 15 }
|
|
236
|
+
]
|
|
237
|
+
};
|
|
238
|
+
},
|
|
239
|
+
created() {
|
|
240
|
+
const sorted = table.sortMergeData(this.sourceData, 'region');
|
|
241
|
+
const spanList = table.getMergeSpanList(sorted, 'region');
|
|
242
|
+
this.tableData = sorted;
|
|
243
|
+
this.spanMethod = table.createMergeSpanMethod(spanList, 0);
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
</script>
|
|
247
|
+
```
|
|
248
|
+
|
|
146
249
|
## 组件使用
|
|
250
|
+
组件源码按依赖分类维护:不依赖 UI 框架的自定义 Vue 组件放在 `src/components`,Element UI 二次封装或强依赖 Element UI 的组件放在 `src/element-ui`。历史上已从 `common-utils-kit/element` 导出的自定义组件会先保留兼容导出。
|
|
251
|
+
|
|
252
|
+
vue.config.js文件中设置别名
|
|
253
|
+
configureWebpack: {
|
|
254
|
+
resolve: {
|
|
255
|
+
alias: {
|
|
256
|
+
'common-utils-kit/element': 'common-utils-kit/lib/element/index.umd.js'
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
页面
|
|
261
|
+
import {View3D} from 'common-utils-kit/element';
|
|
262
|
+
直接使用
|
|
263
|
+
如果是使用webpack5以上版本的可直接使用
|
|
264
|
+
import {View3D} from 'common-utils-kit/element';
|
|
265
|
+
|
|
266
|
+
### ScrollTable 滚动表格
|
|
267
|
+
|
|
268
|
+
```vue
|
|
269
|
+
<template>
|
|
270
|
+
<scroll-table
|
|
271
|
+
:columns="columns"
|
|
272
|
+
:main-data="tableData"
|
|
273
|
+
:loading="loading"
|
|
274
|
+
:finished="finished"
|
|
275
|
+
height="460"
|
|
276
|
+
@load="loadMore"
|
|
277
|
+
/>
|
|
278
|
+
</template>
|
|
279
|
+
|
|
280
|
+
<script>
|
|
281
|
+
import { ScrollTable } from 'common-utils-kit/element';
|
|
282
|
+
|
|
283
|
+
export default {
|
|
284
|
+
components: {
|
|
285
|
+
ScrollTable,
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
</script>
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
参数:
|
|
292
|
+
|
|
293
|
+
- `columns`:列配置,字段使用 `param`、`label`、`width`、`minWidth`、`align`、`tooltip`。
|
|
294
|
+
- `mainData`:表格数据。
|
|
295
|
+
- `loading`:是否正在加载下一页。
|
|
296
|
+
- `finished`:是否已无更多数据。
|
|
297
|
+
- `loadDistance`:距离底部多少像素触发 `load`,默认 `40`。
|
|
298
|
+
|
|
299
|
+
### ScreenScale 缩放容器
|
|
300
|
+
|
|
301
|
+
```vue
|
|
302
|
+
<template>
|
|
303
|
+
<screen-scale :width="1920" :height="1080">
|
|
304
|
+
<div style="width: 1920px; height: 1080px;">
|
|
305
|
+
设计稿内容
|
|
306
|
+
</div>
|
|
307
|
+
</screen-scale>
|
|
308
|
+
</template>
|
|
309
|
+
|
|
310
|
+
<script>
|
|
311
|
+
import { ScreenScale } from 'common-utils-kit/element';
|
|
312
|
+
|
|
313
|
+
export default {
|
|
314
|
+
components: {
|
|
315
|
+
ScreenScale,
|
|
316
|
+
},
|
|
317
|
+
};
|
|
318
|
+
</script>
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
参数:
|
|
322
|
+
|
|
323
|
+
- `width`:设计稿宽度,默认 `1920`。
|
|
324
|
+
- `height`:设计稿高度,默认 `1080`。
|
|
325
|
+
|
|
326
|
+
### ResetDrawer 抽屉壳
|
|
327
|
+
|
|
328
|
+
用于解决业务抽屉直接用 `v-if` 销毁整个组件时,`el-drawer append-to-body` 挂载异常的问题。`ResetDrawer` 会让外层 `el-drawer` 常驻并固定 `append-to-body`,只在打开时渲染默认插槽,关闭动画结束后再销毁默认插槽内容。
|
|
329
|
+
|
|
330
|
+
```vue
|
|
331
|
+
<template>
|
|
332
|
+
<reset-drawer
|
|
333
|
+
v-model="drawerVisible"
|
|
334
|
+
title="业务抽屉"
|
|
335
|
+
size="480px"
|
|
336
|
+
:wrapper-closable="false"
|
|
337
|
+
>
|
|
338
|
+
<business-drawer-content :id="currentId" />
|
|
339
|
+
</reset-drawer>
|
|
340
|
+
</template>
|
|
341
|
+
|
|
342
|
+
<script>
|
|
343
|
+
import { ResetDrawer } from 'common-utils-kit/element';
|
|
344
|
+
|
|
345
|
+
export default {
|
|
346
|
+
components: {
|
|
347
|
+
ResetDrawer,
|
|
348
|
+
},
|
|
349
|
+
data() {
|
|
350
|
+
return {
|
|
351
|
+
drawerVisible: false,
|
|
352
|
+
currentId: '',
|
|
353
|
+
};
|
|
354
|
+
},
|
|
355
|
+
};
|
|
356
|
+
</script>
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
使用说明:
|
|
360
|
+
- 不要再给 `reset-drawer` 外层套 `v-if`,否则外层 `el-drawer` 仍会被销毁。
|
|
361
|
+
- 默认插槽内容会在每次打开时重新创建,业务组件的 `created`、`mounted` 和 `data` 会自然重新执行。
|
|
362
|
+
- 插槽内容会在 `closed` 事件后销毁,避免关闭动画过程中内容突然消失。
|
|
363
|
+
- 组件会过滤 `destroy-on-close` 和 `append-to-body` 透传,销毁时机由 `ResetDrawer` 统一控制。
|
|
364
|
+
- 常用 `el-drawer` 参数如 `title`、`size`、`direction`、`wrapper-closable`、`before-close` 可继续按原方式传入。
|
|
365
|
+
|
|
366
|
+
### ResetDialog 对话框壳
|
|
367
|
+
|
|
368
|
+
用于解决业务对话框直接用 `v-if` 销毁整个组件时,`el-dialog append-to-body` 挂载异常的问题。`ResetDialog` 会让外层 `el-dialog` 常驻并固定 `append-to-body`,只在打开时渲染默认插槽和 footer 插槽,关闭动画结束后再销毁插槽内容。
|
|
369
|
+
|
|
370
|
+
```vue
|
|
371
|
+
<template>
|
|
372
|
+
<reset-dialog
|
|
373
|
+
v-model="dialogVisible"
|
|
374
|
+
title="业务对话框"
|
|
375
|
+
width="560px"
|
|
376
|
+
:close-on-click-modal="false"
|
|
377
|
+
>
|
|
378
|
+
<business-dialog-content :id="currentId" />
|
|
379
|
+
<template slot="footer">
|
|
380
|
+
<el-button @click="dialogVisible = false">
|
|
381
|
+
取消
|
|
382
|
+
</el-button>
|
|
383
|
+
<el-button type="primary" @click="dialogVisible = false">
|
|
384
|
+
确定
|
|
385
|
+
</el-button>
|
|
386
|
+
</template>
|
|
387
|
+
</reset-dialog>
|
|
388
|
+
</template>
|
|
389
|
+
|
|
390
|
+
<script>
|
|
391
|
+
import { ResetDialog } from 'common-utils-kit/element';
|
|
392
|
+
|
|
393
|
+
export default {
|
|
394
|
+
components: {
|
|
395
|
+
ResetDialog,
|
|
396
|
+
},
|
|
397
|
+
data() {
|
|
398
|
+
return {
|
|
399
|
+
dialogVisible: false,
|
|
400
|
+
currentId: '',
|
|
401
|
+
};
|
|
402
|
+
},
|
|
403
|
+
};
|
|
404
|
+
</script>
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
使用说明:
|
|
408
|
+
- 不要再给 `reset-dialog` 外层套 `v-if`,否则外层 `el-dialog` 仍会被销毁。
|
|
409
|
+
- 默认插槽和 `footer` 插槽内容会在每次打开时重新创建,业务组件状态会自然重置。
|
|
410
|
+
- 插槽内容会在 `closed` 事件后销毁,避免关闭动画过程中内容突然消失。
|
|
411
|
+
- 组件会过滤 `destroy-on-close` 和 `append-to-body` 透传,销毁时机由 `ResetDialog` 统一控制。
|
|
412
|
+
- 常用 `el-dialog` 参数如 `title`、`width`、`fullscreen`、`top`、`close-on-click-modal`、`before-close` 可继续按原方式传入。
|
|
413
|
+
|
|
147
414
|
## 样式使用
|
|
148
415
|
main.js文件中
|
|
149
416
|
import 'common-utils-kit/lib/utils-kit.css';
|
|
150
417
|
|
|
418
|
+
|
|
151
419
|
### 文件预览(preview)
|
|
152
420
|
需要安装 npm i docx-preview --save 预览docx
|
|
153
421
|
需要安装 npm i axios --save 预览docx
|