|
|
@@ -0,0 +1,337 @@
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <div id="printMe" class="printMe" style="text-align: center;">
|
|
|
+ <h1 style="font-size: 28px;">德州市第七人民医院</h1>
|
|
|
+ <h3 style="font-size: 24px;">MoCA蒙特利尔认知评估量表</h3>
|
|
|
+ <hr style="margin: 0px 0;">
|
|
|
+ <div style="text-align: left; display: flex; gap: 20px; flex-wrap: wrap;">
|
|
|
+ <p style="flex: 1 1 100px;"><strong>姓名:</strong>{{defaultVal.name}}</p>
|
|
|
+ <p style="flex: 1 1 100px;"><strong>性别:</strong>{{defaultVal.gender === 1 ? '女' : '男'}}</p>
|
|
|
+ <p style="flex: 1 1 100px;"><strong>年龄:</strong>{{defaultVal.age}}</p>
|
|
|
+ <p style="flex: 1 1 100px;"><strong>教育年限:</strong>{{getLabelForValue(defaultVal.education,dict.type.education_type)}}</p>
|
|
|
+ </div>
|
|
|
+ <hr style="margin: 4px 0;">
|
|
|
+ <table style="width: 100%; border-collapse: collapse;">
|
|
|
+ <thead>
|
|
|
+ <tr>
|
|
|
+ <th style="border: 1px solid #000; padding: 4px;text-align: left;" colspan="3">视空间与执行能力({{calculateSum(32,33,38,39,40)}}/5)</th>
|
|
|
+ <th style="border: 1px solid #000; padding: 4px;text-align: left;" colspan="3">命名({{calculateSum(41,42,43)}}/3)</th>
|
|
|
+ <th style="border: 1px solid #000; padding: 4px;text-align: left;" colspan="4">注意(6/6)</th>
|
|
|
+ </tr>
|
|
|
+ </thead>
|
|
|
+
|
|
|
+ <tbody>
|
|
|
+ <tr>
|
|
|
+ <!-- 视空间与执行能力 -->
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">连线</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">复制立方体</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">画钟表</td>
|
|
|
+ <!-- 命名 -->
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">狮子</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">犀牛</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">骆驼</td>
|
|
|
+ <!-- 注意 -->
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">顺背</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">倒背</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">敲打桌面</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">连续减7</td>
|
|
|
+ </tr>
|
|
|
+ </tbody>
|
|
|
+ <tbody>
|
|
|
+ <tr>
|
|
|
+ <!-- 视空间与执行能力 -->
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">{{reviewPrint.reviewIdScoreMap['32']}}</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">{{reviewPrint.reviewIdScoreMap['33']}}</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">{{reviewPrint.reviewIdScoreMap['38']+reviewPrint.reviewIdScoreMap['39']+reviewPrint.reviewIdScoreMap['40']}}/3</td>
|
|
|
+ <!-- 命名 -->
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">{{reviewPrint.reviewIdScoreMap['41']}}</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">{{reviewPrint.reviewIdScoreMap['42']}}</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">{{reviewPrint.reviewIdScoreMap['43']}}</td>
|
|
|
+ <!-- 注意 -->
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">{{reviewPrint.reviewIdScoreMap['49']}}</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">{{reviewPrint.reviewIdScoreMap['50']}}</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">{{reviewPrint.reviewIdScoreMap['51']}}</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">{{calculateSum(52,53,54,55,56)}}/3</td>
|
|
|
+ </tr>
|
|
|
+ </tbody>
|
|
|
+
|
|
|
+ <thead>
|
|
|
+ <tr>
|
|
|
+ <th style="border: 1px solid #000; padding: 4px;text-align: left;" colspan="3">语言(3/3)</th>
|
|
|
+ <th style="border: 1px solid #000; padding: 4px;text-align: left;" colspan="2">抽象(2/2)</th>
|
|
|
+ <th style="border: 1px solid #000; padding: 4px;text-align: left;" colspan="5">延迟记忆(5/5)</th>
|
|
|
+ </tr>
|
|
|
+ </thead>
|
|
|
+
|
|
|
+ <tbody>
|
|
|
+ <tr>
|
|
|
+ <!-- 语言 -->
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">重复一</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">重复二</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">流畅性</td>
|
|
|
+ <!-- 抽象 -->
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">语言相似性一</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">语言相似性二</td>
|
|
|
+ <!-- 延迟记忆 -->
|
|
|
+ <th style="border: 1px solid #000; padding: 4px;" colspan="5"></th>
|
|
|
+ </tr>
|
|
|
+ </tbody>
|
|
|
+
|
|
|
+ <tbody>
|
|
|
+ <tr>
|
|
|
+ <!-- 语言 -->
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">1</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">1</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">1</td>
|
|
|
+ <!-- 抽象 -->
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">1</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">1</td>
|
|
|
+ <!-- 延迟记忆 -->
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;" colspan="5">1/5</td>
|
|
|
+ </tr>
|
|
|
+ </tbody>
|
|
|
+
|
|
|
+ <thead>
|
|
|
+ <tr>
|
|
|
+ <th style="border: 1px solid #000; padding: 4px;text-align: left;" colspan="10">定向(3/3)</th>
|
|
|
+ </tr>
|
|
|
+ </thead>
|
|
|
+
|
|
|
+ <tbody>
|
|
|
+ <tr>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">日期</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">月份</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">年代</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">星期几</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">地点</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">城市</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;" colspan="4"></td>
|
|
|
+ </tr>
|
|
|
+ </tbody>
|
|
|
+
|
|
|
+ <tbody>
|
|
|
+ <tr>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">1</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">1</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">1</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">1</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">1</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;">1</td>
|
|
|
+ <td style="border: 1px solid #000; padding: 4px;" colspan="4"></td>
|
|
|
+ </tr>
|
|
|
+ </tbody>
|
|
|
+
|
|
|
+ </table>
|
|
|
+
|
|
|
+ <div style="display: flex; justify-content: space-between; align-items: center;">
|
|
|
+ <div id="a" style="margin-left: 20px; display: flex; gap: 20px;">
|
|
|
+ <!-- 立方体画图 -->
|
|
|
+ <div style="display: flex; flex-direction: column;">
|
|
|
+ <span>立方体画图:</span>
|
|
|
+ <img src="https://hcp-yaorong.oss-cn-beijing.aliyuncs.com/review/0137cac9092f402ca186d045fb8ce0e9.png" alt="图片1" style="width: 80px; height: 80px;">
|
|
|
+ </div>
|
|
|
+ <!-- 钟表画图 -->
|
|
|
+ <div style="display: flex; flex-direction: column;">
|
|
|
+ <span>钟表画图:</span>
|
|
|
+ <img src="https://hcp-yaorong.oss-cn-beijing.aliyuncs.com/review/0137cac9092f402ca186d045fb8ce0e9.png" alt="图片2" style="width: 80px; height: 80px;">
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div id="b" style="margin-right: 20px;">
|
|
|
+ <span>总分:</span>
|
|
|
+ <div class="number-with-line">
|
|
|
+ <span class="number">20</span>
|
|
|
+ <span class="line"></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div style="display: flex; justify-content: center; align-items: center;">
|
|
|
+ <dynamic-chart
|
|
|
+ chartType="bar"
|
|
|
+ :chartData="barData"
|
|
|
+ title="认知域柱状图"
|
|
|
+ width="800px"
|
|
|
+ height="200px"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div style="display: flex; justify-content: center; align-items: center;">
|
|
|
+ <dynamic-chart
|
|
|
+ chartType="line"
|
|
|
+ :chartData="barData1"
|
|
|
+ title="认知域柱状图"
|
|
|
+ width="800px"
|
|
|
+ height="200px"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div style="text-align: left;">
|
|
|
+ <div style="display: flex; justify-content: space-between; align-items: center;">
|
|
|
+ <p style="margin-left: 40px;"><strong>参考结论:</strong>不正确状态</p>
|
|
|
+ <p style="margin-right: 60px;"><strong>日期:</strong>2024.11.16</p>
|
|
|
+ </div>
|
|
|
+ <div style="text-align: right; margin-right: 120px;">
|
|
|
+ <p><strong>测评师签字:</strong></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <hr>
|
|
|
+
|
|
|
+ <div style="text-align: right;">
|
|
|
+ <p>(本报告只作为临床参考)</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import DynamicChart from '../../../../components/Chart/DynamicChart.vue'
|
|
|
+export default {
|
|
|
+ dicts: ['education_type'],
|
|
|
+ components: {
|
|
|
+ DynamicChart
|
|
|
+ },
|
|
|
+ props:{
|
|
|
+ defaultVal: {
|
|
|
+ type: Object,
|
|
|
+ required: true
|
|
|
+ },
|
|
|
+ reviewPrint:{
|
|
|
+ type: Object,
|
|
|
+ required: true
|
|
|
+ },
|
|
|
+ reviewTime: {
|
|
|
+ type: String,
|
|
|
+ required: ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch:{
|
|
|
+ reviewPrint:{
|
|
|
+ handler(newData){
|
|
|
+ this.initMMSE()
|
|
|
+ },
|
|
|
+ deep: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ // 柱状图数据
|
|
|
+ barData: [
|
|
|
+ { name: '定向力', value: 5, total: 10 },
|
|
|
+ { name: '记忆力', value: 2, total: 3 },
|
|
|
+ { name: '计算力', value: 3, total: 5 },
|
|
|
+ { name: '感知力', value: 1, total: 2 },
|
|
|
+ { name: '语言能力', value: 4, total: 5 },
|
|
|
+ { name: '执行力', value: 2, total: 5 },
|
|
|
+ ],
|
|
|
+ barData1: [
|
|
|
+ { name: '2025.1.12', value: 19 },
|
|
|
+ { name: '2025.1.25', value: 21 },
|
|
|
+ { name: '2025.2.11', value: 25 },
|
|
|
+ { name: '2025.2.15', value: 21 },
|
|
|
+ { name: '2025.2.28', value: 26 },
|
|
|
+ { name: '2025.3.11', value: 28 },
|
|
|
+ { name: '2025.3.21', value: 30 },
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ mounted(){
|
|
|
+ this.initMMSE()
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ getLabelForValue(value,educationData) {
|
|
|
+ const matchingItem = educationData.find(item => item.value === value);
|
|
|
+ return matchingItem ? matchingItem.label : '未知';
|
|
|
+ },
|
|
|
+ calculateSum(...numbers) {
|
|
|
+ // 使用 reduce 方法计算总和
|
|
|
+ return this.result = numbers.reduce((sum, num) => sum + this.reviewPrint.reviewIdScoreMap[num], 0);
|
|
|
+ },
|
|
|
+ initMMSE() {
|
|
|
+ // 设置柱状图
|
|
|
+ // this.updatedBarData()
|
|
|
+ // 患者状态 分析
|
|
|
+ this.patientStatus()
|
|
|
+ this.updatedLineData()
|
|
|
+ },
|
|
|
+ updatedLineData(){
|
|
|
+ this.barData1 = this.reviewPrint.reviewTasks.map(task =>{
|
|
|
+ const date = new Date(task.reviewTime);
|
|
|
+ const formattedDate = `${date.getFullYear()}.${date.getMonth() + 1}.${date.getDate()}`;
|
|
|
+ return {
|
|
|
+ name: formattedDate,
|
|
|
+ value: task.totalPoints
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ patientStatus() {
|
|
|
+ let patientStatus = 0;
|
|
|
+ switch (this.defaultVal.education) {
|
|
|
+ case 'A':
|
|
|
+ patientStatus = this.reviewPrint.totalPoints <= 20 ? 1 : 0;
|
|
|
+ break;
|
|
|
+ case 'B':
|
|
|
+ patientStatus = this.reviewPrint.totalPoints <= 22 ? 1 : 0;
|
|
|
+ break;
|
|
|
+ case 'C':
|
|
|
+ patientStatus = this.reviewPrint.totalPoints <= 23 ? 1 : 0;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ // 可以处理未知类别的情况,或者保持status为0
|
|
|
+ console.warn('Unknown defaultVal:', this.defaultVal.totalPoints);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return patientStatus;
|
|
|
+ },
|
|
|
+ formatDate(dateTime) {
|
|
|
+ const date = new Date(dateTime);
|
|
|
+ const year = date.getFullYear();
|
|
|
+ const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始,需要加 1
|
|
|
+ const day = String(date.getDate()).padStart(2, '0');
|
|
|
+ return `${year}-${month}-${day}`;
|
|
|
+ },
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.number-with-line {
|
|
|
+ display: inline-flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+
|
|
|
+.number {
|
|
|
+ font-size: 16px;
|
|
|
+}
|
|
|
+.line {
|
|
|
+ width: 100px;
|
|
|
+ height: 2px;
|
|
|
+ background-color: black;
|
|
|
+}
|
|
|
+
|
|
|
+@page {
|
|
|
+ size: A4;
|
|
|
+ margin: 10mm;
|
|
|
+}
|
|
|
+
|
|
|
+.printMe {
|
|
|
+ /* 避免不必要的空白 */
|
|
|
+ padding: 0;
|
|
|
+ margin: 0;
|
|
|
+}
|
|
|
+
|
|
|
+@media print {
|
|
|
+ body {
|
|
|
+ margin: 0;
|
|
|
+ padding: 0;
|
|
|
+ }
|
|
|
+ #printMe {
|
|
|
+ height: 100vh; /* 限制高度为一页 */
|
|
|
+ overflow: hidden; /* 隐藏超出部分 */
|
|
|
+ }
|
|
|
+ .no-print {
|
|
|
+ display: none; /* 隐藏不需要打印的元素 */
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|