import Vue from 'vue' import Vuex from 'vuex' // import router from '@/router' import app from './modules/app' import settings from './modules/settings' import user from './modules/user' import api from '@/utils/api' import { Message, MessageBox, Notification } from 'element-ui' import { parseTime } from '@/utils/index' // 把vuex作为插件引入到Vue示例中 ps:注册 Vue.use(Vuex) const store = new Vuex.Store({ state: { shopList: [], // 商铺列表 adminList: [], // 管理员列表 airList: [], // 所有飞机列表 planeClassList: [], // 机型列表 siteList: [], // 站点列表 routeList: [], // 航线列表 noflyData: [[], [], []], // [0]禁飞区数据 [1]限制飞区 [2]限飞区高度 categoryList: [], // 分类列表(小程序) spuList: [], // 商品spu列表 skuList: [], // 商品sku列表 paidOrderList: [], // 已付款 和已退款但是发货状态为 已发货 订单列表 logList: [], // 操作日志列表 messageList: [], // 管理员公告列表 mapStyleList: [], // 地图样式列表 crosFrequency: null, // 对频macadd ADSBList: [] // 存放当前活跃的 ADSB 飞机数据 }, mutations: { updatePlanePosition (state, { planeId, position }) { const plane = state.airList.find(p => p.id === planeId) if (plane) { if (!plane.planeState) { Vue.set(plane, 'planeState', {}) } if (!plane.planeState.position) { Vue.set(plane.planeState, 'position', []) } // 追加新点 plane.planeState.position.push(...position) } }, /** * @description: 设置商铺列表 */ setShopList (state, list) { state.shopList = list }, /** * @description: 设置管理员列表 */ setAdminList (state, list) { state.adminList = list }, /** * @description: 设置飞机列表 */ setAirList (state, list) { state.airList = list }, /** * @description:更新飞机的 parameterValue */ updateParameterValue (state, { planeId, parameterValue }) { const plane = state.airList.find(plane => plane.id === planeId) // 根据 planeId 查找飞机 if (plane) { plane.planeState.parameterValue = parameterValue // 更新 parameterValue } }, /** * @description: 设置站点列表 */ setSiteList (state, list) { state.siteList = list }, /** * @description: 设置航线列表 */ setRouteList (state, list) { state.routeList = list }, /** * @description: 设置机型列表 */ setPlaneClassList (state, list) { state.planeClassList = list }, /** * @description: 设置禁飞区列表 */ setNoflyData (state, payload) { if (payload && payload.nofly_data && payload.restrictfly_data && payload.restrictfly_height) { state.noflyData = [ JSON.parse(payload.nofly_data || '[]'), JSON.parse(payload.restrictfly_data || '[]'), JSON.parse(payload.restrictfly_height || '[]') ] } else { state.noflyData = [[], [], []] } }, /** * @description: 设置分类列表 */ setCategoryList (state, list) { state.categoryList = list }, /** * @description: 设置商品spu列表 */ setSpuList (state, list) { state.spuList = list }, /** * @description: 设置商品sku列表 */ setSkuList (state, list) { state.skuList = list }, /** * @description: 设置 已付款 和已退款但是发货状态为 已发货 订单列表 */ setPaidOrderList (state, list) { state.paidOrderList = list }, /** * @description: 向操作日志列表最后插入新的信息 * @param {*} logData */ insertNewLog (state, logData) { state.logList.push(logData) }, /** * @description: 向管理员公告列表最后插入新的信息 * @param {*} list */ setMessageList (state, list) { state.messageList = list }, /** * @description: 登记对频信息 */ setCrosFrequency (state, macAdd) { state.crosFrequency = macAdd }, /** * @description: 设置当前活跃的 ADSB 飞机数据 * @param {*} ADSB */ setADSBList (state, ADSB) { const index = state.ADSBList.findIndex(i => i.icao === ADSB.icao) if (index > -1) { // 更新已有 state.ADSBList[index] = { ...ADSB, timestamp: Date.now() } } else { // 新增 state.ADSBList.push({ ...ADSB, timestamp: Date.now() }) } }, /** * @description: 设置地图样式列表 * @param {*} list 地图样式列表 */ setMapStyleList (state, list) { state.mapStyleList = list }, /** * @description: 清除过期的 ADSB 数据 */ cleanExpiredADSBList (state) { const now = Date.now() state.ADSBList = state.ADSBList.filter(i => now - i.timestamp < 20000) } }, actions: { /** * @description: 获取商铺列表 */ async fetchShopList ({ commit }) { const res = await api.get('getShopList', 'Admin') if (res.data.status === 1) { res.data.shopList.forEach((shop, index) => { shop.remark_presup = JSON.parse(shop.remark_presup)// 反序列化 remark_presup字段 shop.refund_remark_presup = JSON.parse(shop.refund_remark_presup)// 反序列化 refund_remark_presup字段 shop.logo = JSON.parse(shop.logo)// 反序列化 photo字段 shop.logo.forEach((logo, i) => { res.data.shopList[index].logo[i] = settings.state.logoPath + logo // 把绝对路径加上 }) }) commit('setShopList', res.data.shopList) } else { commit('setShopList', []) Message.error(res.data.msg) } }, /** * @description: 添加商铺 * @param {*} 商铺信息表单 * @return {*} 服务器返回值 */ async fetchAddShop ({ dispatch }, form) { console.log('fetchAddShop', form) const params = new URLSearchParams() params.append('admin_name', form.admin_name) params.append('pwd', form.pwd) params.append('name', form.name) params.append('waiter', form.waiter) params.append('service_wx', form.service_wx) params.append('tel', form.tel) params.append('email', form.email) params.append('price_min', form.price_min) params.append('weight_max', form.weight_max) params.append('default_transport_price', form.default_transport_price) params.append('default_pack_price', form.default_pack_price) params.append('remark_presup', JSON.stringify(form.remark_presup)) params.append('refund_remark_presup', JSON.stringify(form.refund_remark_presup)) params.append('desc', form.desc) params.append('upFile', form.upFile) params.append('opening_time', form.opening_time) params.append('closeing_time', form.closeing_time) const res = await api.post('addShop', params, 'Admin') if (res.data.status === 1) { await dispatch('fetchShopList')// 刷新商铺列表 await dispatch('fetchAdminList')// 刷新用户列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 更新管商铺信息 * @param {*} 商铺信息表单 * @return {*} 服务器返回值 */ async fetchSaveShop ({ dispatch }, form) { const params = new URLSearchParams() params.append('shop_id', form.shop_id) params.append('name', form.name) params.append('waiter', form.waiter) params.append('service_wx', form.service_wx) params.append('tel', form.tel) params.append('email', form.email) params.append('price_min', form.price_min) params.append('weight_max', form.weight_max) params.append('default_transport_price', form.default_transport_price) params.append('default_pack_price', form.default_pack_price) params.append('remark_presup', JSON.stringify(form.remark_presup)) params.append('refund_remark_presup', JSON.stringify(form.refund_remark_presup)) params.append('desc', form.desc) params.append('upFile', form.upFile) params.append('oldFile', form.oldFile) params.append('opening_time', form.opening_time) params.append('closeing_time', form.closeing_time) const res = await api.post('saveShop', params, 'Admin') if (res.data.status === 1) { await dispatch('fetchShopList')// 刷新商铺列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 获取管理员列表 */ async fetchAdminList ({ commit }) { const res = await api.get('getAdminList', 'Admin') if (res.data.status === 1) { res.data.adminList.forEach((item, index) => { // 判断如果是当前登录用户 最后登录时间字段 从本地缓存中获取 PS:既登陆前缓存到本地的“最后登陆时间” 因为登录后 服务端会把当前登录的时间刷到lasttime字段 if (item.shop_id === store.state.user.shop_id) { item.lasttime = store.state.user.lasttime } // 头像字段反序列化 item.photo = JSON.parse(item.photo)// 反序列化 photo字段 item.photo.forEach((photo, i) => { res.data.adminList[index].photo[i] = settings.state.photoPath + photo // 把绝对路径加上 }) }) commit('setAdminList', res.data.adminList) } else { commit('setAdminList', []) Message.error(res.data.msg) } }, /** * @description: 添加新的管理员 * @param {*} 管理员信息表单 * @return {*} 服务器返回值 */ async fetchAddAdmin ({ dispatch }, form) { const params = new URLSearchParams() params.append('name', form.name) params.append('uname', form.uname) params.append('pwd', form.pwd) params.append('role', form.role === 'admin' ? 5 : 6) params.append('shop_id', form.shop_id) params.append('upFile', form.upFile) const res = await api.post('addAdmin', params, 'Admin') if (res.data.status === 1) { await dispatch('fetchAdminList')// 刷新用户列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 更新管理员账号信息 * @param {*} 管理员信息表单 * @return {*} 服务器返回值 */ async fetchSaveAdmin ({ dispatch }, form) { const params = new URLSearchParams() params.append('id', form.id) params.append('shop_id', form.shop_id) params.append('uname', form.uname) params.append('pwd', form.pwd) params.append('role', form.role === 'admin' ? 5 : 6) params.append('upFile', form.upFile) params.append('oldFile', form.oldFile) const res = await api.post('saveAdmin', params, 'Admin') if (res.data.status === 1) { await dispatch('fetchAdminList')// 刷新用户列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 删除账号 * @param {*} 多选id组 */ async fetchDelAdmin ({ dispatch }, idArr) { if (idArr.length === 0) { Message.error('未勾选记录') } else { MessageBox.confirm('请谨慎操作 确认删除?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { const params = new URLSearchParams() params.append('idArr', idArr) api.post('deleteAdmin', params, 'Admin').then(res => { if (res.data.status === 1) { Message.success(res.data.msg) dispatch('fetchAdminList')// 刷新管理员列表 } else { Message.error(res.data.msg) } }) }).catch(() => { Message.info('取消操作') }) } }, /** * @description: 获取飞机列表 */ async fetchAirList ({ commit, state }) { const res = await api.get('getAirList') res.data.airList.forEach(plane => { plane.planeState = { // 飞机状态初始化字段 isUnlock: false, // 飞机解锁标记成真 flyDataSave: { // 飞机加锁截至 待上传飞行数据之后 再清空此值 startTime: null, // 解锁时的时间戳(秒) endTime: null, // 加锁时的时间戳(秒) startBattery: null, // 解锁时的电池电量(百分比) endBattery: null, // 加锁时的电池电量(百分比) path: [] // 飞行路径数组,每项是 [lon, lat, alt] }, heartBeat: null, // 心跳 heartRandom: null, // 每次接收到心跳创建一个随机数 用于watch监听 online: false, // 是否在线 onlineTimeout: null, // 存放定时器引用 voltagBattery: null, // 电压信息 currentBattery: null, // 电流信息 batteryRemaining: null, // 电池电量 positionAlt: null, // 海拔高度信息 groundSpeed: null, // 对地速度 satCount: null, // 卫星数量 fixType: null, // 定位状态 completionPct: 0, // 磁罗盘校准进度 reportCal: null, // 磁罗盘校准结果 questState: 1, // 飞机状态 默认初始状态为1 acceState: null, // 加速度计校准状态 getPlaneMode: null, // 飞机模式 loadweight: null, // 重量 hasGoods: false, // 是否有货 hookstatus: null, // 钩子状态 position: [], // [[经度,维度,相对高度]]累计数组 battCapacity: null, // 电池容量 homePosition: null, // 返航点位置 wpnavSpeed: null, // 飞机返航速度 米/秒 parameterValue: null// 请求的参数键值对 需要序列化 } }) if (res.data.status === 1) { commit('setAirList', res.data.airList) } else { commit('setAirList', []) Message.warning(res.data.msg) } return res.data.airList }, /** * @description: 创建新飞机 * @param {*} form 表单.飞机信息 * @return {*} 服务器返回信息 */ async fetchAddAir ({ dispatch }, form) { const params = new URLSearchParams() params.append('shop_id', form.shop_id) params.append('name', form.name) params.append('date', form.date) params.append('onoff', form.onoff ? '1' : '0') params.append('desc', form.desc) params.append('bind_class_id', form.bind_class_id) // ✅ 添加机型绑定字段 const res = await api.post('addAir', params) if (res.data.status === 1) { await dispatch('fetchAirList') Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 更新新飞机数据 * @param {*} form 表单.飞机信息 * @return {*} 服务器返回信息 */ async fetchSaveAir ({ dispatch }, form) { const params = new URLSearchParams() params.append('shop_id', form.shop_id) params.append('name', form.name) params.append('date', form.date) params.append('onoff', form.onoff ? '1' : '0') params.append('desc', form.desc) params.append('id', form.id) params.append('bind_class_id', form.bind_class_id) // ✅ 添加机型绑定字段 const res = await api.post('saveAir', params) if (res.data.status === 1) { await dispatch('fetchAirList') Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 删除指定序号飞机 * @param {*} idArray 飞机序号数组 */ fetchDelAir ({ dispatch }, idArr) { if (idArr.length === 0) { Message.error('未勾选记录') } else { MessageBox.confirm('请谨慎操作 确认删除?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { const params = new URLSearchParams() params.append('idArr', idArr) api.post('deleteAir', params).then(res => { if (res.data.status === 1) { Message.success(res.data.msg) dispatch('fetchAirList')// 刷新飞机列表 } else { Message.error(res.data.msg) } }) }).catch(() => { Message.info('取消操作') }) } }, /** * @description: 获取机型列表 */ async fetchPlaneClassList ({ commit }) { const res = await api.get('getPlaneClassList') if (res.data.status === 1) { commit('setPlaneClassList', res.data.planeClassList) } else { commit('setPlaneClassList', []) Message.warning(res.data.msg) } return res.data.planeClassList }, /** * @description: 创建新机型 * @param {*} form 表单.机型信息 * @return {*} 服务器返回信息 */ async fetchAddPlaneClass ({ dispatch }, form) { const params = new URLSearchParams() params.append('shop_id', form.shop_id) params.append('class_name', form.class_name) params.append('wheelbase', form.wheelbase) params.append('category', form.category) params.append('weight_max', form.weight_max) params.append('describe', form.describe) const res = await api.post('addPlaneClass', params) if (res.data.status === 1) { await dispatch('fetchPlaneClassList')// 刷新 机型列表 await dispatch('fetchAirList')// 刷新飞机列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 创建新机型 * @param {*} form 表单.机型信息 * @return {*} 服务器返回信息 */ async fetchSavePlaneClass ({ dispatch }, form) { const params = new URLSearchParams() params.append('id', form.id) params.append('shop_id', form.shop_id) params.append('class_name', form.class_name) params.append('wheelbase', form.wheelbase) params.append('category', form.category) params.append('weight_max', form.weight_max) params.append('describe', form.describe) const res = await api.post('savePlaneClass', params) if (res.data.status === 1) { await dispatch('fetchPlaneClassList')// 刷新 机型列表 await dispatch('fetchAirList')// 刷新飞机列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 删除指定序号 机型 * @param {*} idArray 机型序号数组 */ fetchDelPlaneClass ({ dispatch }, idArr) { if (idArr.length === 0) { Message.error('未勾选记录') } else { MessageBox.confirm('请谨慎操作 确认删除?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { const params = new URLSearchParams() params.append('idArr', idArr) api.post('deletePlaneClass', params).then(res => { if (res.data.status === 1) { Message.success(res.data.msg) dispatch('fetchPlaneClassList')// 刷新 机型列表 } else { Message.error(res.data.msg) } }) }).catch(() => { Message.info('取消操作') }) } }, /** * @description: 获取站点列表 */ async fetchSiteList ({ commit }) { const res = await api.get('getSiteList') if (res.data.status === 1) { res.data.siteList.forEach((site, index) => { site.qr = settings.state.qrPath + site.qr // 把绝对路径加上 }) commit('setSiteList', res.data.siteList) } else { commit('setSiteList', []) Message.warning(res.data.msg) } }, /** * @description: 创建新站点 * @param {*} form 表单.站点信息 * @return {*} 服务器返回信息 */ async fetchAddSite ({ dispatch }, form) { const params = new URLSearchParams() params.append('shop_id', form.shop_id) params.append('sitename', form.sitename) params.append('desc', form.desc) params.append('upFile', form.upFile) params.append('size', form.size) params.append('bindroute', form.bindroute) const res = await api.post('addSite', params) if (res.data.status === 1) { await dispatch('fetchSiteList')// 刷新站点列表 dispatch('fetchRouteList')// 刷新航线列表 dispatch('fetchPaidOrderList')// 刷订单点列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 创建新站点 * @param {*} form 表单.站点信息 * @return {*} 服务器返回信息 */ async fetchSaveSite ({ dispatch }, form) { const params = new URLSearchParams() params.append('id', form.id) params.append('shop_id', form.shop_id) params.append('sitename', form.sitename) params.append('desc', form.desc) params.append('upFile', form.upFile) params.append('size', form.size) params.append('bindroute', form.bindroute) const res = await api.post('saveSite', params) if (res.data.status === 1) { await dispatch('fetchSiteList')// 刷新站点列表 dispatch('fetchRouteList')// 刷新航线列表 dispatch('fetchPaidOrderList')// 刷订单点列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 删除指定序号站点 * @param {*} idArray 站点序号数组 */ fetchDelSite ({ dispatch }, idArr) { if (idArr.length === 0) { Message.error('未勾选记录') } else { MessageBox.confirm('请谨慎操作 确认删除?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { const params = new URLSearchParams() params.append('idArr', idArr) api.post('deleteSite', params).then(res => { if (res.data.status === 1) { Message.success(res.data.msg) dispatch('fetchSiteList')// 刷新站点列表 dispatch('fetchRouteList')// 刷新航线列表 dispatch('fetchPaidOrderList')// 刷订单点列表 } else { Message.error(res.data.msg) } }) }).catch(() => { Message.info('取消操作') }) } }, /** * @description: 获取航线列表 */ async fetchRouteList ({ commit }) { const res = await api.get('getRouteList') if (res.data.status === 1) { commit('setRouteList', res.data.routeList) } else { commit('setRouteList', []) Message.warning(res.data.msg) } return res.data.routeList }, /** * @description: 创建新航线 * @param {*} form 表单.航线信息 * @return {*} 服务器返回信息 */ async fetchAddRoute ({ dispatch }, form) { const params = new URLSearchParams() params.append('shop_id', form.shop_id) params.append('name', form.name) params.append('desc', form.desc) params.append('upFile', form.upFile) const res = await api.post('addRoute', params) if (res.data.status === 1) { await dispatch('fetchRouteList')// 刷新航线列表 dispatch('fetchSiteList')// 刷新站点列表 dispatch('fetchPaidOrderList')// 刷订单点列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 更新航线 * @param {*} form 表单.航线信息 * @return {*} 服务器返回信息 */ async fetchSaveRoute ({ dispatch }, form) { const params = new URLSearchParams() params.append('id', form.id) params.append('shop_id', form.shop_id) params.append('name', form.name) params.append('desc', form.desc) params.append('upFile', form.upFile) const res = await api.post('saveRoute', params) if (res.data.status === 1) { await dispatch('fetchRouteList')// 刷新航线列表 dispatch('fetchSiteList')// 刷新站点列表 dispatch('fetchPaidOrderList')// 刷订单点列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 删除指定序号航线 * @param {*} idArray 航线序号数组 */ fetchDelRoute ({ dispatch }, idArr) { if (idArr.length === 0) { Message.error('未勾选记录') } else { MessageBox.confirm('请谨慎操作 确认删除?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { const params = new URLSearchParams() params.append('idArr', idArr) api.post('deleteRoute', params).then(res => { if (res.data.status === 1) { Message.success(res.data.msg) dispatch('fetchRouteList')// 刷新航线列表 dispatch('fetchSiteList')// 刷新站点列表 dispatch('fetchPaidOrderList')// 刷订单点列表 } else { Message.error(res.data.msg) } }) }).catch(() => { Message.info('取消操作') }) } }, /** * @description: 获取禁飞区数据 * @param {str} shopId 需要传shopId(总管理员调用其他商铺禁飞区) */ async fetchNoflyData ({ commit }, shopId) { const params = new FormData() params.append('shop_id', shopId) const res = await api.post('getNoflyData', params, 'Plane') if (res.data.status === 1) { commit('setNoflyData', res.data.noflyData) } else { commit('setNoflyData', [[], [], []]) Message.warning(res.data.msg || '暂无禁飞区数据') } return res }, /** * @description: 获取分类列表 * @return {*} 列表 */ async fetchCategoryList ({ commit }) { const res = await api.get('getCategoryList', 'Admin') if (res.data.status === 1) { res.data.categoryList.forEach((category, index) => { category.photo = JSON.parse(category.photo)// 反序列化 photo字段 category.photo.forEach((photo, i) => { res.data.categoryList[index].photo[i] = settings.state.listPath + photo // 把绝对路径加上 }) }) commit('setCategoryList', res.data.categoryList) } else { commit('setCategoryList', []) } return res }, /** * @description: 添加分类信息 * @param {*} 分类信息表单 * @return {*} 服务器返回值 */ async fetchAddCategory ({ dispatch }, form) { const params = new URLSearchParams() params.append('shop_id', form.shop_id) params.append('id', form.id) params.append('path', form.path) params.append('name', form.name) params.append('sort', form.sort) params.append('show', form.show) params.append('desc', form.desc) params.append('upFile', form.upFile) const res = await api.post('addCategory', params, 'Admin') if (res.data.status === 1) { await dispatch('fetchCategoryList')// 刷新商铺列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 更新分类信息 * @param {*} 分类信息表单 * @return {*} 服务器返回值 */ async fetchSaveCategory ({ dispatch }, form) { const params = new URLSearchParams() params.append('shop_id', form.shop_id) params.append('id', form.id) params.append('name', form.name) params.append('sort', form.sort) params.append('show', form.show) params.append('desc', form.desc) params.append('upFile', form.upFile) params.append('oldFile', form.oldFile) const res = await api.post('saveCategory', params, 'Admin') if (res.data.status === 1) { await dispatch('fetchCategoryList')// 刷新商铺列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 删除账号 * @param {*} 多选id组 */ // eslint-disable-next-line camelcase async fetchDelCategory ({ dispatch }, form) { const params = new URLSearchParams() params.append('delIdArr', form.delIdArr) params.append('shop_id', form.shop_id) api.post('deleteCategory', params, 'Admin').then(res => { if (res.data.status === 1) { Message.success(res.data.msg) dispatch('fetchCategoryList')// 刷新分类列表 } else { Message.error(res.data.msg) } }) }, /** * @description: 获取商品spu列表 * @return {*} 列表 */ async fetchSpuList ({ commit }) { const res = await api.get('getSpuList', 'Admin') if (res.data.status === 1) { res.data.spuList.forEach((spu, index) => { spu.pro_tag = JSON.parse(spu.pro_tag)// 反序列化 pro_tag字段 spu.bind_sku = JSON.parse(spu.bind_sku)// 反序列化 bind_sku字段 spu.photo = JSON.parse(spu.photo)// 反序列化 photo字段 spu.photo.forEach((photo, i) => { res.data.spuList[index].photo[i] = settings.state.spuPath + photo // 把绝对路径加上 }) }) commit('setSpuList', res.data.spuList) } else { commit('setSpuList', []) } return res }, /** * @description: spu排序 * @param {*} spu信息 */ async fetchOrderSpu ({ dispatch }, form) { const params = new URLSearchParams() params.append('shop_id', form.shop_id) params.append('id', form.id) params.append('sort', form.sort) const res = await api.post('orderSpu', params, 'Admin') if (res.data.status === 1) { await dispatch('fetchSpuList')// 刷新商品列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 商品前端显示隐藏 * @param {*} 商品信息 */ async fetchShowSpu ({ dispatch }, form) { const params = new URLSearchParams() params.append('shop_id', form.shop_id) params.append('id', form.id) params.append('show', form.show) const res = await api.post('showSpu', params, 'Admin') if (res.data.status === 1) { await dispatch('fetchSpuList')// 刷新商品列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 商品前端推荐位 * @param {*} 商品信息 */ async fetchRecommendSpu ({ dispatch }, form) { const params = new URLSearchParams() params.append('shop_id', form.shop_id) params.append('id', form.id) params.append('recommend', form.recommend) const res = await api.post('recommendSpu', params, 'Admin') if (res.data.status === 1) { await dispatch('fetchSpuList')// 刷新商品列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 添加商品 spu * @param {*} form 表单.商品信息 * @return {*} 服务器返回信息 */ async fetchAddSpu ({ dispatch }, form) { const params = new URLSearchParams() params.append('shop_id', form.shop_id) params.append('path', form.path) params.append('name', form.name) params.append('spu_number', form.spu_number) params.append('sort', form.sort) params.append('hot', form.hot) params.append('pro_tag', JSON.stringify(form.pro_tag)) params.append('bind_sku', JSON.stringify(form.bind_sku)) params.append('upFile', form.upFile) if (form.recommend) { params.append('recommend', '1') } else { params.append('recommend', '0') } if (form.show) { params.append('show', '1') } else { params.append('show', '0') } const res = await api.post('addSpu', params, 'Admin') if (res.data.status === 1) { await dispatch('fetchSpuList')// 刷新商品列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 更新商品 spu * @param {*} form 表单.商品信息 * @return {*} 服务器返回信息 */ async fetchSaveSpu ({ dispatch }, form) { const params = new URLSearchParams() params.append('id', form.id) params.append('shop_id', form.shop_id) params.append('path', form.path) params.append('name', form.name) params.append('spu_number', form.spu_number) params.append('sort', form.sort) params.append('hot', form.hot) params.append('pro_tag', JSON.stringify(form.pro_tag)) params.append('bind_sku', JSON.stringify(form.bind_sku)) params.append('oldFile', form.oldFile) params.append('upFile', form.upFile) if (form.recommend) { params.append('recommend', '1') } else { params.append('recommend', '0') } if (form.show) { params.append('show', '1') } else { params.append('show', '0') } const res = await api.post('saveSpu', params, 'Admin') if (res.data.status === 1) { await dispatch('fetchSpuList')// 刷新商品列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 删除spu * @param {*} 多选id组 */ async fetchDelSpu ({ dispatch }, idArr) { if (idArr.length === 0) { Message.error('未勾选记录') } else { MessageBox.confirm('请谨慎操作 确认删除?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { const params = new URLSearchParams() params.append('idArr', idArr) api.post('deleteSpu', params, 'Admin').then(res => { if (res.data.status === 1) { Message.success(res.data.msg) dispatch('fetchSpuList')// 刷新列表 } else { Message.error(res.data.msg) } }) }).catch(() => { Message.info('取消操作') }) } }, /** * @description: 获取商品sku列表 * @return {*} 列表 */ async fetchSkuList ({ commit }) { const res = await api.get('getSkuList', 'Admin') if (res.data.status === 1) { res.data.skuList.forEach((sku, index) => { sku.photo = JSON.parse(sku.photo)// 反序列化 photo字段 sku.photo.forEach((photo, i) => { res.data.skuList[index].photo[i] = settings.state.skuPath + photo // 把绝对路径加上 }) }) commit('setSkuList', res.data.skuList) } else { commit('setSkuList', []) } return res }, /** * @description: 添加商品 sku * @param {*} form 表单.商品信息 * @return {*} 服务器返回信息 */ async fetchAddSku ({ dispatch }, form) { const params = new URLSearchParams() params.append('shop_id', form.shop_id) params.append('name', form.name) params.append('sku_number', form.sku_number) params.append('price', form.price) params.append('unit', form.unit) params.append('weight', form.weight) params.append('stock', form.stock) params.append('purchase_channel', form.purchase_channel) params.append('upFile', form.upFile) const res = await api.post('addSku', params, 'Admin') if (res.data.status === 1) { await dispatch('fetchSkuList')// 刷新商品列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 更新商品 sku * @param {*} form 表单.商品信息 * @return {*} 服务器返回信息 */ async fetchSaveSku ({ dispatch }, form) { const params = new URLSearchParams() params.append('id', form.id) params.append('shop_id', form.shop_id) params.append('name', form.name) params.append('sku_number', form.sku_number) params.append('price', form.price) params.append('unit', form.unit) params.append('weight', form.weight) params.append('stock', form.stock) params.append('purchase_channel', form.purchase_channel) params.append('oldFile', form.oldFile) params.append('upFile', form.upFile) const res = await api.post('saveSku', params, 'Admin') if (res.data.status === 1) { await dispatch('fetchSkuList')// 刷新商品列表 Message.success(res.data.msg) } else { Message.error(res.data.msg) } return res }, /** * @description: 删除sku * @param {*} 多选id组 */ async fetchDelSku ({ dispatch }, idArr) { if (idArr.length === 0) { Message.error('未勾选记录') } else { MessageBox.confirm('请谨慎操作 确认删除?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { const params = new URLSearchParams() params.append('idArr', idArr) api.post('deleteSku', params, 'Admin').then(res => { if (res.data.status === 1) { Message.success(res.data.msg) dispatch('fetchSkuList')// 刷新列表 } else { Message.error(res.data.msg) } }) }).catch(() => { Message.info('取消操作') }) } }, /** * @description: 获取已付款 和已退款但是发货状态为 已发货 订单列表 * @return {*} 列表 */ async fetchPaidOrderList ({ commit }) { const res = await api.get('getPaidOrderList', 'Admin') if (res.data.status === 1) { const list = res.data.paidOrderList list.forEach((item, index) => { // 拿到订单列表数据 直接把订单列表数据反序列化 if (item.product_snapshot !== '') { list[index].product_snapshot = JSON.parse(item.product_snapshot) } }) commit('setPaidOrderList', list) } else { commit('setPaidOrderList', []) } return res }, /** * @description: 异步获取管理员消息列表 成功获取之后 弹出通知框 显示列表 */ async fetchMessageList ({ commit }) { const res = await api.get('getMessageList', 'Admin') if (res.data.status === 1) { const list = res.data.messageList || [] commit('setMessageList', list) // 弹出通知 list.forEach((item, index) => { const formattedTime = parseTime(item.add_time, '{m}-{d} {h}:{i}') const sender = item.admin_uname || '管理员' setTimeout(() => { Notification({ title: item.tit || '通知', message: `