Files
zyt/admin/src/views/tcm/diagnosis/add.vue
T
2026-07-02 16:13:38 +08:00

1022 lines
36 KiB
Vue

<template>
<div class="diagnosis-page">
<!-- 页面头部 -->
<div class="page-header">
<el-button link @click="handleBack" class="back-btn">
<el-icon><ArrowLeft /></el-icon>
返回
</el-button>
<h1 class="page-title">{{ pageTitle }}</h1>
</div>
<!-- 表单内容 -->
<div class="page-content">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="auto"
class="diagnosis-form"
>
<!-- 基本信息 -->
<div class="form-section">
<div class="section-title">基本信息</div>
<el-form-item label="患者ID">
<el-input v-model="formData.patient_id" disabled placeholder="系统自动生成" />
</el-form-item>
<el-form-item label="患者姓名" prop="patient_name">
<el-input v-model="formData.patient_name" placeholder="请输入患者姓名" />
</el-form-item>
<el-form-item label="身份证号" prop="id_card">
<el-input
v-model="formData.id_card"
placeholder="请输入身份证号"
maxlength="18"
@blur="handleIdCardBlur"
/>
</el-form-item>
<el-form-item label="手机号" prop="phone">
<el-input
v-model="formData.phone"
placeholder="请输入手机号"
maxlength="11"
@blur="handlePhoneBlur"
/>
</el-form-item>
<el-form-item label="性别" prop="gender">
<el-radio-group v-model="formData.gender">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="年龄" prop="age">
<el-input-number
v-model="formData.age"
:min="0"
:max="150"
placeholder="请输入年龄"
class="w-full"
/>
</el-form-item>
<el-form-item label="诊断日期" prop="diagnosis_date">
<el-date-picker
v-model="formData.diagnosis_date"
type="date"
placeholder="请选择诊断日期"
value-format="YYYY-MM-DD"
class="w-full"
/>
</el-form-item>
</div>
<!-- 生命体征 -->
<div class="form-section">
<div class="section-title">生命体征</div>
<el-form-item label="婚姻状态" prop="marital_status">
<el-select v-model="formData.marital_status" placeholder="请选择婚姻状态" class="w-full">
<el-option label="未婚" :value="0" />
<el-option label="已婚" :value="1" />
<el-option label="离异" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="身高(cm)" prop="height">
<el-input-number
v-model="formData.height"
:min="0"
:max="300"
placeholder="请输入身高"
class="w-full"
/>
</el-form-item>
<el-form-item label="体重(kg)" prop="weight">
<el-input-number
v-model="formData.weight"
:min="0"
:max="500"
:step="0.1"
placeholder="请输入体重"
class="w-full"
/>
</el-form-item>
<el-form-item label="地区" prop="region">
<el-input v-model="formData.region" placeholder="请输入地区" />
</el-form-item>
<el-form-item label="收缩压(mmHg)" prop="systolic_pressure">
<el-input-number
v-model="formData.systolic_pressure"
:min="0"
:max="250"
placeholder="请输入收缩压"
class="w-full"
/>
</el-form-item>
<el-form-item label="舒张压(mmHg)" prop="diastolic_pressure">
<el-input-number
v-model="formData.diastolic_pressure"
:min="0"
:max="150"
placeholder="请输入舒张压"
class="w-full"
/>
</el-form-item>
<el-form-item label="空腹血糖(mmol/L)" prop="fasting_blood_sugar">
<el-input
v-model="formData.fasting_blood_sugar"
placeholder="请输入空腹血糖,如:8.5 或 8-9"
maxlength="20"
class="w-full"
/>
</el-form-item>
</div>
<!-- 诊断类型 -->
<div class="form-section">
<div class="section-title">诊断信息</div>
<el-form-item label="诊断类型" prop="diagnosis_type">
<el-select v-model="formData.diagnosis_type" placeholder="请选择诊断类型" class="w-full">
<el-option
v-for="item in diagnosisTypeOptions"
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="证型" prop="syndrome_type">
<el-select v-model="formData.syndrome_type" placeholder="请选择证型" class="w-full">
<el-option
v-for="item in syndromeTypeOptions"
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="糖尿病期数" prop="diabetes_type">
<el-select v-model="formData.diabetes_type" placeholder="请选择糖尿病期数" class="w-full">
<el-option
v-for="item in diabetesTypeOptions"
:key="item.value"
:label="item.name + (item.remark ? ' (' + item.remark + ')' : '')"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="formData.status">
<el-radio :label="1">启用</el-radio>
<el-radio :label="0">禁用</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="在用药物" prop="current_medications">
<el-input
v-model="formData.current_medications"
type="textarea"
:rows="3"
placeholder="请填写患者当前正在使用的药物(如降压药、降糖药等),多种请换行或顿号分隔"
maxlength="2000"
show-word-limit
/>
</el-form-item>
</div>
<!-- 主诉 -->
<div class="form-section">
<div class="section-title">主诉</div>
<el-form-item label="发现糖尿病就患病史" prop="diabetes_discovery_year">
<el-input
v-model="formData.diabetes_discovery_year"
clearable
maxlength="50"
show-word-limit
placeholder="可填数字或文字,如:5、1年、半年"
class="w-full"
/>
</el-form-item>
<el-form-item label="当地医院诊断结果">
<el-checkbox-group v-model="formData.local_hospital_diagnosis" class="checkbox-group">
<el-checkbox-button label="糖尿病">糖尿病</el-checkbox-button>
<el-checkbox-button label="高血压">高血压</el-checkbox-button>
<el-checkbox-button label="糖尿病高血压">糖尿病高血压</el-checkbox-button>
</el-checkbox-group>
</el-form-item>
<el-form-item label="当地就诊医院名称" prop="local_hospital_name">
<el-input
v-model="formData.local_hospital_name"
placeholder="请输入当地就诊医院名称(不能填写当地、本地、互联网等关键词)"
/>
</el-form-item>
</div>
<!-- 现病史 -->
<div class="form-section">
<div class="section-title">现病史</div>
<el-form-item label="口腔感觉">
<el-radio-group v-model="formData.appetite" class="radio-group">
<el-radio-button v-for="item in appetiteOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="每日饮水量">
<el-radio-group v-model="formData.water_intake" class="radio-group">
<el-radio-button v-for="item in waterIntakeOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="近一个月体重变化">
<el-radio-group v-model="formData.weight_change" class="radio-group">
<el-radio-button v-for="item in weightChangeOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="脂肪肝程度">
<el-radio-group v-model="formData.fatty_liver_degree" class="radio-group">
<el-radio-button v-for="item in fattyLiverDegreeOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="饮食情况">
<el-checkbox-group v-model="formData.diet_condition" class="checkbox-group">
<el-checkbox-button v-for="item in dietConditionOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-checkbox-button>
</el-checkbox-group>
</el-form-item>
<el-form-item label="肢体感觉">
<el-checkbox-group v-model="formData.body_feeling" class="checkbox-group">
<el-checkbox-button v-for="item in bodyFeelingOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-checkbox-button>
</el-checkbox-group>
</el-form-item>
<el-form-item label="睡眠情况">
<el-checkbox-group v-model="formData.sleep_condition" class="checkbox-group">
<el-checkbox-button v-for="item in sleepConditionOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-checkbox-button>
</el-checkbox-group>
</el-form-item>
<el-form-item label="眼睛情况">
<el-checkbox-group v-model="formData.eye_condition" class="checkbox-group">
<el-checkbox-button v-for="item in eyeConditionOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-checkbox-button>
</el-checkbox-group>
</el-form-item>
<el-form-item label="头部感觉">
<el-checkbox-group v-model="formData.head_feeling" class="checkbox-group">
<el-checkbox-button v-for="item in headFeelingOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-checkbox-button>
</el-checkbox-group>
</el-form-item>
<el-form-item label="出汗情况">
<el-checkbox-group v-model="formData.sweat_condition" class="checkbox-group">
<el-checkbox-button v-for="item in sweatConditionOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-checkbox-button>
</el-checkbox-group>
</el-form-item>
<el-form-item label="皮肤情况">
<el-checkbox-group v-model="formData.skin_condition" class="checkbox-group">
<el-checkbox-button v-for="item in skinConditionOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-checkbox-button>
</el-checkbox-group>
</el-form-item>
<el-form-item label="小便情况">
<el-checkbox-group v-model="formData.urine_condition" class="checkbox-group">
<el-checkbox-button v-for="item in urineConditionOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-checkbox-button>
</el-checkbox-group>
</el-form-item>
<el-form-item label="大便情况">
<el-checkbox-group v-model="formData.stool_condition" class="checkbox-group">
<el-checkbox-button v-for="item in stoolConditionOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-checkbox-button>
</el-checkbox-group>
</el-form-item>
<el-form-item label="腰肾情况">
<el-checkbox-group v-model="formData.kidney_condition" class="checkbox-group">
<el-checkbox-button v-for="item in kidneyConditionOptions" :key="item.value" :label="item.value">
{{ item.name }}
</el-checkbox-button>
</el-checkbox-group>
</el-form-item>
<el-form-item label="病情补充" prop="symptoms">
<el-input
v-model="formData.symptoms"
type="textarea"
:rows="3"
placeholder="请输入症状"
/>
</el-form-item>
</div>
<!-- 既往史 -->
<div class="form-section">
<div class="section-title">既往史</div>
<el-form-item label="">
<el-checkbox-group v-model="formData.past_history" class="checkbox-group">
<el-checkbox-button
v-for="item in pastHistoryOptions"
:key="item.value"
:label="item.value"
>
{{ item.name }}
</el-checkbox-button>
</el-checkbox-group>
</el-form-item>
</div>
<!-- 其他病史 -->
<div class="form-section">
<div class="section-title">其他病史</div>
<el-form-item label="外伤史">
<el-radio-group v-model="formData.trauma_history">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="手术史">
<el-radio-group v-model="formData.surgery_history">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="过敏史">
<el-radio-group v-model="formData.allergy_history">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="家族病史">
<el-radio-group v-model="formData.family_history">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="妊娠哺乳史">
<el-radio-group v-model="formData.pregnancy_history">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</div>
<!-- 诊断详情 -->
<div class="form-section">
<div class="section-title">诊断详情</div>
<el-form-item label="舌苔" prop="tongue_coating">
<el-input v-model="formData.tongue_coating" placeholder="请输入舌苔情况" />
</el-form-item>
<el-form-item label="脉象" prop="pulse">
<el-input v-model="formData.pulse" placeholder="请输入脉象" />
</el-form-item>
<el-form-item label="治则" prop="treatment_principle">
<el-input
v-model="formData.treatment_principle"
type="textarea"
:rows="3"
placeholder="请输入治则"
/>
</el-form-item>
<el-form-item label="处方" prop="prescription">
<el-input
v-model="formData.prescription"
type="textarea"
:rows="3"
placeholder="请输入处方"
/>
</el-form-item>
<el-form-item label="医嘱" prop="doctor_advice">
<el-input
v-model="formData.doctor_advice"
type="textarea"
:rows="3"
placeholder="请输入医嘱"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="formData.remark"
type="textarea"
:rows="2"
placeholder="请输入备注"
/>
</el-form-item>
</div>
</el-form>
</div>
<!-- 页面底部按钮 -->
<div class="page-footer">
<el-button @click="handleBack" class="btn-cancel">取消</el-button>
<el-button type="primary" @click="handleSubmit" :loading="submitting" class="btn-submit">
保存
</el-button>
</div>
</div>
</template>
<script setup lang="ts">
import { tcmDiagnosisAdd, tcmDiagnosisEdit, tcmDiagnosisDetail, checkPhone, checkIdCard } from '@/api/tcm'
import { getDictData } from '@/api/app'
import feedback from '@/utils/feedback'
import { ElMessage } from 'element-plus'
import { useRouter, useRoute } from 'vue-router'
import { ArrowLeft } from '@element-plus/icons-vue'
const router = useRouter()
const route = useRoute()
const formRef = ref()
const mode = ref('add')
const submitting = ref(false)
const pageTitle = computed(() => (mode.value === 'add' ? '新增诊单' : '编辑诊单'))
const formData = ref({
id: '',
patient_id: '',
patient_name: '',
id_card: '',
phone: '',
gender: 1,
age: undefined as number | undefined,
diagnosis_date: '',
diagnosis_type: '',
syndrome_type: '',
diabetes_type: '',
diabetes_discovery_year: '',
local_hospital_diagnosis: [],
local_hospital_name: '',
marital_status: undefined as number | undefined,
height: undefined as number | undefined,
weight: undefined as number | undefined,
region: '',
systolic_pressure: undefined as number | undefined,
diastolic_pressure: undefined as number | undefined,
fasting_blood_sugar: '',
appetite: '',
water_intake: '',
diet_condition: [],
weight_change: '',
body_feeling: [],
sleep_condition: [],
eye_condition: [],
head_feeling: [],
sweat_condition: [],
skin_condition: [],
urine_condition: [],
stool_condition: [],
kidney_condition: [],
fatty_liver_degree: '',
past_history: [],
trauma_history: 0,
surgery_history: 0,
allergy_history: 0,
family_history: 0,
pregnancy_history: 0,
symptoms: '',
tongue_coating: '',
pulse: '',
treatment_principle: '',
prescription: '',
doctor_advice: '',
remark: '',
current_medications: '',
status: 1
})
const validatePhone = (rule: any, value: any, callback: any) => {
if (!value) {
callback(new Error('请输入手机号'))
return
}
if (!/^1[3-9]\d{9}$/.test(value)) {
callback(new Error('手机号格式不正确'))
return
}
callback()
}
const validateIdCard = (rule: any, value: any, callback: any) => {
if (!value) {
callback()
return
}
if (!/^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/.test(value)) {
callback(new Error('身份证号格式不正确'))
return
}
callback()
}
const formRules = {
patient_name: [{ required: true, message: '请输入患者姓名', trigger: 'blur' }],
id_card: [{ validator: validateIdCard, trigger: 'blur' }],
phone: [{ required: true, validator: validatePhone, trigger: 'blur' }],
gender: [{ required: true, message: '请选择性别', trigger: 'change' }],
age: [{ required: true, message: '请输入年龄', trigger: 'blur' }],
diagnosis_type: [{ required: true, message: '请选择诊断类型', trigger: 'change' }],
syndrome_type: [{ required: true, message: '请选择证型', trigger: 'change' }],
diabetes_type: [{ required: true, message: '请选择糖尿病期数', trigger: 'change' }],
local_hospital_name: [{ required: true, message: '请输入当地就诊医院名称', trigger: 'blur' }],
diabetes_discovery_year: [{ max: 50, message: '最多50个字符', trigger: 'blur' }]
}
const diagnosisTypeOptions = ref<any[]>([])
const syndromeTypeOptions = ref<any[]>([])
const diabetesTypeOptions = ref<any[]>([])
const pastHistoryOptions = ref<any[]>([])
const appetiteOptions = ref<any[]>([])
const waterIntakeOptions = ref<any[]>([])
const dietConditionOptions = ref<any[]>([])
const weightChangeOptions = ref<any[]>([])
const bodyFeelingOptions = ref<any[]>([])
const sleepConditionOptions = ref<any[]>([])
const eyeConditionOptions = ref<any[]>([])
const headFeelingOptions = ref<any[]>([])
const sweatConditionOptions = ref<any[]>([])
const skinConditionOptions = ref<any[]>([])
const urineConditionOptions = ref<any[]>([])
const stoolConditionOptions = ref<any[]>([])
const kidneyConditionOptions = ref<any[]>([])
const fattyLiverDegreeOptions = ref<any[]>([])
const getDictOptions = async () => {
try {
const [
diagnosisType, syndromeType, diabetesType, pastHistory,
appetite, waterIntake, dietCondition, weightChange,
bodyFeeling, sleepCondition, eyeCondition, headFeeling,
sweatCondition, skinCondition, urineCondition, stoolCondition,
kidneyCondition, fattyLiverDegree
] = await Promise.all([
getDictData({ type: 'diagnosis_type' }),
getDictData({ type: 'syndrome_type' }),
getDictData({ type: 'diabetes_type' }),
getDictData({ type: 'past_history' }),
getDictData({ type: 'appetite' }),
getDictData({ type: 'water_intake' }),
getDictData({ type: 'diet_condition' }),
getDictData({ type: 'weight_change' }),
getDictData({ type: 'body_feeling' }),
getDictData({ type: 'sleep_condition' }),
getDictData({ type: 'eye_condition' }),
getDictData({ type: 'head_feeling' }),
getDictData({ type: 'sweat_condition' }),
getDictData({ type: 'skin_condition' }),
getDictData({ type: 'urine_condition' }),
getDictData({ type: 'stool_condition' }),
getDictData({ type: 'kidney_condition' }),
getDictData({ type: 'fatty_liver_degree' })
])
diagnosisTypeOptions.value = diagnosisType?.diagnosis_type || []
syndromeTypeOptions.value = syndromeType?.syndrome_type || []
diabetesTypeOptions.value = diabetesType?.diabetes_type || []
pastHistoryOptions.value = pastHistory?.past_history || []
appetiteOptions.value = appetite?.appetite || []
waterIntakeOptions.value = waterIntake?.water_intake || []
dietConditionOptions.value = dietCondition?.diet_condition || []
weightChangeOptions.value = weightChange?.weight_change || []
bodyFeelingOptions.value = bodyFeeling?.body_feeling || []
sleepConditionOptions.value = sleepCondition?.sleep_condition || []
eyeConditionOptions.value = eyeCondition?.eye_condition || []
headFeelingOptions.value = headFeeling?.head_feeling || []
sweatConditionOptions.value = sweatCondition?.sweat_condition || []
skinConditionOptions.value = skinCondition?.skin_condition || []
urineConditionOptions.value = urineCondition?.urine_condition || []
stoolConditionOptions.value = stoolCondition?.stool_condition || []
kidneyConditionOptions.value = kidneyCondition?.kidney_condition || []
fattyLiverDegreeOptions.value = fattyLiverDegree?.fatty_liver_degree || []
} catch (error) {
console.error('获取字典数据失败:', error)
}
}
const handlePhoneBlur = async () => {
if (!formData.value.phone || !/^1[3-9]\d{9}$/.test(formData.value.phone)) {
return
}
try {
const result = await checkPhone({
phone: formData.value.phone,
id: formData.value.id || ''
})
if (result.exists) {
ElMessage.warning(result.message)
}
} catch (error) {
console.error('检查手机号失败:', error)
}
}
const handleIdCardBlur = async () => {
if (!formData.value.id_card || !/^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/.test(formData.value.id_card)) {
return
}
try {
const result = await checkIdCard({
id_card: formData.value.id_card,
id: formData.value.id || ''
})
if (result.exists) {
ElMessage.warning(result.message)
}
} catch (error) {
console.error('检查身份证号失败:', error)
}
}
const handleSubmit = async () => {
await formRef.value?.validate()
submitting.value = true
try {
if (mode.value === 'add') {
const result = await tcmDiagnosisAdd(formData.value)
feedback.msgSuccess('新增成功')
if (result && result.id) {
mode.value = 'edit'
formData.value.id = result.id
try {
const detail = await tcmDiagnosisDetail({ id: result.id })
formData.value.patient_id = detail.patient_id
} catch (error) {
console.error('获取详情失败:', error)
}
router.replace({ query: { id: result.id } })
}
} else {
await tcmDiagnosisEdit(formData.value)
feedback.msgSuccess('编辑成功')
}
} catch (error) {
console.error('提交失败:', error)
} finally {
submitting.value = false
}
}
const handleBack = () => {
router.back()
}
onMounted(async () => {
// 加载字典数据
await getDictOptions()
// 延迟隐藏侧边栏,确保DOM已完全加载
setTimeout(() => {
// 隐藏侧边栏
const sidebar = document.querySelector('.el-aside')
if (sidebar) {
(sidebar as HTMLElement).style.display = 'none'
}
// 调整主容器宽度
const main = document.querySelector('.el-main')
if (main) {
(main as HTMLElement).style.width = '100%'
(main as HTMLElement).style.marginLeft = '0'
}
// 调整容器
const container = document.querySelector('.el-container')
if (container) {
(container as HTMLElement).style.width = '100%'
}
}, 100)
const id = route.query.id as string
if (id) {
mode.value = 'edit'
const data = await tcmDiagnosisDetail({ id: Number(id) })
formData.value = data
}
})
onBeforeUnmount(() => {
// 页面卸载时恢复侧边栏
const sidebar = document.querySelector('.el-aside')
if (sidebar) {
(sidebar as HTMLElement).style.display = ''
}
const main = document.querySelector('.el-main')
if (main) {
(main as HTMLElement).style.width = ''
(main as HTMLElement).style.marginLeft = ''
}
const container = document.querySelector('.el-container')
if (container) {
(container as HTMLElement).style.width = ''
}
})
</script>
<style>
.p-4{
padding: 0px;
}
</style>
<style lang="scss" scoped>
* {
box-sizing: border-box;
}
html, body {
margin: 0;
padding: 0;
}
.diagnosis-page {
display: flex;
flex-direction: column;
min-height: 100vh;
width: 100%;
background-color: #f5f7fa;
margin: 0;
padding: 0;
}
.page-header {
display: flex;
align-items: center;
gap: 12px;
padding: 16px;
background-color: #fff;
border-bottom: 1px solid #ebeef5;
position: sticky;
top: 0;
z-index: 100;
width: 100%;
.back-btn {
padding: 0;
font-size: 16px;
color: #606266;
flex-shrink: 0;
&:hover {
color: #409eff;
}
}
.page-title {
margin: 0;
font-size: 18px;
font-weight: 600;
color: #303133;
flex: 1;
}
}
.page-content {
flex: 1;
width: 100%;
overflow-y: auto;
padding: 16px;
@media (min-width: 768px) {
padding: 24px;
}
}
.diagnosis-form {
width: 100%;
:deep(.el-form-item) {
margin-bottom: 16px;
}
:deep(.el-form-item__label) {
font-weight: 500;
color: #606266;
}
:deep(.el-input),
:deep(.el-input-number),
:deep(.el-select),
:deep(.el-date-editor) {
width: 100%;
}
}
.form-section {
background-color: #fff;
border-radius: 4px;
padding: 16px;
margin-bottom: 16px;
width: 100%;
.section-title {
font-size: 16px;
font-weight: 600;
color: #303133;
margin-bottom: 16px;
padding-bottom: 12px;
border-bottom: 2px solid #409eff;
}
}
.radio-group {
display: flex;
flex-wrap: wrap;
gap: 8px;
width: 100%;
:deep(.el-radio-button) {
flex: 0 1 auto;
min-width: 60px;
}
}
.checkbox-group {
display: flex;
flex-wrap: wrap;
gap: 8px;
width: 100%;
:deep(.el-checkbox-button) {
flex: 0 1 auto;
min-width: 60px;
}
}
.form-tips {
font-size: 12px;
color: #909399;
margin-top: 4px;
line-height: 1.5;
}
.page-footer {
display: flex;
gap: 12px;
padding: 16px;
background-color: #fff;
border-top: 1px solid #ebeef5;
position: sticky;
bottom: 0;
z-index: 100;
width: 100%;
@media (max-width: 767px) {
flex-direction: column;
}
.btn-cancel,
.btn-submit {
flex: 1;
height: 40px;
font-size: 16px;
font-weight: 500;
@media (min-width: 768px) {
flex: 0 1 auto;
min-width: 120px;
}
}
.btn-cancel {
@media (max-width: 767px) {
order: 2;
}
}
.btn-submit {
@media (max-width: 767px) {
order: 1;
}
}
}
@media (max-width: 767px) {
.page-header {
padding: 12px;
.page-title {
font-size: 16px;
}
}
.page-content {
padding: 12px;
}
.form-section {
padding: 12px;
margin-bottom: 12px;
.section-title {
font-size: 14px;
margin-bottom: 12px;
padding-bottom: 8px;
}
}
.radio-group,
.checkbox-group {
gap: 6px;
:deep(.el-radio-button),
:deep(.el-checkbox-button) {
min-width: 50px;
font-size: 12px;
}
}
:deep(.el-form-item__label) {
font-size: 14px;
}
:deep(.el-input__inner),
:deep(.el-textarea__inner) {
font-size: 14px;
}
}
@media (prefers-color-scheme: dark) {
.diagnosis-page {
background-color: #1a1a1a;
}
.page-header,
.page-footer,
.form-section {
background-color: #2a2a2a;
border-color: #444;
}
.page-title,
.section-title {
color: #e0e0e0;
}
}
</style>