Newer
Older
xc-business-system / src / store / modules / settings.ts
dutingting on 29 Nov 2 KB 解决冲突
import { defaultsDeep } from 'lodash-es'
import type { RecursiveRequired, Settings } from '@/global'
import settings from '@/settings'
import settingsDefault from '@/settings.default'

interface SettingsStore extends RecursiveRequired<Settings.all> {
  subMenuCollapseLastStatus: boolean
  mode: 'pc' | 'mobile'
  title: string
}

const useSettingsStore = defineStore(
  // 唯一ID
  'settings',
  {
    state: (): SettingsStore => ({
      // 合并配置
      ...defaultsDeep(settings, settingsDefault),
      // 侧边栏是否收起(用于记录 pc 模式下最后的状态)
      subMenuCollapseLastStatus: settingsDefault.menu.subMenuCollapse,
      // 显示模式,支持:mobile、pc
      mode: 'pc',
      // 页面标题
      title: ''
    }),
    actions: {
      // 设置网页标题
      setTitle(title: string) {
        this.title = title
      },
      // 设置访问模式
      setMode(width: number) {
        if (this.layout.enableMobileAdaptation) {
          // 先判断 UA 是否为移动端智能模型(手机&平板)
          if (
            /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
              navigator.userAgent
            )
          ) {
            this.mode = 'mobile'
          } else {
            // 如果为桌面智能模型,再根据页面宽度判断是否需要切换为移动端展示
            this.mode = width < 992 ? 'mobile' : 'pc'
          }
        } else {
          this.mode = 'pc'
        }
      },
      // 切换侧边栏导航展开/收起
      toggleSidebarCollapse() {
        this.menu.subMenuCollapse = !this.menu.subMenuCollapse
        if (this.mode === 'pc') {
          this.subMenuCollapseLastStatus = !this.subMenuCollapseLastStatus
        }
      },
      // 设置主题颜色模式
      setColorScheme(color: Required<Settings.app>['colorScheme']) {
        this.app.colorScheme = color
      },
      // 更新应用配置
      updateSettings(data: Settings.all) {
        Object.keys(data).forEach(key => {
          this[key as keyof Settings.all] = defaultsDeep(
            data[key as keyof Settings.all],
            this[key as keyof Settings.all]
          )
        })
      }
    }
  }
)

export default useSettingsStore