From 40987f843e458aa67694be30dccde1a3b920085e Mon Sep 17 00:00:00 2001
From: sinake <sinake1@qq.com>
Date: 星期一, 02 十一月 2026 14:01:45 +0800
Subject: [PATCH] 已收金额,未收金额钻取数据列表
---
src/views/project/unitCost/organfee/index.vue | 514 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 470 insertions(+), 44 deletions(-)
diff --git a/src/views/project/unitCost/organfee/index.vue b/src/views/project/unitCost/organfee/index.vue
index d71aa18..6989a7b 100644
--- a/src/views/project/unitCost/organfee/index.vue
+++ b/src/views/project/unitCost/organfee/index.vue
@@ -34,7 +34,7 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="鎶ュ憡鏃ユ湡">
+ <el-form-item label="鎹愮尞鏃ユ湡">
<el-date-picker
v-model="donatetimeRange"
type="daterange"
@@ -62,17 +62,44 @@
</el-form>
<el-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="mini"
+ @click="handleAdd"
+ >鏂板</el-button
+ >
+ </el-col>
+ <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="organfeeList">
+ <el-table
+ v-loading="loading"
+ border
+ :data="organfeeList"
+ highlight-current-row
+ @current-change="handleCurrentChange"
+ >
<el-table-column type="index" label="搴忓彿" width="55" align="center" />
<el-table-column
prop="donatetime"
- label="鎶ュ憡鏃ユ湡"
+ label="鎹愮尞鏃ユ湡"
width="120"
align="center"
>
@@ -80,12 +107,7 @@
<span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
- <el-table-column
- prop="hospitalname"
- label="浠樻鍖婚櫌"
- width="200"
- align="center"
- />
+
<el-table-column
prop="donorname"
label="鎹愮尞鑰�"
@@ -99,34 +121,59 @@
align="center"
/>
<el-table-column
+ prop="payOrganName"
+ label="浠樻鍣ㄥ畼鍚嶇О"
+ width="140"
+ align="center"
+ show-overflow-tooltip
+ />
+ <el-table-column
prop="caseno"
label="鍣ㄥ畼鍒嗛厤缂栧彿"
align="center"
show-overflow-tooltip
/>
- <el-table-column prop="name" label="鍙椾綋濮撴皬" width="120" align="center" />
- <el-table-column label="绉绘鏃ユ湡" width="120" align="center">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.receiveTime, "{y}-{m}-{d}") }}</span>
- </template>
- </el-table-column>
+ <el-table-column prop="name" label="鍙椾綋" width="120" align="center" />
+
<el-table-column label="鍣ㄥ畼鐘舵��" width="120" align="center">
<template slot-scope="scope">
<span>{{ selectOrganState(scope.row.organState) }}</span>
</template>
</el-table-column>
+ <el-table-column
+ prop="hospitalname"
+ label="浠樻鍖婚櫌"
+ width="200"
+ align="center"
+ />
<el-table-column
prop="organcharge"
label="搴旀敹閲戦"
width="120"
align="center"
/>
+ <el-table-column label="浠樻鐘舵��" width="100" align="center">
+ <template slot-scope="scope">
+ <span>{{ payStatus(scope.row) }}</span>
+ </template>
+ </el-table-column>
<el-table-column
prop="amount"
label="瀹炴敹閲戦"
width="120"
align="center"
/>
+ <el-table-column label="鏈粯閲戦" width="160" align="center">
+ <template slot-scope="scope">
+ <span>{{ formatReceivableDiff(scope.row) }}</span>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="鏀舵鏃ユ湡" width="120" align="center">
+ <template slot-scope="scope">
+ <span>{{ parseTime(scope.row.organtime, "{y}-{m}-{d}") }}</span>
+ </template>
+ </el-table-column>
<el-table-column
prop="organchargedesc"
label="澶囨敞"
@@ -171,39 +218,243 @@
<el-dialog
title="淇敼鍣ㄥ畼淇℃伅"
:visible.sync="editOpen"
- width="500px"
+ width="760px"
append-to-body
:close-on-click-modal="false"
>
- <el-form ref="editForm" :model="editForm" label-width="90px">
- <el-form-item label="鍣ㄥ畼鐘舵��" prop="organState">
- <el-select
- v-model="editForm.organState"
- placeholder="璇烽�夋嫨鍣ㄥ畼鐘舵��"
- style="width: 100%"
- >
- <el-option
- v-for="item in organStateList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="澶囨敞" prop="organchargedesc">
- <el-input
- v-model="editForm.organchargedesc"
- type="textarea"
- :rows="3"
- maxlength="200"
- show-word-limit
- placeholder="璇疯緭鍏ュ娉�"
- />
- </el-form-item>
+ <el-form ref="editForm" :model="editForm" label-width="110px">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="浠樻鍖婚櫌" prop="hospitalno">
+ <el-select
+ v-model="editForm.hospitalno"
+ placeholder="璇烽�夋嫨浠樻鍖婚櫌"
+ clearable
+ filterable
+ style="width: 100%"
+ @change="handleEditHospitalChange"
+ >
+ <el-option
+ v-for="item in organizationList"
+ :key="item.organizationid"
+ :label="item.organizationname"
+ :value="String(item.organizationid)"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浠樻鍣ㄥ畼鍚嶇О" prop="payOrganName">
+ <el-input
+ v-model="editForm.payOrganName"
+ maxlength="100"
+ placeholder="璇疯緭鍏ヤ粯娆惧櫒瀹樺悕绉�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍣ㄥ畼鍒嗛厤缂栧彿" prop="caseno">
+ <el-input
+ v-model="editForm.caseno"
+ maxlength="50"
+ placeholder="璇疯緭鍏ュ櫒瀹樺垎閰嶇紪鍙�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍙椾綋" prop="name">
+ <el-input
+ v-model="editForm.name"
+ maxlength="50"
+ placeholder="璇疯緭鍏ュ彈浣�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍣ㄥ畼鐘舵��" prop="organState">
+ <el-select
+ v-model="editForm.organState"
+ placeholder="璇烽�夋嫨鍣ㄥ畼鐘舵��"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="item in organStateList"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="澶囨敞" prop="organchargedesc">
+ <el-input
+ v-model="editForm.organchargedesc"
+ type="textarea"
+ :rows="3"
+ maxlength="200"
+ show-word-limit
+ placeholder="璇疯緭鍏ュ娉�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editOpen = false">鍙� 娑�</el-button>
<el-button type="primary" :loading="editLoading" @click="submitEdit"
+ >纭� 瀹�</el-button
+ >
+ </span>
+ </el-dialog>
+
+ <!-- 鏂板鍣ㄥ畼璐圭敤 -->
+ <el-dialog
+ title="鏂板鍣ㄥ畼璐圭敤"
+ :visible.sync="addOpen"
+ width="820px"
+ append-to-body
+ :close-on-click-modal="false"
+ >
+ <el-form
+ ref="addForm"
+ :model="addForm"
+ :rules="addRules"
+ label-width="110px"
+ >
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎹愮尞鑰�" prop="donorname">
+ <el-input
+ v-model="addForm.donorname"
+ maxlength="50"
+ placeholder="璇疯緭鍏ユ崘鐚��"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浠樻鍖婚櫌" prop="hospitalno">
+ <el-select
+ v-model="addForm.hospitalno"
+ placeholder="璇烽�夋嫨浠樻鍖婚櫌"
+ clearable
+ filterable
+ style="width: 100%"
+ @change="handleAddHospitalChange"
+ >
+ <el-option
+ v-for="item in organizationList"
+ :key="item.organizationid"
+ :label="item.organizationname"
+ :value="String(item.organizationid)"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍣ㄥ畼鍚嶇О" prop="organname">
+ <el-input
+ v-model="addForm.organname"
+ maxlength="50"
+ placeholder="璇疯緭鍏ュ櫒瀹樺悕绉�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浠樻鍣ㄥ畼鍚嶇О" prop="payOrganName">
+ <el-input
+ v-model="addForm.payOrganName"
+ maxlength="100"
+ placeholder="璇疯緭鍏ヤ粯娆惧櫒瀹樺悕绉�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍣ㄥ畼鍒嗛厤缂栧彿" prop="caseno">
+ <el-input
+ v-model="addForm.caseno"
+ maxlength="50"
+ placeholder="璇疯緭鍏ュ櫒瀹樺垎閰嶇紪鍙�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍙椾綋" prop="name">
+ <el-input
+ v-model="addForm.name"
+ maxlength="50"
+ placeholder="璇疯緭鍏ュ彈浣�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍣ㄥ畼鐘舵��" prop="organState">
+ <el-select
+ v-model="addForm.organState"
+ placeholder="璇烽�夋嫨鍣ㄥ畼鐘舵��"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="item in organStateList"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏀舵鏃ユ湡" prop="organtime">
+ <el-date-picker
+ v-model="addForm.organtime"
+ type="date"
+ value-format="yyyy-MM-dd"
+ placeholder="璇烽�夋嫨鏀舵鏃ユ湡"
+ style="width: 100%"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="搴旀敹閲戦" prop="organcharge">
+ <el-input-number
+ v-model="addForm.organcharge"
+ :min="0"
+ :precision="2"
+ :controls="false"
+ placeholder="璇疯緭鍏ュ簲鏀堕噾棰�"
+ style="width: 100%"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹炴敹閲戦" prop="amount">
+ <el-input-number
+ v-model="addForm.amount"
+ :min="0"
+ :precision="2"
+ :controls="false"
+ placeholder="璇疯緭鍏ュ疄鏀堕噾棰�"
+ style="width: 100%"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="澶囨敞" prop="organchargedesc">
+ <el-input
+ v-model="addForm.organchargedesc"
+ type="textarea"
+ :rows="3"
+ maxlength="200"
+ show-word-limit
+ placeholder="璇疯緭鍏ュ娉�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="addOpen = false">鍙� 娑�</el-button>
+ <el-button type="primary" :loading="addLoading" @click="submitAdd"
>纭� 瀹�</el-button
>
</span>
@@ -214,9 +465,30 @@
<script>
import {
listDonorchargeorgan,
- updateDonorchargeorgan
+ addDonorchargeorgan,
+ updateDonorchargeorgan,
+ exportOrganfee
} from "@/api/project/donorcharge";
import { listOrganization } from "@/api/project/organization";
+
+/** 鏂板鍣ㄥ畼璐圭敤鐨勭┖琛ㄥ崟 */
+function emptyAddForm() {
+ return {
+ infoid: null,
+ donorname: null,
+ hospitalno: null,
+ hospitalname: null,
+ organname: null,
+ payOrganName: null,
+ caseno: null,
+ name: null,
+ organState: null,
+ organcharge: null,
+ amount: null,
+ organtime: null,
+ organchargedesc: null
+ };
+}
export default {
name: "Organfee",
@@ -224,12 +496,16 @@
return {
// 閬僵灞�
loading: false,
+ // 瀵煎嚭閬僵灞�
+ exportLoading: false,
// 鏄剧ず鎼滅储鏉′欢
showSearch: true,
// 鎬绘潯鏁�
total: 0,
// 鍣ㄥ畼璐圭敤鍒楄〃
organfeeList: [],
+ // 琛ㄦ牸褰撳墠閫変腑琛�
+ currentRow: null,
// 鎺ユ敹鍖婚櫌锛堟満鏋勶級涓嬫媺鏁版嵁
organizationList: [],
// 鎶ュ憡鏃ユ湡鍖洪棿
@@ -241,15 +517,36 @@
{ value: "3", label: "搴撳瓨" },
{ value: "4", label: "澶卞姛" },
{ value: "5", label: "鐩寸郴鍏嶉櫎" },
- { value: "6", label: "涓嶈壇浜嬩欢" }
+ { value: "6", label: "涓嶈壇浜嬩欢" },
+ { value: "7", label: "绉戠爺" }
],
// 淇敼寮圭獥
editOpen: false,
editLoading: false,
editForm: {
id: null,
+ hospitalno: null,
+ hospitalname: null,
+ payOrganName: null,
+ caseno: null,
+ name: null,
organState: null,
organchargedesc: null
+ },
+ // 鏂板寮圭獥
+ addOpen: false,
+ addLoading: false,
+ addForm: emptyAddForm(),
+ addRules: {
+ donorname: [
+ { required: true, message: "璇疯緭鍏ユ崘鐚��", trigger: "blur" }
+ ],
+ organname: [
+ { required: true, message: "璇疯緭鍏ュ櫒瀹樺悕绉�", trigger: "blur" }
+ ],
+ organcharge: [
+ { required: true, message: "璇疯緭鍏ュ簲鏀堕噾棰�", trigger: "blur" }
+ ]
},
// 鏌ヨ鍙傛暟
queryParams: {
@@ -283,6 +580,53 @@
this.loading = false;
});
},
+ /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+ handleExport() {
+ const queryParams = this.queryParams;
+ this.$modal
+ .confirm("鏄惁纭瀵煎嚭鍣ㄥ畼璐圭敤鏁版嵁锛�")
+ .then(() => {
+ this.exportLoading = true;
+ return exportOrganfee(queryParams);
+ })
+ .then(response => {
+ this.$download.name(response.msg);
+ })
+ .catch(() => {})
+ .finally(() => {
+ this.exportLoading = false;
+ });
+ },
+ /** 搴旀敹閲戦-瀹炴敹閲戦鐨勫樊棰濓紙淇濈暀涓や綅灏忔暟锛夛紝搴旀敹閲戦涓虹┖鏃惰繑鍥� null */
+ receivableDiff(row) {
+ if (
+ row.organcharge === null ||
+ row.organcharge === undefined ||
+ row.organcharge === ""
+ ) {
+ return null;
+ }
+ const receivable = Number(row.organcharge);
+ if (isNaN(receivable)) {
+ return null;
+ }
+ const received = Number(row.amount);
+ const diff = receivable - (isNaN(received) ? 0 : received);
+ return Math.round(diff * 100) / 100;
+ },
+ /** 宸灞曠ず鏂囨湰锛屽浐瀹氫袱浣嶅皬鏁� */
+ formatReceivableDiff(row) {
+ const diff = this.receivableDiff(row);
+ return diff === null ? "" : diff.toFixed(2);
+ },
+ /** 宸涓� 0 涓哄凡浠橈紝鍏跺畠涓烘湭浠� */
+ payStatus(row) {
+ const diff = this.receivableDiff(row);
+ if (diff === null) {
+ return "";
+ }
+ return diff === 0 ? "宸蹭粯" : "鏈粯";
+ },
/** 鏄惁鏈敹璐癸細organ_charge_state 涓� 0 鎴栦负绌� */
isUncharged(row) {
const state = row.organChargeState;
@@ -306,10 +650,92 @@
})
.catch(() => {});
},
- /** 鎵撳紑淇敼寮圭獥锛堝櫒瀹樼姸鎬併�佸娉級 */
+ /** 琛ㄦ牸褰撳墠琛屽彉鍖� */
+ handleCurrentChange(row) {
+ this.currentRow = row;
+ },
+ /** 鏂板鎸夐挳鎿嶄綔锛氫互褰撳墠閫変腑鐨勪竴琛屼负妯℃澘锛屽鍒堕櫎 id 澶栫殑瀛楁 */
+ handleAdd() {
+ const row = this.currentRow;
+ if (!row) {
+ this.$modal.msgWarning("璇峰厛閫変腑涓�琛屾暟鎹�");
+ return;
+ }
+ this.addForm = {
+ infoid:
+ row.infoid === null || row.infoid === undefined ? null : row.infoid,
+ donorname: row.donorname || null,
+ hospitalno:
+ row.hospitalno === null || row.hospitalno === undefined
+ ? null
+ : String(row.hospitalno),
+ hospitalname: row.hospitalname || null,
+ organname: row.organname || null,
+ payOrganName: row.payOrganName || null,
+ caseno: row.caseno || null,
+ name: row.name || null,
+ organState:
+ row.organState === null || row.organState === undefined
+ ? null
+ : String(row.organState),
+ organcharge:
+ row.organcharge === null || row.organcharge === undefined
+ ? null
+ : row.organcharge,
+ amount:
+ row.amount === null || row.amount === undefined ? null : row.amount,
+ organtime: row.organtime || null,
+ organchargedesc: row.organchargedesc || null
+ };
+ this.addOpen = true;
+ this.$nextTick(() => {
+ this.$refs.addForm && this.$refs.addForm.clearValidate();
+ });
+ },
+ /** 浠樻鍖婚櫌閫夋嫨鍚庡悓姝ュ尰闄㈠悕绉� */
+ handleAddHospitalChange(value) {
+ const org = this.organizationList.find(
+ item => String(item.organizationid) === String(value)
+ );
+ this.addForm.hospitalname = org ? org.organizationname : null;
+ },
+ /** 淇敼寮圭獥锛氫粯娆惧尰闄㈤�夋嫨鍚庡悓姝ュ尰闄㈠悕绉� */
+ handleEditHospitalChange(value) {
+ const org = this.organizationList.find(
+ item => String(item.organizationid) === String(value)
+ );
+ this.editForm.hospitalname = org ? org.organizationname : null;
+ },
+ /** 鎻愪氦鏂板 */
+ submitAdd() {
+ this.$refs.addForm.validate(valid => {
+ if (!valid) {
+ return;
+ }
+ this.addLoading = true;
+ addDonorchargeorgan(this.addForm)
+ .then(() => {
+ this.$modal.msgSuccess("鏂板鎴愬姛");
+ this.addOpen = false;
+ this.getList();
+ })
+ .finally(() => {
+ this.addLoading = false;
+ });
+ });
+ },
+ /** 鎵撳紑淇敼寮圭獥锛堜粯娆惧尰闄€�佷粯娆惧櫒瀹樺悕绉般�佸櫒瀹樼姸鎬併�佸娉級 */
handleEdit(row) {
this.editForm = {
id: row.id,
+ hospitalno:
+ row.hospitalno === null || row.hospitalno === undefined
+ ? null
+ : String(row.hospitalno),
+ hospitalname: row.hospitalname || null,
+ payOrganName: row.payOrganName || "",
+ caseno: row.caseno || "",
+ name: row.name || "",
organState:
row.organState === null || row.organState === undefined
? null
--
Gitblit v1.9.3