From c75027743ea7c3ecc2d0885f01d11d2ad78679a3 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期五, 23 十月 2026 14:23:26 +0800
Subject: [PATCH] Merge branch 'yxh' of http://116.62.18.175:6699/r/~yxh/opo-web
---
src/views/project/fund/performancedetails/index.vue | 545 +++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 418 insertions(+), 127 deletions(-)
diff --git a/src/views/project/fund/performancedetails/index.vue b/src/views/project/fund/performancedetails/index.vue
index 08ebd88..3b5c533 100644
--- a/src/views/project/fund/performancedetails/index.vue
+++ b/src/views/project/fund/performancedetails/index.vue
@@ -11,7 +11,7 @@
clearable
style="width: 100%"
v-model="form.applyTime"
- type="date"
+ type="date" format="yyyy-MM-dd"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="鐢宠鏃ユ湡"
:disabled="true"
@@ -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>
@@ -266,7 +266,7 @@
<el-table-column
prop="beneficiaryname"
align="center"
- label="缁╂晥浜哄憳鎴栧崟浣�"
+ label="缁╂晥浜哄憳/鍗曚綅"
width="250"
>
<template slot-scope="scope">
@@ -283,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>
@@ -470,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">
@@ -661,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>
@@ -764,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>
@@ -794,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
@@ -808,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>
@@ -855,7 +902,6 @@
listOrganization,
getOrganization,
listReportname,
- listperformance,
listUser
} from "@/api/project/organization";
@@ -872,12 +918,16 @@
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 { checkFileName, checkDetails } from "@/utils/fileNameCheck";
+import CustomImageViewer from "@/components/CustomImageViewer";
export default {
//import寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
components: {
Li_area_select,
- OrgSelecter
+ OrgSelecter,
+ CustomImageViewer
},
name: "fundApply",
@@ -924,7 +974,10 @@
feeUnitList: [],
batchdialogVisible: false,
itemlist: [],
+ //缁╂晥浜哄憳鍊欓�夛紙浜哄憳绫诲瀷鍚�屽弬涓庣哗鏁堛�嶇殑浜哄憳锛屾潵鑷� service_externalperson锛�
cityOptions: [],
+ //鎵归噺褰曞叆寮规鐨勭瓫鏌ュ叧閿瓧
+ personKeyword: "",
checkAll: false,
checkedCities: [],
Personnelforname: null,
@@ -940,15 +993,15 @@
baselisttages: [
{
id: 1,
- name: "寰呯敵璇锋潗鏂�"
+ name: "寰呭鏍�"
},
{
id: 2,
- name: "瀹℃牳閫氳繃绛夊緟閭瘎绾歌川鏉愭枡"
+ name: "棰勫閫氳繃绛夊緟绾歌川鏉愭枡"
},
{
id: 3,
- name: "宸叉敹鍒版姤閿�鏉愭枡"
+ name: "宸叉敹鍒扮焊璐ㄦ潗鏂�"
}
],
PerformanceType: [
@@ -1057,6 +1110,7 @@
funddetailForm: {
index: null,
+ userKey: null,
userName: null,
beneficiaryname: null,
beneficiaryno: null,
@@ -1178,6 +1232,10 @@
pdfimgsrcList: [],
pdfVisible: false,
previewpdf: false,
+ viewerVisible: false,
+ currentIndex: 0,
+ invoiceViewerVisible: false,
+ invoiceCurrentIndex: 0,
hintitle: "璇蜂笂浼犳枃浠跺悗鏌ョ湅",
atpresent: "",
Savereminder: false, //鎻愰啋淇濆瓨寮规
@@ -1188,7 +1246,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: {},
//鏂规硶闆嗗悎
@@ -1594,6 +1661,11 @@
},
/** 鎻愪氦鎸夐挳 */
submitForm: debounce(function() {
+ // 2026-10-15锛氫繚瀛樺墠闄勪欢鏂囦欢鍚嶈鑼冩牎楠岋紙浠呮柊澧炲崟鎹紱鑰佸崟鎹殑鍘嗗彶闄勪欢鐢卞悗绔寜"鍙牎楠屾湰娆″彉鏇�"鏀捐锛�
+ if (!this.checkDetailFileNames()) {
+ return;
+ }
+
if (!this.randomnumber) {
this.randomnumber = this.generateRandomString(9);
this.form.randomnumber = this.randomnumber;
@@ -1614,7 +1686,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() +
@@ -1642,6 +1719,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;
}
//澶勭悊鏄庣粏
@@ -1798,11 +1891,7 @@
this.$router.go(-1);
} else {
this.$modal.closeLoading();
- if (res.msg) {
- this.$modal.msgError("鎿嶄綔澶辫");
- } else {
- this.$modal.msgError(res.msg);
- }
+ this.$modal.msgError(res.msg || "鎿嶄綔澶辫触");
}
});
},
@@ -1821,7 +1910,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;
@@ -1855,7 +1944,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,
@@ -1866,7 +1955,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
@@ -2055,9 +2144,8 @@
}
},
- //绋庡墠鎵g◣绠楃◣鍚�
+ //绋庡墠鎵g◣绠楃◣鍚庯紙閲戦涓�寰嬭蛋绮剧‘杩愮畻锛�
chargeSum(row, type) {
- let targetValue = 0;
for (let i = 0; i < this.rbDetails.length; i++) {
if (!this.rbDetails[i].amount) {
this.rbDetails[i].amount = 0;
@@ -2065,17 +2153,16 @@
if (!this.rbDetails[i].taxamount) {
this.rbDetails[i].taxamount = 0;
}
- this.rbDetails[i].taxedamount = (
- parseFloat(this.rbDetails[i].amount) -
- parseFloat(this.rbDetails[i].taxamount)
+ //绋庡墠 - 鎵g◣ = 绋庡悗锛堟诞鐐圭浉鍑忎細娈嬬暀鏋佸皬灏惧樊锛屽鑷村嚭鐜� -0.00锛�
+ this.rbDetails[i].taxedamount = moneySub(
+ this.rbDetails[i].amount,
+ this.rbDetails[i].taxamount
).toFixed(2);
- targetValue += parseFloat(this.rbDetails[i].amount); // 鍋囪姣忎釜瀵硅薄涓殑鐗瑰畾鍊煎瓨鍌ㄥ湪'specificValue'灞炴�т笅
- console.log(this.rbDetails[i].taxedamount, "鍚堣");
}
- console.log(targetValue, "鍚堣");
- this.form.pretaxcost = targetValue;
+ //鍚堣蹇呴』绮剧‘绱姞锛屽惁鍒欎細鍐欏叆 form.pretaxcost 骞惰惤搴�
+ this.form.pretaxcost = moneySum(this.rbDetails, "amount");
},
- //绋庡悗鎵g◣绠楃◣鍓�
+ //绋庡悗鎵g◣绠楃◣鍓嶏紙閲戦涓�寰嬭蛋绮剧‘杩愮畻锛�
queenchargeSum(row, type) {
for (let i = 0; i < this.rbDetails.length; i++) {
if (!this.rbDetails[i].amount) {
@@ -2084,9 +2171,10 @@
if (!this.rbDetails[i].taxamount) {
this.rbDetails[i].taxamount = 0;
}
- this.rbDetails[i].amount =
- parseFloat(this.rbDetails[i].taxamount) +
- parseFloat(this.rbDetails[i].taxedamount);
+ //鎵g◣ + 绋庡悗 = 绋庡墠锛堝繀椤荤簿纭浉鍔犲苟褰掍竴鍖栧埌 2 浣嶏紝鍚﹀垯浼氭畫鐣欓暱灏忔暟锛�
+ this.rbDetails[i].amount = moneyRound(
+ moneyAdd(this.rbDetails[i].taxamount, this.rbDetails[i].taxedamount)
+ );
}
},
@@ -2096,6 +2184,11 @@
},
// 鎺ュ彈鎻愰啋绔嬪埢淇濆瓨
Savenow() {
+ // 2026-10-15锛氫繚瀛樺墠闄勪欢鏂囦欢鍚嶈鑼冩牎楠岋紙浠呮柊澧炲崟鎹紱鑰佸崟鎹殑鍘嗗彶闄勪欢鐢卞悗绔寜"鍙牎楠屾湰娆″彉鏇�"鏀捐锛�
+ if (!this.checkDetailFileNames()) {
+ return;
+ }
+
if (!this.randomnumber) {
this.randomnumber = this.generateRandomString(9);
this.form.randomnumber = this.randomnumber;
@@ -2141,6 +2234,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;
}
//澶勭悊鏄庣粏
@@ -2229,16 +2338,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() {
@@ -2263,18 +2374,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() {
@@ -2282,23 +2482,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,
@@ -2341,6 +2560,11 @@
this.calculateTax();
this.batchdialogVisible = false;
this.checkedCities = [];
+ if (duplicated.length) {
+ this.$modal.msgWarning(
+ "浠ヤ笅浜哄憳鍦ㄦ槑缁嗕腑宸插瓨鍦紝宸茶烦杩囬噸澶嶆坊鍔狅細" + duplicated.join("銆�")
+ );
+ }
console.log(this.rowfeeItemTypes);
},
//鏂板涓�琛�
@@ -2351,6 +2575,7 @@
fundid: null,
beneficiaryname: null,
beneficiaryno: null,
+ isunit: 0,
unitname: null,
unitno: null,
uintuserno: null,
@@ -2450,64 +2675,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) {
@@ -2531,7 +2770,43 @@
this.Networkheader = string.slice(0, index + 4); // 鎴彇8032鍙婂叾鍓嶉儴瀛楃
}
},
+ /**
+ * 2026-10-15锛氫笂浼犳椂鏍¢獙闄勪欢鏂囦欢鍚嶏紙涓氬姟瑕佹眰锛氫笉鍚堟牸绔嬪嵆鎻愮ず涓斾笉鍔犲叆鍒楄〃锛夈��
+ * 瑙勫垯涓庡悗绔� AttachmentNameValidator 鍚屽彛寰勶細蹇呴』鍚腑鏂� / 鍘绘帀鎵╁睍鍚嶅悗涓诲共 鈮�20 瀛� /
+ * 涓嶅惈绌烘牸鍙� / \ : * ? " < > | # % 绛夌壒娈婂瓧绗︺��
+ */
+ checkUploadFileName(file) {
+ const raw = file && file.raw ? file.raw.name : file && file.name;
+ const r = checkFileName(raw);
+ if (!r.ok) {
+ this.$modal.msgError(r.msg);
+ return false;
+ }
+ return true;
+ },
+
+ /**
+ * 2026-10-15锛氫繚瀛樺墠鏍¢獙鏁村崟鏄庣粏闄勪欢鏂囦欢鍚嶏紙鍚悓涓�琛屽唴閲嶅悕锛夈��
+ * 鍙e緞锛堜笟鍔$‘璁わ級锛氬彧鏍¢獙"鏈鍙樻洿"鐨勯檮浠垛�斺�旇�佸崟鎹噷宸插瓨鍦ㄧ殑涓嶅悎瑙勯檮浠跺悕涓嶈兘鎶婁繚瀛樺崱姝�
+ * 锛堝惁鍒欒�佸崟鎹敼涓�涓噾棰濋兘瀛樹笉杩涘幓锛夈�傚悗绔寜 id 璇绘棫璁板綍鏀捐鍘嗗彶闄勪欢锛涘墠绔嬁涓嶅埌"鍝簺鏄巻鍙�"
+ * 鐨勬潈濞佷俊鎭紝鍥犳**浠呮柊澧炲崟鎹�**鍋氫繚瀛樺墠鎷︽埅锛岀紪杈戣�佸崟鎹椂鏂板鐨勪笉鍚堣闄勪欢鐢卞悗绔簩娆℃牎楠屾嫤涓嬨��
+ */
+ checkDetailFileNames() {
+ if (this.form && this.form.id) {
+ return true;
+ }
+ const c = checkDetails(this.rbDetails);
+ if (!c.ok) {
+ this.$modal.msgError(c.msg);
+ return false;
+ }
+ return true;
+ },
+
uploadSccess(response, file, fileList) {
+ if (!this.checkUploadFileName(file)) {
+ return;
+ }
this.rbDetails;
const config = {
headers: { Authorization: "Bearer " + this.ICDtoken }
@@ -2899,7 +3174,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