Skip to content

Commit

Permalink
WIP: dark模式适配
Browse files Browse the repository at this point in the history
  • Loading branch information
xzxldl55 committed Nov 28, 2024
1 parent 6a45d87 commit c733ae2
Show file tree
Hide file tree
Showing 10 changed files with 1,055 additions and 1,351 deletions.
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@
"dependencies": {
"@element-plus/icons-vue": "^2.1.0",
"@types/lodash-es": "^4.17.7",
"@vueuse/core": "^11.3.0",
"element-plus": "^2.3.1",
"lodash-es": "^4.17.21",
"vue": "^3.2.47"
},
"devDependencies": {
"@types/node": "^22.10.0",
"@vitejs/plugin-vue": "^4.1.0",
"autoprefixer": "^10.4.14",
"postcss": "^8.4.21",
Expand Down
1,734 changes: 698 additions & 1,036 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

45 changes: 26 additions & 19 deletions src/App.vue
Original file line number Diff line number Diff line change
@@ -1,23 +1,30 @@
<template>
<div class="w-screen h-screen flex flex-col">
<header
class="flex-shrink-0 h-16 bg-white px-6 flex justify-between items-center"
>
<p class="text-black text-xl font-bold">动态主题色方案</p>
<el-button type="primary" :icon="Operation" circle @click="settingsModalRef?.openModal()" />
<settings-modal ref="settingsModalRef" />
</header>
<article class="flex-1 overflow-y-auto p-6">
<element-box />
</article>
<footer class="flex-shrink-0 h-40 p-6 bg-black">
<span
class="bg-gradient-to-r from-primary-lighter to-primary-deeper bg-clip-text text-transparent text-3xl font-bold"
>
我只是个渐变色
</span>
</footer>
</div>
<div class="w-screen h-screen flex flex-col">
<header
class="flex-shrink-0 h-16 bg-white px-6 flex justify-between items-center"
>
<p class="text-black text-xl font-bold">动态主题色方案</p>
<el-button
type="primary"
:icon="Operation"
circle
@click="settingsModalRef?.openModal()"
/>
<settings-modal ref="settingsModalRef" />
</header>
<article
:class="`flex-1 overflow-y-auto p-6`"
>
<element-box />
</article>
<footer class="flex-shrink-0 h-40 p-6 bg-black">
<span
class="bg-gradient-to-r from-primary-lighter to-primary-deeper bg-clip-text text-transparent text-3xl font-bold"
>
我只是个渐变色
</span>
</footer>
</div>
</template>

<script setup lang="ts">
Expand Down
4 changes: 2 additions & 2 deletions src/assets/style.scss
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
:root {
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
font-size: 16px;
background-color: var(--info-light-color);
}
background-color: var(--el-color-bg);
}
7 changes: 7 additions & 0 deletions src/assets/theme.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
@forward 'element-plus/theme-chalk/src/common/var.scss' with (
$colors: (
'primary': (
'base': green,
),
),
);
69 changes: 39 additions & 30 deletions src/components/settings-modal.vue
Original file line number Diff line number Diff line change
@@ -1,46 +1,55 @@
<template>
<el-dialog
v-model="dialogVisible"
title="主题配置"
width="640px"
draggable
:close-on-click-modal="false"
>
<el-form label-position="left" :label-width="80">
<el-form-item label="主色:">
<el-color-picker v-model="themeConfig.colors.primary" />
</el-form-item>
<el-form-item label="消息色:">
<el-color-picker v-model="themeConfig.colors.info" />
</el-form-item>
<el-form-item label="成功色:">
<el-color-picker v-model="themeConfig.colors.success" />
</el-form-item>
<el-form-item label="警告色:">
<el-color-picker v-model="themeConfig.colors.warning" />
</el-form-item>
<el-form-item label="危险色:">
<el-color-picker v-model="themeConfig.colors.danger" />
</el-form-item>
<el-button type="primary" @click="updateTheme">适用配置</el-button>
</el-form>
</el-dialog>
<el-dialog
v-model="dialogVisible"
title="主题配置"
width="640px"
draggable
:close-on-click-modal="false"
>
<el-form label-position="left" :label-width="80">
<el-form-item label="暗黑模式">
<el-switch @click="toggleDark()" :value="isDark" />
</el-form-item>
<el-form-item label="主色:">
<el-color-picker v-model="themeConfig.colors.primary" />
</el-form-item>
<el-form-item label="消息色:">
<el-color-picker v-model="themeConfig.colors.info" />
</el-form-item>
<el-form-item label="成功色:">
<el-color-picker v-model="themeConfig.colors.success" />
</el-form-item>
<el-form-item label="警告色:">
<el-color-picker v-model="themeConfig.colors.warning" />
</el-form-item>
<el-form-item label="危险色:">
<el-color-picker v-model="themeConfig.colors.danger" />
</el-form-item>
<el-button type="primary" @click="updateTheme">适用配置</el-button>
</el-form>
</el-dialog>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import { ref, watch } from 'vue';
import { Theme, getTheme, setTheme } from '../utils/theme';
import { AnyFn, useDark, useToggle } from '@vueuse/core';
const isDark = useDark();
const toggleDark = useToggle(isDark) as unknown as AnyFn;
const dialogVisible = ref(false);
const themeConfig = ref<Theme>(Object.assign({}, getTheme()));
const updateTheme = () => setTheme(themeConfig.value);
watch(isDark, updateTheme);
defineExpose({
openModal() {
dialogVisible.value = true;
},
openModal() {
dialogVisible.value = true;
},
});
</script>

Expand Down
1 change: 1 addition & 0 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { createApp } from 'vue'
import './assets/style.scss'
import App from './App.vue'
import { setTheme } from './utils/theme';
import 'element-plus/theme-chalk/dark/css-vars.css'

setTheme();

Expand Down
Loading

0 comments on commit c733ae2

Please sign in to comment.