yxh
2 天以前 484b1f3e41a561e438ce4cdbec0e09958c932767
src/views/project/statistics/caseStatistics/index.vue
@@ -2,57 +2,16 @@
<template>
  <div class="app-container">
    <el-form
      class="opo-query-form"
      :model="queryParams"
      ref="queryForm"
      :inline="true"
      v-show="showSearch"
      label-width="70px"
    >
      <el-row :gutter="8">
        <el-col :span="6">
          <el-form-item label="业务人员" prop="name">
            <el-input
              v-model="queryParams.pausername"
              placeholder="请输入姓名"
              clearable
              size="small"
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item align="left" label="业务组" prop="treatmenthospitalno">
            <el-select
              v-model="queryParams.padeptno"
              placeholder="请选择案例状态"
            >
              <el-option
                v-for="item in deptList"
                :label="item.deptName"
                :value="item.deptId"
              >
              </el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="案例状态">
            <el-select
              v-model="queryParams.pacasestate"
              placeholder="请选择案例状态"
            >
              <el-option
                v-for="item in reportlist"
                :label="item.label"
                :value="item.value"
              >
              </el-option>
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="8">
        <el-col :span="12">
          <el-form-item label="统计日期">
      <el-row >
        <el-col :span="8">
          <el-form-item label="月份范围">
            <el-date-picker
              style="width: 100%"
              v-model="selecttime"
@@ -65,8 +24,33 @@
            >
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="5">
          <el-form-item align="left" label="业务组" prop="treatmenthospitalno">
            <el-select
              v-model="queryParams.padeptno"
              placeholder="请选择业务组"
            >
              <el-option
                v-for="item in deptList"
                :label="item.deptName"
                :value="item.deptId"
              >
              </el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="5">
          <el-form-item label="业务人员" prop="name">
            <el-input
              v-model="queryParams.pausername"
              placeholder="请输入姓名"
              clearable
              size="small"
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item>
            <el-button
@@ -84,46 +68,89 @@
      </el-row>
    </el-form>
    <!--<el-table v-loading="loading" border :data="donatebaseinfoList">     -->
    <el-table
      v-loading="loading"
      :data="jxidata"
      ref="table"
      border
      max-height="700"
      highlight-current-row
      :summary-method="getSummaries"
      show-summary
    >
      <el-table-column label="序号" align="center" prop="id" width="100">
      </el-table-column>
    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          size="mini"
          :loading="exportLoading"
          @click="handleExport"
          >导出</el-button
        >
      </el-col>
      <right-toolbar
        :showSearch.sync="showSearch"
        @queryTable="getList"
      ></right-toolbar>
    </el-row>
      <el-table-column label="统计月份" align="center" prop="donationmonth" />
    <el-tabs v-model="activeTab">
      <el-tab-pane label="按业务组" name="dept">
        <el-table
          v-loading="loading"
          :data="deptData"
          ref="deptTable"
          border
          max-height="700"
          highlight-current-row
          :summary-method="getDeptSummaries"
          show-summary
        >
          <el-table-column label="序号" align="center" prop="id" width="50" />
          <el-table-column label="业务组" align="center" prop="deptname" width="250" />
          <el-table-column label="累计案例" align="center" prop="caseTotal" width="150" />
          <el-table-column label="终止案例" align="center" prop="terminationTotal" width="150" />
        </el-table>
      </el-tab-pane>
      <el-table-column label="业务组" align="center" prop="deptname">
      </el-table-column>
      <el-table-column label="专职人员" align="center" prop="reportername" />
      <el-tab-pane label="按人员" name="person">
        <el-table
          v-loading="loading"
          :data="jxidata"
          ref="personTable"
          border
          max-height="700"
          highlight-current-row
          :summary-method="getSummaries"
          show-summary
        >
          <el-table-column label="序号" align="center" prop="id" width="50" />
          <el-table-column label="业务组" align="center" prop="deptname" width="250" >      </el-table-column>
          <el-table-column label="专职人员" align="center" prop="reportername" width="150" />
          <!-- <el-table-column label="登记案例累计" align="center" prop="casesum" width="100" /> -->
          <!-- <el-table-column label="潜在捐献" align="center" prop="workflow0" width="100" />
          <el-table-column label="医学评估" align="center" prop="workflow1" width="100" />
          <el-table-column label="家属确认" align="center" prop="workflow2" width="100" />
          <el-table-column label="伦理审查" align="center" prop="workflow3" width="100" />
          <el-table-column label="器官分配" align="center" prop="workflow4" width="100" />
          <el-table-column label="获取见证" align="center" prop="workflow5" width="100" />
          <el-table-column label="捐献完成" align="center" prop="workflow6" width="100" />
          <el-table-column label="归档撤销" align="center" prop="workflow7" width="100" />
          <el-table-column label="案例归档" align="center" prop="workflow8" width="100" /> -->
          <el-table-column label="案例累计" align="center" prop="workflowsum" width="200" />
          <el-table-column label="终止案例" align="center" prop="terminationcase" width="100" />
      <el-table-column label="案例数量" align="center" prop="casesum" />
      <el-table-column
        label="操作"
        align="center"
        class-name="small-padding fixed-width"
        fixed="right"
      >
        <template slot-scope="scope">
          <!--           v-if="scope.row.recordstate==2"
 -->
          <el-button size="mini" type="text" icon="el-icon-edit"
            >明细</el-button
          <!-- <el-table-column
            label="操作"
            align="center"
            class-name="small-padding fixed-width"
            fixed="right"
          >
        </template>
      </el-table-column>
    </el-table>
            <template slot-scope="scope">
              <el-button size="mini" type="text" icon="el-icon-edit"
                >明细</el-button
              >
            </template>
          </el-table-column> -->
        </el-table>
      </el-tab-pane>
    </el-tabs>
    <div style="margin: 10px;text-align: right;">
      <div>
        共 <span style="color:#1890FF ;">{{ total }}</span> 条数据
        共 <span style="color:#1890FF ;">{{ tableTotal }}</span> 条数据
      </div>
    </div>
