| | |
| | | > |
| | | </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"> |
| | |
| | | ></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> |
| | | |
| | |
| | | listbxiaostatistics, |
| | | listjixstatistics, |
| | | listanlstatistics, |
| | | exportExpenseStatistics |
| | | exportExpenseStatistics, |
| | | exportExpenseDeptStatistics |
| | | } from "@/api/project/statistics"; |
| | | |
| | | import { listUser } from "@/api/project/organization"; |
| | |
| | | donatebaseinfoList: [], |
| | | // 捐献基础表格数据 |
| | | jxidata: [], |
| | | // 当前页签:dept=按业务组,person=按人员 |
| | | activeTab: "dept", |
| | | // 按业务组聚合数据 |
| | | deptData: [], |
| | | // 弹出层标题 |
| | | title: "", |
| | | // 是否显示弹出层 |
| | |
| | | }; |
| | | }, |
| | | //监听属性 类似于data概念 |
| | | computed: {}, |
| | | computed: { |
| | | tableTotal() { |
| | | return this.activeTab === "dept" ? this.deptData.length : this.jxidata.length; |
| | | } |
| | | }, |
| | | activated() {}, |
| | | mounted() {}, |
| | | |
| | |
| | | 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; |
| | | }); |
| | | }, |
| | | /** 导出按钮操作 */ |
| | |
| | | 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); |
| | |
| | | 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] = "合计"; |
| | |
| | | } |
| | | }); |
| | | 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; |
| | | } |
| | | }, |
| | | |