yxh
2 天以前 a68195121e02f4294542a11ac96e48047f0fde24
src/views/project/statistics/performanceStaristics/index.vue
@@ -25,14 +25,7 @@
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="5">
          <el-form-item label="绩效类型">
            <el-radio-group v-model="queryParams.pabonustype">
              <el-radio v-for="item in reporttype" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
            </el-radio-group>
          </el-form-item>
        </el-col>
        <el-col :span="5">
        <el-col :span="10">
          <el-form-item label="绩效人员" prop="pauserno">
            <el-input v-model="queryParams.pausername" placeholder="请输入姓名" clearable size="small"
              @keyup.enter.native="handleQuery" />
@@ -55,24 +48,41 @@
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
    <!--<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-table-column label="统计月份" align="center" prop="bonusmonth" />
      <el-table-column label="科室业务组" align="center" prop="deptName">      </el-table-column>
      <el-table-column label="绩效人员/医院" align="center" prop="beneficiaryname" />
      <el-table-column label="绩效金额" align="center" prop="amount" :formatter="amountFormatter" />
      <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
        <template slot-scope="scope">
          <el-button size="mini" type="text" icon="el-icon-edit">明细</el-button>
        </template>
      </el-table-column> -->
    </el-table>
    <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="80" />
          <el-table-column label="业务组" align="center" prop="deptname" />
          <el-table-column label="绩效金额" align="center" prop="amount" :formatter="amountFormatter" />
          <el-table-column label="月度绩效" align="center" prop="mamount" :formatter="amountFormatter" />
          <el-table-column label="季度绩效" align="center" prop="samount" :formatter="amountFormatter" />
          <el-table-column label="年度绩效" align="center" prop="yamount" :formatter="amountFormatter" />
        </el-table>
      </el-tab-pane>
      <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="80" />
          <el-table-column label="业务组" align="center" prop="deptName" />
          <el-table-column label="绩效人员/医院" align="center" prop="beneficiaryname" />
          <el-table-column label="绩效金额" align="center" prop="amount" :formatter="amountFormatter" />
          <el-table-column label="月度绩效" align="center" prop="mamount" :formatter="amountFormatter" />
          <el-table-column label="季度绩效" align="center" prop="samount" :formatter="amountFormatter" />
          <el-table-column label="年度绩效" align="center" prop="yamount" :formatter="amountFormatter" />
          <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
            <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>
@@ -90,7 +100,8 @@
  listbxiaostatistics,
  listjixstatistics,
  listanlstatistics,
  exportPerformanceStatistics
  exportPerformanceStatistics,
  exportPerformanceDeptStatistics
} from "@/api/project/statistics";
import { listUser } from "@/api/project/organization";
@@ -120,12 +131,6 @@
      selecttime: "",
      reportervalue: "",
      reporttype: [
        { label: "全部", value: "0" },
        { label: "月度", value: "68" },
        { label: "季度", value: "69" },
        { label: "年度", value: "70" }
      ],
      //省市区
      //默认值设置,可为空
      searchAddress: {
@@ -182,6 +187,10 @@
      donatebaseinfoList: [],
      // 捐献基础表格数据
      jxidata: [],
      // 当前页签:dept=按业务组,person=按人员
      activeTab: "dept",
      // 按业务组聚合数据
      deptData: [],
      // 弹出层标题
      title: "",
      // 是否显示弹出层
@@ -190,7 +199,6 @@
      daterangeReporttime: [],
      // 查询参数
      queryParams: {
        pabonustype: "0",
        pabegtime: null,
        paendtime: null,
        pausername: "",
@@ -215,7 +223,11 @@
    };
  },
  //监听属性 类似于data概念
  computed: {},
  computed: {
    tableTotal() {
      return this.activeTab === "dept" ? this.deptData.length : this.jxidata.length;
    }
  },
  activated() { },
  mounted() { },
@@ -256,16 +268,13 @@
      return Arr;
    },
    /** 组装查询参数:未选择统计日期时查全部,绩效类型为空按全部 */
    /** 组装查询参数:未选择统计日期时查全部 */
    buildQueryParams() {
      const query = { ...this.queryParams };
      if (!query.pabegtime || !query.paendtime) {
        // 新 SP 默认取近 6 个月,而绩效 jxrq 数据集中在 2023-08~2024-01,默认会查不到
        query.pabegtime = "2000-01-01 00:00:00";
        query.paendtime = "2999-12-31 23:59:59";
      }
      if (!query.pabonustype) {
        query.pabonustype = "0";
      }
      return query;
    },
@@ -278,16 +287,46 @@
          $obj.id = $index + 1;
        });
        this.total = res.total;
        this.buildDeptData();
      });
    },
    /** 按业务组聚合:绩效金额/月度/季度/年度分别求和 */
    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 || "未分组",
            amount: 0,
            mamount: 0,
            samount: 0,
            yamount: 0
          });
        }
        const item = map.get(key);
        item.amount += Number(row.amount) || 0;
        item.mamount += Number(row.mamount) || 0;
        item.samount += Number(row.samount) || 0;
        item.yamount += Number(row.yamount) || 0;
      });
      this.deptData = Array.from(map.values()).map((item, index) => {
        item.id = index + 1;
        return item;
      });
    },
    /** 导出按钮操作 */
    handleExport() {
      const queryParams = this.buildQueryParams();
      const exportApi =
        this.activeTab === "dept"
          ? exportPerformanceDeptStatistics
          : exportPerformanceStatistics;
      this.$modal
        .confirm("是否确认导出当前筛选条件下的绩效统计数据?")
        .confirm("是否确认导出当前列表的绩效统计数据?")
        .then(() => {
          this.exportLoading = true;
          return exportPerformanceStatistics(queryParams);
          return exportApi(queryParams);
        })
        .then(response => {
          this.$download.name(response.msg);
@@ -320,7 +359,6 @@
      this.queryParams = {
        pabonustype: "0",
        pabegtime: null,
        paendtime: null,
        pausername: "",
@@ -355,7 +393,7 @@
    getSummaries(param) {
      const { columns, data } = param;
      const sums = [];
      var columnnames = ["applymonth", "deptmentName", "username", "deptName", "beneficiaryname"];
      var columnnames = ["deptName", "beneficiaryname"];
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = "合计";
@@ -383,6 +421,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] = total === 0 ? "" : Number(total).toFixed(2);
      });
      return sums;
    }
  },