peng
2026-03-25 67d3b57765b0ba66ae25a9da84a16e44a4ef2937
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
122
123
124
<template>
  <a-drawer width="300" placement="right" :closable="false" @close="onClose" :visible="visible">
    <div class="setting-container">
      <h3>布局设置</h3>
      <div class="flex setting-item flex-between">
        <div>布局模式</div>
        <a-select size="small" :value="layoutMode" @change="handleLayoutMode">
          <a-select-option key="side-menu">侧边栏导航</a-select-option>
          <a-select-option key="top-menu">顶部栏导航</a-select-option>
          <a-select-option key="mobile">手机模式</a-select-option>
        </a-select>
      </div>
      <div class="tip">该设定仅 [顶部栏导航] 时有效</div>
      <div class="flex setting-item flex-between">
        <div>内容区域</div>
        <a-select size="small" :value="contentWidth" @change="handleContentWidthChange">
          <a-select-option key="fixed">固定</a-select-option>
          <a-select-option key="fluid">流式</a-select-option>
        </a-select>
      </div>
      <div class="flex setting-item flex-between">
        <div>固定 Header</div>
        <a-switch size="small" :checked="fixedHeader" @change="handleFixedHeader" />
      </div>
      <div class="flex setting-item flex-between">
        <div>下滑时隐藏 Header</div>
        <a-switch size="small" :disabled="!fixedHeader" :checked="autoHideHeader" @change="handleAutoHideHeader" />
      </div>
      <div class="flex setting-item flex-between">
        <div>固定侧边菜单</div>
        <a-switch size="small" :disabled="layoutMode === 'top-menu'" :checked="fixSidebar" @change="handleFixSidebar" />
      </div>
      <a-divider />
      <h3>其他设置</h3>
      <!-- <div class="flex setting-item flex-between">
        <div>色弱模式</div>
        <a-switch size="small" :checked="colorWeak" @change="onColorWeak" />
      </div> -->
      <div class="flex setting-item flex-between">
        <div>多页签模式</div>
        <a-switch size="small" :checked="multiPage" @change="handleMultiPage" />
      </div>
    </div>
    <a-divider />
    <div>
      <a-alert type="warning">
        <span slot="message">
          配置栏只在开发环境用于预览,生产环境不应该展现,请手动修改配置文件
          <a>
            src/config/default-setting.js
          </a>
        </span>
      </a-alert>
    </div>
  </a-drawer>
</template>
 
<script>
import { mixin, mixinDevice } from '@tievd/cube-block/lib/utils/mixin.js'
import { triggerWindowResizeEvent } from '@tievd/cube-block/lib/utils/util'
import skinLayoutMixin from '@/mixins/skin-layout-mixin'
 
export default {
  name: 'SettingDrawer',
 
  mixins: [mixin, mixinDevice, skinLayoutMixin],
 
  data() {
    return {
      visible: false
    }
  },
 
  methods: {
    showDrawer() {
      this.visible = true
    },
    onClose() {
      this.visible = false
    },
    onColorWeak(checked) {
      this.$store.commit('SET_DEFAULT_SETTING', checked)
      // updateColorWeak(checked)
    },
    handleMultiPage(multiPage) {
      this.$store.commit('SET_DEFAULT_SETTING', { multiPage })
    },
    handleLayoutMode(layoutMode) {
      this.$store.commit('SET_DEFAULT_SETTING', { layoutMode })
      // 因为顶部菜单不能固定左侧菜单栏,所以强制关闭
      this.handleFixSidebar(false)
      // 触发窗口resize事件
      triggerWindowResizeEvent()
    },
    handleContentWidthChange(contentWidth) {
      this.$store.commit('SET_DEFAULT_SETTING', { contentWidth })
    },
    handleFixedHeader(fixedHeader) {
      this.$store.commit('SET_DEFAULT_SETTING', { fixedHeader })
    },
    handleAutoHideHeader(autoHideHeader) {
      this.$store.commit('SET_DEFAULT_SETTING', { autoHideHeader })
    },
    handleFixSidebar(fixSidebar) {
      if (this.layoutMode === 'top-menu') {
        fixSidebar = false
      }
      this.$store.commit('SET_DEFAULT_SETTING', { fixSidebar })
    }
  }
}
</script>
 
<style lang="less" scoped>
h3,
.setting-item {
  margin-bottom: @form-item-margin-bottom;
}
 
.tip {
  color: @text-color-secondary;
  font-size: 12px;
}
</style>