智慧教务系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

152 lines
5.7 KiB

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 // 定位信息
}
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
}
},
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
const apps: any = [], addons: any = []
Object.keys(data.site_info.site_addons).forEach((key: string) => {
const item = data.site_info.site_addons[key]
item.type == 'app' ? apps.push(key) : addons.push(key)
})
this.siteApps = apps
this.siteAddons = addons
// 会员等级
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.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 (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
const apps: any = [], addons: any = []
Object.keys(res.data.site_addons).forEach((key: string) => {
const item = res.data.site_addons[key]
item.type == 'app' ? apps.push(key) : addons.push(key)
})
this.siteApps = apps
this.siteAddons = addons
}).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