74 lines
1.8 KiB
JavaScript
74 lines
1.8 KiB
JavaScript
/**
|
|
* 设备选择模块 - 用于统计页面的设备切换
|
|
* 这个模块会被持久化到 localStorage
|
|
*/
|
|
|
|
// localStorage 的 key
|
|
const STORAGE_KEY = 'device_selected_sn'
|
|
|
|
// 从 localStorage 读取上次选中的设备
|
|
const loadSelectedDevice = () => {
|
|
try {
|
|
const saved = localStorage.getItem(STORAGE_KEY)
|
|
return saved || ''
|
|
} catch (error) {
|
|
console.error('读取选中设备失败:', error)
|
|
return ''
|
|
}
|
|
}
|
|
|
|
// 保存选中的设备到 localStorage
|
|
const saveSelectedDevice = (deviceSn) => {
|
|
try {
|
|
localStorage.setItem(STORAGE_KEY, deviceSn)
|
|
} catch (error) {
|
|
console.error('保存选中设备失败:', error)
|
|
}
|
|
}
|
|
|
|
const deviceModule = {
|
|
namespaced: true,
|
|
|
|
state: {
|
|
selectedDeviceSn: loadSelectedDevice(), // 从 localStorage 恢复上次选中的设备
|
|
deviceList: [], // 设备列表
|
|
},
|
|
|
|
mutations: {
|
|
SET_SELECTED_DEVICE(state, deviceSn) {
|
|
state.selectedDeviceSn = deviceSn
|
|
// 持久化到 localStorage
|
|
saveSelectedDevice(deviceSn)
|
|
},
|
|
|
|
SET_DEVICE_LIST(state, list) {
|
|
state.deviceList = list
|
|
// 如果没有选中的设备,且列表不为空,自动选中第一个
|
|
if (!state.selectedDeviceSn && list.length > 0) {
|
|
state.selectedDeviceSn = list[0].deviceSn
|
|
saveSelectedDevice(state.selectedDeviceSn)
|
|
}
|
|
}
|
|
},
|
|
|
|
actions: {
|
|
setSelectedDevice({ commit }, deviceSn) {
|
|
commit('SET_SELECTED_DEVICE', deviceSn)
|
|
},
|
|
|
|
setDeviceList({ commit }, list) {
|
|
commit('SET_DEVICE_LIST', list)
|
|
}
|
|
},
|
|
|
|
getters: {
|
|
selectedDeviceSn: state => state.selectedDeviceSn,
|
|
deviceList: state => state.deviceList,
|
|
selectedDevice: state => {
|
|
return state.deviceList.find(d => d.deviceSn === state.selectedDeviceSn)
|
|
}
|
|
}
|
|
}
|
|
|
|
export default deviceModule
|