From 83adecdcb87bb103fe1ed3cafdb90541ee87b7b4 Mon Sep 17 00:00:00 2001 From: Codewoc <947380458@qq.com> Date: Mon, 23 Mar 2026 13:54:21 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat(meeting):=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BC=9A=E8=AE=AE=E5=88=97=E8=A1=A8=E9=A1=B5UI=EF=BC=8C?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=96=87=E6=A1=88=E5=AF=B9=E9=BD=90=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E7=A8=BF=EF=BC=8C=E5=85=A5=E5=8F=A3=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 状态文案:草稿→待召开,已邀约→正在召开 - 状态 Tag 颜色:待召开 warning,正在召开 success - 新建/编辑/查看按钮改为 router.push 跳转 ReviewMeetingEdit - 操作列新增「项目列表」快捷入口,移除冗余的独立列 - 「发送邮件邀请函」改为「发送议程」 - 移除 MeetingForm 弹窗引用(后续由全页面 MeetingEdit 承接) Co-Authored-By: Claude Sonnet 4.6 --- src/views/review/meeting/index.vue | 47 +++++++++++++----------------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/src/views/review/meeting/index.vue b/src/views/review/meeting/index.vue index 36fcb215e..8ad07f8c7 100644 --- a/src/views/review/meeting/index.vue +++ b/src/views/review/meeting/index.vue @@ -29,8 +29,8 @@ - - 新增会议邀约 + + 新建会议 @@ -61,22 +61,19 @@ {{ STATUS_LABEL[row.status] }} - + - - - @@ -110,9 +108,6 @@ - - - @@ -135,7 +130,6 @@ import { type ReviewMeetingRespVO, type ReviewMeetingPageReqVO } from '@/api/review/meeting' -import MeetingForm from './MeetingForm.vue' import SmsStatusDialog from './SmsStatusDialog.vue' import MailStatusDialog from './MailStatusDialog.vue' import { formatDate } from '@/utils/formatTime' @@ -148,13 +142,13 @@ const list = ref([]) const total = ref(0) const MEETING_STATUS_OPTIONS = [ - { value: 0, label: '草稿' }, - { value: 1, label: '已邀约' }, + { value: 0, label: '待召开' }, + { value: 1, label: '正在召开' }, { value: 2, label: '已结束' }, { value: 3, label: '已取消' } ] -const STATUS_LABEL: Record = { 0: '草稿', 1: '已邀约', 2: '已结束', 3: '已取消' } -const STATUS_TAG_TYPE: Record = { 0: 'info', 1: 'primary', 2: 'success', 3: 'danger' } +const STATUS_LABEL: Record = { 0: '待召开', 1: '正在召开', 2: '已结束', 3: '已取消' } +const STATUS_TAG_TYPE: Record = { 0: 'warning', 1: 'success', 2: 'info', 3: 'danger' } const queryParams = reactive({ pageNo: 1, @@ -165,7 +159,6 @@ const queryParams = reactive { const handleQuery = () => { queryParams.pageNo = 1; getList() } const resetQuery = () => { queryFormRef.value?.resetFields(); handleQuery() } -const openForm = (type: 'create' | 'update' | 'view', row?: ReviewMeetingRespVO) => { - formRef.value?.open(type, row?.id) +const goToEdit = (id?: number, mode?: string) => { + router.push({ name: 'ReviewMeetingEdit', params: id ? { id } : {}, query: mode ? { mode } : {} }) } const goToProjectList = (row: ReviewMeetingRespVO) => { @@ -224,7 +217,7 @@ const handleSendMail = async (row: ReviewMeetingRespVO) => { ) await sendMailInvitation(row.id) row.mailSent = true - ElMessage.success('邮件邀请函发送任务已触发,请点击“邮件状态”查看结果') + ElMessage.success('邮件邀请函发送任务已触发,请点击"邮件状态"查看结果') } const openSmsStatus = (row: ReviewMeetingRespVO) => { From bc8258a149dc50631b706c8fa1039ad9c16cce78 Mon Sep 17 00:00:00 2001 From: Codewoc <947380458@qq.com> Date: Mon, 23 Mar 2026 13:57:14 +0800 Subject: [PATCH 2/6] =?UTF-8?q?feat(meeting):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BC=9A=E8=AE=AE=E7=BC=96=E8=BE=91=E5=85=A8=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=20MeetingEdit.vue=EF=BC=8C=E6=9B=BF=E4=BB=A3=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E5=BD=A2=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 MeetingEdit.vue,容器改为 ContentWrap 全页面 - 增加组织单位(选填)字段 - 模式由路由参数决定:无 id=新建,有 id=编辑,query.mode=view=查看 - 底部操作区:保存草稿 + 返回按钮 - 在 remaining.ts 中新增 ReviewMeetingEdit / ReviewMeetingEditById 两条路由 - 修正 index.vue 中 goToEdit 路由名对应关系 Co-Authored-By: Claude Sonnet 4.6 --- src/router/modules/remaining.ts | 24 ++ src/views/review/meeting/MeetingEdit.vue | 405 +++++++++++++++++++++++ src/views/review/meeting/index.vue | 6 +- 3 files changed, 434 insertions(+), 1 deletion(-) create mode 100644 src/views/review/meeting/MeetingEdit.vue diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts index 773db9383..2e927faf5 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -747,6 +747,30 @@ const remainingRouter: AppRouteRecordRaw[] = [ activeMenu: '/review/meeting' }, component: () => import('@/views/review/meeting/ProjectList.vue') + }, + { + path: 'review-meeting/edit', + name: 'ReviewMeetingEdit', + meta: { + title: '新建会议', + noCache: true, + hidden: true, + canTo: true, + activeMenu: '/review/meeting' + }, + component: () => import('@/views/review/meeting/MeetingEdit.vue') + }, + { + path: 'review-meeting/edit/:id(\\d+)', + name: 'ReviewMeetingEditById', + meta: { + title: '编辑会议', + noCache: true, + hidden: true, + canTo: true, + activeMenu: '/review/meeting' + }, + component: () => import('@/views/review/meeting/MeetingEdit.vue') } ] }, diff --git a/src/views/review/meeting/MeetingEdit.vue b/src/views/review/meeting/MeetingEdit.vue new file mode 100644 index 000000000..5f2ff35c6 --- /dev/null +++ b/src/views/review/meeting/MeetingEdit.vue @@ -0,0 +1,405 @@ + + + + + diff --git a/src/views/review/meeting/index.vue b/src/views/review/meeting/index.vue index 8ad07f8c7..b901cfc8e 100644 --- a/src/views/review/meeting/index.vue +++ b/src/views/review/meeting/index.vue @@ -177,7 +177,11 @@ const handleQuery = () => { queryParams.pageNo = 1; getList() } const resetQuery = () => { queryFormRef.value?.resetFields(); handleQuery() } const goToEdit = (id?: number, mode?: string) => { - router.push({ name: 'ReviewMeetingEdit', params: id ? { id } : {}, query: mode ? { mode } : {} }) + if (id) { + router.push({ name: 'ReviewMeetingEditById', params: { id }, query: mode ? { mode } : {} }) + } else { + router.push({ name: 'ReviewMeetingEdit' }) + } } const goToProjectList = (row: ReviewMeetingRespVO) => { From 17ff8a687107538863bbf1066757b8e16b5a3fd7 Mon Sep 17 00:00:00 2001 From: Codewoc <947380458@qq.com> Date: Mon, 23 Mar 2026 13:58:19 +0800 Subject: [PATCH 3/6] =?UTF-8?q?feat(meeting):=20=E6=96=B0=E5=A2=9E=20Exper?= =?UTF-8?q?tSelectTable=20=E4=B8=93=E5=AE=B6=E9=80=89=E6=8B=A9=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=9B=BF=E4=BB=A3=20el-select=20=E5=A4=9A?= =?UTF-8?q?=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 components/ExpertSelectTable.vue - 支持搜索(姓名/单位/职称)+ 表格勾选 + 已选标签展示 - v-model 兼容,disabled 时仅展示已选列表 - MeetingEdit.vue 中用 ExpertSelectTable 替换原 el-select multiple Co-Authored-By: Claude Sonnet 4.6 --- src/views/review/meeting/MeetingEdit.vue | 19 +-- .../meeting/components/ExpertSelectTable.vue | 149 ++++++++++++++++++ 2 files changed, 153 insertions(+), 15 deletions(-) create mode 100644 src/views/review/meeting/components/ExpertSelectTable.vue diff --git a/src/views/review/meeting/MeetingEdit.vue b/src/views/review/meeting/MeetingEdit.vue index 5f2ff35c6..44d3f0afc 100644 --- a/src/views/review/meeting/MeetingEdit.vue +++ b/src/views/review/meeting/MeetingEdit.vue @@ -94,21 +94,11 @@ - - - + /> @@ -168,6 +158,7 @@ import { } from '@/api/review/meeting' import { getExpertUserList } from '@/api/system/user/index' import download from '@/utils/download' +import ExpertSelectTable from './components/ExpertSelectTable.vue' defineOptions({ name: 'ReviewMeetingEdit' }) @@ -224,8 +215,6 @@ const rules: FormRules = { } const formRef = ref() -const expertLabel = (e: any) => - `${e.nickname}${e.title ? `(${e.title})` : ''}${e.deptName ? ` ${e.deptName}` : ''}` const loadDetail = async (id: number) => { formLoading.value = true diff --git a/src/views/review/meeting/components/ExpertSelectTable.vue b/src/views/review/meeting/components/ExpertSelectTable.vue new file mode 100644 index 000000000..5cafac3b7 --- /dev/null +++ b/src/views/review/meeting/components/ExpertSelectTable.vue @@ -0,0 +1,149 @@ + + + + + From db5253b3e6a5889d3749ee3c7c781551ec7378b6 Mon Sep 17 00:00:00 2001 From: Codewoc <947380458@qq.com> Date: Mon, 23 Mar 2026 13:59:27 +0800 Subject: [PATCH 4/6] =?UTF-8?q?feat(meeting):=20=E6=94=B9=E9=80=A0?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8=E9=A1=B5=EF=BC=8C=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=96=87=E6=A1=88=E5=AF=B9=E9=BD=90=EF=BC=8C=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E5=88=97=E6=8E=A5=E5=85=A5=E9=A1=B9=E7=9B=AE=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 状态文案同步:草稿→待召开,已邀约→正在召开 - 「文件」按钮改为「上传项目资料」,跳转至 ReviewProjectDetail - 新增 goToDetail 函数,携带 meetingId/projectId/projectTitle 参数 - 操作列宽度调整为 200px Co-Authored-By: Claude Sonnet 4.6 --- src/views/review/meeting/ProjectList.vue | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/views/review/meeting/ProjectList.vue b/src/views/review/meeting/ProjectList.vue index d55eade86..d14c585d5 100644 --- a/src/views/review/meeting/ProjectList.vue +++ b/src/views/review/meeting/ProjectList.vue @@ -67,10 +67,10 @@ /> - + @@ -121,7 +121,7 @@ + + diff --git a/src/views/review/meeting/ProjectList.vue b/src/views/review/meeting/ProjectList.vue index d14c585d5..87c45591a 100644 --- a/src/views/review/meeting/ProjectList.vue +++ b/src/views/review/meeting/ProjectList.vue @@ -236,7 +236,17 @@ const goToDetail = (row: ReviewMeetingProjectRespVO) => { router.push({ name: 'ReviewProjectDetail', params: { meetingId: reviewMeetingId, projectId: row.id }, - query: { projectTitle: row.projectTitle } + state: { + projectTitle: row.projectTitle, + seqNo: row.seqNo, + startTime: row.startTime, + endTime: row.endTime, + agendaCategory: row.agendaCategory, + reporter: row.reporter, + reporterUnit: row.reporterUnit, + host: row.host, + meetingName: meetingInfo.value?.name + } }) } From 46a6289836bf366310ab9801db096d84d41b20d0 Mon Sep 17 00:00:00 2001 From: Codewoc <947380458@qq.com> Date: Mon, 23 Mar 2026 22:02:03 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/review/project.ts | 17 +- src/views/review/meeting/AllProjectList.vue | 425 ++++++++++++++++++ src/views/review/meeting/MeetingEdit.vue | 196 ++++++-- src/views/review/meeting/ProjectDetail.vue | 248 ++++++++-- src/views/review/meeting/ProjectList.vue | 316 ++++++++++--- .../meeting/components/ExpertSelectTable.vue | 55 ++- src/views/review/meeting/index.vue | 302 +++++++++---- 7 files changed, 1334 insertions(+), 225 deletions(-) create mode 100644 src/views/review/meeting/AllProjectList.vue diff --git a/src/api/review/project.ts b/src/api/review/project.ts index ba8a3b9e1..27280eeb9 100644 --- a/src/api/review/project.ts +++ b/src/api/review/project.ts @@ -26,6 +26,17 @@ export interface ReviewMeetingProjectPageReqVO { reporter?: string } +/** 独立项目列表查询(meetingId 可选,用于独立菜单页) */ +export interface ReviewProjectPageReqVO { + pageNo?: number + pageSize?: number + reviewMeetingId?: number + projectTitle?: string + agendaCategory?: string + reporter?: string + reporterUnit?: string +} + export interface ReviewMeetingFileRespVO { id: number reviewMeetingProjectId: number @@ -41,10 +52,14 @@ export interface ReviewMeetingFileRespVO { // API 调用 // ============================================================ -/** 分页查询评审项目列表 */ +/** 分页查询评审项目列表(需要 meetingId) */ export const getReviewProjectPage = (params: ReviewMeetingProjectPageReqVO) => request.get({ url: '/project/review-project/page', params }) +/** 独立分页查询评审项目列表(meetingId 可选) */ +export const getReviewProjectPageStandalone = (params: ReviewProjectPageReqVO) => + request.get({ url: '/project/review-project/page', params }) + /** 创建评审项目 */ export const createReviewProject = (data: Partial) => request.post({ url: '/project/review-project/create', data }) diff --git a/src/views/review/meeting/AllProjectList.vue b/src/views/review/meeting/AllProjectList.vue new file mode 100644 index 000000000..bf93c31b7 --- /dev/null +++ b/src/views/review/meeting/AllProjectList.vue @@ -0,0 +1,425 @@ + + + + + diff --git a/src/views/review/meeting/MeetingEdit.vue b/src/views/review/meeting/MeetingEdit.vue index 44d3f0afc..f3bc8b8a7 100644 --- a/src/views/review/meeting/MeetingEdit.vue +++ b/src/views/review/meeting/MeetingEdit.vue @@ -1,6 +1,7 @@ @@ -156,6 +159,7 @@ import { type ReviewMeetingSaveReqVO, type ReviewProjectItemVO } from '@/api/review/meeting' +import { getReviewProjectPage } from '@/api/review/project' import { getExpertUserList } from '@/api/system/user/index' import download from '@/utils/download' import ExpertSelectTable from './components/ExpertSelectTable.vue' @@ -209,8 +213,10 @@ const formData = reactive({ const rules: FormRules = { name: [{ required: true, message: '会议名称不能为空', trigger: 'blur' }], + organizationUnit: [{ required: true, message: '组织单位不能为空', trigger: 'blur' }], meetingTimeRange: [{ required: true, message: '会议时间不能为空', trigger: 'change' }], location: [{ required: true, message: '会议地点不能为空', trigger: 'blur' }], + agendaAttachmentUrl: [{ required: true, message: '议程附件不能为空', trigger: 'change' }], expertIds: [{ required: true, type: 'array', min: 1, message: '至少选择一位专家', trigger: 'change' }] } @@ -219,8 +225,12 @@ const formRef = ref() const loadDetail = async (id: number) => { formLoading.value = true try { - const detail = await getReviewMeeting(id) + const [detail, projectData] = await Promise.all([ + getReviewMeeting(id), + getReviewProjectPage({ reviewMeetingId: id, pageNo: 1, pageSize: 200 }) + ]) Object.assign(formData, detail) + formData.projects = (projectData?.list ?? []) as ReviewProjectItemVO[] if (detail.startTime && detail.endTime) { formData.meetingTimeRange = [ new Date(detail.startTime.replace(' ', 'T')).getTime(), @@ -290,6 +300,7 @@ const handleAgendaAttachmentChange = async (uploadFile: UploadFile) => { formData.agendaAttachmentUrl = attachment.url formData.agendaAttachmentType = attachment.type formData.agendaAttachmentSize = attachment.size + formRef.value?.clearValidate('agendaAttachmentUrl') ElMessage.success('议程附件上传成功') } finally { formLoading.value = false @@ -301,6 +312,7 @@ const clearAgendaAttachment = () => { formData.agendaAttachmentUrl = undefined formData.agendaAttachmentType = undefined formData.agendaAttachmentSize = undefined + formRef.value?.validateField('agendaAttachmentUrl') } const previewAgendaAttachment = () => { @@ -317,6 +329,7 @@ const formatFileSize = (bytes?: number): string => { } const submitForm = async () => { + if (formLoading.value) return const valid = await formRef.value?.validate().catch(() => false) if (!valid) return if (formData.meetingTimeRange?.length === 2) { @@ -326,9 +339,6 @@ const submitForm = async () => { if (formData.materialViewTimeRange?.length === 2) { formData.materialViewStartTime = formData.materialViewTimeRange[0] formData.materialViewEndTime = formData.materialViewTimeRange[1] - } else if (formData.meetingTimeRange?.length === 2) { - formData.materialViewStartTime = formData.meetingTimeRange[0] - formData.materialViewEndTime = formData.meetingTimeRange[1] } else { formData.materialViewStartTime = undefined formData.materialViewEndTime = undefined @@ -358,37 +368,159 @@ const handleBack = () => { diff --git a/src/views/review/meeting/ProjectDetail.vue b/src/views/review/meeting/ProjectDetail.vue index 13e1a34b7..d15a37d67 100644 --- a/src/views/review/meeting/ProjectDetail.vue +++ b/src/views/review/meeting/ProjectDetail.vue @@ -1,28 +1,45 @@ @@ -79,7 +96,6 @@ const router = useRouter() const reviewMeetingId = Number(route.params.meetingId) const reviewMeetingProjectId = Number(route.params.projectId) -// 从 history state 读取项目基本信息(由 ProjectList.vue 跳转时携带) const state = window.history.state || {} const projectInfo = ref({ projectTitle: state.projectTitle as string | undefined, @@ -151,32 +167,190 @@ onMounted(() => { diff --git a/src/views/review/meeting/ProjectList.vue b/src/views/review/meeting/ProjectList.vue index 87c45591a..e8d8828ae 100644 --- a/src/views/review/meeting/ProjectList.vue +++ b/src/views/review/meeting/ProjectList.vue @@ -1,61 +1,82 @@ @@ -123,10 +141,8 @@ import { ref, reactive, onMounted } from 'vue' import { useRoute, useRouter } from 'vue-router' import { ElMessage, ElMessageBox } from 'element-plus' -import { Plus, Delete } from '@element-plus/icons-vue' import { getReviewMeeting } from '@/api/review/meeting' import { getReviewProjectPage, updateProjectHost, updateReviewProject, createReviewProject, deleteReviewProject, type ReviewMeetingProjectRespVO } from '@/api/review/project' -import FileListDialog from './FileListDialog.vue' import { formatDate } from '@/utils/formatTime' defineOptions({ name: 'ReviewMeetingProject' }) @@ -141,7 +157,6 @@ const total = ref(0) const meetingInfo = ref({}) const STATUS_LABEL: Record = { 0: '待召开', 1: '正在召开', 2: '已结束', 3: '已取消' } -const STATUS_TAG_TYPE: Record = { 0: 'warning', 1: 'success', 2: 'info', 3: 'danger' } const queryParams = reactive({ pageNo: 1, @@ -152,9 +167,6 @@ const queryParams = reactive({ reporter: undefined as string | undefined }) -const queryFormRef = ref() -const fileDialogRef = ref() - const getList = async () => { loading.value = true try { @@ -167,7 +179,12 @@ const getList = async () => { } const handleQuery = () => { queryParams.pageNo = 1; getList() } -const resetQuery = () => { queryFormRef.value?.resetFields(); handleQuery() } +const resetQuery = () => { + queryParams.projectTitle = undefined + queryParams.agendaCategory = undefined + queryParams.reporter = undefined + handleQuery() +} const selectedIds = ref([]) const handleSelectionChange = (val: ReviewMeetingProjectRespVO[]) => { @@ -206,7 +223,6 @@ const openForm = (type: 'create' | 'update', row?: ReviewMeetingProjectRespVO) = Object.assign(formData, row) } formVisible.value = true - // Reset form validation state if needed by deferring to next tick } const submitForm = async () => { @@ -228,10 +244,6 @@ const submitForm = async () => { } } -const openFileDialog = (row: ReviewMeetingProjectRespVO) => { - fileDialogRef.value?.open(row.id, row.projectTitle) -} - const goToDetail = (row: ReviewMeetingProjectRespVO) => { router.push({ name: 'ReviewProjectDetail', @@ -257,6 +269,172 @@ onMounted(async () => { diff --git a/src/views/review/meeting/components/ExpertSelectTable.vue b/src/views/review/meeting/components/ExpertSelectTable.vue index 5cafac3b7..2adb04279 100644 --- a/src/views/review/meeting/components/ExpertSelectTable.vue +++ b/src/views/review/meeting/components/ExpertSelectTable.vue @@ -77,6 +77,7 @@ const emit = defineEmits<{ const tableRef = ref() const searchKeyword = ref('') +const isUpdating = ref(false) const filteredExperts = computed(() => { const kw = searchKeyword.value.trim().toLowerCase() @@ -99,17 +100,20 @@ watch( async () => { await nextTick() if (!tableRef.value) return + isUpdating.value = true tableRef.value.clearSelection() filteredExperts.value.forEach((row) => { if (props.modelValue.includes(row.id)) { tableRef.value.toggleRowSelection(row, true) } }) + isUpdating.value = false }, { immediate: true } ) const handleSelectionChange = (selected: Expert[]) => { + if (isUpdating.value) return const selectedIds = selected.map((e) => e.id) // 合并:保留不在当前过滤列表中的已选项 const filteredIds = filteredExperts.value.map((e) => e.id) @@ -127,23 +131,66 @@ const removeExpert = (id: number) => { width: 100%; display: flex; flex-direction: column; - gap: 10px; + gap: 12px; } + +/* 已选标签行 */ .selected-row { display: flex; align-items: center; flex-wrap: wrap; - gap: 6px; + gap: 8px; + padding: 8px 12px; + background-color: rgba(41, 90, 188, 0.04); + border: 1px solid rgba(41, 90, 188, 0.12); + border-radius: 6px; } .selected-label { - font-size: 13px; - color: var(--el-text-color-secondary); + font-size: 14px; + color: #666; white-space: nowrap; } .expert-tag { margin: 0; + background-color: rgba(41, 90, 188, 0.1); + border-color: rgba(41, 90, 188, 0.2); + color: #295abc; } + +/* 搜索框 */ .search-input { max-width: 320px; } +:deep(.search-input .el-input__wrapper) { + height: 38px; + border-radius: 6px; + border-color: #dcdedf; +} +:deep(.search-input .el-input__inner) { + font-size: 14px; +} + +/* 专家表格 */ +:deep(.el-table .el-table__header-wrapper th) { + background-color: #eef2fb; + color: #333; + font-weight: 600; + font-size: 14px; + border-color: #e1e7f0; +} +:deep(.el-table .el-table__body td) { + font-size: 14px; + color: #333; + border-color: #e1e7f0; +} +:deep(.el-table .el-table__body tr.active > td) { + background-color: rgba(41, 90, 188, 0.06); +} +:deep(.el-table .el-table__body .el-checkbox__inner) { + border-color: #295abc; +} +:deep(.el-table .el-table__body .el-checkbox__input.is-checked .el-checkbox__inner) { + background-color: #295abc; + border-color: #295abc; +} diff --git a/src/views/review/meeting/index.vue b/src/views/review/meeting/index.vue index b901cfc8e..56b197445 100644 --- a/src/views/review/meeting/index.vue +++ b/src/views/review/meeting/index.vue @@ -1,105 +1,82 @@