|
|
|
import { create } from 'zustand'
|
|
|
|
import { fetchJSON } from '@/utils/request'
|
|
|
|
import { isEmpty, isNotEmpty, } from '@/utils/commons'
|
|
|
|
|
|
|
|
export const PERM_MERGE_CONVERSATION = 'merge-conversation'
|
|
|
|
export const PERM_ASSIGN_NEW_CONVERSATION = 'assign-new-conversation'
|
|
|
|
|
|
|
|
const useAuthStore = create((set, get) => ({
|
|
|
|
|
|
|
|
loginUser: {
|
|
|
|
userId: -1,
|
|
|
|
userIdStr: '-1',
|
|
|
|
username: '',
|
|
|
|
avatarUrl: '',
|
|
|
|
mobile: '',
|
|
|
|
email: '',
|
|
|
|
openId: '',
|
|
|
|
accountList: [],
|
|
|
|
permissionList: [],
|
|
|
|
},
|
|
|
|
|
|
|
|
loginStatus: 0,
|
|
|
|
|
|
|
|
isPermitted: (perm) => {
|
|
|
|
const { loginUser } = get()
|
|
|
|
|
|
|
|
if (perm === PERM_MERGE_CONVERSATION) {
|
|
|
|
return ['404', '383', '227'].includes(loginUser.userId)
|
|
|
|
}
|
|
|
|
|
|
|
|
if (perm === PERM_ASSIGN_NEW_CONVERSATION) {
|
|
|
|
return ['79', '383', '404', '227'].includes(loginUser.userId)
|
|
|
|
}
|
|
|
|
// 以上是 Hardcode 判断
|
|
|
|
// 以下是权限列表从数据库读取后使用的方法
|
|
|
|
// return this.permissionList.some((value, key, arry) => {
|
|
|
|
// if (value.indexOf(WILDCARD_TOKEN) > -1) {
|
|
|
|
// return true;
|
|
|
|
// }
|
|
|
|
// if (value === perm) {
|
|
|
|
// return true;
|
|
|
|
// }
|
|
|
|
// return false;
|
|
|
|
// });
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
login: async (authCode) => {
|
|
|
|
|
|
|
|
const { saveUserSession, setLoginStatus } = get()
|
|
|
|
|
|
|
|
setLoginStatus(200)
|
|
|
|
|
|
|
|
const json = await fetchJSON(`https://p9axztuwd7x8a7.mycht.cn/dingtalk/dingtalkwork/WhatsAppAuth`, { authCode })
|
|
|
|
|
|
|
|
if (json.errcode === 0 && isNotEmpty(json.result.opisn)) {
|
|
|
|
set(() => ({
|
|
|
|
loginUser: {
|
|
|
|
userId: json.result.opisn,
|
|
|
|
userIdStr: json.result?.accountlist.map(acc => {
|
|
|
|
return acc.OPI_SN
|
|
|
|
}).join(','),
|
|
|
|
accountName: json.result.opicode,
|
|
|
|
username: json.result.nick,
|
|
|
|
avatarUrl: json.result.avatarUrl,
|
|
|
|
mobile: '+' + json.result.stateCode + '-' + json.result.mobile,
|
|
|
|
email: json.result.email,
|
|
|
|
openId: json.result.openId,
|
|
|
|
accountList: json.result.accountlist,
|
|
|
|
}
|
|
|
|
}))
|
|
|
|
saveUserSession()
|
|
|
|
setLoginStatus(302)
|
|
|
|
} else {
|
|
|
|
setLoginStatus(403)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
setLoginStatus: (code) => {
|
|
|
|
set(() => ({
|
|
|
|
loginStatus: code
|
|
|
|
}))
|
|
|
|
},
|
|
|
|
|
|
|
|
logout: () => {
|
|
|
|
window.sessionStorage.clear()
|
|
|
|
set(() => ({
|
|
|
|
loginStatus: 0,
|
|
|
|
loginUser: {
|
|
|
|
userId: -1,
|
|
|
|
userIdStr: '-1',
|
|
|
|
username: '',
|
|
|
|
avatarUrl: '',
|
|
|
|
mobile: '',
|
|
|
|
email: '',
|
|
|
|
openId: '',
|
|
|
|
accountList: [],
|
|
|
|
permissionList: [],
|
|
|
|
}
|
|
|
|
}))
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
loadUserSession: () => {
|
|
|
|
let sessionData = window.sessionStorage.getItem('GLOBAL_SALES_LOGIN_USER')
|
|
|
|
|
|
|
|
if (import.meta.env.DEV && isEmpty(sessionData)) {
|
|
|
|
sessionData = window.localStorage.getItem('GLOBAL_SALES_LOGIN_USER')
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sessionData !== null) {
|
|
|
|
const sesstionObj = JSON.parse(sessionData);
|
|
|
|
set(() => ({
|
|
|
|
loginUser: sesstionObj,
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
saveUserSession: () => {
|
|
|
|
const { loginUser } = get()
|
|
|
|
window.sessionStorage.setItem('GLOBAL_SALES_LOGIN_USER', JSON.stringify(loginUser))
|
|
|
|
},
|
|
|
|
|
|
|
|
copyUserSession: () => {
|
|
|
|
const sessionData = window.sessionStorage.getItem('GLOBAL_SALES_LOGIN_USER')
|
|
|
|
if (sessionData !== null) {
|
|
|
|
navigator.clipboard.writeText(sessionData)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
export default useAuthStore
|