@sugarat/easypicker2-client 2.4.3 → 2.6.0
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/dist/assets/aria-bc8e8b0f.js +2 -0
- package/dist/assets/aria-bc8e8b0f.js.map +1 -0
- package/dist/assets/aria-legacy.af0825d3.js +2 -0
- package/dist/assets/data-analysis-3ce8c1c1.js +2 -0
- package/dist/assets/data-analysis-3ce8c1c1.js.map +1 -0
- package/dist/assets/data-analysis-legacy.985137a1.js +2 -0
- package/dist/assets/data-board-fc2c2ec1.js +2 -0
- package/dist/assets/data-board-fc2c2ec1.js.map +1 -0
- package/dist/assets/data-board-legacy.33116f7c.js +2 -0
- package/dist/assets/el-date-picker-b377a533.js +2 -0
- package/dist/assets/el-date-picker-b377a533.js.map +1 -0
- package/dist/assets/el-date-picker-cf2e83b6.css +1 -0
- package/dist/assets/el-date-picker-legacy.127f0787.js +2 -0
- package/dist/assets/el-dialog-25bd2fb8.css +1 -0
- package/dist/assets/el-dialog-5b7bce58.js +2 -0
- package/dist/assets/el-dialog-5b7bce58.js.map +1 -0
- package/dist/assets/el-dialog-legacy.e6ef2c86.js +2 -0
- package/dist/assets/el-dropdown-item-0c6ddabc.css +1 -0
- package/dist/assets/el-dropdown-item-e0275106.js +2 -0
- package/dist/assets/el-dropdown-item-e0275106.js.map +1 -0
- package/dist/assets/el-dropdown-item-legacy.4888d114.js +2 -0
- package/dist/assets/el-form-item-3aad794a.css +1 -0
- package/dist/assets/el-form-item-c0658f70.js +2 -0
- package/dist/assets/el-form-item-c0658f70.js.map +1 -0
- package/dist/assets/el-form-item-legacy.a8e8784e.js +2 -0
- package/dist/assets/el-loading-c8798044.js +2 -0
- package/dist/assets/el-loading-c8798044.js.map +1 -0
- package/dist/assets/el-loading-d0f2d079.css +1 -0
- package/dist/assets/el-loading-legacy.534bd799.js +2 -0
- package/dist/assets/el-pagination-bf7c736d.css +1 -0
- package/dist/assets/el-pagination-dabcccbb.js +2 -0
- package/dist/assets/el-pagination-dabcccbb.js.map +1 -0
- package/dist/assets/el-pagination-legacy.7d2ae10d.js +2 -0
- package/dist/assets/el-progress-54b274cd.js +2 -0
- package/dist/assets/el-progress-54b274cd.js.map +1 -0
- package/dist/assets/el-progress-63aabe3a.css +1 -0
- package/dist/assets/el-progress-legacy.07ca6502.js +2 -0
- package/dist/assets/el-select-6be23320.css +1 -0
- package/dist/assets/el-select-f81a7377.js +2 -0
- package/dist/assets/el-select-f81a7377.js.map +1 -0
- package/dist/assets/el-select-legacy.94fad7fa.js +2 -0
- package/dist/assets/el-switch-9eba6fd0.js +2 -0
- package/dist/assets/el-switch-9eba6fd0.js.map +1 -0
- package/dist/assets/el-switch-aeab2c6b.css +1 -0
- package/dist/assets/el-switch-legacy.490534be.js +2 -0
- package/dist/assets/el-tab-pane-4a1bb4c7.css +1 -0
- package/dist/assets/el-tab-pane-89bdd69b.js +2 -0
- package/dist/assets/el-tab-pane-89bdd69b.js.map +1 -0
- package/dist/assets/el-tab-pane-legacy.cfdbc441.js +2 -0
- package/dist/assets/el-table-column-6716308a.js +21 -0
- package/dist/assets/el-table-column-6716308a.js.map +1 -0
- package/dist/assets/el-table-column-6c2089f9.css +1 -0
- package/dist/assets/el-table-column-legacy.49685e5a.js +24 -0
- package/dist/assets/index-01e33329.css +1 -0
- package/dist/assets/index-0b0f29ec.js +2 -0
- package/dist/assets/index-0b0f29ec.js.map +1 -0
- package/dist/assets/index-17c6005d.css +1 -0
- package/dist/assets/index-20019c57.js +2 -0
- package/dist/assets/index-20019c57.js.map +1 -0
- package/dist/assets/index-247f2c67.css +1 -0
- package/dist/assets/index-248e88e2.js +2 -0
- package/dist/assets/index-248e88e2.js.map +1 -0
- package/dist/assets/index-3091894a.css +1 -0
- package/dist/assets/index-37e15bc6.css +1 -0
- package/dist/assets/index-39637d43.js +2 -0
- package/dist/assets/index-39637d43.js.map +1 -0
- package/dist/assets/index-3f82ab7a.css +1 -0
- package/dist/assets/index-4c81cf78.css +1 -0
- package/dist/assets/index-5099f123.js +2 -0
- package/dist/assets/index-5099f123.js.map +1 -0
- package/dist/assets/index-57513f17.css +1 -0
- package/dist/assets/index-76f31e30.css +1 -0
- package/dist/assets/index-76ff9b9b.css +1 -0
- package/dist/assets/index-8557974a.js +2 -0
- package/dist/assets/index-8557974a.js.map +1 -0
- package/dist/assets/index-85fcd87a.css +1 -0
- package/dist/assets/index-867d07e4.js +2 -0
- package/dist/assets/index-867d07e4.js.map +1 -0
- package/dist/assets/index-8f353d3b.js +2 -0
- package/dist/assets/index-8f353d3b.js.map +1 -0
- package/dist/assets/index-8f7abc30.js +2 -0
- package/dist/assets/index-8f7abc30.js.map +1 -0
- package/dist/assets/index-8fbd06a5.js +2 -0
- package/dist/assets/index-8fbd06a5.js.map +1 -0
- package/dist/assets/index-93c733b3.css +1 -0
- package/dist/assets/index-98b55468.css +1 -0
- package/dist/assets/index-9e6bd406.js +2 -0
- package/dist/assets/index-9e6bd406.js.map +1 -0
- package/dist/assets/index-a880597c.css +1 -0
- package/dist/assets/index-acdbf3b6.js +2 -0
- package/dist/assets/index-acdbf3b6.js.map +1 -0
- package/dist/assets/index-b3e58b02.js +2 -0
- package/dist/assets/index-b3e58b02.js.map +1 -0
- package/dist/assets/index-c13133c5.js +2 -0
- package/dist/assets/index-c13133c5.js.map +1 -0
- package/dist/assets/index-c1d6836c.js +2 -0
- package/dist/assets/index-c1d6836c.js.map +1 -0
- package/dist/assets/index-d26aeed5.css +1 -0
- package/dist/assets/index-d98be3e4.js +19 -0
- package/dist/assets/index-d98be3e4.js.map +1 -0
- package/dist/assets/index-d9db6cc1.js +2 -0
- package/dist/assets/index-d9db6cc1.js.map +1 -0
- package/dist/assets/index-da51da36.css +1 -0
- package/dist/assets/index-e0ef7135.js +2 -0
- package/dist/assets/index-e0ef7135.js.map +1 -0
- package/dist/assets/index-e7d8a83e.css +1 -0
- package/dist/assets/index-ebf625c9.js +2 -0
- package/dist/assets/index-ebf625c9.js.map +1 -0
- package/dist/assets/index-eda7d85a.js +2 -0
- package/dist/assets/index-eda7d85a.js.map +1 -0
- package/dist/assets/index-fdc557f8.js +2 -0
- package/dist/assets/index-fdc557f8.js.map +1 -0
- package/dist/assets/index-legacy.0c570346.js +2 -0
- package/dist/assets/index-legacy.24edddf9.js +2 -0
- package/dist/assets/index-legacy.31681402.js +2 -0
- package/dist/assets/index-legacy.3e6b32cf.js +2 -0
- package/dist/assets/index-legacy.4edc099d.js +2 -0
- package/dist/assets/index-legacy.614df679.js +2 -0
- package/dist/assets/index-legacy.6420d0ab.js +2 -0
- package/dist/assets/index-legacy.679e5ce1.js +2 -0
- package/dist/assets/index-legacy.7b42e0cb.js +2 -0
- package/dist/assets/index-legacy.7bafa2e6.js +2 -0
- package/dist/assets/index-legacy.7ff3d773.js +2 -0
- package/dist/assets/index-legacy.84e0eca9.js +2 -0
- package/dist/assets/index-legacy.9ca64f8c.js +2 -0
- package/dist/assets/index-legacy.a4371211.js +2 -0
- package/dist/assets/index-legacy.acb8b137.js +23 -0
- package/dist/assets/index-legacy.bc3790f6.js +2 -0
- package/dist/assets/index-legacy.d0e21cb1.js +2 -0
- package/dist/assets/index-legacy.daf56c8f.js +2 -0
- package/dist/assets/index-legacy.e12feae0.js +2 -0
- package/dist/assets/index-legacy.e7f8790c.js +2 -0
- package/dist/assets/index-legacy.f84efe08.js +2 -0
- package/dist/assets/isEqual-82bb65ad.js +2 -0
- package/dist/assets/isEqual-82bb65ad.js.map +1 -0
- package/dist/assets/isEqual-legacy.dbaa2a6e.js +2 -0
- package/dist/assets/other-8d7ba6a0.js +2 -0
- package/dist/assets/other-8d7ba6a0.js.map +1 -0
- package/dist/assets/other-legacy.39078796.js +2 -0
- package/dist/assets/polyfills-legacy.99e38685.js +4 -0
- package/dist/assets/refresh-f2c4c532.js +2 -0
- package/dist/assets/refresh-f2c4c532.js.map +1 -0
- package/dist/assets/refresh-legacy.0ee83ca1.js +2 -0
- package/dist/assets/tip-3d272885.js +2 -0
- package/dist/assets/tip-3d272885.js.map +1 -0
- package/dist/assets/tip-9cb18ee8.css +1 -0
- package/dist/assets/tip-legacy.dee89e85.js +2 -0
- package/dist/assets/validator-d4ea1237.js +2 -0
- package/dist/assets/validator-d4ea1237.js.map +1 -0
- package/dist/assets/validator-legacy.ecd1e5dd.js +2 -0
- package/{index.html → dist/index.html} +8 -1
- package/package.json +30 -19
- package/.env +0 -6
- package/.env.production +0 -3
- package/.env.test +0 -4
- package/.eslintignore +0 -0
- package/.eslintrc.json +0 -57
- package/.github/workflows/main.yml +0 -61
- package/.prettierrc.js +0 -9
- package/auto-imports.d.ts +0 -6
- package/components.d.ts +0 -56
- package/docker/ep_backup/easypicker2.sql +0 -214
- package/docker/ep_backup/mongodb/easypicker2/action.bson +0 -0
- package/docker/ep_backup/mongodb/easypicker2/action.metadata.json +0 -1
- package/docker/ep_backup/mongodb/easypicker2/log.bson +0 -0
- package/docker/ep_backup/mongodb/easypicker2/log.metadata.json +0 -1
- package/docker/ep_backup/user-config.json +0 -176
- package/docs/.env +0 -1
- package/docs/.env.production +0 -2
- package/docs/.vitepress/config.ts +0 -204
- package/docs/.vitepress/theme/bg.png +0 -0
- package/docs/.vitepress/theme/index.scss +0 -41
- package/docs/.vitepress/theme/index.ts +0 -5
- package/docs/author.md +0 -24
- package/docs/auto-imports.d.ts +0 -6
- package/docs/components.d.ts +0 -17
- package/docs/deploy/design/api.md +0 -3
- package/docs/deploy/design/db.md +0 -3
- package/docs/deploy/design/index.md +0 -3
- package/docs/deploy/design/shell.md +0 -9
- package/docs/deploy/faq.md +0 -86
- package/docs/deploy/index.md +0 -9
- package/docs/deploy/local.md +0 -275
- package/docs/deploy/online-new.md +0 -610
- package/docs/deploy/online.md +0 -683
- package/docs/deploy/qiniu.md +0 -183
- package/docs/index.md +0 -40
- package/docs/introduction/about/code.md +0 -26
- package/docs/introduction/about/index.md +0 -33
- package/docs/introduction/feature/index.md +0 -3
- package/docs/plan/log.md +0 -346
- package/docs/plan/todo.md +0 -127
- package/docs/plan/wish.md +0 -29
- package/docs/praise/index.md +0 -45
- package/docs/public/robots.txt +0 -2
- package/docs/src/apis/ajax.ts +0 -66
- package/docs/src/apis/index.ts +0 -1
- package/docs/src/apis/modules/wish.ts +0 -20
- package/docs/src/components/Avatar.vue +0 -60
- package/docs/src/components/Home.vue +0 -85
- package/docs/src/components/Picture.vue +0 -13
- package/docs/src/components/Praise.vue +0 -52
- package/docs/src/components/WishBtn.vue +0 -98
- package/docs/src/components/WishPanel.vue +0 -170
- package/docs/src/components/callme/index.vue +0 -72
- package/docs/vite.config.ts +0 -42
- package/public/favicon.ico +0 -0
- package/public/logo.png +0 -0
- package/scripts/deploy/docs.mjs +0 -24
- package/scripts/deploy/prod.mjs +0 -24
- package/scripts/deploy/test.mjs +0 -26
- package/src/@types/ajax.d.ts +0 -5
- package/src/@types/api.d.ts +0 -305
- package/src/@types/lib.d.ts +0 -26
- package/src/@types/page.d.ts +0 -18
- package/src/App.vue +0 -36
- package/src/apis/ajax.ts +0 -72
- package/src/apis/index.ts +0 -20
- package/src/apis/modules/action.ts +0 -17
- package/src/apis/modules/category.ts +0 -20
- package/src/apis/modules/config.ts +0 -19
- package/src/apis/modules/file.ts +0 -150
- package/src/apis/modules/people.ts +0 -81
- package/src/apis/modules/public.ts +0 -49
- package/src/apis/modules/super/overview.ts +0 -56
- package/src/apis/modules/super/user.ts +0 -62
- package/src/apis/modules/task.ts +0 -67
- package/src/apis/modules/user.ts +0 -56
- package/src/apis/modules/wish.ts +0 -31
- package/src/assets/i/EasyPicker.png +0 -0
- package/src/assets/logo.png +0 -0
- package/src/assets/styles/app.css +0 -69
- package/src/components/HomeFooter/index.vue +0 -134
- package/src/components/HomeHeader/index.vue +0 -156
- package/src/components/InfosForm/index.vue +0 -73
- package/src/components/MessageList/index.vue +0 -155
- package/src/components/MessagePanel/index.vue +0 -46
- package/src/components/Praise/index.vue +0 -102
- package/src/components/QrCode.vue +0 -44
- package/src/components/linkDialog.vue +0 -104
- package/src/components/loginPanel.vue +0 -92
- package/src/constants/index.ts +0 -83
- package/src/env.d.ts +0 -8
- package/src/main.ts +0 -19
- package/src/pages/404/index.vue +0 -59
- package/src/pages/about/index.vue +0 -152
- package/src/pages/callme/index.vue +0 -155
- package/src/pages/dashboard/config/index.vue +0 -304
- package/src/pages/dashboard/files/index.vue +0 -1152
- package/src/pages/dashboard/index.vue +0 -335
- package/src/pages/dashboard/manage/config/index.vue +0 -97
- package/src/pages/dashboard/manage/index.vue +0 -105
- package/src/pages/dashboard/manage/overview/index.vue +0 -486
- package/src/pages/dashboard/manage/user/index.vue +0 -678
- package/src/pages/dashboard/manage/wish/index.vue +0 -257
- package/src/pages/dashboard/tasks/components/CategoryPanel.vue +0 -208
- package/src/pages/dashboard/tasks/components/CreateTask.vue +0 -93
- package/src/pages/dashboard/tasks/components/TaskInfo.vue +0 -129
- package/src/pages/dashboard/tasks/components/infoPanel/ddl.vue +0 -96
- package/src/pages/dashboard/tasks/components/infoPanel/file.vue +0 -175
- package/src/pages/dashboard/tasks/components/infoPanel/info.vue +0 -467
- package/src/pages/dashboard/tasks/components/infoPanel/people.vue +0 -566
- package/src/pages/dashboard/tasks/components/infoPanel/template.vue +0 -146
- package/src/pages/dashboard/tasks/components/infoPanel/tip.vue +0 -55
- package/src/pages/dashboard/tasks/components/infoPanel/tipInfo.vue +0 -196
- package/src/pages/dashboard/tasks/index.vue +0 -302
- package/src/pages/dashboard/tasks/public.ts +0 -32
- package/src/pages/disabled/index.vue +0 -47
- package/src/pages/feedback/index.vue +0 -5
- package/src/pages/home/index.vue +0 -72
- package/src/pages/login/index.vue +0 -270
- package/src/pages/register/index.vue +0 -211
- package/src/pages/reset/index.vue +0 -186
- package/src/pages/task/index.vue +0 -895
- package/src/pages/wish/index.vue +0 -152
- package/src/router/Interceptor/index.ts +0 -112
- package/src/router/index.ts +0 -13
- package/src/router/routes/index.ts +0 -197
- package/src/shims-vue.d.ts +0 -6
- package/src/store/index.ts +0 -17
- package/src/store/modules/category.ts +0 -44
- package/src/store/modules/public.ts +0 -27
- package/src/store/modules/task.ts +0 -55
- package/src/store/modules/user.ts +0 -57
- package/src/utils/elementUI.ts +0 -8
- package/src/utils/networkUtil.ts +0 -236
- package/src/utils/other.ts +0 -25
- package/src/utils/regExp.ts +0 -11
- package/src/utils/stringUtil.ts +0 -241
- package/tsconfig.json +0 -24
- package/vite.config.ts +0 -55
- /package/{docs/public → dist}/favicon.ico +0 -0
- /package/{docs/public → dist}/logo.png +0 -0
package/src/utils/networkUtil.ts
DELETED
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
import { base64 } from './stringUtil'
|
|
2
|
-
|
|
3
|
-
/* eslint-disable no-restricted-syntax */
|
|
4
|
-
type SuccessCallback = (data: any) => void
|
|
5
|
-
export function jsonp(
|
|
6
|
-
url: string,
|
|
7
|
-
jsonpCallback: string,
|
|
8
|
-
success: SuccessCallback
|
|
9
|
-
) {
|
|
10
|
-
const $script = document.createElement('script')
|
|
11
|
-
$script.src = `${url}&callback=${jsonpCallback}`
|
|
12
|
-
$script.async = true
|
|
13
|
-
$script.type = 'text/javascript'
|
|
14
|
-
;(<any>window)[jsonpCallback] = function callback(data: any) {
|
|
15
|
-
if (success) {
|
|
16
|
-
success(data)
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
document.body.appendChild($script)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
interface UploadFileOptions {
|
|
23
|
-
success?: any
|
|
24
|
-
error?: any
|
|
25
|
-
process?: any
|
|
26
|
-
method?: string
|
|
27
|
-
}
|
|
28
|
-
export function uploadFile(
|
|
29
|
-
file: File,
|
|
30
|
-
url: string,
|
|
31
|
-
options?: UploadFileOptions
|
|
32
|
-
) {
|
|
33
|
-
const form = new FormData()
|
|
34
|
-
// ajax对象
|
|
35
|
-
const xhr = new XMLHttpRequest()
|
|
36
|
-
// 添加文件到表单中
|
|
37
|
-
form.append('file', file)
|
|
38
|
-
// 设置请求方式 路径 是否异步
|
|
39
|
-
xhr.open(options?.method || 'post', url, true)
|
|
40
|
-
// 设置请求头参数的方式,如果没有可忽略此行代码
|
|
41
|
-
xhr.setRequestHeader('token', localStorage.getItem('token') as string)
|
|
42
|
-
if (options?.success) {
|
|
43
|
-
// 上传完成
|
|
44
|
-
xhr.onload = (e) => {
|
|
45
|
-
const target = e?.currentTarget as any
|
|
46
|
-
if (target.response) {
|
|
47
|
-
options.success(JSON.parse(target.response))
|
|
48
|
-
return
|
|
49
|
-
}
|
|
50
|
-
options.success()
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
if (options?.error) {
|
|
54
|
-
// 上传出错
|
|
55
|
-
xhr.onerror = options.error
|
|
56
|
-
}
|
|
57
|
-
if (options?.process) {
|
|
58
|
-
// 上传中
|
|
59
|
-
xhr.onprogress = (e) => {
|
|
60
|
-
const { total, loaded, lengthComputable } = e
|
|
61
|
-
if (lengthComputable) {
|
|
62
|
-
options.process((loaded / total).toFixed(2))
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// 发送请求
|
|
68
|
-
xhr.send(form)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export interface tableItem {
|
|
72
|
-
value: string
|
|
73
|
-
col?: number
|
|
74
|
-
row?: number
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* 导出表格数据为xls
|
|
78
|
-
* @param headers 头部
|
|
79
|
-
* @param body 身体部分数据
|
|
80
|
-
*/
|
|
81
|
-
export function tableToExcel(
|
|
82
|
-
headers: (string | tableItem)[],
|
|
83
|
-
body: any[],
|
|
84
|
-
filename = 'res.xlsx'
|
|
85
|
-
) {
|
|
86
|
-
// 列标题
|
|
87
|
-
let str = `<tr>${headers
|
|
88
|
-
.map((v) => {
|
|
89
|
-
if (v instanceof Object) {
|
|
90
|
-
const { value, col = 1, row = 1 } = v
|
|
91
|
-
return `<th colspan="${col}" rowspan="${row}">${value}</th>`
|
|
92
|
-
}
|
|
93
|
-
return `<th>${v}</th>`
|
|
94
|
-
})
|
|
95
|
-
.join('')}</tr>`
|
|
96
|
-
// 循环遍历,每行加入tr标签,每个单元格加td标签
|
|
97
|
-
for (const row of body) {
|
|
98
|
-
str += '<tr>'
|
|
99
|
-
for (const cell of row) {
|
|
100
|
-
if (cell instanceof Object) {
|
|
101
|
-
const { value, col = 1, row = 1 } = cell
|
|
102
|
-
str += `<td colspan="${col}" rowspan="${row}">${value}</td>`
|
|
103
|
-
}
|
|
104
|
-
// 增加\t为了不让表格显示科学计数法或者其他格式
|
|
105
|
-
str += `<td>${`${cell}\t`}</td>`
|
|
106
|
-
}
|
|
107
|
-
str += '</tr>'
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Worksheet名
|
|
111
|
-
// const worksheet = 'sheet1'
|
|
112
|
-
// const uri = 'data:application/vnd.ms-excel;base64,'
|
|
113
|
-
|
|
114
|
-
// // 下载的表格模板数据
|
|
115
|
-
// const template =
|
|
116
|
-
// '<html xmlns:o="urn:schemas-microsoft-com:office:office" \n' +
|
|
117
|
-
// ' xmlns:x="urn:schemas-microsoft-com:office:excel" \n' +
|
|
118
|
-
// ' xmlns="http://www.w3.org/TR/REC-html40">\n' +
|
|
119
|
-
// ' <head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>\n' +
|
|
120
|
-
// ` <x:Name>${worksheet}</x:Name>\n` +
|
|
121
|
-
// ' <x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>\n' +
|
|
122
|
-
// ' </x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->\n' +
|
|
123
|
-
// ` </head><body><table>${str}</table></body></html>\n`
|
|
124
|
-
// 下载模板
|
|
125
|
-
// const tempA = document.createElement('a')
|
|
126
|
-
// tempA.href = uri + base64(template)
|
|
127
|
-
// tempA.download = filename
|
|
128
|
-
// document.body.appendChild(tempA)
|
|
129
|
-
// tempA.click()
|
|
130
|
-
// document.body.removeChild(tempA)
|
|
131
|
-
const tableElement = document.createElement('table')
|
|
132
|
-
tableElement.innerHTML = str
|
|
133
|
-
const wb = XLSX.utils.table_to_book(tableElement)
|
|
134
|
-
XLSX.writeFile(wb, filename)
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* 七牛云上传
|
|
139
|
-
*/
|
|
140
|
-
export function qiniuUpload(
|
|
141
|
-
token: string,
|
|
142
|
-
file: File,
|
|
143
|
-
key: string,
|
|
144
|
-
options?: UploadFileOptions
|
|
145
|
-
) {
|
|
146
|
-
const observable = qiniu.upload(file, key, token)
|
|
147
|
-
const { success, error, process } = options || {}
|
|
148
|
-
const subscription = observable.subscribe({
|
|
149
|
-
next(res) {
|
|
150
|
-
const {
|
|
151
|
-
total: { percent }
|
|
152
|
-
} = res
|
|
153
|
-
if (process) {
|
|
154
|
-
process(percent.toFixed(2), res, subscription)
|
|
155
|
-
}
|
|
156
|
-
},
|
|
157
|
-
error(err) {
|
|
158
|
-
if (error) {
|
|
159
|
-
error(err, subscription)
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
complete(res) {
|
|
163
|
-
if (success) {
|
|
164
|
-
success(res, subscription)
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
})
|
|
168
|
-
// subscription.close() // 取消上传
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
export function downLoadByUrl(url: string, filename = `${Date.now()}`) {
|
|
172
|
-
const a = document.createElement('a')
|
|
173
|
-
a.href = url
|
|
174
|
-
a.target = '_blank'
|
|
175
|
-
a.download = filename
|
|
176
|
-
a.click()
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* 解决图片被预览的问题
|
|
181
|
-
* @param url
|
|
182
|
-
* @param filename
|
|
183
|
-
*/
|
|
184
|
-
export function downLoadByXhr(
|
|
185
|
-
url: string,
|
|
186
|
-
filename = `${Date.now()}`,
|
|
187
|
-
options?: {
|
|
188
|
-
progress: (loaded: number, total: number) => void
|
|
189
|
-
success: (res) => void
|
|
190
|
-
}
|
|
191
|
-
) {
|
|
192
|
-
const { progress, success } = options || {}
|
|
193
|
-
const xhr = new XMLHttpRequest()
|
|
194
|
-
xhr.open('GET', url)
|
|
195
|
-
// 设置返回数据的类型为blob
|
|
196
|
-
xhr.responseType = 'blob'
|
|
197
|
-
|
|
198
|
-
// 增加的代码
|
|
199
|
-
xhr.onprogress = function (e) {
|
|
200
|
-
const { total, loaded } = e
|
|
201
|
-
if (typeof progress === 'function') {
|
|
202
|
-
progress(loaded, total)
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// 资源完成下载
|
|
207
|
-
xhr.onload = function () {
|
|
208
|
-
let name = filename
|
|
209
|
-
// 获取响应的blob对象
|
|
210
|
-
const blob = xhr.response
|
|
211
|
-
const a = document.createElement('a')
|
|
212
|
-
// 设置下载的文件名字
|
|
213
|
-
name = name || blob.name || 'download'
|
|
214
|
-
a.download = name
|
|
215
|
-
|
|
216
|
-
// 解决安全问题,新页面的window.opener 指向前一个页面的window对象
|
|
217
|
-
// 使用noopener使 window.opener 获取的值为null
|
|
218
|
-
a.rel = 'noopener'
|
|
219
|
-
|
|
220
|
-
// 创建一个DOMString指向这个blob
|
|
221
|
-
// 简单理解就是为这个blob对象生成一个可访问的链接
|
|
222
|
-
a.href = URL.createObjectURL(blob)
|
|
223
|
-
|
|
224
|
-
// 40s后移除这个临时链接
|
|
225
|
-
setTimeout(() => {
|
|
226
|
-
URL.revokeObjectURL(a.href)
|
|
227
|
-
}, 4e4) // 40s
|
|
228
|
-
// 触发a标签,执行下载
|
|
229
|
-
setTimeout(() => {
|
|
230
|
-
a.dispatchEvent(new MouseEvent('click'))
|
|
231
|
-
success(xhr)
|
|
232
|
-
}, 0)
|
|
233
|
-
}
|
|
234
|
-
// 发送请求
|
|
235
|
-
xhr.send()
|
|
236
|
-
}
|
package/src/utils/other.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/* eslint-disable prefer-rest-params */
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-this-alias */
|
|
3
|
-
export function debounce(func, wait = 1000, immediate = false) {
|
|
4
|
-
let timeout
|
|
5
|
-
let count = 0
|
|
6
|
-
return function () {
|
|
7
|
-
count += 1
|
|
8
|
-
const context = this
|
|
9
|
-
const args = arguments
|
|
10
|
-
const later = function () {
|
|
11
|
-
timeout = null
|
|
12
|
-
if (count > 0) {
|
|
13
|
-
func.apply(context, args)
|
|
14
|
-
count = 0
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
const callNow = immediate && !timeout
|
|
18
|
-
clearTimeout(timeout)
|
|
19
|
-
timeout = setTimeout(later, wait)
|
|
20
|
-
if (callNow) {
|
|
21
|
-
func.apply(context, args)
|
|
22
|
-
count = 0
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
package/src/utils/regExp.ts
DELETED
package/src/utils/stringUtil.ts
DELETED
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
import { ElMessage } from 'element-plus'
|
|
2
|
-
import SparkMD5 from 'spark-md5'
|
|
3
|
-
import copy from 'clipboard-copy'
|
|
4
|
-
import { jsonp } from './networkUtil'
|
|
5
|
-
/**
|
|
6
|
-
* 将结果写入的剪贴板
|
|
7
|
-
* @param {String} text
|
|
8
|
-
*/
|
|
9
|
-
export function copyRes(text: string, msg = '结果已成功复制到剪贴板') {
|
|
10
|
-
// 自定义
|
|
11
|
-
// const input = document.createElement('input')
|
|
12
|
-
// document.body.appendChild(input)
|
|
13
|
-
// input.setAttribute('value', text)
|
|
14
|
-
// input.select()
|
|
15
|
-
// if (document.execCommand('copy')) {
|
|
16
|
-
// document.execCommand('copy')
|
|
17
|
-
// }
|
|
18
|
-
// document.body.removeChild(input)
|
|
19
|
-
|
|
20
|
-
// 第三方
|
|
21
|
-
copy(text)
|
|
22
|
-
.then(() => {
|
|
23
|
-
if (msg) {
|
|
24
|
-
ElMessage.success(msg)
|
|
25
|
-
}
|
|
26
|
-
})
|
|
27
|
-
.catch((err) => {
|
|
28
|
-
ElMessage.error(err?.message || '无粘贴板权限')
|
|
29
|
-
ElMessage.warning('不支持自动复制,请手动选择复制')
|
|
30
|
-
})
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* 生成短地址
|
|
35
|
-
* @param url
|
|
36
|
-
*/
|
|
37
|
-
export function getShortUrl(text: string): Promise<string> {
|
|
38
|
-
return new Promise((resolve, reject) => {
|
|
39
|
-
jsonp(
|
|
40
|
-
`https://api.suowo.cn/api.htm?format=jsonp&url=${encodeURIComponent(
|
|
41
|
-
text
|
|
42
|
-
)}&key=5ec8a001be96bd79a37f19b8@bf33c7483d0c6900bb7bc90a0e6dfdf0&expireDate=2030-03-31&domain=0`,
|
|
43
|
-
'shortLink',
|
|
44
|
-
(res) => {
|
|
45
|
-
const { url, err } = res
|
|
46
|
-
if (err) {
|
|
47
|
-
reject(err)
|
|
48
|
-
}
|
|
49
|
-
resolve(url)
|
|
50
|
-
}
|
|
51
|
-
)
|
|
52
|
-
})
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export function base64(s: string) {
|
|
56
|
-
return window.btoa(unescape(encodeURIComponent(s)))
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export function formatDate(d: Date, fmt = 'yyyy-MM-dd hh:mm:ss') {
|
|
60
|
-
if (!(d instanceof Date)) {
|
|
61
|
-
d = new Date(d)
|
|
62
|
-
}
|
|
63
|
-
const o: any = {
|
|
64
|
-
'M+': d.getMonth() + 1, // 月份
|
|
65
|
-
'd+': d.getDate(), // 日
|
|
66
|
-
'h+': d.getHours(), // 小时
|
|
67
|
-
'm+': d.getMinutes(), // 分
|
|
68
|
-
's+': d.getSeconds(), // 秒
|
|
69
|
-
'q+': Math.floor((d.getMonth() + 3) / 3), // 季度
|
|
70
|
-
S: d.getMilliseconds() // 毫秒
|
|
71
|
-
}
|
|
72
|
-
if (/(y+)/.test(fmt)) {
|
|
73
|
-
fmt = fmt.replace(
|
|
74
|
-
RegExp.$1,
|
|
75
|
-
`${d.getFullYear()}`.substr(4 - RegExp.$1.length)
|
|
76
|
-
)
|
|
77
|
-
}
|
|
78
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
79
|
-
for (const k in o) {
|
|
80
|
-
if (new RegExp(`(${k})`).test(fmt))
|
|
81
|
-
fmt = fmt.replace(
|
|
82
|
-
RegExp.$1,
|
|
83
|
-
RegExp.$1.length === 1 ? o[k] : `00${o[k]}`.substr(`${o[k]}`.length)
|
|
84
|
-
)
|
|
85
|
-
}
|
|
86
|
-
return fmt
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export function getFileSuffix(str: string) {
|
|
90
|
-
const startIndex = str.lastIndexOf('.')
|
|
91
|
-
return startIndex >= 0 ? str.slice(startIndex) : ''
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export function getFileMd5Hash(file: File) {
|
|
95
|
-
return new Promise((resolve, reject) => {
|
|
96
|
-
const blobSlice = File.prototype.slice
|
|
97
|
-
const chunkSize = 2097152 // Read in chunks of 2MB
|
|
98
|
-
const chunks = Math.ceil(file.size / chunkSize)
|
|
99
|
-
let currentChunk = 0
|
|
100
|
-
const spark = new SparkMD5.ArrayBuffer()
|
|
101
|
-
const fileReader = new FileReader()
|
|
102
|
-
|
|
103
|
-
function loadNext() {
|
|
104
|
-
const start = currentChunk * chunkSize
|
|
105
|
-
const end = start + chunkSize >= file.size ? file.size : start + chunkSize
|
|
106
|
-
|
|
107
|
-
fileReader.readAsArrayBuffer(blobSlice.call(file, start, end))
|
|
108
|
-
}
|
|
109
|
-
fileReader.onload = function (e) {
|
|
110
|
-
// console.log('read chunk nr', currentChunk + 1, 'of', chunks)
|
|
111
|
-
spark.append(e?.target?.result) // Append array buffer
|
|
112
|
-
currentChunk += 1
|
|
113
|
-
|
|
114
|
-
if (currentChunk < chunks) {
|
|
115
|
-
loadNext()
|
|
116
|
-
} else {
|
|
117
|
-
// console.log('finished loading')
|
|
118
|
-
const hashResult = spark.end()
|
|
119
|
-
// console.info('computed hash', hashResult) // Compute hash
|
|
120
|
-
resolve(hashResult)
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
fileReader.onerror = function () {
|
|
125
|
-
reject(new Error('oops, something went wrong.'))
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
loadNext()
|
|
129
|
-
})
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
export function formatSize(
|
|
133
|
-
size: number,
|
|
134
|
-
pointLength?: number,
|
|
135
|
-
units?: string[]
|
|
136
|
-
) {
|
|
137
|
-
let unit
|
|
138
|
-
units = units || ['B', 'K', 'M', 'G', 'TB']
|
|
139
|
-
// eslint-disable-next-line no-cond-assign
|
|
140
|
-
while ((unit = units.shift()) && size > 1024) {
|
|
141
|
-
size /= 1024
|
|
142
|
-
}
|
|
143
|
-
return (
|
|
144
|
-
(unit === 'B'
|
|
145
|
-
? size
|
|
146
|
-
: size.toFixed(pointLength === undefined ? 2 : pointLength)) + unit
|
|
147
|
-
)
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* 浏览器支持预览的类型
|
|
152
|
-
*/
|
|
153
|
-
function getSupportPreviewType() {
|
|
154
|
-
const types = [
|
|
155
|
-
'image/jpeg',
|
|
156
|
-
'image/png',
|
|
157
|
-
'image/gif',
|
|
158
|
-
'image/bmp',
|
|
159
|
-
'image/webp',
|
|
160
|
-
'image/svg+xml',
|
|
161
|
-
'application/pdf',
|
|
162
|
-
'text/plain',
|
|
163
|
-
'video/mp4'
|
|
164
|
-
]
|
|
165
|
-
const supportTypes = []
|
|
166
|
-
types.forEach((type) => {
|
|
167
|
-
if (
|
|
168
|
-
typeof FileReader !== 'undefined' &&
|
|
169
|
-
typeof FileReader.prototype.readAsDataURL !== 'undefined'
|
|
170
|
-
) {
|
|
171
|
-
const fileReader = new FileReader()
|
|
172
|
-
if (fileReader.readAsDataURL) {
|
|
173
|
-
try {
|
|
174
|
-
fileReader.readAsDataURL(new Blob([new ArrayBuffer(1)], { type }))
|
|
175
|
-
supportTypes.push(type)
|
|
176
|
-
} catch (e) {
|
|
177
|
-
// console.log(e)
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
})
|
|
182
|
-
return supportTypes
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
export function isSupportPreview(type: string) {
|
|
186
|
-
const supportTypes = getSupportPreviewType()
|
|
187
|
-
return supportTypes.includes(type)
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
export function parseInfo(info: string): InfoItem[] {
|
|
191
|
-
return JSON.parse(info).map((v: string | InfoItem) => {
|
|
192
|
-
// 兼容旧表单数据
|
|
193
|
-
if (typeof v === 'string') {
|
|
194
|
-
return { type: 'input', text: v, value: '' }
|
|
195
|
-
}
|
|
196
|
-
// 兼容旧数据展示
|
|
197
|
-
if (!v.type) {
|
|
198
|
-
v.type = 'input'
|
|
199
|
-
}
|
|
200
|
-
v.value = v.value || ''
|
|
201
|
-
return v
|
|
202
|
-
})
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* 文件名合法化
|
|
207
|
-
*/
|
|
208
|
-
export function normalizeFileName(name: string) {
|
|
209
|
-
return name.replace(/[\\/:*?"<>|]/g, '-')
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
export const getDefaultFormat = () => {
|
|
213
|
-
return {
|
|
214
|
-
size: 0,
|
|
215
|
-
sizeUnit: 'MB',
|
|
216
|
-
status: false,
|
|
217
|
-
format: [],
|
|
218
|
-
limit: 10,
|
|
219
|
-
splitChar: '-'
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
export function parseFileFormat(format: string) {
|
|
223
|
-
const formatData = getDefaultFormat()
|
|
224
|
-
try {
|
|
225
|
-
const v = JSON.parse(format)
|
|
226
|
-
Object.keys(v).forEach((key) => {
|
|
227
|
-
formatData[key] = v[key] || formatData[key]
|
|
228
|
-
})
|
|
229
|
-
} catch (_) {
|
|
230
|
-
return formatData
|
|
231
|
-
}
|
|
232
|
-
return formatData
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
export function getTipImageKey(
|
|
236
|
-
key: string,
|
|
237
|
-
name: string,
|
|
238
|
-
uid?: number | string
|
|
239
|
-
) {
|
|
240
|
-
return `easypicker2/tip/${key}/${uid || Date.now()}/${name}`
|
|
241
|
-
}
|
package/tsconfig.json
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "esnext",
|
|
4
|
-
"module": "esnext",
|
|
5
|
-
"moduleResolution": "node",
|
|
6
|
-
"strict": false,
|
|
7
|
-
"jsx": "preserve",
|
|
8
|
-
"sourceMap": true,
|
|
9
|
-
"resolveJsonModule": true,
|
|
10
|
-
"esModuleInterop": true,
|
|
11
|
-
"allowJs": true,
|
|
12
|
-
"lib": ["esnext", "dom"],
|
|
13
|
-
"types": ["vite/client","node","element-plus/global"],
|
|
14
|
-
"baseUrl": "./",
|
|
15
|
-
"paths": {
|
|
16
|
-
"@/*": [
|
|
17
|
-
"src/*"
|
|
18
|
-
],
|
|
19
|
-
"@components/":["src/components/*"]
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "docs/**/*.ts", "docs/**/*.d.ts"],
|
|
23
|
-
"exclude": ["vite.config.ts"]
|
|
24
|
-
}
|
package/vite.config.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from 'vite'
|
|
2
|
-
import vue from '@vitejs/plugin-vue'
|
|
3
|
-
import path from 'path'
|
|
4
|
-
import AutoImport from 'unplugin-auto-import/vite'
|
|
5
|
-
import Components from 'unplugin-vue-components/vite'
|
|
6
|
-
import ElementPlus from 'unplugin-element-plus/vite'
|
|
7
|
-
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
|
|
8
|
-
import legacy from '@vitejs/plugin-legacy'
|
|
9
|
-
|
|
10
|
-
// https://vitejs.dev/config/
|
|
11
|
-
export default defineConfig({
|
|
12
|
-
plugins: [
|
|
13
|
-
legacy({
|
|
14
|
-
targets: ['defaults', 'not IE 11']
|
|
15
|
-
}),
|
|
16
|
-
vue(),
|
|
17
|
-
AutoImport({
|
|
18
|
-
resolvers: [ElementPlusResolver()]
|
|
19
|
-
}),
|
|
20
|
-
Components({
|
|
21
|
-
resolvers: [ElementPlusResolver()]
|
|
22
|
-
})
|
|
23
|
-
// ElementPlus({
|
|
24
|
-
// defaultLocale: 'zh-cn'
|
|
25
|
-
// })
|
|
26
|
-
],
|
|
27
|
-
optimizeDeps: {
|
|
28
|
-
include: ['vue', 'vue-router', 'vuex', 'axios', 'vue-json-viewer']
|
|
29
|
-
},
|
|
30
|
-
build: {
|
|
31
|
-
target: 'modules', // 默认值
|
|
32
|
-
sourcemap: true
|
|
33
|
-
},
|
|
34
|
-
server: {
|
|
35
|
-
host: '0.0.0.0',
|
|
36
|
-
proxy: {
|
|
37
|
-
'/api/': {
|
|
38
|
-
target: 'http://localhost:3000',
|
|
39
|
-
changeOrigin: true,
|
|
40
|
-
rewrite: (p) => p.replace(/^\/api/, '')
|
|
41
|
-
},
|
|
42
|
-
'/api-test/': {
|
|
43
|
-
target: 'https://ep.dev.sugarat.top',
|
|
44
|
-
changeOrigin: true,
|
|
45
|
-
rewrite: (p) => p.replace(/^\/api-test/, 'api/')
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
resolve: {
|
|
50
|
-
alias: {
|
|
51
|
-
'@': path.resolve(__dirname, './src'),
|
|
52
|
-
'@components': path.resolve(__dirname, './src/components')
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
})
|
|
File without changes
|
|
File without changes
|