const fs = require('fs') const path = require('path') const { execSync } = require('child_process') const baseDir = path.resolve(__dirname, '../src/views/elderly/apply/nine-precautions') const configs = [ { dir: 'MMSE', pageApi: 'mmseGetPage', title: 'MMSE认知评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'assessDate', title: '记录日期' }, { key: 'riskLevelText', title: '风险等级' }, { key: 'creator', title: '记录人' } ], riskMode: 'info' }, { dir: 'anti-entertainment', pageApi: 'entertainmentPage', title: '防文娱活动意外评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'assessDate', title: '记录日期' }, { key: 'assessScore', title: '评估总得分' }, { key: 'riskLevelText', title: '风险等级' }, { key: 'creator', title: '记录人' } ], riskMode: 'text' }, { dir: 'asphyxiation-by-choking', pageApi: 'asphyxiationPage', title: '防噎食评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'assessDate', title: '记录日期' }, { key: 'riskLevelText', title: '风险等级' }, { key: 'creator', title: '记录人' } ], riskMode: 'text' }, { dir: 'attack', pageApi: 'attackRiskPage', title: '攻击风险评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'riskLevelText', title: '风险等级' }, { key: 'assessDate', title: '记录日期' }, { key: 'creator', title: '记录人' } ], riskMode: 'info' }, { dir: 'commit-suicide', pageApi: 'ngasrPage', title: '自伤自杀风险评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'assessDate', title: '记录日期' }, { key: 'riskLevelText', title: '风险等级' }, { key: 'creator', title: '记录人' } ], riskMode: 'info' }, { dir: 'communication', pageApi: 'perceptionPage', title: '感知沟通评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'assessDate', title: '记录日期' }, { key: 'riskLevelText', title: '风险等级' }, { key: 'creator', title: '记录人' } ], riskMode: 'info' }, { dir: 'daily-life', pageApi: 'dailyLifePage', title: '日常生活活动能力评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'assessDate', title: '记录日期' }, { key: 'assessScore', title: '评估总得分' }, { key: 'riskLevelText', title: '结果等级' }, { key: 'creator', title: '记录人' } ], riskMode: 'result' }, { dir: 'empyrosis', pageApi: 'burnPreventionPage', title: '防烫伤评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'assessDate', title: '记录日期' }, { key: 'riskLevelText', title: '风险等级' }, { key: 'assessScore', title: '评估总得分' }, { key: 'creator', title: '记录人' } ], riskMode: 'text' }, { dir: 'equilibrium', pageApi: 'equilibriumPage', title: '平衡能力评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'assessDate', title: '记录日期' }, { key: 'assessScore', title: '评估总得分' }, { key: 'riskLevelText', title: '风险等级' }, { key: 'creator', title: '记录人' } ], riskMode: 'text' }, { dir: 'fall-down', pageApi: 'fallDownPage', title: '跌倒风险评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'assessDate', title: '记录日期' }, { key: 'assessScore', title: '评估总得分' }, { key: 'riskLevelText', title: '风险等级' }, { key: 'creator', title: '记录人' } ], riskMode: 'text' }, { dir: 'fall-prevention-measures', pageApi: 'fallPreventionPage', title: '防坠床评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'assessDate', title: '记录日期' }, { key: 'assessScore', title: '评估总得分' }, { key: 'riskLevelText', title: '风险等级' }, { key: 'creator', title: '记录人' } ], riskMode: 'text' }, { dir: 'pressure-sores', pageApi: 'pressureSoresPage', title: '防压疮评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'assessDate', title: '记录日期' }, { key: 'assessScore', title: '评估总得分' }, { key: 'riskLevelText', title: '风险等级' }, { key: 'creator', title: '记录人' } ], riskMode: 'text' }, { dir: 'nutritional-risk', pageApi: 'nutritionalRiskPage', title: '营养风险评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'assessDate', title: '记录日期' }, { key: 'assessScore', title: '量表总分' }, { key: 'riskLevelText', title: '评估结果' }, { key: 'creator', title: '记录人' } ], riskMode: 'result' }, { dir: 'wander-away', pageApi: 'wanderAwayPage', title: '防走失风险评估', columns: [ { key: 'orgName', title: '机构名称' }, { key: 'elderName', title: '长者姓名' }, { key: 'assessor', title: '评估人' }, { key: 'assessDate', title: '记录日期' }, { key: 'assessScore', title: '评估总得分' }, { key: 'riskLevelText', title: '风险等级' }, { key: 'creator', title: '记录人' } ], riskMode: 'text' } ] function buildExportFunction(config) { const { pageApi, title, columns, riskMode } = config const headersStr = JSON.stringify(columns, null, 6) .replace(/"/g, "'") .replace(/\n /g, '\n ') let riskLevelProcess = '' if (riskMode === 'info') { riskLevelProcess = `const riskInfo = getRiskLevelInfo(item.assessData) row.riskLevelText = riskInfo.text || '-'` } else if (riskMode === 'text') { riskLevelProcess = `row.riskLevelText = getRiskLevelText(item.riskLevel) || '-'` } else if (riskMode === 'result') { riskLevelProcess = `row.riskLevelText = getResultLevelText(item.riskLevel) || '-'` } return `// 打开导出弹窗 const handleImportCard = async () => { exportLoading.value = true try { const queryP = { pageNo: 1, pageSize: 9999, elderName: queryParams.elderName, assessor: queryParams.assessor, assessDate: queryParams.assessDate, tenantIds: queryParams.tenantIds } const data = await ${pageApi}(queryP) const exportData = data.list || [] if (exportData.length === 0) { message.warning('暂无数据可导出') return } const processedData = exportData.map((item) => { const row: any = { orgName: findLabelById(userStore.getOrgTenant.options, item.tenantId) || '', elderName: item.elderName || '', assessor: item.assessor || '', assessDate: item.assessDate || '', assessScore: item.assessScore ?? '', creator: item.creator || '' } ${riskLevelProcess} return row }) const headers = ${headersStr} exportWithExpandedObjectArrays(processedData, headers, \`${title}_\${new Date().getTime()}.xlsx\`, '${title}') message.success('导出成功') } catch (error) { console.error('导出失败:', error) message.error('导出失败,请重试') } finally { exportLoading.value = false } } ` } // 从 git 读取原始文件 function readOriginal(relativePath) { return execSync(`git show HEAD:${relativePath}`, { cwd: path.resolve(__dirname, '..'), encoding: 'utf-8' }) } function removeBlockByRegex(content, regex) { const match = content.match(regex) if (!match) return content const start = match.index let depth = 0 let end = start for (let i = start; i < content.length; i++) { if (content[i] === '{') depth++ if (content[i] === '}') { depth-- if (depth === 0) { end = i + 1 break } } } let before = content.slice(0, start) let after = content.slice(end) // 去掉后面多余的换行 if (after.startsWith('\n')) after = after.slice(1) if (after.startsWith('\n')) after = after.slice(1) return before + after } function processFile(config) { const relativePath = `src/views/elderly/apply/nine-precautions/${config.dir}/index.vue` const filePath = path.resolve(__dirname, '..', relativePath) let content = readOriginal(relativePath) // 1. 添加 ButtonImport 导入 const buttonAddImport = "import ButtonAdd from '@/components/ButtonAdd/src/ButtonAdd.vue'" if (content.includes(buttonAddImport)) { content = content.replace( buttonAddImport, `${buttonAddImport}\nimport ButtonImport from '@/components/ButtonImport/src/ButtonImport.vue'` ) } else { // nutritional-risk 没有 ButtonAdd import,ButtonAdd 是全局注册的 content = content.replace( '