浏览代码

医生病历

yuwandanmian 1 年之前
父节点
当前提交
8d9eaf292c

+ 11 - 0
src/router/index.js

@@ -495,6 +495,17 @@ export const constantRoutes = [
           canMultipleOpen: true 
         },
       },
+      {
+        path: '/doctor/bl',
+        name: 'DoctorBl',
+        component: () => import('@/views/encoder/doctorBl'),
+        hidden: true,//不在导航栏展示
+        meta: { 
+          title: '医生病历总数',
+          keepAlive: 0,
+          canMultipleOpen: true 
+        },
+      },
       {
         path: '/medicalRecordNew',
         name: 'MedicalRecordNew',

+ 2 - 2
src/views/data/query/index.vue

@@ -369,7 +369,7 @@ export default {
       value1: '',
       selectList: [],
       labelText: '',
-      keyList: ['OPE_LEVEL', 'SSPB', 'ABC03C', 'RYQK', 'AAA02C', 'RJSS', 'AEM01C', 'AAC11N', 'LNSSQ', 'LNSSH', 'AEL01', 'AEE10', 'AEE03', 'AEE04'],
+      keyList: ['OPE_LEVEL', 'SSPB', 'ABC03C', 'RYQK', 'AAA02C', 'RJSS', 'AEM01C', 'AAC11N', 'LNSSQ', 'LNSSH', 'AEL01', 'AEE10', 'AEE03', 'AEE04', 'AEE01', 'AEE02', 'ZZYISXM'],
       tabKeyList: [
         'ICD10_ID1_first',
         'ICD10_NAME_first',
@@ -661,7 +661,7 @@ export default {
             id: '2',
           },
         ];
-      } else if (['AEE10', 'AEE03', 'AEE04'].includes(val.key)) {
+      } else if (['AEE10', 'AEE03', 'AEE04', 'AEE01', 'AEE02', 'ZZYISXM'].includes(val.key)) {
         val.selectList = [
           {
             label: '全部',

+ 100 - 0
src/views/encoder/components/doctorBl/SearchBox.vue

@@ -0,0 +1,100 @@
+<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" 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 label="病历等级">
+            <el-select v-model="data.level" filterable clearable placeholder="全部" style="width: 100%;">
+              <el-option v-for="item of levels" :key="item" :label="item" :value="item"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item>
+            <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>

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

@@ -0,0 +1,207 @@
+<template>
+  <div class="table-box">
+    <div class="btn-box">
+      <el-button type="primary" plain icon="el-icon-upload" @click="onExport">下载</el-button>
+      <el-popover
+        placement="bottom-end"
+        title=""
+        trigger="click"
+        popper-class="table_code_popper"
+      >
+        <el-checkbox v-model="checkAll" :indeterminate="isIndeterminate" @change="handleCheckAllChange">全选</el-checkbox>
+        <el-checkbox-group v-model="codes" @change="handleChange">
+          <el-checkbox label="field_name">缺陷字段</el-checkbox>
+          <el-checkbox label="desc">缺陷描述</el-checkbox>
+          <el-checkbox label="AAA28">住院号码</el-checkbox>
+          <el-checkbox label="AAA01">姓名</el-checkbox>
+          <el-checkbox label="AAC01">出院时间</el-checkbox>
+          <el-checkbox label="AAC11N">出院科室</el-checkbox>
+          <el-checkbox label="AEE08">编码员</el-checkbox>
+          <el-checkbox label="AEE04">住院医师</el-checkbox>
+          <el-checkbox label="ICD10_NAME">主要诊断名称</el-checkbox>
+          <el-checkbox label="ICD10_ID1">主要诊断编码</el-checkbox>
+          <el-checkbox label="type">缺陷归类</el-checkbox>
+        </el-checkbox-group>
+        <el-button slot="reference" type="primary" plain icon="el-icon-setting" style="margin-left: 10px;"></el-button>
+      </el-popover>
+    </div>
+    <el-table
+      :data="data"
+      style="width: 100%">
+      <el-table-column
+        type="index"
+        label="序号"
+        width="50"
+        align="center">
+      </el-table-column>
+      <el-table-column
+        v-if="codes.includes('field_name')"
+        prop="field_name"
+        label="缺陷字段"
+        show-overflow-tooltip
+        width="160"
+        align="center">
+      </el-table-column>
+      <el-table-column
+        v-if="codes.includes('AAA28')"
+        prop=""
+        label="住院号码"
+        show-overflow-tooltip
+        width="120"
+        align="center">
+        <template slot-scope="scope">
+          <span class="link2" @click="toPage(scope.row)">{{ scope.row.AAA28 }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        v-if="codes.includes('AAA01')"
+        prop="AAA01"
+        label="姓名"
+        width="120"
+        align="center">
+      </el-table-column>
+      <el-table-column
+        v-if="codes.includes('AAC01')"
+        prop="AAC01"
+        label="出院时间"
+        width="160"
+        align="center">
+      </el-table-column>
+      <el-table-column
+        v-if="codes.includes('AAC11N')"
+        prop="AAC11N"
+        label="出院科室"
+        show-overflow-tooltip
+        align="center">
+      </el-table-column>
+      <el-table-column
+        v-if="codes.includes('AEE08')"
+        prop="AEE08"
+        label="编码员"
+        width="120"
+        align="center">
+      </el-table-column>
+      <el-table-column
+        v-if="codes.includes('AEE04')"
+        prop="AEE04"
+        label="住院医师"
+        width="120"
+        align="center">
+      </el-table-column>
+      <el-table-column
+        v-if="codes.includes('ICD10_NAME')"
+        prop="ICD10_NAME"
+        label="主要诊断名称"
+        width="160"
+        show-overflow-tooltip
+        align="center">
+      </el-table-column>
+      <el-table-column
+        v-if="codes.includes('ICD10_ID1')"
+        prop="ICD10_ID1"
+        label="主要诊断编码"
+        width="160"
+        show-overflow-tooltip
+        align="center">
+      </el-table-column>
+      <el-table-column
+        v-if="codes.includes('ICD9_NAME')"
+        prop="ICD9_NAME"
+        label="主要手术名称"
+        width="160"
+        show-overflow-tooltip
+        align="center">
+      </el-table-column>
+      <el-table-column
+        v-if="codes.includes('ICD9_ID1')"
+        prop="ICD9_ID1"
+        label="主要手术编码"
+        width="160"
+        show-overflow-tooltip
+        align="center">
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+  export default {
+    props: {
+      data: {
+        type: Array,
+        default() {
+          return []
+        }
+      }
+    },
+    data() {
+      const defaultCodes = [
+        'field_name',
+        'AAA28',
+        'AAA01',
+        'AAC01',
+        'AAC11N',
+        'AEE08',
+        'AEE04',
+        'ICD10_NAME',
+        'ICD10_ID1',
+        'ICD9_NAME',
+        'ICD9_ID1'
+      ]
+      return {
+        checkAll: true,
+        isIndeterminate: false,
+        defaultCodes,
+        codes: [
+          'field_name',
+          'AAA28',
+          'AAA01',
+          'AAC01',
+          'AAC11N',
+          'AEE08',
+          'AEE04',
+          'ICD10_NAME',
+          'ICD10_ID1',
+          'ICD9_NAME',
+          'ICD9_ID1'
+        ],
+      }
+    },
+    methods: {
+      handleCheckAllChange(val) {
+        this.codes = val ? this.defaultCodes : []
+        this.isIndeterminate = false
+      },
+      // 展示字段发生变化
+      handleChange(val) {
+        const checkedCount = val.length
+        this.checkAll = checkedCount === this.defaultCodes.length
+        this.codes = val
+      },
+      toPage(row) {
+        this.$router.push({ name: 'MedicalRecordNew', query: { zyh: row.ZYH }})
+      },
+      onExport() {
+        this.$emit('export')
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+.table-box {
+  margin-bottom: 20px;
+  .btn-box {
+    text-align: right;
+    margin-bottom: 20px;
+  }
+}
+</style>
+<style lang="scss">
+.table_code_popper {
+  .el-checkbox {
+    display: block;
+    line-height: 26px;
+  }
+}
+</style>

+ 157 - 0
src/views/encoder/doctorBl.vue

@@ -0,0 +1,157 @@
+<template>
+  <div class="bg-box">
+    <div class="bg-card">
+      <SearchBoxVue :data="formInline" @search="handleSearch" @reset="handleReset" />
+      <div style="margin-top: -22px;">
+        <el-divider></el-divider>
+        <TableBoxVue :data="tableData" @export="handleExport" />
+        <Pagination :page="paginationData.page" :limit="paginationData.page_size" :total="paginationData.total" @pagination="handlePagination" />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import SearchBoxVue from './components/errors/SearchBox.vue'
+import TableBoxVue from './components/errors/TableBox.vue'
+import Pagination from '@/components/Pagination'
+import { encoderErrorExport } from '@/api/excel'
+
+export default {
+  components: {
+    SearchBoxVue,
+    TableBoxVue,
+    Pagination
+  },
+  data() {
+    return {
+      formInline: {
+        time: [],
+        level: '',
+        doctor_name: [],
+        AAC11N: ''
+      },
+      tableData: [
+        {
+          "field_name": "健康卡号",
+          "desc": "健康卡号未填写",
+          "AAA28": "00260972",
+          "AAA01": "",
+          "ZYH": "809257",
+          "AAC01": "2023-08-07 09:15:00",
+          "AAC11N": "神经外科",
+          "AEE08": "张三",
+          "AEE03": "李一",
+          "AEE04": "周一",
+          "ICD10_ID1": "S06.500x002",
+          "ICD10_NAME": "创伤性硬脑膜下血肿",
+          "ICD9_ID1": "01.2408",
+          "ICD9_NAME": "颅内血肿清除术",
+          "level": "强制",
+          "type": "患者基本信息"
+        }
+      ],
+      paginationData: {
+        page: 1,
+        page_size: 10,
+        total: 0
+      }
+    }
+  },
+  created() {
+    const { start_time, end_time } = this.$route.query
+    this.$set(this.formInline, 'AAC01', [start_time, end_time])
+    this.getList()
+  },
+  methods: {
+    getList() {
+      const {
+        AAC01
+      } = this.formInline
+      const {
+        page,
+        page_size
+      } = this.paginationData
+      const params = {
+        hospital_name: '',
+        bl_type: 2,
+        is_export: 0,
+        rule_id: this.$route.query.rule_id,
+        page,
+        page_size,
+        ...this.formInline
+      }
+      if (AAC01 && AAC01.length) {
+        params.start_time = AAC01[0]
+        params.end_time = AAC01[1]
+      }
+      this.$axios.post('/bmy/bmyQualityList', params).then(res => {
+        this.tableData = res.data.data
+        this.paginationData.total = res.data.count
+      });
+    },
+    handleSearch() {
+      this.paginationData.page = 1
+      this.getList()
+    },
+    handleReset() {
+      this.formInline = {
+        AAA28: '',
+        AAC11C: '',
+        AAC01: [],
+        AEE04_CODE: '',
+        AEE08_CODE: '',
+        ICD9_ID1: '',
+        ICD9_NAME: '',
+        ICD10_ID1: '',
+        ICD10_NAME: ''
+      }
+    },
+    handlePagination(val) {
+      const { page, limit } = val
+      this.paginationData.page = page
+      this.paginationData.page_size = limit
+      this.getList()
+    },
+    handleExport() {
+      const {
+        AAC01
+      } = this.formInline
+      const params = {
+        hospital_name: '',
+        bl_type: 2,
+        is_export: 0,
+        rule_id: this.$route.query.rule_id,
+        ...this.formInline
+      }
+      if (AAC01 && AAC01.length) {
+        params.start_time = AAC01[0]
+        params.end_time = AAC01[1]
+      }
+      encoderErrorExport(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);
+        }
+      });
+    }
+  }
+}
+</script>
+
+<style>
+
+</style>

+ 111 - 105
src/views/encoder/index.vue

@@ -265,7 +265,7 @@
                   label="病历总数"
                   align="center">
                   <template slot-scope="scope">
-                    <span class="link2">{{ scope.row.bl_sum }}</span>
+                    <span class="link2" @click="toPageDoctor(scope.row)">{{ scope.row.bl_sum }}</span>
                   </template>
                 </el-table-column>
                 <el-table-column
@@ -359,109 +359,109 @@ import { bmyDoctorRanking } from '@/api/excel'
           size: 10,
           total: 0
         },
-        doctor_tableData: [],
-        // doctor_tableData: [
-        //   {
-        //     "docker_name": "杜晓峰",
-        //     "bl_sum": 28,
-        //     "qx_sum": 22,
-        //     "sum_score": 2800,
-        //     "df_score": 2158,
-        //     "kf_score": 642,
-        //     "proportion": "77.07",
-        //     "avg_score": 88
-        //   },
-        //   {
-        //     "docker_name": "杜晓峰",
-        //     "bl_sum": 28,
-        //     "qx_sum": 22,
-        //     "sum_score": 2800,
-        //     "df_score": 2158,
-        //     "kf_score": 642,
-        //     "proportion": "77.07",
-        //     "avg_score": 88
-        //   },
-        //   {
-        //     "docker_name": "杜晓峰",
-        //     "bl_sum": 28,
-        //     "qx_sum": 22,
-        //     "sum_score": 2800,
-        //     "df_score": 2158,
-        //     "kf_score": 642,
-        //     "proportion": "77.07",
-        //     "avg_score": 88
-        //   },
-        //   {
-        //     "docker_name": "杜晓峰",
-        //     "bl_sum": 28,
-        //     "qx_sum": 22,
-        //     "sum_score": 2800,
-        //     "df_score": 2158,
-        //     "kf_score": 642,
-        //     "proportion": "77.07",
-        //     "avg_score": 88
-        //   },
-        //   {
-        //     "docker_name": "杜晓峰",
-        //     "bl_sum": 28,
-        //     "qx_sum": 22,
-        //     "sum_score": 2800,
-        //     "df_score": 2158,
-        //     "kf_score": 642,
-        //     "proportion": "77.07",
-        //     "avg_score": 88
-        //   },
-        //   {
-        //     "docker_name": "杜晓峰",
-        //     "bl_sum": 28,
-        //     "qx_sum": 22,
-        //     "sum_score": 2800,
-        //     "df_score": 2158,
-        //     "kf_score": 642,
-        //     "proportion": "77.07",
-        //     "avg_score": 88
-        //   },
-        //   {
-        //     "docker_name": "杜晓峰",
-        //     "bl_sum": 28,
-        //     "qx_sum": 22,
-        //     "sum_score": 2800,
-        //     "df_score": 2158,
-        //     "kf_score": 642,
-        //     "proportion": "77.07",
-        //     "avg_score": 88
-        //   },
-        //   {
-        //     "docker_name": "杜晓峰",
-        //     "bl_sum": 28,
-        //     "qx_sum": 22,
-        //     "sum_score": 2800,
-        //     "df_score": 2158,
-        //     "kf_score": 642,
-        //     "proportion": "77.07",
-        //     "avg_score": 88
-        //   },
-        //   {
-        //     "docker_name": "杜晓峰",
-        //     "bl_sum": 28,
-        //     "qx_sum": 22,
-        //     "sum_score": 2800,
-        //     "df_score": 2158,
-        //     "kf_score": 642,
-        //     "proportion": "77.07",
-        //     "avg_score": 88
-        //   },
-        //   {
-        //     "docker_name": "杜晓峰",
-        //     "bl_sum": 28,
-        //     "qx_sum": 22,
-        //     "sum_score": 2800,
-        //     "df_score": 2158,
-        //     "kf_score": 642,
-        //     "proportion": "77.07",
-        //     "avg_score": 88
-        //   }
-        // ],
+        // doctor_tableData: [],
+        doctor_tableData: [
+          {
+            "docker_name": "杜晓峰",
+            "bl_sum": 28,
+            "qx_sum": 22,
+            "sum_score": 2800,
+            "df_score": 2158,
+            "kf_score": 642,
+            "proportion": "77.07",
+            "avg_score": 88
+          },
+          {
+            "docker_name": "杜晓峰",
+            "bl_sum": 28,
+            "qx_sum": 22,
+            "sum_score": 2800,
+            "df_score": 2158,
+            "kf_score": 642,
+            "proportion": "77.07",
+            "avg_score": 88
+          },
+          {
+            "docker_name": "杜晓峰",
+            "bl_sum": 28,
+            "qx_sum": 22,
+            "sum_score": 2800,
+            "df_score": 2158,
+            "kf_score": 642,
+            "proportion": "77.07",
+            "avg_score": 88
+          },
+          {
+            "docker_name": "杜晓峰",
+            "bl_sum": 28,
+            "qx_sum": 22,
+            "sum_score": 2800,
+            "df_score": 2158,
+            "kf_score": 642,
+            "proportion": "77.07",
+            "avg_score": 88
+          },
+          {
+            "docker_name": "杜晓峰",
+            "bl_sum": 28,
+            "qx_sum": 22,
+            "sum_score": 2800,
+            "df_score": 2158,
+            "kf_score": 642,
+            "proportion": "77.07",
+            "avg_score": 88
+          },
+          {
+            "docker_name": "杜晓峰",
+            "bl_sum": 28,
+            "qx_sum": 22,
+            "sum_score": 2800,
+            "df_score": 2158,
+            "kf_score": 642,
+            "proportion": "77.07",
+            "avg_score": 88
+          },
+          {
+            "docker_name": "杜晓峰",
+            "bl_sum": 28,
+            "qx_sum": 22,
+            "sum_score": 2800,
+            "df_score": 2158,
+            "kf_score": 642,
+            "proportion": "77.07",
+            "avg_score": 88
+          },
+          {
+            "docker_name": "杜晓峰",
+            "bl_sum": 28,
+            "qx_sum": 22,
+            "sum_score": 2800,
+            "df_score": 2158,
+            "kf_score": 642,
+            "proportion": "77.07",
+            "avg_score": 88
+          },
+          {
+            "docker_name": "杜晓峰",
+            "bl_sum": 28,
+            "qx_sum": 22,
+            "sum_score": 2800,
+            "df_score": 2158,
+            "kf_score": 642,
+            "proportion": "77.07",
+            "avg_score": 88
+          },
+          {
+            "docker_name": "杜晓峰",
+            "bl_sum": 28,
+            "qx_sum": 22,
+            "sum_score": 2800,
+            "df_score": 2158,
+            "kf_score": 642,
+            "proportion": "77.07",
+            "avg_score": 88
+          }
+        ],
         doctor_rank: []
       }
     },
@@ -798,6 +798,7 @@ import { bmyDoctorRanking } from '@/api/excel'
           this.doctor_rank = JSON.parse(JSON.stringify(res.data.list)).slice(0, 10)
         })
       },
+      // 导出
       onBmyDoctorExport() {
         const params = {
           is_export: 1,
@@ -822,7 +823,12 @@ import { bmyDoctorRanking } from '@/api/excel'
             navigator.msSaveBlob(blob, fileName);
           }
         });
-      }
+      },
+      // 缺陷详情列表
+      toPageDoctor(row) {
+        const { start_time, end_time } = this.formInline
+        this.$router.push({ name: 'DoctorBl', query: { doctor_name: row.docker_name, start_time, end_time }})
+      },
     }
   }
 </script>