feat(V38): 电子签名/CA增强 — 签名对话框+统计页面+API测试通过
前端增强: - SignDialog组件: 签名弹窗(支持6种文档类型) - Statistics页面: 签名统计(总签名/有效/撤销/今日) - API补全: sign/verify/history/revoke/statistics 测试: CA签名4个API全部通过(签名/历史/验证/统计)
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
<template>
|
||||
<el-dialog title="电子签名" v-model="visible" width="500px" :close-on-click-modal="false">
|
||||
<el-form :model="formData" label-width="100px">
|
||||
<el-form-item label="文档类型">
|
||||
<el-select v-model="formData.documentType" placeholder="选择文档类型">
|
||||
<el-option label="电子病历" value="EMR" /><el-option label="处方" value="PRESCRIPTION" />
|
||||
<el-option label="医嘱" value="ORDER" /><el-option label="会诊" value="CONSULTATION" />
|
||||
<el-option label="手术同意书" value="CONSENT" /><el-option label="护理记录" value="NURSING" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="文档ID"><el-input v-model="formData.documentId" placeholder="文档ID" /></el-form-item>
|
||||
<el-form-item label="签名人员"><el-input v-model="formData.signerName" /></el-form-item>
|
||||
<el-form-item label="职称"><el-input v-model="formData.signerTitle" /></el-form-item>
|
||||
<el-form-item label="科室"><el-input v-model="formData.signerDepartment" /></el-form-item>
|
||||
<el-form-item label="签名密码"><el-input v-model="formData.signatureData" type="password" placeholder="输入签名密码" show-password /></el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="primary" @click="handleSign">签名</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import request from '@/utils/request'
|
||||
|
||||
const visible = ref(false)
|
||||
const formData = ref({})
|
||||
|
||||
const open = (data) => { formData.value = data || {}; visible.value = true }
|
||||
|
||||
const handleSign = async () => {
|
||||
try {
|
||||
await request({ url: '/healthlink-his/api/v1/ca-signature/sign', method: 'post', data: formData.value })
|
||||
ElMessage.success('签名成功')
|
||||
visible.value = false
|
||||
} catch (e) { ElMessage.error('签名失败') }
|
||||
}
|
||||
|
||||
defineExpose({ open })
|
||||
</script>
|
||||
29
healthlink-his-ui/src/views/casignature/statistics/index.vue
Normal file
29
healthlink-his-ui/src/views/casignature/statistics/index.vue
Normal file
@@ -0,0 +1,29 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-row :gutter="20" class="mb8">
|
||||
<el-col :span="6"><el-card shadow="hover"><el-statistic title="总签名数" :value="stats.totalSignatures || 0" /></el-card></el-col>
|
||||
<el-col :span="6"><el-card shadow="hover"><el-statistic title="有效签名" :value="stats.validSignatures || 0" /></el-card></el-col>
|
||||
<el-col :span="6"><el-card shadow="hover"><el-statistic title="已撤销" :value="stats.revokedSignatures || 0" /></el-card></el-col>
|
||||
<el-col :span="6"><el-card shadow="hover"><el-statistic title="今日签名" :value="stats.todaySignatures || 0" /></el-card></el-col>
|
||||
</el-row>
|
||||
<el-card>
|
||||
<template #header><span>签名统计</span></template>
|
||||
<el-table :data="stats.departmentStats || []">
|
||||
<el-table-column label="科室" prop="department" />
|
||||
<el-table-column label="签名数" prop="count" />
|
||||
<el-table-column label="有效率" prop="validRate">
|
||||
<template #default="s"><el-progress :percentage="s.row.validRate || 0" /></template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { getSignatureStatistics } from '@/api/casignature'
|
||||
|
||||
const stats = ref({})
|
||||
const loadStats = async () => { const res = await getSignatureStatistics(); stats.value = res.data || {} }
|
||||
onMounted(() => loadStats())
|
||||
</script>
|
||||
Reference in New Issue
Block a user