refactor(projects): assign + assign-batch 合并为单路由, 子页面 v-if 区分

- router 删 /assign-batch 路由, 仅保留 /assign (单条/批量都走)
- Projects.vue openAssign() 2 个 push 路径统一为 /manager/projects/assign
- 子页面面包屑加 v-if 批量模式 tag (橙色 badge 标识)
- 单/批模式区分完全靠 query.projectId vs query.projectIds + 子页面内 v-if/v-else 区块 (info-bar / 实时校验栏)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
郭庆泰
2026-08-20 23:03:43 +08:00
co-authored by Claude
parent 36b62a26b9
commit 3240590f40
3 changed files with 7 additions and 3 deletions
-1
View File
@@ -62,7 +62,6 @@ const routes = [
{ path: 'projects/edit/:projectId', name: 'manager-projects-edit', component: () => import('@/views/manager/ProjectsNew.vue'), meta: { title: '编辑项目' } },
{ path: 'projects/detail/:projectId', name: 'manager-projects-detail', component: () => import('@/views/manager/ManagerProjectDetail.vue'), meta: { title: '项目详情' } },
{ path: 'projects/assign', name: 'manager-projects-assign', component: () => import('@/views/manager/ManagerProjectsAssign.vue'), meta: { title: '项目分配' } },
{ path: 'projects/assign-batch', name: 'manager-projects-assign-batch', component: () => import('@/views/manager/ManagerProjectsAssign.vue'), meta: { title: '批量项目分配' } },
{ path: 'meetings', name: 'manager-meetings', component: () => import('@/views/manager/Meetings.vue'), meta: { title: '会议管理' } },
{ path: 'meetings/new', name: 'manager-meetings-new', component: () => import('@/views/manager/MeetingNew.vue'), meta: { title: '新建会议' } },
{ path: 'experts', name: 'manager-experts', component: () => import('@/views/expert/Experts.vue'), meta: { title: '专家审核' } },
@@ -2,6 +2,7 @@
<div class="page-card">
<div class="breadcrumb">
首页 / 项目管理 / <span class="current">项目分配</span>
<span v-if="batchMode" class="mode-tag batch">批量模式</span>
</div>
<!-- 已选项目 (单条: 显示编号+名称 / 批量: 显示项目数) -->
@@ -399,6 +400,8 @@ async function submitAssign() {
.page-card { background: #fff; padding: 16px 20px; border-radius: 6px; border: 1px solid #f0f0f0; }
.breadcrumb { font-size: 13px; color: #8c8c8c; margin-bottom: 12px; }
.breadcrumb .current { color: #262626; font-weight: 500; }
.breadcrumb .mode-tag { margin-left: 8px; padding: 1px 8px; border-radius: 10px; font-size: 11px; }
.breadcrumb .mode-tag.batch { background: #fdf3e3; color: #b88230; }
.info-bar {
margin-bottom: 12px; padding: 8px 14px;
+4 -2
View File
@@ -467,12 +467,14 @@ function openAssign() {
ElMessage.warning('请先勾选项目')
return
}
// 跳转独立子页面: 单条 vs 批量
// 跳转独立子页面 /manager/projects/assign, 单条 vs 批量通过 query 区分:
// 单条: ?projectId=X → 子页面 v-if 单条分支
// 批量: ?projectIds=1,2,3 → 子页面 v-else 批量分支
if (selection.value.length === 1) {
router.push({ path: '/manager/projects/assign', query: { projectId: selection.value[0].projectId } })
} else {
const ids = selection.value.map(r => r.projectId).join(',')
router.push({ path: '/manager/projects/assign-batch', query: { projectIds: ids } })
router.push({ path: '/manager/projects/assign', query: { projectIds: ids } })
}
}
function openBatch(kind) {