Vue.use(Vuex); const store = new Vuex.Store({ /** * 采用单一状态树 * 组件状态在此声明 */ state: { accessToken: localStorage.getItem("accessToken"), refreshToken: localStorage.getItem("refreshToken"), user: null, products: [], nodes: [], scenes: [], timers: [], tiggers: [], product: null, node: null, device: null, messages: [] }, /** * 异步操作处理方法 */ actions: { /** * * @param {*} context * @param {*} model * * model.event : * 设备操作相应事件:execApiResponse > dataEntityUpdated > deviceEntityUpdated * 添加设备(服务端根据设备信息标识自动创建产品,同型号设备属于同一产品):productEntityInserted > deviceEntityInserted > dataEntityInserted * */ update(context, model) { context.commit(model.event, model); }, /** * 获取产品列表(通过Rest API) * 应用场景: * 1. 页面首次加载通过API接口获取数据 * 2. websocket 接收到 productEntityInserted (由于从消息内提取数据,存在消息内数据项不全,数据不一致可能) * @param {*} context * */ getProducts(context){ axios.post('/IoTCenter/api/v1/product/getProducts').then(function (response) { store.commit('setProducts', response.data); }).catch(function (error) { // }).finally(function () { // }); }, /** * 获取产品设备列表(通过Rest API) * 应用场景: * 1. 页面首次加载通过API接口获取数据 * 2. websocket 接收到 deviceEntityDeleted (由于从消息内提取数据,存在消息内数据项不全,数据不一致可能) * @param {*} context * @param {*} model */ getProduct(context, payload){ axios.post('/IoTCenter/api/v1/product/getProduct?number=' + payload.number).then(function (response) { store.commit('setProduct', response.data); }).catch(function (error) { // }).finally(function () { // }); }, /** * 获取节点列表(通过Rest API) * 应用场景: * 1. 页面首次加载通过API接口获取数据 * 2. websocket 接收到 productEntityInserted (由于从消息内提取数据,存在消息内数据项不全,数据不一致可能) * @param {*} context * @param {*} model */ getNodes(context, payload){ axios.post('/IoTCenter/api/v1/node/getNodes').then(function (response) { store.commit('setNodes', response.data); }).catch(function (error) { // }).finally(function () { // }); }, }, /** * 同步操作State方法 * @param {*} state * @param {*} payload */ mutations: { // 设置Tocken setToken(state, data) { state.accessToken = data.accessToken; localStorage.setItem("accessToken", state.accessToken); state.refreshToken = data.refreshToken; localStorage.setItem("refreshToken", state.refreshToken); }, // 退出登录 logout(state) { state.accessToken = null; state.refreshToken = null; localStorage.removeItem('accessToken'); localStorage.removeItem('refreshToken'); }, // 设置用户数据 setUser(state, user) { state.user = user; }, // 设置产品列表数据 setProducts(state, model) { state.products = model; }, // 设置产品列表数据 setNodes(state, model) { state.nodes = model; }, // 设置产品数据 setProduct(state, model) { state.product = model; }, // 设置设备数据 setDevice(state, model) { state.device = model; }, // 设置节点数据 setNode(state, model) { state.node = model; }, // 设置场景数据 setScenes(state, model) { state.scenes = model; }, /** * 设置消息数据 * @param {*} state 原有状态 * @param {*} messages 新的消息数组 * @param {*} limit 默认条数限制 */ setMessages(state, messages, limit = 99){ // 推出超出条数(FIFO) state.messages.forEach(function(value,i){ if(i >= limit){ state.messages.shift() } }) // 消息列表追加 messages.forEach(function(value,i){ if(state.messages >= limit){ state.messages.shift() } state.messages.push(value); }) }, nodeEntityUpdated(state, data) { var model = data.model; if (state.nodes) { updateByNumber(state.nodes, model); } if (state.node) { if (state.node.number === model.number) { copy(model, state.node); } } }, /** * 产品更新(已经废弃:由于消息数据项不全且与API方式功能重复, 改为message > store处理方式) * @param {*} state * @param {*} data */ /* productEntityInserted(state, data){ state.products.push(data); },*/ /** * 更新数据(需要优化) * @param {*} state * @param {*} data */ dataEntityUpdated(state, data) { var model = data.model; // alert('dataEntityUpdated'); // 节点 if (state.node) { // alert('dataEntityUpdated node !!') let device = Enumerable.from(state.node.devices).where(function (o) { return o.id === model.deviceId; }).firstOrDefault(); if (device) { updateByKey(device.data, model); } } // 产品 if (state.product) { //alert('dataEntityUpdated product !!') let device = Enumerable.from(state.product.devices).where(function (o) { return o.id === model.deviceId; }).firstOrDefault(); if (device) { updateByKey(device.data, model); } } /** * 设备操作状态变更 * 接收数据上报状态变更 */ if (state.device) { // alert('dataEntityUpdated device !!') let device = state.device.id === model.deviceId ? state.device : null; if (device) { updateByKey(device.data, model); } } // 消息 } } });