zkqh-lagrange-utils 0.0.58 → 0.0.60
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/package.json
CHANGED
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "zkqh-lagrange-utils",
|
|
3
|
-
"private": false,
|
|
4
|
-
"version": "0.0.
|
|
5
|
-
"type": "module",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"dev": "vite",
|
|
8
|
-
"build": "vite build",
|
|
9
|
-
"gen-style": "node ./scripts/generate-naiveui-common-style.mjs"
|
|
10
|
-
},
|
|
11
|
-
"main": "dist/lagrange-utils.umd.cjs",
|
|
12
|
-
"module": "dist/lagrange-utils.js",
|
|
13
|
-
"sideEffects": [
|
|
14
|
-
"*.css"
|
|
15
|
-
],
|
|
16
|
-
"exports": {
|
|
17
|
-
".": {
|
|
18
|
-
"import": "./dist/lagrange-utils.js",
|
|
19
|
-
"require": "./dist/lagrange-utils.umd.cjs"
|
|
20
|
-
},
|
|
21
|
-
"./export_plugin": {
|
|
22
|
-
"import": "./src/service/export_plugin/index.js",
|
|
23
|
-
"default": "./src/service/export_plugin/index.js"
|
|
24
|
-
},
|
|
25
|
-
"./export_plugin/api": {
|
|
26
|
-
"import": "./src/service/export_plugin/api/index.js",
|
|
27
|
-
"default": "./src/service/export_plugin/api/index.js"
|
|
28
|
-
},
|
|
29
|
-
"./style.css": {
|
|
30
|
-
"default": "./dist/style.css"
|
|
31
|
-
},
|
|
32
|
-
"./assets/*": "./dist/assets/*",
|
|
33
|
-
"./assets/css/*": "./dist/assets/css/*",
|
|
34
|
-
"./assets/font/*": "./dist/assets/font/*",
|
|
35
|
-
"./assets/image/*": "./dist/assets/image/*",
|
|
36
|
-
"./postcss.config.js": {
|
|
37
|
-
"import": "./postcss.config.js",
|
|
38
|
-
"require": "./postcss.config.cjs",
|
|
39
|
-
"default": "./postcss.config.js"
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"files": [
|
|
43
|
-
"dist",
|
|
44
|
-
"assets",
|
|
45
|
-
"src/service",
|
|
46
|
-
"postcss.config.js",
|
|
47
|
-
"postcss.config.cjs"
|
|
48
|
-
],
|
|
49
|
-
"dependencies": {
|
|
50
|
-
"autoprefixer": "^10.4.22",
|
|
51
|
-
"axios": "^1.18.1",
|
|
52
|
-
"postcss-pxtorem": "^6.1.0",
|
|
53
|
-
"vue": "^3.3.0"
|
|
54
|
-
},
|
|
55
|
-
"peerDependencies": {
|
|
56
|
-
"naive-ui": "^2.40.0",
|
|
57
|
-
"vue": "^3.3.0"
|
|
58
|
-
},
|
|
59
|
-
"peerDependenciesMeta": {
|
|
60
|
-
"naive-ui": {
|
|
61
|
-
"optional": true
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
"devDependencies": {
|
|
65
|
-
"@vitejs/plugin-vue": "^5.0.4",
|
|
66
|
-
"@vitejs/plugin-vue-jsx": "^3.0.2",
|
|
67
|
-
"less": "^4.4.2",
|
|
68
|
-
"naive-ui": "2.43.1",
|
|
69
|
-
"vite": "^5.4.10",
|
|
70
|
-
"vite-plugin-static-copy": "^0.17.0"
|
|
71
|
-
},
|
|
72
|
-
"author": "zkqh-ddh",
|
|
73
|
-
"license": "MIT"
|
|
74
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "zkqh-lagrange-utils",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "0.0.60",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite",
|
|
8
|
+
"build": "vite build",
|
|
9
|
+
"gen-style": "node ./scripts/generate-naiveui-common-style.mjs"
|
|
10
|
+
},
|
|
11
|
+
"main": "dist/lagrange-utils.umd.cjs",
|
|
12
|
+
"module": "dist/lagrange-utils.js",
|
|
13
|
+
"sideEffects": [
|
|
14
|
+
"*.css"
|
|
15
|
+
],
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"import": "./dist/lagrange-utils.js",
|
|
19
|
+
"require": "./dist/lagrange-utils.umd.cjs"
|
|
20
|
+
},
|
|
21
|
+
"./export_plugin": {
|
|
22
|
+
"import": "./src/service/export_plugin/index.js",
|
|
23
|
+
"default": "./src/service/export_plugin/index.js"
|
|
24
|
+
},
|
|
25
|
+
"./export_plugin/api": {
|
|
26
|
+
"import": "./src/service/export_plugin/api/index.js",
|
|
27
|
+
"default": "./src/service/export_plugin/api/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./style.css": {
|
|
30
|
+
"default": "./dist/style.css"
|
|
31
|
+
},
|
|
32
|
+
"./assets/*": "./dist/assets/*",
|
|
33
|
+
"./assets/css/*": "./dist/assets/css/*",
|
|
34
|
+
"./assets/font/*": "./dist/assets/font/*",
|
|
35
|
+
"./assets/image/*": "./dist/assets/image/*",
|
|
36
|
+
"./postcss.config.js": {
|
|
37
|
+
"import": "./postcss.config.js",
|
|
38
|
+
"require": "./postcss.config.cjs",
|
|
39
|
+
"default": "./postcss.config.js"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"assets",
|
|
45
|
+
"src/service",
|
|
46
|
+
"postcss.config.js",
|
|
47
|
+
"postcss.config.cjs"
|
|
48
|
+
],
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"autoprefixer": "^10.4.22",
|
|
51
|
+
"axios": "^1.18.1",
|
|
52
|
+
"postcss-pxtorem": "^6.1.0",
|
|
53
|
+
"vue": "^3.3.0"
|
|
54
|
+
},
|
|
55
|
+
"peerDependencies": {
|
|
56
|
+
"naive-ui": "^2.40.0",
|
|
57
|
+
"vue": "^3.3.0"
|
|
58
|
+
},
|
|
59
|
+
"peerDependenciesMeta": {
|
|
60
|
+
"naive-ui": {
|
|
61
|
+
"optional": true
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@vitejs/plugin-vue": "^5.0.4",
|
|
66
|
+
"@vitejs/plugin-vue-jsx": "^3.0.2",
|
|
67
|
+
"less": "^4.4.2",
|
|
68
|
+
"naive-ui": "2.43.1",
|
|
69
|
+
"vite": "^5.4.10",
|
|
70
|
+
"vite-plugin-static-copy": "^0.17.0"
|
|
71
|
+
},
|
|
72
|
+
"author": "zkqh-ddh",
|
|
73
|
+
"license": "MIT"
|
|
74
|
+
}
|
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
:key="treeSelectKey"
|
|
5
5
|
:value="treeSelectValue"
|
|
6
6
|
size="small"
|
|
7
|
-
placeholder="请选择本地目录"
|
|
7
|
+
:placeholder="initLoading ? '目录加载中…' : '请选择本地目录'"
|
|
8
8
|
:consistent-menu-width="false"
|
|
9
9
|
show-path
|
|
10
10
|
separator="/"
|
|
11
11
|
filterable
|
|
12
12
|
clearable
|
|
13
|
+
:loading="initLoading"
|
|
14
|
+
:disabled="initLoading"
|
|
13
15
|
:options="treeOptions"
|
|
14
16
|
:expanded-keys="expandedKeys"
|
|
15
17
|
:menu-props="{ class: 'plugin_dir_select_tree' }"
|
|
@@ -17,7 +19,13 @@
|
|
|
17
19
|
:on-load="onLoadTreeNode"
|
|
18
20
|
@update:expanded-keys="onExpandedKeysUpdate"
|
|
19
21
|
@update:value="onDirChange" />
|
|
20
|
-
<
|
|
22
|
+
<span
|
|
23
|
+
v-if="initLoading"
|
|
24
|
+
class="_pds_loading lc_fs_s">
|
|
25
|
+
<n-spin :size="14" />
|
|
26
|
+
加载目录中…
|
|
27
|
+
</span>
|
|
28
|
+
<template v-else-if="diskUsageText">
|
|
21
29
|
<span class="_pds_folder_icon">
|
|
22
30
|
<i class="lc lc-tuxing1"></i>
|
|
23
31
|
</span>
|
|
@@ -71,6 +79,7 @@ export default defineComponent({
|
|
|
71
79
|
const expandedKeys = ref([])
|
|
72
80
|
const treeSelectKey = ref(0)
|
|
73
81
|
const defaultDisk = ref({})
|
|
82
|
+
const initLoading = ref(true)
|
|
74
83
|
|
|
75
84
|
const treeSelectValue = computed(() => toTreeKey(modelValue.value))
|
|
76
85
|
|
|
@@ -86,17 +95,22 @@ export default defineComponent({
|
|
|
86
95
|
return Math.min(100, (used / total) * 100)
|
|
87
96
|
})
|
|
88
97
|
|
|
89
|
-
const
|
|
98
|
+
const setDirname = (path) => {
|
|
99
|
+
emit("update:modelValue", path ? normalizeDir(path) : "")
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* 更新右侧占用;传空则清空
|
|
104
|
+
* @param {object | null} disk
|
|
105
|
+
*/
|
|
106
|
+
const applyDisk = (disk) => {
|
|
107
|
+
defaultDisk.value = disk || {}
|
|
90
108
|
emit("update:diskInfo", {
|
|
91
109
|
total_size: defaultDisk.value?.total_size || 0,
|
|
92
110
|
used_size: defaultDisk.value?.used_size || 0,
|
|
93
111
|
})
|
|
94
112
|
}
|
|
95
113
|
|
|
96
|
-
const setDirname = (path) => {
|
|
97
|
-
emit("update:modelValue", path)
|
|
98
|
-
}
|
|
99
|
-
|
|
100
114
|
/** 打开新建文件夹弹窗 */
|
|
101
115
|
const openCreateFolder = (parentPath, e) => {
|
|
102
116
|
e?.stopPropagation?.()
|
|
@@ -144,8 +158,8 @@ export default defineComponent({
|
|
|
144
158
|
}
|
|
145
159
|
|
|
146
160
|
/**
|
|
147
|
-
*
|
|
148
|
-
* @param {string} targetPath
|
|
161
|
+
* 按路径展开目录树,保证深层路径可回显
|
|
162
|
+
* @param {string} targetPath
|
|
149
163
|
*/
|
|
150
164
|
const hydrateTreePath = async (targetPath) => {
|
|
151
165
|
const targetKey = toTreeKey(targetPath)
|
|
@@ -223,20 +237,20 @@ export default defineComponent({
|
|
|
223
237
|
await hydrateTreePath(newPath)
|
|
224
238
|
}
|
|
225
239
|
|
|
226
|
-
|
|
240
|
+
/**
|
|
241
|
+
* @returns {Promise<{ root: string, disk: object } | null>}
|
|
242
|
+
*/
|
|
243
|
+
const fetchDefault = async () => {
|
|
227
244
|
try {
|
|
228
245
|
const res = await pluginApi.getDefaultDir()
|
|
229
246
|
if (res.code === 200 && res.data) {
|
|
230
|
-
defaultDisk.value = res.data
|
|
231
247
|
const root = normalizeDir(res.data.root || "")
|
|
232
|
-
|
|
233
|
-
emitDiskInfo()
|
|
234
|
-
return root
|
|
248
|
+
return root ? { root, disk: res.data } : null
|
|
235
249
|
}
|
|
236
250
|
} catch (e) {
|
|
237
251
|
console.error(e)
|
|
238
252
|
}
|
|
239
|
-
return
|
|
253
|
+
return null
|
|
240
254
|
}
|
|
241
255
|
|
|
242
256
|
const loadDisks = async () => {
|
|
@@ -248,17 +262,51 @@ export default defineComponent({
|
|
|
248
262
|
key: toTreeKey(disk.path) || disk.path,
|
|
249
263
|
isLeaf: false,
|
|
250
264
|
}))
|
|
265
|
+
return
|
|
251
266
|
}
|
|
252
267
|
} catch (e) {
|
|
253
|
-
|
|
268
|
+
console.error(e)
|
|
254
269
|
}
|
|
270
|
+
treeOptions.value = []
|
|
255
271
|
}
|
|
256
272
|
|
|
273
|
+
/**
|
|
274
|
+
* 并行拉默认目录与磁盘列表;有默认目录则先反填,再展开树
|
|
275
|
+
*/
|
|
257
276
|
const initDirectory = async () => {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
277
|
+
initLoading.value = true
|
|
278
|
+
try {
|
|
279
|
+
const [info] = await Promise.all([fetchDefault(), loadDisks()])
|
|
280
|
+
if (!info) {
|
|
281
|
+
setDirname("")
|
|
282
|
+
applyDisk(null)
|
|
283
|
+
return
|
|
284
|
+
}
|
|
285
|
+
setDirname(info.root)
|
|
286
|
+
applyDisk(info.disk)
|
|
287
|
+
await hydrateTreePath(info.root)
|
|
288
|
+
} finally {
|
|
289
|
+
initLoading.value = false
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* 写入默认目录并刷新占用;path 为空表示清空
|
|
295
|
+
* @param {string} path
|
|
296
|
+
*/
|
|
297
|
+
const syncDefaultDir = async (path) => {
|
|
298
|
+
const next = path ? normalizeDir(path) : ""
|
|
299
|
+
setDirname(next)
|
|
300
|
+
try {
|
|
301
|
+
await pluginApi.setDefaultDir(next)
|
|
302
|
+
if (!next) {
|
|
303
|
+
applyDisk(null)
|
|
304
|
+
return
|
|
305
|
+
}
|
|
306
|
+
const info = await fetchDefault()
|
|
307
|
+
applyDisk(info?.disk || null)
|
|
308
|
+
} catch (e) {
|
|
309
|
+
console.error(e)
|
|
262
310
|
}
|
|
263
311
|
}
|
|
264
312
|
|
|
@@ -271,18 +319,7 @@ export default defineComponent({
|
|
|
271
319
|
}
|
|
272
320
|
|
|
273
321
|
const onDirChange = async (path) => {
|
|
274
|
-
|
|
275
|
-
setDirname("")
|
|
276
|
-
return
|
|
277
|
-
}
|
|
278
|
-
const next = normalizeDir(path)
|
|
279
|
-
setDirname(next)
|
|
280
|
-
try {
|
|
281
|
-
await pluginApi.setDefaultDir(next)
|
|
282
|
-
await loadDefault()
|
|
283
|
-
} catch (e) {
|
|
284
|
-
console.error(e)
|
|
285
|
-
}
|
|
322
|
+
await syncDefaultDir(path || "")
|
|
286
323
|
}
|
|
287
324
|
|
|
288
325
|
/**
|
|
@@ -290,7 +327,7 @@ export default defineComponent({
|
|
|
290
327
|
*/
|
|
291
328
|
const onFolderCreated = async ({ parentDir, newPath }) => {
|
|
292
329
|
await refreshTreeAfterCreate(parentDir, newPath)
|
|
293
|
-
await
|
|
330
|
+
await syncDefaultDir(toTreeKey(newPath) || newPath)
|
|
294
331
|
}
|
|
295
332
|
|
|
296
333
|
initDirectory()
|
|
@@ -302,6 +339,7 @@ export default defineComponent({
|
|
|
302
339
|
expandedKeys,
|
|
303
340
|
treeSelectKey,
|
|
304
341
|
treeSelectValue,
|
|
342
|
+
initLoading,
|
|
305
343
|
diskUsageText,
|
|
306
344
|
usagePercent,
|
|
307
345
|
renderTreeLabel,
|
|
@@ -10,6 +10,14 @@
|
|
|
10
10
|
flex-shrink: 0;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
._pds_loading {
|
|
14
|
+
display: inline-flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
gap: 6px;
|
|
17
|
+
color: var(--lc_text_color_secondary);
|
|
18
|
+
flex-shrink: 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
13
21
|
._pds_folder_icon {
|
|
14
22
|
display: inline-flex;
|
|
15
23
|
align-items: center;
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 默认读取平台登录 token
|
|
3
|
-
* @returns {string}
|
|
4
|
-
*/
|
|
5
|
-
export const getDefaultToken = () => {
|
|
6
|
-
try {
|
|
7
|
-
const token = localStorage.getItem("token")
|
|
8
|
-
if (!token) return ""
|
|
9
|
-
return JSON.parse(token)?.access_token || ""
|
|
10
|
-
} catch {
|
|
11
|
-
return ""
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* 默认平台根地址(当前页 origin,或 sys_con.baseURL)
|
|
17
|
-
* @returns {string}
|
|
18
|
-
*/
|
|
19
|
-
export const getDefaultUrl = () => {
|
|
20
|
-
const base =
|
|
21
|
-
(typeof window !== "undefined" && window.sys_con?.baseURL) ||
|
|
22
|
-
`${location.protocol}//${location.host}`
|
|
23
|
-
return String(base).replace(/\/$/, "")
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* 默认插件安装包地址:当前域名端口 + /plugins
|
|
28
|
-
* @returns {string}
|
|
29
|
-
*/
|
|
30
|
-
export const getDefaultDownloadUrl = () => {
|
|
31
|
-
if (typeof window === "undefined" || !window.location) return "/plugins/main.exe"
|
|
32
|
-
return `${window.location.origin}/plugins/main.exe`
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* 默认校验:导出 args 需含完整时间范围
|
|
37
|
-
* @param {Record<string, any>} args
|
|
38
|
-
* @returns {boolean}
|
|
39
|
-
*/
|
|
40
|
-
export const validateTimeRangeArgs = (args = {}) => {
|
|
41
|
-
if (!(args.start_time && args.end_time)) {
|
|
42
|
-
window.$message?.warning?.("请选择发生时间")
|
|
43
|
-
return false
|
|
44
|
-
}
|
|
45
|
-
return true
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* 生成导出默认名称:导出数据_<年><月><日>
|
|
50
|
-
* @returns {string}
|
|
51
|
-
*/
|
|
52
|
-
export const buildTaskName = () => {
|
|
53
|
-
const d = new Date()
|
|
54
|
-
const y = d.getFullYear()
|
|
55
|
-
const m = String(d.getMonth() + 1).padStart(2, "0")
|
|
56
|
-
const day = String(d.getDate()).padStart(2, "0")
|
|
57
|
-
return `导出数据_${y}${m}${day}`
|
|
58
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* 默认读取平台登录 token
|
|
3
|
+
* @returns {string}
|
|
4
|
+
*/
|
|
5
|
+
export const getDefaultToken = () => {
|
|
6
|
+
try {
|
|
7
|
+
const token = localStorage.getItem("token")
|
|
8
|
+
if (!token) return ""
|
|
9
|
+
return JSON.parse(token)?.access_token || ""
|
|
10
|
+
} catch {
|
|
11
|
+
return ""
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* 默认平台根地址(当前页 origin,或 sys_con.baseURL)
|
|
17
|
+
* @returns {string}
|
|
18
|
+
*/
|
|
19
|
+
export const getDefaultUrl = () => {
|
|
20
|
+
const base =
|
|
21
|
+
(typeof window !== "undefined" && window.sys_con?.baseURL) ||
|
|
22
|
+
`${location.protocol}//${location.host}`
|
|
23
|
+
return String(base).replace(/\/$/, "")
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* 默认插件安装包地址:当前域名端口 + /plugins.main.exe(由 nginx 代理到前端 dist)
|
|
28
|
+
* @returns {string}
|
|
29
|
+
*/
|
|
30
|
+
export const getDefaultDownloadUrl = () => {
|
|
31
|
+
if (typeof window === "undefined" || !window.location) return "/plugins/main.exe"
|
|
32
|
+
return `${window.location.origin}/plugins/main.exe`
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 默认校验:导出 args 需含完整时间范围
|
|
37
|
+
* @param {Record<string, any>} args
|
|
38
|
+
* @returns {boolean}
|
|
39
|
+
*/
|
|
40
|
+
export const validateTimeRangeArgs = (args = {}) => {
|
|
41
|
+
if (!(args.start_time && args.end_time)) {
|
|
42
|
+
window.$message?.warning?.("请选择发生时间")
|
|
43
|
+
return false
|
|
44
|
+
}
|
|
45
|
+
return true
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 生成导出默认名称:导出数据_<年><月><日>
|
|
50
|
+
* @returns {string}
|
|
51
|
+
*/
|
|
52
|
+
export const buildTaskName = () => {
|
|
53
|
+
const d = new Date()
|
|
54
|
+
const y = d.getFullYear()
|
|
55
|
+
const m = String(d.getMonth() + 1).padStart(2, "0")
|
|
56
|
+
const day = String(d.getDate()).padStart(2, "0")
|
|
57
|
+
return `导出数据_${y}${m}${day}`
|
|
58
|
+
}
|