From 660b6f4be8158c8a17df5d02e34b42b69d7a91b3 Mon Sep 17 00:00:00 2001 From: xiaoxian521 <1923740402@qq.com> Date: Mon, 20 Dec 2021 14:19:38 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E6=9A=97=E9=BB=91=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 6 --- pnpm-lock.yaml | 66 +++---------------------- src/assets/svg/dark.svg | 1 + src/assets/svg/day.svg | 1 + src/layout/components/setting/index.vue | 38 ++++++++++++-- src/style/dark.scss | 29 +++++++++++ src/style/index.scss | 1 + src/style/login.css | 6 +-- src/views/login.vue | 2 +- 9 files changed, 78 insertions(+), 72 deletions(-) create mode 100644 src/assets/svg/dark.svg create mode 100644 src/assets/svg/day.svg create mode 100644 src/style/dark.scss diff --git a/package.json b/package.json index 82489ed8e..dbefd1b2f 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,6 @@ "@vueuse/core": "^6.7.1", "@vueuse/motion": "^2.0.0-beta.4", "animate.css": "^4.1.1", - "await-to-js": "^3.0.0", "axios": "^0.21.1", "cropperjs": "^1.5.11", "dayjs": "^1.10.7", @@ -48,19 +47,15 @@ "font-awesome": "^4.7.0", "js-cookie": "^3.0.1", "lodash-es": "^4.17.21", - "lowdb": "^3.0.0", "mitt": "^3.0.0", "mockjs": "^1.1.0", "nprogress": "^0.2.0", "path": "^0.12.7", - "path-to-regexp": "^6.2.0", "pinia": "^2.0.0-rc.14", "qs": "^6.10.1", "remixicon": "^2.5.0", "resize-observer-polyfill": "^1.5.1", "responsive-storage": "^1.0.11", - "sortablejs": "1.13.0", - "typescript-cookie": "^1.0.0", "v-contextmenu": "3.0.0", "vue": "^3.2.24", "vue-i18n": "^9.2.0-beta.3", @@ -94,7 +89,6 @@ "@zougt/vite-plugin-theme-preprocessor": "^1.4.0", "autoprefixer": "10.2.4", "babel-plugin-transform-remove-console": "6.9.4", - "chalk": "2.4.2", "cross-env": "7.0.3", "eslint": "7.30.0", "eslint-plugin-prettier": "3.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c3118f586..e047bbf16 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,10 +29,8 @@ specifiers: "@zougt/vite-plugin-theme-preprocessor": ^1.4.0 animate.css: ^4.1.1 autoprefixer: 10.2.4 - await-to-js: ^3.0.0 axios: ^0.21.1 babel-plugin-transform-remove-console: 6.9.4 - chalk: 2.4.2 cropperjs: ^1.5.11 cross-env: 7.0.3 dayjs: ^1.10.7 @@ -47,12 +45,10 @@ specifiers: js-cookie: ^3.0.1 lint-staged: 11.1.2 lodash-es: ^4.17.21 - lowdb: ^3.0.0 mitt: ^3.0.0 mockjs: ^1.1.0 nprogress: ^0.2.0 path: ^0.12.7 - path-to-regexp: ^6.2.0 pinia: ^2.0.0-rc.14 postcss: 8.2.6 postcss-import: 14.0.0 @@ -65,13 +61,11 @@ specifiers: rimraf: 3.0.2 sass: ^1.45.0 sass-loader: ^12.3.0 - sortablejs: 1.13.0 stylelint: 13.13.1 stylelint-config-prettier: 8.0.2 stylelint-config-standard: 22.0.0 stylelint-order: 4.1.0 typescript: 4.4.2 - typescript-cookie: ^1.0.0 unplugin-element-plus: ^0.1.3 v-contextmenu: 3.0.0 vite: 2.6.14 @@ -102,7 +96,6 @@ dependencies: "@vueuse/core": 6.7.5_vue@3.2.24 "@vueuse/motion": 2.0.0-beta.4_vue@3.2.24 animate.css: 4.1.1 - await-to-js: 3.0.0 axios: 0.21.4 cropperjs: 1.5.12 dayjs: 1.10.7 @@ -112,19 +105,15 @@ dependencies: font-awesome: 4.7.0 js-cookie: 3.0.1 lodash-es: 4.17.21 - lowdb: 3.0.0 mitt: 3.0.0 mockjs: 1.1.0 nprogress: 0.2.0 path: 0.12.7 - path-to-regexp: 6.2.0 pinia: 2.0.2_typescript@4.4.2+vue@3.2.24 qs: 6.10.1 remixicon: 2.5.0 resize-observer-polyfill: 1.5.1 responsive-storage: 1.0.11_vue@3.2.24 - sortablejs: 1.13.0 - typescript-cookie: 1.0.0 v-contextmenu: 3.0.0_vue@3.2.24 vue: 3.2.24 vue-i18n: 9.2.0-beta.17_vue@3.2.24 @@ -158,7 +147,6 @@ devDependencies: "@zougt/vite-plugin-theme-preprocessor": 1.4.0_sass@1.45.0 autoprefixer: 10.2.4_postcss@8.2.6 babel-plugin-transform-remove-console: 6.9.4 - chalk: 2.4.2 cross-env: 7.0.3 eslint: 7.30.0 eslint-plugin-prettier: 3.4.0_eslint@7.30.0+prettier@2.3.2 @@ -1594,10 +1582,10 @@ packages: vue-demi: 0.12.1_vue@3.2.24 dev: false - /@vueuse/core/7.2.2_vue@3.2.24: + /@vueuse/core/7.4.0_vue@3.2.24: resolution: { - integrity: sha512-T9oksrPflNhsgG/Y/7IeCSmITPZ0VKDnTpK8y7SQl4ZIdLIL8L7fJyhJEgSMWyo497j/XK3RKFkOTh4GFTVeIQ== + integrity: sha512-CgYouxjXOE63gMn3l9cOsgzPTEAk3yoncsSmJUxXAi/to25rCPVWB/39jXTPhWZboR43EDDMWoEhHaSoMzaldg== } peerDependencies: "@vue/composition-api": ^1.1.0 @@ -1608,7 +1596,7 @@ packages: vue: optional: true dependencies: - "@vueuse/shared": 7.2.2_vue@3.2.24 + "@vueuse/shared": 7.4.0_vue@3.2.24 vue: 3.2.24 vue-demi: 0.12.1_vue@3.2.24 dev: false @@ -1649,10 +1637,10 @@ packages: vue-demi: 0.12.1_vue@3.2.24 dev: false - /@vueuse/shared/7.2.2_vue@3.2.24: + /@vueuse/shared/7.4.0_vue@3.2.24: resolution: { - integrity: sha512-9vevEvvQgx4snSrDfZ5BFd7FmlIl9rwTtr8ySzPZhZQslx6lbcsXK3Q97I06Fv8S2TedR//X9fn2QbNtbFmdog== + integrity: sha512-x5Jn6jUB8gS1mGnVCoNWFEpAoDkm2QwtacZTUgKMn0Ow8tlUBKIfGVOt4vn9qZB10froED/ARHEj79WKLXRieA== } peerDependencies: "@vue/composition-api": ^1.1.0 @@ -1943,14 +1931,6 @@ packages: postcss-value-parser: 4.1.0 dev: true - /await-to-js/3.0.0: - resolution: - { - integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g== - } - engines: { node: ">=6.0.0" } - dev: false - /axios/0.21.4: resolution: { @@ -2957,7 +2937,7 @@ packages: dependencies: "@element-plus/icons-vue": 0.2.4_vue@3.2.24 "@popperjs/core": 2.11.0 - "@vueuse/core": 7.2.2_vue@3.2.24 + "@vueuse/core": 7.4.0_vue@3.2.24 async-validator: 4.0.7 dayjs: 1.10.7 lodash: 4.17.21 @@ -4738,16 +4718,6 @@ packages: } dev: true - /lowdb/3.0.0: - resolution: - { - integrity: sha512-9KZRulmIcU8fZuWiaM0d5e2/nPnrFyXkeXVpqT+MJS+vgbgOf1EbtvgQmba8HwUFgDl1oeZR6XqEJnkJmQdKmg== - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - dependencies: - steno: 2.1.0 - dev: false - /lower-case/2.0.2: resolution: { @@ -5367,6 +5337,7 @@ packages: { integrity: sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg== } + dev: true /path-type/4.0.0: resolution: @@ -6526,13 +6497,6 @@ packages: tslib: 2.3.1 dev: true - /sortablejs/1.13.0: - resolution: - { - integrity: sha512-RBJirPY0spWCrU5yCmWM1eFs/XgX2J5c6b275/YyxFRgnzPhKl/TDeU2hNR8Dt7ITq66NRPM4UlOt+e5O4CFHg== - } - dev: false - /sortablejs/1.14.0: resolution: { @@ -6649,14 +6613,6 @@ packages: engines: { node: ">= 0.6" } dev: true - /steno/2.1.0: - resolution: - { - integrity: sha512-mauOsiaqTNGFkWqIfwcm3y/fq+qKKaIWf1vf3ocOuTdco9XoHCO2AGF1gFYXuZFSWuP38Q8LBHBGJv2KnJSXyA== - } - engines: { node: ^14.13.1 || >=16.0.0 } - dev: false - /string-argv/0.3.1: resolution: { @@ -7138,14 +7094,6 @@ packages: is-typedarray: 1.0.0 dev: true - /typescript-cookie/1.0.0: - resolution: - { - integrity: sha512-oYHAgQWDqheZXiq1ODzVwwl+8lGzK/ApsxAu1a4uyl+Yd9BuF0M5I3bowgb5oAlU3Qyqejcj5kDyOZe+y+W4SA== - } - engines: { node: ">=14" } - dev: false - /typescript/4.4.2: resolution: { diff --git a/src/assets/svg/dark.svg b/src/assets/svg/dark.svg new file mode 100644 index 000000000..421d28c59 --- /dev/null +++ b/src/assets/svg/dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/day.svg b/src/assets/svg/day.svg new file mode 100644 index 000000000..debcccebd --- /dev/null +++ b/src/assets/svg/day.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/layout/components/setting/index.vue b/src/layout/components/setting/index.vue index 15e47cb49..74eb7bc45 100644 --- a/src/layout/components/setting/index.vue +++ b/src/layout/components/setting/index.vue @@ -14,7 +14,9 @@ import { getConfig } from "/@/config"; import { useRouter } from "vue-router"; import { emitter } from "/@/utils/mitt"; import { templateRef } from "@vueuse/core"; +import dayIcon from "/@/assets/svg/day.svg"; import { debounce } from "/@/utils/debounce"; +import darkIcon from "/@/assets/svg/dark.svg"; import { themeColorsType } from "../../types"; import { useAppStoreHook } from "/@/store/modules/app"; import { storageLocal, storageSession } from "/@/utils/storage"; @@ -235,11 +237,33 @@ function setLayoutThemeColor(theme: string) { }); instance.layout = { layout: useAppStoreHook().layout, theme }; } + +let dataTheme = ref(false); + +// 日间、夜间主题切换 +function dataThemeChange() { + const body = document.documentElement as HTMLElement; + if (dataTheme.value) { + body.setAttribute("data-theme", "dark"); + setLayoutThemeColor("light"); + } else body.setAttribute("data-theme", ""); +}