Przeglądaj źródła

医生病历总数

yuwandanmian 1 rok temu
rodzic
commit
1a47c97487

+ 11 - 1
src/api/excel.js

@@ -168,7 +168,7 @@ export function medicalRecordDoctorExport(data) {
   })
 }
 
-// 编码员--医师排名导出
+// 首页质控(编码员--医师排名导出
 export function bmyDoctorRanking(data) {
   return request_blob({
     url: `/api/bmy/doctorRanking`,
@@ -176,4 +176,14 @@ export function bmyDoctorRanking(data) {
     responseType: 'blob',
     data
   })
+}
+
+// 首页质控(编码员)--医师排病历总数
+export function bmyDoctorRankingBlExport(data) {
+  return request_blob({
+    url: `/api/bmy/doctorRankingBlList`,
+    method: 'post',
+    responseType: 'blob',
+    data
+  })
 }

+ 11 - 0
src/router/index.js

@@ -506,6 +506,17 @@ export const constantRoutes = [
           canMultipleOpen: true 
         },
       },
+      {
+        path: '/doctor/blkf',
+        name: 'DoctorBlKf',
+        component: () => import('@/views/encoder/doctorBlKf'),
+        hidden: true,//不在导航栏展示
+        meta: { 
+          title: '医生病历扣分',
+          keepAlive: 0,
+          canMultipleOpen: true 
+        },
+      },
       {
         path: '/medicalRecordNew',
         name: 'MedicalRecordNew',

+ 10 - 0
src/views/encoder/components/doctorBl/TableBox.vue

@@ -1,5 +1,8 @@
 <template>
   <div class="table-box">
+    <div class="btn-box">
+      <el-button type="primary" plain icon="el-icon-upload" @click="onExport">下载</el-button>
+    </div>
     <el-table
       :data="data"
        @sort-change="handleSortChange"
@@ -103,6 +106,9 @@
         const val = [prop, str]
         this.$emit('sort', val)
       },
+      onExport() {
+        this.$emit('export')
+      }
     }
   }
 </script>
@@ -110,6 +116,10 @@
 <style lang="scss" scoped>
 .table-box {
   margin-bottom: 20px;
+  .btn-box {
+    text-align: right;
+    margin-bottom: 20px;
+  }
 }
 </style>
 <style lang="scss">

+ 93 - 0
src/views/encoder/components/doctorBlKf/SearchBox.vue

@@ -0,0 +1,93 @@
+<template>
+  <div class="search-box">
+    <el-form :model="data" class="demo-form-inline" label-suffix=":" label-width="74px">
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="出院时间">
+            <el-date-picker
+              v-model="data.time"
+              type="daterange"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              value-format="yyyyMMdd"
+              style="width: 100%;">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="医师姓名">
+            <el-select v-model="data.doctor_name" multiple collapse-tags filterable clearable placeholder="全部" style="width: 100%;">
+              <el-option v-for="(item, index) of doctors" :key="index" :label="item" :value="item"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="出院科室">
+            <el-select v-model="data.AAC11N" filterable clearable placeholder="全部" style="width: 100%;">
+              <el-option v-for="(item, index) in departmentList" :key="index" :label="item.dep_name" :value="item.dep_name"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item style="text-align: right;">
+            <el-button plain @click="onReset" icon="el-icon-refresh">重置</el-button>
+            <el-button type="primary" @click="onSubmit" class="export-btn" icon="el-icon-search">查询</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    data: {
+      type: Object,
+      default() {
+        return {
+          time: [],
+          level: '',
+          doctor_name: [],
+          AAC11N: ''
+        }
+      }
+    }
+  },
+  data() {
+    return {
+      levels: ['甲', '乙', '丙', '丁'],
+      doctors: [],
+      departmentList: []
+    }
+  },
+  created() {
+    this.getDoctors()
+    this.getDepartment()
+  },
+  methods: {
+    // 获取医生选线
+    getDoctors() {
+      this.$axios2.post('/case-quality/doctor_list').then(res => {
+        this.doctors = res.data;
+      });
+    },
+    getDepartment() {
+      this.$axios.post('/bmy/getAllDepartment').then(res => {
+        // 不要全部选项
+        this.departmentList = res.data;
+      })
+    },
+    onSubmit() {
+      this.$emit('search')
+    },
+    onReset() {
+      this.$emit('reset')
+    }
+  }
+}
+</script>
+
+<style>
+
+</style>

+ 122 - 0
src/views/encoder/components/doctorBlKf/TableBox.vue

