| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- import { defineStore } from 'pinia'
- import { useVisitedRowState } from './visitedRow'
- import { useNotificationMessage } from './notificationMessage'
- import dayjs from 'dayjs'
- interface UserInfo {
- uname: string
- first_name: string
- last_name: string
- user_type: string
- email: string
- employee_email: string
- expire_day: number
- date_format: string
- numbers_format: string
- PASSWORD_CHANGE_CYCLE: number // 密码修改周期(多少天需要改一次)
- last_pwd_change: string // 上次密码修改时间
- is_desensitization_kln?: string // Mask Customer Information
- kam_customers_name: Array<{ kam_customers_name: string }>
- }
- interface CustomerInfo {
- name: string
- isShowMapping: boolean
- }
- interface UserState {
- userInfo: UserInfo
- isFirstLogin: boolean
- originalUName: string
- customerInfo: CustomerInfo
- }
- /**
- * 根据用户地区判断日期格式
- * @returns {string} - 返回日期格式
- */
- const getDateFormat = () => {
- const userLanguage = navigator.language || 'en-US' // 获取浏览器的语言设置
- // 判断用户地区
- if (userLanguage === 'en-US') {
- return 'MM/DD/YYYY' // 美国使用 MM/DD/YYYY 格式
- } else if (
- userLanguage.startsWith('de') ||
- userLanguage.startsWith('fr') ||
- userLanguage.startsWith('it') ||
- userLanguage.startsWith('es') ||
- userLanguage.startsWith('pl') ||
- userLanguage.startsWith('nl') ||
- userLanguage.startsWith('pt') ||
- userLanguage.startsWith('se')
- ) {
- return 'DD/MM/YYYY' // 其他欧洲国家(例:德语、法语、西班牙语等)使用 DD/MM/YYYY 格式
- } else if (['zh-CN', 'ja-JP', 'ko-KR'].includes(userLanguage)) {
- return 'YYYY-MM-DD' // 东亚国家(如简体中文、日语、韩语)使用 YYYY-MM-DD 格式
- } else {
- return 'DD/MM/YYYY' // 其他地区默认 DD/MM/YYYY 格式
- }
- }
- export const useUserStore = defineStore('user', {
- state: (): UserState => ({
- userInfo: JSON.parse(localStorage.getItem('userInfo') || '{}'),
- isFirstLogin: localStorage.getItem('isFirstLogin')
- ? JSON.parse(localStorage.getItem('isFirstLogin'))
- : false,
- originalUName: localStorage.getItem('originalUName') || JSON.parse(localStorage.getItem('userInfo') || '{}')?.uname || '',
- customerInfo: JSON.parse(localStorage.getItem('customerInfo') || '{"name": "", "isShowMapping": false}')
- }),
- getters: {
- userName(state) {
- if (state.userInfo.first_name && state.userInfo.last_name) {
- return `${state.userInfo.first_name} ${state.userInfo.last_name}`
- } else {
- return state.userInfo.uname || ''
- }
- },
- isShowMapping(state) {
- return state.customerInfo.isShowMapping
- },
- dateFormat(state) {
- return state.userInfo.date_format || getDateFormat()
- },
- expireDay(state) {
- const userInfo = state.userInfo
- return userInfo.PASSWORD_CHANGE_CYCLE - dayjs().diff(dayjs(userInfo.last_pwd_change), 'day')
- },
- isLogin(state) {
- return !(!state.userInfo?.uname || (state.userInfo?.uname && state.isFirstLogin === true))
- }
- },
- actions: {
- // isFirstLogin字段是
- /**
- *
- * @param userInfo
- * @param isFromMapping 用来判断是否从映射的时候获取的用户信息
- * @param isFirstLogin 用来判断是不是该用户第一次使用,如果是第一次使用,那么需要跳转到修改密码页面修改密码之后才能继续使用系统
- */
- setUserInfo(userInfo: any, isFromMapping?: boolean, isFirstLogin?: boolean) {
- this.userInfo = userInfo
- localStorage.setItem('userInfo', JSON.stringify(userInfo))
- if (!isFromMapping) {
- this.originalUName = userInfo.uname
- localStorage.setItem('originalUName', userInfo.uname)
- }
- if (isFirstLogin !== undefined) {
- localStorage.setItem('isFirstLogin', JSON.stringify(isFirstLogin))
- this.isFirstLogin = isFirstLogin
- }
- },
- setCustomerInfo(customerInfo: CustomerInfo) {
- this.customerInfo = customerInfo
- localStorage.setItem('customerInfo', JSON.stringify(customerInfo))
- },
- async logout(isNeedLogout: boolean = true) {
- if (isNeedLogout) {
- await $api.logout().then(() => { })
- }
- localStorage.removeItem('userInfo')
- localStorage.removeItem('originalUName')
- localStorage.removeItem('customerInfo')
- this.originalUName = ''
- this.customerInfo = { name: '', isShowMapping: false }
- this.userInfo = {}
- if (localStorage.getItem('isFirstLogin')) {
- localStorage.removeItem('isFirstLogin')
- }
- this.isFirstLogin = false
- useVisitedRowState().clearVisitedRow()
- useNotificationMessage().clearData()
- }
- }
- })
|