sysConfig.js 2.23 KB
import { getSystemConfig } from '@/api/system/sysConfig'
import ncc from '@/utils/ncc'

const state = {
  sysLogo: ncc.storageGet('sysLogo') || '',
  sysName: ncc.storageGet('sysName') || '机具管理平台',
  systemConfig: {},
  configLoaded: false,
  configLoading: false,
  configLoadFailed: false
}

const mutations = {
  SET_SYS_LOGO: (state, logo) => {
    state.sysLogo = logo
    ncc.storageSet({ sysLogo: logo })
  },
  SET_SYS_NAME: (state, name) => {
    state.sysName = name
    ncc.storageSet({ sysName: name })
  },
  SET_SYSTEM_CONFIG: (state, config) => {
    state.systemConfig = config
    // 同时更新logo和name
    if (config.sysLogo !== undefined) {
      state.sysLogo = config.sysLogo
      ncc.storageSet({ sysLogo: config.sysLogo })
    }
    if (config.sysName !== undefined) {
      state.sysName = config.sysName
      ncc.storageSet({ sysName: config.sysName })
    }
  },
  SET_CONFIG_LOADING: (state, loading) => {
    state.configLoading = loading
  },
  SET_CONFIG_LOADED: (state, loaded) => {
    state.configLoaded = loaded
  },
  SET_CONFIG_LOAD_FAILED: (state, failed) => {
    state.configLoadFailed = failed
  }
}

const actions = {
  // 获取系统配置
  getSystemConfig({ commit, state }) {
    // 如果已经加载成功或正在加载中,直接返回
    if (state.configLoaded || state.configLoading) {
      return Promise.resolve(state.systemConfig)
    }
    
    // 如果之前加载失败,直接拒绝(避免无限重试)
    if (state.configLoadFailed) {
      return Promise.reject(new Error('系统配置加载失败,使用默认配置'))
    }
    
    commit('SET_CONFIG_LOADING', true)
    
    return new Promise((resolve, reject) => {
      getSystemConfig().then(res => {
        const config = res.data
        commit('SET_SYSTEM_CONFIG', config)
        commit('SET_CONFIG_LOADED', true)
        commit('SET_CONFIG_LOADING', false)
        resolve(config)
      }).catch(error => {
        commit('SET_CONFIG_LOAD_FAILED', true)
        commit('SET_CONFIG_LOADING', false)
        reject(error)
      })
    })
  },
  
  // 更新系统配置
  updateSystemConfig({ commit }, config) {
    commit('SET_SYSTEM_CONFIG', config)
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}