@peng_kai/kit 0.3.0-beta.4 → 0.3.0-beta.40
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 +37 -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/TtaTimeZoneSimple.vue +104 -0
- package/admin/components/date/helpers.ts +250 -0
- package/admin/components/date/index.ts +6 -0
- package/admin/components/date/presetProps.ts +19 -0
- package/admin/components/filter/src/FilterReset.vue +55 -8
- package/admin/components/filter/src/more/TableSetting.vue +95 -0
- package/admin/components/filter/src/useFilterParams.ts +9 -7
- package/admin/components/provider/Admin.vue +17 -0
- package/admin/components/provider/admin-permission.ts +48 -0
- package/admin/components/provider/admin-router.ts +361 -0
- package/admin/components/provider/index.ts +3 -0
- package/admin/components/rich-text/src/RichText.new.vue +19 -6
- package/admin/components/rich-text/src/editorConfig.ts +76 -1
- package/admin/components/settings/index.ts +1 -1
- package/admin/components/settings/src/SchemaForm.vue +40 -6
- package/admin/components/settings/src/Settings.vue +1 -1
- package/admin/components/text/index.ts +2 -0
- package/admin/components/text/src/Amount.v2.vue +131 -0
- package/admin/components/text/src/Datetime.vue +17 -12
- package/admin/components/text/src/IP.vue +18 -4
- package/admin/components/text/src/Num.vue +192 -0
- package/admin/components/upload/src/PictureCardUpload.vue +56 -20
- 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 +168 -0
- package/admin/layout/large/Tabs.vue +183 -0
- package/admin/layout/large/index.ts +61 -1
- package/admin/layout/large/y682.mp3 +0 -0
- package/admin/permission/routerGuard.ts +24 -11
- 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/index.scss +2 -2
- package/antd/hooks/useAntdModal.ts +27 -12
- package/antd/hooks/useAntdTable.ts +10 -7
- package/antd/hooks/useAntdTheme.ts +7 -0
- package/antd/hooks/useTableColumns.ts +83 -0
- package/antd/index.ts +1 -1
- package/libs/bignumber.ts +1 -1
- package/libs/dayjs.ts +16 -2
- package/libs/fingerprintjs.ts +1 -0
- package/package.json +64 -95
- package/request/interceptors/getDeviceInfo.ts +14 -0
- package/utils/LocaleManager.ts +1 -1
- package/utils/index.ts +1 -4
- package/utils/locale/LocaleManager.ts +2 -1
- package/utils/locale/helpers.ts +9 -0
- package/utils/number.ts +8 -10
- package/utils/storage.ts +31 -0
- package/utils/string.ts +1 -2
- package/utils/upload/AwsS3.ts +12 -4
- package/admin/layout/large/PageTab.vue +0 -70
- package/admin/route-guards/collapseMenu.ts +0 -11
- package/libs/a-calc.ts +0 -1
- package/vue/components/test/KitTest.vue +0 -9
- package/vue/components/test/testStore.ts +0 -11
package/utils/number.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import type { BigNumber } from 'bignumber.js';
|
|
2
1
|
import bn from 'bignumber.js';
|
|
3
2
|
|
|
4
3
|
export { default as bn } from 'bignumber.js';
|
|
5
|
-
export { calc } from 'a-calc';
|
|
6
4
|
|
|
7
5
|
/**
|
|
8
6
|
* 常用的数值格式化规则
|
|
@@ -23,42 +21,42 @@ export const numFmt = {
|
|
|
23
21
|
/** 舍去小数,四舍五入,千位符 */
|
|
24
22
|
d0r5t: (num: any, fallback: any = 'NaN') => {
|
|
25
23
|
const result = bn(num);
|
|
26
|
-
return result.isNaN() ? fallback : result.decimalPlaces(0, bn.ROUND_HALF_UP).toFormat(
|
|
24
|
+
return result.isNaN() ? fallback : result.decimalPlaces(0, bn.ROUND_HALF_UP).toFormat();
|
|
27
25
|
},
|
|
28
26
|
/** 舍去小数,向下取整,千位符 */
|
|
29
27
|
d0r0t: (num: any, fallback: any = 'NaN') => {
|
|
30
28
|
const result = bn(num);
|
|
31
|
-
return result.isNaN() ? fallback : result.decimalPlaces(0, bn.ROUND_DOWN).toFormat(
|
|
29
|
+
return result.isNaN() ? fallback : result.decimalPlaces(0, bn.ROUND_DOWN).toFormat();
|
|
32
30
|
},
|
|
33
31
|
/** 保留2位小数,四舍五入,千位符 */
|
|
34
32
|
d2r5t: (num: any, fallback: any = 'NaN') => {
|
|
35
33
|
const result = bn(num);
|
|
36
|
-
return result.isNaN() ? fallback : result.decimalPlaces(2, bn.ROUND_HALF_UP).toFormat(
|
|
34
|
+
return result.isNaN() ? fallback : result.decimalPlaces(2, bn.ROUND_HALF_UP).toFormat();
|
|
37
35
|
},
|
|
38
36
|
/** 保留2位小数,向下取整,千位符 */
|
|
39
37
|
d2r0t: (num: any, fallback: any = 'NaN') => {
|
|
40
38
|
const result = bn(num);
|
|
41
|
-
return result.isNaN() ? fallback : result.decimalPlaces(2, bn.ROUND_DOWN).toFormat(
|
|
39
|
+
return result.isNaN() ? fallback : result.decimalPlaces(2, bn.ROUND_DOWN).toFormat();
|
|
42
40
|
},
|
|
43
41
|
/** 保留6位小数,四舍五入,千位符 */
|
|
44
42
|
d6r5t: (num: any, fallback: any = 'NaN') => {
|
|
45
43
|
const result = bn(num);
|
|
46
|
-
return result.isNaN() ? fallback : result.decimalPlaces(6, bn.ROUND_HALF_UP).toFormat(
|
|
44
|
+
return result.isNaN() ? fallback : result.decimalPlaces(6, bn.ROUND_HALF_UP).toFormat();
|
|
47
45
|
},
|
|
48
46
|
/** 保留6位小数,向下取整,千位符 */
|
|
49
47
|
d6r0t: (num: any, fallback: any = 'NaN') => {
|
|
50
48
|
const result = bn(num);
|
|
51
|
-
return result.isNaN() ? fallback : result.decimalPlaces(6, bn.ROUND_DOWN).toFormat(
|
|
49
|
+
return result.isNaN() ? fallback : result.decimalPlaces(6, bn.ROUND_DOWN).toFormat();
|
|
52
50
|
},
|
|
53
51
|
/** 保留8位小数,四舍五入,千位符 */
|
|
54
52
|
d8r5t: (num: any, fallback: any = 'NaN') => {
|
|
55
53
|
const result = bn(num);
|
|
56
|
-
return result.isNaN() ? fallback : result.decimalPlaces(8, bn.ROUND_HALF_UP).toFormat(
|
|
54
|
+
return result.isNaN() ? fallback : result.decimalPlaces(8, bn.ROUND_HALF_UP).toFormat();
|
|
57
55
|
},
|
|
58
56
|
/** 保留8位小数,向下取整,千位符 */
|
|
59
57
|
d8r0t: (num: any, fallback: any = 'NaN') => {
|
|
60
58
|
const result = bn(num);
|
|
61
|
-
return result.isNaN() ? fallback : result.decimalPlaces(8, bn.ROUND_DOWN).toFormat(
|
|
59
|
+
return result.isNaN() ? fallback : result.decimalPlaces(8, bn.ROUND_DOWN).toFormat();
|
|
62
60
|
},
|
|
63
61
|
};
|
|
64
62
|
|
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
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
|
|
|
@@ -20,16 +20,22 @@ export class AwsS3 {
|
|
|
20
20
|
public constructor(private getParams: TGetParams, private fileHandler?: FileHandler) {
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
public async upload(file: File, root
|
|
23
|
+
public async upload(file: File, root = 'unclassified') {
|
|
24
24
|
const s3Client = await this.refreshClient();
|
|
25
|
-
const filePath = await this.genFilePath(root
|
|
25
|
+
const filePath = root.includes('/') ? root : await this.genFilePath(root);
|
|
26
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
|
+
ContentType: file.type,
|
|
35
|
+
},
|
|
32
36
|
leavePartsOnError: false,
|
|
37
|
+
queueSize: 4,
|
|
38
|
+
partSize: 5 * 1024 * 1024,
|
|
33
39
|
});
|
|
34
40
|
|
|
35
41
|
return { uploader, fileURL: `${this.domain}/${fullPath}` };
|
|
@@ -61,6 +67,8 @@ export class AwsS3 {
|
|
|
61
67
|
secretAccessKey: params.secretAccessKey,
|
|
62
68
|
sessionToken: params.sessionToken,
|
|
63
69
|
},
|
|
70
|
+
requestChecksumCalculation: 'WHEN_REQUIRED',
|
|
71
|
+
responseChecksumValidation: 'WHEN_REQUIRED',
|
|
64
72
|
});
|
|
65
73
|
|
|
66
74
|
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';
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { useQueryClient } from '@tanstack/vue-query';
|
|
2
|
-
import { defineStore } from 'pinia';
|
|
3
|
-
import { useRouter } from 'vue-router';
|
|
4
|
-
|
|
5
|
-
export const useTestStore = defineStore('test-store', () => {
|
|
6
|
-
const router = useRouter();
|
|
7
|
-
const queryClient = useQueryClient();
|
|
8
|
-
console.log('🤡 / router:', router);
|
|
9
|
-
console.log('🤡 / queryClient:', queryClient);
|
|
10
|
-
return {};
|
|
11
|
-
});
|