@@ -139,7 +166,9 @@
  listsfeistatistics,
  listbxiaostatistics,
  listjixstatistics,
  listanlstatistics
  listanlstatistics,
  exportCaseStatistics,
  exportCaseDeptStatistics
} from "@/api/project/statistics";
import { listUser } from "@/api/project/organization";
@@ -168,10 +197,6 @@
      selecttime: "",
      reportervalue: "",
      reportlist: [
        { label: "正常", value: "0" },
        { label: "终止", value: "1" }
      ],
      //省市区
      //默认值设置,可为空
      searchAddress: {
@@ -227,6 +252,10 @@
      donatebaseinfoList: [],
      // 捐献基础表格数据
      jxidata: [],
      // 当前页签:dept=按业务组,person=按人员
      activeTab: "dept",
      // 按业务组聚合数据
      deptData: [],
      // 弹出层标题
      title: "",
      // 是否显示弹出层
@@ -235,7 +264,6 @@
      daterangeReporttime: [],
      // 查询参数
      queryParams: {
        pacasestate: "0",
        pabegtime: null,
        paendtime: null
      },
@@ -258,7 +286,11 @@
    };
  },
  //监听属性 类似于data概念
  computed: {},
  computed: {
    tableTotal() {
      return this.activeTab === "dept" ? this.deptData.length : this.jxidata.length;
    }
  },
  activated() {},
  mounted() {},
