@peng_kai/kit 0.3.0-beta.1 → 0.3.0-beta.11
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/.vscode/settings.json +2 -2
- package/admin/components/currency/src/CurrencyIcon.vue +35 -33
- package/admin/components/date/PeriodPicker.vue +122 -0
- package/admin/components/date/TimeFieldSelectForLabel.vue +24 -0
- package/admin/components/date/TtaTimeZone.vue +516 -0
- package/admin/components/date/helpers.ts +223 -0
- package/admin/components/date/index.ts +4 -0
- package/admin/components/filter/src/FilterReset.vue +39 -7
- package/admin/components/filter/src/more/TableSetting.vue +63 -0
- package/admin/components/provider/Admin.vue +17 -0
- package/admin/components/provider/admin-permission.ts +48 -0
- package/admin/components/provider/admin-router.ts +358 -0
- package/admin/components/provider/index.ts +3 -0
- package/admin/components/text/index.ts +2 -0
- package/admin/components/text/src/Amount.v2.vue +127 -0
- package/admin/components/text/src/Datetime.vue +15 -11
- package/admin/components/text/src/Num.vue +192 -0
- package/admin/components/upload/src/customRequests.ts +1 -1
- package/admin/components/upload/src/helpers.ts +1 -0
- package/admin/layout/large/Breadcrumb.vue +10 -23
- package/admin/layout/large/Content.vue +9 -6
- package/admin/layout/large/Layout.vue +129 -0
- package/admin/layout/large/Menu.vue +24 -17
- package/admin/layout/large/Notice.vue +140 -0
- package/admin/layout/large/Tabs.vue +177 -0
- package/admin/layout/large/index.ts +61 -1
- package/admin/layout/large/y682.mp3 +0 -0
- package/admin/permission/routerGuard.ts +15 -8
- package/admin/permission/vuePlugin.ts +5 -10
- package/admin/route-guards/index.ts +0 -1
- package/admin/stores/index.ts +1 -0
- package/admin/styles/classCover.scss +1 -1
- package/admin/styles/globalCover.scss +4 -0
- package/admin/styles/index.scss +2 -2
- package/antd/hooks/useAntdForm.helpers.ts +10 -1
- package/antd/hooks/useAntdModal.ts +20 -8
- package/antd/hooks/useAntdTable.ts +52 -2
- package/antd/hooks/useAntdTheme.ts +7 -0
- package/antd/index.ts +1 -1
- package/libs/bignumber.ts +1 -1
- package/libs/dayjs.ts +11 -1
- package/libs/fingerprintjs.ts +1 -0
- package/package.json +95 -95
- package/request/interceptors/getDeviceInfo.ts +9 -0
- package/utils/LocaleManager.ts +1 -1
- package/utils/locale/LocaleManager.ts +2 -1
- package/utils/number.ts +1 -2
- package/utils/storage.ts +31 -0
- package/utils/string.ts +14 -0
- package/utils/upload/AwsS3.ts +10 -3
- package/admin/layout/large/PageTab.vue +0 -70
- package/admin/route-guards/collapseMenu.ts +0 -11
- package/libs/a-calc.ts +0 -1
package/package.json
CHANGED
|
@@ -1,95 +1,95 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@peng_kai/kit",
|
|
3
|
-
"type": "module",
|
|
4
|
-
"version": "0.3.0-beta.
|
|
5
|
-
"description": "",
|
|
6
|
-
"author": "",
|
|
7
|
-
"license": "ISC",
|
|
8
|
-
"keywords": [],
|
|
9
|
-
"main": "index.js",
|
|
10
|
-
"scripts": {
|
|
11
|
-
"dev:js": "tsx ./admin/scripts/deploy.ts",
|
|
12
|
-
"lint": "eslint .",
|
|
13
|
-
"lint:fix": "eslint . --fix"
|
|
14
|
-
},
|
|
15
|
-
"peerDependencies": {
|
|
16
|
-
"ant-design-vue": "4.2.
|
|
17
|
-
"vue": "3.5.
|
|
18
|
-
"vue-router": "4.
|
|
19
|
-
},
|
|
20
|
-
"dependencies": {
|
|
21
|
-
"@aws-sdk/client-s3": "^3.
|
|
22
|
-
"@aws-sdk/lib-storage": "^3.
|
|
23
|
-
"@babel/generator": "^7.
|
|
24
|
-
"@babel/parser": "^7.
|
|
25
|
-
"@babel/traverse": "^7.
|
|
26
|
-
"@babel/types": "^7.
|
|
27
|
-
"@ckeditor/ckeditor5-vue": "^5.1.0",
|
|
28
|
-
"@fingerprintjs/fingerprintjs": "^4.
|
|
29
|
-
"@tanstack/vue-query": "^5.
|
|
30
|
-
"@vueuse/components": "^
|
|
31
|
-
"@vueuse/core": "^
|
|
32
|
-
"@vueuse/router": "^
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"localstorage-slim": "^2.7.1",
|
|
44
|
-
"lodash-es": "^4.17.21",
|
|
45
|
-
"nprogress": "^0.2.0",
|
|
46
|
-
"pinia": "^
|
|
47
|
-
"tsx": "^4.16.00",
|
|
48
|
-
"vue": "^3.5.
|
|
49
|
-
"vue-i18n": "^
|
|
50
|
-
"vue-router": "^4.
|
|
51
|
-
},
|
|
52
|
-
"devDependencies": {
|
|
53
|
-
"@ckeditor/ckeditor5-adapter-ckfinder": "^41.1.0",
|
|
54
|
-
"@ckeditor/ckeditor5-alignment": "^41.1.0",
|
|
55
|
-
"@ckeditor/ckeditor5-autoformat": "^41.1.0",
|
|
56
|
-
"@ckeditor/ckeditor5-basic-styles": "^41.1.0",
|
|
57
|
-
"@ckeditor/ckeditor5-block-quote": "^41.1.0",
|
|
58
|
-
"@ckeditor/ckeditor5-build-classic": "^41.1.0",
|
|
59
|
-
"@ckeditor/ckeditor5-code-block": "^41.1.0",
|
|
60
|
-
"@ckeditor/ckeditor5-document-outline": "^41.1.0",
|
|
61
|
-
"@ckeditor/ckeditor5-editor-classic": "^41.1.0",
|
|
62
|
-
"@ckeditor/ckeditor5-essentials": "^41.1.0",
|
|
63
|
-
"@ckeditor/ckeditor5-font": "^41.1.0",
|
|
64
|
-
"@ckeditor/ckeditor5-heading": "^41.1.0",
|
|
65
|
-
"@ckeditor/ckeditor5-highlight": "^41.1.0",
|
|
66
|
-
"@ckeditor/ckeditor5-horizontal-line": "^41.1.0",
|
|
67
|
-
"@ckeditor/ckeditor5-html-embed": "^41.1.0",
|
|
68
|
-
"@ckeditor/ckeditor5-html-support": "^41.1.0",
|
|
69
|
-
"@ckeditor/ckeditor5-image": "^41.1.0",
|
|
70
|
-
"@ckeditor/ckeditor5-import-word": "^41.1.0",
|
|
71
|
-
"@ckeditor/ckeditor5-indent": "^41.1.0",
|
|
72
|
-
"@ckeditor/ckeditor5-link": "^41.1.0",
|
|
73
|
-
"@ckeditor/ckeditor5-list": "^41.1.0",
|
|
74
|
-
"@ckeditor/ckeditor5-media-embed": "^41.1.0",
|
|
75
|
-
"@ckeditor/ckeditor5-paragraph": "^41.1.0",
|
|
76
|
-
"@ckeditor/ckeditor5-remove-format": "^41.1.0",
|
|
77
|
-
"@ckeditor/ckeditor5-show-blocks": "^41.1.0",
|
|
78
|
-
"@ckeditor/ckeditor5-source-editing": "^41.1.0",
|
|
79
|
-
"@ckeditor/ckeditor5-table": "^41.1.0",
|
|
80
|
-
"@ckeditor/ckeditor5-theme-lark": "^41.1.0",
|
|
81
|
-
"@ckeditor/ckeditor5-typing": "^41.1.0",
|
|
82
|
-
"@ckeditor/ckeditor5-upload": "^41.1.0",
|
|
83
|
-
"@ckeditor/ckeditor5-word-count": "^41.1.0",
|
|
84
|
-
"@peng_kai/lint": "^0.1.0",
|
|
85
|
-
"@types/archiver": "^6.0.
|
|
86
|
-
"@types/crypto-js": "^4.2.2",
|
|
87
|
-
"@types/lodash-es": "^4.17.12",
|
|
88
|
-
"@types/node": "^
|
|
89
|
-
"@types/nprogress": "^0.2.3",
|
|
90
|
-
"ant-design-vue": "^4.2.
|
|
91
|
-
"type-fest": "^4.
|
|
92
|
-
"typescript": "^5.
|
|
93
|
-
"vue-component-type-helpers": "^2.
|
|
94
|
-
}
|
|
95
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@peng_kai/kit",
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "0.3.0-beta.11",
|
|
5
|
+
"description": "",
|
|
6
|
+
"author": "",
|
|
7
|
+
"license": "ISC",
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"main": "index.js",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"dev:js": "tsx ./admin/scripts/deploy.ts",
|
|
12
|
+
"lint": "eslint .",
|
|
13
|
+
"lint:fix": "eslint . --fix"
|
|
14
|
+
},
|
|
15
|
+
"peerDependencies": {
|
|
16
|
+
"ant-design-vue": "4.2.6",
|
|
17
|
+
"vue": "3.5.17",
|
|
18
|
+
"vue-router": "4.5.1"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@aws-sdk/client-s3": "^3.840.0",
|
|
22
|
+
"@aws-sdk/lib-storage": "^3.840.0",
|
|
23
|
+
"@babel/generator": "^7.27.5",
|
|
24
|
+
"@babel/parser": "^7.27.7",
|
|
25
|
+
"@babel/traverse": "^7.27.7",
|
|
26
|
+
"@babel/types": "^7.27.7",
|
|
27
|
+
"@ckeditor/ckeditor5-vue": "^5.1.0",
|
|
28
|
+
"@fingerprintjs/fingerprintjs": "^4.6.2",
|
|
29
|
+
"@tanstack/vue-query": "^5.81.5",
|
|
30
|
+
"@vueuse/components": "^13.4.0",
|
|
31
|
+
"@vueuse/core": "^13.4.0",
|
|
32
|
+
"@vueuse/router": "^13.4.0",
|
|
33
|
+
"archiver": "^7.0.1",
|
|
34
|
+
"axios": "^1.10.0",
|
|
35
|
+
"bignumber.js": "^9.3.0",
|
|
36
|
+
"chokidar": "^3.6.0",
|
|
37
|
+
"crypto-es": "^2.1.0",
|
|
38
|
+
"dayjs": "^1.11.13",
|
|
39
|
+
"echarts": "^5.5.1",
|
|
40
|
+
"execa": "^9.4.0",
|
|
41
|
+
"fast-glob": "^3.3.2",
|
|
42
|
+
"fluid-dnd": "^2.4.0",
|
|
43
|
+
"localstorage-slim": "^2.7.1",
|
|
44
|
+
"lodash-es": "^4.17.21",
|
|
45
|
+
"nprogress": "^0.2.0",
|
|
46
|
+
"pinia": "^3.0.3",
|
|
47
|
+
"tsx": "^4.16.00",
|
|
48
|
+
"vue": "^3.5.17",
|
|
49
|
+
"vue-i18n": "^11.1.7",
|
|
50
|
+
"vue-router": "^4.5.1"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@ckeditor/ckeditor5-adapter-ckfinder": "^41.1.0",
|
|
54
|
+
"@ckeditor/ckeditor5-alignment": "^41.1.0",
|
|
55
|
+
"@ckeditor/ckeditor5-autoformat": "^41.1.0",
|
|
56
|
+
"@ckeditor/ckeditor5-basic-styles": "^41.1.0",
|
|
57
|
+
"@ckeditor/ckeditor5-block-quote": "^41.1.0",
|
|
58
|
+
"@ckeditor/ckeditor5-build-classic": "^41.1.0",
|
|
59
|
+
"@ckeditor/ckeditor5-code-block": "^41.1.0",
|
|
60
|
+
"@ckeditor/ckeditor5-document-outline": "^41.1.0",
|
|
61
|
+
"@ckeditor/ckeditor5-editor-classic": "^41.1.0",
|
|
62
|
+
"@ckeditor/ckeditor5-essentials": "^41.1.0",
|
|
63
|
+
"@ckeditor/ckeditor5-font": "^41.1.0",
|
|
64
|
+
"@ckeditor/ckeditor5-heading": "^41.1.0",
|
|
65
|
+
"@ckeditor/ckeditor5-highlight": "^41.1.0",
|
|
66
|
+
"@ckeditor/ckeditor5-horizontal-line": "^41.1.0",
|
|
67
|
+
"@ckeditor/ckeditor5-html-embed": "^41.1.0",
|
|
68
|
+
"@ckeditor/ckeditor5-html-support": "^41.1.0",
|
|
69
|
+
"@ckeditor/ckeditor5-image": "^41.1.0",
|
|
70
|
+
"@ckeditor/ckeditor5-import-word": "^41.1.0",
|
|
71
|
+
"@ckeditor/ckeditor5-indent": "^41.1.0",
|
|
72
|
+
"@ckeditor/ckeditor5-link": "^41.1.0",
|
|
73
|
+
"@ckeditor/ckeditor5-list": "^41.1.0",
|
|
74
|
+
"@ckeditor/ckeditor5-media-embed": "^41.1.0",
|
|
75
|
+
"@ckeditor/ckeditor5-paragraph": "^41.1.0",
|
|
76
|
+
"@ckeditor/ckeditor5-remove-format": "^41.1.0",
|
|
77
|
+
"@ckeditor/ckeditor5-show-blocks": "^41.1.0",
|
|
78
|
+
"@ckeditor/ckeditor5-source-editing": "^41.1.0",
|
|
79
|
+
"@ckeditor/ckeditor5-table": "^41.1.0",
|
|
80
|
+
"@ckeditor/ckeditor5-theme-lark": "^41.1.0",
|
|
81
|
+
"@ckeditor/ckeditor5-typing": "^41.1.0",
|
|
82
|
+
"@ckeditor/ckeditor5-upload": "^41.1.0",
|
|
83
|
+
"@ckeditor/ckeditor5-word-count": "^41.1.0",
|
|
84
|
+
"@peng_kai/lint": "^0.1.0",
|
|
85
|
+
"@types/archiver": "^6.0.3",
|
|
86
|
+
"@types/crypto-js": "^4.2.2",
|
|
87
|
+
"@types/lodash-es": "^4.17.12",
|
|
88
|
+
"@types/node": "^22.15.33",
|
|
89
|
+
"@types/nprogress": "^0.2.3",
|
|
90
|
+
"ant-design-vue": "^4.2.6",
|
|
91
|
+
"type-fest": "^4.41.0",
|
|
92
|
+
"typescript": "^5.8.3",
|
|
93
|
+
"vue-component-type-helpers": "^2.2.10"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AxiosInterceptorManager } from 'axios';
|
|
2
2
|
import FingerprintJS from '@fingerprintjs/fingerprintjs';
|
|
3
3
|
import type { GetResult } from '@fingerprintjs/fingerprintjs';
|
|
4
|
+
import { toBase64 } from '../../utils/string';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* 【请求拦截器】检索设备信息并在请求中设置“Device”头。
|
|
@@ -24,8 +25,16 @@ export function getDeviceInfo(callback: (base: Record<string, any>, all: GetResu
|
|
|
24
25
|
};
|
|
25
26
|
|
|
26
27
|
req.headers.set('Device', callback(base, result));
|
|
28
|
+
req.headers.set('Accept-Date', getCurrentTimeZone());
|
|
27
29
|
|
|
28
30
|
return req;
|
|
29
31
|
},
|
|
30
32
|
];
|
|
31
33
|
}
|
|
34
|
+
|
|
35
|
+
function getCurrentTimeZone() {
|
|
36
|
+
const now = new Date();
|
|
37
|
+
const [_, time, tz, describe] = now.toString().match(/(\w{3} \w{3} \d{2} \d{4} \d{2}:\d{2}:\d{2})? (GMT[+-]\d{4}) \((.*?)\)/) ?? [];
|
|
38
|
+
const tzOffset = now.getTimezoneOffset() / 60;
|
|
39
|
+
return toBase64([time, tz, tzOffset, describe].join('|'));
|
|
40
|
+
}
|
package/utils/LocaleManager.ts
CHANGED
|
@@ -63,7 +63,7 @@ export class LocaleManager {
|
|
|
63
63
|
|
|
64
64
|
for (const target of localeTargets) {
|
|
65
65
|
for (const codes of codeMatrix) {
|
|
66
|
-
const matched = codes.some(code =>
|
|
66
|
+
const matched = codes.some(code => target.toUpperCase().startsWith(code.toUpperCase()));
|
|
67
67
|
|
|
68
68
|
if (matched) {
|
|
69
69
|
localeFinal = codes[0];
|
|
@@ -65,7 +65,7 @@ export class LocaleManager {
|
|
|
65
65
|
|
|
66
66
|
for (const target of localeTargets) {
|
|
67
67
|
for (const codes of codeMatrix) {
|
|
68
|
-
const matched = codes.some(code =>
|
|
68
|
+
const matched = codes.some(code => target.toUpperCase().startsWith(code.toUpperCase()));
|
|
69
69
|
|
|
70
70
|
if (matched) {
|
|
71
71
|
localeFinal = codes[0];
|
|
@@ -92,6 +92,7 @@ export class LocaleManager {
|
|
|
92
92
|
if (!this.localesAvailable.includes(locale))
|
|
93
93
|
return;
|
|
94
94
|
|
|
95
|
+
// TODO: 这样可能无法支持code中的语言
|
|
95
96
|
const message = await this.messageLoaders[locale]?.().catch(() => undefined);
|
|
96
97
|
|
|
97
98
|
// 由于是异步加载,所以需要再判断是否已经加载过
|
package/utils/number.ts
CHANGED
|
@@ -2,7 +2,6 @@ import type { BigNumber } from 'bignumber.js';
|
|
|
2
2
|
import bn from 'bignumber.js';
|
|
3
3
|
|
|
4
4
|
export { default as bn } from 'bignumber.js';
|
|
5
|
-
export { calc } from 'a-calc';
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* 常用的数值格式化规则
|
|
@@ -18,7 +17,7 @@ export const numFmt = {
|
|
|
18
17
|
/** 保留18位小数,千位符 */
|
|
19
18
|
t: (num: any, fallback: any = 'NaN') => {
|
|
20
19
|
const result = bn(num);
|
|
21
|
-
return result.isNaN() ? fallback : result.
|
|
20
|
+
return result.isNaN() ? fallback : result.decimalPlaces(18, bn.ROUND_DOWN).toFormat();
|
|
22
21
|
},
|
|
23
22
|
/** 舍去小数,四舍五入,千位符 */
|
|
24
23
|
d0r5t: (num: any, fallback: any = 'NaN') => {
|
package/utils/storage.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type MaybeRefOrGetter, computed, isReactive, reactive, toValue } from 'vue';
|
|
2
|
+
|
|
3
|
+
export class StorageKey<F extends Record<string, string | number>> {
|
|
4
|
+
public factors: F;
|
|
5
|
+
private split = '_';
|
|
6
|
+
|
|
7
|
+
public constructor(factors: F, private order: Array<keyof F>) {
|
|
8
|
+
this.factors = isReactive(factors) ? factors : reactive(factors) as F;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 构建存储键
|
|
13
|
+
* @param parts 键的部分
|
|
14
|
+
* @param excludeFactors 排除键的因素
|
|
15
|
+
*/
|
|
16
|
+
public build(parts: Array<MaybeRefOrGetter<F[string]>>, excludeFactors: Array<keyof F> | boolean = false) {
|
|
17
|
+
const finalKey = computed(() => {
|
|
18
|
+
const thisKeys = parts.map(k => String(toValue(k)));
|
|
19
|
+
const factorKeys = Array.isArray(excludeFactors)
|
|
20
|
+
? this.order.filter(k => !excludeFactors?.includes(k)).map(k => this.factors[k])
|
|
21
|
+
: excludeFactors
|
|
22
|
+
? []
|
|
23
|
+
: this.order.map(k => this.factors[k]);
|
|
24
|
+
const thisStr = thisKeys.join(this.split);
|
|
25
|
+
const factorStr = factorKeys.join(this.split);
|
|
26
|
+
return `${factorStr}${factorStr ? this.split : ''}${thisStr}`;
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
return finalKey;
|
|
30
|
+
}
|
|
31
|
+
}
|
package/utils/string.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { Base64 } from 'crypto-es/lib/enc-base64';
|
|
2
|
+
import { Utf8 } from 'crypto-es/lib/core';
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* 字符串脱敏,省略中间字符串
|
|
3
6
|
* @param str 字符串
|
|
@@ -26,3 +29,14 @@ export function randomString(length: number) {
|
|
|
26
29
|
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
27
30
|
return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join('');
|
|
28
31
|
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* 转为base64字符串
|
|
35
|
+
* @param str 值
|
|
36
|
+
*/
|
|
37
|
+
export function toBase64(str: string | number) {
|
|
38
|
+
if (!['string', 'number'].includes(typeof str) || !str)
|
|
39
|
+
return '';
|
|
40
|
+
|
|
41
|
+
return Base64.stringify(Utf8.parse(String(str)));
|
|
42
|
+
}
|
package/utils/upload/AwsS3.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S3Client } from '@aws-sdk/client-s3';
|
|
1
|
+
import { S3Client, ChecksumAlgorithm } from '@aws-sdk/client-s3';
|
|
2
2
|
import { Upload } from '@aws-sdk/lib-storage';
|
|
3
3
|
import type { FileHandler } from './fileHandlers';
|
|
4
4
|
|
|
@@ -23,13 +23,18 @@ export class AwsS3 {
|
|
|
23
23
|
public async upload(file: File, root?: string) {
|
|
24
24
|
const s3Client = await this.refreshClient();
|
|
25
25
|
const filePath = await this.genFilePath(root || 'unclassified');
|
|
26
|
-
const fileName = await (this.fileHandler?.genFileName(file) ?? this.genFileName(file));
|
|
26
|
+
const fileName = await (this.fileHandler?.genFileName?.(file) ?? this.genFileName(file));
|
|
27
27
|
const fullPath = `${filePath}/${fileName}`;
|
|
28
28
|
|
|
29
29
|
const uploader = new Upload({
|
|
30
30
|
client: s3Client!,
|
|
31
|
-
params: {
|
|
31
|
+
params: {
|
|
32
|
+
Bucket: this.bucket, Key: fullPath, Body: file,
|
|
33
|
+
ChecksumAlgorithm: ChecksumAlgorithm.CRC32,
|
|
34
|
+
},
|
|
32
35
|
leavePartsOnError: false,
|
|
36
|
+
queueSize: 4,
|
|
37
|
+
partSize: 5 * 1024 * 1024,
|
|
33
38
|
});
|
|
34
39
|
|
|
35
40
|
return { uploader, fileURL: `${this.domain}/${fullPath}` };
|
|
@@ -61,6 +66,8 @@ export class AwsS3 {
|
|
|
61
66
|
secretAccessKey: params.secretAccessKey,
|
|
62
67
|
sessionToken: params.sessionToken,
|
|
63
68
|
},
|
|
69
|
+
requestChecksumCalculation: 'WHEN_REQUIRED',
|
|
70
|
+
responseChecksumValidation: 'WHEN_REQUIRED',
|
|
64
71
|
});
|
|
65
72
|
|
|
66
73
|
return this.s3Client;
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { TabPane as ATabPane, Tabs as ATabs } from 'ant-design-vue';
|
|
3
|
-
import { injectTTAdmin } from '../../adminPlugin';
|
|
4
|
-
|
|
5
|
-
const pageTabStore = injectTTAdmin()!.deps.usePageTabStore();
|
|
6
|
-
</script>
|
|
7
|
-
|
|
8
|
-
<template>
|
|
9
|
-
<ATabs
|
|
10
|
-
class="app-page-tabs"
|
|
11
|
-
:activeKey="pageTabStore.activeTab"
|
|
12
|
-
type="editable-card"
|
|
13
|
-
size="small"
|
|
14
|
-
:animated="false"
|
|
15
|
-
:hideAdd="true"
|
|
16
|
-
:tabBarGutter="4"
|
|
17
|
-
@tabClick="(pageTabStore.openTab as any)"
|
|
18
|
-
@edit="(pageTabStore.closeTab as any)"
|
|
19
|
-
>
|
|
20
|
-
<ATabPane v-for="tab of pageTabStore.tabList" :key="tab.key" :tab="tab.title">
|
|
21
|
-
<template #closeIcon>
|
|
22
|
-
<i class="i-icon-park-outline:close" />
|
|
23
|
-
</template>
|
|
24
|
-
</ATabPane>
|
|
25
|
-
</ATabs>
|
|
26
|
-
</template>
|
|
27
|
-
|
|
28
|
-
<style scoped lang="scss">
|
|
29
|
-
.app-page-tabs {
|
|
30
|
-
:deep(.ant-tabs-nav) {
|
|
31
|
-
margin: 0;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
:deep(.ant-tabs-nav::before) {
|
|
35
|
-
display: none;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
:deep(.ant-tabs-tab) {
|
|
39
|
-
--uno: 'border-rd-3px! text-14px p-[3px_1px_3px_8px]! select-none';
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
:deep(.ant-tabs-tab .ant-tabs-tab-btn) {
|
|
43
|
-
transform: translateX(8px);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
:deep(.ant-tabs-tab-active) {
|
|
47
|
-
--uno: 'border-[currentColor]!';
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
:deep(.ant-tabs-tab-remove) {
|
|
51
|
-
display: flex;
|
|
52
|
-
height: 100%;
|
|
53
|
-
align-items: center;
|
|
54
|
-
margin: 0;
|
|
55
|
-
opacity: 0;
|
|
56
|
-
transition: all 150ms;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
:deep(.ant-tabs-tab:hover .ant-tabs-tab-btn),
|
|
60
|
-
:deep(.ant-tabs-tab-active .ant-tabs-tab-btn) {
|
|
61
|
-
transform: translateX(0);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
:deep(.ant-tabs-tab:hover .ant-tabs-tab-remove),
|
|
65
|
-
:deep(.ant-tabs-tab-active .ant-tabs-tab-remove) {
|
|
66
|
-
margin-left: 0;
|
|
67
|
-
opacity: 1;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
</style>
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Router } from 'vue-router';
|
|
2
|
-
import { adminPlugin } from '../adminPlugin';
|
|
3
|
-
|
|
4
|
-
export function setupCollapseMenu(router: Router) {
|
|
5
|
-
const menuStore = adminPlugin.deps.useMenuStore();
|
|
6
|
-
|
|
7
|
-
router.beforeEach(() => {
|
|
8
|
-
menuStore.collapsed = false;
|
|
9
|
-
return true;
|
|
10
|
-
});
|
|
11
|
-
}
|
package/libs/a-calc.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from 'a-calc';
|