Prechádzať zdrojové kódy

[dev] 报表管理添加调配统计

xiong 1 rok pred
rodič
commit
78e71a226a

+ 18 - 0
src/api/pharmacy/blend.js

@@ -56,3 +56,21 @@ export function assignAndPinOrder(query) {
     params: query,
   });
 }
+
+// 调配统计列表
+export function reportStatistics(query) {
+  return request({
+    url: '/prescription/prescriptionCore/reportStatistics',
+    method: 'get',
+    params: query,
+  });
+}
+
+// 调配师明细统计列表
+export function selectOralPreList(query) {
+  return request({
+    url: '/prescription/prescriptionCore/selectOralPreList',
+    method: 'get',
+    params: query,
+  });
+}

+ 315 - 0
src/views/reportManagement/blendReport/index.vue

@@ -0,0 +1,315 @@
+<template>
+  <div class="wrap app-container">
+    <div class="tools">
+      <el-select
+        v-model="form.yljgId"
+        placeholder="请选择医疗机构"
+      >
+        <el-option
+          v-for="item in listMedicalMechanismArr"
+          :key="item.id"
+          :value="item.id"
+          :label="item.name"
+          :disabled="item.state == 1 ? false : true"
+        ></el-option>
+      </el-select>
+      <el-date-picker
+        v-model="form.date"
+        size="mini"
+        type="datetimerange"
+        value-format="yyyy-MM-dd hh:mm:ss"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期"
+      >
+      </el-date-picker>
+      <el-input
+        v-model="form.nameReq"
+        style="width: 190px;"
+        placeholder="请输入调配师姓名 / 工号"
+        clearable
+        size="small"
+        @keyup.enter.native="search"
+      />
+      <el-button icon="el-icon-search" size="mini" type="primary" @click="search()">搜索</el-button>
+      <el-button icon="el-icon-refresh" size="mini" @click="clear()">清空</el-button>
+      <!--<el-button size="mini" type="primary" @click="exportExcel">导出</el-button>-->
+      <!--<el-button size="mini" type="primary" @click="print">打印</el-button>-->
+    </div>
+    <div class="content">
+      <el-table :data="tableData" size="mini" style="width: 100%">
+        <el-table-column label="序号" width="60">
+          <template slot-scope="scope">{{
+              scope.$index + 1 + (
+                form.pageNum - 1
+              ) * form.pageSize
+            }}
+          </template>
+        </el-table-column>
+        <el-table-column label="医疗机构" align="center" prop="yljgName" show-overflow-tooltip />
+        <el-table-column label="调配师" align="center" prop="nickName" />
+        <el-table-column label="工号" align="center" prop="userName" />
+        <el-table-column label="性别" align="center" prop="sex" />
+        <el-table-column label="手机号码" align="center" prop="phoneNumber" />
+        <el-table-column label="已调配处方总数" align="center" prop="totalOrders"></el-table-column>
+        <el-table-column label="已调配处方剂数" align="center" prop="totalNumSum"></el-table-column>
+        <el-table-column
+          label="操作"
+          align="center"
+          class-name="small-padding fixed-width"
+          width="80"
+          fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              type="primary"
+              style="width: 40px"
+              @click="handleDetail(scope.row)"
+            >明细
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="page">
+        <pagination
+          v-show="total > 0"
+          :total="total"
+          :page.sync="form.pageNum"
+          :limit.sync="form.pageSize"
+          @pagination="getDataList"
+        />
+      </div>
+    </div>
+    <el-dialog
+      title="调配明细"
+      :visible.sync="subOpen"
+      width="1280px"
+      append-to-body
+      custom-class="wrap dialog-wrap"
+    >
+      <div class="tools">
+        <el-button size="mini" style="margin-right: 10px;">{{ subForm.nickName }}</el-button>
+        <el-select v-model="subForm.preMzZy" size="mini" placeholder="门诊/住院">
+          <el-option label="门诊" value="1"></el-option>
+          <el-option label="住院" value="2"></el-option>
+        </el-select>
+        <el-select v-model="subForm.type" size="mini" placeholder="处方类型">
+          <el-option label="中药处方" value="1"></el-option>
+          <el-option label="中药制剂" value="2"></el-option>
+        </el-select>
+        <el-button icon="el-icon-search" size="mini" type="primary" @click="search('sub')">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="clear('sub')">重置</el-button>
+        <!--<el-button size="mini" type="primary" @click="exportExcel">导出</el-button>-->
+        <!--<el-button size="mini" type="primary" @click="print">打印</el-button>-->
+      </div>
+      <div class="content">
+        <el-table :data="subTableData" size="mini" style="width: 100%;" :max-height="subMaxHeight">
+          <el-table-column label="序号" width="60">
+            <template slot-scope="scope">{{
+                scope.$index + 1 + (
+                  subForm.pageNum - 1
+                ) * subForm.pageSize
+              }}
+            </template>
+          </el-table-column>
+          <el-table-column label="调配时间" align="center" prop="allocateTime" />
+          <el-table-column label="门诊/住院" align="center">
+            <template slot-scope="scope">{{ scope.row.preMzZy == 1 ? '门诊' : '住院' }}</template>
+          </el-table-column>
+          -->
+          <el-table-column label="处方号" align="center" prop="preNo" />
+          <el-table-column label="剂数" align="center" prop="number" />
+          <el-table-column label="发药类型" align="center" >
+            <template slot-scope="scope">{{
+                scope.row.type == 1
+                  ? '中药处方'
+                  : scope.row.type == 2
+                    ? '中药制剂'
+                    : ''
+              }}
+            </template>
+          </el-table-column>
+          -->
+          <el-table-column label="处方名称" align="center" prop="preName" show-overflow-tooltip />
+          <el-table-column label="患者" align="center" prop="name" />
+          <el-table-column label="性别" align="center" prop="sex" />
+          <el-table-column label="临床诊断" align="center" prop="patientContent" />
+          <el-table-column label="开方医生" align="center" prop="doctor" />
+        </el-table>
+        <div class="page">
+          <pagination
+            v-show="subTotal > 0"
+            :total="subTotal"
+            :page.sync="subForm.pageNum"
+            :limit.sync="subForm.pageSize"
+            @pagination="getSubDataList()"
+          />
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import { reportStatistics, selectOralPreList } from '@/api/pharmacy/blend'
+import { listMedicalMechanism }                from '@/api/medical/mechanism'
+import dayjs                                   from 'dayjs'
+
+
+export default {
+  data() {
+    return {
+      form: {
+        pageNum: 1,
+        pageSize: 10
+      },
+      subForm: {
+        pageNum: 1,
+        pageSize: 10,
+        type: null,
+        preMzZy: null,
+        userId: null,
+        nickName: null
+      },
+      total: 0,
+      tableData: [],
+      subOpen: false,
+      subLoading: false,
+      subTotal: 0,
+      subTableData: [],
+
+      listMedicalMechanismArr: []
+    }
+  },
+  computed: {
+    subMaxHeight() {
+      return Math.floor(window.innerHeight * 0.8) - 100
+    }
+  },
+  created() {
+    this.getListMedicalMechanism()
+  },
+  mounted() {
+    this.clear()
+  },
+  methods: {
+    getListMedicalMechanism() {
+      listMedicalMechanism().then((res) => {
+        this.listMedicalMechanismArr = res.data
+      })
+    },
+    getDataList() {
+      const { date, ...form } = this.form
+      if ( date && date.length ) {
+        form.startTime = date[ 0 ]
+        form.endTime = date[ 1 ]
+      }
+      reportStatistics(form).then(res => {
+        if ( res.code == 200 ) {
+          this.tableData = res.rows
+          this.total = res.total
+        }
+      })
+    },
+    getSubDataList() {
+      this.subLoading = true
+      const { date, ...form } = { ...this.form, ...this.subForm }
+      if ( date && date.length ) {
+        form.startTime = date[ 0 ]
+        form.endTime = date[ 1 ]
+      }
+      selectOralPreList(form).then(res => {
+        if ( res.code == 200 ) {
+          this.subTableData = res.rows
+          this.subTotal = res.total
+        }
+        this.subLoading = false
+      }).catch(() => {
+        this.subLoading = false
+      })
+    },
+    search(table) {
+      if ( table === 'sub' ) {
+        this.subForm.pageNum = 1
+        this.getSubDataList()
+      } else {
+        this.form.pageNum = 1
+        this.getDataList()
+      }
+    },
+    clear(table) {
+      if ( table === 'sub' ) {
+        this.subForm = {
+          ...this.subForm,
+          type: null,
+          preMzZy: null,
+          pageNum: 1,
+          pageSize: this.subForm.pageSize
+        }
+      } else {
+        this.form = {
+          pharmacyId: localStorage.getItem('pharmacyId'),
+          pageNum: 1,
+          pageSize: this.form.pageSize,
+          date: [
+            dayjs().startOf('month').format('YYYY-MM-DD HH:mm:ss'),
+            dayjs().endOf('day').format('YYYY-MM-DD HH:mm:ss')
+          ],
+          yljgId: null,
+          nameReq: null
+        }
+      }
+      this.search(table)
+    },
+    handleDetail(row) {
+      this.subForm = {
+        userId: row.userId,
+        nickName: row.nickName,
+        pageNum: 1,
+        pageSize: this.form.pageSize
+      }
+
+      this.subOpen = true
+      this.search('sub')
+    }
+  }
+}
+</script>
+<style scoped lang="scss">
+.wrap {
+  .content {
+    padding-top: 0;
+  }
+
+  .page {
+    text-align: center;
+    margin-top: 20px;
+  }
+
+  .tools {
+    margin-bottom: 20px;
+
+    .el-date-editor {
+      width: 320px;
+      margin-right: 10px;
+      border-radius: 8px;
+    }
+
+    .el-select {
+      width: 190px;
+      margin-right: 10px;
+    }
+
+    .el-input {
+      width: 140px;
+      margin-right: 10px;
+    }
+  }
+}
+</style>
+<style>
+.el-input--small .el-input__inner {
+  height: 28px;
+  line-height: 28px;
+}
+</style>