forked from liweijie/education
1 line
54 KiB
JSON
1 line
54 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\\teachOffice\\teacher\\index.vue?vue&type=style&index=0&id=2e69d23d&scoped=true&lang=scss","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachOffice\\teacher\\index.vue","mtime":1787653241904},{"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:CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoNCi50ZWFjaGVyLXBhZ2Ugew0KICAuc2VhcmNoLWNhcmQgew0KICAgIG1hcmdpbi1ib3R0b206IDE2cHg7DQoNCiAgICAuc2VhcmNoLWZvcm0gew0KICAgICAgLmVsLWZvcm0taXRlbSB7DQogICAgICAgIG1hcmdpbi1ib3R0b206IDA7DQogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsNCiAgICAgIH0NCiAgICB9DQoNCiAgICAuc2VhcmNoLWFjdGlvbnMgew0KICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7DQogICAgICBwYWRkaW5nOiAxMnB4Ow0KICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlYmVlZjU7DQogICAgfQ0KICB9DQoNCiAgLmxpc3QtdGl0bGUgew0KICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICBmb250LXdlaWdodDogNjAwOw0KICAgIGNvbG9yOiAjMzAzMTMzOw0KICAgIG1hcmdpbi1ib3R0b206IDEycHg7DQogIH0NCg0KICAubGlzdC10b29sYmFyIHsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICAgIGdhcDogMTJweDsNCiAgICBmbGV4LXdyYXA6IHdyYXA7DQogICAgbWFyZ2luLWJvdHRvbTogMTZweDsNCg0KICAgIC5sZWZ0LWdyb3VwLA0KICAgIC5yaWdodC1ncm91cCB7DQogICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgIGdhcDogMTJweDsNCiAgICAgIGZsZXgtd3JhcDogd3JhcDsNCiAgICB9DQogIH0NCg0KICAudGFibGUtY2FyZCB7DQogICAgbWFyZ2luLWJvdHRvbTogMTZweDsNCg0KICAgIDo6di1kZWVwKC5lbC10YWJsZSkgew0KICAgICAgd2lkdGg6IDEwMCU7DQogICAgfQ0KDQogICAgLnBhZ2luYXRpb24td3JhcCB7DQogICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsNCiAgICAgIG1hcmdpbi10b3A6IDE2cHg7DQogICAgfQ0KICB9DQoNCiAgLmRhbmdlci10ZXh0IHsNCiAgICBjb2xvcjogI2Y1NmM2YzsNCiAgfQ0KfQ0K"},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkgCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/views/teachOffice/teacher","sourcesContent":["<template>\r\n <div class=\"app-container teacher-page\">\r\n <!-- 查询条件 -->\r\n <el-card shadow=\"never\" class=\"search-card\">\r\n <el-form :model=\"searchForm\" label-width=\"90px\" class=\"search-form\" @submit.native.prevent>\r\n <el-row :gutter=\"0\">\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"教员姓名\">\r\n <el-input v-model=\"searchForm.jyxm\" placeholder=\"请输入\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"教研室代号\">\r\n <el-input v-model=\"searchForm.jysdh\" placeholder=\"请输入\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"职称\">\r\n <el-input v-model=\"searchForm.zc\" placeholder=\"请输入\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"教员类别\">\r\n <el-input v-model=\"searchForm.jylb\" placeholder=\"请输入\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <div 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 </div>\r\n </el-card>\r\n\r\n <!-- 教员列表 -->\r\n <div class=\"list-title\">教员列表:</div>\r\n <div class=\"list-toolbar\">\r\n <div class=\"left-group\">\r\n <el-button type=\"primary\" icon=\"el-icon-plus\" @click=\"handleNew\">新建</el-button>\r\n <el-button type=\"danger\" plain icon=\"el-icon-delete\" @click=\"handleDeleteSelected\">删除所选</el-button>\r\n <el-button icon=\"el-icon-upload\" @click=\"handleImport\">导入教员信息</el-button>\r\n </div>\r\n <div class=\"right-group\">\r\n <el-button icon=\"el-icon-download\" @click=\"handleDownloadTemplate\">【教员数据文件模板】下载</el-button>\r\n </div>\r\n </div>\r\n\r\n <el-card shadow=\"never\" class=\"table-card\">\r\n <el-table v-loading=\"loading\" :data=\"tableData\" stripe border highlight-current-row\r\n @selection-change=\"handleSelectionChange\">\r\n <el-table-column type=\"selection\" width=\"50\" align=\"center\" />\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\r\n <el-table-column prop=\"jybh\" label=\"教员工号\" width=\"110\" align=\"center\" />\r\n <el-table-column prop=\"jyxm\" label=\"教员姓名\" width=\"90\" align=\"center\" />\r\n <el-table-column label=\"性别\" width=\"60\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtGender(row.xb) }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"jysmc\" label=\"教研室名称\" width=\"200\" show-overflow-tooltip align=\"center\"/>\r\n <el-table-column prop=\"zc\" label=\"职称\" width=\"120\" align=\"center\" />\r\n <el-table-column prop=\"xl\" label=\"学历\" width=\"120\" align=\"center\" />\r\n <el-table-column prop=\"xw\" label=\"学位\" width=\"120\" align=\"center\" />\r\n <el-table-column label=\"出生时间\" width=\"110\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtDateTime(row.cssj) || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"入伍工作时间\" width=\"120\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtDateTime(row.rwgzsj) || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"sjh\" label=\"联系方式\" width=\"110\" align=\"center\" />\r\n <el-table-column label=\"虚实类型\" width=\"80\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtXslx(row.xslx) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" align=\"center\" fixed=\"right\">\r\n <template slot-scope=\"{ row }\">\r\n <el-button type=\"text\" size=\"small\" icon=\"el-icon-view\" @click=\"handleViewAttribute(row)\">查看属性</el-button>\r\n <el-button type=\"text\" size=\"small\" icon=\"el-icon-edit\" @click=\"handleEdit(row)\">编辑</el-button>\r\n <el-button type=\"text\" size=\"small\" class=\"danger-text\" @click=\"handleDisable(row)\">离职</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <el-empty v-if=\"!loading && tableData.length === 0\" description=\"暂无教员数据\" :image-size=\"60\" />\r\n <div class=\"pagination-wrap\">\r\n <el-pagination\r\n :current-page=\"pagination.pageNum\"\r\n :page-size=\"pagination.pageSize\"\r\n :total=\"pagination.total\"\r\n :page-sizes=\"[10, 20, 50, 100]\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n background\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handleCurrentChange\"\r\n />\r\n </div>\r\n </el-card>\r\n\r\n <!-- 新建教员对话框 -->\r\n <el-dialog\r\n :visible=\"addDialogVisible\"\r\n title=\"新建教员\"\r\n width=\"820px\"\r\n :close-on-click-modal=\"false\"\r\n @update:visible=\"val => addDialogVisible = val\"\r\n >\r\n <el-form ref=\"addFormRef\" :model=\"addForm\" :rules=\"addRules\" label-width=\"160px\" class=\"add-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=\"teacher.jyxm\"><el-input v-model=\"addForm.teacher.jyxm\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"性别\" prop=\"teacher.xb\">\r\n <el-select v-model=\"addForm.teacher.xb\" style=\"width:100%\">\r\n <el-option :value=\"1\" label=\"男\" /><el-option :value=\"0\" label=\"女\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"序号\" prop=\"teacher.xh\"><el-input v-model=\"addForm.teacher.xh\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"身份证号\" prop=\"teacher.sfzh\"><el-input v-model=\"addForm.teacher.sfzh\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"专业技术职务等级\" prop=\"teacher.zyjszwdj\">\n <el-select v-model=\"addForm.teacher.zyjszwdj\" placeholder=\"请选择\" clearable style=\"width:100%\">\n <el-option v-for=\"item in zyjszwdjOptions\" :key=\"item.dictValue\" :label=\"item.dictLabel\" :value=\"item.dictValue\" />\n </el-select>\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"虚实类型\" prop=\"teacher.xslx\">\r\n <el-radio-group v-model=\"addForm.teacher.xslx\">\r\n <el-radio :label=\"1\">是</el-radio>\r\n <el-radio :label=\"0\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教员类别\" prop=\"teacher.jylb\">\n <el-select v-model=\"addForm.teacher.jylb\" placeholder=\"请选择\" clearable style=\"width:100%\">\n <el-option v-for=\"item in jylbOptions\" :key=\"item.dictValue\" :label=\"item.dictLabel\" :value=\"item.dictValue\" />\n </el-select>\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"在职类别\" prop=\"teacher.zzlb\">\n <el-select v-model=\"addForm.teacher.zzlb\" placeholder=\"请选择\" clearable style=\"width:100%\">\n <el-option v-for=\"item in zzlbOptions\" :key=\"item.dictValue\" :label=\"item.dictLabel\" :value=\"item.dictValue\" />\n </el-select>\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"导师类别\" prop=\"teacher.dslb\">\n <el-select v-model=\"addForm.teacher.dslb\" placeholder=\"请选择\" clearable style=\"width:100%\">\n <el-option v-for=\"item in dslbOptions\" :key=\"item.dictValue\" :label=\"item.dictLabel\" :value=\"item.dictValue\" />\n </el-select>\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"学缘\" prop=\"teacher.xy\"><el-input v-model=\"addForm.teacher.xy\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"额外允许开班数\" prop=\"teacher.ewyxkbs\">\r\n <el-input-number v-model=\"addForm.teacher.ewyxkbs\" :min=\"0\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"外训教员\" prop=\"teacher.wxjy\">\r\n <el-radio-group v-model=\"addForm.teacher.wxjy\">\r\n <el-radio :label=\"1\">是</el-radio>\r\n <el-radio :label=\"0\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"外训译员\" prop=\"teacher.wxyy\">\r\n <el-radio-group v-model=\"addForm.teacher.wxyy\">\r\n <el-radio :label=\"1\">是</el-radio>\r\n <el-radio :label=\"0\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"政治类教员\" prop=\"teacher.zzljy\">\r\n <el-radio-group v-model=\"addForm.teacher.zzljy\">\r\n <el-radio :label=\"1\">是</el-radio>\r\n <el-radio :label=\"0\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"职称\"><el-input v-model=\"addForm.teacher.zc\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"手机号\"><el-input v-model=\"addForm.teacher.sjh\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"卡号\"><el-input v-model=\"addForm.teacher.kh\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"拼音\"><el-input v-model=\"addForm.teacher.py\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"专业技术职务等级时间\">\r\n <el-date-picker v-model=\"addForm.teacher.zyjszwdjsj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" 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=\"addForm.teacher.zcsj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"备注\"><el-input v-model=\"addForm.teacher.bz\" type=\"textarea\" :rows=\"2\" placeholder=\"选填\" /></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=\"学历\"><el-input v-model=\"addForm.attributes.xl\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"学位\"><el-input v-model=\"addForm.attributes.xw\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教龄\"><el-input-number v-model=\"addForm.attributes.jl\" :min=\"0\" style=\"width:100%\" /></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=\"addForm.attributes.jljsrq\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"主任\">\r\n <el-radio-group v-model=\"addForm.attributes.zr\">\r\n <el-radio :label=\"1\">是</el-radio>\r\n <el-radio :label=\"0\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"职务\"><el-input v-model=\"addForm.attributes.zw\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"职务时间\">\r\n <el-date-picker v-model=\"addForm.attributes.zwsj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"技术职务\"><el-input v-model=\"addForm.attributes.jszw\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"技术职务时间\">\r\n <el-date-picker v-model=\"addForm.attributes.jszwsj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"技术等级\"><el-input v-model=\"addForm.attributes.jsdj\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"技术等级时间\">\r\n <el-date-picker v-model=\"addForm.attributes.jsdjsj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"军衔文职\"><el-input v-model=\"addForm.attributes.jxwz\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"军衔文职时间\">\r\n <el-date-picker v-model=\"addForm.attributes.jxwzsj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" 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=\"addForm.attributes.cssj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"入伍工作时间\">\r\n <el-date-picker v-model=\"addForm.attributes.rwgzsj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"任代职经历\"><el-input v-model=\"addForm.attributes.rdzjl\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"发表论文\"><el-input v-model=\"addForm.attributes.fblw\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <div slot=\"footer\">\r\n <el-button @click=\"addDialogVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" :loading=\"addSaving\" @click=\"handleAddConfirm\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- 编辑教员基本信息对话框 -->\r\n <el-dialog\r\n :visible=\"editDialogVisible\"\r\n title=\"编辑教员信息\"\r\n width=\"780px\"\r\n :close-on-click-modal=\"false\"\r\n @update:visible=\"val => editDialogVisible = val\"\r\n >\r\n <div v-loading=\"editLoading\">\r\n <el-form ref=\"editFormRef\" :model=\"editForm\" :rules=\"editRules\" label-width=\"140px\" class=\"add-form\">\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教员编号\"><el-input v-model=\"editForm.jybh\" disabled /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教员姓名\" prop=\"jyxm\"><el-input v-model=\"editForm.jyxm\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教研室代号\" prop=\"jysdh\"><el-input v-model=\"editForm.jysdh\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"序号\"><el-input v-model=\"editForm.xh\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"性别\" prop=\"xb\">\r\n <el-select v-model=\"editForm.xb\" style=\"width:100%\">\r\n <el-option :value=\"1\" label=\"男\" /><el-option :value=\"0\" label=\"女\" />\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=\"sfzh\"><el-input v-model=\"editForm.sfzh\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"专业技术职务等级\" prop=\"zyjszwdj\"><el-input v-model=\"editForm.zyjszwdj\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"虚实类型\" prop=\"xslx\">\r\n <el-radio-group v-model=\"editForm.xslx\">\r\n <el-radio :label=\"1\">实教</el-radio>\r\n <el-radio :label=\"0\">非实教</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教员类别\" prop=\"jylb\"><el-input v-model=\"editForm.jylb\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"在职类别\" prop=\"zzlb\"><el-input v-model=\"editForm.zzlb\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"导师类别\" prop=\"dslb\"><el-input v-model=\"editForm.dslb\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"学缘\" prop=\"xy\"><el-input v-model=\"editForm.xy\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"额外允许开班数\" prop=\"ewyxkbs\">\r\n <el-input-number v-model=\"editForm.ewyxkbs\" :min=\"0\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"外训教员\" prop=\"wxjy\">\r\n <el-radio-group v-model=\"editForm.wxjy\">\r\n <el-radio :label=\"1\">是</el-radio>\r\n <el-radio :label=\"0\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"外训译员\" prop=\"wxyy\">\r\n <el-radio-group v-model=\"editForm.wxyy\">\r\n <el-radio :label=\"1\">是</el-radio>\r\n <el-radio :label=\"0\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"政治类教员\" prop=\"zzljy\">\r\n <el-radio-group v-model=\"editForm.zzljy\">\r\n <el-radio :label=\"1\">是</el-radio>\r\n <el-radio :label=\"0\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"职称\"><el-input v-model=\"editForm.zc\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"手机号\"><el-input v-model=\"editForm.sjh\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"卡号\"><el-input v-model=\"editForm.kh\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"拼音\"><el-input v-model=\"editForm.py\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"备注\"><el-input v-model=\"editForm.bz\" type=\"textarea\" :rows=\"2\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n </div>\r\n <div slot=\"footer\">\r\n <el-button @click=\"editDialogVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" :loading=\"editSaving\" @click=\"handleEditConfirm\">保存</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- 教员属性详情/编辑对话框 -->\r\n <el-dialog\r\n :visible=\"attributeVisible\"\r\n :title=\"attributeMode === 'view' ? '教员属性' : '编辑教员属性'\"\r\n width=\"720px\"\r\n :close-on-click-modal=\"false\"\r\n @update:visible=\"val => attributeVisible = val\"\r\n >\r\n <div v-loading=\"attributeLoading || attributeSaving\">\r\n <template v-if=\"attributeMode === 'view'\">\r\n <el-descriptions :column=\"2\" border size=\"medium\">\r\n <el-descriptions-item label=\"教员编号\">{{ attributeData.jybh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"主任\">{{ fmtFlag(attributeData.zr, '是', '否') }}</el-descriptions-item>\r\n <el-descriptions-item label=\"职务\">{{ attributeData.zw || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"职务时间\">{{ fmtDateTime(attributeData.zwsj) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"技术职务\">{{ attributeData.jszw || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"技术职务时间\">{{ fmtDateTime(attributeData.jszwsj) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"技术等级\">{{ attributeData.jsdj || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"技术等级时间\">{{ fmtDateTime(attributeData.jsdjsj) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"军衔文职\">{{ attributeData.jxwz || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"军衔文职时间\">{{ fmtDateTime(attributeData.jxwzsj) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"出生时间\">{{ fmtDateTime(attributeData.cssj) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"学历\">{{ attributeData.xl || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"学位\">{{ attributeData.xw || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"入伍工作时间\">{{ fmtDateTime(attributeData.rwgzsj) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"任代职经历\">{{ attributeData.rdzjl || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"发表论文\">{{ attributeData.fblw || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"教龄\">{{ fmtVal(attributeData.jl) }}</el-descriptions-item>\r\n <el-descriptions-item label=\"教龄计算日期\">{{ fmtDateTime(attributeData.jljsrq) || '-' }}</el-descriptions-item>\r\n </el-descriptions>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button @click=\"attributeVisible = false\">关闭</el-button>\r\n <el-button type=\"primary\" @click=\"handleStartEditAttribute\">编辑</el-button>\r\n </div>\r\n </template>\r\n <template v-else>\r\n <el-form ref=\"attributeFormRef\" :model=\"attributeForm\" label-width=\"140px\" class=\"add-form\">\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教员编号\"><el-input v-model=\"attributeForm.jybh\" disabled /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"主任\">\r\n <el-radio-group v-model=\"attributeForm.zr\">\r\n <el-radio :label=\"1\">是</el-radio>\r\n <el-radio :label=\"0\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"职务\"><el-input v-model=\"attributeForm.zw\" placeholder=\"选填\" /></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=\"attributeForm.zwsj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"技术职务\"><el-input v-model=\"attributeForm.jszw\" placeholder=\"选填\" /></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=\"attributeForm.jszwsj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"技术等级\"><el-input v-model=\"attributeForm.jsdj\" placeholder=\"选填\" /></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=\"attributeForm.jsdjsj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"军衔文职\"><el-input v-model=\"attributeForm.jxwz\" placeholder=\"选填\" /></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=\"attributeForm.jxwzsj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"出生时间\">\r\n <el-date-picker v-model=\"attributeForm.cssj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"学历\"><el-input v-model=\"attributeForm.xl\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"学位\"><el-input v-model=\"attributeForm.xw\" placeholder=\"选填\" /></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=\"attributeForm.rwgzsj\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教龄\"><el-input-number v-model=\"attributeForm.jl\" :min=\"0\" style=\"width:100%\" /></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=\"attributeForm.jljsrq\" type=\"datetime\" value-format=\"yyyy-MM-ddTHH:mm:ss\" placeholder=\"选填\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"任代职经历\"><el-input v-model=\"attributeForm.rdzjl\" placeholder=\"选填\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"发表论文\"><el-input v-model=\"attributeForm.fblw\" placeholder=\"选填\" /></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=\"handleCancelEditAttribute\">取消</el-button>\r\n <el-button type=\"primary\" :loading=\"attributeSaving\" @click=\"handleSaveAttribute\">保存</el-button>\r\n </div>\r\n </template>\r\n </div>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport {\r\n listTeacher,\r\n getTeacher,\r\n addTeacher,\r\n updateTeacher,\r\n disableTeacher,\r\n getTeacherAttribute,\r\n updateTeacherAttribute\r\n} from '@/api/teachOffice/teacher'\r\nimport { getDicts } from '@/api/system/dict/data'\r\n\r\nexport default {\r\n name: 'Teacher',\r\n data() {\r\n return {\r\n // 查询条件(仅后端 JYBMapper.xml 支持的字段:jyxm 模糊 / jysdh 等值 / zc 模糊 / jylb 等值)\r\n searchForm: { jyxm: '', jysdh: '', zc: '', jylb: '' },\r\n\r\n // 列表\r\n loading: false,\r\n tableData: [],\r\n selectedRows: [],\r\n pagination: { pageNum: 1, pageSize: 20, total: 0 },\r\n\r\n // 新建\r\n addDialogVisible: false,\r\n addSaving: false,\r\n addForm: this.createEmptyAddForm(),\r\n addRules: {\r\n 'teacher.jyxm': [{ required: true, message: '请输入教员姓名', trigger: 'blur' }],\r\n \r\n 'teacher.xh': [{ required: true, message: '请输入序号', trigger: 'blur' }],\r\n 'teacher.zyjszwdj': [{ required: true, message: '请输入专业技术职务等级', trigger: 'blur' }],\r\n 'teacher.xslx': [{ required: true, message: '请选择虚实类型', trigger: 'change' }],\r\n 'teacher.jylb': [{ required: true, message: '请选择教员类别', trigger: 'change' }],\r\n 'teacher.zzlb': [{ required: true, message: '请选择在职类别', trigger: 'change' }],\r\n 'teacher.ewyxkbs': [{ required: true, message: '请输入额外允许开班数', trigger: 'change' }],\r\n 'teacher.dslb': [{ required: true, message: '请选择导师类别', trigger: 'change' }],\r\n 'teacher.xy': [{ required: true, message: '请输入学缘', trigger: 'blur' }],\r\n 'teacher.sfzh': [{ required: true, message: '请输入身份证号', trigger: 'blur' }],\r\n 'teacher.xb': [{ required: true, message: '请选择性别', trigger: 'change' }],\r\n 'teacher.wxjy': [{ required: true, message: '请选择外训教员', trigger: 'change' }],\r\n 'teacher.wxyy': [{ required: true, message: '请选择外训译员', trigger: 'change' }],\r\n 'teacher.zzljy': [{ required: true, message: '请选择政治类教员', trigger: 'change' }]\r\n },\r\n\r\n // 编辑\r\n editDialogVisible: false,\r\n editLoading: false,\r\n editSaving: false,\r\n editForm: {},\r\n editRules: {\r\n jyxm: [{ required: true, message: '请输入教员姓名', trigger: 'blur' }],\r\n jysdh: [{ required: true, message: '请输入教研室代号', trigger: 'blur' }],\r\n xb: [{ required: true, message: '请选择性别', trigger: 'change' }],\r\n sfzh: [{ required: true, message: '请输入身份证号', trigger: 'blur' }],\r\n zyjszwdj: [{ required: true, message: '请输入专业技术职务等级', trigger: 'blur' }],\r\n xslx: [{ required: true, message: '请选择虚实类型', trigger: 'change' }],\r\n jylb: [{ required: true, message: '请输入教员类别', trigger: 'blur' }],\r\n zzlb: [{ required: true, message: '请输入在职类别', trigger: 'blur' }],\r\n dslb: [{ required: true, message: '请输入导师类别', trigger: 'blur' }],\r\n xy: [{ required: true, message: '请输入学缘', trigger: 'blur' }],\r\n ewyxkbs: [{ required: true, message: '请输入额外允许开班数', trigger: 'change' }],\r\n wxjy: [{ required: true, message: '请选择外训教员', trigger: 'change' }],\r\n wxyy: [{ required: true, message: '请选择外训译员', trigger: 'change' }],\r\n zzljy: [{ required: true, message: '请选择政治类教员', trigger: 'change' }]\r\n },\r\n\r\n // 教员属性\r\n attributeVisible: false,\r\n attributeMode: 'view',\r\n attributeData: {},\r\n attributeForm: {},\r\n attributeLoading: false,\r\n attributeSaving: false,\r\n attributeJybh: '',\r\n // 字典选项\r\n zyjszwdjOptions: [],\r\n jylbOptions: [],\r\n zzlbOptions: [],\r\n dslbOptions: []\r\n }\r\n },\r\n mounted() {\r\n this.fetchList()\r\n this.loadDicts()\r\n },\r\n methods: {\r\n /** 统一格式化后端 LocalDateTime(去除 T、截断到秒) */\r\n fmtDateTime(val) {\r\n if (val === null || val === undefined || val === '') return ''\r\n return String(val).replace('T', ' ').slice(0, 19)\r\n },\r\n\r\n /** 空值显示为 '-' */\r\n fmtVal(val) {\r\n return (val === null || val === undefined || val === '') ? '-' : val\r\n },\r\n\r\n /** 性别:1-男 0-女(与后端 TeacherListVO 注释及学员页约定一致) */\r\n fmtGender(val) {\r\n if (val === null || val === undefined || val === '') return '-'\r\n return Number(val) === 1 ? '男' : Number(val) === 0 ? '女' : String(val)\r\n },\r\n\r\n /** 虚实类型:1-实教 0-非实教(项目约定 1-实 0-虚) */\r\n fmtXslx(val) {\r\n if (val === null || val === undefined || val === '') return '-'\r\n return Number(val) === 1 ? '实教' : Number(val) === 0 ? '非实教' : String(val)\r\n },\r\n\r\n /** 0/1 标志位格式化 */\r\n fmtFlag(val, yesLabel, noLabel) {\r\n if (val === null || val === undefined || val === '') return '-'\r\n return Number(val) === 1 ? yesLabel : Number(val) === 0 ? noLabel : String(val)\r\n },\r\n\r\n /** 移除空值 */\r\n \r\n\r\n loadDicts() {\r\n getDicts('teacher_zyjszwdj').then(res => { this.zyjszwdjOptions = res.data || [] }).catch(() => {})\r\n getDicts('teacher_jylb').then(res => { this.jylbOptions = res.data || [] }).catch(() => {})\r\n getDicts('teacher_zzlb').then(res => { this.zzlbOptions = res.data || [] }).catch(() => {})\r\n getDicts('teacher_dslb').then(res => { this.dslbOptions = res.data || [] }).catch(() => {})\r\n },\r\n\r\n cleanPayload(obj) {\r\n const payload = {}\r\n Object.keys(obj).forEach(key => {\r\n const value = obj[key]\r\n if (value !== '' && value !== null && value !== undefined) {\r\n payload[key] = value\r\n }\r\n })\r\n return payload\r\n },\r\n\r\n /** 创建空白新增表单 */\r\n createEmptyAddForm() {\r\n return {\r\n teacher: {\r\n jybh: '', jyxm: '', jysdh: '', xh: '', zyjszwdj: '', zyjszwdjsj: '',\r\n xslx: 1, jylb: '', zzlb: '', dslb: '', xy: '', sfzh: '', xb: 1,\r\n wxjy: 0, wxyy: 0, zzljy: 0, ewyxkbs: 0, zc: '', sjh: '', kh: '', py: '',\r\n zcsj: '', bz: ''\r\n },\r\n attributes: {\r\n xl: '', xw: '', jl: 0, jljsrq: '', zr: 0, zw: '', zwsj: '', jszw: '',\r\n jszwsj: '', jsdj: '', jsdjsj: '', jxwz: '', jxwzsj: '', cssj: '',\r\n rwgzsj: '', rdzjl: '', fblw: ''\r\n }\r\n }\r\n },\r\n\r\n // ==================== 列表 ====================\r\n buildQuery() {\r\n const params = {}\r\n ;['jyxm', 'jysdh', 'zc', 'jylb'].forEach(key => {\r\n const value = this.searchForm[key]\r\n if (value !== '' && value !== null && value !== undefined) {\r\n params[key] = String(value).trim()\r\n }\r\n })\r\n return params\r\n },\r\n\r\n fetchList() {\r\n this.loading = true\r\n const params = {\r\n pageNum: this.pagination.pageNum,\r\n pageSize: this.pagination.pageSize,\r\n ...this.buildQuery()\r\n }\r\n listTeacher(params).then(response => {\r\n const data = response.data || {}\r\n this.tableData = data.records || []\r\n this.pagination.total = data.total || 0\r\n this.loading = false\r\n }).catch(() => {\r\n this.tableData = []\r\n this.pagination.total = 0\r\n this.loading = false\r\n })\r\n },\r\n\r\n handleSearch() {\r\n this.pagination.pageNum = 1\r\n this.fetchList()\r\n },\r\n\r\n handleReset() {\r\n this.searchForm = { jyxm: '', jysdh: '', zc: '', jylb: '' }\r\n this.pagination.pageNum = 1\r\n this.fetchList()\r\n },\r\n\r\n handleSizeChange(size) {\r\n this.pagination.pageSize = size\r\n this.pagination.pageNum = 1\r\n this.fetchList()\r\n },\r\n\r\n handleCurrentChange(page) {\r\n this.pagination.pageNum = page\r\n this.fetchList()\r\n },\r\n\r\n handleSelectionChange(rows) {\r\n this.selectedRows = rows\r\n },\r\n\r\n // ==================== 无后端接口的操作 ====================\r\n handleDeleteSelected() {\r\n this.$message.info('后端暂未提供该接口')\r\n },\r\n\r\n handleImport() {\r\n this.$message.info('后端暂未提供该接口')\r\n },\r\n\r\n handleDownloadTemplate() {\r\n this.$message.info('后端暂未提供该接口')\r\n },\r\n\r\n // ==================== 新增 ====================\r\n handleNew() {\r\n this.addForm = this.createEmptyAddForm()\r\n this.$nextTick(() => {\r\n this.$refs.addFormRef && this.$refs.addFormRef.clearValidate()\r\n })\r\n this.addDialogVisible = true\r\n },\r\n\r\n handleAddConfirm() {\r\n this.$refs.addFormRef.validate(valid => {\r\n if (!valid) return\r\n const dto = {\r\n teacher: this.buildTeacherPayload(this.addForm.teacher),\r\n attributes: this.buildAttributePayload(this.addForm.attributes)\r\n }\r\n this.addSaving = true\r\n addTeacher(dto).then(() => {\r\n this.$message.success('新增成功')\r\n this.addDialogVisible = false\r\n this.fetchList()\r\n }).catch(() => {\r\n }).finally(() => {\r\n this.addSaving = false\r\n })\r\n })\r\n },\r\n\r\n /** 组装 JYB 请求体(lzzt 不传,后端自动置 0) */\r\n buildTeacherPayload(t) {\r\n const payload = this.cleanPayload({\r\n jybh: t.jybh,\r\n jyxm: t.jyxm,\r\n jysdh: t.jysdh,\r\n bz: t.bz,\r\n zc: t.zc,\r\n xh: t.xh,\r\n zyjszwdj: t.zyjszwdj,\r\n xslx: t.xslx,\r\n jylb: t.jylb,\r\n kh: t.kh,\r\n py: t.py,\r\n zzlb: t.zzlb,\r\n ewyxkbs: t.ewyxkbs,\r\n dslb: t.dslb,\r\n xy: t.xy,\r\n sfzh: t.sfzh,\r\n xb: t.xb,\r\n wxjy: t.wxjy,\r\n wxyy: t.wxyy,\r\n zzljy: t.zzljy,\r\n sjh: t.sjh\r\n })\r\n // 整数/标志字段转 Number\r\n ;['xb', 'xslx', 'ewyxkbs', 'wxjy', 'wxyy', 'zzljy'].forEach(key => {\r\n if (payload[key] !== undefined) payload[key] = Number(payload[key])\r\n })\r\n // 时间字段已由 date-picker 输出 ISO 格式\r\n ;['zyjszwdjsj', 'zcsj'].forEach(key => {\r\n if (t[key]) payload[key] = t[key]\r\n })\r\n return payload\r\n },\r\n\r\n /** 组装 JYSX 请求体(仅非空字段) */\r\n buildAttributePayload(a) {\r\n const payload = this.cleanPayload({\r\n xl: a.xl,\r\n xw: a.xw,\r\n jl: a.jl,\r\n jljsrq: a.jljsrq,\r\n zr: a.zr,\r\n zw: a.zw,\r\n zwsj: a.zwsj,\r\n jszw: a.jszw,\r\n jszwsj: a.jszwsj,\r\n jsdj: a.jsdj,\r\n jsdjsj: a.jsdjsj,\r\n jxwz: a.jxwz,\r\n jxwzsj: a.jxwzsj,\r\n cssj: a.cssj,\r\n rwgzsj: a.rwgzsj,\r\n rdzjl: a.rdzjl,\r\n fblw: a.fblw\r\n })\r\n if (payload.zr !== undefined) payload.zr = Number(payload.zr)\r\n if (payload.jl !== undefined) payload.jl = Number(payload.jl)\r\n return payload\r\n },\r\n\r\n // ==================== 编辑 ====================\r\n handleEdit(row) {\r\n this.editDialogVisible = true\r\n this.editLoading = true\r\n getTeacher(row.jybh).then(response => {\r\n const data = response.data || {}\r\n const form = this.createEmptyAddForm().teacher\r\n Object.keys(form).forEach(key => {\r\n if (data[key] !== undefined && data[key] !== null) form[key] = data[key]\r\n })\r\n this.editForm = form\r\n this.editLoading = false\r\n }).catch(() => {\r\n this.editDialogVisible = false\r\n this.editLoading = false\r\n })\r\n },\r\n\r\n handleEditConfirm() {\r\n this.$refs.editFormRef.validate(valid => {\r\n if (!valid) return\r\n if (!this.editForm.jybh) {\r\n this.$message.warning('缺少教员编号,无法保存')\r\n return\r\n }\r\n const payload = this.buildTeacherPayload(this.editForm)\r\n payload.jybh = this.editForm.jybh\r\n this.editSaving = true\r\n updateTeacher(payload).then(() => {\r\n this.$message.success('保存成功')\r\n this.editDialogVisible = false\r\n this.fetchList()\r\n }).catch(() => {\r\n }).finally(() => {\r\n this.editSaving = false\r\n })\r\n })\r\n },\r\n\r\n // ==================== 离职(逻辑删除) ====================\r\n handleDisable(row) {\r\n if (!row.jybh) {\r\n this.$message.warning('当前行缺少教员编号')\r\n return\r\n }\r\n this.$confirm(`确定要办理教员「${row.jyxm || row.jybh}」离职吗?`, '系统提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n disableTeacher(row.jybh).then(() => {\r\n this.$message.success('已办理离职')\r\n this.fetchList()\r\n }).catch(() => {})\r\n }).catch(() => {})\r\n },\r\n\r\n // ==================== 教员属性 ====================\r\n handleViewAttribute(row) {\r\n this.attributeMode = 'view'\r\n this.attributeJybh = row.jybh\r\n this.attributeData = {}\r\n this.attributeVisible = true\r\n this.attributeLoading = true\r\n getTeacherAttribute(row.jybh).then(response => {\r\n this.attributeData = response.data || {}\r\n this.attributeLoading = false\r\n }).catch(() => {\r\n this.attributeVisible = false\r\n this.attributeLoading = false\r\n })\r\n },\r\n\r\n handleStartEditAttribute() {\r\n this.attributeForm = this.createEmptyAddForm().attributes\r\n Object.keys(this.attributeForm).forEach(key => {\r\n if (this.attributeData[key] !== undefined && this.attributeData[key] !== null) {\r\n this.attributeForm[key] = this.attributeData[key]\r\n }\r\n })\r\n this.attributeForm.jybh = this.attributeJybh\r\n this.attributeMode = 'edit'\r\n },\r\n\r\n handleCancelEditAttribute() {\r\n this.attributeMode = 'view'\r\n },\r\n\r\n handleSaveAttribute() {\r\n const payload = this.buildAttributePayload(this.attributeForm)\r\n payload.jybh = this.attributeJybh\r\n this.attributeSaving = true\r\n updateTeacherAttribute(payload).then(() => {\r\n this.$message.success('保存成功')\r\n this.attributeMode = 'view'\r\n this.handleViewAttribute({ jybh: this.attributeJybh })\r\n }).catch(() => {\r\n }).finally(() => {\r\n this.attributeSaving = false\r\n })\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.teacher-page {\r\n .search-card {\r\n margin-bottom: 16px;\r\n\r\n .search-form {\r\n .el-form-item {\r\n margin-bottom: 0;\r\n padding: 10px 12px;\r\n }\r\n }\r\n\r\n .search-actions {\r\n display: flex;\r\n justify-content: flex-end;\r\n padding: 12px;\r\n border-top: 1px solid #ebeef5;\r\n }\r\n }\r\n\r\n .list-title {\r\n font-size: 16px;\r\n font-weight: 600;\r\n color: #303133;\r\n margin-bottom: 12px;\r\n }\r\n\r\n .list-toolbar {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 12px;\r\n flex-wrap: wrap;\r\n margin-bottom: 16px;\r\n\r\n .left-group,\r\n .right-group {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n flex-wrap: wrap;\r\n }\r\n }\r\n\r\n .table-card {\r\n margin-bottom: 16px;\r\n\r\n ::v-deep(.el-table) {\r\n width: 100%;\r\n }\r\n\r\n .pagination-wrap {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-top: 16px;\r\n }\r\n }\r\n\r\n .danger-text {\r\n color: #f56c6c;\r\n }\r\n}\r\n</style>\r\n\r\n\r\n"]}]} |