c7cdec27e0
commita514bf4009Author: 浅念 <email@sample.com> Date: Thu Sep 18 09:55:10 2025 +0800 Squashed commit of the following: commit9e260ddcd8Author: 浅念 <email@sample.com> Date: Thu Sep 18 09:49:33 2025 +0800 修改 kpi commit6feb3ace75Author: 浅念 <email@sample.com> Date: Thu Sep 18 09:42:44 2025 +0800 kpi 统计 commitec257a246dAuthor: 浅念 <email@sample.com> Date: Wed Sep 17 17:04:35 2025 +0800 修改 弹框表格 commitfa764852abAuthor: 浅念 <email@sample.com> Date: Wed Sep 17 15:54:35 2025 +0800 添加 账户简称 commit65f7f4a123Author: 浅念 <email@sample.com> Date: Wed Sep 17 15:10:28 2025 +0800 品牌加热门 修改 仪表盘接口 commit922cfec81dAuthor: 浅念 <email@sample.com> Date: Tue Sep 16 15:57:17 2025 +0800 调整备货单 crm 端页面 commit5c8df36f12Author: 浅念 <email@sample.com> Date: Mon Sep 15 17:14:38 2025 +0800 调整备货单 及各页面名称 commit5503a14408Author: 浅念 <email@sample.com> Date: Fri Sep 12 18:10:03 2025 +0800 账户添加公司 commit3439b45d9aAuthor: 浅念 <email@sample.com> Date: Fri Sep 12 17:53:26 2025 +0800 修改终版备货单 commit045d13eb7bAuthor: 浅念 <email@sample.com> Date: Fri Sep 12 17:49:07 2025 +0800 修改备货单 等页面 commitda690dfa06Author: 浅念 <email@sample.com> Date: Thu Sep 11 17:44:37 2025 +0800 修改 备货单 详情 commit853e9591b3Author: 浅念 <email@sample.com> Date: Wed Sep 10 18:11:39 2025 +0800 修改 备货单页面 commit9052bd1027Author: 浅念 <email@sample.com> Date: Tue Sep 9 20:53:30 2025 +0800 备货单 审核功能 commit079d9babb8Merge:ebd747991d810bAuthor: 浅念 <email@sample.com> Date: Tue Sep 9 14:51:43 2025 +0800 Merge branch 'feature/crm_pc' of http://219.157.255.213:25311/xinyouhe/art-design into feature/crm_vehicle commitebd7479573Merge:64e53b6459d306Author: 浅念 <email@sample.com> Date: Tue Sep 9 13:57:28 2025 +0800 Merge branch 'feature/crm_pc' of http://219.157.255.213:25311/xinyouhe/art-design into feature/crm_vehicle commit64e53b6ee9Author: 浅念 <email@sample.com> Date: Mon Sep 8 19:09:55 2025 +0800 备货单 加 审批流程 commit9bd7c89cb4Author: 浅念 <email@sample.com> Date: Thu Sep 4 15:09:17 2025 +0800 车辆信息,备货单 等页面 commit91d810b33aAuthor: 浅念 <email@sample.com> Date: Tue Sep 9 14:51:23 2025 +0800 添加公司搜索 commit459d306504Author: 浅念 <email@sample.com> Date: Tue Sep 9 13:56:43 2025 +0800 用户添加 公司搜索 commit8a0d4fc516Author: 浅念 <email@sample.com> Date: Thu Sep 4 14:38:09 2025 +0800 自定义跟进时间 处理 commit58f7d56f40Author: 浅念 <email@sample.com> Date: Wed Sep 3 15:13:10 2025 +0800 工单去掉 移动端不显示限制 commita91e1d7820Author: 浅念 <email@sample.com> Date: Tue Sep 2 14:13:15 2025 +0800 将编号 后移 commita9f8c5c4dcAuthor: 浅念 <email@sample.com> Date: Wed Aug 27 09:20:56 2025 +0800 客户重复通知 commitaefd43f79dAuthor: 浅念 <email@sample.com> Date: Tue Aug 26 09:55:42 2025 +0800 修改 通知详情样式 和 即时通讯 commit1bd9d163ecAuthor: 浅念 <email@sample.com> Date: Mon Aug 25 15:31:14 2025 +0800 通知 列表富文本内容显示 commitbe6093e57dAuthor: 浅念 <email@sample.com> Date: Mon Aug 25 13:34:13 2025 +0800 crm 客户添加自定义列 跟进添加图片粘贴上传 commitd83246ba8cAuthor: 浅念 <email@sample.com> Date: Fri Aug 22 18:33:58 2025 +0800 显示编号 commit329acaf68dAuthor: 浅念 <email@sample.com> Date: Fri Aug 22 18:27:26 2025 +0800 通知板块 及 功能调整 commitb319944007Author: 浅念 <email@sample.com> Date: Thu Aug 21 11:12:12 2025 +0800 调整联系方式字段为电话 列表中多个联系方式纵向排列显示 会增加公司信息的自定义输入框 排序搜索 等功能 commit70d26f0829Author: 浅念 <email@sample.com> Date: Tue Aug 19 16:18:15 2025 +0800 1.0.3 的相关功能 commit0e84bedb67Author: 浅念 <email@sample.com> Date: Fri Aug 15 16:31:55 2025 +0800 v1.0.2 更新内容 commitf5deb7b8f7Author: 浅念 <email@sample.com> Date: Wed Aug 13 19:27:49 2025 +0800 添加菜单 权限 等页面 commite797cb24deAuthor: 浅念 <email@sample.com> Date: Mon Aug 11 19:24:24 2025 +0800 添加工单附件 及样式 commit619311dfbeAuthor: chenlan <suya123456> Date: Fri Aug 8 22:13:25 2025 +0800 添加crm 归属客户 commitb402e522bfAuthor: 浅念 <email@sample.com> Date: Thu Aug 7 10:51:17 2025 +0800 询单权限校验 commitf950f665a9Author: 浅念 <email@sample.com> Date: Thu Aug 7 10:10:45 2025 +0800 添加 询单图片预览 commit8deecc8197Author: 浅念 <email@sample.com> Date: Wed Aug 6 18:36:42 2025 +0800 修改用户页面 询单 commit3e24d1905fAuthor: 浅念 <email@sample.com> Date: Tue Aug 5 18:25:32 2025 +0800 添加用户页面 客户页面接口 等 commit7542d80e38Author: 浅念 <email@sample.com> Date: Mon Aug 4 18:05:07 2025 +0800 修改 仪表盘页面样式 commite5548f95e4Author: 浅念 <email@sample.com> Date: Mon Aug 4 14:50:55 2025 +0800 修改询单字段 仪表盘页面 及添加管理端客户页面 commitd30ea5b7bfAuthor: 浅念 <email@sample.com> Date: Mon Aug 4 14:48:58 2025 +0800 添加echarts 插件 commit0e4160c5caAuthor: 浅念 <email@sample.com> Date: Fri Aug 1 18:27:22 2025 +0800 仪表盘接口 commitbd23288acdAuthor: 浅念 <email@sample.com> Date: Fri Aug 1 18:26:46 2025 +0800 修改 仪表盘 commit6bfb940881Author: 浅念 <email@sample.com> Date: Fri Aug 1 10:01:35 2025 +0800 客户列表 添加公海详情展示 commitb50f650565Author: 浅念 <email@sample.com> Date: Thu Jul 31 17:26:36 2025 +0800 修改 客户标签样式 个人信息添加邮箱 修复关闭全部页面404 commitea1dbb7af4Author: 浅念 <email@sample.com> Date: Wed Jul 30 18:50:31 2025 +0800 修改公海和询单页面 commit1bfbb95bd9Author: 浅念 <email@sample.com> Date: Wed Jul 30 17:23:09 2025 +0800 修改样式和添加用户数据显示 commita9f5f76b35Author: 浅念 <email@sample.com> Date: Wed Jul 30 15:06:03 2025 +0800 设置默认页面 commit3ea9d3d5dfAuthor: 浅念 <email@sample.com> Date: Wed Jul 30 11:46:31 2025 +0800 修改飞书登录 公司id 系统id 获取不到问题 客户及公海添加用户信息显示 commit0cef82279fAuthor: 浅念 <email@sample.com> Date: Tue Jul 29 16:42:36 2025 +0800 修改工单 客户等页面 commit695ebbcc71Author: 浅念 <email@sample.com> Date: Fri Jul 25 17:50:04 2025 +0800 修改默认值 commitffc194a1c1Author: 浅念 <email@sample.com> Date: Fri Jul 25 17:05:33 2025 +0800 飞书授权添加系统码 及登录进入页面路由 commit48b95e252fAuthor: 浅念 <email@sample.com> Date: Fri Jul 25 15:48:49 2025 +0800 回收站添加占位 commit382011d592Author: 浅念 <email@sample.com> Date: Fri Jul 25 15:11:50 2025 +0800 修改登录页样式公海数据 个人信息默认图 commit0f790269dbAuthor: 浅念 <email@sample.com> Date: Fri Jul 25 09:16:55 2025 +0800 修改字段名称 commitf18cfdb69eAuthor: 浅念 <email@sample.com> Date: Thu Jul 24 17:28:51 2025 +0800 调整代码格式 commit858147fbbdAuthor: 浅念 <email@sample.com> Date: Thu Jul 24 10:17:22 2025 +0800 修改token刷新 及修改询单详情展示 commitc333b907e6Author: 浅念 <email@sample.com> Date: Wed Jul 23 18:22:56 2025 +0800 对接询单接口 commit7979a31e36Author: 浅念 <email@sample.com> Date: Wed Jul 23 14:40:02 2025 +0800 修改代码格式 commit4a39387865Author: 浅念 <email@sample.com> Date: Wed Jul 23 14:07:13 2025 +0800 设置客户列表权限 commitfc4de02582Author: 浅念 <email@sample.com> Date: Tue Jul 22 17:08:13 2025 +0800 feat(router): 调整菜单 commit2ffe0c9753Author: 浅念 <email@sample.com> Date: Tue Jul 22 17:04:16 2025 +0800 feat(crmApi.ts): 调整结构 commitc3fb2c48d3Author: 浅念 <email@sample.com> Date: Tue Jul 22 17:00:25 2025 +0800 feat(router): 路由调整 commitc5b0a8265aAuthor: 浅念 <email@sample.com> Date: Tue Jul 22 16:54:06 2025 +0800 chore: 添加询单页面及调整菜单 commitca06c9bc46Author: 浅念 <email@sample.com> Date: Tue Jul 22 16:35:43 2025 +0800 询单页面及菜单 commit3b6de4c7faMerge:d3bb4ec85e8b9bAuthor: 浅念 <email@sample.com> Date: Tue Jul 22 09:22:20 2025 +0800 Merge branch 'master' into feature/crm_pc commitd3bb4ec6e5Merge:c7d8908d7ab6f1Author: 浅念 <email@sample.com> Date: Mon Jul 21 18:22:55 2025 +0800 Merge branch 'master' into feature/crm_pc # Conflicts: # .gitignore # src/api/crmApi.ts # src/api/usersApi.ts # src/store/modules/user.ts # src/utils/http/index.ts # src/views/auth/login/index.vue # src/views/crmpc/customer/Show.vue # src/views/crmpc/customer/index.vue commitc7d890809cAuthor: 浅念 <email@sample.com> Date: Mon Jul 21 18:12:16 2025 +0800 添加系统码 commit31cd18fadeAuthor: 浅念 <email@sample.com> Date: Mon Jul 21 18:02:48 2025 +0800 Merge branch 'master' into feature/crm_pc # Conflicts: # .gitignore commit59c9c97c08Author: 浅念 <email@sample.com> Date: Mon Jul 21 17:56:52 2025 +0800 Merge branch 'master' into feature/crm_pc # Conflicts: # .gitignore commitd4b577c42eAuthor: 浅念 <email@sample.com> Date: Mon Jul 21 13:03:56 2025 +0800 feat(crm): 添加相关图片 commite4967760b7Merge:0c6766685102fcAuthor: 浅念 <email@sample.com> Date: Mon Jul 21 11:25:49 2025 +0800 Finish crm_pc commit85102fcf32Author: 浅念 <email@sample.com> Date: Mon Jul 21 11:24:06 2025 +0800 crm 接口对接 commit0c67666793Author: 浅念 <email@sample.com> Date: Wed Jul 16 17:18:14 2025 +0800 添加上传头部信息 commita41c75f703Author: 浅念 <email@sample.com> Date: Tue Jul 15 09:40:53 2025 +0800 修改页面 commit22ae0e86c8Author: 浅念 <email@sample.com> Date: Mon Jul 14 17:59:02 2025 +0800 修改页面 commit812e3c4b0cAuthor: 浅念 <email@sample.com> Date: Mon Jul 14 10:09:10 2025 +0800 修改菜单问题 commit2ad479b006Author: 浅念 <email@sample.com> Date: Fri Jul 11 19:45:57 2025 +0800 修改样式 commit5802e157bfAuthor: 浅念 <email@sample.com> Date: Fri Jul 11 19:43:34 2025 +0800 修改工单 commit713d43f7b4Author: 浅念 <email@sample.com> Date: Fri Jul 11 18:37:16 2025 +0800 添加登录 commit719911918fAuthor: 浅念 <email@sample.com> Date: Fri Jul 4 17:16:38 2025 +0800 项目创建 commitce47b39fa5Author: 浅念 <email@sample.com> Date: Wed Jul 2 09:37:51 2025 +0800 删除 # Conflicts: # src/App.vue # src/api/adminApi.ts # src/api/crmApi.ts # src/api/menuApi.ts # src/api/systemApi.ts # src/api/usersApi.ts # src/components/core/layouts/art-header-bar/index.vue # src/components/core/layouts/art-page-content/index.vue # src/router/routes/asyncRoutes.ts # src/router/routesAlias.ts # src/views/admin/customer/customeraudit.vue # src/views/admin/customer/highseas.vue # src/views/admin/customer/index.vue # src/views/admin/inquiry_system/index.vue # src/views/admin/system/company.vue # src/views/admin/system/feishu_app.vue # src/views/admin/system/menu/index.vue # src/views/admin/system/role/index.vue # src/views/admin/system/systems.vue # src/views/admin/user/index.vue # src/views/admin/user/user_info.vue # src/views/auth/login/index.vue # src/views/crmpc/customer/Add.vue # src/views/crmpc/customer/Edit.vue # src/views/crmpc/customer/Followadd.vue # src/views/crmpc/customer/Show.vue # src/views/crmpc/customer/index.vue # src/views/crmpc/highseas/index.vue # src/views/crmpc/recycle/index.vue # src/views/crmpc/team/team_customer.vue # src/views/crmpc/team/user_customer.vue # src/views/dashboard/console/index.vue # src/views/system/user-center/index.vue # src/views/work/myOrder/index.vue # src/views/work/order/index.vue
213 lines
6.2 KiB
TypeScript
213 lines
6.2 KiB
TypeScript
import { defineStore } from 'pinia'
|
|
import { ref, computed } from 'vue'
|
|
import { LanguageEnum } from '@/enums/appEnum'
|
|
import { router } from '@/router'
|
|
import { useSettingStore } from './setting'
|
|
import { useWorktabStore } from './worktab'
|
|
import { AppRouteRecord } from '@/types/router'
|
|
import { setPageTitle } from '@/router/utils/utils'
|
|
import { resetRouterState } from '@/router/guards/beforeEach'
|
|
import { RoutesAlias } from '@/router/routesAlias'
|
|
import { UserService } from '@/api/usersApi' // 新增导入
|
|
let refreshTimeout: ReturnType<typeof setTimeout> | null = null // 定时器变量
|
|
|
|
// 用户
|
|
export const useUserStore = defineStore(
|
|
'userStore',
|
|
() => {
|
|
const language = ref(LanguageEnum.ZH)
|
|
const isLogin = ref(false)
|
|
const isLock = ref(false)
|
|
const lockPassword = ref('')
|
|
const info = ref<Partial<Api.User.UserInfo>>({})
|
|
const searchHistory = ref<AppRouteRecord[]>([])
|
|
const accessToken = ref('')
|
|
const refreshToken = ref('')
|
|
const companyid = ref('')
|
|
const companyabbr = ref('')
|
|
const systemsid = ref('')
|
|
const systemsabbr = ref('')
|
|
const home_page = ref('')
|
|
const loginType = ref<'feishu' | 'upwd'>('upwd')
|
|
const tokenExpireAt = ref<number>(0)
|
|
|
|
const getUserInfo = computed(() => info.value)
|
|
const getSettingState = computed(() => useSettingStore().$state)
|
|
const getWorktabState = computed(() => useWorktabStore().$state)
|
|
|
|
const setUserInfo = (newInfo: Api.User.UserInfo) => {
|
|
info.value = newInfo
|
|
}
|
|
|
|
const setLoginStatus = (status: boolean) => {
|
|
isLogin.value = status
|
|
}
|
|
|
|
const setLanguage = (lang: LanguageEnum) => {
|
|
setPageTitle(router.currentRoute.value)
|
|
language.value = lang
|
|
}
|
|
const setLoginType = (type: 'feishu' | 'upwd') => {
|
|
loginType.value = type
|
|
}
|
|
const setSearchHistory = (list: AppRouteRecord[]) => {
|
|
searchHistory.value = list
|
|
}
|
|
|
|
const setLockStatus = (status: boolean) => {
|
|
isLock.value = status
|
|
}
|
|
|
|
const setLockPassword = (password: string) => {
|
|
lockPassword.value = password
|
|
}
|
|
|
|
const setToken = (newAccessToken: string, newRefreshToken?: string, expiresIn?: number) => {
|
|
accessToken.value = newAccessToken
|
|
if (newRefreshToken) {
|
|
refreshToken.value = newRefreshToken
|
|
}
|
|
if (expiresIn) {
|
|
const expireAt = Date.now() + expiresIn * 1000
|
|
tokenExpireAt.value = expireAt
|
|
localStorage.setItem('token_expire_at', String(expireAt))
|
|
// 检查是否需要重新设置定时器
|
|
const currentLeftSeconds = Math.floor((expireAt - Date.now()) / 1000)
|
|
if (currentLeftSeconds > 0) {
|
|
scheduleTokenRefresh(currentLeftSeconds)
|
|
}
|
|
}
|
|
}
|
|
const setCompany = (id: string, abbr: string) => {
|
|
companyid.value = id
|
|
companyabbr.value = abbr
|
|
}
|
|
const setSystems = (id: string, abbr: string) => {
|
|
systemsid.value = id
|
|
systemsabbr.value = abbr
|
|
}
|
|
// 设置首页
|
|
const sethome_page = (page: string) => {
|
|
home_page.value = page
|
|
}
|
|
function restoreTokenTimer() {
|
|
const expireAt = Number(localStorage.getItem('token_expire_at') || '0')
|
|
if (accessToken.value && expireAt > Date.now()) {
|
|
const leftSeconds = Math.floor((expireAt - Date.now()) / 1000)
|
|
scheduleTokenRefresh(leftSeconds)
|
|
}
|
|
}
|
|
|
|
let isScheduled = false
|
|
|
|
function scheduleTokenRefresh(expiresIn: number) {
|
|
if (refreshTimeout) {
|
|
clearTimeout(refreshTimeout)
|
|
refreshTimeout = null
|
|
}
|
|
|
|
// 提前1分钟刷新
|
|
const refreshTime = (expiresIn - 60) * 1000
|
|
|
|
if (refreshTime > 0) {
|
|
if (!isScheduled) {
|
|
isScheduled = true
|
|
refreshTimeout = setTimeout(() => {
|
|
refreshTokenAction().finally(() => {
|
|
isScheduled = false // 重置标志位
|
|
})
|
|
}, refreshTime)
|
|
} else {
|
|
console.log('scheduleTokenRefresh is already scheduled, skipping...')
|
|
}
|
|
} else {
|
|
console.error('Invalid refreshTime:', refreshTime)
|
|
}
|
|
}
|
|
|
|
async function refreshTokenAction() {
|
|
try {
|
|
const { data } = await UserService.refreshToken({ refresh_token: refreshToken.value })
|
|
// 动态计算剩余时间
|
|
const currentTime = Date.now()
|
|
const expireAt = currentTime + data.expires_in * 1000
|
|
const leftSeconds = Math.floor((expireAt - currentTime) / 1000)
|
|
setToken(data.access_token, data.refresh_token, leftSeconds)
|
|
} catch (e) {
|
|
console.error('Token refresh failed:', e)
|
|
logOut()
|
|
}
|
|
}
|
|
|
|
const logOut = () => {
|
|
// 清空所有本地缓存
|
|
localStorage.clear()
|
|
sessionStorage.clear()
|
|
systemsabbr.value = ''
|
|
systemsid.value = ''
|
|
companyabbr.value = ''
|
|
companyid.value = ''
|
|
home_page.value = ''
|
|
info.value = {}
|
|
isLogin.value = false
|
|
isLock.value = false
|
|
lockPassword.value = ''
|
|
accessToken.value = ''
|
|
refreshToken.value = ''
|
|
if (refreshTimeout) clearTimeout(refreshTimeout) // 清理定时器
|
|
// 清理工作台标签页
|
|
useWorktabStore().clearAll()
|
|
// 清理sessionStorage中的用户信息缓存
|
|
sessionStorage.removeItem('lastUserInfo')
|
|
sessionStorage.removeItem('iframeRoutes')
|
|
// 重置路由状态
|
|
resetRouterState(router)
|
|
// 跳转到登录页
|
|
router.push(RoutesAlias.Login)
|
|
}
|
|
|
|
return {
|
|
language,
|
|
isLogin,
|
|
isLock,
|
|
lockPassword,
|
|
info,
|
|
companyid,
|
|
companyabbr,
|
|
systemsid,
|
|
systemsabbr,
|
|
home_page,
|
|
searchHistory,
|
|
loginType,
|
|
accessToken,
|
|
refreshToken,
|
|
tokenExpireAt,
|
|
getUserInfo,
|
|
getSettingState,
|
|
getWorktabState,
|
|
setUserInfo,
|
|
setLoginStatus,
|
|
setLanguage,
|
|
setSearchHistory,
|
|
setLockStatus,
|
|
setLockPassword,
|
|
setToken,
|
|
setCompany,
|
|
setSystems,
|
|
setLoginType,
|
|
sethome_page,
|
|
logOut,
|
|
restoreTokenTimer
|
|
}
|
|
},
|
|
{
|
|
persist: {
|
|
key: 'user',
|
|
storage: localStorage,
|
|
afterRestore: (ctx: { store: { restoreTokenTimer: () => void } }) => {
|
|
ctx.store.restoreTokenTimer()
|
|
}
|
|
} as any
|
|
}
|
|
)
|