Sfoglia il codice sorgente

门诊病历质控

yuwandanmian 2 anni fa
parent
commit
1c7674e81e

+ 21 - 0
src/router/index.js

@@ -213,6 +213,27 @@ export const constantRoutes = [
         meta: { title: '门诊病历查询' },
         hidden: true,
       },
+      {
+        path: '/outpatientControl',
+        name: 'OutpatientControl',
+        component: () => import('@/views/outpatient/control'),
+        meta: { title: '门诊病历质控' },
+        hidden: true,
+      },
+      {
+        path: '/outpatientMedicalRecordNumber',
+        name: 'OutpatientMedicalRecordNumber',
+        component: () => import('@/views/outpatient/control/medicalRecordNumber'),
+        meta: { title: '病历数量' },
+        hidden: true,
+      },,
+      {
+        path: '/outpatientMedicalRecordDefectNumber',
+        name: 'OutpatientMedicalRecordDefectNumber',
+        component: () => import('@/views/outpatient/control/defectNumber'),
+        meta: { title: '缺陷病历' },
+        hidden: true,
+      }
     ],
   },
   // 医院大数据自助查询系统

+ 0 - 12
src/views/allcase/caseNumber.vue

@@ -48,7 +48,6 @@
         <el-table-column prop="ABC01N" label="主要诊断"></el-table-column>
         <el-table-column prop="ICD9_NAME" label="主要手术"></el-table-column>
         <el-table-column prop="F_D" label="用药"></el-table-column>
-        <el-table-column prop="ATTEND_GRP_NAME" label="医师"></el-table-column>
         <el-table-column prop="AAC04" label="住院天数"></el-table-column>
         <el-table-column prop="ADA01" label="总费用"></el-table-column>
       </el-table>
@@ -121,19 +120,8 @@ export default {
       this.funQuery();
     },
     selectInfo() {
-      let pramse = {};
       this.$axios.post('/selectInfo').then(res => {
-        this.payList = res.data.pay;
-        console.log(this.payList);
-        //支付方式 pay
         this.departmentList = res.data.department;
-        //出院科室 department
-        // this.levelList = res.data.level;
-        // //问题属性 level
-        // this.coderList = res.data.coder;
-        // //编码元  coder
-        // this.statusList = res.data.status;
-        // this.fieldList = res.data.field;
       });
     },
     funQuery() {

+ 0 - 5
src/views/allcase/defectNumber.vue

@@ -10,10 +10,6 @@
             <el-option v-for="(item, index) in departmentList" :label="item.name" :value="item.id" :key="index"></el-option>
           </el-select>
           <span class="kong"></span>
-          <el-select v-model="formData.problem" class="selects" placeholder="问题属性">
-            <el-option v-for="(item, index) in levelList" :label="item.name" :value="item.id" :key="index"></el-option>
-          </el-select>
-          <span class="kong"></span>
           <el-date-picker v-model="formData.startTime" class="selects" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyyMMdd" placeholder="开始日期"></el-date-picker>
           <el-date-picker
             v-model="formData.endTime"
@@ -44,7 +40,6 @@
         <el-table-column prop="ABC01N" label="主要诊断"></el-table-column>
         <el-table-column prop="ICD9_NAME" label="主要手术"></el-table-column>
         <el-table-column prop="F_D" label="用药"></el-table-column>
-        <el-table-column prop="ATTEND_GRP_NAME" label="医师"></el-table-column>
         <el-table-column prop="AAC04" label="住院天数"></el-table-column>
         <el-table-column prop="ADA01" label="总费用"></el-table-column>
       </el-table>

+ 8 - 27
src/views/outpatient/case/index.vue

@@ -29,7 +29,7 @@
             <el-option
               v-for="(fitem, findex) in fieldList"
               :key="findex"
-              :label="fitem.name"
+              :label="fitem.value"
               :value="fitem.key"
               :disabled="item.lock"
             />
@@ -194,32 +194,7 @@ import { dateFormat } from '@/utils/index'
             }
           }
         },
