admin 会议管理: - 新建 admin/AdminMeetings.vue (查看/删除/批量删除, 面包屑 首页/项目管理/会议管理) - AdminLayout.vue 加 /admin/meetings 菜单 - router/index.js 加 admin-meetings + admin-meetings-detail 路由 - MeetingDetail.vue admin 删除按钮改 admin+manager 双角色可触发 (onAdminDelete 跳回按角色) manager 会议管理: - Meetings.vue 加批量删除 + 删除按钮 + 删除确认文案 (6 张表级联) - MeetingDetail.vue 删除按钮 v-if 改 canDeleteMeeting = isAdmin || isManager manager 项目管理: - Projects.vue 加批量删除 + 删除项 + doDelete 改走 cascade (5 张项目表 + 会议链) - ProjectsNew.vue style-alignment: page-card 居左 (max-width 1200px, 无 margin auto), form-actions 包在 el-form 内 - Projects.vue + Meetings.vue + AdminMeetings.vue 删页内冗余删除提示 store + 组件: - store/user.js 加 isAdmin getter - components/ProjectRoleSelect.vue 新建 (项目级角色劳务下拉, 接 roleLabor)
51 lines
1.5 KiB
JavaScript
51 lines
1.5 KiB
JavaScript
import { defineStore } from 'pinia'
|
|
|
|
export const useUserStore = defineStore('user', {
|
|
state: () => ({
|
|
token: localStorage.getItem('ry_token') || '',
|
|
user: JSON.parse(localStorage.getItem('ry_user') || 'null'),
|
|
/**
|
|
* 当前用户 (doctor 角色) 的专家审核状态
|
|
* true = 审核通过 (audit_status='2'), false = 待审核/被拒绝/未注册
|
|
* 用于侧栏 menu 和首页 pannel 的可见性控制
|
|
* 非 doctor 角色保持 false (无意义)
|
|
*/
|
|
expertAuditApproved: false
|
|
}),
|
|
getters: {
|
|
role: (s) => s.user?.role || '',
|
|
isLogin: (s) => !!s.user,
|
|
accountType: (s) => s.user?.accountType || 'MAIN',
|
|
parentUserId: (s) => s.user?.parentUserId || null,
|
|
isMain: (s) => (s.user?.accountType || 'MAIN') === 'MAIN',
|
|
isSub: (s) => s.user?.accountType === 'SUB',
|
|
isAdmin: (s) => s.user?.role === 'admin'
|
|
},
|
|
actions: {
|
|
setLogin(token, user) {
|
|
this.token = token
|
|
this.user = user
|
|
localStorage.setItem('ry_token', token)
|
|
localStorage.setItem('ry_user', JSON.stringify(user))
|
|
},
|
|
setToken(token) {
|
|
this.token = token
|
|
localStorage.setItem('ry_token', token)
|
|
},
|
|
setUser(user) {
|
|
this.user = user
|
|
localStorage.setItem('ry_user', JSON.stringify(user))
|
|
},
|
|
setExpertAuditApproved(v) {
|
|
this.expertAuditApproved = !!v
|
|
},
|
|
logout() {
|
|
this.token = ''
|
|
this.user = null
|
|
this.expertAuditApproved = false
|
|
localStorage.removeItem('ry_token')
|
|
localStorage.removeItem('ry_user')
|
|
}
|
|
}
|
|
})
|