From dc8cd97d8c3c565a80e2651efa63f41c4661ee2b Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期二, 21 四月 2026 16:37:56 +0800
Subject: [PATCH] 阳光彩印web 营销台账明细数据脱敏
---
src/views/salesManagement/salesLedger/index.vue | 126 +++++++++++++++++++++++++++---------------
1 files changed, 81 insertions(+), 45 deletions(-)
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index d3daec6..d5da657 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -42,7 +42,7 @@
<el-table-column align="center" type="selection" width="55" fixed="left"/>
<el-table-column type="expand" width="60" fixed="left">
<template #default="props">
- <el-table :data="props.row.children" border show-summary :summary-method="summarizeChildrenTable">
+ <el-table :data="props.row.children" border show-summary :summary-method="(param) => summarizeChildrenTable(param, props.row)">
<el-table-column align="center" label="搴忓彿" type="index"/>
<el-table-column label="浜у搧澶х被" prop="productCategory" />
<el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" />
@@ -87,17 +87,17 @@
</div>
</template>
</el-table-column>
- <el-table-column label="鏁伴噺" prop="quantity" :formatter="formattedNumber" />
+ <el-table-column label="鏁伴噺" prop="quantity" />
<el-table-column label="绋庣巼(%)" prop="taxRate" />
- <el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" :formatter="formattedNumber" />
- <el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" :formatter="formattedNumber" />
- <el-table-column label="涓嶅惈绋庢�讳环(鍏�)" prop="taxExclusiveTotalPrice" :formatter="formattedNumber" />
+ <el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" :formatter="sensitiveAmountFormatter" />
+ <el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" :formatter="sensitiveAmountFormatter" />
+ <el-table-column label="涓嶅惈绋庢�讳环(鍏�)" prop="taxExclusiveTotalPrice" :formatter="sensitiveAmountFormatter" />
<!--鎿嶄綔-->
<el-table-column Width="60px" label="鎿嶄綔" align="center">
<template #default="scope">
<el-button
link
- type="primary"
+ type="primary"
size="small"
:disabled="!canShip(scope.row)"
@click="openDeliveryForm(scope.row)">
@@ -123,11 +123,8 @@
<el-table-column label="鍏跺畠璇存槑浜嬮」" prop="remarks" width="200" show-overflow-tooltip />
<el-table-column fixed="right" label="鎿嶄綔" min-width="200" align="center">
<template #default="scope">
- <el-button link type="primary" size="small" @click="openForm('edit', scope.row)" :disabled="!scope.row.isEdit">缂栬緫</el-button>
- <el-button link type="primary" size="small" @click="exportSalesContracts(scope.row)">瀵煎嚭閿�鍞悎鍚�</el-button>
-<!-- <el-button link type="primary" size="small" @click="openForm('view', scope.row)">璇︽儏</el-button>-->
- <el-button link type="primary" size="small" @click="downLoadFile(scope.row)">闄勪欢</el-button>
-<!-- <el-button link type="primary" size="small" @click="openDeliveryForm(scope.row)">鍙戣揣</el-button>-->
+ <el-button link type="primary" @click="openForm('edit', scope.row)" :disabled="!scope.row.isEdit || scope.row.hasProductionRecord || !canEditLedger(scope.row)">缂栬緫</el-button>
+ <el-button link type="primary" @click="downLoadFile(scope.row)">闄勪欢</el-button>
</template>
</el-table-column>
</el-table>
@@ -165,8 +162,8 @@
<el-form-item label="瀹㈡埛鍚嶇О锛�" prop="customerId">
<el-select v-model="form.customerId" placeholder="璇烽�夋嫨" clearable :disabled="operationType === 'view'" filterable>
<el-option v-for="item in customerOption" :key="item.id" :label="item.customerName" :value="item.id">
- {{
- item.customerName
+ {{
+ item.customerName + "鈥斺��" + item.taxpayerIdentificationNumber
}}
</el-option>
</el-select>
@@ -375,9 +372,10 @@
<el-col :span="12">
<el-form-item label="绋庣巼(%)锛�" prop="taxRate">
<el-select v-model="productForm.taxRate" placeholder="璇烽�夋嫨" clearable @change="calculateFromTaxRate">
- <el-option label="1" value="1" />
- <el-option label="6" value="6" />
- <el-option label="13" value="13" />
+ <el-option label="0" :value="0" />
+ <el-option label="1" :value="1" />
+ <el-option label="6" :value="6" />
+ <el-option label="13" :value="13" />
</el-select>
</el-form-item>
</el-col>
@@ -637,7 +635,6 @@
<div>
<el-button
type="danger"
- size="small"
@click="removeApproverNode(index)"
v-if="approverNodes.length > 1"
>鍒犻櫎</el-button>
@@ -751,7 +748,7 @@
unit: "",
quantity: "",
taxInclusiveUnitPrice: "",
- taxRate: "",
+ taxRate: 0,
taxInclusiveTotalPrice: "",
taxExclusiveTotalPrice: "",
invoiceType: "",
@@ -936,7 +933,49 @@
});
};
const formattedNumber = (row, column, cellValue) => {
+ if (cellValue === undefined || cellValue === null || cellValue === "") {
+ return "0.00";
+ }
return parseFloat(cellValue).toFixed(3);
+};
+const findLedgerRecordByRow = (row) => {
+ if (!row) return null;
+ if (
+ row.maintainer !== undefined ||
+ row.maintainerName !== undefined ||
+ row.entryPerson !== undefined ||
+ row.entryPersonName !== undefined
+ ) {
+ return row;
+ }
+ if (row.salesLedgerId !== undefined && row.salesLedgerId !== null) {
+ return tableData.value.find((item) => String(item.id) === String(row.salesLedgerId)) || null;
+ }
+ return null;
+};
+const isCurrentUserMaintainer = (row) => {
+ const ledgerRecord = findLedgerRecordByRow(row);
+ if (!ledgerRecord) return true;
+ const currentUserId = String(userStore.id ?? "");
+ const currentNickName = String(userStore.nickName ?? "").trim();
+ const maintainerId = ledgerRecord.maintainerId ?? ledgerRecord.entryPerson;
+ const maintainerName =
+ ledgerRecord.maintainerName ?? ledgerRecord.maintainer ?? ledgerRecord.entryPersonName;
+ if (maintainerId !== undefined && maintainerId !== null && String(maintainerId) !== "") {
+ return String(maintainerId) === currentUserId;
+ }
+ if (maintainerName !== undefined && maintainerName !== null && String(maintainerName).trim() !== "") {
+ return String(maintainerName).trim() === currentNickName;
+ }
+ return true;
+};
+const canEditLedger = (row) => isCurrentUserMaintainer(row);
+const canDeleteLedger = (row) => isCurrentUserMaintainer(row);
+const sensitiveAmountFormatter = (row, column, cellValue) => {
+ if (!isCurrentUserMaintainer(row)) {
+ return "*****";
+ }
+ return formattedNumber(row, column, cellValue);
};
// 鑾峰彇tree瀛愭暟鎹�
const getModels = (value) => {
@@ -1055,34 +1094,29 @@
});
};
// 瀛愯〃鍚堣鏂规硶
-const summarizeChildrenTable = (param) => {
+const summarizeChildrenTable = (param, parentRow) => {
+ if (!isCurrentUserMaintainer(parentRow)) {
+ const { columns } = param;
+ return columns.map((column, index) => {
+ if (index === 0) {
+ return "鍚堣";
+ }
+ if (["taxInclusiveUnitPrice", "taxInclusiveTotalPrice", "taxExclusiveTotalPrice"].includes(column.property)) {
+ return "*****";
+ }
+ return "";
+ });
+ }
return proxy.summarizeTable(param, [
"taxInclusiveUnitPrice",
"taxInclusiveTotalPrice",
"taxExclusiveTotalPrice",
], {
- taxInclusiveUnitPrice: { decimalPlaces: 3 },
- taxInclusiveTotalPrice: { decimalPlaces: 3 },
- taxExclusiveTotalPrice: { decimalPlaces: 3 },
- });
+ taxInclusiveUnitPrice: { decimalPlaces: 3 },
+ taxInclusiveTotalPrice: { decimalPlaces: 3 },
+ taxExclusiveTotalPrice: { decimalPlaces: 3 },
+ });
};
-// 鍒ゆ柇鏄惁鑳界紪杈�
-const canEditLedger = (row) => {
- // 濡傛灉鏄淮鎶や汉锛屽垯鍙互缂栬緫
- return Number(row.entryPerson) === Number(userStore.id);
-};
-
-// 鍒ゆ柇鏄惁鑳藉垹闄�
-const canDeleteLedger = (row) => {
- // 濡傛灉鏄淮鎶や汉锛屽垯鍙互鍒犻櫎
- return Number(row.entryPerson) === Number(userStore.id);
-};
-
-// 鍒ゆ柇鏄惁鏄淮鎶や汉锛堢敤浜庢潈闄愭牎楠岋級
-const isMaintainer = (row) => {
- return row.entryPerson === userStore.id;
-};
-
// 鎵撳紑寮规
const openForm = async (type, row) => {
if (type === "edit" && row && !canEditLedger(row)) {
@@ -1200,7 +1234,7 @@
productData.value = products.map((p) => {
const quantity = Number(p.quantity ?? 0) || 0;
const unitPrice = Number(p.unitPrice ?? 0) || 0;
- const taxRate = "0"; // 榛樿 13%锛屼究浜庣洿鎺ユ彁浜わ紙濡傞渶鍙湪浜у搧涓嚜琛屼慨鏀癸級
+ const taxRate = Number(p.taxRate ?? 0) || 0; // 榛樿 13%锛屼究浜庣洿鎺ユ彁浜わ紙濡傞渶鍙湪浜у搧涓嚜琛屼慨鏀癸級
const taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(3);
const taxExclusiveTotalPrice = proxy.calculateTaxExclusiveTotalPrice(taxInclusiveTotalPrice, taxRate, 3);
return {
@@ -1300,7 +1334,10 @@
}
productOperationType.value = type;
- productForm.value = {};
+ productForm.value = {
+ taxRate: 0,
+ invoiceType: "澧炴櫘绁�"
+ };
proxy.resetForm("productFormRef");
if (type === "edit") {
productForm.value = { ...row };
@@ -1335,6 +1372,7 @@
const submitProduct = () => {
proxy.$refs["productFormRef"].validate((valid) => {
if (valid) {
+ productForm.value.taxRate = productForm.value.taxRate?productForm.value.taxRate:0;
if (operationType.value === "edit") {
submitProductEdit();
} else {
@@ -1450,7 +1488,6 @@
/** 鍒ゆ柇鍗曚釜浜у搧鏄惁宸插彂璐э紙鏍规嵁shippingStatus鍒ゆ柇锛屽凡鍙戣揣鎴栧鏍搁�氳繃涓嶅彲缂栬緫鍜屽垹闄わ級 */
const isProductShipped = (product) => {
if (!product) return false;
-
const status = String(product.shippingStatus || "").trim();
// 濡傛灉鍙戣揣鐘舵�佹槸"宸插彂璐�"鎴�"瀹℃牳閫氳繃"锛屽垯涓嶅彲缂栬緫鍜屽垹闄�
return status === "宸插彂璐�" || status === "瀹℃牳閫氳繃";
@@ -1715,7 +1752,6 @@
<div class="print-page">
<div class="delivery-note">
<div class="header">
- <div class="company-name">闃冲厜褰╁嵃鏈夐檺璐d换鍏徃</div>
<div class="document-title">闆跺敭鍙戣揣鍗�</div>
</div>
@@ -1727,7 +1763,7 @@
</div>
<div>
<span class="label">瀹㈡埛鍚嶇О锛�</span>
- <span class="value">${item.customerName || '寮犵埍鏈�'}</span>
+ <span class="value">${item.customerName}</span>
</div>
</div>
<div class="info-row">
--
Gitblit v1.9.3