Эх сурвалжийг харах

1.病案详情-质控结果顶部栏患者姓名修改为患者,标题全部加粗
2.病案详情-质控结果增加搜索栏:问题数量标题和数字可折叠可点击查询全部数据、内容栏增加入院记录、病程记录、手术记录、出院记录、同意书、其他文书6项标题和数字,可点击查询对应数据
3.病案详情-质控结果内容区:增加必改、预警和建议状态、修改图片显示位置
4.病案详情-质控结果:接口联调和数据渲染

liyanyan 5 өдөр өмнө
parent
commit
ba064788df

+ 161 - 102
src/views/allcase/components/CaseQualityBox2.vue

@@ -99,116 +99,93 @@
         <!-- <h2 class="score-dj">{{ scoreLevel }}</h2> -->
       </div>
 
-      <div class="card-box" v-if="data.is_case">
-        <div class="title">
-          <span class="font-size12">智能结果更新时间:</span>
-          <span class="font-size12">{{ data.quality_time }}</span>
-        </div>
+      <el-row type="flex" justify="space-between" align="middle" class="card-box card-box-noStyle" v-if="data.is_case">
+        <span class="title font-size12">
+          <i :class="`el-icon-arrow-${!filterCollapse ? 'up' : 'down'}`" style="cursor: pointer" @click="filterCollapse = !filterCollapse"/>
+          <span class="text-bold" style="margin-left: 5px;cursor: pointer;" @click="setFilterForm('')">
+            问题数量:
+            <span class="problem_count">{{data.data && Array.isArray(data.data) ? data.data.length : 0 }}</span>
+          </span>
+        </span>
+        <span class="font-size12">{{ data.quality_time }}</span>
         <el-tag type="danger" v-if="data.is_case == 1" class="font-size12">质控中</el-tag>
         <el-tag v-if="data.is_case == 2" class="font-size12">已质控</el-tag>
-
+      </el-row>
+      <div class="filterBox" v-if="!filterCollapse">
+        <div v-for="(value, key) in filterList" :class="`${filterFormData.type == key ? 'filterRow selected' : 'filterRow'}`" @click="setFilterForm(key)">
+          <div class="filterLabel text-bold">{{value.label}}</div>
+          <span style="margin-left: 10px">({{data.summary[key] && Array.isArray(data.summary[key]) ? data.summary[key].length : 0}})</span>
+        </div>
       </div>
 
 
       <el-scrollbar ref="scrollRef" class="scrollBox" :style="`height: ${scrollHeight}`">
