Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

zz 2 tygodni temu
rodzic
commit
a0b5b952ab

+ 10 - 6
src/views/allcase/caseViews.vue

@@ -215,6 +215,7 @@ import DeathText from './components/DeathText.vue';
 import VueDragResize from 'vue-drag-resize';
 import Axios from 'axios'
 import { Loading } from 'element-ui';
+import { getHomeData } from '@/api/qc'
 
 export default {
   components: {
@@ -521,12 +522,15 @@ export default {
       const params = {
         id: this.valData,
       };
-      if (this.is_tm_path.includes(this.$route.path)) {
-        params.is_tm = 1;
-      }
-      this.$axios.post('/medical_record', params).then(res => {
-        this.mainHomeData = res.data;
-      });
+      // if (this.is_tm_path.includes(this.$route.path)) {
+      //   params.is_tm = 1;
+      // }
+      // this.$axios.post('/medical_record', params).then(res => {
+      //   this.mainHomeData = res.data;
+      // });
+      getHomeData(params).then(res => {
+        this.mainHomeData = res.data
+      })
     },
 
     getTree() {

+ 9 - 3
src/views/allcase/components/CaseQualityBox2.vue

@@ -115,9 +115,9 @@
           <!-- is_appeal: 是否申述 -->
           <div class="list-box box-card" :key="index">
             <div class="list-score-tips-box">
-              <div class="list-left-score" :class=" item.level == 1 ? 'hover-1' : 'hover-2' ">
-                <div> {{ item.level == 1? '必改':'建议' }} </div>
-                <div>-{{ item.score }}</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>
@@ -721,6 +721,7 @@ import { examineAppeal, getAppealData, getBrry } from '@/api/qc';
     display: flex;
     .list-left-score{
       width: 70px;
+      height: 66px;
       text-align: center;
       font-size: 20px;
       font-weight: 700;
@@ -740,6 +741,11 @@ import { examineAppeal, getAppealData, getBrry } from '@/api/qc';
         color: rgb(52, 140, 235);
         border-right: 3px solid rgb(52, 140, 235);
       }
+      &.hover-0{
+        background: rgb(253, 246, 236);
+        color: rgb(230, 162, 60);
+        border-right: 3px solid rgb(230, 162, 60);
+      }
       &>div{
         font-size: 20px;
       }

+ 5 - 1
src/views/recordsRoom/qc/components/CaseQualityBox2.vue

@@ -313,7 +313,7 @@
           <div class="hz"></div>
         </div>
       </div>
-    <AppealModal ref="AppealModalRef" @onUpdate="getTabsData()"/>
+    <AppealModal ref="AppealModalRef" @onUpdate="handleUpdate()"/>
   </div>
 </template>
 
@@ -679,6 +679,10 @@ export default {
         this.$refs.AppealModalRef.openAppealDialog(type, items, quality_type)
       }
     },
+    handleUpdate() {
+      this.getTabsData();
+      this.getAppealMessageNum();
+    },
     getTabsData(isNeedRefreshNum) {
       // 病案首页
       if(this.activeName == 'first') {

+ 17 - 1
src/views/recordsRoom/qc/components/expertQualityControl/SearchBox.vue

@@ -199,7 +199,9 @@ export default {
         surgicalPlanning: '',
         AEM01C: '',
         const1: '',
-        const2: ''
+        const2: '',
+        order_by_sort: '',
+        order_by_field: ''
       },
       searchOptions: {
         ksArray: [],//科室options
@@ -371,10 +373,24 @@ export default {
     this.getSearchOptions()
   },
   methods: {
+    handleSortChange(column) {
+      const { prop, order } = column;
+      if (order === 'descending') {
+          this.formData.order_by_sort = 'desc';
+      } else if (order === 'ascending') {
+          this.formData.order_by_sort = 'asc';
+      } else {
+          this.formData.order_by_sort = 'desc';
+      }
+      this.formData.order_by_field = prop
+      this.$emit('search')
+    },
     onSubmit() {
       this.$emit('search')
     },
     onReset() {
+      this.formData.order_by_sort = ''
+      this.formData.order_by_field = ''
       this.$refs.filterListFormRef.resetFields();
       this.$emit('reset')
     },

+ 8 - 3
src/views/recordsRoom/qc/components/expertQualityControl/TableBox.vue

@@ -4,6 +4,8 @@
     :data="data"
     style="width: 100%"
     height="452px"
+    @sort-change="handleSortChange"
+    ref="filterTableRef"
   >
     <!-- <el-table-column type="selection" width="40"></el-table-column> -->
     <el-table-column type="index" label="序号" width="50" />
@@ -13,8 +15,8 @@
       </template>
     </el-table-column>
     <el-table-column prop="BRXM" label="患者姓名" width="90" />
-    <el-table-column prop="AAB01" label="入院时间"/>
-    <el-table-column prop="AAC01" label="出院时间"/>
+    <el-table-column prop="AAB01" label="入院时间" sortable/>
+    <el-table-column prop="AAC01" label="出院时间" sortable/>
   </el-table>
 </template>
 
@@ -41,7 +43,7 @@ export default {
       selectedArray: []
     }
   },
-  emits: ['onClickRow'],
+  emits: ['onClickRow', 'sortChange'],
   methods: {
     moment,
     toPage(row) {
@@ -50,6 +52,9 @@ export default {
 
     handleSelectionChange(val) {
       this.selectedArray = val;
+    },
+    handleSortChange(column) {
+      this.$emit('sortChange', column)
     }
   },
 };

+ 232 - 0
src/views/recordsRoom/qc/components/qualityControlPlan/SearchBox.vue

@@ -0,0 +1,232 @@
+<template>
+  <el-form style="width: 100%" ref="filterListFormRef" :model="formData" class="demo-form-inline" label-suffix=":"
+    label-width="74px">
+    <el-row :gutter="24">
+      <el-col :span="5">
+        <el-form-item label="计划名称" prop="jhmc">
+          <el-input v-model="formData.jhmc" placeholder="请输入"></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="6">
+        <el-form-item label="当前进度" prop="dqjd">
+          <el-select style="width:100%" v-model="formData.dqjd" filterable clearable placeholder="请选择">
+            <el-option label="全部" value="" />
+            <el-option label="已完成" value="1" />
+            <el-option label="未完成" value="0" />         
+          </el-select>
+        </el-form-item>
+      </el-col>
+      <el-col :span="6">
+        <el-form-item label="发布人" prop="fbr">
+          <el-select style="width:100%" v-model="formData.fbr" filterable clearable placeholder="请选择">
+            <el-option v-for="item of publishPeopleList" :key="item.dep_id" :label="item.name" :value="item.dep_id" />
+          </el-select>
+        </el-form-item>
+      </el-col>
+     
+      <el-col :span="7">
+        <el-form-item label="发布时间">
+          <div style="width: 100%;display: flex;gap: 5px;">
+            <el-form-item prop="fbsj_START">
+              <el-date-picker style="width: 100%" v-model="formData.fbsj_START" type="date" placeholder="开始日期"
+                :picker-options="AAC01PickerOptions" value-format="yyyyMMdd" format="yyyy年MM月dd日">
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item prop="fbsj_END">
+              <el-date-picker style="width: 100%" v-model="formData.fbsj_END" type="date" placeholder="结束日期"
+                value-format="yyyyMMdd" format="yyyy年MM月dd日">
+              </el-date-picker>
+            </el-form-item>
+          </div>
+        </el-form-item>
+      </el-col>
+     
+    </el-row>
+    <el-row :gutter="24">
+      <el-col :span="7" :offset="17">
+        <el-form-item label="" prop="" style="float: right;">
+          <el-button type="primary" @click="onSubmit">查询</el-button>
+          <el-button @click="onReset">重置</el-button>
+        </el-form-item>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+<script>
+import moment from 'moment/moment';
+
+export default {
+  emits: ['search', 'reset'],
+  data() {
+    const that = this
+    return {
+      formData: {
+        fbsj_START: '',
+        fbsj_END: '',
+        jhmc: '',
+        fbr: '',
+        dqjd: ''
+      },
+      publishPeopleList: [],
+      AAC01PickerOptions: {
+        disabledDate: (time) => {
+          if (that.formData.fbsj_END != "") {
+            return time.getTime() > Date.now();
+          }
+        },
+        shortcuts: [{
+          text: '今天',
+          onClick(picker) {
+            picker.$emit('pick', moment().format('YYYYMMDD'));
+            that.formData.fbsj_END = moment().format('YYYYMMDD')
+          }
+        }, {
+          text: '近7天',
+          onClick(picker) {
+            picker.$emit('pick', moment().subtract(7, 'days').format('YYYYMMDD'));
+            that.formData.fbsj_END = moment().format('YYYYMMDD')
+          }
+        }, {
+          text: '近30天',
+          onClick(picker) {
+            picker.$emit('pick', moment().subtract(30, 'days').format('YYYYMMDD'));
+            that.formData.fbsj_END = moment().format('YYYYMMDD')
+          }
+        }, {
+          text: '一季度',
+          onClick(picker) {
+            picker.$emit('pick', moment().startOf('year').format('YYYYMMDD'));
+            that.formData.fbsj_END = moment().startOf('year').add(3,'M').subtract(1, 'days').format('YYYYMMDD')
+          }
+        },  {
+          text: '二季度',
+          onClick(picker) {
+            picker.$emit('pick', moment().startOf('year').add(3,'M').format('YYYYMMDD'));
+            that.formData.fbsj_END = moment().startOf('year').add(6,'M').subtract(1, 'days').format('YYYYMMDD')
+          }
+        },  {
+          text: '三季度',
+          onClick(picker) {
+            picker.$emit('pick', moment().startOf('year').add(6,'M').format('YYYYMMDD'));
+            that.formData.fbsj_END = moment().startOf('year').add(9,'M').subtract(1, 'days').format('YYYYMMDD')
+          }
+        },  {
+          text: '四季度',
+          onClick(picker) {
+            picker.$emit('pick', moment().startOf('year').add(9,'M').format('YYYYMMDD'));
+            that.formData.fbsj_END = moment().startOf('year').add(12,'M').subtract(1, 'days').format('YYYYMMDD')
+          }
+        }, {
+          text: moment().add(-2,'Y').format("YYYY"),
+          onClick(picker) {
+            picker.$emit('pick', moment().add(-2,'Y').startOf('year').format('YYYYMMDD'));
+            that.formData.fbsj_END = moment().add(-2,'Y').endOf('year').format('YYYYMMDD')
+          }
+        }, {
+          text: moment().add(-1,'Y').format("YYYY"),
+          onClick(picker) {
+            picker.$emit('pick', moment().add(-1,'Y').startOf('year').format('YYYYMMDD'));
+            that.formData.fbsj_END = moment().add(-1,'Y').endOf('year').format('YYYYMMDD')
+          }
+        }, {
+          text: moment().format("YYYY"),
+          onClick(picker) {
+            picker.$emit('pick', moment().startOf('year').format('YYYYMMDD'));
+            that.formData.fbsj_END = moment().endOf('year').format('YYYYMMDD')
+          }
+        }]
+      },
+      AAB01PickerOptions: {
+        disabledDate: (time) => {
+          if (that.formData.AAB01_END != "") {
+            return time.getTime() > Date.now();
+          }
+        },
+        shortcuts: [{
+          text: '今天',
+          onClick(picker) {
+            picker.$emit('pick', moment().format('YYYYMMDD'));
+            that.formData.AAB01_END = moment().format('YYYYMMDD')
+          }
+        }, {
+          text: '近7天',
+          onClick(picker) {
+            picker.$emit('pick', moment().subtract(7, 'days').format('YYYYMMDD'));
+            that.formData.AAB01_END = moment().format('YYYYMMDD')
+          }
+        }, {
+          text: '近30天',
+          onClick(picker) {
+            picker.$emit('pick', moment().subtract(30, 'days').format('YYYYMMDD'));
+            that.formData.AAB01_END = moment().format('YYYYMMDD')
+          }
+        }, {
+          text: '一季度',
+          onClick(picker) {
+            picker.$emit('pick', moment().startOf('year').format('YYYYMMDD'));
+            that.formData.AAB01_END = moment().startOf('year').add(3,'M').subtract(1, 'days').format('YYYYMMDD')
+          }
+        },  {
+          text: '二季度',
+          onClick(picker) {
+            picker.$emit('pick', moment().startOf('year').add(3,'M').format('YYYYMMDD'));
+            that.formData.AAB01_END = moment().startOf('year').add(6,'M').subtract(1, 'days').format('YYYYMMDD')
+          }
+        },  {
+          text: '三季度',
+          onClick(picker) {
+            picker.$emit('pick', moment().startOf('year').add(6,'M').format('YYYYMMDD'));
+            that.formData.AAB01_END = moment().startOf('year').add(9,'M').subtract(1, 'days').format('YYYYMMDD')
+          }
+        },  {
+          text: '四季度',
+          onClick(picker) {
+            picker.$emit('pick', moment().startOf('year').add(9,'M').format('YYYYMMDD'));
+            that.formData.AAB01_END = moment().startOf('year').add(12,'M').subtract(1, 'days').format('YYYYMMDD')
+          }
+        }, {
+          text: moment().add(-2,'Y').format("YYYY"),
+          onClick(picker) {
+            picker.$emit('pick', moment().add(-2,'Y').startOf('year').format('YYYYMMDD'));
+            that.formData.AAB01_END = moment().add(-2,'Y').endOf('year').format('YYYYMMDD')
+          }
+        }, {
+          text: moment().add(-1,'Y').format("YYYY"),
+          onClick(picker) {
+            picker.$emit('pick', moment().add(-1,'Y').startOf('year').format('YYYYMMDD'));
+            that.formData.AAB01_END = moment().add(-1,'Y').endOf('year').format('YYYYMMDD')
+          }
+        }, {
+          text: moment().format("YYYY"),
+          onClick(picker) {
+            picker.$emit('pick', moment().startOf('year').format('YYYYMMDD'));
+            that.formData.AAB01_END = moment().endOf('year').format('YYYYMMDD')
+          }
+        }]
+      },
+    }
+  },
+  created() {
+    this.getDeportmentList()
+  },
+  methods: {
+    onSubmit() {
+      this.$emit('search')
+    },
+    onReset() {
+      this.$refs.filterListFormRef.resetFields();
+      this.$emit('reset')
+    },
+    getDeportmentList() {
+      this.$axios.get('/user/depDropDown').then(res => {
+        const { data } = res
+        this.publishPeopleList = data;
+      }).catch(error => {
+        console.log(error)
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 169 - 0
src/views/recordsRoom/qc/components/qualityControlPlan/TableBox.vue

@@ -0,0 +1,169 @@
+<template>
+  <el-table
+    v-loading="loading"
+    :data="data"
+    style="width: 100%"
+    @selection-change="handleSelectionChange"
+  >
+    <!-- <el-table-column type="selection" width="55"></el-table-column> -->
+    <el-table-column type="index" label="序号" width="80" />
+    <el-table-column prop="AAA28" label="计划名称" width="180">
+      <template slot-scope="scope">
+        <el-button class="blue-link" type="text" @click="toPage(scope.row)">{{ scope.row.AAA28 }}</el-button>
+      </template>
+    </el-table-column>
+    <el-table-column
+      prop=""
+      label="进度条"
+      width="220"
+      show-overflow-tooltip>
+      <template slot-scope="scope">
+        <el-progress :text-inside="true" :stroke-width="26" :percentage="70"></el-progress>
+        <el-progress :text-inside="true" :stroke-width="24" :percentage="100" status="success"></el-progress>
+        <el-progress :text-inside="true" :stroke-width="22" :percentage="80" status="warning"></el-progress>
+        <el-progress :text-inside="true" :stroke-width="20" :percentage="50" status="exception"></el-progress>
+      </template>
+    </el-table-column>
+    <el-table-column
+      prop=""
+      label="质控计划周期"
+      width="220"
+    >
+      <template slot-scope="scope">
+        <span>2020-10-10</span>&nbsp;至&nbsp;<span>2020-10-10</span>
+      </template>
+    </el-table-column>
+    <el-table-column
+      width="120"
+      prop="appeal_docter"
+      label="发布人"
+    />
+    <el-table-column
+      width="160"
+      prop="appeal_time"
+      label="发布时间"
+    >
+      <template slot-scope="scope">
+        <span>{{scope.row.appeal_time ? moment(scope.row.appeal_time * 1000).format('YYYY-MM-DD HH:MM:ss') : ''}}</span>
+      </template>
+    </el-table-column>
+    <el-table-column prop="" label="操作">
+      <template slot-scope="scope">
+        <el-button type="text" icon="el-icon-edit"></el-button>
+        <el-button type="text" style="color:#ef1f3a" icon="el-icon-delete"></el-button>
+      </template>
+    </el-table-column>
+  </el-table>
+</template>
+
+<script>
+import moment from 'moment/moment';
+
+export default {
+  props: {
+    data: {
+      type: Array,
+      default() {
+        return [];
+      },
+    },
+    loading: {
+      type: Boolean,
+      default() {
+        return false;
+      },
+    }
+  },
+  data() {
+    return {
+      selectedArray: []
+    }
+  },
+  methods: {
+    moment,
+    toPage(row) {
+      const { ZYH } = row;
+      this.$router.push({ path: '/qc/caseViews', query: {
+        ZYH,
+        from: 'review'
+      }, meta: {
+        title: '申诉详情'
+      }});
+    },
+
+    handleSelectionChange(val) {
+      this.selectedArray = val;
+    }
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+// ::v-deep.el-table {
+//   .selected-row {
+//     background-color:#ecf5ff !important;
+//   }
+// }
+
+@mixin status() {
+    width: 60px;
+    text-align: center;
+    border-width: 1px;
+    border-style: solid;
+    border-radius: 4px;
+    font-weight: 500
+}
+
+.status-0 {
+  @include status();
+  background-color: #fccbd4;
+  border-color: #ef1f3a;
+  color: #ef1f3a;
+}
+.status-1 {
+  @include status();
+  background-color: #d2e4d6;
+  border-color: #318240;
+  color: #318240;
+}
+.status-2 {
+  @include status();
+  background-color: #ef1f3a;
+  border-color: #ef1f3a;
+  color: #ffffff;
+}
+
+@mixin score-level() {
+    font-weight: 500
+}
+
+.score-level-1 {
+  @include score-level();
+  color: #318240;
+}
+.score-level-2 {
+  @include score-level();
+  color: #89c30f;
+}
+.score-level-3 {
+  @include score-level();
+  color: #ec890e;
+}
+.score-level-4 {
+  @include score-level();
+  color: #ef1f3a;
+}
+
+.quality-type-1 {
+  @include score-level();
+  color: #07818a;
+}
+.quality-type-2 {
+  @include score-level();
+  color: #3c108f;
+}
+.quality-type-3 {
+  @include score-level();
+  color: #a26d0a
+}
+</style>

+ 6 - 1
src/views/recordsRoom/qc/expertQualityControl.vue

@@ -8,7 +8,7 @@
             </el-row>
             <div class="content">
                 <el-card class="tableCard">
-                    <TableBoxVue :loading="loading" :data="tableData" ref="tableRef" @onClickRow="getDetailData()"/>
+                    <TableBoxVue :loading="loading" :data="tableData" ref="tableRef" @onClickRow="getDetailData()" @sortChange="handleSortChange"/>
                 </el-card>
                 <el-card class="detailCard" v-loading="detailLoading">
                     <div slot="header" class="detailCardHeader">
@@ -67,6 +67,10 @@ export default {
         this.getList()
     },
     methods: {
+         // table 字段排序
+        handleSortChange(column) {
+            this.$refs.SearchBoxRef.handleSortChange(column)
+        },
         getList() {
             this.loading = true
             getCaseAppealList({
@@ -96,6 +100,7 @@ export default {
             this.getList()
         },
         handleReset() {
+            this.$refs.tableRef.$refs.filterTableRef.clearSort();
             this.handleSearch()
         },
         getDetailData() {

+ 86 - 0
src/views/recordsRoom/qc/qualityControlPlan.vue

@@ -0,0 +1,86 @@
+<template>
+    <div class="app-container">
+      <SearchBoxVue class="filter-list-form" ref="SearchBoxRef" @search="handleSearch" @reset="handleReset" />
+      <div class="filter-list-action">
+        <el-row type="flex" justify="space-between" align="middle">
+          <mPagination v-if="tableData && tableData.length !== 0" :data="paginationData" @pageChangeEvent="pageHasChanged"></mPagination>
+          <el-row type="flex" justify="end" style="flex:1">
+            <el-button @click="openAddPlanModal" type="primary">新建计划</el-button>
+          </el-row>
+        </el-row>
+        <TableBoxVue :loading="loading" :data="tableData" ref="tableRef"/>
+      </div>
+      <AddPlanModalBoxVue ref="AddPlanModalBoxVueRef" @onUpdate="getList"/>
+    </div>
+  </template>
+  
+  <script>
+  import mPagination from '@/components/m-pagination';
+  import SearchBoxVue from '@/views/recordsRoom/qc/components/qualityControlPlan/SearchBox.vue'
+  import TableBoxVue from '@/views/recordsRoom/qc/components/qualityControlPlan/TableBox.vue'
+  import AddPlanModalBoxVue from '@/views/recordsRoom/qc/components/qualityControlPlan/AddPlanModal.vue'
+  import pagination from '@/components/Pagination/index2.vue'
+  import { getCaseAppealList } from '@/api/admin'
+  
+  export default {
+    components: {
+      mPagination,
+      SearchBoxVue,
+      TableBoxVue,
+      pagination,
+      AddPlanModalBoxVue
+    },
+    data() {
+      return {
+        loading: false,
+        tableData: [],
+        paginationData: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10
+        },
+      }
+    },
+    created() {
+    },
+    mounted() {
+      this.getList()
+    },
+    methods: {
+      getList() {
+        this.loading = true
+        getCaseAppealList({
+          ...this.$refs.SearchBoxRef.formData,
+          page: this.paginationData.currentPage,
+          page_size: this.paginationData.pageSize
+        }).then(res => {
+          this.paginationData.total = res.data.count
+          this.tableData = res.data.list
+          this.$refs.tableRef.selectedArray = []
+        }).catch(error => {
+          console.log(error)
+        }).finally(() => {
+          this.loading = false
+        })
+      },
+  
+      pageHasChanged() {
+        this.getList()
+      },
+      handleSearch() {
+        this.paginationData.currentPage = 1
+        this.getList()
+      },
+      handleReset() {
+        this.handleSearch()
+      },
+      openAddPlanModal() {
+        this.$refs.AddPlanModalBoxVueRef.openModal()
+      }
+    }
+  }
+  </script>
+  
+  <style lang="scss" scoped>
+  </style>
+