| | |
| | | <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" |
| | |
| | | > |
| | | </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 |
| | |
| | | </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="age" /> |
| | | <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> |
| | | |
| | |
| | | listsfeistatistics, |
| | | listbxiaostatistics, |
| | | listjixstatistics, |
| | | listanlstatistics |
| | | listanlstatistics, |
| | | exportCaseStatistics, |
| | | exportCaseDeptStatistics |
| | | } from "@/api/project/statistics"; |
| | | |
| | | import { listUser } from "@/api/project/organization"; |
| | |
| | | |
| | | selecttime: "", |
| | | reportervalue: "", |
| | | reportlist: [ |
| | | { label: "正常", value: "0" }, |
| | | { label: "中止", value: "1" } |
| | | ], |
| | | //省市区 |
| | | //默认值设置,可为空 |
| | | searchAddress: { |
| | |
| | | donatebaseinfoList: [], |
| | | // 捐献基础表格数据 |
| | | jxidata: [], |
| | | // 当前页签:dept=按业务组,person=按人员 |
| | | activeTab: "dept", |
| | | // 按业务组聚合数据 |
| | | deptData: [], |
| | | // 弹出层标题 |
| | | title: "", |
| | | // 是否显示弹出层 |
| | |
| | | daterangeReporttime: [], |
| | | // 查询参数 |
| | | queryParams: { |
| | | pacasestate: "0", |
| | | pabegtime: null, |
| | | paendtime: null |
| | | }, |
| | |
| | | }; |
| | | }, |
| | | //监听属性 类似于data概念 |
| | | computed: {}, |
| | | computed: { |
| | | tableTotal() { |
| | | return this.activeTab === "dept" ? this.deptData.length : this.jxidata.length; |
| | | } |
| | | }, |
| | | activated() {}, |
| | | mounted() {}, |
| | | |
| | |
| | | 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"; |
| | | // } |
| | |
| | | } |
| | | }, |
| | | listDept() { |
| | | listDept({}).then(response => { |
| | | // 只取业务办公室(dept_id=102)下的业务组,供“业务组”下拉使用 |
| | | listDept({ parentId: 102 }).then(response => { |
| | | this.deptList = response.data; |
| | | this.loading = false; |
| | | }); |
| | |
| | | $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] = "合计"; |
| | |
| | | }); |
| | | 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() { |
| | |
| | | |
| | | this.form.treatmenthospitalno = ""; |
| | | |
| | | this.queryParams = {}; |
| | | this.queryParams = { |
| | | pabegtime: null, |
| | | paendtime: null |
| | | }; |
| | | this.selecttime = []; |
| | | this.getTimeList(); |
| | | this.searchAddress = { |