2025-03-17 08:30:57 +08:00
|
|
|
import { pinia } from "@/pinia"
|
2025-04-02 09:33:47 +08:00
|
|
|
import { getOpenIdApi, getBalanceApi, qyLogin, getBalanceByQyUserid } from "@/common/apis/shop"
|
2025-03-17 08:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
export const useWxStore = defineStore("wx", () => {
|
|
|
|
// 微信授权 code
|
|
|
|
const code = ref<string>("")
|
|
|
|
// 防止 CSRF 攻击的 state 参数
|
|
|
|
const state = ref<string>("")
|
|
|
|
// 用户 openid
|
|
|
|
const openid = ref<string>("")
|
2025-04-02 09:33:47 +08:00
|
|
|
// 用户 userid
|
|
|
|
const userid = ref<string>("");
|
|
|
|
// 用户余额
|
|
|
|
const balance = ref<number>(0);
|
|
|
|
// 企业id
|
|
|
|
const corpid = ref<string>("");
|
|
|
|
// 是否是柜子管理员
|
|
|
|
const isCabinetAdmin = ref<boolean>(false);
|
2025-03-17 08:30:57 +08:00
|
|
|
|
|
|
|
// 设置 openid
|
|
|
|
const setOpenid = (id: string) => {
|
|
|
|
openid.value = id
|
|
|
|
}
|
|
|
|
|
2025-04-02 09:33:47 +08:00
|
|
|
const setBalance = (amount: number) => {
|
|
|
|
balance.value = amount;
|
|
|
|
}
|
|
|
|
|
|
|
|
const handleWxCallback = async (params: { corpid?: string; code?: string; state?: string }) => {
|
2025-03-17 08:30:57 +08:00
|
|
|
console.log('handleWxCallback:', params)
|
|
|
|
if (params.code) {
|
|
|
|
code.value = params.code
|
|
|
|
state.value = params.state || state.value
|
2025-04-02 09:33:47 +08:00
|
|
|
corpid.value = params.corpid || corpid.value
|
2025-03-17 08:30:57 +08:00
|
|
|
|
|
|
|
try {
|
2025-04-02 09:33:47 +08:00
|
|
|
if (!corpid.value) {
|
|
|
|
// 调用获取 openid 的接口
|
|
|
|
const res = await getOpenIdApi({ code: params.code });
|
|
|
|
if (res && res.code == 0) {
|
|
|
|
openid.value = res.data
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// 企业微信登录
|
|
|
|
const res = await qyLogin({ corpid: corpid.value, code: params.code, state: params.state})
|
|
|
|
if (res && res.code == 0) {
|
|
|
|
userid.value = res.data.userid;
|
|
|
|
openid.value = res.data.openid;
|
|
|
|
isCabinetAdmin.value = res.data.isCabinetAdmin === 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (openid.value) {
|
|
|
|
// 获取用户余额
|
|
|
|
let balanceRes = null;
|
|
|
|
|
|
|
|
if(corpid.value) {
|
|
|
|
balanceRes = await getBalanceByQyUserid(corpid.value, userid.value);
|
|
|
|
} else {
|
|
|
|
balanceRes = await getBalanceApi(openid.value)
|
|
|
|
}
|
|
|
|
console.log('获取余额成功:', balanceRes)
|
|
|
|
if (balanceRes && balanceRes.code == 0) {
|
|
|
|
balance.value = balanceRes.data.balance
|
|
|
|
if (!userid.value) {
|
|
|
|
userid.value = balanceRes.data.userid;
|
|
|
|
}
|
|
|
|
if (!corpid.value) {
|
|
|
|
corpid.value = balanceRes.data.corpid;
|
|
|
|
}
|
|
|
|
}
|
2025-03-17 08:30:57 +08:00
|
|
|
}
|
|
|
|
} catch (err) {
|
|
|
|
console.error('获取 openid 失败:', err)
|
|
|
|
}
|
2025-04-02 09:33:47 +08:00
|
|
|
|
2025-03-17 08:30:57 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-04-02 09:33:47 +08:00
|
|
|
return { code, state, openid, corpid, userid, balance, setOpenid, setBalance, handleWxCallback }
|
2025-03-17 08:30:57 +08:00
|
|
|
})
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @description 用于在 setup 外使用 store
|
|
|
|
*/
|
|
|
|
export function useWxStoreOutside() {
|
|
|
|
return useWxStore(pinia)
|
|
|
|
}
|