From 484b1f3e41a561e438ce4cdbec0e09958c932767 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期三, 28 十月 2026 17:02:59 +0800
Subject: [PATCH] 统计分析
---
src/views/project/statistics/caseStatistics/index.vue | 283 ++++++++++++++++++++++++++++++++++++++------------------
1 files changed, 192 insertions(+), 91 deletions(-)
diff --git a/src/views/project/statistics/caseStatistics/index.vue b/src/views/project/statistics/caseStatistics/index.vue
index 7a48431..c2a3f02 100644
--- a/src/views/project/statistics/caseStatistics/index.vue
+++ b/src/views/project/statistics/caseStatistics/index.vue
@@ -6,54 +6,12 @@
: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"
@@ -66,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
@@ -85,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>
@@ -140,7 +166,9 @@
listsfeistatistics,
listbxiaostatistics,
listjixstatistics,
- listanlstatistics
+ listanlstatistics,
+ exportCaseStatistics,
+ exportCaseDeptStatistics
} from "@/api/project/statistics";
import { listUser } from "@/api/project/organization";
@@ -169,10 +197,6 @@
selecttime: "",
reportervalue: "",
- reportlist: [
- { label: "姝e父", value: "0" },
- { label: "缁堟", value: "1" }
- ],
//鐪佸競鍖�
//榛樿鍊艰缃紝鍙负绌�
searchAddress: {
@@ -228,6 +252,10 @@
donatebaseinfoList: [],
// 鎹愮尞鍩虹琛ㄦ牸鏁版嵁
jxidata: [],
+ // 褰撳墠椤电锛歞ept=鎸変笟鍔$粍锛宲erson=鎸変汉鍛�
+ activeTab: "dept",
+ // 鎸変笟鍔$粍鑱氬悎鏁版嵁
+ deptData: [],
// 寮瑰嚭灞傛爣棰�
title: "",
// 鏄惁鏄剧ず寮瑰嚭灞�
@@ -236,7 +264,6 @@
daterangeReporttime: [],
// 鏌ヨ鍙傛暟
queryParams: {
- pacasestate: "0",
pabegtime: null,
paendtime: null
},
@@ -259,7 +286,11 @@
};
},
//鐩戝惉灞炴�� 绫讳技浜巇ata姒傚康
- computed: {},
+ computed: {
+ tableTotal() {
+ return this.activeTab === "dept" ? this.deptData.length : this.jxidata.length;
+ }
+ },
activated() {},
mounted() {},
@@ -289,7 +320,8 @@
}
},
listDept() {
- listDept({}).then(response => {
+ // 鍙彇涓氬姟鍔炲叕瀹わ紙dept_id=102锛変笅鐨勪笟鍔$粍锛屼緵鈥滀笟鍔$粍鈥濅笅鎷変娇鐢�
+ listDept({ parentId: 102 }).then(response => {
this.deptList = response.data;
this.loading = false;
});
@@ -314,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] = "鍚堣";
@@ -347,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() {
@@ -366,7 +466,8 @@
this.form.treatmenthospitalno = "";
this.queryParams = {
- pacasestate: "0"
+ pabegtime: null,
+ paendtime: null
};
this.selecttime = [];
this.getTimeList();
--
Gitblit v1.9.3