| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122 |
- <template>
- <Dialog v-model="dialogVisible" title="预览" width="60%" scroll>
- <div class="synthetic-ability-print" id="printArea" v-loading="loading">
- <h2>老年人能力评估基本信息表</h2>
- <!-- 评估信息表 -->
- <div class="page">
- <h4>A.1 评估信息表</h4>
- <table style="width: 100%" border="2">
- <tr>
- <td style="width: 180px">A.1.1 评估编号</td>
- <td>{{ dataForm.evaluationCode }}</td>
- </tr>
- <tr>
- <td>A.1.2 评估基准日期</td>
- <td>{{ formatDate(dataForm.evaluatorDate, 'YYYY-MM-DD') }}</td>
- </tr>
- <tr v-if="dataForm.evaluationAgency == '1' && (templateType == 0 || templateType == 1)">
- <td>A.1.4 评估原因</td>
- <td>{{ getDictLabel(DICT_TYPE.EVALUATION_REASON, dataForm.evaluateReasons) }}</td>
- </tr>
- </table>
- </div>
- <!-- 评估对象基本信息表 -->
- <div class="page">
- <h4>A.2 评估对象基本信息表</h4>
- <table style="width: 100%" border="2">
- <tr>
- <td :colspan="templateType == 0 || templateType == 1 ? 2 : ''" style="width: 180px"
- >A.2.1 姓名</td
- >
- <td :style="templateType == 0 || templateType == 1 ? 'width: 100%' : ''">{{
- dataForm.elderName
- }}</td>
- </tr>
- <tr>
- <td :colspan="templateType == 0 || templateType == 1 ? 2 : ''" style="width: 180px"
- >A.2.2 性别</td
- >
- <td :style="templateType == 0 || templateType == 1 ? 'width: 100%' : ''">{{
- dataForm.elderSex == 1 ? '男' : '女'
- }}</td>
- </tr>
- <tr>
- <td :colspan="templateType == 0 || templateType == 1 ? 2 : ''" style="width: 180px"
- >A.2.3 出生日期</td
- >
- <td :style="templateType == 0 || templateType == 1 ? 'width: 100%' : ''">{{
- formatDate(dataForm.birthday, 'YYYY-MM-DD')
- }}</td>
- </tr>
- <template
- v-if="dataForm.evaluationAgency == 1 && (templateType == 0 || templateType == 1)"
- >
- <tr>
- <td colspan="2">A.2.4 身高</td>
- <td>{{ dataForm.elderHeight ? dataForm.elderHeight + ' cm' : '______cm' }}</td>
- </tr>
- <tr>
- <td colspan="2">A.2.5 体重</td>
- <td>{{ dataForm.elderWeight ? dataForm.elderWeight + ' kg' : '______kg' }}</td>
- </tr>
- <tr>
- <td colspan="2">A.2.6 民族</td>
- <td>{{ getDictLabel(DICT_TYPE.NATION_ARR, dataForm.nationId) }}</td>
- </tr>
- <tr>
- <td colspan="2">A.2.7 宗教信仰</td>
- <td>{{ getDictLabel(DICT_TYPE.RELIGIOUS_BELIEF_ARR, dataForm.religiousBelief) }}</td>
- </tr>
- <tr>
- <td colspan="2">A.2.8 公民身份号码</td>
- <td> {{ dataForm.idCard }}</td>
- </tr>
- <tr>
- <td colspan="2">A.2.9 文化程度</td>
- <td>
- <div class="flex">
- <div class="left">
- <span
- v-for="(item, d) in getIntDictOptions(DICT_TYPE.DEGREE_EDUCATION_ARR)"
- :key="item.value"
- :label="item.value"
- class="item-info"
- >{{ d + 1 }} {{ item.label }}</span
- >
- </div>
- <div class="right">{{
- findValueIndex(DICT_TYPE.DEGREE_EDUCATION_ARR, dataForm.degreeEducation)
- }}</div>
- </div>
- </td>
- </tr>
- <tr>
- <td colspan="2">A.2.10 居住情况</td>
- <td>
- <div class="flex">
- <div class="left">
- <span
- v-for="(item, d) in getStrDictOptions(DICT_TYPE.LIVE_ARR)"
- :key="item.value"
- :label="item.value"
- class="item-info"
- >{{ d + 1 }} {{ item.label }}</span
- >
- </div>
- <div class="right">{{
- findValueIndex(DICT_TYPE.LIVE_ARR, dataForm.liveSituation)
- }}</div>
- </div>
- </td>
- </tr>
- <tr>
- <td colspan="2">A.2.11 婚姻状况</td>
- <td>
- <div class="flex">
- <div class="left">
- <span
- v-for="(item, d) in getStrDictOptions(DICT_TYPE.MARITAL_STATUS_ARR)"
- :key="item.value"
- :label="item.value"
- class="item-info"
- >{{ d + 1 }} {{ item.label }}</span
- >
- </div>
- <div class="right">{{
- findValueIndex(DICT_TYPE.MARITAL_STATUS_ARR, dataForm.maritalStatus)
- }}</div>
- </div>
- </td>
- </tr>
- <tr>
- <td colspan="2">A.2.12 医疗费用支付方式(多选)</td>
- <td>
- <div class="flex">
- <div class="left">
- <span
- v-for="(item, d) in getStrDictOptions(DICT_TYPE.MEDICAL_INSURANCE_ARR)"
- :key="item.value"
- :label="item.value"
- class="item-info"
- >{{ d + 1 }} {{ item.label }}</span
- >
- </div>
- <div class="right">{{
- findValueIndex(DICT_TYPE.MEDICAL_INSURANCE_ARR, dataForm.medicalInsurance)
- }}</div>
- </div>
- </td>
- </tr>
- <tr>
- <td colspan="2">A.2.13 经济来源(多选)</td>
- <td>
- <div class="flex">
- <div class="left">
- <span
- v-for="(item, d) in getStrDictOptions(DICT_TYPE.ECONOMY_SOURCE_ARR)"
- :key="item.value"
- :label="item.value"
- class="item-info"
- >{{ d + 1 }} {{ item.label }}</span
- >
- </div>
- <div class="right">{{
- findValueIndex(DICT_TYPE.ECONOMY_SOURCE_ARR, dataForm.economySource)
- }}</div>
- </div>
- </td>
- </tr>
- <tr v-if="templateType != 8">
- <td width="60px" rowspan="5">A.2.14 近 30 天内照护风险事件</td>
- <td>A3.14.1 跌到</td>
- <td>{{ getDictLabel(DICT_TYPE.ACCIDENT_ARR, dataForm.accidentalFall) }}</td>
- </tr>
- <tr v-if="templateType != 8">
- <td>A3.14.2 走失</td>
- <td>{{ getDictLabel(DICT_TYPE.ACCIDENT_ARR, dataForm.accidentalLoss) }}</td>
- </tr>
- <tr v-if="templateType != 8">
- <td>A3.14.3 噎食</td>
- <td>{{ getDictLabel(DICT_TYPE.ACCIDENT_ARR, dataForm.accidentalChoking) }}</td>
- </tr>
- <tr v-if="templateType != 8">
- <td>A3.14.4 自杀、自伤</td>
- <td>{{ getDictLabel(DICT_TYPE.ACCIDENT_ARR, dataForm.accidentalSuicide) }}</td>
- </tr>
- <tr v-if="templateType != 8">
- <td>A3.14.5 其他</td>
- <td>{{ dataForm.accidentalOther }}</td>
- </tr>
- </template>
- </table>
- </div>
- <!-- 补充信息表:信息提供者、疾病诊断、长期服药、健康相关问题(仅能力评估大表填写这些字段) -->
- <div
- class="page"
- v-if="dataForm.evaluationAgency == '1' && (templateType == 0 || templateType == 1)"
- >
- <h4>A.3 补充信息表</h4>
- <table style="width: 100%" border="2">
- <tr>
- <td style="width: 180px">信息提供者姓名</td>
- <td>{{ dataForm.informationProviderName }}</td>
- <td style="width: 140px">与老年人关系</td>
- <td>{{ dataForm.relation }}</td>
- </tr>
- <tr>
- <td>联系人姓名</td>
- <td>{{ dataForm.contactName }}</td>
- <td>联系人电话</td>
- <td>{{ dataForm.contactPhone }}</td>
- </tr>
- <tr>
- <td>疾病诊断(可多选)</td>
- <td colspan="3">{{
- dictLabels(DICT_TYPE.DISEASE_DIAGNOSIS, dataForm.diseaseDiagnosis)
- }}</td>
- </tr>
- <tr>
- <td>长期服药情况</td>
- <td colspan="3">{{ medicationText(dataForm.medicationSituation) }}</td>
- </tr>
- <tr>
- <td>压力性损伤</td>
- <td>{{ getDictLabel(DICT_TYPE.PRESSURE_INJURY, dataForm.pressureInjury) }}</td>
- <td>关节活动度</td>
- <td>{{ motionOfJointText(dataForm.motionOfJoint) }}</td>
- </tr>
- <tr>
- <td>伤口情况(可多选)</td>
- <td>{{ dictLabels(DICT_TYPE.WOUND_SITUATION, dataForm.woundCondition) }}</td>
- <td>特殊护理情况(可多选)</td>
- <td>{{ dictLabels(DICT_TYPE.SPECIAL_CARE, dataForm.specialCareSituation) }}</td>
- </tr>
- <tr>
- <td>疼痛感</td>
- <td>{{ getDictLabel(DICT_TYPE.PAIN, dataForm.pain) }}</td>
- <td>牙齿缺失情况(可多选)</td>
- <td>{{ absenceOfTeethText(dataForm.absenceOfTeeth) }}</td>
- </tr>
- <tr>
- <td>义齿佩戴情况(可多选)</td>
- <td>{{ dictLabels(DICT_TYPE.DENTISTRY_WEAR, dataForm.dentureWearingCondition) }}</td>
- <td>吞咽困难的情形和症状(可多选)</td>
- <td>{{ dictLabels(DICT_TYPE.SYMPTOMS_DYSPHAGIA, dataForm.dysphagia) }}</td>
- </tr>
- <tr>
- <td>营养不良(BMI低于正常值)</td>
- <td>{{ getDictLabel(DICT_TYPE.COMMON_STATUS4, dataForm.malnutrition) }}</td>
- <td>清理呼吸道无效</td>
- <td>{{
- getDictLabel(DICT_TYPE.COMMON_STATUS4, dataForm.ineffectiveAirwayClearance)
- }}</td>
- </tr>
- <tr>
- <td>昏迷</td>
- <td>{{ getDictLabel(DICT_TYPE.COMMON_STATUS4, dataForm.coma) }}</td>
- <td>其他(请补充)</td>
- <td>{{ dataForm.otherSupplements }}</td>
- </tr>
- </table>
- </div>
- <template v-if="dataForm.evaluationAgency == '1'">
- <div class="page" v-for="(item, index) in temArr" :key="item.id + index">
- <h4>{{ item.name }}</h4>
- <table style="width: 100%" border="2">
- <template v-for="(l, index2) in item.list" :key="index2">
- <tr>
- <td colspan="2">{{
- l.type == 'input' ? l.title + ': ' + (l.value ? l.value : '') : l.title
- }}</td>
- </tr>
- <tr v-for="(r, i) in l.options" :key="index2 + i + l.title">
- <td
- :rowspan="l.options.length"
- v-if="i == 0"
- style="text-align: center; width: 50px"
- >{{ l.type == 'checkbox' ? (l.value ? l.value.join() : '') : l.value
- }}{{ l.type == 'checkbox' || index2 == 0 ? '' : '分' }}</td
- >
- <td>{{ r.label }}</td>
- </tr>
- </template>
- <!-- <tr>
- <td colspan="2">总计得分:{{ item.total }}分</td>
- </tr> -->
- </table>
- <div style="margin-top: 12px" v-if="templateType != 8">
- <table style="width: 100%" border="2">
- <tr>
- <td>{{ item.name }}小计:</td>
- </tr>
- <tr>
- <td>
- <div class="mb1">{{ item.total }}分</div>
- (上述{{ item.list.length }}个项目得分综合)
- </td>
- </tr>
- </table>
- <!-- <table style="width: 100%" border="2">-->
- <!-- <tr>-->
- <!-- <td :colspan="item.templateList.length">{{item.name}}分级</td>-->
- <!-- </tr>-->
- <!-- <tr>-->
- <!-- <td v-for="(t, u) in item.templateList" :key="u">-->
- <!-- <div>{{ item.propertiesName }}</div>-->
- <!-- <div>(总分{{ t.minValue }}-{{ t.maxValue }}分)</div>-->
- <!-- </td>-->
- <!-- </tr>-->
- <!-- </table>-->
- </div>
- <div v-if="templateType == 8" style="margin-top: 16px">
- <h4>评估结果</h4>
- <table style="width: 100%" border="2">
- <tr>
- <td style="width: 180px">能力评估最终等级</td>
- <td>
- {{ jsonRes.length > 0 ? jsonRes[0].value : '' }}-{{
- jsonRes.length > 0 ? jsonRes[0].dsc : ''
- }}</td
- >
- </tr>
- <tr>
- <td style="width: 180px">照护评估最终等级</td>
- <td> {{ jsonRes.length > 0 ? jsonRes[9].value : '' }}</td>
- </tr>
- <tr>
- <td style="width: 180px">护理等级</td>
- <td>
- {{
- dataForm.recommendedNursingLevel
- ? findValue(
- nurseLevelList,
- dataForm.recommendedNursingLevel,
- 'id',
- 'nurseLevelName'
- )
- : dataForm && dataForm.elder && dataForm.elder.nurseLevelName
- ? dataForm.elder.nurseLevelName
- : ''
- }}</td
- >
- </tr>
- <tr>
- <td style="width: 180px">日常生活评估等级</td>
- <td>
- {{ jsonRes.length > 0 ? jsonRes[1].dsc : '' }}({{
- jsonRes.length > 0 ? jsonRes[1].value + '分' : ''
- }})</td
- >
- </tr>
- <tr>
- <td style="width: 180px">认知能力评估等级</td>
- <td>
- {{ jsonRes.length > 0 ? jsonRes[2].dsc : '' }}({{
- jsonRes.length > 0 ? jsonRes[2].value + '分' : ''
- }})</td
- >
- </tr>
- <tr>
- <td style="width: 180px">感知与沟通评估等级</td>
- <td>
- {{ jsonRes.length > 0 ? jsonRes[3].dsc : '' }}({{
- jsonRes.length > 0 ? jsonRes[3].value + '分' : ''
- }})</td
- >
- </tr>
- <tr>
- <td style="width: 180px">健康状况评估等级</td>
- <td> {{ jsonRes.length > 0 ? jsonRes[4].dsc : '' }}</td>
- </tr>
- <tr>
- <td style="width: 180px">社会支持评估等级</td>
- <td>
- {{ jsonRes.length > 0 ? jsonRes[7].dsc : '' }}({{
- jsonRes.length > 0 ? jsonRes[7].value + '分' : ''
- }})</td
- >
- </tr>
- </table>
- <table style="width: 100%; margin-top: 10px">
- <tr>
- <td colspan="3">
- <div class="flex-column">
- <div class="flex" style="padding: 16px 0;">
- <span>评估员签名____________________{{ dataForm.evaluator }}____________________</span>
- <span
- >日期___{{ evaluatorDateList[0] }}___年___{{
- evaluatorDateList[1]
- }}___月___{{ evaluatorDateList[2] }}___日</span
- >
- </div>
- <!-- <div class="flex">-->
- <!-- <span>家属签名____________________</span>-->
- <!-- <span>日期_________年_________月_________日</span>-->
- <!-- </div>-->
- </div>
- </td>
- </tr>
- </table>
- </div>
- </div>
- </template>
- <div v-else class="page">
- <h4>第三方评估报告</h4>
- <template v-for="(item, index) in dataForm.syntheticAbilityInfoList" :key="index">
- <table style="width: 100%" border="2">
- <tr>
- <td style="width: 100px">附件名称</td>
- <td>{{ item.fileName }}</td>
- </tr>
- <tr>
- <td>最终评估等级</td>
- <td>{{ item.evaluationLevel }}</td>
- </tr>
- <tr>
- <td>推荐护理等级</td>
- <td>{{ findValue(nurseLevelList, item.nursingLevel, 'id', 'nurseLevelName') }}</td>
- </tr>
- <tr>
- <td>附件内容</td>
- <td>
- <a :href="item.fileUrl">{{ item.fileName }}</a>
- </td>
- </tr>
- </table>
- </template>
- </div>
- <!-- 能力评估报告 -->
- <div class="page" v-if="dataForm.evaluationAgency == '1' && templateType != 8">
- <h4>C.老年人能力评估报告</h4>
- <table style="width: 100%" border="2">
- <tr>
- <td style="width: 200px">C.1一级指标分级</td>
- <td v-for="(c, index) in cellArr" :key="index" class="t-flex" style="border: none">
- <div
- v-for="(item, i) in c"
- :key="i"
- class="flex-1"
- style="display: flex; align-items: center; height: 100%"
- >
- {{ item.evaluationName }} <span v-if="item.evaluationName"> </span>
- </div>
- </td>
- </tr>
- <!-- <tr>-->
- <!-- <td>C.2老年人能力初步等级</td>-->
- <!-- <td colspan="2">-->
- <!-- <div class="flex">-->
- <!-- <div class="left">-->
- <!-- <span-->
- <!-- v-for="(item, index) in evaluations"-->
- <!-- :key="index"-->
- <!-- :label="item.value"-->
- <!-- class="item-info"-->
- <!-- >-->
- <!-- {{ calculateGradingSystem(dataForm.processSequenceList||[],templateType,dataForm.totalScore) }} (总分: {{dataForm.totalScore}})-->
- <!-- </span-->
- <!-- >-->
- <!-- </div>-->
- <!-- <div class="right">{{ active }}</div>-->
- <!-- </div>-->
- <!-- </td>-->
- <!-- </tr>-->
- <!-- <tr>-->
- <!-- <td>C.3等级变更条款</td>-->
- <!-- <td colspan="2">-->
- <!-- <div>-->
- <!-- <span>1.有认知障碍/痴呆、精神疾病者,在原有能力级别上提高一个等级。</span>-->
- <!-- <span>2.近30天内发生过2次及以上跌倒、食、自杀、走失者,在原有能力级别上提高一个等级。</span>-->
- <!-- <span>3.处于昏迷状态者,直接评定为重度失能。</span>-->
- <!-- <span>若初步等级确定为“3重度失能”,则不考虑上述1-3中各情况对最终等级的影响,等级不再提高。</span>-->
- <!-- </div>-->
- <!-- </td>-->
- <!-- </tr>-->
- <tr>
- <td>C.2老年人能力最终等级</td>
- <td colspan="2">
- <div class="flex">
- <div class="left">
- <span
- v-for="(item, index) in evaluations"
- :key="index"
- :label="item.value"
- class="item-info"
- >
- {{
- calculateGradingSystem(
- dataForm.processSequenceList || [],
- templateType,
- dataForm.totalScore
- )
- }}
- (总分: {{ dataForm.totalScore }})
- </span>
- </div>
- <!-- <div class="right">-->
- <!-- {{ active }}-->
- <!-- </div>-->
- </div>
- </td>
- </tr>
- <tr>
- <td colspan="3">
- <div class="flex-column">
- <div class="flex" style="padding: 16px 0;">
- <span>评估员签名____________________{{ dataForm.evaluator }}____________________</span>
- <span
- >日期___{{ evaluatorDateList[0] }}___年___{{
- evaluatorDateList[1]
- }}___月___{{ evaluatorDateList[2] }}___日</span
- >
- </div>
- <div class="flex">
- <span>家属签名____________________</span>
- <span>日期_________年_________月_________日</span>
- </div>
- </div>
- </td>
- </tr>
- <tr>
- <td colspan="3">
- <span class="ml5">注:老年人能力初步等级划分标准</span>
- <div class="mt5" v-if="templateType == 0">
- <template v-for="(item, index) in descArr" :key="item.label">
- <b>{{ index }} {{ item.label }}:</b>
- <div v-for="c in item.desc" :key="c" class="ml5 mb2 mt2">{{ c }}</div>
- </template>
- </div>
- <div v-if="templateType == 1">
- <div class="elderly-level-table">
- <!-- 一级指标等级评估表 -->
- <table>
- <thead>
- <tr>
- <th>一级指标</th>
- <th>能力完好</th>
- <th>轻度受损</th>
- <th>中度受损</th>
- <th>重度受损</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>日常生活活动能力(B1)</td>
- <td>100分</td>
- <td>65-95分</td>
- <td>45-60分</td>
- <td>0-40分</td>
- </tr>
- <tr>
- <td>认知能力(B2)</td>
- <td>16分</td>
- <td>4-15分</td>
- <td>2-3分</td>
- <td>0-1分</td>
- </tr>
- <tr>
- <td>感知觉与沟通能力(B3)</td>
- <td>12分</td>
- <td>4-11分</td>
- <td>2-3分</td>
- <td>0-1分</td>
- </tr>
- </tbody>
- </table>
- <!-- 失能等级对应表 -->
- <table style="margin-top: 20px">
- <thead>
- <tr>
- <th colspan="2"></th>
- <th colspan="4">B2/B3 (以失能等级严重的判断)</th>
- </tr>
- <tr>
- <th>B1失能等级</th>
- <th>B2/B3失能等级</th>
- <th>能力完好</th>
- <th>轻度受损</th>
- <th>中度受损</th>
- <th>重度受损</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td rowspan="4">B1失能等级</td>
- <td>能力完好</td>
- <td>0级</td>
- <td>0级</td>
- <td>1级</td>
- <td>1级</td>
- </tr>
- <tr>
- <td>轻度受损</td>
- <td>1级</td>
- <td>1级</td>
- <td>1级</td>
- <td>2级</td>
- </tr>
- <tr>
- <td>中度受损</td>
- <td>2级</td>
- <td>2级</td>
- <td>2级</td>
- <td>3级</td>
- </tr>
- <tr>
- <td>重度受损</td>
- <td>3级</td>
- <td>3级</td>
- <td>4级</td>
- <td>5级</td>
- </tr>
- </tbody>
- </table>
- <!-- 老年人能力等级对应表 -->
- <div style="margin-top: 20px">
- <h4>老年人能力等级对应</h4>
- <div class="level-descriptions">
- <div v-for="(item, index) in syntheticAbilityRecord2" :key="index">
- <div style="margin-bottom: 10px">
- <span>{{ item.label }}: {{ item.des }}</span>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div style="padding: 18px" v-else>
- {{ getAbilityDesc(templateType) }}
- </div>
- </td>
- </tr>
- </table>
- </div>
- </div>
- <template #footer>
- <el-button @click="handleClosed">取消</el-button>
- <el-button type="primary" v-print="print">打印</el-button>
- </template>
- </Dialog>
- </template>
- <script setup lang="ts">
- import {
- DICT_TYPE,
- getDictLabel,
- getDictOptions,
- getIntDictOptions,
- getStrDictOptions
- } from '@/utils/dict'
- import { getSyntheticAbilityInfoById } from '@/api/elderly/assess/synthetic-ability'
- import { getElderInfoById } from '@/api/elderly/elder/elderly-Info'
- import { formatDate } from '@/utils/formatTime'
- import { getEvaluationProcessConfigList } from '@/api/elderly/assess/evaluation-process'
- import { getEvaluationTemplatesConfigList } from '@/api/elderly/assess/evaluation-process'
- import { calculateGradingSystem, getAbilityDesc, getTemplateType } from '@/utils/evaluation'
- import { formatTimestampYMD } from '@/utils/dateUtil'
- import { getNursingLevelPage } from '@/api/elderly/nursing'
- const message = useMessage() // 消息弹窗
- const { t } = useI18n() // 国际化
- const templateType = ref(0)
- const dialogVisible = ref(false) // 弹窗
- const dataForm = ref({}) // 表单字段
- const loading = ref(false) // 表单的加载中
- const temArr = ref([])
- const dateList = ref([])
- // 评估员签名一行的日期取「评估基准日期」
- const evaluatorDateList = computed(() => {
- const d = (dataForm.value as any).evaluatorDate ? formatDate((dataForm.value as any).evaluatorDate, 'YYYY-MM-DD') : ''
- return d ? d.split('-') : ['', '', '']
- })
- const descArr = ref([
- {
- label: '能力完好',
- desc: ['日常生活活动、精神状态,感知觉与沟通分级均为0,社会参与分级为0或1']
- },
- {
- label: '轻度失能',
- desc: [
- '日常生活活动分级为 0,但精神状态,感知觉与沟通中至少一项为1及以上,或者社会参与的分级为 2',
- '日常生活活动分级为 1,精神状态,感知觉与沟通、社会参与中至少有意向的分级为0或1'
- ]
- },
- {
- label: '能力完好',
- desc: [
- '日常生活活动分级为 1,但精神状态,感知觉与沟通、社会参与均为2,或有一项为 3',
- '日常生活活动分级为 2,且精神状态,感知觉与沟通、社会参与中有1~2项的分级为 1或2'
- ]
- },
- {
- label: '能力完好',
- desc: [
- '日常生活活动的分级为 3:或日常生活活动、精神状态、感知觉与沟通、社会参与分级均为 2',
- '日常生活活动分级为 2,且精神状态、感知觉与沟通、社会参与中至少有一项分级为 3'
- ]
- }
- ])
- const active = ref()
- let syntheticAbilityInfoListTemp = []
- // 广州标准的老年人能力等级划分
- const syntheticAbilityRecord2 = [
- { label: '0级', des: '基本正常', record: '能力完好' },
- { label: '1级', des: '轻度失能', record: '能力轻度受损' },
- { label: '2级', des: '中度失能', record: '能力中度受损' },
- { label: '3级', des: '重度失能I级', record: '能力重度受损' },
- { label: '4级', des: '重度失能II级', record: '能力重度受损' },
- { label: '5级', des: '重度失能III级', record: '能力重度受损' }
- ]
- // 打印
- const print = {
- id: 'printArea',
- extraCss: '',
- popTitle: '', // 打印配置页上方的标题
- extraHead: '', // 最上方的头部文字,附加在head标签上的额外标签,使用逗号分割
- preview: false, // 是否启动预览模式,默认是false
- previewTitle: '能力评估', // 打印预览的标题
- previewPrintBtnLabel: '预览结束,开始打印', // 打印预览的标题下方的按钮文本,点击可进入打印
- zIndex: 20002, // 预览窗口的z-index,默认是20002,最好比默认值更高
- previewBeforeOpenCallback() {
- console.log('正在加载预览窗口!')
- }, // 预览窗口打开之前的callback
- previewOpenCallback() {
- console.log('已经加载完预览窗口,预览打开了!')
- }, // 预览窗口打开时的callback
- beforeOpenCallback() {
- console.log('开始打印之前!')
- }, // 开始打印之前的callback
- openCallback() {
- console.log('执行打印了!')
- }, // 调用打印时的callback
- closeCallback() {
- console.log('关闭了打印工具!')
- }, // 关闭打印的callback(无法区分确认or取消)
- clickMounted() {
- console.log('点击v-print绑定的按钮了!')
- },
- standard: ''
- }
- const loadTemplatesConfigList = async (id) => {
- const res = await getEvaluationTemplatesConfigList({
- pageNo: 1,
- pageSize: 20,
- evaluationTemplateId: id
- })
- return res
- }
- const evaluations: any = ref([])
- // 大表评估
- const getEvaluationList = async (id) => {
- const res = await getEvaluationProcessConfigList({
- pageNo: 1,
- pageSize: 20,
- evaluationProcessId: id
- })
- evaluations.value = [...res, { propertiesName: '未评估' }]
- }
- const cellNum = ref()
- const cellArr = ref([])
- const jsonRes = ref([])
- /** 打开弹窗 */
- const open = async (id) => {
- dialogVisible.value = true
- templateType.value = 0
- try {
- loading.value = true
- const res = await getSyntheticAbilityInfoById(id)
- // 基础信息字段强制从长者信息接口获取,评估记录仅兜底
- const resElder = res.elder || {}
- const elderInfo = res.elderId ? await getElderInfoById(res.elderId) : {}
- const pick = (key: string) => {
- for (const v of [elderInfo[key], resElder[key], res[key]]) {
- if (v !== undefined && v !== null && v !== '') return v
- }
- return ''
- }
- dataForm.value = {
- ...resElder,
- ...res,
- elderSex: pick('elderSex'),
- papersType: pick('papersType'),
- idCard: pick('idCard'),
- birthday: pick('birthday'),
- elderAge: pick('elderAge'),
- nationId: pick('nationId'),
- elderHeight: pick('elderHeight'),
- elderWeight: pick('elderWeight'),
- religiousBelief: pick('religiousBelief'),
- degreeEducation: pick('degreeEducation'),
- maritalStatus: pick('maritalStatus'),
- liveSituation: pick('liveSituation'),
- economySource: pick('economySource'),
- medicalInsurance: pick('medicalInsurance'),
- elderName: pick('elderName')
- }
- syntheticAbilityInfoListTemp = res.syntheticAbilityInfoList
- // 打印的标题
- print.popTitle = +'-' + res.questionnaireName
- // 本院评估
- if (res.evaluationAgency == 1) {
- await getEvaluationList(res.questionnaireId)
- templateType.value = getTemplateType(res.processSequenceList)
- console.log('模板A:', templateType.value)
- if (templateType.value == 8) {
- //一套表
- try {
- jsonRes.value = JSON.parse(res.result)
- } catch (e) {}
- }
- try {
- dateList.value = formatTimestampYMD(res.createDate).split('-')
- } catch (e) {}
- // 形成一个对象,把标题抽出来
- res.syntheticAbilityInfoList.map((item, index) => {
- // if(item.evaluationName.includes('广州')){
- // templateType.value=1
- // }
- let obj = { list: [], templateList: [] }
- obj.name = item.evaluationName
- obj.id = item.id
- obj.total = 0
- JSON.parse(item.evaluationContent).map((e) => {
- if (e.type == 'radio' || e.type == 'checkbox' || e.type == 'input') {
- obj.list.push({
- value: e.value,
- title: e.title,
- options: e.options,
- info: e.info,
- type: e.type
- })
- obj.total += !isNaN(e.value) ? Number(e.value) : 0
- }
- })
- temArr.value.push(obj)
- res.processSequenceList.map(async (r) => {
- if (r.templateName == item.evaluationName) {
- temArr.value[index].templateList = await loadTemplatesConfigList(r.templateId)
- }
- })
- })
- cellArr.value = getArr(res.syntheticAbilityInfoList)
- if (res.syntheticAbilityInfoList.length % 2 != 0) {
- cellArr.value[cellArr.value.length - 1].push({})
- }
- // 找到对应的分数段
- evaluations.value.map((item, index) => {
- if (item.propertiesName == dataForm.value.result) {
- active.value = index
- }
- })
- } else {
- }
- await getNurseLevelList()
- } finally {
- loading.value = false
- }
- }
- defineExpose({ open }) // 提供 open 方法,用于打开弹窗
- // 转化为二维数组
- const getArr = (arr) => {
- const bigArr = []
- let smallArr = []
- arr.forEach((item) => {
- // 将小数组的内容存放到大数组中,且只存放一次【判断小数组是否为空,如果为空就需要往大数组中添加,如果小数组不为空,那么就不会往大数组中添加】
- if (smallArr.length === 0) {
- bigArr.push(smallArr)
- }
- smallArr.push(item)
- if (smallArr.length === 2) {
- smallArr = []
- }
- })
- return bigArr
- }
- // 匹配对应的值
- const findValue = (arr, value, key = 'id', name = 'label') => {
- if (arr) {
- let item = arr.find((item) => item[key] == value)
- return item ? item[name] : ''
- }
- return ''
- }
- // 解析 JSON 字符串数组(兼容已是数组或逗号分隔字符串的情况)
- const parseArr = (val: any): any[] => {
- if (!val) return []
- if (Array.isArray(val)) return val
- try {
- const arr = JSON.parse(val)
- return Array.isArray(arr) ? arr : []
- } catch (e) {
- return String(val)
- .split(',')
- .filter((v) => v !== '')
- }
- }
- // 字典值数组转标签文本,支持 '99-自定义内容' 形式
- const dictLabels = (dictType: string, val: any): string => {
- return parseArr(val)
- .map((v: any) => {
- const idx = String(v).indexOf('-')
- if (idx > -1) {
- const code = String(v).slice(0, idx)
- const extra = String(v).slice(idx + 1)
- return (getDictLabel(dictType, code) || code) + ':' + extra
- }
- return getDictLabel(dictType, v) || v
- })
- .join('、')
- }
- // 牙齿缺失情况(0-3 为表单固定值,2-x/3-x 为字典值)
- const absenceOfTeethText = (val: any): string => {
- const map = { 0: '无缺损', 1: '牙体缺损(如龋齿、楔状缺损)', 2: '牙列缺损', 3: '牙列缺失' }
- return parseArr(val)
- .map((v: any) => {
- const idx = String(v).indexOf('-')
- if (idx > -1) {
- const code = String(v).slice(0, idx)
- const extra = String(v).slice(idx + 1)
- const label = map[code] || code
- if (code === '2')
- return label + ':' + (getDictLabel(DICT_TYPE.DEFECT_OF_DENTITION, extra) || extra)
- if (code === '3')
- return label + ':' + (getDictLabel(DICT_TYPE.DENTISTRY_MISSING, extra) || extra)
- return label + ':' + extra
- }
- return map[v] || v
- })
- .join('、')
- }
- // 关节活动度(1-部位 形式)
- const motionOfJointText = (val: any): string => {
- if (!val) return ''
- const idx = String(val).indexOf('-')
- const code = idx > -1 ? String(val).slice(0, idx) : String(val)
- const extra = idx > -1 ? String(val).slice(idx + 1) : ''
- if (code === '0') return '无,没有影响日常生活功能'
- if (code === '1') return '是,影响日常生活功能' + (extra ? ',部位:' + extra : '')
- if (code === '2') return '无法判断'
- return String(val)
- }
- // 长期服药情况(对象数组:药品名称/服药方法/用药剂量/用药频次)
- const medicationText = (val: any): string => {
- return parseArr(val)
- .map((item: any) =>
- typeof item === 'object'
- ? [item.drugName, item.takeMedicine, item.dosage, item.frequency]
- .filter(Boolean)
- .join(' / ')
- : String(item)
- )
- .filter(Boolean)
- .join(';')
- }
- // 找到对应值的序号(按字典 value 匹配,兼容按 label 匹配)
- const findValueIndex = (arr, value) => {
- if (value) {
- const options = getDictOptions(arr)
- let index = options.findIndex((item) => item.value == value)
- if (index == -1) {
- index = options.findIndex((item) => item.label == value)
- }
- if (index > -1) {
- return index + 1
- }
- return ''
- }
- return ''
- }
- const nurseLevelList = ref([])
- // 获取等级
- const getNurseLevelList = async () => {
- try {
- const data = await getNursingLevelPage({
- pageNum: 1,
- pageSize: 100
- })
- nurseLevelList.value = data.list
- } finally {
- }
- }
- const handleClosed = () => {
- dialogVisible.value = false
- temArr.value = []
- }
- </script>
- <style media="print" lang="scss">
- @page {
- // size: auto;
- margin: 3mm;
- margin-top: 2cm;
- margin-bottom: 2cm;
- }
- @media print {
- html {
- background-color: #ffffff;
- height: auto;
- margin: 0;
- }
- .synthetic-ability-print {
- padding: 10px 15px;
- }
- }
- </style>
- <style lang="scss" scoped>
- .synthetic-ability-print {
- h2 {
- text-align: center;
- font-size: 18px;
- }
- .page {
- padding: 20px;
- table:not([cellpadding]) td,
- table:not([cellpadding]) th {
- padding: 0.7rem;
- }
- h4 {
- font-size: 16px;
- }
- .info {
- display: flex;
- .left,
- .right {
- flex: 1;
- }
- p {
- padding: 10px 0;
- }
- }
- .item-info {
- display: inline-block;
- margin-right: 15px;
- }
- .flex {
- display: flex;
- align-items: center;
- .left {
- flex: 23;
- }
- .right {
- flex: 1;
- text-align: center;
- height: 22px;
- width: 22px;
- border: 1px solid;
- border-radius: 5px;
- }
- }
- .flex-column {
- display: flex;
- flex-direction: column;
- .flex {
- display: flex;
- justify-content: space-between;
- padding: 5px 0;
- }
- }
- .grid {
- display: grid;
- grid-template-columns: 1fr 3fr;
- gap: 10px;
- margin-top: 10px;
- }
- .t-flex {
- display: flex;
- .flex-1 {
- flex: 1;
- }
- }
- }
- .table {
- page-break-after: always; /* 可以尝试使用此属性来强制分页 */
- }
- }
- .elderly-level-table table {
- width: 100%;
- border-collapse: collapse;
- margin-bottom: 10px;
- }
- .elderly-level-table th,
- .elderly-level-table td {
- border: 1px solid #ddd;
- padding: 8px 12px;
- text-align: center;
- }
- .elderly-level-table th {
- background-color: #f5f7fa;
- font-weight: bold;
- }
- .elderly-level-table tr:nth-child(even) {
- background-color: #fafafa;
- }
- .level-descriptions {
- margin-top: 10px;
- }
- </style>
|