forked from liweijie/education
1 line
22 KiB
JSON
1 line
22 KiB
JSON
{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!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=script&lang=js","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\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js","mtime":1787309793142},{"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},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\babel.config.js","mtime":1787567871334},{"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\\babel-loader\\lib\\index.js","mtime":1787309793142},{"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:InVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy93ZWIudXJsLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy93ZWIudXJsLnRvLWpzb24uanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmRlbGV0ZS5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmhhcy5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLnNpemUuanMiKTsKdmFyIF9zdHVkZW50UmVjb3JkcyA9IHJlcXVpcmUoIkAvYXBpL3N0dWRlbnRSZWNvcmRzL3N0dWRlbnRSZWNvcmRzIik7Ci8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHsKICBuYW1lOiAnU2NvcmVJbmRleCcsCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOafpeivouadoeS7tiA9PT09PT09PT09PT09PT09PT09PQogICAgICBxdWVyeUZvcm06IHsKICAgICAgICB4eWJoOiAnJywKICAgICAgICBuZDogJycKICAgICAgfSwKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5pWw5o2u6KGo5qC8ID09PT09PT09PT09PT09PT09PT09CiAgICAgIC8vIOaVsOaNruadpea6kO+8mmdyYWRlcyDor77nqIvmiJDnu6kgLyBwcm9jZXNzIOivvueoi+i/h+eoi+aIkOe7qQogICAgICBhY3RpdmVUYWI6ICdncmFkZXMnLAogICAgICBsb2FkaW5nOiBmYWxzZSwKICAgICAgZ3JhZGVzRGF0YTogW10sCiAgICAgIHByb2Nlc3NHcmFkZXNEYXRhOiBbXSwKICAgICAgcGFnaW5hdGlvbjogewogICAgICAgIHBhZ2VOdW06IDEsCiAgICAgICAgcGFnZVNpemU6IDIwLAogICAgICAgIHRvdGFsOiAwCiAgICAgIH0sCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOWvvOWHuiA9PT09PT09PT09PT09PT09PT09PQogICAgICBleHBvcnRMb2FkaW5nOiBmYWxzZQogICAgfTsKICB9LAogIHdhdGNoOiB7CiAgICBhY3RpdmVUYWI6IGZ1bmN0aW9uIGFjdGl2ZVRhYigpIHsKICAgICAgdGhpcy5oYW5kbGVTZWFyY2goKTsKICAgIH0KICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB0aGlzLmxvYWREYXRhKCk7CiAgfSwKICBtZXRob2RzOiB7CiAgICAvKiog57uE6KOF5p+l6K+i5Y+C5pWw77yM5LuF5Lyg6Z2e56m65YC8ICovYnVpbGRRdWVyeVBhcmFtczogZnVuY3Rpb24gYnVpbGRRdWVyeVBhcmFtcyhwYXJhbXMpIHsKICAgICAgdmFyIHh5YmggPSB0aGlzLnF1ZXJ5Rm9ybS54eWJoICYmIHRoaXMucXVlcnlGb3JtLnh5YmgudHJpbSgpOwogICAgICB2YXIgbmQgPSB0aGlzLnF1ZXJ5Rm9ybS5uZCAmJiB0aGlzLnF1ZXJ5Rm9ybS5uZC50cmltKCk7CiAgICAgIGlmICh4eWJoKSBwYXJhbXMueHliaCA9IHh5Ymg7CiAgICAgIGlmIChuZCkgcGFyYW1zLm5kID0gbmQ7CiAgICB9LAogICAgbG9hZERhdGE6IGZ1bmN0aW9uIGxvYWREYXRhKCkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICB2YXIgcGFyYW1zID0gewogICAgICAgIHBhZ2VOdW06IHRoaXMucGFnaW5hdGlvbi5wYWdlTnVtLAogICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRpb24ucGFnZVNpemUKICAgICAgfTsKICAgICAgdGhpcy5idWlsZFF1ZXJ5UGFyYW1zKHBhcmFtcyk7CiAgICAgIHZhciByZXF1ZXN0ID0gdGhpcy5hY3RpdmVUYWIgPT09ICdncmFkZXMnID8gKDAsIF9zdHVkZW50UmVjb3Jkcy5saXN0U3R1ZGVudEdyYWRlcykocGFyYW1zKSA6ICgwLCBfc3R1ZGVudFJlY29yZHMubGlzdFN0dWRlbnRQcm9jZXNzR3JhZGVzKShwYXJhbXMpOwogICAgICByZXF1ZXN0LnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBkYXRhID0gcmVzLmRhdGEgfHwge307CiAgICAgICAgdmFyIHJlY29yZHMgPSBkYXRhLnJlY29yZHMgfHwgW107CiAgICAgICAgaWYgKF90aGlzLmFjdGl2ZVRhYiA9PT0gJ2dyYWRlcycpIHsKICAgICAgICAgIF90aGlzLmdyYWRlc0RhdGEgPSByZWNvcmRzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfdGhpcy5wcm9jZXNzR3JhZGVzRGF0YSA9IHJlY29yZHM7CiAgICAgICAgfQogICAgICAgIF90aGlzLnBhZ2luYXRpb24udG90YWwgPSBkYXRhLnRvdGFsIHx8IDA7CiAgICAgICAgX3RoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKF90aGlzLmFjdGl2ZVRhYiA9PT0gJ2dyYWRlcycpIHsKICAgICAgICAgIF90aGlzLmdyYWRlc0RhdGEgPSBbXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX3RoaXMucHJvY2Vzc0dyYWRlc0RhdGEgPSBbXTsKICAgICAgICB9CiAgICAgICAgX3RoaXMucGFnaW5hdGlvbi50b3RhbCA9IDA7CiAgICAgICAgX3RoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sCiAgICBoYW5kbGVTZWFyY2g6IGZ1bmN0aW9uIGhhbmRsZVNlYXJjaCgpIHsKICAgICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2VOdW0gPSAxOwogICAgICB0aGlzLmxvYWREYXRhKCk7CiAgICB9LAogICAgaGFuZGxlUGFnZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlUGFnZUNoYW5nZShwYWdlKSB7CiAgICAgIHRoaXMucGFnaW5hdGlvbi5wYWdlTnVtID0gcGFnZTsKICAgICAgdGhpcy5sb2FkRGF0YSgpOwogICAgfSwKICAgIGhhbmRsZVNpemVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVNpemVDaGFuZ2Uoc2l6ZSkgewogICAgICB0aGlzLnBhZ2luYXRpb24ucGFnZVNpemUgPSBzaXplOwogICAgICB0aGlzLnBhZ2luYXRpb24ucGFnZU51bSA9IDE7CiAgICAgIHRoaXMubG9hZERhdGEoKTsKICAgIH0sCiAgICAvKiog6YCa55SoIGJsb2Ig5LiL6L29ICovZG93bmxvYWRCbG9iOiBmdW5jdGlvbiBkb3dubG9hZEJsb2IoYmxvYiwgZmlsZW5hbWUpIHsKICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgIGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTsKICAgICAgbGluay5jbGljaygpOwogICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGxpbmsuaHJlZik7CiAgICB9LAogICAgLyoqIOagoemqjOWvvOWHuuaJgOmcgOWtpuWRmOe8luWPtyAqL3JlcXVpcmVYeWJoOiBmdW5jdGlvbiByZXF1aXJlWHliaChleHBvcnROYW1lKSB7CiAgICAgIHZhciB4eWJoID0gdGhpcy5xdWVyeUZvcm0ueHliaCAmJiB0aGlzLnF1ZXJ5Rm9ybS54eWJoLnRyaW0oKTsKICAgICAgaWYgKCF4eWJoKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCflr7zlh7onICsgZXhwb3J0TmFtZSArICfliY3or7flhYjovpPlhaXlrablkZjnvJblj7cnKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4geHliaDsKICAgIH0sCiAgICAvKiog5a+85Ye66K++56iL5oiQ57upIEV4Y2VsICovaGFuZGxlRXhwb3J0R3JhZGVzOiBmdW5jdGlvbiBoYW5kbGVFeHBvcnRHcmFkZXMoKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICB2YXIgeHliaCA9IHRoaXMucmVxdWlyZVh5YmgoJ+ivvueoi+aIkOe7qScpOwogICAgICBpZiAoIXh5YmgpIHJldHVybjsKICAgICAgdGhpcy5leHBvcnRMb2FkaW5nID0gdHJ1ZTsKICAgICAgKDAsIF9zdHVkZW50UmVjb3Jkcy5leHBvcnRTdHVkZW50R3JhZGVzKSh4eWJoKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBfdGhpczIuZG93bmxvYWRCbG9iKHJlcywgIlx1OEJGRVx1N0EwQlx1NjIxMFx1N0VFOV8iLmNvbmNhdCh4eWJoLCAiLnhscyIpKTsKICAgICAgICBfdGhpczIuJG1lc3NhZ2Uuc3VjY2Vzcygn6K++56iL5oiQ57up5a+85Ye65oiQ5YqfJyk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczIuZXhwb3J0TG9hZGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sCiAgICAvKiog5a+85Ye66K++56iL6L+H56iL5oiQ57upIEV4Y2VsICovaGFuZGxlRXhwb3J0UHJvY2Vzc0dyYWRlczogZnVuY3Rpb24gaGFuZGxlRXhwb3J0UHJvY2Vzc0dyYWRlcygpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgIHZhciB4eWJoID0gdGhpcy5yZXF1aXJlWHliaCgn6K++56iL6L+H56iL5oiQ57upJyk7CiAgICAgIGlmICgheHliaCkgcmV0dXJuOwogICAgICB0aGlzLmV4cG9ydExvYWRpbmcgPSB0cnVlOwogICAgICAoMCwgX3N0dWRlbnRSZWNvcmRzLmV4cG9ydFN0dWRlbnRQcm9jZXNzR3JhZGVzKSh4eWJoKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBfdGhpczMuZG93bmxvYWRCbG9iKHJlcywgIlx1OEJGRVx1N0EwQlx1OEZDN1x1N0EwQlx1NjIxMFx1N0VFOV8iLmNvbmNhdCh4eWJoLCAiLnhscyIpKTsKICAgICAgICBfdGhpczMuJG1lc3NhZ2Uuc3VjY2Vzcygn6K++56iL6L+H56iL5oiQ57up5a+85Ye65oiQ5YqfJyk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczMuZXhwb3J0TG9hZGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0KICB9Cn07"},{"version":3,"names":["_studentRecords","require","name","data","queryForm","xybh","nd","activeTab","loading","gradesData","processGradesData","pagination","pageNum","pageSize","total","exportLoading","watch","handleSearch","mounted","loadData","methods","buildQueryParams","params","trim","_this","request","listStudentGrades","listStudentProcessGrades","then","res","records","catch","handlePageChange","page","handleSizeChange","size","downloadBlob","blob","filename","link","document","createElement","href","URL","createObjectURL","download","click","revokeObjectURL","requireXybh","exportName","$message","warning","handleExportGrades","_this2","exportStudentGrades","concat","success","finally","handleExportProcessGrades","_this3","exportStudentProcessGrades"],"sources":["src/views/student/score/index.vue"],"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>"],"mappings":";;;;;;;;;;;;;;;;AAiFA,IAAAA,eAAA,GAAAC,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAOA;EACAC,IAAA;EACAC,IAAA,WAAAA,KAAA;IACA;MACA;MACAC,SAAA;QACAC,IAAA;QACAC,EAAA;MACA;MAEA;MACA;MACAC,SAAA;MACAC,OAAA;MACAC,UAAA;MACAC,iBAAA;MACAC,UAAA;QAAAC,OAAA;QAAAC,QAAA;QAAAC,KAAA;MAAA;MAEA;MACAC,aAAA;IACA;EACA;EACAC,KAAA;IACAT,SAAA,WAAAA,UAAA;MACA,KAAAU,YAAA;IACA;EACA;EACAC,OAAA,WAAAA,QAAA;IACA,KAAAC,QAAA;EACA;EACAC,OAAA;IACA,mBACAC,gBAAA,WAAAA,iBAAAC,MAAA;MACA,IAAAjB,IAAA,QAAAD,SAAA,CAAAC,IAAA,SAAAD,SAAA,CAAAC,IAAA,CAAAkB,IAAA;MACA,IAAAjB,EAAA,QAAAF,SAAA,CAAAE,EAAA,SAAAF,SAAA,CAAAE,EAAA,CAAAiB,IAAA;MACA,IAAAlB,IAAA,EAAAiB,MAAA,CAAAjB,IAAA,GAAAA,IAAA;MACA,IAAAC,EAAA,EAAAgB,MAAA,CAAAhB,EAAA,GAAAA,EAAA;IACA;IAEAa,QAAA,WAAAA,SAAA;MAAA,IAAAK,KAAA;MACA,KAAAhB,OAAA;MACA,IAAAc,MAAA;QACAV,OAAA,OAAAD,UAAA,CAAAC,OAAA;QACAC,QAAA,OAAAF,UAAA,CAAAE;MACA;MACA,KAAAQ,gBAAA,CAAAC,MAAA;MACA,IAAAG,OAAA,QAAAlB,SAAA,oBAAAmB,iCAAA,EAAAJ,MAAA,QAAAK,wCAAA,EAAAL,MAAA;MACAG,OAAA,CAAAG,IAAA,WAAAC,GAAA;QACA,IAAA1B,IAAA,GAAA0B,GAAA,CAAA1B,IAAA;QACA,IAAA2B,OAAA,GAAA3B,IAAA,CAAA2B,OAAA;QACA,IAAAN,KAAA,CAAAjB,SAAA;UACAiB,KAAA,CAAAf,UAAA,GAAAqB,OAAA;QACA;UACAN,KAAA,CAAAd,iBAAA,GAAAoB,OAAA;QACA;QACAN,KAAA,CAAAb,UAAA,CAAAG,KAAA,GAAAX,IAAA,CAAAW,KAAA;QACAU,KAAA,CAAAhB,OAAA;MACA,GAAAuB,KAAA;QACA,IAAAP,KAAA,CAAAjB,SAAA;UACAiB,KAAA,CAAAf,UAAA;QACA;UACAe,KAAA,CAAAd,iBAAA;QACA;QACAc,KAAA,CAAAb,UAAA,CAAAG,KAAA;QACAU,KAAA,CAAAhB,OAAA;MACA;IACA;IAEAS,YAAA,WAAAA,aAAA;MACA,KAAAN,UAAA,CAAAC,OAAA;MACA,KAAAO,QAAA;IACA;IACAa,gBAAA,WAAAA,iBAAAC,IAAA;MACA,KAAAtB,UAAA,CAAAC,OAAA,GAAAqB,IAAA;MACA,KAAAd,QAAA;IACA;IACAe,gBAAA,WAAAA,iBAAAC,IAAA;MACA,KAAAxB,UAAA,CAAAE,QAAA,GAAAsB,IAAA;MACA,KAAAxB,UAAA,CAAAC,OAAA;MACA,KAAAO,QAAA;IACA;IAEA,iBACAiB,YAAA,WAAAA,aAAAC,IAAA,EAAAC,QAAA;MACA,IAAAC,IAAA,GAAAC,QAAA,CAAAC,aAAA;MACAF,IAAA,CAAAG,IAAA,GAAAC,GAAA,CAAAC,eAAA,CAAAP,IAAA;MACAE,IAAA,CAAAM,QAAA,GAAAP,QAAA;MACAC,IAAA,CAAAO,KAAA;MACAH,GAAA,CAAAI,eAAA,CAAAR,IAAA,CAAAG,IAAA;IACA;IAEA,iBACAM,WAAA,WAAAA,YAAAC,UAAA;MACA,IAAA5C,IAAA,QAAAD,SAAA,CAAAC,IAAA,SAAAD,SAAA,CAAAC,IAAA,CAAAkB,IAAA;MACA,KAAAlB,IAAA;QACA,KAAA6C,QAAA,CAAAC,OAAA,QAAAF,UAAA;QACA;MACA;MACA,OAAA5C,IAAA;IACA;IAEA,mBACA+C,kBAAA,WAAAA,mBAAA;MAAA,IAAAC,MAAA;MACA,IAAAhD,IAAA,QAAA2C,WAAA;MACA,KAAA3C,IAAA;MACA,KAAAU,aAAA;MACA,IAAAuC,mCAAA,EAAAjD,IAAA,EAAAuB,IAAA,WAAAC,GAAA;QACAwB,MAAA,CAAAjB,YAAA,CAAAP,GAAA,8BAAA0B,MAAA,CAAAlD,IAAA;QACAgD,MAAA,CAAAH,QAAA,CAAAM,OAAA;MACA,GAAAzB,KAAA,iBAAA0B,OAAA;QACAJ,MAAA,CAAAtC,aAAA;MACA;IACA;IAEA,qBACA2C,yBAAA,WAAAA,0BAAA;MAAA,IAAAC,MAAA;MACA,IAAAtD,IAAA,QAAA2C,WAAA;MACA,KAAA3C,IAAA;MACA,KAAAU,aAAA;MACA,IAAA6C,0CAAA,EAAAvD,IAAA,EAAAuB,IAAA,WAAAC,GAAA;QACA8B,MAAA,CAAAvB,YAAA,CAAAP,GAAA,0CAAA0B,MAAA,CAAAlD,IAAA;QACAsD,MAAA,CAAAT,QAAA,CAAAM,OAAA;MACA,GAAAzB,KAAA,iBAAA0B,OAAA;QACAE,MAAA,CAAA5C,aAAA;MACA;IACA;EACA;AACA","ignoreList":[]}]} |