-        <template v-for="(item, index) in data.data">
-          <!-- is_appeal: 是否申述 -->
-          <div class="list-box box-card" :key="index">
-            <div class="list-score-tips-box">
-              <el-row class="list-item-title" type="flex" align="middle" justify="space-between">
-                质控项目:
-                <el-image class="list-item-image" v-if="item.is_artificial == 0" :src="require('../../../assets/images/zsicon.png')" fit="contain">
-                </el-image>
-                <el-image v-if="item.is_artificial == 1" class="list-item-image" :src="require('../../../assets/images/ysicon.png')" fit="contain">
-                </el-image>
-              </el-row>
-              <el-row type="flex" align="middle" style="margin-bottom: 15px;">
-                <div class="list-item-field" :title="item.error_field">
-                  {{ item.error_field }}
-                </div>
-                <div class="list-item-score" :class="item.level == -1 ? 'hover-0' : item.level == 1 ? 'hover-1' : 'hover-2' ">
-                  {{ item.score }}分
-                </div>
-              </el-row>
-              <div class="list-item-title">错误描述:</div>
-              <div class="list-item-value" style="margin-bottom: 15px">{{ item.notice }}</div>
-              <div class="list-item-title" @click="item.basis && clickListItem(index)">
-                质控依据 <i :class="`el-icon-arrow-${item.show ? 'up' : 'down'}`" style="cursor: pointer;font-weight: bold"></i> 
-              </div>
-              <div class="list-item-basis-box">
-                <div class="list-basis-text">
-                  <div class="list-basis-text-t" :class="item.show?'show':''">
-                    <div v-for="(yItem, yIndex) of item.basis" :key="yIndex" style="margin-bottom: 10px;">
-                        <div v-if="typeof yItem == 'string'">
-                          <span class="span-index">{{ yIndex+1 }}</span>
-                            <span class="list-item-value">{{yItem}}</span><br/>
-                        </div>
-                        <span type="flex" align="middle" v-else>
-                          <span class="span-index">{{ yIndex+1 }}</span>
-                          <span v-for="(cItem, cIndex) in yItem" :key="cIndex">
-                            <span class="list-item-value" v-if="!isNaN(parseFloat(cIndex))">{{cItem}}</span>
-                            <div style="height: 15px"></div>
-                          </span>
-                        </span>
-                    </div>
-                  </div>
-                  <div class="list-basis-bottom-box" v-if="$route.path == '/whitelist-caseControl'">
-                    <div class="list-basis-bottom-tips">
-                      <div class="appeal_no" @click="clickAppeal('appeal_no', item, 2 )" v-if="item.appeal_type == 2 && item.appeal_status == 2">驳回</div>
-                      <div class="appeal_progress" v-if="item.appeal_type == 2 && item.appeal_status == 0">申诉中</div>
-                      <div class="appeal_in_edit" @click="clickAppealEdit(item, 2)" v-if="item.is_artificial == 1">已整改</div>
+        <template v-if="(!filterFormData.type? !!(data.data.length) : !!((data.summary)[filterFormData.type].length)) ">
+          <template v-for="(item, index) in (!filterFormData.type? data.data : (data.summary)[filterFormData.type])">
+            <!-- is_appeal: 是否申述 -->
+            <div class="list-box box-card" :key="index">
+              <div class="list-score-tips-box">
+                <el-row type="flex" align="middle" justify="space-between" style="margin-bottom: 15px;">
+                  <el-row type="flex">
+                    <div class="list-item-score" :class="item.level == -1 ? 'hover-0' : item.level == 1 ? 'hover-1' : 'hover-2' ">
+                      {{ item.level == -1 ? '预警' : item.level == 1? '必改':'建议' }}
                     </div>
-                    <div class="list-basis-bottom-btn" v-if="item.appeal_type == 0">
-                      <div class="appeal" @click="clickAppeal('appeal', item, 2 )">申诉</div>
-                      <div class="appeal_in_ignore" @click="clickAppeal('appeal_in_ignore', item, 2 )">忽略</div>
+                    <div class="list-item-field" :title="item.error_field">
+                      {{ item.error_field }}
                     </div>
+                  </el-row>
+                  <div v-if="item.level != -1" style="color: #DA1515;" class="text-bold">
+                    -{{ item.score }}分
                   </div>
+                </el-row>
+                <el-row type="flex" justify="space-between" align="top">
+                  <div>
+                    <div class="list-item-title">错误描述:</div>
+                    <div class="list-item-value" style="margin-bottom: 15px">{{ item.notice }}</div>
+                  </div>
+                  <el-image class="list-item-image" v-if="item.is_artificial == 0" :src="require('../../../assets/images/zsicon.png')" fit="contain">
+                  </el-image>
+                  <el-image v-if="item.is_artificial == 1" class="list-item-image" :src="require('../../../assets/images/ysicon.png')" fit="contain">
+                  </el-image>
+                </el-row>
+                <div class="list-item-title" @click="item.basis && clickListItem(index)">
+                  质控依据 <i :class="`el-icon-arrow-${item.show ? 'up' : 'down'}`" style="cursor: pointer;font-weight: bold"></i> 
                 </div>
