初始化万家商超用户端仓库
This commit is contained in:
339
store/index.js
Normal file
339
store/index.js
Normal file
@ -0,0 +1,339 @@
|
||||
import Vue from 'vue';
|
||||
import Vuex from 'vuex';
|
||||
import {
|
||||
http
|
||||
} from '@/common/api/index';
|
||||
import * as utils from '@/common/utils/utils';
|
||||
import {
|
||||
message
|
||||
} from '@/common/utils/index.js';
|
||||
Vue.use(Vuex);
|
||||
import {
|
||||
tabbarConfig, themeColorConfig
|
||||
} from '@/common/config.js';
|
||||
const store = new Vuex.Store({
|
||||
state: {
|
||||
cartList: [], // 购物车数据
|
||||
userInfo: {}, // 用户信息
|
||||
appRubbishCacheSize: '0B', // 缓存大小
|
||||
appSearchHistory: [], // 搜索历史
|
||||
appVersion: '', // app版本号
|
||||
token: '', // 用户token
|
||||
shareCode: null, // 邀请人邀请码
|
||||
themeColor: '#FF9300', // 主题色
|
||||
themeBgColor: '#FF9300',
|
||||
gestureAgain: true, // 是否需要二次验证
|
||||
location: {},
|
||||
phone: '', //用户登录时多页面共享手机号信息
|
||||
partner_id: 0,// 店铺id
|
||||
shopInfo: {},//店铺信息
|
||||
cartNum: 0,//购物车角标数量
|
||||
themeType: 0,//主题色类型
|
||||
},
|
||||
mutations: {
|
||||
getNum(state, num) {
|
||||
state.cartNum = num;
|
||||
},
|
||||
// 获取店铺id
|
||||
partner_id(state, partner_id) {
|
||||
state.partner_id = partner_id;
|
||||
},
|
||||
// 店铺信息
|
||||
shopInfo(state, info) {
|
||||
state.shopInfo = info;
|
||||
},
|
||||
setBadge(state, num) {
|
||||
// #ifdef MP-WEIXIN
|
||||
let _index = 2;
|
||||
// #endif
|
||||
// #ifndef MP-WEIXIN
|
||||
let _index = 2;
|
||||
// #endif
|
||||
if (num) {
|
||||
if (Number(num) > 99) {
|
||||
uni.setTabBarBadge({
|
||||
index: _index,
|
||||
text: '99+'
|
||||
})
|
||||
} else {
|
||||
uni.setTabBarBadge({
|
||||
index: _index,
|
||||
text: num + ''
|
||||
})
|
||||
}
|
||||
} else {
|
||||
uni.removeTabBarBadge({
|
||||
index: _index
|
||||
})
|
||||
}
|
||||
},
|
||||
// 设置tabBar类型
|
||||
setAppTabbarType(state, type) {
|
||||
state.appTabBarType = type
|
||||
global.appTabBarType = type
|
||||
uni.setStorageSync('appTabBarType', type);
|
||||
for (let index = 0; index < tabbarConfig.listNum; index++) {
|
||||
let flag = tabbarConfig.roleTabBarShow[+type].find(item => item == index)
|
||||
uni.setTabBarItem({ index: index, visible: flag !== undefined })
|
||||
}
|
||||
},
|
||||
// 初始化APP,获取缓存的token,用户信息等其他缓存内容
|
||||
initApp(state) {
|
||||
const _userInfo = uni.getStorageSync('USER_INFO');
|
||||
const token = uni.getStorageSync('USER_TOKEN') || '';
|
||||
global.appTabBarType = 0
|
||||
const appTabBarType = token ? uni.getStorageSync('appTabBarType') || 0 : 0;
|
||||
state.appSearchHistory = uni.getStorageSync('appSearchHistory') || [];
|
||||
global.token = token
|
||||
state.token = token
|
||||
if (_userInfo) {
|
||||
state.userInfo = _userInfo;
|
||||
global.userInfo = _userInfo;
|
||||
}
|
||||
if (appTabBarType != 0) this.commit('setAppTabbarType', appTabBarType)
|
||||
},
|
||||
// 添加搜索历史
|
||||
appSearchHistoryAdd(state, data) {
|
||||
if (!data.name.trim()) return
|
||||
let appSearchHistory = state.appSearchHistory.filter(item => item.name != data.name)
|
||||
appSearchHistory.unshift(data)
|
||||
state.appSearchHistory = appSearchHistory.slice(0, 10)
|
||||
uni.setStorageSync('appSearchHistory', state.appSearchHistory);
|
||||
},
|
||||
// 删除搜索历史
|
||||
appSearchHistoryDel(state, data) {
|
||||
state.appSearchHistory = state.appSearchHistory.filter(item => item.name != data.name)
|
||||
uni.setStorageSync('appSearchHistory', state.appSearchHistory);
|
||||
},
|
||||
// 清空搜索历史
|
||||
appSearchHistoryClean(state, data) {
|
||||
state.appSearchHistory = []
|
||||
uni.setStorageSync('appSearchHistory', state.appSearchHistory);
|
||||
},
|
||||
// 更新用户信息
|
||||
updateUserInfo(state, userInfo) {
|
||||
state.userInfo = { ...state.userInfo, ...userInfo };
|
||||
global.userInfo = state.userInfo;
|
||||
uni.setStorageSync('USER_INFO', state.userInfo);
|
||||
},
|
||||
// 保存token
|
||||
saveToken(state, token) {
|
||||
state.token = token
|
||||
global.token = token;
|
||||
uni.setStorageSync('USER_TOKEN', token);
|
||||
},
|
||||
// 切换主题
|
||||
switchThemeColor(state, color) {
|
||||
state.themeColor = color;
|
||||
},
|
||||
// 退出登录
|
||||
logout(state) {
|
||||
state.userInfo = {};
|
||||
state.cartList = [];
|
||||
global.userInfo = {};
|
||||
global.token = '';
|
||||
state.token = '';
|
||||
state.verifyAgain = false; // 用户退出时二次验证为false,感觉没必要
|
||||
state.phone = '';
|
||||
state.phone = '';
|
||||
this.commit('setAppTabbarType', 0)
|
||||
uni.removeStorageSync('USER_INFO');
|
||||
uni.removeStorageSync('USER_TOKEN');
|
||||
},
|
||||
// 二次验证
|
||||
setGestureAgain(state, data) {
|
||||
state.gestureAgain = data;
|
||||
},
|
||||
updataLocation(state, data) {
|
||||
state.location = data;
|
||||
},
|
||||
sharePhone(state, data) {
|
||||
state.phone = data;
|
||||
}
|
||||
},
|
||||
// 从基本数据(state)派生的数据,相当于state的计算属性
|
||||
getters: {
|
||||
themeColor(state, getters) {
|
||||
let projectConfig = themeColorConfig[state.themeType]
|
||||
let themeColor = ''
|
||||
projectConfig.colorConfig.map((item, index) => {
|
||||
themeColor += `--benbenFontColor${index}:${item};`
|
||||
})
|
||||
projectConfig.bgColorConfig.map((item, index) => {
|
||||
themeColor += `--benbenbgColor${index}:${item};`
|
||||
})
|
||||
projectConfig.bdColorConfig.map((item, index) => {
|
||||
themeColor += `--benbenbdColor${index}:${item};`
|
||||
})
|
||||
return themeColor
|
||||
},
|
||||
//购物车修改接口之后仍然使用时因为还有其他页面调用
|
||||
allNum(state) {
|
||||
return state.cartNum;
|
||||
},
|
||||
isLogin(state) {
|
||||
if (state.userInfo == null) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
// 是否会员
|
||||
isMember(state) {
|
||||
if (state.userInfo && state.userInfo.user_level) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
// 用户ID
|
||||
uid(state) {
|
||||
if (state.userInfo && state.userInfo.id) {
|
||||
return state.userInfo.id;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
},
|
||||
// 用户Token
|
||||
token(state) {
|
||||
if (state.userInfo && state.userInfo.user_token) {
|
||||
return state.userInfo.user_token;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
// 用户信息
|
||||
userInfo(state) {
|
||||
if (state.userInfo) {
|
||||
return state.userInfo;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
},
|
||||
// 和mutation的功能大致相同,不同之处在于 ==》1. Action 提交的是 mutation,而不是直接变更状态。 2. Action 可以包含任意异步操作。
|
||||
actions: {
|
||||
appClearCache({
|
||||
dispatch,
|
||||
commit,
|
||||
getters,
|
||||
state
|
||||
}) {
|
||||
/* #ifdef APP-PLUS */
|
||||
let that = this
|
||||
utils.showModal({
|
||||
title: global.i18n.t('提示'),
|
||||
content: global.i18n.t('确定要清除本地缓存?'),
|
||||
confirmColor: state.themeColor,
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
console.log('用户点击确定');
|
||||
uni.clearStorage()
|
||||
let os = plus.os.name
|
||||
|
||||
if (os == 'Android') {
|
||||
let main = plus.android.runtimeMainActivity()
|
||||
let sdRoot = main.getCacheDir()
|
||||
let files = plus.android.invoke(sdRoot, 'listFiles')
|
||||
let len = files.length
|
||||
if (len == 0) {
|
||||
message.info(global.i18n.t('缓存清理完成!'))
|
||||
state.appRubbishCacheSize = '0B'
|
||||
}
|
||||
for (let i = 0; i < len; i++) {
|
||||
let filePath = '' + files[i] // 没有找到合适的方法获取路径,这样写可以转成文件路径
|
||||
plus.io.resolveLocalFileSystemURL(
|
||||
filePath,
|
||||
function (entry) {
|
||||
if (entry.isDirectory) {
|
||||
entry.removeRecursively(
|
||||
function (entry) {
|
||||
//递归删除其下的所有文件及子目录
|
||||
message.info(global.i18n.t('缓存清理完成!'))
|
||||
dispatch('getAppCache') // 重新计算缓存
|
||||
},
|
||||
function (e) {
|
||||
console.log(e.message)
|
||||
}
|
||||
)
|
||||
} else {
|
||||
entry.remove()
|
||||
}
|
||||
},
|
||||
function (e) {
|
||||
console.log('文件路径读取失败')
|
||||
}
|
||||
)
|
||||
}
|
||||
} else {
|
||||
// ios暂时未找到清理缓存的方法,以下是官方提供的方法,但是无效,会报错
|
||||
plus.cache.clear(function () {
|
||||
message.info(global.i18n.t('缓存清理完成!'))
|
||||
dispatch('getAppCache') // 重新计算缓存
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
})
|
||||
/* #endif */
|
||||
},
|
||||
getAppCache({
|
||||
dispatch,
|
||||
commit,
|
||||
getters,
|
||||
state
|
||||
}) {
|
||||
/* #ifdef APP-PLUS */
|
||||
plus.cache.calculate(function (size) {
|
||||
let sizeCache = parseInt(size)
|
||||
console.log('缓存大小:' + sizeCache);
|
||||
if (sizeCache == 0) {
|
||||
state.appRubbishCacheSize = '0B'
|
||||
} else if (sizeCache < 1024) {
|
||||
state.appRubbishCacheSize = sizeCache + 'B'
|
||||
} else if (sizeCache < 1048576) {
|
||||
state.appRubbishCacheSize = (sizeCache / 1024).toFixed(2) + 'KB'
|
||||
} else if (sizeCache < 1073741824) {
|
||||
state.appRubbishCacheSize = (sizeCache / 1048576).toFixed(2) + 'MB'
|
||||
} else {
|
||||
state.appRubbishCacheSize = (sizeCache / 1073741824).toFixed(2) + 'GB'
|
||||
}
|
||||
})
|
||||
/* #endif */
|
||||
},
|
||||
getAppVersion({//获取app版本号
|
||||
dispatch,
|
||||
commit,
|
||||
getters,
|
||||
state
|
||||
}) {
|
||||
/* #ifdef APP-PLUS */
|
||||
plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => {
|
||||
state.appVersion = 'V' + widgetInfo.version
|
||||
})
|
||||
/* #endif */
|
||||
},
|
||||
// 获取购物车数量
|
||||
getCartList({
|
||||
dispatch,
|
||||
commit,
|
||||
getters,
|
||||
state
|
||||
}) {
|
||||
if (state.userInfo && global.apiUrls.numberOfShoppingCart) {
|
||||
http.post(global.apiUrls.numberOfShoppingCart).then((res) => {
|
||||
console.log('购物车数量++++++', res.data.data)
|
||||
if (res.data.code == 1) {
|
||||
let data = res.data.data;
|
||||
data = data > 99 ? '99+' : data;
|
||||
commit('getNum', data);
|
||||
commit('setBadge', data);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
commit('setBadge', 0)
|
||||
}
|
||||
}
|
||||
},
|
||||
})
|
||||
export default store;
|
||||
Reference in New Issue
Block a user