forked from liweijie/education
879 lines
45 KiB
Vue
879 lines
45 KiB
Vue
<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="160px" 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-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="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>
|