|
|
@@ -0,0 +1,179 @@
|
|
|
+<template>
|
|
|
+ <!-- 舌象分析详情 -->
|
|
|
+ <div class="tongue-analysis">
|
|
|
+ <template v-if="dataset && (dataset.tongueAnalysis.结果 || dataset.faceAnalysis.结果)">
|
|
|
+ <template v-if="dataset.tongueAnalysis && dataset.tongueAnalysis.结果">
|
|
|
+ <el-card class="tongue-exception-wrapper" v-if="showException">
|
|
|
+ <div slot="header" class="card-header-container">
|
|
|
+ <span>异常舌象分析</span>
|
|
|
+ <el-button size="small" type="primary" plain style="float: right;" @click="showException=false">
|
|
|
+ 舌象分析
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ <div class="card-body-container">
|
|
|
+ <el-card v-for="item in dataset.tongueException" :key="item.title" class="inner" size="small">
|
|
|
+ <div class="card__title">{{ item.title }}</div>
|
|
|
+ <div class="card__content">
|
|
|
+ <div style="display: flex;">
|
|
|
+ <el-image :src="item.cover" lazy fit="scale-down" :preview-src-list="[item.cover]"></el-image>
|
|
|
+ <div>
|
|
|
+ <el-tag v-for="value in item.tags" :key="value" type="danger">{{ value }}</el-tag>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <p class="my-2 text-grey" v-for="value in item.descriptions" :key="value">{{ value }}</p>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ <el-card v-else>
|
|
|
+ <div slot="header" class="card-header-container">
|
|
|
+ <span>舌象分析</span>
|
|
|
+ <el-button
|
|
|
+ v-if="dataset.tongueException && dataset.tongueException.length"
|
|
|
+ size="small" type="danger" plain style="float: right;" @click="showException=true">
|
|
|
+ 异常舌象分析
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ <div class="card-body-container">
|
|
|
+ <el-table v-if="dataset.tongueTable" class="result-wrapper" :data="dataset.tongueTable.data" border
|
|
|
+ size="small">
|
|
|
+ <el-table-column
|
|
|
+ v-for="(col, index) in dataset.tongueTable.column" :key="col"
|
|
|
+ :prop="index + ''" :label="col" align="center"
|
|
|
+ >
|
|
|
+ <template v-slot="{row, column}">
|
|
|
+ <div v-html="row[index]"></div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <div v-else class="result-wrapper">{{ dataset.tongueAnalysis.结果 }}</div>
|
|
|
+ <div class="picture-wrapper">
|
|
|
+ <el-image :src="dataset.tongueAnalysis.舌上" lazy fit="scale-down"
|
|
|
+ :preview-src-list="preview"></el-image>
|
|
|
+ <el-image :src="dataset.tongueAnalysis.舌下" lazy fit="scale-down"
|
|
|
+ :preview-src-list="preview"></el-image>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ </template>
|
|
|
+ <el-card v-if="dataset.faceAnalysis && dataset.faceAnalysis.结果">
|
|
|
+ <div slot="header" class="card-header-container">
|
|
|
+ <span>面象分析</span>
|
|
|
+ </div>
|
|
|
+ <div class="card-body-container">
|
|
|
+ <div class="result-wrapper">{{ dataset.faceAnalysis.结果 }}</div>
|
|
|
+ <div class="picture-wrapper">
|
|
|
+ <el-image :src="dataset.faceAnalysis.面象" lazy fit="scale-down" :preview-src-list="preview"></el-image>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ </template>
|
|
|
+ <el-empty v-else-if="!loading" description="暂无数据"></el-empty>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import {getTongueAndFaceAnalysis} from "@/api/diagnosis.js";
|
|
|
+
|
|
|
+export default {
|
|
|
+ props: {
|
|
|
+ dataset: {
|
|
|
+ type: Object,
|
|
|
+ default() { return null; }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ showException: false
|
|
|
+ };
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ preview: function () {
|
|
|
+ return [
|
|
|
+ this.dataset.tongueAnalysis.舌上,
|
|
|
+ this.dataset.tongueAnalysis.舌下,
|
|
|
+ this.dataset.faceAnalysis.面象,
|
|
|
+ ].filter(Boolean);
|
|
|
+ }
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+<style lang="scss" scoped>
|
|
|
+.tongue-analysis {
|
|
|
+ .el-card:not(.inner) {
|
|
|
+ margin: 24px 0;
|
|
|
+
|
|
|
+ &:first-of-type { margin-top: 0 }
|
|
|
+
|
|
|
+ &:last-of-type { margin-bottom: 0 }
|
|
|
+
|
|
|
+ &.tongue-exception-wrapper {
|
|
|
+ .card-body-container {
|
|
|
+ display: grid;
|
|
|
+ grid-template-rows: repeat(1, minmax(0, 1fr));
|
|
|
+ grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
|
+ gap: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .card__title {
|
|
|
+ padding: 6px 12px;
|
|
|
+ color: #F56C6C;
|
|
|
+ }
|
|
|
+
|
|
|
+ .card__content {
|
|
|
+ padding: 6px 12px 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-image {
|
|
|
+ width: 100px;
|
|
|
+ height: 100px;
|
|
|
+ margin-right: 12px;
|
|
|
+ margin-bottom: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .inner ::v-deep .el-card__body {
|
|
|
+ padding: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ p {
|
|
|
+ line-height: 1.75;
|
|
|
+
|
|
|
+ &:not(:last-of-type) { margin-bottom: 8px; }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .card-header-container {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .card-body-container {
|
|
|
+ display: flex;
|
|
|
+
|
|
|
+ .result-wrapper {
|
|
|
+ flex: auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ .picture-wrapper {
|
|
|
+ flex: none;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: space-evenly;
|
|
|
+ margin-left: 12px;
|
|
|
+ max-width: 100px;
|
|
|
+
|
|
|
+ .el-image {
|
|
|
+ width: 100px;
|
|
|
+ height: 100px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-card__header {
|
|
|
+ padding: 0 20px;
|
|
|
+ height: 56px;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|