forked from liweijie/education
样式
This commit is contained in:
@@ -1,19 +0,0 @@
|
|||||||
import request from '@/utils/request'
|
|
||||||
|
|
||||||
// 课程科目(课表 KB)管理(JYSController /jys/kb)
|
|
||||||
// 接口依据:JYSController 控制器(前端 baseURL 为 /api,此处不重复 /api 前缀)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询课程科目(课表 KB)
|
|
||||||
* GET /jys/kb/list
|
|
||||||
* 查询参数:pageNum、pageSize、kmc 课名称(模糊)、jysdh 教研室代号(等值)、
|
|
||||||
* kclx 课程类型、pxlx 培训类型、pxcc 培训层次、kmdm 科目代码(模糊)、jc 简称(模糊)
|
|
||||||
* 返回:PageResult<KB>(records/total)
|
|
||||||
*/
|
|
||||||
export function listKb(params) {
|
|
||||||
return request({
|
|
||||||
url: '/jys/kb/list',
|
|
||||||
method: 'get',
|
|
||||||
params
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 课程科目(课标 KB)管理(JYSController /jys/kb)
|
||||||
|
// 接口依据:JYSController 控制器(前端 baseURL 为 /api,此处不重复 /api 前缀)
|
||||||
|
// 实体 KB 主键为 kbh(课编号);新增时 kbh 留空由后端生成 UUID;xhbs 字段无需传递(后端 NEVER)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增课程科目
|
||||||
|
* POST /jys/kb/add
|
||||||
|
* body 为 KB 实体;kbh 可留空(后端生成 UUID)
|
||||||
|
*/
|
||||||
|
export function addSubject(data) {
|
||||||
|
return request({
|
||||||
|
url: '/jys/kb/add',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除课程科目
|
||||||
|
* POST /jys/kb/delete?kbh=
|
||||||
|
*/
|
||||||
|
export function deleteSubject(kbh) {
|
||||||
|
return request({
|
||||||
|
url: '/jys/kb/delete',
|
||||||
|
method: 'post',
|
||||||
|
params: { kbh }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑课程科目
|
||||||
|
* POST /jys/kb/update
|
||||||
|
* body 为 KB 实体,kbh 课编号必传
|
||||||
|
*/
|
||||||
|
export function updateSubject(data) {
|
||||||
|
return request({
|
||||||
|
url: '/jys/kb/update',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询课程科目详情
|
||||||
|
* GET /jys/kb/get?kbh=
|
||||||
|
*/
|
||||||
|
export function getSubject(kbh) {
|
||||||
|
return request({
|
||||||
|
url: '/jys/kb/get',
|
||||||
|
method: 'get',
|
||||||
|
params: { kbh }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询课程科目(课标 KB)
|
||||||
|
* GET /jys/kb/list
|
||||||
|
* 查询参数:pageNum、pageSize、kmc 课名称(模糊)、jc 简称(模糊)、kmdm 科目代码(模糊)、
|
||||||
|
* jysdh 教研室代号(等值)、kclx 课程类型、pxlx 培训类型、pxcc 培训层次
|
||||||
|
* 返回:PageResult<KB>(records/total)
|
||||||
|
*/
|
||||||
|
export function listSubject(params) {
|
||||||
|
return request({
|
||||||
|
url: '/jys/kb/list',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -1,878 +0,0 @@
|
|||||||
<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>
|
|
||||||
@@ -242,7 +242,7 @@
|
|||||||
import { listTeachingPlan } from '@/api/teachBusiness/courseRunning'
|
import { listTeachingPlan } from '@/api/teachBusiness/courseRunning'
|
||||||
import { listStudentTeamTask } from '@/api/teachBusiness/studentTeamTask'
|
import { listStudentTeamTask } from '@/api/teachBusiness/studentTeamTask'
|
||||||
import { listTeam } from '@/api/studentRecords/team'
|
import { listTeam } from '@/api/studentRecords/team'
|
||||||
import { listKb } from '@/api/teachOffice/kb'
|
import { listSubject } from '@/api/teachOffice/subject'
|
||||||
import { listTeacher } from '@/api/teachOffice/teacher'
|
import { listTeacher } from '@/api/teachOffice/teacher'
|
||||||
import { listAllSemester } from '@/api/teachBusiness/semester'
|
import { listAllSemester } from '@/api/teachBusiness/semester'
|
||||||
|
|
||||||
@@ -516,7 +516,7 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
loadKbMap() {
|
loadKbMap() {
|
||||||
listKb({ pageNum: 1, pageSize: 1000 }).then(response => {
|
listSubject({ pageNum: 1, pageSize: 1000 }).then(response => {
|
||||||
const data = response.data || {}
|
const data = response.data || {}
|
||||||
const map = {}
|
const map = {}
|
||||||
;(data.records || []).forEach(item => {
|
;(data.records || []).forEach(item => {
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container subject-page">
|
<div class="app-container subject-page">
|
||||||
<!-- ==================== 1. 顶部状态提示 ==================== -->
|
|
||||||
<div class="status-tip">{{ statusTip }}</div>
|
|
||||||
|
|
||||||
<!-- ==================== 2. 查询条件区域 ==================== -->
|
<!-- ==================== 2. 查询条件区域 ==================== -->
|
||||||
<el-card shadow="never" class="search-card">
|
<el-card shadow="never" class="search-card">
|
||||||
@@ -10,152 +8,41 @@
|
|||||||
<!-- 左栏 -->
|
<!-- 左栏 -->
|
||||||
<el-col :xs="24" :md="12">
|
<el-col :xs="24" :md="12">
|
||||||
<div class="query-field">
|
<div class="query-field">
|
||||||
<span class="q-label no-check">课程别名</span>
|
<span class="q-label no-check">课名称</span>
|
||||||
<el-input v-model="searchForm.kcbh" placeholder="请输入课程别名" clearable class="q-control" />
|
<el-input v-model="searchForm.kmc" placeholder="请输入课名称" clearable class="q-control" />
|
||||||
</div>
|
</div>
|
||||||
<div class="query-field">
|
<div class="query-field">
|
||||||
<span class="q-label no-check">简称</span>
|
<span class="q-label no-check">科目代码</span>
|
||||||
<el-input v-model="searchForm.jc" placeholder="请输入简称" clearable class="q-control" />
|
<el-input v-model="searchForm.kmdm" placeholder="请输入科目代码" clearable class="q-control" />
|
||||||
</div>
|
</div>
|
||||||
<div class="query-field">
|
<div class="query-field">
|
||||||
<span class="q-label no-check">学分</span>
|
<span class="q-label no-check">培训层次</span>
|
||||||
<div class="q-control range-control">
|
<el-input v-model="searchForm.pxcc" placeholder="请输入培训层次" clearable class="q-control" />
|
||||||
<el-input v-model="searchForm.xfMin" placeholder="0" />
|
|
||||||
<span class="range-sep">至</span>
|
|
||||||
<el-input v-model="searchForm.xfMax" placeholder="0" />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="query-field">
|
<div class="query-field">
|
||||||
<span class="q-label no-check">学时</span>
|
<span class="q-label no-check">课程类型</span>
|
||||||
<div class="q-control range-control">
|
<el-input v-model="searchForm.kclx" placeholder="请输入课程类型" clearable class="q-control" />
|
||||||
<el-input v-model="searchForm.xsMin" placeholder="0" />
|
|
||||||
<span class="range-sep">至</span>
|
|
||||||
<el-input v-model="searchForm.xsMax" placeholder="0" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="query-field">
|
|
||||||
<el-checkbox v-model="searchForm.zcfsEnabled" />
|
|
||||||
<span class="q-label">支持方式</span>
|
|
||||||
<el-select v-model="searchForm.zcfs" class="q-control" :disabled="!searchForm.zcfsEnabled">
|
|
||||||
<el-option v-for="item in zcfsOptions" :key="item" :label="item" :value="item" />
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
<div class="query-field">
|
|
||||||
<el-checkbox v-model="searchForm.khlxEnabled" />
|
|
||||||
<span class="q-label">考核类型</span>
|
|
||||||
<el-select v-model="searchForm.khlx" class="q-control" :disabled="!searchForm.khlxEnabled">
|
|
||||||
<el-option v-for="item in khlxOptions" :key="item" :label="item" :value="item" />
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
<div class="query-field">
|
|
||||||
<span class="q-label no-check">秘密等级</span>
|
|
||||||
<el-select v-model="searchForm.mmdj" placeholder="请选择" class="q-control">
|
|
||||||
<el-option v-for="item in mmdjOptions" :key="item" :label="item" :value="item" />
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
<div class="query-field">
|
|
||||||
<el-checkbox v-model="searchForm.dgxzEnabled" />
|
|
||||||
<span class="q-label">大纲性质</span>
|
|
||||||
<el-radio-group v-model="searchForm.dgxz" class="q-control" :disabled="!searchForm.dgxzEnabled">
|
|
||||||
<el-radio :label="'大纲课程'">大纲课程</el-radio>
|
|
||||||
<el-radio :label="'非大纲课程'">非大纲课程</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</div>
|
|
||||||
<div class="query-field">
|
|
||||||
<el-checkbox v-model="searchForm.zzglEnabled" />
|
|
||||||
<span class="q-label">政治类课程</span>
|
|
||||||
<el-radio-group v-model="searchForm.zzgl" class="q-control" :disabled="!searchForm.zzglEnabled">
|
|
||||||
<el-radio :label="'政治类'">政治类</el-radio>
|
|
||||||
<el-radio :label="'非政治类'">非政治类</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</div>
|
|
||||||
<div class="query-field">
|
|
||||||
<span class="q-label no-check">备注</span>
|
|
||||||
<el-input v-model="searchForm.bz" placeholder="请输入备注" clearable class="q-control" />
|
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<!-- 右栏 -->
|
<!-- 右栏 -->
|
||||||
<el-col :xs="24" :md="12">
|
<el-col :xs="24" :md="12">
|
||||||
<div class="query-field">
|
<div class="query-field">
|
||||||
<el-checkbox v-model="searchForm.jysEnabled" />
|
<span class="q-label no-check">简称</span>
|
||||||
<span class="q-label">教研室</span>
|
<el-input v-model="searchForm.jc" placeholder="请输入简称" clearable class="q-control" />
|
||||||
<el-select v-model="searchForm.jys" class="q-control" :disabled="!searchForm.jysEnabled">
|
|
||||||
<el-option v-for="item in jysOptions" :key="item" :label="item" :value="item" />
|
|
||||||
</el-select>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="query-field">
|
<div class="query-field">
|
||||||
<el-checkbox v-model="searchForm.pxccEnabled" />
|
<span class="q-label no-check">教研室代号</span>
|
||||||
<span class="q-label">培训层次</span>
|
<el-input v-model="searchForm.jysdh" placeholder="请输入教研室代号" clearable class="q-control" />
|
||||||
<el-select v-model="searchForm.pxcc" class="q-control" :disabled="!searchForm.pxccEnabled">
|
|
||||||
<el-option v-for="item in pxccOptions" :key="item" :label="item" :value="item" />
|
|
||||||
</el-select>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="query-field">
|
<div class="query-field">
|
||||||
<el-checkbox v-model="searchForm.pxlxEnabled" />
|
<span class="q-label no-check">培训类型</span>
|
||||||
<span class="q-label">培训类型</span>
|
<el-input v-model="searchForm.pxlx" placeholder="请输入培训类型" clearable class="q-control" />
|
||||||
<el-select v-model="searchForm.pxlx" class="q-control" :disabled="!searchForm.pxlxEnabled">
|
|
||||||
<el-option v-for="item in pxlxOptions" :key="item" :label="item" :value="item" />
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
<div class="query-field">
|
|
||||||
<el-checkbox v-model="searchForm.kclxEnabled" />
|
|
||||||
<span class="q-label">课程类型</span>
|
|
||||||
<el-select v-model="searchForm.kclx" class="q-control" :disabled="!searchForm.kclxEnabled">
|
|
||||||
<el-option v-for="item in kclxOptions" :key="item" :label="item" :value="item" />
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
<div class="query-field">
|
|
||||||
<el-checkbox v-model="searchForm.jsfsEnabled" />
|
|
||||||
<span class="q-label">建设方式</span>
|
|
||||||
<el-select v-model="searchForm.jsfs" class="q-control" :disabled="!searchForm.jsfsEnabled">
|
|
||||||
<el-option v-for="item in jsfsOptions" :key="item" :label="item" :value="item" />
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
<div class="query-field">
|
|
||||||
<el-checkbox v-model="searchForm.pjqkEnabled" />
|
|
||||||
<span class="q-label">评选情况</span>
|
|
||||||
<el-select v-model="searchForm.pjqk" class="q-control" :disabled="!searchForm.pjqkEnabled">
|
|
||||||
<el-option v-for="item in pjqkOptions" :key="item" :label="item" :value="item" />
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
<div class="query-field">
|
|
||||||
<el-checkbox v-model="searchForm.gljgEnabled" />
|
|
||||||
<span class="q-label">管理机构</span>
|
|
||||||
<el-select v-model="searchForm.gljg" class="q-control" :disabled="!searchForm.gljgEnabled">
|
|
||||||
<el-option v-for="item in gljgOptions" :key="item" :label="item" :value="item" />
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
<div class="query-field">
|
|
||||||
<el-checkbox v-model="searchForm.zyxzEnabled" />
|
|
||||||
<span class="q-label">在用选项</span>
|
|
||||||
<el-radio-group v-model="searchForm.zyxz" class="q-control" :disabled="!searchForm.zyxzEnabled">
|
|
||||||
<el-radio :label="'在用'">在用</el-radio>
|
|
||||||
<el-radio :label="'其他'">其他</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</div>
|
|
||||||
<div class="query-field">
|
|
||||||
<el-checkbox v-model="searchForm.bbxxEnabled" />
|
|
||||||
<span class="q-label">版本选项</span>
|
|
||||||
<el-radio-group v-model="searchForm.bbxx" class="q-control" :disabled="!searchForm.bbxxEnabled">
|
|
||||||
<el-radio :label="'最新版本'">最新版本</el-radio>
|
|
||||||
<el-radio :label="'存在多版本'">存在多版本</el-radio>
|
|
||||||
<el-radio :label="'全部版本'">全部版本</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</div>
|
|
||||||
<div class="query-field">
|
|
||||||
<el-checkbox v-model="searchForm.bmbhEnabled" />
|
|
||||||
<span class="q-label">别名包含规范名称</span>
|
|
||||||
<el-radio-group v-model="searchForm.bmbh" class="q-control" :disabled="!searchForm.bmbhEnabled">
|
|
||||||
<el-radio :label="'完全包含'">完全包含</el-radio>
|
|
||||||
<el-radio :label="'未完全包含'">未完全包含</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<div class="notice">注意:勾选"选择框"表示启用该项对应的查询条件,输入框非空表示启用查询条件。</div>
|
|
||||||
<div class="query-footer">
|
<div class="query-footer">
|
||||||
<el-button class="gray-btn" @click="handleQuery">查询</el-button>
|
<el-button class="gray-btn" @click="handleQuery">查询</el-button>
|
||||||
</div>
|
</div>
|
||||||
@@ -189,27 +76,26 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<!-- ==================== 5. 红色提示文字 ==================== -->
|
|
||||||
<div class="red-tip">
|
|
||||||
提示:课程体系按"课程-专题-课题"构建的,课程名称的命名格式为"课程名称\专题名称\课题名称"或"课程名称\课题名称"。
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- ==================== 6. 数据表格区域 ==================== -->
|
<!-- ==================== 6. 数据表格区域 ==================== -->
|
||||||
<el-card shadow="never" class="table-card">
|
<el-card shadow="never" class="table-card">
|
||||||
<el-table v-loading="loading" :data="tableData" stripe border highlight-current-row
|
<el-table v-loading="loading" :data="tableData" stripe border highlight-current-row
|
||||||
@selection-change="handleSelectionChange">
|
@selection-change="handleSelectionChange">
|
||||||
<el-table-column type="selection" width="40" align="center" />
|
<el-table-column type="selection" width="40" align="center" />
|
||||||
<el-table-column prop="manage" label="管理" width="70" align="center" />
|
<el-table-column prop="kbh" label="课编号" width="130" show-overflow-tooltip />
|
||||||
<el-table-column prop="code" label="编码" width="100" show-overflow-tooltip />
|
<el-table-column prop="kmc" label="课名称" width="200" show-overflow-tooltip />
|
||||||
<el-table-column prop="name" label="课程名称" min-width="130" show-overflow-tooltip />
|
<el-table-column prop="jc" label="简称" width="130" show-overflow-tooltip />
|
||||||
<el-table-column prop="cat" label="分类" width="100" align="center" />
|
<el-table-column prop="jysdh" label="教研室代号" width="150" show-overflow-tooltip />
|
||||||
<el-table-column prop="exam" label="考核类型方式" width="110" align="center" />
|
<el-table-column prop="kclx" label="课程类型" width="150" align="center" />
|
||||||
<el-table-column prop="inClass" label="课内学时" width="90" align="center" />
|
<el-table-column prop="pxlx" label="培训类型" width="150" align="center" />
|
||||||
<el-table-column prop="outClass" label="课外学时" width="90" align="center" />
|
<el-table-column prop="pxcc" label="培训层次" width="200" align="center" />
|
||||||
<el-table-column prop="other" label="其他" width="80" align="center" />
|
<el-table-column prop="xf" label="学分" align="center" />
|
||||||
<el-table-column prop="textbook" label="教材" min-width="120" show-overflow-tooltip />
|
<el-table-column prop="xs" label="学时" width="160" align="center" />
|
||||||
<el-table-column prop="majors" label="开设课程专业名称" min-width="150" show-overflow-tooltip />
|
<el-table-column label="操作" width="150" align="center" fixed="right">
|
||||||
<el-table-column prop="teacher" label="在职主讲教员" min-width="110" show-overflow-tooltip />
|
<template slot-scope="{ row }">
|
||||||
|
<el-button type="text" size="small" @click="handleEdit(row)">编辑</el-button>
|
||||||
|
<el-button type="text" size="small" class="text-danger" @click="handleDelete(row)">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<el-pagination
|
<el-pagination
|
||||||
@@ -228,119 +114,178 @@
|
|||||||
<el-dialog
|
<el-dialog
|
||||||
:visible="dialogVisible"
|
:visible="dialogVisible"
|
||||||
:title="dialogTitle"
|
:title="dialogTitle"
|
||||||
width="1100px"
|
width="1000px"
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
class="add-dialog"
|
class="add-dialog"
|
||||||
@update:visible="val => dialogVisible = val"
|
@update:visible="val => dialogVisible = val"
|
||||||
>
|
>
|
||||||
<el-form ref="addFormRef" :model="addForm" :rules="rules" label-width="120px" class="add-form" :status-icon="false">
|
<el-form ref="addFormRef" :model="addForm" :rules="rules" label-width="120px" class="add-form" :status-icon="false">
|
||||||
<el-row :gutter="24">
|
<el-row :gutter="24">
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
<el-form-item label="编号" prop="bh">
|
<el-form-item label="课编号" prop="kbh">
|
||||||
<el-input v-model="addForm.bh" placeholder="请输入编号" clearable />
|
<el-input v-model="addForm.kbh" :disabled="isEdit" placeholder="新增时留空自动生成" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
<el-form-item label="课标号" prop="kbh">
|
<el-form-item label="课名称" prop="kmc">
|
||||||
<el-input v-model="addForm.kbh" placeholder="请输入课标号" clearable />
|
<el-input v-model="addForm.kmc" placeholder="请输入课名称" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
<el-form-item label="课程名称" prop="mc">
|
<el-form-item label="简称" prop="jc">
|
||||||
<el-input v-model="addForm.mc" placeholder="请输入课程名称" clearable />
|
<el-input v-model="addForm.jc" placeholder="请输入简称" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
<el-form-item label="适用专业" prop="syzy">
|
<el-form-item label="教研室代号" prop="jysdh">
|
||||||
<el-input v-model="addForm.syzy" placeholder="请输入适用专业" clearable />
|
<el-input v-model="addForm.jysdh" placeholder="请输入教研室代号" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
<el-form-item label="课时数" prop="kcs">
|
<el-form-item label="学分" prop="xf">
|
||||||
<el-input-number v-model="addForm.kcs" :min="0" controls-position="right" class="w-full" />
|
<el-input-number v-model="addForm.xf" :min="0" :precision="1" controls-position="right" class="w-full" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
<el-form-item label="录入人编号" prop="zxrbh">
|
<el-form-item label="学时" prop="xs">
|
||||||
<el-input v-model="addForm.zxrbh" placeholder="请输入录入人编号" clearable />
|
<el-input-number v-model="addForm.xs" :min="0" controls-position="right" class="w-full" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
<el-form-item label="录入时间">
|
<el-form-item label="培训层次" prop="pxcc">
|
||||||
<el-input v-model="addForm.zxsj" placeholder="请输入录入时间" clearable />
|
<el-input v-model="addForm.pxcc" placeholder="请输入培训层次" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
<el-form-item label="正文">
|
<el-form-item label="培训类型" prop="pxlx">
|
||||||
<el-input v-model="addForm.zw" type="textarea" :rows="3" placeholder="请输入正文" />
|
<el-input v-model="addForm.pxlx" placeholder="请输入培训类型" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="课程类型" prop="kclx">
|
||||||
|
<el-input v-model="addForm.kclx" placeholder="请输入课程类型" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="考试课时" prop="ksks">
|
||||||
|
<el-input-number v-model="addForm.ksks" :min="0" controls-position="right" class="w-full" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="成绩分制" prop="cjfz">
|
||||||
|
<el-input v-model="addForm.cjfz" placeholder="请输入成绩分制" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="不计入学员平均分" prop="bjrxypjf">
|
||||||
|
<el-select v-model="addForm.bjrxypjf" class="w-full">
|
||||||
|
<el-option label="否" :value="0" />
|
||||||
|
<el-option label="是" :value="1" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="理论学时" prop="llxs">
|
||||||
|
<el-input-number v-model="addForm.llxs" :min="0" controls-position="right" class="w-full" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="实践学时" prop="sjxs">
|
||||||
|
<el-input-number v-model="addForm.sjxs" :min="0" controls-position="right" class="w-full" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="周课时" prop="zks">
|
||||||
|
<el-input-number v-model="addForm.zks" :min="0" controls-position="right" class="w-full" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="课类型" prop="klx">
|
||||||
|
<el-input v-model="addForm.klx" placeholder="请输入课类型" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="考试课时不显示" prop="ksksbxs">
|
||||||
|
<el-select v-model="addForm.ksksbxs" class="w-full">
|
||||||
|
<el-option label="否" :value="0" />
|
||||||
|
<el-option label="是" :value="1" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="课程统一编号" prop="kctybh">
|
||||||
|
<el-input v-model="addForm.kctybh" placeholder="请输入课程统一编号" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="辅导答疑课时" prop="fddyks">
|
||||||
|
<el-input-number v-model="addForm.fddyks" :min="0" controls-position="right" class="w-full" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="自修课时" prop="zxks">
|
||||||
|
<el-input-number v-model="addForm.zxks" :min="0" controls-position="right" class="w-full" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="修订日期" prop="xdrq">
|
||||||
|
<el-input v-model="addForm.xdrq" placeholder="如 2026-08-24" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="节次优选级" prop="jcyxj">
|
||||||
|
<el-input v-model="addForm.jcyxj" placeholder="请输入节次优选级" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="课程支持方式" prop="kczcfs">
|
||||||
|
<el-input v-model="addForm.kczcfs" placeholder="请输入课程支持方式" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="课程建设方式" prop="kcjsfs">
|
||||||
|
<el-input v-model="addForm.kcjsfs" placeholder="请输入课程建设方式" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="政治类课程" prop="zzlkc">
|
||||||
|
<el-select v-model="addForm.zzlkc" class="w-full">
|
||||||
|
<el-option label="否" :value="0" />
|
||||||
|
<el-option label="是" :value="1" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="考核方式" prop="khfs">
|
||||||
|
<el-input v-model="addForm.khfs" placeholder="请输入考核方式" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="形成性成绩分值" prop="xcxcjfz">
|
||||||
|
<el-input-number v-model="addForm.xcxcjfz" :min="0" controls-position="right" class="w-full" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="终结性成绩分值" prop="zjxcjfz">
|
||||||
|
<el-input-number v-model="addForm.zjxcjfz" :min="0" controls-position="right" class="w-full" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="密级" prop="mj">
|
||||||
|
<el-input v-model="addForm.mj" placeholder="请输入密级" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="8">
|
||||||
|
<el-form-item label="评选情况" prop="pxqk">
|
||||||
|
<el-input v-model="addForm.pxqk" placeholder="请输入评选情况" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :sm="24" :md="24">
|
||||||
<el-form-item label="备注">
|
<el-form-item label="备注">
|
||||||
<el-input v-model="addForm.bz" type="textarea" :rows="2" placeholder="请输入备注" />
|
<el-input v-model="addForm.bz" type="textarea" :rows="2" placeholder="请输入备注" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<div class="classroom-section">
|
|
||||||
<div class="classroom-header">
|
|
||||||
<span class="classroom-title">课堂列表</span>
|
|
||||||
<el-button type="primary" size="small" @click="handleAddClassroom">添加课堂</el-button>
|
|
||||||
</div>
|
|
||||||
<el-table :data="addForm.ktList" border size="small">
|
|
||||||
<el-table-column type="index" label="序号" width="60" align="center" />
|
|
||||||
<el-table-column label="课堂编号" width="140">
|
|
||||||
<template slot-scope="{ row }">
|
|
||||||
<el-input v-model="row.bh" placeholder="课堂编号" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="课堂次序" width="90">
|
|
||||||
<template slot-scope="{ row }">
|
|
||||||
<el-input-number v-model="row.ktjc" :min="1" controls-position="right" class="w-full" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="教学内容" min-width="150">
|
|
||||||
<template slot-scope="{ row }">
|
|
||||||
<el-input v-model="row.jxnr" placeholder="教学内容" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="教学要点" min-width="150">
|
|
||||||
<template slot-scope="{ row }">
|
|
||||||
<el-input v-model="row.jxyd" placeholder="教学要点" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="教学方法" min-width="150">
|
|
||||||
<template slot-scope="{ row }">
|
|
||||||
<el-input v-model="row.jxff" placeholder="教学方法" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="主讲教员数" width="100">
|
|
||||||
<template slot-scope="{ row }">
|
|
||||||
<el-input-number v-model="row.zjjys" :min="0" controls-position="right" class="w-full" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="辅讲教员数" width="100">
|
|
||||||
<template slot-scope="{ row }">
|
|
||||||
<el-input-number v-model="row.fjjys" :min="0" controls-position="right" class="w-full" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="教学目的" min-width="150">
|
|
||||||
<template slot-scope="{ row }">
|
|
||||||
<el-input v-model="row.jxmd" placeholder="教学目的" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="教学要求" min-width="150">
|
|
||||||
<template slot-scope="{ row }">
|
|
||||||
<el-input v-model="row.jxyq" placeholder="教学要求" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" width="80" align="center" fixed="right">
|
|
||||||
<template slot-scope="{ $index }">
|
|
||||||
<el-button type="text" class="text-danger" @click="handleDeleteClassroom($index)">删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
</div>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<div slot="footer">
|
<div slot="footer">
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
@@ -349,34 +294,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<!-- 撤回弹窗 -->
|
|
||||||
<el-dialog
|
|
||||||
:visible="withdrawDialogVisible"
|
|
||||||
title="撤回课程科目"
|
|
||||||
width="500px"
|
|
||||||
:close-on-click-modal="false"
|
|
||||||
@update:visible="val => withdrawDialogVisible = val"
|
|
||||||
>
|
|
||||||
<el-form :model="withdrawForm" label-width="100px">
|
|
||||||
<el-form-item label="课程编号">
|
|
||||||
<el-input v-model="withdrawForm.bh" disabled />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="撤回原因">
|
|
||||||
<el-input v-model="withdrawForm.chyy" type="textarea" :rows="4" placeholder="请输入撤回原因" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer">
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button @click="handleCancelWithdraw">取消</el-button>
|
|
||||||
<el-button type="primary" :loading="withdrawLoading" @click="handleWithdraw">确定撤回</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import { listSubject, addSubject, updateSubject, deleteSubject, getSubject } from '@/api/teachOffice/subject'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'SubjectIndex',
|
name: 'SubjectIndex',
|
||||||
data() {
|
data() {
|
||||||
@@ -384,68 +307,18 @@ export default {
|
|||||||
// ==================== 1. 顶部状态提示 ====================
|
// ==================== 1. 顶部状态提示 ====================
|
||||||
statusTip: '请输入查询条件',
|
statusTip: '请输入查询条件',
|
||||||
|
|
||||||
// ==================== 下拉选项 ====================
|
|
||||||
zcfsOptions: ['其他', '讲授', '研讨', '实操'],
|
|
||||||
khlxOptions: ['讲座', '考试', '考查', '实操'],
|
|
||||||
mmdjOptions: ['公开', '内部', '秘密', '机密'],
|
|
||||||
jysOptions: ['未确定教研室', '军事基础教研室', '政治工作教研室', '装备保障教研室'],
|
|
||||||
pxccOptions: ['无', '本科', '硕士', '博士'],
|
|
||||||
pxlxOptions: ['军官基础教育', '士兵职业教育', '研究生教育', '其他'],
|
|
||||||
kclxOptions: ['其他类', '公共基础', '专业基础', '专业核心'],
|
|
||||||
jsfsOptions: ['其他', '自建', '共建', '引进'],
|
|
||||||
pjqkOptions: ['无', '国家级', '军队级', '院校级'],
|
|
||||||
gljgOptions: ['教务处', '教研室1', '教研室2'],
|
|
||||||
|
|
||||||
// ==================== 2. 查询条件 ====================
|
// ==================== 2. 查询条件 ====================
|
||||||
searchForm: {
|
searchForm: {
|
||||||
kcbh: '',
|
kmc: '',
|
||||||
jc: '',
|
jc: '',
|
||||||
xfMin: '',
|
kmdm: '',
|
||||||
xfMax: '',
|
jysdh: '',
|
||||||
xsMin: '',
|
kclx: '',
|
||||||
xsMax: '',
|
pxlx: '',
|
||||||
zcfsEnabled: false,
|
pxcc: ''
|
||||||
zcfs: '其他',
|
|
||||||
khlxEnabled: false,
|
|
||||||
khlx: '讲座',
|
|
||||||
mmdj: '',
|
|
||||||
dgxzEnabled: false,
|
|
||||||
dgxz: '大纲课程',
|
|
||||||
zzglEnabled: false,
|
|
||||||
zzgl: '政治类',
|
|
||||||
bz: '',
|
|
||||||
jysEnabled: false,
|
|
||||||
jys: '未确定教研室',
|
|
||||||
pxccEnabled: false,
|
|
||||||
pxcc: '无',
|
|
||||||
pxlxEnabled: false,
|
|
||||||
pxlx: '军官基础教育',
|
|
||||||
kclxEnabled: false,
|
|
||||||
kclx: '其他类',
|
|
||||||
jsfsEnabled: false,
|
|
||||||
jsfs: '其他',
|
|
||||||
pjqkEnabled: false,
|
|
||||||
pjqk: '无',
|
|
||||||
gljgEnabled: false,
|
|
||||||
gljg: '教务处',
|
|
||||||
zyxzEnabled: true,
|
|
||||||
zyxz: '在用',
|
|
||||||
bbxxEnabled: true,
|
|
||||||
bbxx: '最新版本',
|
|
||||||
bmbhEnabled: false,
|
|
||||||
bmbh: '完全包含'
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// ==================== 列表数据 ====================
|
// ==================== 列表数据 ====================
|
||||||
/** 模拟列表数据(后端接口未提供) */
|
|
||||||
mockTableData: [
|
|
||||||
{ id: 1, manage: '编辑', code: 'KCB001', name: '高等数学', cat: '公共基础', exam: '考试', inClass: 48, outClass: 16, other: '—', textbook: '高等数学(上册)', majors: '炮兵装备运用/通信工程', teacher: '张三' },
|
|
||||||
{ id: 2, manage: '编辑', code: 'KCB002', name: '导弹发射原理', cat: '专业核心', exam: '考试', inClass: 40, outClass: 16, other: '—', textbook: '导弹发射原理', majors: '炮兵装备运用', teacher: '李四' },
|
|
||||||
{ id: 3, manage: '编辑', code: 'KCB003', name: '通信原理', cat: '专业核心', exam: '考试', inClass: 48, outClass: 16, other: '—', textbook: '通信原理', majors: '通信工程', teacher: '王五' },
|
|
||||||
{ id: 4, manage: '编辑', code: 'KCB004', name: '军事英语', cat: '公共基础', exam: '考查', inClass: 30, outClass: 8, other: '—', textbook: '军事英语教程', majors: '全军各专业', teacher: '赵六' },
|
|
||||||
{ id: 5, manage: '编辑', code: 'KCB005', name: '联合作战指挥', cat: '专业核心', exam: '综合考核', inClass: 40, outClass: 20, other: '—', textbook: '联合作战指挥', majors: '军事指挥', teacher: '孙七' },
|
|
||||||
{ id: 6, manage: '编辑', code: 'KCB006', name: '装备维修训练', cat: '实践环节', exam: '实操', inClass: 0, outClass: 48, other: '—', textbook: '装备维修手册', majors: '装备保障', teacher: '周八' }
|
|
||||||
],
|
|
||||||
loading: false,
|
loading: false,
|
||||||
tableData: [],
|
tableData: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
@@ -460,22 +333,34 @@ export default {
|
|||||||
// ==================== 新增/编辑弹窗 ====================
|
// ==================== 新增/编辑弹窗 ====================
|
||||||
dialogVisible: false,
|
dialogVisible: false,
|
||||||
addLoading: false,
|
addLoading: false,
|
||||||
editLoading: false,
|
|
||||||
isEdit: false,
|
isEdit: false,
|
||||||
addForm: this.createEmptyForm(),
|
addForm: this.createEmptyForm(),
|
||||||
rules: {
|
rules: {
|
||||||
bh: [{ required: true, message: '请输入编号', trigger: 'blur' }],
|
kmc: [{ required: true, message: '请输入课名称', trigger: 'blur' }],
|
||||||
kbh: [{ required: true, message: '请输入课标号', trigger: 'blur' }],
|
jysdh: [{ required: true, message: '请输入教研室代号', trigger: 'blur' }],
|
||||||
mc: [{ required: true, message: '请输入课程名称', trigger: 'blur' }],
|
xf: [{ required: true, message: '请输入学分', trigger: 'blur' }],
|
||||||
syzy: [{ required: true, message: '请输入适用专业', trigger: 'blur' }],
|
pxcc: [{ required: true, message: '请输入培训层次', trigger: 'blur' }],
|
||||||
kcs: [{ required: true, message: '请输入课时数', trigger: 'blur' }],
|
pxlx: [{ required: true, message: '请输入培训类型', trigger: 'blur' }],
|
||||||
zxrbh: [{ required: true, message: '请输入录入人编号', trigger: 'blur' }]
|
kclx: [{ required: true, message: '请输入课程类型', trigger: 'blur' }],
|
||||||
},
|
ksks: [{ required: true, message: '请输入考试课时', trigger: 'blur' }],
|
||||||
|
cjfz: [{ required: true, message: '请输入成绩分制', trigger: 'blur' }],
|
||||||
// ==================== 撤回弹窗 ====================
|
llxs: [{ required: true, message: '请输入理论学时', trigger: 'blur' }],
|
||||||
withdrawDialogVisible: false,
|
sjxs: [{ required: true, message: '请输入实践学时', trigger: 'blur' }],
|
||||||
withdrawLoading: false,
|
zks: [{ required: true, message: '请输入周课时', trigger: 'blur' }],
|
||||||
withdrawForm: { bh: '', chyy: '' }
|
klx: [{ required: true, message: '请输入课类型', trigger: 'blur' }],
|
||||||
|
kctybh: [{ required: true, message: '请输入课程统一编号', trigger: 'blur' }],
|
||||||
|
fddyks: [{ required: true, message: '请输入辅导答疑课时', trigger: 'blur' }],
|
||||||
|
zxks: [{ required: true, message: '请输入自修课时', trigger: 'blur' }],
|
||||||
|
xdrq: [{ required: true, message: '请输入修订日期', trigger: 'blur' }],
|
||||||
|
jcyxj: [{ required: true, message: '请输入节次优选级', trigger: 'blur' }],
|
||||||
|
kczcfs: [{ required: true, message: '请输入课程支持方式', trigger: 'blur' }],
|
||||||
|
kcjsfs: [{ required: true, message: '请输入课程建设方式', trigger: 'blur' }],
|
||||||
|
khfs: [{ required: true, message: '请输入考核方式', trigger: 'blur' }],
|
||||||
|
xcxcjfz: [{ required: true, message: '请输入形成性成绩分值', trigger: 'blur' }],
|
||||||
|
zjxcjfz: [{ required: true, message: '请输入终结性成绩分值', trigger: 'blur' }],
|
||||||
|
mj: [{ required: true, message: '请输入密级', trigger: 'blur' }],
|
||||||
|
pxqk: [{ required: true, message: '请输入评选情况', trigger: 'blur' }]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -486,54 +371,69 @@ export default {
|
|||||||
return (this.selectedFile && this.selectedFile.name) || '未选择任何文件'
|
return (this.selectedFile && this.selectedFile.name) || '未选择任何文件'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
|
||||||
// 初始化表单(保证 getCurrentTime 可用)
|
|
||||||
this.addForm = this.createEmptyForm()
|
|
||||||
},
|
|
||||||
mounted() {
|
mounted() {
|
||||||
this.fetchList()
|
this.fetchList()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// ==================== 表单辅助 ====================
|
/** 移除空值 */
|
||||||
getCurrentTime() {
|
cleanPayload(obj) {
|
||||||
return new Date().toLocaleString('zh-CN', { hour12: false }).replace(/\//g, '-')
|
const payload = {}
|
||||||
|
Object.keys(obj).forEach(key => {
|
||||||
|
const value = obj[key]
|
||||||
|
if (value !== '' && value !== null && value !== undefined) {
|
||||||
|
payload[key] = value
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return payload
|
||||||
},
|
},
|
||||||
|
|
||||||
/** 创建空白课程表单(含一条空课堂记录) */
|
/** 创建空白课程科目表单 */
|
||||||
createEmptyForm() {
|
createEmptyForm() {
|
||||||
return {
|
return {
|
||||||
bh: '', kbh: '', mc: '', syzy: '', kcs: 0, bz: '', zxrbh: '', zxsj: this.getCurrentTime(),
|
kbh: '', kmc: '', jysdh: '', bz: '', xh: '', xf: 0, jc: '', xs: 0,
|
||||||
zxzt: '0', sbzt: '0', sbsj: '', sbrbh: '', chyy: '', zw: '', jsonzd: '', ktList: [this.defaultClassroom()]
|
pxcc: '', pxlx: '', kclx: '', ksks: 0, py: '', gfmc: '', cjfz: '',
|
||||||
|
bjrxypjf: 0, jxglbmbh: '', llxs: 0, sjxs: 0, kmdm: '', zks: 0, klx: '',
|
||||||
|
ksksbxs: 0, kctybh: '', sydx: '', fddyks: 0, zxks: 0, bb: '', xdrq: '',
|
||||||
|
jcyxj: '', kczcfs: '', kcjsfs: '', jsonzd: '', zzlkc: 0, khfs: '',
|
||||||
|
xcxcjfz: 0, zjxcjfz: 0, mj: '', pxqk: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/** 默认课堂项 */
|
|
||||||
defaultClassroom() {
|
|
||||||
return { bh: '', ktjc: 1, jxnr: '', jxyd: '', jxff: '', zjjys: 0, fjjys: 0, bz: '', jxmd: '', jxyq: '' }
|
|
||||||
},
|
|
||||||
|
|
||||||
resetForm() {
|
resetForm() {
|
||||||
this.addForm = this.createEmptyForm()
|
this.addForm = this.createEmptyForm()
|
||||||
},
|
},
|
||||||
|
|
||||||
// ==================== 列表加载 ====================
|
// ==================== 列表加载 ====================
|
||||||
// TODO: 后端接口未提供,暂用模拟数据;接口就绪后替换为 getCourseTeachingList
|
buildQuery() {
|
||||||
|
return this.cleanPayload({
|
||||||
|
pageNum: this.pageNum,
|
||||||
|
pageSize: this.pageSize,
|
||||||
|
kmc: this.searchForm.kmc,
|
||||||
|
jc: this.searchForm.jc,
|
||||||
|
kmdm: this.searchForm.kmdm,
|
||||||
|
jysdh: this.searchForm.jysdh,
|
||||||
|
kclx: this.searchForm.kclx,
|
||||||
|
pxlx: this.searchForm.pxlx,
|
||||||
|
pxcc: this.searchForm.pxcc
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
fetchList() {
|
fetchList() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
setTimeout(() => {
|
listSubject(this.buildQuery())
|
||||||
this.tableData = [...this.mockTableData]
|
.then(res => {
|
||||||
this.total = this.mockTableData.length
|
const data = (res && res.data) || {}
|
||||||
this.loading = false
|
this.tableData = data.records || []
|
||||||
}, 200)
|
this.total = data.total || 0
|
||||||
|
this.statusTip = `共检索到 ${this.total} 条记录`
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
this.loading = false
|
||||||
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// ==================== 查询 ====================
|
// ==================== 查询 ====================
|
||||||
handleQuery() {
|
handleQuery() {
|
||||||
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')
|
|
||||||
this.statusTip = `[${hh}:${mm}:${ss}]查询成功!共检索到${this.total || 982}条记录。`
|
|
||||||
this.pageNum = 1
|
this.pageNum = 1
|
||||||
this.fetchList()
|
this.fetchList()
|
||||||
},
|
},
|
||||||
@@ -557,36 +457,54 @@ export default {
|
|||||||
this.$message.warning('请先选择要删除的记录')
|
this.$message.warning('请先选择要删除的记录')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const ids = this.selectedRows.map((r) => r.id)
|
const kbhList = this.selectedRows.map(r => r.kbh)
|
||||||
this.tableData = this.tableData.filter((r) => ids.indexOf(r.id) === -1)
|
this.$confirm(`确定删除所选 ${kbhList.length} 条课程科目吗?`, '提示', {
|
||||||
this.total = this.tableData.length
|
confirmButtonText: '确定',
|
||||||
this.$message.success(`已删除所选 ${ids.length} 条记录(前端模拟)`)
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
}).then(() => {
|
||||||
|
const tasks = kbhList.map(kbh => deleteSubject(kbh))
|
||||||
|
Promise.all(tasks)
|
||||||
|
.then(() => {
|
||||||
|
this.$message.success(`已删除 ${kbhList.length} 条记录`)
|
||||||
|
this.fetchList()
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
this.$message.error('删除失败')
|
||||||
|
})
|
||||||
|
}).catch(() => {})
|
||||||
},
|
},
|
||||||
|
|
||||||
// ==================== 下载 ====================
|
/** 单条删除 */
|
||||||
downloadBlob(content, filename) {
|
handleDelete(row) {
|
||||||
const blob = new Blob(['\ufeff' + content], { type: 'text/plain;charset=utf-8;' })
|
this.$confirm(`确定删除课程科目「${row.kmc || row.kbh}」吗?`, '提示', {
|
||||||
const link = document.createElement('a')
|
confirmButtonText: '确定',
|
||||||
link.href = URL.createObjectURL(blob)
|
cancelButtonText: '取消',
|
||||||
link.download = filename
|
type: 'warning'
|
||||||
link.click()
|
}).then(() => {
|
||||||
URL.revokeObjectURL(link.href)
|
return deleteSubject(row.kbh)
|
||||||
|
}).then(() => {
|
||||||
|
this.$message.success('删除成功')
|
||||||
|
this.fetchList()
|
||||||
|
}).catch((err) => {
|
||||||
|
if (err && err !== 'cancel') {
|
||||||
|
this.$message.error('删除失败')
|
||||||
|
}
|
||||||
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// ==================== 下载(后端暂未提供) ====================
|
||||||
handleDownloadCourse() {
|
handleDownloadCourse() {
|
||||||
this.downloadBlob('编码,课程名称,分类,考核类型方式,课内学时,课外学时\n', '课程科目基本信息.txt')
|
this.$message.warning('后端暂未提供该接口')
|
||||||
this.$message.success('课程科目基本信息已下载(前端模拟)')
|
|
||||||
},
|
},
|
||||||
handleDownloadTextbook() {
|
handleDownloadTextbook() {
|
||||||
this.downloadBlob('课程名称,教材,在职主讲教员\n', '课程教材基本信息.txt')
|
this.$message.warning('后端暂未提供该接口')
|
||||||
this.$message.success('课程教材基本信息已下载(前端模拟)')
|
|
||||||
},
|
},
|
||||||
handleDownloadTemplate() {
|
handleDownloadTemplate() {
|
||||||
this.downloadBlob('编码,课程名称,分类,考核类型方式,课内学时,课外学时,教材,开设课程专业名称,在职主讲教员\n', '课程科目数据文件模板.txt')
|
this.$message.warning('后端暂未提供该接口')
|
||||||
this.$message.success('【课程科目数据文件模板】已下载(前端模拟)')
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// ==================== 文件上传 ====================
|
// ==================== 文件上传(后端暂未提供) ====================
|
||||||
handleSelectFile() {
|
handleSelectFile() {
|
||||||
this.$refs.fileInputRef && this.$refs.fileInputRef.click()
|
this.$refs.fileInputRef && this.$refs.fileInputRef.click()
|
||||||
},
|
},
|
||||||
@@ -597,11 +515,7 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
handleUpload() {
|
handleUpload() {
|
||||||
if (!this.selectedFile) {
|
this.$message.warning('后端暂未提供该接口')
|
||||||
this.$message.warning('请先选择文件')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.$message.success(`文件「${this.selectedFile.name}」上传成功(前端模拟)`)
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// ==================== 新增/编辑弹窗 ====================
|
// ==================== 新增/编辑弹窗 ====================
|
||||||
@@ -611,49 +525,40 @@ export default {
|
|||||||
this.dialogVisible = true
|
this.dialogVisible = true
|
||||||
},
|
},
|
||||||
|
|
||||||
handleAddClassroom() {
|
handleEdit(row) {
|
||||||
this.addForm.ktList.push(this.defaultClassroom())
|
this.addLoading = true
|
||||||
},
|
getKb(row.kbh)
|
||||||
handleDeleteClassroom(index) {
|
.then(res => {
|
||||||
this.addForm.ktList.splice(index, 1)
|
const data = (res && res.data) || row
|
||||||
|
this.isEdit = true
|
||||||
|
this.addForm = Object.assign(this.createEmptyForm(), data)
|
||||||
|
this.dialogVisible = true
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
this.addLoading = false
|
||||||
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// TODO: 后端接口未提供,保存成功后刷新列表为前端模拟;接口就绪后替换为 addCourseTeaching/updateCourseTeaching
|
|
||||||
handleSubmit() {
|
handleSubmit() {
|
||||||
this.$refs.addFormRef.validate((valid) => {
|
this.$refs.addFormRef.validate((valid) => {
|
||||||
if (!valid) return
|
if (!valid) return
|
||||||
this.addLoading = true
|
this.addLoading = true
|
||||||
setTimeout(() => {
|
const payload = this.cleanPayload({ ...this.addForm })
|
||||||
this.$message.success(this.isEdit ? '修改成功' : '保存成功')
|
const requestFn = this.isEdit ? updateSubject : addSubject
|
||||||
this.dialogVisible = false
|
requestFn(payload)
|
||||||
this.fetchList()
|
.then(() => {
|
||||||
this.addLoading = false
|
this.$message.success(this.isEdit ? '修改成功' : '保存成功')
|
||||||
}, 300)
|
this.dialogVisible = false
|
||||||
|
this.fetchList()
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
this.addLoading = false
|
||||||
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
handleCancel() {
|
handleCancel() {
|
||||||
this.dialogVisible = false
|
this.dialogVisible = false
|
||||||
},
|
|
||||||
|
|
||||||
// ==================== 撤回弹窗 ====================
|
|
||||||
// TODO: 后端接口未提供,撤回为前端模拟;接口就绪后替换为 deleteCourseTeaching
|
|
||||||
handleWithdraw() {
|
|
||||||
if (!this.withdrawForm.chyy.trim()) {
|
|
||||||
this.$message.warning('请输入撤回原因')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.withdrawLoading = true
|
|
||||||
setTimeout(() => {
|
|
||||||
this.$message.success('撤回成功')
|
|
||||||
this.withdrawDialogVisible = false
|
|
||||||
this.fetchList()
|
|
||||||
this.withdrawLoading = false
|
|
||||||
}, 300)
|
|
||||||
},
|
|
||||||
|
|
||||||
handleCancelWithdraw() {
|
|
||||||
this.withdrawDialogVisible = false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -708,22 +613,6 @@ export default {
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.range-control {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 6px;
|
|
||||||
|
|
||||||
.el-input {
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.range-sep {
|
|
||||||
flex-shrink: 0;
|
|
||||||
font-size: 12px;
|
|
||||||
color: #606266;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.notice {
|
.notice {
|
||||||
@@ -811,6 +700,10 @@ export default {
|
|||||||
::v-deep(.el-table .cell) {
|
::v-deep(.el-table .cell) {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.text-danger {
|
||||||
|
color: #f56c6c;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== 新增/编辑弹窗 ====================
|
// ==================== 新增/编辑弹窗 ====================
|
||||||
@@ -825,29 +718,6 @@ export default {
|
|||||||
.w-full {
|
.w-full {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.classroom-section {
|
|
||||||
margin-top: 16px;
|
|
||||||
|
|
||||||
.classroom-header {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
|
|
||||||
.classroom-title {
|
|
||||||
font-size: 15px;
|
|
||||||
font-weight: 600;
|
|
||||||
color: #303133;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 课堂列表删除按钮红色文字
|
|
||||||
.text-danger {
|
|
||||||
color: #f56c6c;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-footer {
|
.dialog-footer {
|
||||||
@@ -872,4 +742,4 @@ export default {
|
|||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
Reference in New Issue
Block a user