提交所有代码
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="page-card">
|
||||
<div class="breadcrumb">首页 / 项目管理</div>
|
||||
<div class="breadcrumb">首页 / {{ isLeader ? '项目列表' : '项目管理' }}</div>
|
||||
|
||||
<el-form inline :model="q" class="filter-form">
|
||||
<el-form-item label="支持单位:">
|
||||
@@ -63,13 +63,13 @@
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="load">查询</el-button>
|
||||
<el-button @click="reset">重置</el-button>
|
||||
<el-button @click="doExport">导出</el-button>
|
||||
<el-button @click="doExportRating">项目评价导出</el-button>
|
||||
<el-button v-if="!isLeader" @click="doExport">导出</el-button>
|
||||
<el-button v-if="!isLeader" @click="doExportRating">项目评价导出</el-button>
|
||||
<el-button v-if="isManager" @click="doExportSignupExpert">已报名专家导出</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<div class="toolbar">
|
||||
<div v-if="!isLeader" class="toolbar">
|
||||
<el-button class="action-btn" @click="openNewProject">新建项目</el-button>
|
||||
<el-button @click="openAssign">项目分配</el-button>
|
||||
<el-button @click="openBatch('score')">批量评分</el-button>
|
||||
@@ -87,7 +87,7 @@
|
||||
:main-cols="['projectNo', 'projectName']"
|
||||
@selection-change="onSel"
|
||||
>
|
||||
<el-table-column type="selection" width="44" />
|
||||
<el-table-column v-if="!isLeader" type="selection" width="44" />
|
||||
<el-table-column prop="projectNo" label="项目编号" width="170" fixed="left" />
|
||||
<el-table-column prop="projectName" label="项目名称" min-width="200" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
@@ -139,27 +139,30 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="startTime" label="项目开始时间" width="170" align="center" :formatter="fmtDateTime" />
|
||||
<el-table-column prop="endTime" label="项目结束时间" width="170" align="center" :formatter="fmtDateTime" />
|
||||
<el-table-column label="操作" width="180" fixed="right">
|
||||
<el-table-column label="操作" :width="isLeader ? 80 : 180" fixed="right">
|
||||
<template #default="{ row }"><div class="table-actions">
|
||||
<div class="op-cell">
|
||||
<el-link v-if="!isFinishedRow(row)" :underline="false" type="primary" @click="doCreateMeeting(row)">建会</el-link>
|
||||
<el-link :underline="false" type="primary" :disabled="isFinishedRow(row)" @click="doAssign(row)">分配</el-link>
|
||||
<el-dropdown trigger="hover" @command="(cmd) => onAction(cmd, row)">
|
||||
<el-link :underline="false" type="primary" class="op-dropdown">
|
||||
更多<el-icon class="op-caret"><ArrowDown /></el-icon>
|
||||
</el-link>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item v-if="row.isFinished !== '1' && row.isFinished !== 1" command="close">结题</el-dropdown-item>
|
||||
<el-dropdown-item command="view">查看</el-dropdown-item>
|
||||
<el-dropdown-item command="edit">编辑</el-dropdown-item>
|
||||
<el-dropdown-item command="activate">开通</el-dropdown-item>
|
||||
<el-dropdown-item command="delAnn">删除公告</el-dropdown-item>
|
||||
<el-dropdown-item command="rate">执行单位评分</el-dropdown-item>
|
||||
<el-dropdown-item v-if="canDelete" command="delete">删除项目</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
<el-link v-if="isLeader" :underline="false" type="primary" @click="viewDetail(row)">查看</el-link>
|
||||
<template v-else>
|
||||
<el-link v-if="!isFinishedRow(row)" :underline="false" type="primary" @click="doCreateMeeting(row)">建会</el-link>
|
||||
<el-link :underline="false" type="primary" :disabled="isFinishedRow(row)" @click="doAssign(row)">分配</el-link>
|
||||
<el-dropdown trigger="hover" @command="(cmd) => onAction(cmd, row)">
|
||||
<el-link :underline="false" type="primary" class="op-dropdown">
|
||||
更多<el-icon class="op-caret"><ArrowDown /></el-icon>
|
||||
</el-link>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item v-if="row.isFinished !== '1' && row.isFinished !== 1" command="close">结题</el-dropdown-item>
|
||||
<el-dropdown-item command="view">查看</el-dropdown-item>
|
||||
<el-dropdown-item command="edit">编辑</el-dropdown-item>
|
||||
<el-dropdown-item command="activate">开通</el-dropdown-item>
|
||||
<el-dropdown-item command="delAnn">删除公告</el-dropdown-item>
|
||||
<el-dropdown-item command="rate">执行单位评分</el-dropdown-item>
|
||||
<el-dropdown-item v-if="canDelete" command="delete">删除项目</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</div>
|
||||
</div></template>
|
||||
</el-table-column>
|
||||
@@ -394,6 +397,8 @@ function readQueryFromRoute() {
|
||||
|
||||
// 仅 manager 可见「已报名专家导出」 (前端 v-if, 后端 controller 再兜底 role 校验)
|
||||
const isManager = computed(() => userStore.role === 'manager')
|
||||
// 项目负责人(leader): 只读, 复用本列表页 (数据由后端 list 按 lead_user_id 隔离), 隐藏所有写操作
|
||||
const isLeader = computed(() => userStore.role === 'leader')
|
||||
|
||||
// ========== 导出 (跟随当前筛选, 与 load() 同一口径) ==========
|
||||
function buildExportParams() {
|
||||
@@ -543,15 +548,15 @@ async function confirmSingleScore() {
|
||||
}
|
||||
}
|
||||
function viewDetail(row) {
|
||||
// admin 复用本列表页, 详情须跳到 /admin/projects/detail (否则被 beforeEach 角色守卫拦截)
|
||||
const base = userStore.role === 'admin' ? '/admin' : '/manager'
|
||||
// admin/leader 复用本列表页, 详情须跳到各自前缀 (否则被 beforeEach 角色守卫拦截)
|
||||
const base = userStore.role === 'admin' ? '/admin' : userStore.role === 'leader' ? '/leader' : '/manager'
|
||||
router.push(`${base}/projects/detail/${row.projectId}`)
|
||||
}
|
||||
|
||||
// 点击「总场次/已执行/未执行」列 → 跳对应角色的会议列表, 按项目 + 阶段筛选 (会议列表后端按 role 隔离数据权限)
|
||||
// scope: 'all'(全部) | 'done'(已执行) | 'todo'(未执行)
|
||||
function goMeetings(row, scope) {
|
||||
const base = userStore.role === 'admin' ? '/admin' : '/manager'
|
||||
const base = userStore.role === 'admin' ? '/admin' : userStore.role === 'leader' ? '/leader' : '/manager'
|
||||
const q = { projectId: row.projectId }
|
||||
if (scope === 'done') q.currentStageNotIn = 'NOT_STARTED,IN_PROGRESS'
|
||||
if (scope === 'todo') q.currentStage = 'NOT_STARTED'
|
||||
|
||||
Reference in New Issue
Block a user