zhou zhou
21 小时以前 46d872c1a5b77aa8799de4a64888a0a24a1422d6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import { useSettingStore } from '@/store/modules/setting'
import { storeToRefs } from 'pinia'
function useSettingsHandlers() {
  const settingStore = useSettingStore()
  const domOperations = {
    // 设置HTML类名
    setHtmlClass: (className, add) => {
      const el = document.getElementsByTagName('html')[0]
      if (add) {
        el.classList.add(className)
      } else {
        el.classList.remove(className)
      }
    },
    // 设置根元素属性
    setRootAttribute: (attribute, value) => {
      const el = document.documentElement
      el.setAttribute(attribute, value)
    },
    // 设置body类名
    setBodyClass: (className, add) => {
      const el = document.getElementsByTagName('body')[0]
      if (add) {
        el.classList.add(className)
      } else {
        el.classList.remove(className)
      }
    }
  }
  const createToggleHandler = (storeMethod, callback) => {
    return () => {
      storeMethod()
      callback?.()
    }
  }
  const createValueHandler = (storeMethod, callback) => {
    return (value) => {
      if (value !== void 0 && value !== null) {
        storeMethod(value)
        callback?.(value)
      }
    }
  }
  const basicHandlers = {
    // 工作台标签页
    workTab: createToggleHandler(() => settingStore.setWorkTab(!settingStore.showWorkTab)),
    // 菜单手风琴
    uniqueOpened: createToggleHandler(() => settingStore.setUniqueOpened()),
    // 显示菜单按钮
    menuButton: createToggleHandler(() => settingStore.setButton()),
    // 显示快速入口
    fastEnter: createToggleHandler(() => settingStore.setFastEnter()),
    // 显示刷新按钮
    refreshButton: createToggleHandler(() => settingStore.setShowRefreshButton()),
    // 显示面包屑
    crumbs: createToggleHandler(() => settingStore.setCrumbs()),
    // 显示语言切换
    language: createToggleHandler(() => settingStore.setLanguage()),
    // 显示进度条
    nprogress: createToggleHandler(() => settingStore.setNprogress()),
    // 色弱模式
    colorWeak: createToggleHandler(
      () => settingStore.setColorWeak(),
      () => {
        domOperations.setHtmlClass('color-weak', settingStore.colorWeak)
      }
    ),
    // 水印显示
    watermark: createToggleHandler(() =>
      settingStore.setWatermarkVisible(!settingStore.watermarkVisible)
    ),
    // 菜单展开宽度
    menuOpenWidth: createValueHandler((width) => settingStore.setMenuOpenWidth(width)),
    // 标签页风格
    tabStyle: createValueHandler((style) => settingStore.setTabStyle(style)),
    // 页面切换动画
    pageTransition: createValueHandler((transition) => settingStore.setPageTransition(transition)),
    // 圆角大小
    customRadius: createValueHandler((radius) => settingStore.setCustomRadius(radius))
  }
  const boxStyleHandlers = {
    // 设置盒子模式
    setBoxMode: (type) => {
      const { boxBorderMode } = storeToRefs(settingStore)
      if (
        (type === 'shadow-mode' && boxBorderMode.value === false) ||
        (type === 'border-mode' && boxBorderMode.value === true)
      ) {
        return
      }
      setTimeout(() => {
        domOperations.setRootAttribute('data-box-mode', type)
        settingStore.setBorderMode()
      }, 50)
    }
  }
  const colorHandlers = {
    // 选择主题色
    selectColor: (theme) => {
      settingStore.setElementTheme(theme)
      settingStore.reload()
    }
  }
  const containerHandlers = {
    // 设置容器宽度
    setWidth: (type) => {
      settingStore.setContainerWidth(type)
      settingStore.reload()
    }
  }
  return {
    domOperations,
    basicHandlers,
    boxStyleHandlers,
    colorHandlers,
    containerHandlers,
    createToggleHandler,
    createValueHandler
  }
}
export { useSettingsHandlers }