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:
郭庆泰
2026-08-22 20:21:01 +08:00
parent 62a855e562
commit 996ac13994
3 changed files with 20 additions and 9 deletions
+1
View File
@@ -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: '专家管理' } },
+13 -5
View File
@@ -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)
}
}
+6 -4
View File
@@ -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' } })
}
// ========== 提交 (单条) ==========