Commit 46e087537415a91f8a656e1d7a83359d616d1b91

Authored by vben
1 parent 815250ed

chore: add some notes

Showing 87 changed files with 922 additions and 724 deletions
.vscode/settings.json
@@ -138,6 +138,7 @@ @@ -138,6 +138,7 @@
138 // "vetur.format.defaultFormatter.html": "prettyhtml", 138 // "vetur.format.defaultFormatter.html": "prettyhtml",
139 "vetur.format.defaultFormatter.ts": "prettier-tslint", 139 "vetur.format.defaultFormatter.ts": "prettier-tslint",
140 "vetur.format.defaultFormatter.js": "prettier", 140 "vetur.format.defaultFormatter.js": "prettier",
  141 + "vetur.languageFeatures.codeActions": false,
141 // "vetur.useWorkspaceDependencies": true, 142 // "vetur.useWorkspaceDependencies": true,
142 "vetur.format.defaultFormatterOptions": { 143 "vetur.format.defaultFormatterOptions": {
143 "js-beautify-html": { 144 "js-beautify-html": {
CHANGELOG.zh_CN.md
@@ -11,7 +11,8 @@ @@ -11,7 +11,8 @@
11 11
12 ### 🎫 Chores 12 ### 🎫 Chores
13 13
14 -- 更新 antdv 到`2.0.0-rc.1` 14 +- 更新 antdv 到`2.0.0-rc.1`(暂时还原到 beta15,rc1 菜单卡顿太严重.)
  15 +- 添加部分注释
15 16
16 ### 🐛 Bug Fixes 17 ### 🐛 Bug Fixes
17 18
build/vite/plugin/context/transform.ts
1 -// 修改自 1 +// Modified from
2 // https://github.com/luxueyan/vite-transform-globby-import/blob/master/src/index.ts 2 // https://github.com/luxueyan/vite-transform-globby-import/blob/master/src/index.ts
3 3
4 -// TODO 目前还不能监听文件新增及删除 内容已经改变,缓存问题? 4 +// TODO Currently, it is not possible to monitor file addition and deletion. The content has been changed, the cache problem?
5 import { join } from 'path'; 5 import { join } from 'path';
6 import { lstatSync } from 'fs'; 6 import { lstatSync } from 'fs';
7 import glob from 'glob'; 7 import glob from 'glob';
mock/demo/account.ts
@@ -4,11 +4,11 @@ import { resultSuccess } from '../_util'; @@ -4,11 +4,11 @@ import { resultSuccess } from '../_util';
4 const userInfo = { 4 const userInfo = {
5 name: 'Vben', 5 name: 'Vben',
6 userid: '00000001', 6 userid: '00000001',
7 - email: 'antdesign@alipay.com', 7 + email: 'test@gmail.com',
8 signature: '海纳百川,有容乃大', 8 signature: '海纳百川,有容乃大',
9 introduction: '微笑着,努力着,欣赏着', 9 introduction: '微笑着,努力着,欣赏着',
10 title: '交互专家', 10 title: '交互专家',
11 - group: '蚂蚁集团11-某某某事业群-某某平台部-某某技术部-UED', 11 + group: '某某某事业群-某某平台部-某某技术部-UED',
12 tags: [ 12 tags: [
13 { 13 {
14 key: '0', 14 key: '0',
@@ -38,7 +38,7 @@ const userInfo = { @@ -38,7 +38,7 @@ const userInfo = {
38 notifyCount: 12, 38 notifyCount: 12,
39 unreadCount: 11, 39 unreadCount: 11,
40 country: 'China', 40 country: 'China',
41 - address: '厦门市 77 号', 41 + address: 'Xiamen City 77',
42 phone: '0592-268888888', 42 phone: '0592-268888888',
43 }; 43 };
44 44
package.json
@@ -22,8 +22,8 @@ @@ -22,8 +22,8 @@
22 }, 22 },
23 "dependencies": { 23 "dependencies": {
24 "@iconify/iconify": "^2.0.0-rc.2", 24 "@iconify/iconify": "^2.0.0-rc.2",
25 - "@vueuse/core": "^4.0.0-beta.41",  
26 - "ant-design-vue": "^2.0.0-rc.1", 25 + "@vueuse/core": "4.0.0-beta.41",
  26 + "ant-design-vue": "2.0.0-beta.15",
27 "apexcharts": "3.22.0", 27 "apexcharts": "3.22.0",
28 "axios": "^0.21.0", 28 "axios": "^0.21.0",
29 "echarts": "^4.9.0", 29 "echarts": "^4.9.0",
@@ -35,7 +35,7 @@ @@ -35,7 +35,7 @@
35 "qrcode": "^1.4.4", 35 "qrcode": "^1.4.4",
36 "vditor": "^3.6.2", 36 "vditor": "^3.6.2",
37 "vue": "^3.0.2", 37 "vue": "^3.0.2",
38 - "vue-i18n": "^9.0.0-beta.6", 38 + "vue-i18n": "^9.0.0-beta.7",
39 "vue-router": "^4.0.0-rc.3", 39 "vue-router": "^4.0.0-rc.3",
40 "vuex": "^4.0.0-rc.1", 40 "vuex": "^4.0.0-rc.1",
41 "vuex-module-decorators": "^1.0.1", 41 "vuex-module-decorators": "^1.0.1",
@@ -45,10 +45,10 @@ @@ -45,10 +45,10 @@
45 "devDependencies": { 45 "devDependencies": {
46 "@commitlint/cli": "^11.0.0", 46 "@commitlint/cli": "^11.0.0",
47 "@commitlint/config-conventional": "^11.0.0", 47 "@commitlint/config-conventional": "^11.0.0",
48 - "@iconify/json": "^1.1.258", 48 + "@iconify/json": "^1.1.260",
49 "@ls-lint/ls-lint": "^1.9.2", 49 "@ls-lint/ls-lint": "^1.9.2",
50 "@purge-icons/generated": "^0.4.1", 50 "@purge-icons/generated": "^0.4.1",
51 - "@types/echarts": "^4.9.0", 51 + "@types/echarts": "^4.9.1",
52 "@types/fs-extra": "^9.0.4", 52 "@types/fs-extra": "^9.0.4",
53 "@types/koa-static": "^4.0.1", 53 "@types/koa-static": "^4.0.1",
54 "@types/lodash-es": "^4.17.3", 54 "@types/lodash-es": "^4.17.3",
@@ -56,10 +56,10 @@ @@ -56,10 +56,10 @@
56 "@types/nprogress": "^0.2.0", 56 "@types/nprogress": "^0.2.0",
57 "@types/qrcode": "^1.3.5", 57 "@types/qrcode": "^1.3.5",
58 "@types/rollup-plugin-visualizer": "^2.6.0", 58 "@types/rollup-plugin-visualizer": "^2.6.0",
59 - "@types/yargs": "^15.0.9", 59 + "@types/yargs": "^15.0.10",
60 "@types/zxcvbn": "^4.4.0", 60 "@types/zxcvbn": "^4.4.0",
61 - "@typescript-eslint/eslint-plugin": "^4.6.1",  
62 - "@typescript-eslint/parser": "^4.6.1", 61 + "@typescript-eslint/eslint-plugin": "^4.8.1",
  62 + "@typescript-eslint/parser": "^4.8.1",
63 "@vue/compiler-sfc": "^3.0.2", 63 "@vue/compiler-sfc": "^3.0.2",
64 "@vuedx/typecheck": "^0.2.4-0", 64 "@vuedx/typecheck": "^0.2.4-0",
65 "@vuedx/typescript-plugin-vue": "^0.2.4-0", 65 "@vuedx/typescript-plugin-vue": "^0.2.4-0",
@@ -84,7 +84,7 @@ @@ -84,7 +84,7 @@
84 "prettier": "^2.1.2", 84 "prettier": "^2.1.2",
85 "rimraf": "^3.0.2", 85 "rimraf": "^3.0.2",
86 "rollup-plugin-visualizer": "^4.1.2", 86 "rollup-plugin-visualizer": "^4.1.2",
87 - "stylelint": "^13.7.2", 87 + "stylelint": "^13.8.0",
88 "stylelint-config-prettier": "^8.0.2", 88 "stylelint-config-prettier": "^8.0.2",
89 "stylelint-config-standard": "^20.0.0", 89 "stylelint-config-standard": "^20.0.0",
90 "stylelint-order": "^4.1.0", 90 "stylelint-order": "^4.1.0",
prettier.config.js
  1 +/*
  2 + * @Author: Vben
  3 + * @Description:
  4 + */
1 module.exports = { 5 module.exports = {
2 printWidth: 100, 6 printWidth: 100,
3 tabWidth: 2, 7 tabWidth: 2,
public/resource/img/loading.svg
@@ -33,20 +33,17 @@ @@ -33,20 +33,17 @@
33 </style> 33 </style>
34 <circle cx="97" cy="97" r="81" stroke-width="16" stroke="#327fd8" fill="none"></circle> 34 <circle cx="97" cy="97" r="81" stroke-width="16" stroke="#327fd8" fill="none"></circle>
35 <g class="load"> 35 <g class="load">
36 - <!--右半圆环-->  
37 <linearGradient id="left-linear" gradientUnits="userSpaceOnUse" x1="50" y1="0" x2="100" y2="180"> 36 <linearGradient id="left-linear" gradientUnits="userSpaceOnUse" x1="50" y1="0" x2="100" y2="180">
38 <stop offset="0" style="stop-color: #64acff;" /> 37 <stop offset="0" style="stop-color: #64acff;" />
39 <stop offset="1" style="stop-color: #9DBFE4;" /> 38 <stop offset="1" style="stop-color: #9DBFE4;" />
40 </linearGradient> 39 </linearGradient>
41 <path class="left-linear" d="M20,100c0-44.1,35.9-80,80-80V0C44.8,0,0,44.8,0,100s44.8,100,100,100v-20C55.9,180,20,144.1,20,100z" /> 40 <path class="left-linear" d="M20,100c0-44.1,35.9-80,80-80V0C44.8,0,0,44.8,0,100s44.8,100,100,100v-20C55.9,180,20,144.1,20,100z" />
42 - <!--左半圆环-->  
43 <circle class="bottom" cx="100" cy="190" r="10" /> 41 <circle class="bottom" cx="100" cy="190" r="10" />
44 <linearGradient id="right-linear" gradientUnits="userSpaceOnUse" x1="100" y1="120" x2="100" y2="180"> 42 <linearGradient id="right-linear" gradientUnits="userSpaceOnUse" x1="100" y1="120" x2="100" y2="180">
45 <stop offset="0" style="stop-color: transparent;" /> 43 <stop offset="0" style="stop-color: transparent;" />
46 <stop offset="1" style="stop-color: transparent;" /> 44 <stop offset="1" style="stop-color: transparent;" />
47 </linearGradient> 45 </linearGradient>
48 <path class="right-linear" d="M100,0v20c44.1,0,80,35.9,80,80c0,44.1-35.9,80-80,80v20c55.2,0,100-44.8,100-100S155.2,0,100,0z" /> 46 <path class="right-linear" d="M100,0v20c44.1,0,80,35.9,80,80c0,44.1-35.9,80-80,80v20c55.2,0,100-44.8,100-100S155.2,0,100,0z" />
49 - <!--左半圆环-->  
50 <circle class="top" cx="100" cy="10" r="10" /> 47 <circle class="top" cx="100" cy="10" r="10" />
51 </g> 48 </g>
52 </svg> 49 </svg>
src/App.vue
1 <template> 1 <template>
2 - <ConfigProvider :locale="zhCN" :transform-cell-text="transformCellText" v-bind="lockOn"> 2 + <ConfigProvider v-bind="lockEvent" :locale="zhCN" :transform-cell-text="transformCellText">
3 <router-view /> 3 <router-view />
4 </ConfigProvider> 4 </ConfigProvider>
5 </template> 5 </template>
@@ -13,9 +13,8 @@ @@ -13,9 +13,8 @@
13 import moment from 'moment'; 13 import moment from 'moment';
14 import 'moment/dist/locale/zh-cn'; 14 import 'moment/dist/locale/zh-cn';
15 15
16 - import { useConfigProvider, useInitAppConfigStore } from './useApp'; 16 + import { getConfigProvider, initAppConfigStore } from '/@/setup/Application';
17 import { useLockPage } from '/@/hooks/web/useLockPage'; 17 import { useLockPage } from '/@/hooks/web/useLockPage';
18 - import { useSetting } from '/@/hooks/core/useSetting';  
19 18
20 moment.locale('zh-cn'); 19 moment.locale('zh-cn');
21 20
@@ -23,26 +22,22 @@ @@ -23,26 +22,22 @@
23 name: 'App', 22 name: 'App',
24 components: { ConfigProvider }, 23 components: { ConfigProvider },
25 setup() { 24 setup() {
26 - // Initialize application settings  
27 - useInitAppConfigStore();  
28 - // Initialize breakpoint monitoring 25 + // Initialize vuex internal system configuration
  26 + initAppConfigStore();
  27 +
  28 + // Create a global breakpoint monitor
29 createBreakpointListen(); 29 createBreakpointListen();
30 - // Get system configuration  
31 - const { projectSetting } = useSetting(); 30 +
32 // Get ConfigProvider configuration 31 // Get ConfigProvider configuration
33 - const { transformCellText } = useConfigProvider(); 32 + const { transformCellText } = getConfigProvider();
34 33
35 - let lockOn = {};  
36 - if (projectSetting.lockTime) {  
37 - // Monitor the mouse or keyboard time, used to recalculate the lock screen time  
38 - const { on } = useLockPage();  
39 - lockOn = on;  
40 - } 34 + // Create a lock screen monitor
  35 + const lockEvent = useLockPage();
41 36
42 return { 37 return {
43 transformCellText, 38 transformCellText,
44 zhCN, 39 zhCN,
45 - lockOn, 40 + lockEvent,
46 }; 41 };
47 }, 42 },
48 }); 43 });
src/api/demo/account.ts
@@ -5,7 +5,7 @@ enum Api { @@ -5,7 +5,7 @@ enum Api {
5 ACCOUNT_INFO = '/account/getAccountInfo', 5 ACCOUNT_INFO = '/account/getAccountInfo',
6 } 6 }
7 7
8 -// 获取个人中心--基础设置内容 8 +// Get personal center-basic settings
9 export function accountInfoApi() { 9 export function accountInfoApi() {
10 return defHttp.request<GetAccountInfoModel>({ 10 return defHttp.request<GetAccountInfoModel>({
11 url: Api.ACCOUNT_INFO, 11 url: Api.ACCOUNT_INFO,
src/api/sys/menu.ts
@@ -7,7 +7,7 @@ enum Api { @@ -7,7 +7,7 @@ enum Api {
7 } 7 }
8 8
9 /** 9 /**
10 - * @description: 根据id获取用户菜单 10 + * @description: Get user menu based on id
11 */ 11 */
12 export function getMenuListById(params: getMenuListByIdParams) { 12 export function getMenuListById(params: getMenuListByIdParams) {
13 return defHttp.request<getMenuListByIdParamsResultModel>({ 13 return defHttp.request<getMenuListByIdParamsResultModel>({
src/api/sys/model/menuModel.ts
@@ -11,13 +11,13 @@ export interface RouteItem { @@ -11,13 +11,13 @@ export interface RouteItem {
11 } 11 }
12 12
13 /** 13 /**
14 - * @description: 获取菜单接口 14 + * @description: Get menu interface
15 */ 15 */
16 export interface getMenuListByIdParams { 16 export interface getMenuListByIdParams {
17 id: number | string; 17 id: number | string;
18 } 18 }
19 19
20 /** 20 /**
21 - * @description: 获取菜单返回值 21 + * @description: Get menu return value
22 */ 22 */
23 export type getMenuListByIdParamsResultModel = RouteItem[]; 23 export type getMenuListByIdParamsResultModel = RouteItem[];
src/api/sys/upload.ts
@@ -7,7 +7,7 @@ enum Api { @@ -7,7 +7,7 @@ enum Api {
7 } 7 }
8 8
9 /** 9 /**
10 - * @description: 上传接口 10 + * @description: Upload interface
11 */ 11 */
12 export function uploadApi( 12 export function uploadApi(
13 params: UploadFileParams, 13 params: UploadFileParams,
src/components/Authority/index.ts
  1 +import type { App } from 'vue';
1 import Authority from './src/index.vue'; 2 import Authority from './src/index.vue';
2 -export default Authority; 3 +
  4 +export default (app: App): void => {
  5 + app.component(Authority.name, Authority);
  6 +};
  7 +
  8 +export { Authority };
src/components/Authority/src/index.vue
  1 +<!--
  2 + * @Author: Vben
  3 + * @Description:Access control component for fine-grained access control.
  4 +-->
1 <script lang="ts"> 5 <script lang="ts">
2 import type { PropType } from 'vue'; 6 import type { PropType } from 'vue';
3 import { defineComponent, computed, unref } from 'vue'; 7 import { defineComponent, computed, unref } from 'vue';
4 8
5 import { PermissionModeEnum } from '/@/enums/appEnum'; 9 import { PermissionModeEnum } from '/@/enums/appEnum';
6 import { RoleEnum } from '/@/enums/roleEnum'; 10 import { RoleEnum } from '/@/enums/roleEnum';
  11 +
7 import { usePermission } from '/@/hooks/web/usePermission'; 12 import { usePermission } from '/@/hooks/web/usePermission';
8 import { appStore } from '/@/store/modules/app'; 13 import { appStore } from '/@/store/modules/app';
  14 +
9 import { getSlot } from '/@/utils/helper/tsxHelper'; 15 import { getSlot } from '/@/utils/helper/tsxHelper';
10 16
11 export default defineComponent({ 17 export default defineComponent({
12 name: 'Authority', 18 name: 'Authority',
13 props: { 19 props: {
14 - // 指定角色可见 20 + /**
  21 + * Specified role is visible
  22 + * When the permission mode is the role mode, the value value can pass the role value.
  23 + * When the permission mode is background, the value value can pass the code permission value
  24 + * @default ''
  25 + */
15 value: { 26 value: {
16 type: [Number, Array, String] as PropType<RoleEnum | RoleEnum[] | string | string[]>, 27 type: [Number, Array, String] as PropType<RoleEnum | RoleEnum[] | string | string[]>,
17 default: '', 28 default: '',
@@ -23,7 +34,7 @@ @@ -23,7 +34,7 @@
23 }); 34 });
24 35
25 /** 36 /**
26 - * 渲染角色按钮 37 + * Render role button
27 */ 38 */
28 function renderRoleAuth() { 39 function renderRoleAuth() {
29 const { value } = props; 40 const { value } = props;
@@ -34,10 +45,8 @@ @@ -34,10 +45,8 @@
34 return hasPermission(value) ? getSlot(slots) : null; 45 return hasPermission(value) ? getSlot(slots) : null;
35 } 46 }
36 47
37 - /**  
38 - * 渲染编码按钮  
39 - * 这里只判断是否包含,具体实现可以根据项目自行写逻辑  
40 - */ 48 + // Render coding button
  49 + // Here only judge whether it is included, the specific implementation can be written according to the project logic
41 function renderCodeAuth() { 50 function renderCodeAuth() {
42 const { value } = props; 51 const { value } = props;
43 if (!value) { 52 if (!value) {
@@ -49,12 +58,12 @@ @@ -49,12 +58,12 @@
49 58
50 return () => { 59 return () => {
51 const mode = unref(getModeRef); 60 const mode = unref(getModeRef);
52 - // 基于角色渲染 61 + // Role-based value control
53 if (mode === PermissionModeEnum.ROLE) { 62 if (mode === PermissionModeEnum.ROLE) {
54 return renderRoleAuth(); 63 return renderRoleAuth();
55 } 64 }
56 65
57 - // 基于后台编码渲染 66 + // Based on background role permission control
58 if (mode === PermissionModeEnum.BACK) { 67 if (mode === PermissionModeEnum.BACK) {
59 return renderCodeAuth(); 68 return renderCodeAuth();
60 } 69 }
src/components/Basic/src/BasicArrow.vue
  1 +<!--
  2 + * @Author: Vben
  3 + * @Description: Arrow component with animation
  4 +-->
1 <template> 5 <template>
2 <span :class="getClass"> 6 <span :class="getClass">
3 <RightOutlined /> 7 <RightOutlined />
src/components/Basic/src/BasicHelp.vue
@@ -71,9 +71,6 @@ @@ -71,9 +71,6 @@
71 return props.absolute ? props.position : {}; 71 return props.absolute ? props.position : {};
72 }); 72 });
73 73
74 - /**  
75 - * @description: 渲染内容  
76 - */  
77 const renderTitle = () => { 74 const renderTitle = () => {
78 const list = props.text; 75 const list = props.text;
79 if (isString(list)) { 76 if (isString(list)) {
@@ -89,6 +86,7 @@ @@ -89,6 +86,7 @@
89 86
90 return () => { 87 return () => {
91 return h( 88 return h(
  89 + // @ts-ignores
92 Tooltip, 90 Tooltip,
93 { 91 {
94 title: h( 92 title: h(
src/components/Button/index.vue
@@ -12,33 +12,19 @@ @@ -12,33 +12,19 @@
12 12
13 import { defineComponent, computed } from 'vue'; 13 import { defineComponent, computed } from 'vue';
14 import { Button } from 'ant-design-vue'; 14 import { Button } from 'ant-design-vue';
15 - // import { extendSlots } from '/@/utils/helper/tsxHelper';  
16 - // import { useThrottle } from '/@/hooks/core/useThrottle';  
17 - // import { isFunction } from '/@/utils/is';  
18 import Icon from '/@/components/Icon'; 15 import Icon from '/@/components/Icon';
19 export default defineComponent({ 16 export default defineComponent({
20 name: 'AButton', 17 name: 'AButton',
21 inheritAttrs: false, 18 inheritAttrs: false,
22 components: { Button, Icon }, 19 components: { Button, Icon },
23 props: { 20 props: {
24 - // 按钮类型  
25 type: { 21 type: {
26 type: String as PropType<'primary' | 'default' | 'danger' | 'dashed' | 'link'>, 22 type: String as PropType<'primary' | 'default' | 'danger' | 'dashed' | 'link'>,
27 default: 'default', 23 default: 'default',
28 }, 24 },
29 - // 节流防抖类型 throttle debounce  
30 - // throttle: {  
31 - // type: String as PropType<'throttle' | 'debounce'>,  
32 - // default: 'throttle',  
33 - // },  
34 color: { 25 color: {
35 type: String as PropType<'error' | 'warning' | 'success' | ''>, 26 type: String as PropType<'error' | 'warning' | 'success' | ''>,
36 }, 27 },
37 - // // 防抖节流时间  
38 - // throttleTime: {  
39 - // type: Number as PropType<number>,  
40 - // default: 50,  
41 - // },  
42 loading: { 28 loading: {
43 type: Boolean as PropType<boolean>, 29 type: Boolean as PropType<boolean>,
44 default: false, 30 default: false,
@@ -58,42 +44,15 @@ @@ -58,42 +44,15 @@
58 const getIsCircleBtn = computed(() => { 44 const getIsCircleBtn = computed(() => {
59 return attrs.shape === 'circle'; 45 return attrs.shape === 'circle';
60 }); 46 });
61 - // const getListeners = computed(() => {  
62 - // const { throttle, throttleTime = 0 } = props;  
63 - // // 是否开启节流防抖  
64 - // const throttleType = throttle!.toLowerCase();  
65 - // const isDebounce = throttleType === 'debounce';  
66 - // const openThrottle = ['throttle', 'debounce'].includes(throttleType) && throttleTime > 0;  
67 - // if (!openThrottle) {  
68 - // return {  
69 - // ...attrs,  
70 - // };  
71 - // }  
72 -  
73 - // const on: {  
74 - // onClick?: Fn;  
75 - // } = {};  
76 -  
77 - // if (attrs.onClick && isFunction(attrs.onClick) && openThrottle) {  
78 - // const [handler] = useThrottle(attrs.onClick as any, throttleTime!, {  
79 - // debounce: isDebounce,  
80 - // immediate: false,  
81 - // });  
82 - // on.onClick = handler;  
83 - // }  
84 -  
85 - // return {  
86 - // ...attrs,  
87 - // ...on,  
88 - // };  
89 - // });  
90 47
91 const getColor = computed(() => { 48 const getColor = computed(() => {
92 - const res: string[] = [];  
93 const { color, disabled } = props; 49 const { color, disabled } = props;
94 - color && res.push(`ant-btn-${color}`);  
95 - disabled && res.push('is-disabled');  
96 - return res; 50 + return [
  51 + {
  52 + [`ant-btn-${color}`]: !!color,
  53 + [`is-disabled`]: disabled,
  54 + },
  55 + ];
97 }); 56 });
98 57
99 const getBindValue = computed((): any => { 58 const getBindValue = computed((): any => {
src/components/Container/src/LazyContainer.vue
@@ -22,7 +22,8 @@ @@ -22,7 +22,8 @@
22 import { defineComponent, reactive, onMounted, ref, toRef, toRefs } from 'vue'; 22 import { defineComponent, reactive, onMounted, ref, toRef, toRefs } from 'vue';
23 23
24 import { Skeleton } from 'ant-design-vue'; 24 import { Skeleton } from 'ant-design-vue';
25 - import { useTimeoutFn, useIntersectionObserver } from '@vueuse/core'; 25 + import { useTimeoutFn } from '@vueuse/core';
  26 + import { useIntersectionObserver } from '/@/hooks/event/useIntersectionObserver';
26 interface State { 27 interface State {
27 isInit: boolean; 28 isInit: boolean;
28 loading: boolean; 29 loading: boolean;
src/components/Container/src/collapse/CollapseContainer.vue
@@ -43,23 +43,22 @@ @@ -43,23 +43,22 @@
43 }, 43 },
44 name: 'CollapseContainer', 44 name: 'CollapseContainer',
45 props: { 45 props: {
46 - // 标题  
47 title: { 46 title: {
48 type: String as PropType<string>, 47 type: String as PropType<string>,
49 default: '', 48 default: '',
50 }, 49 },
51 - // 是否可以展开 50 + // Can it be expanded
52 canExpan: { 51 canExpan: {
53 type: Boolean as PropType<boolean>, 52 type: Boolean as PropType<boolean>,
54 default: true, 53 default: true,
55 }, 54 },
56 - // 标题右侧温馨提醒 55 + // Warm reminder on the right side of the title
57 helpMessage: { 56 helpMessage: {
58 type: [Array, String] as PropType<string[] | string>, 57 type: [Array, String] as PropType<string[] | string>,
59 default: '', 58 default: '',
60 }, 59 },
61 - // 展开收缩的时候是否触发window.resize,  
62 - // 可以适应表格和表单,当表单收缩起来,表格触发resize 自适应高度 60 + // Whether to trigger window.resize when expanding and contracting,
  61 + // Can adapt to tables and forms, when the form shrinks, the form triggers resize to adapt to the height
63 triggerWindowResize: { 62 triggerWindowResize: {
64 type: Boolean as PropType<boolean>, 63 type: Boolean as PropType<boolean>,
65 default: false, 64 default: false,
@@ -68,12 +67,12 @@ @@ -68,12 +67,12 @@
68 type: Boolean as PropType<boolean>, 67 type: Boolean as PropType<boolean>,
69 default: false, 68 default: false,
70 }, 69 },
71 - // 延时加载 70 + // Delayed loading
72 lazy: { 71 lazy: {
73 type: Boolean as PropType<boolean>, 72 type: Boolean as PropType<boolean>,
74 default: false, 73 default: false,
75 }, 74 },
76 - // 延时加载时间 75 + // Delayed loading time
77 lazyTime: { 76 lazyTime: {
78 type: Number as PropType<number>, 77 type: Number as PropType<number>,
79 default: 0, 78 default: 0,
@@ -82,14 +81,14 @@ @@ -82,14 +81,14 @@
82 setup(props) { 81 setup(props) {
83 const showRef = ref(true); 82 const showRef = ref(true);
84 /** 83 /**
85 - * @description: 处理开展事件 84 + * @description: Handling development events
86 */ 85 */
87 function handleExpand() { 86 function handleExpand() {
88 const hasShow = !unref(showRef); 87 const hasShow = !unref(showRef);
89 showRef.value = hasShow; 88 showRef.value = hasShow;
90 89
91 if (props.triggerWindowResize) { 90 if (props.triggerWindowResize) {
92 - // 这里200毫秒是因为展开有动画, 91 + // 200 milliseconds here is because the expansion has animation,
93 useTimeoutFn(triggerWindowResize, 200); 92 useTimeoutFn(triggerWindowResize, 200);
94 } 93 }
95 } 94 }
src/components/ContextMenu/src/props.ts
@@ -9,25 +9,23 @@ export const props = { @@ -9,25 +9,23 @@ export const props = {
9 type: Object as PropType<Event>, 9 type: Object as PropType<Event>,
10 default: null, 10 default: null,
11 }, 11 },
12 - // 样式  
13 styles: { 12 styles: {
14 type: Object as PropType<any>, 13 type: Object as PropType<any>,
15 default: null, 14 default: null,
16 }, 15 },
17 showIcon: { 16 showIcon: {
18 - // 是否显示icon  
19 type: Boolean as PropType<boolean>, 17 type: Boolean as PropType<boolean>,
20 default: true, 18 default: true,
21 }, 19 },
22 axis: { 20 axis: {
23 - // 鼠标右键点击的位置 21 + // The position of the right mouse button click
24 type: Object as PropType<Axis>, 22 type: Object as PropType<Axis>,
25 default() { 23 default() {
26 return { x: 0, y: 0 }; 24 return { x: 0, y: 0 };
27 }, 25 },
28 }, 26 },
29 items: { 27 items: {
30 - // 最重要的列表,没有的话直接不显示 28 + // The most important list, if not, will not be displayed
31 type: Array as PropType<ContextMenuItem[]>, 29 type: Array as PropType<ContextMenuItem[]>,
32 default() { 30 default() {
33 return []; 31 return [];
src/components/CountTo/index.ts
1 -// 对vue-count-to进行改造成支持vue3版本 1 +// Transform vue-count-to to support vue3 version
2 export { default as CountTo } from './src/index.vue'; 2 export { default as CountTo } from './src/index.vue';
src/components/Description/src/index.tsx
@@ -14,9 +14,8 @@ export default defineComponent({ @@ -14,9 +14,8 @@ export default defineComponent({
14 props: descProps, 14 props: descProps,
15 emits: ['register'], 15 emits: ['register'],
16 setup(props, { attrs, slots, emit }) { 16 setup(props, { attrs, slots, emit }) {
17 - // props来自设置  
18 const propsRef = ref<Partial<DescOptions> | null>(null); 17 const propsRef = ref<Partial<DescOptions> | null>(null);
19 - // 自定义title组件:获得title 18 + // Custom title component: get title
20 const getMergeProps = computed(() => { 19 const getMergeProps = computed(() => {
21 return { 20 return {
22 ...props, 21 ...props,
@@ -34,19 +33,19 @@ export default defineComponent({ @@ -34,19 +33,19 @@ export default defineComponent({
34 }); 33 });
35 34
36 /** 35 /**
37 - * @description: 是否使用标题 36 + * @description: Whether to use title
38 */ 37 */
39 const useWrapper = computed(() => { 38 const useWrapper = computed(() => {
40 return !!unref(getMergeProps).title; 39 return !!unref(getMergeProps).title;
41 }); 40 });
42 41
43 /** 42 /**
44 - * @description: 获取配置Collapse 43 + * @description: Get configuration Collapse
45 */ 44 */
46 const getCollapseOptions = computed( 45 const getCollapseOptions = computed(
47 (): CollapseContainerOptions => { 46 (): CollapseContainerOptions => {
48 return { 47 return {
49 - // 默认不能展开 48 + // Cannot be expanded by default
50 canExpand: false, 49 canExpand: false,
51 ...unref(getProps).collapseOptions, 50 ...unref(getProps).collapseOptions,
52 }; 51 };
@@ -57,7 +56,7 @@ export default defineComponent({ @@ -57,7 +56,7 @@ export default defineComponent({
57 * @description:设置desc 56 * @description:设置desc
58 */ 57 */
59 function setDescProps(descProps: Partial<DescOptions>): void { 58 function setDescProps(descProps: Partial<DescOptions>): void {
60 - // 保留上一次的setDrawerProps 59 + // Keep the last setDrawerProps
61 const mergeProps = deepMerge(unref(propsRef) || {}, descProps); 60 const mergeProps = deepMerge(unref(propsRef) || {}, descProps);
62 propsRef.value = cloneDeep(mergeProps); 61 propsRef.value = cloneDeep(mergeProps);
63 } 62 }
@@ -68,7 +67,7 @@ export default defineComponent({ @@ -68,7 +67,7 @@ export default defineComponent({
68 67
69 emit('register', methods); 68 emit('register', methods);
70 69
71 - // 防止换行 70 + // Prevent line breaks
72 function renderLabel({ label, labelMinWidth, labelStyle }: DescItem) { 71 function renderLabel({ label, labelMinWidth, labelStyle }: DescItem) {
73 if (!labelStyle && !labelMinWidth) { 72 if (!labelStyle && !labelMinWidth) {
74 return label; 73 return label;
@@ -101,7 +100,6 @@ export default defineComponent({ @@ -101,7 +100,6 @@ export default defineComponent({
101 100
102 const width = contentMinWidth; 101 const width = contentMinWidth;
103 return ( 102 return (
104 - // @ts-ignore  
105 <Descriptions.Item label={renderLabel(item)} key={field} span={span}> 103 <Descriptions.Item label={renderLabel(item)} key={field} span={span}>
106 {() => 104 {() =>
107 contentMinWidth ? ( 105 contentMinWidth ? (
@@ -131,7 +129,7 @@ export default defineComponent({ @@ -131,7 +129,7 @@ export default defineComponent({
131 129
132 const renderContainer = () => { 130 const renderContainer = () => {
133 const content = props.useCollapse ? renderDesc() : <div>{renderDesc()}</div>; 131 const content = props.useCollapse ? renderDesc() : <div>{renderDesc()}</div>;
134 - // 减少dom层级 132 + // Reduce the dom level
135 return props.useCollapse ? ( 133 return props.useCollapse ? (
136 <CollapseContainer 134 <CollapseContainer
137 title={unref(getMergeProps).title} 135 title={unref(getMergeProps).title}
src/components/Description/src/types.ts
@@ -2,7 +2,6 @@ import type { VNode } from &#39;vue&#39;; @@ -2,7 +2,6 @@ import type { VNode } from &#39;vue&#39;;
2 import type { CollapseContainerOptions } from '/@/components/Container/index'; 2 import type { CollapseContainerOptions } from '/@/components/Container/index';
3 3
4 export interface DescItem { 4 export interface DescItem {
5 - // 最小宽度  
6 labelMinWidth?: number; 5 labelMinWidth?: number;
7 6
8 contentMinWidth?: number; 7 contentMinWidth?: number;
@@ -11,7 +10,7 @@ export interface DescItem { @@ -11,7 +10,7 @@ export interface DescItem {
11 10
12 field: string; 11 field: string;
13 label: any; 12 label: any;
14 - // 和并列 13 + // Merge column
15 span?: number; 14 span?: number;
16 show?: (...arg: any) => boolean; 15 show?: (...arg: any) => boolean;
17 // render 16 // render
@@ -19,10 +18,10 @@ export interface DescItem { @@ -19,10 +18,10 @@ export interface DescItem {
19 } 18 }
20 19
21 export interface DescOptions { 20 export interface DescOptions {
22 - // 是否包含collapse组件 21 + // Whether to include the collapse component
23 useCollapse?: boolean; 22 useCollapse?: boolean;
24 /** 23 /**
25 - * item配置 24 + * item configuration
26 * @type DescItem 25 * @type DescItem
27 */ 26 */
28 schema: DescItem[]; 27 schema: DescItem[];
@@ -32,7 +31,7 @@ export interface DescOptions { @@ -32,7 +31,7 @@ export interface DescOptions {
32 */ 31 */
33 data: any; 32 data: any;
34 /** 33 /**
35 - * 内置的CollapseContainer组件配置 34 + * Built-in CollapseContainer component configuration
36 * @type CollapseContainerOptions 35 * @type CollapseContainerOptions
37 */ 36 */
38 collapseOptions?: CollapseContainerOptions; 37 collapseOptions?: CollapseContainerOptions;
src/components/Drawer/src/BasicDrawer.tsx
@@ -71,7 +71,7 @@ export default defineComponent({ @@ -71,7 +71,7 @@ export default defineComponent({
71 } 71 }
72 ); 72 );
73 73
74 - // 底部按钮自定义实现, 74 + // Custom implementation of the bottom button,
75 const getFooterHeight = computed(() => { 75 const getFooterHeight = computed(() => {
76 const { footerHeight, showFooter }: DrawerProps = unref(getProps); 76 const { footerHeight, showFooter }: DrawerProps = unref(getProps);
77 if (showFooter && footerHeight) { 77 if (showFooter && footerHeight) {
@@ -80,7 +80,7 @@ export default defineComponent({ @@ -80,7 +80,7 @@ export default defineComponent({
80 return `0px`; 80 return `0px`;
81 }); 81 });
82 82
83 - // 取消事件 83 + // Cancel event
84 async function onClose(e: any) { 84 async function onClose(e: any) {
85 const { closeFunc } = unref(getProps); 85 const { closeFunc } = unref(getProps);
86 emit('close', e); 86 emit('close', e);
@@ -93,7 +93,7 @@ export default defineComponent({ @@ -93,7 +93,7 @@ export default defineComponent({
93 } 93 }
94 94
95 function setDrawerProps(props: Partial<DrawerProps>): void { 95 function setDrawerProps(props: Partial<DrawerProps>): void {
96 - // 保留上一次的setDrawerProps 96 + // Keep the last setDrawerProps
97 propsRef.value = deepMerge(unref(propsRef) || {}, props); 97 propsRef.value = deepMerge(unref(propsRef) || {}, props);
98 if (Reflect.has(props, 'visible')) { 98 if (Reflect.has(props, 'visible')) {
99 visibleRef.value = !!props.visible; 99 visibleRef.value = !!props.visible;
src/components/Drawer/src/props.ts
1 import type { PropType } from 'vue'; 1 import type { PropType } from 'vue';
2 -// import {DrawerProps} from './types'  
3 export const footerProps = { 2 export const footerProps = {
4 confirmLoading: Boolean as PropType<boolean>, 3 confirmLoading: Boolean as PropType<boolean>,
5 /** 4 /**
6 - * @description: 显示关闭按钮 5 + * @description: Show close button
7 */ 6 */
8 showCancelBtn: { 7 showCancelBtn: {
9 type: Boolean as PropType<boolean>, 8 type: Boolean as PropType<boolean>,
@@ -15,7 +14,7 @@ export const footerProps = { @@ -15,7 +14,7 @@ export const footerProps = {
15 default: '关闭', 14 default: '关闭',
16 }, 15 },
17 /** 16 /**
18 - * @description: 显示确认按钮 17 + * @description: Show confirmation button
19 */ 18 */
20 showOkBtn: { 19 showOkBtn: {
21 type: Boolean as PropType<boolean>, 20 type: Boolean as PropType<boolean>,
src/components/Drawer/src/types.ts
@@ -73,7 +73,7 @@ export interface DrawerProps extends DrawerFooterProps { @@ -73,7 +73,7 @@ export interface DrawerProps extends DrawerFooterProps {
73 showDetailBack?: boolean; 73 showDetailBack?: boolean;
74 visible?: boolean; 74 visible?: boolean;
75 /** 75 /**
76 - * 内置的ScrollContainer组件配置 76 + * Built-in ScrollContainer component configuration
77 * @type ScrollContainerOptions 77 * @type ScrollContainerOptions
78 */ 78 */
79 scrollOptions?: ScrollContainerOptions; 79 scrollOptions?: ScrollContainerOptions;
src/components/Drawer/src/useDrawer.ts
@@ -22,7 +22,7 @@ import { isFunction } from &#39;/@/utils/is&#39;; @@ -22,7 +22,7 @@ import { isFunction } from &#39;/@/utils/is&#39;;
22 22
23 const dataTransferRef = reactive<any>({}); 23 const dataTransferRef = reactive<any>({});
24 /** 24 /**
25 - * @description: 适用于将drawer独立出去,外面调用 25 + * @description: Applicable to separate drawer and call outside
26 */ 26 */
27 export function useDrawer(): UseDrawerReturnType { 27 export function useDrawer(): UseDrawerReturnType {
28 if (!getCurrentInstance()) { 28 if (!getCurrentInstance()) {
src/components/Dropdown/props.ts
1 import type { PropType } from 'vue'; 1 import type { PropType } from 'vue';
2 -/**  
3 - * @description: 基础表格参数配置  
4 - */ 2 +
5 export const dropdownProps = { 3 export const dropdownProps = {
6 /** 4 /**
7 * the trigger mode which executes the drop-down action 5 * the trigger mode which executes the drop-down action
@@ -14,52 +12,6 @@ export const dropdownProps = { @@ -14,52 +12,6 @@ export const dropdownProps = {
14 return ['contextmenu']; 12 return ['contextmenu'];
15 }, 13 },
16 }, 14 },
17 -  
18 - // /**  
19 - // * the dropdown menu  
20 - // * @type () => Menu  
21 - // */  
22 - // overlay: {  
23 - // type: null,  
24 - // },  
25 -  
26 - // /**  
27 - // * Class name of the dropdown root element  
28 - // * @type string  
29 - // */  
30 - // overlayClassName: String,  
31 -  
32 - // /**  
33 - // * Style of the dropdown root element  
34 - // * @type object  
35 - // */  
36 - // overlayStyle: Object,  
37 -  
38 - // /**  
39 - // * whether the dropdown menu is visible  
40 - // * @type boolean  
41 - // */  
42 - // visible: Boolean,  
43 -  
44 - // /**  
45 - // * whether the dropdown menu is disabled  
46 - // * @type boolean  
47 - // */  
48 - // disabled: Boolean,  
49 -  
50 - // /**  
51 - // * to set the ontainer of the dropdown menu. The default is to create a div element in body, you can reset it to the scrolling area and make a relative reposition.  
52 - // * @default () => document.body  
53 - // * @type Function  
54 - // */  
55 - // getPopupContainer: Function,  
56 -  
57 - // /**  
58 - // * placement of pop menu: bottomLeft bottomCenter bottomRight topLeft topCenter topRight  
59 - // * @default 'bottomLeft'  
60 - // * @type string  
61 - // */  
62 - // placement: String,  
63 }; 15 };
64 export const basicDropdownProps = Object.assign({}, dropdownProps, { 16 export const basicDropdownProps = Object.assign({}, dropdownProps, {
65 dropMenuList: { 17 dropMenuList: {
src/components/Form/src/BasicForm.vue
@@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
27 <script lang="ts"> 27 <script lang="ts">
28 import type { FormActionType, FormProps, FormSchema } from './types/form'; 28 import type { FormActionType, FormProps, FormSchema } from './types/form';
29 import type { AdvanceState } from './types/hooks'; 29 import type { AdvanceState } from './types/hooks';
30 - import type { Ref } from 'vue'; 30 + import type { Ref, WatchStopHandle } from 'vue';
31 import type { ValidateFields } from 'ant-design-vue/lib/form/interface'; 31 import type { ValidateFields } from 'ant-design-vue/lib/form/interface';
32 32
33 import { defineComponent, reactive, ref, computed, unref, toRef, onMounted, watch } from 'vue'; 33 import { defineComponent, reactive, ref, computed, unref, toRef, onMounted, watch } from 'vue';
@@ -66,6 +66,7 @@ @@ -66,6 +66,7 @@
66 }); 66 });
67 67
68 const defaultValueRef = ref<any>({}); 68 const defaultValueRef = ref<any>({});
  69 + const isInitedDefaultRef = ref(false);
69 const propsRef = ref<Partial<FormProps>>({}); 70 const propsRef = ref<Partial<FormProps>>({});
70 const schemaRef = ref<Nullable<FormSchema[]>>(null); 71 const schemaRef = ref<Nullable<FormSchema[]>>(null);
71 const formElRef = ref<Nullable<FormActionType>>(null); 72 const formElRef = ref<Nullable<FormActionType>>(null);
@@ -164,16 +165,19 @@ @@ -164,16 +165,19 @@
164 } 165 }
165 ); 166 );
166 167
167 - watch( 168 + const stopWatch: WatchStopHandle = watch(
168 () => getSchema.value, 169 () => getSchema.value,
169 - () => {  
170 - initDefault(); 170 + (schema) => {
  171 + if (unref(isInitedDefaultRef)) {
  172 + return stopWatch();
  173 + }
  174 + if (schema && schema.length) {
  175 + initDefault();
  176 + isInitedDefaultRef.value = true;
  177 + }
171 } 178 }
172 ); 179 );
173 180
174 - /**  
175 - * @description:设置表单  
176 - */  
177 function setProps(formProps: Partial<FormProps>): void { 181 function setProps(formProps: Partial<FormProps>): void {
178 const mergeProps = deepMerge(unref(propsRef) || {}, formProps); 182 const mergeProps = deepMerge(unref(propsRef) || {}, formProps);
179 propsRef.value = mergeProps; 183 propsRef.value = mergeProps;
src/components/Form/src/componentMap.ts
1 import { Component } from 'vue'; 1 import { Component } from 'vue';
2 /** 2 /**
3 - * 组件列表,在这里注册才可以在表单使用 3 + * Component list, register here to use it in the form
4 */ 4 */
5 import { 5 import {
6 Input, 6 Input,
src/components/Form/src/hooks/useAdvanced.ts
@@ -114,7 +114,7 @@ export default function ({ @@ -114,7 +114,7 @@ export default function ({
114 ) { 114 ) {
115 advanceState.hideAdvanceBtn = false; 115 advanceState.hideAdvanceBtn = false;
116 116
117 - // 大于3行默认收起 117 + // More than 3 lines collapsed by default
118 } else if (!advanceState.isLoad) { 118 } else if (!advanceState.isLoad) {
119 advanceState.isLoad = true; 119 advanceState.isLoad = true;
120 advanceState.isAdvanced = !advanceState.isAdvanced; 120 advanceState.isAdvanced = !advanceState.isAdvanced;
@@ -124,7 +124,7 @@ export default function ({ @@ -124,7 +124,7 @@ export default function ({
124 if (itemColSum > BASIC_COL_LEN) { 124 if (itemColSum > BASIC_COL_LEN) {
125 return { isAdvanced: advanceState.isAdvanced, itemColSum }; 125 return { isAdvanced: advanceState.isAdvanced, itemColSum };
126 } else { 126 } else {
127 - // 第一行始终显示 127 + // The first line is always displayed
128 return { isAdvanced: true, itemColSum }; 128 return { isAdvanced: true, itemColSum };
129 } 129 }
130 } 130 }
src/components/Form/src/hooks/useFormAction.ts
@@ -62,7 +62,7 @@ export function useFormAction({ @@ -62,7 +62,7 @@ export function useFormAction({
62 Object.keys(values).forEach((key) => { 62 Object.keys(values).forEach((key) => {
63 const element = values[key]; 63 const element = values[key];
64 if (element !== undefined && element !== null && fields.includes(key)) { 64 if (element !== undefined && element !== null && fields.includes(key)) {
65 - // 时间 65 + // time type
66 if (itemIsDateType(key)) { 66 if (itemIsDateType(key)) {
67 if (Array.isArray(element)) { 67 if (Array.isArray(element)) {
68 const arr: any[] = []; 68 const arr: any[] = [];
@@ -84,7 +84,7 @@ export function useFormAction({ @@ -84,7 +84,7 @@ export function useFormAction({
84 // } 84 // }
85 } 85 }
86 /** 86 /**
87 - * @description: 根据字段名删除 87 + * @description: Delete based on field name
88 */ 88 */
89 function removeSchemaByFiled(fields: string | string[]): void { 89 function removeSchemaByFiled(fields: string | string[]): void {
90 const schemaList: FormSchema[] = cloneDeep(unref(getSchema)); 90 const schemaList: FormSchema[] = cloneDeep(unref(getSchema));
@@ -102,7 +102,7 @@ export function useFormAction({ @@ -102,7 +102,7 @@ export function useFormAction({
102 } 102 }
103 103
104 /** 104 /**
105 - * @description: 根据字段名删除 105 + * @description: Delete based on field name
106 */ 106 */
107 function _removeSchemaByFiled(field: string, schemaList: FormSchema[]): void { 107 function _removeSchemaByFiled(field: string, schemaList: FormSchema[]): void {
108 if (isString(field)) { 108 if (isString(field)) {
@@ -114,7 +114,7 @@ export function useFormAction({ @@ -114,7 +114,7 @@ export function useFormAction({
114 } 114 }
115 115
116 /** 116 /**
117 - * @description: 往某个字段后面插入,如果没有插入最后一个 117 + * @description: Insert after a certain field, if not insert the last
118 */ 118 */
119 function appendSchemaByField(schema: FormSchema, prefixField?: string) { 119 function appendSchemaByField(schema: FormSchema, prefixField?: string) {
120 const schemaList: FormSchema[] = cloneDeep(unref(getSchema)); 120 const schemaList: FormSchema[] = cloneDeep(unref(getSchema));
@@ -169,7 +169,7 @@ export function useFormAction({ @@ -169,7 +169,7 @@ export function useFormAction({
169 } 169 }
170 170
171 /** 171 /**
172 - * @description: 是否是时间 172 + * @description: Is it time
173 */ 173 */
174 function itemIsDateType(key: string) { 174 function itemIsDateType(key: string) {
175 return unref(getSchema).some((item) => { 175 return unref(getSchema).some((item) => {
@@ -193,7 +193,7 @@ export function useFormAction({ @@ -193,7 +193,7 @@ export function useFormAction({
193 } 193 }
194 194
195 /** 195 /**
196 - * @description: 表单提交 196 + * @description: Form submission
197 */ 197 */
198 async function handleSubmit(e?: Event): Promise<void> { 198 async function handleSubmit(e?: Event): Promise<void> {
199 e && e.preventDefault(); 199 e && e.preventDefault();
src/components/Form/src/hooks/useFormValues.ts
@@ -18,7 +18,7 @@ export function useFormValues({ @@ -18,7 +18,7 @@ export function useFormValues({
18 getSchema, 18 getSchema,
19 formModel, 19 formModel,
20 }: UseFormValuesContext) { 20 }: UseFormValuesContext) {
21 - // 处理表单值 21 + // Processing form values
22 function handleFormValues(values: any) { 22 function handleFormValues(values: any) {
23 if (!isObject(values)) { 23 if (!isObject(values)) {
24 return {}; 24 return {};
@@ -37,7 +37,7 @@ export function useFormValues({ @@ -37,7 +37,7 @@ export function useFormValues({
37 if (isArray(value) && value[0]._isAMomentObject && value[1]._isAMomentObject) { 37 if (isArray(value) && value[0]._isAMomentObject && value[1]._isAMomentObject) {
38 value = value.map((item) => transformDateFunc(item)); 38 value = value.map((item) => transformDateFunc(item));
39 } 39 }
40 - // 去除空格 40 + // Remove spaces
41 if (isString(value)) { 41 if (isString(value)) {
42 value = value.trim(); 42 value = value.trim();
43 } 43 }
@@ -47,7 +47,7 @@ export function useFormValues({ @@ -47,7 +47,7 @@ export function useFormValues({
47 } 47 }
48 48
49 /** 49 /**
50 - * @description: 处理时间区间参数 50 + * @description: Processing time interval parameters
51 */ 51 */
52 function handleRangeTimeValue(values: any) { 52 function handleRangeTimeValue(values: any) {
53 const fieldMapToTime = unref(fieldMapToTimeRef); 53 const fieldMapToTime = unref(fieldMapToTimeRef);
src/components/Form/src/hooks/useLabelWidth.ts
@@ -31,7 +31,7 @@ export function useItemLabelWidth(schemaItemRef: Ref&lt;FormSchema&gt;, propsRef: Ref&lt; @@ -31,7 +31,7 @@ export function useItemLabelWidth(schemaItemRef: Ref&lt;FormSchema&gt;, propsRef: Ref&lt;
31 wrapperCol: globWrapperCol, 31 wrapperCol: globWrapperCol,
32 } = unref(propsRef) as any; 32 } = unref(propsRef) as any;
33 33
34 - // 如果全局有设置labelWidth, 则所有item使用 34 + // If labelWidth is set globally, all items use
35 if ((!globalLabelWidth && !labelWidth && !globalLabelCol) || disabledLabelWidth) { 35 if ((!globalLabelWidth && !labelWidth && !globalLabelCol) || disabledLabelWidth) {
36 return { labelCol, wrapperCol }; 36 return { labelCol, wrapperCol };
37 } 37 }
src/components/Form/src/types/form.ts
@@ -42,57 +42,57 @@ export type UseFormReturnType = [RegisterFn, FormActionType]; @@ -42,57 +42,57 @@ export type UseFormReturnType = [RegisterFn, FormActionType];
42 42
43 export interface FormProps { 43 export interface FormProps {
44 // layout?: 'vertical' | 'inline' | 'horizontal'; 44 // layout?: 'vertical' | 'inline' | 'horizontal';
45 - // 表单值 45 + // Form value
46 model?: any; 46 model?: any;
47 - // 整个表单所有项宽度 47 + // The width of all items in the entire form
48 labelWidth?: number | string; 48 labelWidth?: number | string;
49 - // 重置时提交 49 + // Submit form on reset
50 submitOnReset?: boolean; 50 submitOnReset?: boolean;
51 - // 整个表单通用Col配置 51 + // Col configuration for the entire form
52 labelCol?: Partial<ColEx>; 52 labelCol?: Partial<ColEx>;
53 - // 整个表单通用Col配置 53 + // Col configuration for the entire form
54 wrapperCol?: Partial<ColEx>; 54 wrapperCol?: Partial<ColEx>;
55 55
56 - // 通用col配置 56 + // General col configuration
57 baseColProps?: Partial<ColEx>; 57 baseColProps?: Partial<ColEx>;
58 58
59 - // 表单配置规则 59 + // Form configuration rules
60 schemas?: FormSchema[]; 60 schemas?: FormSchema[];
61 - // 用于合并到动态控制表单项的 函数values 61 + // Function values used to merge into dynamic control form items
62 mergeDynamicData?: any; 62 mergeDynamicData?: any;
63 - // 紧凑模式,用于搜索表单 63 + // Compact mode for search forms
64 compact?: boolean; 64 compact?: boolean;
65 - // 空白行span 65 + // Blank line span
66 emptySpan?: number | Partial<ColEx>; 66 emptySpan?: number | Partial<ColEx>;
67 - // 表单内部组件大小 67 + // Internal component size of the form
68 size?: 'default' | 'small' | 'large'; 68 size?: 'default' | 'small' | 'large';
69 - // 是否禁用 69 + // Whether to disable
70 disabled?: boolean; 70 disabled?: boolean;
71 - // 时间区间字段映射成多个 71 + // Time interval fields are mapped into multiple
72 fieldMapToTime?: FieldMapToTime; 72 fieldMapToTime?: FieldMapToTime;
73 - // 自动设置placeholder 73 + // Placeholder is set automatically
74 autoSetPlaceHolder?: boolean; 74 autoSetPlaceHolder?: boolean;
75 - // 校验信息是否加入label 75 + // Check whether the information is added to the label
76 rulesMessageJoinLabel?: boolean; 76 rulesMessageJoinLabel?: boolean;
77 - // 是否显示收起展开按钮 77 + // Whether to show collapse and expand buttons
78 showAdvancedButton?: boolean; 78 showAdvancedButton?: boolean;
79 - // 超过指定行数自动收起 79 + // Automatically collapse over the specified number of rows
80 autoAdvancedLine?: number; 80 autoAdvancedLine?: number;
81 - // 是否显示操作按钮 81 + // Whether to show the operation button
82 showActionButtonGroup?: boolean; 82 showActionButtonGroup?: boolean;
83 83
84 - // 重置按钮配置 84 + // Reset button configuration
85 resetButtonOptions?: Partial<ButtonProps>; 85 resetButtonOptions?: Partial<ButtonProps>;
86 86
87 - // 确认按钮配置 87 + // Confirm button configuration
88 submitButtonOptions?: Partial<ButtonProps>; 88 submitButtonOptions?: Partial<ButtonProps>;
89 89
90 - // 操作列配置 90 + // Operation column configuration
91 actionColOptions?: Partial<ColEx>; 91 actionColOptions?: Partial<ColEx>;
92 92
93 - // 显示重置按钮 93 + // Show reset button
94 showResetButton?: boolean; 94 showResetButton?: boolean;
95 - // 显示确认按钮 95 + // Show confirmation button
96 showSubmitButton?: boolean; 96 showSubmitButton?: boolean;
97 97
98 resetFunc?: () => Promise<void>; 98 resetFunc?: () => Promise<void>;
@@ -101,27 +101,27 @@ export interface FormProps { @@ -101,27 +101,27 @@ export interface FormProps {
101 colon?: boolean; 101 colon?: boolean;
102 } 102 }
103 export interface FormSchema { 103 export interface FormSchema {
104 - // 字段名 104 + // Field name
105 field: string; 105 field: string;
106 - // 内部值更改触发的事件名,默认 change 106 + // Event name triggered by internal value change, default change
107 changeEvent?: string; 107 changeEvent?: string;
108 - // v-model绑定的变量名 默认 value 108 + // Variable name bound to v-model Default value
109 valueField?: string; 109 valueField?: string;
110 - // 标签名 110 + // Label name
111 label: string; 111 label: string;
112 - // 辅助文本 112 + // Auxiliary text
113 subLabel?: string; 113 subLabel?: string;
114 - // 文本右侧帮助文本 114 + // Help text on the right side of the text
115 helpMessage?: string | string[]; 115 helpMessage?: string | string[];
116 - // BaseHelp组件props 116 + // BaseHelp component props
117 helpComponentProps?: Partial<HelpComponentProps>; 117 helpComponentProps?: Partial<HelpComponentProps>;
118 - // label宽度,有传的话 itemProps配置的 labelCol 和WrapperCol会失效 118 + // Label width, if it is passed, the labelCol and WrapperCol configured by itemProps will be invalid
119 labelWidth?: string | number; 119 labelWidth?: string | number;
120 - // 禁用调有formModel全局设置的labelWidth,自己手动设置 labelCol和wrapperCol 120 + // Disable the adjustment of labelWidth with global settings of formModel, and manually set labelCol and wrapperCol by yourself
121 disabledLabelWidth?: boolean; 121 disabledLabelWidth?: boolean;
122 - // 组件 122 + // render component
123 component: ComponentType; 123 component: ComponentType;
124 - // 组件参数 124 + // Component parameters
125 componentProps?: 125 componentProps?:
126 | ((opt: { 126 | ((opt: {
127 schema: FormSchema; 127 schema: FormSchema;
@@ -130,35 +130,35 @@ export interface FormSchema { @@ -130,35 +130,35 @@ export interface FormSchema {
130 formModel: any; 130 formModel: any;
131 }) => any) 131 }) => any)
132 | object; 132 | object;
133 - // 必填 133 + // Required
134 required?: boolean; 134 required?: boolean;
135 135
136 - // 校验规则 136 + // Validation rules
137 rules?: Rule[]; 137 rules?: Rule[];
138 - // 校验信息是否加入label 138 + // Check whether the information is added to the label
139 rulesMessageJoinLabel?: boolean; 139 rulesMessageJoinLabel?: boolean;
140 140
141 - // 参考formModelItem 141 + // Reference formModelItem
142 itemProps?: Partial<FormItem>; 142 itemProps?: Partial<FormItem>;
143 143
144 - // formModelItem外层的col配置 144 + // col configuration outside formModelItem
145 colProps?: Partial<ColEx>; 145 colProps?: Partial<ColEx>;
146 146
147 // 默认值 147 // 默认值
148 defaultValue?: any; 148 defaultValue?: any;
149 isAdvanced?: boolean; 149 isAdvanced?: boolean;
150 150
151 - // 配合详情组件 151 + // Matching details components
152 span?: number; 152 span?: number;
153 153
154 ifShow?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean); 154 ifShow?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean);
155 155
156 show?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean); 156 show?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean);
157 157
158 - // 渲染form-item标签内的内容 158 + // Render the content in the form-item tag
159 render?: (renderCallbackParams: RenderCallbackParams) => VNode | VNode[] | string; 159 render?: (renderCallbackParams: RenderCallbackParams) => VNode | VNode[] | string;
160 160
161 - // 渲染 col内容,需要外层包裹 form-item 161 + // Rendering col content requires outer wrapper form-item
162 renderColContent?: (renderCallbackParams: RenderCallbackParams) => VNode | VNode[] | string; 162 renderColContent?: (renderCallbackParams: RenderCallbackParams) => VNode | VNode[] | string;
163 163
164 renderComponentContent?: 164 renderComponentContent?:
@@ -167,10 +167,10 @@ export interface FormSchema { @@ -167,10 +167,10 @@ export interface FormSchema {
167 | VNode[] 167 | VNode[]
168 | string; 168 | string;
169 169
170 - // 自定义slot, 在 from-item内 170 + // Custom slot, in from-item
171 slot?: string; 171 slot?: string;
172 172
173 - // 自定义slot,类似renderColContent 173 + // Custom slot, similar to renderColContent
174 colSlot?: string; 174 colSlot?: string;
175 175
176 dynamicDisabled?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean); 176 dynamicDisabled?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean);
@@ -179,16 +179,16 @@ export interface FormSchema { @@ -179,16 +179,16 @@ export interface FormSchema {
179 } 179 }
180 export interface HelpComponentProps { 180 export interface HelpComponentProps {
181 maxWidth: string; 181 maxWidth: string;
182 - // 是否显示序号 182 + // Whether to display the serial number
183 showIndex: boolean; 183 showIndex: boolean;
184 - // 文本列表 184 + // Text list
185 text: any; 185 text: any;
186 - // 颜色 186 + // colour
187 color: string; 187 color: string;
188 - // 字体大小 188 + // font size
189 fontSize: string; 189 fontSize: string;
190 icon: string; 190 icon: string;
191 absolute: boolean; 191 absolute: boolean;
192 - // 定位 192 + // Positioning
193 position: any; 193 position: any;
194 } 194 }
src/components/Menu/src/BasicMenu.tsx
@@ -6,7 +6,8 @@ import { Menu } from &#39;ant-design-vue&#39;; @@ -6,7 +6,8 @@ import { Menu } from &#39;ant-design-vue&#39;;
6 import SearchInput from './SearchInput.vue'; 6 import SearchInput from './SearchInput.vue';
7 import MenuContent from './MenuContent'; 7 import MenuContent from './MenuContent';
8 8
9 -import { MenuModeEnum, MenuThemeEnum, MenuTypeEnum } from '/@/enums/menuEnum'; 9 +import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum';
  10 +import { ThemeEnum } from '/@/enums/appEnum';
10 11
11 import { menuStore } from '/@/store/modules/menu'; 12 import { menuStore } from '/@/store/modules/menu';
12 import { appStore } from '/@/store/modules/app'; 13 import { appStore } from '/@/store/modules/app';
@@ -254,7 +255,7 @@ export default defineComponent({ @@ -254,7 +255,7 @@ export default defineComponent({
254 {getSlot(slots, 'header')} 255 {getSlot(slots, 'header')}
255 <SearchInput 256 <SearchInput
256 class={!props.search ? 'hidden' : ''} 257 class={!props.search ? 'hidden' : ''}
257 - theme={props.theme as MenuThemeEnum} 258 + theme={props.theme as ThemeEnum}
258 onChange={handleInputChange} 259 onChange={handleInputChange}
259 onClick={handleInputClick} 260 onClick={handleInputClick}
260 collapsed={getCollapsedState} 261 collapsed={getCollapsedState}
src/components/Menu/src/SearchInput.vue
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 <script lang="ts"> 11 <script lang="ts">
12 import type { PropType } from 'vue'; 12 import type { PropType } from 'vue';
13 import { defineComponent, computed } from 'vue'; 13 import { defineComponent, computed } from 'vue';
14 - import { MenuThemeEnum } from '/@/enums/menuEnum'; 14 + import { ThemeEnum } from '/@/enums/appEnum';
15 15
16 // hook 16 // hook
17 import { useDebounce } from '/@/hooks/core/useDebounce'; 17 import { useDebounce } from '/@/hooks/core/useDebounce';
@@ -25,7 +25,7 @@ @@ -25,7 +25,7 @@
25 default: true, 25 default: true,
26 }, 26 },
27 theme: { 27 theme: {
28 - type: String as PropType<MenuThemeEnum>, 28 + type: String as PropType<ThemeEnum>,
29 }, 29 },
30 }, 30 },
31 setup(props, { emit }) { 31 setup(props, { emit }) {
src/components/Menu/src/props.ts
1 import type { Menu } from '/@/router/types'; 1 import type { Menu } from '/@/router/types';
2 import type { PropType } from 'vue'; 2 import type { PropType } from 'vue';
3 3
4 -import { MenuModeEnum, MenuTypeEnum, MenuThemeEnum } from '/@/enums/menuEnum'; 4 +import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum';
  5 +import { ThemeEnum } from '/@/enums/appEnum';
5 export const basicProps = { 6 export const basicProps = {
6 items: { 7 items: {
7 type: Array as PropType<Menu[]>, 8 type: Array as PropType<Menu[]>,
@@ -40,7 +41,7 @@ export const basicProps = { @@ -40,7 +41,7 @@ export const basicProps = {
40 }, 41 },
41 theme: { 42 theme: {
42 type: String as PropType<string>, 43 type: String as PropType<string>,
43 - default: MenuThemeEnum.DARK, 44 + default: ThemeEnum.DARK,
44 }, 45 },
45 showLogo: { 46 showLogo: {
46 type: Boolean as PropType<boolean>, 47 type: Boolean as PropType<boolean>,
src/components/Menu/src/types.d.ts
  1 +import { ThemeEnum } from '/@/enums/appEnum';
1 export interface MenuState { 2 export interface MenuState {
2 // 默认选中的列表 3 // 默认选中的列表
3 defaultSelectedKeys: string[]; 4 defaultSelectedKeys: string[];
@@ -6,7 +7,7 @@ export interface MenuState { @@ -6,7 +7,7 @@ export interface MenuState {
6 mode: MenuModeEnum; 7 mode: MenuModeEnum;
7 8
8 // 主题 9 // 主题
9 - theme: ComputedRef<MenuThemeEnum> | MenuThemeEnum; 10 + theme: ComputedRef<ThemeEnum> | ThemeEnum;
10 11
11 // 缩进 12 // 缩进
12 inlineIndent?: number; 13 inlineIndent?: number;
src/components/Table/src/style/index.less
@@ -208,8 +208,8 @@ @@ -208,8 +208,8 @@
208 padding: 16px; 208 padding: 16px;
209 209
210 .ant-form { 210 .ant-form {
211 - padding: 12px 12px 4px 12px;  
212 - margin-bottom: 12px; 211 + padding: 20px 20px 4px 12px;
  212 + margin-bottom: 18px;
213 background: #fff; 213 background: #fff;
214 border-radius: 2px; 214 border-radius: 2px;
215 } 215 }
src/components/registerGlobComp.ts
@@ -33,7 +33,7 @@ import { @@ -33,7 +33,7 @@ import {
33 Result, 33 Result,
34 Empty, 34 Empty,
35 } from 'ant-design-vue'; 35 } from 'ant-design-vue';
36 -import { getApp } from '/@/useApp'; 36 +import { getApp } from '/@/setup/Application';
37 37
38 const compList = [Icon, Button, AntButton.Group, AppFooter]; 38 const compList = [Icon, Button, AntButton.Group, AppFooter];
39 39
src/design/var/index.less
@@ -16,4 +16,4 @@ @@ -16,4 +16,4 @@
16 @page-loading-z-index: 10000; 16 @page-loading-z-index: 10000;
17 17
18 // left-menu 18 // left-menu
19 -@app-menu-item-height: 46px; 19 +@app-menu-item-height: 44px;
src/enums/appEnum.ts
@@ -15,6 +15,13 @@ export enum ThemeModeEnum { @@ -15,6 +15,13 @@ export enum ThemeModeEnum {
15 SEMI_DARK = 'semi-dark-mode', 15 SEMI_DARK = 'semi-dark-mode',
16 } 16 }
17 17
  18 +// menu theme enum
  19 +export enum ThemeEnum {
  20 + DARK = 'dark',
  21 +
  22 + LIGHT = 'light',
  23 +}
  24 +
18 /** 25 /**
19 * 权限模式 26 * 权限模式
20 */ 27 */
src/enums/eventBusEnum.ts deleted 100644 → 0
1 -export const MENU_DRAG_STATE = 'MENU_DRAG_STATE';  
src/enums/menuEnum.ts
@@ -10,13 +10,6 @@ export enum MenuTypeEnum { @@ -10,13 +10,6 @@ export enum MenuTypeEnum {
10 TOP_MENU = 'top-menu', 10 TOP_MENU = 'top-menu',
11 } 11 }
12 12
13 -// menu theme enum  
14 -export enum MenuThemeEnum {  
15 - DARK = 'dark',  
16 -  
17 - LIGHT = 'light',  
18 -}  
19 -  
20 // 折叠触发器位置 13 // 折叠触发器位置
21 export enum TriggerEnum { 14 export enum TriggerEnum {
22 // 不显示 15 // 不显示
src/enums/paginationEnum.ts deleted 100644 → 0
1 -export enum PaginationEnum {  
2 - // Default number of pages  
3 - DEFAULT_PAGE_SIZE = 20,  
4 -}  
src/enums/resultEnum.ts deleted 100644 → 0
1 -export enum ResultEnum {  
2 - SUCCESS = 0,  
3 - ERROR = 1,  
4 - TIMEOUT = 401,  
5 - TYPE = 'success',  
6 -}  
src/hooks/core/onMountedOrActivated.ts 0 → 100644
  1 +import { nextTick, onMounted, onActivated } from 'vue';
  2 +
  3 +export function onMountedOrActivated(hook: Fn) {
  4 + let mounted: boolean;
  5 +
  6 + onMounted(() => {
  7 + hook();
  8 + nextTick(() => {
  9 + mounted = true;
  10 + });
  11 + });
  12 +
  13 + onActivated(() => {
  14 + if (mounted) {
  15 + hook();
  16 + }
  17 + });
  18 +}
src/hooks/core/useExpose.ts 0 → 100644
  1 +import { getCurrentInstance } from 'vue';
  2 +
  3 +// expose public api
  4 +export function useExpose(apis: Record<string, any>) {
  5 + const instance = getCurrentInstance();
  6 + if (instance) {
  7 + Object.assign(instance.proxy, apis);
  8 + }
  9 +}
src/hooks/core/useModel.ts 0 → 100644
  1 +import { toRef, Ref, reactive, customRef, SetupContext, watch, UnwrapRef } from 'vue';
  2 +
  3 +export type ModelProps<U> = Readonly<
  4 + { [props: string]: any } & {
  5 + modelValue?: U;
  6 + }
  7 +>;
  8 +
  9 +export function useModel<T>(
  10 + props: ModelProps<T>,
  11 + context: SetupContext,
  12 + callback?: (val: T | undefined, internalState: { value: UnwrapRef<T | undefined> }) => any
  13 +) {
  14 + const outerModel: Ref<T | undefined> = toRef(props, 'modelValue');
  15 + const internalState = reactive({
  16 + value: props.modelValue,
  17 + });
  18 +
  19 + const internalModel = customRef<UnwrapRef<T> | undefined>((track, trigger) => {
  20 + return {
  21 + get() {
  22 + track();
  23 + return internalState.value;
  24 + },
  25 + set(newVal) {
  26 + if (internalState.value === newVal) return;
  27 + internalState.value = newVal;
  28 + context.emit('update:modelValue', newVal);
  29 + trigger();
  30 + },
  31 + };
  32 + });
  33 +
  34 + watch(outerModel, (val, oldVal) => {
  35 + if (val === oldVal || val === internalState.value) return;
  36 + if (callback) {
  37 + callback(val, internalState);
  38 + return;
  39 + }
  40 + internalState.value = val as UnwrapRef<T> | undefined;
  41 + });
  42 +
  43 + return {
  44 + internalState,
  45 + internalModel,
  46 + };
  47 +}
src/hooks/core/useRefs.ts 0 → 100644
  1 +import { ref, onBeforeUpdate } from 'vue';
  2 +
  3 +export function useRefs() {
  4 + const refs = ref([] as Element[]);
  5 +
  6 + onBeforeUpdate(() => {
  7 + refs.value = [];
  8 + });
  9 +
  10 + const setRefs = (index: number) => (el: Element) => {
  11 + refs.value[index] = el;
  12 + };
  13 +
  14 + return [refs, setRefs];
  15 +}
src/hooks/core/useThrottle.ts
@@ -27,7 +27,7 @@ export function throttle&lt;T extends unknown[]&gt;( @@ -27,7 +27,7 @@ export function throttle&lt;T extends unknown[]&gt;(
27 } 27 }
28 let { immediate = false } = options; 28 let { immediate = false } = options;
29 const { once = false, debounce = false } = options; 29 const { once = false, debounce = false } = options;
30 - let timeoutId: ReturnType<typeof setTimeout> | undefined; 30 + let timeoutId: Nullable<TimeoutHandle>;
31 // Has it been cancelled 31 // Has it been cancelled
32 let cancelled: boolean | null = false; 32 let cancelled: boolean | null = false;
33 /** 33 /**
@@ -36,7 +36,7 @@ export function throttle&lt;T extends unknown[]&gt;( @@ -36,7 +36,7 @@ export function throttle&lt;T extends unknown[]&gt;(
36 function clearTimer() { 36 function clearTimer() {
37 if (timeoutId) { 37 if (timeoutId) {
38 window.clearTimeout(timeoutId); 38 window.clearTimeout(timeoutId);
39 - timeoutId = undefined; 39 + timeoutId = null;
40 } 40 }
41 } 41 }
42 /** cancel exec */ 42 /** cancel exec */
@@ -63,7 +63,7 @@ export function throttle&lt;T extends unknown[]&gt;( @@ -63,7 +63,7 @@ export function throttle&lt;T extends unknown[]&gt;(
63 const callNow = !timeoutId; 63 const callNow = !timeoutId;
64 if (callNow) { 64 if (callNow) {
65 exec(); 65 exec();
66 - timeoutId = undefined; 66 + timeoutId = null;
67 } 67 }
68 } else { 68 } else {
69 debounce && clearTimer(); 69 debounce && clearTimer();
src/hooks/core/useToggle.ts 0 → 100644
  1 +import { ref, watch, Ref, SetupContext } from 'vue';
  2 +
  3 +export function useToggle(internalModel: Ref<unknown>, { emit }: SetupContext) {
  4 + const isActive = ref(!!internalModel.value);
  5 + const isToggled = ref(false);
  6 + watch(internalModel, (val) => {
  7 + isActive.value = !!val;
  8 + });
  9 + watch(isActive, (value) => {
  10 + !!value !== !!internalModel.value && emit('onUpdate:modelValue', value);
  11 + });
  12 + function toggleIt() {
  13 + isToggled.value = !isToggled.value;
  14 + }
  15 + return {
  16 + isActive,
  17 + toggleIt,
  18 + isToggled,
  19 + };
  20 +}
src/hooks/event/useIntersectionObserver.ts 0 → 100644
  1 +import { Ref, watchEffect, ref } from 'vue';
  2 +
  3 +interface IntersectionObserverProps {
  4 + target: Ref<Element | null | undefined>;
  5 + root?: Ref<Element | null | undefined>;
  6 + onIntersect: IntersectionObserverCallback;
  7 + rootMargin?: string;
  8 + threshold?: number;
  9 +}
  10 +
  11 +export function useIntersectionObserver({
  12 + target,
  13 + root,
  14 + onIntersect,
  15 + rootMargin = '0px',
  16 + threshold = 0.1,
  17 +}: IntersectionObserverProps) {
  18 + let cleanup = () => {};
  19 + const observer: Ref<Nullable<IntersectionObserver>> = ref(null);
  20 + const stopEffect = watchEffect(() => {
  21 + cleanup();
  22 +
  23 + observer.value = new IntersectionObserver(onIntersect, {
  24 + root: root ? root.value : null,
  25 + rootMargin,
  26 + threshold,
  27 + });
  28 +
  29 + const current = target.value;
  30 +
  31 + current && observer.value.observe(current);
  32 +
  33 + cleanup = () => {
  34 + if (observer.value) {
  35 + observer.value.disconnect();
  36 + target.value && observer.value.unobserve(target.value);
  37 + }
  38 + };
  39 + });
  40 +
  41 + return {
  42 + observer,
  43 + stop: () => {
  44 + cleanup();
  45 + stopEffect();
  46 + },
  47 + };
  48 +}
src/hooks/web/useClickOutside.ts
1 import { ref, Ref, unref } from 'vue'; 1 import { ref, Ref, unref } from 'vue';
2 import { useEventListener } from '/@/hooks/event/useEventListener'; 2 import { useEventListener } from '/@/hooks/event/useEventListener';
  3 +import { isServer } from '/@/utils/is';
3 export function useClickOutside<T extends HTMLElement>( 4 export function useClickOutside<T extends HTMLElement>(
4 containerRef: Ref<T>, 5 containerRef: Ref<T>,
5 - onClickOutside: (e: MouseEvent | TouchEvent) => void 6 + onClickOutside: (e: MouseEvent | TouchEvent) => void,
  7 + eventName = 'click'
6 ) { 8 ) {
  9 + if (isServer) return;
  10 +
7 const isTouchRef = ref(false); 11 const isTouchRef = ref(false);
  12 +
8 useEventListener({ 13 useEventListener({
9 el: document, 14 el: document,
10 name: 'touchend', 15 name: 'touchend',
@@ -13,7 +18,7 @@ export function useClickOutside&lt;T extends HTMLElement&gt;( @@ -13,7 +18,7 @@ export function useClickOutside&lt;T extends HTMLElement&gt;(
13 }); 18 });
14 useEventListener({ 19 useEventListener({
15 el: document, 20 el: document,
16 - name: 'click', 21 + name: eventName,
17 listener: handler, 22 listener: handler,
18 options: true, 23 options: true,
19 }); 24 });
src/hooks/web/useHeight.ts 0 → 100644
  1 +import { Ref, ref, onMounted, nextTick } from 'vue';
  2 +import { useRect } from '/@/hooks/web/useRect';
  3 +export const useHeight = (element: Element | Ref<Element>) => {
  4 + const height = ref();
  5 +
  6 + onMounted(() => {
  7 + nextTick(() => {
  8 + height.value = useRect(element).height;
  9 + });
  10 + });
  11 +
  12 + return height;
  13 +};
src/hooks/web/useLockPage.ts
1 -import { onUnmounted, watchEffect } from 'vue'; 1 +import { computed, onUnmounted, watchEffect } from 'vue';
2 import { useThrottle } from '/@/hooks/core/useThrottle'; 2 import { useThrottle } from '/@/hooks/core/useThrottle';
3 3
4 import { appStore } from '/@/store/modules/app'; 4 import { appStore } from '/@/store/modules/app';
@@ -7,10 +7,11 @@ import { userStore } from &#39;/@/store/modules/user&#39;; @@ -7,10 +7,11 @@ import { userStore } from &#39;/@/store/modules/user&#39;;
7 export function useLockPage() { 7 export function useLockPage() {
8 let timeId: ReturnType<typeof setTimeout>; 8 let timeId: ReturnType<typeof setTimeout>;
9 9
10 - function clear() { 10 + function clear(): void {
11 window.clearTimeout(timeId); 11 window.clearTimeout(timeId);
12 } 12 }
13 - function resetCalcLockTimeout() { 13 +
  14 + function resetCalcLockTimeout(): void {
14 // not login 15 // not login
15 if (!userStore.getTokenState) { 16 if (!userStore.getTokenState) {
16 clear(); 17 clear();
@@ -28,31 +29,37 @@ export function useLockPage() { @@ -28,31 +29,37 @@ export function useLockPage() {
28 }, lockTime * 60 * 1000); 29 }, lockTime * 60 * 1000);
29 } 30 }
30 31
31 - function lockPage() { 32 + function lockPage(): void {
32 appStore.commitLockInfoState({ 33 appStore.commitLockInfoState({
33 isLock: true, 34 isLock: true,
34 pwd: undefined, 35 pwd: undefined,
35 }); 36 });
36 } 37 }
37 38
38 - watchEffect(() => { 39 + watchEffect((onClean) => {
39 if (userStore.getTokenState) { 40 if (userStore.getTokenState) {
40 resetCalcLockTimeout(); 41 resetCalcLockTimeout();
41 } else { 42 } else {
42 clear(); 43 clear();
43 } 44 }
  45 + onClean(() => {
  46 + clear();
  47 + });
44 }); 48 });
  49 +
45 onUnmounted(() => { 50 onUnmounted(() => {
46 clear(); 51 clear();
47 }); 52 });
  53 +
48 const [keyupFn] = useThrottle(resetCalcLockTimeout, 2000); 54 const [keyupFn] = useThrottle(resetCalcLockTimeout, 2000);
49 55
50 - return {  
51 - registerGlobOnKeyup: keyupFn,  
52 - registerGlobOnMouseMove: keyupFn,  
53 - on: {  
54 - onKeyup: keyupFn,  
55 - onMousemove: keyupFn,  
56 - },  
57 - }; 56 + return computed(() => {
  57 + const openLockPage = appStore.getProjectConfig.lockTime;
  58 + if (openLockPage) {
  59 + return { onKeyup: keyupFn, onMousemove: keyupFn };
  60 + } else {
  61 + clear();
  62 + return {};
  63 + }
  64 + });
58 } 65 }
src/hooks/web/usePermission.ts
  1 +import type { RouteRecordRaw } from 'vue-router';
  2 +
1 import { appStore } from '/@/store/modules/app'; 3 import { appStore } from '/@/store/modules/app';
2 import { permissionStore } from '/@/store/modules/permission'; 4 import { permissionStore } from '/@/store/modules/permission';
  5 +import { userStore } from '/@/store/modules/user';
  6 +
3 import { useTabs } from './useTabs'; 7 import { useTabs } from './useTabs';
4 -import { RoleEnum } from '/@/enums/roleEnum'; 8 +
5 import router, { resetRouter } from '/@/router'; 9 import router, { resetRouter } from '/@/router';
6 -import { userStore } from '/@/store/modules/user';  
7 -import { isArray } from '/@/utils/is';  
8 import { RootRoute } from '/@/router/routes'; 10 import { RootRoute } from '/@/router/routes';
9 -import type { RouteRecordRaw } from 'vue-router'; 11 +
10 import { PermissionModeEnum } from '/@/enums/appEnum'; 12 import { PermissionModeEnum } from '/@/enums/appEnum';
  13 +import { RoleEnum } from '/@/enums/roleEnum';
  14 +
11 import { intersection } from 'lodash-es'; 15 import { intersection } from 'lodash-es';
  16 +import { isArray } from '/@/utils/is';
12 17
  18 +// User permissions related operations
13 export function usePermission() { 19 export function usePermission() {
14 /** 20 /**
15 - * 更换权限模式 21 + * Change permission mode
16 */ 22 */
17 async function togglePermissionMode() { 23 async function togglePermissionMode() {
18 appStore.commitProjectConfigState({ 24 appStore.commitProjectConfigState({
@@ -25,6 +31,10 @@ export function usePermission() { @@ -25,6 +31,10 @@ export function usePermission() {
25 // location.reload(); 31 // location.reload();
26 } 32 }
27 33
  34 + /**
  35 + * Reset and regain authority resource information
  36 + * @param id
  37 + */
28 async function resume(id?: string | number) { 38 async function resume(id?: string | number) {
29 resetRouter(); 39 resetRouter();
30 const routes = await permissionStore.buildRoutesAction(id); 40 const routes = await permissionStore.buildRoutesAction(id);
@@ -41,12 +51,12 @@ export function usePermission() { @@ -41,12 +51,12 @@ export function usePermission() {
41 } 51 }
42 52
43 /** 53 /**
44 - * 角色模式下判断是否显示 54 + * Determine whether there is permission
45 */ 55 */
46 function hasPermission(value?: RoleEnum | RoleEnum[] | string | string[], def = true): boolean { 56 function hasPermission(value?: RoleEnum | RoleEnum[] | string | string[], def = true): boolean {
47 const permMode = appStore.getProjectConfig.permissionMode; 57 const permMode = appStore.getProjectConfig.permissionMode;
48 if (PermissionModeEnum.ROLE === permMode) { 58 if (PermissionModeEnum.ROLE === permMode) {
49 - // !不传默认可见 59 + // Visible by default
50 if (!value) { 60 if (!value) {
51 return def; 61 return def;
52 } 62 }
@@ -56,7 +66,7 @@ export function usePermission() { @@ -56,7 +66,7 @@ export function usePermission() {
56 return (intersection(value, userStore.getRoleListState) as RoleEnum[]).length > 0; 66 return (intersection(value, userStore.getRoleListState) as RoleEnum[]).length > 0;
57 } 67 }
58 if (PermissionModeEnum.BACK === permMode) { 68 if (PermissionModeEnum.BACK === permMode) {
59 - // !不传默认可见 69 + // Visible by default
60 if (!value) { 70 if (!value) {
61 return def; 71 return def;
62 } 72 }
@@ -66,17 +76,18 @@ export function usePermission() { @@ -66,17 +76,18 @@ export function usePermission() {
66 } 76 }
67 return (intersection(value, allCodeList) as string[]).length > 0; 77 return (intersection(value, allCodeList) as string[]).length > 0;
68 } 78 }
69 -  
70 return true; 79 return true;
71 } 80 }
72 81
73 /** 82 /**
74 - * 更新角色 83 + * Change roles
75 * @param roles 84 * @param roles
76 */ 85 */
77 async function changeRole(roles: RoleEnum | RoleEnum[]): Promise<void> { 86 async function changeRole(roles: RoleEnum | RoleEnum[]): Promise<void> {
78 if (appStore.getProjectConfig.permissionMode !== PermissionModeEnum.ROLE) { 87 if (appStore.getProjectConfig.permissionMode !== PermissionModeEnum.ROLE) {
79 - throw new Error('请在配置中将PermissionModeEnum切换为ROLE模式在进行操作!'); 88 + throw new Error(
  89 + 'Please switch PermissionModeEnum to ROLE mode in the configuration to operate!'
  90 + );
80 } 91 }
81 if (!isArray(roles)) { 92 if (!isArray(roles)) {
82 roles = [roles]; 93 roles = [roles];
@@ -86,10 +97,10 @@ export function usePermission() { @@ -86,10 +97,10 @@ export function usePermission() {
86 } 97 }
87 98
88 /** 99 /**
89 - * 100 + * Change menu
90 */ 101 */
91 async function changeMenu(id?: string | number) { 102 async function changeMenu(id?: string | number) {
92 - // 这里传入id是为测试,实际可以不用传,会自动获取登录人的id 103 + // TODO The id passed in here is for testing. Actually, you don’t need to pass it. The id of the login person will be automatically obtained.
93 resume(id); 104 resume(id);
94 } 105 }
95 106
src/hooks/web/useRect.ts 0 → 100644
  1 +import { Ref, unref } from 'vue';
  2 +import { isWindow } from '/@/utils/is';
  3 +
  4 +export const useRect = (elementRef: (Element | Window) | Ref<Element | Window | undefined>) => {
  5 + const element = unref(elementRef);
  6 +
  7 + if (isWindow(element)) {
  8 + const width = element.innerWidth;
  9 + const height = element.innerHeight;
  10 +
  11 + return {
  12 + top: 0,
  13 + left: 0,
  14 + right: width,
  15 + bottom: height,
  16 + width,
  17 + height,
  18 + };
  19 + }
  20 +
  21 + if (element && element.getBoundingClientRect) {
  22 + return element.getBoundingClientRect();
  23 + }
  24 +
  25 + return {
  26 + top: 0,
  27 + left: 0,
  28 + right: 0,
  29 + bottom: 0,
  30 + width: 0,
  31 + height: 0,
  32 + };
  33 +};
src/layouts/default/setting/SettingDrawer.tsx
@@ -35,7 +35,7 @@ interface SwitchOptions { @@ -35,7 +35,7 @@ interface SwitchOptions {
35 } 35 }
36 36
37 interface SelectConfig { 37 interface SelectConfig {
38 - options?: SelectOptions; 38 + options?: LabelValueOptions;
39 def?: any; 39 def?: any;
40 disabled?: boolean; 40 disabled?: boolean;
41 handler?: Fn; 41 handler?: Fn;
src/layouts/default/setting/const.ts
1 -import { ContentEnum, RouterTransitionEnum } from '/@/enums/appEnum';  
2 -import { MenuThemeEnum, TopMenuAlignEnum, TriggerEnum } from '/@/enums/menuEnum'; 1 +import { ContentEnum, RouterTransitionEnum, ThemeEnum } from '/@/enums/appEnum';
  2 +import { TopMenuAlignEnum, TriggerEnum } from '/@/enums/menuEnum';
3 3
4 export enum HandlerEnum { 4 export enum HandlerEnum {
5 CHANGE_LAYOUT, 5 CHANGE_LAYOUT,
@@ -40,11 +40,11 @@ export enum HandlerEnum { @@ -40,11 +40,11 @@ export enum HandlerEnum {
40 40
41 export const themeOptions = [ 41 export const themeOptions = [
42 { 42 {
43 - value: MenuThemeEnum.LIGHT, 43 + value: ThemeEnum.LIGHT,
44 label: '亮色', 44 label: '亮色',
45 }, 45 },
46 { 46 {
47 - value: MenuThemeEnum.DARK, 47 + value: ThemeEnum.DARK,
48 label: '暗色', 48 label: '暗色',
49 }, 49 },
50 ]; 50 ];
src/main.ts
@@ -4,34 +4,40 @@ import router, { setupRouter } from &#39;/@/router&#39;; @@ -4,34 +4,40 @@ import router, { setupRouter } from &#39;/@/router&#39;;
4 import { setupStore } from '/@/store'; 4 import { setupStore } from '/@/store';
5 import { setupAntd } from '/@/setup/ant-design-vue'; 5 import { setupAntd } from '/@/setup/ant-design-vue';
6 import { setupErrorHandle } from '/@/setup/error-handle'; 6 import { setupErrorHandle } from '/@/setup/error-handle';
7 -import { setupDirectives } from '/@/setup/directives'; 7 +import { setupGlobDirectives } from '/@/setup/directives';
8 8
9 -import { isDevMode, isProdMode, isUseMock } from '/@/utils/env';  
10 import { setupProdMockServer } from '../mock/_createProductionServer'; 9 import { setupProdMockServer } from '../mock/_createProductionServer';
11 -import { setApp } from './useApp'; 10 +import { setApp } from '/@/setup/Application';
12 11
13 import App from './App.vue'; 12 import App from './App.vue';
  13 +
  14 +import { isDevMode, isProdMode, isUseMock } from '/@/utils/env';
  15 +
14 import '/@/design/index.less'; 16 import '/@/design/index.less';
15 17
16 const app = createApp(App); 18 const app = createApp(App);
17 19
18 -// ui 20 +// Configure component library
19 setupAntd(app); 21 setupAntd(app);
20 -// router 22 +
  23 +// Configure routing
21 setupRouter(app); 24 setupRouter(app);
22 -// store 25 +
  26 +// Configure vuex store
23 setupStore(app); 27 setupStore(app);
24 28
25 -// Directives  
26 -setupDirectives(app); 29 +// Register global directive
  30 +setupGlobDirectives(app);
27 31
28 -// error-handle 32 +// Configure global error handling
29 setupErrorHandle(app); 33 setupErrorHandle(app);
30 34
  35 +// Mount when the route is ready
31 router.isReady().then(() => { 36 router.isReady().then(() => {
32 app.mount('#app'); 37 app.mount('#app');
33 }); 38 });
34 39
  40 +// The development environment takes effect
35 if (isDevMode()) { 41 if (isDevMode()) {
36 app.config.performance = true; 42 app.config.performance = true;
37 window.__APP__ = app; 43 window.__APP__ = app;
src/settings/projectSetting.ts
1 import type { ProjectConfig } from '/@/types/config'; 1 import type { ProjectConfig } from '/@/types/config';
2 2
3 -import { MenuTypeEnum, MenuThemeEnum, MenuModeEnum, TriggerEnum } from '/@/enums/menuEnum';  
4 -import { ContentEnum, PermissionModeEnum, RouterTransitionEnum } from '/@/enums/appEnum'; 3 +import { MenuTypeEnum, MenuModeEnum, TriggerEnum } from '/@/enums/menuEnum';
  4 +import { ContentEnum, PermissionModeEnum, ThemeEnum, RouterTransitionEnum } from '/@/enums/appEnum';
5 import { primaryColor } from '../../build/config/lessModifyVars'; 5 import { primaryColor } from '../../build/config/lessModifyVars';
6 import { isProdMode } from '/@/utils/env'; 6 import { isProdMode } from '/@/utils/env';
7 7
@@ -39,7 +39,7 @@ const setting: ProjectConfig = { @@ -39,7 +39,7 @@ const setting: ProjectConfig = {
39 // 是否显示顶部 39 // 是否显示顶部
40 show: true, 40 show: true,
41 // theme 41 // theme
42 - theme: MenuThemeEnum.LIGHT, 42 + theme: ThemeEnum.LIGHT,
43 // 开启锁屏功能 43 // 开启锁屏功能
44 useLockPage: true, 44 useLockPage: true,
45 // 显示刷新按钮 45 // 显示刷新按钮
@@ -74,7 +74,7 @@ const setting: ProjectConfig = { @@ -74,7 +74,7 @@ const setting: ProjectConfig = {
74 // 菜单类型 74 // 菜单类型
75 type: MenuTypeEnum.SIDEBAR, 75 type: MenuTypeEnum.SIDEBAR,
76 // 菜单主题 76 // 菜单主题
77 - theme: MenuThemeEnum.DARK, 77 + theme: ThemeEnum.DARK,
78 // 分割菜单 78 // 分割菜单
79 split: false, 79 split: false,
80 // 顶部菜单布局 80 // 顶部菜单布局
src/useApp.ts renamed to src/setup/Application.ts
1 -// Application related functions 1 +/**
  2 + * Application configuration
  3 + */
  4 +
2 import type { ProjectConfig } from '/@/types/config'; 5 import type { ProjectConfig } from '/@/types/config';
3 import type { App } from 'vue'; 6 import type { App } from 'vue';
4 import { computed, ref } from 'vue'; 7 import { computed, ref } from 'vue';
@@ -18,7 +21,9 @@ import { @@ -18,7 +21,9 @@ import {
18 21
19 import { appStore } from '/@/store/modules/app'; 22 import { appStore } from '/@/store/modules/app';
20 23
  24 +// Used to share global app instances
21 let app: App; 25 let app: App;
  26 +
22 export function setApp(_app: App): void { 27 export function setApp(_app: App): void {
23 app = _app; 28 app = _app;
24 } 29 }
@@ -27,7 +32,7 @@ export function getApp(): App { @@ -27,7 +32,7 @@ export function getApp(): App {
27 return app; 32 return app;
28 } 33 }
29 34
30 -// TODO 主题切换 35 +// TODO Theme switching
31 export function useThemeMode(mode: ThemeModeEnum) { 36 export function useThemeMode(mode: ThemeModeEnum) {
32 const modeRef = ref(mode); 37 const modeRef = ref(mode);
33 const html = document.documentElement; 38 const html = document.documentElement;
@@ -43,7 +48,7 @@ export function useThemeMode(mode: ThemeModeEnum) { @@ -43,7 +48,7 @@ export function useThemeMode(mode: ThemeModeEnum) {
43 } 48 }
44 49
45 // Initial project configuration 50 // Initial project configuration
46 -export function useInitAppConfigStore() { 51 +export function initAppConfigStore() {
47 let projCfg: ProjectConfig = getLocal(PROJ_CFG_KEY) as ProjectConfig; 52 let projCfg: ProjectConfig = getLocal(PROJ_CFG_KEY) as ProjectConfig;
48 if (!projCfg) { 53 if (!projCfg) {
49 projCfg = projectSetting; 54 projCfg = projectSetting;
@@ -67,8 +72,8 @@ export function useInitAppConfigStore() { @@ -67,8 +72,8 @@ export function useInitAppConfigStore() {
67 appStore.commitProjectConfigState(projCfg); 72 appStore.commitProjectConfigState(projCfg);
68 } 73 }
69 74
70 -// Config Provider  
71 -export function useConfigProvider() { 75 +// antdv Config Provider
  76 +export function getConfigProvider() {
72 function transformCellText({ text }: { text: string }) { 77 function transformCellText({ text }: { text: string }) {
73 if (isNull(text) || isUnDef(text)) { 78 if (isNull(text) || isUnDef(text)) {
74 return ' - '; 79 return ' - ';
src/setup/ant-design-vue/index.ts
1 // Load on demand 1 // Load on demand
2 - 2 +// This module only introduces components globally before login
3 import type { App } from 'vue'; 3 import type { App } from 'vue';
4 4
5 import { 5 import {
src/setup/ant-design-vue/spin.less deleted 100644 → 0
1 -@import (reference) '../../design/index.less';  
2 -  
3 -.app-svg-loading {  
4 - position: relative;  
5 - width: auto;  
6 -  
7 - &__tip {  
8 - display: block;  
9 - margin-top: 4px;  
10 - font-size: 13px;  
11 - color: #303133;  
12 - text-align: center;  
13 - }  
14 -}  
src/setup/ant-design-vue/spin.tsx
1 import { Spin } from 'ant-design-vue'; 1 import { Spin } from 'ant-design-vue';
2 import svgImg from '/@/assets/images/loading.svg'; 2 import svgImg from '/@/assets/images/loading.svg';
3 3
4 -import './spin.less';  
5 Spin.setDefaultIndicator({ 4 Spin.setDefaultIndicator({
6 indicator: () => { 5 indicator: () => {
7 return ( 6 return (
8 - <div class="app-svg-loading"> 7 + <div
  8 + class="app-svg-loading"
  9 + style={{
  10 + position: 'relative',
  11 + width: 'auto',
  12 + }}
  13 + >
9 <img src={svgImg} alt="" height="32" width="32" class="g-loading" /> 14 <img src={svgImg} alt="" height="32" width="32" class="g-loading" />
10 </div> 15 </div>
11 ); 16 );
src/setup/application.ts 0 → 100644
  1 +/**
  2 + * Application configuration
  3 + */
  4 +
  5 +import type { ProjectConfig } from '/@/types/config';
  6 +import type { App } from 'vue';
  7 +import { computed, ref } from 'vue';
  8 +
  9 +import { ThemeModeEnum } from '/@/enums/appEnum';
  10 +import { PROJ_CFG_KEY } from '/@/enums/cacheEnum';
  11 +
  12 +import projectSetting from '/@/settings/projectSetting';
  13 +import { getLocal } from '/@/utils/helper/persistent';
  14 +import { isUnDef, isNull } from '/@/utils/is';
  15 +import {
  16 + updateGrayMode,
  17 + updateColorWeak,
  18 + updateHeaderBgColor,
  19 + updateSidebarBgColor,
  20 +} from '/@/setup/theme';
  21 +
  22 +import { appStore } from '/@/store/modules/app';
  23 +
  24 +// Used to share global app instances
  25 +let app: App;
  26 +
  27 +export function setApp(_app: App): void {
  28 + app = _app;
  29 +}
  30 +
  31 +export function getApp(): App {
  32 + return app;
  33 +}
  34 +
  35 +// TODO Theme switching
  36 +export function useThemeMode(mode: ThemeModeEnum) {
  37 + const modeRef = ref(mode);
  38 + const html = document.documentElement;
  39 + const clsList = html.classList;
  40 +
  41 + const change = () => {
  42 + clsList.contains(mode) ? clsList.remove(mode) : clsList.add(mode);
  43 + };
  44 + return {
  45 + runChangeThemeMode: change,
  46 + mode: computed(() => modeRef.value),
  47 + };
  48 +}
  49 +
  50 +// Initial project configuration
  51 +export function initAppConfigStore() {
  52 + let projCfg: ProjectConfig = getLocal(PROJ_CFG_KEY) as ProjectConfig;
  53 + if (!projCfg) {
  54 + projCfg = projectSetting;
  55 + }
  56 + const { colorWeak, grayMode, headerBgColor, menuBgColor } = projCfg;
  57 + try {
  58 + // if (
  59 + // themeColor !== primaryColor &&
  60 + // themeColor &&
  61 + // process.env.VUE_APP_USE_THEME_REPLACER !== 'TRUE'
  62 + // ) {
  63 + // updateTheme(themeColor);
  64 + // }
  65 + headerBgColor && updateHeaderBgColor(headerBgColor);
  66 + menuBgColor && updateSidebarBgColor(menuBgColor);
  67 + grayMode && updateGrayMode(grayMode);
  68 + colorWeak && updateColorWeak(colorWeak);
  69 + } catch (error) {
  70 + console.log(error);
  71 + }
  72 + appStore.commitProjectConfigState(projCfg);
  73 +}
  74 +
  75 +// antdv Config Provider
  76 +export function getConfigProvider() {
  77 + function transformCellText({ text }: { text: string }) {
  78 + if (isNull(text) || isUnDef(text)) {
  79 + return ' - ';
  80 + }
  81 + return text;
  82 + }
  83 + return {
  84 + transformCellText,
  85 + };
  86 +}
src/setup/directives/index.ts
  1 +/**
  2 + * Configure and register global directives
  3 + */
1 import type { App } from 'vue'; 4 import type { App } from 'vue';
2 import { setupPermissionDirective } from './permission'; 5 import { setupPermissionDirective } from './permission';
3 -export function setupDirectives(app: App) { 6 +
  7 +export function setupGlobDirectives(app: App) {
4 setupPermissionDirective(app); 8 setupPermissionDirective(app);
5 } 9 }
src/setup/directives/permission.ts
  1 +/**
  2 + * Global authority directive
  3 + * Used for fine-grained control of component permissions
  4 + * @Example v-auth="RoleEnum.TEST"
  5 + */
  6 +import type { App, Directive, DirectiveBinding } from 'vue';
  7 +
1 import { appStore } from '/@/store/modules/app'; 8 import { appStore } from '/@/store/modules/app';
2 -import type { App } from 'vue';  
3 import { usePermission } from '/@/hooks/web/usePermission'; 9 import { usePermission } from '/@/hooks/web/usePermission';
4 import { PermissionModeEnum } from '/@/enums/appEnum'; 10 import { PermissionModeEnum } from '/@/enums/appEnum';
5 const { hasPermission } = usePermission(); 11 const { hasPermission } = usePermission();
@@ -13,18 +19,28 @@ function isAuth(el: Element, binding: any) { @@ -13,18 +19,28 @@ function isAuth(el: Element, binding: any) {
13 } 19 }
14 } 20 }
15 } 21 }
  22 +
16 function isBackMode() { 23 function isBackMode() {
17 return appStore.getProjectConfig.permissionMode === PermissionModeEnum.BACK; 24 return appStore.getProjectConfig.permissionMode === PermissionModeEnum.BACK;
18 } 25 }
  26 +
  27 +const mounted = (el: Element, binding: DirectiveBinding<any>) => {
  28 + if (isBackMode()) return;
  29 + isAuth(el, binding);
  30 +};
  31 +
  32 +const updated = (el: Element, binding: DirectiveBinding<any>) => {
  33 + if (!isBackMode()) return;
  34 + isAuth(el, binding);
  35 +};
  36 +
  37 +const authDirective: Directive = {
  38 + mounted,
  39 + updated,
  40 +};
  41 +
19 export function setupPermissionDirective(app: App) { 42 export function setupPermissionDirective(app: App) {
20 - app.directive('auth', {  
21 - mounted(el: Element, binding) {  
22 - if (isBackMode()) return;  
23 - isAuth(el, binding);  
24 - },  
25 - updated(el: Element, binding) {  
26 - if (!isBackMode()) return;  
27 - isAuth(el, binding);  
28 - },  
29 - }); 43 + app.directive('auth', authDirective);
30 } 44 }
  45 +
  46 +export default authDirective;
src/setup/directives/repeatClick.ts
  1 +/**
  2 + * Prevent repeated clicks
  3 + * @Example v-repeat-click="()=>{}"
  4 + */
1 import { on, once } from '/@/utils/domUtils'; 5 import { on, once } from '/@/utils/domUtils';
  6 +import type { Directive, DirectiveBinding } from 'vue';
2 7
3 -export default {  
4 - beforeMount(el: Element, binding: any) {  
5 - let interval: ReturnType<typeof setInterval> | null = null; 8 +const repeatDirective: Directive = {
  9 + beforeMount(el: Element, binding: DirectiveBinding<any>) {
  10 + let interval: Nullable<IntervalHandle> = null;
6 let startTime = 0; 11 let startTime = 0;
7 - const handler = () => binding.value && binding.value();  
8 - const clear = () => { 12 + const handler = (): void => binding.value && binding.value();
  13 + const clear = (): void => {
9 if (Date.now() - startTime < 100) { 14 if (Date.now() - startTime < 100) {
10 handler(); 15 handler();
11 } 16 }
@@ -13,7 +18,7 @@ export default { @@ -13,7 +18,7 @@ export default {
13 interval = null; 18 interval = null;
14 }; 19 };
15 20
16 - on(el, 'mousedown', (e) => { 21 + on(el, 'mousedown', (e: MouseEvent): void => {
17 if ((e as any).button !== 0) return; 22 if ((e as any).button !== 0) return;
18 startTime = Date.now(); 23 startTime = Date.now();
19 once(document as any, 'mouseup', clear); 24 once(document as any, 'mouseup', clear);
@@ -22,3 +27,5 @@ export default { @@ -22,3 +27,5 @@ export default {
22 }); 27 });
23 }, 28 },
24 }; 29 };
  30 +
  31 +export default repeatDirective;
src/setup/error-handle/index.ts
  1 +/**
  2 + * Used to configure the global error handling function, which can monitor vue errors, script errors, static resource errors and Promise errors
  3 + */
  4 +
1 import { errorStore, ErrorInfo } from '/@/store/modules/error'; 5 import { errorStore, ErrorInfo } from '/@/store/modules/error';
2 import { useSetting } from '/@/hooks/core/useSetting'; 6 import { useSetting } from '/@/hooks/core/useSetting';
3 import { ErrorTypeEnum } from '/@/enums/exceptionEnum'; 7 import { ErrorTypeEnum } from '/@/enums/exceptionEnum';
4 import { App } from 'vue'; 8 import { App } from 'vue';
  9 +
  10 +/**
  11 + * Handling error stack information
  12 + * @param error
  13 + */
5 function processStackMsg(error: Error) { 14 function processStackMsg(error: Error) {
6 if (!error.stack) { 15 if (!error.stack) {
7 return ''; 16 return '';
8 } 17 }
9 let stack = error.stack 18 let stack = error.stack
10 - .replace(/\n/gi, '') // 去掉换行,节省传输内容大小  
11 - .replace(/\bat\b/gi, '@') // chrome中是at,ff中是@  
12 - .split('@') // 以@分割信息  
13 - .slice(0, 9) // 最大堆栈长度(Error.stackTraceLimit = 10),所以只取前10条  
14 - .map((v) => v.replace(/^\s*|\s*$/g, '')) // 去除多余空格  
15 - .join('~') // 手动添加分隔符,便于后期展示  
16 - .replace(/\?[^:]+/gi, ''); // 去除js文件链接的多余参数(?x=1之类) 19 + .replace(/\n/gi, '') // Remove line breaks to save the size of the transmitted content
  20 + .replace(/\bat\b/gi, '@') // At in chrome, @ in ff
  21 + .split('@') // Split information with @
  22 + .slice(0, 9) // The maximum stack length (Error.stackTraceLimit = 10), so only take the first 10
  23 + .map((v) => v.replace(/^\s*|\s*$/g, '')) // Remove extra spaces
  24 + .join('~') // Manually add separators for later display
  25 + .replace(/\?[^:]+/gi, ''); // Remove redundant parameters of js file links (?x=1 and the like)
17 const msg = error.toString(); 26 const msg = error.toString();
18 if (stack.indexOf(msg) < 0) { 27 if (stack.indexOf(msg) < 0) {
19 stack = msg + '@' + stack; 28 stack = msg + '@' + stack;
@@ -21,6 +30,10 @@ function processStackMsg(error: Error) { @@ -21,6 +30,10 @@ function processStackMsg(error: Error) {
21 return stack; 30 return stack;
22 } 31 }
23 32
  33 +/**
  34 + * get comp name
  35 + * @param vm
  36 + */
24 function formatComponentName(vm: any) { 37 function formatComponentName(vm: any) {
25 if (vm.$root === vm) { 38 if (vm.$root === vm) {
26 return { 39 return {
@@ -43,6 +56,10 @@ function formatComponentName(vm: any) { @@ -43,6 +56,10 @@ function formatComponentName(vm: any) {
43 }; 56 };
44 } 57 }
45 58
  59 +/**
  60 + * Configure Vue error handling function
  61 + */
  62 +
46 function vueErrorHandler(err: Error, vm: any, info: string) { 63 function vueErrorHandler(err: Error, vm: any, info: string) {
47 const { name, path } = formatComponentName(vm); 64 const { name, path } = formatComponentName(vm);
48 errorStore.commitErrorInfoState({ 65 errorStore.commitErrorInfoState({
@@ -56,6 +73,9 @@ function vueErrorHandler(err: Error, vm: any, info: string) { @@ -56,6 +73,9 @@ function vueErrorHandler(err: Error, vm: any, info: string) {
56 }); 73 });
57 } 74 }
58 75
  76 +/**
  77 + * Configure script error handling function
  78 + */
59 export function scriptErrorHandler( 79 export function scriptErrorHandler(
60 event: Event | string, 80 event: Event | string,
61 source?: string, 81 source?: string,
@@ -86,6 +106,9 @@ export function scriptErrorHandler( @@ -86,6 +106,9 @@ export function scriptErrorHandler(
86 return true; 106 return true;
87 } 107 }
88 108
  109 +/**
  110 + * Configure Promise error handling function
  111 + */
89 function registerPromiseErrorHandler() { 112 function registerPromiseErrorHandler() {
90 window.addEventListener( 113 window.addEventListener(
91 'unhandledrejection', 114 'unhandledrejection',
@@ -104,8 +127,11 @@ function registerPromiseErrorHandler() { @@ -104,8 +127,11 @@ function registerPromiseErrorHandler() {
104 ); 127 );
105 } 128 }
106 129
  130 +/**
  131 + * Configure monitoring resource loading error handling function
  132 + */
107 function registerResourceErrorHandler() { 133 function registerResourceErrorHandler() {
108 - // 监控资源加载错误(img,script,css,以及jsonp) 134 + // Monitoring resource loading error(img,script,css,and jsonp)
109 window.addEventListener( 135 window.addEventListener(
110 'error', 136 'error',
111 function (e: Event) { 137 function (e: Event) {
@@ -129,19 +155,23 @@ function registerResourceErrorHandler() { @@ -129,19 +155,23 @@ function registerResourceErrorHandler() {
129 ); 155 );
130 } 156 }
131 157
  158 +/**
  159 + * Configure global error handling
  160 + * @param app
  161 + */
132 export function setupErrorHandle(app: App) { 162 export function setupErrorHandle(app: App) {
133 const { projectSetting } = useSetting(); 163 const { projectSetting } = useSetting();
134 const { useErrorHandle } = projectSetting; 164 const { useErrorHandle } = projectSetting;
135 - if (!useErrorHandle) {  
136 - return;  
137 - }  
138 - // Vue异常监控; 165 + if (!useErrorHandle) return;
  166 + // Vue exception monitoring;
139 app.config.errorHandler = vueErrorHandler; 167 app.config.errorHandler = vueErrorHandler;
140 - // js错误 168 +
  169 + // script error
141 window.onerror = scriptErrorHandler; 170 window.onerror = scriptErrorHandler;
142 - // promise 异常 171 +
  172 + // promise exception
143 registerPromiseErrorHandler(); 173 registerPromiseErrorHandler();
144 174
145 - // 静态资源异常 175 + // Static resource exception
146 registerResourceErrorHandler(); 176 registerResourceErrorHandler();
147 } 177 }
src/setup/theme/index.ts
1 import { isHexColor, colorIsDark, lighten, darken } from '/@/utils/color'; 1 import { isHexColor, colorIsDark, lighten, darken } from '/@/utils/color';
2 import { appStore } from '/@/store/modules/app'; 2 import { appStore } from '/@/store/modules/app';
3 -import { MenuThemeEnum } from '/@/enums/menuEnum'; 3 +import { ThemeEnum } from '/@/enums/appEnum';
4 4
5 const HEADER_BG_COLOR_VAR = '--header-bg-color'; 5 const HEADER_BG_COLOR_VAR = '--header-bg-color';
6 const HEADER_BG_HOVER_COLOR_VAR = '--header-bg-hover-color'; 6 const HEADER_BG_HOVER_COLOR_VAR = '--header-bg-hover-color';
@@ -22,14 +22,26 @@ function toggleClass(flag: boolean, clsName: string) { @@ -22,14 +22,26 @@ function toggleClass(flag: boolean, clsName: string) {
22 document.body.className = flag ? `${className} ${clsName} ` : className; 22 document.body.className = flag ? `${className} ${clsName} ` : className;
23 } 23 }
24 24
  25 +/**
  26 + * Change the status of the project's color weakness mode
  27 + * @param gray
  28 + */
25 export const updateColorWeak = (colorWeak: boolean) => { 29 export const updateColorWeak = (colorWeak: boolean) => {
26 toggleClass(colorWeak, 'color-weak'); 30 toggleClass(colorWeak, 'color-weak');
27 }; 31 };
28 32
  33 +/**
  34 + * Change project gray mode status
  35 + * @param gray
  36 + */
29 export const updateGrayMode = (gray: boolean) => { 37 export const updateGrayMode = (gray: boolean) => {
30 toggleClass(gray, 'gray-mode'); 38 toggleClass(gray, 'gray-mode');
31 }; 39 };
32 40
  41 +/**
  42 + * Change the background color of the top header
  43 + * @param color
  44 + */
33 export function updateHeaderBgColor(color: string) { 45 export function updateHeaderBgColor(color: string) {
34 if (!isHexColor(color)) return; 46 if (!isHexColor(color)) return;
35 // bg color 47 // bg color
@@ -40,15 +52,20 @@ export function updateHeaderBgColor(color: string) { @@ -40,15 +52,20 @@ export function updateHeaderBgColor(color: string) {
40 setCssVar(HEADER_BG_HOVER_COLOR_VAR, hoverColor); 52 setCssVar(HEADER_BG_HOVER_COLOR_VAR, hoverColor);
41 setCssVar(HEADER_MENU_ACTIVE_BG_COLOR_VAR, hoverColor); 53 setCssVar(HEADER_MENU_ACTIVE_BG_COLOR_VAR, hoverColor);
42 54
  55 + // Determine the depth of the color value and automatically switch the theme
43 const isDark = colorIsDark(color); 56 const isDark = colorIsDark(color);
44 57
45 appStore.commitProjectConfigState({ 58 appStore.commitProjectConfigState({
46 headerSetting: { 59 headerSetting: {
47 - theme: isDark ? MenuThemeEnum.DARK : MenuThemeEnum.LIGHT, 60 + theme: isDark ? ThemeEnum.DARK : ThemeEnum.LIGHT,
48 }, 61 },
49 }); 62 });
50 } 63 }
51 64
  65 +/**
  66 + * Change the background color of the left menu
  67 + * @param color bg color
  68 + */
52 export function updateSidebarBgColor(color: string) { 69 export function updateSidebarBgColor(color: string) {
53 if (!isHexColor(color)) return; 70 if (!isHexColor(color)) return;
54 71
@@ -58,11 +75,12 @@ export function updateSidebarBgColor(color: string) { @@ -58,11 +75,12 @@ export function updateSidebarBgColor(color: string) {
58 setCssVar(SIDER_LIGHTEN_2_BG_COLOR, lighten(color, 8)); 75 setCssVar(SIDER_LIGHTEN_2_BG_COLOR, lighten(color, 8));
59 76
60 // only #ffffff is light 77 // only #ffffff is light
  78 + // Only when the background color is #fff, the theme of the menu will be changed to light
61 const isLight = ['#fff', '#ffffff'].includes(color.toLowerCase()); 79 const isLight = ['#fff', '#ffffff'].includes(color.toLowerCase());
62 80
63 appStore.commitProjectConfigState({ 81 appStore.commitProjectConfigState({
64 menuSetting: { 82 menuSetting: {
65 - theme: isLight ? MenuThemeEnum.LIGHT : MenuThemeEnum.DARK, 83 + theme: isLight ? ThemeEnum.LIGHT : ThemeEnum.DARK,
66 }, 84 },
67 }); 85 });
68 } 86 }
src/store/index.ts
1 import type { App } from 'vue'; 1 import type { App } from 'vue';
2 -import {  
3 - createStore,  
4 - // createLogger, Plugin  
5 -} from 'vuex'; 2 +import { createStore, createLogger, Plugin } from 'vuex';
6 import { config } from 'vuex-module-decorators'; 3 import { config } from 'vuex-module-decorators';
7 import { isDevMode } from '/@/utils/env'; 4 import { isDevMode } from '/@/utils/env';
8 5
9 config.rawError = true; 6 config.rawError = true;
10 const isDev = isDevMode(); 7 const isDev = isDevMode();
11 -// const plugins: Plugin<any>[] = isDev ? [createLogger()] : []; 8 +const plugins: Plugin<any>[] = isDev ? [createLogger()] : [];
12 9
13 const store = createStore({ 10 const store = createStore({
14 - modules: {}, 11 + // modules: {},
15 strict: isDev, 12 strict: isDev,
16 - // plugins, 13 + plugins,
17 }); 14 });
18 15
19 export function setupStore(app: App<Element>) { 16 export function setupStore(app: App<Element>) {
src/types/config.d.ts
1 // 左侧菜单, 顶部菜单 1 // 左侧菜单, 顶部菜单
2 -import { MenuTypeEnum, MenuModeEnum, MenuThemeEnum, TriggerEnum } from '/@/enums/menuEnum';  
3 -import { ContentEnum, PermissionModeEnum, RouterTransitionEnum } from '/@/enums/appEnum'; 2 +import { MenuTypeEnum, MenuModeEnum, TriggerEnum } from '/@/enums/menuEnum';
  3 +import { ContentEnum, PermissionModeEnum, ThemeEnum, RouterTransitionEnum } from '/@/enums/appEnum';
4 4
5 export interface MessageSetting { 5 export interface MessageSetting {
6 title: string; 6 title: string;
@@ -20,7 +20,7 @@ export interface MenuSetting { @@ -20,7 +20,7 @@ export interface MenuSetting {
20 menuWidth: number; 20 menuWidth: number;
21 mode: MenuModeEnum; 21 mode: MenuModeEnum;
22 type: MenuTypeEnum; 22 type: MenuTypeEnum;
23 - theme: MenuThemeEnum; 23 + theme: ThemeEnum;
24 topMenuAlign: 'start' | 'center' | 'end'; 24 topMenuAlign: 'start' | 'center' | 'end';
25 collapsedShowSearch: boolean; 25 collapsedShowSearch: boolean;
26 trigger: TriggerEnum; 26 trigger: TriggerEnum;
@@ -41,7 +41,7 @@ export interface MultiTabsSetting { @@ -41,7 +41,7 @@ export interface MultiTabsSetting {
41 export interface HeaderSetting { 41 export interface HeaderSetting {
42 fixed: boolean; 42 fixed: boolean;
43 show: boolean; 43 show: boolean;
44 - theme: MenuThemeEnum; 44 + theme: ThemeEnum;
45 // 显示刷新按钮 45 // 显示刷新按钮
46 showRedo: boolean; 46 showRedo: boolean;
47 // 显示全屏按钮 47 // 显示全屏按钮
src/types/event.d.ts
1 -/**  
2 - * @description: 输入框事件  
3 - */  
4 declare interface ChangeEvent extends Event { 1 declare interface ChangeEvent extends Event {
5 target: HTMLInputElement; 2 target: HTMLInputElement;
6 } 3 }
7 -interface WheelEvent { 4 +
  5 +declare interface WheelEvent {
8 path?: EventTarget[]; 6 path?: EventTarget[];
9 } 7 }
src/types/global.d.ts
@@ -6,7 +6,6 @@ declare interface PromiseFn&lt;T = any, R = T&gt; { @@ -6,7 +6,6 @@ declare interface PromiseFn&lt;T = any, R = T&gt; {
6 (...arg: T[]): Promise<R>; 6 (...arg: T[]): Promise<R>;
7 } 7 }
8 8
9 -// 任意对象  
10 declare interface IObj<T = any> { 9 declare interface IObj<T = any> {
11 [key: string]: T; 10 [key: string]: T;
12 [key: number]: T; 11 [key: number]: T;
@@ -34,19 +33,11 @@ declare type Indexable&lt;T = any&gt; = { @@ -34,19 +33,11 @@ declare type Indexable&lt;T = any&gt; = {
34 33
35 declare type Hash<T> = Indexable<T>; 34 declare type Hash<T> = Indexable<T>;
36 35
37 -// declare type DeepPartial<T> = {  
38 -// [P in keyof T]?: T[P] extends (infer U)[]  
39 -// ? RecursivePartial<U>[]  
40 -// : T[P] extends object  
41 -// ? RecursivePartial<T[P]>  
42 -// : T[P];  
43 -// };  
44 -  
45 declare type DeepPartial<T> = { 36 declare type DeepPartial<T> = {
46 [P in keyof T]?: DeepPartial<T[P]>; 37 [P in keyof T]?: DeepPartial<T[P]>;
47 }; 38 };
48 39
49 -declare type SelectOptions = { 40 +declare type LabelValueOptions = {
50 label: string; 41 label: string;
51 value: any; 42 value: any;
52 }[]; 43 }[];
@@ -54,3 +45,7 @@ declare type SelectOptions = { @@ -54,3 +45,7 @@ declare type SelectOptions = {
54 declare type EmitType = (event: string, ...args: any[]) => void; 45 declare type EmitType = (event: string, ...args: any[]) => void;
55 46
56 declare type TargetContext = '_self' | '_blank'; 47 declare type TargetContext = '_self' | '_blank';
  48 +
  49 +declare type TimeoutHandle = ReturnType<typeof setTimeout>;
  50 +
  51 +declare type IntervalHandle = ReturnType<typeof setInterval>;
src/types/window.d.ts
@@ -2,6 +2,7 @@ import type { App } from &#39;vue&#39;; @@ -2,6 +2,7 @@ import type { App } from &#39;vue&#39;;
2 2
3 declare global { 3 declare global {
4 declare interface Window { 4 declare interface Window {
  5 + // Global vue app instance
5 __APP__: App<Element>; 6 __APP__: App<Element>;
6 } 7 }
7 } 8 }
src/utils/auth/index.ts
1 import { userStore } from '/@/store/modules/user'; 1 import { userStore } from '/@/store/modules/user';
2 -// import { permissionStore } from '@/store/modules/permission';  
3 -// import { RoleEnum } from '@/enums/roleEnum';  
4 2
5 /** 3 /**
6 - * @description: 获取token 4 + * @description: Get token
  5 + * @return jwt token
7 */ 6 */
8 export function getToken(): string { 7 export function getToken(): string {
9 return userStore.getTokenState; 8 return userStore.getTokenState;
src/utils/event/triggerWindowResizeEvent.ts
@@ -4,6 +4,6 @@ @@ -4,6 +4,6 @@
4 export function triggerWindowResize() { 4 export function triggerWindowResize() {
5 const event = document.createEvent('HTMLEvents'); 5 const event = document.createEvent('HTMLEvents');
6 event.initEvent('resize', true, true); 6 event.initEvent('resize', true, true);
7 - (event as any).eventType = 'message'; 7 + (event as ChangeEvent).eventType = 'message';
8 window.dispatchEvent(event); 8 window.dispatchEvent(event);
9 } 9 }
src/utils/is.ts
@@ -50,10 +50,6 @@ export function isArray(val: unknown): val is Array&lt;any&gt; { @@ -50,10 +50,6 @@ export function isArray(val: unknown): val is Array&lt;any&gt; {
50 return val && Array.isArray(val); 50 return val && Array.isArray(val);
51 } 51 }
52 52
53 -export const isClient = () => {  
54 - return typeof window !== 'undefined';  
55 -};  
56 -  
57 export const isWindow = (val: any): val is Window => { 53 export const isWindow = (val: any): val is Window => {
58 return typeof window !== 'undefined' && is(val, 'Window'); 54 return typeof window !== 'undefined' && is(val, 'Window');
59 }; 55 };
@@ -64,6 +60,8 @@ export const isElement = (val: unknown): val is Element =&gt; { @@ -64,6 +60,8 @@ export const isElement = (val: unknown): val is Element =&gt; {
64 60
65 export const isServer = typeof window === 'undefined'; 61 export const isServer = typeof window === 'undefined';
66 62
  63 +export const isClient = typeof window !== 'undefined';
  64 +
67 export function isImageDom(o: Element) { 65 export function isImageDom(o: Element) {
68 return o && ['IMAGE', 'IMG'].includes(o.tagName); 66 return o && ['IMAGE', 'IMG'].includes(o.tagName);
69 } 67 }
src/utils/log.ts
1 const projectName = import.meta.env.VITE_GLOB_APP_TITLE; 1 const projectName = import.meta.env.VITE_GLOB_APP_TITLE;
  2 +
2 export function warn(message: string) { 3 export function warn(message: string) {
3 console.warn(`[${projectName} warn]:${message}`); 4 console.warn(`[${projectName} warn]:${message}`);
4 } 5 }
src/views/dashboard/welcome/index.vue
@@ -9,9 +9,6 @@ @@ -9,9 +9,6 @@
9 export default defineComponent({ 9 export default defineComponent({
10 name: 'Welcome', 10 name: 'Welcome',
11 components: { House }, 11 components: { House },
12 - setup() {  
13 - return {};  
14 - },  
15 }); 12 });
16 </script> 13 </script>
17 <style lang="less" scoped> 14 <style lang="less" scoped>
src/views/demo/page/form/high/data.ts
1 import { FormSchema } from '/@/components/Form'; 1 import { FormSchema } from '/@/components/Form';
2 2
3 -const basicOptions: SelectOptions = [ 3 +const basicOptions: LabelValueOptions = [
4 { 4 {
5 label: '付晓晓', 5 label: '付晓晓',
6 value: '1', 6 value: '1',
@@ -11,7 +11,7 @@ const basicOptions: SelectOptions = [ @@ -11,7 +11,7 @@ const basicOptions: SelectOptions = [
11 }, 11 },
12 ]; 12 ];
13 13
14 -const storeTypeOptions: SelectOptions = [ 14 +const storeTypeOptions: LabelValueOptions = [
15 { 15 {
16 label: '私密', 16 label: '私密',
17 value: '1', 17 value: '1',
src/views/demo/permission/back/Btn.vue
@@ -58,7 +58,7 @@ @@ -58,7 +58,7 @@
58 import { Alert, Divider } from 'ant-design-vue'; 58 import { Alert, Divider } from 'ant-design-vue';
59 import CurrentPermissionMode from '../CurrentPermissionMode.vue'; 59 import CurrentPermissionMode from '../CurrentPermissionMode.vue';
60 import { usePermission } from '/@/hooks/web/usePermission'; 60 import { usePermission } from '/@/hooks/web/usePermission';
61 - import Authority from '/@/components/Authority'; 61 + import { Authority } from '/@/components/Authority';
62 import { getPermCodeByUserId } from '/@/api/sys/user'; 62 import { getPermCodeByUserId } from '/@/api/sys/user';
63 import { permissionStore } from '/@/store/modules/permission'; 63 import { permissionStore } from '/@/store/modules/permission';
64 import { PermissionModeEnum } from '/@/enums/appEnum'; 64 import { PermissionModeEnum } from '/@/enums/appEnum';
src/views/demo/permission/front/Btn.vue
@@ -65,7 +65,7 @@ @@ -65,7 +65,7 @@
65 import { userStore } from '/@/store/modules/user'; 65 import { userStore } from '/@/store/modules/user';
66 import { RoleEnum } from '/@/enums/roleEnum'; 66 import { RoleEnum } from '/@/enums/roleEnum';
67 import { usePermission } from '/@/hooks/web/usePermission'; 67 import { usePermission } from '/@/hooks/web/usePermission';
68 - import Authority from '/@/components/Authority'; 68 + import { Authority } from '/@/components/Authority';
69 69
70 export default defineComponent({ 70 export default defineComponent({
71 components: { Alert, CurrentPermissionMode, Divider, Authority }, 71 components: { Alert, CurrentPermissionMode, Divider, Authority },
yarn.lock
@@ -1050,10 +1050,10 @@ @@ -1050,10 +1050,10 @@
1050 resolved "https://registry.npmjs.org/@iconify/iconify/-/iconify-2.0.0-rc.2.tgz#c4a95ddc06ca9b9496df03604e66fdefb39f4c4b" 1050 resolved "https://registry.npmjs.org/@iconify/iconify/-/iconify-2.0.0-rc.2.tgz#c4a95ddc06ca9b9496df03604e66fdefb39f4c4b"
1051 integrity sha512-BybEHU5/I9EQ0CcwKAqmreZ2bMnAXrqLCTptAc6vPetHMbrXdZfejP5mt57e/8PNSt/qE7BHniU5PCYA+PGIHw== 1051 integrity sha512-BybEHU5/I9EQ0CcwKAqmreZ2bMnAXrqLCTptAc6vPetHMbrXdZfejP5mt57e/8PNSt/qE7BHniU5PCYA+PGIHw==
1052 1052
1053 -"@iconify/json@^1.1.258":  
1054 - version "1.1.259"  
1055 - resolved "https://registry.npmjs.org/@iconify/json/-/json-1.1.259.tgz#433ccff8572e42c3abab1cdbac872af0e8340419"  
1056 - integrity sha512-tDL4IgKtj3LA2lI+IoZfylBtKWNpV5I9BLj7WGMI/SvGkkYo+9DUap3Ho6iUbQLtu9GmHwpE/cA8mwEBkj/otw== 1053 +"@iconify/json@^1.1.260":
  1054 + version "1.1.260"
  1055 + resolved "https://registry.npmjs.org/@iconify/json/-/json-1.1.260.tgz#75bfcdcaf01f1a0092bb26f4ce7aebf357da431a"
  1056 + integrity sha512-gpRn0o55mvBTCcZRb8jBtqxV/5Av01BnnVn7/FyboBNdGkEQ8EMTqJL10SDUf9TLM8s63KKSg/ZeCJj870THtA==
1057 1057
1058 "@koa/cors@^3.1.0": 1058 "@koa/cors@^3.1.0":
1059 version "3.1.0" 1059 version "3.1.0"
@@ -1227,13 +1227,13 @@ @@ -1227,13 +1227,13 @@
1227 dependencies: 1227 dependencies:
1228 "@babel/core" ">=7.9.0" 1228 "@babel/core" ">=7.9.0"
1229 1229
1230 -"@stylelint/postcss-markdown@^0.36.1":  
1231 - version "0.36.1"  
1232 - resolved "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.1.tgz#829b87e6c0f108014533d9d7b987dc9efb6632e8"  
1233 - integrity sha512-iDxMBWk9nB2BPi1VFQ+Dc5+XpvODBHw2n3tYpaBZuEAFQlbtF9If0Qh5LTTwSi/XwdbJ2jt+0dis3i8omyggpw== 1230 +"@stylelint/postcss-markdown@^0.36.2":
  1231 + version "0.36.2"
  1232 + resolved "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz#0a540c4692f8dcdfc13c8e352c17e7bfee2bb391"
  1233 + integrity sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==
1234 dependencies: 1234 dependencies:
1235 - remark "^12.0.0"  
1236 - unist-util-find-all-after "^3.0.1" 1235 + remark "^13.0.0"
  1236 + unist-util-find-all-after "^3.0.2"
1237 1237
1238 "@surma/rollup-plugin-off-main-thread@^1.1.1": 1238 "@surma/rollup-plugin-off-main-thread@^1.1.1":
1239 version "1.4.2" 1239 version "1.4.2"
@@ -1280,10 +1280,10 @@ @@ -1280,10 +1280,10 @@
1280 "@types/keygrip" "*" 1280 "@types/keygrip" "*"
1281 "@types/node" "*" 1281 "@types/node" "*"
1282 1282
1283 -"@types/echarts@^4.9.0":  
1284 - version "4.9.0"  
1285 - resolved "https://registry.npmjs.org/@types/echarts/-/echarts-4.9.0.tgz#e133ea5429ada1d814f9cc1deae855421dcdd2ef"  
1286 - integrity sha512-9QIAUe6cxM5GyGNCIhlEwf7l5oclZDVM0HNRfehPx3dDUt1Jfhbvp/U2wfgwtL/IDqyASBVs1zu4qyaCsuJINA== 1283 +"@types/echarts@^4.9.1":
  1284 + version "4.9.1"
  1285 + resolved "https://registry.npmjs.org/@types/echarts/-/echarts-4.9.1.tgz#e21ea327af62b1148a7ab69a039f8fa002506de2"
  1286 + integrity sha512-tpx/gqJD6oz1ZJnIqDaUppsoRuZdnbhAFPslWlTGk0q8//9l34DLwzOrviHCOE+Oy1R5A1VZ994/CPg1Cl3naw==
1287 dependencies: 1287 dependencies:
1288 "@types/zrender" "*" 1288 "@types/zrender" "*"
1289 1289
@@ -1396,6 +1396,13 @@ @@ -1396,6 +1396,13 @@
1396 resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz#57f228f2b80c046b4a1bd5cac031f81f207f4f03" 1396 resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz#57f228f2b80c046b4a1bd5cac031f81f207f4f03"
1397 integrity sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w== 1397 integrity sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w==
1398 1398
  1399 +"@types/mdast@^3.0.0":
  1400 + version "3.0.3"
  1401 + resolved "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb"
  1402 + integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==
  1403 + dependencies:
  1404 + "@types/unist" "*"
  1405 +
1399 "@types/mime@*": 1406 "@types/mime@*":
1400 version "2.0.3" 1407 version "2.0.3"
1401 resolved "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" 1408 resolved "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a"
@@ -1412,9 +1419,9 @@ @@ -1412,9 +1419,9 @@
1412 integrity sha512-OlwyyyoY81P8f7FU0zILUPxqQQ3/W+CwbqI6dWvOxaH8w948fAl1+hOG9C9ZgJcwzG+aloJcsastY4c4p91R1Q== 1419 integrity sha512-OlwyyyoY81P8f7FU0zILUPxqQQ3/W+CwbqI6dWvOxaH8w948fAl1+hOG9C9ZgJcwzG+aloJcsastY4c4p91R1Q==
1413 1420
1414 "@types/node@*": 1421 "@types/node@*":
1415 - version "14.14.7"  
1416 - resolved "https://registry.npmjs.org/@types/node/-/node-14.14.7.tgz#8ea1e8f8eae2430cf440564b98c6dfce1ec5945d"  
1417 - integrity sha512-Zw1vhUSQZYw+7u5dAwNbIA9TuTotpzY/OF7sJM9FqPOF3SPjKnxrjoTktXDZgUjybf4cWVBP7O8wvKdSaGHweg== 1422 + version "14.14.8"
  1423 + resolved "https://registry.npmjs.org/@types/node/-/node-14.14.8.tgz#2127bd81949a95c8b7d3240f3254352d72563aec"
  1424 + integrity sha512-z/5Yd59dCKI5kbxauAJgw6dLPzW+TNOItNE00PkpzNwUIEwdj/Lsqwq94H5DdYBX7C13aRA0CY32BK76+neEUA==
1418 1425
1419 "@types/normalize-package-data@^2.4.0": 1426 "@types/normalize-package-data@^2.4.0":
1420 version "2.4.0" 1427 version "2.4.0"
@@ -1471,14 +1478,14 @@ @@ -1471,14 +1478,14 @@
1471 rollup "^0.63.4" 1478 rollup "^0.63.4"
1472 1479
1473 "@types/serve-static@*": 1480 "@types/serve-static@*":
1474 - version "1.13.7"  
1475 - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.7.tgz#e51b51a0becda910f9fd04c718044da69d6c492e"  
1476 - integrity sha512-3diZWucbR+xTmbDlU+FRRxBf+31OhFew7cJXML/zh9NmvSPTNoFecAwHB66BUqFgENJtqMiyl7JAwUE/siqdLw== 1481 + version "1.13.8"
  1482 + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.8.tgz#851129d434433c7082148574ffec263d58309c46"
  1483 + integrity sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA==
1477 dependencies: 1484 dependencies:
1478 "@types/mime" "*" 1485 "@types/mime" "*"
1479 "@types/node" "*" 1486 "@types/node" "*"
1480 1487
1481 -"@types/unist@^2.0.0", "@types/unist@^2.0.2": 1488 +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2":
1482 version "2.0.3" 1489 version "2.0.3"
1483 resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" 1490 resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
1484 integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== 1491 integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
@@ -1488,10 +1495,10 @@ @@ -1488,10 +1495,10 @@
1488 resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" 1495 resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
1489 integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== 1496 integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
1490 1497
1491 -"@types/yargs@^15.0.9":  
1492 - version "15.0.9"  
1493 - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.9.tgz#524cd7998fe810cdb02f26101b699cccd156ff19"  
1494 - integrity sha512-HmU8SeIRhZCWcnRskCs36Q1Q00KBV6Cqh/ora8WN1+22dY07AZdn6Gel8QZ3t26XYPImtcL8WV/eqjhVmMEw4g== 1498 +"@types/yargs@^15.0.10":
  1499 + version "15.0.10"
  1500 + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.10.tgz#0fe3c8173a0d5c3e780b389050140c3f5ea6ea74"
  1501 + integrity sha512-z8PNtlhrj7eJNLmrAivM7rjBESG6JwC5xP3RVk12i/8HVP7Xnx/sEmERnRImyEuUaJfO942X0qMOYsoupaJbZQ==
1495 dependencies: 1502 dependencies:
1496 "@types/yargs-parser" "*" 1503 "@types/yargs-parser" "*"
1497 1504
@@ -1505,61 +1512,61 @@ @@ -1505,61 +1512,61 @@
1505 resolved "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.0.tgz#fbc1d941cc6d9d37d18405c513ba6b294f89b609" 1512 resolved "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.0.tgz#fbc1d941cc6d9d37d18405c513ba6b294f89b609"
1506 integrity sha512-GQLOT+SN20a+AI51y3fAimhyTF4Y0RG+YP3gf91OibIZ7CJmPFgoZi+ZR5a+vRbS01LbQosITWum4ATmJ1Z6Pg== 1513 integrity sha512-GQLOT+SN20a+AI51y3fAimhyTF4Y0RG+YP3gf91OibIZ7CJmPFgoZi+ZR5a+vRbS01LbQosITWum4ATmJ1Z6Pg==
1507 1514
1508 -"@typescript-eslint/eslint-plugin@^4.6.1":  
1509 - version "4.7.0"  
1510 - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.7.0.tgz#85c9bbda00c0cb604d3c241f7bc7fb171a2d3479"  
1511 - integrity sha512-li9aiSVBBd7kU5VlQlT1AqP0uWGDK6JYKUQ9cVDnOg34VNnd9t4jr0Yqc/bKxJr/tDCPDaB4KzoSFN9fgVxe/Q== 1515 +"@typescript-eslint/eslint-plugin@^4.8.1":
  1516 + version "4.8.1"
  1517 + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.8.1.tgz#b362abe0ee478a6c6d06c14552a6497f0b480769"
  1518 + integrity sha512-d7LeQ7dbUrIv5YVFNzGgaW3IQKMmnmKFneRWagRlGYOSfLJVaRbj/FrBNOBC1a3tVO+TgNq1GbHvRtg1kwL0FQ==
1512 dependencies: 1519 dependencies:
1513 - "@typescript-eslint/experimental-utils" "4.7.0"  
1514 - "@typescript-eslint/scope-manager" "4.7.0" 1520 + "@typescript-eslint/experimental-utils" "4.8.1"
  1521 + "@typescript-eslint/scope-manager" "4.8.1"
1515 debug "^4.1.1" 1522 debug "^4.1.1"
1516 functional-red-black-tree "^1.0.1" 1523 functional-red-black-tree "^1.0.1"
1517 regexpp "^3.0.0" 1524 regexpp "^3.0.0"
1518 semver "^7.3.2" 1525 semver "^7.3.2"
1519 tsutils "^3.17.1" 1526 tsutils "^3.17.1"
1520 1527
1521 -"@typescript-eslint/experimental-utils@4.7.0":  
1522 - version "4.7.0"  
1523 - resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.7.0.tgz#8d1058c38bec3d3bbd9c898a1c32318d80faf3c5"  
1524 - integrity sha512-cymzovXAiD4EF+YoHAB5Oh02MpnXjvyaOb+v+BdpY7lsJXZQN34oIETeUwVT2XfV9rSNpXaIcknDLfupO/tUoA== 1528 +"@typescript-eslint/experimental-utils@4.8.1":
  1529 + version "4.8.1"
  1530 + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.1.tgz#27275c20fa4336df99ebcf6195f7d7aa7aa9f22d"
  1531 + integrity sha512-WigyLn144R3+lGATXW4nNcDJ9JlTkG8YdBWHkDlN0lC3gUGtDi7Pe3h5GPvFKMcRz8KbZpm9FJV9NTW8CpRHpg==
1525 dependencies: 1532 dependencies:
1526 "@types/json-schema" "^7.0.3" 1533 "@types/json-schema" "^7.0.3"
1527 - "@typescript-eslint/scope-manager" "4.7.0"  
1528 - "@typescript-eslint/types" "4.7.0"  
1529 - "@typescript-eslint/typescript-estree" "4.7.0" 1534 + "@typescript-eslint/scope-manager" "4.8.1"
  1535 + "@typescript-eslint/types" "4.8.1"
  1536 + "@typescript-eslint/typescript-estree" "4.8.1"
1530 eslint-scope "^5.0.0" 1537 eslint-scope "^5.0.0"
1531 eslint-utils "^2.0.0" 1538 eslint-utils "^2.0.0"
1532 1539
1533 -"@typescript-eslint/parser@^4.6.1":  
1534 - version "4.7.0"  
1535 - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.7.0.tgz#44bdab0f788b478178368baa65d3365fdc63da1c"  
1536 - integrity sha512-+meGV8bMP1sJHBI2AFq1GeTwofcGiur8LoIr6v+rEmD9knyCqDlrQcFHR0KDDfldHIFDU/enZ53fla6ReF4wRw== 1540 +"@typescript-eslint/parser@^4.8.1":
  1541 + version "4.8.1"
  1542 + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.8.1.tgz#4fe2fbdbb67485bafc4320b3ae91e34efe1219d1"
  1543 + integrity sha512-QND8XSVetATHK9y2Ltc/XBl5Ro7Y62YuZKnPEwnNPB8E379fDsvzJ1dMJ46fg/VOmk0hXhatc+GXs5MaXuL5Uw==
1537 dependencies: 1544 dependencies:
1538 - "@typescript-eslint/scope-manager" "4.7.0"  
1539 - "@typescript-eslint/types" "4.7.0"  
1540 - "@typescript-eslint/typescript-estree" "4.7.0" 1545 + "@typescript-eslint/scope-manager" "4.8.1"
  1546 + "@typescript-eslint/types" "4.8.1"
  1547 + "@typescript-eslint/typescript-estree" "4.8.1"
1541 debug "^4.1.1" 1548 debug "^4.1.1"
1542 1549
1543 -"@typescript-eslint/scope-manager@4.7.0":  
1544 - version "4.7.0"  
1545 - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.7.0.tgz#2115526085fb72723ccdc1eeae75dec7126220ed"  
1546 - integrity sha512-ILITvqwDJYbcDCROj6+Ob0oCKNg3SH46iWcNcTIT9B5aiVssoTYkhKjxOMNzR1F7WSJkik4zmuqve5MdnA0DyA== 1550 +"@typescript-eslint/scope-manager@4.8.1":
  1551 + version "4.8.1"
  1552 + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.8.1.tgz#e343c475f8f1d15801b546cb17d7f309b768fdce"
  1553 + integrity sha512-r0iUOc41KFFbZdPAdCS4K1mXivnSZqXS5D9oW+iykQsRlTbQRfuFRSW20xKDdYiaCoH+SkSLeIF484g3kWzwOQ==
1547 dependencies: 1554 dependencies:
1548 - "@typescript-eslint/types" "4.7.0"  
1549 - "@typescript-eslint/visitor-keys" "4.7.0" 1555 + "@typescript-eslint/types" "4.8.1"
  1556 + "@typescript-eslint/visitor-keys" "4.8.1"
1550 1557
1551 -"@typescript-eslint/types@4.7.0":  
1552 - version "4.7.0"  
1553 - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.7.0.tgz#5e95ef5c740f43d942542b35811f87b62fccca69"  
1554 - integrity sha512-uLszFe0wExJc+I7q0Z/+BnP7wao/kzX0hB5vJn4LIgrfrMLgnB2UXoReV19lkJQS1a1mHWGGODSxnBx6JQC3Sg== 1558 +"@typescript-eslint/types@4.8.1":
  1559 + version "4.8.1"
  1560 + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.8.1.tgz#23829c73c5fc6f4fcd5346a7780b274f72fee222"
  1561 + integrity sha512-ave2a18x2Y25q5K05K/U3JQIe2Av4+TNi/2YuzyaXLAsDx6UZkz1boZ7nR/N6Wwae2PpudTZmHFXqu7faXfHmA==
1555 1562
1556 -"@typescript-eslint/typescript-estree@4.7.0":  
1557 - version "4.7.0"  
1558 - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.7.0.tgz#539531167f05ba20eb0b6785567076679e29d393"  
1559 - integrity sha512-5XZRQznD1MfUmxu1t8/j2Af4OxbA7EFU2rbo0No7meb46eHgGkSieFdfV6omiC/DGIBhH9H9gXn7okBbVOm8jw== 1563 +"@typescript-eslint/typescript-estree@4.8.1":
  1564 + version "4.8.1"
  1565 + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.1.tgz#7307e3f2c9e95df7daa8dc0a34b8c43b7ec0dd32"
  1566 + integrity sha512-bJ6Fn/6tW2g7WIkCWh3QRlaSU7CdUUK52shx36/J7T5oTQzANvi6raoTsbwGM11+7eBbeem8hCCKbyvAc0X3sQ==
1560 dependencies: 1567 dependencies:
1561 - "@typescript-eslint/types" "4.7.0"  
1562 - "@typescript-eslint/visitor-keys" "4.7.0" 1568 + "@typescript-eslint/types" "4.8.1"
  1569 + "@typescript-eslint/visitor-keys" "4.8.1"
1563 debug "^4.1.1" 1570 debug "^4.1.1"
1564 globby "^11.0.1" 1571 globby "^11.0.1"
1565 is-glob "^4.0.1" 1572 is-glob "^4.0.1"
@@ -1567,12 +1574,12 @@ @@ -1567,12 +1574,12 @@
1567 semver "^7.3.2" 1574 semver "^7.3.2"
1568 tsutils "^3.17.1" 1575 tsutils "^3.17.1"
1569 1576
1570 -"@typescript-eslint/visitor-keys@4.7.0":  
1571 - version "4.7.0"  
1572 - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.7.0.tgz#6783824f22acfc49e754970ed21b88ac03b80e6f"  
1573 - integrity sha512-aDJDWuCRsf1lXOtignlfiPODkzSxxop7D0rZ91L6ZuMlcMCSh0YyK+gAfo5zN/ih6WxMwhoXgJWC3cWQdaKC+A== 1577 +"@typescript-eslint/visitor-keys@4.8.1":
  1578 + version "4.8.1"
  1579 + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.1.tgz#794f68ee292d1b2e3aa9690ebedfcb3a8c90e3c3"
  1580 + integrity sha512-3nrwXFdEYALQh/zW8rFwP4QltqsanCDz4CwWMPiIZmwlk9GlvBeueEIbq05SEq4ganqM0g9nh02xXgv5XI3PeQ==
1574 dependencies: 1581 dependencies:
1575 - "@typescript-eslint/types" "4.7.0" 1582 + "@typescript-eslint/types" "4.8.1"
1576 eslint-visitor-keys "^2.0.0" 1583 eslint-visitor-keys "^2.0.0"
1577 1584
1578 "@vue/compiler-core@*", "@vue/compiler-core@3.0.2", "@vue/compiler-core@^3.0.0-rc.5": 1585 "@vue/compiler-core@*", "@vue/compiler-core@3.0.2", "@vue/compiler-core@^3.0.0-rc.5":
@@ -1725,7 +1732,7 @@ @@ -1725,7 +1732,7 @@
1725 vscode-languageserver-textdocument "^1.0.1" 1732 vscode-languageserver-textdocument "^1.0.1"
1726 vscode-uri "^2.1.2" 1733 vscode-uri "^2.1.2"
1727 1734
1728 -"@vueuse/core@^4.0.0-beta.41": 1735 +"@vueuse/core@4.0.0-beta.41":
1729 version "4.0.0-beta.41" 1736 version "4.0.0-beta.41"
1730 resolved "https://registry.npmjs.org/@vueuse/core/-/core-4.0.0-beta.41.tgz#0058aed5ade75ae2866283498009ad5172cbae84" 1737 resolved "https://registry.npmjs.org/@vueuse/core/-/core-4.0.0-beta.41.tgz#0058aed5ade75ae2866283498009ad5172cbae84"
1731 integrity sha512-CgUih65PzYScorm1S4F93e6XXm+qxA8GrRLOSB1kXaqtP6vXedwkBxKkNEYNACx4reL4VEHqM/BrM6FajXkQUg== 1738 integrity sha512-CgUih65PzYScorm1S4F93e6XXm+qxA8GrRLOSB1kXaqtP6vXedwkBxKkNEYNACx4reL4VEHqM/BrM6FajXkQUg==
@@ -1850,10 +1857,10 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: @@ -1850,10 +1857,10 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
1850 dependencies: 1857 dependencies:
1851 color-convert "^2.0.1" 1858 color-convert "^2.0.1"
1852 1859
1853 -ant-design-vue@^2.0.0-rc.1:  
1854 - version "2.0.0-rc.1"  
1855 - resolved "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-2.0.0-rc.1.tgz#2ef02475f3aa4c1474f2fe3cf44a52c34787be02"  
1856 - integrity sha512-iKXkFtTHarvLHV7LWmYh6g/Cmkv+xK+vS621A1Qvg37Z6lCGg3K9BGAizmklAYzOTiPz0Ltt63eSiNqYMGh52g== 1860 +ant-design-vue@2.0.0-beta.15:
  1861 + version "2.0.0-beta.15"
  1862 + resolved "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-2.0.0-beta.15.tgz#3c787dabb70a33885d0e751e58f9a5610ed06134"
  1863 + integrity sha512-OxZy+ZYU3LauIL4Rhqwy441K/iD++Cit6upnQy5+LVUrX0PSObPqPqMWVpncbAmJJYTEz88gkvgGeYqBdzouWA==
1857 dependencies: 1864 dependencies:
1858 "@ant-design-vue/use" "^0.0.1-0" 1865 "@ant-design-vue/use" "^0.0.1-0"
1859 "@ant-design/icons-vue" "^5.1.5" 1866 "@ant-design/icons-vue" "^5.1.5"
@@ -2301,11 +2308,6 @@ caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001157: @@ -2301,11 +2308,6 @@ caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001157:
2301 resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001158.tgz#fce86d321369603c2bc855ee0e901a7f49f8310b" 2308 resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001158.tgz#fce86d321369603c2bc855ee0e901a7f49f8310b"
2302 integrity sha512-s5loVYY+yKpuVA3HyW8BarzrtJvwHReuzugQXlv1iR3LKSReoFXRm86mT6hT7PEF5RxW+XQZg+6nYjlywYzQ+g== 2309 integrity sha512-s5loVYY+yKpuVA3HyW8BarzrtJvwHReuzugQXlv1iR3LKSReoFXRm86mT6hT7PEF5RxW+XQZg+6nYjlywYzQ+g==
2303 2310
2304 -ccount@^1.0.0:  
2305 - version "1.1.0"  
2306 - resolved "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043"  
2307 - integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==  
2308 -  
2309 cfb@^1.1.4: 2311 cfb@^1.1.4:
2310 version "1.2.0" 2312 version "1.2.0"
2311 resolved "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz#6a4d0872b525ed60349e1ef51fb4b0bf73eca9a8" 2313 resolved "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz#6a4d0872b525ed60349e1ef51fb4b0bf73eca9a8"
@@ -2349,11 +2351,6 @@ chalk@^3.0.0: @@ -2349,11 +2351,6 @@ chalk@^3.0.0:
2349 ansi-styles "^4.1.0" 2351 ansi-styles "^4.1.0"
2350 supports-color "^7.1.0" 2352 supports-color "^7.1.0"
2351 2353
2352 -character-entities-html4@^1.0.0:  
2353 - version "1.1.4"  
2354 - resolved "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125"  
2355 - integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==  
2356 -  
2357 character-entities-legacy@^1.0.0: 2354 character-entities-legacy@^1.0.0:
2358 version "1.1.4" 2355 version "1.1.4"
2359 resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" 2356 resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
@@ -2522,11 +2519,6 @@ codepage@~1.14.0: @@ -2522,11 +2519,6 @@ codepage@~1.14.0:
2522 commander "~2.14.1" 2519 commander "~2.14.1"
2523 exit-on-epipe "~1.0.1" 2520 exit-on-epipe "~1.0.1"
2524 2521
2525 -collapse-white-space@^1.0.2:  
2526 - version "1.0.6"  
2527 - resolved "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287"  
2528 - integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==  
2529 -  
2530 collection-visit@^1.0.0: 2522 collection-visit@^1.0.0:
2531 version "1.0.0" 2523 version "1.0.0"
2532 resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 2524 resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
@@ -3001,7 +2993,7 @@ debug@^3.1.0, debug@^3.1.1: @@ -3001,7 +2993,7 @@ debug@^3.1.0, debug@^3.1.1:
3001 dependencies: 2993 dependencies:
3002 ms "^2.1.1" 2994 ms "^2.1.1"
3003 2995
3004 -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0: 2996 +debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
3005 version "4.2.0" 2997 version "4.2.0"
3006 resolved "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" 2998 resolved "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
3007 integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== 2999 integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==
@@ -3263,9 +3255,9 @@ ejs@^2.6.1: @@ -3263,9 +3255,9 @@ ejs@^2.6.1:
3263 integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== 3255 integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
3264 3256
3265 electron-to-chromium@^1.3.591: 3257 electron-to-chromium@^1.3.591:
3266 - version "1.3.596"  
3267 - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.596.tgz#c7ed98512c7ff36ddcbfed9e54e6355335c35257"  
3268 - integrity sha512-nLO2Wd2yU42eSoNJVQKNf89CcEGqeFZd++QsnN2XIgje1s/19AgctfjLIbPORlvcCO8sYjLwX4iUgDdusOY8Sg== 3258 + version "1.3.598"
  3259 + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.598.tgz#8f757018902ab6190323a8c5f6124d854893a35b"
  3260 + integrity sha512-G5Ztk23/ubLYVPxPXnB1uu105uzIPd4xB/D8ld8x1GaSC9+vU9NZL16nYZya8H77/7CCKKN7dArzJL3pBs8N7A==
3269 3261
3270 emoji-regex@^7.0.1: 3262 emoji-regex@^7.0.1:
3271 version "7.0.3" 3263 version "7.0.3"
@@ -3698,6 +3690,13 @@ file-entry-cache@^5.0.1: @@ -3698,6 +3690,13 @@ file-entry-cache@^5.0.1:
3698 dependencies: 3690 dependencies:
3699 flat-cache "^2.0.1" 3691 flat-cache "^2.0.1"
3700 3692
  3693 +file-entry-cache@^6.0.0:
  3694 + version "6.0.0"
  3695 + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a"
  3696 + integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==
  3697 + dependencies:
  3698 + flat-cache "^3.0.4"
  3699 +
3701 fill-range@^4.0.0: 3700 fill-range@^4.0.0:
3702 version "4.0.0" 3701 version "4.0.0"
3703 resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 3702 resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
@@ -3792,11 +3791,24 @@ flat-cache@^2.0.1: @@ -3792,11 +3791,24 @@ flat-cache@^2.0.1:
3792 rimraf "2.6.3" 3791 rimraf "2.6.3"
3793 write "1.0.3" 3792 write "1.0.3"
3794 3793
  3794 +flat-cache@^3.0.4:
  3795 + version "3.0.4"
  3796 + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
  3797 + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
  3798 + dependencies:
  3799 + flatted "^3.1.0"
  3800 + rimraf "^3.0.2"
  3801 +
3795 flatted@^2.0.0: 3802 flatted@^2.0.0:
3796 version "2.0.2" 3803 version "2.0.2"
3797 resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" 3804 resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
3798 integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== 3805 integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
3799 3806
  3807 +flatted@^3.1.0:
  3808 + version "3.1.0"
  3809 + resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067"
  3810 + integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==
  3811 +
3800 follow-redirects@^1.0.0, follow-redirects@^1.10.0: 3812 follow-redirects@^1.0.0, follow-redirects@^1.10.0:
3801 version "1.13.0" 3813 version "1.13.0"
3802 resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" 3814 resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db"
@@ -4415,7 +4427,7 @@ inflight@^1.0.4: @@ -4415,7 +4427,7 @@ inflight@^1.0.4:
4415 once "^1.3.0" 4427 once "^1.3.0"
4416 wrappy "1" 4428 wrappy "1"
4417 4429
4418 -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: 4430 +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:
4419 version "2.0.4" 4431 version "2.0.4"
4420 resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 4432 resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
4421 integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 4433 integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -4483,11 +4495,6 @@ is-alphabetical@^1.0.0: @@ -4483,11 +4495,6 @@ is-alphabetical@^1.0.0:
4483 resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" 4495 resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
4484 integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== 4496 integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==
4485 4497
4486 -is-alphanumeric@^1.0.0:  
4487 - version "1.0.0"  
4488 - resolved "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4"  
4489 - integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=  
4490 -  
4491 is-alphanumerical@^1.0.0: 4498 is-alphanumerical@^1.0.0:
4492 version "1.0.4" 4499 version "1.0.4"
4493 resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" 4500 resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf"
@@ -4719,21 +4726,11 @@ is-utf8@^0.2.0, is-utf8@^0.2.1: @@ -4719,21 +4726,11 @@ is-utf8@^0.2.0, is-utf8@^0.2.1:
4719 resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 4726 resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
4720 integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= 4727 integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
4721 4728
4722 -is-whitespace-character@^1.0.0:  
4723 - version "1.0.4"  
4724 - resolved "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7"  
4725 - integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==  
4726 -  
4727 is-windows@^1.0.1, is-windows@^1.0.2: 4729 is-windows@^1.0.1, is-windows@^1.0.2:
4728 version "1.0.2" 4730 version "1.0.2"
4729 resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 4731 resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
4730 integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== 4732 integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
4731 4733
4732 -is-word-character@^1.0.0:  
4733 - version "1.0.4"  
4734 - resolved "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230"  
4735 - integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==  
4736 -  
4737 is-wsl@^2.1.1: 4734 is-wsl@^2.1.1:
4738 version "2.2.0" 4735 version "2.2.0"
4739 resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" 4736 resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
@@ -4933,10 +4930,10 @@ klona@^2.0.4: @@ -4933,10 +4930,10 @@ klona@^2.0.4:
4933 resolved "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" 4930 resolved "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0"
4934 integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== 4931 integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==
4935 4932
4936 -known-css-properties@^0.19.0:  
4937 - version "0.19.0"  
4938 - resolved "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.19.0.tgz#5d92b7fa16c72d971bda9b7fe295bdf61836ee5b"  
4939 - integrity sha512-eYboRV94Vco725nKMlpkn3nV2+96p9c3gKXRsYqAJSswSENvBhN7n5L+uDhY58xQa0UukWsDMTGELzmD8Q+wTA== 4933 +known-css-properties@^0.20.0:
  4934 + version "0.20.0"
  4935 + resolved "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.20.0.tgz#0570831661b47dd835293218381166090ff60e96"
  4936 + integrity sha512-URvsjaA9ypfreqJ2/ylDr5MUERhJZ+DhguoWRr2xgS5C7aGCalXo+ewL+GixgKBfhT2vuL02nbIgNGqVWgTOYw==
4940 4937
4941 koa-bodyparser@^4.3.0: 4938 koa-bodyparser@^4.3.0:
4942 version "4.3.0" 4939 version "4.3.0"
@@ -5227,7 +5224,7 @@ log-update@^4.0.0: @@ -5227,7 +5224,7 @@ log-update@^4.0.0:
5227 slice-ansi "^4.0.0" 5224 slice-ansi "^4.0.0"
5228 wrap-ansi "^6.2.0" 5225 wrap-ansi "^6.2.0"
5229 5226
5230 -longest-streak@^2.0.1: 5227 +longest-streak@^2.0.0:
5231 version "2.0.4" 5228 version "2.0.4"
5232 resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" 5229 resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
5233 integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== 5230 integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
@@ -5320,29 +5317,37 @@ map-visit@^1.0.0: @@ -5320,29 +5317,37 @@ map-visit@^1.0.0:
5320 dependencies: 5317 dependencies:
5321 object-visit "^1.0.0" 5318 object-visit "^1.0.0"
5322 5319
5323 -markdown-escapes@^1.0.0:  
5324 - version "1.0.4"  
5325 - resolved "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"  
5326 - integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==  
5327 -  
5328 -markdown-table@^2.0.0:  
5329 - version "2.0.0"  
5330 - resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b"  
5331 - integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==  
5332 - dependencies:  
5333 - repeat-string "^1.0.0"  
5334 -  
5335 mathml-tag-names@^2.1.3: 5320 mathml-tag-names@^2.1.3:
5336 version "2.1.3" 5321 version "2.1.3"
5337 resolved "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" 5322 resolved "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3"
5338 integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== 5323 integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==
5339 5324
5340 -mdast-util-compact@^2.0.0:  
5341 - version "2.0.1"  
5342 - resolved "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490"  
5343 - integrity sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA== 5325 +mdast-util-from-markdown@^0.8.0:
  5326 + version "0.8.1"
  5327 + resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.1.tgz#781371d493cac11212947226190270c15dc97116"
  5328 + integrity sha512-qJXNcFcuCSPqUF0Tb0uYcFDIq67qwB3sxo9RPdf9vG8T90ViKnksFqdB/Coq2a7sTnxL/Ify2y7aIQXDkQFH0w==
5344 dependencies: 5329 dependencies:
5345 - unist-util-visit "^2.0.0" 5330 + "@types/mdast" "^3.0.0"
  5331 + mdast-util-to-string "^1.0.0"
  5332 + micromark "~2.10.0"
  5333 + parse-entities "^2.0.0"
  5334 +
  5335 +mdast-util-to-markdown@^0.5.0:
  5336 + version "0.5.3"
  5337 + resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.5.3.tgz#e05c54a3ccd239bab63c48a1e5b5747f0dcd5aca"
  5338 + integrity sha512-sr8q7fQJ1xoCqZSXW6dO/MYu2Md+a4Hfk9uO+XHCfiBhVM0EgWtfAV7BuN+ff6otUeu2xDyt1o7vhZGwOG3+BA==
  5339 + dependencies:
  5340 + "@types/unist" "^2.0.0"
  5341 + longest-streak "^2.0.0"
  5342 + mdast-util-to-string "^1.0.0"
  5343 + parse-entities "^2.0.0"
  5344 + repeat-string "^1.0.0"
  5345 + zwitch "^1.0.0"
  5346 +
  5347 +mdast-util-to-string@^1.0.0:
  5348 + version "1.1.0"
  5349 + resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527"
  5350 + integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==
5346 5351
5347 media-typer@0.3.0: 5352 media-typer@0.3.0:
5348 version "0.3.0" 5353 version "0.3.0"
@@ -5380,23 +5385,6 @@ meow@^4.0.0: @@ -5380,23 +5385,6 @@ meow@^4.0.0:
5380 redent "^2.0.0" 5385 redent "^2.0.0"
5381 trim-newlines "^2.0.0" 5386 trim-newlines "^2.0.0"
5382 5387
5383 -meow@^7.1.1:  
5384 - version "7.1.1"  
5385 - resolved "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306"  
5386 - integrity sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==  
5387 - dependencies:  
5388 - "@types/minimist" "^1.2.0"  
5389 - camelcase-keys "^6.2.2"  
5390 - decamelize-keys "^1.1.0"  
5391 - hard-rejection "^2.1.0"  
5392 - minimist-options "4.1.0"  
5393 - normalize-package-data "^2.5.0"  
5394 - read-pkg-up "^7.0.1"  
5395 - redent "^3.0.0"  
5396 - trim-newlines "^3.0.0"  
5397 - type-fest "^0.13.1"  
5398 - yargs-parser "^18.1.3"  
5399 -  
5400 meow@^8.0.0: 5388 meow@^8.0.0:
5401 version "8.0.0" 5389 version "8.0.0"
5402 resolved "https://registry.npmjs.org/meow/-/meow-8.0.0.tgz#1aa10ee61046719e334ffdc038bb5069250ec99a" 5390 resolved "https://registry.npmjs.org/meow/-/meow-8.0.0.tgz#1aa10ee61046719e334ffdc038bb5069250ec99a"
@@ -5436,6 +5424,14 @@ merge@^1.2.1: @@ -5436,6 +5424,14 @@ merge@^1.2.1:
5436 resolved "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" 5424 resolved "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
5437 integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== 5425 integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
5438 5426
  5427 +micromark@~2.10.0:
  5428 + version "2.10.1"
  5429 + resolved "https://registry.npmjs.org/micromark/-/micromark-2.10.1.tgz#cd73f54e0656f10e633073db26b663a221a442a7"
  5430 + integrity sha512-fUuVF8sC1X7wsCS29SYQ2ZfIZYbTymp0EYr6sab3idFjigFFjGa5UwoniPlV9tAgntjuapW1t9U+S0yDYeGKHQ==
  5431 + dependencies:
  5432 + debug "^4.0.0"
  5433 + parse-entities "^2.0.0"
  5434 +
5439 micromatch@^3.0.4: 5435 micromatch@^3.0.4:
5440 version "3.1.10" 5436 version "3.1.10"
5441 resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 5437 resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
@@ -5658,9 +5654,9 @@ node-modules-regexp@^1.0.0: @@ -5658,9 +5654,9 @@ node-modules-regexp@^1.0.0:
5658 integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= 5654 integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
5659 5655
5660 node-releases@^1.1.66: 5656 node-releases@^1.1.66:
5661 - version "1.1.66"  
5662 - resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.66.tgz#609bd0dc069381015cd982300bae51ab4f1b1814"  
5663 - integrity sha512-JHEQ1iWPGK+38VLB2H9ef2otU4l8s3yAMt9Xf934r6+ojCYDMHPMqvCc9TnzfeFSP1QEOeU6YZEd3+De0LTCgg== 5657 + version "1.1.67"
  5658 + resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12"
  5659 + integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==
5664 5660
5665 normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: 5661 normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0:
5666 version "2.5.0" 5662 version "2.5.0"
@@ -6309,7 +6305,7 @@ postcss-value-parser@^4.1.0: @@ -6309,7 +6305,7 @@ postcss-value-parser@^4.1.0:
6309 resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" 6305 resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
6310 integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== 6306 integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
6311 6307
6312 -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.31, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: 6308 +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.31, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.5, postcss@^7.0.6:
6313 version "7.0.35" 6309 version "7.0.35"
6314 resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" 6310 resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24"
6315 integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== 6311 integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==
@@ -6626,63 +6622,35 @@ relateurl@^0.2.7: @@ -6626,63 +6622,35 @@ relateurl@^0.2.7:
6626 resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" 6622 resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
6627 integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= 6623 integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
6628 6624
6629 -remark-parse@^8.0.0:  
6630 - version "8.0.3"  
6631 - resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1"  
6632 - integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== 6625 +remark-parse@^9.0.0:
  6626 + version "9.0.0"
  6627 + resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640"
  6628 + integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==
6633 dependencies: 6629 dependencies:
6634 - ccount "^1.0.0"  
6635 - collapse-white-space "^1.0.2"  
6636 - is-alphabetical "^1.0.0"  
6637 - is-decimal "^1.0.0"  
6638 - is-whitespace-character "^1.0.0"  
6639 - is-word-character "^1.0.0"  
6640 - markdown-escapes "^1.0.0"  
6641 - parse-entities "^2.0.0"  
6642 - repeat-string "^1.5.4"  
6643 - state-toggle "^1.0.0"  
6644 - trim "0.0.1"  
6645 - trim-trailing-lines "^1.0.0"  
6646 - unherit "^1.0.4"  
6647 - unist-util-remove-position "^2.0.0"  
6648 - vfile-location "^3.0.0"  
6649 - xtend "^4.0.1"  
6650 -  
6651 -remark-stringify@^8.0.0:  
6652 - version "8.1.1"  
6653 - resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz#e2a9dc7a7bf44e46a155ec78996db896780d8ce5"  
6654 - integrity sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==  
6655 - dependencies:  
6656 - ccount "^1.0.0"  
6657 - is-alphanumeric "^1.0.0"  
6658 - is-decimal "^1.0.0"  
6659 - is-whitespace-character "^1.0.0"  
6660 - longest-streak "^2.0.1"  
6661 - markdown-escapes "^1.0.0"  
6662 - markdown-table "^2.0.0"  
6663 - mdast-util-compact "^2.0.0"  
6664 - parse-entities "^2.0.0"  
6665 - repeat-string "^1.5.4"  
6666 - state-toggle "^1.0.0"  
6667 - stringify-entities "^3.0.0"  
6668 - unherit "^1.0.4"  
6669 - xtend "^4.0.1" 6630 + mdast-util-from-markdown "^0.8.0"
6670 6631
6671 -remark@^12.0.0:  
6672 - version "12.0.1"  
6673 - resolved "https://registry.npmjs.org/remark/-/remark-12.0.1.tgz#f1ddf68db7be71ca2bad0a33cd3678b86b9c709f"  
6674 - integrity sha512-gS7HDonkdIaHmmP/+shCPejCEEW+liMp/t/QwmF0Xt47Rpuhl32lLtDV1uKWvGoq+kxr5jSgg5oAIpGuyULjUw== 6632 +remark-stringify@^9.0.0:
  6633 + version "9.0.0"
  6634 + resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.0.tgz#8ba0c9e4167c42733832215a81550489759e3793"
  6635 + integrity sha512-8x29DpTbVzEc6Dwb90qhxCtbZ6hmj3BxWWDpMhA+1WM4dOEGH5U5/GFe3Be5Hns5MvPSFAr1e2KSVtKZkK5nUw==
6675 dependencies: 6636 dependencies:
6676 - remark-parse "^8.0.0"  
6677 - remark-stringify "^8.0.0"  
6678 - unified "^9.0.0" 6637 + mdast-util-to-markdown "^0.5.0"
  6638 +
  6639 +remark@^13.0.0:
  6640 + version "13.0.0"
  6641 + resolved "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz#d15d9bf71a402f40287ebe36067b66d54868e425"
  6642 + integrity sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==
  6643 + dependencies:
  6644 + remark-parse "^9.0.0"
  6645 + remark-stringify "^9.0.0"
  6646 + unified "^9.1.0"
6679 6647
6680 repeat-element@^1.1.2: 6648 repeat-element@^1.1.2:
6681 version "1.1.3" 6649 version "1.1.3"
6682 resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 6650 resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
6683 integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== 6651 integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
6684 6652
6685 -repeat-string@^1.0.0, repeat-string@^1.5.4, repeat-string@^1.6.1: 6653 +repeat-string@^1.0.0, repeat-string@^1.6.1:
6686 version "1.6.1" 6654 version "1.6.1"
6687 resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 6655 resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
6688 integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= 6656 integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
@@ -7186,16 +7154,16 @@ source-map-url@^0.4.0: @@ -7186,16 +7154,16 @@ source-map-url@^0.4.0:
7186 resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 7154 resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
7187 integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= 7155 integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
7188 7156
  7157 +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
  7158 + version "0.6.1"
  7159 + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
  7160 + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
  7161 +
7189 source-map@^0.5.0, source-map@^0.5.6: 7162 source-map@^0.5.0, source-map@^0.5.6:
7190 version "0.5.7" 7163 version "0.5.7"
7191 resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 7164 resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
7192 integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 7165 integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
7193 7166
7194 -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:  
7195 - version "0.6.1"  
7196 - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"  
7197 - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==  
7198 -  
7199 source-map@^0.7.3, source-map@~0.7.2: 7167 source-map@^0.7.3, source-map@~0.7.2:
7200 version "0.7.3" 7168 version "0.7.3"
7201 resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" 7169 resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
@@ -7270,11 +7238,6 @@ ssf@~0.11.2: @@ -7270,11 +7238,6 @@ ssf@~0.11.2:
7270 dependencies: 7238 dependencies:
7271 frac "~1.1.2" 7239 frac "~1.1.2"
7272 7240
7273 -state-toggle@^1.0.0:  
7274 - version "1.0.3"  
7275 - resolved "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe"  
7276 - integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==  
7277 -  
7278 static-extend@^0.1.1: 7241 static-extend@^0.1.1:
7279 version "0.1.2" 7242 version "0.1.2"
7280 resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 7243 resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@@ -7343,15 +7306,6 @@ string_decoder@~1.1.1: @@ -7343,15 +7306,6 @@ string_decoder@~1.1.1:
7343 dependencies: 7306 dependencies:
7344 safe-buffer "~5.1.0" 7307 safe-buffer "~5.1.0"
7345 7308
7346 -stringify-entities@^3.0.0:  
7347 - version "3.1.0"  
7348 - resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz#b8d3feac256d9ffcc9fa1fefdcf3ca70576ee903"  
7349 - integrity sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==  
7350 - dependencies:  
7351 - character-entities-html4 "^1.0.0"  
7352 - character-entities-legacy "^1.0.0"  
7353 - xtend "^4.0.0"  
7354 -  
7355 stringify-object@^3.3.0: 7309 stringify-object@^3.3.0:
7356 version "3.3.0" 7310 version "3.3.0"
7357 resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" 7311 resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
@@ -7472,22 +7426,22 @@ stylelint-order@^4.1.0: @@ -7472,22 +7426,22 @@ stylelint-order@^4.1.0:
7472 postcss "^7.0.31" 7426 postcss "^7.0.31"
7473 postcss-sorting "^5.0.1" 7427 postcss-sorting "^5.0.1"
7474 7428
7475 -stylelint@^13.7.2:  
7476 - version "13.7.2"  
7477 - resolved "https://registry.npmjs.org/stylelint/-/stylelint-13.7.2.tgz#6f3c58eea4077680ed0ceb0d064b22b100970486"  
7478 - integrity sha512-mmieorkfmO+ZA6CNDu1ic9qpt4tFvH2QUB7vqXgrMVHe5ENU69q7YDq0YUg/UHLuCsZOWhUAvcMcLzLDIERzSg== 7429 +stylelint@^13.8.0:
  7430 + version "13.8.0"
  7431 + resolved "https://registry.npmjs.org/stylelint/-/stylelint-13.8.0.tgz#446765dbe25e3617f819a0165956faf2563ddc23"
  7432 + integrity sha512-iHH3dv3UI23SLDrH4zMQDjLT9/dDIz/IpoFeuNxZmEx86KtfpjDOscxLTFioQyv+2vQjPlRZnK0UoJtfxLICXQ==
7479 dependencies: 7433 dependencies:
7480 "@stylelint/postcss-css-in-js" "^0.37.2" 7434 "@stylelint/postcss-css-in-js" "^0.37.2"
7481 - "@stylelint/postcss-markdown" "^0.36.1" 7435 + "@stylelint/postcss-markdown" "^0.36.2"
7482 autoprefixer "^9.8.6" 7436 autoprefixer "^9.8.6"
7483 balanced-match "^1.0.0" 7437 balanced-match "^1.0.0"
7484 chalk "^4.1.0" 7438 chalk "^4.1.0"
7485 cosmiconfig "^7.0.0" 7439 cosmiconfig "^7.0.0"
7486 - debug "^4.1.1" 7440 + debug "^4.2.0"
7487 execall "^2.0.0" 7441 execall "^2.0.0"
7488 fast-glob "^3.2.4" 7442 fast-glob "^3.2.4"
7489 fastest-levenshtein "^1.0.12" 7443 fastest-levenshtein "^1.0.12"
7490 - file-entry-cache "^5.0.1" 7444 + file-entry-cache "^6.0.0"
7491 get-stdin "^8.0.0" 7445 get-stdin "^8.0.0"
7492 global-modules "^2.0.0" 7446 global-modules "^2.0.0"
7493 globby "^11.0.1" 7447 globby "^11.0.1"
@@ -7496,14 +7450,14 @@ stylelint@^13.7.2: @@ -7496,14 +7450,14 @@ stylelint@^13.7.2:
7496 ignore "^5.1.8" 7450 ignore "^5.1.8"
7497 import-lazy "^4.0.0" 7451 import-lazy "^4.0.0"
7498 imurmurhash "^0.1.4" 7452 imurmurhash "^0.1.4"
7499 - known-css-properties "^0.19.0" 7453 + known-css-properties "^0.20.0"
7500 lodash "^4.17.20" 7454 lodash "^4.17.20"
7501 log-symbols "^4.0.0" 7455 log-symbols "^4.0.0"
7502 mathml-tag-names "^2.1.3" 7456 mathml-tag-names "^2.1.3"
7503 - meow "^7.1.1" 7457 + meow "^8.0.0"
7504 micromatch "^4.0.2" 7458 micromatch "^4.0.2"
7505 normalize-selector "^0.2.0" 7459 normalize-selector "^0.2.0"
7506 - postcss "^7.0.32" 7460 + postcss "^7.0.35"
7507 postcss-html "^0.36.0" 7461 postcss-html "^0.36.0"
7508 postcss-less "^3.1.4" 7462 postcss-less "^3.1.4"
7509 postcss-media-query-parser "^0.2.3" 7463 postcss-media-query-parser "^0.2.3"
@@ -7511,7 +7465,7 @@ stylelint@^13.7.2: @@ -7511,7 +7465,7 @@ stylelint@^13.7.2:
7511 postcss-safe-parser "^4.0.2" 7465 postcss-safe-parser "^4.0.2"
7512 postcss-sass "^0.4.4" 7466 postcss-sass "^0.4.4"
7513 postcss-scss "^2.1.1" 7467 postcss-scss "^2.1.1"
7514 - postcss-selector-parser "^6.0.2" 7468 + postcss-selector-parser "^6.0.4"
7515 postcss-syntax "^0.36.2" 7469 postcss-syntax "^0.36.2"
7516 postcss-value-parser "^4.1.0" 7470 postcss-value-parser "^4.1.0"
7517 resolve-from "^5.0.0" 7471 resolve-from "^5.0.0"
@@ -7522,8 +7476,8 @@ stylelint@^13.7.2: @@ -7522,8 +7476,8 @@ stylelint@^13.7.2:
7522 style-search "^0.1.0" 7476 style-search "^0.1.0"
7523 sugarss "^2.0.0" 7477 sugarss "^2.0.0"
7524 svg-tags "^1.0.0" 7478 svg-tags "^1.0.0"
7525 - table "^6.0.1"  
7526 - v8-compile-cache "^2.1.1" 7479 + table "^6.0.3"
  7480 + v8-compile-cache "^2.2.0"
7527 write-file-atomic "^3.0.3" 7481 write-file-atomic "^3.0.3"
7528 7482
7529 sugarss@^2.0.0: 7483 sugarss@^2.0.0:
@@ -7631,7 +7585,7 @@ table@^5.2.3: @@ -7631,7 +7585,7 @@ table@^5.2.3:
7631 slice-ansi "^2.1.0" 7585 slice-ansi "^2.1.0"
7632 string-width "^3.0.0" 7586 string-width "^3.0.0"
7633 7587
7634 -table@^6.0.1: 7588 +table@^6.0.3:
7635 version "6.0.3" 7589 version "6.0.3"
7636 resolved "https://registry.npmjs.org/table/-/table-6.0.3.tgz#e5b8a834e37e27ad06de2e0fda42b55cfd8a0123" 7590 resolved "https://registry.npmjs.org/table/-/table-6.0.3.tgz#e5b8a834e37e27ad06de2e0fda42b55cfd8a0123"
7637 integrity sha512-8321ZMcf1B9HvVX/btKv8mMZahCjn2aYrDlpqHaBFCfnox64edeH9kEid0vTLTRR8gWR2A20aDgeuTTea4sVtw== 7591 integrity sha512-8321ZMcf1B9HvVX/btKv8mMZahCjn2aYrDlpqHaBFCfnox64edeH9kEid0vTLTRR8gWR2A20aDgeuTTea4sVtw==
@@ -7687,9 +7641,9 @@ terser@^4.6.2, terser@^4.6.3, terser@^4.7.0: @@ -7687,9 +7641,9 @@ terser@^4.6.2, terser@^4.6.3, terser@^4.7.0:
7687 source-map-support "~0.5.12" 7641 source-map-support "~0.5.12"
7688 7642
7689 terser@^5.0.0: 7643 terser@^5.0.0:
7690 - version "5.3.8"  
7691 - resolved "https://registry.npmjs.org/terser/-/terser-5.3.8.tgz#991ae8ba21a3d990579b54aa9af11586197a75dd"  
7692 - integrity sha512-zVotuHoIfnYjtlurOouTazciEfL7V38QMAOhGqpXDEg6yT13cF4+fEP9b0rrCEQTn+tT46uxgFsTZzhygk+CzQ== 7644 + version "5.4.0"
  7645 + resolved "https://registry.npmjs.org/terser/-/terser-5.4.0.tgz#9815c0839072d5c894e22c6fc508fbe9f5e7d7e8"
  7646 + integrity sha512-3dZunFLbCJis9TAF2VnX+VrQLctRUmt1p3W2kCsJuZE4ZgWqh//+1MZ62EanewrqKoUf4zIaDGZAvml4UDc0OQ==
7693 dependencies: 7647 dependencies:
7694 commander "^2.20.0" 7648 commander "^2.20.0"
7695 source-map "~0.7.2" 7649 source-map "~0.7.2"
@@ -7813,16 +7767,6 @@ trim-off-newlines@^1.0.0: @@ -7813,16 +7767,6 @@ trim-off-newlines@^1.0.0:
7813 resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" 7767 resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
7814 integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= 7768 integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
7815 7769
7816 -trim-trailing-lines@^1.0.0:  
7817 - version "1.1.4"  
7818 - resolved "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0"  
7819 - integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==  
7820 -  
7821 -trim@0.0.1:  
7822 - version "0.0.1"  
7823 - resolved "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"  
7824 - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=  
7825 -  
7826 trough@^1.0.0: 7770 trough@^1.0.0:
7827 version "1.0.5" 7771 version "1.0.5"
7828 resolved "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" 7772 resolved "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
@@ -7868,11 +7812,6 @@ type-fest@^0.11.0: @@ -7868,11 +7812,6 @@ type-fest@^0.11.0:
7868 resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" 7812 resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
7869 integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== 7813 integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
7870 7814
7871 -type-fest@^0.13.1:  
7872 - version "0.13.1"  
7873 - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"  
7874 - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==  
7875 -  
7876 type-fest@^0.18.0: 7815 type-fest@^0.18.0:
7877 version "0.18.1" 7816 version "0.18.1"
7878 resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" 7817 resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
@@ -7923,14 +7862,6 @@ uglify-js@^3.1.4: @@ -7923,14 +7862,6 @@ uglify-js@^3.1.4:
7923 resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.6.tgz#144b50d3e05eadd3ad4dd047c60ca541a8cd4e9c" 7862 resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.6.tgz#144b50d3e05eadd3ad4dd047c60ca541a8cd4e9c"
7924 integrity sha512-oASI1FOJ7BBFkSCNDZ446EgkSuHkOZBuqRFrwXIKWCoXw8ZXQETooTQjkAcBS03Acab7ubCKsXnwuV2svy061g== 7863 integrity sha512-oASI1FOJ7BBFkSCNDZ446EgkSuHkOZBuqRFrwXIKWCoXw8ZXQETooTQjkAcBS03Acab7ubCKsXnwuV2svy061g==
7925 7864
7926 -unherit@^1.0.4:  
7927 - version "1.1.3"  
7928 - resolved "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22"  
7929 - integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==  
7930 - dependencies:  
7931 - inherits "^2.0.0"  
7932 - xtend "^4.0.0"  
7933 -  
7934 unicode-canonical-property-names-ecmascript@^1.0.4: 7865 unicode-canonical-property-names-ecmascript@^1.0.4:
7935 version "1.0.4" 7866 version "1.0.4"
7936 resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" 7867 resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
@@ -7954,7 +7885,7 @@ unicode-property-aliases-ecmascript@^1.0.4: @@ -7954,7 +7885,7 @@ unicode-property-aliases-ecmascript@^1.0.4:
7954 resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" 7885 resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
7955 integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== 7886 integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
7956 7887
7957 -unified@^9.0.0: 7888 +unified@^9.1.0:
7958 version "9.2.0" 7889 version "9.2.0"
7959 resolved "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" 7890 resolved "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8"
7960 integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== 7891 integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==
@@ -7988,7 +7919,7 @@ unique-string@^1.0.0: @@ -7988,7 +7919,7 @@ unique-string@^1.0.0:
7988 dependencies: 7919 dependencies:
7989 crypto-random-string "^1.0.0" 7920 crypto-random-string "^1.0.0"
7990 7921
7991 -unist-util-find-all-after@^3.0.1: 7922 +unist-util-find-all-after@^3.0.2:
7992 version "3.0.2" 7923 version "3.0.2"
7993 resolved "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz#fdfecd14c5b7aea5e9ef38d5e0d5f774eeb561f6" 7924 resolved "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz#fdfecd14c5b7aea5e9ef38d5e0d5f774eeb561f6"
7994 integrity sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ== 7925 integrity sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==
@@ -8000,13 +7931,6 @@ unist-util-is@^4.0.0: @@ -8000,13 +7931,6 @@ unist-util-is@^4.0.0:
8000 resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.3.tgz#e8b44db55fc20c43752b3346c116344d45d7c91d" 7931 resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.3.tgz#e8b44db55fc20c43752b3346c116344d45d7c91d"
8001 integrity sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw== 7932 integrity sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw==
8002 7933
8003 -unist-util-remove-position@^2.0.0:  
8004 - version "2.0.1"  
8005 - resolved "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc"  
8006 - integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==  
8007 - dependencies:  
8008 - unist-util-visit "^2.0.0"  
8009 -  
8010 unist-util-stringify-position@^2.0.0: 7934 unist-util-stringify-position@^2.0.0:
8011 version "2.0.3" 7935 version "2.0.3"
8012 resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" 7936 resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da"
@@ -8014,23 +7938,6 @@ unist-util-stringify-position@^2.0.0: @@ -8014,23 +7938,6 @@ unist-util-stringify-position@^2.0.0:
8014 dependencies: 7938 dependencies:
8015 "@types/unist" "^2.0.2" 7939 "@types/unist" "^2.0.2"
8016 7940
8017 -unist-util-visit-parents@^3.0.0:  
8018 - version "3.1.1"  
8019 - resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6"  
8020 - integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==  
8021 - dependencies:  
8022 - "@types/unist" "^2.0.0"  
8023 - unist-util-is "^4.0.0"  
8024 -  
8025 -unist-util-visit@^2.0.0:  
8026 - version "2.0.3"  
8027 - resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c"  
8028 - integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==  
8029 - dependencies:  
8030 - "@types/unist" "^2.0.0"  
8031 - unist-util-is "^4.0.0"  
8032 - unist-util-visit-parents "^3.0.0"  
8033 -  
8034 universalify@^0.1.0: 7941 universalify@^0.1.0:
8035 version "0.1.2" 7942 version "0.1.2"
8036 resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 7943 resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -8091,7 +7998,7 @@ uuid@^3.3.2: @@ -8091,7 +7998,7 @@ uuid@^3.3.2:
8091 resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 7998 resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
8092 integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 7999 integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
8093 8000
8094 -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: 8001 +v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0:
8095 version "2.2.0" 8002 version "2.2.0"
8096 resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" 8003 resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132"
8097 integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== 8004 integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==
@@ -8116,11 +8023,6 @@ vditor@^3.6.2: @@ -8116,11 +8023,6 @@ vditor@^3.6.2:
8116 dependencies: 8023 dependencies:
8117 diff-match-patch "^1.0.5" 8024 diff-match-patch "^1.0.5"
8118 8025
8119 -vfile-location@^3.0.0:  
8120 - version "3.2.0"  
8121 - resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c"  
8122 - integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==  
8123 -  
8124 vfile-message@^2.0.0: 8026 vfile-message@^2.0.0:
8125 version "2.0.4" 8027 version "2.0.4"
8126 resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" 8028 resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
@@ -8265,12 +8167,12 @@ vue-eslint-parser@^7.1.1: @@ -8265,12 +8167,12 @@ vue-eslint-parser@^7.1.1:
8265 esquery "^1.0.1" 8167 esquery "^1.0.1"
8266 lodash "^4.17.15" 8168 lodash "^4.17.15"
8267 8169
8268 -vue-i18n@^9.0.0-beta.6:  
8269 - version "9.0.0-beta.6"  
8270 - resolved "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.0.0-beta.6.tgz#ea89cee5ade18f2a2d0f2ead0ac4a6bedccade6e"  
8271 - integrity sha512-6WWNumUYOnoFi50szUxhxNjTntWlL3SSb6DCoDQW3aKIGK6xTKj9bLI1gnSPfFn54dTYlJtzxEHuY8C/kvm7kg== 8170 +vue-i18n@^9.0.0-beta.7:
  8171 + version "9.0.0-beta.7"
  8172 + resolved "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.0.0-beta.7.tgz#f6fad5b4be218018aab4797f80dd2a95ee5236f9"
  8173 + integrity sha512-hFl0XnV91P/4UyWvHYvdYxuk3GRnKIW9zXAm6hrUU4mOIwpqchi7jVQva2TJLr52Mpsu4zYXmzL1h5pgrKmCfQ==
8272 dependencies: 8174 dependencies:
8273 - source-map "^0.6.1" 8175 + source-map "0.6.1"
8274 8176
8275 vue-router@^4.0.0-rc.3: 8177 vue-router@^4.0.0-rc.3:
8276 version "4.0.0-rc.3" 8178 version "4.0.0-rc.3"
@@ -8571,7 +8473,7 @@ xlsx@^0.16.8: @@ -8571,7 +8473,7 @@ xlsx@^0.16.8:
8571 wmf "~1.0.1" 8473 wmf "~1.0.1"
8572 word "~0.3.0" 8474 word "~0.3.0"
8573 8475
8574 -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: 8476 +xtend@~4.0.1:
8575 version "4.0.2" 8477 version "4.0.2"
8576 resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 8478 resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
8577 integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 8479 integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
@@ -8609,7 +8511,7 @@ yargs-parser@^13.1.2: @@ -8609,7 +8511,7 @@ yargs-parser@^13.1.2:
8609 camelcase "^5.0.0" 8511 camelcase "^5.0.0"
8610 decamelize "^1.2.0" 8512 decamelize "^1.2.0"
8611 8513
8612 -yargs-parser@^18.1.2, yargs-parser@^18.1.3: 8514 +yargs-parser@^18.1.2:
8613 version "18.1.3" 8515 version "18.1.3"
8614 resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" 8516 resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
8615 integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== 8517 integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
@@ -8683,6 +8585,11 @@ zrender@4.3.2: @@ -8683,6 +8585,11 @@ zrender@4.3.2:
8683 resolved "https://registry.npmjs.org/zrender/-/zrender-4.3.2.tgz#ec7432f9415c82c73584b6b7b8c47e1b016209c6" 8585 resolved "https://registry.npmjs.org/zrender/-/zrender-4.3.2.tgz#ec7432f9415c82c73584b6b7b8c47e1b016209c6"
8684 integrity sha512-bIusJLS8c4DkIcdiK+s13HiQ/zjQQVgpNohtd8d94Y2DnJqgM1yjh/jpDb8DoL6hd7r8Awagw8e3qK/oLaWr3g== 8586 integrity sha512-bIusJLS8c4DkIcdiK+s13HiQ/zjQQVgpNohtd8d94Y2DnJqgM1yjh/jpDb8DoL6hd7r8Awagw8e3qK/oLaWr3g==
8685 8587
  8588 +zwitch@^1.0.0:
  8589 + version "1.0.5"
  8590 + resolved "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"
  8591 + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==
  8592 +
8686 zxcvbn@^4.4.2: 8593 zxcvbn@^4.4.2:
8687 version "4.4.2" 8594 version "4.4.2"
8688 resolved "https://registry.npmjs.org/zxcvbn/-/zxcvbn-4.4.2.tgz#28ec17cf09743edcab056ddd8b1b06262cc73c30" 8595 resolved "https://registry.npmjs.org/zxcvbn/-/zxcvbn-4.4.2.tgz#28ec17cf09743edcab056ddd8b1b06262cc73c30"