feat(emr): 添加EMR数据同步页面

- 新增同步统计显示(病历总数、修订历史、搜索索引)
- 新增一键同步按钮,从doc_emr同步真实数据到修订历史和搜索索引
- 同步前有确认提示,防止误操作
This commit is contained in:
2026-06-21 08:56:02 +08:00
parent 7601fc26e7
commit 129eb2b606

View File

@@ -0,0 +1,85 @@
<template>
<div style="padding:16px">
<div style="margin-bottom:16px;display:flex;justify-content:space-between;align-items:center">
<span style="font-size:18px;font-weight:bold">EMR数据同步</span>
</div>
<el-card shadow="hover" style="margin-bottom:16px">
<template #header>
<span>同步统计</span>
</template>
<el-row :gutter="20">
<el-col :span="8">
<el-statistic title="病历总数" :value="stats.emrCount||0" />
</el-col>
<el-col :span="8">
<el-statistic title="修订历史" :value="stats.revisionCount||0" />
</el-col>
<el-col :span="8">
<el-statistic title="搜索索引" :value="stats.searchIndexCount||0" />
</el-col>
</el-row>
</el-card>
<el-card shadow="hover">
<template #header>
<span>数据同步操作</span>
</template>
<el-alert
type="warning"
show-icon
style="margin-bottom:16px"
>
<template #title>
同步操作将清空现有的修订历史和搜索索引数据然后从门诊/住院病历表(doc_emr)重新生成
</template>
</el-alert>
<el-button
type="primary"
:loading="syncing"
@click="handleSync"
>
{{ syncing ? '同步中...' : '开始同步' }}
</el-button>
<el-button @click="loadStats">
刷新统计
</el-button>
</el-card>
</div>
</template>
<script setup>
import {ref, onMounted} from 'vue'
import {ElMessage, ElMessageBox} from 'element-plus'
import request from '@/utils/request'
const syncing = ref(false)
const stats = ref({})
const loadStats = async () => {
const res = await request({url: '/emr-sync/stats', method: 'get'})
stats.value = res.data || {}
}
const handleSync = async () => {
try {
await ElMessageBox.confirm(
'确定要同步EMR数据吗这将清空现有的修订历史和搜索索引然后从病历表重新生成。',
'确认同步',
{type: 'warning'}
)
syncing.value = true
const res = await request({url: '/emr-sync/sync', method: 'post'})
ElMessage.success(res.data || '同步完成')
loadStats()
} catch (e) {
if (e !== 'cancel') {
ElMessage.error('同步失败: ' + (e.message || '未知错误'))
}
} finally {
syncing.value = false
}
}
onMounted(() => loadStats())
</script>