2025-05-30 10:06:24 +08:00

160 lines
6.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { defineStore } from 'pinia'
import { getInitInfo, getSiteInfo } from '@/app/api/system'
import useConfigStore from '@/stores/config'
import useMemberStore from '@/stores/member'
import { isWeixinBrowser } from '@/utils/common'
import { cloneDeep } from 'lodash-es';
interface System {
site: AnyObject | null,
siteApps: string[],
siteAddons: string[],
currRoute: string,
mapConfig: any,
initStatus: any, // 初始化状态
menuButtonInfo: any, // 如果是小程序,获取右上角胶囊的尺寸信息
shareCallback: any, // 分享回调
defaultPositionAddress: any,
diyAddressInfo: any // 定位信息
currTabbar: {
path: string,
query: object
}
}
const useSystemStore = defineStore('system', {
state: (): System => {
return {
site: null,
siteApps: [],
siteAddons: [],
currRoute: '',
mapConfig: {
is_open: 1,
valid_time: 0
},
initStatus: 'wait',
menuButtonInfo: {
height: '',
top: '',
right: '',
width: ''
},
shareCallback: null,
defaultPositionAddress: '定位中',
diyAddressInfo: null,
currTabbar: {
path: '',
query: {}
}
}
},
actions: {
// 获取初始化数据信息
getInitFn(callback: any) {
let url = '';
// #ifdef H5
if (isWeixinBrowser()) {
url = uni.getSystemInfoSync().platform == 'ios' ? uni.getStorageSync('initUrl') : location.href
}
// #endif
getInitInfo({
url,
openid: uni.getStorageSync('openid')
}).then((res: any) => {
if (res.data) {
let data = res.data;
// 底部导航
const configStore = useConfigStore()
configStore.tabbarList = data.tabbar_list;
// 地图配置
this.mapConfig.is_open = data.map_config.is_open;
this.mapConfig.valid_time = data.map_config.valid_time;
uni.setStorageSync('mapConfig', this.mapConfig);
// 主题色
uni.setStorageSync('theme_color_list', data.theme_list);
// 站点信息
this.site = data.site_info
this.siteApps = data.site_info.app
this.siteAddons = data.site_info.site_addons.map((item: AnyObject) => {
return item.key
})
// 会员等级
const memberStore = useMemberStore();
memberStore.levelList = data.member_level;
// 登录注册配置
configStore.login.is_username = data.login_config.is_username
configStore.login.is_mobile = data.login_config.is_mobile
configStore.login.is_auth_register = parseInt(data.login_config.is_auth_register)
configStore.login.is_force_access_user_info = parseInt(data.login_config.is_force_access_user_info)
configStore.login.is_bind_mobile = parseInt(data.login_config.is_bind_mobile)
configStore.login.agreement_show = parseInt(data.login_config.agreement_show)
configStore.login.wechat_error = data.login_config.wechat_error // 微信错误消息
configStore.login.bg_url = data.login_config.bg_url // 背景图
configStore.login.logo = data.login_config.logo //logo
configStore.login.desc = data.login_config.desc // 描述
uni.setStorageSync('login_config', configStore.login)
// 如果会员已存在则小程序端快捷登录时不再弹出授权弹框
uni.setStorageSync('member_exist', data.member_exist)
this.initStatus = 'finish'; // 初始化完成
if (uni.getStorageSync('isBindMobile')) {
uni.removeStorageSync('isBindMobile');
}
if (callback) callback()
}
})
this.getMenuButtonInfoFn();
},
getMenuButtonInfoFn() {
// 如果是小程序,获取右上角胶囊的尺寸信息,避免导航栏右侧内容与胶囊重叠(支付宝小程序非本API尚未兼容)
// #ifdef MP-WEIXIN || MP-BAIDU || MP-TOUTIAO || MP-QQ
this.menuButtonInfo = uni.getMenuButtonBoundingClientRect();
// #endif
},
async getSiteInfoFn() {
await getSiteInfo().then((res: any) => {
this.site = res.data
this.siteApps = res.data.app
this.siteAddons = res.data.site_addons.map((item: AnyObject) => {
return item.key
})
}).catch((err) => {
})
},
// 当前选择的收货地址信息[经纬度,当前定位地址,定位过期时间]
setAddressInfo(data: any = {}) {
let addressInfo = cloneDeep(data);
// 过期时间
var date = new Date();
date.setSeconds(60 * this.mapConfig.valid_time);
addressInfo.valid_time = date.getTime() / 1000; // 定位信息 5分钟内有效过期后将重新获取定位信息
if (this.diyAddressInfo) {
this.diyAddressInfo = Object.assign(this.diyAddressInfo, addressInfo);
} else {
this.diyAddressInfo = addressInfo;
}
if (Object.keys(data).length) {
uni.setStorageSync('location_address', addressInfo);
} else {
uni.removeStorageSync('location_address');
}
}
}
})
export default useSystemStore