From d21d7dd23f15a0ca395a4c9d1b3bb31330ff56c0 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期三, 30 九月 2026 11:27:37 +0800
Subject: [PATCH] 专家费校验
---
src/views/project/fund/performancedetails/index.vue | 805 ++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 618 insertions(+), 187 deletions(-)
diff --git a/src/views/project/fund/performancedetails/index.vue b/src/views/project/fund/performancedetails/index.vue
index c154f59..6cfb93d 100644
--- a/src/views/project/fund/performancedetails/index.vue
+++ b/src/views/project/fund/performancedetails/index.vue
@@ -14,7 +14,7 @@
type="date"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="鐢宠鏃ユ湡"
- disabled="true"
+ :disabled="true"
>
</el-date-picker>
</el-form-item>
@@ -74,11 +74,11 @@
</el-form-item>
</el-col>
<el-col :span="5">
- <el-form-item label="鐢宠鏉愭枡鐘舵��" prop="infoid">
+ <el-form-item label="鏉愭枡棰勫鐘舵��" prop="infoid">
<el-select
v-model="form.checkstatus"
filterable
- placeholder="璇烽�夋嫨鐢宠鏉愭枡鐘舵��"
+ placeholder="璇烽�夋嫨鏉愭枡棰勫鐘舵��"
>
<el-option
v-for="item in baselisttages"
@@ -115,7 +115,7 @@
icon="el-icon-download"
size="small"
@click="Batchentry"
- >鎵归噺褰曞叆浜哄憳</el-button
+ >鎵归噺瀵煎叆缁╂晥浜哄憳</el-button
>
</div>
</el-col>
@@ -141,12 +141,15 @@
max-height="800"
border
highlight-current-row
+ :summary-method="getSummaries"
+ show-summary
>
<el-table-column
prop="orderno"
align="center"
label="搴忓彿"
width="88"
+ fixed
>
<template slot-scope="scope">
<el-input v-model="scope.row.orderno" placeholder="搴忓彿" />
@@ -157,6 +160,7 @@
align="center"
label="鏈嶅姟绫诲瀷"
width="200"
+ fixed
>
<template slot-scope="scope">
<el-select
@@ -194,8 +198,28 @@
:value="dict.id"
></el-option>
</el-select>
+ <!-- <el-cascader
+ v-model="scope.row.applytype"
+ :options="aaoptions"
+ :show-all-levels="false"
+ ></el-cascader> -->
</template>
</el-table-column>
+ <!-- <el-table-column
+ prop="jxrq"
+ align="center"
+ label="缁╂晥鏃ユ湡"
+ width="260"
+ >
+ <template slot-scope="scope">
+ <el-date-picker
+ v-model="scope.row.jxrq"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ >
+ </el-date-picker>
+ </template>
+ </el-table-column> -->
<el-table-column
prop="amount"
align="center"
@@ -206,11 +230,21 @@
<el-input
v-model="scope.row.amount"
placeholder="绋庡墠閲戦"
- @blur="
- val => {
- calculateTax(scope.row, 'A');
- }
- "
+ @blur="chargeSum"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="taxamount"
+ align="center"
+ label="鎵g◣閲戦"
+ width="120"
+ >
+ <template slot-scope="scope">
+ <el-input
+ @blur="chargeSum"
+ v-model="scope.row.taxamount"
+ placeholder="鎵g◣閲戦"
/>
</template>
</el-table-column>
@@ -224,32 +258,15 @@
<el-input
v-model="scope.row.taxedamount"
placeholder="绋庡悗閲戦"
- @blur="
- val => {
- calculateTax(scope.row, 'B');
- }
- "
+ @blur="queenchargeSum"
/>
</template>
</el-table-column>
- <el-table-column
- prop="taxamount"
- align="center"
- label="鎵g◣閲戦"
- width="120"
-
- >
- <template slot-scope="scope">
- <el-input
- v-model="scope.row.taxamount"
- placeholder="鎵g◣閲戦"
- />
- </template>
- </el-table-column>
+
<el-table-column
prop="beneficiaryname"
align="center"
- label="缁╂晥浜哄憳鎴栧崟浣�"
+ label="缁╂晥浜哄憳/鍗曚綅"
width="250"
>
<template slot-scope="scope">
@@ -266,13 +283,33 @@
</template>
</el-table-column>
<el-table-column
+ prop="isunit"
+ align="center"
+ label="浜哄憳绫诲埆"
+ width="100"
+ >
+ <template slot-scope="scope">
+ <el-tag
+ :type="scope.row.isunit == 1 ? 'warning' : 'success'"
+ size="mini"
+ >{{ scope.row.isunit == 1 ? "鍗曚綅" : "涓汉" }}</el-tag
+ >
+ </template>
+ </el-table-column>
+ <el-table-column
prop="idcardno"
align="center"
label="韬唤璇佸彿"
width="200"
>
<template slot-scope="scope">
- <el-input v-model="scope.row.idcardno" placeholder="韬唤璇佸彿" />
+ <el-input
+ v-model="scope.row.idcardno"
+ :disabled="scope.row.isunit == 1"
+ :placeholder="
+ scope.row.isunit == 1 ? '鍗曚綅鏃犻渶濉啓' : '韬唤璇佸彿'
+ "
+ />
</template>
</el-table-column>
@@ -453,34 +490,43 @@
:visible.sync="showSelectionDialog"
:close-on-click-modal="false"
:title="'缁╂晥浜哄憳锛堝惈鎵�鍦ㄥ崟浣嶏級璐﹀彿閫夋嫨'"
- width="500px"
+ width="560px"
style="text-align: center"
v-loading="loading"
>
<el-form ref="funddetailForm" :model="funddetailForm">
<el-row>
- <el-form-item label="璇疯緭鍏ラ�夋嫨锛�" prop="unitno" label-width="120px">
+ <el-form-item label="绛涙煡浜哄憳锛�" prop="userKey" label-width="120px">
<el-select
- v-model="funddetailForm.userName"
+ v-model="funddetailForm.userKey"
filterable
- remote
- reserve-keyword
+ clearable
allow-create
default-first-option
- placeholder="璇疯緭鍏ュ鍚嶆垨鍗曚綅鍚嶇О"
- :remote-method="remoteMethod"
- :loading="loadingperformance"
+ :filter-method="filterPersonOption"
+ placeholder="杈撳叆 濮撳悕 / 鍗曚綅 / 宸ュ彿 / 韬唤璇佸悗4浣� 绛涙煡锛屼篃鍙洿鎺ヨ緭鍏ュ鍚�"
style="width: 100%"
>
<el-option
v-for="item in optionsperformance"
- :key="item.value"
- :label="item.label"
- :value="item.value"
+ :key="item.id"
+ :label="personOptionLabel(item)"
+ :value="item.id"
>
+ <span style="float: left">{{ item.username }}</span>
+ <span style="float: right; color: #8492a6; font-size: 13px">
+ {{
+ item.isUnitPerson ? "鍗曚綅" : "宸ュ彿 " + (item.userno || "-")
+ }}{{ item.unitname ? " 路 " + item.unitname : "" }}
+ </span>
</el-option>
</el-select>
</el-form-item>
+ </el-row>
+ <el-row style="text-align: left; padding-left: 120px">
+ <span style="color: #909399; font-size: 12px">
+ 鍊欓�変负浜哄憳绫诲瀷鍚�屽弬涓庣哗鏁堛�嶇殑浜哄憳锛涢�変腑鍚庤韩浠借瘉鍙枫�侀摱琛岃处鍙风瓑鑷姩甯﹀嚭锛屽崟浣嶄负鍗曚綅鐨勮涓嶆牎楠岃韩浠借瘉鍙枫��
+ </span>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
@@ -514,7 +560,7 @@
:visible.sync="pdfVisible"
width="60%"
>
- <div>
+ <div style="margin-bottom: 10px;">
<el-table :data="tableDatatop" style="width: 100%">
<el-table-column
prop="beneficiaryname"
@@ -542,7 +588,13 @@
</el-table-column>
</el-table>
</div>
-
+ <el-alert
+ title="鏂颁笂浼犳枃浠堕渶鍦ㄦ彁浜や繚瀛樺悗鎵嶅彲杩涜妗堜緥鍏宠仈锛屽惁鍒欒涓烘斁寮�"
+ type="error"
+ show-icon
+ close-text="鐭ラ亾浜�"
+ >
+ </el-alert>
<el-tabs
style="margin-top: 20px;"
v-model="activeName"
@@ -610,7 +662,7 @@
>
<template slot-scope="scope">
<el-button
- type="primary"
+ type="danger"
size="mini"
@click.native.prevent.stop="deletedowfile(scope.row)"
>鍒犻櫎</el-button
@@ -638,16 +690,18 @@
v-if="this.previewpdf && pdfimgsrcList.length"
class="pdfimgmin"
>
- <!-- <img :src="pdfimg" /> -->
<el-image
style="width: 95%; height: 90%"
:src="pdfimg"
- :preview-src-list="pdfimgsrcList"
- >
- <!-- <div slot="error" class="image-slot">
- <i class="el-icon-picture-outline"></i>
- </div> -->
- </el-image>
+ @click="handleImageClick(0)"
+ />
+ <custom-image-viewer
+ :url-list="pdfimgsrcList"
+ :initial-index="currentIndex"
+ :visible="viewerVisible"
+ @update:visible="viewerVisible = $event"
+ @close="handleViewerClose"
+ />
</div>
<div v-else class="pdfimgmins">{{ hintitle }}</div>
</div>
@@ -741,16 +795,18 @@
v-if="this.previewpdf && invoicepdfimgsrcList.length"
class="pdfimgmin"
>
- <!-- <img :src="pdfimg" /> -->
<el-image
style="width: 95%; height: 90%"
:src="invoicepdfimg"
- :preview-src-list="invoicepdfimgsrcList"
- >
- <!-- <div slot="error" class="image-slot">
- <i class="el-icon-picture-outline"></i>
- </div> -->
- </el-image>
+ @click="invoiceHandleImageClick(0)"
+ />
+ <custom-image-viewer
+ :url-list="invoicepdfimgsrcList"
+ :initial-index="invoiceCurrentIndex"
+ :visible="invoiceViewerVisible"
+ @update:visible="invoiceViewerVisible = $event"
+ @close="invoiceHandleViewerClose"
+ />
</div>
<div v-else class="pdfimgmins">{{ hintitle }}</div>
</div>
@@ -771,12 +827,25 @@
<el-radio-button :label="70">骞村害缁╂晥</el-radio-button>
</el-radio-group>
</div>
+ <div style="margin-bottom: 12px; margin-left: 10px;">
+ <el-input
+ v-model="personKeyword"
+ clearable
+ size="small"
+ prefix-icon="el-icon-search"
+ placeholder="杈撳叆 濮撳悕 / 鍗曚綅 / 宸ュ彿 / 韬唤璇佸悗4浣� 绛涙煡"
+ style="width: 330px"
+ />
+ <span style="margin-left: 10px; color: #909399; font-size: 12px">
+ 鍏� {{ filteredCityOptions.length }} 浜�
+ </span>
+ </div>
<div style="max-height: 330px; overflow-y: auto">
<el-checkbox
:indeterminate="isIndeterminate"
v-model="checkAll"
@change="handleCheckAllChange"
- >鍏ㄩ��</el-checkbox
+ >鍏ㄩ�夛紙褰撳墠绛涙煡缁撴灉锛�</el-checkbox
>
<div style="margin: 15px 0;"></div>
<el-checkbox-group
@@ -785,10 +854,11 @@
>
<el-checkbox
border
- v-for="city in cityOptions"
+ v-for="city in filteredCityOptions"
:label="city"
- :key="city.userNo"
- >{{ city.userName }}</el-checkbox
+ :key="city.id"
+ >{{ city.username }}{{ city.isUnitPerson ? "锛堝崟浣嶏級" : ""
+ }}{{ city.unitname ? " 路 " + city.unitname : "" }}</el-checkbox
>
</el-checkbox-group>
</div>
@@ -832,7 +902,6 @@
listOrganization,
getOrganization,
listReportname,
- listperformance,
listUser
} from "@/api/project/organization";
@@ -849,12 +918,15 @@
import Li_area_select from "@/components/Address";
import OrgSelecter from "@/views/project/components/orgselect";
import { getToken } from "@/utils/auth";
+import { moneySum, moneyAdd, moneySub, moneyRound } from "@/utils/money";
+import CustomImageViewer from "@/components/CustomImageViewer";
export default {
//import寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
components: {
Li_area_select,
- OrgSelecter
+ OrgSelecter,
+ CustomImageViewer
},
name: "fundApply",
@@ -901,7 +973,10 @@
feeUnitList: [],
batchdialogVisible: false,
itemlist: [],
+ //缁╂晥浜哄憳鍊欓�夛紙浜哄憳绫诲瀷鍚�屽弬涓庣哗鏁堛�嶇殑浜哄憳锛屾潵鑷� service_externalperson锛�
cityOptions: [],
+ //鎵归噺褰曞叆寮规鐨勭瓫鏌ュ叧閿瓧
+ personKeyword: "",
checkAll: false,
checkedCities: [],
Personnelforname: null,
@@ -917,15 +992,15 @@
baselisttages: [
{
id: 1,
- name: "寰呯敵璇锋潗鏂�"
+ name: "寰呭鏍�"
},
{
id: 2,
- name: "瀹℃牳閫氳繃绛夊緟閭瘎绾歌川鏉愭枡"
+ name: "棰勫閫氳繃绛夊緟绾歌川鏉愭枡"
},
{
id: 3,
- name: "宸叉敹鍒版姤閿�鏉愭枡"
+ name: "宸叉敹鍒扮焊璐ㄦ潗鏂�"
}
],
PerformanceType: [
@@ -963,7 +1038,52 @@
//琛岃褰曠殑璐圭敤绫诲瀷鏁扮粍
rowfeeItemTypes: [{ label: "绠$悊鎴愭湰", value: "9" }],
-
+ aaoptions: [
+ {
+ value: "niandu",
+ label: "骞村害"
+ },
+ {
+ value: "jidu",
+ label: "瀛e害",
+ children: [
+ {
+ value: "2024-03-31",
+ label: "绗竴瀛e害"
+ },
+ {
+ value: "2024-6-30",
+ label: "绗簩瀛e害"
+ },
+ {
+ value: "2024-9-30",
+ label: "绗笁瀛e害"
+ },
+ {
+ value: "2024-12-31",
+ label: "绗洓瀛e害"
+ }
+ ]
+ },
+ {
+ value: "yuedu",
+ label: "鏈堝害",
+ children: [
+ { label: "涓�鏈�", value: new Date(2024, 0 + 1, 0).getDate() },
+ { label: "浜屾湀", value: new Date(2024, 1 + 1, 0).getDate() },
+ { label: "涓夋湀", value: new Date(2024, 2 + 1, 0).getDate() },
+ { label: "鍥涙湀", value: new Date(2024, 3 + 1, 0).getDate() },
+ { label: "浜旀湀", value: new Date(2024, 4 + 1, 0).getDate() },
+ { label: "鍏湀", value: new Date(2024, 5 + 1, 0).getDate() },
+ { label: "涓冩湀", value: new Date(2024, 6 + 1, 0).getDate() },
+ { label: "鍏湀", value: new Date(2024, 7 + 1, 0).getDate() },
+ { label: "涔濇湀", value: new Date(2024, 8 + 1, 0).getDate() },
+ { label: "鍗佹湀", value: new Date(2024, 9 + 1, 0).getDate() },
+ { label: "鍗佷竴鏈�", value: new Date(2024, 10 + 1, 0).getDate() },
+ { label: "鍗佷簩鏈�", value: new Date(2024, 11 + 1, 0).getDate() }
+ ]
+ }
+ ],
//璐圭敤璇存槑
feeBlocks: [],
@@ -989,6 +1109,7 @@
funddetailForm: {
index: null,
+ userKey: null,
userName: null,
beneficiaryname: null,
beneficiaryno: null,
@@ -1110,6 +1231,10 @@
pdfimgsrcList: [],
pdfVisible: false,
previewpdf: false,
+ viewerVisible: false,
+ currentIndex: 0,
+ invoiceViewerVisible: false,
+ invoiceCurrentIndex: 0,
hintitle: "璇蜂笂浼犳枃浠跺悗鏌ョ湅",
atpresent: "",
Savereminder: false, //鎻愰啋淇濆瓨寮规
@@ -1120,7 +1245,16 @@
},
//鐩戝惉灞炴�� 绫讳技浜巇ata姒傚康
- computed: {},
+ computed: {
+ //鎵归噺褰曞叆寮规锛氭寜鍏抽敭瀛楋紙濮撳悕/鍗曚綅/宸ュ彿/韬唤璇佸悗4浣嶏級绛涙煡鍚庣殑鍊欓�変汉
+ filteredCityOptions() {
+ const kw = (this.personKeyword || "").trim().toLowerCase();
+ if (!kw) {
+ return this.cityOptions;
+ }
+ return this.cityOptions.filter(item => this.personMatchKeyword(item, kw));
+ }
+ },
//鐩戞帶data涓殑鏁版嵁鍙樺寲
watch: {},
//鏂规硶闆嗗悎
@@ -1546,7 +1680,12 @@
);
return;
}
- if (tempDetail.idcardno == null) {
+ // 鍗曚綅琛岋紙isunit=1锛変笉闇�瑕佽韩浠借瘉鍙�
+ if (
+ tempDetail.isunit != 1 &&
+ (tempDetail.idcardno == null ||
+ String(tempDetail.idcardno).trim() === "")
+ ) {
this.$modal.msgWarning(
"鏈嶅姟椤圭洰琛ㄤ腑锛岀" +
(k + 1).toString() +
@@ -1574,6 +1713,22 @@
return;
}
}
+ }
+
+ //鏄庣粏閲嶅鏍¢獙锛氬悓涓�浜哄憳/鍗曚綅涓嶅厑璁稿嚭鐜板琛�
+ const detailNameMap = {};
+ for (let k = 0; k < this.rbDetails.length; k++) {
+ const nm = String(this.rbDetails[k].beneficiaryname || "").trim();
+ if (!nm) {
+ continue;
+ }
+ if (detailNameMap[nm]) {
+ this.$modal.msgWarning(
+ "鏈嶅姟椤圭洰琛ㄤ腑锛屼汉鍛樺悕绉帮細" + nm + " 閲嶅锛岃鏍稿鍚庡啀鎻愪氦淇濆瓨锛�"
+ );
+ return;
+ }
+ detailNameMap[nm] = true;
}
//澶勭悊鏄庣粏
@@ -1721,12 +1876,21 @@
};
this.$modal.loading("姝e湪鎻愪氦瀹℃牳锛岃绋嶅�欙紒");
checkfund(checkFundObj).then(res => {
- //鍏抽棴绐楀彛
- this.reset();
- this.$modal.closeLoading();
- this.$modal.msgSuccess("瀹℃牳瀹屾垚!");
- this.$store.dispatch("tagsView/delView", this.$route);
- this.$router.go(-1);
+ if (res.code == 200) {
+ //鍏抽棴绐楀彛
+ this.reset();
+ this.$modal.closeLoading();
+ this.$modal.msgSuccess("瀹℃牳瀹屾垚!");
+ this.$store.dispatch("tagsView/delView", this.$route);
+ this.$router.go(-1);
+ } else {
+ this.$modal.closeLoading();
+ if (res.msg) {
+ this.$modal.msgError("鎿嶄綔澶辫");
+ } else {
+ this.$modal.msgError(res.msg);
+ }
+ }
});
},
@@ -1744,7 +1908,7 @@
this.standardlevel = res.data.standardlevel;
if (
this.userprofile.userName == "admin" ||
- this.userprofile.userName == "001" ||
+ this.userprofile.userName == "053" ||
this.userprofile.userName == "047"
) {
this.ismanager = true;
@@ -1778,7 +1942,7 @@
this.personlist = res.rows;
for (let j = 0; j < this.personlist.length; j++) {
//鑾峰彇璐圭敤鎶ラ攢鏈烘瀯鍒楄〃
- if (this.personlist[j].usertype == "org") {
+ if (this.hasUserType(this.personlist[j].usertype, "org")) {
this.feeUnitList.push({
id: this.personlist[j].id,
reportNo: this.personlist[j].userno,
@@ -1789,7 +1953,7 @@
});
}
//涓撳浜哄憳鍒楄〃
- else if (res.rows[j].usertype == "expert") {
+ else if (this.hasUserType(res.rows[j].usertype, "expert")) {
this.expertlist.push({
expertNo: this.personlist[j].id,
exportName: this.personlist[j].username
@@ -1978,17 +2142,38 @@
}
},
- //璁$畻閲戦
- calculateTax(row, type) {
- let targetValue = 0;
+ //绋庡墠鎵g◣绠楃◣鍚庯紙閲戦涓�寰嬭蛋绮剧‘杩愮畻锛�
+ chargeSum(row, type) {
for (let i = 0; i < this.rbDetails.length; i++) {
if (!this.rbDetails[i].amount) {
this.rbDetails[i].amount = 0;
}
- targetValue += parseFloat(this.rbDetails[i].amount); // 鍋囪姣忎釜瀵硅薄涓殑鐗瑰畾鍊煎瓨鍌ㄥ湪'specificValue'灞炴�т笅
+ if (!this.rbDetails[i].taxamount) {
+ this.rbDetails[i].taxamount = 0;
+ }
+ //绋庡墠 - 鎵g◣ = 绋庡悗锛堟诞鐐圭浉鍑忎細娈嬬暀鏋佸皬灏惧樊锛屽鑷村嚭鐜� -0.00锛�
+ this.rbDetails[i].taxedamount = moneySub(
+ this.rbDetails[i].amount,
+ this.rbDetails[i].taxamount
+ ).toFixed(2);
}
- console.log(targetValue, "鍚堣");
- this.form.pretaxcost = targetValue;
+ //鍚堣蹇呴』绮剧‘绱姞锛屽惁鍒欎細鍐欏叆 form.pretaxcost 骞惰惤搴�
+ this.form.pretaxcost = moneySum(this.rbDetails, "amount");
+ },
+ //绋庡悗鎵g◣绠楃◣鍓嶏紙閲戦涓�寰嬭蛋绮剧‘杩愮畻锛�
+ queenchargeSum(row, type) {
+ for (let i = 0; i < this.rbDetails.length; i++) {
+ if (!this.rbDetails[i].amount) {
+ this.rbDetails[i].amount = 0;
+ }
+ if (!this.rbDetails[i].taxamount) {
+ this.rbDetails[i].taxamount = 0;
+ }
+ //鎵g◣ + 绋庡悗 = 绋庡墠锛堝繀椤荤簿纭浉鍔犲苟褰掍竴鍖栧埌 2 浣嶏紝鍚﹀垯浼氭畫鐣欓暱灏忔暟锛�
+ this.rbDetails[i].amount = moneyRound(
+ moneyAdd(this.rbDetails[i].taxamount, this.rbDetails[i].taxedamount)
+ );
+ }
},
unsave() {
@@ -2042,6 +2227,22 @@
return;
}
}
+ }
+
+ //鏄庣粏閲嶅鏍¢獙锛氬悓涓�浜哄憳/鍗曚綅涓嶅厑璁稿嚭鐜板琛�
+ const detailNameMap = {};
+ for (let k = 0; k < this.rbDetails.length; k++) {
+ const nm = String(this.rbDetails[k].beneficiaryname || "").trim();
+ if (!nm) {
+ continue;
+ }
+ if (detailNameMap[nm]) {
+ this.$modal.msgWarning(
+ "鏈嶅姟椤圭洰琛ㄤ腑锛屼汉鍛樺悕绉帮細" + nm + " 閲嶅锛岃鏍稿鍚庡啀鎻愪氦淇濆瓨锛�"
+ );
+ return;
+ }
+ detailNameMap[nm] = true;
}
//澶勭悊鏄庣粏
@@ -2130,16 +2331,18 @@
}
});
},
- // 鍏ㄩ��
+ // 鍏ㄩ�夛紙鎸夊綋鍓嶇瓫鏌ョ粨鏋滐級
handleCheckAllChange(val) {
- this.checkedCities = val ? this.cityOptions : [];
+ this.checkedCities = val ? this.filteredCityOptions.slice() : [];
this.isIndeterminate = false;
},
handleCheckedCitiesChange(value) {
let checkedCount = value.length;
- this.checkAll = checkedCount === this.cityOptions.length;
+ this.checkAll =
+ this.filteredCityOptions.length > 0 &&
+ checkedCount === this.filteredCityOptions.length;
this.isIndeterminate =
- checkedCount > 0 && checkedCount < this.cityOptions.length;
+ checkedCount > 0 && checkedCount < this.filteredCityOptions.length;
},
// 鎵嬪姩璁$畻
Manualcalculationfn() {
@@ -2164,18 +2367,107 @@
},
// 鎵归噺褰曞叆鐐瑰嚮
Batchentry() {
- // ethical
- this.listperformance();
+ this.personKeyword = "";
+ this.checkedCities = [];
+ this.checkAll = false;
+ this.isIndeterminate = false;
this.batchdialogVisible = true;
},
+ /**
+ * 杞藉叆缁╂晥浜哄憳鍊欓�夈��
+ * 鏀归�犲墠鍙栬嚜浜哄憳鍒嗙粍琛紙service_externalperson_group锛実roup_id=1锛夛紱
+ * 2026-09-27 璧锋敼涓恒�屼汉鍛樼被鍨嬶紙UserType锛屽彲澶氶�夛級鍚� 鍙備笌缁╂晥銆嶇殑澶栧洿浜哄憳璐︽埛锛�
+ * 涓嶅啀渚濊禆鍒嗙粍琛ㄣ��
+ */
listperformance() {
- listperformance(1).then(res => {
- this.cityOptions = res.data;
- this.listperformancea = [];
- this.listperformancea = this.cityOptions.map(item => {
- return { value: item.userName, label: item.userName };
- });
+ listExternalperson({
+ usertype: "performance",
+ pageNum: 1,
+ pageSize: 10000
+ }).then(res => {
+ const rows = res.rows || [];
+ this.cityOptions = rows
+ //鍙繚鐣欏惎鐢ㄨ处鍙凤紙涓庢敼閫犲墠鍒嗙粍琛ㄦ帴鍙g殑 userstatus=1 鍙e緞涓�鑷达級銆�
+ //娉ㄦ剰锛歋erviceExternalperson 瀹炰綋娌℃湁 del_flag 瀛楁锛屾帴鍙d笉杩斿洖璇ュ瓧娈碉紝
+ //涓嶈兘鐢ㄥ畠鍋氳繃婊わ紝鍚﹀垯 undefined == 0 浼氭妸鍏ㄩ儴鍊欓�変汉婊ょ┖銆�
+ .filter(
+ item =>
+ item.userstatus === undefined ||
+ item.userstatus === null ||
+ item.userstatus == 1
+ )
+ .map(item => {
+ return Object.assign({}, item, {
+ isUnitPerson: this.hasUserType(item.usertype, "org")
+ });
+ });
});
+ },
+ /** 浜哄憳绫诲瀷锛堝鍊硷紝閫楀彿鍒嗛殧锛夋槸鍚﹀寘鍚寚瀹氱被鍨� */
+ hasUserType(usertype, code) {
+ if (!usertype) {
+ return false;
+ }
+ return (
+ String(usertype)
+ .split(",")
+ .map(t => t.trim())
+ .indexOf(code) > -1
+ );
+ },
+ /** 鍏抽敭瀛楀懡涓垽鏂細濮撳悕 / 鍗曚綅 / 宸ュ彿 / 韬唤璇佸悗4浣� */
+ personMatchKeyword(item, kw) {
+ const idcard = String(item.idcardno || "");
+ return (
+ String(item.username || "")
+ .toLowerCase()
+ .indexOf(kw) > -1 ||
+ String(item.unitname || "")
+ .toLowerCase()
+ .indexOf(kw) > -1 ||
+ String(item.userno || "")
+ .toLowerCase()
+ .indexOf(kw) > -1 ||
+ (idcard.length >= 4 && idcard.slice(-4).indexOf(kw) > -1)
+ );
+ },
+ /** 璇嗗埆浜哄憳绫诲埆锛氬崟浣嶏紙浜哄憳绫诲瀷鍚� org锛夎繕鏄釜浜� */
+ isUnitPerson(item) {
+ return !!(item && this.hasUserType(item.usertype, "org"));
+ },
+ /** 閫夋嫨妗嗕笅鎷夐」鏂囨锛氬鍚嶏紙鍗曚綅锛� */
+ personOptionLabel(item) {
+ return (
+ (item.username || "") +
+ (item.unitname ? "锛�" + item.unitname + "锛�" : "") +
+ (item.isUnitPerson ? " - 鍗曚綅" : "")
+ );
+ },
+ /** 閫夋嫨妗嗗�欓�夛細绌哄叧閿瓧杩斿洖鍏ㄩ儴锛屽惁鍒欐寜鍏抽敭瀛楃瓫鏌� */
+ filterPersonCandidates(kw) {
+ if (!kw) {
+ return this.cityOptions.slice();
+ }
+ return this.cityOptions.filter(item => this.personMatchKeyword(item, kw));
+ },
+ /** 閫夋嫨妗嗘湰鍦扮瓫鏌ワ紙濮撳悕/鍗曚綅/宸ュ彿/韬唤璇佸悗4浣嶏級 */
+ filterPersonOption(query) {
+ const kw = (query || "").trim().toLowerCase();
+ this.optionsperformance = this.filterPersonCandidates(kw);
+ // 宸查�変腑椤硅淇濈暀鍦ㄤ笅鎷夐噷锛屽惁鍒欏洖鏄句細绌虹櫧
+ const picked = this.getPickedPerson(this.funddetailForm.userKey);
+ if (picked && this.optionsperformance.indexOf(picked) === -1) {
+ this.optionsperformance = [picked].concat(this.optionsperformance);
+ }
+ },
+ /** 鎸夊敮涓�閿紙浜哄憳 ID锛夊彇鍊欓�夛紱鎵嬪伐杈撳叆鐨勫鍚嶈繑鍥� null */
+ getPickedPerson(key) {
+ if (key === null || key === undefined || key === "") {
+ return null;
+ }
+ return (
+ this.cityOptions.find(item => String(item.id) === String(key)) || null
+ );
},
// 纭褰曞叆
BatchentryFn() {
@@ -2183,23 +2475,42 @@
if (!this.rbDetails[0].applytype) {
this.rbDetails = [];
}
+ // 鏄庣粏涓凡鏈夌殑浜哄憳濮撳悕锛岀敤浜庨噸澶嶆彁閱掞紙涓庝鸡鐞嗕笓瀹惰垂椤电殑鍒ら噸鍙e緞涓�鑷达級
+ const existed = {};
+ this.rbDetails.forEach(row => {
+ if (row.beneficiaryname) {
+ existed[String(row.beneficiaryname).trim()] = true;
+ }
+ });
+
+ const duplicated = [];
this.checkedCities.forEach(item => {
+ const nameKey = String(item.username || "").trim();
+ if (nameKey && existed[nameKey]) {
+ duplicated.push(item.username);
+ return;
+ }
+ if (nameKey) {
+ existed[nameKey] = true;
+ }
+ const isunit = this.isUnitPerson(item);
let rowData = {
orderno: null,
fundid: null,
- beneficiaryname: item.userName,
- beneficiaryno: item.usertNo,
+ beneficiaryname: item.username,
+ beneficiaryno: item.userno,
+ isunit: isunit ? 1 : 0,
unitname: item.unitname,
- unitno: null,
+ unitno: item.unitno,
uintuserno: null,
title: item.title,
idcardtype: null,
- idcardno: item.idcrad,
+ idcardno: isunit ? "" : item.idcardno,
sex: null,
familyrelations: null,
- phone: null,
- depositbank: item.depositBank,
- bankcardno: item.bankCardNo,
+ phone: item.telephone,
+ depositbank: item.depositbank,
+ bankcardno: item.bankcardno,
branchbankname: item.branchbankname,
annexbankcard: null,
annexregistform: null,
@@ -2242,6 +2553,11 @@
this.calculateTax();
this.batchdialogVisible = false;
this.checkedCities = [];
+ if (duplicated.length) {
+ this.$modal.msgWarning(
+ "浠ヤ笅浜哄憳鍦ㄦ槑缁嗕腑宸插瓨鍦紝宸茶烦杩囬噸澶嶆坊鍔狅細" + duplicated.join("銆�")
+ );
+ }
console.log(this.rowfeeItemTypes);
},
//鏂板涓�琛�
@@ -2252,6 +2568,7 @@
fundid: null,
beneficiaryname: null,
beneficiaryno: null,
+ isunit: 0,
unitname: null,
unitno: null,
uintuserno: null,
@@ -2351,64 +2668,78 @@
});
//鍏ㄩ儴鍒犻櫎鍚庢坊鍔犱竴鏉℃柊琛�
},
- //涓撳/鍖荤枟鏈烘瀯/璐圭敤鎶ラ攢鏈烘瀯閫夋嫨
+ //缁╂晥浜哄憳/鍗曚綅閫夋嫨锛氭墦寮�鏃堕濉綋鍓嶈宸查�変汉鍛橈紝閬垮厤"鐩存帴纭畾"鎶婂凡鏈夊鍚嶆竻绌�
ShowDetailDialog(spoce, showType) {
this.spocewl = spoce;
this.selectionType = showType;
- this.selectionType = this.experthear;
- this.expertfrom = "1";
this.funddetailForm.index = spoce.$index;
this.funddetailForm.beneficiaryno = spoce.row.beneficiaryno;
this.funddetailForm.beneficiaryname = spoce.row.beneficiaryname;
this.funddetailForm.unitno = spoce.row.unitno;
this.funddetailForm.unitname = spoce.row.unitname;
- this.funddetailForm.expertname = "";
- this.funddetailForm.expertidcardno = "";
- this.funddetailForm.expertunitno = "";
- this.funddetailForm.expertunitname = "";
- this.funddetailForm.experttitle = "";
- this.funddetailForm.expertdepositbank = "";
- this.funddetailForm.expertbankcardno = "";
+ //褰撳墠琛屽凡閫変汉鍛樼殑鍥炲~锛氬厛鎸変汉鍛樼紪鍙峰尮閰嶏紝鍖归厤涓嶅埌鍐嶆寜濮撳悕鍖归厤
+ let cur =
+ this.cityOptions.find(
+ item => String(item.userno) === String(spoce.row.beneficiaryno)
+ ) || null;
+ if (!cur && spoce.row.beneficiaryname) {
+ cur =
+ this.cityOptions.find(
+ item => item.username === spoce.row.beneficiaryname
+ ) || null;
+ }
+ this.funddetailForm.userKey = cur
+ ? cur.id
+ : spoce.row.beneficiaryname || null;
+ this.funddetailForm.userName = spoce.row.beneficiaryname || null;
+ //鎵撳紑鏃跺睍绀哄叏閲忓�欓�夛紝渚夸簬鐩存帴娴忚绛涙煡
+ this.optionsperformance = this.cityOptions.slice();
this.showSelectionDialog = true;
},
- //涓撳/鍖荤枟鏈烘瀯/璐圭敤鎶ラ攢鏈烘瀯閫夋嫨
+ /**
+ * 纭畾閫夋嫨锛氭寜鍞竴閿紙浜哄憳 ID锛夊尮閰嶅�欓�夛紝
+ * 鑷姩甯﹀嚭韬唤璇佸彿銆侀摱琛岃处鍙枫�佸紑鎴烽摱琛屻�佺數璇濄�佽亴绉般�佷汉鍛樼紪鍙枫�佸崟浣嶏紱
+ * 鍗曚綅锛堜汉鍛樼被鍨嬪惈 org锛変笉鍐欒韩浠借瘉鍙凤紱鎵嬪伐杈撳叆鐨勫鍚嶄笉鍋氬甫鍑恒��
+ */
ConfirmDetailDialog() {
- let tempIndex = this.funddetailForm.index;
- let tempExpertName = this.funddetailForm.userName;
- let singleDetail = this.rbDetails[tempIndex];
+ const tempIndex = this.funddetailForm.index;
+ const singleDetail = this.rbDetails[tempIndex];
+ const key = this.funddetailForm.userKey;
- //浠庝笓瀹跺垪琛ㄨ幏鍙栦俊鎭�
- this.cityOptions.map(res => {
- if (tempExpertName == res.userName) {
- singleDetail.beneficiaryno = res.userno;
- singleDetail.bankcardno = res.bankCardNo;
- singleDetail.branchbankname = res.branchbankname;
- singleDetail.depositbank = res.depositBank;
- singleDetail.idcardno = res.idcardNo;
- singleDetail.phone = res.telephone;
- singleDetail.title = res.title;
- singleDetail.unitname = res.unitname;
- singleDetail.unitno = parseInt(res.unitno);
- }
- });
- singleDetail.beneficiaryname = tempExpertName;
- this.rbDetails[tempIndex] = singleDetail;
- this.showSelectionDialog = false;
- },
- remoteMethod(query) {
- console.log(this.listperformancea);
- if (query !== "") {
- this.loadingperformance = true;
- setTimeout(() => {
- this.loadingperformance = false;
- this.optionsperformance = this.listperformancea.filter(item => {
- return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;
- });
- }, 200);
- } else {
- this.optionsperformance = [];
+ if (key === null || key === undefined || key === "") {
+ this.$modal.msgWarning("璇峰厛绛涙煡骞堕�夋嫨缁╂晥浜哄憳锛屾垨鐩存帴杈撳叆浜哄憳濮撳悕锛�");
+ return;
}
+
+ const person = this.getPickedPerson(key);
+ if (person) {
+ // 鍛戒腑浜哄憳搴擄細鑷姩甯﹀嚭鍏ㄩ儴淇℃伅
+ const isunit = this.isUnitPerson(person);
+ singleDetail.beneficiaryname = person.username;
+ singleDetail.beneficiaryno = person.userno;
+ singleDetail.isunit = isunit ? 1 : 0;
+ singleDetail.idcardno = isunit ? "" : person.idcardno;
+ singleDetail.bankcardno = person.bankcardno;
+ singleDetail.branchbankname = person.branchbankname;
+ singleDetail.depositbank = person.depositbank;
+ singleDetail.phone = person.telephone;
+ singleDetail.title = person.title;
+ singleDetail.unitname = person.unitname;
+ singleDetail.unitno = person.unitno;
+ } else {
+ // 鎵嬪伐杈撳叆鐨勪汉鍛橈細鍙啓濮撳悕锛岃韩浠借瘉鍙�/閾惰璐﹀彿鐢辩粡鍔炰汉濉啓
+ singleDetail.beneficiaryname = String(key);
+ singleDetail.isunit = 0;
+ this.$modal.msgWarning(
+ "浜哄憳搴撲腑鏈壘鍒般��" +
+ key +
+ "銆嶏紝宸叉寜鎵嬪伐褰曞叆澶勭悊锛岃鑷濉啓韬唤璇佸彿銆侀摱琛岃处鍙风瓑淇℃伅銆�"
+ );
+ }
+
+ this.$set(this.rbDetails, tempIndex, singleDetail);
+ this.showSelectionDialog = false;
},
handleUploadError() {},
remove(file, fileList) {
@@ -2516,7 +2847,7 @@
this.tableDatatop = [];
this.fileListto = [];
this.invoicefileListto = [];
- this.pdfimg = '';
+ this.pdfimg = "";
this.invoicepdfimg = [];
this.pdfimgsrcList = [];
this.invoicepdfimgsrcList = [];
@@ -2525,26 +2856,31 @@
this.pdfVisible = true;
if (this.rbDetails[index].annexfilesList) {
- this.rbDetails[index].annexfilesList.forEach((value, indexson) => {
- const pdfimg = this.Networkheader + "/prod-api" + value.url;
- fetch(pdfimg, config)
- .then(response => response.blob())
- .then(blob => {
- // 灏嗚幏鍙栫殑鏁版嵁娴佽浆鎹负URL
- this.fileListto.push({
- name: value.name,
- url: URL.createObjectURL(blob)
+ const fetchPromises = this.rbDetails[index].annexfilesList.map(
+ (value, indexson) => {
+ const pdfimg = this.Networkheader + "/prod-api" + value.url;
+ return fetch(pdfimg, config)
+ .then(response => response.blob())
+ .then(blob => {
+ return {
+ name: value.name,
+ url: URL.createObjectURL(blob)
+ };
+ })
+ .catch(error => {
+ console.error("Error loading image", error);
+ return null;
});
- if (this.fileListto.length == 1) {
- this.pdfimg = URL.createObjectURL(blob);
- }
- this.pdfimgsrcList.push(URL.createObjectURL(blob));
- })
- .catch(error => {
- console.error("Error loading image", error);
- return;
- });
+ }
+ );
+
+ Promise.all(fetchPromises).then(fileListto => {
+ this.fileListto = fileListto.filter(item => item !== null);
+ this.pdfimg = this.fileListto[0].url;
+ console.log(this.pdfimg, "pdfimg");
+ this.pdfimgsrcList = this.fileListto.map(item => item.url);
});
+
this.previewpdf = true;
} else {
this.fileListto = [];
@@ -2553,26 +2889,35 @@
}
//鍙戠エ
if (this.rbDetails[index].invoicefilesList) {
- this.rbDetails[index].invoicefilesList.forEach((value, indexson) => {
- const pdfimg = this.Networkheader + "/prod-api" + value.url;
- fetch(pdfimg, config)
- .then(response => response.blob())
- .then(blob => {
- // 灏嗚幏鍙栫殑鏁版嵁娴佽浆鎹负URL
- this.invoicefileListto.push({
- name: value.name,
- url: URL.createObjectURL(blob)
+ const fetchPromises = this.rbDetails[index].invoicefilesList.map(
+ (value, indexson) => {
+ const pdfimg = this.Networkheader + "/prod-api" + value.url;
+ return fetch(pdfimg, config)
+ .then(response => response.blob())
+ .then(blob => {
+ return {
+ name: value.name,
+ url: URL.createObjectURL(blob)
+ };
+ })
+ .catch(error => {
+ console.error("Error loading image", error);
+ return null;
});
- if (this.invoicefileListto.length == 1) {
- this.invoicepdfimg = URL.createObjectURL(blob);
- }
- this.invoicepdfimgsrcList.push(URL.createObjectURL(blob));
- })
- .catch(error => {
- console.error("Error loading image", error);
- return;
- });
+ }
+ );
+
+ Promise.all(fetchPromises).then(invoicefileListto => {
+ this.invoicefileListto = invoicefileListto.filter(
+ item => item !== null
+ );
+ this.invoicepdfimg = this.invoicefileListto[0].url;
+ console.log(this.invoicepdfimg, "invoicepdfimg");
+ this.invoicepdfimgsrcList = this.invoicefileListto.map(
+ item => item.url
+ );
});
+
this.previewpdf = true;
} else {
this.invoicefileListto = [];
@@ -2580,11 +2925,13 @@
this.pdftitle = "";
}
- if (this.activeName == 1) {
+ if (this.activeName == "common") {
this.pdftitle = "鍏�" + this.pdfimgsrcList.length + "椤�";
} else {
this.pdftitle = "鍏�" + this.invoicepdfimgsrcList.length + "椤�";
}
+ console.log(this.fileListto, "this.fileListto");
+ console.log(this.rbDetails[index].annexfilesList, "annexfilesList");
},
// 鐐瑰嚮宸蹭笂浼犳枃浠�
@@ -2684,15 +3031,83 @@
const index = this.getIndexInArray(this.fileListto, row);
const item = this.fileListto.splice(index, 1)[0]; // 绉婚櫎鎸囧畾绱㈠紩澶勭殑鍏冪礌锛屽苟淇濆瓨鍒癷tem鍙橀噺涓�
this.fileListto.splice(index - 1, 0, item); // 灏唅tem鎻掑叆鍒扮储寮曚綅缃殑鍓嶄竴浣�
+
+ const indexann = this.rbDetails[
+ this.atpresent
+ ].annexfilesList.findIndex(item => item.name == row.name);
+ const itemann = this.rbDetails[this.atpresent].annexfilesList.splice(
+ indexann,
+ 1
+ )[0]; // 绉婚櫎鎸囧畾绱㈠紩澶勭殑鍏冪礌锛屽苟淇濆瓨鍒癷tem鍙橀噺涓�
+ this.rbDetails[this.atpresent].annexfilesList.splice(
+ indexann - 1,
+ 0,
+ itemann
+ ); // 灏唅temann鎻掑叆鍒扮储寮曚綅缃殑鍓嶄竴浣�
} else {
const index = this.getIndexInArray(this.invoicefileListto, row);
const item = this.invoicefileListto.splice(index, 1)[0]; // 绉婚櫎鎸囧畾绱㈠紩澶勭殑鍏冪礌锛屽苟淇濆瓨鍒癷tem鍙橀噺涓�
this.invoicefileListto.splice(index - 1, 0, item); // 灏唅tem鎻掑叆鍒扮储寮曚綅缃殑鍓嶄竴浣�
+
+ const indexinvo = this.rbDetails[
+ this.atpresent
+ ].invoicefilesList.findIndex(item => item.name == row.name);
+ const iteminvo = this.rbDetails[this.atpresent].invoicefilesList.splice(
+ indexinvo,
+ 1
+ )[0]; // 绉婚櫎鎸囧畾绱㈠紩澶勭殑鍏冪礌锛屽苟淇濆瓨鍒癷tem鍙橀噺涓�
+ this.rbDetails[this.atpresent].invoicefilesList.splice(
+ indexinvo - 1,
+ 0,
+ iteminvo
+ ); // 灏唅teminvo鎻掑叆鍒扮储寮曚綅缃殑鍓嶄竴浣�
}
},
Downloadfile(row) {
console.log(row);
window.location.href = this.Networkheader + "/prod-api" + row.url;
+ },
+ //琛ㄦ牸鍚堣
+ getSummaries(param) {
+ const { columns, data } = param;
+ const sums = [];
+ var columnnames = [
+ "applytype",
+ "itemid",
+ // "jxrq",
+ "beneficiaryname",
+ "idcardno",
+ "depositbank",
+ "bankcardno",
+ "remark"
+ ];
+ columns.forEach((column, index) => {
+ if (index === 0) {
+ sums[index] = "鍚堣";
+ return;
+ }
+
+ //鍘婚櫎閮ㄥ垎瀛楁璁$畻
+ if (columnnames.indexOf(column.property) > -1) {
+ return;
+ }
+
+ const values = data.map(item => Number(item[column.property]));
+ if (!values.every(value => isNaN(value))) {
+ sums[index] = values.reduce((prev, curr) => {
+ const value = Number(curr);
+ if (!isNaN(value)) {
+ return prev + curr;
+ } else {
+ return prev;
+ }
+ }, 0);
+ sums[index] = sums[index].toFixed(2); // 淇濈暀2浣嶅皬鏁帮紝瑙e喅灏忔暟鍚堣鍒�;
+ } else {
+ sums[index] = "";
+ }
+ });
+ return sums;
}
},
@@ -2716,7 +3131,23 @@
destroyed() {
window.removeEventListener("beforeunload", e => this.beforeunloadFn(e));
}, //鐢熷懡鍛ㄦ湡 - 閿�姣佸畬鎴�
- activated() {} //濡傛灉椤甸潰鏈塳eep-alive缂撳瓨鍔熻兘锛岃繖涓嚱鏁颁細瑙﹀彂
+ activated() {}, //濡傛灉椤甸潰鏈塳eep-alive缂撳瓨鍔熻兘锛岃繖涓嚱鏁颁細瑙﹀彂
+
+ // 鍥剧墖棰勮
+ handleImageClick(index) {
+ this.currentIndex = index;
+ this.viewerVisible = true;
+ },
+ handleViewerClose() {
+ this.viewerVisible = false;
+ },
+ invoiceHandleImageClick(index) {
+ this.invoiceCurrentIndex = index;
+ this.invoiceViewerVisible = true;
+ },
+ invoiceHandleViewerClose() {
+ this.invoiceViewerVisible = false;
+ },
};
</script>
--
Gitblit v1.9.3