Bläddra i källkod

添加运输明细报表

cc12458 1 år sedan
förälder
incheckning
ecaff049cc
2 ändrade filer med 209 tillägg och 0 borttagningar
  1. 22 0
      src/api/inventory/inventory.js
  2. 187 0
      src/views/reportManagement/transport/index.vue

+ 22 - 0
src/api/inventory/inventory.js

@@ -180,3 +180,25 @@ export function fySummaryExport(query) {
     params: query
   })
 }
+// 运输明细报表
+export function getTransportReport(query) {
+  return request({
+    url: '/yfc-admin/prescriptionManage/transportPage',
+    method: 'post',
+    data: query,
+    params: {
+      pageNum: query.pageNum,
+      pageSize: query.pageSize,
+    },
+  })
+}
+// 运输明细报表导出
+export function exportTransportReport(query) {
+  return request({
+    url: '/yfc-admin/prescriptionManage/exportTransport',
+    method: 'post',
+    data: query,
+    responseType: 'blob',
+    fileType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8',
+  })
+}

+ 187 - 0
src/views/reportManagement/transport/index.vue

@@ -0,0 +1,187 @@
+<script>
+import {listMedicalMechanism} from '@/api/medical/mechanism';
+import dayjs from 'dayjs';
+import {getByMechanismId, listDept} from '@/api/medical/dept';
+import {exportTransportReport, getTransportReport} from '@/api/inventory/inventory';
+import {downloadBlob} from '@/utils/zipdownload';
+
+export default {
+  name: 'report-transport',
+  data() {
+    const now = dayjs();
+    return {
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+
+        appId: null,
+        yljgId: '',
+        deptId: '',
+        isBehalf: '',
+        expressExecutor: '',
+        orderTime: [now.startOf('day').format('YYYY-MM-DD HH:mm:ss'), now.endOf('day').format('YYYY-MM-DD HH:mm:ss')],
+        yfId: window.localStorage.getItem('pharmacyId'),
+      },
+
+      listMedicalMechanismArr: [],
+      listDeptArr: [],
+      isBehalfArr: [
+        {name: '否', id: 0},
+        {name: '是', id: 1},
+      ],
+      expressExecutorArr: [
+        {name: '送医院', id: '送医院'},
+        {name: '顺丰', id: '顺丰'},
+        {name: '其他', id: '其他'},
+      ],
+      loading: false,
+      exporting: false,
+      total: 0,
+      dataset: [],
+    };
+  },
+  created() {
+    this.getListMedicalMechanism().then(first => {
+      if (!first) { throw {message: `暂无医疗机构可选,无法查询!`};}
+      return first.id;
+    }).then(id => {
+      this.getListDeptArr(id);
+      this.queryParams.yljgId = id;
+      return this.handleQuery();
+    }).catch(error => { this.$message.error(error.message); });
+  },
+  methods: {
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    resetQuery() {
+      this.resetForm('queryForm');
+      const now = dayjs();
+      this.queryParams.orderTime = [now.startOf('day').format('YYYY-MM-DD HH:mm:ss'), now.endOf('day').format('YYYY-MM-DD HH:mm:ss')];
+      this.handleMechanismId();
+      this.handleQuery();
+    },
+    handleMechanismId(e) {
+      this.queryParams.deptId = '';
+      this.getListDeptArr(e);
+    },
+    getQueryModel() {
+      const {orderTime, ...form} = this.queryParams;
+      if (Array.isArray(orderTime) && orderTime.length) {
+        form.startTime = orderTime[0];
+        form.endTime = orderTime[1];
+      }
+      if (form.yljgId) { form.hospitalName = this.listMedicalMechanismArr.find(item => item.id === form.yljgId).name; }
+      if (form.deptId) { form.department = this.listDeptArr.find(item => item.id === form.deptId).name; }
+      return form;
+    },
+    async getListMedicalMechanism() {
+      this.listMedicalMechanismArr = await listMedicalMechanism().then((res) => res.data);
+      return this.listMedicalMechanismArr[0];
+    },
+    async getListDeptArr(id) {
+      this.listDeptArr = id ? await getByMechanismId(id).then(res => res.data) : await listDept().then(res => res.rows);
+    },
+    async getList() {
+      this.loading = true;
+      const form = this.getQueryModel();
+      try {
+        const {rows, total} = await getTransportReport(form);
+        this.dataset = rows;
+        this.total = total;
+      } catch (e) { }
+      this.loading = false;
+    },
+    async exportData() {
+      const form = this.getQueryModel();
+      this.exporting = true;
+      try {
+        const data = await exportTransportReport(form);
+        await downloadBlob(data);
+        this.$message.success(`导出 ${data.name} 成功`);
+      } catch (error) {}
+      this.exporting = false;
+    },
+  },
+};
+</script>
+
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" :model="queryParams" inline label-suffix="68px">
+      <div class="query-box">
+        <div class="query-box__left">
+          <el-form-item label="" prop="yljgId">
+            <el-select style="width: 160px;" v-model="queryParams.yljgId" placeholder="请选择医疗机构"
+                       @change="handleMechanismId">
+              <el-option v-for="item in listMedicalMechanismArr" :key="item.id"
+                         :label="item.name" :value="item.id" :disabled="+item.state!==1"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="deptId">
+            <el-select style="width: 160px;" v-model="queryParams.deptId" placeholder="请选择科室" clearable>
+              <el-option v-for="item in listDeptArr" :key="item.id"
+                         :label="item.name" :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="orderTime">
+            <el-date-picker style="width: 340px" v-model="queryParams.orderTime"
+                            start-placeholder="开始时间" end-placeholder="结束时间"
+                            clearable size="small"
+                            type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss"
+            >
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="" prop="isBehalf">
+            <el-select style="width: 160px" v-model="queryParams.isBehalf" placeholder="是否代煎" clearable>
+              <el-option v-for="item in isBehalfArr" :key="item.id"
+                         :label="item.name" :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="expressExecutor">
+            <el-select style="width: 160px" v-model="queryParams.expressExecutor" placeholder="配送方式" clearable>
+              <el-option v-for="item in expressExecutorArr" :key="item.id"
+                         :label="item.name" :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+            <el-button size="mini" type="primary" v-hasPermi="['inventory:transport:export']" @click="exportData">导出</el-button>
+          </el-form-item>
+        </div>
+      </div>
+    </el-form>
+    <el-table v-loading="loading" :data="dataset"
+              border size="mini">
+      <el-table-column type="index" width="55" align="center" label="序号"/>
+<!--      <el-table-column label="医疗机构" align="center" prop="hospitalName" show-overflow-tooltip/>-->
+      <el-table-column label="接方日期" align="center" prop="createTime"/>
+      <el-table-column label="处方号" align="center" prop="preNo"/>
+      <el-table-column label="患者" align="center" prop="name"/>
+      <el-table-column label="年龄" align="center" prop="age">
+        <template slot-scope="scope">{{ scope.row.age }}{{ scope.row.ageUnit || '岁' }}</template>
+      </el-table-column>
+      <el-table-column label="性别" align="center" prop="sex"/>
+      <el-table-column label="剂数" align="center" prop="number"/>
+      <el-table-column label="是否代煎" align="center" prop="isBehalf">
+        <template slot-scope="scope">{{ {0: '否', 1: '是'}[scope.row.isBehalf] }}</template>
+      </el-table-column>
+      <el-table-column label="配送方式" align="center" prop="expressExecutor"/>
+      <el-table-column label="备注" align="center" prop="entrust" show-overflow-tooltip/>
+    </el-table>
+    <pagination v-show="total > 0" :total="total"
+                :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+                @pagination="getList"
+    ></pagination>
+  </div>
+</template>
+
+<style scoped lang="scss">
+
+</style>