Files
education/frontend/node_modules/.cache/vue-loader/56e1aa8064a3f3d7a311d73097298d2a.json
T

1 line
12 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\\student\\score\\index.vue?vue&type=style&index=0&id=2d358e97&scoped=true&lang=scss","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\student\\score\\index.vue","mtime":1787567871639},{"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:CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoNCi5zY29yZS1wYWdlIHsNCiAgcGFkZGluZzogMjBweDsNCg0KICAuc2VhcmNoLWNhcmQgew0KICAgIG1hcmdpbi1ib3R0b206IDE2cHg7DQoNCiAgICAuc2VhcmNoLWZvcm0gew0KICAgICAgLmVsLWZvcm0taXRlbSB7DQogICAgICAgIG1hcmdpbi1ib3R0b206IDA7DQogICAgICB9DQogICAgfQ0KICB9DQoNCiAgLnRvb2xiYXIgew0KICAgIG1hcmdpbi1ib3R0b206IDE2cHg7DQogIH0NCg0KICAudGFibGUtY2FyZCB7DQogICAgLmVsLXRhYmxlIHsNCiAgICAgIHdpZHRoOiAxMDAlOw0KICAgIH0NCg0KICAgIC5wYWdpbmF0aW9uIHsNCiAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOw0KICAgICAgbWFyZ2luLXRvcDogMTZweDsNCiAgICB9DQogIH0NCn0NCg=="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2NA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/views/student/score","sourcesContent":["<template>\r\n <div class=\"app-container score-page\">\r\n <!-- ==================== 1. 查询条件区域 ==================== -->\r\n <el-card shadow=\"never\" class=\"search-card\">\r\n <el-form :model=\"queryForm\" label-width=\"90px\" inline class=\"search-form\">\r\n <el-form-item label=\"学员编号\">\r\n <el-input v-model=\"queryForm.xybh\" placeholder=\"请输入学员编号\" clearable style=\"width: 200px\" />\r\n </el-form-item>\r\n <el-form-item label=\"年度\">\r\n <el-input v-model=\"queryForm.nd\" placeholder=\"如 2026\" clearable style=\"width: 140px\" />\r\n </el-form-item>\r\n <el-form-item>\r\n <el-button type=\"primary\" @click=\"handleSearch\">查询</el-button>\r\n </el-form-item>\r\n </el-form>\r\n </el-card>\r\n\r\n <!-- ==================== 2. 成绩列表区域 ==================== -->\r\n <div class=\"toolbar\">\r\n <el-button type=\"primary\" :loading=\"exportLoading\" @click=\"handleExportGrades\">导出课程成绩</el-button>\r\n <el-button type=\"primary\" :loading=\"exportLoading\" @click=\"handleExportProcessGrades\">导出课程过程成绩</el-button>\r\n </div>\r\n\r\n <el-card shadow=\"never\" class=\"table-card\">\r\n <el-tabs v-model=\"activeTab\">\r\n <!-- 课程成绩 -->\r\n <el-tab-pane label=\"课程成绩\" name=\"grades\">\r\n <el-table v-loading=\"loading\" :data=\"gradesData\" stripe border style=\"width: 100%\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"55\" align=\"center\" />\r\n <el-table-column prop=\"xybh\" label=\"学员编号\" min-width=\"110\" show-overflow-tooltip />\r\n <el-table-column prop=\"kmbh\" label=\"科目编号\" min-width=\"110\" show-overflow-tooltip />\r\n <el-table-column prop=\"klx\" label=\"课类型\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"kscj\" label=\"考试成绩\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"pscj\" label=\"平时成绩\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"zzcj\" label=\"最终成绩\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"bkcj\" label=\"补考成绩\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"bkcs\" label=\"补考次数\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"ksqk\" label=\"考试情况\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"qwxf\" label=\"期望学分\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"ytg\" label=\"已通过\" min-width=\"80\" align=\"center\" />\r\n <el-table-column prop=\"nd\" label=\"年度\" min-width=\"80\" align=\"center\" />\r\n </el-table>\r\n <el-empty v-if=\"!loading && gradesData.length === 0\" description=\"暂无课程成绩数据\" :image-size=\"60\" />\r\n </el-tab-pane>\r\n\r\n <!-- 课程过程成绩 -->\r\n <el-tab-pane label=\"课程过程成绩\" name=\"process\">\r\n <el-table v-loading=\"loading\" :data=\"processGradesData\" stripe border style=\"width: 100%\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"55\" align=\"center\" />\r\n <el-table-column prop=\"xybh\" label=\"学员编号\" min-width=\"110\" show-overflow-tooltip />\r\n <el-table-column prop=\"kmbh\" label=\"科目编号\" min-width=\"110\" show-overflow-tooltip />\r\n <el-table-column prop=\"klx\" label=\"课类型\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"yscj\" label=\"原始成绩\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"zzcj\" label=\"最终成绩\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"bkcj1\" label=\"补考1\" min-width=\"80\" align=\"center\" />\r\n <el-table-column prop=\"bkcj2\" label=\"补考2\" min-width=\"80\" align=\"center\" />\r\n <el-table-column prop=\"bkcj3\" label=\"补考3\" min-width=\"80\" align=\"center\" />\r\n <el-table-column prop=\"ksqk\" label=\"考试情况\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"nd\" label=\"年度\" min-width=\"80\" align=\"center\" />\r\n </el-table>\r\n <el-empty v-if=\"!loading && processGradesData.length === 0\" description=\"暂无课程过程成绩数据\" :image-size=\"60\" />\r\n </el-tab-pane>\r\n </el-tabs>\r\n\r\n <div class=\"pagination\">\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=\"handlePageChange\"\r\n />\r\n </div>\r\n </el-card>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport {\r\n listStudentGrades,\r\n listStudentProcessGrades,\r\n exportStudentGrades,\r\n exportStudentProcessGrades\r\n} from \"@/api/studentRecords/studentRecords\"\r\n\r\nexport default {\r\n name: 'ScoreIndex',\r\n data() {\r\n return {\r\n // ==================== 查询条件 ====================\r\n queryForm: {\r\n xybh: '',\r\n nd: ''\r\n },\r\n\r\n // ==================== 数据表格 ====================\r\n // 数据来源:grades 课程成绩 / process 课程过程成绩\r\n activeTab: 'grades',\r\n loading: false,\r\n gradesData: [],\r\n processGradesData: [],\r\n pagination: { pageNum: 1, pageSize: 20, total: 0 },\r\n\r\n // ==================== 导出 ====================\r\n exportLoading: false\r\n }\r\n },\r\n watch: {\r\n activeTab() {\r\n this.handleSearch()\r\n }\r\n },\r\n mounted() {\r\n this.loadData()\r\n },\r\n methods: {\r\n /** 组装查询参数,仅传非空值 */\r\n buildQueryParams(params) {\r\n const xybh = this.queryForm.xybh && this.queryForm.xybh.trim()\r\n const nd = this.queryForm.nd && this.queryForm.nd.trim()\r\n if (xybh) params.xybh = xybh\r\n if (nd) params.nd = nd\r\n },\r\n\r\n loadData() {\r\n this.loading = true\r\n const params = {\r\n pageNum: this.pagination.pageNum,\r\n pageSize: this.pagination.pageSize\r\n }\r\n this.buildQueryParams(params)\r\n const request = this.activeTab === 'grades' ? listStudentGrades(params) : listStudentProcessGrades(params)\r\n request.then(res => {\r\n const data = res.data || {}\r\n const records = data.records || []\r\n if (this.activeTab === 'grades') {\r\n this.gradesData = records\r\n } else {\r\n this.processGradesData = records\r\n }\r\n this.pagination.total = data.total || 0\r\n this.loading = false\r\n }).catch(() => {\r\n if (this.activeTab === 'grades') {\r\n this.gradesData = []\r\n } else {\r\n this.processGradesData = []\r\n }\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.loadData()\r\n },\r\n handlePageChange(page) {\r\n this.pagination.pageNum = page\r\n this.loadData()\r\n },\r\n handleSizeChange(size) {\r\n this.pagination.pageSize = size\r\n this.pagination.pageNum = 1\r\n this.loadData()\r\n },\r\n\r\n /** 通用 blob 下载 */\r\n downloadBlob(blob, filename) {\r\n const link = document.createElement('a')\r\n link.href = URL.createObjectURL(blob)\r\n link.download = filename\r\n link.click()\r\n URL.revokeObjectURL(link.href)\r\n },\r\n\r\n /** 校验导出所需学员编号 */\r\n requireXybh(exportName) {\r\n const xybh = this.queryForm.xybh && this.queryForm.xybh.trim()\r\n if (!xybh) {\r\n this.$message.warning('导出' + exportName + '前请先输入学员编号')\r\n return null\r\n }\r\n return xybh\r\n },\r\n\r\n /** 导出课程成绩 Excel */\r\n handleExportGrades() {\r\n const xybh = this.requireXybh('课程成绩')\r\n if (!xybh) return\r\n this.exportLoading = true\r\n exportStudentGrades(xybh).then(res => {\r\n this.downloadBlob(res, `课程成绩_${xybh}.xls`)\r\n this.$message.success('课程成绩导出成功')\r\n }).catch(() => {}).finally(() => {\r\n this.exportLoading = false\r\n })\r\n },\r\n\r\n /** 导出课程过程成绩 Excel */\r\n handleExportProcessGrades() {\r\n const xybh = this.requireXybh('课程过程成绩')\r\n if (!xybh) return\r\n this.exportLoading = true\r\n exportStudentProcessGrades(xybh).then(res => {\r\n this.downloadBlob(res, `课程过程成绩_${xybh}.xls`)\r\n this.$message.success('课程过程成绩导出成功')\r\n }).catch(() => {}).finally(() => {\r\n this.exportLoading = false\r\n })\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.score-page {\r\n padding: 20px;\r\n\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 }\r\n }\r\n }\r\n\r\n .toolbar {\r\n margin-bottom: 16px;\r\n }\r\n\r\n .table-card {\r\n .el-table {\r\n width: 100%;\r\n }\r\n\r\n .pagination {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-top: 16px;\r\n }\r\n }\r\n}\r\n</style>"]}]}