-              </div>
-              <!-- <div class="list-left-score" :class="item.level == -1 ? 'hover-0' : item.level == 1 ? 'hover-1' : 'hover-2' ">
-                <div> {{ item.level == -1 ? '预警' : item.level == 1? '必改':'建议' }} </div>
-                <div v-if="item.level != -1">-{{ item.score }}</div>
-              </div>
-              <div class="list-right-tips">
-                <div><span class="title-color">字段:</span><span>{{ item.error_field }}</span></div>
-                <div class="notice-box"><span class="title-color">提示:</span><span>{{ item.notice }}</span></div>
-              </div> -->
-            </div>
-            <!-- <div class="list-basis-box">
-              <div class="list-basis-title" @click="item.basis && clickListItem(index)">
-                <span>质控依据</span>
-                <span> >> </span>
-                
-              </div>
-              <div class="list-basis-text">
-                <div class="list-basis-text-t" :class="item.show?'show':''">
-                  <div v-for="(yItem, yIndex) of item.basis" :key="yIndex" style="margin-bottom: 10px;">
-                      <div v-if="typeof yItem == 'string'">
-                        <span class="span-index">{{ yIndex+1 }}</span>
-                          <span>{{yItem}}</span><br/>
+                <div class="list-item-basis-box">
+                  <div class="list-basis-text">
+                    <div class="list-basis-text-t" :class="item.show?'show':''">
+                      <div v-for="(yItem, yIndex) of item.basis" :key="yIndex" style="margin-bottom: 10px;">
+                          <div v-if="typeof yItem == 'string'">
+                            <span class="span-index">{{ yIndex+1 }}</span>
+                              <span class="list-item-value">{{yItem}}</span><br/>
+                          </div>
+                          <el-row v-else class="list-basis-text-t-noString">
+                            <span class="span-index">{{ yIndex+1 }}</span>
+                            <span v-for="(cItem, cIndex) in yItem" :key="cIndex"  v-if="!isNaN(parseFloat(cIndex))">
+                              <span class="list-item-value">{{cItem}}</span>
+                              <div style="height: 10px"></div>
+                            </span>
+                          </el-row> 
                       </div>
-                       <div v-else>
-                        <span class="span-index">{{ yIndex+1 }}</span>
-                        <span v-for="(cItem, cIndex) in yItem" :key="cIndex">
-                          <span v-if="!isNaN(parseFloat(cIndex))" style="line-height: 25px">{{cItem}}</span><br/>
-                        </span>
+                    </div>
+                    <div class="list-basis-bottom-box" v-if="$route.path == '/whitelist-caseControl'">
+                      <div class="list-basis-bottom-tips">
+                        <div class="appeal_no" @click="clickAppeal('appeal_no', item, 2 )" v-if="item.appeal_type == 2 && item.appeal_status == 2">驳回</div>
+                        <div class="appeal_progress" v-if="item.appeal_type == 2 && item.appeal_status == 0">申诉中</div>
+                        <div class="appeal_in_edit" @click="clickAppealEdit(item, 2)" v-if="item.is_artificial == 1">已整改</div>
                       </div>
+                      <div class="list-basis-bottom-btn" v-if="item.appeal_type == 0">
+                        <div class="appeal" @click="clickAppeal('appeal', item, 2 )">申诉</div>
+                        <div class="appeal_in_ignore" @click="clickAppeal('appeal_in_ignore', item, 2 )">忽略</div>
+                      </div>
+                    </div>
                   </div>
                 </div>
-                <div class="list-basis-bottom-box" v-if="$route.path == '/whitelist-caseControl'">
-                  <div class="list-basis-bottom-tips">
-                    <div class="appeal_no" @click="clickAppeal('appeal_no', item, 2 )" v-if="item.appeal_type == 2 && item.appeal_status == 2">驳回</div>
-                    <div class="appeal_progress" v-if="item.appeal_type == 2 && item.appeal_status == 0">申诉中</div>
-                    <div class="appeal_in_edit" @click="clickAppealEdit(item, 2)" v-if="item.is_artificial == 1">已整改</div>
-                  </div>
-                  <div class="list-basis-bottom-btn" v-if="item.appeal_type == 0">
-                    <div class="appeal" @click="clickAppeal('appeal', item, 2 )">申诉</div>
-                    <div class="appeal_in_ignore" @click="clickAppeal('appeal_in_ignore', item, 2 )">忽略</div>
-                  </div>
-                </div>
-              </div>
-            </div> -->
-          </div>
+            </div>
+          </template>
+        </template>
+        <template v-else>
+          <el-empty :image-size="100"></el-empty>
         </template>
       </el-scrollbar>
     </div>
@@ -289,7 +266,37 @@ import { examineAppeal, getAppealData, getBrry } from '@/api/qc';
         taskNameList: [],
         currentTaskName: '',
         showTaskNameMenu: true,
