Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
470 changes: 445 additions & 25 deletions main/manager-web/package-lock.json

Large diffs are not rendered by default.

13 changes: 8 additions & 5 deletions main/manager-web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"normalize.css": "^8.0.1",
"opus-decoder": "^0.7.7",
"opus-recorder": "^8.0.5",
"vue": "^2.6.14",
"vue": "^2.7.16",
"vue-axios": "^3.5.2",
"vue-router": "^3.6.5",
"vuex": "^3.6.2",
Expand All @@ -25,13 +25,16 @@
"devDependencies": {
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-transform-runtime": "^7.26.10",
"@vue/cli-plugin-router": "~5.0.0",
"@vue/cli-plugin-vuex": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"@types/node": "^20.19.11",
"@vue/cli-plugin-router": "^5.0.8",
"@vue/cli-plugin-typescript": "^5.0.8",
"@vue/cli-plugin-vuex": "^5.0.8",
"@vue/cli-service": "^5.0.8",
"compression-webpack-plugin": "^11.1.0",
"sass": "^1.32.7",
"sass-loader": "^12.0.0",
"vue-template-compiler": "^2.6.14",
"typescript": "5.5",
"vue-template-compiler": "^2.7.16",
"webpack-bundle-analyzer": "^4.10.2",
"workbox-webpack-plugin": "^7.3.0"
},
Expand Down
File renamed without changes.
4 changes: 4 additions & 0 deletions main/manager-web/src/shims-vue.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
declare module '*.vue' {
import Vue from 'vue'
export default Vue
}
86 changes: 0 additions & 86 deletions main/manager-web/src/store/index.js

This file was deleted.

104 changes: 104 additions & 0 deletions main/manager-web/src/store/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
// src/store/index.ts
import Vue from 'vue'
import Vuex, { ActionTree, GetterTree, MutationTree, StoreOptions } from 'vuex'
import type { RootState, UserInfo, PubConfig } from './types'
import { goToPage } from '@/utils'
import Api from '@/apis/api'
import Constant from '@/utils/constant'

Vue.use(Vuex)

const state: RootState = {
token: '', // 添加token存储
userInfo: {}, // 添加用户信息存储
isSuperAdmin: false, // 添加superAdmin状态
pubConfig: { // 添加公共配置存储
version: '',
beianIcpNum: '',
beianGaNum: '',
allowUserRegister: false
}
}

const getters: GetterTree<RootState, RootState> = {
getToken(state): string {
if (!state.token) {
state.token = localStorage.getItem('token') || ''
}
return state.token
},
getUserInfo(state): UserInfo {
return state.userInfo
},
getIsSuperAdmin(state): boolean {
const cached = localStorage.getItem('isSuperAdmin')
if (cached === null) {
return state.isSuperAdmin
}
return cached === 'true'
},
getPubConfig(state): PubConfig {
return state.pubConfig
}
}

const mutations: MutationTree<RootState> = {
setToken(state, token: string) {
state.token = token
localStorage.setItem('token', token)
},

setUserInfo(state, userInfo: UserInfo) {
state.userInfo = userInfo
const isSuperAdmin = userInfo.superAdmin === 1 || userInfo.superAdmin === true
state.isSuperAdmin = isSuperAdmin
localStorage.setItem('isSuperAdmin', String(isSuperAdmin))
},

setPubConfig(state, config: PubConfig | Partial<PubConfig>) {
// 允许后端只返回部分字段,这里做一次合并
state.pubConfig = { ...state.pubConfig, ...config }
},

clearAuth(state) {
state.token = ''
state.userInfo = {}
state.isSuperAdmin = false
localStorage.removeItem('token')
localStorage.removeItem('isSuperAdmin')
}
}

const actions: ActionTree<RootState, RootState> = {
// 添加 logout action
logout({ commit }): Promise<void> {
return new Promise((resolve) => {
commit('clearAuth')
goToPage(Constant.PAGE.LOGIN, true)
resolve()
window.location.reload() // 彻底重置状态
})
},

fetchPubConfig({ commit }): Promise<void> {
return new Promise((resolve) => {
Api.user.getPubConfig(({ data }: any) => {
if (data && data.code === 0) {
commit('setPubConfig', data.data as Partial<PubConfig>)
}
resolve()
})
})
}
}

const storeOptions: StoreOptions<RootState> = {
state,
getters,
mutations,
actions,
modules: {}
}

const store = new Vuex.Store<RootState>(storeOptions)
export default store
28 changes: 28 additions & 0 deletions main/manager-web/src/store/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// src/store/types.ts

export interface UserInfo {
superAdmin?: number | boolean
// 其余后端返回的字段先不细化,保持可扩展
[key: string]: any
}

export interface MobileAreaItem {
key: string
name: string
}

export interface PubConfig {
version: string
beianIcpNum: string | null
beianGaNum: string | null
allowUserRegister: boolean
enableMobileRegister?: boolean
mobileAreaList?: MobileAreaItem[]
}

export interface RootState {
token: string
userInfo: UserInfo
isSuperAdmin: boolean
pubConfig: PubConfig
}
2 changes: 1 addition & 1 deletion main/manager-web/src/utils/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ export function showSuccess(msg) {
* @param path
* @param isRepalce
*/
export function goToPage(path, isRepalce) {
export function goToPage(path, isRepalce = false) {
if (isRepalce) {
router.replace(path)
} else {
Expand Down
Loading