ff-ui-plus 2.0.7
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/.nvmrc +1 -0
- package/.prettierrc.cjs +41 -0
- package/.stylelintignore +5 -0
- package/LICENSE +21 -0
- package/README.md +265 -0
- package/commitlint.config.cjs +162 -0
- package/global.d.ts +27 -0
- package/index.html +16 -0
- package/lib.sh +9 -0
- package/lint-staged.config.cjs +8 -0
- package/package.json +149 -0
- package/packages/components/adaptive-page/index.ts +5 -0
- package/packages/components/adaptive-page/src/index.vue +85 -0
- package/packages/components/adaptive-page/src/type.ts +9 -0
- package/packages/components/adaptive-page/style/css.ts +1 -0
- package/packages/components/adaptive-page/style/index.ts +1 -0
- package/packages/components/button/index.ts +5 -0
- package/packages/components/button/src/index.vue +41 -0
- package/packages/components/button/src/type.ts +11 -0
- package/packages/components/button/style/css.ts +1 -0
- package/packages/components/button/style/index.ts +1 -0
- package/packages/components/chart/index.ts +5 -0
- package/packages/components/chart/src/index.vue +121 -0
- package/packages/components/chart/src/type.ts +7 -0
- package/packages/components/chart/style/css.ts +1 -0
- package/packages/components/chart/style/index.ts +1 -0
- package/packages/components/checkbox/index.ts +3 -0
- package/packages/components/checkbox/src/checkbox.d.ts +5 -0
- package/packages/components/checkbox/src/index.vue +67 -0
- package/packages/components/checkbox/style/css.ts +1 -0
- package/packages/components/checkbox/style/index.ts +1 -0
- package/packages/components/date-picker/index.ts +5 -0
- package/packages/components/date-picker/src/index.vue +228 -0
- package/packages/components/date-picker/src/type.ts +22 -0
- package/packages/components/date-picker/style/css.ts +1 -0
- package/packages/components/date-picker/style/index.ts +1 -0
- package/packages/components/detail/index.ts +5 -0
- package/packages/components/detail/src/index.vue +102 -0
- package/packages/components/detail/src/renderLabel.vue +15 -0
- package/packages/components/detail/src/renderTooltip.vue +15 -0
- package/packages/components/detail/src/type.ts +28 -0
- package/packages/components/detail/style/css.ts +1 -0
- package/packages/components/detail/style/index.ts +1 -0
- package/packages/components/form/index.ts +5 -0
- package/packages/components/form/src/index.vue +407 -0
- package/packages/components/form/src/renderBtn.vue +15 -0
- package/packages/components/form/src/renderComp.vue +15 -0
- package/packages/components/form/src/type.ts +26 -0
- package/packages/components/form/style/css.ts +1 -0
- package/packages/components/form/style/index.ts +1 -0
- package/packages/components/index.ts +20 -0
- package/packages/components/input/index.ts +5 -0
- package/packages/components/input/src/index.vue +225 -0
- package/packages/components/input/src/type.ts +14 -0
- package/packages/components/input/style/css.ts +1 -0
- package/packages/components/input/style/index.ts +1 -0
- package/packages/components/layout-page/index.ts +4 -0
- package/packages/components/layout-page/src/index.vue +74 -0
- package/packages/components/layout-page/style/css.ts +1 -0
- package/packages/components/layout-page/style/index.ts +1 -0
- package/packages/components/layout-page-item/index.ts +3 -0
- package/packages/components/layout-page-item/src/index.vue +16 -0
- package/packages/components/layout-page-item/style/css.ts +1 -0
- package/packages/components/layout-page-item/style/index.ts +1 -0
- package/packages/components/module-form/index.ts +4 -0
- package/packages/components/module-form/src/index.vue +243 -0
- package/packages/components/module-form/src/moduleDetail.vue +61 -0
- package/packages/components/module-form/src/moduleForm.vue +88 -0
- package/packages/components/module-form/src/type.ts +16 -0
- package/packages/components/module-form/style/css.ts +1 -0
- package/packages/components/module-form/style/index.ts +1 -0
- package/packages/components/package.json +9 -0
- package/packages/components/query-condition/index.ts +4 -0
- package/packages/components/query-condition/src/index.vue +478 -0
- package/packages/components/query-condition/src/moreChoose.vue +159 -0
- package/packages/components/query-condition/src/renderComp.vue +15 -0
- package/packages/components/query-condition/src/type.ts +22 -0
- package/packages/components/query-condition/src/useComputed.ts +94 -0
- package/packages/components/query-condition/style/css.ts +1 -0
- package/packages/components/query-condition/style/index.ts +1 -0
- package/packages/components/radio/index.ts +3 -0
- package/packages/components/radio/src/index.vue +73 -0
- package/packages/components/radio/src/radio.d.ts +12 -0
- package/packages/components/radio/style/css.ts +1 -0
- package/packages/components/radio/style/index.ts +1 -0
- package/packages/components/select/index.ts +4 -0
- package/packages/components/select/src/index.vue +240 -0
- package/packages/components/select/src/type.ts +43 -0
- package/packages/components/select/style/css.ts +1 -0
- package/packages/components/select/style/index.ts +1 -0
- package/packages/components/select-icon/index.ts +4 -0
- package/packages/components/select-icon/src/index.vue +128 -0
- package/packages/components/select-icon/style/css.ts +1 -0
- package/packages/components/select-icon/style/index.ts +1 -0
- package/packages/components/select-table/index.ts +4 -0
- package/packages/components/select-table/src/ClickOutside.ts +106 -0
- package/packages/components/select-table/src/index.vue +851 -0
- package/packages/components/select-table/src/renderCol.vue +20 -0
- package/packages/components/select-table/src/type.ts +56 -0
- package/packages/components/select-table/src/useVirtualized.ts +86 -0
- package/packages/components/select-table/style/css.ts +1 -0
- package/packages/components/select-table/style/index.ts +1 -0
- package/packages/components/step-wizard/index.ts +4 -0
- package/packages/components/step-wizard/src/index.vue +99 -0
- package/packages/components/step-wizard/src/type.ts +17 -0
- package/packages/components/step-wizard/style/css.ts +1 -0
- package/packages/components/step-wizard/style/index.ts +1 -0
- package/packages/components/table/index.ts +5 -0
- package/packages/components/table/src/ColumnSet.vue +176 -0
- package/packages/components/table/src/TTableColumn.vue +100 -0
- package/packages/components/table/src/densitySet.vue +91 -0
- package/packages/components/table/src/firstColumn.vue +132 -0
- package/packages/components/table/src/index.vue +926 -0
- package/packages/components/table/src/operator.vue +246 -0
- package/packages/components/table/src/renderCol.vue +20 -0
- package/packages/components/table/src/renderHeader.vue +18 -0
- package/packages/components/table/src/singleEdit.vue +354 -0
- package/packages/components/table/src/singleEditCell.vue +303 -0
- package/packages/components/table/src/tableProps.ts +162 -0
- package/packages/components/table/src/useExpose.ts +74 -0
- package/packages/components/table/src/useVirtualized.ts +70 -0
- package/packages/components/table/style/css.ts +1 -0
- package/packages/components/table/style/index.ts +1 -0
- package/packages/components/tabs/index.ts +4 -0
- package/packages/components/tabs/src/index.vue +50 -0
- package/packages/components/tabs/style/css.ts +1 -0
- package/packages/components/tabs/style/index.ts +1 -0
- package/packages/components/timer-btn/index.ts +4 -0
- package/packages/components/timer-btn/src/index.vue +57 -0
- package/packages/components/timer-btn/style/css.ts +1 -0
- package/packages/components/timer-btn/style/index.ts +1 -0
- package/packages/components/utils/index.ts +142 -0
- package/packages/components/utils/install.ts +16 -0
- package/packages/eslint-config/build.config.ts +16 -0
- package/packages/eslint-config/dist/index.cjs +122 -0
- package/packages/eslint-config/dist/index.d.cts +92 -0
- package/packages/eslint-config/dist/index.d.mts +92 -0
- package/packages/eslint-config/dist/index.d.ts +92 -0
- package/packages/eslint-config/dist/index.mjs +120 -0
- package/packages/eslint-config/package.json +34 -0
- package/packages/eslint-config/src/index.ts +121 -0
- package/packages/ff-ui-plus/component.ts +55 -0
- package/packages/ff-ui-plus/defaults.ts +4 -0
- package/packages/ff-ui-plus/index.ts +9 -0
- package/packages/ff-ui-plus/make-installer.ts +10 -0
- package/packages/ff-ui-plus/package.json +117 -0
- package/packages/ff-ui-plus/version.ts +1 -0
- package/packages/hooks/index.ts +1 -0
- package/packages/hooks/package.json +9 -0
- package/packages/hooks/useLocale.ts +53 -0
- package/packages/locale/index.ts +11 -0
- package/packages/locale/lang/en.ts +157 -0
- package/packages/locale/lang/zh-cn.ts +155 -0
- package/packages/locale/package.json +12 -0
- package/packages/resolver/package.json +23 -0
- package/packages/resolver/src/index.ts +99 -0
- package/packages/theme-chalk/build.ts +76 -0
- package/packages/theme-chalk/dist/index.css +1 -0
- package/packages/theme-chalk/dist/src/adaptive-page.scss +48 -0
- package/packages/theme-chalk/dist/src/button.scss +23 -0
- package/packages/theme-chalk/dist/src/chart.scss +10 -0
- package/packages/theme-chalk/dist/src/checkbox.scss +0 -0
- package/packages/theme-chalk/dist/src/date-picker.scss +3 -0
- package/packages/theme-chalk/dist/src/detail.scss +7 -0
- package/packages/theme-chalk/dist/src/form.scss +104 -0
- package/packages/theme-chalk/dist/src/index.scss +19 -0
- package/packages/theme-chalk/dist/src/input.scss +0 -0
- package/packages/theme-chalk/dist/src/layout-page-item.scss +10 -0
- package/packages/theme-chalk/dist/src/layout-page.scss +37 -0
- package/packages/theme-chalk/dist/src/module-form.scss +335 -0
- package/packages/theme-chalk/dist/src/query-condition.scss +132 -0
- package/packages/theme-chalk/dist/src/radio.scss +0 -0
- package/packages/theme-chalk/dist/src/select-icon.scss +61 -0
- package/packages/theme-chalk/dist/src/select-table.scss +71 -0
- package/packages/theme-chalk/dist/src/select.scss +7 -0
- package/packages/theme-chalk/dist/src/step-wizard.scss +51 -0
- package/packages/theme-chalk/dist/src/table.scss +381 -0
- package/packages/theme-chalk/dist/src/tabs.scss +20 -0
- package/packages/theme-chalk/dist/src/timer-btn.scss +21 -0
- package/packages/theme-chalk/dist/t-adaptive-page.css +1 -0
- package/packages/theme-chalk/dist/t-button.css +1 -0
- package/packages/theme-chalk/dist/t-chart.css +1 -0
- package/packages/theme-chalk/dist/t-checkbox.css +0 -0
- package/packages/theme-chalk/dist/t-date-picker.css +1 -0
- package/packages/theme-chalk/dist/t-detail.css +1 -0
- package/packages/theme-chalk/dist/t-form.css +1 -0
- package/packages/theme-chalk/dist/t-input.css +0 -0
- package/packages/theme-chalk/dist/t-layout-page-item.css +1 -0
- package/packages/theme-chalk/dist/t-layout-page.css +1 -0
- package/packages/theme-chalk/dist/t-module-form.css +1 -0
- package/packages/theme-chalk/dist/t-query-condition.css +1 -0
- package/packages/theme-chalk/dist/t-radio.css +0 -0
- package/packages/theme-chalk/dist/t-select-icon.css +1 -0
- package/packages/theme-chalk/dist/t-select-table.css +1 -0
- package/packages/theme-chalk/dist/t-select.css +1 -0
- package/packages/theme-chalk/dist/t-step-wizard.css +1 -0
- package/packages/theme-chalk/dist/t-table.css +1 -0
- package/packages/theme-chalk/dist/t-tabs.css +1 -0
- package/packages/theme-chalk/dist/t-timer-btn.css +1 -0
- package/packages/theme-chalk/mixins/config.scss +8 -0
- package/packages/theme-chalk/mixins/function.scss +71 -0
- package/packages/theme-chalk/mixins/mixins.scss +79 -0
- package/packages/theme-chalk/package.json +21 -0
- package/packages/theme-chalk/src/adaptive-page.scss +48 -0
- package/packages/theme-chalk/src/button.scss +23 -0
- package/packages/theme-chalk/src/chart.scss +10 -0
- package/packages/theme-chalk/src/checkbox.scss +0 -0
- package/packages/theme-chalk/src/date-picker.scss +3 -0
- package/packages/theme-chalk/src/detail.scss +7 -0
- package/packages/theme-chalk/src/form.scss +104 -0
- package/packages/theme-chalk/src/index.scss +19 -0
- package/packages/theme-chalk/src/input.scss +0 -0
- package/packages/theme-chalk/src/layout-page-item.scss +10 -0
- package/packages/theme-chalk/src/layout-page.scss +37 -0
- package/packages/theme-chalk/src/module-form.scss +335 -0
- package/packages/theme-chalk/src/query-condition.scss +132 -0
- package/packages/theme-chalk/src/radio.scss +0 -0
- package/packages/theme-chalk/src/select-icon.scss +61 -0
- package/packages/theme-chalk/src/select-table.scss +71 -0
- package/packages/theme-chalk/src/select.scss +7 -0
- package/packages/theme-chalk/src/step-wizard.scss +51 -0
- package/packages/theme-chalk/src/table.scss +381 -0
- package/packages/theme-chalk/src/tabs.scss +20 -0
- package/packages/theme-chalk/src/timer-btn.scss +21 -0
- package/packages/types/global.ts +34 -0
- package/packages/types/index.ts +1 -0
- package/packages/types/package.json +10 -0
- package/packages/utils/build.config.ts +23 -0
- package/packages/utils/dist/cookie.cjs +1 -0
- package/packages/utils/dist/cookie.d.cts +16 -0
- package/packages/utils/dist/cookie.d.mts +16 -0
- package/packages/utils/dist/cookie.d.ts +16 -0
- package/packages/utils/dist/cookie.mjs +1 -0
- package/packages/utils/dist/day.cjs +1 -0
- package/packages/utils/dist/day.d.cts +37 -0
- package/packages/utils/dist/day.d.mts +37 -0
- package/packages/utils/dist/day.d.ts +37 -0
- package/packages/utils/dist/day.mjs +1 -0
- package/packages/utils/dist/file.cjs +1 -0
- package/packages/utils/dist/file.d.cts +61 -0
- package/packages/utils/dist/file.d.mts +61 -0
- package/packages/utils/dist/file.d.ts +61 -0
- package/packages/utils/dist/file.mjs +1 -0
- package/packages/utils/dist/index.cjs +1 -0
- package/packages/utils/dist/index.d.cts +13 -0
- package/packages/utils/dist/index.d.mts +13 -0
- package/packages/utils/dist/index.d.ts +13 -0
- package/packages/utils/dist/index.mjs +1 -0
- package/packages/utils/dist/is.cjs +1 -0
- package/packages/utils/dist/is.d.cts +117 -0
- package/packages/utils/dist/is.d.mts +117 -0
- package/packages/utils/dist/is.d.ts +117 -0
- package/packages/utils/dist/is.mjs +1 -0
- package/packages/utils/dist/letter.cjs +1 -0
- package/packages/utils/dist/letter.d.cts +12 -0
- package/packages/utils/dist/letter.d.mts +12 -0
- package/packages/utils/dist/letter.d.ts +12 -0
- package/packages/utils/dist/letter.mjs +1 -0
- package/packages/utils/dist/number.cjs +1 -0
- package/packages/utils/dist/number.d.cts +23 -0
- package/packages/utils/dist/number.d.mts +23 -0
- package/packages/utils/dist/number.d.ts +23 -0
- package/packages/utils/dist/number.mjs +1 -0
- package/packages/utils/dist/openExe.cjs +1 -0
- package/packages/utils/dist/openExe.d.cts +9 -0
- package/packages/utils/dist/openExe.d.mts +9 -0
- package/packages/utils/dist/openExe.d.ts +9 -0
- package/packages/utils/dist/openExe.mjs +1 -0
- package/packages/utils/dist/storage.cjs +1 -0
- package/packages/utils/dist/storage.d.cts +46 -0
- package/packages/utils/dist/storage.d.mts +46 -0
- package/packages/utils/dist/storage.d.ts +46 -0
- package/packages/utils/dist/storage.mjs +1 -0
- package/packages/utils/dist/validate.cjs +1 -0
- package/packages/utils/dist/validate.d.cts +32 -0
- package/packages/utils/dist/validate.d.mts +32 -0
- package/packages/utils/dist/validate.d.ts +32 -0
- package/packages/utils/dist/validate.mjs +1 -0
- package/packages/utils/dist/ws.cjs +1 -0
- package/packages/utils/dist/ws.d.cts +86 -0
- package/packages/utils/dist/ws.d.mts +86 -0
- package/packages/utils/dist/ws.d.ts +86 -0
- package/packages/utils/dist/ws.mjs +1 -0
- package/packages/utils/package.json +42 -0
- package/packages/utils/src/cookie.ts +24 -0
- package/packages/utils/src/day.ts +66 -0
- package/packages/utils/src/file.ts +173 -0
- package/packages/utils/src/index.ts +10 -0
- package/packages/utils/src/is.ts +159 -0
- package/packages/utils/src/letter.ts +15 -0
- package/packages/utils/src/number.ts +37 -0
- package/packages/utils/src/openExe.ts +45 -0
- package/packages/utils/src/storage.ts +77 -0
- package/packages/utils/src/validate.ts +55 -0
- package/packages/utils/src/ws.ts +191 -0
- package/pnpm-workspace.yaml +3 -0
- package/publish.sh +37 -0
- package/resolver.sh +9 -0
- package/scripts/build/all.ts +152 -0
- package/scripts/build/build.config.ts +10 -0
- package/scripts/build/dist/index.cjs +7 -0
- package/scripts/build/dist/index.d.ts +2 -0
- package/scripts/build/dist/index.mjs +12 -0
- package/scripts/build/index.ts +63 -0
- package/scripts/build/modules.ts +141 -0
- package/scripts/build/package.json +14 -0
- package/scripts/release/gen-version.ts +12 -0
- package/scripts/release/index.ts +209 -0
- package/scripts/utils/excludeFiles.ts +14 -0
- package/scripts/utils/index.ts +88 -0
- package/scripts/utils/main.ts +14 -0
- package/scripts/utils/paths.ts +40 -0
- package/scripts/utils/plugin.ts +61 -0
- package/tsconfig.base.json +23 -0
- package/tsconfig.vitest.json +11 -0
- package/tsconfig.web.json +18 -0
- package/typings/env.d.ts +22 -0
- package/typings/index.d.ts +161 -0
- package/vitest.config.ts +22 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ff-ui-plus/utils",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "utils of ff-ui-plus",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.mjs",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public",
|
|
14
|
+
"registry": "https://registry.npmjs.org"
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "npx unbuild",
|
|
18
|
+
"stub": "npx unbuild --stub"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"accounting": "^0.4.1",
|
|
22
|
+
"axios": "^1.4.0",
|
|
23
|
+
"crypto-js": "^4.1.1",
|
|
24
|
+
"dayjs": "^1.11.7",
|
|
25
|
+
"file-saver": "^2.0.5",
|
|
26
|
+
"good-storage": "^1.1.1",
|
|
27
|
+
"js-cookie": "^3.0.5",
|
|
28
|
+
"lodash-es": "^4.17.21",
|
|
29
|
+
"numeral": "^2.0.6",
|
|
30
|
+
"qs": "^6.11.1"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/accounting": "^0.4.2",
|
|
34
|
+
"@types/crypto-js": "^4.1.1",
|
|
35
|
+
"@types/file-saver": "^2.0.5",
|
|
36
|
+
"@types/good-storage": "^1.1.0",
|
|
37
|
+
"@types/js-cookie": "^3.0.3",
|
|
38
|
+
"@types/lodash-es": "^4.17.7",
|
|
39
|
+
"@types/numeral": "^2.0.2",
|
|
40
|
+
"@types/qs": "^6.9.7"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import Cookies from "js-cookie"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 获取 cookie
|
|
5
|
+
* @returns
|
|
6
|
+
*/
|
|
7
|
+
export function getCookie(key: string): string | undefined {
|
|
8
|
+
return Cookies.get(key)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 设置 cookie
|
|
13
|
+
* @returns
|
|
14
|
+
*/
|
|
15
|
+
export function setCookie(key: string, data: any): string | undefined {
|
|
16
|
+
return Cookies.set(key, data)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* 移除 cookie
|
|
21
|
+
*/
|
|
22
|
+
export function removeCookie(key: string): void {
|
|
23
|
+
Cookies.remove(key)
|
|
24
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import dayjs from "dayjs"
|
|
2
|
+
import type { QUnitType, OpUnitType, ConfigType } from "dayjs"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* @param {string | number | Date | Dayjs | null | undefined} date
|
|
7
|
+
* @param format 默认 YYYY-MM-DD HH:mm:ss
|
|
8
|
+
* @returns YYYY-MM-DD HH:mm:ss
|
|
9
|
+
*/
|
|
10
|
+
export function formatDate(date?: ConfigType, format = "YYYY-MM-DD HH:mm:ss"): string {
|
|
11
|
+
return dayjs(date || new Date()).format(format)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 格式化时间到天
|
|
16
|
+
* @param {string | number | Date | Dayjs | null | undefined} date
|
|
17
|
+
* @returns YYYY-MM-DD
|
|
18
|
+
*/
|
|
19
|
+
export const formatDateToDay = (date: ConfigType): string => formatDate(date, "YYYY-MM-DD")
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 格式化时间到分钟
|
|
23
|
+
* @param {string | number | Date | Dayjs | null | undefined} date
|
|
24
|
+
* @returns YYYY-MM-DD HH:mm
|
|
25
|
+
*/
|
|
26
|
+
export const formatDateToMinute = (date: ConfigType): string => formatDate(date, "YYYY-MM-DD HH:mm")
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 获取两个 Dayjs 对象的时间差,默认秒。
|
|
30
|
+
* @param date1
|
|
31
|
+
* @param date2
|
|
32
|
+
* @param format
|
|
33
|
+
* @returns {*}
|
|
34
|
+
*/
|
|
35
|
+
export function diffDate(
|
|
36
|
+
date1: ConfigType,
|
|
37
|
+
date2: ConfigType = dayjs(),
|
|
38
|
+
format: QUnitType | OpUnitType = "second"
|
|
39
|
+
): number | string | undefined {
|
|
40
|
+
if (!date1) return
|
|
41
|
+
return dayjs(date1).diff(dayjs(date2), format)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @desc 获取距离当前时间差,返回多少年(月/天/小时/分钟/秒)前
|
|
46
|
+
* @param date 秒数
|
|
47
|
+
* @returns
|
|
48
|
+
*/
|
|
49
|
+
export function diffDateFromCurrent(date: number): string {
|
|
50
|
+
if (date >= 60 * 60 * 24 * 365) {
|
|
51
|
+
return `${parseInt(String(date / (60 * 60 * 24 * 365)))}年前`
|
|
52
|
+
}
|
|
53
|
+
if (date >= 60 * 60 * 24 * 30) {
|
|
54
|
+
return `${parseInt(String(date / (60 * 60 * 24 * 30)))}月前`
|
|
55
|
+
}
|
|
56
|
+
if (date >= 60 * 60 * 24) {
|
|
57
|
+
return `${parseInt(String(date / (60 * 60 * 24)))}天前`
|
|
58
|
+
}
|
|
59
|
+
if (date >= 60 * 60) {
|
|
60
|
+
return `${parseInt(String(date / (60 * 60)))}小时前`
|
|
61
|
+
}
|
|
62
|
+
if (date >= 60) {
|
|
63
|
+
return `${parseInt(String(date / 60))}分钟前`
|
|
64
|
+
}
|
|
65
|
+
return `${parseInt(String(date))}秒前`
|
|
66
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import type { FileSaverOptions } from "file-saver"
|
|
2
|
+
|
|
3
|
+
const toLower = (str: string) => str.toLowerCase()
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 获取文件类型
|
|
7
|
+
* @param path
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
const getFileType = (path: string) => path && path.slice(path.lastIndexOf("."))
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
* @desc 限制文件类型
|
|
15
|
+
* @param {file|Blob} file 源文件
|
|
16
|
+
* "默认限制图"片
|
|
17
|
+
* @return 合法文件返回true否则返回false
|
|
18
|
+
*/
|
|
19
|
+
export const isLegalFile = (file: File | Blob, types: string[]): boolean => {
|
|
20
|
+
const filterTypes = types.filter(item => item && item !== "*").map(item => toLower(item))
|
|
21
|
+
if (!filterTypes.length) {
|
|
22
|
+
return true
|
|
23
|
+
}
|
|
24
|
+
const type = getFileType(file.name)
|
|
25
|
+
|
|
26
|
+
const isLegal = filterTypes.includes(toLower(type))
|
|
27
|
+
if (!isLegal) {
|
|
28
|
+
// 上传文件格式有误!
|
|
29
|
+
return false
|
|
30
|
+
}
|
|
31
|
+
return true
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @desc 限制文件上传大小
|
|
36
|
+
* @param {file|Blob} file 源文件
|
|
37
|
+
* @param {number} fileMaxSize 图片限制大小单位(MB)
|
|
38
|
+
* @return 在限制内返回true否则返回false
|
|
39
|
+
*/
|
|
40
|
+
export const isMaxFileSize = (file: File | Blob, fileMaxSize?: number): boolean => {
|
|
41
|
+
if (!fileMaxSize) {
|
|
42
|
+
return true
|
|
43
|
+
}
|
|
44
|
+
const isMaxSize = file.size / 1024 / 1024 < fileMaxSize
|
|
45
|
+
if (!isMaxSize) {
|
|
46
|
+
// 上传文件大小不能超过 {size} MB!
|
|
47
|
+
return false
|
|
48
|
+
}
|
|
49
|
+
return true
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
*
|
|
54
|
+
* @desc 读取文件为DataURL文件格式 (base64)
|
|
55
|
+
* @param {file|Blob} file 源文件
|
|
56
|
+
* @return 返回DataURL文件 (base64)
|
|
57
|
+
*/
|
|
58
|
+
export const fileToDataURL = (file: File | Blob): Promise<string> => {
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
const reader = new FileReader()
|
|
61
|
+
reader.onload = (e: ProgressEvent<FileReader>) => {
|
|
62
|
+
const data = (e.target as any).result
|
|
63
|
+
resolve(data)
|
|
64
|
+
}
|
|
65
|
+
reader.onerror = e => {
|
|
66
|
+
// 读取文件失败
|
|
67
|
+
reject(new Error(e as any))
|
|
68
|
+
}
|
|
69
|
+
reader.readAsDataURL(file)
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @desc 读取文件为text文件格式
|
|
75
|
+
* @param {file} file 源文件
|
|
76
|
+
* @return 返回text文件
|
|
77
|
+
*/
|
|
78
|
+
export const fileToText = (file: File | Blob): Promise<string> => {
|
|
79
|
+
return new Promise((resolve, reject) => {
|
|
80
|
+
const reader = new FileReader()
|
|
81
|
+
reader.onload = (e: ProgressEvent<FileReader>) => {
|
|
82
|
+
const data = (e.target as any).result
|
|
83
|
+
resolve(data)
|
|
84
|
+
}
|
|
85
|
+
reader.onerror = e => {
|
|
86
|
+
// 读取文件失败
|
|
87
|
+
// 读取文件失败
|
|
88
|
+
reject(new Error(e as any))
|
|
89
|
+
}
|
|
90
|
+
reader.readAsText(file, "utf-8")
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @desc 加载真实图片,读取成功返回图片真实宽高和图片本身对象 ag: { width: 100,height: 100,image: '' }
|
|
96
|
+
* @param {string} src 图片地址
|
|
97
|
+
* @return `{ width: ,height: , image: }`
|
|
98
|
+
*/
|
|
99
|
+
export const loadImage = (
|
|
100
|
+
src: string
|
|
101
|
+
): Promise<{ width: number; height: number; image: HTMLImageElement }> => {
|
|
102
|
+
return new Promise((resolve, reject) => {
|
|
103
|
+
const image = new Image()
|
|
104
|
+
image.src = src
|
|
105
|
+
image.onload = () => {
|
|
106
|
+
const data = { width: image.width, height: image.height, image }
|
|
107
|
+
resolve(data)
|
|
108
|
+
}
|
|
109
|
+
image.onerror = () => {
|
|
110
|
+
// 加载文件失败
|
|
111
|
+
const err = new Error("load file error")
|
|
112
|
+
reject(err)
|
|
113
|
+
}
|
|
114
|
+
})
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* @desc 判断图片文件的分辨率是否在限定范围之内,分辨率不在限定范围之内则抛出异常
|
|
119
|
+
* @param {file} file 源文件
|
|
120
|
+
* @param {object} props 文件分辨率的宽和高 ag: props={width:100, height :100}
|
|
121
|
+
*/
|
|
122
|
+
export const isLegalResolutionRatio = async (
|
|
123
|
+
file: File | Blob,
|
|
124
|
+
props: { width: number; height: number }
|
|
125
|
+
): Promise<boolean> => {
|
|
126
|
+
try {
|
|
127
|
+
const { width, height } = props
|
|
128
|
+
const base64 = await fileToDataURL(file)
|
|
129
|
+
const image = await loadImage(base64)
|
|
130
|
+
if (image.width !== width || image.height !== height) {
|
|
131
|
+
// 上传图片的分辨率必须为
|
|
132
|
+
return Promise.reject(false)
|
|
133
|
+
}
|
|
134
|
+
return true
|
|
135
|
+
} catch (error) {
|
|
136
|
+
return Promise.reject(false)
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
interface Download<T = Blob | string> {
|
|
141
|
+
(data: T, filename: string, options?: FileSaverOptions): Promise<T>
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* @description 下载文件
|
|
146
|
+
* @param {Blob | string} data 文件 Blob
|
|
147
|
+
* @param {string} filename 文件名称
|
|
148
|
+
* @param {object} options 可选参数
|
|
149
|
+
*/
|
|
150
|
+
export const download: Download = async (data, filename, options) => {
|
|
151
|
+
// 处理没有数据的情况
|
|
152
|
+
if (!data) {
|
|
153
|
+
return Promise.reject("download fail: data is empt!")
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// 处理二进制数据接口异常
|
|
157
|
+
try {
|
|
158
|
+
const text = await (data as Blob).text()
|
|
159
|
+
const res = JSON.parse(text)
|
|
160
|
+
if (res) {
|
|
161
|
+
return Promise.reject("download fail: server error!")
|
|
162
|
+
}
|
|
163
|
+
} catch (error) {}
|
|
164
|
+
|
|
165
|
+
// 下载文件
|
|
166
|
+
try {
|
|
167
|
+
const { default: FileSaver } = await import("file-saver")
|
|
168
|
+
FileSaver.saveAs(data, filename, options)
|
|
169
|
+
return Promise.resolve(data)
|
|
170
|
+
} catch (error) {
|
|
171
|
+
return Promise.reject("download fail: server error!")
|
|
172
|
+
}
|
|
173
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Object.prototype.toString 别名
|
|
3
|
+
*/
|
|
4
|
+
export const objectToString = Object.prototype.toString
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 获取类型
|
|
8
|
+
* @param value
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
11
|
+
export const toTypeString = (value: any) => objectToString.call(value)
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 拿到类型字符串
|
|
15
|
+
* @param value
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
export const toRawType = (value: any) => {
|
|
19
|
+
return toTypeString(value).slice(8, -1)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 判断是否是数组
|
|
24
|
+
*/
|
|
25
|
+
export const isArray = Array.isArray
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* 判断是否是Map
|
|
29
|
+
* @param val
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
export const isMap = (val: any): val is Map<any, any> => toTypeString(val) === "[object Map]"
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* 判断是否是Set
|
|
36
|
+
* @param val
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
39
|
+
export const isSet = (val: any): val is Set<any> => toTypeString(val) === "[object Set]"
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 判断是否是Date
|
|
43
|
+
* @param val
|
|
44
|
+
* @returns
|
|
45
|
+
*/
|
|
46
|
+
export const isDate = (val: any): val is Date => toTypeString(val) === "[object Date]"
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 判断是否是Reg
|
|
50
|
+
* @param val
|
|
51
|
+
* @returns
|
|
52
|
+
*/
|
|
53
|
+
export const isRegExp = (val: any): val is RegExp => toTypeString(val) === "[object RegExp]"
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* 判断是否是函数
|
|
57
|
+
* @param val
|
|
58
|
+
* @returns
|
|
59
|
+
*/
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
61
|
+
export const isFunction = (val: any): val is Function => typeof val === "function"
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* 判断是否是字符串
|
|
65
|
+
* @param val
|
|
66
|
+
* @returns
|
|
67
|
+
*/
|
|
68
|
+
export const isString = (val: any): val is string => typeof val === "string"
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* 判断是否是Symbol
|
|
72
|
+
* @param val
|
|
73
|
+
* @returns
|
|
74
|
+
*/
|
|
75
|
+
export const isSymbol = (val: any): val is symbol => typeof val === "symbol"
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 判断是否是boolean
|
|
79
|
+
* @param val
|
|
80
|
+
* @returns
|
|
81
|
+
*/
|
|
82
|
+
export const isBoolean = (val: any): val is boolean => typeof val === "boolean"
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* 判断是否是object
|
|
86
|
+
* @param val
|
|
87
|
+
* @returns
|
|
88
|
+
*/
|
|
89
|
+
export const isObject = (val: any): val is Record<keyof any, any> =>
|
|
90
|
+
val !== null && typeof val === "object"
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* 判断是否是Promise
|
|
94
|
+
* @param val
|
|
95
|
+
* @returns
|
|
96
|
+
*/
|
|
97
|
+
export const isPromise = <T = any>(val: any): val is Promise<T> => {
|
|
98
|
+
return isObject(val) && isFunction(val.then) && isFunction(val.catch)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* 判断是否是 纯对象 object
|
|
103
|
+
* @param val
|
|
104
|
+
* @returns
|
|
105
|
+
*/
|
|
106
|
+
export const isPlainObject = (val: any): val is Record<keyof any, any> =>
|
|
107
|
+
toTypeString(val) === "[object Object]"
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* 是否是空对象
|
|
111
|
+
* @param val
|
|
112
|
+
* @returns
|
|
113
|
+
*/
|
|
114
|
+
export const isEmptyObject = (val: any): val is Record<keyof any, any> =>
|
|
115
|
+
isPlainObject(val) && Object.keys(val).length === 0
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* 是否是链接
|
|
119
|
+
* @param url
|
|
120
|
+
* @returns
|
|
121
|
+
*/
|
|
122
|
+
export function isUrl(url: string): url is string {
|
|
123
|
+
const regex = new RegExp(
|
|
124
|
+
"^(https?:\\/\\/)?" + // protocol
|
|
125
|
+
"((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|" + // domain name
|
|
126
|
+
"((\\d{1,3}\\.){3}\\d{1,3}))" + // OR ip (v4) address
|
|
127
|
+
"(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*" + // port and path
|
|
128
|
+
"(\\?[;&a-z\\d%_.~+=-]*)?" + // query string
|
|
129
|
+
"(\\#[-a-z\\d_]*)?$",
|
|
130
|
+
"i"
|
|
131
|
+
)
|
|
132
|
+
return regex.test(url)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* 是否是SVGElement
|
|
137
|
+
* @param tag
|
|
138
|
+
* @returns
|
|
139
|
+
*/
|
|
140
|
+
export const isSVGElement = (tag: any): tag is SVGElement =>
|
|
141
|
+
typeof SVGElement !== "undefined" && tag instanceof SVGElement
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* 是否是vue 组件
|
|
145
|
+
* @param val
|
|
146
|
+
* @returns
|
|
147
|
+
*/
|
|
148
|
+
export const isComponent = (val: any) =>
|
|
149
|
+
isPlainObject(val) && (isFunction(val.render) || isFunction(val.setup))
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* 是否是ios
|
|
153
|
+
* @returns {boolean}
|
|
154
|
+
*/
|
|
155
|
+
export function isIOS(): boolean {
|
|
156
|
+
const isIphone = navigator.userAgent.includes("iPhone")
|
|
157
|
+
const isIpad = navigator.userAgent.includes("iPad")
|
|
158
|
+
return isIphone || isIpad
|
|
159
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @desc 生成大写字母
|
|
3
|
+
* @returns
|
|
4
|
+
*/
|
|
5
|
+
export const getBigLetter = () => {
|
|
6
|
+
return Array.from({ length: 26 }).map((_, index) => String.fromCharCode(65 + index))
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @desc 生成小写字母
|
|
11
|
+
* @returns
|
|
12
|
+
*/
|
|
13
|
+
export const getSmallLetter = () => {
|
|
14
|
+
return Array.from({ length: 26 }).map((_, index) => String.fromCharCode(97 + index))
|
|
15
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import numeral from "numeral"
|
|
2
|
+
import accounting from "accounting"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 格式化金钱 $12,345,678.00
|
|
6
|
+
* @param val
|
|
7
|
+
* @param format 默认 '¥'
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export function formatMoney(val: string | number, format = "¥"): string {
|
|
11
|
+
return accounting.formatMoney(val, format)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 格式化数字
|
|
16
|
+
* @param number
|
|
17
|
+
* @param format 默认格式 '0.00'
|
|
18
|
+
* @returns
|
|
19
|
+
*/
|
|
20
|
+
export function formatNumber(number: number | string, format = "0.00"): string {
|
|
21
|
+
return numeral(number).format(format)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* 格式化数字
|
|
26
|
+
* @param value
|
|
27
|
+
* @param decimal 默认2位小数
|
|
28
|
+
* @returns x.xx
|
|
29
|
+
*/
|
|
30
|
+
export function formatNumberFixed(value: string, decimal = 2): string {
|
|
31
|
+
let temp = String(value)
|
|
32
|
+
if (String(value).includes(".")) {
|
|
33
|
+
temp = value.slice(0, value.indexOf(".") + decimal + 1)
|
|
34
|
+
}
|
|
35
|
+
const format = "0." + "0".repeat(decimal)
|
|
36
|
+
return formatNumber(temp, format)
|
|
37
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 打开电脑本地软件
|
|
3
|
+
* @param protocol 本地软件协议, 如 vscode 的协议 `vscode://`
|
|
4
|
+
* @param event 点击按钮事件, `el-button` 或者原生 `button`
|
|
5
|
+
* @param timeout 默认`1000`ms,没响应则认为打开失败
|
|
6
|
+
*/
|
|
7
|
+
export const openExe = (protocol: string, event: Event, timeout = 1000): Promise<FocusEvent> => {
|
|
8
|
+
event.stopPropagation()
|
|
9
|
+
event.preventDefault()
|
|
10
|
+
window.location.href = protocol
|
|
11
|
+
const target = event.target as EventTarget & {
|
|
12
|
+
localName: string
|
|
13
|
+
parentElement: HTMLButtonElement
|
|
14
|
+
onblur: (e: FocusEvent) => void
|
|
15
|
+
}
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
if (target) {
|
|
18
|
+
const element =
|
|
19
|
+
target.localName === "button"
|
|
20
|
+
? target
|
|
21
|
+
: target.localName === "span"
|
|
22
|
+
? target.parentElement
|
|
23
|
+
: document
|
|
24
|
+
// 防止重复注册
|
|
25
|
+
if (element.onblur === null) {
|
|
26
|
+
// 1秒没有响应 则认为软件打开失败
|
|
27
|
+
const timer = setTimeout(() => {
|
|
28
|
+
element.onblur = null
|
|
29
|
+
reject("error")
|
|
30
|
+
}, timeout)
|
|
31
|
+
|
|
32
|
+
element.onblur = (focusEvent: FocusEvent) => {
|
|
33
|
+
// 判断焦点失去是否是按钮 防止点击界面其他地方导致失去焦点
|
|
34
|
+
if (element === document.activeElement) {
|
|
35
|
+
clearTimeout(timer)
|
|
36
|
+
element.onblur = null
|
|
37
|
+
resolve(focusEvent)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
} else {
|
|
42
|
+
reject("error")
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import storage from "good-storage"
|
|
2
|
+
import CryptoJS from "crypto-js"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* AES加密
|
|
6
|
+
* @param key 加密的key
|
|
7
|
+
* @param data 需要加密的字符串
|
|
8
|
+
* @returns encrypted 加密的字符串
|
|
9
|
+
*/
|
|
10
|
+
export function encrypt(
|
|
11
|
+
key: string | CryptoJS.lib.WordArray,
|
|
12
|
+
data: string | CryptoJS.lib.WordArray
|
|
13
|
+
): string {
|
|
14
|
+
const encrypted = CryptoJS.AES.encrypt(data, key).toString()
|
|
15
|
+
return encrypted
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* AES 解密
|
|
20
|
+
* @param key 解密的key 需要和加密的key 一致
|
|
21
|
+
* @param encrypted 加密后字符串
|
|
22
|
+
* @returns data 解密后的字符串
|
|
23
|
+
*/
|
|
24
|
+
export function decrypt(
|
|
25
|
+
key: string | CryptoJS.lib.WordArray,
|
|
26
|
+
encrypted: string | CryptoJS.lib.CipherParams
|
|
27
|
+
): string {
|
|
28
|
+
const decrypted = CryptoJS.AES.decrypt(encrypted, key)
|
|
29
|
+
const data = decrypted.toString(CryptoJS.enc.Utf8)
|
|
30
|
+
return data
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* 获取storage
|
|
35
|
+
* @returns storage
|
|
36
|
+
*/
|
|
37
|
+
export function getStorage(key: string): string {
|
|
38
|
+
return storage.get(key)
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 设置storage
|
|
42
|
+
* @returns storage
|
|
43
|
+
*/
|
|
44
|
+
export function setStorage(key: string, data: any): string {
|
|
45
|
+
return storage.set(key, data)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 移除storage
|
|
50
|
+
*/
|
|
51
|
+
export function removeStorage(key: string): void {
|
|
52
|
+
storage.remove(key)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* 获取token 带AES解密
|
|
57
|
+
* @returns token
|
|
58
|
+
*/
|
|
59
|
+
export function getToken(key: string): string {
|
|
60
|
+
const data = storage.get(key)
|
|
61
|
+
const res = data ? decrypt(key, data) : ""
|
|
62
|
+
return res
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 设置token 带AES加密
|
|
66
|
+
* @returns token
|
|
67
|
+
*/
|
|
68
|
+
export function setToken(key: string, token: string): string {
|
|
69
|
+
const data = encrypt(key, token)
|
|
70
|
+
return storage.set(key, data)
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 移除token
|
|
74
|
+
*/
|
|
75
|
+
export function removeToken(key: string): void {
|
|
76
|
+
storage.remove(key)
|
|
77
|
+
}
|