From 5eadfbb64d2f288b92ec1f22cfef6f096b4b9a9e Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期五, 06 二月 2026 14:24:11 +0800
Subject: [PATCH] Merge branch 'dev_new' of http://114.132.189.42:9002/r/product-inventory-APP-before into dev_new
---
src/pages/procurementManagement/procurementLedger/detail.vue | 167 ++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 139 insertions(+), 28 deletions(-)
diff --git a/src/pages/procurementManagement/procurementLedger/detail.vue b/src/pages/procurementManagement/procurementLedger/detail.vue
index de6f687..d7693cc 100644
--- a/src/pages/procurementManagement/procurementLedger/detail.vue
+++ b/src/pages/procurementManagement/procurementLedger/detail.vue
@@ -17,27 +17,30 @@
</up-form-item>
<up-form-item label="閿�鍞悎鍚屽彿"
prop="salesContractNo"
- required
- @click="showPicker = true">
+ required>
<up-input v-model="form.salesContractNo"
- readonly=""
- @click="showPicker = true"
+ readonly
+ :disabled="isReadOnly"
+ @click="!isReadOnly && (showPicker = true)"
placeholder="鐐瑰嚮閫夋嫨閿�鍞悎鍚屽彿" />
<template #right>
<up-icon name="arrow-right"
+ v-if="!isReadOnly"
@click="showPicker = true"></up-icon>
</template>
</up-form-item>
<up-form-item label="渚涘簲鍟嗗悕绉�"
prop="supplierName"
required
- @click="showCustomerPicker = true">
+ >
<up-input v-model="form.supplierName"
- readonly=""
- @click="showCustomerPicker = true"
+ readonly
+ :disabled="isReadOnly"
+ @click="!isReadOnly && (showCustomerPicker = true)"
placeholder="鐐瑰嚮閫夋嫨渚涘簲鍟�" />
<template #right>
<up-icon name="arrow-right"
+ v-if="!isReadOnly"
@click="showCustomerPicker = true"></up-icon>
</template>
</up-form-item>
@@ -45,11 +48,13 @@
prop="projectName"
required>
<up-input v-model="form.projectName"
+ :disabled="isReadOnly"
placeholder="璇疯緭鍏ラ」鐩悕绉�" />
</up-form-item>
<up-form-item label="浠樻鏂瑰紡"
prop="paymentMethod">
<up-input v-model="form.paymentMethod"
+ :disabled="isReadOnly"
placeholder="璇疯緭鍏ヤ粯娆炬柟寮�" />
</up-form-item>
<up-form-item label="绛捐鏃ユ湡"
@@ -57,9 +62,11 @@
prop="executionDate">
<up-input v-model="form.executionDate"
placeholder="璇烽�夋嫨"
- readonly="" />
+ readonly
+ :disabled="isReadOnly" />
<template #right>
<up-icon name="arrow-right"
+ v-if="!isReadOnly"
@click="showTimePicker = true"></up-icon>
</template>
</up-form-item>
@@ -99,9 +106,10 @@
<text class="approver-name">{{ step.nickName }}</text>
</view>
<view class="delete-approver-btn"
+ v-if="!isReadOnly"
@click="removeApprover(stepIndex)">脳</view>
</view>
- <view v-else
+ <view v-else-if="!isReadOnly"
class="add-approver-btn"
@click="addApprover(stepIndex)">
<view class="add-circle">+</view>
@@ -111,11 +119,11 @@
<view class="step-line"
v-if="stepIndex < approverNodes.length - 1"></view>
<view class="delete-step-btn"
- v-if="approverNodes.length > 1"
+ v-if="approverNodes.length > 1 && !isReadOnly"
@click="removeApprovalStep(stepIndex)">鍒犻櫎鑺傜偣</view>
</view>
</view>
- <view class="add-step-btn">
+ <view class="add-step-btn" v-if="!isReadOnly">
<u-button icon="plus"
plain
type="primary"
@@ -190,7 +198,7 @@
size="small"
@click="addProduct"
class="add-btn"
- v-if="operationType !== 'view'">
+ v-if="canEditProducts">
鏂板
</up-button>
</view>
@@ -208,7 +216,7 @@
</view>
<!-- 鎿嶄綔鎸夐挳 -->
<view class="product-actions"
- v-if="operationType !== 'view'">
+ v-if="canEditProducts">
<up-button type="error"
size="mini"
@click="removeProduct(idx)"
@@ -227,10 +235,12 @@
<up-input v-model="product.productCategory"
readonly
placeholder="璇烽�夋嫨"
+ :disabled="!canEditProducts"
@click="openCategoryPicker(idx)" />
<template #right>
<up-icon name="arrow-right"
- @click="showCategoryPicker = true"></up-icon>
+ v-if="canEditProducts"
+ @click="openCategoryPicker(idx)"></up-icon>
</template>
</up-form-item>
<!-- 瑙勬牸鍨嬪彿 -->
@@ -241,10 +251,12 @@
<up-input v-model="product.specificationModel"
readonly
placeholder="璇烽�夋嫨"
+ :disabled="!canEditProducts"
@click="openSpecificationPicker(idx)" />
<template #right>
<up-icon name="arrow-right"
- @click="showSpecificationPicker = true"></up-icon>
+ v-if="canEditProducts"
+ @click="openSpecificationPicker(idx)"></up-icon>
</template>
</up-form-item>
<!-- 鍗曚綅 -->
@@ -253,6 +265,7 @@
required
:rules="productRules">
<up-input v-model="product.unit"
+ :disabled="!canEditProducts"
placeholder="璇疯緭鍏�" />
</up-form-item>
<!-- 绋庣巼 -->
@@ -263,10 +276,12 @@
<up-input v-model="product.taxRate"
readonly
placeholder="璇烽�夋嫨"
+ :disabled="!canEditProducts"
@click="openTaxRatePicker(idx)" />
<template #right>
<up-icon name="arrow-right"
- @click="showTaxRatePicker = true"></up-icon>
+ v-if="canEditProducts"
+ @click="openTaxRatePicker(idx)"></up-icon>
</template>
</up-form-item>
<!-- 鍚◣鍗曚环 -->
@@ -276,6 +291,7 @@
:rules="productRules">
<up-input v-model="product.taxInclusiveUnitPrice"
type="number"
+ :disabled="!canEditProducts"
placeholder="璇疯緭鍏�"
@blur="formatTaxPrice(idx)" />
</up-form-item>
@@ -286,6 +302,7 @@
:rules="productRules">
<up-input v-model="product.quantity"
type="number"
+ :disabled="!canEditProducts"
placeholder="璇疯緭鍏�"
@blur="formatAmount(idx)" />
</up-form-item>
@@ -296,6 +313,7 @@
:rules="productRules">
<up-input v-model="product.taxInclusiveTotalPrice"
type="number"
+ :disabled="!canEditProducts"
placeholder="璇疯緭鍏�"
@blur="formatTaxTotal(idx)" />
</up-form-item>
@@ -306,6 +324,7 @@
:rules="productRules">
<up-input v-model="product.taxExclusiveTotalPrice"
type="number"
+ :disabled="!canEditProducts"
placeholder="璇疯緭鍏�"
@blur="formatNoTaxTotal(idx)" />
</up-form-item>
@@ -317,10 +336,12 @@
<up-input v-model="product.invoiceType"
readonly
placeholder="璇烽�夋嫨"
+ :disabled="!canEditProducts"
@click="openInvoiceTypePicker(idx)" />
<template #right>
<up-icon name="arrow-right"
- @click="showInvoiceTypePicker = true"></up-icon>
+ v-if="canEditProducts"
+ @click="openInvoiceTypePicker(idx)"></up-icon>
</template>
</up-form-item>
<!-- 搴撳瓨棰勮鏁伴噺 -->
@@ -330,6 +351,7 @@
:rules="productRules">
<up-input v-model="product.warnNum"
type="number"
+ :disabled="!canEditProducts"
placeholder="璇疯緭鍏�" />
</up-form-item>
<up-form-item label="鏄惁璐ㄦ"
@@ -337,13 +359,16 @@
required
:rules="productRules">
<u-radio-group v-model="product.isChecked"
+ :disabled="!canEditProducts"
placement="row"
@change="groupChange">
<u-radio :customStyle="{marginRight: '40rpx'}"
label="鏄�"
+ :disabled="!canEditProducts"
:name="true">
</u-radio>
<u-radio label="鍚�"
+ :disabled="!canEditProducts"
:name="false">
</u-radio>
</u-radio-group>
@@ -352,7 +377,7 @@
</view>
</view>
<!-- 浣跨敤鍏叡搴曢儴鎸夐挳缁勪欢 -->
- <FooterButtons :show="operationType !== 'view'"
+ <FooterButtons :show="operationType !== 'view' && !isApprovalPassed"
cancelText="鍙栨秷"
confirmText="淇濆瓨"
@cancel="goBack"
@@ -375,6 +400,7 @@
getSalesNo,
approveProcessGetInfo,
} from "@/api/procurementManagement/procurementLedger";
+ import { delProduct } from "@/api/salesManagement/salesLedger";
import PageHeader from "@/components/PageHeader.vue";
import FooterButtons from "@/components/FooterButtons.vue";
import { userListNoPageByTenantId } from "@/api/system/user";
@@ -382,11 +408,25 @@
const operationType = ref("");
const editData = ref(null);
const formRef = ref(null);
+ // 瀹℃壒閫氳繃锛坅pprovalStatus === 3锛夊悗锛屾暣鍗曠姝㈢紪杈戯紙鍚骇鍝併�佸熀鏈俊鎭�佸鎵规祦绋嬶級
+ const isApprovalPassed = computed(() => {
+ const status = editData.value?.approvalStatus ?? form.value?.approvalStatus;
+ return Number(status) === 3;
+ });
+ const canEditProducts = computed(() => {
+ return operationType.value !== "view" && !isApprovalPassed.value;
+ });
+ // 鏄惁鏁翠綋鍙锛氭煡鐪嬫ā寮� 鎴� 宸插鎵归�氳繃
+ const isReadOnly = computed(() => {
+ return operationType.value === "view" || isApprovalPassed.value;
+ });
const userStore = useUserStore();
const form = ref({
id: "",
salesContractNo: "",
+ // 鍏宠仈閿�鍞彴璐D锛堢紪杈戝洖鏄炬椂鍙兘缂哄け锛岄渶瑕佷粠鍚堝悓鍙峰弽鏌ヨˉ榻愶級
+ salesLedgerId: "",
purchaseContractNumber: "",
supplierId: "",
supplierName: "",
@@ -413,12 +453,14 @@
}));
});
- // 璁$畻渚涘簲鍟嗛�夋嫨鍒楄〃
+ // 璁$畻渚涘簲鍟嗛�夋嫨鍒楄〃锛堝彧淇濈暀 isWhite === 0 鐨勪緵搴斿晢锛�
const supplierActionList = computed(() => {
- return supplierList.value.map(item => ({
- name: item.text,
- value: item.value,
- }));
+ return supplierList.value
+ .filter(item => item.isWhite === 0)
+ .map(item => ({
+ name: item.text,
+ value: item.value,
+ }));
});
// 閫夋嫨鍣ㄧ浉鍏冲彉閲�
@@ -528,6 +570,7 @@
};
const addProduct = () => {
+ if (!canEditProducts.value) return;
if (productData.value === null) {
productData.value = [];
}
@@ -560,6 +603,18 @@
showPicker.value = false;
};
+ // 缂栬緫鍥炴樉鍦烘櫙锛氬彧鏈� salesContractNo锛屾病鏈� salesLedgerId 鏃讹紝灏濊瘯浠庡垪琛ㄥ弽鏌ヨˉ榻�
+ const syncSalesLedgerIdFromContractNo = () => {
+ if (form.value.salesLedgerId) return;
+ if (!form.value.salesContractNo) return;
+ const selectedItem = salesContractList.value.find(
+ contract => contract.text === form.value.salesContractNo
+ );
+ if (selectedItem) {
+ form.value.salesLedgerId = selectedItem.value;
+ }
+ };
+
// 渚涘簲鍟嗛�夋嫨浜嬩欢
const onCustomerSelect = item => {
form.value.supplierName = item.name;
@@ -574,26 +629,69 @@
};
const removeProduct = idx => {
- productData.value.splice(idx, 1);
+ if (!canEditProducts.value) return;
+ const row = productData.value[idx];
+
+ // 鏂板妯″紡鎴栬繕鏈惤搴撶殑浜у搧锛岀洿鎺ュ墠绔垹闄�
+ if (operationType.value === "add" || !row?.id) {
+ productData.value.splice(idx, 1);
+ return;
+ }
+
+ uni.showModal({
+ title: "鎻愮ず",
+ content: "閫変腑鐨勪骇鍝佸皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�",
+ confirmText: "纭",
+ cancelText: "鍙栨秷",
+ success: res => {
+ if (!res.confirm) {
+ uni.showToast({
+ title: "宸插彇娑�",
+ icon: "none",
+ });
+ return;
+ }
+ const ids = [row.id];
+ delProduct(ids).then(() => {
+ uni.showToast({
+ title: "鍒犻櫎鎴愬姛",
+ icon: "success",
+ });
+ const currentId = form.value.id || editData.value?.id;
+ if (currentId) {
+ getPurchaseById({ id: currentId, type: 2 }).then(res2 => {
+ productData.value = res2.productData || [];
+ });
+ } else {
+ // 鍥為��澶勭悊锛氬鏋滄病鏈夊綋鍓岻D锛屽垯鏈湴鍒犻櫎
+ productData.value.splice(idx, 1);
+ }
+ });
+ },
+ });
};
// 鏄剧ず閫夋嫨鍣�
const openCategoryPicker = idx => {
+ if (!canEditProducts.value) return;
currentProductIndex.value = idx;
showCategoryPicker.value = true;
};
const openSpecificationPicker = idx => {
+ if (!canEditProducts.value) return;
currentProductIndex.value = idx;
showSpecificationPicker.value = true;
};
const openTaxRatePicker = idx => {
+ if (!canEditProducts.value) return;
currentProductIndex.value = idx;
showTaxRatePicker.value = true;
};
const openInvoiceTypePicker = idx => {
+ if (!canEditProducts.value) return;
currentProductIndex.value = idx;
showInvoiceTypePicker.value = true;
};
@@ -819,6 +917,14 @@
};
const onSubmit = () => {
+ // 瀹℃壒閫氳繃鐨勫彴璐︾姝㈠啀娆′慨鏀�
+ if (isApprovalPassed.value) {
+ uni.showToast({
+ title: "宸插鎵归�氳繃鐨勫彴璐︿笉鍏佽淇敼",
+ icon: "none",
+ });
+ return;
+ }
const hasEmptyApprover = approverNodes.value.some(node => !node.userId);
if (hasEmptyApprover) {
uni.showToast({
@@ -838,10 +944,8 @@
});
return;
}
- // 濡傛灉salesLedgerId涓虹┖锛屽垯涓嶄紶閫抯alesContractNo
- if (!form.value.salesLedgerId) {
- form.value.salesContractNo = "";
- }
+ // 缂栬緫鍥炴樉鏃跺彲鑳藉彧鏈夊悎鍚屽彿锛屾彁浜ゅ墠灏濊瘯琛ラ綈 salesLedgerId
+ syncSalesLedgerIdFromContractNo();
if (operationType.value == "add") {
delete form.value.id;
}
@@ -923,6 +1027,8 @@
text: user.salesContractNo,
value: user.id,
}));
+ // 鍒楄〃鍥炴潵鍚庯紝琛ラ綈缂栬緫鍥炴樉鐨� salesLedgerId
+ syncSalesLedgerIdFromContractNo();
});
};
@@ -932,6 +1038,7 @@
supplierList.value = res.data.map(item => ({
text: item.supplierName,
value: item.id,
+ isWhite: item.isWhite,
}));
});
};
@@ -1023,6 +1130,7 @@
};
const addApprover = stepIndex => {
+ if (isReadOnly.value) return;
// 璺宠浆鍒拌仈绯讳汉閫夋嫨椤甸潰
uni.setStorageSync("stepIndex", stepIndex);
uni.navigateTo({
@@ -1031,18 +1139,21 @@
};
const addApprovalStep = () => {
+ if (isReadOnly.value) return;
// 娣诲姞鏂扮殑瀹℃壒姝ラ
approverNodes.value.push({ userId: null, nickName: null });
console.log(approverNodes.value, "approverNodes.value");
};
const removeApprover = stepIndex => {
+ if (isReadOnly.value) return;
// 绉婚櫎瀹℃壒浜�
approverNodes.value[stepIndex].userId = null;
approverNodes.value[stepIndex].nickName = null;
};
const removeApprovalStep = stepIndex => {
+ if (isReadOnly.value) return;
// 纭繚鑷冲皯淇濈暀涓�涓鎵规楠�
if (approverNodes.value.length > 1) {
approverNodes.value.splice(stepIndex, 1);
--
Gitblit v1.9.3