const fs = require('fs') const path = require('path') 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, "'") 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 = { 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 } } ` } function removeBlock(content, startRegex, endMarker) { const startMatch = content.match(startRegex) if (!startMatch) return content const startIndex = startMatch.index let depth = 0 let endIndex = startIndex for (let i = startIndex; i < content.length; i++) { if (content[i] === '{') depth++ if (content[i] === '}') { depth-- if (depth === 0) { endIndex = i + 1 break } } } // 包含到 endMarker 之前或之后的换行 let before = content.slice(0, startIndex) let after = content.slice(endIndex) if (after.startsWith('\n')) after = after.slice(1) return before + after } function processFile(config) { const filePath = path.join(baseDir, config.dir, 'index.vue') if (!fs.existsSync(filePath)) { console.log(`跳过:${filePath} 不存在`) return } let content = fs.readFileSync(filePath, 'utf-8') // 1. 添加 ButtonImport 导入(如果还没有) if (!content.includes("import ButtonImport from '@/components/ButtonImport/src/ButtonImport.vue'")) { content = content.replace( "import ButtonAdd from '@/components/ButtonAdd/src/ButtonAdd.vue'", "import ButtonAdd from '@/components/ButtonAdd/src/ButtonAdd.vue'\nimport ButtonImport from '@/components/ButtonImport/src/ButtonImport.vue'" ) } // 2. 添加 exportWithExpandedObjectArrays 导入 if (!content.includes("import { exportWithExpandedObjectArrays } from '@/utils/excel-export'")) { const apiImportMatch = content.match(/import \{[^}]+\} from '@\/api\/social-work'/) if (apiImportMatch) { const insertPos = apiImportMatch.index + apiImportMatch[0].length content = content.slice(0, insertPos) + "\nimport { exportWithExpandedObjectArrays } from '@/utils/excel-export'" + content.slice(insertPos) } else { content = content.replace( '