| | |
| | | "author": "浙江亥尔时信息科技有限公司", |
| | | "license": "MIT", |
| | | "scripts": { |
| | | "serve": "vue-cli-service serve", |
| | | "dev": "vue-cli-service serve", |
| | | "build": "vue-cli-service build", |
| | | "build:stage": "vue-cli-service build --mode staging", |
| | | "preview": "node build/index.js --preview", |
| | |
| | | data: query |
| | | }) |
| | | } |
| | | // 导出案例统计 |
| | | export function exportCaseStatistics(query) { |
| | | return request({ |
| | | url: '/project/spstatcase/export', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | // 查询绩效统计 |
| | | export function listjixstatistics(query) { |
| | | return request({ |
| | |
| | | data: query |
| | | }) |
| | | } |
| | | // 导出绩效统计 |
| | | export function exportPerformanceStatistics(query) { |
| | | return request({ |
| | | url: '/project/funddetail/exportBonus', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | // 查询报销统计 |
| | | export function listbxiaostatistics(query) { |
| | | return request({ |
| | |
| | | data: query |
| | | }) |
| | | } |
| | | // 导出费用统计 |
| | | export function exportExpenseStatistics(query) { |
| | | return request({ |
| | | url: '/project/spstatexpense/export', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | // 查询收费统计 |
| | | export function listsfeistatistics(query) { |
| | | return request({ |
| | |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | |
| | | <el-col :span="6"> |
| | | <el-form-item label="器官状态" prop="organstate"> |
| | | <el-select v-model="queryParams.organstate" placeholder="请选择" clearable size="small"> |
| | |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | |
| | | <el-col :span="6"> |
| | | <el-form-item label="移植机构" prop="gainhospitalname"> |
| | | <org-selecter ref="tranHosSelect" :org-type="'4'" v-model="queryParams.gainhospitalname" /> |
| | |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | |
| | | <el-col :span="6"> |
| | | <el-form-item label="捐献者" prop="name"> |
| | | <el-input v-model="queryParams.name" placeholder="请输入捐献者" /> |
| | |
| | | <org-selecter ref="tranHosSelect" :org-type="'4'" v-model="queryParams.gainhospitalname2" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | |
| | | <el-col :span="6"> |
| | | <el-form-item label="归属地区" prop="businessarea"> |
| | | <el-select v-model="queryParams.businessarea" placeholder="请选择地市"> |
| | |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | |
| | | |
| | | |
| | | |
| | | <el-col :span="9"> |
| | | <el-form-item label="获取时间" prop="organgettime"> |
| | | <el-date-picker style="width: 100%" v-model="queryParams.organgettime" type="monthrange" range-separator="至" |
| | |
| | | </el-date-picker> --> |
| | | </el-form-item> |
| | | </el-col> |
| | | |
| | | |
| | | <el-col :span="9"> |
| | | <el-form-item label="移植时间" prop="transplanttime"> |
| | | <el-date-picker style="width: 100%" v-model="queryParams.transplanttime" type="monthrange" range-separator="至" |
| | | start-placeholder="开始月份" end-placeholder="结束月份" value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | |
| | | </el-form-item> |
| | | </el-col> |
| | | |
| | | <el-col :span="6"> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" style="margin-right: 20px" size="mini" @click="handleQuery"> |
| | |
| | | <el-col :span="6"> |
| | | <el-form-item label="组长" prop="zuzhang"> |
| | | <el-input |
| | | |
| | | |
| | | v-model="queryParams.zuzhang" |
| | | /> |
| | | </el-form-item> |
| | |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | |
| | | |
| | | </el-row> --> |
| | | |
| | | |
| | | |
| | | </el-form> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | |
| | | </el-col> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| | | </el-row> |
| | | |
| | | |
| | | <!--<el-table v-loading="loading" :data="donateorganList" @selection-change="handleSelectionChange" label-width="96px">--> |
| | | <el-table border v-loading="loading" :data="newdonateorganList" @selection-change="handleSelectionChange" |
| | | label-width="96px"> |
| | |
| | | contacttime: "", |
| | | reporttime: "" |
| | | }, |
| | | organOrder: [ |
| | | "肝脏", |
| | | "左肾", |
| | | "右肾", |
| | | "心脏", |
| | | "左肺", |
| | | "右肺", |
| | | "胰腺", |
| | | "小肠", |
| | | "左眼角膜", |
| | | "右眼角膜" |
| | | ], // 指定的器官顺序 |
| | | isSorting: false, // 标志位,表示是否正在排序 |
| | | tableKey: 0, |
| | | istb: false, |
| | |
| | | // 监听 procureddata 的变化,数据更新后重新排序 |
| | | procureddata: { |
| | | handler(newVal) { |
| | | if (this.procureddata[0].organgettime) { |
| | | // 判空:取消最后一个器官时数组会变成空,直接取 [0] 会抛 TypeError |
| | | if (this.procureddata[0] && this.procureddata[0].organgettime) { |
| | | this.organgettimetrue = true; |
| | | } |
| | | if (this.isSorting) { |
| | |
| | | listDonateorgan(searchParam).then(res => { |
| | | if (res.code == 200) { |
| | | if (res.rows[0]) { |
| | | this.allocateddata = res.rows; |
| | | // 2026-10-23:按器官排队序号排序后再渲染 |
| | | this.allocateddata = this.sortOrganRows(res.rows); |
| | | console.log("this.allocateddata", this.allocateddata); |
| | | this.allocateddataform.allocateddata = this.allocateddata; |
| | | } |
| | |
| | | }); |
| | | // this.procureddata.infoid = this.infoid; |
| | | } |
| | | // 2026-10-23:按器官排队序号排序后再渲染 |
| | | this.procureddata = this.sortOrganRows(this.procureddata); |
| | | this.organList.organprocured = []; |
| | | for (let i = 0; i < this.procureddata.length; i++) { |
| | | this.organList.organprocured.push(this.procureddata[i].organno); |
| | |
| | | |
| | | this.transplantdata.infoid = this.infoid; |
| | | } |
| | | // 2026-10-23:按器官排队序号排序后再渲染 |
| | | this.transplantdata = this.sortOrganRows(this.transplantdata); |
| | | for (let i = 0; i < this.transplantdata.length; i++) { |
| | | this.organList.organtransplant.push( |
| | | this.transplantdata[i].organno |
| | |
| | | item.transplanthospitalname = objs.organizationname; |
| | | } |
| | | }); |
| | | // 2026-10-23:提交前按器官排队序号排序,保证入库顺序与展示一致 |
| | | this.sortOrganRows(this.allocateddata); |
| | | saveDonateorgan(this.allocateddata).then(res => { |
| | | // 回填主键:后端已按"同一案例同一器官"做 upsert,回填后前端不会再误判为新增 |
| | | if (res && res.data && res.data.length === this.allocateddata.length) { |
| | |
| | | } |
| | | }); |
| | | //保存器官获取表数据 |
| | | // 2026-10-23:提交前按器官排队序号排序 |
| | | this.sortOrganRows(this.procureddata); |
| | | saveDonationwitnessorgan(this.procureddata).then(res => { |
| | | if (res && res.data && res.data.length === this.procureddata.length) { |
| | | res.data.forEach((row, i) => { |
| | |
| | | this.Processvalidation(); |
| | | }); |
| | | //保存器官获取表数据 |
| | | // 2026-10-23:提交前按器官排队序号排序 |
| | | this.sortOrganRows(this.procureddata); |
| | | saveDonationwitnessorgan(this.procureddata).then(res => { |
| | | if (res && res.data && res.data.length === this.procureddata.length) { |
| | | res.data.forEach((row, i) => { |
| | |
| | | if (this.accomplishform.id) { |
| | | updateDonatecompletioninfo(this.accomplishform).then(response => { |
| | | this.$modal.msgSuccess("完成登记信息修改成功"); |
| | | // 2026-10-23:提交前按器官排队序号排序 |
| | | this.sortOrganRows(this.transplantdata); |
| | | saveDonatecomporgan(this.transplantdata).then(res => { |
| | | if (res && res.data && res.data.length === this.transplantdata.length) { |
| | | res.data.forEach((row, i) => { |
| | |
| | | this.accomplishform.id = response.data.id; |
| | | } |
| | | this.$modal.msgSuccess("完成登记成功"); |
| | | // 2026-10-23:提交前按器官排队序号排序 |
| | | this.sortOrganRows(this.transplantdata); |
| | | saveDonatecomporgan(this.transplantdata).then(res => { |
| | | if (res && res.data && res.data.length === this.transplantdata.length) { |
| | | res.data.forEach((row, i) => { |
| | |
| | | } |
| | | }, |
| | | |
| | | customOrganSort() { |
| | | console.log("调用"); |
| | | /** |
| | | * 取器官的排队序号:字典 sys_Organ 的 dict_sort 原值 |
| | | * 字典里没有该器官时返回 null(排序时排最后) |
| | | */ |
| | | getOrganSort(organno) { |
| | | const list = |
| | | (this.dict && this.dict.type && this.dict.type.sys_Organ) || []; |
| | | const item = list.find(d => d.value === organno); |
| | | if (item && item.raw) { |
| | | const s = item.raw.dictSort; |
| | | if (s !== null && s !== undefined && s !== "") { |
| | | return Number(s); |
| | | } |
| | | } |
| | | return null; |
| | | }, |
| | | |
| | | /** |
| | | * 按器官排队序号升序排序(原地) |
| | | * sort 为空/0 视为未知,排最后;相同序号按 id 兜底,保证顺序稳定 |
| | | */ |
| | | sortOrganRows(rows) { |
| | | if (!rows || !rows.length) { |
| | | return rows; |
| | | } |
| | | const weight = r => { |
| | | const s = Number(r.sort); |
| | | if (r.sort === null || r.sort === undefined || isNaN(s) || s === 0) { |
| | | return 999999; |
| | | } |
| | | return s; |
| | | }; |
| | | rows.sort((a, b) => weight(a) - weight(b) || (a.id || 0) - (b.id || 0)); |
| | | return rows; |
| | | }, |
| | | |
| | | customOrganSort() { |
| | | // 1. 加锁,阻止监听器执行 |
| | | this.isSorting = true; |
| | | this.loading = true; |
| | | // 自定义排序函数 |
| | | this.procureddata.sort((a, b) => { |
| | | const indexA = this.organOrder.indexOf(a.organname); |
| | | const indexB = this.organOrder.indexOf(b.organname); |
| | | |
| | | // 如果两个都在列表中,按列表中的顺序排序 |
| | | if (indexA !== -1 && indexB !== -1) { |
| | | return indexA - indexB; |
| | | } |
| | | // 如果 a 在列表中,b 不在,a 排前面 |
| | | if (indexA !== -1) { |
| | | return -1; |
| | | } |
| | | // 如果 b 在列表中,a 不在,b 排前面 |
| | | if (indexB !== -1) { |
| | | return 1; |
| | | } |
| | | // 两个都不在列表中,保持原顺序(或按其他规则,比如按字母排序,这里按原始顺序) |
| | | return 0; |
| | | }); |
| | | console.log(this.procureddata, "顺序"); |
| | | this.sortOrganRows(this.procureddata); |
| | | this.tableKey += 1; // 改变 key 迫使表格重新渲染 |
| | | // 你可以使用 this.$forceUpdate() 或者重新赋值数组来触发更新 |
| | | this.procureddata = [...this.procureddata]; |
| | | this.$nextTick(() => { |
| | | this.isSorting = false; |
| | |
| | | }); |
| | | }, |
| | | allocateddataSort() { |
| | | console.log("调用"); |
| | | |
| | | // 1. 加锁,阻止监听器执行 |
| | | this.isSorting = true; |
| | | // 自定义排序函数 |
| | | this.allocateddata.sort((a, b) => { |
| | | const indexA = this.organOrder.indexOf(a.organname); |
| | | const indexB = this.organOrder.indexOf(b.organname); |
| | | |
| | | // 如果两个都在列表中,按列表中的顺序排序 |
| | | if (indexA !== -1 && indexB !== -1) { |
| | | return indexA - indexB; |
| | | } |
| | | // 如果 a 在列表中,b 不在,a 排前面 |
| | | if (indexA !== -1) { |
| | | return -1; |
| | | } |
| | | // 如果 b 在列表中,a 不在,b 排前面 |
| | | if (indexB !== -1) { |
| | | return 1; |
| | | } |
| | | // 两个都不在列表中,保持原顺序(或按其他规则,比如按字母排序,这里按原始顺序) |
| | | return 0; |
| | | }); |
| | | console.log(this.allocateddata, "顺序"); |
| | | this.sortOrganRows(this.allocateddata); |
| | | this.tableKey += 1; // 改变 key 迫使表格重新渲染 |
| | | // 你可以使用 this.$forceUpdate() 或者重新赋值数组来触发更新 |
| | | this.allocateddata = [...this.allocateddata]; |
| | | this.$nextTick(() => { |
| | | this.isSorting = false; |
| | |
| | | this.allocateddata.push({ |
| | | organname: temporganname, |
| | | organno: value, |
| | | // 2026-10-23:写入器官排队序号(字典 dict_sort) |
| | | sort: this.getOrganSort(value), |
| | | id: null, |
| | | infoid: this.infoid, |
| | | donorno: this.form.donorno, |
| | |
| | | this.procureddata.push({ |
| | | organname: temporganname, |
| | | organno: value, |
| | | // 2026-10-23:写入器官排队序号(字典 dict_sort) |
| | | sort: this.getOrganSort(value), |
| | | id: null, |
| | | infoid: this.infoid, |
| | | donorno: this.form.donorno, |
| | |
| | | this.transplantdata.push({ |
| | | organname: temporganname, |
| | | organno: value, |
| | | // 2026-10-23:写入器官排队序号(字典 dict_sort) |
| | | sort: this.getOrganSort(value), |
| | | id: null, |
| | | infoid: this.infoid, |
| | | donorno: this.form.donorno, |
| | | organstate: 1, |
| | | transplantstate: 1 |
| | | }); |
| | | // 2026-10-23:完成登记原先没有 watch,新增器官会停在表格最后; |
| | | // 这里立即按排队序号归位(原地排序后必须重新赋值,否则表格不重渲染) |
| | | this.transplantdata = this.sortOrganRows([...this.transplantdata]); |
| | | } |
| | | } else { |
| | | this.$modal.msgWarning("该器官已经选择,请勿重复选择!"); |
| | |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="5"> |
| | | <el-form-item label="联系电话" prop="phone"> |
| | | <el-input v-model="form.phone" placeholder="请输入联系电话" /> |
| | | <el-col :span="5"> |
| | | <el-form-item label="绩效日期" prop="jxrq"> |
| | | <el-date-picker |
| | | clearable |
| | | style="width: 100%" |
| | | v-model="form.jxrq" |
| | | type="date" format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | placeholder="绩效日期" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="5"> |
| | |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="5"> |
| | | <el-form-item label="联系电话" prop="phone"> |
| | | <el-input v-model="form.phone" placeholder="请输入联系电话" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="text-align: left"> |
| | | <el-col :span="8"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="申请说明" prop="remark"> |
| | | <el-input v-model="form.remark" placeholder="申请说明" /> |
| | | </el-form-item> |
| | |
| | | :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.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-row> |
| | | <el-row :gutter="8"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="统计日期"> |
| | | <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="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"> |
| | | <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-row> |
| | | <el-row :gutter="8"> |
| | | <el-col :span="6"> |
| | | <el-form-item label="报销人员" prop="pauserno"> |
| | | <el-select |
| | | v-model="queryParams.pauserno" |
| | | placeholder="请选择报销人员" |
| | | clearable |
| | | filterable |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="item in userList" |
| | | :key="item.username" |
| | | :label="item.nickname" |
| | | :value="item.username" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item> |
| | | <el-button |
| | |
| | | </el-row> |
| | | </el-form> |
| | | |
| | | <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 v-loading="loading" border :data="donatebaseinfoList"> --> |
| | | <el-table |
| | | :data="jxidata" |
| | |
| | | :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="id" width="50" /> |
| | | <el-table-column label="统计月份" align="center" prop="applymonth" /> |
| | | <el-table-column label="业务组" align="center" prop="deptmentName"> |
| | | </el-table-column> |
| | | <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" prop="amount" /> |
| | | |
| | | <el-table-column label="操作" align="center"> |
| | | <!-- <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-column> --> |
| | | </el-table> |
| | | |
| | | <div style="margin: 10px;text-align: right;"> |
| | |
| | | listsfeistatistics, |
| | | listbxiaostatistics, |
| | | listjixstatistics, |
| | | listanlstatistics |
| | | listanlstatistics, |
| | | exportExpenseStatistics |
| | | } from "@/api/project/statistics"; |
| | | |
| | | import { listUser } from "@/api/project/organization"; |
| | |
| | | selecttime: "", |
| | | reportervalue: "", |
| | | reportlist: [ |
| | | { label: "差旅费", value: "0" }, |
| | | { label: "差旅费", value: "5" }, |
| | | { label: "专家费", value: "1" }, |
| | | { label: "伦理专家费", value: "2" }, |
| | | { label: "医学成本", value: "3" }, |
| | |
| | | qu: "" |
| | | }, |
| | | deptList: [], |
| | | userList: [], |
| | | // 遮罩层 |
| | | loading: false, |
| | | // 导出遮罩层 |
| | |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | getUserList() { |
| | | listUser().then(res => { |
| | | this.userList = res.data; |
| | | }); |
| | | }, |
| | | resetArr(Arr) { |
| | | var hash = {}; |
| | | Arr = Arr.reduce(function(arr, current) { |
| | |
| | | $obj.id = $index + 1; |
| | | }); |
| | | }); |
| | | }, |
| | | /** 导出按钮操作 */ |
| | | handleExport() { |
| | | const queryParams = { |
| | | pabegtime: this.queryParams.pabegtime, |
| | | paendtime: this.queryParams.paendtime, |
| | | padeptno: this.queryParams.padeptno, |
| | | pauserno: this.queryParams.pauserno, |
| | | paexpensetype: this.queryParams.paexpensetype |
| | | }; |
| | | this.$modal |
| | | .confirm("是否确认导出当前筛选条件下的费用统计数据?") |
| | | .then(() => { |
| | | this.exportLoading = true; |
| | | return exportExpenseStatistics(queryParams); |
| | | }) |
| | | .then(response => { |
| | | this.$download.name(response.msg); |
| | | this.exportLoading = false; |
| | | }) |
| | | .catch(() => { |
| | | this.exportLoading = false; |
| | | }); |
| | | }, |
| | | |
| | | // 表单重置 |
| | |
| | | this.resetForm("queryForm"); |
| | | this.handleQuery(); |
| | | }, |
| | | /** 金额显示:保留两位小数,0.00 不显示 */ |
| | | formatAmount(value) { |
| | | if (value === null || value === undefined || value === "") { |
| | | return ""; |
| | | } |
| | | const num = Number(value); |
| | | if (!Number.isFinite(num) || num === 0) { |
| | | return ""; |
| | | } |
| | | return num.toFixed(2); |
| | | }, |
| | | amountFormatter(row, column, cellValue) { |
| | | return this.formatAmount(cellValue); |
| | | }, |
| | | getSummaries(param) { |
| | | const { columns, data } = param; |
| | | const sums = []; |
| | |
| | | |
| | | const values = data.map(item => Number(item[column.property])); |
| | | if (!values.every(value => isNaN(value))) { |
| | | sums[index] = values.reduce((prev, curr) => { |
| | | const total = values.reduce((prev, curr) => { |
| | | const value = Number(curr); |
| | | if (!isNaN(value)) { |
| | | return prev + curr; |
| | |
| | | return prev; |
| | | } |
| | | }, 0); |
| | | sums[index] = sums[index].toFixed(2); // 保留2位小数,解决小数合计列; |
| | | // 合计保留 2 位小数;0.00 不显示 |
| | | sums[index] = total === 0 ? "" : Number(total).toFixed(2); |
| | | } else { |
| | | sums[index] = ""; |
| | | } |
| | |
| | | //获取列表 |
| | | this.getList(); |
| | | this.listDept(); |
| | | this.getUserList(); |
| | | } |
| | | |
| | | // //生命周期 - 挂载完成(可以访问DOM元素) |
| | |
| | | :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-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 v-loading="loading" border :data="donatebaseinfoList"> --> |
| | | <el-table |
| | | v-loading="loading" |
| | |
| | | :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="id" width="50" /> |
| | | <el-table-column label="统计月份" align="center" prop="donationmonth" /> |
| | | |
| | | <el-table-column label="业务组" align="center" prop="deptname"> |
| | | </el-table-column> |
| | | <el-table-column label="业务组" align="center" prop="deptname"> </el-table-column> |
| | | <el-table-column label="专职人员" align="center" prop="reportername" /> |
| | | <el-table-column label="案例累计" align="center" prop="casesum" /> |
| | | <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="workflow9" width="90" /> --> |
| | | <el-table-column label="终止案例" align="center" prop="terminationcase" width="100" /> |
| | | |
| | | <el-table-column label="案例数量" align="center" prop="casesum" /> |
| | | |
| | | <el-table-column |
| | | <!-- <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 |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table-column> --> |
| | | </el-table> |
| | | <div style="margin: 10px;text-align: right;"> |
| | | <div> |
| | |
| | | listsfeistatistics, |
| | | listbxiaostatistics, |
| | | listjixstatistics, |
| | | listanlstatistics |
| | | listanlstatistics, |
| | | exportCaseStatistics |
| | | } from "@/api/project/statistics"; |
| | | |
| | | import { listUser } from "@/api/project/organization"; |
| | |
| | | |
| | | selecttime: "", |
| | | reportervalue: "", |
| | | reportlist: [ |
| | | { label: "正常", value: "0" }, |
| | | { label: "终止", value: "1" } |
| | | ], |
| | | //省市区 |
| | | //默认值设置,可为空 |
| | | searchAddress: { |
| | |
| | | daterangeReporttime: [], |
| | | // 查询参数 |
| | | queryParams: { |
| | | pacasestate: "0", |
| | | pabegtime: null, |
| | | paendtime: null |
| | | }, |
| | |
| | | } |
| | | }, |
| | | listDept() { |
| | | listDept({}).then(response => { |
| | | // 只取业务办公室(dept_id=102)下的业务组,供“业务组”下拉使用 |
| | | listDept({ parentId: 102 }).then(response => { |
| | | this.deptList = response.data; |
| | | this.loading = false; |
| | | }); |
| | |
| | | this.total = res.total; |
| | | }); |
| | | }, |
| | | /** 导出按钮操作 */ |
| | | handleExport() { |
| | | const queryParams = { |
| | | pabegtime: this.queryParams.pabegtime, |
| | | paendtime: this.queryParams.paendtime, |
| | | padeptno: this.queryParams.padeptno, |
| | | pausername: this.queryParams.pausername |
| | | }; |
| | | this.$modal |
| | | .confirm("是否确认导出当前筛选条件下的案例统计数据?") |
| | | .then(() => { |
| | | this.exportLoading = true; |
| | | return exportCaseStatistics(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 = ["donationmonth", "deptname", "reportername"]; |
| | | columns.forEach((column, index) => { |
| | | if (index === 0) { |
| | | sums[index] = "合计"; |
| | |
| | | this.form.treatmenthospitalno = ""; |
| | | |
| | | this.queryParams = { |
| | | pacasestate: "0" |
| | | pabegtime: null, |
| | | paendtime: null |
| | | }; |
| | | this.selecttime = []; |
| | | this.getTimeList(); |
| | |
| | | > |
| | | <el-row :gutter="8"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="医院名称"> |
| | | <org-selecter |
| | | ref="orgSelecter" |
| | | :org-type="'4'" |
| | | v-model="queryParams.pahospitalno" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="统计日期"> |
| | | <el-form-item label="月份范围"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="selecttime" |
| | |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="8"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="医院名称"> |
| | | <org-selecter |
| | | ref="orgSelecter" |
| | | :org-type="'4'" |
| | | v-model="queryParams.pahospitalno" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item> |
| | | <el-button |
| | |
| | | <!-- --> |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-form |
| | | class="opo-query-form" |
| | | :model="queryParams" |
| | | ref="queryForm" |
| | | :inline="true" |
| | | label-width="70px" |
| | | > |
| | | <el-row :gutter="8"> |
| | | <el-col :span="6"> |
| | | <el-form-item label="业务人员" prop="pauserno"> |
| | | <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 class="opo-query-form" :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="70px"> |
| | | <el-row :gutter="4"> |
| | | <!-- <el-col :span="6"> |
| | | <el-form-item align="left" label="业务组" prop="padeptno"> |
| | | <el-select |
| | | v-model="queryParams.padeptno" |
| | | placeholder="请选择案例状态" |
| | | placeholder="请选择部门、业务组" |
| | | > |
| | | <el-option |
| | | v-for="item in deptList" |
| | |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="绩效类型"> |
| | | <el-select |
| | | v-model="queryParams.pabonustype" |
| | | 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-col> --> |
| | | <el-col :span="8"> |
| | | <el-form-item label="统计日期"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="selecttime" |
| | | type="monthrange" |
| | | range-separator="至" |
| | | start-placeholder="开始月份" |
| | | end-placeholder="结束月份" |
| | | value-format="yyyy-MM-dd" |
| | | @change="getTimeList" |
| | | > |
| | | <el-date-picker style="width: 100%" v-model="selecttime" type="monthrange" range-separator="至" |
| | | start-placeholder="开始月份" end-placeholder="结束月份" value-format="yyyy-MM-dd" @change="getTimeList"> |
| | | </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-form-item label="绩效人员" prop="pauserno"> |
| | | <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 |
| | | type="primary" |
| | | icon="el-icon-search" |
| | | size="mini" |
| | | @click="handleQuery" |
| | | >搜索</el-button |
| | | > |
| | | <el-button icon="el-icon-refresh" size="mini" @click="resetQuery" |
| | | >重置</el-button |
| | | > |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | |
| | | <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 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 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" /> |
| | | |
| | | <el-table-column |
| | | label="操作" |
| | | align="center" |
| | | class-name="small-padding fixed-width" |
| | | fixed="right" |
| | | > |
| | | <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"> |
| | | <!-- v-if="scope.row.recordstate==2" |
| | | --> |
| | | <el-button size="mini" type="text" icon="el-icon-edit" |
| | | >明细</el-button |
| | | > |
| | | <el-button size="mini" type="text" icon="el-icon-edit">明细</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table-column> --> |
| | | </el-table> |
| | | <div style="margin: 10px;text-align: right;"> |
| | | <div> |
| | |
| | | listsfeistatistics, |
| | | listbxiaostatistics, |
| | | listjixstatistics, |
| | | listanlstatistics |
| | | listanlstatistics, |
| | | exportPerformanceStatistics |
| | | } from "@/api/project/statistics"; |
| | | |
| | | import { listUser } from "@/api/project/organization"; |
| | |
| | | |
| | | selecttime: "", |
| | | reportervalue: "", |
| | | reportlist: [ |
| | | { label: "月度", value: 1 }, |
| | | { label: "季度", value: 2 }, |
| | | { label: "年度", value: 3 } |
| | | reporttype: [ |
| | | { label: "全部", value: "0" }, |
| | | { label: "月度", value: "68" }, |
| | | { label: "季度", value: "69" }, |
| | | { label: "年度", value: "70" } |
| | | ], |
| | | //省市区 |
| | | //默认值设置,可为空 |
| | |
| | | shi: "", |
| | | qu: "" |
| | | }, |
| | | deptList:[], |
| | | deptList: [], |
| | | // 遮罩层 |
| | | loading: false, |
| | | // 导出遮罩层 |
| | |
| | | daterangeReporttime: [], |
| | | // 查询参数 |
| | | queryParams: { |
| | | pabonustype:'', |
| | | pabonustype: "0", |
| | | pabegtime: null, |
| | | paendtime: null, |
| | | pauserno: null, |
| | | pausername: "", |
| | | padeptno: null, |
| | | }, |
| | | |
| | |
| | | }, |
| | | //监听属性 类似于data概念 |
| | | computed: {}, |
| | | activated() {}, |
| | | mounted() {}, |
| | | activated() { }, |
| | | mounted() { }, |
| | | |
| | | //监控data中的数据变化 |
| | | watch: {}, |
| | |
| | | |
| | | resetArr(Arr) { |
| | | var hash = {}; |
| | | Arr = Arr.reduce(function(arr, current) { |
| | | Arr = Arr.reduce(function (arr, current) { |
| | | hash[current.reporterno] |
| | | ? "" |
| | | : (hash[current.reporterno] = true && arr.push(current)); |
| | |
| | | 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; |
| | | }, |
| | | |
| | | /** 查询捐献基础列表 */ |
| | | getList() { |
| | | listjixstatistics(this.queryParams).then(res => { |
| | | listjixstatistics(this.buildQueryParams()).then(res => { |
| | | this.jxidata = res.rows; |
| | | this.jxidata.forEach(($obj, $index) => { |
| | | $obj.id = $index + 1; |
| | | }); |
| | | this.total=res.total; |
| | | this.total = res.total; |
| | | }); |
| | | }, |
| | | /** 导出按钮操作 */ |
| | | handleExport() { |
| | | const queryParams = this.buildQueryParams(); |
| | | this.$modal |
| | | .confirm("是否确认导出当前筛选条件下的绩效统计数据?") |
| | | .then(() => { |
| | | this.exportLoading = true; |
| | | return exportPerformanceStatistics(queryParams); |
| | | }) |
| | | .then(response => { |
| | | this.$download.name(response.msg); |
| | | this.exportLoading = false; |
| | | }) |
| | | .catch(() => { |
| | | this.exportLoading = false; |
| | | }); |
| | | }, |
| | | listDept() { |
| | | listDept({}).then(response => { |
| | |
| | | |
| | | |
| | | this.queryParams = { |
| | | pabonustype:'', |
| | | pabonustype: "0", |
| | | pabegtime: null, |
| | | paendtime: null, |
| | | pauserno: null, |
| | | pausername: "", |
| | | padeptno: null |
| | | }; |
| | | this.selecttime = []; |
| | |
| | | this.resetForm("queryForm"); |
| | | this.handleQuery(); |
| | | }, |
| | | /** 金额显示:保留两位小数,0.00 不显示 */ |
| | | formatAmount(value) { |
| | | if (value === null || value === undefined || value === "") { |
| | | return ""; |
| | | } |
| | | const num = Number(value); |
| | | if (!Number.isFinite(num) || num === 0) { |
| | | return ""; |
| | | } |
| | | return num.toFixed(2); |
| | | }, |
| | | amountFormatter(row, column, cellValue) { |
| | | return this.formatAmount(cellValue); |
| | | }, |
| | | getSummaries(param) { |
| | | const { columns, data } = param; |
| | | const sums = []; |
| | | var columnnames = ["applymonth", "deptmentName", "username",'deptName']; |
| | | var columnnames = ["applymonth", "deptmentName", "username", "deptName", "beneficiaryname"]; |
| | | columns.forEach((column, index) => { |
| | | if (index === 0) { |
| | | sums[index] = "合计"; |
| | |
| | | |
| | | const values = data.map(item => Number(item[column.property])); |
| | | if (!values.every(value => isNaN(value))) { |
| | | sums[index] = values.reduce((prev, curr) => { |
| | | const total = values.reduce((prev, curr) => { |
| | | const value = Number(curr); |
| | | if (!isNaN(value)) { |
| | | return prev + curr; |
| | |
| | | return prev; |
| | | } |
| | | }, 0); |
| | | sums[index] = sums[index].toFixed(2); // 保留2位小数,解决小数合计列; |
| | | // 合计保留 2 位小数;0.00 不显示 |
| | | sums[index] = total === 0 ? "" : Number(total).toFixed(2); |
| | | } else { |
| | | sums[index] = ""; |
| | | } |