@@ -0,0 +1,122 @@
+<template>
+  <div class="table-box">
+    <el-table
+      :data="data"
+       @sort-change="handleSortChange"
+      style="width: 100%">
+      <el-table-column
+        type="index"
+        label="序号"
+        width="50"
+        align="center">
+      </el-table-column>
+      <el-table-column
+        prop=""
+        label="住院号码"
+        show-overflow-tooltip
+        align="center">
+        <template slot-scope="scope">
+          <span class="link2" @click="toPage(scope.row)">{{ scope.row.AAA28 }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="AAC01"
+        label="出院时间"
+        sortable
+        align="center">
+      </el-table-column>
+      <el-table-column
+        prop="AAC11N"
+        label="出院科室"
+        show-overflow-tooltip
+        align="center">
+      </el-table-column>
+      <el-table-column
+        prop="KZRXM"
+        label="科主任"
+        align="center">
+      </el-table-column>
+      <el-table-column
+        prop="ZHFZRYSXM"
+        label="主任(副主任)医师"
+        align="center">
+      </el-table-column>
+      <el-table-column
+        prop="ZZYSXM"
+        label="主治医师"
+        align="center">
+      </el-table-column>
+      <el-table-column
+        prop="ZYYSXM"
+        label="住院医师"
+        align="center">
+      </el-table-column>
+      <el-table-column
+        prop="ZZYISXM"
+        label="医疗组长"
+        align="center">
+      </el-table-column>
+      <el-table-column
+        prop="home_bmy_score"
+        label="病历评分"
+        sortable
+        align="center">
+      </el-table-column>
+      <el-table-column
+        prop="bl_level"
+        label="病历等级"
+        show-overflow-tooltip
+        align="center">
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+  export default {
+    props: {
+      data: {
+        type: Array,
+        default() {
+          return []
+        }
+      }
+    },
+    data() {
+      return {
+      }
+    },
+    methods: {
+      toPage(row) {
+        this.$router.push({ name: 'MedicalRecordNew', query: { zyh: row.ZYH }})
+      },
+      handleSortChange(column) {
+        const { prop, order } = column
+        let str = ''
+        if (order === 'descending') {
+          str = 'desc'
+        } else if (order === 'ascending') {
+          str = 'asc'
+        } else {
+          str = null
+        }
+        const val = [prop, str]
+        this.$emit('sort', val)
+      },
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+.table-box {
+  margin-bottom: 20px;
+}
+</style>
+<style lang="scss">
+.table_code_popper {
+  .el-checkbox {
+    display: block;
+    line-height: 26px;
+  }
+}
+</style>

+ 32 - 1
src/views/encoder/doctorBl.vue

@@ -4,7 +4,7 @@
       <SearchBoxVue :data="searchData" @search="handleSearch" @reset="handleReset" />
       <div style="margin-top: -22px;">
         <el-divider></el-divider>
-        <TableBoxVue :data="tableData" @sort="handleSort" />
+        <TableBoxVue :data="tableData" @sort="handleSort" @export="handleExport" />
         <Pagination :page="paginationData.page" :limit="paginationData.page_size" :total="paginationData.total" @pagination="handlePagination" />
       </div>
     </div>
@@ -15,6 +15,7 @@
 import SearchBoxVue from './components/doctorBl/SearchBox.vue'
 import TableBoxVue from './components/doctorBl/TableBox.vue'
 import Pagination from '@/components/Pagination'
+import { bmyDoctorRankingBlExport } from '@/api/excel'
 
 export default {
   components: {
@@ -115,6 +116,36 @@ export default {
     handleSort(val) {
       this.searchData.sort = val
       this.getList()
+    },
+    handleExport() {
+      const { time } = this.searchData
+      const params = {
+        is_export: 1,
+        ...this.searchData
+      }
+      if (time && time.length) {
+        params.start_time = time[0]
+        params.end_time = time[1]
+      }
+      bmyDoctorRankingBlExport(params).then(res => {
+        const content = res.data; // 后台返回二进制数据
+        const blob = new Blob([content]);
+        const fileName = `首页质控(编码员)-医生病历总数.csv`;
+        if ('download' in document.createElement('a')) {
+          // 非IE下载
+          const elink = document.createElement('a');
+          elink.download = fileName;
+          elink.style.display = 'none';
+          elink.href = URL.createObjectURL(blob);
+          document.body.appendChild(elink);
+          elink.click();
+          URL.revokeObjectURL(elink.href); // 释放URL 对象
+          document.body.removeChild(elink);
+        } else {
+          // IE10+下载
+          navigator.msSaveBlob(blob, fileName);
+        }
+      });
     }
   }
 }

+ 125 - 0
src/views/encoder/doctorBlKf.vue

@@ -0,0 +1,125 @@
+<template>
+  <div class="bg-box">
+    <div class="bg-card">
+      <SearchBoxVue :data="searchData" @search="handleSearch" @reset="handleReset" />
+      <div style="margin-top: -22px;">
+        <el-divider></el-divider>
+        <TableBoxVue :data="tableData" @sort="handleSort" />
+        <Pagination :page="paginationData.page" :limit="paginationData.page_size" :total="paginationData.total" @pagination="handlePagination" />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import SearchBoxVue from './components/doctorBlKf/SearchBox.vue'
+import TableBoxVue from './components/doctorBlKf/TableBox.vue'
+import Pagination from '@/components/Pagination'
+
+export default {
+  components: {
+    SearchBoxVue,
+    TableBoxVue,
+    Pagination
+  },
+  data() {
+    return {
+      searchData: {
+        time: [],
+        level: '',
+        doctor_name: [],
+        AAC11N: '',
+        sort: []
+      },
+      tableData: [
+        {
+          "AAA28": "00045458",
+          "ZYH": "805905",
+          "AAC01": "2023-06-28 08:36:00",
+          "AAC11N": "康复医学科",
+          "KZRXM": "王德强",
+          "ZHFZRYSXM": "王德强",
+          "ZZYSXM": "孙芳菲",
+          "ZYYSXM": "赵威东",
+          "ZZYISXM": "",
+          "home_bmy_score": 100,
+          "bl_level": "甲级"
+        },
+        {
+          "AAA28": "00047338",
+          "ZYH": "805903",
+          "AAC01": "2023-06-28 08:35:00",
+          "AAC11N": "康复医学科",
+          "KZRXM": "王德强",
+          "ZHFZRYSXM": "王德强",
+          "ZZYSXM": "孙芳菲",
+          "ZYYSXM": "赵威东",
+          "ZZYISXM": "",
+          "home_bmy_score": 100,
+          "bl_level": "甲级"
+        }
+      ],
+      paginationData: {
+        page: 1,
+        page_size: 10,
+        total: 0
+      }
+    }
+  },
+  created() {
+    const { start_time, end_time } = this.$route.query
+    this.$set(this.searchData, 'AAC01', [start_time, end_time])
+    this.getList()
+  },
+  methods: {
+    getList() {
+      const {
+        page,
+        page_size
+      } = this.paginationData
+      const { time } = this.searchData
+      const params = {
+        is_export: 0,
+        page,
+        page_size,
+        ...this.searchData
+      }
+      if (time && time.length) {
+        params.start_time = time[0]
+        params.end_time = time[1]
+      }
+      this.$axios.post('/bmy/doctorRankingBlList', params).then(res => {
+        this.tableData = res.data.list
+        this.paginationData.total = res.data.count
+      });
+    },
+    handleSearch() {
+      this.paginationData.page = 1
+      this.getList()
+    },
+    handleReset() {
+      this.searchData = {
+        time: [],
+        level: '',
+        doctor_name: [],
+        AAC11N: '',
+        sort: []
+      }
+    },
+    handlePagination(val) {
+      const { page, limit } = val
+      this.paginationData.page = page
+      this.paginationData.page_size = limit
+      this.getList()
+    },
+    handleSort(val) {
+      this.searchData.sort = val
+      this.getList()
+    }
+  }
+}
+</script>
+
+<style>
+
+</style>

+ 1 - 1
src/views/encoder/errors.vue

@@ -136,7 +136,7 @@ export default {
       encoderErrorExport(params).then(res => {
         const content = res.data; // 后台返回二进制数据
         const blob = new Blob([content]);
-        const fileName = `编码员缺陷.csv`;
+        const fileName = `首页质控(编码员)-缺陷列表.csv`;
         if ('download' in document.createElement('a')) {
           // 非IE下载
           const elink = document.createElement('a');

+ 7 - 2
src/views/encoder/index.vue

@@ -273,7 +273,7 @@
                   label="总扣分"
                   align="center">
                   <template slot-scope="scope">
-                    <span class="link2">{{ -scope.row.kf_score }}</span>
+                    <span class="link2" @click="toPageDoctorKf(scope.row)">{{ -scope.row.kf_score }}</span>
                   </template>
                 </el-table-column>
                 <el-table-column
@@ -824,11 +824,16 @@ import { bmyDoctorRanking } from '@/api/excel'
           }
         });
       },
-      // 缺陷详情列表
+      // 医生病历总数
       toPageDoctor(row) {
         const { start_time, end_time } = this.formInline
         this.$router.push({ name: 'DoctorBl', query: { doctor_name: row.docker_name, start_time, end_time }})
       },
+      // 医生病历扣分
+      toPageDoctorKf(row) {
+        const { start_time, end_time } = this.formInline
+        this.$router.push({ name: 'DoctorBlKf', query: { doctor_name: row.docker_name, start_time, end_time }})
+      },
     }
   }
 </script>