Files
education/frontend/node_modules/.cache/babel-loader/507cb5075cdff5033b0ed2408a6aa8b2.json
T

1 line
22 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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\\classHour\\subsidy\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\classHour\\subsidy\\index.vue","mtime":1787567871602},{"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:InVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qcyIpOwp2YXIgX2ZpbGVTYXZlciA9IHJlcXVpcmUoImZpbGUtc2F2ZXIiKTsKdmFyIF9ob3VyU3RhdCA9IHJlcXVpcmUoIkAvYXBpL2NsYXNzSG91ci9ob3VyU3RhdCIpOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwp2YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSB7CiAgbmFtZTogJ1N1YnNpZHlJbmRleCcsCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IFRhYiA9PT09PT09PT09PT09PT09PT09PQogICAgICBhY3RpdmVUYWI6ICdob3VyJywKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g6K++5pe257uf6K6h5p+l6K+i5p2h5Lu2ID09PT09PT09PT09PT09PT09PT09CiAgICAgIGhvdXJGb3JtOiB7CiAgICAgICAgbmQ6ICcnLAogICAgICAgIHhxOiAnJywKICAgICAgICBqeXhtOiAnJwogICAgICB9LAogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDor77ml7botLnnu5/orqHmn6Xor6LmnaHku7YgPT09PT09PT09PT09PT09PT09PT0KICAgICAgZmVlRm9ybTogewogICAgICAgIG5kOiAnJywKICAgICAgICB4cTogJycsCiAgICAgICAganl4bTogJycsCiAgICAgICAga3NmYnpiaDogJycKICAgICAgfSwKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5ZCEIFRhYiDliJfooajnirbmgIEgPT09PT09PT09PT09PT09PT09PT0KICAgICAgaG91clN0YXRlOiB0aGlzLmNyZWF0ZUVtcHR5U3RhdGUoKSwKICAgICAgZmVlU3RhdGU6IHRoaXMuY3JlYXRlRW1wdHlTdGF0ZSgpCiAgICB9OwogIH0sCiAgY29tcHV0ZWQ6IHsKICAgIGN1cnJlbnRGb3JtOiBmdW5jdGlvbiBjdXJyZW50Rm9ybSgpIHsKICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVGFiID09PSAnaG91cicgPyB0aGlzLmhvdXJGb3JtIDogdGhpcy5mZWVGb3JtOwogICAgfSwKICAgIGN1cnJlbnRTdGF0ZTogZnVuY3Rpb24gY3VycmVudFN0YXRlKCkgewogICAgICByZXR1cm4gdGhpcy5hY3RpdmVUYWIgPT09ICdob3VyJyA/IHRoaXMuaG91clN0YXRlIDogdGhpcy5mZWVTdGF0ZTsKICAgIH0KICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB0aGlzLmZldGNoTGlzdCgpOwogIH0sCiAgbWV0aG9kczogewogICAgY3JlYXRlRW1wdHlTdGF0ZTogZnVuY3Rpb24gY3JlYXRlRW1wdHlTdGF0ZSgpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBsaXN0OiBbXSwKICAgICAgICBsb2FkaW5nOiBmYWxzZSwKICAgICAgICBwYWdlTnVtOiAxLAogICAgICAgIHBhZ2VTaXplOiAyMCwKICAgICAgICB0b3RhbDogMAogICAgICB9OwogICAgfSwKICAgIC8qKiDmnoTlu7rmn6Xor6Llj4LmlbDvvIzku4XkvKDpnZ7nqbrlrZfmrrXvvIjkuI7lkI7nq68gUXVlcnkg5a2X5q615LiA6Ie077yJICovYnVpbGRQYXJhbXM6IGZ1bmN0aW9uIGJ1aWxkUGFyYW1zKGZvcm0pIHsKICAgICAgdmFyIHBhcmFtcyA9IHt9OwogICAgICBpZiAoZm9ybS5uZCAmJiBmb3JtLm5kLnRyaW0oKSkgcGFyYW1zLm5kID0gZm9ybS5uZC50cmltKCk7CiAgICAgIGlmIChmb3JtLnhxICYmIGZvcm0ueHEudHJpbSgpKSBwYXJhbXMueHEgPSBmb3JtLnhxLnRyaW0oKTsKICAgICAgaWYgKGZvcm0uanl4bSAmJiBmb3JtLmp5eG0udHJpbSgpKSBwYXJhbXMuanl4bSA9IGZvcm0uanl4bS50cmltKCk7CiAgICAgIGlmIChmb3JtLmtzZmJ6YmggJiYgZm9ybS5rc2ZiemJoLnRyaW0oKSkgcGFyYW1zLmtzZmJ6YmggPSBmb3JtLmtzZmJ6YmgudHJpbSgpOwogICAgICByZXR1cm4gcGFyYW1zOwogICAgfSwKICAgIC8vID09PT09PT09PT09PT09PT09PT09IOafpeivoiA9PT09PT09PT09PT09PT09PT09PQogICAgZmV0Y2hMaXN0OiBmdW5jdGlvbiBmZXRjaExpc3QoKSB7CiAgICAgIHZhciBzdGF0ZSA9IHRoaXMuY3VycmVudFN0YXRlOwogICAgICB2YXIgZm9ybSA9IHRoaXMuY3VycmVudEZvcm07CiAgICAgIHZhciBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHsKICAgICAgICBwYWdlTnVtOiBzdGF0ZS5wYWdlTnVtLAogICAgICAgIHBhZ2VTaXplOiBzdGF0ZS5wYWdlU2l6ZQogICAgICB9LCB0aGlzLmJ1aWxkUGFyYW1zKGZvcm0pKTsKICAgICAgc3RhdGUubG9hZGluZyA9IHRydWU7CiAgICAgIHZhciByZXEgPSB0aGlzLmFjdGl2ZVRhYiA9PT0gJ2hvdXInID8gKDAsIF9ob3VyU3RhdC5saXN0SG91clN0YXRpc3RpY3MpKHBhcmFtcykgOiAoMCwgX2hvdXJTdGF0Lmxpc3RGZWVTdGF0aXN0aWNzKShwYXJhbXMpOwogICAgICByZXEudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgdmFyIGRhdGEgPSByZXMgJiYgcmVzLmRhdGEgfHwge307CiAgICAgICAgc3RhdGUubGlzdCA9IGRhdGEucmVjb3JkcyB8fCBbXTsKICAgICAgICBzdGF0ZS50b3RhbCA9IGRhdGEudG90YWwgfHwgMDsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkgewogICAgICAgIHN0YXRlLmxpc3QgPSBbXTsKICAgICAgICBzdGF0ZS50b3RhbCA9IDA7CiAgICAgIH0pLmZpbmFsbHkoZnVuY3Rpb24gKCkgewogICAgICAgIHN0YXRlLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgfSk7CiAgICB9LAogICAgaGFuZGxlVGFiQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZVRhYkNsaWNrKCkgewogICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdlTnVtID0gMTsKICAgICAgdGhpcy5mZXRjaExpc3QoKTsKICAgIH0sCiAgICBoYW5kbGVRdWVyeTogZnVuY3Rpb24gaGFuZGxlUXVlcnkoKSB7CiAgICAgIHRoaXMuY3VycmVudFN0YXRlLnBhZ2VOdW0gPSAxOwogICAgICB0aGlzLmZldGNoTGlzdCgpOwogICAgfSwKICAgIGhhbmRsZVBhZ2VDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVBhZ2VDaGFuZ2UocGFnZSkgewogICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdlTnVtID0gcGFnZTsKICAgICAgdGhpcy5mZXRjaExpc3QoKTsKICAgIH0sCiAgICBoYW5kbGVTaXplQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVTaXplQ2hhbmdlKHNpemUpIHsKICAgICAgdGhpcy5jdXJyZW50U3RhdGUucGFnZVNpemUgPSBzaXplOwogICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdlTnVtID0gMTsKICAgICAgdGhpcy5mZXRjaExpc3QoKTsKICAgIH0sCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDlr7zlh7ogPT09PT09PT09PT09PT09PT09PT0KICAgIGhhbmRsZUV4cG9ydDogZnVuY3Rpb24gaGFuZGxlRXhwb3J0KCkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICB2YXIgY2xlYW4gPSB0aGlzLmJ1aWxkUGFyYW1zKHRoaXMuY3VycmVudEZvcm0pOwogICAgICB2YXIgaXNIb3VyID0gdGhpcy5hY3RpdmVUYWIgPT09ICdob3VyJzsKICAgICAgdmFyIHJlcSA9IGlzSG91ciA/ICgwLCBfaG91clN0YXQuZXhwb3J0SG91clN0YXRpc3RpY3MpKGNsZWFuKSA6ICgwLCBfaG91clN0YXQuZXhwb3J0RmVlU3RhdGlzdGljcykoY2xlYW4pOwogICAgICB2YXIgZmlsZU5hbWUgPSBpc0hvdXIgPyAn6K++5pe257uf6K6hLnhsc3gnIDogJ+ivvuaXtui0uee7n+iuoS54bHN4JzsKICAgICAgcmVxLnRoZW4oZnVuY3Rpb24gKGJsb2IpIHsKICAgICAgICAoMCwgX2ZpbGVTYXZlci5zYXZlQXMpKGJsb2IsIGZpbGVOYW1lKTsKICAgICAgICBfdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCflr7zlh7rmiJDlip8nKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogICAgfSwKICAgIC8qKiDmlbDlgLznqbrlgLzmmL7npLrkuLogJy0n77yI5L+d55WZIDDvvIkgKi9mbXRWYWx1ZTogZnVuY3Rpb24gZm10VmFsdWUodmFsKSB7CiAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgPyAnLScgOiB2YWw7CiAgICB9CiAgfQp9Ow=="},{"version":3,"names":["_fileSaver","require","_hourStat","name","data","activeTab","hourForm","nd","xq","jyxm","feeForm","ksfbzbh","hourState","createEmptyState","feeState","computed","currentForm","currentState","mounted","fetchList","methods","list","loading","pageNum","pageSize","total","buildParams","form","params","trim","state","Object","assign","req","listHourStatistics","listFeeStatistics","then","res","records","catch","finally","handleTabClick","handleQuery","handlePageChange","page","handleSizeChange","size","handleExport","_this","clean","isHour","exportHourStatistics","exportFeeStatistics","fileName","blob","saveAs","$message","success","fmtValue","val","undefined"],"sources":["src/views/classHour/subsidy/index.vue"],"sourcesContent":["<template>\r\n <div class=\"app-container subsidy-page\">\r\n <div class=\"list-title\">课时补助核算</div>\r\n\r\n <!-- ==================== Tab 切换 ==================== -->\r\n <el-tabs v-model=\"activeTab\" @tab-click=\"handleTabClick\">\r\n <el-tab-pane label=\"课时统计\" name=\"hour\" />\r\n <el-tab-pane label=\"课时费统计\" name=\"fee\" />\r\n </el-tabs>\r\n\r\n <!-- ==================== 1. 查询条件 ==================== -->\r\n <!-- 课时统计 -->\r\n <el-card v-if=\"activeTab === 'hour'\" shadow=\"never\" class=\"search-card\">\r\n <el-form :model=\"hourForm\" label-width=\"100px\" class=\"search-form\" @submit.native.prevent>\r\n <el-row :gutter=\"24\">\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"6\">\r\n <el-form-item label=\"学期年度\">\r\n <el-input v-model=\"hourForm.nd\" placeholder=\"如 2026\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"6\">\r\n <el-form-item label=\"学期序号\">\r\n <el-input v-model=\"hourForm.xq\" placeholder=\"如 1\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"6\">\r\n <el-form-item label=\"教员姓名\">\r\n <el-input v-model=\"hourForm.jyxm\" placeholder=\"请输入教员姓名\" clearable @keyup.enter.native=\"handleQuery\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"6\" class=\"search-actions-col\">\r\n <div class=\"search-actions\">\r\n <el-button type=\"primary\" @click=\"handleQuery\">查询</el-button>\r\n <el-button type=\"primary\" plain @click=\"handleExport\">导出 Excel</el-button>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n </el-card>\r\n\r\n <!-- 课时费统计 -->\r\n <el-card v-else shadow=\"never\" class=\"search-card\">\r\n <el-form :model=\"feeForm\" label-width=\"100px\" class=\"search-form\" @submit.native.prevent>\r\n <el-row :gutter=\"24\">\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"6\">\r\n <el-form-item label=\"学期年度\">\r\n <el-input v-model=\"feeForm.nd\" placeholder=\"如 2026\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"6\">\r\n <el-form-item label=\"学期序号\">\r\n <el-input v-model=\"feeForm.xq\" placeholder=\"如 1\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"6\">\r\n <el-form-item label=\"教员姓名\">\r\n <el-input v-model=\"feeForm.jyxm\" placeholder=\"请输入教员姓名\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"6\">\r\n <el-form-item label=\"标准编号\">\r\n <el-input v-model=\"feeForm.ksfbzbh\" placeholder=\"课时费标准编号\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"24\" class=\"search-actions-col\">\r\n <div class=\"search-actions\">\r\n <el-button type=\"primary\" @click=\"handleQuery\">查询</el-button>\r\n <el-button type=\"primary\" plain @click=\"handleExport\">导出 Excel</el-button>\r\n </div>\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-title\">{{ activeTab === 'hour' ? '课时统计列表' : '课时费统计列表' }}</div>\r\n <el-table v-loading=\"currentState.loading\" :data=\"currentState.list\" border stripe style=\"width: 100%\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"55\" align=\"center\" />\r\n <el-table-column prop=\"jysdh\" label=\"教研室代号\" width=\"100\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"jysmc\" label=\"教研室名称\" width=\"120\" show-overflow-tooltip />\r\n <el-table-column prop=\"jybh\" label=\"教员编号\" width=\"110\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"jyxm\" label=\"教员姓名\" width=\"100\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"zc\" label=\"职称\" width=\"90\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"nf\" label=\"年份\" width=\"70\" align=\"center\" />\r\n <el-table-column prop=\"sbn\" label=\"上半年\" width=\"90\" align=\"right\" header-align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtValue(row.sbn) }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"xbn\" label=\"下半年\" width=\"90\" align=\"right\" header-align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtValue(row.xbn) }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"zj\" label=\"总计\" width=\"90\" align=\"right\" header-align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtValue(row.zj) }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"bzksl\" label=\"标准课时量\" width=\"100\" align=\"right\" header-align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtValue(row.bzksl) }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"cks\" label=\"超课时\" width=\"90\" align=\"right\" header-align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtValue(row.cks) }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"jsgs\" label=\"计算过程\" min-width=\"140\" show-overflow-tooltip />\r\n <el-table-column prop=\"jg\" label=\"结果\" width=\"90\" align=\"right\" header-align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtValue(row.jg) }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"ksfbzmc\" label=\"课时费标准\" width=\"110\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"ksfbz\" label=\"课时费单价\" width=\"100\" align=\"right\" header-align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtValue(row.ksfbz) }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"clksfbz\" label=\"超量课时费单价\" width=\"110\" align=\"right\" header-align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtValue(row.clksfbz) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n\r\n <el-pagination\r\n :current-page=\"currentState.pageNum\"\r\n :page-size=\"currentState.pageSize\"\r\n :total=\"currentState.total\"\r\n :page-sizes=\"[10, 20, 50, 100]\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n class=\"pagination\"\r\n @current-change=\"handlePageChange\"\r\n @size-change=\"handleSizeChange\"\r\n />\r\n </el-card>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { saveAs } from 'file-saver'\r\nimport {\r\n listHourStatistics,\r\n exportHourStatistics,\r\n listFeeStatistics,\r\n exportFeeStatistics\r\n} from '@/api/classHour/hourStat'\r\n\r\nexport default {\r\n name: 'SubsidyIndex',\r\n data() {\r\n return {\r\n // ==================== Tab ====================\r\n activeTab: 'hour',\r\n\r\n // ==================== 课时统计查询条件 ====================\r\n hourForm: {\r\n nd: '',\r\n xq: '',\r\n jyxm: ''\r\n },\r\n\r\n // ==================== 课时费统计查询条件 ====================\r\n feeForm: {\r\n nd: '',\r\n xq: '',\r\n jyxm: '',\r\n ksfbzbh: ''\r\n },\r\n\r\n // ==================== 各 Tab 列表状态 ====================\r\n hourState: this.createEmptyState(),\r\n feeState: this.createEmptyState()\r\n }\r\n },\r\n computed: {\r\n currentForm() {\r\n return this.activeTab === 'hour' ? this.hourForm : this.feeForm\r\n },\r\n currentState() {\r\n return this.activeTab === 'hour' ? this.hourState : this.feeState\r\n }\r\n },\r\n mounted() {\r\n this.fetchList()\r\n },\r\n methods: {\r\n createEmptyState() {\r\n return { list: [], loading: false, pageNum: 1, pageSize: 20, total: 0 }\r\n },\r\n\r\n /** 构建查询参数,仅传非空字段(与后端 Query 字段一致) */\r\n buildParams(form) {\r\n const params = {}\r\n if (form.nd && form.nd.trim()) params.nd = form.nd.trim()\r\n if (form.xq && form.xq.trim()) params.xq = form.xq.trim()\r\n if (form.jyxm && form.jyxm.trim()) params.jyxm = form.jyxm.trim()\r\n if (form.ksfbzbh && form.ksfbzbh.trim()) params.ksfbzbh = form.ksfbzbh.trim()\r\n return params\r\n },\r\n\r\n // ==================== 查询 ====================\r\n fetchList() {\r\n const state = this.currentState\r\n const form = this.currentForm\r\n const params = Object.assign(\r\n { pageNum: state.pageNum, pageSize: state.pageSize },\r\n this.buildParams(form)\r\n )\r\n state.loading = true\r\n const req = this.activeTab === 'hour' ? listHourStatistics(params) : listFeeStatistics(params)\r\n req.then(res => {\r\n const data = (res && res.data) || {}\r\n state.list = data.records || []\r\n state.total = data.total || 0\r\n }).catch(() => {\r\n state.list = []\r\n state.total = 0\r\n }).finally(() => {\r\n state.loading = false\r\n })\r\n },\r\n\r\n handleTabClick() {\r\n this.currentState.pageNum = 1\r\n this.fetchList()\r\n },\r\n\r\n handleQuery() {\r\n this.currentState.pageNum = 1\r\n this.fetchList()\r\n },\r\n\r\n handlePageChange(page) {\r\n this.currentState.pageNum = page\r\n this.fetchList()\r\n },\r\n\r\n handleSizeChange(size) {\r\n this.currentState.pageSize = size\r\n this.currentState.pageNum = 1\r\n this.fetchList()\r\n },\r\n\r\n // ==================== 导出 ====================\r\n handleExport() {\r\n const clean = this.buildParams(this.currentForm)\r\n const isHour = this.activeTab === 'hour'\r\n const req = isHour ? exportHourStatistics(clean) : exportFeeStatistics(clean)\r\n const fileName = isHour ? '课时统计.xlsx' : '课时费统计.xlsx'\r\n req.then(blob => {\r\n saveAs(blob, fileName)\r\n this.$message.success('导出成功')\r\n }).catch(() => {})\r\n },\r\n\r\n /** 数值空值显示为 '-'(保留 0) */\r\n fmtValue(val) {\r\n return val === null || val === undefined ? '-' : val\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.app-container {\r\n padding: 20px;\r\n}\r\n\r\n.subsidy-page {\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 // ==================== 1. 查询条件区域 ====================\r\n .search-card {\r\n margin-bottom: 16px;\r\n\r\n .search-form {\r\n .search-actions-col {\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .search-actions {\r\n display: flex;\r\n gap: 12px;\r\n }\r\n }\r\n }\r\n\r\n // ==================== 2. 数据表格 ====================\r\n .table-card {\r\n .table-title {\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n margin-bottom: 12px;\r\n }\r\n\r\n .pagination {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-top: 12px;\r\n }\r\n }\r\n}\r\n</style>\r\n"],"mappings":"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","ignoreList":[]}]}