-        fieldList: [
-          {
-            key: 'BLNR_TXT',
-            name: '全文搜索关键字'
-          },
-          {
-            key: 'xy',
-            name: '西药'
-          },
-          {
-            key: 'mzh',
-            name: '门诊号'
-          },{
-            key: 'ks',
-            name: '科室'
-          },{
-            key: 'xb',
-            name: '性别'
-          },{
-            key: 'xm',
-            name: '姓名'
-          },{
-            key: 'SFZH',
-            name: '身份证号'
-          }
-        ],
+        fieldList: [],
         form: {
           start_nl: undefined,
           end_nl: undefined,
@@ -248,9 +223,15 @@ import { dateFormat } from '@/utils/index'
       }
     },
     created() {
+      this.selectInfo()
       this.getList(0)
     },
     methods: {
+      selectInfo() {
+        this.$axios.post('/omr_zk/serach_type_list').then(res => {
+          this.fieldList = res.data;
+        });
+      },
       // 获取列表
       getList(index) {
         this.searchNum = index

+ 72 - 0
src/views/outpatient/control/components/ProblemTableBox.vue

@@ -0,0 +1,72 @@
+<template>
+  <el-table
+    :data="data"
+    max-height="530"
+    style="width: 100%;">
+    <el-table-column
+      prop=""
+      label="序号"
+      width="80">
+      <template slot-scope="scope">
+        <span>{{ scope.$index + 1}}</span>
+      </template>
+    </el-table-column>
+    <el-table-column
+      prop="desc"
+      label="缺陷描述">
+    </el-table-column>
+    <el-table-column
+      prop="field"
+      label="缺陷字段">
+    </el-table-column>
+    <el-table-column
+      prop=""
+      label="缺陷数量">
+      <template slot-scope="scope">
+        <span class="link" @click="toPage(scope.row)">{{ scope.row.total_num }}</span>
+      </template>
+    </el-table-column>
+  </el-table>
+</template>
+
+<script>
+export default {
+  props: {
+    data: {
+      type: Array,
+      default() {
+        return []
+      }
+    }
+  },
+  methods: {
+    toPage(row) {
+      this.$router.push({ path: '/defectNumber', query: { rule_id: row.key }})
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+::v-deep.el-table .el-table__row td {
+  color: #7e8bab;
+  border-bottom: 1px solid #f4f4f4;
+}
+::v-deep.el-table .el-table__header tr th:first-child {
+  border-radius: 10px 0px 0px 10px;
+}
+::v-deep.el-table .el-table__header tr th:last-child {
+  border-radius: 0px 10px 10px 0px;
+}
+::v-deep.el-table .el-table__header tr th {
+  background: #f1f6ff;
+  color: #13171e;
+  border-bottom: 0px;
+}
+.link{
+  font-weight: 600;
+  color: #409eff;
+  text-decoration:underline;
+  cursor: pointer;
+}
+</style>

+ 298 - 0
src/views/outpatient/control/defectNumber.vue

@@ -0,0 +1,298 @@
+<template>
+  <div class="dashboard-container">
+    <div class="tableBox">
+      <div class="block">
+        <div class="blockCon">
+          <el-date-picker v-model="formData.startTime" class="selects" type="date" format="yyyy年MM月dd日" value-format="yyyyMMdd" placeholder="就诊时间-开始"></el-date-picker>
+          <span class="kong"></span>
+          <el-date-picker
+            v-model="formData.endTime"
+            type="date"
+            class="selects"
+            style="margin-left: 10px"
+            format="yyyy年MM月dd日"
+            value-format="yyyyMMdd"
+            placeholder="就诊时间-结束"
+          ></el-date-picker>
+          <span class="kong"></span>
+          <el-select v-model="formData.dep_id" class="selects" filterable clearable placeholder="出院科室">
+            <el-option v-for="(item, index) in departmentList" :label="item.name" :value="item.id" :key="index"></el-option>
+          </el-select>
+          <span class="kong"></span>
+          <el-input v-model="formData.sfzh" placeholder="身份证号"></el-input>
+          <span class="kong"></span>
+          <el-select v-model="formData.doctor_id" class="selects" filterable clearable placeholder="医生签名">
+            <el-option v-for="(item, index) in doctors" :label="item.name" :value="item.id" :key="index"></el-option>
+          </el-select>
+          <span class="kong"></span>
+          <el-button class="sc" @click="funQuery">查询</el-button>
+        </div>
+        <el-button @click="toBack" style="position: absolute; right: 35px;">返回</el-button>
+      </div>
+      <el-table :data="tableData" style="width: 100%">
+        <el-table-column type="index" label="序号"></el-table-column>
+        <el-table-column prop="jzsj" label="就诊时间"></el-table-column>
+        <el-table-column prop="" label="门诊号">
+          <template slot-scope="scope">
+            <span class="blue" @click="funGoto(scope.row.MED_REC_ID)">
+              {{ scope.row.mzh }}
+            </span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="xm" label="患者姓名"></el-table-column>
+        <el-table-column prop="dep_name" label="科室"></el-table-column>
+        <el-table-column prop="xb" label="性别"></el-table-column>
+        <el-table-column prop="nl" label="年龄"></el-table-column>
+        <el-table-column prop="cbzd" label="初步诊断"></el-table-column>
+        <el-table-column prop="SFZH" label="身份证号"></el-table-column>
+        <el-table-column prop="SXYS_NAME" label="医生签名"></el-table-column>
+      </el-table>
+      <!-- 分页控制 -->
+      <mPagination v-if="tableData && tableData.length !== 0" :data="paginationData" @pageChangeEvent="pageHasChanged"></mPagination>
+    </div>
+  </div>
+</template>
+  
+  <script>
+import Title from '@/components/Title';
+import { mapGetters } from 'vuex';
+import mPagination from '@/components/m-pagination';
+
+export default {
+  name: 'Dashboard',
+  components: {
+    Title,
+    mPagination,
+  },
+  computed: {
+    ...mapGetters(['name']),
+  },
+  data() {
+    return {
+      formData: {
+        problem: 'all',
+        dep_id: '',
+        startTime:'',
+        endTime:'',
+        recordNum: '',
+        sfzh: '',
+        doctor_id: ''
+      },
+      rule_id: '',
+      tableData: [],
+      // 分页数据
+      paginationData: {
+        total: 10,
+        currentPage: 1,
+        pageSize: 10,
+      },
+      departmentList: [],
+      doctors: []
+    };
+  },
+  mounted() {
+    this.rule_id = this.$route.query.rule_id
+    this.formData.startTime = this.storageGet('start_time');
+    this.formData.endTime = this.storageGet('end_time');
+    this.selectInfo();
+    this.funQuery();
+  },
+  methods: {
+    toBack() {
+      this.$router.history.go(-1)
+    },
+    funGoto(val) {
+      this.storageSet('getData', val);
+      this.goto('/caseViews')
+    },
+    selectInfo() {
+      this.$axios.post('/omr_zk/department_list').then(res => {
+        this.departmentList = res.data;
+      });
+      this.$axios.post('/omr_zk/docker_list').then(res => {
+        this.doctors = res.data;
+      });
+    },
+    pageHasChanged() {
+      this.funQuery();
+    },
+    funQuery() {
+      //查询
+      let pramse = {
+        start_time: this.formData.startTime || '',
+        end_time: this.formData.endTime || '',
+        page: this.paginationData.currentPage,
+        limit: this.paginationData.pageSize
+      };
+      if (this.rule_id) {
+        pramse.rule_id = this.rule_id;
+      }
+      if (this.formData.dep_id) {
+        pramse.dep_id = this.formData.dep_id
+      }
+      if (this.formData.sfzh) {
+        pramse.sfzh = this.formData.sfzh
+      }
+      if (this.formData.doctor_id) {
+        pramse.doctor_id = this.formData.doctor_id
+      }
+
+      this.$axios.post('/omr_zk/error_list', pramse).then(res => {
+        this.paginationData.total = res.data.count;
+        this.tableData = res.data.list;
+      });
+    }
+  },
+};
+</script>
+  <style scoped>
+::v-deep.el-pagination.is-background .btn-next,
+::v-deep.el-pagination.is-background .btn-prev,
+::v-deep.el-pagination.is-background .el-pager li {
+  margin: 0 5px;
+  background-color: #fff;
+  color: #606266;
+  min-width: 30px;
+  border-radius: 2px;
+  border: 1px solid #dfe3f3;
+  line-height: 27px;
+}
+::v-deep.el-pagination.is-background .el-pager li:not(.disabled).active {
+  background: #7e8bab;
+}
+::v-deep.el-table .el-table__row td {
+  color: #7e8bab;
+  border-bottom: 1px solid #f4f4f4;
+}
+::v-deep.el-table .el-table__header tr th:first-child {
+  border-radius: 10px 0px 0px 10px;
+}
+::v-deep.el-table .el-table__header tr th:last-child {
+  border-radius: 0px 10px 10px 0px;
+}
+::v-deep.el-table .el-table__header tr th {
+  background: #f1f6ff;
+  color: #13171e;
+  border-bottom: 0px;
+}
+</style>
+  <style lang="scss" scoped>
+.tableBox {
+  background: #fff;
+  padding: 19px;
+  border-radius: 5px;
+  font-size: 12px;
+}
+.block {
+  background: #fff;
+  border-radius: 5px;
+  margin-bottom: 16px;
+  padding: 20px 30px;
+  margin-bottom: 20px;
+  .fBtn {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    .btn1 {
+      background: #185da6;
+      color: #fff;
+    }
+    .btn2 {
+      color: #185da6;
+      background: #d5e4ff;
+    }
+  }
+  .bnh {
+    margin-bottom: 20px;
+  }
+  .barBtn {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  .selects {
+    width: 100%;
+  }
+  .rowsa {
+    margin-bottom: 20px;
+  }
+}
+.tableBox {
+  background: #fff;
+  padding: 19px;
+  border-radius: 5px;
+}
+.dashboard {
+  &-container {
+    margin: 30px;
+  }
+  &-text {
+    font-size: 30px;
+    line-height: 46px;
+  }
+}
+.pind {
+  padding: 0 20px;
+}
+.pind10 {
+  padding: 0 5px;
+}
+.width150 {
+  width: 200px;
+}
+.width300 {
+  width: 295px;
+}
+.width500 {
+  width: 645px;
+}
+.width90 {
+  width: 90px;
+}
+.blue {
+  color: #185da6;
+  cursor: pointer;
+}
+.block {
+  background: #fff;
+  align-items: center;
+  border-radius: 5px;
+  height: 75px;
+  margin-bottom: 16px;
+  padding-left: 34px;
+  margin-bottom: 20px;
+  margin-bottom: 20px;
+  display: flex;
+  box-sizing: border-box;
+  .blockCon {
+    display: flex;
+    align-items: center;
+    .selectDns {
+      span {
+        margin-right: 5px;
+      }
+    }
+    .demonstration {
+      margin-left: 10px;
+    }
+    .pickers {
+      margin-left: 5px;
+    }
+    .lsxd {
+      margin-left: 20px;
+    }
+    .ins {
+      width: 150px;
+      margin: 0 10px;
+    }
+  }
+  .sc {
+    background: #185da6;
+    color: #fff;
+  }
+}
+.kong {
+  padding: 0 10px;
+}
+</style>
+  

+ 480 - 0
src/views/outpatient/control/index.vue

@@ -0,0 +1,480 @@
+<template>
+  <div class="pages">
+    <div class="block">
+      <div class="blockCon">
+        <div class="lefts">
+          <el-dropdown>
+            <el-button :class="formData.year.name ? 'color-btn' : ''">
+              {{ formData.year.name || '按年' }}
+              <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-menu>
+          </el-dropdown>
+
+          <el-dropdown>
+            <el-button :disabled="formData.year.name == ''" :class="formData.quarter.name ? 'color-btn' : ''">
+              {{ formData.quarter.name || '按季' }}
+              <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-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.endTime"
+              type="date"
+              style="margin-left: 10px"
+              format="yyyy 年 MM 月 dd 日"
+              value-format="yyyyMMdd"
+              placeholder="结束日期"
+            ></el-date-picker>
+          </div>
+          <el-button class="btn1" type="primary" @click="funQuery">查询</el-button>
+        </div>
+      </div>
+    </div>
+    <div class="cardBox">
+      <Title :title="'质量分析'" />
+      <div class="contentBox">
+        <div class="left">
+          <div class="l">
+            <div class="i" @click="goto('/outpatientMedicalRecordNumber')">
+              <div class="ba">病历数量</div>
+              <div class="num cpoin">{{ countsData.omr_total }}</div>
+            </div>
+            <div class="i" @click="goto('/outpatientMedicalRecordDefectNumber')" style="background: #38a1f1">
+              <div class="ba">缺陷病历</div>
+              <div class="num">{{ countsData.omr_defect_total }}</div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <!-- 科室排名 -->
+    <div class="chart">
+      <Title :title="'科室排名'" />
+      <div id="myChart1" style="width: 100%; height: 600px"></div>
+    </div>
+
+    <!-- 缺陷问题 -->
+    <div class="chart">
+      <Title :title="'缺陷问题'" />
+      <ProblemTableBoxVue :data="caseList" />
+    </div>
+  </div>
+</template>
+  
+  <script>
+import * as echarts from 'echarts';
+import { mapGetters } from 'vuex';
+import Title from '@/components/Title';
+import ProblemTableBoxVue from './components/ProblemTableBox.vue';
+export default {
+  components: {
+    Title,
+    ProblemTableBoxVue,
+  },
+  name: 'Dashboard',
+  computed: {
+    ...mapGetters(['name']),
+  },
+  data() {
+    return {
+      formData: {
+        rangeDate: [],
+        chooseDate: '',
+        startTime: '',
+        endTime: '',
+        year: {
+          name: '',
+        },
+        month: {
+          name: '',
+        },
+        quarter: {
+          name: '',
+        },
+        problem: 'all',
+        defectFelg: 'all',
+        type: '1',
+      },
+      homeData: {},
+      quarterList: [],
+      monthList: [],
+      yearList: [],
+      countsData: {
+        omr_total: 0,
+        omr_defect_total: 0,
+      },
+      caseList: []
+    };
+  },
+  mounted() {
+    this.storageSet('start_time', '');
+    this.storageSet('end_time', '');
+    this.formData.chooseDate = '30';
+    this.chooseTime(this.formData.chooseDate);
+    if (this.storageGet('homeFrom')) {
+      this.formData = this.storageGet('homeFrom');
+      this.storageRemove('homeFrom');
+    }
+    this.funQuery();
+    this.selectInfo();
+  },
+  methods: {
+    getCaseList() {
+      let pramse = {
+        start_time: this.formData.startTime,
+        end_time: this.formData.endTime,
+      };
+      this.$axios.post('/omr_zk/defect_issues', pramse).then(res => {
+        this.caseList = res.data
+      });
+    },
+    getCounts() {
+      let pramse = {
+        start_time: this.formData.startTime,
+        end_time: this.formData.endTime,
+      };
+      this.$axios.post('/omr_zk/analysis', pramse).then(res => {
+        this.countsData = res.data;
+      });
+    },
+    funSeleterYear(val) {
+      this.formData.year = val;
+      this.formData.type = '1';
+      this.formData.endTime = this.goTimeTwe(val.end);
+      this.formData.startTime = this.goTimeTwe(val.start);
+    },
+    funSeleterMonth(val) {
+      this.formData.month = val;
+      this.formData.type = '3';
+      this.formData.year = {
+        name: '',
+      };
+      this.formData.quarter = {
+        name: '',
+      };
+      this.formData.endTime = this.goTimeTwe(val.end);
+      this.formData.startTime = this.goTimeTwe(val.start);
+    },
+    funSeleterQuarter(val) {
+      this.formData.type = '2';
+      this.formData.quarter = val;
+      this.formData.endTime = this.formData.year.name + this.zh(val.end);
+      this.formData.startTime = this.formData.year.name + this.zh(val.start);
+    },
+    zh(str) {
+      let arr = str.split('-');
+      return arr.join('');
+    },
+    selectInfo() {
+      // let pramse = {};
+      this.$axios.post('/selectInfo').then(res => {
+        //问题属性 level
+        this.quarterList = res.data.quarter;
+        // 季度
+        this.monthList = res.data.month;
+        //月
+        this.yearList = res.data.year;
+      });
+    },
+    // 选择时间段
+    chooseTime(time) {
+      this.formData.rangeDate = this.timesCalculation(time).slice(0, 2);
+    },
+    funQuery() {
+      //查询
+      let type_id = '';
+      if (this.formData.type == '1') {
+        type_id = this.formData.year.id || '';
+      } else if (this.formData.type == '2') {
+        type_id = this.formData.quarter.id;
+      } else {
+        type_id = this.formData.month.id;
+      }
+      let pramse = {
+        start_time: this.formData.startTime,
+        end_time: this.formData.endTime,
+      };
+      this.storageSet('start_time', this.formData.startTime);
+      this.storageSet('end_time', this.formData.endTime);
+      this.storageSet('homeFrom', this.formData);
+      this.initCharts1(pramse);
+      this.getCounts();
+      this.getCaseList()
+    },
+    initCharts1(pramse) {
+      this.$axios.post('/omr_zk/ranking_department', pramse).then(res => {
+        let dataName = [];
+        let dataFleg = [];
+        const total_error_medical = [];
+        let dataNum = [];
+        for (let item in res.data.slice(0, 10)) {
+          dataName.push(res.data[item].name);
+          dataFleg.push(res.data[item].total_medical);
+          dataNum.push(res.data[item].item);
+          total_error_medical.push(res.data[item].total_error_medical);
+        }
+        // 销毁上一次实例
+        echarts.init(document.getElementById('myChart1')).dispose();
+        // 构建新实例
+        let myChart = echarts.init(document.getElementById('myChart1'));
+        window.addEventListener('resize', function () {
+          myChart.resize();
+        });
+        if (res.data.length) {
+          myChart.setOption({
+            toolbox: {
+              feature: {
+                saveAsImage: {
+                  name: '科室排名',
+                },
+              },
+            },
+            tooltip: {
+              trigger: 'axis',
+              axisPointer: {
+                type: 'cross',
+                crossStyle: {
+                  color: '#999',
+                },
+              },
+            },
+            legend: {
+              show: true,
+            },
+            xAxis: {
+              type: 'category',
+              data: dataName,
+            },
+            grid: {
+              left: '3%',
+              right: '3%',
+              bottom: '3%',
+              containLabel: true,
+            },
+            yAxis: {
+              type: 'value',
+            },
+            series: [
+              {
+                data: dataFleg,
+                type: 'bar',
+                showBackground: true,
+                barMaxWidth: 30,
+                label: {
+                  show: true,
+                  position: 'top',
+                },
+                name: '病历数',
+                backgroundStyle: {
+                  color: 'rgba(180, 180, 180, 0.2)',
+                },
+              },
+              {
+                data: total_error_medical,
+                type: 'bar',
+                showBackground: true,
+                barMaxWidth: 30,
+                label: {
+                  show: true,
+                  position: 'top',
+                },
+                name: '缺陷病历数',
+                backgroundStyle: {
+                  color: 'rgba(180, 180, 180, 0.2)',
+                },
+              },
+            ],
+          });
+        } else {
+          myChart.setOption({
+            title: {
+              text: '暂无数据',
+              x: 'center',
+              y: 'center',
+              textStyle: {
+                fontSize: 14,
+                fontWeight: 'normal',
+              },
+            },
+          });
+        }
+      });
+    },
+  },
+};
+</script>
+  
+  <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: 16px 0;
+    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;
+      font-weight: 400;
+      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;
+            height: 86px;
+            background: #30b48e;
+            border-radius: 5px;
+            position: relative;
+            overflow: hidden;
+            display: flex;
+            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;
+              color: #fff;
+              flex: 1;
+              margin-left: 20px;
+            }
+            .icon {
+              width: 50px;
+              position: absolute;
+              top: 18px;
+              right: 25px;
+            }
+          }
+        }
+        .r {
+          margin: 0 9% 0 0;
+          .i {
+            width: 195px;
+            height: 56px;
+            background: #eaf4ff;
+            border-radius: 4px;
+            margin: 0 0 9px 0;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+
+            .icon {
+              width: 22px;
+              margin: 6px 0 0 27px;
+            }
+            .t {
+              font-size: 18px;
+              font-weight: 400;
+              color: #333333;
+              text-align: left;
+              margin-left: 10px;
+            }
+            .rt {
+              margin-left: 10px;
+              font-weight: bold;
+              color: #38a1f2;
+              font-size: 18px;
+              text-align: left;
+            }
+          }
+
+          .i:nth-child(1) {
+            background: #93d2f3;
+          }
+
+          .i:nth-child(2) {
+            background: #f4ce98;
+          }
+
+          .i:nth-child(3) {
+            background: #de868f;
+          }
+        }
+      }
+      .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;
+}
+</style>
+  

+ 322 - 0
src/views/outpatient/control/medicalRecordNumber.vue

@@ -0,0 +1,322 @@
+<template>
+  <div class="dashboard-container">
+    <div class="tableBox">
+      <div class="block">
+        <div class="blockCon">
+          <div class="selectDns"></div>
+          <el-select v-model="formData.problem" filterable placeholder="请选择">
+            <el-option v-for="(item, index) in departmentList" :label="item.name" :value="item.id" :key="index"></el-option>
+          </el-select>
+          <span class="kong"></span>
+          <el-input v-model="formData.recordNum" class="width150" placeholder="病案号"></el-input>
+          <span class="kong"></span>
+          <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"
+            type="date"
+            style="margin-left: 10px"
+            format="yyyy 年 MM 月 dd 日"
+            value-format="yyyyMMdd"
+            placeholder="结束日期"
+          ></el-date-picker>
+          <span class="kong"></span>
+          <el-button class="sc" @click="funQuery">查询</el-button>
+          <span class="kong"></span>
+          <el-button class="btn1" @click="reset">重置条件</el-button>
+          <el-button class="sc" type="primary">导出Excel表格</el-button>
+          <el-button @click="toBack" style="float: right;">返回</el-button>
+        </div>
+      </div>
+      <!-- <Title :title="'病案列表'" /> -->
+      <el-table :data="tableData" style="width: 100%">
+        <el-table-column type="index" label="序号"></el-table-column>
+        <el-table-column prop="AAC11N" label="出院科室"></el-table-column>
+        <el-table-column prop="AAA28" label="病案号">
+          <template slot-scope="scope">
+            <span class="blue" @click="funGoto(scope.row.MED_REC_ID)">
+              <template>
+                <div>
+                  {{ scope.row.AAA28 }}
+                </div>
+              </template>
+            </span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="AAC01" label="出院日期"></el-table-column>
+        <el-table-column prop="AAA01" label="患者姓名"></el-table-column>
+        <el-table-column prop="ABC01N" label="主要诊断"></el-table-column>
+        <el-table-column prop="ICD9_NAME" label="主要手术"></el-table-column>
+        <el-table-column prop="F_D" label="用药"></el-table-column>
+        <el-table-column prop="AAC04" label="住院天数"></el-table-column>
+        <el-table-column prop="ADA01" label="总费用"></el-table-column>
+      </el-table>
+      <!-- 分页控制 -->
+      <mPagination v-if="tableData && tableData.length !== 0" :data="paginationData" @pageChangeEvent="pageHasChanged"></mPagination>
+    </div>
+  </div>
+</template>
+  
+  <script>
+import Title from '@/components/Title';
+import { mapGetters } from 'vuex';
+import mPagination from '@/components/m-pagination';
+
+export default {
+  name: 'Dashboard',
+  components: {
+    Title,
+    mPagination,
+  },
+  computed: {
+    ...mapGetters(['name']),
+  },
+  data() {
+    return {
+      formData: {
+        // rangeDate: [],
+        recordNum: '',
+        startTime: '',
+        endTime: '',
+        problem:'all'
+      },
+      tableData: [],
+      // 分页数据
+      paginationData: {
+        total: 10,
+        currentPage: 1,
+        pageSize: 10,
+      },
+      departmentList: [],
+    };
+  },
+  mounted() {
+    this.formData.startTime = this.storageGet('start_time');
+    this.formData.endTime = this.storageGet('end_time');
+    this.funQuery();
+    this.selectInfo()
+  },
+  methods: {
+    toBack() {
+      this.$router.history.go(-1)
+    },
+    funGoto(val) {
+      this.storageSet('getData', val);
+      // 之前的页面
+      // this.goto('/homePage');
+      this.goto('/caseViews')
+    },
+    funDel() {
+      this.formData1.seniorList.pop();
+    },
+    funAdd() {
+      this.formData1.seniorList.push({
+        key: '',
+        value: '',
+        type: '1',
+      });
+    },
+    pageHasChanged() {
+      this.funQuery();
+    },
+    selectInfo() {
+      let pramse = {};
+      this.$axios.post('/selectInfo').then(res => {
+        this.payList = res.data.pay;
+        console.log(this.payList);
+        //支付方式 pay
+        this.departmentList = res.data.department;
+        //出院科室 department
+        // this.levelList = res.data.level;
+        // //问题属性 level
+        // this.coderList = res.data.coder;
+        // //编码元  coder
+        // this.statusList = res.data.status;
+        // this.fieldList = res.data.field;
+      });
+    },
+    funQuery() {
+      //查询
+      let pramse = {
+        // AAC01: this.formData.rangeDate, //出院时间
+        AAC01_start_date: this.formData.startTime || '',
+        AAC01_end_date: this.formData.endTime || '',
+        start_time: this.formData.startTime, //开始时间
+        end_time: this.formData.endTime, //结束时间
+        AAA28: this.formData.recordNum,
+        page: this.paginationData.currentPage, //页码
+        limit: this.paginationData.pageSize, //条数
+      };
+      this.$axios.post('/qualityList', pramse).then(res => {
+        console.log(res);
+
+        this.paginationData.total = res.data.count;
+        this.tableData = res.data.list;
+      });
+    },
+    reset() {
+      // 重置数据
+      this.paginationData.currentPage= 1; //页码
+      this.paginationData.pageSize = 10; //条数
+      if (this.choice == 0) {
+        Object.assign(this.$data.formData, this.$options.data().formData);
+      } else {
+        Object.assign(this.$data.formData, this.$options.data().formData);
+      }
+    },
+  },
+};
+</script>
+  <style scoped>
+::v-deep.el-pagination.is-background .btn-next,
+::v-deep.el-pagination.is-background .btn-prev,
+::v-deep.el-pagination.is-background .el-pager li {
+  margin: 0 5px;
+  background-color: #fff;
+  color: #606266;
+  min-width: 30px;
+  border-radius: 2px;
+  border: 1px solid #dfe3f3;
+  line-height: 27px;
+}
+::v-deep.el-pagination.is-background .el-pager li:not(.disabled).active {
+  background: #7e8bab;
+}
+::v-deep.el-table .el-table__row td {
+  color: #7e8bab;
+  border-bottom: 1px solid #f4f4f4;
+}
+::v-deep.el-table .el-table__header tr th:first-child {
+  border-radius: 10px 0px 0px 10px;
+}
+::v-deep.el-table .el-table__header tr th:last-child {
+  border-radius: 0px 10px 10px 0px;
+}
+::v-deep.el-table .el-table__header tr th {
+  background: #f1f6ff;
+  color: #13171e;
+  border-bottom: 0px;
+}
+</style>
+  <style lang="scss" scoped>
+.tableBox {
+  background: #fff;
+  padding: 19px;
+  border-radius: 5px;
+  font-size: 12px;
+}
+.block {
+  background: #fff;
+  border-radius: 5px;
+  margin-bottom: 16px;
+  padding: 20px 30px;
+  margin-bottom: 20px;
+  .fBtn {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    .btn1 {
+      background: #185da6;
+      color: #fff;
+    }
+    .btn2 {
+      color: #185da6;
+      background: #d5e4ff;
+    }
+  }
+  .bnh {
+    margin-bottom: 20px;
+  }
+  .barBtn {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  .selects {
+    width: 100%;
+  }
+  .rowsa {
+    margin-bottom: 20px;
+  }
+}
+.tableBox {
+  background: #fff;
+  padding: 19px;
+  border-radius: 5px;
+}
+.dashboard {
+  &-container {
+    margin: 30px;
+  }
+  &-text {
+    font-size: 30px;
+    line-height: 46px;
+  }
+}
+.pind {
+  padding: 0 20px;
+}
+.pind10 {
+  padding: 0 5px;
+}
+.width150 {
+  width: 200px;
+}
+.width300 {
+  width: 295px;
+}
+.width500 {
+  width: 645px;
+}
+.width90 {
+  width: 90px;
+}
+.width130 {
+  width: 120px;
+}
+.blue {
+  color: #185da6;
+}
+.block {
+  background: #fff;
+  width: 100%;
+  align-items: center;
+  border-radius: 5px;
+  height: 75px;
+  margin-bottom: 16px;
+  padding-left: 10px;
+  margin-bottom: 20px;
+  margin-bottom: 20px;
+  padding-left: 0;
+  padding-right: 0;
+  .blockCon {
+    align-items: center;
+    .selectDns {
+      span {
+        margin-right: 5px;
+      }
+    }
+    .demonstration {
+      margin-left: 10px;
+    }
+    .pickers {
+      margin-left: 5px;
+    }
+    .lsxd {
+      margin-left: 20px;
+    }
+    .ins {
+      width: 150px;
+      margin: 0 10px;
+    }
+  }
+  .sc {
+    background: #185da6;
+    color: #fff;
+  }
+}
+.kong {
+  padding: 0 5px;
+}
+</style>
+