forked from liweijie/education
1 line
31 KiB
JSON
1 line
31 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\\teachingLog\\organLog\\components\\reportedView.vue?vue&type=script&setup=true&lang=ts","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachingLog\\organLog\\components\\reportedView.vue","mtime":1787312079474},{"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:CmltcG9ydCB7IG9uTW91bnRlZCwgcmVmIH0gZnJvbSAndnVlJwppbXBvcnQgeyBFbE1lc3NhZ2UsIEVsTWVzc2FnZUJveCB9IGZyb20gJ2VsZW1lbnQtcGx1cycKaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0AvdXRpbHMvaW5kZXgnCmltcG9ydCB7CiAgZ2V0UmVwb3J0ZWRUZWFjaGluZ0xvZ0xpc3QsCiAgZGVsZXRlVGVhY2hpbmdMb2csCiAgYmF0Y2hBdWRpdFRlYWNoaW5nTG9nLAogIHJlamVjdFRlYWNoaW5nTG9nLAogIHJlY2hlY2tUZWFjaGluZ0xvZywKICBleHBvcnRUZWFjaGluZ0xvZwp9IGZyb20gJ0AvYXBpL2xvZycKaW1wb3J0IExvZ0RldGFpbERpYWxvZyBmcm9tICcuL0xvZ0RldGFpbERpYWxvZy52dWUnCgovLyA9PT09PT09PT09PT09PT09PT09PSDmn6Xor6LooajljZUgPT09PT09PT09PT09PT09PT09PT0KaW50ZXJmYWNlIFNlYXJjaEZvcm0gewogIHN0YXJ0RGF0ZTogc3RyaW5nCiAgc3RhcnREYXRlRW5hYmxlZDogYm9vbGVhbgogIGVuZERhdGU6IHN0cmluZwogIGVuZERhdGVFbmFibGVkOiBib29sZWFuCiAgY291cnNlTmFtZTogc3RyaW5nCiAgY291cnNlTmFtZUVuYWJsZWQ6IGJvb2xlYW4KICB0ZWFjaE1ldGhvZDogc3RyaW5nCiAgdGVhY2hNZXRob2RFbmFibGVkOiBib29sZWFuCiAgY2hhbmdlOiBzdHJpbmcKICBjaGFuZ2VFbmFibGVkOiBib29sZWFuCiAgdGFza0NhdGVnb3J5OiBzdHJpbmcKICB0YXNrQ2F0ZWdvcnlFbmFibGVkOiBib29sZWFuCiAgZGVwdDogc3RyaW5nCiAgZGVwdEVuYWJsZWQ6IGJvb2xlYW4KICB0ZWFjaGVyOiBzdHJpbmcKICB0ZWFjaGVyRW5hYmxlZDogYm9vbGVhbgogIGNsYXNzTmFtZTogc3RyaW5nCiAgY2xhc3NOYW1lRW5hYmxlZDogYm9vbGVhbgp9Cgpjb25zdCBzZWFyY2hGb3JtID0gcmVmPFNlYXJjaEZvcm0+KHsKICBzdGFydERhdGU6ICcnLAogIHN0YXJ0RGF0ZUVuYWJsZWQ6IGZhbHNlLAogIGVuZERhdGU6ICcnLAogIGVuZERhdGVFbmFibGVkOiBmYWxzZSwKICBjb3Vyc2VOYW1lOiAnJywKICBjb3Vyc2VOYW1lRW5hYmxlZDogZmFsc2UsCiAgdGVhY2hNZXRob2Q6ICfnkIborrrorrLmjognLAogIHRlYWNoTWV0aG9kRW5hYmxlZDogZmFsc2UsCiAgY2hhbmdlOiAn5LiO5pWZ5a2m6K6h5YiS5LiA6Ie0JywKICBjaGFuZ2VFbmFibGVkOiBmYWxzZSwKICB0YXNrQ2F0ZWdvcnk6ICflhajlhpvpmaLmoKHorq3nu4Pop4TliJLlhoXku7vliqEnLAogIHRhc2tDYXRlZ29yeUVuYWJsZWQ6IGZhbHNlLAogIGRlcHQ6ICfmlZnliqHlpIQnLAogIGRlcHRFbmFibGVkOiBmYWxzZSwKICB0ZWFjaGVyOiAn5pWZ5Yqh5aSEJywKICB0ZWFjaGVyRW5hYmxlZDogZmFsc2UsCiAgY2xhc3NOYW1lOiAnJywKICBjbGFzc05hbWVFbmFibGVkOiBmYWxzZQp9KQoKY29uc3QgdGVhY2hNZXRob2RPcHRpb25zID0gWyfnkIborrrorrLmjognLCAn5a6e6Le15pWZ5a2mJywgJ+eglOiuqOaVmeWtpicsICfmoYjkvovmlZnlraYnLCAn5a6e5pON5ryU57uDJ10KY29uc3QgY2hhbmdlT3B0aW9ucyA9IFsKICAn5LiO5pWZ5a2m6K6h5YiS5LiA6Ie0JywKICAn5bey5pS55Yqo5pWZ5a2m6K6h5YiSJywKICAn5omL5Yqo5ouf5Yi2JywKICAn5pWZ5ZGY5Y+Y5YqoJywKICAn5pe26Ze05Y+Y5YqoJywKICAn6K++56iL5Y+Y5YqoJywKICAn5o6I6K++5pa55byP5Y+Y5YqoJywKICAn5Lu75Yqh57G75Yir5Y+Y5YqoJywKICAn5pyf54+t5Y+Y5YqoJywKICAn5Zyw54K55Y+Y5YqoJywKICAn6K++6aKY5Y+Y5YqoJwpdCmNvbnN0IHRhc2tDYXRlZ29yeU9wdGlvbnMgPSBbJ+WFqOWGm+mZouagoeiuree7g+inhOWIkuWGheS7u+WKoScsICflhbbku5bku7vliqHvvIjlkKvnoJTnqbbnlJ/lr7zluIjmjIflr7zvvIknXQpjb25zdCBkZXB0T3B0aW9ucyA9IFsn5pWZ5Yqh5aSEJywgJ+aMh+aMpeezuycsICfmlL/msrvlt6XkvZzmlZnnoJTlrqQnLCAn5Yab5LqL5Z+656GA5pWZ56CU5a6kJywgJ+ijheWkh+S/nemanOaVmeeglOWupCddCmNvbnN0IHRlYWNoZXJPcHRpb25zID0gWyfmlZnliqHlpIQnLCAn5byg5LiJJywgJ+adjuWbmycsICfnjovkupQnLCAn6LW15YWtJywgJ+WtmeS4gyddCgovLyA9PT09PT09PT09PT09PT09PT09PSDmlbDmja7ooajmoLwgPT09PT09PT09PT09PT09PT09PT0KaW50ZXJmYWNlIExvZ0l0ZW0gewogIGJoPzogc3RyaW5nCiAgW2tleTogc3RyaW5nXTogYW55Cn0KCmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpCmNvbnN0IHRhYmxlRGF0YSA9IHJlZjxMb2dJdGVtW10+KFtdKQpjb25zdCBzZWxlY3RlZFJvd3MgPSByZWY8TG9nSXRlbVtdPihbXSkKCi8vID09PT09PT09PT09PT09PT09PT09IOWIhumhtSA9PT09PT09PT09PT09PT09PT09PQpjb25zdCBwYWdlTnVtID0gcmVmKDEpCmNvbnN0IHBhZ2VTaXplID0gcmVmKDIwKQpjb25zdCB0b3RhbCA9IHJlZigwKQoKY29uc3QgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlID0gKHJvd3M6IExvZ0l0ZW1bXSkgPT4gewogIHNlbGVjdGVkUm93cy52YWx1ZSA9IHJvd3MKfQoKLyoqIOagueaNriLli77pgInlkK/nlKgi5qih5byP5p6E5bu65a6e6ZmF5p+l6K+i5Y+C5pWwICovCmNvbnN0IGJ1aWxkU2VhcmNoUGFyYW1zID0gKCk6IFJlY29yZDxzdHJpbmcsIGFueT4gPT4gewogIGNvbnN0IGZvcm0gPSBzZWFyY2hGb3JtLnZhbHVlCiAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0geyBwYWdlTnVtOiBwYWdlTnVtLnZhbHVlLCBwYWdlU2l6ZTogcGFnZVNpemUudmFsdWUgfQogIGlmIChmb3JtLnN0YXJ0RGF0ZUVuYWJsZWQgJiYgZm9ybS5zdGFydERhdGUpIHBhcmFtcy5rc3JxID0gZm9ybS5zdGFydERhdGUKICBpZiAoZm9ybS5lbmREYXRlRW5hYmxlZCAmJiBmb3JtLmVuZERhdGUpIHBhcmFtcy5qc3JxID0gZm9ybS5lbmREYXRlCiAgaWYgKGZvcm0uY291cnNlTmFtZUVuYWJsZWQgJiYgZm9ybS5jb3Vyc2VOYW1lKSBwYXJhbXMua2NtYyA9IGZvcm0uY291cnNlTmFtZQogIGlmIChmb3JtLnRlYWNoTWV0aG9kRW5hYmxlZCAmJiBmb3JtLnRlYWNoTWV0aG9kKSBwYXJhbXMuanhmZiA9IGZvcm0udGVhY2hNZXRob2QKICBpZiAoZm9ybS5jaGFuZ2VFbmFibGVkICYmIGZvcm0uY2hhbmdlKSBwYXJhbXMuZ2RxayA9IGZvcm0uY2hhbmdlCiAgaWYgKGZvcm0udGFza0NhdGVnb3J5RW5hYmxlZCAmJiBmb3JtLnRhc2tDYXRlZ29yeSkgcGFyYW1zLnJ3bGIgPSBmb3JtLnRhc2tDYXRlZ29yeQogIGlmIChmb3JtLmRlcHRFbmFibGVkICYmIGZvcm0uZGVwdCkgcGFyYW1zLmp5cyA9IGZvcm0uZGVwdAogIGlmIChmb3JtLnRlYWNoZXJFbmFibGVkICYmIGZvcm0udGVhY2hlcikgcGFyYW1zLnNrankgPSBmb3JtLnRlYWNoZXIKICBpZiAoZm9ybS5jbGFzc05hbWVFbmFibGVkICYmIGZvcm0uY2xhc3NOYW1lKSBwYXJhbXMucHhxYiA9IGZvcm0uY2xhc3NOYW1lCiAgcmV0dXJuIHBhcmFtcwp9Cgpjb25zdCBleHRyYWN0TGlzdERhdGEgPSAocmVzOiBhbnkpID0+IHsKICBjb25zdCBkYXRhID0gcmVzLmRhdGEgfHwgcmVzCiAgY29uc3QgbGlzdCA9IGRhdGEucmVjb3JkcyB8fCBkYXRhLmxpc3QgfHwgZGF0YS5yb3dzIHx8IFtdCiAgY29uc3QgdG90YWxDb3VudCA9IGRhdGEudG90YWwgPz8gZGF0YS50b3RhbENvdW50ID8/IGRhdGEudG90YWxSb3dzID8/IDAKICByZXR1cm4geyBsaXN0LCB0b3RhbDogdG90YWxDb3VudCB9Cn0KCmNvbnN0IGZldGNoTGlzdCA9IGFzeW5jICgpID0+IHsKICBsb2FkaW5nLnZhbHVlID0gdHJ1ZQogIHRyeSB7CiAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGdldFJlcG9ydGVkVGVhY2hpbmdMb2dMaXN0KGJ1aWxkU2VhcmNoUGFyYW1zKCkpCiAgICBpZiAocmVzLmNvZGUgPT09IDIwMCB8fCByZXMuY29kZSA9PT0gMCkgewogICAgICBjb25zdCB7IGxpc3QsIHRvdGFsOiB0b3RhbENvdW50IH0gPSBleHRyYWN0TGlzdERhdGEocmVzKQogICAgICB0YWJsZURhdGEudmFsdWUgPSBsaXN0CiAgICAgIHRvdGFsLnZhbHVlID0gdG90YWxDb3VudAogICAgfQogIH0gY2F0Y2ggewogICAgLy8g6ZSZ6K+v5bey55Sx5oum5oiq5Zmo57uf5LiA5aSE55CGCiAgfSBmaW5hbGx5IHsKICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZQogIH0KfQoKY29uc3QgaGFuZGxlU2VhcmNoID0gKCkgPT4gewogIHBhZ2VOdW0udmFsdWUgPSAxCiAgZmV0Y2hMaXN0KCkKfQoKY29uc3QgaGFuZGxlUmVzZXQgPSAoKSA9PiB7CiAgc2VhcmNoRm9ybS52YWx1ZSA9IHsKICAgIHN0YXJ0RGF0ZTogJycsCiAgICBzdGFydERhdGVFbmFibGVkOiBmYWxzZSwKICAgIGVuZERhdGU6ICcnLAogICAgZW5kRGF0ZUVuYWJsZWQ6IGZhbHNlLAogICAgY291cnNlTmFtZTogJycsCiAgICBjb3Vyc2VOYW1lRW5hYmxlZDogZmFsc2UsCiAgICB0ZWFjaE1ldGhvZDogJ+eQhuiuuuiusuaOiCcsCiAgICB0ZWFjaE1ldGhvZEVuYWJsZWQ6IGZhbHNlLAogICAgY2hhbmdlOiAn5LiO5pWZ5a2m6K6h5YiS5LiA6Ie0JywKICAgIGNoYW5nZUVuYWJsZWQ6IGZhbHNlLAogICAgdGFza0NhdGVnb3J5OiAn5YWo5Yab6Zmi5qCh6K6t57uD6KeE5YiS5YaF5Lu75YqhJywKICAgIHRhc2tDYXRlZ29yeUVuYWJsZWQ6IGZhbHNlLAogICAgZGVwdDogJ+aVmeWKoeWkhCcsCiAgICBkZXB0RW5hYmxlZDogZmFsc2UsCiAgICB0ZWFjaGVyOiAn5pWZ5Yqh5aSEJywKICAgIHRlYWNoZXJFbmFibGVkOiBmYWxzZSwKICAgIGNsYXNzTmFtZTogJycsCiAgICBjbGFzc05hbWVFbmFibGVkOiBmYWxzZQogIH0KICBoYW5kbGVTZWFyY2goKQp9Cgpjb25zdCBoYW5kbGVQYWdlQ2hhbmdlID0gKCkgPT4gewogIGZldGNoTGlzdCgpCn0KCmNvbnN0IGhhbmRsZVNpemVDaGFuZ2UgPSAoc2l6ZTogbnVtYmVyKSA9PiB7CiAgcGFnZVNpemUudmFsdWUgPSBzaXplCiAgcGFnZU51bS52YWx1ZSA9IDEKICBmZXRjaExpc3QoKQp9CgovLyA9PT09PT09PT09PT09PT09PT09PSDmibnph4/mk43kvZwgPT09PT09PT09PT09PT09PT09PT0KY29uc3QgZ2V0U2VsZWN0ZWRCaHMgPSAoKTogKHN0cmluZyB8IG51bWJlcilbXSA9PiB7CiAgY29uc3QgaWRzID0gc2VsZWN0ZWRSb3dzLnZhbHVlLm1hcCgocm93KSA9PiByb3cuYmgpLmZpbHRlcihCb29sZWFuKSBhcyAoc3RyaW5nIHwgbnVtYmVyKVtdCiAgaWYgKGlkcy5sZW5ndGggPT09IDApIHsKICAgIEVsTWVzc2FnZS53YXJuaW5nKCfor7flhYjpgInmi6norrDlvZUnKQogICAgcmV0dXJuIFtdCiAgfQogIHJldHVybiBpZHMKfQoKY29uc3QgaGFuZGxlRGVsZXRlID0gYXN5bmMgKCkgPT4gewogIGNvbnN0IGlkcyA9IGdldFNlbGVjdGVkQmhzKCkKICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuCiAgdHJ5IHsKICAgIGF3YWl0IEVsTWVzc2FnZUJveC5jb25maXJtKGDnoa7lrpropoHliKDpmaTpgInkuK3nmoQgJHtpZHMubGVuZ3RofSDmnaHorrDlvZXlkJfvvJ9gLCAn5Yig6Zmk56Gu6K6kJywgewogICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsCiAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICB0eXBlOiAnd2FybmluZycKICAgIH0pCiAgICBhd2FpdCBkZWxldGVUZWFjaGluZ0xvZyhpZHMpCiAgICBFbE1lc3NhZ2Uuc3VjY2Vzcyhg5bey5Yig6ZmkICR7aWRzLmxlbmd0aH0g5p2h6K6w5b2VYCkKICAgIGZldGNoTGlzdCgpCiAgfSBjYXRjaCAoZXJyOiBhbnkpIHsKICAgIGlmIChlcnIgIT09ICdjYW5jZWwnKSB7CiAgICAgIC8vIOmUmeivr+W3sueUseaLpuaIquWZqOWkhOeQhgogICAgfQogIH0KfQoKY29uc3QgaGFuZGxlQXVkaXQgPSBhc3luYyAoKSA9PiB7CiAgY29uc3QgaWRzID0gZ2V0U2VsZWN0ZWRCaHMoKQogIGlmIChpZHMubGVuZ3RoID09PSAwKSByZXR1cm4KICB0cnkgewogICAgYXdhaXQgRWxNZXNzYWdlQm94LmNvbmZpcm0oYOehruWumuimgeWuoeaguOmAmui/h+mAieS4reeahCAke2lkcy5sZW5ndGh9IOadoeiusOW9leWQl++8n2AsICflrqHmoLjnoa7orqQnLCB7CiAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn56Gu5a6aJywKICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgfSkKICAgIGF3YWl0IGJhdGNoQXVkaXRUZWFjaGluZ0xvZyhpZHMpCiAgICBFbE1lc3NhZ2Uuc3VjY2Vzcyhg5bey5a6h5qC46YCa6L+HICR7aWRzLmxlbmd0aH0g5p2h6K6w5b2VYCkKICAgIGZldGNoTGlzdCgpCiAgfSBjYXRjaCAoZXJyOiBhbnkpIHsKICAgIGlmIChlcnIgIT09ICdjYW5jZWwnKSB7CiAgICAgIC8vIOmUmeivr+W3sueUseaLpuaIquWZqOWkhOeQhgogICAgfQogIH0KfQoKY29uc3QgcmVtYXJrID0gcmVmKCcnKQoKY29uc3QgaGFuZGxlV2l0aGRyYXcgPSBhc3luYyAoKSA9PiB7CiAgY29uc3QgaWRzID0gZ2V0U2VsZWN0ZWRCaHMoKQogIGlmIChpZHMubGVuZ3RoID09PSAwKSByZXR1cm4KICBpZiAoIXJlbWFyay52YWx1ZS50cmltKCkpIHsKICAgIEVsTWVzc2FnZS53YXJuaW5nKCfor7floavlhpnpgIDlm57ljp/lm6Av5oSP6KeBJykKICAgIHJldHVybgogIH0KICB0cnkgewogICAgYXdhaXQgRWxNZXNzYWdlQm94LmNvbmZpcm0oYOehruWumuimgeaSpOWbnumHjeWhq+mAieS4reeahCAke2lkcy5sZW5ndGh9IOadoeiusOW9leWQl++8n2AsICfmkqTlm57noa7orqQnLCB7CiAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn56Gu5a6aJywKICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgfSkKICAgIGZvciAoY29uc3QgYmggb2YgaWRzKSB7CiAgICAgIGF3YWl0IHJlamVjdFRlYWNoaW5nTG9nKGJoLCByZW1hcmsudmFsdWUudHJpbSgpKQogICAgfQogICAgRWxNZXNzYWdlLnN1Y2Nlc3MoYOW3suaSpOWbniAke2lkcy5sZW5ndGh9IOadoeiusOW9lWApCiAgICBmZXRjaExpc3QoKQogIH0gY2F0Y2ggKGVycjogYW55KSB7CiAgICBpZiAoZXJyICE9PSAnY2FuY2VsJykgewogICAgICAvLyDplJnor6/lt7LnlLHmi6bmiKrlmajlpITnkIYKICAgIH0KICB9Cn0KCmNvbnN0IGhhbmRsZVJlY2hlY2sgPSBhc3luYyAoKSA9PiB7CiAgdHJ5IHsKICAgIGF3YWl0IHJlY2hlY2tUZWFjaGluZ0xvZygpCiAgICBFbE1lc3NhZ2Uuc3VjY2Vzcygn6YeN5paw5qOA5p+l5Y+Y5pu05oOF5Ya15a6M5oiQJykKICB9IGNhdGNoIHsKICAgIC8vIOmUmeivr+W3sueUseaLpuaIquWZqOe7n+S4gOWkhOeQhgogIH0KfQoKLy8gPT09PT09PT09PT09PT09PT09PT0g5a+85Ye6ID09PT09PT09PT09PT09PT09PT09CmNvbnN0IGRvd25sb2FkQmxvYiA9IChibG9iOiBCbG9iLCBmaWxlTmFtZTogc3RyaW5nKSA9PiB7CiAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikKICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpCiAgbGluay5ocmVmID0gdXJsCiAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lCiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKQogIGxpbmsuY2xpY2soKQogIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluaykKICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpCn0KCmNvbnN0IGhhbmRsZUV4cG9ydCA9IGFzeW5jICgpID0+IHsKICB0cnkgewogICAgY29uc3QgYmxvYjogYW55ID0gYXdhaXQgZXhwb3J0VGVhY2hpbmdMb2coYnVpbGRTZWFyY2hQYXJhbXMoKSkKICAgIGRvd25sb2FkQmxvYihibG9iIGFzIEJsb2IsIGDlt7LkuIrmiqXmlZnlrabml6Xlv5dfJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApfS54bHNgKQogICAgRWxNZXNzYWdlLnN1Y2Nlc3MoJ+WvvOWHuuaIkOWKnycpCiAgfSBjYXRjaCB7CiAgICAvLyDplJnor6/lt7LnlLHmi6bmiKrlmajnu5/kuIDlpITnkIYKICB9Cn0KCi8vID09PT09PT09PT09PT09PT09PT09IOafpeeci+ivpuaDhSA9PT09PT09PT09PT09PT09PT09PQpjb25zdCBkZXRhaWxWaXNpYmxlID0gcmVmKGZhbHNlKQpjb25zdCBkZXRhaWxSb3cgPSByZWY8TG9nSXRlbT4oe30pCgpjb25zdCBoYW5kbGVEZXRhaWwgPSAocm93OiBMb2dJdGVtKSA9PiB7CiAgZGV0YWlsUm93LnZhbHVlID0gcm93CiAgZGV0YWlsVmlzaWJsZS52YWx1ZSA9IHRydWUKfQoKb25Nb3VudGVkKCgpID0+IHsKICBmZXRjaExpc3QoKQp9KQo="},{"version":3,"sources":["reportedView.vue"],"names":[],"mappings":";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;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA","file":"reportedView.vue","sourceRoot":"src/views/teachingLog/organLog/components","sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { formatDate } from '@/utils/index'\nimport {\n getReportedTeachingLogList,\n deleteTeachingLog,\n batchAuditTeachingLog,\n rejectTeachingLog,\n recheckTeachingLog,\n exportTeachingLog\n} from '@/api/log'\nimport LogDetailDialog from './LogDetailDialog.vue'\n\n// ==================== 查询表单 ====================\ninterface SearchForm {\n startDate: string\n startDateEnabled: boolean\n endDate: string\n endDateEnabled: boolean\n courseName: string\n courseNameEnabled: boolean\n teachMethod: string\n teachMethodEnabled: boolean\n change: string\n changeEnabled: boolean\n taskCategory: string\n taskCategoryEnabled: boolean\n dept: string\n deptEnabled: boolean\n teacher: string\n teacherEnabled: boolean\n className: string\n classNameEnabled: boolean\n}\n\nconst searchForm = ref<SearchForm>({\n startDate: '',\n startDateEnabled: false,\n endDate: '',\n endDateEnabled: false,\n courseName: '',\n courseNameEnabled: false,\n teachMethod: '理论讲授',\n teachMethodEnabled: false,\n change: '与教学计划一致',\n changeEnabled: false,\n taskCategory: '全军院校训练规划内任务',\n taskCategoryEnabled: false,\n dept: '教务处',\n deptEnabled: false,\n teacher: '教务处',\n teacherEnabled: false,\n className: '',\n classNameEnabled: false\n})\n\nconst teachMethodOptions = ['理论讲授', '实践教学', '研讨教学', '案例教学', '实操演练']\nconst changeOptions = [\n '与教学计划一致',\n '已改动教学计划',\n '手动拟制',\n '教员变动',\n '时间变动',\n '课程变动',\n '授课方式变动',\n '任务类别变动',\n '期班变动',\n '地点变动',\n '课题变动'\n]\nconst taskCategoryOptions = ['全军院校训练规划内任务', '其他任务(含研究生导师指导)']\nconst deptOptions = ['教务处', '指挥系', '政治工作教研室', '军事基础教研室', '装备保障教研室']\nconst teacherOptions = ['教务处', '张三', '李四', '王五', '赵六', '孙七']\n\n// ==================== 数据表格 ====================\ninterface LogItem {\n bh?: string\n [key: string]: any\n}\n\nconst loading = ref(false)\nconst tableData = ref<LogItem[]>([])\nconst selectedRows = ref<LogItem[]>([])\n\n// ==================== 分页 ====================\nconst pageNum = ref(1)\nconst pageSize = ref(20)\nconst total = ref(0)\n\nconst handleSelectionChange = (rows: LogItem[]) => {\n selectedRows.value = rows\n}\n\n/** 根据\"勾选启用\"模式构建实际查询参数 */\nconst buildSearchParams = (): Record<string, any> => {\n const form = searchForm.value\n const params: Record<string, any> = { pageNum: pageNum.value, pageSize: pageSize.value }\n if (form.startDateEnabled && form.startDate) params.ksrq = form.startDate\n if (form.endDateEnabled && form.endDate) params.jsrq = form.endDate\n if (form.courseNameEnabled && form.courseName) params.kcmc = form.courseName\n if (form.teachMethodEnabled && form.teachMethod) params.jxff = form.teachMethod\n if (form.changeEnabled && form.change) params.gdqk = form.change\n if (form.taskCategoryEnabled && form.taskCategory) params.rwlb = form.taskCategory\n if (form.deptEnabled && form.dept) params.jys = form.dept\n if (form.teacherEnabled && form.teacher) params.skjy = form.teacher\n if (form.classNameEnabled && form.className) params.pxqb = form.className\n return params\n}\n\nconst extractListData = (res: any) => {\n const data = res.data || res\n const list = data.records || data.list || data.rows || []\n const totalCount = data.total ?? data.totalCount ?? data.totalRows ?? 0\n return { list, total: totalCount }\n}\n\nconst fetchList = async () => {\n loading.value = true\n try {\n const res: any = await getReportedTeachingLogList(buildSearchParams())\n if (res.code === 200 || res.code === 0) {\n const { list, total: totalCount } = extractListData(res)\n tableData.value = list\n total.value = totalCount\n }\n } catch {\n // 错误已由拦截器统一处理\n } finally {\n loading.value = false\n }\n}\n\nconst handleSearch = () => {\n pageNum.value = 1\n fetchList()\n}\n\nconst handleReset = () => {\n searchForm.value = {\n startDate: '',\n startDateEnabled: false,\n endDate: '',\n endDateEnabled: false,\n courseName: '',\n courseNameEnabled: false,\n teachMethod: '理论讲授',\n teachMethodEnabled: false,\n change: '与教学计划一致',\n changeEnabled: false,\n taskCategory: '全军院校训练规划内任务',\n taskCategoryEnabled: false,\n dept: '教务处',\n deptEnabled: false,\n teacher: '教务处',\n teacherEnabled: false,\n className: '',\n classNameEnabled: false\n }\n handleSearch()\n}\n\nconst handlePageChange = () => {\n fetchList()\n}\n\nconst handleSizeChange = (size: number) => {\n pageSize.value = size\n pageNum.value = 1\n fetchList()\n}\n\n// ==================== 批量操作 ====================\nconst getSelectedBhs = (): (string | number)[] => {\n const ids = selectedRows.value.map((row) => row.bh).filter(Boolean) as (string | number)[]\n if (ids.length === 0) {\n ElMessage.warning('请先选择记录')\n return []\n }\n return ids\n}\n\nconst handleDelete = async () => {\n const ids = getSelectedBhs()\n if (ids.length === 0) return\n try {\n await ElMessageBox.confirm(`确定要删除选中的 ${ids.length} 条记录吗?`, '删除确认', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n })\n await deleteTeachingLog(ids)\n ElMessage.success(`已删除 ${ids.length} 条记录`)\n fetchList()\n } catch (err: any) {\n if (err !== 'cancel') {\n // 错误已由拦截器处理\n }\n }\n}\n\nconst handleAudit = async () => {\n const ids = getSelectedBhs()\n if (ids.length === 0) return\n try {\n await ElMessageBox.confirm(`确定要审核通过选中的 ${ids.length} 条记录吗?`, '审核确认', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n })\n await batchAuditTeachingLog(ids)\n ElMessage.success(`已审核通过 ${ids.length} 条记录`)\n fetchList()\n } catch (err: any) {\n if (err !== 'cancel') {\n // 错误已由拦截器处理\n }\n }\n}\n\nconst remark = ref('')\n\nconst handleWithdraw = async () => {\n const ids = getSelectedBhs()\n if (ids.length === 0) return\n if (!remark.value.trim()) {\n ElMessage.warning('请填写退回原因/意见')\n return\n }\n try {\n await ElMessageBox.confirm(`确定要撤回重填选中的 ${ids.length} 条记录吗?`, '撤回确认', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n })\n for (const bh of ids) {\n await rejectTeachingLog(bh, remark.value.trim())\n }\n ElMessage.success(`已撤回 ${ids.length} 条记录`)\n fetchList()\n } catch (err: any) {\n if (err !== 'cancel') {\n // 错误已由拦截器处理\n }\n }\n}\n\nconst handleRecheck = async () => {\n try {\n await recheckTeachingLog()\n ElMessage.success('重新检查变更情况完成')\n } catch {\n // 错误已由拦截器统一处理\n }\n}\n\n// ==================== 导出 ====================\nconst downloadBlob = (blob: Blob, fileName: string) => {\n const url = window.URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.href = url\n link.download = fileName\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n window.URL.revokeObjectURL(url)\n}\n\nconst handleExport = async () => {\n try {\n const blob: any = await exportTeachingLog(buildSearchParams())\n downloadBlob(blob as Blob, `已上报教学日志_${new Date().toISOString().slice(0, 10)}.xls`)\n ElMessage.success('导出成功')\n } catch {\n // 错误已由拦截器统一处理\n }\n}\n\n// ==================== 查看详情 ====================\nconst detailVisible = ref(false)\nconst detailRow = ref<LogItem>({})\n\nconst handleDetail = (row: LogItem) => {\n detailRow.value = row\n detailVisible.value = true\n}\n\nonMounted(() => {\n fetchList()\n})\n</script>\n\n<template>\n <div class=\"page-container\">\n <!-- 查询条件 -->\n <el-card shadow=\"never\" class=\"search-card\">\n <div class=\"form-title\">\n <span class=\"title-left\">已上报机关教学日志</span>\n <span class=\"search-tip\">勾选\"选择框\"表示启用该项对应的查询条件。</span>\n </div>\n <el-form :model=\"searchForm\" label-width=\"110px\" class=\"search-form\">\n <el-row :gutter=\"0\">\n <el-col :span=\"12\">\n <el-form-item>\n <template #label>\n <el-checkbox v-model=\"searchForm.startDateEnabled\">开始日期</el-checkbox>\n </template>\n <el-date-picker v-model=\"searchForm.startDate\" type=\"date\" value-format=\"YYYY-MM-DD\"\n placeholder=\"选择开始日期\" class=\"w-full\" :disabled=\"!searchForm.startDateEnabled\" />\n </el-form-item>\n </el-col>\n <el-col :span=\"12\">\n <el-form-item>\n <template #label>\n <el-checkbox v-model=\"searchForm.endDateEnabled\">结束日期</el-checkbox>\n </template>\n <el-date-picker v-model=\"searchForm.endDate\" type=\"date\" value-format=\"YYYY-MM-DD\" placeholder=\"选择结束日期\"\n class=\"w-full\" :disabled=\"!searchForm.endDateEnabled\" />\n </el-form-item>\n </el-col>\n </el-row>\n\n <el-row :gutter=\"0\">\n <el-col :span=\"12\">\n <el-form-item>\n <template #label>\n <el-checkbox v-model=\"searchForm.courseNameEnabled\">课程名称</el-checkbox>\n </template>\n <el-input v-model=\"searchForm.courseName\" placeholder=\"请输入课程名称\" clearable\n :disabled=\"!searchForm.courseNameEnabled\" />\n </el-form-item>\n </el-col>\n <el-col :span=\"12\">\n <el-form-item>\n <template #label>\n <el-checkbox v-model=\"searchForm.teachMethodEnabled\">教学方法</el-checkbox>\n </template>\n <el-select v-model=\"searchForm.teachMethod\" placeholder=\"请选择教学方法\" class=\"w-full\"\n :disabled=\"!searchForm.teachMethodEnabled\">\n <el-option v-for=\"item in teachMethodOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\n </el-select>\n </el-form-item>\n </el-col>\n </el-row>\n\n <el-row :gutter=\"0\">\n <el-col :span=\"12\">\n <el-form-item>\n <template #label>\n <el-checkbox v-model=\"searchForm.changeEnabled\">改动情况</el-checkbox>\n </template>\n <el-select v-model=\"searchForm.change\" placeholder=\"请选择改动情况\" class=\"w-full\" :disabled=\"!searchForm.changeEnabled\">\n <el-option v-for=\"item in changeOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\n </el-select>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\">\n <el-form-item>\n <template #label>\n <el-checkbox v-model=\"searchForm.taskCategoryEnabled\">任务类别</el-checkbox>\n </template>\n <el-select v-model=\"searchForm.taskCategory\" placeholder=\"请选择任务类别\" class=\"w-full\"\n :disabled=\"!searchForm.taskCategoryEnabled\">\n <el-option v-for=\"item in taskCategoryOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\n </el-select>\n </el-form-item>\n </el-col>\n </el-row>\n\n <el-row :gutter=\"0\">\n <el-col :span=\"12\">\n <el-form-item>\n <template #label>\n <el-checkbox v-model=\"searchForm.deptEnabled\">教研室</el-checkbox>\n </template>\n <el-select v-model=\"searchForm.dept\" placeholder=\"请选择教研室\" class=\"w-full\" :disabled=\"!searchForm.deptEnabled\">\n <el-option v-for=\"item in deptOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\n </el-select>\n </el-form-item>\n </el-col>\n <el-col :span=\"12\">\n <el-form-item>\n <template #label>\n <el-checkbox v-model=\"searchForm.teacherEnabled\">授课教员</el-checkbox>\n </template>\n <el-select v-model=\"searchForm.teacher\" placeholder=\"请选择授课教员\" class=\"w-full\"\n :disabled=\"!searchForm.teacherEnabled\">\n <el-option v-for=\"item in teacherOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\n </el-select>\n </el-form-item>\n </el-col>\n </el-row>\n\n <el-row :gutter=\"0\">\n <el-col :span=\"12\">\n <el-form-item>\n <template #label>\n <el-checkbox v-model=\"searchForm.classNameEnabled\">培训班</el-checkbox>\n </template>\n <el-input v-model=\"searchForm.className\" placeholder=\"请输入培训班\" clearable\n :disabled=\"!searchForm.classNameEnabled\" />\n </el-form-item>\n </el-col>\n </el-row>\n </el-form>\n\n <div class=\"search-actions\">\n <div class=\"left-group\">\n <el-button type=\"primary\" @click=\"handleDelete\">删除所选</el-button>\n <el-button type=\"primary\" @click=\"handleAudit\">审核通过所选</el-button>\n <el-input v-model=\"remark\" placeholder=\"退回原因/意见\" clearable class=\"action-input\" />\n <el-button type=\"primary\" @click=\"handleWithdraw\">撤回重填所选</el-button>\n <el-button type=\"primary\" @click=\"handleRecheck\">重新检查所选变更情况</el-button>\n <el-button type=\"primary\" @click=\"handleExport\">导出到 Word</el-button>\n </div>\n <div class=\"right-group\">\n <el-button @click=\"handleReset\">重置</el-button>\n <el-button type=\"primary\" @click=\"handleSearch\">查询</el-button>\n </div>\n </div>\n </el-card>\n\n <!-- 数据表格 -->\n <el-card shadow=\"never\" class=\"table-card\">\n <el-table v-loading=\"loading\" :data=\"tableData\" stripe border highlight-current-row\n @selection-change=\"handleSelectionChange\">\n <el-table-column type=\"selection\" width=\"50\" align=\"center\" />\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\n <el-table-column prop=\"rwlb\" label=\"任务类别\" width=\"120\" align=\"center\" show-overflow-tooltip />\n <el-table-column prop=\"jyxm\" label=\"主讲教员\" width=\"100\" align=\"center\" />\n <el-table-column prop=\"rq\" label=\"日期\" width=\"120\" align=\"center\" :formatter=\"formatDate\" />\n <el-table-column label=\"节次\" width=\"80\" align=\"center\">\n <template #default=\"{ row }\">\n {{ row.qsjc && row.jsjc ? `${row.qsjc}-${row.jsjc}节` : (row.qsjc ?? '-') }}\n </template>\n </el-table-column>\n <el-table-column prop=\"kcmc\" label=\"课程名称\" min-width=\"150\" show-overflow-tooltip />\n <el-table-column prop=\"pxqbxx\" label=\"培训期班信息\" min-width=\"140\" show-overflow-tooltip />\n <el-table-column label=\"人数\" width=\"70\" align=\"center\">\n <template #default=\"{ row }\">{{ row.sdrs ?? row.ydrs ?? '-' }}</template>\n </el-table-column>\n <el-table-column label=\"分组指导教员\" width=\"120\" align=\"center\">\n <template #default=\"{ row }\">{{ row.fzyzdjy || '-' }}</template>\n </el-table-column>\n <el-table-column prop=\"jsfs\" label=\"教学方法\" width=\"100\" align=\"center\" />\n <el-table-column prop=\"zt\" label=\"日志状态\" width=\"100\" align=\"center\" />\n <el-table-column prop=\"gdqk\" label=\"变动汇总\" min-width=\"120\" show-overflow-tooltip />\n <el-table-column prop=\"jxrzcjfs\" label=\"创建方式\" width=\"100\" align=\"center\" />\n <el-table-column label=\"详细\" width=\"80\" align=\"center\" fixed=\"right\">\n <template #default=\"{ row }\">\n <el-button type=\"primary\" link @click=\"handleDetail(row as LogItem)\">详细</el-button>\n </template>\n </el-table-column>\n </el-table>\n\n <!-- 分页 -->\n <div class=\"pagination-wrapper\">\n <el-pagination v-model:current-page=\"pageNum\" v-model:page-size=\"pageSize\" :page-sizes=\"[10, 20, 50, 100]\"\n :total=\"total\" layout=\"total, sizes, prev, pager, next, jumper\" background @current-change=\"handlePageChange\"\n @size-change=\"handleSizeChange\" />\n </div>\n </el-card>\n\n <!-- 日志详情对话框 -->\n <LogDetailDialog v-model:visible=\"detailVisible\" :row=\"detailRow\" />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.page-container {\n padding: 4px 8px;\n}\n\n.search-card {\n margin-bottom: 16px;\n\n .form-title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 12px 0;\n\n .title-left {\n font-size: 16px;\n font-weight: 600;\n color: #303133;\n }\n }\n\n .search-form {\n .w-full {\n width: 100%;\n }\n\n .el-row {\n border-bottom: 1px solid #ebeef5;\n\n &:last-child {\n border-bottom: none;\n }\n }\n\n .el-col {\n border-right: 1px solid #ebeef5;\n\n &:last-child {\n border-right: none;\n }\n }\n\n .el-form-item__label {\n white-space: normal;\n line-height: 1.4;\n text-align: left;\n justify-content: flex-start;\n }\n\n .el-form-item {\n margin-bottom: 0;\n padding: 10px 12px;\n }\n }\n\n .search-tip {\n font-size: 12px;\n color: #f56c6c;\n }\n\n .search-actions {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px;\n border-top: 1px solid #ebeef5;\n\n .left-group {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n\n .action-input {\n width: 240px;\n }\n }\n\n .right-group {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n }\n}\n\n.table-card {\n .el-table {\n width: 100%;\n }\n\n .pagination-wrapper {\n display: flex;\n justify-content: flex-end;\n padding: 16px 0 0;\n }\n}\n</style>"]}]} |