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,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 格式化金钱 $12,345,678.00
|
|
3
|
+
* @param val
|
|
4
|
+
* @param format 默认 '¥'
|
|
5
|
+
* @returns
|
|
6
|
+
*/
|
|
7
|
+
declare function formatMoney(val: string | number, format?: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* 格式化数字
|
|
10
|
+
* @param number
|
|
11
|
+
* @param format 默认格式 '0.00'
|
|
12
|
+
* @returns
|
|
13
|
+
*/
|
|
14
|
+
declare function formatNumber(number: number | string, format?: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* 格式化数字
|
|
17
|
+
* @param value
|
|
18
|
+
* @param decimal 默认2位小数
|
|
19
|
+
* @returns x.xx
|
|
20
|
+
*/
|
|
21
|
+
declare function formatNumberFixed(value: string, decimal?: number): string;
|
|
22
|
+
|
|
23
|
+
export { formatMoney, formatNumber, formatNumberFixed };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 格式化金钱 $12,345,678.00
|
|
3
|
+
* @param val
|
|
4
|
+
* @param format 默认 '¥'
|
|
5
|
+
* @returns
|
|
6
|
+
*/
|
|
7
|
+
declare function formatMoney(val: string | number, format?: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* 格式化数字
|
|
10
|
+
* @param number
|
|
11
|
+
* @param format 默认格式 '0.00'
|
|
12
|
+
* @returns
|
|
13
|
+
*/
|
|
14
|
+
declare function formatNumber(number: number | string, format?: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* 格式化数字
|
|
17
|
+
* @param value
|
|
18
|
+
* @param decimal 默认2位小数
|
|
19
|
+
* @returns x.xx
|
|
20
|
+
*/
|
|
21
|
+
declare function formatNumberFixed(value: string, decimal?: number): string;
|
|
22
|
+
|
|
23
|
+
export { formatMoney, formatNumber, formatNumberFixed };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 格式化金钱 $12,345,678.00
|
|
3
|
+
* @param val
|
|
4
|
+
* @param format 默认 '¥'
|
|
5
|
+
* @returns
|
|
6
|
+
*/
|
|
7
|
+
declare function formatMoney(val: string | number, format?: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* 格式化数字
|
|
10
|
+
* @param number
|
|
11
|
+
* @param format 默认格式 '0.00'
|
|
12
|
+
* @returns
|
|
13
|
+
*/
|
|
14
|
+
declare function formatNumber(number: number | string, format?: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* 格式化数字
|
|
17
|
+
* @param value
|
|
18
|
+
* @param decimal 默认2位小数
|
|
19
|
+
* @returns x.xx
|
|
20
|
+
*/
|
|
21
|
+
declare function formatNumberFixed(value: string, decimal?: number): string;
|
|
22
|
+
|
|
23
|
+
export { formatMoney, formatNumber, formatNumberFixed };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import i from"numeral";import f from"accounting";function m(r,t="\uFFE5"){return f.formatMoney(r,t)}function o(r,t="0.00"){return i(r).format(t)}function u(r,t=2){let n=String(r);String(r).includes(".")&&(n=r.slice(0,r.indexOf(".")+t+1));const e="0."+"0".repeat(t);return o(n,e)}export{m as formatMoney,o as formatNumber,u as formatNumberFixed};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const openExe=(r,o,l=1e3)=>{o.stopPropagation(),o.preventDefault(),window.location.href=r;const e=o.target;return new Promise((u,n)=>{if(e){const t=e.localName==="button"?e:e.localName==="span"?e.parentElement:document;if(t.onblur===null){const a=setTimeout(()=>{t.onblur=null,n("error")},l);t.onblur=c=>{t===document.activeElement&&(clearTimeout(a),t.onblur=null,u(c))}}}else n("error")})};exports.openExe=openExe;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 打开电脑本地软件
|
|
3
|
+
* @param protocol 本地软件协议, 如 vscode 的协议 `vscode://`
|
|
4
|
+
* @param event 点击按钮事件, `el-button` 或者原生 `button`
|
|
5
|
+
* @param timeout 默认`1000`ms,没响应则认为打开失败
|
|
6
|
+
*/
|
|
7
|
+
declare const openExe: (protocol: string, event: Event, timeout?: number) => Promise<FocusEvent>;
|
|
8
|
+
|
|
9
|
+
export { openExe };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 打开电脑本地软件
|
|
3
|
+
* @param protocol 本地软件协议, 如 vscode 的协议 `vscode://`
|
|
4
|
+
* @param event 点击按钮事件, `el-button` 或者原生 `button`
|
|
5
|
+
* @param timeout 默认`1000`ms,没响应则认为打开失败
|
|
6
|
+
*/
|
|
7
|
+
declare const openExe: (protocol: string, event: Event, timeout?: number) => Promise<FocusEvent>;
|
|
8
|
+
|
|
9
|
+
export { openExe };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 打开电脑本地软件
|
|
3
|
+
* @param protocol 本地软件协议, 如 vscode 的协议 `vscode://`
|
|
4
|
+
* @param event 点击按钮事件, `el-button` 或者原生 `button`
|
|
5
|
+
* @param timeout 默认`1000`ms,没响应则认为打开失败
|
|
6
|
+
*/
|
|
7
|
+
declare const openExe: (protocol: string, event: Event, timeout?: number) => Promise<FocusEvent>;
|
|
8
|
+
|
|
9
|
+
export { openExe };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const i=(l,t,r=1e3)=>{t.stopPropagation(),t.preventDefault(),window.location.href=l;const e=t.target;return new Promise((u,n)=>{if(e){const o=e.localName==="button"?e:e.localName==="span"?e.parentElement:document;if(o.onblur===null){const a=setTimeout(()=>{o.onblur=null,n("error")},r);o.onblur=c=>{o===document.activeElement&&(clearTimeout(a),o.onblur=null,u(c))}}}else n("error")})};export{i as openExe};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const n=require("good-storage"),o=require("crypto-js");function _interopDefaultCompat(t){return t&&typeof t=="object"&&"default"in t?t.default:t}const n__default=_interopDefaultCompat(n),o__default=_interopDefaultCompat(o);function encrypt(t,e){return o__default.AES.encrypt(e,t).toString()}function decrypt(t,e){return o__default.AES.decrypt(e,t).toString(o__default.enc.Utf8)}function getStorage(t){return n__default.get(t)}function setStorage(t,e){return n__default.set(t,e)}function removeStorage(t){n__default.remove(t)}function getToken(t){const e=n__default.get(t);return e?decrypt(t,e):""}function setToken(t,e){const r=encrypt(t,e);return n__default.set(t,r)}function removeToken(t){n__default.remove(t)}exports.decrypt=decrypt,exports.encrypt=encrypt,exports.getStorage=getStorage,exports.getToken=getToken,exports.removeStorage=removeStorage,exports.removeToken=removeToken,exports.setStorage=setStorage,exports.setToken=setToken;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import CryptoJS from 'crypto-js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* AES加密
|
|
5
|
+
* @param key 加密的key
|
|
6
|
+
* @param data 需要加密的字符串
|
|
7
|
+
* @returns encrypted 加密的字符串
|
|
8
|
+
*/
|
|
9
|
+
declare function encrypt(key: string | CryptoJS.lib.WordArray, data: string | CryptoJS.lib.WordArray): string;
|
|
10
|
+
/**
|
|
11
|
+
* AES 解密
|
|
12
|
+
* @param key 解密的key 需要和加密的key 一致
|
|
13
|
+
* @param encrypted 加密后字符串
|
|
14
|
+
* @returns data 解密后的字符串
|
|
15
|
+
*/
|
|
16
|
+
declare function decrypt(key: string | CryptoJS.lib.WordArray, encrypted: string | CryptoJS.lib.CipherParams): string;
|
|
17
|
+
/**
|
|
18
|
+
* 获取storage
|
|
19
|
+
* @returns storage
|
|
20
|
+
*/
|
|
21
|
+
declare function getStorage(key: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* 设置storage
|
|
24
|
+
* @returns storage
|
|
25
|
+
*/
|
|
26
|
+
declare function setStorage(key: string, data: any): string;
|
|
27
|
+
/**
|
|
28
|
+
* 移除storage
|
|
29
|
+
*/
|
|
30
|
+
declare function removeStorage(key: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* 获取token 带AES解密
|
|
33
|
+
* @returns token
|
|
34
|
+
*/
|
|
35
|
+
declare function getToken(key: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* 设置token 带AES加密
|
|
38
|
+
* @returns token
|
|
39
|
+
*/
|
|
40
|
+
declare function setToken(key: string, token: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* 移除token
|
|
43
|
+
*/
|
|
44
|
+
declare function removeToken(key: string): void;
|
|
45
|
+
|
|
46
|
+
export { decrypt, encrypt, getStorage, getToken, removeStorage, removeToken, setStorage, setToken };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import CryptoJS from 'crypto-js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* AES加密
|
|
5
|
+
* @param key 加密的key
|
|
6
|
+
* @param data 需要加密的字符串
|
|
7
|
+
* @returns encrypted 加密的字符串
|
|
8
|
+
*/
|
|
9
|
+
declare function encrypt(key: string | CryptoJS.lib.WordArray, data: string | CryptoJS.lib.WordArray): string;
|
|
10
|
+
/**
|
|
11
|
+
* AES 解密
|
|
12
|
+
* @param key 解密的key 需要和加密的key 一致
|
|
13
|
+
* @param encrypted 加密后字符串
|
|
14
|
+
* @returns data 解密后的字符串
|
|
15
|
+
*/
|
|
16
|
+
declare function decrypt(key: string | CryptoJS.lib.WordArray, encrypted: string | CryptoJS.lib.CipherParams): string;
|
|
17
|
+
/**
|
|
18
|
+
* 获取storage
|
|
19
|
+
* @returns storage
|
|
20
|
+
*/
|
|
21
|
+
declare function getStorage(key: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* 设置storage
|
|
24
|
+
* @returns storage
|
|
25
|
+
*/
|
|
26
|
+
declare function setStorage(key: string, data: any): string;
|
|
27
|
+
/**
|
|
28
|
+
* 移除storage
|
|
29
|
+
*/
|
|
30
|
+
declare function removeStorage(key: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* 获取token 带AES解密
|
|
33
|
+
* @returns token
|
|
34
|
+
*/
|
|
35
|
+
declare function getToken(key: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* 设置token 带AES加密
|
|
38
|
+
* @returns token
|
|
39
|
+
*/
|
|
40
|
+
declare function setToken(key: string, token: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* 移除token
|
|
43
|
+
*/
|
|
44
|
+
declare function removeToken(key: string): void;
|
|
45
|
+
|
|
46
|
+
export { decrypt, encrypt, getStorage, getToken, removeStorage, removeToken, setStorage, setToken };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import CryptoJS from 'crypto-js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* AES加密
|
|
5
|
+
* @param key 加密的key
|
|
6
|
+
* @param data 需要加密的字符串
|
|
7
|
+
* @returns encrypted 加密的字符串
|
|
8
|
+
*/
|
|
9
|
+
declare function encrypt(key: string | CryptoJS.lib.WordArray, data: string | CryptoJS.lib.WordArray): string;
|
|
10
|
+
/**
|
|
11
|
+
* AES 解密
|
|
12
|
+
* @param key 解密的key 需要和加密的key 一致
|
|
13
|
+
* @param encrypted 加密后字符串
|
|
14
|
+
* @returns data 解密后的字符串
|
|
15
|
+
*/
|
|
16
|
+
declare function decrypt(key: string | CryptoJS.lib.WordArray, encrypted: string | CryptoJS.lib.CipherParams): string;
|
|
17
|
+
/**
|
|
18
|
+
* 获取storage
|
|
19
|
+
* @returns storage
|
|
20
|
+
*/
|
|
21
|
+
declare function getStorage(key: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* 设置storage
|
|
24
|
+
* @returns storage
|
|
25
|
+
*/
|
|
26
|
+
declare function setStorage(key: string, data: any): string;
|
|
27
|
+
/**
|
|
28
|
+
* 移除storage
|
|
29
|
+
*/
|
|
30
|
+
declare function removeStorage(key: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* 获取token 带AES解密
|
|
33
|
+
* @returns token
|
|
34
|
+
*/
|
|
35
|
+
declare function getToken(key: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* 设置token 带AES加密
|
|
38
|
+
* @returns token
|
|
39
|
+
*/
|
|
40
|
+
declare function setToken(key: string, token: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* 移除token
|
|
43
|
+
*/
|
|
44
|
+
declare function removeToken(key: string): void;
|
|
45
|
+
|
|
46
|
+
export { decrypt, encrypt, getStorage, getToken, removeStorage, removeToken, setStorage, setToken };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import n from"good-storage";import r from"crypto-js";function o(t,e){return r.AES.encrypt(e,t).toString()}function c(t,e){return r.AES.decrypt(e,t).toString(r.enc.Utf8)}function i(t){return n.get(t)}function f(t,e){return n.set(t,e)}function g(t){n.remove(t)}function m(t){const e=n.get(t);return e?c(t,e):""}function p(t,e){const u=o(t,e);return n.set(t,u)}function S(t){n.remove(t)}export{c as decrypt,o as encrypt,i as getStorage,m as getToken,g as removeStorage,S as removeToken,f as setStorage,p as setToken};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";function validateRegexUrl(t){return new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i").test(t)}const validatePhone=t=>/^1(3[0-9]|4[0-1,4-9]|5[0-3,5-9]|6[2567]|7[0-8]|8[0-9]|9[0-3,5-9])\d{8}$/.test(t),validateLocalPhone=t=>/^\d{3}-\d{7,8}|\d{4}-\d{7,8}$/.test(t),validateEmail=t=>/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(t),validateExternal=t=>/^(https?:|mailto:|tel:)/.test(t);exports.validateEmail=validateEmail,exports.validateExternal=validateExternal,exports.validateLocalPhone=validateLocalPhone,exports.validatePhone=validatePhone,exports.validateRegexUrl=validateRegexUrl;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @desc 校验链接地址
|
|
3
|
+
* @param url
|
|
4
|
+
* @returns
|
|
5
|
+
*/
|
|
6
|
+
declare function validateRegexUrl(url: string): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* @desc 检验电话
|
|
9
|
+
* @param phone
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
declare const validatePhone: (phone: string) => boolean;
|
|
13
|
+
/**
|
|
14
|
+
* @desc 检验固定电话
|
|
15
|
+
* @param localPhone
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
declare const validateLocalPhone: (localPhone: string) => boolean;
|
|
19
|
+
/**
|
|
20
|
+
* @desc 检验邮箱
|
|
21
|
+
* @param mail
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
declare const validateEmail: (mail: string) => boolean;
|
|
25
|
+
/**
|
|
26
|
+
* @desc 判断是否是可跳转URL
|
|
27
|
+
* @param {string} path
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
declare const validateExternal: (path: string) => boolean;
|
|
31
|
+
|
|
32
|
+
export { validateEmail, validateExternal, validateLocalPhone, validatePhone, validateRegexUrl };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @desc 校验链接地址
|
|
3
|
+
* @param url
|
|
4
|
+
* @returns
|
|
5
|
+
*/
|
|
6
|
+
declare function validateRegexUrl(url: string): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* @desc 检验电话
|
|
9
|
+
* @param phone
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
declare const validatePhone: (phone: string) => boolean;
|
|
13
|
+
/**
|
|
14
|
+
* @desc 检验固定电话
|
|
15
|
+
* @param localPhone
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
declare const validateLocalPhone: (localPhone: string) => boolean;
|
|
19
|
+
/**
|
|
20
|
+
* @desc 检验邮箱
|
|
21
|
+
* @param mail
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
declare const validateEmail: (mail: string) => boolean;
|
|
25
|
+
/**
|
|
26
|
+
* @desc 判断是否是可跳转URL
|
|
27
|
+
* @param {string} path
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
declare const validateExternal: (path: string) => boolean;
|
|
31
|
+
|
|
32
|
+
export { validateEmail, validateExternal, validateLocalPhone, validatePhone, validateRegexUrl };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @desc 校验链接地址
|
|
3
|
+
* @param url
|
|
4
|
+
* @returns
|
|
5
|
+
*/
|
|
6
|
+
declare function validateRegexUrl(url: string): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* @desc 检验电话
|
|
9
|
+
* @param phone
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
declare const validatePhone: (phone: string) => boolean;
|
|
13
|
+
/**
|
|
14
|
+
* @desc 检验固定电话
|
|
15
|
+
* @param localPhone
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
declare const validateLocalPhone: (localPhone: string) => boolean;
|
|
19
|
+
/**
|
|
20
|
+
* @desc 检验邮箱
|
|
21
|
+
* @param mail
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
declare const validateEmail: (mail: string) => boolean;
|
|
25
|
+
/**
|
|
26
|
+
* @desc 判断是否是可跳转URL
|
|
27
|
+
* @param {string} path
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
declare const validateExternal: (path: string) => boolean;
|
|
31
|
+
|
|
32
|
+
export { validateEmail, validateExternal, validateLocalPhone, validatePhone, validateRegexUrl };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function a(t){return new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i").test(t)}const e=t=>/^1(3[0-9]|4[0-1,4-9]|5[0-3,5-9]|6[2567]|7[0-8]|8[0-9]|9[0-3,5-9])\d{8}$/.test(t),d=t=>/^\d{3}-\d{7,8}|\d{4}-\d{7,8}$/.test(t),l=t=>/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(t),z=t=>/^(https?:|mailto:|tel:)/.test(t);export{l as validateEmail,z as validateExternal,d as validateLocalPhone,e as validatePhone,a as validateRegexUrl};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const u=require("qs");function _interopDefaultCompat(e){return e&&typeof e=="object"&&"default"in e?e.default:e}const u__default=_interopDefaultCompat(u);var a=Object.defineProperty,h=(e,t,o)=>t in e?a(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,s=(e,t,o)=>(h(e,typeof t!="symbol"?t+"":t,o),o);const l=3,y="ping",b=3e3,i=1e3;class p{constructor(t,o){s(this,"url"),s(this,"socket",null),s(this,"reconnectCount",0),s(this,"delay",null),s(this,"timer",null),s(this,"autoReconnect"),s(this,"heartbeat"),s(this,"query");const{autoReconnect:n=!0,query:c={},heartbeat:r=!1}=o||{};this.autoReconnect=n,this.heartbeat=r,this.query=c,this.url=`${t}`+u__default.stringify({...this.query},{addQueryPrefix:!0}),this.connect()}connect(){this.close(),this.socket=new WebSocket(this.url),this.onError(),this.onOpen()}onOpen(){this.socket&&(this.socket.onopen=()=>{this.send("ping"),this.heartbeat&&this.startHeartbeat()})}startHeartbeat(){const t=this.heartbeat?.message||y,o=this.heartbeat?.interval||b;this.timer=setInterval(()=>{this.send(t)},o)}onError(){this.socket&&(this.socket.onerror=()=>{const t=this.autoReconnect?.reconnectMaxCount||l;this.autoReconnect&&this.reconnectCount<t&&(this.reconnectCount++,this.connect())})}close(){this.socket&&this.socket.close(),this.delay&&clearTimeout(this.delay),this.timer&&clearInterval(this.timer),this.socket=null}onMessage(t){this.socket&&(this.socket.onmessage=o=>{try{const n=JSON.parse(o.data);t(n)}catch{t(o)}})}send(t){this.socket&&(this.socket.readyState===this.socket.OPEN?this.socket.send(JSON.stringify(t)):this.socket.readyState===this.socket.CONNECTING?this.delay=setTimeout(()=>{this.socket?.send(t)},i):(this.connect(),this.delay=setTimeout(()=>{this.socket?.send(t)},i)))}}exports.WS=p;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* setTimeout 类型
|
|
3
|
+
*/
|
|
4
|
+
type Timeout = ReturnType<typeof setTimeout>;
|
|
5
|
+
/**
|
|
6
|
+
* setInterval 类型
|
|
7
|
+
*/
|
|
8
|
+
type Interval = ReturnType<typeof setInterval>;
|
|
9
|
+
/**
|
|
10
|
+
* 允许null的泛型
|
|
11
|
+
*/
|
|
12
|
+
type Nullable<T> = T | null;
|
|
13
|
+
type AutoReconnect = {
|
|
14
|
+
/**
|
|
15
|
+
*重连尝试次数 默认 3
|
|
16
|
+
*/
|
|
17
|
+
reconnectMaxCount?: number;
|
|
18
|
+
};
|
|
19
|
+
type Heartbeat = {
|
|
20
|
+
/**
|
|
21
|
+
* 心跳信息 默认`ping`
|
|
22
|
+
*/
|
|
23
|
+
message: string;
|
|
24
|
+
/**
|
|
25
|
+
* 心跳间隔时间 默认 `3000` 毫秒
|
|
26
|
+
*/
|
|
27
|
+
interval: number;
|
|
28
|
+
};
|
|
29
|
+
interface WSOptions {
|
|
30
|
+
/**
|
|
31
|
+
* 是否自动重连 默认`true`
|
|
32
|
+
*/
|
|
33
|
+
autoReconnect: boolean | AutoReconnect;
|
|
34
|
+
/**
|
|
35
|
+
* 心跳 默认`false`
|
|
36
|
+
*/
|
|
37
|
+
heartbeat: boolean | Heartbeat;
|
|
38
|
+
/**
|
|
39
|
+
* url 携带的参数
|
|
40
|
+
*/
|
|
41
|
+
query: Record<string, string>;
|
|
42
|
+
}
|
|
43
|
+
declare class WS {
|
|
44
|
+
url: string;
|
|
45
|
+
socket: WebSocket | null;
|
|
46
|
+
reconnectCount: number;
|
|
47
|
+
delay: Nullable<Timeout>;
|
|
48
|
+
timer: Nullable<Interval>;
|
|
49
|
+
autoReconnect: WSOptions["autoReconnect"];
|
|
50
|
+
heartbeat: WSOptions["heartbeat"];
|
|
51
|
+
query: WSOptions["query"];
|
|
52
|
+
constructor(url?: string, options?: WSOptions);
|
|
53
|
+
/**
|
|
54
|
+
* 连接
|
|
55
|
+
*/
|
|
56
|
+
connect(): void;
|
|
57
|
+
/**
|
|
58
|
+
* 监听连接
|
|
59
|
+
*/
|
|
60
|
+
onOpen(): void;
|
|
61
|
+
/**
|
|
62
|
+
* 开启心跳
|
|
63
|
+
*/
|
|
64
|
+
startHeartbeat(): void;
|
|
65
|
+
/**
|
|
66
|
+
* 监听错误
|
|
67
|
+
*/
|
|
68
|
+
onError(): void;
|
|
69
|
+
/**
|
|
70
|
+
* 关闭连接
|
|
71
|
+
*/
|
|
72
|
+
close(): void;
|
|
73
|
+
/**
|
|
74
|
+
* 监听消息
|
|
75
|
+
* @param callback
|
|
76
|
+
*/
|
|
77
|
+
onMessage(callback: (...data: any[]) => any): void;
|
|
78
|
+
/**
|
|
79
|
+
* 发送消息
|
|
80
|
+
* @param data
|
|
81
|
+
*/
|
|
82
|
+
send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export { WS };
|
|
86
|
+
export type { WSOptions };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* setTimeout 类型
|
|
3
|
+
*/
|
|
4
|
+
type Timeout = ReturnType<typeof setTimeout>;
|
|
5
|
+
/**
|
|
6
|
+
* setInterval 类型
|
|
7
|
+
*/
|
|
8
|
+
type Interval = ReturnType<typeof setInterval>;
|
|
9
|
+
/**
|
|
10
|
+
* 允许null的泛型
|
|
11
|
+
*/
|
|
12
|
+
type Nullable<T> = T | null;
|
|
13
|
+
type AutoReconnect = {
|
|
14
|
+
/**
|
|
15
|
+
*重连尝试次数 默认 3
|
|
16
|
+
*/
|
|
17
|
+
reconnectMaxCount?: number;
|
|
18
|
+
};
|
|
19
|
+
type Heartbeat = {
|
|
20
|
+
/**
|
|
21
|
+
* 心跳信息 默认`ping`
|
|
22
|
+
*/
|
|
23
|
+
message: string;
|
|
24
|
+
/**
|
|
25
|
+
* 心跳间隔时间 默认 `3000` 毫秒
|
|
26
|
+
*/
|
|
27
|
+
interval: number;
|
|
28
|
+
};
|
|
29
|
+
interface WSOptions {
|
|
30
|
+
/**
|
|
31
|
+
* 是否自动重连 默认`true`
|
|
32
|
+
*/
|
|
33
|
+
autoReconnect: boolean | AutoReconnect;
|
|
34
|
+
/**
|
|
35
|
+
* 心跳 默认`false`
|
|
36
|
+
*/
|
|
37
|
+
heartbeat: boolean | Heartbeat;
|
|
38
|
+
/**
|
|
39
|
+
* url 携带的参数
|
|
40
|
+
*/
|
|
41
|
+
query: Record<string, string>;
|
|
42
|
+
}
|
|
43
|
+
declare class WS {
|
|
44
|
+
url: string;
|
|
45
|
+
socket: WebSocket | null;
|
|
46
|
+
reconnectCount: number;
|
|
47
|
+
delay: Nullable<Timeout>;
|
|
48
|
+
timer: Nullable<Interval>;
|
|
49
|
+
autoReconnect: WSOptions["autoReconnect"];
|
|
50
|
+
heartbeat: WSOptions["heartbeat"];
|
|
51
|
+
query: WSOptions["query"];
|
|
52
|
+
constructor(url?: string, options?: WSOptions);
|
|
53
|
+
/**
|
|
54
|
+
* 连接
|
|
55
|
+
*/
|
|
56
|
+
connect(): void;
|
|
57
|
+
/**
|
|
58
|
+
* 监听连接
|
|
59
|
+
*/
|
|
60
|
+
onOpen(): void;
|
|
61
|
+
/**
|
|
62
|
+
* 开启心跳
|
|
63
|
+
*/
|
|
64
|
+
startHeartbeat(): void;
|
|
65
|
+
/**
|
|
66
|
+
* 监听错误
|
|
67
|
+
*/
|
|
68
|
+
onError(): void;
|
|
69
|
+
/**
|
|
70
|
+
* 关闭连接
|
|
71
|
+
*/
|
|
72
|
+
close(): void;
|
|
73
|
+
/**
|
|
74
|
+
* 监听消息
|
|
75
|
+
* @param callback
|
|
76
|
+
*/
|
|
77
|
+
onMessage(callback: (...data: any[]) => any): void;
|
|
78
|
+
/**
|
|
79
|
+
* 发送消息
|
|
80
|
+
* @param data
|
|
81
|
+
*/
|
|
82
|
+
send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export { WS };
|
|
86
|
+
export type { WSOptions };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* setTimeout 类型
|
|
3
|
+
*/
|
|
4
|
+
type Timeout = ReturnType<typeof setTimeout>;
|
|
5
|
+
/**
|
|
6
|
+
* setInterval 类型
|
|
7
|
+
*/
|
|
8
|
+
type Interval = ReturnType<typeof setInterval>;
|
|
9
|
+
/**
|
|
10
|
+
* 允许null的泛型
|
|
11
|
+
*/
|
|
12
|
+
type Nullable<T> = T | null;
|
|
13
|
+
type AutoReconnect = {
|
|
14
|
+
/**
|
|
15
|
+
*重连尝试次数 默认 3
|
|
16
|
+
*/
|
|
17
|
+
reconnectMaxCount?: number;
|
|
18
|
+
};
|
|
19
|
+
type Heartbeat = {
|
|
20
|
+
/**
|
|
21
|
+
* 心跳信息 默认`ping`
|
|
22
|
+
*/
|
|
23
|
+
message: string;
|
|
24
|
+
/**
|
|
25
|
+
* 心跳间隔时间 默认 `3000` 毫秒
|
|
26
|
+
*/
|
|
27
|
+
interval: number;
|
|
28
|
+
};
|
|
29
|
+
interface WSOptions {
|
|
30
|
+
/**
|
|
31
|
+
* 是否自动重连 默认`true`
|
|
32
|
+
*/
|
|
33
|
+
autoReconnect: boolean | AutoReconnect;
|
|
34
|
+
/**
|
|
35
|
+
* 心跳 默认`false`
|
|
36
|
+
*/
|
|
37
|
+
heartbeat: boolean | Heartbeat;
|
|
38
|
+
/**
|
|
39
|
+
* url 携带的参数
|
|
40
|
+
*/
|
|
41
|
+
query: Record<string, string>;
|
|
42
|
+
}
|
|
43
|
+
declare class WS {
|
|
44
|
+
url: string;
|
|
45
|
+
socket: WebSocket | null;
|
|
46
|
+
reconnectCount: number;
|
|
47
|
+
delay: Nullable<Timeout>;
|
|
48
|
+
timer: Nullable<Interval>;
|
|
49
|
+
autoReconnect: WSOptions["autoReconnect"];
|
|
50
|
+
heartbeat: WSOptions["heartbeat"];
|
|
51
|
+
query: WSOptions["query"];
|
|
52
|
+
constructor(url?: string, options?: WSOptions);
|
|
53
|
+
/**
|
|
54
|
+
* 连接
|
|
55
|
+
*/
|
|
56
|
+
connect(): void;
|
|
57
|
+
/**
|
|
58
|
+
* 监听连接
|
|
59
|
+
*/
|
|
60
|
+
onOpen(): void;
|
|
61
|
+
/**
|
|
62
|
+
* 开启心跳
|
|
63
|
+
*/
|
|
64
|
+
startHeartbeat(): void;
|
|
65
|
+
/**
|
|
66
|
+
* 监听错误
|
|
67
|
+
*/
|
|
68
|
+
onError(): void;
|
|
69
|
+
/**
|
|
70
|
+
* 关闭连接
|
|
71
|
+
*/
|
|
72
|
+
close(): void;
|
|
73
|
+
/**
|
|
74
|
+
* 监听消息
|
|
75
|
+
* @param callback
|
|
76
|
+
*/
|
|
77
|
+
onMessage(callback: (...data: any[]) => any): void;
|
|
78
|
+
/**
|
|
79
|
+
* 发送消息
|
|
80
|
+
* @param data
|
|
81
|
+
*/
|
|
82
|
+
send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export { WS };
|
|
86
|
+
export type { WSOptions };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import r from"qs";var a=Object.defineProperty,l=(i,t,e)=>t in i?a(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,s=(i,t,e)=>(l(i,typeof t!="symbol"?t+"":t,e),e);const u=3,k="ping",y=3e3,n=1e3;class d{constructor(t,e){s(this,"url"),s(this,"socket",null),s(this,"reconnectCount",0),s(this,"delay",null),s(this,"timer",null),s(this,"autoReconnect"),s(this,"heartbeat"),s(this,"query");const{autoReconnect:o=!0,query:c={},heartbeat:h=!1}=e||{};this.autoReconnect=o,this.heartbeat=h,this.query=c,this.url=`${t}`+r.stringify({...this.query},{addQueryPrefix:!0}),this.connect()}connect(){this.close(),this.socket=new WebSocket(this.url),this.onError(),this.onOpen()}onOpen(){this.socket&&(this.socket.onopen=()=>{this.send("ping"),this.heartbeat&&this.startHeartbeat()})}startHeartbeat(){const t=this.heartbeat?.message||k,e=this.heartbeat?.interval||y;this.timer=setInterval(()=>{this.send(t)},e)}onError(){this.socket&&(this.socket.onerror=()=>{const t=this.autoReconnect?.reconnectMaxCount||u;this.autoReconnect&&this.reconnectCount<t&&(this.reconnectCount++,this.connect())})}close(){this.socket&&this.socket.close(),this.delay&&clearTimeout(this.delay),this.timer&&clearInterval(this.timer),this.socket=null}onMessage(t){this.socket&&(this.socket.onmessage=e=>{try{const o=JSON.parse(e.data);t(o)}catch{t(e)}})}send(t){this.socket&&(this.socket.readyState===this.socket.OPEN?this.socket.send(JSON.stringify(t)):this.socket.readyState===this.socket.CONNECTING?this.delay=setTimeout(()=>{this.socket?.send(t)},n):(this.connect(),this.delay=setTimeout(()=>{this.socket?.send(t)},n)))}}export{d as WS};
|