1 line
28 KiB
JSON
1 line
28 KiB
JSON
{"remainingRequest":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/vue-loader/lib/index.js??vue-loader-options!/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/src/views/user/Student.vue?vue&type=script&lang=js","dependencies":[{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/src/views/user/Student.vue","mtime":1742646402778},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/cache-loader/dist/cjs.js","mtime":1743264595665},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/babel-loader/lib/index.js","mtime":1743264596348},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/cache-loader/dist/cjs.js","mtime":1743264595665},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/vue-loader/lib/index.js","mtime":1743264596512}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CmltcG9ydCB7IGdyYWRlcywgZ3JhZGVNYXAsIHNleGVzLCBzZXhNYXAgfSBmcm9tICdAL3V0aWxzL2NvbnN0JzsKaW1wb3J0IHsgZXhwb3J0RGF0YSB9IGZyb20gJ0AvdXRpbHMvZXhjZWwnOwppbXBvcnQgY3JlYXRlQ29sdW1ucyBmcm9tICdAL2hlbHBlcnMvaW1wb3J0dXNlci1jb2x1bW5zJzsKaW1wb3J0IEVkaXRTdHVkZW50IGZyb20gJ0AvY29tcG9uZW50cy9lZGl0L0VkaXRTdHVkZW50JzsKaW1wb3J0IFVzZXJJbXBvcnQgZnJvbSAnQC9jb21wb25lbnRzL2NvbW1vbi9Vc2VySW1wb3J0JzsKaW1wb3J0IEdyYW50Um9sZSBmcm9tICdAL2NvbXBvbmVudHMvY29tbW9uL0dyYW50Um9sZSc7CgovLyDmoLzlvI/ljJbml6XmnJ/lh73mlbAKZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlU3RyaW5nKSB7CiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpOyAvLyDlsIbml6XmnJ/lrZfnrKbkuLLovazmjaLkuLogRGF0ZSDlr7nosaEKICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpOyAvLyDojrflj5blubTku70KICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpOyAvLyDojrflj5bmnIjku73vvIzlubbooaXpm7YKICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7IC8vIOiOt+WPluaXpeacn++8jOW5tuihpembtgogIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gOyAvLyDov5Tlm57moLzlvI/ljJblkI7nmoTml6XmnJ/lrZfnrKbkuLIKfQoKCi8vIOWumuS5ieeKtuaAgeaYoOWwhOWvueixoQpjb25zdCBzdGF0dXNNYXAgPSB7CiAgMDogJ+ato+W4uCcsCiAgMTogJ+W8guW4uCcsCiAgLy8g5YW25LuW54q25oCB5Lul5q2k57G75o6oCn07Cgpjb25zdCBTVFVERU5UX0NPTFVNTlMgPSBbCiAgeyB0aXRsZTogJ+WtpuWPtycsIGRhdGFJbmRleDogJ3N0aWQnICwgYWxpZ246ICdjZW50ZXInfSwKICB7IHRpdGxlOiAn5aeT5ZCNJywgZGF0YUluZGV4OiAndXNlck5hbWUnICwgYWxpZ246ICdjZW50ZXInIH0sCgl7IAogICAgICB0aXRsZTogJ+aAp+WIqycsIAogICAgICBkYXRhSW5kZXg6ICdnZW5kZXInLAoJCQlhbGlnbjogJ2NlbnRlcicsCiAgICAgIGN1c3RvbVJlbmRlcjogKHRleHQsIHJlY29yZCkgPT4gewogICAgICAgIHJldHVybiB0ZXh0ID8gdGV4dCA6ICfnlLcnOwogICAgICB9CiAgICB9LAogIHsgCiAgICB0aXRsZTogJ+WtpumZoicsIAogICAgZGF0YUluZGV4OiAnY29sbGVnZUlkJywgCgkJYWxpZ246ICdjZW50ZXInLAogICAgY3VzdG9tUmVuZGVyOiAodGV4dCwgcmVjb3JkKSA9PiBncmFkZU1hcFtyZWNvcmQuY29sbGVnZUlkXSAvLyDmoLnmja7lrabpmaIgSUQg5p+l5om+5pig5bCE5a+56LGh5Lit55qE5a2m6Zmi5ZCN56ewCiAgfSwKICB7IAogICAgdGl0bGU6ICfnlJ/ml6UnLCAKICAgIGRhdGFJbmRleDogJ2JpcnRoZGF0ZScsIAoJCWFsaWduOiAnY2VudGVyJywKICAgIGN1c3RvbVJlbmRlcjogKHRleHQsIHJlY29yZCkgPT4gZm9ybWF0RGF0ZShyZWNvcmQuYmlydGhkYXRlKSAvLyDlnKjmuLLmn5Pml7bosIPnlKggZm9ybWF0RGF0ZSDlh73mlbAKICB9LAoJeyAKICAgICAgdGl0bGU6ICfmiYvmnLonLCAKICAgICAgZGF0YUluZGV4OiAncGhvbmUnLAoJCQlhbGlnbjogJ2NlbnRlcicsCiAgICAgIGN1c3RvbVJlbmRlcjogKHRleHQsIHJlY29yZCkgPT4gewogICAgICAgIHJldHVybiB0ZXh0ID8gdGV4dCA6ICfml6AnOwogICAgICB9CiAgICB9LAogIHsgCiAgICB0aXRsZTogJ+eKtuaAgScsIAogICAgZGF0YUluZGV4OiAndXNlclN0YXR1cycsCgkJYWxpZ246ICdjZW50ZXInLAogICAgY3VzdG9tUmVuZGVyOiAodGV4dCwgcmVjb3JkKSA9PiBzdGF0dXNNYXBbcmVjb3JkLnVzZXJTdGF0dXNdIC8vIOagueaNrueKtuaAgeWAvOafpeaJvuaYoOWwhOWvueixoeS4reeahOeKtuaAgeWQjeensAogIH0sCiAgewogICAgdGl0bGU6ICfmk43kvZwnLAogICAgYWxpZ246ICdjZW50ZXInLAogICAgd2lkdGg6IDEwMCwKICAgIHNjb3BlZFNsb3RzOiB7IGN1c3RvbVJlbmRlcjogJ2FjdGlvbicgfSwKICB9LApdOwoKZnVuY3Rpb24gZXhwb3J0RXhjZWwoZGF0YSkgewogIGNvbnN0IGhlYWRlciA9IFNUVURFTlRfQ09MVU1OUy5tYXAodiA9PiB2LnRpdGxlKTsKICBoZWFkZXIucG9wKCk7IC8vIOWOu+aOieacgOWQjuS4gOagj+aTjeS9nOagjwogIHJldHVybiBleHBvcnREYXRhKHsKICAgIG5hbWU6ICflrabnlJ/kv6Hmga8nLAogICAgZGF0YSwKICAgIGhlYWRlciwKICAgIGtleU1hcDogewogICAgICBzdGlkOiAn5a2m5Y+3JywKICAgICAgdXNlck5hbWU6ICflp5PlkI0nLAogICAgICBnZW5kZXI6ICfmgKfliKsnLAogICAgICBjb2xsZWdlSWQ6ICflrabpmaInLAogICAgICBiaXJ0aGRhdGU6ICfnlJ/ml6UnLAogICAgICBwaG9uZTogJ+aJi+acuicsCiAgICAgIHVzZXJTdGF0dXM6ICfnirbmgIEnLAogICAgfSwKICB9KTsKfQoKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICdTdHVkZW50JywKICBtZXRhSW5mbzogewogICAgdGl0bGU6ICflrabnlJ/nrqHnkIYnLAogIH0sCiAgY29tcG9uZW50czogewogICAgVXNlckltcG9ydCwKICB9LAogIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBsb2FkaW5nOiBmYWxzZSwKICAgICAgZXhwb3J0aW5nOiBmYWxzZSwKICAgICAgcXVlcnk6IHt9LAogICAgICBzZWxlY3RlZEtleXM6IFtdLAogICAgICB1c2VyczogW10sCgkJCW9yaWdpbmFsVXNlcnM6IFtdLAogICAgICBjdXJyZW50OiAxLAogICAgICBwYWdlU2l6ZTogMTIsCiAgICAgIHRvdGFsOiAwLAogICAgICB0YWJsZUNvbHVtbnM6IFNUVURFTlRfQ09MVU1OUywKICAgIH07CiAgfSwKICBjb21wdXRlZDogewogICAgc2VhcmNoT3B0aW9ucygpIHsKICAgICAgcmV0dXJuIGNyZWF0ZVNlYXJjaE9wdGlvbnMuY2FsbCh0aGlzKTsKICAgIH0sCiAgICBjdXJDb2x1bW5zKCkgewogICAgICByZXR1cm4gY3JlYXRlQ29sdW1ucyh0aGlzLmltcG9ydFVzZXJUeXBlKTsKICAgIH0sCiAgICB1c2VyKCkgewogICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUudXNlcjsKICAgIH0sCiAgICBwYWdpbmF0aW9uKCkgewogICAgICByZXR1cm4gewogICAgICAgIGN1cnJlbnQ6IHRoaXMuY3VycmVudCwKICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwKICAgICAgICB0b3RhbDogdGhpcy50b3RhbCwKICAgICAgfTsKICAgIH0sCiAgfSwKICBtb3VudGVkKCkgewogICAgdGhpcy4kd2F0Y2goKCkgPT4gW3RoaXMucGFnZVNpemUsIHRoaXMuY3VycmVudF0sIHRoaXMuZ2V0RGF0YSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7CiAgfSwKICBtZXRob2RzOiB7CiAgICAvLyDmkJzntKIKICAgIHNlYXJjaCgpIHsKICAgICAgdGhpcy5jdXJyZW50ID0gMTsKICAgICAgdGhpcy5nZXREYXRhKCk7CiAgICB9LAogICAgLy8g5YiG6aG15YiH5o2iCiAgICBjaGFuZ2VQYWdlKHsgcGFnZVNpemUsIGN1cnJlbnQgfSkgewogICAgICBPYmplY3QuYXNzaWduKHRoaXMsIHsgcGFnZVNpemUsIGN1cnJlbnQgfSk7CiAgICB9LAogICAgLy8g6I635Y+W5pWw5o2uCiAgICBnZXREYXRhKCkgewogICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcmVmcy5zZWFyY2hGb3JtLmdldFJlc3VsdCgpOwoJCQljb25zb2xlLmxvZyh0aGlzLnF1ZXJ5KTsKICAgICAgdGhpcy4kYXBpLkFsbFVzZXIoe30pLnRoZW4oZGF0YSA9PiB7CiAgICAgICAgLy8g6L+H5ruk5p2D6ZmQ5aSn5LqOMeeahOeUqOaItwogICAgICAgIHRoaXMub3JpZ2luYWxVc2VycyA9IGRhdGEuZGF0YS5maWx0ZXIodXNlciA9PiB1c2VyLnVzZXJQcml2aWxlZ2VzID4gMSk7CgkJCQl0aGlzLmZpbHRlclVzZXJzKCk7IC8vIOiwg+eUqOi/h+a7pOeUqOaIt+aWueazlQogICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnVzZXJzLmxlbmd0aDsKICAgICAgfSkuY2F0Y2goZSA9PiB7CiAgICAgICAgY29uc29sZS5lcnJvcihlKTsKICAgICAgICAvLyB0aGlzLiRtZXNzYWdlLmVycm9yKGUubXNnIHx8ICfojrflj5bmlbDmja7lpLHotKUnKTsKICAgICAgfSkuZmluYWxseSgoKSA9PiB7CiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgIH0pOwogICAgfSwKCQlmaWx0ZXJVc2VycygpIHsKICAJCWxldCBmaWx0ZXJlZFVzZXJzID0gdGhpcy5vcmlnaW5hbFVzZXJzLnNsaWNlKCk7IC8vIOWkjeWItuWOn+Wni+eUqOaIt+aVsOaNrgoJCQljb25zb2xlLmxvZyhmaWx0ZXJlZFVzZXJzKQogIAlpZiAodGhpcy5xdWVyeS5zaWQpIHsKICAgIGZpbHRlcmVkVXNlcnMgPSBmaWx0ZXJlZFVzZXJzLmZpbHRlcih1c2VyID0+IHVzZXIuc3RpZC5pbmNsdWRlcyh0aGlzLnF1ZXJ5LnNpZCkpOwogIAl9CgogIGlmICh0aGlzLnF1ZXJ5Lm5hbWUpIHsKICAgIGZpbHRlcmVkVXNlcnMgPSBmaWx0ZXJlZFVzZXJzLmZpbHRlcih1c2VyID0+IHVzZXIudXNlck5hbWUuaW5jbHVkZXModGhpcy5xdWVyeS5uYW1lKSk7CiAgfQoKICBpZiAodGhpcy5xdWVyeS5zZXgpIHsKICAgIGZpbHRlcmVkVXNlcnMgPSBmaWx0ZXJlZFVzZXJzLmZpbHRlcih1c2VyID0+IHVzZXIuZ2VuZGVyID09PSB0aGlzLnF1ZXJ5LnNleCk7CiAgfQoKICBpZiAodGhpcy5xdWVyeS5jb2xsYWdlSWQpIHsKICAgIGZpbHRlcmVkVXNlcnMgPSBmaWx0ZXJlZFVzZXJzLmZpbHRlcih1c2VyID0+IHVzZXIuY29sbGFnZUlkID09PSB0aGlzLnF1ZXJ5LmNvbGxhZ2VJZCk7CiAgfQoKICB0aGlzLnVzZXJzID0gZmlsdGVyZWRVc2VyczsKfSwKCgogICAgLy8g6YeN572u5a+G56CBCiAgICByZXNldFBhc3N3b3JkKHJvdykgewogICAgICBjb25zdCBrZXkgPSBEYXRlLm5vdygpOwogICAgICB0aGlzLiRtZXNzYWdlLmxvYWRpbmcoewogICAgICAgIGtleSwKICAgICAgICBjb250ZW50OiAn6K+356iN5ZCOJywKICAgICAgICBkdXJhdGlvbjogMCwKICAgICAgfSk7CiAgICAgIHRoaXMuJGFwaS5yZXNldFBhc3N3b3JkKHsKICAgICAgICB0eXBlOiAnc3R1ZGVudCcsCiAgICAgICAgYWNjb3VudDogcm93LnNpZCwKICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKHsgY29udGVudDogJ+W3sumHjee9ricsIGtleSB9KTsKICAgICAgfSkuY2F0Y2goKCkgPT4gewogICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoeyBjb250ZW50OiAn6YeN572u5aSx6LSlJywga2V5IH0pOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDmt7vliqDlrabnlJ8KICAgIGFkZFVzZXIoKSB7CiAgICAgIGxldCB2bm9kZTsKICAgICAgdGhpcy4kY29uZmlybSh7CiAgICAgICAgdGl0bGU6ICfmt7vliqDlrabnlJ8nLAogICAgICAgIGNvbnRlbnQ6IGggPT4gKHZub2RlID0gaChFZGl0U3R1ZGVudCkpLAogICAgICAgIG9uT2s6IGFzeW5jICgpID0+IHsKCQkJCQljb25zdCB2YWx1ZXMgPSBhd2FpdCB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS52YWxpZGF0ZSgpOwoJCQkJCWNvbnN0IGRhdGEgPSB7CiAgICAJCQkJc1RJZDogdmFsdWVzLnN0aWQsCgkJCQkJCXVzZXJQYXNzd29yZDogdmFsdWVzLnBhc3N3b3JkLAoJCQkJCQkvLyDnlKjmiLfmnYPpmZDlrabnlJ8KICAgCQkJCQl1c2VyUHJpdmlsZWdlczogMiwKICAgCQkJCQl1c2VyTmFtZTogdmFsdWVzLnVzZXJOYW1lLAogICAJCQkJCWNvbGxlZ2VJZDogdmFsdWVzLmNvbGxlZ2VJZCwKICAgCQkJCQl1c2VyU3RhdHVzOiAwLAogICAJCQkJCWVtYWlsOiB2YWx1ZXMuZW1haWwsCiAgIAkJCQkJcGhvbmU6IHZhbHVlcy5waG9uZSwKCQkJCQl9OwogICAgICAgICAgCiAgICAgICAgICByZXR1cm4gdGhpcy4kYXBpLkNyZWF0ZVVzZXIoZGF0YSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygn5re75Yqg5oiQ5YqfJyk7CiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpOwogICAgICAgICAgfSkuY2F0Y2goZSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZS5tc2cgfHwgJ+a3u+WKoOWksei0pScpOwogICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgfSk7CiAgICB9LAogICAgLy8g5L+u5pS55a2m55SfCiAgICBlZGl0VXNlcihyb3cpIHsKICAgICAgbGV0IHZub2RlOwogICAgICB0aGlzLiRjb25maXJtKHsKICAgICAgICB0aXRsZTogJ+S/ruaUueS/oeaBrycsCiAgICAgICAgY29udGVudDogaCA9PiAodm5vZGUgPSA8RWRpdFN0dWRlbnQgdHlwZT0idXBkYXRlIiBkYXRhPXtyb3d9IC8+KSwKICAgICAgICBvbk9rOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS52YWxpZGF0ZSgpOwoJCQkJCWNvbnNvbGUubG9nKHZhbHVlcykKCQkJCQlsZXQgZGF0YT17CgkJCQkJCXN0aWQ6IHJvdy5zdGlkLAoJCQkJCQl1c2VySWQ6cm93LnVzZXJJZCwKCQkJCQkJdXNlck5hbWU6dmFsdWVzLnVzZXJOYW1lLAoJCQkJCQl1c2VyUGFzc3dvcmQ6dmFsdWVzLnBhc3N3b3JkLAoJCQkJCQl1c2VyUHJpdmlsZWdlczp2YWx1ZXMudXNlclByaXZpbGVnZXMsCgkJCQkJCXBob25lOnZhbHVlcy5waG9uZSwKCQkJCQkJZW1haWw6dmFsdWVzLmVtYWlsLAoJCQkJCQljb2xsZWdlSWQ6dmFsdWVzLmNvbGxlZ2VJZCwKCQkJCQkJdXNlclN0YXR1czowLAoJCQkJCX0KICAgICAgICAgIHJldHVybiB0aGlzLiRhcGkuVVB1c2VyKGRhdGEpLnRoZW4oKCkgPT4gewogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoJ+S/ruaUueaIkOWKnycpOwogICAgICAgICAgICB0aGlzLmdldERhdGEoKTsKICAgICAgICAgIH0pLmNhdGNoKGUgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKGUubXNnIHx8ICfkv67mlLnlpLHotKUnKTsKICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgIH0pOwogICAgfSwKICAgIC8vIOWIoOmZpOWtpueUnwogICAgZGVsZXRlVXNlcihyb3cpIHsKICAgICAgY29uc3Qga2V5ID0gTWF0aC5yYW5kb20oKTsKICAgICAgdGhpcy4kbWVzc2FnZS5sb2FkaW5nKHsgY29udGVudDogJ+ato+WcqOWIoOmZpCcsIGR1cmF0aW9uOiAwLCBrZXkgfSk7CiAgICAgIHRoaXMuJGFwaS5kZWxldGVVc2VyKCdzdHVkZW50JywgewogICAgICAgIGlkczogW3Jvdy5zaWRdLAogICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoeyBjb250ZW50OiAn5Yig6Zmk5oiQ5YqfIScsIGtleSB9KTsKICAgICAgICB0aGlzLmdldERhdGEoKTsKICAgICAgfSkuY2F0Y2goZSA9PiB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcih7IGNvbnRlbnQ6IGUubXNnIHx8ICfliKDpmaTlpLHotKUhJywga2V5IH0pOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDmibnph4/liKDpmaQKICAgIGJhdGNoRGVsZXRlKHJvdykgewogICAgICB0aGlzLiRtb2RhbC5jb25maXJtKHsKICAgICAgICB0aXRsZTogYOehruiupOWIoOmZpOmAieS4reeahCR7dGhpcy5zZWxlY3RlZEtleXMubGVuZ3RofemhueaVsOaNrj9gLAogICAgICAgIG9uT2s6ICgpID0+IHsKCQkJCQlsZXQgZGF0YT17CgkJCQkJCWxpc3Q6dGhpcy5zZWxlY3RlZEtleXMubWFwKGluZGV4ID0+IHRoaXMudXNlcnNbaW5kZXhdLnVzZXJJZCkKCQkJCQl9CgkJCQkJdGhpcy4kYXBpLmRlbGV0ZUxpc3QoZGF0YSkudGhlbigoKSA9PiB7CiAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoJ+WIoOmZpOaIkOWKnyEnKTsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzLnNwbGljZSgwKTsKICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpOwogICAgICAgIH0pLmNhdGNoKGUgPT4gewogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlLm1zZyB8fCAn5Yig6Zmk5aSx6LSlIScpOwogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9KQoJCQkJfQogICAgICB9KTsKICAgIH0sCiAgICAvLyDlr7zlh7rlrabnlJ8KICAgIGV4cG9ydEFsbCgpIHsKICAgICAgdGhpcy5leHBvcnRpbmcgPSB0cnVlOwogICAgICB0aGlzLiRhcGkuQWxsVXNlcigpLnRoZW4oZGF0YSA9PiB7CiAgICAgICAgLy8g6L+H5ruk5p2D6ZmQMueahOeUqOaItwoJCQkJcmV0dXJuIGV4cG9ydEV4Y2VsKGRhdGEuZGF0YS5maWx0ZXIodXNlciA9PiB1c2VyLnVzZXJQcml2aWxlZ2VzID4gMSkpOwogICAgICB9KS50aGVuKGRhdGEgPT4gewogICAgICAgIHJldHVybiBleHBvcnRFeGNlbChkYXRhLmRhdGEpOwogICAgICB9KS5jYXRjaChlID0+IHsKICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZS5tc2cgfHwgJ+WvvOWHuuWksei0pScpOwogICAgICB9KS5maW5hbGx5KCgpID0+IHsKICAgICAgICB0aGlzLmV4cG9ydGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDmjojmnYPnlKjmiLcKICAgIGdyYW50Um9sZShpdGVtKSB7CiAgICAgIGxldCB2bm9kZTsKICAgICAgdGhpcy4kY29uZmlybSh7CiAgICAgICAgdGl0bGU6ICfmjojmnYMnLAogICAgICAgIGNvbnRlbnQ6ICgpID0+ICh2bm9kZSA9IDxHcmFudFJvbGUKICAgICAgICAgIHR5cGU9InN0dWRlbnQiCiAgICAgICAgICByb2xlPXtpdGVtLnJvbGVfaWR9CiAgICAgICAgICBhY2NvdW50PXtpdGVtLnNpZH0KICAgICAgICAvPiksCiAgICAgICAgb25PazogYXN5bmMgKCkgPT4gewogICAgICAgICAgYXdhaXQgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuY29uZmlybSgpOwogICAgICAgICAgdGhpcy5nZXREYXRhKCk7CiAgICAgICAgfSwKICAgICAgfSk7CiAgICB9LAogIH0sCn07CgovLyDliJvlu7rmkJzntKLpgInpobkKZnVuY3Rpb24gY3JlYXRlU2VhcmNoT3B0aW9ucygpIHsKICByZXR1cm4gWwogICAgewogICAgICBsYWJlbDogJ+WtpuWPtycsCiAgICAgIGtleTogJ3NpZCcsCiAgICAgIGRlZmF1bHQ6ICcnLAogICAgICBjb21wb25lbnQ6ICdpbnB1dCcsCgkJCWFsaWduOiAnY2VudGVyJwogICAgfSwKICAgIHsKICAgICAgbGFiZWw6ICflp5PlkI0nLAogICAgICBrZXk6ICduYW1lJywKICAgICAgZGVmYXVsdDogJycsCiAgICAgIGNvbXBvbmVudDogJ2lucHV0JywKCQkJYWxpZ246ICdjZW50ZXInCiAgICB9LAogICAgewogICAgICBsYWJlbDogJ+aAp+WIqycsCiAgICAgIGtleTogJ3NleCcsCiAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCwKICAgICAgY29tcG9uZW50OiAnc2VsZWN0JywKCQkJYWxpZ246ICdjZW50ZXInLAogICAgICBwcm9wczogewogICAgICAgIG9wdGlvbnM6IHNleGVzLAogICAgICB9LAogICAgfSwKICAgIHsKICAgICAgbGFiZWw6ICflrabpmaInLAogICAgICBrZXk6ICdjb2xsYWdlSWQnLAogICAgICBkZWZhdWx0OiB1bmRlZmluZWQsCiAgICAgIGNvbXBvbmVudDogJ3NlbGVjdCcsCgkJCWFsaWduOiAnY2VudGVyJywKICAgICAgcHJvcHM6IHsKICAgICAgICBvcHRpb25zOiBncmFkZXMsCiAgICAgIH0sCiAgICB9LAogICAgCiAgXTsKfQo="},{"version":3,"sources":["Student.vue"],"names":[],"mappings":";AAqGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA","file":"Student.vue","sourceRoot":"src/views/user","sourcesContent":["<template>\n <div class=\"container\">\n <!-- 搜索表单 -->\n <SearchForm\n ref=\"searchForm\"\n :loading=\"loading\"\n :options=\"searchOptions\"\n @search=\"search\"\n @reset=\"search\"\n />\n\n <!-- 信息列表 -->\n <AntTable\n v-model=\"selectedKeys\"\n row-key=\"sid\"\n :loading=\"loading\"\n :data-source=\"users\"\n :pagination=\"pagination\"\n :columns=\"tableColumns\"\n @change=\"changePage\"\n >\n <template #header>\n <!-- 操作按钮组 -->\n <a-button-group>\n <a-button type=\"primary\" @click=\"addUser\">\n 添加学生\n </a-button>\n <a-button\n :disabled=\"!selectedKeys.length\"\n @click=\"batchDelete\"\n >\n 批量删除 ({{ selectedKeys.length }})\n </a-button>\n <a-button @click=\"$refs.import.show()\">\n Excel导入\n </a-button>\n <a-button\n :loading=\"exporting\"\n @click=\"exportAll\"\n >\n 全量导出\n </a-button>\n </a-button-group>\n </template>\n <template #action=\"record\">\n <!-- 行操作 -->\n <a-space>\n <template>\n <!-- 编辑 -->\n <a @click=\"editUser(record)\">\n <a-icon type=\"edit\" />\n </a>\n\n <!-- 重置密码 -->\n <a-popconfirm\n title=\"确认重置密码?\"\n ok-text=\"确认\"\n cancel-text=\"取消\"\n placement=\"left\"\n @confirm=\"resetPassword(record)\"\n >\n <template #icon>\n <a-icon type=\"question-circle-o\" style=\"color: orange\" />\n </template>\n <a-tooltip placement=\"top\">\n <template #title>\n <span>重置密码</span>\n </template>\n <a><a-icon type=\"rollback\" /></a>\n </a-tooltip>\n </a-popconfirm>\n\n <!-- 授权 -->\n <a @click=\"grantRole(record)\">\n <a-icon type=\"key\" />\n </a>\n </template>\n\n <!-- 删除 -->\n <a-popconfirm\n title=\"确认删除?\"\n ok-text=\"确认\"\n cancel-text=\"取消\"\n placement=\"left\"\n @confirm=\"deleteUser(record)\"\n >\n <template #icon>\n <a-icon type=\"question-circle-o\" style=\"color: orange\" />\n </template>\n <a><a-icon type=\"delete\" /></a>\n </a-popconfirm>\n </a-space>\n </template>\n </AntTable>\n\n <!-- 用户导入组件 -->\n <UserImport type=\"student\" ref=\"import\" @refresh=\"search\" />\n </div>\n</template>\n\n<script>\nimport { grades, gradeMap, sexes, sexMap } from '@/utils/const';\nimport { exportData } from '@/utils/excel';\nimport createColumns from '@/helpers/importuser-columns';\nimport EditStudent from '@/components/edit/EditStudent';\nimport UserImport from '@/components/common/UserImport';\nimport GrantRole from '@/components/common/GrantRole';\n\n// 格式化日期函数\nfunction formatDate(dateString) {\n const date = new Date(dateString); // 将日期字符串转换为 Date 对象\n const year = date.getFullYear(); // 获取年份\n const month = String(date.getMonth() + 1).padStart(2, '0'); // 获取月份,并补零\n const day = String(date.getDate()).padStart(2, '0'); // 获取日期,并补零\n return `${year}-${month}-${day}`; // 返回格式化后的日期字符串\n}\n\n\n// 定义状态映射对象\nconst statusMap = {\n 0: '正常',\n 1: '异常',\n // 其他状态以此类推\n};\n\nconst STUDENT_COLUMNS = [\n { title: '学号', dataIndex: 'stid' , align: 'center'},\n { title: '姓名', dataIndex: 'userName' , align: 'center' },\n\t{ \n title: '性别', \n dataIndex: 'gender',\n\t\t\talign: 'center',\n customRender: (text, record) => {\n return text ? text : '男';\n }\n },\n { \n title: '学院', \n dataIndex: 'collegeId', \n\t\talign: 'center',\n customRender: (text, record) => gradeMap[record.collegeId] // 根据学院 ID 查找映射对象中的学院名称\n },\n { \n title: '生日', \n dataIndex: 'birthdate', \n\t\talign: 'center',\n customRender: (text, record) => formatDate(record.birthdate) // 在渲染时调用 formatDate 函数\n },\n\t{ \n title: '手机', \n dataIndex: 'phone',\n\t\t\talign: 'center',\n customRender: (text, record) => {\n return text ? text : '无';\n }\n },\n { \n title: '状态', \n dataIndex: 'userStatus',\n\t\talign: 'center',\n customRender: (text, record) => statusMap[record.userStatus] // 根据状态值查找映射对象中的状态名称\n },\n {\n title: '操作',\n align: 'center',\n width: 100,\n scopedSlots: { customRender: 'action' },\n },\n];\n\nfunction exportExcel(data) {\n const header = STUDENT_COLUMNS.map(v => v.title);\n header.pop(); // 去掉最后一栏操作栏\n return exportData({\n name: '学生信息',\n data,\n header,\n keyMap: {\n stid: '学号',\n userName: '姓名',\n gender: '性别',\n collegeId: '学院',\n birthdate: '生日',\n phone: '手机',\n userStatus: '状态',\n },\n });\n}\n\nexport default {\n name: 'Student',\n metaInfo: {\n title: '学生管理',\n },\n components: {\n UserImport,\n },\n data() {\n return {\n loading: false,\n exporting: false,\n query: {},\n selectedKeys: [],\n users: [],\n\t\t\toriginalUsers: [],\n current: 1,\n pageSize: 12,\n total: 0,\n tableColumns: STUDENT_COLUMNS,\n };\n },\n computed: {\n searchOptions() {\n return createSearchOptions.call(this);\n },\n curColumns() {\n return createColumns(this.importUserType);\n },\n user() {\n return this.$store.state.user;\n },\n pagination() {\n return {\n current: this.current,\n pageSize: this.pageSize,\n total: this.total,\n };\n },\n },\n mounted() {\n this.$watch(() => [this.pageSize, this.current], this.getData, { immediate: true });\n },\n methods: {\n // 搜索\n search() {\n this.current = 1;\n this.getData();\n },\n // 分页切换\n changePage({ pageSize, current }) {\n Object.assign(this, { pageSize, current });\n },\n // 获取数据\n getData() {\n this.loading = true;\n this.query = this.$refs.searchForm.getResult();\n\t\t\tconsole.log(this.query);\n this.$api.AllUser({}).then(data => {\n // 过滤权限大于1的用户\n this.originalUsers = data.data.filter(user => user.userPrivileges > 1);\n\t\t\t\tthis.filterUsers(); // 调用过滤用户方法\n this.total = data.users.length;\n }).catch(e => {\n console.error(e);\n // this.$message.error(e.msg || '获取数据失败');\n }).finally(() => {\n this.loading = false;\n });\n },\n\t\tfilterUsers() {\n \t\tlet filteredUsers = this.originalUsers.slice(); // 复制原始用户数据\n\t\t\tconsole.log(filteredUsers)\n \tif (this.query.sid) {\n filteredUsers = filteredUsers.filter(user => user.stid.includes(this.query.sid));\n \t}\n\n if (this.query.name) {\n filteredUsers = filteredUsers.filter(user => user.userName.includes(this.query.name));\n }\n\n if (this.query.sex) {\n filteredUsers = filteredUsers.filter(user => user.gender === this.query.sex);\n }\n\n if (this.query.collageId) {\n filteredUsers = filteredUsers.filter(user => user.collageId === this.query.collageId);\n }\n\n this.users = filteredUsers;\n},\n\n\n // 重置密码\n resetPassword(row) {\n const key = Date.now();\n this.$message.loading({\n key,\n content: '请稍后',\n duration: 0,\n });\n this.$api.resetPassword({\n type: 'student',\n account: row.sid,\n }).then(() => {\n this.$message.success({ content: '已重置', key });\n }).catch(() => {\n this.$message.error({ content: '重置失败', key });\n });\n },\n // 添加学生\n addUser() {\n let vnode;\n this.$confirm({\n title: '添加学生',\n content: h => (vnode = h(EditStudent)),\n onOk: async () => {\n\t\t\t\t\tconst values = await vnode.componentInstance.validate();\n\t\t\t\t\tconst data = {\n \t\t\t\tsTId: values.stid,\n\t\t\t\t\t\tuserPassword: values.password,\n\t\t\t\t\t\t// 用户权限学生\n \t\t\t\t\tuserPrivileges: 2,\n \t\t\t\t\tuserName: values.userName,\n \t\t\t\t\tcollegeId: values.collegeId,\n \t\t\t\t\tuserStatus: 0,\n \t\t\t\t\temail: values.email,\n \t\t\t\t\tphone: values.phone,\n\t\t\t\t\t};\n \n return this.$api.CreateUser(data).then(() => {\n this.$message.success('添加成功');\n this.getData();\n }).catch(e => {\n console.error(e);\n this.$message.error(e.msg || '添加失败');\n throw e;\n });\n },\n });\n },\n // 修改学生\n editUser(row) {\n let vnode;\n this.$confirm({\n title: '修改信息',\n content: h => (vnode = <EditStudent type=\"update\" data={row} />),\n onOk: async () => {\n const values = await vnode.componentInstance.validate();\n\t\t\t\t\tconsole.log(values)\n\t\t\t\t\tlet data={\n\t\t\t\t\t\tstid: row.stid,\n\t\t\t\t\t\tuserId:row.userId,\n\t\t\t\t\t\tuserName:values.userName,\n\t\t\t\t\t\tuserPassword:values.password,\n\t\t\t\t\t\tuserPrivileges:values.userPrivileges,\n\t\t\t\t\t\tphone:values.phone,\n\t\t\t\t\t\temail:values.email,\n\t\t\t\t\t\tcollegeId:values.collegeId,\n\t\t\t\t\t\tuserStatus:0,\n\t\t\t\t\t}\n return this.$api.UPuser(data).then(() => {\n this.$message.success('修改成功');\n this.getData();\n }).catch(e => {\n console.error(e);\n this.$message.error(e.msg || '修改失败');\n throw e;\n });\n },\n });\n },\n // 删除学生\n deleteUser(row) {\n const key = Math.random();\n this.$message.loading({ content: '正在删除', duration: 0, key });\n this.$api.deleteUser('student', {\n ids: [row.sid],\n }).then(() => {\n this.$message.success({ content: '删除成功!', key });\n this.getData();\n }).catch(e => {\n this.$message.error({ content: e.msg || '删除失败!', key });\n });\n },\n // 批量删除\n batchDelete(row) {\n this.$modal.confirm({\n title: `确认删除选中的${this.selectedKeys.length}项数据?`,\n onOk: () => {\n\t\t\t\t\tlet data={\n\t\t\t\t\t\tlist:this.selectedKeys.map(index => this.users[index].userId)\n\t\t\t\t\t}\n\t\t\t\t\tthis.$api.deleteList(data).then(() => {\n this.$message.success('删除成功!');\n this.selectedKeys.splice(0);\n this.getData();\n }).catch(e => {\n this.$message.error(e.msg || '删除失败!');\n throw e;\n })\n\t\t\t\t}\n });\n },\n // 导出学生\n exportAll() {\n this.exporting = true;\n this.$api.AllUser().then(data => {\n // 过滤权限2的用户\n\t\t\t\treturn exportExcel(data.data.filter(user => user.userPrivileges > 1));\n }).then(data => {\n return exportExcel(data.data);\n }).catch(e => {\n console.error(e);\n this.$message.error(e.msg || '导出失败');\n }).finally(() => {\n this.exporting = false;\n });\n },\n // 授权用户\n grantRole(item) {\n let vnode;\n this.$confirm({\n title: '授权',\n content: () => (vnode = <GrantRole\n type=\"student\"\n role={item.role_id}\n account={item.sid}\n />),\n onOk: async () => {\n await vnode.componentInstance.confirm();\n this.getData();\n },\n });\n },\n },\n};\n\n// 创建搜索选项\nfunction createSearchOptions() {\n return [\n {\n label: '学号',\n key: 'sid',\n default: '',\n component: 'input',\n\t\t\talign: 'center'\n },\n {\n label: '姓名',\n key: 'name',\n default: '',\n component: 'input',\n\t\t\talign: 'center'\n },\n {\n label: '性别',\n key: 'sex',\n default: undefined,\n component: 'select',\n\t\t\talign: 'center',\n props: {\n options: sexes,\n },\n },\n {\n label: '学院',\n key: 'collageId',\n default: undefined,\n component: 'select',\n\t\t\talign: 'center',\n props: {\n options: grades,\n },\n },\n \n ];\n}\n</script>\n"]}]} |