liuyu
21 小时以前 93c133349a5ccd7a328371fa113dce69d5611f21
apps/jnpf-web-apps-main/src/views/x/tms/trainRecord/Catalog.vue
@@ -9,6 +9,7 @@
import dayjs from 'dayjs';
import { getTrainRecordCatalog } from '#/api/x/tms/trainRecord';
import { TMS_BTN } from '#/views/x/tms/shared/ui';
defineOptions({ name: 'TmsTrainRecordCatalog' });
@@ -84,7 +85,39 @@
    createMessage.warning('暂无数据可导出');
    return;
  }
  createMessage.success(`已准备导出 ${list.length} 条(导出接口联调后生效)`);
  const headers = ['培训记录编号', '培训类型', '培训内容', '培训方式', '培训师', '考核方式', '培训结果', '是否合格', '具体培训时间'];
  const escape = (v: unknown) => {
    const s = v === null || v === undefined ? '' : String(v);
    return /[",\n]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s;
  };
  const passText = (v: string) => (v === '1' ? '合格' : v === '0' ? '不合格' : '');
  const lines = [
    headers.join(','),
    ...list.map((row) =>
      [
        row.recordNo,
        row.trainType,
        row.trainContent,
        row.trainMode,
        row.trainerName,
        row.evalMode,
        resultText(row),
        passText(row.passFlag),
        row.trainDate || '',
      ]
        .map(escape)
        .join(','),
    ),
  ];
  const bom = '\uFEFF';
  const blob = new Blob([bom + lines.join('\n')], { type: 'text/csv;charset=utf-8;' });
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = `培训目录_${detail.value?.userName || detail.value?.archiveNo || 'export'}_${dayjs().format('YYYYMMDD')}.csv`;
  a.click();
  URL.revokeObjectURL(url);
  createMessage.success(`已导出 ${list.length} 条`);
}
function goBack() {
@@ -119,12 +152,12 @@
                  :placeholder="['开始日期', '结束日期']"
                  :get-popup-container="popupContainer"
                />
                <a-button type="primary" class="ml-3" @click="handleSearch">查询</a-button>
                <a-button class="ml-2" @click="handleReset">重置</a-button>
                <a-button type="primary" class="ml-3" @click="handleSearch">{{ TMS_BTN.search }}</a-button>
                <a-button class="ml-2" @click="handleReset">{{ TMS_BTN.reset }}</a-button>
              </div>
              <a-space>
                <a-button @click="handleExport">导出</a-button>
                <a-button @click="goBack">关闭</a-button>
                <a-button type="primary" ghost @click="handleExport">{{ TMS_BTN.export }}</a-button>
                <a-button @click="goBack">{{ TMS_BTN.close }}</a-button>
              </a-space>
            </div>