-        baseInfo: {}
+        baseInfo: {},
+        filterCollapse: false,
+        filterFormData: {
+          type: ''
+        },
+        filterList: {
+          ryjl: {
+            label: '入院记录',
+            value: 0
+          },
+          bcjl: {
+            label: '病程记录',
+            value: 0
+          },
+          ssjl: {
+            label: '手术记录',
+            value: 0
+          },
+          cyjl: {
+            label: '出院记录',
+            value: 0
+          },
+          tys: {
+            label: '同意书',
+            value: 0
+          },
+          qt: {
+            label: '其他文书',
+            value: 0
+          }
+        }
       }
     },
     computed: {
@@ -323,6 +330,10 @@ import { examineAppeal, getAppealData, getBrry } from '@/api/qc';
       this.getInitData();
     },
     methods: {
+      setFilterForm(key) {
+        this.filterFormData.type = key;
+        // this.getTableData();
+      },
       getInitData() {
         if(this.$route.path != '/whitelist-caseControl' ) {
           this.getTableData();
@@ -474,7 +485,11 @@ import { examineAppeal, getAppealData, getBrry } from '@/api/qc';
         this.$emit('hightRight',hightKeyWord,bllb,zyh)
       },
       clickListItem(idx){
-        this.data.data[idx].show = !this.data.data[idx].show
+        if(this.filterFormData.type) {
+          (this.data.summary[this.filterFormData.type])[idx].show = !((this.data.summary[this.filterFormData.type])[idx]).show
+        } else {
+          this.data.data[idx].show = !this.data.data[idx].show
+        }
         this.$forceUpdate();
       },
       // 点击申诉、忽略按钮
@@ -498,6 +513,34 @@ import { examineAppeal, getAppealData, getBrry } from '@/api/qc';
   .text-bold {
     font-weight: bold;
   }
+  .problem_count {
+    color: rgba(239, 31, 58, 1);
+    font-size: 14px;
+    font-weight: 700;
+    line-height: 20px;
+  }
+  .filterBox {
+    padding: 0 5px;
+    display: grid;
+    grid-template-columns: repeat(3, 1fr); /* 创建4列,每列占据可用空间的1份 */   
+    gap: 5px; /* 可选,添加间隙 */  
+    font-size: 14px;
+    line-height: 23px;
+    margin-bottom: 10px;
+    .filterRow {
+      display: flex;
+      align-items: center;
+      cursor: pointer;
+      .filterLabel {
+        width: 56px;
+        white-space: nowrap;
+        text-align: right;
+      }
+    }
+    .selected {
+      color: #409EFF
+    }
+  }
 }
 ::v-deep.el-submenu {
   &>.el-submenu__title {
@@ -644,6 +687,12 @@ import { examineAppeal, getAppealData, getBrry } from '@/api/qc';
     background-size: 60px 52px;
     background-position:80% 50%;
   }
+
+ 
+  .card-box-noStyle {
+    background: transparent !important;
+    padding: 0px !important;
+  }
   .card-box {
     // height: 175px;
     // background: #FFFFFF;
@@ -819,13 +868,13 @@ import { examineAppeal, getAppealData, getBrry } from '@/api/qc';
       line-height: 16px;
       text-align: center;
       font-style: normal;
-      max-width: 200px;
+      // max-width: 200px;
       text-overflow: ellipsis;
       white-space: inherit;
       overflow: hidden;
     }
     .list-item-score {
-      padding: 10px;
+      padding: 10px 15px;
       border-radius: 6px;
       font-family: DINAlternate, DINAlternate;
       font-weight: bold;
@@ -834,13 +883,13 @@ import { examineAppeal, getAppealData, getBrry } from '@/api/qc';
       line-height: 16px;
       text-align: center;
       font-style: normal;
-      margin-left: 16px;
+      margin-right: 5px;
       &.hover-1{
         background: #FFDFDF;
         color: #DA1515;
       }
       &.hover-2{
-        background: rgb(236, 245, 255);
+        background: rgb(190, 226, 248);
         color: rgb(52, 140, 235);
       }
       &.hover-0{
@@ -873,10 +922,20 @@ import { examineAppeal, getAppealData, getBrry } from '@/api/qc';
           height: 0;
           overflow: hidden;
           position: relative;
+          &> div:last-child {
+              margin-bottom: 0 !important;
+          }
           &.show{
             height: auto;
             // padding: 10px 0 10px 10px;
           }
+          .list-basis-text-t-noString  {
+            &> span:last-child {
+              div {
+                height: 0 !important;
+              }
+            }
+          }
         }
       }