106 lines
3.3 KiB
TypeScript
106 lines
3.3 KiB
TypeScript
|
import { defineStore, createPinia } from 'pinia'
|
|||
|
import { ProductInfo } from '~/types/order'
|
|||
|
import { createPersistedState } from 'pinia-plugin-persistedstate'
|
|||
|
import { ApplicationDataQuery } from '~/types/merchant'
|
|||
|
import { globalConfigApi } from '~/server/userApi'
|
|||
|
import { GlobalDatas } from '~/types/user'
|
|||
|
|
|||
|
const pinia = createPinia()
|
|||
|
|
|||
|
interface AppSate {
|
|||
|
stateEvaluationInfo: ProductInfo | null
|
|||
|
stateApplicationData: ApplicationDataQuery | null
|
|||
|
stateCarNumber: number
|
|||
|
stateisShowHeaderMenu: boolean
|
|||
|
stateFooterIsIntersecting: boolean
|
|||
|
stateIsHomePage: boolean
|
|||
|
stateRoutePath: string
|
|||
|
stateMerId: number
|
|||
|
stateExpressAll: any
|
|||
|
stateGlobalData: GlobalDatas
|
|||
|
}
|
|||
|
export const useAppStore = defineStore({
|
|||
|
id: 'appStore',
|
|||
|
state: (): AppSate => ({
|
|||
|
stateEvaluationInfo: null, //评价商品信息
|
|||
|
stateApplicationData: null, //商户入驻申请数据
|
|||
|
stateCarNumber: 0, //购物车数量
|
|||
|
stateisShowHeaderMenu: true, //是否展示头部导航
|
|||
|
stateFooterIsIntersecting: true, //底部导航是否出现在可视区域内
|
|||
|
stateIsHomePage: false, //是否是首页
|
|||
|
stateRoutePath: '', //路由地址
|
|||
|
stateMerId: 0, //商户id
|
|||
|
stateExpressAll: [], //全部物流公司
|
|||
|
stateGlobalData: {
|
|||
|
changeColorConfig: '',
|
|||
|
copyrightCompanyImage: '',
|
|||
|
frontDomain: '',
|
|||
|
imageDomain: '',
|
|||
|
paidMemberPriceDisplay: '',
|
|||
|
userIsPaidMember: false,
|
|||
|
siteName: '',
|
|||
|
}, //全局配置
|
|||
|
}),
|
|||
|
persist: process.client && {
|
|||
|
// 仅在客户端使用
|
|||
|
storage: localStorage, // localStorage 本地存储,可替换sessionStorage
|
|||
|
},
|
|||
|
getters: {
|
|||
|
evaluationInfo: (state) => state.stateEvaluationInfo,
|
|||
|
applicationData: (state) => state.stateApplicationData,
|
|||
|
carNumber: (state) => state.stateCarNumber,
|
|||
|
isShowHeaderMenu: (state) => state.stateisShowHeaderMenu,
|
|||
|
footerIsIntersecting: (state) => state.stateFooterIsIntersecting,
|
|||
|
isHomePage: (state) => state.stateIsHomePage,
|
|||
|
routePath: (state) => state.stateRoutePath,
|
|||
|
pcMerId: (state) => state.stateMerId,
|
|||
|
expressAll: (state) => state.stateExpressAll,
|
|||
|
globalData: (state) => state.stateGlobalData,
|
|||
|
},
|
|||
|
actions: {
|
|||
|
//评价商品信息
|
|||
|
getEvaluationInfo(info: ProductInfo) {
|
|||
|
this.stateEvaluationInfo = info
|
|||
|
},
|
|||
|
//商户入驻申请数据
|
|||
|
getApplicationData(info: ApplicationDataQuery) {
|
|||
|
this.stateApplicationData = info
|
|||
|
},
|
|||
|
//购物车数量
|
|||
|
getCarNumber(num: number) {
|
|||
|
this.stateCarNumber = num
|
|||
|
},
|
|||
|
//头部是否展示菜单
|
|||
|
getIsShowHeaderMenu(bool: boolean) {
|
|||
|
this.stateisShowHeaderMenu = bool
|
|||
|
},
|
|||
|
// 底部导航是否出现在可视区域内
|
|||
|
getFooterIsIntersecting(bool: boolean) {
|
|||
|
this.stateFooterIsIntersecting = bool
|
|||
|
},
|
|||
|
//是否是首页
|
|||
|
setIsHomePage(bool: boolean) {
|
|||
|
this.stateIsHomePage = bool
|
|||
|
},
|
|||
|
//获取路由地址
|
|||
|
getRoutePath(path: string) {
|
|||
|
this.stateRoutePath = path
|
|||
|
},
|
|||
|
// 商户id
|
|||
|
getMerId(merId: number) {
|
|||
|
this.stateMerId = merId
|
|||
|
},
|
|||
|
getExpressList(express: any) {
|
|||
|
this.stateExpressAll = express
|
|||
|
},
|
|||
|
//获取全局配置
|
|||
|
async getGlobalConfig() {
|
|||
|
this.stateGlobalData = await globalConfigApi()
|
|||
|
},
|
|||
|
},
|
|||
|
})
|
|||
|
// 添加持久化插件到Pinia中
|
|||
|
pinia.use(createPersistedState())
|
|||
|
|
|||
|
export default pinia
|