refactor(meetings): MeetingNew admin/manager 双前缀路由 (admin 不用 /manager 路径)
把 'admin 用 manager 前缀 URL' 这个跨角色硬编码改对称.
router:
- 新增 admin-meetings-new → manager/MeetingNew.vue (公共页)
MeetingNew.vue goBack():
- new 模式: admin 跳 /admin/projects, manager 跳 /manager/projects (用 projectsBase computed)
- edit/copy 模式: admin 跳 /admin/meetings, manager 跳 /manager/meetings (用 meetingsBase computed)
- roleSegment / isAdmin 从 route.path.split('/')[1] 计算, 不依赖 userStore
meetings/Meetings.vue onEdit/onCopy:
- 引入 newRouteName computed (isAdmin ? 'admin-meetings-new' : 'manager-meetings-new')
- router.push({ name: newRouteName.value, query: {...} })
效果:
- admin 点 '新建/修改/复制' → URL 是 /admin/meetings/new, 不再跨到 /manager/meetings/new
- admin 取消保存 → 回 /admin/meetings (列表) 或 /admin/projects (新建上游)
- manager 行为不变
This commit is contained in:
@@ -28,6 +28,7 @@ const routes = [
|
||||
{ path: 'projects', name: 'admin-projects', component: () => import('@/views/manager/Projects.vue'), meta: { title: '项目管理' } },
|
||||
{ path: 'meetings', name: 'admin-meetings', component: () => import('@/views/meetings/Meetings.vue'), meta: { title: '会议管理' } },
|
||||
{ path: 'meetings/detail/:meetingId', name: 'admin-meetings-detail', component: () => import('@/views/manager/MeetingDetail.vue'), meta: { title: '会议详情' } },
|
||||
{ path: 'meetings/new', name: 'admin-meetings-new', component: () => import('@/views/manager/MeetingNew.vue'), meta: { title: '新建会议' } },
|
||||
{ path: 'department', name: 'admin-department', component: () => import('@/views/admin/Department.vue'), meta: { title: '科室管理' } },
|
||||
{ path: 'title', name: 'admin-title', component: () => import('@/views/admin/Title.vue'), meta: { title: '职称管理' } },
|
||||
{ path: 'experts', name: 'admin-experts', component: () => import('@/views/expert/Experts.vue'), meta: { title: '专家管理' } },
|
||||
|
||||
@@ -57,12 +57,20 @@
|
||||
<script setup>
|
||||
import { ref, reactive, computed, onMounted } from 'vue'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
import { bizAdd, bizGet, bizUpdate } from '@/api/public'
|
||||
import { ElMessage } from 'element-plus'
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
|
||||
// ========== 角色感知 (admin/manager 共用此新建页, 按 URL 第 1 段识别) ==========
|
||||
const userStore = useUserStore()
|
||||
const roleSegment = computed(() => route.path.split('/')[1]) // 'admin' | 'manager'
|
||||
const isAdmin = computed(() => roleSegment.value === 'admin')
|
||||
const meetingsBase = computed(() => `/${roleSegment.value}/meetings`)
|
||||
const projectsBase = computed(() => `/${roleSegment.value}/projects`)
|
||||
|
||||
// ========== mode 判定 ==========
|
||||
// 3 种模式:
|
||||
// new: ?projectId=xxx → POST /business/meeting (新建)
|
||||
@@ -183,13 +191,13 @@ async function onSave() {
|
||||
}
|
||||
|
||||
function goBack() {
|
||||
// 跳回上游列表页:
|
||||
// new (从 Projects 来) → /manager/projects
|
||||
// edit/copy (从 Meetings 来) → /manager/meetings
|
||||
// 跳回上游列表页 (按角色):
|
||||
// new (从 Projects 来) → /{role}/projects
|
||||
// edit/copy (从 Meetings 来) → /{role}/meetings
|
||||
if (mode.value === 'new') {
|
||||
router.push('/manager/projects')
|
||||
router.push(projectsBase.value)
|
||||
} else {
|
||||
router.push({ name: 'manager-meetings' })
|
||||
router.push(meetingsBase.value)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- 修改 / 复制: 都跳 manager-meetings-new (MeetingNew.vue 公共页, 不区分角色入口) -->
|
||||
<!-- 修改 / 复制: 按角色跳 admin-meetings-new / manager-meetings-new (MeetingNew.vue 公共页) -->
|
||||
<!-- 查看: 按角色跳 /admin/meetings/detail/:id 或 /manager/meetings/detail/:id -->
|
||||
</div>
|
||||
</template>
|
||||
@@ -110,6 +110,8 @@ const breadcrumb = computed(() =>
|
||||
)
|
||||
// 详情路由前缀: admin 跳 admin-meetings-detail, manager 跳 manager-meetings-detail
|
||||
const detailBase = computed(() => `/${roleSegment.value}/meetings`)
|
||||
// 修改/复制路由名: 按角色选 admin-meetings-new 或 manager-meetings-new
|
||||
const newRouteName = computed(() => isAdmin.value ? 'admin-meetings-new' : 'manager-meetings-new')
|
||||
|
||||
// ========== 筛选 (按实际 8 项: 项目编号/会议ID/会议名称/第?期/会议时间/项目形式/当前阶段/备注) ==========
|
||||
const q = ref({
|
||||
@@ -171,12 +173,12 @@ function reset() {
|
||||
function viewDetail(row) {
|
||||
router.push(`${detailBase.value}/detail/${row.meetingId}`)
|
||||
}
|
||||
// 修改 / 复制: 都跳 manager-meetings-new (MeetingNew.vue 是公共页, admin 进 manager 路由不影响功能)
|
||||
// 修改 / 复制: 按角色选 admin-meetings-new 或 manager-meetings-new (MeetingNew.vue 公共页)
|
||||
function onEdit(row) {
|
||||
router.push({ name: 'manager-meetings-new', query: { meetingId: row.meetingId, projectId: row.projectId || '' } })
|
||||
router.push({ name: newRouteName.value, query: { meetingId: row.meetingId, projectId: row.projectId || '' } })
|
||||
}
|
||||
function onCopy(row) {
|
||||
router.push({ name: 'manager-meetings-new', query: { meetingId: row.meetingId, projectId: row.projectId || '', mode: 'copy' } })
|
||||
router.push({ name: newRouteName.value, query: { meetingId: row.meetingId, projectId: row.projectId || '', mode: 'copy' } })
|
||||
}
|
||||
|
||||
// ========== 提交 (单条) ==========
|
||||
|
||||
Reference in New Issue
Block a user