From 22e8192b58919fdeba8465c81e29f0d2cbf41ab1 Mon Sep 17 00:00:00 2001
From: hooray <304327508@qq.com>
Date: Sun, 25 Sep 2022 23:32:45 +0800
Subject: [PATCH] =?UTF-8?q?TypeScript=20=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.editorconfig | 5 +-
.env.example | 4 +-
.env.production | 17 -
.env.test | 17 -
.eslintignore | 2 -
.eslintrc | 3 +
.eslintrc.js | 101 -
.gitignore | 3 +-
.lintstagedrc | 6 +-
.npmrc | 2 +
.stylelintrc | 65 +-
.vscode/extensions.json | 14 +-
.vscode/settings.json | 10 +-
index.html | 110 +-
jsconfig.json | 12 -
package.json | 152 +-
plop-templates/component/index.hbs | 11 +-
plop-templates/component/prompt.js | 113 +-
plop-templates/mock/mock.hbs | 80 -
plop-templates/mock/prompt.js | 43 -
plop-templates/page/index.hbs | 12 +-
plop-templates/page/prompt.js | 96 +-
plop-templates/store/index.hbs | 14 +-
plop-templates/store/prompt.js | 50 +-
plopfile.js | 11 +-
pnpm-lock.yaml | 1800 ++++++++++++-----
postcss.config.js | 5 +
public/{ => browser_upgrade}/index.css | 0
public/icons/icons.json | 1 +
scripts/prepare.js | 16 +-
scss.template.hbs | 44 +-
src/App.vue | 117 +-
src/api/index.js | 82 -
src/api/index.ts | 83 +
src/assets/icons/captcha.svg | 1 -
src/assets/icons/eye-open.svg | 1 -
src/assets/icons/eye.svg | 1 -
src/assets/icons/password.svg | 1 -
src/assets/icons/sidebar-element.svg | 1 -
src/assets/icons/sidebar-permission.svg | 1 -
src/assets/icons/user.svg | 1 -
src/assets/sprites/.gitkeep | 0
src/assets/sprites/example/address.png | Bin 4903 -> 0 bytes
src/assets/sprites/example/feedback.png | Bin 3181 -> 0 bytes
src/assets/sprites/example/payment.png | Bin 4487 -> 0 bytes
src/assets/styles/element-plus/dark.scss | 11 +-
src/assets/styles/element-plus/index.scss | 9 +-
src/assets/styles/globals.scss | 93 +-
src/assets/styles/nprogress.scss | 100 +-
src/assets/styles/resources/utils.scss | 75 +-
src/assets/styles/themes.scss | 156 +-
src/auto-imports.d.ts | 75 +
src/components.d.ts | 30 +
src/components/Auth/index.vue | 23 +-
src/components/AuthAll/index.vue | 23 +-
src/components/BatchActionBar/index.vue | 113 +-
src/components/Copyright/index.vue | 68 +-
src/components/Editor/index.vue | 96 +-
src/components/FileUpload/index.vue | 190 +-
src/components/FixedActionBar/index.vue | 62 +-
src/components/ImagePreview/index.vue | 89 +-
src/components/ImageUpload/index.vue | 425 ++--
src/components/ImagesUpload/index.vue | 491 ++---
src/components/PageHeader/index.vue | 99 +-
src/components/PageMain/index.vue | 135 +-
src/components/PcasCascader/index.vue | 222 +-
src/components/SearchBar/index.vue | 102 +-
src/components/SvgIcon/index.vue | 76 +-
src/components/SystemInfo/index.vue | 51 +
src/components/Trend/index.vue | 101 +-
src/global.d.ts | 266 +++
src/iconify-ep/index.js | 6 -
src/iconify-ep/index.ts | 6 +
src/layout/components/AppSetting/index.vue | 457 -----
src/layout/components/BuyIt/index.vue | 114 --
src/layout/components/Header/index.vue | 170 --
src/layout/components/Logo/index.vue | 68 -
src/layout/components/MainSidebar/index.vue | 101 -
src/layout/components/Search/index.vue | 398 ----
src/layout/components/SidebarItem/index.vue | 147 --
src/layout/components/SubSidebar/index.vue | 140 --
src/layout/components/Tools/index.vue | 168 --
src/layout/components/Topbar/index.vue | 142 --
src/layout/index.vue | 210 --
src/layouts/components/AppSetting/index.vue | 532 +++++
src/layouts/components/BuyIt/index.vue | 125 ++
src/layouts/components/Header/index.vue | 191 ++
src/layouts/components/HotkeysIntro/index.vue | 51 +
src/layouts/components/Logo/index.vue | 75 +
src/layouts/components/MainSidebar/index.vue | 113 ++
src/layouts/components/Search/index.vue | 448 ++++
src/layouts/components/SidebarItem/index.vue | 151 ++
src/layouts/components/SubSidebar/index.vue | 160 ++
src/layouts/components/Tools/index.vue | 191 ++
src/layouts/components/Topbar/index.vue | 155 ++
src/layouts/index.vue | 240 +++
src/{main.js => main.ts} | 29 +-
src/menu/index.js | 15 -
src/menu/index.ts | 17 +
src/menu/modules/multilevel.menu.example.js | 46 -
src/menu/modules/multilevel.menu.example.ts | 50 +
src/mock/member.js | 54 -
src/mock/member.ts | 55 +
src/mock/menu.js | 68 -
src/mock/menu.ts | 68 +
src/mock/route.js | 86 -
src/mock/route.ts | 86 +
src/mockProdServer.js | 11 -
src/mockProdServer.ts | 11 +
src/router/index.js | 153 --
src/router/index.ts | 164 ++
src/router/modules/breadcrumb.example.js | 61 -
src/router/modules/breadcrumb.example.ts | 65 +
src/router/modules/component.basic.example.js | 126 --
src/router/modules/component.basic.example.ts | 122 ++
.../modules/component.extend.example.js | 110 -
.../modules/component.extend.example.ts | 114 ++
src/router/modules/ecology.example.js | 66 -
src/router/modules/ecology.example.ts | 70 +
src/router/modules/external.link.example.js | 26 -
src/router/modules/external.link.example.ts | 29 +
src/router/modules/jsx.example.js | 25 -
src/router/modules/jsx.example.ts | 29 +
src/router/modules/keep.alive.example.js | 81 -
src/router/modules/keep.alive.example.ts | 85 +
src/router/modules/mock.example.js | 25 -
src/router/modules/mock.example.ts | 29 +
src/router/modules/multilevel.menu.example.js | 66 -
src/router/modules/multilevel.menu.example.ts | 70 +
src/router/modules/permission.example.js | 26 -
src/router/modules/permission.example.ts | 30 +
src/router/routes.js | 161 --
src/router/routes.ts | 157 ++
src/settings.custom.json | 1 -
src/settings.default.ts | 56 +
src/settings.js | 102 -
src/settings.ts | 23 +
src/shims.d.ts | 19 +
src/store/{index.js => index.ts} | 0
src/store/modules/keepAlive.js | 36 -
src/store/modules/keepAlive.ts | 38 +
src/store/modules/menu.js | 180 --
src/store/modules/menu.ts | 206 ++
src/store/modules/route.js | 233 ---
src/store/modules/route.ts | 240 +++
src/store/modules/settings.js | 58 -
src/store/modules/settings.ts | 72 +
src/store/modules/user.js | 93 -
src/store/modules/user.ts | 97 +
src/utils/composables/auth/index.js | 43 -
src/utils/composables/index.js | 9 -
src/utils/composables/mainPage/index.js | 15 -
src/utils/composables/menu/index.js | 24 -
src/utils/composables/useAuth.ts | 39 +
src/utils/composables/useCurrentInstance.ts | 6 +
src/utils/composables/useMainPage.ts | 13 +
src/utils/composables/useMenu.ts | 24 +
src/utils/dayjs.ts | 6 +
src/utils/directive.js | 19 -
src/utils/directive.ts | 17 +
src/utils/{eventBus.js => eventBus.ts} | 0
src/utils/index.js | 48 -
src/utils/index.ts | 15 +
src/views/[...all].vue | 99 +-
src/views/breadcrumb_example/detail1.vue | 19 +-
src/views/breadcrumb_example/detail2.vue | 19 +-
src/views/breadcrumb_example/list1.vue | 17 +-
src/views/breadcrumb_example/list2.vue | 17 +-
src/views/component_basic_example/button.vue | 481 +++--
.../component_basic_example/checkbox.vue | 118 +-
.../components/alert.vue | 23 +-
.../component_basic_example/datepicker.vue | 138 +-
.../datetimepicker.vue | 57 +-
src/views/component_basic_example/icon.vue | 96 +-
src/views/component_basic_example/input.vue | 98 +-
.../component_basic_example/inputnumber.vue | 68 +-
src/views/component_basic_example/link.vue | 119 +-
src/views/component_basic_example/radio.vue | 110 +-
src/views/component_basic_example/rate.vue | 52 +-
src/views/component_basic_example/select.vue | 122 +-
src/views/component_basic_example/slider.vue | 107 +-
src/views/component_basic_example/switch.vue | 56 +-
.../component_basic_example/timepicker.vue | 107 +-
.../actionbar.demo.vue | 317 +--
.../batchactionbar.demo.vue | 144 +-
.../component_extend_example/editor.demo.vue | 57 +-
.../image.preview.demo.vue | 35 +-
.../pageheader.demo.vue | 43 +-
.../pagemain.demo.vue | 85 +-
.../component_extend_example/pcas.demo.vue | 102 +-
.../searchbar.demo.vue | 299 +--
.../component_extend_example/svg.demo.vue | 111 +-
.../table.autoheight.demo.vue | 287 ++-
.../component_extend_example/trend.demo.vue | 91 +-
.../component_extend_example/upload.demo.vue | 104 +-
src/views/index.vue | 507 ++---
.../jsx_example/components/JsxComp/index.vue | 25 +-
src/views/jsx_example/index.jsx | 51 -
src/views/jsx_example/index.module.scss | 30 +-
src/views/jsx_example/index.tsx | 51 +
src/views/keep_alive_example/detail.vue | 17 +-
.../keep_alive_example/nested/nested.vue | 31 +-
.../nested/nested/nested.vue | 31 +-
.../nested/nested/nested/index.vue | 32 +-
.../nested/nested/nested/index2.vue | 32 +-
src/views/keep_alive_example/page.vue | 93 +-
src/views/login.vue | 866 ++++----
src/views/mock_example/index.vue | 59 +-
.../level2/level3/page1.vue | 19 +-
.../level2/level3/page2.vue | 19 +-
.../multilevel_menu_example/level2/page.vue | 19 +-
src/views/multilevel_menu_example/page.vue | 19 +-
src/views/permission_example/index.vue | 220 +-
src/views/personal/edit.password.vue | 145 +-
src/views/personal/setting.vue | 296 +--
src/views/reload.vue | 12 +-
src/views/videos_example/coming.soon.vue | 15 +-
tsconfig.json | 42 +
tsconfig.node.json | 14 +
vite.config.js | 88 -
vite.config.ts | 77 +
vite/plugins/auto-import.js | 29 -
vite/plugins/auto-import.ts | 19 +
vite/plugins/{banner.js => banner.ts} | 6 +-
vite/plugins/components.js | 13 -
vite/plugins/components.ts | 9 +
vite/plugins/compression.js | 25 -
vite/plugins/compression.ts | 25 +
vite/plugins/html.js | 29 -
vite/plugins/html.ts | 87 +
vite/plugins/index.js | 33 -
vite/plugins/index.ts | 38 +
vite/plugins/jsx.js | 5 -
vite/plugins/layouts.js | 8 -
vite/plugins/layouts.ts | 7 +
vite/plugins/mock.js | 14 -
vite/plugins/mock.ts | 14 +
vite/plugins/pages.js | 10 -
vite/plugins/pages.ts | 10 +
vite/plugins/restart.js | 14 -
vite/plugins/restart.ts | 13 +
.../{setup-extend.js => setup-extend.ts} | 2 +-
vite/plugins/spritesmith.js | 49 -
vite/plugins/spritesmith.ts | 48 +
vite/plugins/svg-icon.js | 10 -
vite/plugins/svg-icon.ts | 10 +
246 files changed, 11721 insertions(+), 10280 deletions(-)
delete mode 100644 .env.production
delete mode 100644 .env.test
create mode 100644 .eslintrc
delete mode 100644 .eslintrc.js
create mode 100644 .npmrc
delete mode 100644 jsconfig.json
delete mode 100644 plop-templates/mock/mock.hbs
delete mode 100644 plop-templates/mock/prompt.js
create mode 100644 postcss.config.js
rename public/{ => browser_upgrade}/index.css (100%)
create mode 100644 public/icons/icons.json
delete mode 100644 src/api/index.js
create mode 100644 src/api/index.ts
delete mode 100644 src/assets/icons/captcha.svg
delete mode 100644 src/assets/icons/eye-open.svg
delete mode 100644 src/assets/icons/eye.svg
delete mode 100644 src/assets/icons/password.svg
delete mode 100644 src/assets/icons/sidebar-element.svg
delete mode 100644 src/assets/icons/sidebar-permission.svg
delete mode 100644 src/assets/icons/user.svg
create mode 100644 src/assets/sprites/.gitkeep
delete mode 100644 src/assets/sprites/example/address.png
delete mode 100644 src/assets/sprites/example/feedback.png
delete mode 100644 src/assets/sprites/example/payment.png
create mode 100644 src/auto-imports.d.ts
create mode 100644 src/components.d.ts
create mode 100644 src/components/SystemInfo/index.vue
create mode 100644 src/global.d.ts
delete mode 100644 src/iconify-ep/index.js
create mode 100644 src/iconify-ep/index.ts
delete mode 100644 src/layout/components/AppSetting/index.vue
delete mode 100644 src/layout/components/BuyIt/index.vue
delete mode 100644 src/layout/components/Header/index.vue
delete mode 100644 src/layout/components/Logo/index.vue
delete mode 100644 src/layout/components/MainSidebar/index.vue
delete mode 100644 src/layout/components/Search/index.vue
delete mode 100644 src/layout/components/SidebarItem/index.vue
delete mode 100644 src/layout/components/SubSidebar/index.vue
delete mode 100644 src/layout/components/Tools/index.vue
delete mode 100644 src/layout/components/Topbar/index.vue
delete mode 100644 src/layout/index.vue
create mode 100644 src/layouts/components/AppSetting/index.vue
create mode 100644 src/layouts/components/BuyIt/index.vue
create mode 100644 src/layouts/components/Header/index.vue
create mode 100644 src/layouts/components/HotkeysIntro/index.vue
create mode 100644 src/layouts/components/Logo/index.vue
create mode 100644 src/layouts/components/MainSidebar/index.vue
create mode 100644 src/layouts/components/Search/index.vue
create mode 100644 src/layouts/components/SidebarItem/index.vue
create mode 100644 src/layouts/components/SubSidebar/index.vue
create mode 100644 src/layouts/components/Tools/index.vue
create mode 100644 src/layouts/components/Topbar/index.vue
create mode 100644 src/layouts/index.vue
rename src/{main.js => main.ts} (80%)
delete mode 100644 src/menu/index.js
create mode 100644 src/menu/index.ts
delete mode 100644 src/menu/modules/multilevel.menu.example.js
create mode 100644 src/menu/modules/multilevel.menu.example.ts
delete mode 100644 src/mock/member.js
create mode 100644 src/mock/member.ts
delete mode 100644 src/mock/menu.js
create mode 100644 src/mock/menu.ts
delete mode 100644 src/mock/route.js
create mode 100644 src/mock/route.ts
delete mode 100644 src/mockProdServer.js
create mode 100644 src/mockProdServer.ts
delete mode 100644 src/router/index.js
create mode 100644 src/router/index.ts
delete mode 100644 src/router/modules/breadcrumb.example.js
create mode 100644 src/router/modules/breadcrumb.example.ts
delete mode 100644 src/router/modules/component.basic.example.js
create mode 100644 src/router/modules/component.basic.example.ts
delete mode 100644 src/router/modules/component.extend.example.js
create mode 100644 src/router/modules/component.extend.example.ts
delete mode 100644 src/router/modules/ecology.example.js
create mode 100644 src/router/modules/ecology.example.ts
delete mode 100644 src/router/modules/external.link.example.js
create mode 100644 src/router/modules/external.link.example.ts
delete mode 100644 src/router/modules/jsx.example.js
create mode 100644 src/router/modules/jsx.example.ts
delete mode 100644 src/router/modules/keep.alive.example.js
create mode 100644 src/router/modules/keep.alive.example.ts
delete mode 100644 src/router/modules/mock.example.js
create mode 100644 src/router/modules/mock.example.ts
delete mode 100644 src/router/modules/multilevel.menu.example.js
create mode 100644 src/router/modules/multilevel.menu.example.ts
delete mode 100644 src/router/modules/permission.example.js
create mode 100644 src/router/modules/permission.example.ts
delete mode 100644 src/router/routes.js
create mode 100644 src/router/routes.ts
delete mode 100644 src/settings.custom.json
create mode 100644 src/settings.default.ts
delete mode 100644 src/settings.js
create mode 100644 src/settings.ts
create mode 100644 src/shims.d.ts
rename src/store/{index.js => index.ts} (100%)
delete mode 100644 src/store/modules/keepAlive.js
create mode 100644 src/store/modules/keepAlive.ts
delete mode 100644 src/store/modules/menu.js
create mode 100644 src/store/modules/menu.ts
delete mode 100644 src/store/modules/route.js
create mode 100644 src/store/modules/route.ts
delete mode 100644 src/store/modules/settings.js
create mode 100644 src/store/modules/settings.ts
delete mode 100644 src/store/modules/user.js
create mode 100644 src/store/modules/user.ts
delete mode 100644 src/utils/composables/auth/index.js
delete mode 100644 src/utils/composables/index.js
delete mode 100644 src/utils/composables/mainPage/index.js
delete mode 100644 src/utils/composables/menu/index.js
create mode 100644 src/utils/composables/useAuth.ts
create mode 100644 src/utils/composables/useCurrentInstance.ts
create mode 100644 src/utils/composables/useMainPage.ts
create mode 100644 src/utils/composables/useMenu.ts
create mode 100644 src/utils/dayjs.ts
delete mode 100644 src/utils/directive.js
create mode 100644 src/utils/directive.ts
rename src/utils/{eventBus.js => eventBus.ts} (100%)
delete mode 100644 src/utils/index.js
create mode 100644 src/utils/index.ts
delete mode 100644 src/views/jsx_example/index.jsx
create mode 100644 src/views/jsx_example/index.tsx
create mode 100644 tsconfig.json
create mode 100644 tsconfig.node.json
delete mode 100644 vite.config.js
create mode 100644 vite.config.ts
delete mode 100644 vite/plugins/auto-import.js
create mode 100644 vite/plugins/auto-import.ts
rename vite/plugins/{banner.js => banner.ts} (76%)
delete mode 100644 vite/plugins/components.js
create mode 100644 vite/plugins/components.ts
delete mode 100644 vite/plugins/compression.js
create mode 100644 vite/plugins/compression.ts
delete mode 100644 vite/plugins/html.js
create mode 100644 vite/plugins/html.ts
delete mode 100644 vite/plugins/index.js
create mode 100644 vite/plugins/index.ts
delete mode 100644 vite/plugins/jsx.js
delete mode 100644 vite/plugins/layouts.js
create mode 100644 vite/plugins/layouts.ts
delete mode 100644 vite/plugins/mock.js
create mode 100644 vite/plugins/mock.ts
delete mode 100644 vite/plugins/pages.js
create mode 100644 vite/plugins/pages.ts
delete mode 100644 vite/plugins/restart.js
create mode 100644 vite/plugins/restart.ts
rename vite/plugins/{setup-extend.js => setup-extend.ts} (80%)
delete mode 100644 vite/plugins/spritesmith.js
create mode 100644 vite/plugins/spritesmith.ts
delete mode 100644 vite/plugins/svg-icon.js
create mode 100644 vite/plugins/svg-icon.ts
diff --git a/.editorconfig b/.editorconfig
index da599f40..9d08a1a8 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -3,10 +3,7 @@ root = true
[*]
charset = utf-8
indent_style = space
-indent_size = 4
+indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
-
-[*.md]
-trim_trailing_whitespace = false
diff --git a/.env.example b/.env.example
index ab9e6cd5..7ea58d8f 100644
--- a/.env.example
+++ b/.env.example
@@ -10,10 +10,8 @@ VITE_APP_API_BASEURL = /
VITE_APP_DEBUG_TOOL =
# 是否在打包时启用 Mock
-VITE_BUILD_MOCK = true
+VITE_BUILD_MOCK = false
# 是否在打包时生成 sourcemap
VITE_BUILD_SOURCEMAP = false
-# 是否在打包时删除 console 代码
-VITE_BUILD_DROP_CONSOLE = true
# 是否在打包时开启压缩,支持 gzip 和 brotli
VITE_BUILD_COMPRESS = gzip,brotli
diff --git a/.env.production b/.env.production
deleted file mode 100644
index 17fad7c5..00000000
--- a/.env.production
+++ /dev/null
@@ -1,17 +0,0 @@
-NODE_ENV = production
-
-# 页面标题
-VITE_APP_TITLE = Fantastic-admin 基础版
-# 接口请求地址,会设置到 axios 的 baseURL 参数上
-VITE_APP_API_BASEURL = /
-# 调试工具,可设置 eruda 或 vconsole,如果不需要开启则留空
-VITE_APP_DEBUG_TOOL =
-
-# 是否在打包时启用 Mock
-VITE_BUILD_MOCK = false
-# 是否在打包时生成 sourcemap
-VITE_BUILD_SOURCEMAP = false
-# 是否在打包时删除 console 代码
-VITE_BUILD_DROP_CONSOLE = true
-# 是否在打包时开启压缩,支持 gzip 和 brotli
-VITE_BUILD_COMPRESS = gzip,brotli
diff --git a/.env.test b/.env.test
deleted file mode 100644
index 9a2b3b61..00000000
--- a/.env.test
+++ /dev/null
@@ -1,17 +0,0 @@
-NODE_ENV = production
-
-# 页面标题
-VITE_APP_TITLE = Fantastic-admin 专业版
-# 接口请求地址,会设置到 axios 的 baseURL 参数上
-VITE_APP_API_BASEURL = /
-# 调试工具,可设置 eruda 或 vconsole,如果不需要开启则留空
-VITE_APP_DEBUG_TOOL =
-
-# 是否在打包时启用 Mock
-VITE_BUILD_MOCK = true
-# 是否在打包时生成 sourcemap
-VITE_BUILD_SOURCEMAP = true
-# 是否在打包时删除 console 代码
-VITE_BUILD_DROP_CONSOLE = true
-# 是否在打包时开启压缩,支持 gzip 和 brotli
-VITE_BUILD_COMPRESS = gzip,brotli
diff --git a/.eslintignore b/.eslintignore
index 58ce8430..1eae0cf6 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,4 +1,2 @@
dist/
node_modules/
-babel.config.js
-.eslintrc.js
diff --git a/.eslintrc b/.eslintrc
new file mode 100644
index 00000000..09c2e423
--- /dev/null
+++ b/.eslintrc
@@ -0,0 +1,3 @@
+{
+ "extends": "@antfu"
+}
diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index 3f4cb551..00000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,101 +0,0 @@
-module.exports = {
- root: true,
- env: {
- browser: true,
- es6: true
- },
- globals: {
- __dirname: true,
- process: true,
- require: true,
- module: true,
- // element-plus
- ElMessage: true,
- ElMessageBox: true,
- ElNotification: true,
- ElLoading: true
- },
- extends: [
- 'plugin:vue/vue3-recommended',
- 'plugin:vue/vue3-strongly-recommended',
- 'eslint:recommended',
- './.eslintrc-auto-import.json'
- ],
- parser: 'vue-eslint-parser',
- parserOptions: {
- ecmaVersion: '2020',
- ecmaFeatures: {
- jsx: true
- }
- },
- rules: {
- // 代码风格
- 'block-spacing': [2, 'always'],
- 'brace-style': [2, '1tbs', {
- 'allowSingleLine': true
- }],
- 'comma-spacing': [2, {
- 'before': false,
- 'after': true
- }],
- 'comma-dangle': [2, 'never'],
- 'comma-style': [2, 'last'],
- 'computed-property-spacing': [2, 'never'],
- 'indent': [2, 4, {
- 'SwitchCase': 1
- }],
- 'key-spacing': [2, {
- 'beforeColon': false,
- 'afterColon': true
- }],
- 'keyword-spacing': [2, {
- 'before': true,
- 'after': true
- }],
- 'linebreak-style': 0,
- 'multiline-ternary': [2, 'always-multiline'],
- 'no-multiple-empty-lines': [2, {
- 'max': 1
- }],
- 'no-unneeded-ternary': [2, {
- 'defaultAssignment': false
- }],
- 'quotes': [2, 'single'],
- 'semi': [2, 'never'],
- 'space-before-blocks': [2, 'always'],
- 'space-before-function-paren': [2, 'never'],
- 'space-in-parens': [2, 'never'],
- 'space-infix-ops': 2,
- 'space-unary-ops': [2, {
- 'words': true,
- 'nonwords': false
- }],
- 'spaced-comment': [2, 'always', {
- 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
- }],
- 'switch-colon-spacing': [2, {
- 'after': true,
- 'before': false
- }],
- 'object-curly-spacing': [2, 'always'],
- // ES6
- 'arrow-parens': [2, 'as-needed'],
- 'arrow-spacing': [2, {
- 'before': true,
- 'after': true
- }],
- // Vue - https://github.com/vuejs/eslint-plugin-vue
- 'vue/multi-word-component-names': 0,
- 'vue/html-indent': [2, 4],
- 'vue/no-v-html': 0,
- 'vue/max-attributes-per-line': 0,
- 'vue/require-default-prop': 0,
- 'vue/singleline-html-element-content-newline': 0,
- 'vue/require-explicit-emits': [2, {
- 'allowProps': true
- }],
- 'vue/script-indent': [2, 4, {
- 'switchCase': 1
- }]
- }
-};
diff --git a/.gitignore b/.gitignore
index c66a0a66..165d220b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,5 @@ node_modules
dist*
dist-ssr
*.local
-.eslintrc-auto-import.json
-public/icons
src/assets/sprites/*.*
+!src/assets/sprites/.gitkeep
diff --git a/.lintstagedrc b/.lintstagedrc
index b35aaba8..fc89276a 100644
--- a/.lintstagedrc
+++ b/.lintstagedrc
@@ -1,5 +1,5 @@
{
- "src/**/*.{js,jsx}": "eslint --fix",
- "src/**/*.{css,scss}": "stylelint --fix --allow-empty-input",
- "src/**/*.vue": ["eslint --fix", "stylelint --fix --allow-empty-input"]
+ "src/**/*.{js,jsx,ts,tsx}": "eslint --fix",
+ "src/**/*.{css,scss}": "stylelint --fix --allow-empty-input",
+ "src/**/*.vue": ["eslint --fix", "stylelint --fix --allow-empty-input"]
}
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 00000000..cf040424
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1,2 @@
+shamefully-hoist=true
+strict-peer-dependencies=false
diff --git a/.stylelintrc b/.stylelintrc
index a848b996..f397ec98 100644
--- a/.stylelintrc
+++ b/.stylelintrc
@@ -1,48 +1,23 @@
{
- "extends": [
- "stylelint-config-standard",
- "stylelint-config-recommended-vue/scss"
- ],
- "overrides": [
- {
- "files": ["**/*.scss"],
- "customSyntax": "postcss-scss"
- }
- ],
- "plugins": [
- "stylelint-scss"
- ],
- "rules": {
- "indentation": 4,
- "rule-empty-line-before": "never",
- "at-rule-empty-line-before": "never",
- "at-rule-no-unknown": null,
- "no-descending-specificity": null,
- "selector-pseudo-class-no-unknown": null,
- "property-no-unknown": null,
- "font-family-no-missing-generic-family-keyword": null,
- "selector-id-pattern": null,
- "selector-class-pattern": null,
- "scss/no-global-function-names": null,
- "scss/at-import-partial-extension": null,
- "function-no-unknown": [
- true,
- {
- "ignoreFunctions": [
- "v-bind",
- "lighten",
- "darken"
- ]
- }
- ],
- "property-no-vendor-prefix": [
- true,
- {
- "ignoreProperties": [
- "mask-image"
- ]
- }
- ],
- "max-line-length": null
+ "extends": [
+ "stylelint-config-standard",
+ "stylelint-config-standard-vue/scss"
+ ],
+ "overrides": [
+ {
+ "files": ["**/*.scss"],
+ "customSyntax": "postcss-scss"
}
+ ],
+ "plugins": [
+ "stylelint-scss"
+ ],
+ "rules": {
+ "at-rule-no-unknown": null,
+ "no-descending-specificity": null,
+ "property-no-unknown": null,
+ "font-family-no-missing-generic-family-keyword": null,
+ "selector-class-pattern": null,
+ "max-line-length": null
+ }
}
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index bd128e51..fef58956 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -1,9 +1,9 @@
{
- "recommendations": [
- "EditorConfig.EditorConfig",
- "mikestead.dotenv",
- "dbaeumer.vscode-eslint",
- "stylelint.vscode-stylelint",
- "vue.volar"
- ]
+ "recommendations": [
+ "EditorConfig.EditorConfig",
+ "mikestead.dotenv",
+ "dbaeumer.vscode-eslint",
+ "stylelint.vscode-stylelint",
+ "vue.volar"
+ ]
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index f1783033..e5e29ce4 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,7 +1,7 @@
{
- "editor.codeActionsOnSave": {
- "source.fixAll.eslint": true,
- "source.fixAll.stylelint": true
- },
- "stylelint.validate": ["css", "scss", "vue"]
+ "editor.codeActionsOnSave": {
+ "source.fixAll.eslint": true,
+ "source.fixAll.stylelint": true
+ },
+ "stylelint.validate": ["css", "scss", "vue"]
}
diff --git a/index.html b/index.html
index b673219b..c801c4c5 100644
--- a/index.html
+++ b/index.html
@@ -1,78 +1,40 @@
-
-
-
-
-
- <%= title %>
- <%- copyrightScript %>
- <% if (appMode == 'example') { %>
-
- <% } %>
-
-
-
-
-
+
+
+
+
+
+
<%= title %>
+ <%- copyrightScript %>
+
+
+
+
+
-
-
- <% if (debugTool == 'eruda') { %>
-
-
- <% } %>
- <% if (debugTool == 'vconsole') { %>
-
-
- <% } %>
-
+
<%= title %>载入中…
+
+
+
+ <%- loadingScript %>
+
+ <%- devtoolScript %>
+
diff --git a/jsconfig.json b/jsconfig.json
deleted file mode 100644
index bfb2bc61..00000000
--- a/jsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "compilerOptions": {
- "target": "es2017",
- "allowSyntheticDefaultImports": false,
- "baseUrl": "./",
- "paths": {
- "@/*": ["src/*"]
- },
- "jsx": "preserve"
- },
- "exclude": ["node_modules", "dist", "dist-test"]
-}
diff --git a/package.json b/package.json
index df044936..edba3dba 100644
--- a/package.json
+++ b/package.json
@@ -1,79 +1,77 @@
{
- "name": "fantastic-admin",
- "version": "0.1.0",
- "scripts": {
- "dev": "vite",
- "build:test": "vite build --mode test",
- "build": "vite build",
- "build:example": "vite build --mode example",
- "serve:test": "http-server ./dist-test -o",
- "serve": "http-server ./dist -o",
- "serve:example": "http-server ./dist-example -o",
- "svgo": "svgo -f src/assets/icons",
- "new": "plop",
- "lint:eslint": "eslint src/**/*.{js,vue} --fix",
- "lint:stylelint": "stylelint src/**/*.{css,scss,vue} --fix",
- "prepare": "husky install",
- "postinstall": "esno scripts/prepare.js",
- "preinstall": "npx only-allow pnpm"
- },
- "dependencies": {
- "@tinymce/tinymce-vue": "^5.0.0",
- "@vueuse/core": "^9.2.0",
- "@vueuse/integrations": "^9.2.0",
- "axios": "^0.27.2",
- "dayjs": "^1.11.5",
- "element-plus": "^2.2.16",
- "hotkeys-js": "^3.10.0",
- "js-cookie": "^3.0.1",
- "mavon-editor": "^3.0.0-beta",
- "mitt": "^3.0.0",
- "mockjs": "^1.1.0",
- "nprogress": "^0.2.0",
- "path-browserify": "^1.0.1",
- "path-to-regexp": "^6.2.1",
- "pinia": "^2.0.22",
- "qs": "^6.11.0",
- "tinymce": "^6.2.0",
- "vue": "^3.2.39",
- "vue-router": "^4.1.3"
- },
- "devDependencies": {
- "@iconify-json/ep": "^1.1.7",
- "@iconify/vue": "^4.0.0",
- "@vitejs/plugin-vue": "^3.1.0",
- "@vitejs/plugin-vue-jsx": "^2.0.1",
- "@vue/compiler-sfc": "^3.2.39",
- "eslint": "^8.23.1",
- "eslint-plugin-vue": "^9.3.0",
- "esno": "^0.16.3",
- "fs-extra": "^10.1.0",
- "http-server": "^14.1.1",
- "husky": "^8.0.1",
- "lint-staged": "^13.0.3",
- "plop": "^3.1.1",
- "postcss-html": "^1.5.0",
- "postcss-scss": "^4.0.5",
- "sass": "^1.54.9",
- "stylelint": "^14.10.0",
- "stylelint-config-recommended-scss": "^7.0.0",
- "stylelint-config-recommended-vue": "^1.4.0",
- "stylelint-config-standard": "^28.0.0",
- "stylelint-scss": "^4.3.0",
- "svgo": "^2.8.0",
- "unplugin-auto-import": "^0.11.2",
- "unplugin-vue-components": "^0.22.7",
- "vite": "^3.1.1",
- "vite-plugin-banner": "^0.5.0",
- "vite-plugin-compression": "^0.5.1",
- "vite-plugin-html": "^3.2.0",
- "vite-plugin-mock": "^2.9.6",
- "vite-plugin-pages": "^0.26.0",
- "vite-plugin-restart": "^0.2.0",
- "vite-plugin-spritesmith": "^0.1.1",
- "vite-plugin-svg-icons": "^2.0.1",
- "vite-plugin-vue-layouts": "^0.6.0",
- "vite-plugin-vue-setup-extend": "^0.4.0",
- "vue-eslint-parser": "^9.1.0"
- }
+ "version": "1.0.0",
+ "scripts": {
+ "dev": "vite",
+ "build:example": "vue-tsc --noEmit && vite build --mode example",
+ "serve:example": "http-server ./dist-example -o",
+ "svgo": "svgo -f src/assets/icons",
+ "new": "plop",
+ "lint:eslint": "eslint src/**/*.{ts,tsx,vue} --fix",
+ "lint:stylelint": "stylelint src/**/*.{css,scss,vue} --fix",
+ "prepare": "husky install",
+ "postinstall": "esno scripts/prepare.js",
+ "preinstall": "npx only-allow pnpm"
+ },
+ "dependencies": {
+ "@tinymce/tinymce-vue": "^5.0.0",
+ "@vueuse/core": "^9.2.0",
+ "@vueuse/integrations": "^9.2.0",
+ "axios": "^0.27.2",
+ "dayjs": "^1.11.5",
+ "element-plus": "^2.2.17",
+ "hotkeys-js": "^3.10.0",
+ "lodash-es": "^4.17.21",
+ "mitt": "^3.0.0",
+ "mockjs": "^1.1.0",
+ "nprogress": "^0.2.0",
+ "path-browserify": "^1.0.1",
+ "path-to-regexp": "^6.2.1",
+ "pinia": "^2.0.22",
+ "qs": "^6.11.0",
+ "tinymce": "^6.2.0",
+ "vue": "^3.2.39",
+ "vue-router": "^4.1.5"
+ },
+ "devDependencies": {
+ "@antfu/eslint-config": "^0.27.0",
+ "@iconify-json/ep": "^1.1.7",
+ "@iconify/vue": "^4.0.0",
+ "@types/nprogress": "^0.2.0",
+ "@types/path-browserify": "^1.0.0",
+ "@types/qs": "^6.9.7",
+ "@vitejs/plugin-vue": "^3.1.0",
+ "@vitejs/plugin-vue-jsx": "^2.0.1",
+ "autoprefixer": "^10.4.12",
+ "eslint": "^8.24.0",
+ "esno": "^0.16.3",
+ "fs-extra": "^10.1.0",
+ "http-server": "^14.1.1",
+ "husky": "^8.0.1",
+ "lint-staged": "^13.0.3",
+ "plop": "^3.1.1",
+ "postcss-html": "^1.5.0",
+ "postcss-scss": "^4.0.5",
+ "sass": "^1.55.0",
+ "stylelint": "^14.12.1",
+ "stylelint-config-standard": "^28.0.0",
+ "stylelint-config-standard-scss": "^5.0.0",
+ "stylelint-config-standard-vue": "^1.0.0",
+ "stylelint-scss": "^4.3.0",
+ "svgo": "^2.8.0",
+ "typescript": "^4.8.3",
+ "unplugin-auto-import": "^0.11.2",
+ "unplugin-vue-components": "^0.22.7",
+ "vite": "^3.1.3",
+ "vite-plugin-banner": "^0.5.0",
+ "vite-plugin-compression": "^0.5.1",
+ "vite-plugin-html": "^3.2.0",
+ "vite-plugin-mock": "^2.9.6",
+ "vite-plugin-pages": "^0.26.0",
+ "vite-plugin-restart": "^0.2.0",
+ "vite-plugin-spritesmith": "^0.1.1",
+ "vite-plugin-svg-icons": "^2.0.1",
+ "vite-plugin-vue-layouts": "^0.6.0",
+ "vite-plugin-vue-setup-extend": "^0.4.0",
+ "vue-tsc": "^0.40.13"
+ }
}
diff --git a/plop-templates/component/index.hbs b/plop-templates/component/index.hbs
index 2ca042bb..cc1916c9 100644
--- a/plop-templates/component/index.hbs
+++ b/plop-templates/component/index.hbs
@@ -1,12 +1,11 @@
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/eye-open.svg b/src/assets/icons/eye-open.svg
deleted file mode 100644
index b80fd2b6..00000000
--- a/src/assets/icons/eye-open.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/assets/icons/eye.svg b/src/assets/icons/eye.svg
deleted file mode 100644
index 16ed2d87..00000000
--- a/src/assets/icons/eye.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/assets/icons/password.svg b/src/assets/icons/password.svg
deleted file mode 100644
index e291d85d..00000000
--- a/src/assets/icons/password.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/assets/icons/sidebar-element.svg b/src/assets/icons/sidebar-element.svg
deleted file mode 100644
index 6965ced0..00000000
--- a/src/assets/icons/sidebar-element.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/assets/icons/sidebar-permission.svg b/src/assets/icons/sidebar-permission.svg
deleted file mode 100644
index 2f812c4f..00000000
--- a/src/assets/icons/sidebar-permission.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/assets/icons/user.svg b/src/assets/icons/user.svg
deleted file mode 100644
index 0ba0716a..00000000
--- a/src/assets/icons/user.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/assets/sprites/.gitkeep b/src/assets/sprites/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/src/assets/sprites/example/address.png b/src/assets/sprites/example/address.png
deleted file mode 100644
index 2b5d1db3dc15de1754efb2d98f2feb21acb3330c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4903
zcmV+?6WHvDP)
zd3aPsw!nYgSqLP7?CFpIi6MjtAqnUpZsUxsq9Vc*5!8Qli5gmD>E#vmYq0s=uKEC~TZAcU}GUz_YnzdwqQ+}q3T?%aC`%=>*`KIrPYRj2CQ
zu5;_usk#Qs>DTDugaSi=LBMrDG++WkfFQsN@Vk`P3^W1dKq*iN6xg5yPJDTnUB519O2#03W?8canNw
z74Qa-qi4lN9qSr^xciO(kJELP0YbLN5wfm9$gT@|C?o`U2l13MO{Y55!iX4Fvk`3w
z(W64GFaR@wTp*RM^8n!vo`^Q&0<#cp(*&&)5)J$atN;Qus^dx!04zteEn15Tv{1-&
z;1F;A(Z15otdfM4tz(uLr*j6
z8=6_SIfpOSXOq7F3>J%P*BgxnMhuN&+Jr>z9XS9mFAr@56_|nX2<5npy9yZ&Y(ZmX
zG&DA|{PP36zb1p?vWu#e85ZozfBa!MkKR8-OU2XxqYy*6OSq$uM1&FR4m5@Z;`$
zo?Eho)90!*DL6Q?xpI-K3h9l|x@N6tYHDHOvTc0y;35;*`27+Zut6m;NfAQ=3+DF%Nof!Q%gpUnVnfxG&Hr^E$ffdZ{Wp$
zza0;wCX?^8z=%u#I)y6=@kWe`nz_o$E9-c8?mG5mp11k^h(SGhWVDI9ZVJN3+qnnC
z`o>l^?Jeh%O@*XqSKG{U^RPawTsncCeyU9;I`Rv`-Znau*%gH>N5gr>`QjQLn7x+V
zQ`XB6DRF+hG$Wef37wm7?#`}e@yGcbI%&50Zt#FGzI9UC!)we0tKoTP8!Y)b!u>tr94SiGp{oXDsWkj2NNc(G|X37A#A>N;F
z|C&fdu(u?A%dS(rz3Nvjs_Y4TjDqW4Ng*?V->D^$oP$S-_@7VqO433Dy!dkQ_4EnT
z#K203iSS|VOM?jTlR7Mx{O>NZk82VwbO#Ey#F0XRfhB56(~;Iz3-e$7f!5acaoodb
z;KTXx^b6N-b+>_0Vi34=v$jOQpih)$Pi8Vc1sS2juuJM
zo|)38(@#?Fa7$t@=1h`Kt@a)|$ENL?glq)@FWdXlo>3owSVz`m+0|l!JEyIZ3=91u
zyR+@hWV}3`Gp6;8t$ek;gpI$HbKr!T(kfw`Lwb3U(%+A9!-JUg+fb+HD-BJp+&1SR
zr;F+@rzItXv-wli*PsBJ5s{e3
zQb;`TpcYcJv3A1|$>;u&-5Ec^?y!29mR1Y%-aAR^vRq1JkE^yQu52Q8SuXS5J4s8c
zvO&1_mJnhhr1tCcw8M(mxyckn#HIvW3i(ev>8jA$YGK1q(y@8!oncN*{1&V@#j5X%
zlrzd$^?ea9tT?5Z&uD;$Mutn$Hf%egm2o#B0tT%TI}(Bh3-=v4a-xKasya#9#9Nia
zoz|z9@$tq&tMqO?{RobWCL%e3h~xx<=u5UZ{;qL6BXKx*xu4E$T+Nt9RbnTk9JIuE95b)YHs61
zzSMbm<3Q!d+)aDSIakskNehbYi(j~XyW5q%Fx74m?VwYE`FRWJG6J6PF8l66YDeCr#g{6uCiue>Z<$o*U8mGyRVs>bEM
z@2HUbwXPN5Vx4rI#;?2bx^`iibhz^Nb>7U$^UBMzg-9!
zjA~cJ(?j!s{r+6qg4b5lSgmVpqq~pP0npfNf4#d6lWbUPyy*NLE6*!0%NFuAcpo2K
z0{6#4yFzZ&qeg&U{!$}eT%kPUPK=Qn=8MJ3^9g%-KFf#{pQ5lWq
zS{lu@n2X9N%*>%I_cRun6YAv|(Rg_{cA8b1o5{+PMx~?-GC90PMUp)cetF&aO;T?R
z1};17>KaP>!7n3-IFIr{j42
z$yldCMfV)3CgXUGByI9t35wUL$aO|UysoZH8kc~VXZvKUzOj{ezB%Xo^|yzz@BLxC
zks8aWVS$A7YFAE3FE2(73*?Q|Sblwf7?W-fb*fB@1zuToT9OtO(UXz4>NoH63NT?B=w=LJzH!*Ymw-RN5m>th~D_3#7LJM*VYFQ*(ZvlAygWb%W|1EX(%9B@>
z=w$?SvseJnzP6S1GG(-}FQKbgjaMu5r%d@X-)k_>tBcRJP
z6hu(9JitNDs_%<HcKm0EkM45xbS-1&XL77S>M8K{_9iki5)Y5|fup6>!oeff
z>-kz>MC^yt1$m_6(4j-g%*tZ6_SS%voVa&Wt&dQdB
zqobqA*uS6s2M#cF=un5UYlPVdwCGV2K&GrwNl8fn+;h)8y!qB!R!Ye!5O?uYZ{>38
zLg!cQ_T|)Y_n)))^9OlWF81i?Xuesuj{*NA3Mpc0*)wDxC9fA%RI?!qZk
zrr_u2$5XRsQ(N0Uj94u2k8LHa-Cn})Qvyl7uQ#_Qy0+gmr=XS>KgwtOA=_)?Nl8hp
zUbE)1GUT$^l3gRJjEK`aHK(kij&p_5J$~}LaQyi3Y}~Yo`1p9M>n#@8y1#-+3$yvt
z+b0}u^)Y)_~)`XUuJuA>z*Uk{BhZFn6V_sYMo`o
zh!H%$U;*Lb;S?1qcdlGUc^fp~q$lE_N6nEx$EPGGJItS*oy}e2#!+AI_~|OYu$~7N
zWs~-5B7y#%G`CoI{BOr?4rl4<>7=Kp1K{K1!-kC;88pcLa*$j`9p)lOjffq#no?YL
zk-`$`d}4^qXv#@TOH))v8@cD|nDu%NEv**bTzl5ag>H-b`g+pR(j4ZI%UD=qR_)9c
zJ7gLWXQ4ZN^n*LdjiJB4KQS?mmto=uxOOt@&a5itzn90GYn^Y(KpRhU9f^sF!QWr%
zS<=w3p9PBA0*-c~;U*pVPdzC)*~(oa=e~&(xlmZhk6X9W(qcV#ZD?p9Gc%K>ruLy}
z^$*g{G8haD9z58pQ$0L9`2C%CGU2}a9LiuY7)VM^X6Mg8OWHC@n>CW1(7tU=TZPCc
zgbMZpL}#R?rjnYPYBx`MdOG({oJeb{?K#PuIdfR>!V9hmD!vLDVeV#ElhO}D+jC@3h1KRx|)r|Xc*s^O5e5!w}U^3tE`TqrhEQZDtV%4fly
z;e`bYh?ChHFE20twsfi0#LgY$vX+$Ba-mpVhbJBSzhltq*T6irYdUmP`V$Wb2%ulT
zeyWup5E#hj&71k`v(Gr3l|@ic5D!kBN?cr=D&_a<*N=dJ04ginT`z}@77`JrYHa#f
zZU5=0kT1|cAyy7WCnkih(xXQYX3m_cdbw?+q@?iEPd{D$yg$2;vA2q1?
z5Pg0bxk5@2r=F>@8#m*y)P977gb*2J`~1uuJ9e<(`RCQB)@2SKK8)FH=985xZGIma
z6-7u$2&JX%OGg=p3)N7_YGmtCw*2330IEb6$j91b2NS})JblA|T&-U&y9#!s6<8)u
zw55<^h$pU2IvcZmEBGMP+-hpQ79
zeI+oNOqfj4jXQELgp*VPFWURkkwVIVXWgk0v~wt4NmQ~U^AUY(6Qxkn6~H!kYLyG?
z$bMWc$lKtCLbjnW`BpO87GMT$9HcCNEHs%+oH=vGl_I(v@*ykhSh1a)HmOGRrNc0C
zXP%<+f!Vlt)OgKBX(Y(pxmJg#UG-F(U5bc*3WZax!TF>7RwE9Scbe+P*+G?sI7&$Mh2?7qGop`NQUTHqWhh8Fprm;SR*B;WRxV@+zYe(I;-b!w@=ug7qH63$F^4GX4utfanXi
z-|`9S94VfKcm=B_ucf(4_!aSbJeO^T9JRJZUqIX)E=?Y<5k5q;U6q|^YVK37N1W39
zFv4$hty7ISntc|c?W&-~!2zp*6kxjsWp@>}Big9?s|2+=$srH%GO@?Gww}T&5pDV%
z8f^vC@@NeUVyQ9?co(sbe6`YyXhR&LO`4s=qQ_Y$r3mNRVBqhl6k?pM@cYDHpGd~YH|+YYuW{T
zk5EXLp(`pxP8j0!?ZJp6ZDW9N#NnNRfH%;#ckLqLMe-F016+hSI^+~^7{~-%icHX(
Z{{!PU5Q>fwHIx7V002ovPDHLkV1m&cnydf-
diff --git a/src/assets/sprites/example/feedback.png b/src/assets/sprites/example/feedback.png
deleted file mode 100644
index 065b55dd9fcd25abe9933df9d76189c1f0f94baa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3181
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
TtdB-a00000NkvXXu0mjfpYJ8d
diff --git a/src/assets/sprites/example/payment.png b/src/assets/sprites/example/payment.png
deleted file mode 100644
index 1c2f680a11fa05046bc69afc7b7dd5e54f359211..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4487
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
Z|396ADPl}*`oaJJ002ovPDHLkV1mRdm7M?p
diff --git a/src/assets/styles/element-plus/dark.scss b/src/assets/styles/element-plus/dark.scss
index 1e3ddf33..c20a369e 100644
--- a/src/assets/styles/element-plus/dark.scss
+++ b/src/assets/styles/element-plus/dark.scss
@@ -1,9 +1,10 @@
// 暗黑模式
@forward "element-plus/theme-chalk/src/dark/var.scss" with (
- $bg-color: (
- "page": #0a0a0a,
- "": #141414,
- "overlay": #1d1e1f,
- )
+ $bg-color: (
+ "page": #0a0a0a,
+ "": #141414,
+ "overlay": #1d1e1f,
+ )
);
+
@use "element-plus/theme-chalk/src/dark/css-vars.scss" as *;
diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss
index 14cacee8..4ff67107 100644
--- a/src/assets/styles/element-plus/index.scss
+++ b/src/assets/styles/element-plus/index.scss
@@ -1,9 +1,10 @@
// @forward "element-plus/theme-chalk/src/common/var.scss" with (
-// $colors: (
-// "primary": (
-// "base": green
-// )
+// $colors: (
+// "primary": (
+// "base": green
// )
+// )
// );
+
@use "element-plus/theme-chalk/src/index.scss" as *;
@use "./dark.scss";
diff --git a/src/assets/styles/globals.scss b/src/assets/styles/globals.scss
index ae012a7f..fedf28c6 100644
--- a/src/assets/styles/globals.scss
+++ b/src/assets/styles/globals.scss
@@ -3,73 +3,82 @@
// 全局变量
:root {
- // 头部宽度(默认自适应宽度,可固定宽度,固定宽度后为居中显示)
- --g-header-width: 100%;
- // 头部高度
- --g-header-height: 70px;
- // 侧边栏宽度
- --g-main-sidebar-width: 70px;
- --g-sub-sidebar-width: 220px;
- // 侧边栏Logo高度
- --g-sidebar-logo-height: 50px;
- // 顶栏高度
- --g-topbar-height: 50px;
+ // 头部宽度(默认自适应宽度,可固定宽度,固定宽度后为居中显示)
+ --g-header-width: 100%;
+ // 头部高度
+ --g-header-height: 70px;
+ // 侧边栏宽度
+ --g-main-sidebar-width: 70px;
+ --g-sub-sidebar-width: 220px;
+ // 侧边栏Logo高度
+ --g-sidebar-logo-height: 50px;
+ // 顶栏高度
+ --g-topbar-height: 50px;
}
// 全局样式
::-webkit-scrollbar {
- width: 12px;
- height: 12px;
+ width: 12px;
+ height: 12px;
}
+
::-webkit-scrollbar-thumb {
- background-color: rgb(0 0 0 / 40%);
- background-clip: padding-box;
- border: 3px solid transparent;
- border-radius: 6px;
+ background-color: rgb(0 0 0 / 40%);
+ background-clip: padding-box;
+ border: 3px solid transparent;
+ border-radius: 6px;
}
+
::-webkit-scrollbar-thumb:hover {
- background-color: rgb(0 0 0 / 50%);
+ background-color: rgb(0 0 0 / 50%);
}
+
::-webkit-scrollbar-track {
- background-color: transparent;
+ background-color: transparent;
}
+
html,
body {
- height: 100%;
+ height: 100%;
}
+
body {
- margin: 0;
- box-sizing: border-box;
- font-family: Lato, "PingFang SC", "Microsoft YaHei", sans-serif;
- -webkit-tap-highlight-color: transparent;
- &.hidden {
- overflow: hidden;
- }
+ margin: 0;
+ box-sizing: border-box;
+ font-family: Lato, "PingFang SC", "Microsoft YaHei", sans-serif;
+ -webkit-tap-highlight-color: transparent;
+
+ &.hidden {
+ overflow: hidden;
+ }
}
+
* {
- box-sizing: inherit;
+ box-sizing: inherit;
}
// 右侧内容区针对fixed元素,有横向铺满的需求,可在fixed元素上设置 [data-fixed-calc-width]
[data-fixed-calc-width] {
- position: fixed;
- left: 50%;
- right: 0;
- width: calc(100% - var(--g-main-sidebar-actual-width) - var(--g-sub-sidebar-actual-width));
- transform: translateX(-50%) translateX(calc(var(--g-main-sidebar-actual-width) / 2)) translateX(calc(var(--g-sub-sidebar-actual-width) / 2));
+ position: fixed;
+ left: 50%;
+ right: 0;
+ width: calc(100% - var(--g-main-sidebar-actual-width) - var(--g-sub-sidebar-actual-width));
+ transform: translateX(-50%) translateX(calc(var(--g-main-sidebar-actual-width) / 2)) translateX(calc(var(--g-sub-sidebar-actual-width) / 2));
}
+
[data-mode="mobile"] {
- [data-fixed-calc-width] {
- width: 100% !important;
- transform: translateX(-50%) !important;
- }
+ [data-fixed-calc-width] {
+ width: 100% !important;
+ transform: translateX(-50%) !important;
+ }
}
// textarea 字体跟随系统
textarea {
- font-family: inherit;
+ font-family: inherit;
}
// 列表页全局样式
.el-table.list-table {
- margin: 20px 0;
- .el-button + .el-dropdown {
- margin-left: 10px;
- }
+ margin: 20px 0;
+
+ .el-button + .el-dropdown {
+ margin-left: 10px;
+ }
}
diff --git a/src/assets/styles/nprogress.scss b/src/assets/styles/nprogress.scss
index a96b4945..9947aa68 100644
--- a/src/assets/styles/nprogress.scss
+++ b/src/assets/styles/nprogress.scss
@@ -1,55 +1,63 @@
#nprogress {
- pointer-events: none;
- .bar {
- position: fixed;
- z-index: 1031;
- top: 0;
- left: 0;
- width: 100%;
- height: 2px;
- background: var(--g-nprogress-color);
- }
- .peg {
- display: block;
- position: absolute;
- right: 0;
- width: 100px;
- height: 100%;
- opacity: 1;
- transform: rotate(3deg) translate(0, -4px);
- box-shadow: 0 0 10px var(--g-nprogress-color), 0 0 5px var(--g-nprogress-color);
- }
- .spinner {
- display: block;
- position: fixed;
- z-index: 1031;
- top: 11px;
- right: 14px;
- .spinner-icon {
- width: 18px;
- height: 18px;
- box-sizing: border-box;
- border: solid 2px transparent;
- border-radius: 50%;
- animation: nprogress-spinner 400ms linear infinite;
- border-top-color: var(--g-nprogress-color);
- border-left-color: var(--g-nprogress-color);
- }
+ pointer-events: none;
+
+ .bar {
+ position: fixed;
+ z-index: 1031;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 2px;
+ background: var(--g-nprogress-color);
+ }
+
+ .peg {
+ display: block;
+ position: absolute;
+ right: 0;
+ width: 100px;
+ height: 100%;
+ opacity: 1;
+ transform: rotate(3deg) translate(0, -4px);
+ box-shadow: 0 0 10px var(--g-nprogress-color), 0 0 5px var(--g-nprogress-color);
+ }
+
+ .spinner {
+ display: block;
+ position: fixed;
+ z-index: 1031;
+ top: 11px;
+ right: 14px;
+
+ .spinner-icon {
+ width: 18px;
+ height: 18px;
+ box-sizing: border-box;
+ border: solid 2px transparent;
+ border-radius: 50%;
+ animation: nprogress-spinner 400ms linear infinite;
+ border-top-color: var(--g-nprogress-color);
+ border-left-color: var(--g-nprogress-color);
}
+ }
}
+
.nprogress-custom-parent {
- overflow: hidden;
- position: relative;
- #nprogress .spinner,
- #nprogress .bar {
- position: absolute;
- }
+ overflow: hidden;
+ position: relative;
+
+ #nprogress .spinner,
+ #nprogress .bar {
+ position: absolute;
+ }
}
+
@keyframes nprogress-spinner {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
}
+
@keyframes nprogress-spinner {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
}
diff --git a/src/assets/styles/resources/utils.scss b/src/assets/styles/resources/utils.scss
index 40d054ac..ce32009a 100644
--- a/src/assets/styles/resources/utils.scss
+++ b/src/assets/styles/resources/utils.scss
@@ -1,50 +1,55 @@
// 文字超出隐藏,默认为单行超出隐藏,可设置多行
@mixin text-overflow($line: 1, $fixed-width: true) {
- @if ($line == 1 and $fixed-width == true) {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- @else {
- /* stylelint-disable-next-line value-no-vendor-prefix */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-line-clamp: $line;
- overflow: hidden;
- }
+ @if ($line == 1 and $fixed-width == true) {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ @else {
+ /* stylelint-disable-next-line value-no-vendor-prefix */
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: $line;
+ overflow: hidden;
+ }
}
// 定位居中,默认水平居中,可选择垂直居中,或者水平垂直都居中
@mixin position-center($type: x) {
- position: absolute;
- @if ($type == x) {
- left: 50%;
- transform: translateX(-50%);
- }
- @if ($type == y) {
- top: 50%;
- transform: translateY(-50%);
- }
- @if ($type == xy) {
- left: 50%;
- top: 50%;
- transform: translateX(-50%) translateY(-50%);
- }
+ position: absolute;
+
+ @if ($type == x) {
+ left: 50%;
+ transform: translateX(-50%);
+ }
+
+ @if ($type == y) {
+ top: 50%;
+ transform: translateY(-50%);
+ }
+
+ @if ($type == xy) {
+ left: 50%;
+ top: 50%;
+ transform: translateX(-50%) translateY(-50%);
+ }
}
// 文字两端对齐
%justify-align {
- text-align: justify;
- text-align-last: justify;
+ text-align: justify;
+ text-align-last: justify;
}
// 清除浮动
%clearfix {
- zoom: 1;
- &::before,
- &::after {
- content: "";
- display: block;
- clear: both;
- }
+ zoom: 1;
+
+ &::before,
+ &::after {
+ content: "";
+ display: block;
+ clear: both;
+ }
}
diff --git a/src/assets/styles/themes.scss b/src/assets/styles/themes.scss
index 3ce94315..179e406f 100644
--- a/src/assets/styles/themes.scss
+++ b/src/assets/styles/themes.scss
@@ -1,5 +1,67 @@
:root {
- --g-box-shadow-color: rgb(0 0 0 / 12%);
+ --g-box-shadow-color: rgb(0 0 0 / 12%);
+
+ /* ----- 应用 ----- */
+ // 应用背景色
+ --g-app-bg: var(--el-bg-color);
+ // 主区域背景色
+ --g-main-bg: var(--el-bg-color-page);
+
+ /* ----- 顶部 ----- */
+ // 背景色
+ --g-header-bg: #222b45;
+ // 文字颜色
+ --g-header-color: #fff;
+ // 导航文字颜色
+ --g-header-menu-color: #fff;
+ // 导航鼠标悬浮文字颜色
+ --g-header-menu-hover-color: #fff;
+ // 导航鼠标悬浮背景色
+ --g-header-menu-hover-bg: #334067;
+ // 导航选中文字颜色
+ --g-header-menu-active-color: #fff;
+ // 导航选中背景色
+ --g-header-menu-active-bg: #334067;
+
+ /* ----- 主导航 ----- */
+ // 背景色
+ --g-main-sidebar-bg: #222b45;
+ // 菜单文字颜色
+ --g-main-sidebar-menu-color: #eee;
+ // 菜单鼠标悬浮文字颜色
+ --g-main-sidebar-menu-hover-color: #fff;
+ // 菜单鼠标悬浮背景色
+ --g-main-sidebar-menu-hover-bg: #334067;
+ // 菜单选中文字颜色
+ --g-main-sidebar-menu-active-color: #fff;
+ // 菜单选中背景色
+ --g-main-sidebar-menu-active-bg: #334067;
+
+ /* ----- 次导航 ----- */
+ // 背景色
+ --g-sub-sidebar-bg: #fff;
+ // 菜单背景色
+ --g-sub-sidebar-menu-bg: #e8e8e8;
+ // 菜单文字颜色
+ --g-sub-sidebar-menu-color: var(--el-text-color-primary);
+ // 菜单鼠标悬浮文字颜色
+ --g-sub-sidebar-menu-hover-color: var(--el-text-color-primary);
+ // 菜单鼠标悬浮背景色
+ --g-sub-sidebar-menu-hover-bg: #e1e1e1;
+ // 菜单选中文字颜色
+ --g-sub-sidebar-menu-active-color: #fff;
+ // 菜单选中背景色
+ --g-sub-sidebar-menu-active-bg: var(--el-color-primary);
+
+ /* ----- 顶栏 ----- */
+ --g-toolbar-bg: var(--el-bg-color);
+
+ /* ----- 进度条 ----- */
+ --g-nprogress-color: var(--el-color-primary);
+
+ /* ----- 暗黑模式 ----- */
+ &.dark {
+ --g-box-shadow-color: rgb(0 0 0 / 72%);
/* ----- 应用 ----- */
// 应用背景色
@@ -9,116 +71,54 @@
/* ----- 顶部 ----- */
// 背景色
- --g-header-bg: #222b45;
+ --g-header-bg: var(--el-bg-color);
// 文字颜色
--g-header-color: #fff;
// 导航文字颜色
- --g-header-menu-color: #fff;
+ --g-header-menu-color: #ccc;
// 导航鼠标悬浮文字颜色
--g-header-menu-hover-color: #fff;
// 导航鼠标悬浮背景色
- --g-header-menu-hover-bg: #334067;
+ --g-header-menu-hover-bg: var(--el-color-primary-light-5);
// 导航选中文字颜色
--g-header-menu-active-color: #fff;
// 导航选中背景色
- --g-header-menu-active-bg: #334067;
+ --g-header-menu-active-bg: var(--el-color-primary-light-3);
/* ----- 主导航 ----- */
// 背景色
- --g-main-sidebar-bg: #222b45;
+ --g-main-sidebar-bg: var(--el-bg-color);
// 菜单文字颜色
- --g-main-sidebar-menu-color: #eee;
+ --g-main-sidebar-menu-color: #ccc;
// 菜单鼠标悬浮文字颜色
--g-main-sidebar-menu-hover-color: #fff;
// 菜单鼠标悬浮背景色
- --g-main-sidebar-menu-hover-bg: #334067;
+ --g-main-sidebar-menu-hover-bg: var(--el-color-primary-light-5);
// 菜单选中文字颜色
--g-main-sidebar-menu-active-color: #fff;
// 菜单选中背景色
- --g-main-sidebar-menu-active-bg: #334067;
+ --g-main-sidebar-menu-active-bg: var(--el-color-primary-light-3);
/* ----- 次导航 ----- */
// 背景色
- --g-sub-sidebar-bg: #fff;
+ --g-sub-sidebar-bg: var(--el-bg-color-page);
// 菜单背景色
- --g-sub-sidebar-menu-bg: #e8e8e8;
+ --g-sub-sidebar-menu-bg: var(--el-bg-color);
// 菜单文字颜色
- --g-sub-sidebar-menu-color: var(--el-text-color-primary);
+ --g-sub-sidebar-menu-color: var(--el-text-color-secondary);
// 菜单鼠标悬浮文字颜色
--g-sub-sidebar-menu-hover-color: var(--el-text-color-primary);
// 菜单鼠标悬浮背景色
- --g-sub-sidebar-menu-hover-bg: #e1e1e1;
+ --g-sub-sidebar-menu-hover-bg: var(--el-color-primary-light-5);
// 菜单选中文字颜色
- --g-sub-sidebar-menu-active-color: #fff;
+ --g-sub-sidebar-menu-active-color: var(--el-text-color-primary);
// 菜单选中背景色
- --g-sub-sidebar-menu-active-bg: var(--el-color-primary);
+ --g-sub-sidebar-menu-active-bg: var(--el-color-primary-light-3);
/* ----- 顶栏 ----- */
--g-toolbar-bg: var(--el-bg-color);
/* ----- 进度条 ----- */
--g-nprogress-color: var(--el-color-primary);
-
- /* ----- 暗黑模式 ----- */
- &.dark {
- --g-box-shadow-color: rgb(0 0 0 / 72%);
-
- /* ----- 应用 ----- */
- // 应用背景色
- --g-app-bg: var(--el-bg-color);
- // 主区域背景色
- --g-main-bg: var(--el-bg-color-page);
-
- /* ----- 顶部 ----- */
- // 背景色
- --g-header-bg: var(--el-bg-color);
- // 文字颜色
- --g-header-color: #fff;
- // 导航文字颜色
- --g-header-menu-color: #ccc;
- // 导航鼠标悬浮文字颜色
- --g-header-menu-hover-color: #fff;
- // 导航鼠标悬浮背景色
- --g-header-menu-hover-bg: var(--el-color-primary-light-5);
- // 导航选中文字颜色
- --g-header-menu-active-color: #fff;
- // 导航选中背景色
- --g-header-menu-active-bg: var(--el-color-primary-light-3);
-
- /* ----- 主导航 ----- */
- // 背景色
- --g-main-sidebar-bg: var(--el-bg-color);
- // 菜单文字颜色
- --g-main-sidebar-menu-color: #ccc;
- // 菜单鼠标悬浮文字颜色
- --g-main-sidebar-menu-hover-color: #fff;
- // 菜单鼠标悬浮背景色
- --g-main-sidebar-menu-hover-bg: var(--el-color-primary-light-5);
- // 菜单选中文字颜色
- --g-main-sidebar-menu-active-color: #fff;
- // 菜单选中背景色
- --g-main-sidebar-menu-active-bg: var(--el-color-primary-light-3);
-
- /* ----- 次导航 ----- */
- // 背景色
- --g-sub-sidebar-bg: var(--el-bg-color-page);
- // 菜单背景色
- --g-sub-sidebar-menu-bg: var(--el-bg-color);
- // 菜单文字颜色
- --g-sub-sidebar-menu-color: var(--el-text-color-secondary);
- // 菜单鼠标悬浮文字颜色
- --g-sub-sidebar-menu-hover-color: var(--el-text-color-primary);
- // 菜单鼠标悬浮背景色
- --g-sub-sidebar-menu-hover-bg: var(--el-color-primary-light-5);
- // 菜单选中文字颜色
- --g-sub-sidebar-menu-active-color: var(--el-text-color-primary);
- // 菜单选中背景色
- --g-sub-sidebar-menu-active-bg: var(--el-color-primary-light-3);
-
- /* ----- 顶栏 ----- */
- --g-toolbar-bg: var(--el-bg-color);
-
- /* ----- 进度条 ----- */
- --g-nprogress-color: var(--el-color-primary);
- }
+ }
}
diff --git a/src/auto-imports.d.ts b/src/auto-imports.d.ts
new file mode 100644
index 00000000..5e30355b
--- /dev/null
+++ b/src/auto-imports.d.ts
@@ -0,0 +1,75 @@
+// Generated by 'unplugin-auto-import'
+export {}
+declare global {
+ const EffectScope: typeof import('vue')['EffectScope']
+ const ElMessage: typeof import('element-plus/es')['ElMessage']
+ const ElNotification: typeof import('element-plus/es')['ElNotification']
+ const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
+ const computed: typeof import('vue')['computed']
+ const createApp: typeof import('vue')['createApp']
+ const createPinia: typeof import('pinia')['createPinia']
+ const customRef: typeof import('vue')['customRef']
+ const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
+ const defineComponent: typeof import('vue')['defineComponent']
+ const defineStore: typeof import('pinia')['defineStore']
+ const effectScope: typeof import('vue')['effectScope']
+ const getActivePinia: typeof import('pinia')['getActivePinia']
+ const getCurrentInstance: typeof import('vue')['getCurrentInstance']
+ const getCurrentScope: typeof import('vue')['getCurrentScope']
+ const h: typeof import('vue')['h']
+ const inject: typeof import('vue')['inject']
+ const isProxy: typeof import('vue')['isProxy']
+ const isReactive: typeof import('vue')['isReactive']
+ const isReadonly: typeof import('vue')['isReadonly']
+ const isRef: typeof import('vue')['isRef']
+ const mapActions: typeof import('pinia')['mapActions']
+ const mapGetters: typeof import('pinia')['mapGetters']
+ const mapState: typeof import('pinia')['mapState']
+ const mapStores: typeof import('pinia')['mapStores']
+ const mapWritableState: typeof import('pinia')['mapWritableState']
+ const markRaw: typeof import('vue')['markRaw']
+ const nextTick: typeof import('vue')['nextTick']
+ const onActivated: typeof import('vue')['onActivated']
+ const onBeforeMount: typeof import('vue')['onBeforeMount']
+ const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
+ const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
+ const onDeactivated: typeof import('vue')['onDeactivated']
+ const onErrorCaptured: typeof import('vue')['onErrorCaptured']
+ const onMounted: typeof import('vue')['onMounted']
+ const onRenderTracked: typeof import('vue')['onRenderTracked']
+ const onRenderTriggered: typeof import('vue')['onRenderTriggered']
+ const onScopeDispose: typeof import('vue')['onScopeDispose']
+ const onServerPrefetch: typeof import('vue')['onServerPrefetch']
+ const onUnmounted: typeof import('vue')['onUnmounted']
+ const onUpdated: typeof import('vue')['onUpdated']
+ const provide: typeof import('vue')['provide']
+ const reactive: typeof import('vue')['reactive']
+ const readonly: typeof import('vue')['readonly']
+ const ref: typeof import('vue')['ref']
+ const resolveComponent: typeof import('vue')['resolveComponent']
+ const setActivePinia: typeof import('pinia')['setActivePinia']
+ const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix']
+ const shallowReactive: typeof import('vue')['shallowReactive']
+ const shallowReadonly: typeof import('vue')['shallowReadonly']
+ const shallowRef: typeof import('vue')['shallowRef']
+ const storeToRefs: typeof import('pinia')['storeToRefs']
+ const toRaw: typeof import('vue')['toRaw']
+ const toRef: typeof import('vue')['toRef']
+ const toRefs: typeof import('vue')['toRefs']
+ const triggerRef: typeof import('vue')['triggerRef']
+ const unref: typeof import('vue')['unref']
+ const useAttrs: typeof import('vue')['useAttrs']
+ const useAuth: typeof import('./utils/composables/useAuth')['default']
+ const useCssModule: typeof import('vue')['useCssModule']
+ const useCssVars: typeof import('vue')['useCssVars']
+ const useCurrentInstance: typeof import('./utils/composables/useCurrentInstance')['default']
+ const useMainPage: typeof import('./utils/composables/useMainPage')['default']
+ const useMenu: typeof import('./utils/composables/useMenu')['default']
+ const useRoute: typeof import('vue-router')['useRoute']
+ const useRouter: typeof import('vue-router')['useRouter']
+ const useSlots: typeof import('vue')['useSlots']
+ const watch: typeof import('vue')['watch']
+ const watchEffect: typeof import('vue')['watchEffect']
+ const watchPostEffect: typeof import('vue')['watchPostEffect']
+ const watchSyncEffect: typeof import('vue')['watchSyncEffect']
+}
diff --git a/src/components.d.ts b/src/components.d.ts
new file mode 100644
index 00000000..d96655b3
--- /dev/null
+++ b/src/components.d.ts
@@ -0,0 +1,30 @@
+// generated by unplugin-vue-components
+// We suggest you to commit this file into source control
+// Read more: https://github.com/vuejs/core/pull/3399
+import '@vue/runtime-core'
+
+export {}
+
+declare module '@vue/runtime-core' {
+ export interface GlobalComponents {
+ Auth: typeof import('./components/Auth/index.vue')['default']
+ AuthAll: typeof import('./components/AuthAll/index.vue')['default']
+ BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default']
+ Copyright: typeof import('./components/Copyright/index.vue')['default']
+ Editor: typeof import('./components/Editor/index.vue')['default']
+ FileUpload: typeof import('./components/FileUpload/index.vue')['default']
+ FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default']
+ ImagePreview: typeof import('./components/ImagePreview/index.vue')['default']
+ ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default']
+ ImageUpload: typeof import('./components/ImageUpload/index.vue')['default']
+ PageHeader: typeof import('./components/PageHeader/index.vue')['default']
+ PageMain: typeof import('./components/PageMain/index.vue')['default']
+ PcasCascader: typeof import('./components/PcasCascader/index.vue')['default']
+ RouterLink: typeof import('vue-router')['RouterLink']
+ RouterView: typeof import('vue-router')['RouterView']
+ SearchBar: typeof import('./components/SearchBar/index.vue')['default']
+ SvgIcon: typeof import('./components/SvgIcon/index.vue')['default']
+ SystemInfo: typeof import('./components/SystemInfo/index.vue')['default']
+ Trend: typeof import('./components/Trend/index.vue')['default']
+ }
+}
diff --git a/src/components/Auth/index.vue b/src/components/Auth/index.vue
index 9f475e72..a43fa74a 100644
--- a/src/components/Auth/index.vue
+++ b/src/components/Auth/index.vue
@@ -1,21 +1,16 @@
-
-
-
-
-
+
+
+
+
diff --git a/src/components/AuthAll/index.vue b/src/components/AuthAll/index.vue
index 49390e99..3c4178c8 100644
--- a/src/components/AuthAll/index.vue
+++ b/src/components/AuthAll/index.vue
@@ -1,21 +1,16 @@
-
-
-
-
-
+
+
+
+
diff --git a/src/components/BatchActionBar/index.vue b/src/components/BatchActionBar/index.vue
index 803ffdc1..1e0dc48a 100644
--- a/src/components/BatchActionBar/index.vue
+++ b/src/components/BatchActionBar/index.vue
@@ -1,73 +1,82 @@
-
-
-
当页全选
-
已选 {{ selectionData.length }} 项
-
-
-
+
+
+ 当页全选
+
+
+ 已选 {{ selectionData.length }} 项
+
+
+
+
diff --git a/src/components/Copyright/index.vue b/src/components/Copyright/index.vue
index 25c7196a..e770b65c 100644
--- a/src/components/Copyright/index.vue
+++ b/src/components/Copyright/index.vue
@@ -1,44 +1,50 @@
-
-
+
diff --git a/src/components/Editor/index.vue b/src/components/Editor/index.vue
index 09f2331c..2d96b9c5 100644
--- a/src/components/Editor/index.vue
+++ b/src/components/Editor/index.vue
@@ -1,4 +1,4 @@
-
-
-
-
+
+
+
diff --git a/src/components/FileUpload/index.vue b/src/components/FileUpload/index.vue
index bee145b8..37a1db78 100644
--- a/src/components/FileUpload/index.vue
+++ b/src/components/FileUpload/index.vue
@@ -1,107 +1,117 @@
-
-
-
-
-
-
-
将文件拖到此处,或点击上传
+
+
+
+
+
+
+ 将文件拖到此处,或点击上传
+
+
+
+
+
+
diff --git a/src/components/FixedActionBar/index.vue b/src/components/FixedActionBar/index.vue
index c4839659..86bd7eac 100644
--- a/src/components/FixedActionBar/index.vue
+++ b/src/components/FixedActionBar/index.vue
@@ -1,53 +1,49 @@
-
-
-
-
+
+
+
diff --git a/src/components/ImagePreview/index.vue b/src/components/ImagePreview/index.vue
index 86b1c05c..cd6fc591 100644
--- a/src/components/ImagePreview/index.vue
+++ b/src/components/ImagePreview/index.vue
@@ -1,61 +1,64 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ImageUpload/index.vue b/src/components/ImageUpload/index.vue
index e3214837..ac369cbe 100644
--- a/src/components/ImageUpload/index.vue
+++ b/src/components/ImageUpload/index.vue
@@ -1,242 +1,263 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ImagesUpload/index.vue b/src/components/ImagesUpload/index.vue
index 7696c251..5e765389 100644
--- a/src/components/ImagesUpload/index.vue
+++ b/src/components/ImagesUpload/index.vue
@@ -1,275 +1,298 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/PageHeader/index.vue b/src/components/PageHeader/index.vue
index 52955afb..3dc41f39 100644
--- a/src/components/PageHeader/index.vue
+++ b/src/components/PageHeader/index.vue
@@ -1,59 +1,68 @@
-
-