From b1dc2d5e939ebf014de356b0b066a0c6ed868c5d Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期三, 25 三月 2026 11:46:29 +0800
Subject: [PATCH] fix: 完成采购审批申请、审批功能
---
src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue | 98 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 96 insertions(+), 2 deletions(-)
diff --git a/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue b/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue
index 403cab6..7d34424 100644
--- a/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue
+++ b/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue
@@ -32,7 +32,24 @@
</el-form-item>
</el-col>
</el-row>
- <el-row>
+ <!-- 鎶ラ攢閲戦锛堜粎褰� approveType 涓� 4 鏃舵樉绀猴級 -->
+ <el-row v-if="props.approveType == 4">
+ <el-col :span="24">
+ <el-form-item label="鎶ラ攢閲戦锛�" prop="price">
+ <el-input-number
+ v-model="form.price"
+ placeholder="璇疯緭鍏ユ姤閿�閲戦"
+ :min="0"
+ :precision="2"
+ :step="0.01"
+ style="width: 100%"
+ disabled
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row v-if="!isPurchaseApproval">
<el-col :span="24">
<el-form-item label="瀹℃壒浜嬬敱锛�" prop="approveReason">
<el-input v-model="form.approveReason" placeholder="璇疯緭鍏�" clearable type="textarea" disabled/>
@@ -73,6 +90,51 @@
</el-col>
</el-row>
</el-form>
+ <div v-if="isPurchaseApproval" style="margin: 10px 0 18px;">
+ <el-divider content-position="left">閲囪喘璇︽儏</el-divider>
+ <el-skeleton :loading="purchaseLoading" animated>
+ <template #template>
+ <el-skeleton-item variant="h3" style="width: 30%" />
+ <el-skeleton-item variant="text" style="width: 100%" />
+ <el-skeleton-item variant="text" style="width: 100%" />
+ </template>
+ <template #default>
+ <el-empty v-if="!purchaseDetail || !purchaseDetail.purchaseContractNumber" description="鏈煡璇㈠埌瀵瑰簲閲囪喘璇︽儏" />
+ <template v-else>
+ <el-descriptions :column="2" border>
+ <el-descriptions-item label="閲囪喘鍚堝悓鍙�">{{ purchaseDetail.purchaseContractNumber }}</el-descriptions-item>
+ <el-descriptions-item label="渚涘簲鍟嗗悕绉�">{{ purchaseDetail.supplierName }}</el-descriptions-item>
+ <el-descriptions-item label="椤圭洰鍚嶇О">{{ purchaseDetail.projectName }}</el-descriptions-item>
+ <el-descriptions-item label="閿�鍞悎鍚屽彿">{{ purchaseDetail.salesContractNo }}</el-descriptions-item>
+ <el-descriptions-item label="绛捐鏃ユ湡">{{ purchaseDetail.executionDate }}</el-descriptions-item>
+ <el-descriptions-item label="褰曞叆鏃ユ湡">{{ purchaseDetail.entryDate }}</el-descriptions-item>
+ <el-descriptions-item label="浠樻鏂瑰紡">{{ purchaseDetail.paymentMethod }}</el-descriptions-item>
+ <el-descriptions-item label="鍚堝悓閲戦" :span="2">
+ <span style="font-size: 18px; color: #e6a23c; font-weight: bold;">
+ 楼{{ Number(purchaseDetail.contractAmount ?? 0).toFixed(2) }}
+ </span>
+ </el-descriptions-item>
+ </el-descriptions>
+
+ <div style="margin-top: 20px;">
+ <h4>浜у搧鏄庣粏</h4>
+ <el-table :data="purchaseProducts" border style="width: 100%">
+ <el-table-column prop="productCategory" label="浜у搧鍚嶇О" />
+ <el-table-column prop="specificationModel" label="瑙勬牸鍨嬪彿" />
+ <el-table-column prop="unit" label="鍗曚綅" />
+ <el-table-column prop="quantity" label="鏁伴噺" />
+ <el-table-column prop="taxInclusiveUnitPrice" label="鍚◣鍗曚环">
+ <template #default="scope">楼{{ Number(scope.row.taxInclusiveUnitPrice ?? 0).toFixed(2) }}</template>
+ </el-table-column>
+ <el-table-column prop="taxInclusiveTotalPrice" label="鍚◣鎬讳环">
+ <template #default="scope">楼{{ Number(scope.row.taxInclusiveTotalPrice ?? 0).toFixed(2) }}</template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </template>
+ </template>
+ </el-skeleton>
+ </div>
<el-form :model="{ activities }" ref="formRef" label-position="top">
<el-steps :active="getActiveStep()" finish-status="success" process-status="process" align-center direction="vertical">
<el-step
@@ -146,13 +208,14 @@
</template>
<script setup>
-import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+import { computed, getCurrentInstance, reactive, ref, toRefs } from "vue";
import vueEsign from "vue-esign";
import {
approveProcessDetails,
getDept,
updateApproveNode
} from "@/api/collaborativeApproval/approvalProcess.js";
+import { getPurchaseByCode } from "@/api/procurementManagement/procurementLedger.js";
import useUserStore from "@/store/modules/user.js";
import {userListNoPageByTenantId} from "@/api/system/user.js";
import { WarningFilled, Edit, Check, MoreFilled } from '@element-plus/icons-vue'
@@ -167,6 +230,14 @@
const userStore = useUserStore()
const productOptions = ref([]);
const userList = ref([])
+const purchaseLoading = ref(false)
+const currentPurchase = ref({})
+const isPurchaseApproval = computed(() => Number(props.approveType) === 5)
+const purchaseDetail = computed(() => currentPurchase.value?.data || currentPurchase.value || {})
+const purchaseProducts = computed(() => {
+ const detail = purchaseDetail.value || {}
+ return detail.productData || detail.products || detail.children || []
+})
const data = reactive({
form: {
approveTime: "",
@@ -185,6 +256,12 @@
const esign = ref(null);
const lineWidth = ref(0);
const lineColor = ref("#000000");
+const props = defineProps({
+ approveType: {
+ type: [Number, String],
+ default: 0
+ }
+})
// 涓婁紶閰嶇疆
const upload = reactive({
@@ -219,11 +296,26 @@
const openDialog = (type, row) => {
operationType.value = type;
dialogFormVisible.value = true;
+ currentPurchase.value = {}
userListNoPageByTenantId().then((res) => {
userList.value = res.data;
});
form.value = {...row}
getProductOptions()
+ if (isPurchaseApproval.value) {
+ const purchaseContractNumber = row?.approveReason
+ if (purchaseContractNumber) {
+ purchaseLoading.value = true
+ getPurchaseByCode({ purchaseContractNumber }).then((res) => {
+ // 鍏煎鍚庣杩斿洖 {code,data} 鎴栫洿鎺ヨ繑鍥炶鎯呭璞′袱绉嶇粨鏋�
+ currentPurchase.value = res || {}
+ }).catch(() => {
+ proxy.$modal.msgError("鏌ヨ閲囪喘璇︽儏澶辫触")
+ }).finally(() => {
+ purchaseLoading.value = false
+ })
+ }
+ }
approveProcessDetails(row.approveId).then((res) => {
activities.value = res.data
// 澧炲姞isApproval瀛楁
@@ -330,6 +422,8 @@
const closeDia = () => {
proxy.resetForm("formRef");
dialogFormVisible.value = false;
+ purchaseLoading.value = false
+ currentPurchase.value = {}
emit('close')
};
defineExpose({
--
Gitblit v1.9.3