feat(review-meeting): 增加评审结果筛选并优化列表布局
parent
00f3b0f7ec
commit
91b550fb1e
|
|
@ -38,6 +38,7 @@ export interface ReviewMeetingProjectPageReqVO {
|
|||
projectTitle?: string
|
||||
agendaCategory?: string
|
||||
reporter?: string
|
||||
reviewResult?: 'PASS' | 'REJECT'
|
||||
reviewDate?: string
|
||||
}
|
||||
|
||||
|
|
@ -50,6 +51,7 @@ export interface ReviewProjectPageReqVO {
|
|||
agendaCategory?: string
|
||||
reporter?: string
|
||||
reporterUnit?: string
|
||||
reviewResult?: 'PASS' | 'REJECT'
|
||||
reviewDate?: string
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,29 +2,29 @@
|
|||
<div class="app-container">
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-card shadow="never" class="search-wrapper">
|
||||
<el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
|
||||
<el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px" class="search-form">
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable class="!w-240px" @keyup.enter="handleQuery" />
|
||||
<el-input v-model="queryParams.projectName" size="large" placeholder="请输入项目名称" clearable class="!w-240px" @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目编号" prop="projectCode">
|
||||
<el-input v-model="queryParams.projectCode" placeholder="请输入项目编号" clearable class="!w-240px" @keyup.enter="handleQuery" />
|
||||
<el-input v-model="queryParams.projectCode" size="large" placeholder="请输入项目编号" clearable class="!w-240px" @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="申报单位" prop="applyUnit">
|
||||
<el-input v-model="queryParams.applyUnit" placeholder="请输入申报单位" clearable class="!w-240px" @keyup.enter="handleQuery" />
|
||||
<el-input v-model="queryParams.applyUnit" size="large" placeholder="请输入申报单位" clearable class="!w-240px" @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择项目状态" clearable class="!w-240px">
|
||||
<el-select v-model="queryParams.status" size="large" placeholder="请选择项目状态" clearable class="!w-240px">
|
||||
<el-option label="待验收" value="0" />
|
||||
<el-option label="验收中" value="1" />
|
||||
<el-option label="已完成" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange" start-placeholder="开始日期" end-placeholder="结束日期" class="!w-240px" />
|
||||
<el-date-picker v-model="queryParams.createTime" size="large" value-format="YYYY-MM-DD HH:mm:ss" type="daterange" start-placeholder="开始日期" end-placeholder="结束日期" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button size="large" @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button size="large" @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
|
|
@ -481,4 +481,13 @@ onMounted(() => {
|
|||
:deep(.el-form-item) {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
:deep(.search-form .el-input__wrapper),
|
||||
:deep(.search-form .el-select__wrapper) {
|
||||
min-height: 40px;
|
||||
}
|
||||
|
||||
:deep(.search-form .el-input__inner) {
|
||||
line-height: 40px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
<el-select
|
||||
v-model="queryParams.reviewMeetingId"
|
||||
placeholder="所属会议"
|
||||
size="large"
|
||||
clearable
|
||||
filterable
|
||||
class="search-meeting-select"
|
||||
|
|
@ -22,6 +23,7 @@
|
|||
<el-input
|
||||
v-model="queryParams.projectTitle"
|
||||
placeholder="项目标题"
|
||||
size="large"
|
||||
clearable
|
||||
class="search-input"
|
||||
@keyup.enter="handleQuery"
|
||||
|
|
@ -29,6 +31,7 @@
|
|||
<el-input
|
||||
v-model="queryParams.reporter"
|
||||
placeholder="报告人"
|
||||
size="large"
|
||||
clearable
|
||||
class="search-input-sm"
|
||||
@keyup.enter="handleQuery"
|
||||
|
|
@ -36,16 +39,22 @@
|
|||
<el-input
|
||||
v-model="queryParams.reporterUnit"
|
||||
placeholder="报告单位"
|
||||
size="large"
|
||||
clearable
|
||||
class="search-input"
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
<el-select v-model="queryParams.agendaCategory" placeholder="议程分类" clearable class="search-input">
|
||||
<el-select v-model="queryParams.agendaCategory" placeholder="议程分类" size="large" clearable class="search-input">
|
||||
<el-option v-for="item in REVIEW_AGENDA_CATEGORY_OPTIONS" :key="item" :label="item" :value="item" />
|
||||
</el-select>
|
||||
<el-select v-model="queryParams.reviewResult" placeholder="评审结果" size="large" clearable class="search-input">
|
||||
<el-option label="通过" value="PASS" />
|
||||
<el-option label="不通过" value="REJECT" />
|
||||
</el-select>
|
||||
<el-date-picker
|
||||
v-model="queryParams.reviewDate"
|
||||
type="date"
|
||||
size="large"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="评审日期"
|
||||
clearable
|
||||
|
|
@ -209,6 +218,7 @@ const queryParams = reactive<ReviewProjectPageReqVO & { pageNo: number; pageSize
|
|||
agendaCategory: undefined,
|
||||
reporter: undefined,
|
||||
reporterUnit: undefined,
|
||||
reviewResult: undefined,
|
||||
reviewDate: undefined
|
||||
})
|
||||
|
||||
|
|
@ -235,6 +245,7 @@ const resetQuery = () => {
|
|||
queryParams.agendaCategory = undefined
|
||||
queryParams.reporter = undefined
|
||||
queryParams.reporterUnit = undefined
|
||||
queryParams.reviewResult = undefined
|
||||
queryParams.reviewDate = undefined
|
||||
handleQuery()
|
||||
}
|
||||
|
|
@ -353,16 +364,34 @@ onMounted(async () => {
|
|||
.search-input-sm {
|
||||
width: 120px;
|
||||
}
|
||||
:deep(.search-meeting-select),
|
||||
:deep(.search-input),
|
||||
:deep(.search-input-sm) {
|
||||
height: 40px;
|
||||
}
|
||||
:deep(.search-meeting-select .el-input__wrapper),
|
||||
:deep(.search-input .el-input__wrapper),
|
||||
:deep(.search-input-sm .el-input__wrapper) {
|
||||
height: 40px;
|
||||
min-height: 40px;
|
||||
border-radius: 6px;
|
||||
border-color: #dcdedf;
|
||||
}
|
||||
:deep(.search-meeting-select .el-select__wrapper),
|
||||
:deep(.search-input .el-select__wrapper),
|
||||
:deep(.search-input-sm .el-select__wrapper) {
|
||||
min-height: 40px;
|
||||
border-radius: 6px;
|
||||
border-color: #dcdedf;
|
||||
}
|
||||
:deep(.search-meeting-select.el-date-editor),
|
||||
:deep(.search-input.el-date-editor),
|
||||
:deep(.search-input-sm.el-date-editor) {
|
||||
min-height: 40px;
|
||||
}
|
||||
:deep(.search-meeting-select .el-input__inner),
|
||||
:deep(.search-input .el-input__inner),
|
||||
:deep(.search-input-sm .el-input__inner) {
|
||||
line-height: 40px;
|
||||
font-size: 15px;
|
||||
color: #333;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
<div class="search-bar">
|
||||
<el-input
|
||||
v-model="queryParams.name"
|
||||
size="large"
|
||||
placeholder="搜索会议名称"
|
||||
clearable
|
||||
class="search-input"
|
||||
|
|
@ -14,6 +15,7 @@
|
|||
/>
|
||||
<el-date-picker
|
||||
v-model="queryParams.startTime"
|
||||
size="large"
|
||||
type="datetimerange"
|
||||
range-separator="至"
|
||||
start-placeholder="会议开始时间"
|
||||
|
|
@ -21,7 +23,7 @@
|
|||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
class="search-datepicker"
|
||||
/>
|
||||
<el-select v-model="queryParams.status" placeholder="会议状态" clearable class="search-select">
|
||||
<el-select v-model="queryParams.status" size="large" placeholder="会议状态" clearable class="search-select">
|
||||
<el-option v-for="item in MEETING_STATUS_OPTIONS" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
<button class="btn-reset" @click="resetQuery">重置</button>
|
||||
|
|
@ -38,18 +40,18 @@
|
|||
<!-- 列表 -->
|
||||
<el-table v-loading="loading" :data="list" class="review-table" border>
|
||||
<el-table-column label="编号" prop="id" width="70" align="center" />
|
||||
<el-table-column label="会议名称" min-width="200">
|
||||
<el-table-column label="会议名称" min-width="170">
|
||||
<template #default="{ row }">
|
||||
<span class="meeting-name-link" @click="goToProjectList(row)">{{ row.name }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="会议开始时间" width="150">
|
||||
<el-table-column label="会议开始时间" width="180">
|
||||
<template #default="{ row }">{{ formatDate(row.startTime, 'YYYY-MM-DD HH:mm') }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="会议结束时间" width="150">
|
||||
<el-table-column label="会议结束时间" width="180">
|
||||
<template #default="{ row }">{{ formatDate(row.endTime, 'YYYY-MM-DD HH:mm') }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="会议地点" prop="location" show-overflow-tooltip />
|
||||
<el-table-column label="会议地点" prop="location" width="130" show-overflow-tooltip />
|
||||
<el-table-column label="参会专家数" prop="expertCount" width="100" align="center" />
|
||||
<el-table-column label="项目数" prop="projectCount" width="80" align="center" />
|
||||
<el-table-column label="状态" width="90" align="center">
|
||||
|
|
@ -57,28 +59,31 @@
|
|||
<span :class="`status-text status-${row.status}`">{{ STATUS_LABEL[row.status] }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="300" align="center" fixed="right">
|
||||
<el-table-column label="操作" width="360" align="center" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.status === 0">
|
||||
<a v-hasPermi="['review:meeting:update']" class="op-link" @click="goToEdit(row.id)">编辑</a>
|
||||
<a class="op-link" @click="goToProjectList(row)">项目列表</a>
|
||||
<a v-hasPermi="['review:meeting:send-sms']" class="op-link" @click="handleSendSms(row)">发送短信邀约</a>
|
||||
<a v-hasPermi="['review:meeting:cancel']" class="op-link op-danger" @click="handleCancel(row)">取消</a>
|
||||
<div class="op-group">
|
||||
<a v-hasPermi="['review:meeting:update']" class="op-link" @click="goToEdit(row.id)">编辑</a>
|
||||
<a v-hasPermi="['review:meeting:send-sms']" class="op-link" @click="handleSendSms(row)">发送短信邀约</a>
|
||||
<a v-hasPermi="['review:meeting:cancel']" class="op-link op-danger" @click="handleCancel(row)">取消</a>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else-if="row.status === 1">
|
||||
<a class="op-link" @click="goToEdit(row.id, 'view')">查看</a>
|
||||
<a class="op-link" @click="goToProjectList(row)">项目列表</a>
|
||||
<a v-hasPermi="['review:meeting:send-sms']" class="op-link" @click="openSmsStatus(row)">短信状态</a>
|
||||
<a v-if="row.mailSent" v-hasPermi="['review:meeting:send-mail']" class="op-link" @click="openMailStatus(row)">邮件状态</a>
|
||||
<a v-else v-hasPermi="['review:meeting:send-mail']" class="op-link" @click="handleSendMail(row)">发送议程</a>
|
||||
<a v-hasPermi="['review:meeting:update']" class="op-link" @click="triggerUploadMinutes(row)">上传纪要</a>
|
||||
<a v-hasPermi="['review:meeting:finish']" class="op-link" @click="handleFinish(row)">结束</a>
|
||||
<a v-hasPermi="['review:meeting:cancel']" class="op-link op-danger" @click="handleCancel(row)">取消</a>
|
||||
<div class="op-group">
|
||||
<a class="op-link" @click="goToEdit(row.id, 'view')">查看</a>
|
||||
<a v-hasPermi="['review:meeting:send-sms']" class="op-link" @click="openSmsStatus(row)">短信状态</a>
|
||||
<a v-if="row.mailSent" v-hasPermi="['review:meeting:send-mail']" class="op-link" @click="openMailStatus(row)">邮件状态</a>
|
||||
<a v-else v-hasPermi="['review:meeting:send-mail']" class="op-link" @click="handleSendMail(row)">发送议程</a>
|
||||
<a v-hasPermi="['review:meeting:update']" class="op-link" @click="triggerUploadMinutes(row)">上传纪要</a>
|
||||
<a v-hasPermi="['review:meeting:finish']" class="op-link" @click="handleFinish(row)">结束</a>
|
||||
<a v-hasPermi="['review:meeting:cancel']" class="op-link op-danger" @click="handleCancel(row)">取消</a>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<a class="op-link" @click="goToEdit(row.id, 'view')">查看</a>
|
||||
<a class="op-link" @click="goToProjectList(row)">项目列表</a>
|
||||
<a v-hasPermi="['review:meeting:create']" class="op-link" @click="handleCopy(row)">复制新会议</a>
|
||||
<div class="op-group">
|
||||
<a class="op-link" @click="goToEdit(row.id, 'view')">查看</a>
|
||||
<a v-hasPermi="['review:meeting:create']" class="op-link" @click="handleCopy(row)">复制新会议</a>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -285,25 +290,37 @@ onMounted(() => getList())
|
|||
width: 220px;
|
||||
}
|
||||
.search-datepicker {
|
||||
width: 340px;
|
||||
width: 240px;
|
||||
}
|
||||
.search-select {
|
||||
width: 140px;
|
||||
}
|
||||
:deep(.search-input .el-input__wrapper),
|
||||
:deep(.search-select .el-input__wrapper) {
|
||||
height: 40px;
|
||||
:deep(.search-select .el-input__wrapper),
|
||||
:deep(.search-datepicker .el-input__wrapper) {
|
||||
min-height: 40px;
|
||||
border-radius: 6px;
|
||||
border-color: #dcdedf;
|
||||
font-size: 15px;
|
||||
}
|
||||
:deep(.search-select .el-select__wrapper) {
|
||||
min-height: 40px;
|
||||
border-radius: 6px;
|
||||
border-color: #dcdedf;
|
||||
font-size: 15px;
|
||||
}
|
||||
:deep(.search-datepicker.el-date-editor) {
|
||||
height: 40px;
|
||||
width: 240px !important;
|
||||
min-width: 240px !important;
|
||||
max-width: 240px !important;
|
||||
min-height: 40px;
|
||||
border-radius: 6px;
|
||||
border-color: #dcdedf;
|
||||
}
|
||||
:deep(.search-input .el-input__inner),
|
||||
:deep(.search-select .el-input__inner) {
|
||||
:deep(.search-select .el-input__inner),
|
||||
:deep(.search-datepicker .el-input__inner) {
|
||||
line-height: 40px;
|
||||
font-size: 15px;
|
||||
color: #333;
|
||||
}
|
||||
|
|
@ -387,17 +404,24 @@ onMounted(() => getList())
|
|||
|
||||
/* ── 操作链接 ── */
|
||||
.op-link {
|
||||
display: inline-block;
|
||||
display: inline-flex;
|
||||
color: #295abc;
|
||||
font-size: 13px;
|
||||
cursor: pointer;
|
||||
margin: 0 4px;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.op-link:hover {
|
||||
opacity: 0.8;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.op-group {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.op-danger {
|
||||
color: #fc4f54;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue