Commit 40008bc235b35b2cf097555854d18f369eadf707

Authored by Vben
1 parent 00fca0fe

refactor: refactor CountTo component

CHANGELOG.zh_CN.md
1 ## Wip 1 ## Wip
2 2
  3 +### ✨ Refactor
  4 +
  5 +- `CountTo`组件重构
  6 +
  7 +### ✨ Features
  8 +
3 - `radioButtonGroup` 支持`boolean`值 9 - `radioButtonGroup` 支持`boolean`值
4 - `useModalInner` 新增 `redoModalHeight`用于在 Modal 内部重设`Modal`高度 10 - `useModalInner` 新增 `redoModalHeight`用于在 Modal 内部重设`Modal`高度
5 - `useECharts` 新增`getInstance`用于获取`echart`实例 11 - `useECharts` 新增`getInstance`用于获取`echart`实例
@@ -12,7 +18,7 @@ @@ -12,7 +18,7 @@
12 - `BasicTable`新增`updateTableDataRecord`方法用于更新指定行数据 18 - `BasicTable`新增`updateTableDataRecord`方法用于更新指定行数据
13 - `useModal`新增`closeModal`方法用于关闭`Modal` 19 - `useModal`新增`closeModal`方法用于关闭`Modal`
14 20
15 -## Bug Fixes 21 +### 🐛 Bug Fixes
16 22
17 - 修复`redoModalHeight`不能减小高度的问题 23 - 修复`redoModalHeight`不能减小高度的问题
18 - 修复 `BasicForm`设置 schemas 数据不生效的问题 24 - 修复 `BasicForm`设置 schemas 数据不生效的问题
package.json
@@ -33,16 +33,16 @@ @@ -33,16 +33,16 @@
33 }, 33 },
34 "dependencies": { 34 "dependencies": {
35 "@iconify/iconify": "^2.0.1", 35 "@iconify/iconify": "^2.0.1",
36 - "@logicflow/core": "^0.4.11",  
37 - "@logicflow/extension": "^0.4.12",  
38 - "@vueuse/core": "^5.0.1", 36 + "@logicflow/core": "^0.4.13",
  37 + "@logicflow/extension": "^0.4.13",
  38 + "@vueuse/core": "^5.0.2",
39 "@zxcvbn-ts/core": "^0.3.0", 39 "@zxcvbn-ts/core": "^0.3.0",
40 "ant-design-vue": "2.1.2", 40 "ant-design-vue": "2.1.2",
41 "axios": "^0.21.1", 41 "axios": "^0.21.1",
42 "codemirror": "^5.61.1", 42 "codemirror": "^5.61.1",
43 "cropperjs": "^1.5.11", 43 "cropperjs": "^1.5.11",
44 "crypto-js": "^4.0.0", 44 "crypto-js": "^4.0.0",
45 - "echarts": "^5.1.1", 45 + "echarts": "^5.1.2",
46 "lodash-es": "^4.17.21", 46 "lodash-es": "^4.17.21",
47 "mockjs": "^1.1.0", 47 "mockjs": "^1.1.0",
48 "nprogress": "^0.2.0", 48 "nprogress": "^0.2.0",
@@ -115,13 +115,13 @@ @@ -115,13 +115,13 @@
115 "vite-plugin-compression": "^0.2.5", 115 "vite-plugin-compression": "^0.2.5",
116 "vite-plugin-html": "^2.0.7", 116 "vite-plugin-html": "^2.0.7",
117 "vite-plugin-imagemin": "^0.3.2", 117 "vite-plugin-imagemin": "^0.3.2",
118 - "vite-plugin-mock": "^2.7.0", 118 + "vite-plugin-mock": "^2.7.1",
119 "vite-plugin-purge-icons": "^0.7.0", 119 "vite-plugin-purge-icons": "^0.7.0",
120 "vite-plugin-pwa": "^0.7.3", 120 "vite-plugin-pwa": "^0.7.3",
121 "vite-plugin-style-import": "^0.10.1", 121 "vite-plugin-style-import": "^0.10.1",
122 "vite-plugin-svg-icons": "^0.7.0", 122 "vite-plugin-svg-icons": "^0.7.0",
123 "vite-plugin-theme": "^0.8.1", 123 "vite-plugin-theme": "^0.8.1",
124 - "vite-plugin-windicss": "^1.0.2", 124 + "vite-plugin-windicss": "^1.0.3",
125 "vue-eslint-parser": "^7.6.0", 125 "vue-eslint-parser": "^7.6.0",
126 "vue-tsc": "^0.1.7" 126 "vue-tsc": "^0.1.7"
127 }, 127 },
src/components/ContextMenu/src/ContextMenu.vue
@@ -71,7 +71,8 @@ @@ -71,7 +71,8 @@
71 }); 71 });
72 72
73 onUnmounted(() => { 73 onUnmounted(() => {
74 - unref(wrapRef) && document.body.removeChild(el); 74 + const el = unref(wrapRef);
  75 + el && document.body.removeChild(el);
75 }); 76 });
76 77
77 function handleAction(item: ContextMenuItem, e: MouseEvent) { 78 function handleAction(item: ContextMenuItem, e: MouseEvent) {
@@ -118,8 +119,10 @@ @@ -118,8 +119,10 @@
118 }); 119 });
119 } 120 }
120 return () => { 121 return () => {
  122 + if (!unref(showRef)) {
  123 + return null;
  124 + }
121 const { items } = props; 125 const { items } = props;
122 - if (!unref(showRef)) return null;  
123 return ( 126 return (
124 <Menu 127 <Menu
125 inlineIndent={12} 128 inlineIndent={12}
src/components/CountTo/index.ts
1 -// Transform vue-count-to to support vue3 version 1 +import { withInstall } from '/@/utils';
  2 +import countTo from './src/CountTo.vue';
2 3
3 -import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';  
4 -export const CountTo = createAsyncComponent(() => import('./src/CountTo.vue')); 4 +export const CountTo = withInstall(countTo);
src/components/CountTo/src/CountTo.vue
1 <template> 1 <template>
2 - <span :style="{ color: color }">  
3 - {{ displayValue }} 2 + <span :style="{ color }">
  3 + {{ value }}
4 </span> 4 </span>
5 </template> 5 </template>
6 <script lang="ts"> 6 <script lang="ts">
7 - import { defineComponent, reactive, computed, watch, onMounted, unref, toRef } from 'vue';  
8 - import { countToProps } from './props'; 7 + import { defineComponent, ref, computed, watchEffect, unref, onMounted, watch } from 'vue';
  8 + import { useTransition, TransitionPresets } from '@vueuse/core';
9 import { isNumber } from '/@/utils/is'; 9 import { isNumber } from '/@/utils/is';
  10 +
  11 + const props = {
  12 + startVal: { type: Number, default: 0 },
  13 + endVal: { type: Number, default: 2021 },
  14 + duration: { type: Number, default: 1500 },
  15 + autoplay: { type: Boolean, default: true },
  16 + decimals: {
  17 + type: Number,
  18 + default: 0,
  19 + validator(value: number) {
  20 + return value >= 0;
  21 + },
  22 + },
  23 + prefix: { type: String, default: '' },
  24 + suffix: { type: String, default: '' },
  25 + separator: { type: String, default: ',' },
  26 + decimal: { type: String, default: '.' },
  27 + /**
  28 + * font color
  29 + */
  30 + color: { type: String },
  31 + /**
  32 + * Turn on digital animation
  33 + */
  34 + useEasing: { type: Boolean, default: true },
  35 + /**
  36 + * Digital animation
  37 + */
  38 + transition: { type: String, default: 'linear' },
  39 + };
  40 +
10 export default defineComponent({ 41 export default defineComponent({
11 name: 'CountTo', 42 name: 'CountTo',
12 - props: countToProps,  
13 - emits: ['mounted', 'callback'], 43 + props,
  44 + emits: ['onStarted', 'onFinished'],
14 setup(props, { emit }) { 45 setup(props, { emit }) {
15 - const state = reactive<{  
16 - localStartVal: number;  
17 - printVal: number | null;  
18 - displayValue: string;  
19 - paused: boolean;  
20 - localDuration: number | null;  
21 - startTime: number | null;  
22 - timestamp: number | null;  
23 - rAF: any;  
24 - remaining: number | null;  
25 - color: any;  
26 - }>({  
27 - localStartVal: props.startVal,  
28 - displayValue: formatNumber(props.startVal),  
29 - printVal: null,  
30 - paused: false,  
31 - localDuration: props.duration,  
32 - startTime: null,  
33 - timestamp: null,  
34 - remaining: null,  
35 - rAF: null,  
36 - color: null,  
37 - }); 46 + const source = ref(props.startVal);
  47 + const disabled = ref(false);
  48 + let outputValue = useTransition(source);
38 49
39 - onMounted(() => {  
40 - if (props.autoplay) {  
41 - start();  
42 - }  
43 - emit('mounted');  
44 - }); 50 + const value = computed(() => formatNumber(unref(outputValue)));
45 51
46 - const getCountDown = computed(() => {  
47 - return props.startVal > props.endVal; 52 + watchEffect(() => {
  53 + source.value = props.startVal;
48 }); 54 });
49 55
50 watch([() => props.startVal, () => props.endVal], () => { 56 watch([() => props.startVal, () => props.endVal], () => {
@@ -53,93 +59,42 @@ @@ -53,93 +59,42 @@
53 } 59 }
54 }); 60 });
55 61
56 - function start() {  
57 - const { startVal, duration, color } = props;  
58 - state.localStartVal = startVal;  
59 - state.startTime = null;  
60 - state.localDuration = duration;  
61 - state.color = color;  
62 - state.paused = false;  
63 - state.rAF = requestAnimationFrame(count);  
64 - }  
65 -  
66 - function pauseResume() {  
67 - if (state.paused) {  
68 - resume();  
69 - state.paused = false;  
70 - } else {  
71 - pause();  
72 - state.paused = true;  
73 - }  
74 - }  
75 -  
76 - function pause() {  
77 - cancelAnimationFrame(state.rAF);  
78 - } 62 + onMounted(() => {
  63 + props.autoplay && start();
  64 + });
79 65
80 - function resume() {  
81 - state.startTime = null;  
82 - state.localDuration = +(state.remaining as number);  
83 - state.localStartVal = +(state.printVal as number);  
84 - requestAnimationFrame(count); 66 + function start() {
  67 + run();
  68 + source.value = props.endVal;
85 } 69 }
86 70
87 function reset() { 71 function reset() {
88 - state.startTime = null;  
89 - cancelAnimationFrame(state.rAF);  
90 - state.displayValue = formatNumber(props.startVal); 72 + source.value = props.startVal;
  73 + run();
91 } 74 }
92 75
93 - function count(timestamp: number) {  
94 - const { useEasing, easingFn, endVal } = props;  
95 - if (!state.startTime) state.startTime = timestamp;  
96 - state.timestamp = timestamp;  
97 - const progress = timestamp - state.startTime;  
98 - state.remaining = (state.localDuration as number) - progress;  
99 - if (useEasing) {  
100 - if (unref(getCountDown)) {  
101 - state.printVal =  
102 - state.localStartVal -  
103 - easingFn(progress, 0, state.localStartVal - endVal, state.localDuration as number);  
104 - } else {  
105 - state.printVal = easingFn(  
106 - progress,  
107 - state.localStartVal,  
108 - endVal - state.localStartVal,  
109 - state.localDuration as number  
110 - );  
111 - }  
112 - } else {  
113 - if (unref(getCountDown)) {  
114 - state.printVal =  
115 - state.localStartVal -  
116 - (state.localStartVal - endVal) * (progress / (state.localDuration as number));  
117 - } else {  
118 - state.printVal =  
119 - state.localStartVal +  
120 - (endVal - state.localStartVal) * (progress / (state.localDuration as number));  
121 - }  
122 - }  
123 - if (unref(getCountDown)) {  
124 - state.printVal = state.printVal < endVal ? endVal : state.printVal;  
125 - } else {  
126 - state.printVal = state.printVal > endVal ? endVal : state.printVal;  
127 - }  
128 - state.displayValue = formatNumber(state.printVal);  
129 - if (progress < (state.localDuration as number)) {  
130 - state.rAF = requestAnimationFrame(count);  
131 - } else {  
132 - emit('callback');  
133 - } 76 + function run() {
  77 + outputValue = useTransition(source, {
  78 + disabled,
  79 + duration: props.duration,
  80 + onFinished: () => emit('onFinished'),
  81 + onStarted: () => emit('onStarted'),
  82 + ...(props.useEasing ? { transition: TransitionPresets[props.transition] } : {}),
  83 + });
134 } 84 }
135 85
136 function formatNumber(num: number | string) { 86 function formatNumber(num: number | string) {
  87 + if (!num) {
  88 + return '';
  89 + }
137 const { decimals, decimal, separator, suffix, prefix } = props; 90 const { decimals, decimal, separator, suffix, prefix } = props;
138 num = Number(num).toFixed(decimals); 91 num = Number(num).toFixed(decimals);
139 num += ''; 92 num += '';
  93 +
140 const x = num.split('.'); 94 const x = num.split('.');
141 let x1 = x[0]; 95 let x1 = x[0];
142 const x2 = x.length > 1 ? decimal + x[1] : ''; 96 const x2 = x.length > 1 ? decimal + x[1] : '';
  97 +
143 const rgx = /(\d+)(\d{3})/; 98 const rgx = /(\d+)(\d{3})/;
144 if (separator && !isNumber(separator)) { 99 if (separator && !isNumber(separator)) {
145 while (rgx.test(x1)) { 100 while (rgx.test(x1)) {
@@ -149,14 +104,7 @@ @@ -149,14 +104,7 @@
149 return prefix + x1 + x2 + suffix; 104 return prefix + x1 + x2 + suffix;
150 } 105 }
151 106
152 - return {  
153 - count,  
154 - reset,  
155 - resume,  
156 - start,  
157 - pauseResume,  
158 - displayValue: toRef(state, 'displayValue'),  
159 - }; 107 + return { value, start, reset };
160 }, 108 },
161 }); 109 });
162 </script> 110 </script>
src/components/CountTo/src/props.ts deleted 100644 → 0
1 -import { PropType } from 'vue';  
2 -import { propTypes } from '/@/utils/propTypes';  
3 -export const countToProps = {  
4 - startVal: propTypes.number.def(0),  
5 - endVal: propTypes.number.def(2020),  
6 - duration: propTypes.number.def(1300),  
7 - autoplay: propTypes.bool.def(true),  
8 - decimals: {  
9 - type: Number as PropType<number>,  
10 - required: false,  
11 - default: 0,  
12 - validator(value: number) {  
13 - return value >= 0;  
14 - },  
15 - },  
16 - color: {  
17 - type: String as PropType<string>,  
18 - require: false,  
19 - },  
20 - decimal: propTypes.string.def('.'),  
21 - separator: propTypes.string.def(','),  
22 - prefix: propTypes.string.def(''),  
23 - suffix: propTypes.string.def(''),  
24 - useEasing: propTypes.bool.def(true),  
25 - easingFn: {  
26 - type: Function as PropType<(t: number, b: number, c: number, d: number) => number>,  
27 - default(t: number, b: number, c: number, d: number) {  
28 - return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b;  
29 - },  
30 - },  
31 -};  
src/components/Cropper/src/Cropper.vue
@@ -20,7 +20,7 @@ @@ -20,7 +20,7 @@
20 20
21 type Options = Cropper.Options; 21 type Options = Cropper.Options;
22 22
23 - const defaultOptions: Cropper.Options = { 23 + const defaultOptions: Options = {
24 aspectRatio: 16 / 9, 24 aspectRatio: 16 / 9,
25 zoomable: true, 25 zoomable: true,
26 zoomOnTouch: true, 26 zoomOnTouch: true,
@@ -42,6 +42,7 @@ @@ -42,6 +42,7 @@
42 movable: true, 42 movable: true,
43 rotatable: true, 43 rotatable: true,
44 }; 44 };
  45 +
45 export default defineComponent({ 46 export default defineComponent({
46 name: 'CropperImage', 47 name: 'CropperImage',
47 props: { 48 props: {
@@ -108,9 +109,9 @@ @@ -108,9 +109,9 @@
108 let imgInfo = cropper.value.getData(); 109 let imgInfo = cropper.value.getData();
109 cropper.value.getCroppedCanvas().toBlob((blob) => { 110 cropper.value.getCroppedCanvas().toBlob((blob) => {
110 let fileReader: FileReader = new FileReader(); 111 let fileReader: FileReader = new FileReader();
111 - fileReader.onloadend = (e: any) => { 112 + fileReader.onloadend = (e) => {
112 ctx.emit('cropperedInfo', { 113 ctx.emit('cropperedInfo', {
113 - imgBase64: e.target.result, 114 + imgBase64: e.target?.result ?? '',
114 imgInfo, 115 imgInfo,
115 }); 116 });
116 }; 117 };
yarn.lock
@@ -1252,21 +1252,21 @@ @@ -1252,21 +1252,21 @@
1252 "@intlify/runtime" "9.1.6" 1252 "@intlify/runtime" "9.1.6"
1253 "@intlify/shared" "9.1.6" 1253 "@intlify/shared" "9.1.6"
1254 1254
1255 -"@logicflow/core@^0.4.11":  
1256 - version "0.4.11"  
1257 - resolved "https://registry.yarnpkg.com/@logicflow/core/-/core-0.4.11.tgz#3c617e5cddb47e7052d62fee56ba77ab45b1cd25"  
1258 - integrity sha512-FlErJRyKw+XzyT0/0hha8Dwsiok9Cri2ZS2/SDmqLdUK6I3rD6LpmVabj8LjYH4IWb0fOYSfgGhY4oWQAKqa9g== 1255 +"@logicflow/core@^0.4.13":
  1256 + version "0.4.13"
  1257 + resolved "https://registry.npmjs.org/@logicflow/core/-/core-0.4.13.tgz#69d1e7a30b5e545ada3a2e980059f3e6f6923f15"
  1258 + integrity sha512-xOLz8RO6ldAT5H9Q2Ewt9d7z146B54TUom5EXzJ/jx/s1Phy24vP8tAGu6LuoTEitgNHTRQq7WxvH9NqnpxCpg==
1259 dependencies: 1259 dependencies:
1260 "@types/mousetrap" "^1.6.4" 1260 "@types/mousetrap" "^1.6.4"
1261 mousetrap "^1.6.5" 1261 mousetrap "^1.6.5"
1262 preact "^10.4.8" 1262 preact "^10.4.8"
1263 1263
1264 -"@logicflow/extension@^0.4.12":  
1265 - version "0.4.12"  
1266 - resolved "https://registry.yarnpkg.com/@logicflow/extension/-/extension-0.4.12.tgz#be69e8ebbcffee6bb0f07778f2126ad98f93f64a"  
1267 - integrity sha512-fD0bXxYIEo1d047A3PXkAVMH6vM5y8AAIfLxnXxdMJGOVLH44iWCO6eNW8bvnoab7aSmhj2MWMgY3op5XVZh1Q== 1264 +"@logicflow/extension@^0.4.13":
  1265 + version "0.4.13"
  1266 + resolved "https://registry.npmjs.org/@logicflow/extension/-/extension-0.4.13.tgz#b1c87b5458345414cc6c5fb813511e62db4acfa7"
  1267 + integrity sha512-DAfgO9A5VrJ4oXruTYGgmDGvZAIaT2kLAlTE+luyg4eld6YsgwWXqXazJWCd9ObdAJkLYCf7lU27hZsDNqqbrg==
1268 dependencies: 1268 dependencies:
1269 - "@logicflow/core" "^0.4.11" 1269 + "@logicflow/core" "^0.4.13"
1270 ids "^1.0.0" 1270 ids "^1.0.0"
1271 preact "^10.4.8" 1271 preact "^10.4.8"
1272 1272
@@ -2033,25 +2033,25 @@ @@ -2033,25 +2033,25 @@
2033 resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.0.11.tgz#20d22dd0da7d358bb21c17f9bde8628152642c77" 2033 resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.0.11.tgz#20d22dd0da7d358bb21c17f9bde8628152642c77"
2034 integrity sha512-b+zB8A2so8eCE0JsxjL24J7vdGl8rzPQ09hZNhystm+KqSbKcAej1A+Hbva1rCMmTTqA+hFnUSDc5kouEo0JzA== 2034 integrity sha512-b+zB8A2so8eCE0JsxjL24J7vdGl8rzPQ09hZNhystm+KqSbKcAej1A+Hbva1rCMmTTqA+hFnUSDc5kouEo0JzA==
2035 2035
2036 -"@vueuse/core@^5.0.1":  
2037 - version "5.0.1"  
2038 - resolved "https://registry.npmjs.org/@vueuse/core/-/core-5.0.1.tgz#94bbb6c71d95b79efbdb24111915775e61723f1b"  
2039 - integrity sha512-hzcyYNvW1p9ZEwm+oBaWrHgGx6S93pJBiXLZUj2pgCNiJZjaedoePT9xzesi1SBxeKcYxwToaTISLeKdE4VKeg== 2036 +"@vueuse/core@^5.0.2":
  2037 + version "5.0.2"
  2038 + resolved "https://registry.npmjs.org/@vueuse/core/-/core-5.0.2.tgz#302389f620c0d4b51fdf157012d9b5b522b605e7"
  2039 + integrity sha512-Sp9+7AL4Cg3Tx6I55WoH7zICGRlp6ZUF9NW3EU8SZTkryHm0afAjFfASMwlfV030JFeh45BdqafDOrenVmM9Cw==
2040 dependencies: 2040 dependencies:
2041 - "@vueuse/shared" "5.0.1" 2041 + "@vueuse/shared" "5.0.2"
2042 vue-demi "*" 2042 vue-demi "*"
2043 2043
2044 -"@vueuse/shared@5.0.1":  
2045 - version "5.0.1"  
2046 - resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-5.0.1.tgz#3b6607ffc9e19b322c39be8a2f6b584d203a7c5e"  
2047 - integrity sha512-/+kRII9chn45PhFfRuPVbSQApJHhhqXFhPrWjnYKckMfQE9ZOuNMb1bmQnDTqzuNkoS/ENeHBMq0rnV/cfz/3Q== 2044 +"@vueuse/shared@5.0.2":
  2045 + version "5.0.2"
  2046 + resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-5.0.2.tgz#274c2bf163d25eb7fd2fc51f23088a2b7f060594"
  2047 + integrity sha512-S1hRRmEdipjTD4DbXgPdw4ZZYebU/nDi75vNP3Ibpa1irW3NUNUKOT/TWnwRHLQvXquUtdvalhI8D9Db+czZJg==
2048 dependencies: 2048 dependencies:
2049 vue-demi "*" 2049 vue-demi "*"
2050 2050
2051 -"@windicss/plugin-utils@1.0.2":  
2052 - version "1.0.2"  
2053 - resolved "https://registry.npmjs.org/@windicss/plugin-utils/-/plugin-utils-1.0.2.tgz#c34d6498058d5f4291805027d2ef6e34638a572a"  
2054 - integrity sha512-W9fZoPNsD3NMVyqzt9eNb1DNp9p4oy7EscCfGVIg1KBxAC8S+AnXtkaR/rad09y+aqzbILKNfzDKdimDR2FA9g== 2051 +"@windicss/plugin-utils@1.0.3":
  2052 + version "1.0.3"
  2053 + resolved "https://registry.npmjs.org/@windicss/plugin-utils/-/plugin-utils-1.0.3.tgz#04d039ef56b58180079df3f9b3bd8a21a57368d3"
  2054 + integrity sha512-SBYjmWBO+dOqxJgyyOAETOuMdcugvVgZYQc3rb7KtcTW5u9UkFXtiuGdoq8cWyFpSkn46gmjCb4WNbY3kEIVnQ==
2055 dependencies: 2055 dependencies:
2056 "@antfu/utils" "^0.1.6" 2056 "@antfu/utils" "^0.1.6"
2057 debug "^4.3.2" 2057 debug "^4.3.2"
@@ -4050,13 +4050,13 @@ duplexer3@^0.1.4: @@ -4050,13 +4050,13 @@ duplexer3@^0.1.4:
4050 resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 4050 resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
4051 integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= 4051 integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
4052 4052
4053 -echarts@^5.1.1:  
4054 - version "5.1.1"  
4055 - resolved "https://registry.npmjs.org/echarts/-/echarts-5.1.1.tgz#b186f162f017c555cfd67b12ede6762bdc3ddfda"  
4056 - integrity sha512-b3nP8M9XwZM2jISuA+fP0EuJv8lcfgWrinel185Npy8bE/UhXTDIPJcqgQOCWdvk0c5CeT6Dsm1xBjmJXAGlxQ== 4053 +echarts@^5.1.2:
  4054 + version "5.1.2"
  4055 + resolved "https://registry.npmjs.org/echarts/-/echarts-5.1.2.tgz#aa1ab0cef5b74fa2f7c620261a5f286893d30fd1"
  4056 + integrity sha512-okUhO4sw22vwZp+rTPNjd/bvTdpug4K4sHNHyrV8NdAncIX9/AarlolFqtJCAYKGFYhUBNjIWu1EznFrSWTFxg==
4057 dependencies: 4057 dependencies:
4058 tslib "2.0.3" 4058 tslib "2.0.3"
4059 - zrender "5.1.0" 4059 + zrender "5.1.1"
4060 4060
4061 ecstatic@^3.3.2: 4061 ecstatic@^3.3.2:
4062 version "3.3.2" 4062 version "3.3.2"
@@ -10573,10 +10573,10 @@ vite-plugin-imagemin@^0.3.2: @@ -10573,10 +10573,10 @@ vite-plugin-imagemin@^0.3.2:
10573 imagemin-svgo "^8.0.0" 10573 imagemin-svgo "^8.0.0"
10574 imagemin-webp "^6.0.0" 10574 imagemin-webp "^6.0.0"
10575 10575
10576 -vite-plugin-mock@^2.7.0:  
10577 - version "2.7.0"  
10578 - resolved "https://registry.yarnpkg.com/vite-plugin-mock/-/vite-plugin-mock-2.7.0.tgz#21aec0397e29d013c87d765c56d177728d4288b4"  
10579 - integrity sha512-hB3MbnQlrmqGOigbPB+UsUQ/ZjTisj75FprJ7IDw8pDYQjWmHC7AtmDOHdzpGYPKEEX1mz7UhGJ93LLarPqJNg== 10576 +vite-plugin-mock@^2.7.1:
  10577 + version "2.7.1"
  10578 + resolved "https://registry.npmjs.org/vite-plugin-mock/-/vite-plugin-mock-2.7.1.tgz#c7d25277f7b88158cd3927c1abee7c7721ed92d3"
  10579 + integrity sha512-UnYcb4UZrpe5fHBNFNEJQetnR32+XxrduTYhyDQTtXmaJ9Yy+JuBfIT6Mueyf7MGPe8T6hNgIEYaMLSUD5+nWA==
10580 dependencies: 10580 dependencies:
10581 "@rollup/plugin-node-resolve" "^11.2.1" 10581 "@rollup/plugin-node-resolve" "^11.2.1"
10582 "@types/mockjs" "^1.0.3" 10582 "@types/mockjs" "^1.0.3"
@@ -10647,12 +10647,12 @@ vite-plugin-theme@^0.8.1: @@ -10647,12 +10647,12 @@ vite-plugin-theme@^0.8.1:
10647 esbuild-plugin-alias "^0.1.2" 10647 esbuild-plugin-alias "^0.1.2"
10648 tinycolor2 "^1.4.2" 10648 tinycolor2 "^1.4.2"
10649 10649
10650 -vite-plugin-windicss@^1.0.2:  
10651 - version "1.0.2"  
10652 - resolved "https://registry.npmjs.org/vite-plugin-windicss/-/vite-plugin-windicss-1.0.2.tgz#0d0fd1ff36dc81d348be755e59a8ee471941095c"  
10653 - integrity sha512-iTmkxm8Yp+ZCFWLOs//9q3d4hYaBVDlkRGLzNBUNvRW9AQFVea57ZPhglMm9xOt1nW/O68n5Rkg4/In8rrEjHQ== 10650 +vite-plugin-windicss@^1.0.3:
  10651 + version "1.0.3"
  10652 + resolved "https://registry.npmjs.org/vite-plugin-windicss/-/vite-plugin-windicss-1.0.3.tgz#bd45cfee13777e7b57c37a257ebcb7e73fee94ab"
  10653 + integrity sha512-y9pudcMajdI88PTs49qGftlfAvsLUUhK2Eig+xn5sgxPCbAc3Rj5phXJkRzGDqfmEzGwbpF6JwjmiGmZkm8V+g==
10654 dependencies: 10654 dependencies:
10655 - "@windicss/plugin-utils" "1.0.2" 10655 + "@windicss/plugin-utils" "1.0.3"
10656 chalk "^4.1.1" 10656 chalk "^4.1.1"
10657 debug "^4.3.2" 10657 debug "^4.3.2"
10658 windicss "^3.1.3" 10658 windicss "^3.1.3"
@@ -11321,10 +11321,10 @@ yocto-queue@^0.1.0: @@ -11321,10 +11321,10 @@ yocto-queue@^0.1.0:
11321 resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 11321 resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
11322 integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 11322 integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
11323 11323
11324 -zrender@5.1.0:  
11325 - version "5.1.0"  
11326 - resolved "https://registry.npmjs.org/zrender/-/zrender-5.1.0.tgz#b6a84c3aa7ccc6642ee0519901ca4c0835c4d85e"  
11327 - integrity sha512-c+8VRx52ycbmqwHeHLlo/BAfIHBl/JZNLM6cfDQFgzIH05yb+f5J9F/fbRsP+zGc8dW9XHuhdt8/iqukgMZSeg== 11324 +zrender@5.1.1:
  11325 + version "5.1.1"
  11326 + resolved "https://registry.npmjs.org/zrender/-/zrender-5.1.1.tgz#0515f4f8cc0f4742f02a6b8819550a6d13d64c5c"
  11327 + integrity sha512-oeWlmUZPQdS9f5hK4pV21tHPqA3wgQ7CkKkw7l0CCBgWlJ/FP+lRgLFtUBW6yam4JX8y9CdHJo1o587VVrbcoQ==
11328 dependencies: 11328 dependencies:
11329 tslib "2.0.3" 11329 tslib "2.0.3"
11330 11330