| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383 |
- 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(
- '<script setup lang="ts">',
- '<script setup lang="ts">\nimport { exportWithExpandedObjectArrays } from \'@/utils/excel-export\''
- )
- }
- }
- // 3. 添加导出按钮(紧跟 ButtonAdd 之后,并移除原有的注释导入按钮)
- content = content.replace(
- /<ButtonAdd @click="openForm\(undefined\)"\s*\/>/g,
- '<ButtonAdd @click="openForm(undefined)" />\n <ButtonImport @click="handleImportCard" />'
- )
- // 移除旧的注释按钮行
- content = content.replace(/\s*<!--\s*<ButtonImport[^>]*>\s*-->\s*/g, '\n')
- // 4. 移除 BatchExportDialog 组件
- content = content.replace(
- /\s*<!-- 通用批量导出弹窗 -->\s*<BatchExportDialog[\s\S]*?<\/BatchExportDialog>/,
- ''
- )
- // 5. 移除已存在的 handleImportCard / handleBatchExport / handleExport 空壳函数
- content = content.replace(
- /\/\/ 打开导出弹窗\s*const handleImportCard = async \(\) => \{[\s\S]*?\}\s*/,
- ''
- )
- content = removeBlock(
- content,
- /\/\/ 处理批量导出\s*const handleBatchExport = async \(batch: number, count: number\) => \{/,
- ''
- )
- content = removeBlock(
- content,
- /const handleExport = \(\) => \{/,
- ''
- )
- // 6. 精简状态管理为只保留 exportLoading
- content = content.replace(
- /\n\/\/ 状态管理\s*const showBatchExport = ref\(false\)\s*const exportConfig = ref\(\{[\s\S]*?description: \[\] as string\[\]\s*\}\)\s*const exportLoading = ref\(false\)\s*/,
- '\nconst exportLoading = ref(false)\n'
- )
- // 7. 插入新的 handleImportCard 函数
- const exportFunc = buildExportFunction(config)
- // 优先在 queryFormRef 定义后插入
- const queryFormRefPattern = /const queryFormRef = ref\(\)\s*\/\/ 搜索的表单/
- if (queryFormRefPattern.test(content)) {
- content = content.replace(queryFormRefPattern, `const queryFormRef = ref() // 搜索的表单\n${exportFunc}`)
- } else {
- content = content.replace(
- /const queryFormRef = ref\(\)\s*$/m,
- `const queryFormRef = ref()\n${exportFunc}`
- )
- }
- fs.writeFileSync(filePath, content, 'utf-8')
- console.log(`已处理:${filePath}`)
- }
- configs.forEach(processFile)
|