@@ -271,48 +303,14 @@
        this.queryParams.pabegtime = this.selecttime[0];
        this.queryParams.paendtime = this.selecttime[1];
        // if (this.queryParams.paendtime == this.queryParams.pabegtime) {
        let num = Number(this.queryParams.paendtime.slice(5, 7));
        if (num < 9) {
          let mon = Number(this.queryParams.paendtime.slice(6, 7));
          this.queryParams.paendtime =
            this.queryParams.paendtime.slice(0, 5) +
            "0" +
            (mon + 1) +
            "-" +
            "01" +
            " " +
            "00" +
            ":" +
            "00" +
            ":" +
            "00";
        }
        // this.queryParams.paendtime=this.queryParams.paendtime.slice(0,5)年
        else if (num >= 10) {
          this.queryParams.paendtime =
            this.queryParams.paendtime.slice(0, 5) +
            (num + 1) +
            "-" +
            "01" +
            " " +
            "00" +
            ":" +
            "00" +
            ":" +
            "00";
        } else {
          this.queryParams.paendtime =
            this.queryParams.paendtime.slice(0, 5) +
            "10" +
            "-" +
            "01" +
            " " +
            "00" +
            ":" +
            "00" +
            ":" +
            "00";
        }
        // 结束时间取"所选结束月的次月 1 号",以包含整个结束月。
        // 原实现把月份 +1 后直接拼字符串,12 月会得到 13 月(2026-13-01),
        // MySQL 报 Incorrect datetime value,存储过程直接 500。
        this.queryParams.paendtime = this.$moment(this.queryParams.paendtime)
          .startOf("month")
          .add(1, "month")
          .format("YYYY-MM")
          .concat("-01 00:00:00");
        this.queryParams.pabegtime =
          this.queryParams.pabegtime + " " + "00" + ":" + "00" + ":" + "00";
        // }
@@ -322,7 +320,8 @@
      }
    },
    listDept() {
      listDept({}).then(response => {
      // 只取业务办公室(dept_id=102)下的业务组,供“业务组”下拉使用
      listDept({ parentId: 102 }).then(response => {
        this.deptList = response.data;
        this.loading = false;
      });
@@ -347,12 +346,60 @@
          $obj.id = $index + 1;
        });
        this.total = res.total;
        this.buildDeptData();
      });
    },
    /** 按业务组聚合:累计案例 = Σworkflowsum,终止案例 = Σterminationcase */
    buildDeptData() {
      const map = new Map();
      this.jxidata.forEach(row => {
        const key = row.deptid || row.deptname || "未分组";
        if (!map.has(key)) {
          map.set(key, {
            deptname: row.deptname || "未分组",
            caseTotal: 0,
            terminationTotal: 0
          });
        }
        const item = map.get(key);
        item.caseTotal += Number(row.workflowsum) || 0;
        item.terminationTotal += Number(row.terminationcase) || 0;
      });
      this.deptData = Array.from(map.values()).map((item, index) => {
        item.id = index + 1;
        return item;
      });
    },
    /** 导出按钮操作 */
    handleExport() {
      const queryParams = {
        pabegtime: this.queryParams.pabegtime,
        paendtime: this.queryParams.paendtime,
        padeptno: this.queryParams.padeptno,
        pausername: this.queryParams.pausername
      };
      const exportApi =
        this.activeTab === "dept"
          ? exportCaseDeptStatistics
          : exportCaseStatistics;
      this.$modal
        .confirm("是否确认导出当前列表的案例统计数据?")
        .then(() => {
          this.exportLoading = true;
          return exportApi(queryParams);
        })
        .then(response => {
          this.$download.name(response.msg);
          this.exportLoading = false;
        })
        .catch(() => {
          this.exportLoading = false;
        });
    },
    getSummaries(param) {
      const { columns, data } = param;
      const sums = [];
      var columnnames = ["applymonth", "deptmentName", "username"];
      var columnnames = ["deptname", "reportername"];
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = "合计";
@@ -380,6 +427,26 @@
      });
      return sums;
    },
    /** 按业务组表格合计 */
    getDeptSummaries(param) {
      const { columns, data } = param;
      const sums = [];
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = "合计";
          return;
        }
        if (column.property === "deptname") {
          return;
        }
        const total = data.reduce(
          (prev, item) => prev + (Number(item[column.property]) || 0),
          0
        );
        sums[index] = data.length === 0 ? "" : total;
      });
      return sums;
    },
    // 表单重置
    reset() {
@@ -399,7 +466,8 @@
      this.form.treatmenthospitalno = "";
      this.queryParams = {
        pacasestate: "0"
        pabegtime: null,
        paendtime: null
      };
      this.selecttime = [];
      this.getTimeList();