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/Teacher.vue?vue&type=script&lang=js","dependencies":[{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/src/views/user/Teacher.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:CmltcG9ydCB7IGdyYWRlTWFwLHJhbmtNYXAsIHJhbmtzLGdyYWRlcyxzZXhlcyB9IGZyb20gJ0AvdXRpbHMvY29uc3QnOwppbXBvcnQgeyBleHBvcnREYXRhIH0gZnJvbSAnQC91dGlscy9leGNlbCc7CmltcG9ydCBjcmVhdGVDb2x1bW5zIGZyb20gJ0AvaGVscGVycy9pbXBvcnR1c2VyLWNvbHVtbnMnOwppbXBvcnQgRWRpdFRlYWNoZXIgZnJvbSAnQC9jb21wb25lbnRzL2VkaXQvRWRpdFRlYWNoZXInOwppbXBvcnQgVXNlckltcG9ydCBmcm9tICdAL2NvbXBvbmVudHMvY29tbW9uL1VzZXJJbXBvcnQudnVlJzsKaW1wb3J0IEdyYW50Um9sZSBmcm9tICdAL2NvbXBvbmVudHMvY29tbW9uL0dyYW50Um9sZSc7Ci8vIOWumuS5ieeKtuaAgeaYoOWwhOWvueixoQpjb25zdCBzdGF0dXNNYXAgPSB7CiAgMDogJ+ato+W4uCcsCiAgMTogJ+W8guW4uCcsCiAgLy8g5YW25LuW54q25oCB5Lul5q2k57G75o6oCn07Ci8vIOagvOW8j+WMluaXpeacn+WHveaVsApmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGVTdHJpbmcpIHsKICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7IC8vIOWwhuaXpeacn+Wtl+espuS4sui9rOaNouS4uiBEYXRlIOWvueixoQogIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7IC8vIOiOt+WPluW5tOS7vQogIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7IC8vIOiOt+WPluaciOS7ve+8jOW5tuihpembtgogIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTsgLy8g6I635Y+W5pel5pyf77yM5bm26KGl6Zu2CiAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7IC8vIOi/lOWbnuagvOW8j+WMluWQjueahOaXpeacn+Wtl+espuS4sgp9CmNvbnN0IFRFQUNIRVJfQ09MVU1OUyA9IFsKICB7IHRpdGxlOiAn5bel5Y+3JywgZGF0YUluZGV4OiAnc3RpZCcgfSwKICB7IHRpdGxlOiAn5aeT5ZCNJywgZGF0YUluZGV4OiAndXNlck5hbWUnIH0sCgl7IAogICAgICB0aXRsZTogJ+aAp+WIqycsIAogICAgICBkYXRhSW5kZXg6ICdnZW5kZXInLAogICAgICBjdXN0b21SZW5kZXI6ICh0ZXh0LCByZWNvcmQpID0+IHsKICAgICAgICByZXR1cm4gdGV4dCA/IHRleHQgOiAn55S3JzsKICAgICAgfQogICAgfSwKCQl7IAogICAgICB0aXRsZTogJ+iBjOensCcsIAogICAgICBkYXRhSW5kZXg6ICd0ZWFjaGVyVGl0bGUnLAogICAgICBjdXN0b21SZW5kZXI6ICh0ZXh0LCByZWNvcmQpID0+IHsKICAgICAgICByZXR1cm4gdGV4dCA/IHRleHQgOiAn5pegJzsKICAgICAgfQogICAgfSwKICB7IAogICAgdGl0bGU6ICflrabpmaInLCAKICAgIGRhdGFJbmRleDogJ2NvbGxlZ2VJZCcsIAogICAgY3VzdG9tUmVuZGVyOiAodGV4dCwgcmVjb3JkKSA9PiBncmFkZU1hcFtyZWNvcmQuY29sbGVnZUlkXSAvLyDmoLnmja7lrabpmaIgSUQg5p+l5om+5pig5bCE5a+56LGh5Lit55qE5a2m6Zmi5ZCN56ewCiAgfSwKICB7IAogICAgdGl0bGU6ICfnlJ/ml6UnLCAKICAgIGRhdGFJbmRleDogJ2JpcnRoZGF0ZScsIAogICAgY3VzdG9tUmVuZGVyOiAodGV4dCwgcmVjb3JkKSA9PiBmb3JtYXREYXRlKHJlY29yZC5iaXJ0aGRhdGUpIC8vIOWcqOa4suafk+aXtuiwg+eUqCBmb3JtYXREYXRlIOWHveaVsAogIH0sCiAgeyAKICAgICAgdGl0bGU6ICfmiYvmnLonLCAKICAgICAgZGF0YUluZGV4OiAncGhvbmUnLAogICAgICBjdXN0b21SZW5kZXI6ICh0ZXh0LCByZWNvcmQpID0+IHsKICAgICAgICByZXR1cm4gdGV4dCA/IHRleHQgOiAn5pegJzsKICAgICAgfQogICAgfSwKICB7IAogICAgdGl0bGU6ICfnirbmgIEnLCAKICAgIGRhdGFJbmRleDogJ3VzZXJTdGF0dXMnLAogICAgY3VzdG9tUmVuZGVyOiAodGV4dCwgcmVjb3JkKSA9PiBzdGF0dXNNYXBbcmVjb3JkLnVzZXJTdGF0dXNdIC8vIOagueaNrueKtuaAgeWAvOafpeaJvuaYoOWwhOWvueixoeS4reeahOeKtuaAgeWQjeensAogIH0sCiAgewogICAgdGl0bGU6ICfmk43kvZwnLAogICAgYWxpZ246ICdjZW50ZXInLAogICAgd2lkdGg6IDEwMCwKICAgIHNjb3BlZFNsb3RzOiB7IGN1c3RvbVJlbmRlcjogJ2FjdGlvbicgfSwKICB9LApdOwoKZnVuY3Rpb24gZXhwb3J0RXhjZWwoZGF0YSkgewogIGNvbnN0IGhlYWRlciA9IFRFQUNIRVJfQ09MVU1OUy5tYXAodiA9PiB2LnRpdGxlKTsKICBoZWFkZXIucG9wKCk7IC8vIOWOu+aOieacgOWQjuS4gOagj+aTjeS9nOagjwogIHJldHVybiBleHBvcnREYXRhKHsKICAgIG5hbWU6ICfmlZnluIjkv6Hmga8nLAogICAgZGF0YSwKICAgIGhlYWRlciwKICAgIGtleU1hcDogewogICAgICBzdGlkOiAn5bel5Y+3JywKICAgICAgdXNlck5hbWU6ICflp5PlkI0nLAoJCQlnZW5kZXI6J+aAp+WIqycsCiAgICAgIHRlYWNoZXJUaXRsZTogJ+iBjOensCcsCiAgICAgIGNvbGxlZ2VJZDogJ+WtpumZoicsCiAgICAgIGJpcnRoZGF0ZTogJ+eUn+aXpScsCiAgICAgIHBob25lOiAn5omL5py6JywKICAgICAgdXNlclN0YXR1czogJ+eKtuaAgScsCiAgICB9LAogIH0pOwp9CgpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ1RlYWNoZXInLAogIGNvbXBvbmVudHM6IHsgVXNlckltcG9ydCB9LAogIG1ldGFJbmZvOiB7CiAgICB0aXRsZTogJ+aVmeW4iOeuoeeQhicsCiAgfSwKICBkYXRhKCkgewogICAgcmV0dXJuIHsKCQkJZ3JhZGVzLAoJCQlzZXhlcywKICAgICAgbG9hZGluZzogZmFsc2UsCiAgICAgIGV4cG9ydGluZzogZmFsc2UsCiAgICAgIHF1ZXJ5OiB7fSwKICAgICAgc2VsZWN0ZWRLZXlzOiBbXSwKICAgICAgdXNlcnM6IFtdLAoJCQlvcmlnaW5hbFVzZXJzOiBbXSwKICAgICAgY3VycmVudDogMSwKICAgICAgcGFnZVNpemU6IDEwLAogICAgICB0b3RhbDogMCwKICAgICAgdGFibGVDb2x1bW5zOiBURUFDSEVSX0NPTFVNTlMsCiAgICB9OwogIH0sCiAgY29tcHV0ZWQ6IHsKICAgIHNlYXJjaE9wdGlvbnMoKSB7CiAgICAgIHJldHVybiBjcmVhdGVTZWFyY2hPcHRpb25zLmNhbGwodGhpcyk7CiAgICB9LAogICAgY3VyQ29sdW1ucygpIHsKICAgICAgcmV0dXJuIGNyZWF0ZUNvbHVtbnModGhpcy5pbXBvcnRVc2VyVHlwZSk7CiAgICB9LAogICAgdXNlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXI7CiAgICB9LAogICAgcGFnaW5hdGlvbigpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBjdXJyZW50OiB0aGlzLmN1cnJlbnQsCiAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsCiAgICAgICAgdG90YWw6IHRoaXMudG90YWwsCiAgICAgIH07CiAgICB9LAogIH0sCiAgbW91bnRlZCgpIHsKICAgIHRoaXMuJHdhdGNoKCgpID0+IFt0aGlzLnBhZ2VTaXplLCB0aGlzLmN1cnJlbnRdLCB0aGlzLmdldERhdGEsIHsgaW1tZWRpYXRlOiB0cnVlIH0pOwogIH0sCiAgbWV0aG9kczogewogICAgc2VhcmNoKCkgewogICAgICB0aGlzLmN1cnJlbnQgPSAxOwogICAgICB0aGlzLmdldERhdGEoKTsKICAgIH0sCiAgICBjaGFuZ2VQYWdlKHsgcGFnZVNpemUsIGN1cnJlbnQgfSkgewogICAgICBPYmplY3QuYXNzaWduKHRoaXMsIHsgcGFnZVNpemUsIGN1cnJlbnQgfSk7CiAgICB9LAoJCWdldERhdGEoKSB7CgkJCWNvbnNvbGUubG9nKHRoaXMucXVlcnkpCiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7CiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyZWZzLnNlYXJjaEZvcm0uZ2V0UmVzdWx0KCk7CiAgICAgIHRoaXMuJGFwaS5BbGxVc2VyKHt9KS50aGVuKGRhdGEgPT4gewogICAgICAgIC8vIOi/h+a7pOadg+mZkOWkp+S6jjDnmoTnlKjmiLcKICAgICAgICB0aGlzLm9yaWdpbmFsVXNlcnMgPSBkYXRhLmRhdGEuZmlsdGVyKHVzZXIgPT4gdXNlci51c2VyUHJpdmlsZWdlcyA9PTEpOwoJCQkJdGhpcy5maWx0ZXJVc2VycygpOyAvLyDosIPnlKjov4fmu6TnlKjmiLfmlrnms5UKICAgICAgICB0aGlzLnRvdGFsID0gZGF0YS51c2Vycy5sZW5ndGg7CiAgICAgIH0pLmNhdGNoKGUgPT4gewogICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICAgICAgLy8gdGhpcy4kbWVzc2FnZS5lcnJvcihlLm1zZyB8fCAn6I635Y+W5pWw5o2u5aSx6LSlJyk7CiAgICAgIH0pLmZpbmFsbHkoKCkgPT4gewogICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sCgkJLy8g6L+H5ruk55So5oi3CgkJZmlsdGVyVXNlcnMoKSB7CiAgCQlsZXQgZmlsdGVyZWRVc2VycyA9IHRoaXMub3JpZ2luYWxVc2Vycy5zbGljZSgpOyAvLyDlpI3liLbljp/lp4vnlKjmiLfmlbDmja4KICAJaWYgKHRoaXMucXVlcnkudGlkKSB7CiAgICBmaWx0ZXJlZFVzZXJzID0gZmlsdGVyZWRVc2Vycy5maWx0ZXIodXNlciA9PiB1c2VyLnN0aWQuaW5jbHVkZXModGhpcy5xdWVyeS50aWQpKTsKICAJfQoKICBpZiAodGhpcy5xdWVyeS5uYW1lKSB7CiAgICBmaWx0ZXJlZFVzZXJzID0gZmlsdGVyZWRVc2Vycy5maWx0ZXIodXNlciA9PiB1c2VyLnVzZXJOYW1lLmluY2x1ZGVzKHRoaXMucXVlcnkubmFtZSkpOwogIH0KCiAgaWYgKHRoaXMucXVlcnkuc2V4KSB7CiAgICBmaWx0ZXJlZFVzZXJzID0gZmlsdGVyZWRVc2Vycy5maWx0ZXIodXNlciA9PiB1c2VyLmdlbmRlciA9PT0gdGhpcy5xdWVyeS5zZXgpOwogIH0KCiAgaWYgKHRoaXMucXVlcnkuY29sbGFnZUlkKSB7CiAgICBmaWx0ZXJlZFVzZXJzID0gZmlsdGVyZWRVc2Vycy5maWx0ZXIodXNlciA9PiB1c2VyLmNvbGxhZ2VJZCA9PT0gdGhpcy5xdWVyeS5jb2xsYWdlSWQpOwogIH0KICBpZiAodGhpcy5xdWVyeS5yYW5rKSB7CiAgICBmaWx0ZXJlZFVzZXJzID0gZmlsdGVyZWRVc2Vycy5maWx0ZXIodXNlciA9PiB1c2VyLnRlYWNoZXJUaXRsZSA9PT0gdGhpcy5xdWVyeS5yYW5rKTsKICB9CiAgdGhpcy51c2VycyA9IGZpbHRlcmVkVXNlcnM7Cn0sCiAgICByZXNldFBhc3N3b3JkKHJvdykgewogICAgICBjb25zdCBrZXkgPSBEYXRlLm5vdygpOwogICAgICB0aGlzLiRtZXNzYWdlLmxvYWRpbmcoewogICAgICAgIGtleSwKICAgICAgICBjb250ZW50OiAn6K+356iN5ZCOJywKICAgICAgICBkdXJhdGlvbjogMCwKICAgICAgfSk7CiAgICAgIHRoaXMuJGFwaS5yZXNldFBhc3N3b3JkKHsKICAgICAgICB0eXBlOiAndGVhY2hlcicsCiAgICAgICAgYWNjb3VudDogcm93LnRpZCwKICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKHsgY29udGVudDogJ+W3sumHjee9ricsIGtleSB9KTsKICAgICAgfSkuY2F0Y2goKCkgPT4gewogICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoeyBjb250ZW50OiAn6YeN572u5aSx6LSlJywga2V5IH0pOwogICAgICB9KTsKICAgIH0sCiAgICBhZGRVc2VyKCkgewogICAgICBsZXQgdm5vZGU7CiAgICAgIHRoaXMuJGNvbmZpcm0oewogICAgICAgIHRpdGxlOiAn5re75Yqg5pWZ5biIJywKICAgICAgICBjb250ZW50OiBoID0+ICh2bm9kZSA9IGgoRWRpdFRlYWNoZXIpKSwKICAgICAgICBvbk9rOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS52YWxpZGF0ZSgpOwoJCQkJCWNvbnN0IGRhdGEgPSB7CiAgICAJCQkJc1RJZDogdmFsdWVzLnN0aWQsCiAgIAkJCQkJdXNlclBhc3N3b3JkOiB2YWx1ZXMucGFzc3dvcmQsCiAgIAkJCQkJdXNlclByaXZpbGVnZXM6IDEsCiAgIAkJCQkJdXNlck5hbWU6IHZhbHVlcy51c2VyTmFtZSwKICAgCQkJCQl0ZWFjaGVyVGl0bGU6IHZhbHVlcy50ZWFjaGVyVGl0bGUsCiAgIAkJCQkJY29sbGVnZUlkOiB2YWx1ZXMuY29sbGVnZUlkLAogICAJCQkJCXVzZXJTdGF0dXM6IDAsCiAgIAkJCQkJZW1haWw6IHZhbHVlcy5lbWFpbCwKICAgCQkJCQlwaG9uZTogdmFsdWVzLnBob25lLAoJCQkJCX07CiAgICAgICAgICByZXR1cm4gdGhpcy4kYXBpLkNyZWF0ZVVzZXIoZGF0YSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygn5re75Yqg5oiQ5YqfJyk7CiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpOwogICAgICAgICAgfSkuY2F0Y2goZSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZS5tc2cgfHwgJ+a3u+WKoOWksei0pScpOwogICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgfSk7CiAgICB9LAogICAgZWRpdFVzZXIocm93KSB7CiAgICAgIGxldCB2bm9kZTsKICAgICAgdGhpcy4kY29uZmlybSh7CiAgICAgICAgdGl0bGU6ICfkv67mlLnkv6Hmga8nLAogICAgICAgIGNvbnRlbnQ6IGggPT4gKHZub2RlID0gPEVkaXRUZWFjaGVyIHR5cGU9InVwZGF0ZSIgZGF0YT17cm93fSAvPiksCiAgICAgICAgb25PazogYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UudmFsaWRhdGUoKTsKCQkJCQljb25zb2xlLmxvZyh2YWx1ZXMpCgkJCQkJbGV0IGRhdGE9ewoJCQkJCQlzdGlkOiB2YWx1ZXMuc3RpZCwKCQkJCQkJdXNlcklkOnJvdy51c2VySWQsCgkJCQkJCXVzZXJOYW1lOnZhbHVlcy51c2VyTmFtZSwKCQkJCQkJdXNlclBhc3N3b3JkOnZhbHVlcy5wYXNzd29yZCwKCQkJCQkJdXNlclByaXZpbGVnZXM6dmFsdWVzLnVzZXJQcml2aWxlZ2VzLAoJCQkJCQl0ZWFjaGVyVGl0bGU6dmFsdWVzLnRlYWNoZXJUaXRsZSwKCQkJCQkJZW1haWw6dmFsdWVzLmVtYWlsLAoJCQkJCQljb2xsZWdlSWQ6dmFsdWVzLmNvbGxlZ2VJZCwKCQkJCQkJdXNlclN0YXR1czowLAoJCQkJCX0KICAgICAgICAgIHJldHVybiB0aGlzLiRhcGkudXBkYXRlVXNlcihkYXRhKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCfkv67mlLnmiJDlip8nKTsKICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7CiAgICAgICAgICB9KS5jYXRjaChlID0+IHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlLm1zZyB8fCAn5L+u5pS55aSx6LSlJyk7CiAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICB9KTsKICAgIH0sCiAgICBkZWxldGVVc2VyKHJvdykgewogICAgICBjb25zdCBrZXkgPSBNYXRoLnJhbmRvbSgpOwogICAgICB0aGlzLiRtZXNzYWdlLmxvYWRpbmcoeyBjb250ZW50OiAn5q2j5Zyo5Yig6ZmkJywgZHVyYXRpb246IDAsIGtleSB9KTsKICAgICAgdGhpcy4kYXBpLmRlbGV0ZVVzZXIoJ3RlYWNoZXInLCB7CiAgICAgICAgaWRzOiBbcm93LnRpZF0sCiAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcyh7IGNvbnRlbnQ6ICfliKDpmaTmiJDlip8hJywga2V5IH0pOwogICAgICAgIHRoaXMuZ2V0RGF0YSgpOwogICAgICB9KS5jYXRjaChlID0+IHsKICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHsgY29udGVudDogZS5tc2cgfHwgJ+WIoOmZpOWksei0pSEnLCBrZXkgfSk7CiAgICAgIH0pOwogICAgfSwKCQliYXRjaERlbGV0ZShyb3cpIHsKICAgICAgdGhpcy4kbW9kYWwuY29uZmlybSh7CiAgICAgICAgdGl0bGU6IGDnoa7orqTliKDpmaTpgInkuK3nmoQke3RoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aH3pobnmlbDmja4/YCwKICAgICAgICBvbk9rOiAoKSA9PiB7CgkJCQkJbGV0IGRhdGE9ewoJCQkJCQlsaXN0OnRoaXMuc2VsZWN0ZWRLZXlzLm1hcChpbmRleCA9PiB0aGlzLnVzZXJzW2luZGV4XS51c2VySWQpCgkJCQkJfQoJCQkJCXRoaXMuJGFwaS5kZWxldGVMaXN0KGRhdGEpLnRoZW4oKCkgPT4gewogICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCfliKDpmaTmiJDlip8hJyk7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkS2V5cy5zcGxpY2UoMCk7CiAgICAgICAgICB0aGlzLmdldERhdGEoKTsKICAgICAgICB9KS5jYXRjaChlID0+IHsKICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZS5tc2cgfHwgJ+WIoOmZpOWksei0pSEnKTsKICAgICAgICAgIHRocm93IGU7CiAgICAgICAgfSkKCQkJCX0KICAgICAgfSk7CiAgICB9LAogICAgZXhwb3J0QWxsKCkgewogICAgICB0aGlzLmV4cG9ydGluZyA9IHRydWU7CgkJCXRoaXMuJGFwaS5BbGxVc2VyKCkudGhlbihkYXRhID0+IHsKICAgICAgICAvLyDov4fmu6TmnYPpmZDlpKfkuo4x55qE55So5oi3CgkJCQlyZXR1cm4gZXhwb3J0RXhjZWwoZGF0YS5kYXRhLmZpbHRlcih1c2VyID0+IHVzZXIudXNlclByaXZpbGVnZXMgPT0gMSkpOwogICAgICB9KS5jYXRjaChlID0+IHsKICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZS5tc2cgfHwgJ+WvvOWHuuWksei0pScpOwogICAgICB9KS5maW5hbGx5KCgpID0+IHsKICAgICAgICB0aGlzLmV4cG9ydGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sCiAgICBncmFudFJvbGUoaXRlbSkgewogICAgICBsZXQgdm5vZGU7CiAgICAgIHRoaXMuJGNvbmZpcm0oewogICAgICAgIHRpdGxlOiAn5o6I5p2DJywKICAgICAgICBjb250ZW50OiAoKSA9PiAodm5vZGUgPSA8R3JhbnRSb2xlCiAgICAgICAgICB0eXBlPSJ0ZWFjaGVyIgogICAgICAgICAgcm9sZT17aXRlbS5yb2xlX2lkfQogICAgICAgICAgYWNjb3VudD17aXRlbS50aWR9CiAgICAgICAgLz4pLAogICAgICAgIG9uT2s6IGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IHZub2RlLmNvbXBvbmVudEluc3RhbmNlLmNvbmZpcm0oKTsKICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpOwogICAgICAgIH0sCiAgICAgIH0pOwogICAgfSwKICB9LAp9OwoKZnVuY3Rpb24gY3JlYXRlU2VhcmNoT3B0aW9ucygpIHsKICByZXR1cm4gWwogICAgewogICAgICBsYWJlbDogJ+W3peWPtycsCiAgICAgIGtleTogJ3RpZCcsCiAgICAgIGRlZmF1bHQ6ICcnLAogICAgICBjb21wb25lbnQ6ICdpbnB1dCcsCgkJCWFsaWduOiAnY2VudGVyJwogICAgfSwKICAgIHsKICAgICAgbGFiZWw6ICflp5PlkI0nLAogICAgICBrZXk6ICduYW1lJywKICAgICAgZGVmYXVsdDogJycsCiAgICAgIGNvbXBvbmVudDogJ2lucHV0JywKCQkJYWxpZ246ICdjZW50ZXInCiAgICB9LAoJCXsKICAgICAgbGFiZWw6ICfmgKfliKsnLAogICAgICBrZXk6ICdzZXgnLAogICAgICBkZWZhdWx0OiB1bmRlZmluZWQsCgkJCWFsaWduOiAnY2VudGVyJywKICAgICAgcHJvcHM6IHsKICAgICAgICBvcHRpb25zOiBzZXhlcywKICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgIGxhYmVsOiAn6IGM56ewJywKICAgICAga2V5OiAncmFuaycsCiAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCwKICAgICAgY29tcG9uZW50OiAnc2VsZWN0JywKCQkJYWxpZ246ICdjZW50ZXInLAogICAgICBwcm9wczogewogICAgICAgIG9wdGlvbnM6IHJhbmtzLAogICAgICB9LAogICAgfSwKCQl7CiAgICAgIGxhYmVsOiAn5a2m6ZmiJywKICAgICAga2V5OiAnY29sbGFnZUlkJywKICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLAogICAgICBjb21wb25lbnQ6ICdzZWxlY3QnLAoJCQlhbGlnbjogJ2NlbnRlcicsCiAgICAgIHByb3BzOiB7CiAgICAgICAgb3B0aW9uczogZ3JhZGVzLAogICAgICB9LAogICAgfSwKICBdOwp9Cg=="},{"version":3,"sources":["Teacher.vue"],"names":[],"mappings":";AAkGA;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;;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;;AAEA;AACA;AACA;;AAEA;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;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","file":"Teacher.vue","sourceRoot":"src/views/user","sourcesContent":["<template>\n <div class=\"container\">\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=\"tid\"\n :loading=\"loading\"\n :data-source=\"users\"\n :pagination=\"pagination\"\n :columns=\"tableColumns\"\n @change=\"changePage\"\n >\n <template #header>\n <a-button-group>\n <a-button type=\"primary\" @click=\"addUser\">\n 添加教师\n </a-button>\n <a-button\n \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 <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 <UserImport type=\"teacher\" ref=\"import\" @refresh=\"search\" />\n </div>\n</template>\n\n<script>\nimport { gradeMap,rankMap, ranks,grades,sexes } from '@/utils/const';\nimport { exportData } from '@/utils/excel';\nimport createColumns from '@/helpers/importuser-columns';\nimport EditTeacher from '@/components/edit/EditTeacher';\nimport UserImport from '@/components/common/UserImport.vue';\nimport GrantRole from '@/components/common/GrantRole';\n// 定义状态映射对象\nconst statusMap = {\n 0: '正常',\n 1: '异常',\n // 其他状态以此类推\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}\nconst TEACHER_COLUMNS = [\n { title: '工号', dataIndex: 'stid' },\n { title: '姓名', dataIndex: 'userName' },\n\t{ \n title: '性别', \n dataIndex: 'gender',\n customRender: (text, record) => {\n return text ? text : '男';\n }\n },\n\t\t{ \n title: '职称', \n dataIndex: 'teacherTitle',\n customRender: (text, record) => {\n return text ? text : '无';\n }\n },\n { \n title: '学院', \n dataIndex: 'collegeId', \n customRender: (text, record) => gradeMap[record.collegeId] // 根据学院 ID 查找映射对象中的学院名称\n },\n { \n title: '生日', \n dataIndex: 'birthdate', \n customRender: (text, record) => formatDate(record.birthdate) // 在渲染时调用 formatDate 函数\n },\n { \n title: '手机', \n dataIndex: 'phone',\n customRender: (text, record) => {\n return text ? text : '无';\n }\n },\n { \n title: '状态', \n dataIndex: 'userStatus',\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 = TEACHER_COLUMNS.map(v => v.title);\n header.pop(); // 去掉最后一栏操作栏\n return exportData({\n name: '教师信息',\n data,\n header,\n keyMap: {\n stid: '工号',\n userName: '姓名',\n\t\t\tgender:'性别',\n teacherTitle: '职称',\n collegeId: '学院',\n birthdate: '生日',\n phone: '手机',\n userStatus: '状态',\n },\n });\n}\n\nexport default {\n name: 'Teacher',\n components: { UserImport },\n metaInfo: {\n title: '教师管理',\n },\n data() {\n return {\n\t\t\tgrades,\n\t\t\tsexes,\n loading: false,\n exporting: false,\n query: {},\n selectedKeys: [],\n users: [],\n\t\t\toriginalUsers: [],\n current: 1,\n pageSize: 10,\n total: 0,\n tableColumns: TEACHER_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 search() {\n this.current = 1;\n this.getData();\n },\n changePage({ pageSize, current }) {\n Object.assign(this, { pageSize, current });\n },\n\t\tgetData() {\n\t\t\tconsole.log(this.query)\n this.loading = true;\n this.query = this.$refs.searchForm.getResult();\n this.$api.AllUser({}).then(data => {\n // 过滤权限大于0的用户\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\t// 过滤用户\n\t\tfilterUsers() {\n \t\tlet filteredUsers = this.originalUsers.slice(); // 复制原始用户数据\n \tif (this.query.tid) {\n filteredUsers = filteredUsers.filter(user => user.stid.includes(this.query.tid));\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 if (this.query.rank) {\n filteredUsers = filteredUsers.filter(user => user.teacherTitle === this.query.rank);\n }\n this.users = filteredUsers;\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: 'teacher',\n account: row.tid,\n }).then(() => {\n this.$message.success({ content: '已重置', key });\n }).catch(() => {\n this.$message.error({ content: '重置失败', key });\n });\n },\n addUser() {\n let vnode;\n this.$confirm({\n title: '添加教师',\n content: h => (vnode = h(EditTeacher)),\n onOk: async () => {\n const values = await vnode.componentInstance.validate();\n\t\t\t\t\tconst data = {\n \t\t\t\tsTId: values.stid,\n \t\t\t\t\tuserPassword: values.password,\n \t\t\t\t\tuserPrivileges: 1,\n \t\t\t\t\tuserName: values.userName,\n \t\t\t\t\tteacherTitle: values.teacherTitle,\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 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 editUser(row) {\n let vnode;\n this.$confirm({\n title: '修改信息',\n content: h => (vnode = <EditTeacher 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: values.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\tteacherTitle:values.teacherTitle,\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.updateUser(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 deleteUser(row) {\n const key = Math.random();\n this.$message.loading({ content: '正在删除', duration: 0, key });\n this.$api.deleteUser('teacher', {\n ids: [row.tid],\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\t\tbatchDelete(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 exportAll() {\n this.exporting = true;\n\t\t\tthis.$api.AllUser().then(data => {\n // 过滤权限大于1的用户\n\t\t\t\treturn exportExcel(data.data.filter(user => user.userPrivileges == 1));\n }).catch(e => {\n console.error(e);\n this.$message.error(e.msg || '导出失败');\n }).finally(() => {\n this.exporting = false;\n });\n },\n grantRole(item) {\n let vnode;\n this.$confirm({\n title: '授权',\n content: () => (vnode = <GrantRole\n type=\"teacher\"\n role={item.role_id}\n account={item.tid}\n />),\n onOk: async () => {\n await vnode.componentInstance.confirm();\n this.getData();\n },\n });\n },\n },\n};\n\nfunction createSearchOptions() {\n return [\n {\n label: '工号',\n key: 'tid',\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\t\t{\n label: '性别',\n key: 'sex',\n default: undefined,\n\t\t\talign: 'center',\n props: {\n options: sexes,\n },\n },\n {\n label: '职称',\n key: 'rank',\n default: undefined,\n component: 'select',\n\t\t\talign: 'center',\n props: {\n options: ranks,\n },\n },\n\t\t{\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</script>\n"]}]} |