forked from liweijie/education
727 lines
28 KiB
Vue
727 lines
28 KiB
Vue
<template>
|
||
<div class="app-container major-page">
|
||
<!-- ==================== 1. 查询条件 ==================== -->
|
||
<el-card shadow="never" class="search-card">
|
||
<el-form ref="searchFormRef" :model="searchForm" label-width="140px" class="search-form">
|
||
<el-row :gutter="24">
|
||
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
|
||
<el-form-item label="专业名称">
|
||
<el-input v-model="searchForm.zymc" placeholder="请输入专业名称" clearable @keyup.enter.native="handleSearch" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
|
||
<el-form-item label="专业方向">
|
||
<el-input v-model="searchForm.zyfx" placeholder="请输入专业方向" clearable @keyup.enter.native="handleSearch" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
|
||
<el-form-item label="专业代码">
|
||
<el-input v-model="searchForm.zydm" placeholder="请输入专业代码" clearable @keyup.enter.native="handleSearch" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
|
||
<el-form-item label="学年制">
|
||
<el-input v-model="searchForm.xnz" placeholder="请输入学年制" clearable @keyup.enter.native="handleSearch" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
|
||
<el-form-item label="培训类型">
|
||
<el-input v-model="searchForm.pxlx" placeholder="请输入培训类型" clearable @keyup.enter.native="handleSearch" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
|
||
<el-form-item label="培训类型2">
|
||
<el-input v-model="searchForm.pxlx2" placeholder="请输入培训类型2" clearable @keyup.enter.native="handleSearch" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
|
||
<el-form-item label="培训层次">
|
||
<el-input v-model="searchForm.pxcc" placeholder="请输入培训层次" clearable @keyup.enter.native="handleSearch" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
|
||
<el-form-item label="学科专业信息标识号">
|
||
<el-input v-model="searchForm.xkzyxxbsh" placeholder="请输入学科专业信息标识号" clearable @keyup.enter.native="handleSearch" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
|
||
<el-form-item label="状态">
|
||
<el-select v-model="searchForm.ty" placeholder="请选择状态" clearable style="width: 100%">
|
||
<el-option label="启用" :value="0" />
|
||
<el-option label="停用" :value="1" />
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row class="search-actions-row">
|
||
<el-col :span="24" class="search-actions">
|
||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">查询</el-button>
|
||
<el-button icon="el-icon-refresh" @click="handleReset">重置</el-button>
|
||
</el-col>
|
||
</el-row>
|
||
</el-form>
|
||
</el-card>
|
||
|
||
<!-- ==================== 2. 列表 ==================== -->
|
||
<el-card shadow="never" class="table-card">
|
||
<div class="table-header">
|
||
<span class="table-title">专业列表:</span>
|
||
<div class="table-actions">
|
||
<el-button type="primary" icon="el-icon-download" @click="handleDownloadTemplate">下载模板</el-button>
|
||
<el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增专业</el-button>
|
||
</div>
|
||
</div>
|
||
<el-table v-loading="loading" :data="tableData" stripe border highlight-current-row>
|
||
<el-table-column label="序号" width="60" align="center">
|
||
<template slot-scope="scope">{{ fmtXh(scope.$index) }}</template>
|
||
</el-table-column>
|
||
<el-table-column prop="zydh" label="专业代号" width="120" show-overflow-tooltip />
|
||
<el-table-column prop="zymc" label="专业名称" min-width="140" show-overflow-tooltip />
|
||
<el-table-column prop="zyfx" label="专业方向" min-width="120" show-overflow-tooltip />
|
||
<el-table-column prop="zydm" label="专业代码" width="110" show-overflow-tooltip />
|
||
<el-table-column prop="xnz" label="学年制" width="80" align="center" />
|
||
<el-table-column prop="xqs" label="学期数" width="80" align="center" />
|
||
<el-table-column prop="pxcc" label="培训层次" width="100" align="center" />
|
||
<el-table-column prop="pxlx" label="培训类型" width="100" align="center" />
|
||
<el-table-column prop="pxlx2" label="培训类型2" width="100" align="center" />
|
||
<el-table-column prop="xylb" label="学员类别" width="100" align="center" />
|
||
<el-table-column label="停用" width="80" align="center">
|
||
<template slot-scope="scope">
|
||
<el-tag
|
||
:type="scope.row.ty === 1 || scope.row.ty === true ? 'danger' : 'success'"
|
||
class="ty-tag"
|
||
@click.native="handleToggleDisable(scope.row, scope.row.ty === 1 || scope.row.ty === true ? 0 : 1)"
|
||
>
|
||
{{ scope.row.ty === 1 || scope.row.ty === true ? '是' : '否' }}
|
||
</el-tag>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column label="操作" width="180" align="center" fixed="right">
|
||
<template slot-scope="scope">
|
||
<el-button type="text" size="small" icon="el-icon-view" @click="handleView(scope.row)">详情</el-button>
|
||
<el-button type="text" size="small" icon="el-icon-edit" @click="handleEdit(scope.row)">编辑</el-button>
|
||
<el-button type="text" size="small" icon="el-icon-delete" class="text-danger" @click="handleDelete(scope.row)">删除</el-button>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
|
||
<el-pagination
|
||
:current-page="pageNum"
|
||
:page-size="pageSize"
|
||
:total="total"
|
||
:page-sizes="[10, 20, 50, 100]"
|
||
layout="total, sizes, prev, pager, next, jumper"
|
||
class="pagination-wrapper"
|
||
@current-change="handlePageChange"
|
||
@size-change="handleSizeChange"
|
||
/>
|
||
</el-card>
|
||
|
||
<!-- ==================== 3. 新增/编辑专业对话框 ==================== -->
|
||
<el-dialog
|
||
:title="formTitle"
|
||
:visible.sync="formDialogVisible"
|
||
width="900px"
|
||
:close-on-click-modal="false"
|
||
>
|
||
<el-form ref="formRef" :model="form" :rules="formRules" label-width="130px" class="form-dialog-form">
|
||
<el-divider content-position="left">基本信息</el-divider>
|
||
<el-row :gutter="16">
|
||
<el-col :span="12">
|
||
<el-form-item label="专业代号" prop="zydh">
|
||
<el-input v-model="form.zydh" :disabled="!isAdd" placeholder="请输入专业代号" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="专业名称" prop="zymc">
|
||
<el-input v-model="form.zymc" placeholder="请输入专业名称" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="专业方向" prop="zyfx">
|
||
<el-input v-model="form.zyfx" placeholder="请输入专业方向" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="专业代码" prop="zydm">
|
||
<el-input v-model="form.zydm" placeholder="请输入专业代码" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="专业版本" prop="zybb">
|
||
<el-input v-model="form.zybb" placeholder="请输入专业版本" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="学年制" prop="xnz">
|
||
<el-input v-model="form.xnz" placeholder="请输入学年制" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="学期数" prop="xqs">
|
||
<el-input-number v-model="form.xqs" :min="0" :max="999" controls-position="right" style="width: 100%" placeholder="请输入学期数" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="专业标识号" prop="zybsh">
|
||
<el-input v-model="form.zybsh" placeholder="请输入专业标识号" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="学科专业信息标识号" prop="xkzyxxbsh">
|
||
<el-input v-model="form.xkzyxxbsh" placeholder="请输入学科专业信息标识号" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="教学管理机构编号">
|
||
<el-input v-model="form.jxgljgbh" placeholder="请输入教学管理机构编号" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="规范名称">
|
||
<el-input v-model="form.gfmc" placeholder="请输入规范名称" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="简称">
|
||
<el-input v-model="form.jc" placeholder="请输入简称" />
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
|
||
<el-divider content-position="left">培训信息</el-divider>
|
||
<el-row :gutter="16">
|
||
<el-col :span="12">
|
||
<el-form-item label="培训层次" prop="pxcc">
|
||
<el-input v-model="form.pxcc" placeholder="请输入培训层次" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="培训类型" prop="pxlx">
|
||
<el-input v-model="form.pxlx" placeholder="请输入培训类型" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="培训类型2" prop="pxlx2">
|
||
<el-input v-model="form.pxlx2" placeholder="请输入培训类型2" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="学员类别" prop="xylb">
|
||
<el-input v-model="form.xylb" placeholder="请输入学员类别" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="主干专业" prop="zgzy">
|
||
<el-select v-model="form.zgzy" placeholder="请选择" clearable style="width: 100%">
|
||
<el-option label="是" value="是" />
|
||
<el-option label="否" value="否" />
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="自定义分类" prop="zdyfl">
|
||
<el-input v-model="form.zdyfl" placeholder="请输入自定义分类" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="节次类别" prop="jclb">
|
||
<el-input v-model="form.jclb" placeholder="请输入节次类别" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="系统模式" prop="xtms">
|
||
<el-input v-model="form.xtms" placeholder="请输入系统模式" />
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
|
||
<el-divider content-position="left">其他信息</el-divider>
|
||
<el-row :gutter="16">
|
||
<el-col :span="12">
|
||
<el-form-item label="教学大纲编号">
|
||
<el-input v-model="form.jxdgbh" placeholder="请输入教学大纲编号" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="人培编号">
|
||
<el-input v-model="form.rpbh" placeholder="请输入人培编号" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="序号标识">
|
||
<el-input-number v-model="form.xhbs" :min="0" controls-position="right" style="width: 100%" placeholder="请输入序号标识" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="JSON字段">
|
||
<el-input v-model="form.jsonzd" placeholder="请输入JSON字段" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="停用" prop="ty">
|
||
<el-switch v-model="form.ty" :active-value="1" :inactive-value="0" active-text="是" inactive-text="否" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="启用时间">
|
||
<el-date-picker v-model="form.qysj" type="datetime" placeholder="请选择启用时间" value-format="yyyy-MM-dd HH:mm:ss" style="width: 100%" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="停用时间">
|
||
<el-date-picker v-model="form.tysj" type="datetime" placeholder="请选择停用时间" value-format="yyyy-MM-dd HH:mm:ss" style="width: 100%" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="培养目标">
|
||
<el-input v-model="form.pymb" placeholder="请输入培养目标" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="24">
|
||
<el-form-item label="专业备注">
|
||
<el-input v-model="form.zybz" type="textarea" :rows="3" placeholder="请输入专业备注" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="24">
|
||
<el-form-item label="专业规范">
|
||
<el-input v-model="form.zygf" type="textarea" :rows="3" placeholder="请输入专业规范" />
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
</el-form>
|
||
<div slot="footer" class="dialog-footer">
|
||
<el-button @click="formDialogVisible = false">取 消</el-button>
|
||
<el-button type="primary" :loading="formSaving" @click="handleFormSubmit">确 定</el-button>
|
||
</div>
|
||
</el-dialog>
|
||
|
||
<!-- ==================== 4. 详情对话框 ==================== -->
|
||
<el-dialog title="专业详情" :visible.sync="viewDialogVisible" width="700px" :close-on-click-modal="false">
|
||
<div v-loading="viewLoading" class="detail-body">
|
||
<el-descriptions :column="2" border>
|
||
<el-descriptions-item label="专业代号">{{ viewForm.zydh || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="专业名称">{{ viewForm.zymc || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="专业方向">{{ viewForm.zyfx || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="专业代码">{{ viewForm.zydm || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="专业版本">{{ viewForm.zybb || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="专业标识号">{{ viewForm.zybsh || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="学年制">{{ viewForm.xnz || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="学期数">{{ viewForm.xqs || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="培训层次">{{ viewForm.pxcc || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="培训类型">{{ viewForm.pxlx || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="培训类型2">{{ viewForm.pxlx2 || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="学员类别">{{ viewForm.xylb || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="主干专业">{{ viewForm.zgzy || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="自定义分类">{{ viewForm.zdyfl || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="教学管理机构编号">{{ viewForm.jxgljgbh || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="学科专业信息标识号">{{ viewForm.xkzyxxbsh || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="简称">{{ viewForm.jc || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="规范名称">{{ viewForm.gfmc || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="节次类别">{{ viewForm.jclb || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="系统模式">{{ viewForm.xtms || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="序号标识">{{ viewForm.xhbs || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="教学大纲编号">{{ viewForm.jxdgbh || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="人培编号">{{ viewForm.rpbh || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="启用时间">{{ viewForm.qysj || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="停用时间">{{ viewForm.tysj || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="停用">
|
||
<el-tag :type="viewForm.ty === 1 || viewForm.ty === true ? 'danger' : 'success'" size="mini">
|
||
{{ viewForm.ty === 1 || viewForm.ty === true ? '是' : '否' }}
|
||
</el-tag>
|
||
</el-descriptions-item>
|
||
<el-descriptions-item label="JSON字段">{{ viewForm.jsonzd || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="培养目标" :span="2">{{ viewForm.pymb || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="专业备注" :span="2">{{ viewForm.zybz || '-' }}</el-descriptions-item>
|
||
<el-descriptions-item label="专业规范" :span="2">{{ viewForm.zygf || '-' }}</el-descriptions-item>
|
||
</el-descriptions>
|
||
</div>
|
||
<div slot="footer" class="dialog-footer">
|
||
<el-button @click="viewDialogVisible = false">关 闭</el-button>
|
||
</div>
|
||
</el-dialog>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import {
|
||
listMajor,
|
||
getMajor,
|
||
addMajor,
|
||
updateMajor,
|
||
delMajor,
|
||
downloadMajorTemplate
|
||
} from "@/api/subjectMajor/major"
|
||
|
||
export default {
|
||
name: "Major",
|
||
data() {
|
||
return {
|
||
// ==================== 查询条件 ====================
|
||
searchForm: {
|
||
zymc: '',
|
||
zyfx: '',
|
||
zydm: '',
|
||
xnz: '',
|
||
pxlx: '',
|
||
pxlx2: '',
|
||
pxcc: '',
|
||
xkzyxxbsh: '',
|
||
ty: ''
|
||
},
|
||
|
||
// ==================== 列表数据 ====================
|
||
loading: false,
|
||
tableData: [],
|
||
total: 0,
|
||
pageNum: 1,
|
||
pageSize: 20,
|
||
|
||
// ==================== 新增/编辑 ====================
|
||
formDialogVisible: false,
|
||
formTitle: '新增专业',
|
||
isAdd: true,
|
||
formSaving: false,
|
||
form: this.createEmptyForm(),
|
||
formRules: {
|
||
zydh: [{ required: true, message: "专业代号不能为空", trigger: "blur" }],
|
||
zymc: [{ required: true, message: "专业名称不能为空", trigger: "blur" }],
|
||
zyfx: [{ required: true, message: "专业方向不能为空", trigger: "blur" }],
|
||
zydm: [{ required: true, message: "专业代码不能为空", trigger: "blur" }],
|
||
zybb: [{ required: true, message: "专业版本不能为空", trigger: "blur" }],
|
||
xnz: [{ required: true, message: "学年制不能为空", trigger: "blur" }],
|
||
xqs: [{ required: true, message: "学期数不能为空", trigger: "change" }],
|
||
zybsh: [{ required: true, message: "专业标识号不能为空", trigger: "blur" }],
|
||
pxcc: [{ required: true, message: "培训层次不能为空", trigger: "blur" }],
|
||
pxlx: [{ required: true, message: "培训类型不能为空", trigger: "blur" }],
|
||
pxlx2: [{ required: true, message: "培训类型2不能为空", trigger: "blur" }],
|
||
xylb: [{ required: true, message: "学员类别不能为空", trigger: "blur" }],
|
||
zdyfl: [{ required: true, message: "自定义分类不能为空", trigger: "blur" }],
|
||
zgzy: [{ required: true, message: "主干专业不能为空", trigger: "change" }],
|
||
jclb: [{ required: true, message: "节次类别不能为空", trigger: "blur" }],
|
||
xtms: [{ required: true, message: "系统模式不能为空", trigger: "blur" }]
|
||
},
|
||
|
||
// ==================== 详情 ====================
|
||
viewDialogVisible: false,
|
||
viewLoading: false,
|
||
viewForm: {}
|
||
}
|
||
},
|
||
created() {
|
||
this.fetchList()
|
||
},
|
||
methods: {
|
||
/** 表格序号(跨页连续) */
|
||
fmtXh(index) {
|
||
return (this.pageNum - 1) * this.pageSize + index + 1
|
||
},
|
||
|
||
/** 创建空表单 */
|
||
createEmptyForm() {
|
||
return {
|
||
zydh: '',
|
||
zymc: '',
|
||
zyfx: '',
|
||
xnz: '',
|
||
xqs: undefined,
|
||
zybz: '',
|
||
zygf: '',
|
||
zydm: '',
|
||
zybb: '',
|
||
ty: 0,
|
||
qysj: null,
|
||
tysj: null,
|
||
jxgljgbh: '',
|
||
pxcc: '',
|
||
pxlx: '',
|
||
xkzyxxbsh: '',
|
||
pxlx2: '',
|
||
xylb: '',
|
||
zdyfl: '',
|
||
zybsh: '',
|
||
xhbs: undefined,
|
||
jc: '',
|
||
jclb: '',
|
||
xtms: '',
|
||
jsonzd: '',
|
||
zgzy: '',
|
||
gfmc: '',
|
||
jxdgbh: '',
|
||
rpbh: '',
|
||
pymb: ''
|
||
}
|
||
},
|
||
|
||
// ==================== 查询列表 ====================
|
||
fetchList() {
|
||
this.loading = true
|
||
const params = {
|
||
pageNum: this.pageNum,
|
||
pageSize: this.pageSize
|
||
}
|
||
// 状态:0 启用 / 1 停用(选中时才传)
|
||
if (this.searchForm.ty !== '' && this.searchForm.ty !== null && this.searchForm.ty !== undefined) {
|
||
params.ty = this.searchForm.ty
|
||
}
|
||
// 其余文本条件非空时才传
|
||
;['zymc', 'zyfx', 'zydm', 'xnz', 'pxlx', 'pxlx2', 'pxcc', 'xkzyxxbsh'].forEach(key => {
|
||
if (this.searchForm[key] !== '' && this.searchForm[key] !== null && this.searchForm[key] !== undefined) {
|
||
params[key] = this.searchForm[key].trim()
|
||
}
|
||
})
|
||
listMajor(params).then(response => {
|
||
const data = response.data || {}
|
||
this.tableData = data.records || []
|
||
this.total = data.total || 0
|
||
this.loading = false
|
||
}).catch(() => {
|
||
this.tableData = []
|
||
this.total = 0
|
||
this.loading = false
|
||
})
|
||
},
|
||
|
||
handleSearch() {
|
||
this.pageNum = 1
|
||
this.fetchList()
|
||
},
|
||
|
||
handleReset() {
|
||
this.searchForm = {
|
||
zymc: '',
|
||
zyfx: '',
|
||
zydm: '',
|
||
xnz: '',
|
||
pxlx: '',
|
||
pxlx2: '',
|
||
pxcc: '',
|
||
xkzyxxbsh: '',
|
||
ty: ''
|
||
}
|
||
this.pageNum = 1
|
||
this.fetchList()
|
||
},
|
||
|
||
handlePageChange(current) {
|
||
this.pageNum = current
|
||
this.fetchList()
|
||
},
|
||
|
||
handleSizeChange(size) {
|
||
this.pageSize = size
|
||
this.pageNum = 1
|
||
this.fetchList()
|
||
},
|
||
|
||
// ==================== 新增/编辑 ====================
|
||
handleAdd() {
|
||
this.isAdd = true
|
||
this.formTitle = '新增专业'
|
||
this.form = this.createEmptyForm()
|
||
this.formDialogVisible = true
|
||
this.$nextTick(() => {
|
||
this.$refs.formRef && this.$refs.formRef.clearValidate()
|
||
})
|
||
},
|
||
|
||
handleEdit(row) {
|
||
this.isAdd = false
|
||
this.formTitle = '编辑专业'
|
||
this.form = this.createEmptyForm()
|
||
this.formDialogVisible = true
|
||
this.$nextTick(() => {
|
||
this.$refs.formRef && this.$refs.formRef.clearValidate()
|
||
})
|
||
getMajor(row.zydh).then(response => {
|
||
const data = response.data || {}
|
||
this.form = {
|
||
zydh: data.zydh,
|
||
zymc: data.zymc,
|
||
zyfx: data.zyfx,
|
||
xnz: data.xnz,
|
||
xqs: data.xqs !== null && data.xqs !== undefined ? data.xqs : undefined,
|
||
zybz: data.zybz,
|
||
zygf: data.zygf,
|
||
zydm: data.zydm,
|
||
zybb: data.zybb,
|
||
ty: data.ty === 1 || data.ty === true ? 1 : 0,
|
||
qysj: data.qysj,
|
||
tysj: data.tysj,
|
||
jxgljgbh: data.jxgljgbh,
|
||
pxcc: data.pxcc,
|
||
pxlx: data.pxlx,
|
||
xkzyxxbsh: data.xkzyxxbsh,
|
||
pxlx2: data.pxlx2,
|
||
xylb: data.xylb,
|
||
zdyfl: data.zdyfl,
|
||
zybsh: data.zybsh,
|
||
xhbs: data.xhbs,
|
||
jc: data.jc,
|
||
jclb: data.jclb,
|
||
xtms: data.xtms,
|
||
jsonzd: data.jsonzd,
|
||
zgzy: data.zgzy,
|
||
gfmc: data.gfmc,
|
||
jxdgbh: data.jxdgbh,
|
||
rpbh: data.rpbh,
|
||
pymb: data.pymb
|
||
}
|
||
}).catch(() => {})
|
||
},
|
||
|
||
handleFormSubmit() {
|
||
this.$refs.formRef.validate(valid => {
|
||
if (!valid) return
|
||
this.formSaving = true
|
||
const payload = { ...this.form }
|
||
const request = this.isAdd ? addMajor(payload) : updateMajor(payload)
|
||
request.then(() => {
|
||
this.$message.success(this.isAdd ? '新增成功' : '修改成功')
|
||
this.formDialogVisible = false
|
||
this.fetchList()
|
||
}).catch(() => {
|
||
}).finally(() => {
|
||
this.formSaving = false
|
||
})
|
||
})
|
||
},
|
||
|
||
// ==================== 停用/启用切换 ====================
|
||
handleToggleDisable(row, val) {
|
||
const isDisable = val === 1 || val === true
|
||
const prevTy = isDisable ? 0 : 1
|
||
const actionName = isDisable ? '停用' : '启用'
|
||
this.$confirm(`确定要${actionName}「${row.zymc || row.zydh || '该专业'}」吗?`, '系统提示', {
|
||
confirmButtonText: '确定',
|
||
cancelButtonText: '取消',
|
||
type: 'warning'
|
||
}).then(() => {
|
||
return updateMajor({ ...row, ty: isDisable ? 1 : 0 })
|
||
}).then(() => {
|
||
this.$message.success(actionName + '成功')
|
||
this.fetchList()
|
||
}).catch(() => {
|
||
// 取消或接口失败时回滚开关状态并刷新
|
||
row.ty = prevTy
|
||
this.fetchList()
|
||
})
|
||
},
|
||
|
||
// ==================== 删除 ====================
|
||
handleDelete(row) {
|
||
this.$confirm(`确定要删除「${row.zymc || row.zydh || '该专业'}」吗?`, '系统提示', {
|
||
confirmButtonText: '确定',
|
||
cancelButtonText: '取消',
|
||
type: 'warning'
|
||
}).then(() => {
|
||
return delMajor(row.zydh)
|
||
}).then(() => {
|
||
this.$message.success('删除成功')
|
||
this.fetchList()
|
||
}).catch(() => {})
|
||
},
|
||
|
||
// ==================== 下载模板 ====================
|
||
handleDownloadTemplate() {
|
||
downloadMajorTemplate().then(res => {
|
||
const blob = new Blob([res], { type: 'application/vnd.ms-excel;charset=utf-8' })
|
||
const link = document.createElement('a')
|
||
link.href = URL.createObjectURL(blob)
|
||
link.download = '人才培养方案课程数据文件模板.xls'
|
||
link.click()
|
||
URL.revokeObjectURL(link.href)
|
||
this.$message.success('模板下载成功')
|
||
}).catch(() => {})
|
||
},
|
||
|
||
// ==================== 详情 ====================
|
||
handleView(row) {
|
||
this.viewDialogVisible = true
|
||
this.viewLoading = true
|
||
this.viewForm = {}
|
||
getMajor(row.zydh).then(response => {
|
||
this.viewForm = response.data || {}
|
||
this.viewLoading = false
|
||
}).catch(() => {
|
||
this.viewLoading = false
|
||
})
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped lang="scss">
|
||
.major-page {
|
||
.search-card {
|
||
margin-bottom: 16px;
|
||
}
|
||
|
||
.search-form {
|
||
::v-deep .el-form-item {
|
||
margin-bottom: 18px;
|
||
}
|
||
|
||
.search-actions-row {
|
||
margin-top: 2px;
|
||
border-top: 1px dashed #ebeef5;
|
||
padding-top: 14px;
|
||
}
|
||
|
||
.search-actions {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: flex-end;
|
||
gap: 12px;
|
||
}
|
||
}
|
||
|
||
.table-card {
|
||
.table-header {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
margin-bottom: 16px;
|
||
|
||
.table-title {
|
||
font-size: 16px;
|
||
font-weight: 600;
|
||
color: #303133;
|
||
}
|
||
|
||
.table-actions {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
}
|
||
}
|
||
|
||
.pagination-wrapper {
|
||
display: flex;
|
||
justify-content: flex-end;
|
||
margin-top: 16px;
|
||
}
|
||
}
|
||
|
||
.form-dialog-form {
|
||
max-height: 62vh;
|
||
overflow-y: auto;
|
||
padding-right: 6px;
|
||
|
||
::v-deep .el-divider--horizontal {
|
||
margin: 4px 0 16px;
|
||
}
|
||
}
|
||
|
||
.text-danger {
|
||
color: #f56c6c;
|
||
padding: 0;
|
||
}
|
||
|
||
.ty-tag {
|
||
cursor: pointer;
|
||
user-select: none;
|
||
}
|
||
}
|
||
</style>
|