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

1 line
21 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\\auditedView.vue?vue&type=script&setup=true&lang=ts","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachingLog\\organLog\\components\\auditedView.vue","mtime":1787312110101},{"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:CmltcG9ydCB7IG9uTW91bnRlZCwgcmVmIH0gZnJvbSAndnVlJwppbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQC91dGlscy9pbmRleCcKaW1wb3J0IHsgZ2V0QXVkaXRlZFRlYWNoaW5nTG9nTGlzdCB9IGZyb20gJ0AvYXBpL2xvZycKaW1wb3J0IExvZ0RldGFpbERpYWxvZyBmcm9tICcuL0xvZ0RldGFpbERpYWxvZy52dWUnCgovLyA9PT09PT09PT09PT09PT09PT09PSDmn6Xor6LooajljZUgPT09PT09PT09PT09PT09PT09PT0KaW50ZXJmYWNlIFNlYXJjaEZvcm0gewogIGtzcnE6IHN0cmluZwogIGtzcnFFbmFibGVkOiBib29sZWFuCiAganNycTogc3RyaW5nCiAganNycUVuYWJsZWQ6IGJvb2xlYW4KICBrY21jOiBzdHJpbmcKICBrY21jRW5hYmxlZDogYm9vbGVhbgogIGp5czogc3RyaW5nCiAganlzRW5hYmxlZDogYm9vbGVhbgogIGp4ZmY6IHN0cmluZwogIGp4ZmZFbmFibGVkOiBib29sZWFuCiAgc2tqeTogc3RyaW5nCiAgc2tqeUVuYWJsZWQ6IGJvb2xlYW4KICBnZHFrRW5hYmxlZDogYm9vbGVhbgogIGNyZWF0ZVNvdXJjZTogc3RyaW5nCiAgY2hhbmdlVHlwZXM6IHN0cmluZ1tdCiAgcndsYjogc3RyaW5nCiAgcndsYkVuYWJsZWQ6IGJvb2xlYW4KICBweHFiOiBzdHJpbmcKICBweHFiRW5hYmxlZDogYm9vbGVhbgp9Cgpjb25zdCBzZWFyY2hGb3JtID0gcmVmPFNlYXJjaEZvcm0+KHsKICBrc3JxOiAnJywKICBrc3JxRW5hYmxlZDogZmFsc2UsCiAganNycTogJycsCiAganNycUVuYWJsZWQ6IGZhbHNlLAogIGtjbWM6ICcnLAogIGtjbWNFbmFibGVkOiBmYWxzZSwKICBqeXM6ICcnLAogIGp5c0VuYWJsZWQ6IGZhbHNlLAogIGp4ZmY6ICfnkIborrrorrLmjognLAogIGp4ZmZFbmFibGVkOiBmYWxzZSwKICBza2p5OiAn5pWZ5Yqh5aSEJywKICBza2p5RW5hYmxlZDogZmFsc2UsCiAgZ2Rxa0VuYWJsZWQ6IGZhbHNlLAogIGNyZWF0ZVNvdXJjZTogJycsCiAgY2hhbmdlVHlwZXM6IFtdLAogIHJ3bGI6ICflhajlhpvpmaLmoKHorq3nu4Pop4TliJLlhoXku7vliqEnLAogIHJ3bGJFbmFibGVkOiBmYWxzZSwKICBweHFiOiAnJywKICBweHFiRW5hYmxlZDogZmFsc2UKfSkKCmNvbnN0IGp5c09wdGlvbnMgPSBbJ+aVmeeglOWupCcsICfpmLLnqbrlhbXns7snLCAn6YCa5L+h5bel56iL57O7JywgJ+ijheeUsuWFteezuyddCmNvbnN0IGp4ZmZPcHRpb25zID0gWyfnkIborrrorrLmjognLCAn6K6o6K66JywgJ+WunuaTjScsICfmvJTnpLonXQpjb25zdCBza2p5T3B0aW9ucyA9IFsn5pWZ5Yqh5aSEJywgJ+W8oOS4iScsICfmnY7lm5snLCAn546L5LqUJ10KY29uc3QgcndsYk9wdGlvbnMgPSBbJ+WFqOWGm+mZouagoeiuree7g+inhOWIkuWGheS7u+WKoScsICflhbbku5bku7vliqEnXQpjb25zdCBjcmVhdGVTb3VyY2VPcHRpb25zID0gWyfnlLHmlZnlraborqHliJLliJvlu7onLCAn5bey5pS55Yqo5pWZ5a2m6K6h5YiSJywgJ+aJi+WKqOaLn+WItiddCmNvbnN0IGNoYW5nZVR5cGVPcHRpb25zID0gWwogICfmlZnlkZjlj5jliqgnLAogICfml7bpl7Tlj5jliqgnLAogICfor77nqIvlj5jliqgnLAogICfmjojor77mlrnlvI/lj5jliqgnLAogICfku7vliqHnsbvliKvlj5jliqgnLAogICfmnJ/nj63lj5jliqgnLAogICflnLDngrnlj5jliqgnLAogICfor77popjlj5jliqgnCl0KCi8vID09PT09PT09PT09PT09PT09PT09IOaVsOaNruihqOagvCA9PT09PT09PT09PT09PT09PT09PQppbnRlcmZhY2UgTG9nSXRlbSB7CiAgYmg/OiBzdHJpbmcKICBba2V5OiBzdHJpbmddOiBhbnkKfQoKY29uc3QgbG9hZGluZyA9IHJlZihmYWxzZSkKY29uc3QgdGFibGVEYXRhID0gcmVmPExvZ0l0ZW1bXT4oW10pCmNvbnN0IHNlbGVjdGVkUm93cyA9IHJlZjxMb2dJdGVtW10+KFtdKQoKLy8gPT09PT09PT09PT09PT09PT09PT0g5YiG6aG1ID09PT09PT09PT09PT09PT09PT09CmNvbnN0IHBhZ2VOdW0gPSByZWYoMSkKY29uc3QgcGFnZVNpemUgPSByZWYoMjApCmNvbnN0IHRvdGFsID0gcmVmKDApCgpjb25zdCBoYW5kbGVTZWxlY3Rpb25DaGFuZ2UgPSAocm93czogTG9nSXRlbVtdKSA9PiB7CiAgc2VsZWN0ZWRSb3dzLnZhbHVlID0gcm93cwp9CgovKiog5qC55o2uIuWLvumAieWQr+eUqCLmqKHlvI/mnoTlu7rlrp7pmYXmn6Xor6Llj4LmlbAgKi8KY29uc3QgYnVpbGRTZWFyY2hQYXJhbXMgPSAoKTogUmVjb3JkPHN0cmluZywgYW55PiA9PiB7CiAgY29uc3QgZm9ybSA9IHNlYXJjaEZvcm0udmFsdWUKICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7IHBhZ2VOdW06IHBhZ2VOdW0udmFsdWUsIHBhZ2VTaXplOiBwYWdlU2l6ZS52YWx1ZSB9CiAgaWYgKGZvcm0ua3NycUVuYWJsZWQgJiYgZm9ybS5rc3JxKSBwYXJhbXMua3NycSA9IGZvcm0ua3NycQogIGlmIChmb3JtLmpzcnFFbmFibGVkICYmIGZvcm0uanNycSkgcGFyYW1zLmpzcnEgPSBmb3JtLmpzcnEKICBpZiAoZm9ybS5rY21jRW5hYmxlZCAmJiBmb3JtLmtjbWMpIHBhcmFtcy5rY21jID0gZm9ybS5rY21jCiAgaWYgKGZvcm0uanlzRW5hYmxlZCAmJiBmb3JtLmp5cykgcGFyYW1zLmp5cyA9IGZvcm0uanlzCiAgaWYgKGZvcm0uanhmZkVuYWJsZWQgJiYgZm9ybS5qeGZmKSBwYXJhbXMuanhmZiA9IGZvcm0uanhmZgogIGlmIChmb3JtLnNranlFbmFibGVkICYmIGZvcm0uc2tqeSkgcGFyYW1zLnNrankgPSBmb3JtLnNrankKICBpZiAoZm9ybS5yd2xiRW5hYmxlZCAmJiBmb3JtLnJ3bGIpIHBhcmFtcy5yd2xiID0gZm9ybS5yd2xiCiAgaWYgKGZvcm0ucHhxYkVuYWJsZWQgJiYgZm9ybS5weHFiKSBwYXJhbXMucHhxYiA9IGZvcm0ucHhxYgogIGlmIChmb3JtLmdkcWtFbmFibGVkICYmIGZvcm0uY3JlYXRlU291cmNlKSBwYXJhbXMuZ2RxayA9IGZvcm0uY3JlYXRlU291cmNlCiAgaWYgKGZvcm0uZ2Rxa0VuYWJsZWQgJiYgZm9ybS5jaGFuZ2VUeXBlcy5sZW5ndGggPiAwKSB7CiAgICBwYXJhbXMuZ2R4eHFrID0gZm9ybS5jaGFuZ2VUeXBlcy5qb2luKCcsJykKICB9CiAgcmV0dXJuIHBhcmFtcwp9Cgpjb25zdCBleHRyYWN0TGlzdERhdGEgPSAocmVzOiBhbnkpID0+IHsKICBjb25zdCBkYXRhID0gcmVzLmRhdGEgfHwgcmVzCiAgY29uc3QgbGlzdCA9IGRhdGEucmVjb3JkcyB8fCBkYXRhLmxpc3QgfHwgZGF0YS5yb3dzIHx8IFtdCiAgY29uc3QgdG90YWxDb3VudCA9IGRhdGEudG90YWwgPz8gZGF0YS50b3RhbENvdW50ID8/IGRhdGEudG90YWxSb3dzID8/IDAKICByZXR1cm4geyBsaXN0LCB0b3RhbDogdG90YWxDb3VudCB9Cn0KCmNvbnN0IGZldGNoTGlzdCA9IGFzeW5jICgpID0+IHsKICBsb2FkaW5nLnZhbHVlID0gdHJ1ZQogIHRyeSB7CiAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGdldEF1ZGl0ZWRUZWFjaGluZ0xvZ0xpc3QoYnVpbGRTZWFyY2hQYXJhbXMoKSkKICAgIGlmIChyZXMuY29kZSA9PT0gMjAwIHx8IHJlcy5jb2RlID09PSAwKSB7CiAgICAgIGNvbnN0IHsgbGlzdCwgdG90YWw6IHRvdGFsQ291bnQgfSA9IGV4dHJhY3RMaXN0RGF0YShyZXMpCiAgICAgIHRhYmxlRGF0YS52YWx1ZSA9IGxpc3QKICAgICAgdG90YWwudmFsdWUgPSB0b3RhbENvdW50CiAgICB9CiAgfSBjYXRjaCB7CiAgICAvLyDplJnor6/lt7LnlLHmi6bmiKrlmajnu5/kuIDlpITnkIYKICB9IGZpbmFsbHkgewogICAgbG9hZGluZy52YWx1ZSA9IGZhbHNlCiAgfQp9Cgpjb25zdCBoYW5kbGVTZWFyY2ggPSAoKSA9PiB7CiAgcGFnZU51bS52YWx1ZSA9IDEKICBmZXRjaExpc3QoKQp9Cgpjb25zdCBoYW5kbGVQYWdlQ2hhbmdlID0gKCkgPT4gewogIGZldGNoTGlzdCgpCn0KCmNvbnN0IGhhbmRsZVNpemVDaGFuZ2UgPSAoc2l6ZTogbnVtYmVyKSA9PiB7CiAgcGFnZVNpemUudmFsdWUgPSBzaXplCiAgcGFnZU51bS52YWx1ZSA9IDEKICBmZXRjaExpc3QoKQp9CgovLyA9PT09PT09PT09PT09PT09PT09PSDmn6XnnIvor6bmg4UgPT09PT09PT09PT09PT09PT09PT0KY29uc3QgZGV0YWlsVmlzaWJsZSA9IHJlZihmYWxzZSkKY29uc3QgZGV0YWlsUm93ID0gcmVmPExvZ0l0ZW0+KHt9KQoKY29uc3QgaGFuZGxlRGV0YWlsID0gKHJvdzogTG9nSXRlbSkgPT4gewogIGRldGFpbFJvdy52YWx1ZSA9IHJvdwogIGRldGFpbFZpc2libGUudmFsdWUgPSB0cnVlCn0KCm9uTW91bnRlZCgoKSA9PiB7CiAgZmV0Y2hMaXN0KCkKfSkK"},{"version":3,"sources":["auditedView.vue"],"names":[],"mappings":";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;;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;;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;;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;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA","file":"auditedView.vue","sourceRoot":"src/views/teachingLog/organLog/components","sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\nimport { formatDate } from '@/utils/index'\nimport { getAuditedTeachingLogList } 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 skjy: string\n skjyEnabled: boolean\n gdqkEnabled: boolean\n createSource: string\n changeTypes: string[]\n rwlb: string\n rwlbEnabled: boolean\n pxqb: string\n pxqbEnabled: 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 skjy: '教务处',\n skjyEnabled: false,\n gdqkEnabled: false,\n createSource: '',\n changeTypes: [],\n rwlb: '全军院校训练规划内任务',\n rwlbEnabled: false,\n pxqb: '',\n pxqbEnabled: false\n})\n\nconst jysOptions = ['教研室', '防空兵系', '通信工程系', '装甲兵系']\nconst jxffOptions = ['理论讲授', '讨论', '实操', '演示']\nconst skjyOptions = ['教务处', '张三', '李四', '王五']\nconst rwlbOptions = ['全军院校训练规划内任务', '其他任务']\nconst createSourceOptions = ['由教学计划创建', '已改动教学计划', '手动拟制']\nconst changeTypeOptions = [\n '教员变动',\n '时间变动',\n '课程变动',\n '授课方式变动',\n '任务类别变动',\n '期班变动',\n '地点变动',\n '课题变动'\n]\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.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.skjyEnabled && form.skjy) params.skjy = form.skjy\n if (form.rwlbEnabled && form.rwlb) params.rwlb = form.rwlb\n if (form.pxqbEnabled && form.pxqb) params.pxqb = form.pxqb\n if (form.gdqkEnabled && form.createSource) params.gdqk = form.createSource\n if (form.gdqkEnabled && form.changeTypes.length > 0) {\n params.gdxxqk = form.changeTypes.join(',')\n }\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 getAuditedTeachingLogList(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\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.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-row>\n\n <el-row :gutter=\"0\">\n <el-col :span=\"24\">\n <el-form-item>\n <template #label>\n <el-checkbox v-model=\"searchForm.gdqkEnabled\">改动情况</el-checkbox>\n </template>\n <div class=\"change-options\" :class=\"{ disabled: !searchForm.gdqkEnabled }\">\n <el-radio-group v-model=\"searchForm.createSource\" :disabled=\"!searchForm.gdqkEnabled\">\n <el-radio v-for=\"item in createSourceOptions\" :key=\"item\" :value=\"item\">{{ item }}</el-radio>\n </el-radio-group>\n <el-checkbox-group v-model=\"searchForm.changeTypes\" :disabled=\"!searchForm.gdqkEnabled\">\n <el-checkbox v-for=\"item in changeTypeOptions\" :key=\"item\" :label=\"item\" />\n </el-checkbox-group>\n </div>\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.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-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 </el-form>\n\n <div class=\"search-actions\">\n <div class=\"right-group\">\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=\"130\" 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 prop=\"fzyzdjy\" 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: flex-end;\n padding: 12px;\n border-top: 1px solid #ebeef5;\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>"]}]}