Files
education/frontend/node_modules/.cache/vue-loader/06708d134e89a309419c93353c711263.json
T

1 line
36 KiB
JSON

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