Files
his/openhis-ui-vue3/src/views/inpatient/doctorstation/components/TextAdvicePanel.vue
2026-05-26 21:51:56 +08:00

120 lines
3.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="text-advice-panel" v-if="visible">
<el-form :model="form" :rules="rules" ref="formRef" label-width="100px" class="text-form">
<el-row :gutter="16">
<el-col :span="24">
<el-form-item label="医嘱内容" prop="textContent">
<el-input
v-model="form.textContent"
placeholder="请输入3~50字医嘱内容"
maxlength="50"
show-word-limit
name="textContent"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="8">
<el-form-item label="开始时间" prop="startTime">
<el-date-picker
v-model="form.startTime"
type="datetime"
placeholder="选择时间"
format="YYYY-MM-DD HH:mm"
value-format="YYYY-MM-DD HH:mm:ss"
name="startTime"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="频次" prop="frequency">
<el-select v-model="form.frequency" placeholder="选择频次" name="frequency">
<el-option label="立即" value="立即" />
<el-option label="每日一次" value="每日一次" />
<el-option label="每日两次" value="每日两次" />
<el-option label="必要时" value="必要时" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="执行科室" prop="execDept">
<el-select v-model="form.execDept" placeholder="选择科室" name="execDept">
<el-option label="呼吸内科病房" value="呼吸内科病房" />
<el-option label="心血管内科病房" value="心血管内科病房" />
<el-option label="消化内科病房" value="消化内科病房" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16" class="action-row">
<el-col :span="24" style="text-align: right;">
<el-button @click="handleCancel">取消</el-button>
<el-button type="primary" @click="handleConfirm">确定</el-button>
</el-col>
</el-row>
</el-form>
</div>
</template>
<script setup>
import { reactive, ref, watch, onMounted } from 'vue'
const props = defineProps({
visible: { type: Boolean, default: false },
currentDept: { type: String, default: '呼吸内科病房' }
})
const emit = defineEmits(['confirm', 'cancel'])
const formRef = ref(null)
const form = reactive({
textContent: '',
startTime: '',
frequency: '立即',
execDept: ''
})
const rules = {
textContent: [
{ required: true, message: '请输入医嘱内容', trigger: 'blur' },
{ min: 3, max: 50, message: '文字医嘱内容长度需在3~50字之间', trigger: 'blur' }
],
startTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
frequency: [{ required: true, message: '请选择频次', trigger: 'change' }],
execDept: [{ required: true, message: '请选择执行科室', trigger: 'change' }]
}
const resetForm = () => {
form.textContent = ''
form.startTime = new Date().toISOString().slice(0, 19).replace('T', ' ')
form.frequency = '立即'
form.execDept = props.currentDept
}
watch(() => props.visible, (val) => {
if (val) resetForm()
})
onMounted(() => resetForm())
const handleConfirm = async () => {
if (!formRef.value) return
await formRef.value.validate((valid) => {
if (valid) {
// 强制金额为0屏蔽计费元素
emit('confirm', { ...form, amount: 0.00, singleDosage: null, totalAmount: null })
}
})
}
const handleCancel = () => {
emit('cancel')
}
</script>
<style scoped>
.text-advice-panel { margin-top: 16px; padding: 16px; background: #f9f9f9; border-radius: 4px; border: 1px solid #ebeef5; }
.action-row { margin-top: 10px; }
</style>