Procházet zdrojové kódy

修改医师病例排名bug

陈炼伟 před 1 rokem
rodič
revize
bdff048dbb
3 změnil soubory, kde provedl 218 přidání a 137 odebrání
  1. 88 88
      src/views/allcase/components/DoctorRank.vue
  2. 127 46
      src/views/allcase/index.vue
  3. 3 3
      vue.config.js

+ 88 - 88
src/views/allcase/components/DoctorRank.vue

@@ -5,104 +5,104 @@
 </template>
 
 <script>
-  export default {
-    props: {
-      data: {
-        type: Array,
-        default() {
-          return []
-        }
-      }
-    },
-    computed: {
-      yNames() {
-        const arr = []
-        this.data.map(item => {
-          arr.push(item.key)
-        })
-        return arr
-      },
-      qxCounts() {
-        const arr = []
-        this.data.map(item => {
-          arr.push(item.defect_doc_count)
-        })
-        return arr
-      },
-      blCounts() {
-        const arr = []
-        this.data.map(item => {
-          arr.push(item.doc_count)
-        })
-        return arr
+export default {
+  props: {
+    data: {
+      type: Array,
+      default() {
+        return []
       }
+    }
+  },
+  computed: {
+    yNames() {
+      const arr = []
+      this.data.map(item => {
+        arr.push(item.key)
+      })
+      return arr
     },
-    mounted() {
-      this.renderChart()
+    qxCounts() {
+      const arr = []
+      this.data.map(item => {
+        arr.push(item.defect_doc_count)
+      })
+      return arr
     },
-    methods: {
-      renderChart() {
-        var myChart = this.$echarts.init(document.getElementById('rank_chart'))
-        var option = {
-          tooltip: {
-            trigger: 'axis',
-            axisPointer: {
-              type: 'shadow'
+    blCounts() {
+      const arr = []
+      this.data.map(item => {
+        arr.push(item.doc_count)
+      })
+      return arr
+    }
+  },
+  mounted() {
+    this.renderChart()
+  },
+  methods: {
+    renderChart() {
+      var myChart = this.$echarts.init(document.getElementById('rank_chart'))
+      var option = {
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'shadow'
+          }
+        },
+        color: ['#54C5A0', '#5B8EC3'],
+        legend: {},
+        grid: {
+          left: '3%',
+          right: '4%',
+          bottom: '3%',
+          containLabel: true
+        },
+        xAxis: {
+          type: 'value'
+        },
+        yAxis: {
+          type: 'category',
+          data: this.yNames,
+          axisLine: {
+            lineStyle: {
+              color: '#CFCFCF'
             }
           },
-          color: ['#54C5A0', '#5B8EC3'],
-          legend: {},
-          grid: {
-            left: '3%',
-            right: '4%',
-            bottom: '3%',
-            containLabel: true
+          axisTick: {
+            show: false
           },
-          xAxis: {
-            type: 'value'
+          axisLabel: {
+            color: '#333333'
+          }
+        },
+        series: [
+          {
+            name: '缺陷病历数',
+            type: 'bar',
+            stack: 'total',
+            barWidth: '20',
+            data: this.qxCounts
           },
-          yAxis: {
-            type: 'category',
-            data: this.yNames,
-            axisLine: {
-              lineStyle: {
-                color: '#CFCFCF'
-              }
-            },
-            axisTick: {
-              show: false
-            },
-            axisLabel: {
-              color: '#333333'
-            }
-          },
-          series: [
-            {
-              name: '缺陷病历数',
-              type: 'bar',
-              stack: 'total',
-              barWidth: '20',
-              data: this.qxCounts
-            },
-            {
-              name: '病历总数',
-              type: 'bar',
-              stack: 'total',
-              barWidth: '20',
-              data: this.blCounts
-            }
-          ]
-        };
-        myChart.setOption(option)
-        // 窗口大小改变 重新渲染
-        window.addEventListener('resize', () => {
-          myChart.resize()
-        })
-      }
+          {
+            name: '病历总数',
+            type: 'bar',
+            stack: 'total',
+            barWidth: '20',
+            data: this.blCounts
+          }
+        ]
+      };
+      myChart.setOption(option)
+      // 窗口大小改变 重新渲染
+      window.addEventListener('resize', () => {
+        myChart.resize()
+      })
     }
   }
+}
 </script>
 
 <style lang="scss" scoped>
 
-</style>
+</style>

+ 127 - 46
src/views/allcase/index.vue

@@ -9,7 +9,9 @@
               <i class="el-icon-arrow-down el-icon--right"></i>
             </el-button>
             <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item v-for="(item, index) in yearList" :key="index" @click.native="funSeleterYear(item)">{{ item.name }}</el-dropdown-item>
+              <el-dropdown-item v-for="(item, index) in yearList" :key="index" @click.native="funSeleterYear(item)">
+                {{ item.name }}
+              </el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown>
 
@@ -19,11 +21,14 @@
               <i class="el-icon-arrow-down el-icon--right"></i>
             </el-button>
             <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item v-for="(item, index) in quarterList" :key="index" @click.native="funSeleterQuarter(item)">{{ item.name }}</el-dropdown-item>
+              <el-dropdown-item v-for="(item, index) in quarterList" :key="index"
+                                @click.native="funSeleterQuarter(item)">{{ item.name }}
+              </el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown>
           <div class="selects">
-            <el-date-picker v-model="formData.startTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyyMMdd" placeholder="开始日期"></el-date-picker>
+            <el-date-picker v-model="formData.startTime" type="date" format="yyyy 年 MM 月 dd 日"
+                            value-format="yyyyMMdd" placeholder="开始日期"></el-date-picker>
 
             <el-date-picker
               v-model="formData.endTime"
@@ -39,7 +44,7 @@
       </div>
     </div>
     <div class="cardBox">
-      <Title :title="'运行病历数量'" />
+      <Title :title="'运行病历数量'"/>
       <div class="contentBox">
         <div class="left">
           <div class="l">
@@ -58,7 +63,7 @@
     </div>
     <!-- 科室排名 -->
     <div class="chart">
-      <Title :title="'科室排名'" />
+      <Title :title="'科室排名'"/>
       <div id="myChart1" style="width: 100%; height: 600px"></div>
     </div>
 
@@ -79,20 +84,21 @@
           <el-form :inline="true" :model="caseSearchData" class="demo-form-inline">
             <el-form-item label="">
               <el-select v-model="caseSearchData.department" filterable clearable placeholder="科室">
-                <el-option v-for="(item, index) in departmentList" :label="item.name" :value="item.name" :key="index"></el-option>
+                <el-option v-for="(item, index) in departmentList" :label="item.name" :value="item.name"
+                           :key="index"></el-option>
               </el-select>
             </el-form-item>
             <el-form-item>
               <el-button type="primary" @click="getCaseList">查询</el-button>
             </el-form-item>
           </el-form>
-          <ProblemTableBoxVue :data="caseList" />
+          <ProblemTableBoxVue :data="caseList"/>
         </div>
       </el-collapse-transition>
 
 
     </div>
- 
+
     <!-- 医师排名 -->
     <div class="bg-card" style="margin-bottom: 24px; padding">
       <CardTitle title="医师排名">
@@ -142,7 +148,9 @@
                   align="center">
                   <template slot-scope="scope">
                     <!-- <span class="link" @click="goto('/caseNumber?doctor_name='+ scope.row.key +'&sort=doc_count')" style="color: #004983;">{{ scope.row.doc_count }}例</span> -->
-                    <span class="link" @click="goto('/caseNumber')" style="color: #004983;">{{ scope.row.doc_count }}例</span>
+                    <span class="link" @click="goto(`/doctor/bl?doctor_name=${scope.row.key}&start_time=${start_time}&end_time=${end_time}`)" style="color: #004983;">{{
+                        scope.row.doc_count
+                      }}例</span>
                   </template>
                 </el-table-column>
                 <el-table-column
@@ -150,14 +158,15 @@
                   label="总扣分"
                   align="center">
                   <template slot-scope="scope">
-                    <span class="link" @click="toPageDoctor(scope.row,'score')" style="color: #004983;">-{{ scope.row.score }}分</span>
+                    <span class="link" @click="toPageDoctor(scope.row,'score')"
+                          style="color: #004983;">-{{ scope.row.score }}分</span>
                   </template>
                 </el-table-column>
                 <el-table-column
                   prop="avg_score"
                   label="平均分"
                   align="center"
-                  >
+                >
                   <template slot-scope="scope">
                     <span>{{ scope.row.avg_score }}分</span>
                   </template>
@@ -174,7 +183,7 @@
               </el-pagination>
             </el-col>
             <el-col :span="11">
-              <DoctorRankVue v-if="doctor_rank.length" :data="doctor_rank" />
+              <DoctorRankVue v-if="doctor_rank.length" :data="processedData"/>
             </el-col>
           </el-row>
         </div>
@@ -182,14 +191,14 @@
     </div>
   </div>
 </template>
-  
-  <script>
+
+<script>
 import * as echarts from 'echarts';
-import { mapGetters } from 'vuex';
+import {mapGetters} from 'vuex';
 import Title from '@/components/Title';
 import ProblemTableBoxVue from './components/ProblemTableBox.vue';
 import MedicalRecordTableBoxVue from './components/MedicalRecordTableBox.vue';
-import { medicalRecordDoctorExport } from '@/api/excel'
+import {medicalRecordDoctorExport} from '@/api/excel'
 import DoctorRankVue from './components/DoctorRank.vue'
 
 export default {
@@ -202,9 +211,16 @@ export default {
   name: 'Dashboard',
   computed: {
     ...mapGetters(['name']),
+    processedData() {
+      // 在计算属性中进行数据处理,返回处理后的结果
+      return this.makeDoctorRank(this.doctor_rank);
+    }
   },
   data() {
     return {
+      start_time:'',
+      end_time:'',
+      doctor_rank:[],
       formData: {
         rangeDate: [],
         chooseDate: '',
@@ -236,8 +252,8 @@ export default {
       },
       caseList: [],
       departmentList: [],
-      doctorList:[], // 医生列表
-      doctor_name:'',
+      doctorList: [], // 医生列表
+      doctor_name: '',
       quxian_show: true,
       // 医师排名
       doctor_show: true,
@@ -251,6 +267,13 @@ export default {
     };
   },
   mounted() {
+    const date = new Date();
+    const year = date.getFullYear();
+    const month = String(date.getMonth() + 1).padStart(2, "0");
+    const day = String(date.getDate()).padStart(2, "0");
+    this.start_time = `${year}0101`;
+    this.end_time = `${year}${month}${day}`;
+
     this.doctor_rank = JSON.parse(JSON.stringify(this.doctor_tableData)).slice(0, 10)
     this.storageSet('start_time', '');
     this.storageSet('end_time', '');
@@ -265,7 +288,7 @@ export default {
     this.selectInfo();
   },
   beforeRouteEnter(to, from, next) {
-    
+
     next(vm => {
       // 回到原来的位置
       const position = JSON.parse(window.sessionStorage.getItem('position'))
@@ -279,14 +302,28 @@ export default {
     next()
   },
   methods: {
-    toPageDoctor(row,sort) {
-      this.$router.push({ 
-      path: '/defectNumber',
-       query: { 
-        doctor_name: row.key,
-        sort,
-      }
-    })
+
+    makeDoctorRank(data) {//处理图表数据
+      let newData = JSON.parse(JSON.stringify(data)) || []
+      //根据defect_doc_count进行顺序排名 小的在前面
+      return newData.sort(
+        (a, b) => {
+          return a.defect_doc_count - b.defect_doc_count
+        }
+      )
+    },
+
+
+    toPageDoctor(row, sort) {
+      this.$router.push({
+        path: '/doctor/bl',
+        query: {
+          doctor_name: row.key,
+          sort,
+          start_time: this.start_time,
+          end_time: this.end_time,
+        }
+      })
     },
     // 医师排名
     onToggleDoctorShow() {
@@ -296,20 +333,20 @@ export default {
       this.quxian_show = !this.quxian_show
     },
     // 获取医生列表
-    getDoctorList(){
+    getDoctorList() {
       this.$axios2.post('/case-quality/doctor_list').then(res => {
         this.doctorList = res.data;
       });
     },
     // 缺陷病例统计
-    getAnalysis(){
+    getAnalysis() {
       this.$axios2.post('/case-quality/analysis').then(res => {
 
       });
     },
-    
+
     // 甲乙病级病例
-    getMedicalRecordLevel(){
+    getMedicalRecordLevel() {
       this.$axios2.post('/case-quality/medical_record_level').then(res => {
 
       });
@@ -343,9 +380,9 @@ export default {
       this.paginationDataDoctor.page = val
       this.getDoctorRank()
     },
-    
+
     getDoctorRank() {
-      const { page, size } = this.paginationDataDoctor
+      const {page, size} = this.paginationDataDoctor
       const params = {
         page,
         page_size: size,
@@ -354,9 +391,9 @@ export default {
         is_export: 0
       };
       this.$axios2.post('/case-quality/medical_record_doctor', params).then(res => {
-        const { count } = res.data
+        const {count} = res.data
         if (count < 10) {
-          for(let i=0; i<10 - count-1; i++) {
+          for (let i = 0; i < 10 - count - 1; i++) {
             res.data.list.push({
               "key": "",
               "doc_count": '',
@@ -364,8 +401,8 @@ export default {
               "score": '',
               "svg_score": '',
               "proportion": "",
-              "dep_name":'',
-              "code":'',
+              "dep_name": '',
+              "code": '',
             })
           }
         }
@@ -432,7 +469,7 @@ export default {
 
     // 医师排名导出
     handleExport() {
-      const { page, size } = this.paginationDataDoctor
+      const {page, size} = this.paginationDataDoctor
       const params = {
         page,
         page_size: size,
@@ -590,53 +627,65 @@ export default {
   },
 };
 </script>
-  
-  <style lang="scss" scoped>
+
+<style lang="scss" scoped>
 .pages {
   padding: 0 18px;
   background: #f4f4f4;
+
   .btnNAv {
     display: flex;
     justify-content: flex-end;
     padding-top: 30px;
     padding-bottom: 10px;
+
     a {
       padding: 15px 30px;
       color: #fff;
       border-radius: 10px;
       margin-left: 15px;
     }
+
     .bj {
       background: #35ae4a;
     }
+
     .bc {
       background: #dd7500;
     }
+
     .dc {
       background: #439ab6;
     }
+
     .fh {
       background: #185da6;
     }
   }
+
   .block {
     margin-bottom: 20px;
     background: #fff;
     padding: 25px 15px;
     border-radius: 5px;
+
     .blockCon {
       display: flex;
       justify-content: space-between;
+
       .lefts {
         display: flex;
       }
+
       .selects {
         margin: 0 20px;
+
         span {
           margin-right: 10px;
         }
       }
     }
+
     .ytext {
       font-size: 16px;
       color: #e48d53;
@@ -644,20 +693,25 @@ export default {
       line-height: 40px;
     }
   }
+
   .cardBox {
     margin: 0 0 16px 0;
     background: #fff;
     padding: 25px 15px;
     border-radius: 5px;
+
     .contentBox {
       display: flex;
+
       .left {
         display: flex;
         flex: 1;
+
         .l {
           display: flex;
           flex: 1;
           flex-wrap: wrap;
+
           .i {
             width: calc(50% - 20px);
             margin-right: 20px;
@@ -670,12 +724,14 @@ export default {
             align-items: center;
             justify-content: center;
             text-align: center;
+
             .ba {
               flex: 1;
               font-size: 16px;
               font-weight: 400;
               color: #fff;
             }
+
             .num {
               font-size: 24px;
               font-weight: bold;
@@ -683,6 +739,7 @@ export default {
               flex: 1;
               margin-left: 20px;
             }
+
             .icon {
               width: 50px;
               position: absolute;
@@ -691,8 +748,10 @@ export default {
             }
           }
         }
+
         .r {
           margin: 0 9% 0 0;
+
           .i {
             width: 195px;
             height: 56px;
@@ -707,6 +766,7 @@ export default {
               width: 22px;
               margin: 6px 0 0 27px;
             }
+
             .t {
               font-size: 18px;
               font-weight: 400;
@@ -714,6 +774,7 @@ export default {
               text-align: left;
               margin-left: 10px;
             }
+
             .rt {
               margin-left: 10px;
               font-weight: bold;
@@ -736,42 +797,51 @@ export default {
           }
         }
       }
+
       .right {
         width: 521px;
       }
     }
   }
+
   .cpoin {
     cursor: pointer;
   }
+
   .chart {
     margin-bottom: 16px;
     background-color: #fff;
     padding: 25px 15px;
   }
 }
+
 .color-btn {
   color: #409eff;
   border-color: #c6e2ff;
   background-color: #ecf5ff;
 }
-.title-box{
+
+.title-box {
   width: 100%;
   display: flex;
   align-items: center;
   justify-content: space-between;
 }
-.medicalRecord-box{
+
+.medicalRecord-box {
   width: 100%;
   display: flex;
   margin-top: 16px;
-  &>div{
+
+  & > div {
     flex: 1;
   }
-  .medicalRecord-list-box{
+
+  .medicalRecord-list-box {
     flex: 1;
   }
 }
+
 // 卡片背景
 
 .pages {
@@ -781,48 +851,60 @@ export default {
     border-radius: 5px;
     overflow-x: hidden;
   }
+
   .mb20 {
     margin-bottom: 20px;
   }
+
   .bg185DA6 {
     background: #185DA6;
   }
+
   .text-right {
     text-align: right;
   }
+
   .text-center {
     text-align: center;
   }
+
   .link {
     text-decoration: underline;
     color: #FF786F;
     cursor: pointer;
   }
+
   .link2 {
     color: #004983;
     cursor: pointer;
   }
+
   .c_FF786F {
     color: #FF786F;
   }
 }
+
 .title_arrow {
   width: 10px;
   height: 11px;
   margin-left: 5px;
   cursor: pointer;
+
   &.arrow_top {
     transform: rotate(180deg);
   }
 }
+
 #tongji_pie {
   height: 200px;
 }
+
 #qxxq_pie {
   height: 600px;
   margin-top: 68px;
 }
-.xz-btn{
+
+.xz-btn {
   width: 84px;
   height: 32px;
   text-align: center;
@@ -837,4 +919,3 @@ export default {
   top: 0;
 }
 </style>
-  

+ 3 - 3
vue.config.js

@@ -40,18 +40,18 @@ module.exports = {
     },
     proxy: {
       '/api': {
-        target: 'http://182.43.50.128:8081/',
+        target: ' http://10.10.11.65:8081/',
         // target: 'http://qualityweb.jiankangche.cn:8081/',
         ws: true,
         changeOrigin: true, //是否跨域
       },
       '/bazb': {
-        target: 'http://182.43.50.128:8081/',
+        target: ' http://10.10.11.65:8081/',
         ws: true,
         changeOrigin: true, //是否跨域
       },
       '/bass': {
-        target: 'http://182.43.50.128:8081/',
+        target: ' http://10.10.11.65:8081/',
         ws: true,
         changeOrigin: true, //是否跨域
       }