| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199 |
- <script setup lang="ts">
- import { reactive, watch } from 'vue'
- import dayjs from 'dayjs'
- import FieldItem from './FieldItem.vue'
- import SignatureItem from './SignatureItem.vue'
- export interface CheckInRegistrationForm {
- checkInNo?: string
- formDate?: string
- elderName?: string
- gender?: string
- age?: string | number
- photo?: string
- nationality?: string
- birthDate?: string
- nativePlace?: string
- householdPlace?: string
- nation?: string
- nationOther?: string
- politicalStatus?: string
- maritalStatus?: string
- idCardType?: string
- idCardNo?: string
- educationLevel?: string
- residentialAddress?: string
- guarantorName?: string
- guarantorRelation?: string
- guarantorPhone?: string
- guarantorIdCardType?: string
- guarantorIdCardNo?: string
- guarantorAddress?: string
- guarantorEmail?: string
- secondContactName?: string
- secondContactPhone?: string
- medicalPaymentMethod?: string
- medicalPaymentOther?: string
- incomeSource?: string[]
- incomeSourceOther?: string
- preResidenceHomeType?: string[]
- preResidenceHomeOther?: string
- checkInReason?: string
- pastHistoryDiseaseNone?: boolean
- pastHistoryDiseaseName1?: string
- pastHistoryDiseaseTime1?: string
- pastHistoryDiseaseName2?: string
- pastHistoryDiseaseTime2?: string
- pastHistorySurgery?: boolean
- pastHistorySurgeryName?: string
- pastHistorySurgeryTime?: string
- pastHistoryTrauma?: boolean
- pastHistoryTraumaPart1?: string
- pastHistoryTraumaTime1?: string
- pastHistoryTraumaPart2?: string
- pastHistoryTraumaTime2?: string
- currentDiseaseName1?: string
- currentDiseaseTime1?: string
- currentDiseaseStatus1?: string
- currentDiseaseName2?: string
- currentDiseaseTime2?: string
- currentDiseaseStatus2?: string
- regularVisitNone?: boolean
- regularVisitReason?: string
- regularVisitFreq?: string
- hospitalizationNone?: boolean
- hospitalizationCount?: string
- emergencyNone?: boolean
- emergencyCount?: string
- discomfortSymptomsNone?: boolean
- discomfortSymptomsList?: string[]
- discomfortSymptomsOther?: string
- allergyDrugNone?: boolean
- allergyDrugDetail?: string
- allergyFoodNone?: boolean
- allergyFoodDetail?: string
- allergyEnvNone?: boolean
- allergyEnvDetail?: string
- fallNone?: boolean
- fallDetail?: string
- memoryDeclineNone?: boolean
- memoryDeclineDetail?: string
- weightLossNone?: boolean
- weightLossWeight?: string
- urinaryIncontinenceNone?: boolean
- urinaryIncontinenceCount?: string
- sleepDisorderNone?: boolean
- sleepDisorderTypes?: string[]
- sleepDisorderOther?: string
- painNone?: boolean
- painPart?: string
- visionAbnormalNone?: boolean
- visionAbnormalTypes?: string[]
- visionAbnormalDegree?: string
- hearingLossNone?: boolean
- hearingLossDetail?: string
- mentalStatusNone?: boolean
- mentalStatusList?: string[]
- mentalStatusOther?: string
- languageExpression?: string[]
- languageExpressionOther?: string
- otherNotes?: string
- partyBSign?: string
- partyCSign?: string
- signDate?: string
- }
- const props = withDefaults(
- defineProps<{
- isTextMode?: boolean
- modelValue?: CheckInRegistrationForm
- elderId?: string | number
- }>(),
- {
- isTextMode: false,
- modelValue: () => ({}),
- elderId: ''
- }
- )
- const emit = defineEmits<{
- (e: 'update:modelValue', val: CheckInRegistrationForm): void
- }>()
- const createDefaultForm = (): CheckInRegistrationForm => ({
- checkInNo: '',
- formDate: dayjs().format('YYYY-MM-DD'),
- elderName: '',
- gender: '',
- age: '',
- photo: '',
- nationality: '中国',
- birthDate: '',
- nativePlace: '',
- householdPlace: '',
- nation: '汉族',
- nationOther: '',
- politicalStatus: '',
- maritalStatus: '',
- idCardType: '身份证',
- idCardNo: '',
- educationLevel: '',
- residentialAddress: '',
- guarantorName: '',
- guarantorRelation: '',
- guarantorPhone: '',
- guarantorIdCardType: '身份证',
- guarantorIdCardNo: '',
- guarantorAddress: '',
- guarantorEmail: '',
- secondContactName: '',
- secondContactPhone: '',
- medicalPaymentMethod: '',
- medicalPaymentOther: '',
- incomeSource: [],
- incomeSourceOther: '',
- preResidenceHomeType: [],
- preResidenceHomeOther: '',
- checkInReason: '',
- pastHistoryDiseaseNone: true,
- pastHistoryDiseaseName1: '',
- pastHistoryDiseaseTime1: '',
- pastHistoryDiseaseName2: '',
- pastHistoryDiseaseTime2: '',
- pastHistorySurgery: false,
- pastHistorySurgeryName: '',
- pastHistorySurgeryTime: '',
- pastHistoryTrauma: false,
- pastHistoryTraumaPart1: '',
- pastHistoryTraumaTime1: '',
- pastHistoryTraumaPart2: '',
- pastHistoryTraumaTime2: '',
- currentDiseaseName1: '',
- currentDiseaseTime1: '',
- currentDiseaseStatus1: '',
- currentDiseaseName2: '',
- currentDiseaseTime2: '',
- currentDiseaseStatus2: '',
- regularVisitNone: true,
- regularVisitReason: '',
- regularVisitFreq: '',
- hospitalizationNone: true,
- hospitalizationCount: '',
- emergencyNone: true,
- emergencyCount: '',
- discomfortSymptomsNone: true,
- discomfortSymptomsList: [],
- discomfortSymptomsOther: '',
- allergyDrugNone: true,
- allergyDrugDetail: '',
- allergyFoodNone: true,
- allergyFoodDetail: '',
- allergyEnvNone: true,
- allergyEnvDetail: '',
- fallNone: true,
- fallDetail: '',
- memoryDeclineNone: true,
- memoryDeclineDetail: '',
- weightLossNone: true,
- weightLossWeight: '',
- urinaryIncontinenceNone: true,
- urinaryIncontinenceCount: '',
- sleepDisorderNone: true,
- sleepDisorderTypes: [],
- sleepDisorderOther: '',
- painNone: true,
- painPart: '',
- visionAbnormalNone: true,
- visionAbnormalTypes: [],
- visionAbnormalDegree: '',
- hearingLossNone: true,
- hearingLossDetail: '',
- mentalStatusNone: true,
- mentalStatusList: [],
- mentalStatusOther: '',
- languageExpression: [],
- languageExpressionOther: '',
- otherNotes: '',
- partyBSign: '',
- partyCSign: '',
- signDate: dayjs().format('YYYY-MM-DD')
- })
- const form = reactive<CheckInRegistrationForm>(createDefaultForm())
- watch(
- () => props.modelValue,
- (val) => {
- if (val) Object.assign(form, createDefaultForm(), val)
- },
- { immediate: true, deep: true }
- )
- const emitForm = () => emit('update:modelValue', JSON.parse(JSON.stringify(form)))
- const updateForm = (key: keyof CheckInRegistrationForm, val: any) => {
- ;(form as any)[key] = val
- emitForm()
- }
- // 从长者选择返回值填充数据(基于实际API返回值映射)
- const fillFromElderData = (elder: Record<string, any>) => {
- // 基本信息
- form.elderName = elder.elderName || ''
- form.gender = elder.elderSex === 1 ? '男' : elder.elderSex === 2 ? '女' : ''
- form.age = elder.elderAge || ''
- form.photo = elder.elderImage || elder.elderCover || ''
- // 出生日期(处理时间戳或字符串)
- if (elder.birthday) {
- form.birthDate = typeof elder.birthday === 'number'
- ? dayjs(elder.birthday).format('YYYY-MM-DD')
- : elder.birthday
- }
- // 籍贯/户籍地址
- form.nativePlace = elder.registeredResidenceAddress || elder.region || ''
- form.householdPlace = elder.censusRegister || ''
- // 民族
- const nationMap: Record<string, string> = { '1': '汉族', '2': '蒙古族', '3': '回族', '4': '藏族' }
- form.nation = elder.nationId ? (nationMap[String(elder.nationId)] || '汉族') : '汉族'
- // 政治面貌
- const polMap: Record<string, string> = { '1': '中共党员', '2': '共青团员', '3': '民主党派', '4': '群众' }
- form.politicalStatus = elder.political ? polMap[String(elder.political)] || '' : ''
- // 婚姻状况
- const marMap: Record<number, string> = { 1: '未婚', 2: '已婚', 3: '丧偶', 4: '离异' }
- form.maritalStatus = elder.maritalStatus ? marMap[Number(elder.maritalStatus)] || '' : ''
- // 证件类型和号码
- const paperMap: Record<number, string> = { 1: '身份证', 2: '护照', 3: '军官证', 4: '其他' }
- form.idCardType = elder.papersType ? paperMap[Number(elder.papersType)] || '身份证' : '身份证'
- form.idCardNo = elder.idCard || ''
- // 文化程度
- const eduMap: Record<number, string> = { 1: '文盲半文盲', 2: '小学', 3: '初中', 4: '高中/技校/中专', 5: '大学专科及以上', 6: '不详', 7: '大学专科及以上' }
- form.educationLevel = elder.degreeEducation ? eduMap[Number(elder.degreeEducation)] || '' : ''
- // 居住地址
- form.residentialAddress = elder.address || ''
- // 医疗费用支付方式
- const payMap: Record<number, string> = { 1: '城镇职工基本医疗保险', 2: '城镇居民基本医疗保险', 3: '全公费', 4: '其它' }
- form.medicalPaymentMethod = elder.paymentMethod ? payMap[Number(elder.paymentMethod)] || '' : ''
- // 经济来源
- if (elder.economySource) {
- const srcMap: Record<string, string> = { '1': '退休金/养老金', '2': '子女补贴', '3': '亲友资助', '4': '其他补贴' }
- form.incomeSource = elder.economySource.split(',').filter(Boolean).map((k: string) => srcMap[k] || k).filter(Boolean)
- }
- // 过敏史
- if (elder.allergicDrug || elder.drugAllergy) {
- form.allergyDrugNone = false
- form.allergyDrugDetail = elder.allergicDrug || elder.drugAllergy || ''
- }
- // 入住编号
- form.checkInNo = elder.fileNumber || elder.contractNumber || ''
- emitForm()
- }
- // 修复:正确暴露方法名
- defineExpose({ fillFromElderData })
- // 打印模式 checkbox 渲染
- const printCheck = (checked: boolean) => (checked ? '\u2611' : '\u2610')
- // 不适症状选项
- const symptomOptions = ['头痛','头晕','心悸','胸闷','胸痛','慢性咳嗽','咳痰','呼吸困难','多饮','多尿','体重下降','乏力','关节疼痛','手脚麻木','视力模糊','眼花','耳鸣','尿急','尿痛','尿频','腹泻','恶心呕吐','食欲减退','乳房胀痛','体位性低血压']
- // 精神状况选项
- const mentalOptions = ['游走','日夜颠倒','语言攻击行为','肢体攻击行为','对物品的攻击行为','妄想','幻觉','焦虑/恐惧','自伤/自杀','重复行为']
- // 辅助方法 - 切换数组项
- const toggleArrayItem = (arrKey: keyof CheckInRegistrationForm, val: string) => {
- const arr = (form as any)[arrKey] as string[]
- const idx = arr.indexOf(val)
- if (idx > -1) arr.splice(idx, 1)
- else arr.push(val)
- emitForm()
- }
- // 辅助方法 - 处理既往史"无"勾选(清空疾病名称)
- const onPastHistoryNoneChange = () => {
- form.pastHistoryDiseaseNone = true
- form.pastHistoryDiseaseName1 = ''
- form.pastHistoryDiseaseTime1 = ''
- emitForm()
- }
- // 辅助方法 - 处理行内input输入(用于疾病名称、时间等字段)
- const onInlineInput = (key: keyof CheckInRegistrationForm, e: Event) => {
- const target = e.target as HTMLInputElement
- ;(form as any)[key] = target.value
- emitForm()
- }
- </script>
- <template>
- <div class="check-in-registration">
- <!-- 标题 -->
- <div class="doc-title" style="font-size: 14px;margin-bottom: 12px;width: 100%;text-align: left;margin-top: 16px;">附件 2</div>
- <div class="doc-title" style="width: 100%;text-align: center;">入住登记表</div>
- <div class="doc-meta">
- <span>入住编号:<FieldItem :model-value="form.checkInNo" :is-text-mode="isTextMode" width="140px" @update:model-value="(v:any)=>updateForm('checkInNo',v)" /></span>
- <span>日期:{{ form.signDate || '____年__月__日' }}</span>
- </div>
- <!-- 主表格 - A4宽度适配,严格7列布局 -->
- <table class="reg-table" border="1" cellspacing="0" cellpadding="0">
- <!-- 明确定义7列,按设计图比例分配 -->
- <colgroup>
- <col style="width:9%" /> <!-- 第1列:最左标签(老年人/担保人) - 紧凑 -->
- <col style="width:13%" /> <!-- 第2列:标签/值 -->
- <col style="width:13%" /> <!-- 第3列:值/标签 -->
- <col style="width:13%" /> <!-- 第4列:标签/值 -->
- <col style="width:13%" /> <!-- 第5列:值/标签 -->
- <col style="width:13%" /> <!-- 第6列:标签/值 -->
- <col style="width:18%" /> <!-- 第7列:照片/值 -->
- </colgroup>
- <tbody>
- <!-- ========== 基本信息 + 照片区域(照片只覆盖前8行) ========== -->
- <!-- 第1行:老年人 | 照片(rowspan=8) -->
- <tr>
- <td class="lbl">老年人</td>
- <td><FieldItem :model-value="form.elderName" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('elderName',v)" /></td>
- <td class="lbl">性别</td>
- <td class="radio-cell">
- <template v-if="!isTextMode">
- <label><input type="radio" :checked="form.gender==='男'" @change="updateForm('gender','男')" /> 男</label>
- <label><input type="radio" :checked="form.gender==='女'" @change="updateForm('gender','女')" /> 女</label>
- </template>
- <template v-else>{{ printCheck(form.gender==='男') }} 男 {{ printCheck(form.gender==='女') }} 女</template>
- </td>
- <td class="lbl">年龄</td>
- <td><FieldItem :model-value="form.age" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('age',v)" /></td>
- <td class="photo-cell" rowspan="8">
- <div class="photo-box">
- <template v-if="form.photo"><img :src="form.photo" class="elder-photo" alt=""/></template>
- <template v-else><div class="photo-placeholder">照片</div></template>
- </div>
- </td>
- </tr>
- <!-- 第2行:国籍、出生日期 -->
- <tr>
- <td class="lbl">国籍</td>
- <td colspan="2"><FieldItem :model-value="form.nationality" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('nationality',v)" /></td>
- <td class="lbl">出生日期</td>
- <td colspan="2"><FieldItem :model-value="form.birthDate" :is-text-mode="isTextMode" type="date" width="100%" @update:model-value="(v:any)=>updateForm('birthDate',v)" /></td>
- </tr>
- <!-- 第3行:籍贯、户籍地 -->
- <tr>
- <td class="lbl">籍贯</td>
- <td colspan="2"><FieldItem :model-value="form.nativePlace" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('nativePlace',v)" /></td>
- <td class="lbl">户籍地</td>
- <td colspan="2"><FieldItem :model-value="form.householdPlace" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('householdPlace',v)" /></td>
- </tr>
- <!-- 第4行:民族、政治面貌 -->
- <tr>
- <td class="lbl">民族</td>
- <td colspan="2" class="check-cell">
- <template v-if="!isTextMode">
- <label><input type="radio" :checked="form.nation==='汉族'" @change="updateForm('nation','汉族')" /> 汉族</label>
- <label><input type="radio" :checked="form.nation==='其他'" @change="updateForm('nation','其他')" /> 其他:<input :value="form.nationOther" class="inline-input small" placeholder="" @input="onInlineInput('nationOther',$event)" /></label>
- </template>
- <template v-else>{{ printCheck(form.nation==='汉族') }} 汉族 {{ printCheck(form.nation==='其他') }} 其他:{{ form.nationOther }}</template>
- </td>
- <td class="lbl">政治面貌</td>
- <td colspan="2"><FieldItem :model-value="form.politicalStatus" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('politicalStatus',v)" /></td>
- </tr>
- <!-- 第5行:婚姻状况 -->
- <tr>
- <td class="lbl">婚姻状况</td>
- <td colspan="5" class="check-cell">
- <template v-if="!isTextMode">
- <label v-for="it in ['未婚','已婚','丧偶','离异','未说明婚姻情况']" :key="it"><input type="checkbox" :checked="form.maritalStatus===it" @change="()=>updateForm('maritalStatus',it)" /> {{ it }}</label>
- </template>
- <template v-else><template v-for="it in ['未婚','已婚','丧偶','离异','未说明婚姻情况']" :key="it">{{ printCheck(form.maritalStatus===it) }} {{ it }} </template></template>
- </td>
- </tr>
- <!-- 第6行:证件类型、证件号码 -->
- <tr>
- <td class="lbl">证件类型</td>
- <td colspan="2"><FieldItem :model-value="form.idCardType" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('idCardType',v)" /></td>
- <td class="lbl">证件号码</td>
- <td colspan="2"><FieldItem :model-value="form.idCardNo" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('idCardNo',v)" /></td>
- </tr>
- <!-- 第7行:文化程度 -->
- <tr>
- <td class="lbl">文化程度</td>
- <td colspan="5" class="check-cell">
- <template v-if="!isTextMode">
- <label v-for="it in ['文盲半文盲','小学','初中','高中/技校/中专','大学专科及以上','不详']" :key="it"><input type="checkbox" :checked="form.educationLevel===it" @change="()=>updateForm('educationLevel',it)" /> {{ it }}</label>
- </template>
- <template v-else><template v-for="it in ['文盲半文盲','小学','初中','高中/技校/中专','大学专科及以上','不详']" :key="it">{{ printCheck(form.educationLevel===it) }} {{ it }} </template></template>
- </td>
- </tr>
- <!-- 第8行:居住地址(照片rowspan=8结束) -->
- <tr>
- <td class="lbl">居住地址</td>
- <td colspan="5"><FieldItem :model-value="form.residentialAddress" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('residentialAddress',v)" /></td>
- </tr>
- <!-- ========== 担保人/联系人区域(照片已结束,每行严格7列) ========== -->
- <!-- 担保人第1行:担保人(1) | 姓名/名称(1) | guarantorName(1) | 关系(1) | guarantorRelation(1) | 手机号(1) | guarantorPhone(1) = 7列 -->
- <tr>
- <td class="lbl multi-line" rowspan="3">担保人/<br/>监护人/<br/>紧急<br/>联系人</td>
- <td class="lbl">姓名/名称</td>
- <td><FieldItem :model-value="form.guarantorName" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('guarantorName',v)" /></td>
- <td class="lbl">关系</td>
- <td><FieldItem :model-value="form.guarantorRelation" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('guarantorRelation',v)" /></td>
- <td class="lbl">手机号</td>
- <td><FieldItem :model-value="form.guarantorPhone" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('guarantorPhone',v)" /></td>
- </tr>
- <!-- 担保人第2行:证件类型(1) | guarantorIdCardType(1) | 证件号码(1) | guarantorIdCardNo(4) = 7列(已含担保人rowspan) -->
- <tr>
- <td class="lbl">证件类型</td>
- <td><FieldItem :model-value="form.guarantorIdCardType" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('guarantorIdCardType',v)" /></td>
- <td class="lbl" colspan="2">证件号码</td>
- <td colspan="2"><FieldItem :model-value="form.guarantorIdCardNo" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('guarantorIdCardNo',v)" /></td>
- </tr>
- <!-- 担保人第3行:通信地址(1) | guarantorAddress(3) | 电子邮箱(1) | guarantorEmail(1) = 7列 -->
- <tr>
- <td class="lbl">通信地址</td>
- <td colspan="3"><FieldItem :model-value="form.guarantorAddress" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('guarantorAddress',v)" /></td>
- <td class="lbl">电子邮箱</td>
- <td><FieldItem :model-value="form.guarantorEmail" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('guarantorEmail',v)" /></td>
- </tr>
- <!-- 第二联系人:标签(2) + 姓名(2) + 标签(1) + 手机号(2) = 7列 -->
- <tr>
- <td class="lbl" colspan="2">第二联系人</td>
- <td colspan="2"><FieldItem :model-value="form.secondContactName" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('secondContactName',v)" /></td>
- <td class="lbl">手机号</td>
- <td colspan="2"><FieldItem :model-value="form.secondContactPhone" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('secondContactPhone',v)" /></td>
- </tr>
- <!-- 医疗费用支付方式 -->
- <tr>
- <td class="lbl multi-line">医疗费用<br/>支付方式</td>
- <td colspan="6" class="check-cell">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.medicalPaymentMethod==='城镇职工基本医疗保险'" @change="()=>updateForm('medicalPaymentMethod','城镇职工基本医疗保险')" /> 城镇职工基本医疗保险</label>
- <label><input type="checkbox" :checked="form.medicalPaymentMethod==='城镇居民基本医疗保险'" @change="()=>updateForm('medicalPaymentMethod','城镇居民基本医疗保险')" /> 城镇居民基本医疗保险</label>
- <label><input type="checkbox" :checked="form.medicalPaymentMethod==='全公费'" @change="()=>updateForm('medicalPaymentMethod','全公费')" /> 全公费</label>
- <label><input type="checkbox" :checked="form.medicalPaymentMethod==='其它'" @change="()=>updateForm('medicalPaymentMethod','其它')" /> 其它:<input :value="form.medicalPaymentOther" class="inline-input small" placeholder="" @input="onInlineInput('medicalPaymentOther',$event)" /></label>
- </template>
- <template v-else>{{ printCheck(form.medicalPaymentMethod==='城镇职工基本医疗保险') }} 城镇职工基本医疗 {{ printCheck(form.medicalPaymentMethod==='城镇居民基本医疗保险') }} 城镇居民基本医疗 {{ printCheck(form.medicalPaymentMethod==='全公费') }} 全公费 {{ printCheck(form.medicalPaymentMethod==='其它') }} 其它:{{ form.medicalPaymentOther }}</template>
- </td>
- </tr>
- <!-- 经济来源 -->
- <tr>
- <td class="lbl">经济来源</td>
- <td colspan="6" class="check-cell">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.incomeSource.includes('退休金/养老金')" @change="toggleArrayItem('incomeSource','退休金/养老金')" /> 退休金/养老金</label>
- <label><input type="checkbox" :checked="form.incomeSource.includes('子女补贴')" @change="toggleArrayItem('incomeSource','子女补贴')" /> 子女补贴</label>
- <label><input type="checkbox" :checked="form.incomeSource.includes('亲友资助')" @change="toggleArrayItem('incomeSource','亲友资助')" /> 亲友资助</label>
- <label><input type="checkbox" :checked="form.incomeSource.includes('其他补贴')" @change="toggleArrayItem('incomeSource','其他补贴')" /> 其他补贴:<input :value="form.incomeSourceOther" class="inline-input small" placeholder="" @input="onInlineInput('incomeSourceOther',$event)" /></label>
- </template>
- <template v-else>{{ printCheck(form.incomeSource.includes('退休金/养老金')) }} 退休金/养老金 {{ printCheck(form.incomeSource.includes('子女补贴')) }} 子女补贴 {{ printCheck(form.incomeSource.includes('亲友资助')) }} 亲友资助 {{ printCheck(form.incomeSource.includes('其他补贴')) }} 其他补贴:{{ form.incomeSourceOther }}</template>
- </td>
- </tr>
- <!-- 入住前居住 -->
- <tr>
- <td class="lbl multi-line">入住前<br/>居住</td>
- <td colspan="6" class="check-cell">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.preResidenceHomeType.includes('家(独居)')" @change="toggleArrayItem('preResidenceHomeType','家(独居)')" /> 家(独居)</label>
- <label><input type="checkbox" :checked="form.preResidenceHomeType.includes('配偶')" @change="toggleArrayItem('preResidenceHomeType','配偶')" /> 配偶</label>
- <label><input type="checkbox" :checked="form.preResidenceHomeType.includes('子女')" @change="toggleArrayItem('preResidenceHomeType','子女')" /> 子女</label>
- <label><input type="checkbox" :checked="form.preResidenceHomeType.includes('保姆')" @change="toggleArrayItem('preResidenceHomeType','保姆')" /> 保姆</label>
- <label><input type="checkbox" :checked="form.preResidenceHomeType.includes('其他')" @change="toggleArrayItem('preResidenceHomeType','其他')" /> 其他:<input :value="form.preResidenceHomeOther" class="inline-input small" placeholder="" @input="onInlineInput('preResidenceHomeOther',$event)" /></label>
- <label><input type="checkbox" :checked="form.preResidenceHomeType.includes('医院')" @change="toggleArrayItem('preResidenceHomeType','医院')" /> 医院</label>
- </template>
- <template v-else>{{ printCheck(form.preResidenceHomeType.includes('家(独居)')) }} 家(独居) {{ printCheck(form.preResidenceHomeType.includes('配偶')) }} 配偶 {{ printCheck(form.preResidenceHomeType.includes('子女')) }} 子女 {{ printCheck(form.preResidenceHomeType.includes('保姆')) }} 保姆 {{ printCheck(form.preResidenceHomeType.includes('其他')) }} 其他:{{ form.preResidenceHomeOther }} {{ printCheck(form.preResidenceHomeType.includes('医院')) }} 医院</template>
- </td>
- </tr>
- <!-- 入住机构原因 -->
- <tr>
- <td class="lbl multi-line">入住机构<br/>原因</td>
- <td colspan="6"><FieldItem :model-value="form.checkInReason" :is-text-mode="isTextMode" width="100%" @update:model-value="(v:any)=>updateForm('checkInReason',v)" /></td>
- </tr>
- <!-- ========== 健康状况 ========== -->
- <!-- 健康状况rowspan=10覆盖:既往史2行 + 手术史1行 + 外伤史2行 + 现患疾病2行 + 就医情况3行 -->
- <!-- 既往史第1行:健康(1) | 既往史(1) | 内容(5) = 7列 -->
- <tr>
- <td class="lbl multi-line" rowspan="10">健康状况</td>
- <td class="lbl" rowspan="2">既往史</td>
- <td colspan="5" class="disease-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.pastHistoryDiseaseNone" @change="onPastHistoryNoneChange" /> 无</label>
- <label><input type="checkbox" :checked="!form.pastHistoryDiseaseNone" @change="updateForm('pastHistoryDiseaseNone',false)" /> 有:疾病名称:</label>
- <input :value="form.pastHistoryDiseaseName1" class="inline-input medium" placeholder="" @input="onInlineInput('pastHistoryDiseaseName1',$event)" />
- <span class="text-suffix">,确诊时间:</span>
- <input :value="form.pastHistoryDiseaseTime1" class="inline-input small" placeholder="" @input="onInlineInput('pastHistoryDiseaseTime1',$event)" />
- </template>
- <template v-else>{{ printCheck(form.pastHistoryDiseaseNone) }} 无 {{ printCheck(!form.pastHistoryDiseaseNone) }} 有:疾病名称:{{ form.pastHistoryDiseaseName1 }} ,确诊时间:{{ form.pastHistoryDiseaseTime1 }}</template>
- </td>
- </tr>
- <!-- 既往史第2行:(健康继续) | (既往史继续) | 内容(5) -->
- <tr>
- <td colspan="5" class="disease-row">
- <template v-if="!isTextMode">
- <span class="text-prefix ml20"></span>
- <span class="text-suffix">疾病名称:</span>
- <input :value="form.pastHistoryDiseaseName2" class="inline-input medium" placeholder="" @input="onInlineInput('pastHistoryDiseaseName2',$event)" />
- <span class="text-suffix">,确诊时间:</span>
- <input :value="form.pastHistoryDiseaseTime2" class="inline-input small" placeholder="" @input="onInlineInput('pastHistoryDiseaseTime2',$event)" />
- </template>
- <template v-else>疾病名称:{{ form.pastHistoryDiseaseName2 }} ,确诊时间:{{ form.pastHistoryDiseaseTime2 }}</template>
- </td>
- </tr>
- <!-- 手术史:健康(1) | 手术史(1) | 内容(5) = 7列 -->
- <tr>
- <td class="lbl">手术史</td>
- <td colspan="5" class="disease-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="!form.pastHistorySurgery" @change="updateForm('pastHistorySurgery',false)" /> 无</label>
- <label><input type="checkbox" :checked="form.pastHistorySurgery" @change="updateForm('pastHistorySurgery',true)" /> 有:手术名称:</label>
- <input :value="form.pastHistorySurgeryName" class="inline-input medium" placeholder="" @input="onInlineInput('pastHistorySurgeryName',$event)" />
- <span class="text-suffix">,手术时间:</span>
- <input :value="form.pastHistorySurgeryTime" class="inline-input small" placeholder="" @input="onInlineInput('pastHistorySurgeryTime',$event)" />
- </template>
- <template v-else>{{ printCheck(!form.pastHistorySurgery) }} 无 {{ printCheck(form.pastHistorySurgery) }} 有:手术名称:{{ form.pastHistorySurgeryName }} ,手术时间:{{ form.pastHistorySurgeryTime }}</template>
- </td>
- </tr>
- <!-- 外伤史第1行:健康(1) | 外伤史(1 rowspan=2) | 内容(5) = 7列 -->
- <tr>
- <td class="lbl" rowspan="2">外伤史</td>
- <td colspan="5" class="disease-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="!form.pastHistoryTrauma" @change="updateForm('pastHistoryTrauma',false)" /> 无</label>
- <label><input type="checkbox" :checked="form.pastHistoryTrauma" @change="updateForm('pastHistoryTrauma',true)" /> 有:外伤部位:</label>
- <input :value="form.pastHistoryTraumaPart1" class="inline-input medium" placeholder="" @input="onInlineInput('pastHistoryTraumaPart1',$event)" />
- <span class="text-suffix">,发生时间:</span>
- <input :value="form.pastHistoryTraumaTime1" class="inline-input small" placeholder="" @input="onInlineInput('pastHistoryTraumaTime1',$event)" />
- </template>
- <template v-else>{{ printCheck(!form.pastHistoryTrauma) }} 无 {{ printCheck(form.pastHistoryTrauma) }} 有:外伤部位:{{ form.pastHistoryTraumaPart1 }} ,发生时间:{{ form.pastHistoryTraumaTime1 }}</template>
- </td>
- </tr>
- <!-- 外伤史第2行:(健康继续) | (外伤史继续) | 内容(5) -->
- <tr>
- <td colspan="5" class="disease-row">
- <template v-if="!isTextMode">
- <span class="text-prefix ml20"></span>
- <span class="text-suffix">外伤部位:</span>
- <input :value="form.pastHistoryTraumaPart2" class="inline-input medium" placeholder="" @input="onInlineInput('pastHistoryTraumaPart2',$event)" />
- <span class="text-suffix">,发生时间:</span>
- <input :value="form.pastHistoryTraumaTime2" class="inline-input small" placeholder="" @input="onInlineInput('pastHistoryTraumaTime2',$event)" />
- </template>
- <template v-else>外伤部位:{{ form.pastHistoryTraumaPart2 }} ,发生时间:{{ form.pastHistoryTraumaTime2 }}</template>
- </td>
- </tr>
- <!-- 现患疾病 -->
- <tr>
- <td class="lbl" rowspan="2">现患疾病</td>
- <td colspan="5" class="disease-row">
- <template v-if="!isTextMode">
- <span class="text-suffix">疾病名称:</span>
- <input :value="form.currentDiseaseName1" class="inline-input medium" placeholder="" @input="onInlineInput('currentDiseaseName1',$event)" />
- <span class="text-suffix">,确诊时间:</span>
- <input :value="form.currentDiseaseTime1" class="inline-input small" placeholder="" @input="onInlineInput('currentDiseaseTime1',$event)" />
- <span class="text-suffix">,目前状况:</span>
- <input :value="form.currentDiseaseStatus1" class="inline-input small" placeholder="" @input="onInlineInput('currentDiseaseStatus1',$event)" />
- </template>
- <template v-else>疾病名称:{{ form.currentDiseaseName1 }} ,确诊时间:{{ form.currentDiseaseTime1 }} ,目前状况:{{ form.currentDiseaseStatus1 }}</template>
- </td>
- </tr>
- <tr>
- <td colspan="5" class="disease-row">
- <template v-if="!isTextMode">
- <span class="text-suffix">疾病名称:</span>
- <input :value="form.currentDiseaseName2" class="inline-input medium" placeholder="" @input="onInlineInput('currentDiseaseName2',$event)" />
- <span class="text-suffix">,确诊时间:</span>
- <input :value="form.currentDiseaseTime2" class="inline-input small" placeholder="" @input="onInlineInput('currentDiseaseTime2',$event)" />
- <span class="text-suffix">,目前状况:</span>
- <input :value="form.currentDiseaseStatus2" class="inline-input small" placeholder="" @input="onInlineInput('currentDiseaseStatus2',$event)" />
- </template>
- <template v-else>疾病名称:{{ form.currentDiseaseName2 }} ,确诊时间:{{ form.currentDiseaseTime2 }} ,目前状况:{{ form.currentDiseaseStatus2 }}</template>
- </td>
- </tr>
- <!-- 就医情况 -->
- <tr>
- <td class="lbl multi-line" rowspan="3">就医情况</td>
- <td colspan="5" class="disease-row">
- <template v-if="!isTextMode">
- <span class="text-suffix">固定时间就诊:</span>
- <label><input type="checkbox" :checked="form.regularVisitNone" @change="updateForm('regularVisitNone',true)" /> 无</label>
- <label><input type="checkbox" :checked="!form.regularVisitNone" @change="updateForm('regularVisitNone',false)" /> 有(原因:</label>
- <input :value="form.regularVisitReason" class="inline-input small" placeholder="" @input="onInlineInput('regularVisitReason',$event)" />
- <span class="text-suffix">,频率:___次/月)</span>
- </template>
- <template v-else>固定时间就诊:{{ printCheck(form.regularVisitNone) }} 无 {{ printCheck(!form.regularVisitNone) }} 有(原因:{{ form.regularVisitReason }} ,频率:___次/月)</template>
- </td>
- </tr>
- <tr>
- <td colspan="5" class="disease-row">
- <template v-if="!isTextMode">
- <span class="text-suffix">近一年内住院情况:</span>
- <label><input type="checkbox" :checked="form.hospitalizationNone" @change="updateForm('hospitalizationNone',true)" /> 未住院</label>
- <label><input type="checkbox" :checked="!form.hospitalizationNone" @change="updateForm('hospitalizationNone',false)" /> 住过院(住院次数:<input :value="form.hospitalizationCount" class="inline-input tiny" placeholder="" @input="onInlineInput('hospitalizationCount',$event)" /> 次)</label>
- </template>
- <template v-else>近一年内住院情况:{{ printCheck(form.hospitalizationNone) }} 未住院 {{ printCheck(!form.hospitalizationNone) }} 住过院(住院次数:{{ form.hospitalizationCount }} 次)</template>
- </td>
- </tr>
- <tr>
- <td colspan="5" class="disease-row">
- <template v-if="!isTextMode">
- <span class="text-suffix">近一年内急诊情况:</span>
- <label><input type="checkbox" :checked="form.emergencyNone" @change="updateForm('emergencyNone',true)" /> 未去过</label>
- <label><input type="checkbox" :checked="!form.emergencyNone" @change="updateForm('emergencyNone',false)" /> 去过急诊(去急诊次数:<input :value="form.emergencyCount" class="inline-input tiny" placeholder="" @input="onInlineInput('emergencyCount',$event)" /> 次)</label>
- </template>
- <template v-else>近一年内急诊情况:{{ printCheck(form.emergencyNone) }} 未去过 {{ printCheck(!form.emergencyNone) }} 去过急诊(去急诊次数:{{ form.emergencyCount }} 次)</template>
- </td>
- </tr>
- <!-- 不适症状 -->
- <tr>
- <td class="lbl multi-line">不适症状<br/>(近一个<br/>月内情况)</td>
- <td colspan="6" class="symptom-cell">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.discomfortSymptomsNone" @change="updateForm('discomfortSymptomsNone',true);form.discomfortSymptomsList=[]" /> 无</label>
- <br/>
- <label><input type="checkbox" :checked="!form.discomfortSymptomsNone" @change="updateForm('discomfortSymptomsNone',false)" /> 有(可多选)</label>
- <div v-if="!form.discomfortSymptomsNone" class="symptom-list">
- <label v-for="s in symptomOptions" :key="s" class="symptom-item">
- <input type="checkbox" :checked="form.discomfortSymptomsList.includes(s)" @change="toggleArrayItem('discomfortSymptomsList',s)" /> {{ s }}
- </label>
- <span>其他:<input :value="form.discomfortSymptomsOther" class="inline-input small" placeholder="" @input="onInlineInput('discomfortSymptomsOther',$event)" /></span>
- </div>
- </template>
- <template v-else>
- {{ printCheck(form.discomfortSymptomsNone) }} 无
- <template v-if="!form.discomfortSymptomsNone">{{ printCheck(true) }} 有:{{ form.discomfortSymptomsList.join('、') }} {{ form.discomfortSymptomsOther }}</template>
- </template>
- </td>
- </tr>
- <!-- 过敏史 -->
- <tr>
- <td class="lbl multi-line" rowspan="3">过敏史</td>
- <td colspan="6" class="allergy-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.allergyDrugNone" @change="updateForm('allergyDrugNone',true);updateForm('allergyDrugDetail','')" /> 无药物过敏</label>
- <label><input type="checkbox" :checked="!form.allergyDrugNone" @change="updateForm('allergyDrugNone',false)" /> 药物过敏:</label>
- <input :value="form.allergyDrugDetail" class="inline-input large" placeholder="" @input="onInlineInput('allergyDrugDetail',$event)" />
- </template>
- <template v-else>{{ printCheck(form.allergyDrugNone) }} 无药物过敏 {{ printCheck(!form.allergyDrugNone) }} 药物过敏:{{ form.allergyDrugDetail }}</template>
- </td>
- </tr>
- <tr>
- <td colspan="6" class="allergy-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.allergyFoodNone" @change="updateForm('allergyFoodNone',true);updateForm('allergyFoodDetail','')" /> 无食物过敏</label>
- <label><input type="checkbox" :checked="!form.allergyFoodNone" @change="updateForm('allergyFoodNone',false)" /> 食物过敏:</label>
- <input :value="form.allergyFoodDetail" class="inline-input large" placeholder="" @input="onInlineInput('allergyFoodDetail',$event)" />
- </template>
- <template v-else>{{ printCheck(form.allergyFoodNone) }} 无食物过敏 {{ printCheck(!form.allergyFoodNone) }} 食物过敏:{{ form.allergyFoodDetail }}</template>
- </td>
- </tr>
- <tr>
- <td colspan="6" class="allergy-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.allergyEnvNone" @change="updateForm('allergyEnvNone',true);updateForm('allergyEnvDetail','')" /> 无环境过敏</label>
- <label><input type="checkbox" :checked="!form.allergyEnvNone" @change="updateForm('allergyEnvNone',false)" /> 环境过敏:</label>
- <input :value="form.allergyEnvDetail" class="inline-input large" placeholder="" @input="onInlineInput('allergyEnvDetail',$event)" />
- </template>
- <template v-else>{{ printCheck(form.allergyEnvNone) }} 无环境过敏 {{ printCheck(!form.allergyEnvNone) }} 环境过敏:{{ form.allergyEnvDetail }}</template>
- </td>
- </tr>
- <!-- 老年综合征 -->
- <tr>
- <td class="lbl multi-line" rowspan="9">老年综合<br/>征</td>
- <td colspan="6" class="syndrome-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.fallNone" @change="updateForm('fallNone',true);updateForm('fallDetail','')" /> 无跌倒</label>
- <label><input type="checkbox" :checked="!form.fallNone" @change="updateForm('fallNone',false)" /> 有跌倒(</label>
- <input :value="form.fallDetail" class="inline-input medium" placeholder="详情" @input="onInlineInput('fallDetail',$event)" />
- <span>)</span>
- </template>
- <template v-else>{{ printCheck(form.fallNone) }} 无跌倒 {{ printCheck(!form.fallNone) }} 有跌倒({{ form.fallDetail }})</template>
- </td>
- </tr>
- <tr>
- <td colspan="6" class="syndrome-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.memoryDeclineNone" @change="updateForm('memoryDeclineNone',true);updateForm('memoryDeclineDetail','')" /> 无记忆力减退</label>
- <label><input type="checkbox" :checked="!form.memoryDeclineNone" @change="updateForm('memoryDeclineNone',false)" /> 有记忆力减退(</label>
- <input :value="form.memoryDeclineDetail" class="inline-input medium" placeholder="详情" @input="onInlineInput('memoryDeclineDetail',$event)" />
- <span>)</span>
- </template>
- <template v-else>{{ printCheck(form.memoryDeclineNone) }} 无记忆力减退 {{ printCheck(!form.memoryDeclineNone) }} 有记忆力减退({{ form.memoryDeclineDetail }})</template>
- </td>
- </tr>
- <tr>
- <td colspan="6" class="syndrome-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.weightLossNone" @change="updateForm('weightLossNone',true);updateForm('weightLossWeight','')" /> 无体重下降</label>
- <label><input type="checkbox" :checked="!form.weightLossNone" @change="updateForm('weightLossNone',false)" /> 有体重下降(半年内下降</label>
- <input :value="form.weightLossWeight" class="inline-input tiny" placeholder="kg" @input="onInlineInput('weightLossWeight',$event)" />
- <span>kg)</span>
- </template>
- <template v-else>{{ printCheck(form.weightLossNone) }} 无体重下降 {{ printCheck(!form.weightLossNone) }} 有体重下降(半年内下降{{ form.weightLossWeight }}kg)</template>
- </td>
- </tr>
- <tr>
- <td colspan="6" class="syndrome-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.urinaryIncontinenceNone" @change="updateForm('urinaryIncontinenceNone',true);updateForm('urinaryIncontinenceCount','')" /> 无尿失禁</label>
- <label><input type="checkbox" :checked="!form.urinaryIncontinenceNone" @change="updateForm('urinaryIncontinenceNone',false)" /> 有尿失禁(</label>
- <input :value="form.urinaryIncontinenceCount" class="inline-input small" placeholder="次数/日" @input="onInlineInput('urinaryIncontinenceCount',$event)" />
- <span>次/日)</span>
- </template>
- <template v-else>{{ printCheck(form.urinaryIncontinenceNone) }} 无尿失禁 {{ printCheck(!form.urinaryIncontinenceNone) }} 有尿失禁({{ form.urinaryIncontinenceCount }}次/日)</template>
- </td>
- </tr>
- <tr>
- <td colspan="6" class="syndrome-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.sleepDisorderNone" @change="updateForm('sleepDisorderNone',true);form.sleepDisorderTypes=[]" /> 无睡眠障碍</label>
- <label><input type="checkbox" :checked="!form.sleepDisorderNone" @change="updateForm('sleepDisorderNone',false)" /> 有睡眠障碍(</label>
- <template v-if="!form.sleepDisorderNone">
- <label v-for="st in ['入睡困难','早醒','夜间易醒','多梦']" :key="st" style="margin-right:4px;">
- <input type="checkbox" :checked="form.sleepDisorderTypes.includes(st)" @change="toggleArrayItem('sleepDisorderTypes',st)" /> {{ st }}
- </label>
- <span>其他:<input :value="form.sleepDisorderOther" class="inline-input small" placeholder="" @input="onInlineInput('sleepDisorderOther',$event)" /></span>
- </template>
- <span>)</span>
- </template>
- <template v-else>{{ printCheck(form.sleepDisorderNone) }} 无睡眠障碍 {{ printCheck(!form.sleepDisorderNone) }} 有睡眠障碍({{ [...form.sleepDisorderTypes, form.sleepDisorderOther].filter(Boolean).join('、') }})</template>
- </td>
- </tr>
- <tr>
- <td colspan="6" class="syndrome-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.painNone" @change="updateForm('painNone',true);updateForm('painPart','')" /> 无疼痛</label>
- <label><input type="checkbox" :checked="!form.painNone" @change="updateForm('painNone',false)" /> 有疼痛(部位:</label>
- <input :value="form.painPart" class="inline-input medium" placeholder="" @input="onInlineInput('painPart',$event)" />
- <span>)</span>
- </template>
- <template v-else>{{ printCheck(form.painNone) }} 无疼痛 {{ printCheck(!form.painNone) }} 有疼痛(部位:{{ form.painPart }})</template>
- </td>
- </tr>
- <tr>
- <td colspan="6" class="syndrome-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.visionAbnormalNone" @change="updateForm('visionAbnormalNone',true);form.visionAbnormalTypes=[]" /> 无视力异常</label>
- <label><input type="checkbox" :checked="!form.visionAbnormalNone" @change="updateForm('visionAbnormalNone',false)" /> 有视力异常(</label>
- <template v-if="!form.visionAbnormalNone">
- <label v-for="vt in ['远视','近视','散光','白内障','青光眼']" :key="vt" style="margin-right:4px;">
- <input type="checkbox" :checked="form.visionAbnormalTypes.includes(vt)" @change="toggleArrayItem('visionAbnormalTypes',vt)" /> {{ vt }}
- </label>
- <span>程度:<input :value="form.visionAbnormalDegree" class="inline-input small" placeholder="" @input="onInlineInput('visionAbnormalDegree',$event)" /></span>
- </template>
- <span>)</span>
- </template>
- <template v-else>{{ printCheck(form.visionAbnormalNone) }} 无视力异常 {{ printCheck(!form.visionAbnormalNone) }} 有视力异常({{ [...form.visionAbnormalTypes, form.visionAbnormalDegree].filter(Boolean).join('、') }})</template>
- </td>
- </tr>
- <tr>
- <td colspan="6" class="syndrome-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.hearingLossNone" @change="updateForm('hearingLossNone',true);updateForm('hearingLossDetail','')" /> 无听力障碍</label>
- <label><input type="checkbox" :checked="!form.hearingLossNone" @change="updateForm('hearingLossNone',false)" /> 有听力障碍(</label>
- <input :value="form.hearingLossDetail" class="inline-input medium" placeholder="详情" @input="onInlineInput('hearingLossDetail',$event)" />
- <span>)</span>
- </template>
- <template v-else>{{ printCheck(form.hearingLossNone) }} 无听力障碍 {{ printCheck(!form.hearingLossNone) }} 有听力障碍({{ form.hearingLossDetail }})</template>
- </td>
- </tr>
- <tr>
- <td colspan="6" class="syndrome-row">
- <template v-if="!isTextMode">
- <label><input type="checkbox" :checked="form.mentalStatusNone" @change="updateForm('mentalStatusNone',true);form.mentalStatusList=[]" /> 无精神问题</label>
- <label><input type="checkbox" :checked="!form.mentalStatusNone" @change="updateForm('mentalStatusNone',false)" /> 有(可多选)</label>
- <div v-if="!form.mentalStatusNone" class="mental-list">
- <label v-for="m in mentalOptions" :key="m" class="mental-item">
- <input type="checkbox" :checked="form.mentalStatusList.includes(m)" @change="toggleArrayItem('mentalStatusList',m)" /> {{ m }}
- </label>
- <span>其他:<input :value="form.mentalStatusOther" class="inline-input small" placeholder="" @input="onInlineInput('mentalStatusOther',$event)" /></span>
- </div>
- </template>
- <template v-else>
- {{ printCheck(form.mentalStatusNone) }} 无精神问题
- <template v-if="!form.mentalStatusNone">{{ printCheck(true) }} 有:{{ form.mentalStatusList.join('、') }} {{ form.mentalStatusOther }}</template>
- </template>
- </td>
- </tr>
- <!-- 语言表达 -->
- <tr>
- <td class="lbl">语言表达</td>
- <td colspan="6" class="check-cell">
- <template v-if="!isTextMode">
- <label v-for="le in ['清晰','含糊','失语','方言']" :key="le"><input type="checkbox" :checked="form.languageExpression.includes(le)" @change="toggleArrayItem('languageExpression',le)" /> {{ le }}</label>
- <span>其他:<input :value="form.languageExpressionOther" class="inline-input small" placeholder="" @input="onInlineInput('languageExpressionOther',$event)" /></span>
- </template>
- <template v-else>
- <template v-for="le in ['清晰','含糊','失语','方言']" :key="le">{{ printCheck(form.languageExpression.includes(le)) }} {{ le }} </template>
- 其他:{{ form.languageExpressionOther }}
- </template>
- </td>
- </tr>
- <!-- 备注 -->
- <tr>
- <td class="lbl">备注</td>
- <td colspan="6">
- <template v-if="!isTextMode">
- <textarea v-model="form.otherNotes" rows="3" class="remark-textarea" placeholder="请输入备注信息" @input="emitForm"></textarea>
- </template>
- <template v-else>{{ form.otherNotes || '无' }}</template>
- </td>
- </tr>
- <!-- 签名区域:签章(2) + 乙方(2) + 签名(3) = 7列 -->
- <tr>
- <td class="lbl" rowspan="2" colspan="2">签章</td>
- <td colspan="2">乙方(入住人/监护人)签章:</td>
- <td colspan="3">
- <SignatureItem v-model="form.partyBSign" :is-text-mode="isTextMode" />
- </td>
- </tr>
- <tr>
- <td colspan="2">丙方(机构负责人)签章:</td>
- <td colspan="3">
- <SignatureItem v-model="form.partyCSign" :is-text-mode="isTextMode" />
- </td>
- </tr>
- <tr>
- <td class="lbl" colspan="2">签署日期</td>
- <td colspan="5">
- <FieldItem :model-value="form.signDate" :is-text-mode="isTextMode" type="date" width="180px" @update:model-value="(v:any)=>updateForm('signDate',v)" />
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </template>
- <style scoped lang="scss">
- /* A4纸宽度适配:210mm × 297mm,考虑打印边距后内容区约 190mm */
- .check-in-registration {
- width: 210mm;
- max-width: 100%;
- margin: 0 auto;
- font-family: 'SimSun', 'Microsoft YaHei', serif;
- font-size: 14px;
- color: #333;
- background: #fff;
- padding: 4mm;
- /* 打印模式优化:A4纸尺寸 */
- @media print {
- width: 210mm !important;
- max-width: 210mm;
- padding: 0;
- border: none;
- margin: 0;
- box-sizing: border-box;
- }
- }
- .doc-title {
- text-align: center;
- font-size: 22px;
- font-weight: bold;
- letter-spacing: 8px;
- margin: 16px 0 12px;
- color: #000;
- }
- .doc-meta {
- display: flex;
- justify-content: space-between;
- margin-bottom: 10px;
- font-size: 14px;
- }
- /* 表格基础样式 - A4纸适配 */
- .reg-table {
- width: 100%;
- border-collapse: collapse;
- table-layout: fixed; /* 固定表格布局,按比例分配列宽 */
- font-size: 13px;
- td {
- border: 1px solid #333;
- padding: 3mm 2mm;
- vertical-align: middle;
- word-break: break-all;
- }
- /* 打印模式 */
- @media print {
- td {
- border-color: #000;
- padding: 2mm 1.5mm;
- }
- }
- }
- /* 标签单元格 - 紧凑型,只留最小padding */
- .lbl {
- background-color: #f5f7fa;
- font-weight: bold;
- text-align: center;
- white-space: nowrap;
- padding: 2mm 0mm !important; /* 标签列更紧凑 */
- &.multi-line {
- line-height: 1.4;
- padding: 4px;
- }
- /* 打印模式 */
- @media print {
- background-color: #f0f0f0 !important;
- -webkit-print-color-adjust: exact;
- print-color-adjust: exact;
- }
- }
- /* 列宽定义 - 已改用内联style精确控制 */
- /* .w80 { width: 80px; }
- .w120 { width: 120px; }
- .w60 { width: 60px; }
- .w90 { width: 90px; }
- .w50 { width: 50px; } */
- /* 单选格 */
- .radio-cell {
- white-space: nowrap;
- label {
- margin-right: 12px;
- cursor: pointer;
- input[type="radio"] {
- margin-right: 2px;
- }
- }
- }
- /* 多选格 */
- .check-cell {
- label {
- margin-right: 16px;
- cursor: pointer;
- white-space: nowrap;
- input[type="checkbox"] {
- margin-right: 2px;
- }
- }
- @media print {
- label {
- margin-right: 12px;
- }
- }
- }
- /* 照片单元格 - 最右侧第7列,由colgroup控制宽度 */
- .photo-cell {
- text-align: center;
- vertical-align: top !important;
- padding: 2mm 1mm;
- background: #fafafa;
- .photo-box {
- width: 31mm;
- height: 40mm;
-
- border: 1px solid #ddd;
- display: flex;
- align-items: center;
- justify-content: center;
- overflow: hidden;
- background: #fff;
- .elder-photo {
- max-width: 100%;
- max-height: 100%;
- object-fit: cover;
- }
- .photo-placeholder {
- color: #999;
- font-size: 14px;
- }
- }
- @media print {
- background: #fff !important;
- }
- }
- /* 行内输入框 */
- .inline-input {
- border: 1px solid #dcdfe6;
- border-radius: 3px;
- padding: 2px 6px;
- font-size: 13px;
- outline: none;
- vertical-align: middle;
- background: #fff;
- &:focus {
- border-color: #409eff;
- }
- &.tiny { width: 40px; }
- &.small { width: 80px; }
- &.medium { width: 140px; }
- &.large { width: 280px; }
- }
- /* 文本前后缀 */
- .text-prefix {
- display: inline-block;
- margin-left: 20px;
- }
- .ml20 { margin-left: 20px; }
- .text-suffix {
- margin: 0 4px;
- white-space: nowrap;
- }
- /* 疾病行 */
- .disease-row {
- label {
- white-space: nowrap;
- input[type="checkbox"] { margin-right: 2px; }
- }
- }
- /* 不适症状 */
- .symptom-cell {
- line-height: 1.8;
- .symptom-list {
- display: flex;
- flex-wrap: wrap;
- gap: 4px 12px;
- margin-top: 6px;
- padding: 8px;
- background: #fafafa;
- border-radius: 4px;
- .symptom-item {
- margin: 0;
- }
- }
- }
- /* 过敏行 */
- .allergy-row {
- label {
- white-space: nowrap;
- input[type="checkbox"] { margin-right: 2px; }
- }
- }
- /* 老年综合征行 */
- .syndrome-row {
- label {
- white-space: nowrap;
- input[type="checkbox"] { margin-right: 2px; }
- }
- }
- /* 精神状态列表 */
- .mental-list {
- display: flex;
- flex-wrap: wrap;
- gap: 4px 12px;
- margin-top: 6px;
- padding: 8px;
- background: #fafafa;
- border-radius: 4px;
- .mental-item {
- margin: 0;
- }
- }
- /* 备注文本域 */
- .remark-textarea {
- width: 98%;
- border: 1px solid #dcdfe6;
- border-radius: 4px;
- padding: 6px 8px;
- font-size: 13px;
- font-family: inherit;
- resize: vertical;
- outline: none;
- box-sizing: border-box;
- &:focus {
- border-color: #409eff;
- }
- }
- /* 打印模式全局样式 */
- @media print {
-
- .check-in-registration {
- font-size: 12pt;
- }
- .doc-title {
- font-size: 18pt;
- }
- .reg-table {
- font-size: 11pt;
- }
- .inline-input,
- .remark-textarea {
- border: none;
- border-bottom: 1px solid #333;
- background: transparent;
- }
- .photo-box {
- border: 1px solid #333;
- }
- .symptom-list,
- .mental-list {
- background: transparent;
- border: none;
- }
- }
- </style>
|