前端代码

This commit is contained in:
liumengyu
2026-08-21 18:42:51 +08:00
parent 054947482f
commit 04e06a9c9a
762 changed files with 62992 additions and 0 deletions
+881
View File
@@ -0,0 +1,881 @@
<template>
<div class="app-container assessment-page">
<el-tabs v-model="activeTab" type="border-card" class="assessment-tabs">
<!-- ==================== Tab1:课程表信息列表 ==================== -->
<el-tab-pane label="课程表信息列表" name="schedule">
<!-- 查询条件 -->
<el-card shadow="never" class="search-card">
<el-form :model="scheduleSearchForm" label-width="130px" class="search-form">
<!-- 考核日期:独立整行 -->
<el-row :gutter="0">
<el-col :span="24">
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.examDateEnabled">考核日期</el-checkbox>
</template>
<div class="date-block">
<div class="date-range">
<span>从</span>
<el-date-picker
v-model="scheduleSearchForm.examDateFrom"
type="date"
value-format="yyyy-MM-dd"
:disabled="!scheduleSearchForm.examDateEnabled"
/>
<span>到</span>
<el-date-picker
v-model="scheduleSearchForm.examDateTo"
type="date"
value-format="yyyy-MM-dd"
:disabled="!scheduleSearchForm.examDateEnabled"
/>
</div>
<div class="quick-row">
<el-select v-model="scheduleSearchForm.semester" class="quick-select">
<el-option v-for="item in semesterOptions" :key="item" :label="item" :value="item" />
</el-select>
<el-button size="small" @click="handleQuickDate('semester')">确定</el-button>
<el-select v-model="scheduleSearchForm.week" class="quick-select">
<el-option v-for="item in weekOptions" :key="item" :label="item" :value="item" />
</el-select>
<el-button size="small" @click="handleQuickDate('week')">确定</el-button>
</div>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="0">
<!-- 左栏 -->
<el-col :span="12">
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.deptEnabled">教研室</el-checkbox>
</template>
<el-select v-model="scheduleSearchForm.dept" class="w-full" :disabled="!scheduleSearchForm.deptEnabled">
<el-option v-for="item in deptOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.buildingEnabled">教学楼</el-checkbox>
</template>
<el-select v-model="scheduleSearchForm.building" class="w-full" :disabled="!scheduleSearchForm.buildingEnabled">
<el-option v-for="item in buildingOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item label="培训层次">
<el-select v-model="scheduleSearchForm.trainLevel" placeholder="请选择" clearable class="w-full">
<el-option v-for="item in trainLevelOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.deptSystemEnabled">监考教员所属院部系</el-checkbox>
</template>
<el-select v-model="scheduleSearchForm.deptSystem" class="w-full" :disabled="!scheduleSearchForm.deptSystemEnabled">
<el-option v-for="item in deptOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.resourceTypeEnabled">保障资源类别</el-checkbox>
</template>
<el-select v-model="scheduleSearchForm.resourceType" class="w-full" :disabled="!scheduleSearchForm.resourceTypeEnabled">
<el-option v-for="item in resourceTypeOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.periodEnabled">节次</el-checkbox>
</template>
<el-select v-model="scheduleSearchForm.period" class="w-full" :disabled="!scheduleSearchForm.periodEnabled">
<el-option v-for="item in periodOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.combineEnabled">合堂选项</el-checkbox>
</template>
<el-checkbox v-model="scheduleSearchForm.combineChange" :disabled="!scheduleSearchForm.combineEnabled">合堂变动</el-checkbox>
</el-form-item>
<el-form-item label="专业名称">
<el-input v-model="scheduleSearchForm.majorName" placeholder="请输入" clearable />
</el-form-item>
<el-form-item label="监考教员姓名">
<el-input v-model="scheduleSearchForm.invigilatorName" placeholder="请输入" clearable />
</el-form-item>
<el-form-item label="考核场地名称">
<el-input v-model="scheduleSearchForm.examPlaceName" placeholder="请输入" clearable />
</el-form-item>
</el-col>
<!-- 右栏 -->
<el-col :span="12">
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.invigilatorEnabled">监考教员</el-checkbox>
</template>
<el-select v-model="scheduleSearchForm.invigilator" class="w-full" :disabled="!scheduleSearchForm.invigilatorEnabled">
<el-option v-for="item in invigilatorOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.examSubjectEnabled">考核科目</el-checkbox>
</template>
<el-select v-model="scheduleSearchForm.examSubject" class="w-full" :disabled="!scheduleSearchForm.examSubjectEnabled">
<el-option v-for="item in subjectOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.placeEnabled">教学场地</el-checkbox>
</template>
<el-select v-model="scheduleSearchForm.place" class="w-full" :disabled="!scheduleSearchForm.placeEnabled">
<el-option v-for="item in placeOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.teamEnabled">班次</el-checkbox>
</template>
<div class="team-field">
<el-select v-model="scheduleSearchForm.team" placeholder="请选择" :disabled="!scheduleSearchForm.teamEnabled">
<el-option v-for="item in teamOptions" :key="item" :label="item" :value="item" />
</el-select>
<el-checkbox v-model="scheduleSearchForm.showElective" class="elective-check">显示选修课临时班</el-checkbox>
</div>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.teamCategoryEnabled">队别</el-checkbox>
</template>
<el-select v-model="scheduleSearchForm.teamCategory" class="w-full" :disabled="!scheduleSearchForm.teamCategoryEnabled">
<el-option v-for="item in teamCategoryOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.resourceEnabled">保障资源</el-checkbox>
</template>
<el-select v-model="scheduleSearchForm.resource" class="w-full" :disabled="!scheduleSearchForm.resourceEnabled">
<el-option v-for="item in resourceOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.manageOrgEnabled">管理机构</el-checkbox>
</template>
<el-select v-model="scheduleSearchForm.manageOrg" class="w-full" :disabled="!scheduleSearchForm.manageOrgEnabled">
<el-option v-for="item in manageOrgOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="scheduleSearchForm.logOptionEnabled">日志填写选项</el-checkbox>
</template>
<el-radio-group v-model="scheduleSearchForm.logOption" :disabled="!scheduleSearchForm.logOptionEnabled">
<el-radio :label="'已填写'">已填写</el-radio>
<el-radio :label="'未填写'">未填写</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="年级">
<el-input v-model="scheduleSearchForm.gradeInput" placeholder="请输入" clearable />
</el-form-item>
<el-form-item label="队别班次名称">
<el-input v-model="scheduleSearchForm.teamClassName" placeholder="请输入" clearable />
</el-form-item>
<el-form-item label="科目名称">
<el-input v-model="scheduleSearchForm.subjectName" placeholder="请输入" clearable />
</el-form-item>
</el-col>
</el-row>
<div class="search-tip">注意:勾选"选择框"表示启用该项对应的查询条件。</div>
<div class="search-actions">
<el-button type="primary" @click="handleScheduleQuery">查询</el-button>
</div>
</el-form>
</el-card>
<!-- 操作与列表区域 -->
<el-card shadow="never" class="table-card">
<div class="table-title">课程表信息列表</div>
<div class="action-bar">
<div class="action-row">
<el-button type="primary" size="small" @click="handleScheduleBatch('批量设置备注信息')">批量设置备注信息</el-button>
<el-button type="primary" size="small" @click="handleScheduleBatch('批量变更时间')">批量变更时间</el-button>
<el-button type="primary" size="small" @click="handleScheduleBatch('批量平移时间')">批量平移时间</el-button>
<el-button type="primary" size="small" @click="handleScheduleBatch('批量变更授课教员')">批量变更授课教员</el-button>
<el-button type="primary" size="small" @click="handleScheduleBatch('批量变更授课场地')">批量变更授课场地</el-button>
<el-button type="primary" size="small" @click="handleExport('班次课程课时汇总')">班次课程课时汇总另存</el-button>
<el-button type="primary" size="small" @click="handleExport('教学实施计划概要')">教学实施计划概要另存</el-button>
<el-button type="primary" size="small" @click="handleExport('教学实施计划')">教学实施计划另存</el-button>
</div>
<div class="action-row">
<el-button type="danger" size="small" @click="handleScheduleBatchDelete">批量删除</el-button>
</div>
</div>
<el-table v-loading="scheduleLoading" :data="schedulePagedData" border stripe class="main-table" @selection-change="handleScheduleSelectionChange">
<el-table-column type="selection" width="50" />
<el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column prop="time" label="上课时间" width="150" align="center" />
<el-table-column prop="course" label="课程" width="110" show-overflow-tooltip />
<el-table-column prop="deptUnit" label="责任单位" width="120" show-overflow-tooltip />
<el-table-column prop="teamCategory" label="队别" width="90" align="center" />
<el-table-column prop="teamClass" label="班次" show-overflow-tooltip />
<el-table-column prop="grade" label="年级" width="90" align="center" />
<el-table-column prop="major" label="专业" width="100" show-overflow-tooltip />
<el-table-column prop="teacher" label="教员" width="80" align="center" />
<el-table-column prop="countPlace" label="人数/场地" width="110" align="center" />
<el-table-column prop="contentMethod" label="教学内容方法" width="110" show-overflow-tooltip />
<el-table-column prop="keyPoints" label="教学要点" width="100" show-overflow-tooltip />
<el-table-column prop="guarantee" label="保障明细" width="110" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" width="90" show-overflow-tooltip />
</el-table>
<div class="pagination-wrap">
<el-pagination
background
layout="total, prev, pager, next, jumper"
:total="scheduleData.length"
:page-size="schedulePageSize"
:current-page="scheduleCurrentPage"
@current-change="handleSchedulePageChange"
/>
</div>
</el-card>
</el-tab-pane>
<!-- ==================== Tab2:课程检索 ==================== -->
<el-tab-pane label="课程检索" name="search">
<div v-if="statusTip" class="status-tip">{{ statusTip }}</div>
<div class="big-title">2026年秋季学期-课程检索</div>
<div class="export-bar">
<el-button type="primary" @click="handleExport('另存Excel(成绩五级制)')">另存Excel(成绩五级制)</el-button>
<el-button type="primary" @click="handleExport('另存Excel(成绩四级制)')">另存Excel(成绩四级制)</el-button>
<el-button type="primary" @click="handleExport('课程学员名单')">课程学员名单</el-button>
</div>
<!-- 查询条件 -->
<el-card shadow="never" class="search-card">
<el-form :model="courseSearchForm" label-width="130px" class="search-form">
<el-row :gutter="0">
<!-- 左栏 -->
<el-col :span="12">
<el-form-item>
<template slot="label">
<el-checkbox v-model="courseSearchForm.deptEnabled">责任教研室</el-checkbox>
</template>
<el-select v-model="courseSearchForm.dept" class="w-full" :disabled="!courseSearchForm.deptEnabled">
<el-option v-for="item in deptOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="courseSearchForm.courseTypeEnabled">课类型</el-checkbox>
</template>
<el-select v-model="courseSearchForm.courseType" class="w-full" :disabled="!courseSearchForm.courseTypeEnabled">
<el-option v-for="item in courseTypeOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item label="培训层次">
<el-select v-model="courseSearchForm.trainLevel" placeholder="请选择" clearable class="w-full">
<el-option v-for="item in trainLevelOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="courseSearchForm.teamEnabled">队别(班次)</el-checkbox>
</template>
<el-select v-model="courseSearchForm.team" class="w-full" :disabled="!courseSearchForm.teamEnabled">
<el-option v-for="item in teamOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item label="学分">
<div class="range-control">
<el-input v-model="courseSearchForm.creditMin" placeholder="0" />
<span class="range-sep">至</span>
<el-input v-model="courseSearchForm.creditMax" placeholder="0" />
</div>
</el-form-item>
<el-form-item label="计划学时">
<div class="range-control">
<el-input v-model="courseSearchForm.planHoursMin" placeholder="0" />
<span class="range-sep">至</span>
<el-input v-model="courseSearchForm.planHoursMax" placeholder="0" />
</div>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="courseSearchForm.arrangeStatusEnabled">考核安排状态</el-checkbox>
</template>
<el-radio-group v-model="courseSearchForm.arrangeStatus" :disabled="!courseSearchForm.arrangeStatusEnabled">
<el-radio :label="'已安排'">已安排</el-radio>
<el-radio :label="'未安排'">未安排</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="教员">
<el-input v-model="courseSearchForm.teacher" placeholder="请输入" clearable />
</el-form-item>
<el-form-item label="队别班次">
<el-input v-model="courseSearchForm.teamClass" placeholder="请输入" clearable />
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="courseSearchForm.scoreStatusEnabled">成绩录入状态</el-checkbox>
</template>
<el-select v-model="courseSearchForm.scoreStatus" class="w-full" :disabled="!courseSearchForm.scoreStatusEnabled">
<el-option v-for="item in scoreStatusOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item label="形成性成绩比例">
<div class="range-control">
<el-input v-model="courseSearchForm.formaScoreMin" placeholder="0" />
<span class="range-suffix">%</span>
<span class="range-sep">至</span>
<el-input v-model="courseSearchForm.formaScoreMax" placeholder="0" />
<span class="range-suffix">%</span>
</div>
</el-form-item>
</el-col>
<!-- 右栏 -->
<el-col :span="12">
<el-form-item>
<template slot="label">
<el-checkbox v-model="courseSearchForm.implTeacherEnabled">实施教员</el-checkbox>
</template>
<el-select v-model="courseSearchForm.implTeacher" class="w-full" :disabled="!courseSearchForm.implTeacherEnabled">
<el-option v-for="item in implTeacherOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="courseSearchForm.courseSubjectEnabled">课程科目</el-checkbox>
</template>
<el-select v-model="courseSearchForm.courseSubject" class="w-full" :disabled="!courseSearchForm.courseSubjectEnabled">
<el-option v-for="item in subjectOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item label="教学楼">
<el-select v-model="courseSearchForm.building" class="w-full">
<el-option v-for="item in buildingOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="courseSearchForm.placeEnabled">教学场地</el-checkbox>
</template>
<el-select v-model="courseSearchForm.place" class="w-full" :disabled="!courseSearchForm.placeEnabled">
<el-option v-for="item in placeOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="courseSearchForm.startDateEnabled">开课日期</el-checkbox>
</template>
<div class="range-control">
<el-date-picker v-model="courseSearchForm.startDateStart" type="date" value-format="yyyy-MM-dd" :disabled="!courseSearchForm.startDateEnabled" />
<span class="range-sep">至</span>
<el-date-picker v-model="courseSearchForm.startDateEnd" type="date" value-format="yyyy-MM-dd" :disabled="!courseSearchForm.startDateEnabled" />
</div>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="courseSearchForm.endDateEnabled">结课日期</el-checkbox>
</template>
<div class="range-control">
<el-date-picker v-model="courseSearchForm.endDateStart" type="date" value-format="yyyy-MM-dd" :disabled="!courseSearchForm.endDateEnabled" />
<span class="range-sep">至</span>
<el-date-picker v-model="courseSearchForm.endDateEnd" type="date" value-format="yyyy-MM-dd" :disabled="!courseSearchForm.endDateEnabled" />
</div>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="courseSearchForm.examDateEnabled">考试日期</el-checkbox>
</template>
<div class="range-control">
<el-date-picker v-model="courseSearchForm.examDateStart" type="date" value-format="yyyy-MM-dd" :disabled="!courseSearchForm.examDateEnabled" />
<span class="range-sep">至</span>
<el-date-picker v-model="courseSearchForm.examDateEnd" type="date" value-format="yyyy-MM-dd" :disabled="!courseSearchForm.examDateEnabled" />
</div>
</el-form-item>
<el-form-item label="课程科目">
<el-input v-model="courseSearchForm.courseSubjectInput" placeholder="请输入" clearable />
</el-form-item>
<el-form-item label="教学场地">
<el-input v-model="courseSearchForm.placeInput" placeholder="请输入" clearable />
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="courseSearchForm.finalStrategyEnabled">终结性成绩策略</el-checkbox>
</template>
<el-checkbox v-model="courseSearchForm.finalPassEnabled">终结性成绩定及格</el-checkbox>
</el-form-item>
<el-form-item>
<template slot="label">
<el-checkbox v-model="courseSearchForm.manageOrgEnabled">管理机构</el-checkbox>
</template>
<el-select v-model="courseSearchForm.manageOrg" class="w-full" :disabled="!courseSearchForm.manageOrgEnabled">
<el-option v-for="item in manageOrgOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<div class="search-tip">注意:勾选"选择框"表示启用该项对应的查询条件,输入框非空表示启用查询条件。</div>
<div class="search-actions">
<el-button type="primary" @click="handleCourseQuery">查询</el-button>
</div>
</el-form>
</el-card>
<!-- 数据表格 -->
<el-card shadow="never" class="table-card">
<el-table v-loading="courseLoading" :data="coursePagedData" border stripe class="main-table">
<el-table-column type="index" label="序号" width="50" align="center" />
<el-table-column label="课程名称/课时系数" width="150" align="center">
<template slot="header">
<div class="two-line-header">
<span>课程名称</span>
<span>课时系数</span>
</div>
</template>
<template slot-scope="{ row }">
<div class="two-line-cell">
<span>{{ row.courseName }}</span>
<span>{{ row.coeff }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="teacherTimes" label="责任教员&课次" width="120" align="center" />
<el-table-column prop="teamClass" label="班次" show-overflow-tooltip />
<el-table-column prop="grade" label="年级" width="90" align="center" />
<el-table-column prop="major" label="专业" width="120" show-overflow-tooltip />
<el-table-column prop="planHours" label="计划学时" width="90" align="center" />
<el-table-column prop="runHours" label="运行学时" width="90" align="center" />
<el-table-column prop="examType" label="考核类型方式" width="110" align="center" />
<el-table-column prop="implTeacher" label="实施教员" width="90" align="center" />
<el-table-column prop="countPlace" label="人数/场地" width="110" align="center" />
<el-table-column prop="courseLecture" label="课程讲座" width="90" align="center" />
<el-table-column prop="planChange" label="实施计划变" width="90" align="center" />
</el-table>
<div class="pagination-wrap">
<el-pagination
background
layout="total, prev, pager, next, jumper"
:total="courseData.length"
:page-size="coursePageSize"
:current-page="courseCurrentPage"
@current-change="handleCoursePageChange"
/>
</div>
</el-card>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
export default {
name: 'AssessmentIndex',
data() {
return {
activeTab: 'schedule',
// ==================== 下拉选项(两页共用) ====================
deptOptions: ['教务处', '政治工作教研室', '军事基础教研室', '装备保障教研室'],
trainLevelOptions: ['本科', '研究生', '大专'],
buildingOptions: ['校内', '教学楼A', '教学楼B'],
placeOptions: ['操场', '教室101', '实验室203'],
subjectOptions: ['英语(补课)', '高等数学', '军事理论', '战术基础'],
teamOptions: ['2025级炮兵装备运用(线膛炮)专业学员54队5区队', '2024级学员32队', '研究生1队'],
manageOrgOptions: ['教务处', '教务科', '教研室'],
// Tab1 专属选项
semesterOptions: ['2026年春季学期', '2026年秋季学期', '2025年秋季学期'],
weekOptions: ['第20周2026-07-06', '第19周2026-06-29', '第21周2026-07-13'],
resourceTypeOptions: ['弹药', '器材', '场地'],
periodOptions: ['1-2', '3-4', '5-6', '7-8'],
invigilatorOptions: ['教务处', '张三', '李四', '王五'],
teamCategoryOptions: ['学员大队', '学员一队', '学员二队'],
resourceOptions: ['92式手榴弹', '模拟器材', '靶场'],
// Tab2 专属选项
courseTypeOptions: ['讲座', '讲授', '研讨', '实操'],
scoreStatusOptions: ['未填写', '已填写'],
implTeacherOptions: ['教务处', '张三', '李四', '王五', '赵六'],
// ==================== Tab1 查询条件 ====================
scheduleSearchForm: {
examDateEnabled: true,
examDateFrom: '2026-07-06',
examDateTo: '2026-07-12',
semester: '2026年春季学期',
week: '第20周2026-07-06',
deptEnabled: false,
dept: '教务处',
buildingEnabled: true,
building: '校内',
trainLevel: '',
deptSystemEnabled: false,
deptSystem: '教务处',
resourceTypeEnabled: false,
resourceType: '弹药',
periodEnabled: false,
period: '1-2',
combineEnabled: false,
combineChange: false,
majorName: '',
invigilatorName: '',
examPlaceName: '',
invigilatorEnabled: false,
invigilator: '教务处',
examSubjectEnabled: false,
examSubject: '英语(补课)',
placeEnabled: false,
place: '操场',
teamEnabled: false,
team: '',
showElective: true,
teamCategoryEnabled: false,
teamCategory: '学员大队',
resourceEnabled: false,
resource: '92式手榴弹',
manageOrgEnabled: false,
manageOrg: '教务处',
logOptionEnabled: false,
logOption: '未填写',
gradeInput: '',
teamClassName: '',
subjectName: ''
},
// ==================== Tab2 查询条件 ====================
statusTip: '',
courseSearchForm: {
deptEnabled: false,
dept: '教务处',
courseTypeEnabled: false,
courseType: '讲座',
trainLevel: '',
teamEnabled: false,
team: '2025级炮兵装备运用(线膛炮)专业学员54队5区队',
creditMin: '',
creditMax: '',
planHoursMin: '',
planHoursMax: '',
arrangeStatusEnabled: true,
arrangeStatus: '已安排',
teacher: '',
teamClass: '',
scoreStatusEnabled: false,
scoreStatus: '未填写',
formaScoreMin: '',
formaScoreMax: '',
implTeacherEnabled: false,
implTeacher: '教务处',
courseSubjectEnabled: false,
courseSubject: '英语(补课)',
building: '校内',
placeEnabled: false,
place: '操场',
startDateEnabled: false,
startDateStart: '2026-08-21',
startDateEnd: '2027-01-23',
endDateEnabled: false,
endDateStart: '2026-08-21',
endDateEnd: '2027-01-23',
examDateEnabled: false,
examDateStart: '2026-08-21',
examDateEnd: '2027-01-23',
courseSubjectInput: '',
placeInput: '',
finalStrategyEnabled: false,
finalPassEnabled: false,
manageOrgEnabled: false,
manageOrg: '教务处'
},
// ==================== Tab1 表格数据(mock) ====================
scheduleLoading: false,
scheduleData: [
{ id: 1, time: '2026-07-06 08:00-09:40', course: '高等数学', deptUnit: '教务处', teamCategory: '学员大队', teamClass: '2025级本科1班', grade: '2025级', major: '数学', teacher: '张三', countPlace: '45/教室101', contentMethod: '理论讲授', keyPoints: '微积分基础', guarantee: '无', remark: '第1次课' },
{ id: 2, time: '2026-07-06 10:00-11:40', course: '军事理论', deptUnit: '政治工作教研室', teamCategory: '学员大队', teamClass: '2024级本科2班', grade: '2024级', major: '军事', teacher: '李四', countPlace: '38/教室203', contentMethod: '案例教学', keyPoints: '战争理论', guarantee: '多媒体', remark: '' },
{ id: 3, time: '2026-07-07 14:30-16:10', course: '英语(补课)', deptUnit: '军事基础教研室', teamCategory: '学员一队', teamClass: '研究生1班', grade: '2026级', major: '英语', teacher: '王五', countPlace: '30/教室102', contentMethod: '研讨教学', keyPoints: '口语训练', guarantee: '无', remark: '补课' },
{ id: 4, time: '2026-07-07 08:00-09:40', course: '战术基础', deptUnit: '教务处', teamCategory: '学员大队', teamClass: '2023级本科3班', grade: '2023级', major: '战术', teacher: '赵六', countPlace: '50/操场', contentMethod: '实操演练', keyPoints: '战术动作', guarantee: '器材', remark: '' },
{ id: 5, time: '2026-07-08 10:00-11:40', course: '装备保障', deptUnit: '装备保障教研室', teamCategory: '学员二队', teamClass: '研究生2班', grade: '2026级', major: '装备', teacher: '孙七', countPlace: '20/实验室203', contentMethod: '实践教学', keyPoints: '装备维护', guarantee: '模拟器材', remark: '分组' },
{ id: 6, time: '2026-07-08 14:30-16:10', course: '联合作战指挥', deptUnit: '教务处', teamCategory: '学员大队', teamClass: '2025级本科1班', grade: '2025级', major: '指挥', teacher: '李四', countPlace: '45/教室B301', contentMethod: '案例教学', keyPoints: '联合作战', guarantee: '多媒体', remark: '' },
{ id: 7, time: '2026-07-09 08:00-09:40', course: '大学英语', deptUnit: '军事基础教研室', teamCategory: '学员一队', teamClass: '2024级本科2班', grade: '2024级', major: '英语', teacher: '王五', countPlace: '38/教室105', contentMethod: '理论讲授', keyPoints: '语法', guarantee: '无', remark: '' },
{ id: 8, time: '2026-07-09 10:00-11:40', course: '政治理论', deptUnit: '政治工作教研室', teamCategory: '学员大队', teamClass: '研究生1班', grade: '2026级', major: '政治', teacher: '张三', countPlace: '30/教室204', contentMethod: '理论讲授', keyPoints: '形势政策', guarantee: '无', remark: '' },
{ id: 9, time: '2026-07-10 14:30-16:10', course: '装备操作', deptUnit: '装备保障教研室', teamCategory: '学员二队', teamClass: '2023级本科3班', grade: '2023级', major: '装备', teacher: '赵六', countPlace: '45/实验室101', contentMethod: '实操演练', keyPoints: '操作规范', guarantee: '器材', remark: '安全注意' },
{ id: 10, time: '2026-07-10 16:20-18:00', course: '军事地形学', deptUnit: '教务处', teamCategory: '学员大队', teamClass: '2025级本科1班', grade: '2025级', major: '地形', teacher: '孙七', countPlace: '50/操场', contentMethod: '实操演练', keyPoints: '地形判读', guarantee: '地图', remark: '' }
],
selectedRows: [],
scheduleCurrentPage: 1,
schedulePageSize: 20,
// ==================== Tab2 表格数据(mock) ====================
courseLoading: false,
courseData: [
{ id: 1, courseName: '高等数学', coeff: '1.0', teacherTimes: '张三×48', teamClass: '2025级炮兵装备运用(线膛炮)专业学员54队5区队', grade: '2025级', major: '炮兵装备运用', planHours: 96, runHours: 96, examType: '闭卷考试', implTeacher: '张三', countPlace: '45/教室101', courseLecture: '讲座', planChange: '否' },
{ id: 2, courseName: '军事理论', coeff: '1.2', teacherTimes: '李四×32', teamClass: '2024级学员32队', grade: '2024级', major: '军事指挥', planHours: 64, runHours: 62, examType: '开卷考试', implTeacher: '李四', countPlace: '38/教室203', courseLecture: '讲授', planChange: '是' },
{ id: 3, courseName: '英语(补课)', coeff: '0.8', teacherTimes: '王五×40', teamClass: '研究生1队', grade: '2026级', major: '英语', planHours: 80, runHours: 78, examType: '口语测试', implTeacher: '王五', countPlace: '30/教室102', courseLecture: '讲座', planChange: '否' },
{ id: 4, courseName: '战术基础', coeff: '1.0', teacherTimes: '赵六×56', teamClass: '2023级学员51队', grade: '2023级', major: '战术指挥', planHours: 112, runHours: 110, examType: '实操考核', implTeacher: '赵六', countPlace: '50/操场', courseLecture: '实操', planChange: '是' },
{ id: 5, courseName: '装备保障', coeff: '1.1', teacherTimes: '张三×24', teamClass: '研究生2队', grade: '2026级', major: '装备保障', planHours: 48, runHours: 48, examType: '闭卷考试', implTeacher: '孙七', countPlace: '20/实验室203', courseLecture: '讲授', planChange: '否' },
{ id: 6, courseName: '联合作战指挥', coeff: '1.3', teacherTimes: '李四×60', teamClass: '2025级炮兵装备运用(线膛炮)专业学员54队5区队', grade: '2025级', major: '联合作战', planHours: 120, runHours: 118, examType: '综合考核', implTeacher: '李四', countPlace: '45/教室B301', courseLecture: '讲座', planChange: '是' },
{ id: 7, courseName: '大学英语', coeff: '0.8', teacherTimes: '王五×36', teamClass: '2024级学员32队', grade: '2024级', major: '英语', planHours: 72, runHours: 72, examType: '四级制考试', implTeacher: '王五', countPlace: '38/教室105', courseLecture: '讲授', planChange: '否' },
{ id: 8, courseName: '军事地形学', coeff: '1.0', teacherTimes: '赵六×40', teamClass: '2023级学员51队', grade: '2023级', major: '军事指挥', planHours: 80, runHours: 76, examType: '实操考核', implTeacher: '赵六', countPlace: '50/操场', courseLecture: '实操', planChange: '是' },
{ id: 9, courseName: '政治理论', coeff: '1.0', teacherTimes: '张三×48', teamClass: '研究生1队', grade: '2026级', major: '政治学', planHours: 96, runHours: 96, examType: '开卷考试', implTeacher: '孙七', countPlace: '30/教室204', courseLecture: '讲座', planChange: '否' },
{ id: 10, courseName: '装备操作', coeff: '1.2', teacherTimes: '李四×32', teamClass: '2025级炮兵装备运用(线膛炮)专业学员54队5区队', grade: '2025级', major: '炮兵装备运用', planHours: 64, runHours: 62, examType: '实操考核', implTeacher: '李四', countPlace: '45/实验室101', courseLecture: '实操', planChange: '是' }
],
courseCurrentPage: 1,
coursePageSize: 20
}
},
computed: {
schedulePagedData() {
const start = (this.scheduleCurrentPage - 1) * this.schedulePageSize
return this.scheduleData.slice(start, start + this.schedulePageSize)
},
coursePagedData() {
const start = (this.courseCurrentPage - 1) * this.coursePageSize
return this.courseData.slice(start, start + this.coursePageSize)
}
},
methods: {
// ==================== Tab1 查询 ====================
// TODO: 后端接口未提供,以下操作均为前端模拟;接口就绪后替换为对应接口
handleScheduleQuery() {
this.$message.success('查询完成(前端模拟)')
},
/** 学期/周次「确定」快速填充日期范围 */
handleQuickDate(type) {
if (type === 'semester') {
this.$message.success(`已按「${this.scheduleSearchForm.semester}」确定考核日期范围(前端模拟)`)
} else {
this.$message.success(`已按「${this.scheduleSearchForm.week}」确定考核日期范围(前端模拟)`)
}
},
// ==================== 导出按钮 ====================
handleExport(type) {
this.$message.success(`已导出 ${type}(前端模拟)`)
},
// ==================== Tab1 多选与批量操作 ====================
handleScheduleSelectionChange(rows) {
this.selectedRows = rows
},
handleScheduleBatch(action) {
if (this.selectedRows.length === 0) {
this.$message.warning('请先选择记录')
return
}
this.$message.success(`已对所选 ${this.selectedRows.length} 条记录执行「${action}」(前端模拟)`)
},
handleScheduleBatchDelete() {
if (this.selectedRows.length === 0) {
this.$message.warning('请先选择要删除的记录')
return
}
const ids = this.selectedRows.map((r) => r.id)
this.scheduleData = this.scheduleData.filter((r) => ids.indexOf(r.id) === -1)
this.$message.success(`已删除所选 ${ids.length} 条记录(前端模拟)`)
},
handleSchedulePageChange(page) {
this.scheduleCurrentPage = page
},
// ==================== Tab2 查询 ====================
handleCourseQuery() {
const now = new Date()
const hh = String(now.getHours()).padStart(2, '0')
const mm = String(now.getMinutes()).padStart(2, '0')
const ss = String(now.getSeconds()).padStart(2, '0')
const count = this.courseData.length
this.statusTip = `[${hh}:${mm}:${ss}]查询成功! 共检索到${count}条记录。`
this.$message.success(`查询成功,共检索到${count}条记录(前端模拟)`)
},
handleCoursePageChange(page) {
this.courseCurrentPage = page
}
}
}
</script>
<style scoped lang="scss">
.app-container {
padding: 20px;
}
.assessment-page {
.assessment-tabs {
background: #fff;
}
// ==================== 查询条件区域 ====================
.search-card {
margin-bottom: 16px;
.search-form {
.w-full {
width: 100%;
}
.date-block {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
flex-wrap: wrap;
.date-range {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
.quick-row {
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
.quick-select {
width: 170px;
}
}
}
.team-field {
display: flex;
align-items: center;
gap: 8px;
.el-select {
flex: 1;
min-width: 0;
}
.elective-check {
white-space: nowrap;
}
}
.range-control {
display: flex;
align-items: center;
gap: 6px;
.el-input {
flex: 1;
}
.el-date-editor {
flex: 1;
min-width: 120px;
}
.range-sep,
.range-suffix {
flex-shrink: 0;
font-size: 12px;
color: #606266;
}
}
.search-tip {
font-size: 12px;
color: #f56c6c;
margin-top: 4px;
margin-bottom: 4px;
}
.search-actions {
display: flex;
justify-content: flex-end;
margin-top: 8px;
padding-top: 12px;
border-top: 1px solid #ebeef5;
}
}
}
// ==================== Tab2 顶部提示 / 标题 / 导出 ====================
.status-tip {
display: inline-block;
background: #dc3545;
color: #fff;
font-size: 12px;
padding: 3px 10px;
border-radius: 4px;
margin-bottom: 12px;
}
.big-title {
text-align: center;
font-size: 20px;
font-weight: 700;
color: #303133;
margin: 8px 0 12px;
}
.export-bar {
display: flex;
justify-content: flex-end;
gap: 12px;
margin-bottom: 16px;
}
// ==================== 数据表格区域 ====================
.table-card {
.table-title {
font-size: 16px;
font-weight: 600;
color: #303133;
margin-bottom: 12px;
}
.action-bar {
.action-row {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-bottom: 10px;
&:last-child {
margin-bottom: 14px;
}
}
}
.main-table {
::v-deep(.cell) {
font-size: 12px;
}
}
.two-line-header,
.two-line-cell {
display: flex;
flex-direction: column;
line-height: 1.4;
}
.pagination-wrap {
display: flex;
justify-content: flex-end;
margin-top: 12px;
}
}
}
</style>