Files
education/frontend/node_modules/.cache/vue-loader/cc477531a36ab184027c22e74bf620dc.json
T

1 line
35 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\\logView.vue?vue&type=script&setup=true&lang=ts","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachingLog\\organLog\\components\\logView.vue","mtime":1787312037408},{"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:CmltcG9ydCB7IG9uTW91bnRlZCwgcmVmIH0gZnJvbSAndnVlJwppbXBvcnQgeyBFbE1lc3NhZ2UsIEVsTWVzc2FnZUJveCB9IGZyb20gJ2VsZW1lbnQtcGx1cycKaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0AvdXRpbHMvaW5kZXgnCmltcG9ydCB7CiAgZ2V0VGVhY2hpbmdMb2dMaXN0LAogIGRlbGV0ZVRlYWNoaW5nTG9nLAogIGJhdGNoUmVwb3J0VGVhY2hpbmdMb2csCiAgcmVjaGVja1RlYWNoaW5nTG9nLAogIGV4cG9ydFRlYWNoaW5nTG9nLAogIGltcG9ydFRlYWNoaW5nTG9nRXhjZWwsCiAgZG93bmxvYWRUZWFjaGluZ0xvZ1RlbXBsYXRlCn0gZnJvbSAnQC9hcGkvbG9nJwppbXBvcnQgTG9nRGV0YWlsRGlhbG9nIGZyb20gJy4vTG9nRGV0YWlsRGlhbG9nLnZ1ZScKCi8vID09PT09PT09PT09PT09PT09PT09IOafpeivouihqOWNlSA9PT09PT09PT09PT09PT09PT09PQppbnRlcmZhY2UgU2VhcmNoRm9ybSB7CiAga3NycTogc3RyaW5nCiAga3NycUVuYWJsZWQ6IGJvb2xlYW4KICBqc3JxOiBzdHJpbmcKICBqc3JxRW5hYmxlZDogYm9vbGVhbgogIGtjbWM6IHN0cmluZwogIGtjbWNFbmFibGVkOiBib29sZWFuCiAganlzOiBzdHJpbmcKICBqeXNFbmFibGVkOiBib29sZWFuCiAganhmZjogc3RyaW5nCiAganhmZkVuYWJsZWQ6IGJvb2xlYW4KICByenp0OiBzdHJpbmcKICByenp0RW5hYmxlZDogYm9vbGVhbgogIHNrank6IHN0cmluZwogIHNranlFbmFibGVkOiBib29sZWFuCiAgcHhxYjogc3RyaW5nCiAgcHhxYkVuYWJsZWQ6IGJvb2xlYW4KICBjaGFuZ2VUeXBlOiBzdHJpbmcKICBjaGFuZ2VUeXBlRW5hYmxlZDogYm9vbGVhbgogIGNoYW5nZVR5cGVzOiBzdHJpbmdbXQogIHJ3bGI6IHN0cmluZwogIHJ3bGJFbmFibGVkOiBib29sZWFuCn0KCmNvbnN0IHNlYXJjaEZvcm0gPSByZWY8U2VhcmNoRm9ybT4oewogIGtzcnE6ICcnLAogIGtzcnFFbmFibGVkOiBmYWxzZSwKICBqc3JxOiAnJywKICBqc3JxRW5hYmxlZDogZmFsc2UsCiAga2NtYzogJycsCiAga2NtY0VuYWJsZWQ6IGZhbHNlLAogIGp5czogJ+aVmeeglOWupCcsCiAganlzRW5hYmxlZDogZmFsc2UsCiAganhmZjogJ+eQhuiuuuiusuaOiCcsCiAganhmZkVuYWJsZWQ6IGZhbHNlLAogIHJ6enQ6ICfmlZnliqHpg6jpl6jlr7zlhaXmlZnlkZjnsbsnLAogIHJ6enRFbmFibGVkOiBmYWxzZSwKICBza2p5OiAn5pWZ5Yqh5aSEJywKICBza2p5RW5hYmxlZDogZmFsc2UsCiAgcHhxYjogJycsCiAgcHhxYkVuYWJsZWQ6IGZhbHNlLAogIGNoYW5nZVR5cGU6ICfkuI7mlZnlraborqHliJLkuIDoh7QnLAogIGNoYW5nZVR5cGVFbmFibGVkOiBmYWxzZSwKICBjaGFuZ2VUeXBlczogW10sCiAgcndsYjogJ+WFqOWGm+mZouagoeiuree7g+inhOWIkuWGheS7u+WKoScsCiAgcndsYkVuYWJsZWQ6IGZhbHNlCn0pCgpjb25zdCBqeXNPcHRpb25zID0gWyfmlZnnoJTlrqQnLCAn6Ziy56m65YW157O7JywgJ+mAmuS/oeW3peeoi+ezuycsICfoo4XnlLLlhbXns7snXQpjb25zdCBqeGZmT3B0aW9ucyA9IFsn55CG6K666K6y5o6IJywgJ+iuqOiuuicsICflrp7mk40nLCAn5ryU56S6JywgJ+WunumqjCcsICfmvJTkuaAnXQpjb25zdCBza2p5T3B0aW9ucyA9IFsn5pWZ5Yqh5aSEJywgJ+W8oOS4iScsICfmnY7lm5snLCAn546L5LqUJywgJ+i1teWFrSddCmNvbnN0IHJ6enRPcHRpb25zID0gWyfmlZnliqHpg6jpl6jlr7zlhaXmlZnlkZjnsbsnLCAn566h55CG5ZGY5omL5bel5re75YqgJ10KY29uc3QgcndsYk9wdGlvbnMgPSBbJ+WFqOWGm+mZouagoeiuree7g+inhOWIkuWGheS7u+WKoScsICflhbbku5bku7vliqEnXQpjb25zdCBjaGFuZ2VUeXBlT3B0aW9ucyA9IFsKICB7IGxhYmVsOiAn5LiO5pWZ5a2m6K6h5YiS5LiA6Ie0JywgdmFsdWU6ICfkuI7mlZnlraborqHliJLkuIDoh7QnIH0sCiAgeyBsYWJlbDogJ+W3suaUueWKqOaVmeWtpuiuoeWIkicsIHZhbHVlOiAn5bey5pS55Yqo5pWZ5a2m6K6h5YiSJyB9LAogIHsgbGFiZWw6ICfmiYvliqjmi5/liLYnLCB2YWx1ZTogJ+aJi+WKqOaLn+WIticgfQpdCmNvbnN0IGNoYW5nZVR5cGVMaXN0ID0gWwogIHsgbGFiZWw6ICflt7LmlLnliqjmlZnlkZgnLCB2YWx1ZTogJ+W3suaUueWKqOaVmeWRmCcgfSwKICB7IGxhYmVsOiAn5bey5pS55Yqo5pe26Ze0JywgdmFsdWU6ICflt7LmlLnliqjml7bpl7QnIH0sCiAgeyBsYWJlbDogJ+W3suaUueWKqOivvuebricsIHZhbHVlOiAn5bey5pS55Yqo6K++55uuJyB9LAogIHsgbGFiZWw6ICflt7LmlLnliqjlhoXlrrknLCB2YWx1ZTogJ+W3suaUueWKqOWGheWuuScgfSwKICB7IGxhYmVsOiAn5bey5pS55Yqo5pWZ5a2m5pa55rOVJywgdmFsdWU6ICflt7LmlLnliqjmlZnlrabmlrnms5UnIH0sCiAgeyBsYWJlbDogJ+W3suaUueWKqOWcuuWcsCcsIHZhbHVlOiAn5bey5pS55Yqo5Zy65ZywJyB9LAogIHsgbGFiZWw6ICflt7LmlLnliqjmnJ/nj60nLCB2YWx1ZTogJ+W3suaUueWKqOacn+ePrScgfQpdCgovLyA9PT09PT09PT09PT09PT09PT09PSDmlbDmja7ooajmoLwgPT09PT09PT09PT09PT09PT09PT0KaW50ZXJmYWNlIExvZ0l0ZW0gewogIGJoPzogc3RyaW5nCiAgW2tleTogc3RyaW5nXTogYW55Cn0KCmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpCmNvbnN0IHNlbGVjdGVkUm93cyA9IHJlZjxMb2dJdGVtW10+KFtdKQpjb25zdCB0YWJsZURhdGEgPSByZWY8TG9nSXRlbVtdPihbXSkKCi8vID09PT09PT09PT09PT09PT09PT09IOWIhumhtSA9PT09PT09PT09PT09PT09PT09PQpjb25zdCBwYWdlTnVtID0gcmVmKDEpCmNvbnN0IHBhZ2VTaXplID0gcmVmKDIwKQpjb25zdCB0b3RhbCA9IHJlZigwKQoKY29uc3QgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlID0gKHJvd3M6IExvZ0l0ZW1bXSkgPT4gewogIHNlbGVjdGVkUm93cy52YWx1ZSA9IHJvd3MKfQoKLyoqIOagueaNriLli77pgInlkK/nlKgi5qih5byP5p6E5bu65a6e6ZmF5p+l6K+i5Y+C5pWwICovCmNvbnN0IGJ1aWxkU2VhcmNoUGFyYW1zID0gKCk6IFJlY29yZDxzdHJpbmcsIGFueT4gPT4gewogIGNvbnN0IGZvcm0gPSBzZWFyY2hGb3JtLnZhbHVlCiAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0geyBwYWdlTnVtOiBwYWdlTnVtLnZhbHVlLCBwYWdlU2l6ZTogcGFnZVNpemUudmFsdWUgfQogIGlmIChmb3JtLmtzcnFFbmFibGVkICYmIGZvcm0ua3NycSkgcGFyYW1zLmtzcnEgPSBmb3JtLmtzcnEKICBpZiAoZm9ybS5qc3JxRW5hYmxlZCAmJiBmb3JtLmpzcnEpIHBhcmFtcy5qc3JxID0gZm9ybS5qc3JxCiAgaWYgKGZvcm0ua2NtY0VuYWJsZWQgJiYgZm9ybS5rY21jKSBwYXJhbXMua2NtYyA9IGZvcm0ua2NtYwogIGlmIChmb3JtLmp5c0VuYWJsZWQgJiYgZm9ybS5qeXMpIHBhcmFtcy5qeXMgPSBmb3JtLmp5cwogIGlmIChmb3JtLmp4ZmZFbmFibGVkICYmIGZvcm0uanhmZikgcGFyYW1zLmp4ZmYgPSBmb3JtLmp4ZmYKICBpZiAoZm9ybS5yenp0RW5hYmxlZCAmJiBmb3JtLnJ6enQpIHBhcmFtcy5yenp0ID0gZm9ybS5yenp0CiAgaWYgKGZvcm0uc2tqeUVuYWJsZWQgJiYgZm9ybS5za2p5KSBwYXJhbXMuc2tqeSA9IGZvcm0uc2tqeQogIGlmIChmb3JtLnB4cWJFbmFibGVkICYmIGZvcm0ucHhxYikgcGFyYW1zLnB4cWIgPSBmb3JtLnB4cWIKICBpZiAoZm9ybS5yd2xiRW5hYmxlZCAmJiBmb3JtLnJ3bGIpIHBhcmFtcy5yd2xiID0gZm9ybS5yd2xiCiAgaWYgKGZvcm0uY2hhbmdlVHlwZUVuYWJsZWQgJiYgZm9ybS5jaGFuZ2VUeXBlKSBwYXJhbXMuZ2RxayA9IGZvcm0uY2hhbmdlVHlwZQogIGlmIChmb3JtLmNoYW5nZVR5cGVFbmFibGVkICYmIGZvcm0uY2hhbmdlVHlwZXMubGVuZ3RoID4gMCkgewogICAgcGFyYW1zLmdkeHhxayA9IGZvcm0uY2hhbmdlVHlwZXMuam9pbignLCcpCiAgfQogIHJldHVybiBwYXJhbXMKfQoKLyoqIOS7juWTjeW6lOS4reaPkOWPluWIl+ihqOaVsOaNruWSjOaAu+aVsO+8iOWFvOWuuSByZWNvcmRzIC8gbGlzdCAvIHJvd3Mg562J5bi46KeB5a2X5q615ZCN77yJICovCmNvbnN0IGV4dHJhY3RMaXN0RGF0YSA9IChyZXM6IGFueSkgPT4gewogIGNvbnN0IGRhdGEgPSByZXMuZGF0YSB8fCByZXMKICBjb25zdCBsaXN0ID0gZGF0YS5yZWNvcmRzIHx8IGRhdGEubGlzdCB8fCBkYXRhLnJvd3MgfHwgW10KICBjb25zdCB0b3RhbENvdW50ID0gZGF0YS50b3RhbCA/PyBkYXRhLnRvdGFsQ291bnQgPz8gZGF0YS50b3RhbFJvd3MgPz8gMAogIHJldHVybiB7IGxpc3QsIHRvdGFsOiB0b3RhbENvdW50IH0KfQoKLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLwpjb25zdCBmZXRjaExpc3QgPSBhc3luYyAoKSA9PiB7CiAgbG9hZGluZy52YWx1ZSA9IHRydWUKICB0cnkgewogICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCBnZXRUZWFjaGluZ0xvZ0xpc3QoYnVpbGRTZWFyY2hQYXJhbXMoKSkKICAgIGlmIChyZXMuY29kZSA9PT0gMjAwIHx8IHJlcy5jb2RlID09PSAwKSB7CiAgICAgIGNvbnN0IHsgbGlzdCwgdG90YWw6IHRvdGFsQ291bnQgfSA9IGV4dHJhY3RMaXN0RGF0YShyZXMpCiAgICAgIHRhYmxlRGF0YS52YWx1ZSA9IGxpc3QKICAgICAgdG90YWwudmFsdWUgPSB0b3RhbENvdW50CiAgICB9CiAgfSBjYXRjaCB7CiAgICAvLyDplJnor6/lt7LnlLHmi6bmiKrlmajnu5/kuIDlpITnkIYKICB9IGZpbmFsbHkgewogICAgbG9hZGluZy52YWx1ZSA9IGZhbHNlCiAgfQp9Cgpjb25zdCBoYW5kbGVTZWFyY2ggPSAoKSA9PiB7CiAgcGFnZU51bS52YWx1ZSA9IDEKICBmZXRjaExpc3QoKQp9Cgpjb25zdCBoYW5kbGVQYWdlQ2hhbmdlID0gKCkgPT4gewogIGZldGNoTGlzdCgpCn0KCmNvbnN0IGhhbmRsZVNpemVDaGFuZ2UgPSAoc2l6ZTogbnVtYmVyKSA9PiB7CiAgcGFnZVNpemUudmFsdWUgPSBzaXplCiAgcGFnZU51bS52YWx1ZSA9IDEKICBmZXRjaExpc3QoKQp9Cgpjb25zdCBoYW5kbGVSZWZyZXNoID0gKCkgPT4gewogIGZldGNoTGlzdCgpCn0KCi8vID09PT09PT09PT09PT09PT09PT09IOaJuemHj+aTjeS9nCA9PT09PT09PT09PT09PT09PT09PQpjb25zdCBnZXRTZWxlY3RlZEJocyA9ICgpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHsKICBjb25zdCBpZHMgPSBzZWxlY3RlZFJvd3MudmFsdWUubWFwKChyb3cpID0+IHJvdy5iaCkuZmlsdGVyKEJvb2xlYW4pIGFzIChzdHJpbmcgfCBudW1iZXIpW10KICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkgewogICAgRWxNZXNzYWdlLndhcm5pbmcoJ+ivt+WFiOmAieaLqeimgeaTjeS9nOeahOiusOW9lScpCiAgICByZXR1cm4gW10KICB9CiAgcmV0dXJuIGlkcwp9Cgpjb25zdCBoYW5kbGVEZWxldGVTZWxlY3RlZCA9IGFzeW5jICgpID0+IHsKICBjb25zdCBpZHMgPSBnZXRTZWxlY3RlZEJocygpCiAgaWYgKGlkcy5sZW5ndGggPT09IDApIHJldHVybgogIHRyeSB7CiAgICBhd2FpdCBFbE1lc3NhZ2VCb3guY29uZmlybShg56Gu5a6a6KaB5Yig6Zmk6YCJ5Lit55qEICR7aWRzLmxlbmd0aH0g5p2h6K6w5b2V5ZCX77yfYCwgJ+WIoOmZpOehruiupCcsIHsKICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLAogICAgICBjYW5jZWxCdXR0b25UZXh0OiAn5Y+W5raIJywKICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICB9KQogICAgYXdhaXQgZGVsZXRlVGVhY2hpbmdMb2coaWRzKQogICAgRWxNZXNzYWdlLnN1Y2Nlc3MoYOW3suWIoOmZpCAke2lkcy5sZW5ndGh9IOadoeiusOW9lWApCiAgICBmZXRjaExpc3QoKQogIH0gY2F0Y2ggKGVycjogYW55KSB7CiAgICBpZiAoZXJyICE9PSAnY2FuY2VsJykgewogICAgICAvLyDplJnor6/lt7LnlLHmi6bmiKrlmajlpITnkIYKICAgIH0KICB9Cn0KCmNvbnN0IGhhbmRsZUJhdGNoUmVwb3J0ID0gYXN5bmMgKCkgPT4gewogIGNvbnN0IGlkcyA9IGdldFNlbGVjdGVkQmhzKCkKICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuCiAgdHJ5IHsKICAgIGF3YWl0IEVsTWVzc2FnZUJveC5jb25maXJtKGDnoa7lrpropoHmibnph4/kuIrmiqXpgInkuK3nmoQgJHtpZHMubGVuZ3RofSDmnaHorrDlvZXlkJfvvJ9gLCAn5LiK5oql56Gu6K6kJywgewogICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsCiAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICB0eXBlOiAnd2FybmluZycKICAgIH0pCiAgICBhd2FpdCBiYXRjaFJlcG9ydFRlYWNoaW5nTG9nKGlkcykKICAgIEVsTWVzc2FnZS5zdWNjZXNzKGDlt7Lmibnph4/kuIrmiqUgJHtpZHMubGVuZ3RofSDmnaHorrDlvZVgKQogICAgZmV0Y2hMaXN0KCkKICB9IGNhdGNoIChlcnI6IGFueSkgewogICAgaWYgKGVyciAhPT0gJ2NhbmNlbCcpIHsKICAgICAgLy8g6ZSZ6K+v5bey55Sx5oum5oiq5Zmo5aSE55CGCiAgICB9CiAgfQp9Cgpjb25zdCBoYW5kbGVSZWNoZWNrID0gYXN5bmMgKCkgPT4gewogIHRyeSB7CiAgICBhd2FpdCByZWNoZWNrVGVhY2hpbmdMb2coKQogICAgRWxNZXNzYWdlLnN1Y2Nlc3MoJ+mHjeaWsOajgOafpeWujOaIkCcpCiAgfSBjYXRjaCB7CiAgICAvLyDplJnor6/lt7LnlLHmi6bmiKrlmajlpITnkIYKICB9Cn0KCi8vID09PT09PT09PT09PT09PT09PT09IOWvvOWHuiAvIOWvvOWFpSAvIOaooeadvyA9PT09PT09PT09PT09PT09PT09PQpjb25zdCBkb3dubG9hZEJsb2IgPSAoYmxvYjogQmxvYiwgZmlsZU5hbWU6IHN0cmluZykgPT4gewogIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpCiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKQogIGxpbmsuaHJlZiA9IHVybAogIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZQogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaykKICBsaW5rLmNsaWNrKCkKICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspCiAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKQp9Cgpjb25zdCBoYW5kbGVFeHBvcnQgPSBhc3luYyAoKSA9PiB7CiAgY29uc3QgZm9ybSA9IHNlYXJjaEZvcm0udmFsdWUKICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fQogIGlmIChmb3JtLmtzcnFFbmFibGVkICYmIGZvcm0ua3NycSkgcGFyYW1zLmtzcnEgPSBmb3JtLmtzcnEKICBpZiAoZm9ybS5qc3JxRW5hYmxlZCAmJiBmb3JtLmpzcnEpIHBhcmFtcy5qc3JxID0gZm9ybS5qc3JxCiAgaWYgKGZvcm0ua2NtY0VuYWJsZWQgJiYgZm9ybS5rY21jKSBwYXJhbXMua2NtYyA9IGZvcm0ua2NtYwogIGlmIChmb3JtLmp5c0VuYWJsZWQgJiYgZm9ybS5qeXMpIHBhcmFtcy5qeXMgPSBmb3JtLmp5cwogIGlmIChmb3JtLmp4ZmZFbmFibGVkICYmIGZvcm0uanhmZikgcGFyYW1zLmp4ZmYgPSBmb3JtLmp4ZmYKICBpZiAoZm9ybS5yenp0RW5hYmxlZCAmJiBmb3JtLnJ6enQpIHBhcmFtcy5yenp0ID0gZm9ybS5yenp0CiAgaWYgKGZvcm0uc2tqeUVuYWJsZWQgJiYgZm9ybS5za2p5KSBwYXJhbXMuc2tqeSA9IGZvcm0uc2tqeQogIGlmIChmb3JtLnB4cWJFbmFibGVkICYmIGZvcm0ucHhxYikgcGFyYW1zLnB4cWIgPSBmb3JtLnB4cWIKICBpZiAoZm9ybS5yd2xiRW5hYmxlZCAmJiBmb3JtLnJ3bGIpIHBhcmFtcy5yd2xiID0gZm9ybS5yd2xiCiAgaWYgKGZvcm0uY2hhbmdlVHlwZUVuYWJsZWQgJiYgZm9ybS5jaGFuZ2VUeXBlKSBwYXJhbXMuZ2RxayA9IGZvcm0uY2hhbmdlVHlwZQogIGlmIChmb3JtLmNoYW5nZVR5cGVFbmFibGVkICYmIGZvcm0uY2hhbmdlVHlwZXMubGVuZ3RoID4gMCkgewogICAgcGFyYW1zLmdkeHhxayA9IGZvcm0uY2hhbmdlVHlwZXMuam9pbignLCcpCiAgfQogIHRyeSB7CiAgICBjb25zdCBibG9iOiBhbnkgPSBhd2FpdCBleHBvcnRUZWFjaGluZ0xvZyhwYXJhbXMpCiAgICBkb3dubG9hZEJsb2IoYmxvYiBhcyBCbG9iLCBg5pWZ5a2m5pel5b+XXyR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKX0ueGxzYCkKICAgIEVsTWVzc2FnZS5zdWNjZXNzKCflr7zlh7rmiJDlip8nKQogIH0gY2F0Y2ggewogICAgLy8g6ZSZ6K+v5bey55Sx5oum5oiq5Zmo57uf5LiA5aSE55CGCiAgfQp9Cgpjb25zdCBpbXBvcnRGaWxlSW5wdXQgPSByZWY8SFRNTElucHV0RWxlbWVudCB8IG51bGw+KG51bGwpCmNvbnN0IGltcG9ydGluZyA9IHJlZihmYWxzZSkKCmNvbnN0IGhhbmRsZUltcG9ydEV4Y2VsID0gKCkgPT4gewogIGltcG9ydEZpbGVJbnB1dC52YWx1ZT8uY2xpY2soKQp9Cgpjb25zdCBoYW5kbGVJbXBvcnRGaWxlQ2hhbmdlID0gYXN5bmMgKGU6IEV2ZW50KSA9PiB7CiAgY29uc3QgZmlsZXMgPSAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXMKICBpZiAoIWZpbGVzIHx8IGZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuCiAgY29uc3QgZmlsZSA9IGZpbGVzWzBdCiAgaW1wb3J0aW5nLnZhbHVlID0gdHJ1ZQogIHRyeSB7CiAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGltcG9ydFRlYWNoaW5nTG9nRXhjZWwoZmlsZSkKICAgIGlmIChyZXMuY29kZSA9PT0gMjAwIHx8IHJlcy5jb2RlID09PSAwKSB7CiAgICAgIEVsTWVzc2FnZS5zdWNjZXNzKHJlcy5tZXNzYWdlIHx8ICflr7zlhaXmiJDlip8nKQogICAgICBmZXRjaExpc3QoKQogICAgfSBlbHNlIHsKICAgICAgRWxNZXNzYWdlLmVycm9yKHJlcy5tZXNzYWdlIHx8ICflr7zlhaXlpLHotKUnKQogICAgfQogIH0gY2F0Y2ggewogICAgLy8g6ZSZ6K+v5bey55Sx5oum5oiq5Zmo57uf5LiA5aSE55CGCiAgfSBmaW5hbGx5IHsKICAgIGltcG9ydGluZy52YWx1ZSA9IGZhbHNlCiAgICBpZiAoaW1wb3J0RmlsZUlucHV0LnZhbHVlKSB7CiAgICAgIGltcG9ydEZpbGVJbnB1dC52YWx1ZS52YWx1ZSA9ICcnCiAgICB9CiAgfQp9Cgpjb25zdCBoYW5kbGVEb3dubG9hZFRlbXBsYXRlID0gYXN5bmMgKCkgPT4gewogIHRyeSB7CiAgICBjb25zdCBibG9iOiBhbnkgPSBhd2FpdCBkb3dubG9hZFRlYWNoaW5nTG9nVGVtcGxhdGUoKQogICAgZG93bmxvYWRCbG9iKGJsb2IgYXMgQmxvYiwgJ+WvvOWFpeaVmeWtpuaXpeW/l+aooeadvy54bHMnKQogICAgRWxNZXNzYWdlLnN1Y2Nlc3MoJ+aooeadv+S4i+i9veaIkOWKnycpCiAgfSBjYXRjaCB7CiAgICAvLyDplJnor6/lt7LnlLHmi6bmiKrlmajnu5/kuIDlpITnkIYKICB9Cn0KCi8vID09PT09PT09PT09PT09PT09PT09IOafpeeci+ivpuaDhSA9PT09PT09PT09PT09PT09PT09PQpjb25zdCBkZXRhaWxWaXNpYmxlID0gcmVmKGZhbHNlKQpjb25zdCBkZXRhaWxSb3cgPSByZWY8TG9nSXRlbT4oe30pCgpjb25zdCBoYW5kbGVEZXRhaWwgPSAocm93OiBMb2dJdGVtKSA9PiB7CiAgZGV0YWlsUm93LnZhbHVlID0gcm93CiAgZGV0YWlsVmlzaWJsZS52YWx1ZSA9IHRydWUKfQoKb25Nb3VudGVkKCgpID0+IHsKICBmZXRjaExpc3QoKQp9KQo="},{"version":3,"sources":["logView.vue"],"names":[],"mappings":";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;;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;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;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA","file":"logView.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 getTeachingLogList,\n deleteTeachingLog,\n batchReportTeachingLog,\n recheckTeachingLog,\n exportTeachingLog,\n importTeachingLogExcel,\n downloadTeachingLogTemplate\n} from '@/api/log'\nimport LogDetailDialog from './LogDetailDialog.vue'\n\n// ==================== 查询表单 ====================\ninterface SearchForm {\n ksrq: string\n ksrqEnabled: boolean\n jsrq: string\n jsrqEnabled: boolean\n kcmc: string\n kcmcEnabled: boolean\n jys: string\n jysEnabled: boolean\n jxff: string\n jxffEnabled: boolean\n rzzt: string\n rzztEnabled: boolean\n skjy: string\n skjyEnabled: boolean\n pxqb: string\n pxqbEnabled: boolean\n changeType: string\n changeTypeEnabled: boolean\n changeTypes: string[]\n rwlb: string\n rwlbEnabled: boolean\n}\n\nconst searchForm = ref<SearchForm>({\n ksrq: '',\n ksrqEnabled: false,\n jsrq: '',\n jsrqEnabled: false,\n kcmc: '',\n kcmcEnabled: false,\n jys: '教研室',\n jysEnabled: false,\n jxff: '理论讲授',\n jxffEnabled: false,\n rzzt: '教务部门导入教员类',\n rzztEnabled: false,\n skjy: '教务处',\n skjyEnabled: false,\n pxqb: '',\n pxqbEnabled: false,\n changeType: '与教学计划一致',\n changeTypeEnabled: false,\n changeTypes: [],\n rwlb: '全军院校训练规划内任务',\n rwlbEnabled: false\n})\n\nconst jysOptions = ['教研室', '防空兵系', '通信工程系', '装甲兵系']\nconst jxffOptions = ['理论讲授', '讨论', '实操', '演示', '实验', '演习']\nconst skjyOptions = ['教务处', '张三', '李四', '王五', '赵六']\nconst rzztOptions = ['教务部门导入教员类', '管理员手工添加']\nconst rwlbOptions = ['全军院校训练规划内任务', '其他任务']\nconst changeTypeOptions = [\n { label: '与教学计划一致', value: '与教学计划一致' },\n { label: '已改动教学计划', value: '已改动教学计划' },\n { label: '手动拟制', value: '手动拟制' }\n]\nconst changeTypeList = [\n { label: '已改动教员', value: '已改动教员' },\n { label: '已改动时间', value: '已改动时间' },\n { label: '已改动课目', value: '已改动课目' },\n { label: '已改动内容', value: '已改动内容' },\n { label: '已改动教学方法', value: '已改动教学方法' },\n { label: '已改动场地', value: '已改动场地' },\n { label: '已改动期班', value: '已改动期班' }\n]\n\n// ==================== 数据表格 ====================\ninterface LogItem {\n bh?: string\n [key: string]: any\n}\n\nconst loading = ref(false)\nconst selectedRows = ref<LogItem[]>([])\nconst tableData = 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.ksrqEnabled && form.ksrq) params.ksrq = form.ksrq\n if (form.jsrqEnabled && form.jsrq) params.jsrq = form.jsrq\n if (form.kcmcEnabled && form.kcmc) params.kcmc = form.kcmc\n if (form.jysEnabled && form.jys) params.jys = form.jys\n if (form.jxffEnabled && form.jxff) params.jxff = form.jxff\n if (form.rzztEnabled && form.rzzt) params.rzzt = form.rzzt\n if (form.skjyEnabled && form.skjy) params.skjy = form.skjy\n if (form.pxqbEnabled && form.pxqb) params.pxqb = form.pxqb\n if (form.rwlbEnabled && form.rwlb) params.rwlb = form.rwlb\n if (form.changeTypeEnabled && form.changeType) params.gdqk = form.changeType\n if (form.changeTypeEnabled && form.changeTypes.length > 0) {\n params.gdxxqk = form.changeTypes.join(',')\n }\n return params\n}\n\n/** 从响应中提取列表数据和总数(兼容 records / list / rows 等常见字段名) */\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\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst fetchList = async () => {\n loading.value = true\n try {\n const res: any = await getTeachingLogList(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 handlePageChange = () => {\n fetchList()\n}\n\nconst handleSizeChange = (size: number) => {\n pageSize.value = size\n pageNum.value = 1\n fetchList()\n}\n\nconst handleRefresh = () => {\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 handleDeleteSelected = 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 handleBatchReport = 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 batchReportTeachingLog(ids)\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 const form = searchForm.value\n const params: Record<string, any> = {}\n if (form.ksrqEnabled && form.ksrq) params.ksrq = form.ksrq\n if (form.jsrqEnabled && form.jsrq) params.jsrq = form.jsrq\n if (form.kcmcEnabled && form.kcmc) params.kcmc = form.kcmc\n if (form.jysEnabled && form.jys) params.jys = form.jys\n if (form.jxffEnabled && form.jxff) params.jxff = form.jxff\n if (form.rzztEnabled && form.rzzt) params.rzzt = form.rzzt\n if (form.skjyEnabled && form.skjy) params.skjy = form.skjy\n if (form.pxqbEnabled && form.pxqb) params.pxqb = form.pxqb\n if (form.rwlbEnabled && form.rwlb) params.rwlb = form.rwlb\n if (form.changeTypeEnabled && form.changeType) params.gdqk = form.changeType\n if (form.changeTypeEnabled && form.changeTypes.length > 0) {\n params.gdxxqk = form.changeTypes.join(',')\n }\n try {\n const blob: any = await exportTeachingLog(params)\n downloadBlob(blob as Blob, `教学日志_${new Date().toISOString().slice(0, 10)}.xls`)\n ElMessage.success('导出成功')\n } catch {\n // 错误已由拦截器统一处理\n }\n}\n\nconst importFileInput = ref<HTMLInputElement | null>(null)\nconst importing = ref(false)\n\nconst handleImportExcel = () => {\n importFileInput.value?.click()\n}\n\nconst handleImportFileChange = async (e: Event) => {\n const files = (e.target as HTMLInputElement).files\n if (!files || files.length === 0) return\n const file = files[0]\n importing.value = true\n try {\n const res: any = await importTeachingLogExcel(file)\n if (res.code === 200 || res.code === 0) {\n ElMessage.success(res.message || '导入成功')\n fetchList()\n } else {\n ElMessage.error(res.message || '导入失败')\n }\n } catch {\n // 错误已由拦截器统一处理\n } finally {\n importing.value = false\n if (importFileInput.value) {\n importFileInput.value.value = ''\n }\n }\n}\n\nconst handleDownloadTemplate = async () => {\n try {\n const blob: any = await downloadTeachingLogTemplate()\n downloadBlob(blob as Blob, '导入教学日志模板.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.ksrqEnabled\">开始日期</el-checkbox>\n </template>\n <el-date-picker v-model=\"searchForm.ksrq\" type=\"date\" value-format=\"YYYY-MM-DD\" placeholder=\"选择开始日期\"\n class=\"w-full\" :disabled=\"!searchForm.ksrqEnabled\" />\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.jsrqEnabled\">结束日期</el-checkbox>\n </template>\n <el-date-picker v-model=\"searchForm.jsrq\" type=\"date\" value-format=\"YYYY-MM-DD\" placeholder=\"选择结束日期\"\n class=\"w-full\" :disabled=\"!searchForm.jsrqEnabled\" />\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.kcmcEnabled\">课程名称</el-checkbox>\n </template>\n <el-input v-model=\"searchForm.kcmc\" placeholder=\"请输入课程名称\" clearable :disabled=\"!searchForm.kcmcEnabled\" />\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.jysEnabled\">教研室</el-checkbox>\n </template>\n <el-select v-model=\"searchForm.jys\" placeholder=\"请选择教研室\" class=\"w-full\" :disabled=\"!searchForm.jysEnabled\">\n <el-option v-for=\"item in jysOptions\" :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.jxffEnabled\">教学方法</el-checkbox>\n </template>\n <el-select v-model=\"searchForm.jxff\" placeholder=\"请选择教学方法\" class=\"w-full\" :disabled=\"!searchForm.jxffEnabled\">\n <el-option v-for=\"item in jxffOptions\" :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.rzztEnabled\">日志状态</el-checkbox>\n </template>\n <el-select v-model=\"searchForm.rzzt\" placeholder=\"请选择日志状态\" class=\"w-full\" :disabled=\"!searchForm.rzztEnabled\">\n <el-option v-for=\"item in rzztOptions\" :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.skjyEnabled\">授课教员</el-checkbox>\n </template>\n <el-select v-model=\"searchForm.skjy\" placeholder=\"请选择授课教员\" class=\"w-full\" :disabled=\"!searchForm.skjyEnabled\">\n <el-option v-for=\"item in skjyOptions\" :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.pxqbEnabled\">培训期班</el-checkbox>\n </template>\n <el-input v-model=\"searchForm.pxqb\" placeholder=\"请输入培训期班\" clearable :disabled=\"!searchForm.pxqbEnabled\" />\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.changeTypeEnabled\">改动情况</el-checkbox>\n </template>\n <div class=\"change-options\" :class=\"{ disabled: !searchForm.changeTypeEnabled }\">\n <el-radio-group v-model=\"searchForm.changeType\" :disabled=\"!searchForm.changeTypeEnabled\">\n <el-radio v-for=\"item in changeTypeOptions\" :key=\"item.value\" :value=\"item.value\">{{ item.label\n }}</el-radio>\n </el-radio-group>\n <el-checkbox-group v-model=\"searchForm.changeTypes\" :disabled=\"!searchForm.changeTypeEnabled\">\n <el-checkbox v-for=\"item in changeTypeList\" :key=\"item.value\" :label=\"item.value\" />\n </el-checkbox-group>\n </div>\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.rwlbEnabled\">任务类别</el-checkbox>\n </template>\n <el-select v-model=\"searchForm.rwlb\" placeholder=\"请选择任务类别\" class=\"w-full\" :disabled=\"!searchForm.rwlbEnabled\">\n <el-option v-for=\"item in rwlbOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\n </el-select>\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=\"handleDeleteSelected\">删除所选</el-button>\n <el-button type=\"primary\" @click=\"handleBatchReport\">批准上报所选</el-button>\n <el-button type=\"primary\" @click=\"handleRecheck\">重新检查通报变更情况</el-button>\n <el-button type=\"primary\" @click=\"handleExport\">导出到 Word</el-button>\n <el-button type=\"primary\" @click=\"handleRefresh\">刷新</el-button>\n <el-button type=\"success\" :loading=\"importing\" @click=\"handleImportExcel\">导入教学日志</el-button>\n <el-button type=\"primary\" @click=\"handleDownloadTemplate\">下载模板</el-button>\n </div>\n <el-button type=\"primary\" @click=\"handleSearch\">查询</el-button>\n </div>\n\n <!-- 隐藏的文件选择器,用于导入 Excel -->\n <input ref=\"importFileInput\" type=\"file\" accept=\".xls,.xlsx\" style=\"display: none\" @change=\"handleImportFileChange\" />\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\" />\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 .change-options {\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n .el-radio-group,\n .el-checkbox-group {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n }\n\n &.disabled {\n opacity: 0.6;\n }\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 gap: 8px;\n flex-wrap: wrap;\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>"]}]}