sinake
8 小时以前 8f059b6cc8daf96433ac699543996c9e1260023c
src/views/project/statistics/applyStatistics/index.vue
@@ -24,21 +24,6 @@
            >
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="费用类型">
            <el-select
              v-model="queryParams.paexpensetype"
              placeholder="请选择费用类型"
            >
              <el-option
                v-for="item in reportlist"
                :label="item.label"
                :value="item.value"
              >
              </el-option>
            </el-select>
          </el-form-item>
        </el-col>        
        <el-col :span="6">
          <el-form-item align="left" label="报销部门" prop="padeptno">
@@ -111,39 +96,48 @@
      ></right-toolbar>
    </el-row>
    <!--<el-table v-loading="loading" border :data="donatebaseinfoList">     -->
    <el-table
      :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="50" />
      <el-table-column label="统计月份" align="center" prop="applymonth" />
      <el-table-column label="业务组" align="center" prop="deptmentName" />
      <el-table-column label="专职人员" align="center" prop="username" />
      <el-table-column label="报销总金额" align="center" prop="amount" width="180" :formatter="amountFormatter" />
      <el-table-column label="专家费" align="center" prop="expertfee" width="160" :formatter="amountFormatter" />
      <el-table-column label="伦理专家费" align="center" prop="ethicalistfee" width="160" :formatter="amountFormatter" />
      <el-table-column label="医学成本" align="center" prop="medicalcost" width="160" :formatter="amountFormatter" />
      <el-table-column label="办公费" align="center" prop="officecost" width="160" :formatter="amountFormatter" />
      <el-table-column label="差旅费" align="center" prop="reimcost" width="160" :formatter="amountFormatter" />
    <el-tabs v-model="activeTab">
      <el-tab-pane label="按业务组" name="dept">
        <el-table :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" />
          <el-table-column label="报销总金额" align="center" prop="amount" width="180" :formatter="amountFormatter" />
          <el-table-column label="专家费" align="center" prop="expertfee" width="160" :formatter="amountFormatter" />
          <el-table-column label="伦理专家费" align="center" prop="ethicalistfee" width="160" :formatter="amountFormatter" />
          <el-table-column label="医学成本" align="center" prop="medicalcost" width="160" :formatter="amountFormatter" />
          <el-table-column label="办公费" align="center" prop="officecost" width="160" :formatter="amountFormatter" />
          <el-table-column label="差旅费" align="center" prop="reimcost" width="160" :formatter="amountFormatter" />
        </el-table>
      </el-tab-pane>
      <!-- <el-table-column label="操作" align="center">
        <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 label="按人员" name="person">
        <el-table :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="deptmentName" />
          <el-table-column label="专职人员" align="center" prop="username" />
          <el-table-column label="报销总金额" align="center" prop="amount" width="180" :formatter="amountFormatter" />
          <el-table-column label="专家费" align="center" prop="expertfee" width="160" :formatter="amountFormatter" />
          <el-table-column label="伦理专家费" align="center" prop="ethicalistfee" width="160" :formatter="amountFormatter" />
          <el-table-column label="医学成本" align="center" prop="medicalcost" width="160" :formatter="amountFormatter" />
          <el-table-column label="办公费" align="center" prop="officecost" width="160" :formatter="amountFormatter" />
          <el-table-column label="差旅费" align="center" prop="reimcost" width="160" :formatter="amountFormatter" />
          <!-- <el-table-column label="操作" align="center">
            <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>
@@ -160,7 +154,8 @@
  listbxiaostatistics,
  listjixstatistics,
  listanlstatistics,
  exportExpenseStatistics
  exportExpenseStatistics,
  exportExpenseDeptStatistics
} from "@/api/project/statistics";
import { listUser } from "@/api/project/organization";
@@ -252,6 +247,10 @@
      donatebaseinfoList: [],
      // 捐献基础表格数据
      jxidata: [],
      // 当前页签:dept=按业务组,person=按人员
      activeTab: "dept",
      // 按业务组聚合数据
      deptData: [],
      // 弹出层标题
      title: "",
      // 是否显示弹出层
@@ -282,7 +281,11 @@
    };
  },
  //监听属性 类似于data概念
  computed: {},
  computed: {
    tableTotal() {
      return this.activeTab === "dept" ? this.deptData.length : this.jxidata.length;
    }
  },
  activated() {},
  mounted() {},
@@ -341,6 +344,36 @@
        this.jxidata.forEach(($obj, $index) => {
          $obj.id = $index + 1;
        });
        this.buildDeptData();
      });
    },
    /** 按业务组聚合:6 个金额分别求和 */
    buildDeptData() {
      const map = new Map();
      this.jxidata.forEach(row => {
        const key = row.deptmentno || row.deptmentName || "未分组";
        if (!map.has(key)) {
          map.set(key, {
            deptname: row.deptmentName || "未分组",
            amount: 0,
            expertfee: 0,
            ethicalistfee: 0,
            medicalcost: 0,
            officecost: 0,
            reimcost: 0
          });
        }
        const item = map.get(key);
        item.amount += Number(row.amount) || 0;
        item.expertfee += Number(row.expertfee) || 0;
        item.ethicalistfee += Number(row.ethicalistfee) || 0;
        item.medicalcost += Number(row.medicalcost) || 0;
        item.officecost += Number(row.officecost) || 0;
        item.reimcost += Number(row.reimcost) || 0;
      });
      this.deptData = Array.from(map.values()).map((item, index) => {
        item.id = index + 1;
        return item;
      });
    },
    /** 导出按钮操作 */
@@ -352,11 +385,15 @@
        pauserno: this.queryParams.pauserno,
        paexpensetype: this.queryParams.paexpensetype
      };
      const exportApi =
        this.activeTab === "dept"
          ? exportExpenseDeptStatistics
          : exportExpenseStatistics;
      this.$modal
        .confirm("是否确认导出当前筛选条件下的费用统计数据?")
        .confirm("是否确认导出当前列表的费用统计数据?")
        .then(() => {
          this.exportLoading = true;
          return exportExpenseStatistics(queryParams);
          return exportApi(queryParams);
        })
        .then(response => {
          this.$download.name(response.msg);
@@ -412,7 +449,7 @@
    getSummaries(param) {
      const { columns, data } = param;
      const sums = [];
      var columnnames = ["applymonth", "deptmentName", "username"];
      var columnnames = ["deptmentName", "username"];
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = "合计";
@@ -440,6 +477,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;
    }
  },