样式
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 { listStudentTeamTask } from '@/api/teachBusiness/studentTeamTask'
|
||||
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 { listAllSemester } from '@/api/teachBusiness/semester'
|
||||
|
||||
@@ -516,7 +516,7 @@ export default {
|
||||
})
|
||||
},
|
||||
loadKbMap() {
|
||||
listKb({ pageNum: 1, pageSize: 1000 }).then(response => {
|
||||
listSubject({ pageNum: 1, pageSize: 1000 }).then(response => {
|
||||
const data = response.data || {}
|
||||
const map = {}
|
||||
;(data.records || []).forEach(item => {
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
<template>
|
||||
<div class="app-container subject-page">
|
||||
<!-- ==================== 1. 顶部状态提示 ==================== -->
|
||||
<div class="status-tip">{{ statusTip }}</div>
|
||||
|
||||
<!-- ==================== 2. 查询条件区域 ==================== -->
|
||||
<el-card shadow="never" class="search-card">
|
||||
@@ -10,152 +8,41 @@
|
||||
<!-- 左栏 -->
|
||||
<el-col :xs="24" :md="12">
|
||||
<div class="query-field">
|
||||
<span class="q-label no-check">课程别名</span>
|
||||
<el-input v-model="searchForm.kcbh" placeholder="请输入课程别名" clearable class="q-control" />
|
||||
<span class="q-label no-check">课名称</span>
|
||||
<el-input v-model="searchForm.kmc" placeholder="请输入课名称" clearable class="q-control" />
|
||||
</div>
|
||||
<div class="query-field">
|
||||
<span class="q-label no-check">简称</span>
|
||||
<el-input v-model="searchForm.jc" placeholder="请输入简称" clearable class="q-control" />
|
||||
<span class="q-label no-check">科目代码</span>
|
||||
<el-input v-model="searchForm.kmdm" placeholder="请输入科目代码" clearable class="q-control" />
|
||||
</div>
|
||||
<div class="query-field">
|
||||
<span class="q-label no-check">学分</span>
|
||||
<div class="q-control range-control">
|
||||
<el-input v-model="searchForm.xfMin" placeholder="0" />
|
||||
<span class="range-sep">至</span>
|
||||
<el-input v-model="searchForm.xfMax" placeholder="0" />
|
||||
</div>
|
||||
<span class="q-label no-check">培训层次</span>
|
||||
<el-input v-model="searchForm.pxcc" placeholder="请输入培训层次" clearable class="q-control" />
|
||||
</div>
|
||||
<div class="query-field">
|
||||
<span class="q-label no-check">学时</span>
|
||||
<div class="q-control range-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" />
|
||||
<span class="q-label no-check">课程类型</span>
|
||||
<el-input v-model="searchForm.kclx" placeholder="请输入课程类型" clearable class="q-control" />
|
||||
</div>
|
||||
</el-col>
|
||||
|
||||
<!-- 右栏 -->
|
||||
<el-col :xs="24" :md="12">
|
||||
<div class="query-field">
|
||||
<el-checkbox v-model="searchForm.jysEnabled" />
|
||||
<span class="q-label">教研室</span>
|
||||
<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>
|
||||
<span class="q-label no-check">简称</span>
|
||||
<el-input v-model="searchForm.jc" placeholder="请输入简称" clearable class="q-control" />
|
||||
</div>
|
||||
<div class="query-field">
|
||||
<el-checkbox v-model="searchForm.pxccEnabled" />
|
||||
<span class="q-label">培训层次</span>
|
||||
<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>
|
||||
<span class="q-label no-check">教研室代号</span>
|
||||
<el-input v-model="searchForm.jysdh" placeholder="请输入教研室代号" clearable class="q-control" />
|
||||
</div>
|
||||
<div class="query-field">
|
||||
<el-checkbox v-model="searchForm.pxlxEnabled" />
|
||||
<span class="q-label">培训类型</span>
|
||||
<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>
|
||||
<span class="q-label no-check">培训类型</span>
|
||||
<el-input v-model="searchForm.pxlx" placeholder="请输入培训类型" clearable class="q-control" />
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<div class="notice">注意:勾选"选择框"表示启用该项对应的查询条件,输入框非空表示启用查询条件。</div>
|
||||
<div class="query-footer">
|
||||
<el-button class="gray-btn" @click="handleQuery">查询</el-button>
|
||||
</div>
|
||||
@@ -189,27 +76,26 @@
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<!-- ==================== 5. 红色提示文字 ==================== -->
|
||||
<div class="red-tip">
|
||||
提示:课程体系按"课程-专题-课题"构建的,课程名称的命名格式为"课程名称\专题名称\课题名称"或"课程名称\课题名称"。
|
||||
</div>
|
||||
|
||||
<!-- ==================== 6. 数据表格区域 ==================== -->
|
||||
<el-card shadow="never" class="table-card">
|
||||
<el-table v-loading="loading" :data="tableData" stripe border highlight-current-row
|
||||
@selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="40" align="center" />
|
||||
<el-table-column prop="manage" label="管理" width="70" align="center" />
|
||||
<el-table-column prop="code" label="编码" width="100" show-overflow-tooltip />
|
||||
<el-table-column prop="name" label="课程名称" min-width="130" show-overflow-tooltip />
|
||||
<el-table-column prop="cat" label="分类" width="100" align="center" />
|
||||
<el-table-column prop="exam" label="考核类型方式" width="110" align="center" />
|
||||
<el-table-column prop="inClass" label="课内学时" width="90" align="center" />
|
||||
<el-table-column prop="outClass" label="课外学时" width="90" align="center" />
|
||||
<el-table-column prop="other" label="其他" width="80" align="center" />
|
||||
<el-table-column prop="textbook" label="教材" min-width="120" show-overflow-tooltip />
|
||||
<el-table-column prop="majors" label="开设课程专业名称" min-width="150" show-overflow-tooltip />
|
||||
<el-table-column prop="teacher" label="在职主讲教员" min-width="110" show-overflow-tooltip />
|
||||
<el-table-column prop="kbh" label="课编号" width="130" show-overflow-tooltip />
|
||||
<el-table-column prop="kmc" label="课名称" width="200" show-overflow-tooltip />
|
||||
<el-table-column prop="jc" label="简称" width="130" show-overflow-tooltip />
|
||||
<el-table-column prop="jysdh" label="教研室代号" width="150" show-overflow-tooltip />
|
||||
<el-table-column prop="kclx" label="课程类型" width="150" align="center" />
|
||||
<el-table-column prop="pxlx" label="培训类型" width="150" align="center" />
|
||||
<el-table-column prop="pxcc" label="培训层次" width="200" align="center" />
|
||||
<el-table-column prop="xf" label="学分" align="center" />
|
||||
<el-table-column prop="xs" label="学时" width="160" align="center" />
|
||||
<el-table-column label="操作" width="150" align="center" fixed="right">
|
||||
<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-pagination
|
||||
@@ -228,119 +114,178 @@
|
||||
<el-dialog
|
||||
:visible="dialogVisible"
|
||||
:title="dialogTitle"
|
||||
width="1100px"
|
||||
width="1000px"
|
||||
:close-on-click-modal="false"
|
||||
class="add-dialog"
|
||||
@update:visible="val => dialogVisible = val"
|
||||
>
|
||||
<el-form ref="addFormRef" :model="addForm" :rules="rules" label-width="120px" class="add-form" :status-icon="false">
|
||||
<el-row :gutter="24">
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
||||
<el-form-item label="编号" prop="bh">
|
||||
<el-input v-model="addForm.bh" placeholder="请输入编号" clearable />
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="课编号" prop="kbh">
|
||||
<el-input v-model="addForm.kbh" :disabled="isEdit" placeholder="新增时留空自动生成" clearable />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
||||
<el-form-item label="课标号" prop="kbh">
|
||||
<el-input v-model="addForm.kbh" placeholder="请输入课标号" clearable />
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="课名称" prop="kmc">
|
||||
<el-input v-model="addForm.kmc" placeholder="请输入课名称" clearable />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
||||
<el-form-item label="课程名称" prop="mc">
|
||||
<el-input v-model="addForm.mc" placeholder="请输入课程名称" clearable />
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="简称" prop="jc">
|
||||
<el-input v-model="addForm.jc" placeholder="请输入简称" clearable />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
||||
<el-form-item label="适用专业" prop="syzy">
|
||||
<el-input v-model="addForm.syzy" placeholder="请输入适用专业" clearable />
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="教研室代号" prop="jysdh">
|
||||
<el-input v-model="addForm.jysdh" placeholder="请输入教研室代号" clearable />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
||||
<el-form-item label="课时数" prop="kcs">
|
||||
<el-input-number v-model="addForm.kcs" :min="0" controls-position="right" class="w-full" />
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="学分" prop="xf">
|
||||
<el-input-number v-model="addForm.xf" :min="0" :precision="1" controls-position="right" class="w-full" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
||||
<el-form-item label="录入人编号" prop="zxrbh">
|
||||
<el-input v-model="addForm.zxrbh" placeholder="请输入录入人编号" clearable />
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="学时" prop="xs">
|
||||
<el-input-number v-model="addForm.xs" :min="0" controls-position="right" class="w-full" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
|
||||
<el-form-item label="录入时间">
|
||||
<el-input v-model="addForm.zxsj" placeholder="请输入录入时间" clearable />
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="培训层次" prop="pxcc">
|
||||
<el-input v-model="addForm.pxcc" placeholder="请输入培训层次" clearable />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
||||
<el-form-item label="正文">
|
||||
<el-input v-model="addForm.zw" type="textarea" :rows="3" placeholder="请输入正文" />
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="培训类型" prop="pxlx">
|
||||
<el-input v-model="addForm.pxlx" placeholder="请输入培训类型" clearable />
|
||||
</el-form-item>
|
||||
</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-input v-model="addForm.bz" type="textarea" :rows="2" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</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>
|
||||
<div slot="footer">
|
||||
<div class="dialog-footer">
|
||||
@@ -349,34 +294,12 @@
|
||||
</div>
|
||||
</div>
|
||||
</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>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listSubject, addSubject, updateSubject, deleteSubject, getSubject } from '@/api/teachOffice/subject'
|
||||
|
||||
export default {
|
||||
name: 'SubjectIndex',
|
||||
data() {
|
||||
@@ -384,68 +307,18 @@ export default {
|
||||
// ==================== 1. 顶部状态提示 ====================
|
||||
statusTip: '请输入查询条件',
|
||||
|
||||
// ==================== 下拉选项 ====================
|
||||
zcfsOptions: ['其他', '讲授', '研讨', '实操'],
|
||||
khlxOptions: ['讲座', '考试', '考查', '实操'],
|
||||
mmdjOptions: ['公开', '内部', '秘密', '机密'],
|
||||
jysOptions: ['未确定教研室', '军事基础教研室', '政治工作教研室', '装备保障教研室'],
|
||||
pxccOptions: ['无', '本科', '硕士', '博士'],
|
||||
pxlxOptions: ['军官基础教育', '士兵职业教育', '研究生教育', '其他'],
|
||||
kclxOptions: ['其他类', '公共基础', '专业基础', '专业核心'],
|
||||
jsfsOptions: ['其他', '自建', '共建', '引进'],
|
||||
pjqkOptions: ['无', '国家级', '军队级', '院校级'],
|
||||
gljgOptions: ['教务处', '教研室1', '教研室2'],
|
||||
|
||||
// ==================== 2. 查询条件 ====================
|
||||
searchForm: {
|
||||
kcbh: '',
|
||||
kmc: '',
|
||||
jc: '',
|
||||
xfMin: '',
|
||||
xfMax: '',
|
||||
xsMin: '',
|
||||
xsMax: '',
|
||||
zcfsEnabled: false,
|
||||
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: '完全包含'
|
||||
kmdm: '',
|
||||
jysdh: '',
|
||||
kclx: '',
|
||||
pxlx: '',
|
||||
pxcc: ''
|
||||
},
|
||||
|
||||
// ==================== 列表数据 ====================
|
||||
/** 模拟列表数据(后端接口未提供) */
|
||||
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,
|
||||
tableData: [],
|
||||
total: 0,
|
||||
@@ -460,22 +333,34 @@ export default {
|
||||
// ==================== 新增/编辑弹窗 ====================
|
||||
dialogVisible: false,
|
||||
addLoading: false,
|
||||
editLoading: false,
|
||||
isEdit: false,
|
||||
addForm: this.createEmptyForm(),
|
||||
rules: {
|
||||
bh: [{ required: true, message: '请输入编号', trigger: 'blur' }],
|
||||
kbh: [{ required: true, message: '请输入课标号', trigger: 'blur' }],
|
||||
mc: [{ required: true, message: '请输入课程名称', trigger: 'blur' }],
|
||||
syzy: [{ required: true, message: '请输入适用专业', trigger: 'blur' }],
|
||||
kcs: [{ required: true, message: '请输入课时数', trigger: 'blur' }],
|
||||
zxrbh: [{ required: true, message: '请输入录入人编号', trigger: 'blur' }]
|
||||
},
|
||||
|
||||
// ==================== 撤回弹窗 ====================
|
||||
withdrawDialogVisible: false,
|
||||
withdrawLoading: false,
|
||||
withdrawForm: { bh: '', chyy: '' }
|
||||
kmc: [{ required: true, message: '请输入课名称', trigger: 'blur' }],
|
||||
jysdh: [{ required: true, message: '请输入教研室代号', trigger: 'blur' }],
|
||||
xf: [{ required: true, message: '请输入学分', trigger: 'blur' }],
|
||||
pxcc: [{ required: true, message: '请输入培训层次', trigger: 'blur' }],
|
||||
pxlx: [{ 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' }],
|
||||
sjxs: [{ required: true, message: '请输入实践学时', trigger: 'blur' }],
|
||||
zks: [{ required: true, message: '请输入周课时', trigger: 'blur' }],
|
||||
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: {
|
||||
@@ -486,54 +371,69 @@ export default {
|
||||
return (this.selectedFile && this.selectedFile.name) || '未选择任何文件'
|
||||
}
|
||||
},
|
||||
created() {
|
||||
// 初始化表单(保证 getCurrentTime 可用)
|
||||
this.addForm = this.createEmptyForm()
|
||||
},
|
||||
mounted() {
|
||||
this.fetchList()
|
||||
},
|
||||
methods: {
|
||||
// ==================== 表单辅助 ====================
|
||||
getCurrentTime() {
|
||||
return new Date().toLocaleString('zh-CN', { hour12: false }).replace(/\//g, '-')
|
||||
/** 移除空值 */
|
||||
cleanPayload(obj) {
|
||||
const payload = {}
|
||||
Object.keys(obj).forEach(key => {
|
||||
const value = obj[key]
|
||||
if (value !== '' && value !== null && value !== undefined) {
|
||||
payload[key] = value
|
||||
}
|
||||
})
|
||||
return payload
|
||||
},
|
||||
|
||||
/** 创建空白课程表单(含一条空课堂记录) */
|
||||
/** 创建空白课程科目表单 */
|
||||
createEmptyForm() {
|
||||
return {
|
||||
bh: '', kbh: '', mc: '', syzy: '', kcs: 0, bz: '', zxrbh: '', zxsj: this.getCurrentTime(),
|
||||
zxzt: '0', sbzt: '0', sbsj: '', sbrbh: '', chyy: '', zw: '', jsonzd: '', ktList: [this.defaultClassroom()]
|
||||
kbh: '', kmc: '', jysdh: '', bz: '', xh: '', xf: 0, jc: '', xs: 0,
|
||||
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() {
|
||||
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() {
|
||||
this.loading = true
|
||||
setTimeout(() => {
|
||||
this.tableData = [...this.mockTableData]
|
||||
this.total = this.mockTableData.length
|
||||
this.loading = false
|
||||
}, 200)
|
||||
listSubject(this.buildQuery())
|
||||
.then(res => {
|
||||
const data = (res && res.data) || {}
|
||||
this.tableData = data.records || []
|
||||
this.total = data.total || 0
|
||||
this.statusTip = `共检索到 ${this.total} 条记录`
|
||||
})
|
||||
.finally(() => {
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
|
||||
// ==================== 查询 ====================
|
||||
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.fetchList()
|
||||
},
|
||||
@@ -557,36 +457,54 @@ export default {
|
||||
this.$message.warning('请先选择要删除的记录')
|
||||
return
|
||||
}
|
||||
const ids = this.selectedRows.map((r) => r.id)
|
||||
this.tableData = this.tableData.filter((r) => ids.indexOf(r.id) === -1)
|
||||
this.total = this.tableData.length
|
||||
this.$message.success(`已删除所选 ${ids.length} 条记录(前端模拟)`)
|
||||
const kbhList = this.selectedRows.map(r => r.kbh)
|
||||
this.$confirm(`确定删除所选 ${kbhList.length} 条课程科目吗?`, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
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) {
|
||||
const blob = new Blob(['\ufeff' + content], { type: 'text/plain;charset=utf-8;' })
|
||||
const link = document.createElement('a')
|
||||
link.href = URL.createObjectURL(blob)
|
||||
link.download = filename
|
||||
link.click()
|
||||
URL.revokeObjectURL(link.href)
|
||||
/** 单条删除 */
|
||||
handleDelete(row) {
|
||||
this.$confirm(`确定删除课程科目「${row.kmc || row.kbh}」吗?`, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
return deleteSubject(row.kbh)
|
||||
}).then(() => {
|
||||
this.$message.success('删除成功')
|
||||
this.fetchList()
|
||||
}).catch((err) => {
|
||||
if (err && err !== 'cancel') {
|
||||
this.$message.error('删除失败')
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// ==================== 下载(后端暂未提供) ====================
|
||||
handleDownloadCourse() {
|
||||
this.downloadBlob('编码,课程名称,分类,考核类型方式,课内学时,课外学时\n', '课程科目基本信息.txt')
|
||||
this.$message.success('课程科目基本信息已下载(前端模拟)')
|
||||
this.$message.warning('后端暂未提供该接口')
|
||||
},
|
||||
handleDownloadTextbook() {
|
||||
this.downloadBlob('课程名称,教材,在职主讲教员\n', '课程教材基本信息.txt')
|
||||
this.$message.success('课程教材基本信息已下载(前端模拟)')
|
||||
this.$message.warning('后端暂未提供该接口')
|
||||
},
|
||||
handleDownloadTemplate() {
|
||||
this.downloadBlob('编码,课程名称,分类,考核类型方式,课内学时,课外学时,教材,开设课程专业名称,在职主讲教员\n', '课程科目数据文件模板.txt')
|
||||
this.$message.success('【课程科目数据文件模板】已下载(前端模拟)')
|
||||
this.$message.warning('后端暂未提供该接口')
|
||||
},
|
||||
|
||||
// ==================== 文件上传 ====================
|
||||
// ==================== 文件上传(后端暂未提供) ====================
|
||||
handleSelectFile() {
|
||||
this.$refs.fileInputRef && this.$refs.fileInputRef.click()
|
||||
},
|
||||
@@ -597,11 +515,7 @@ export default {
|
||||
},
|
||||
|
||||
handleUpload() {
|
||||
if (!this.selectedFile) {
|
||||
this.$message.warning('请先选择文件')
|
||||
return
|
||||
}
|
||||
this.$message.success(`文件「${this.selectedFile.name}」上传成功(前端模拟)`)
|
||||
this.$message.warning('后端暂未提供该接口')
|
||||
},
|
||||
|
||||
// ==================== 新增/编辑弹窗 ====================
|
||||
@@ -611,49 +525,40 @@ export default {
|
||||
this.dialogVisible = true
|
||||
},
|
||||
|
||||
handleAddClassroom() {
|
||||
this.addForm.ktList.push(this.defaultClassroom())
|
||||
},
|
||||
handleDeleteClassroom(index) {
|
||||
this.addForm.ktList.splice(index, 1)
|
||||
handleEdit(row) {
|
||||
this.addLoading = true
|
||||
getKb(row.kbh)
|
||||
.then(res => {
|
||||
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() {
|
||||
this.$refs.addFormRef.validate((valid) => {
|
||||
if (!valid) return
|
||||
this.addLoading = true
|
||||
setTimeout(() => {
|
||||
this.$message.success(this.isEdit ? '修改成功' : '保存成功')
|
||||
this.dialogVisible = false
|
||||
this.fetchList()
|
||||
this.addLoading = false
|
||||
}, 300)
|
||||
const payload = this.cleanPayload({ ...this.addForm })
|
||||
const requestFn = this.isEdit ? updateSubject : addSubject
|
||||
requestFn(payload)
|
||||
.then(() => {
|
||||
this.$message.success(this.isEdit ? '修改成功' : '保存成功')
|
||||
this.dialogVisible = false
|
||||
this.fetchList()
|
||||
})
|
||||
.finally(() => {
|
||||
this.addLoading = false
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
handleCancel() {
|
||||
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;
|
||||
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 {
|
||||
@@ -811,6 +700,10 @@ export default {
|
||||
::v-deep(.el-table .cell) {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.text-danger {
|
||||
color: #f56c6c;
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== 新增/编辑弹窗 ====================
|
||||
@@ -825,29 +718,6 @@ export default {
|
||||
.w-full {
|
||||
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 {
|
||||
@@ -872,4 +742,4 @@ export default {
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
Reference in New Issue
Block a user