ThemeSelect.vue 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <template>
  2. <BasicModal v-bind="config" title="切换主题" v-model:visible="visible" style="padding: 0 10px">
  3. <a-radio-group v-model:value="themeSelected" @change="change">
  4. <a-radio v-for="item in options" :key="item.value" :value="item.value">{{ item.label }}</a-radio>
  5. </a-radio-group>
  6. </BasicModal>
  7. </template>
  8. <script lang="ts" setup>
  9. // 更换主题后的逻辑参考 /@/components/Application 的主题切换组件
  10. import { ref } from 'vue';
  11. import { BasicModal } from '/@/components/Modal';
  12. import { ThemeEnum } from '@/enums/appEnum';
  13. import { useRootSetting } from '/@/hooks/setting/useRootSetting';
  14. import { updateDarkTheme } from '/@/logics/theme/dark';
  15. import { updateHeaderBgColor, updateSidebarBgColor } from '/@/logics/theme/updateBackground';
  16. const visible = ref(false);
  17. const config = {
  18. maskClosable: false,
  19. canFullscreen: false,
  20. width: '320px',
  21. minHeight: 20,
  22. maxHeight: 20,
  23. showCancelBtn: false,
  24. showOkBtn: false,
  25. };
  26. // const layout = {
  27. // labelCol: { span: 6 },
  28. // wrapperCol: { span: 16 },
  29. // };
  30. const options = [
  31. {
  32. value: ThemeEnum.DARK,
  33. label: '深色',
  34. },
  35. {
  36. value: ThemeEnum.LIGHT,
  37. label: '浅色',
  38. },
  39. {
  40. value: ThemeEnum.VENT1,
  41. label: '默认',
  42. },
  43. {
  44. value: ThemeEnum.DEEPBLUE,
  45. label: '深蓝',
  46. },
  47. {
  48. value: ThemeEnum.GREEN,
  49. label: '绿色',
  50. },
  51. ];
  52. const { getDarkMode, setDarkMode } = useRootSetting();
  53. const themeSelected = ref<ThemeEnum>(getDarkMode.value as ThemeEnum);
  54. function show() {
  55. visible.value = true;
  56. }
  57. // function close() {
  58. // visible.value = false;
  59. // }
  60. function change() {
  61. setDarkMode(themeSelected.value);
  62. updateDarkTheme(themeSelected.value);
  63. updateHeaderBgColor();
  64. updateSidebarBgColor();
  65. }
  66. defineExpose({
  67. show,
  68. });
  69. </script>
  70. <style lang="less" scoped></style>