1. 机关教学日志2.新增全局表格横向拖拽滚动指令3.学员模块

This commit is contained in:
2026-08-23 15:10:56 +08:00
parent df7800f001
commit d20c490c74
11 changed files with 1922 additions and 52 deletions
+710 -6
View File
@@ -1,15 +1,719 @@
<template>
<div class="app-container">
<placeholder-page title="专业" icon="tree"
description="用于维护专业信息,如专业名称、所属学科专业等,支持新增、编辑与查询。" />
<div class="app-container major-page">
<!-- ==================== 1. 查询条件 ==================== -->
<el-card shadow="never" class="search-card">
<el-form ref="searchFormRef" :model="searchForm" label-width="90px" 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 type="index" label="序号" width="60" align="center" />
<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 PlaceholderPage from "@/components/PlaceholderPage"
import {
listMajor,
getMajor,
addMajor,
updateMajor,
delMajor,
downloadMajorTemplate
} from "@/api/subjectMajor/major"
export default {
name: "Major",
components: { PlaceholderPage }
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: {
/** 创建空表单 */
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>
</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>