新增功能

This commit is contained in:
Your Name
2026-03-04 15:32:30 +08:00
parent a07e844c47
commit ab77f5488d
2266 changed files with 177942 additions and 3444 deletions
@@ -0,0 +1,221 @@
<template>
<div class="blood-record-list">
<div class="mb-4">
<el-button type="primary" @click="handleAdd">添加记录</el-button>
</div>
<el-table :data="recordList" border>
<el-table-column prop="record_date" label="记录日期" width="120" />
<el-table-column prop="record_time" label="记录时间" width="100" />
<el-table-column prop="blood_sugar" label="血糖(mmol/L)" width="120">
<template #default="{ row }">
{{ row.blood_sugar || '-' }}
</template>
</el-table-column>
<el-table-column label="血压(mmHg)" width="150">
<template #default="{ row }">
<span v-if="row.systolic_pressure && row.diastolic_pressure">
{{ row.systolic_pressure }}/{{ row.diastolic_pressure }}
</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" show-overflow-tooltip />
<el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }">
<el-button link type="primary" @click="handleEdit(row)">编辑</el-button>
<el-button link type="danger" @click="handleDelete(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加/编辑对话框 -->
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="600px">
<el-form :model="recordForm" label-width="120px">
<el-form-item label="记录日期" required>
<el-date-picker
v-model="recordForm.record_date"
type="date"
placeholder="选择日期"
value-format="YYYY-MM-DD"
class="w-full"
/>
</el-form-item>
<el-form-item label="记录时间">
<el-time-picker
v-model="recordForm.record_time"
placeholder="选择时间"
format="HH:mm"
value-format="HH:mm"
class="w-full"
/>
</el-form-item>
<el-form-item label="血糖值">
<el-input-number
v-model="recordForm.blood_sugar"
:precision="2"
:step="0.1"
:min="0"
:max="50"
placeholder="请输入血糖值"
/>
<span class="ml-2">mmol/L</span>
</el-form-item>
<el-form-item label="收缩压(高压)">
<el-input-number
v-model="recordForm.systolic_pressure"
:min="0"
:max="300"
placeholder="请输入收缩压"
/>
<span class="ml-2">mmHg</span>
</el-form-item>
<el-form-item label="舒张压(低压)">
<el-input-number
v-model="recordForm.diastolic_pressure"
:min="0"
:max="200"
placeholder="请输入舒张压"
/>
<span class="ml-2">mmHg</span>
</el-form-item>
<el-form-item label="备注">
<el-input
v-model="recordForm.remark"
type="textarea"
:rows="3"
placeholder="请输入备注"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleSubmit" :loading="submitting">确定</el-button>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { bloodRecordAdd, bloodRecordEdit, bloodRecordDelete, getRecordsByPatient } from '@/api/tcm'
import feedback from '@/utils/feedback'
const props = defineProps({
diagnosisId: {
type: Number,
default: 0
},
patientId: {
type: Number,
default: 0
}
})
const recordList = ref([])
const dialogVisible = ref(false)
const submitting = ref(false)
const dialogTitle = computed(() => recordForm.value.id ? '编辑记录' : '添加记录')
const recordForm = ref({
id: '',
diagnosis_id: props.diagnosisId,
patient_id: props.patientId,
record_date: '',
record_time: '',
blood_sugar: null,
systolic_pressure: null,
diastolic_pressure: null,
remark: ''
})
// 获取记录列表
const getRecords = async () => {
if (!props.diagnosisId && !props.patientId) {
return
}
try {
const data = await getRecordsByPatient({
diagnosis_id: props.diagnosisId,
patient_id: props.patientId
})
recordList.value = data
} catch (error) {
console.error('获取记录失败:', error)
}
}
// 添加记录
const handleAdd = () => {
recordForm.value = {
id: '',
diagnosis_id: props.diagnosisId,
patient_id: props.patientId,
record_date: '',
record_time: '',
blood_sugar: null,
systolic_pressure: null,
diastolic_pressure: null,
remark: ''
}
dialogVisible.value = true
}
// 编辑记录
const handleEdit = (row: any) => {
recordForm.value = { ...row }
dialogVisible.value = true
}
// 删除记录
const handleDelete = async (row: any) => {
await feedback.confirm('确定要删除这条记录吗?')
try {
await bloodRecordDelete({ id: row.id })
feedback.msgSuccess('删除成功')
getRecords()
} catch (error) {
console.error('删除失败:', error)
}
}
// 提交
const handleSubmit = async () => {
if (!recordForm.value.record_date) {
feedback.msgWarning('请选择记录日期')
return
}
submitting.value = true
try {
if (recordForm.value.id) {
await bloodRecordEdit(recordForm.value)
feedback.msgSuccess('编辑成功')
} else {
await bloodRecordAdd(recordForm.value)
feedback.msgSuccess('添加成功')
}
dialogVisible.value = false
getRecords()
} catch (error) {
console.error('提交失败:', error)
} finally {
submitting.value = false
}
}
onMounted(() => {
getRecords()
})
// 监听props变化
watch(() => [props.diagnosisId, props.patientId], () => {
getRecords()
})
</script>
<style lang="scss" scoped>
.blood-record-list {
padding: 20px;
}
</style>