From 2d3530a7c11557a40807ad7c0b9e302ce6ce3a9f Mon Sep 17 00:00:00 2001
From: hsy <1029150275@qq.com>
Date: 星期五, 28 八月 2026 10:16:32 +0800
Subject: [PATCH] feat: 综合业务模块页面重构与交互完善
---
src/views/salesManagement/deliveryLedger/index.vue | 203 +++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 182 insertions(+), 21 deletions(-)
diff --git a/src/views/salesManagement/deliveryLedger/index.vue b/src/views/salesManagement/deliveryLedger/index.vue
index 33fa45f..af41f00 100644
--- a/src/views/salesManagement/deliveryLedger/index.vue
+++ b/src/views/salesManagement/deliveryLedger/index.vue
@@ -32,6 +32,36 @@
@change="handleQuery"
/>
</el-form-item>
+ <el-form-item label="椤圭洰鍚嶇О锛�" prop="projectId">
+ <el-select
+ v-model="searchForm.projectId"
+ placeholder="璇烽�夋嫨椤圭洰"
+ clearable
+ filterable
+ style="width: 200px"
+ @change="handleQuery"
+ >
+ <el-option
+ v-for="item in projectOptions"
+ :key="item.id"
+ :label="item.no + ' - ' + item.title"
+ :value="item.id"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍙戣揣鏃ユ湡锛�" prop="shippingDateRange">
+ <el-date-picker
+ v-model="searchForm.shippingDateRange"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ value-format="YYYY-MM-DD"
+ style="width: 240px"
+ @change="handleQuery"
+ clearable
+ />
+ </el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery"> 鎼滅储</el-button>
</el-form-item>
@@ -64,6 +94,12 @@
<el-table-column
label="鍙戣揣璁㈠崟鍙�"
prop="shippingNo"
+ show-overflow-tooltip
+ />
+ <el-table-column
+ label="椤圭洰鍚嶇О"
+ prop="projectName"
+ min-width="150"
show-overflow-tooltip
/>
<el-table-column
@@ -124,14 +160,22 @@
show-overflow-tooltip
width="130"
/>
+ <el-table-column label="閫�璐у崟" align="center" width="140">
+ <template #default="scope">
+ <el-button v-if="scope.row.returnNoList && scope.row.returnNoList.length > 0" link type="primary" @click="openReturnNosDialog(scope.row)">
+ 鏌ョ湅 {{ scope.row.returnNoList.length }} 涓��璐у崟
+ </el-button>
+ <span v-else>--</span>
+ </template>
+ </el-table-column>
<el-table-column fixed="right" label="鎿嶄綔" width="220" align="center">
<template #default="scope">
- <!-- <el-button-->
- <!-- link-->
- <!-- type="primary"-->
- <!-- :disabled="!isApproved(scope.row.status)"-->
- <!-- @click="openForm('edit', scope.row)">鍙戣揣-->
- <!-- </el-button>-->
+ <el-button
+ link
+ type="primary"
+ :disabled="scope.row.status === '瀹℃牳閫氳繃' || scope.row.status === '宸插彂璐�'"
+ @click="openForm('edit', scope.row)">琛ュ厖鍙戣揣淇℃伅
+ </el-button>
<el-button
link
type="primary"
@@ -139,13 +183,13 @@
@click="openDetail(scope.row)"
>璇︽儏
</el-button>
- <!-- <el-button-->
- <!-- link-->
- <!-- type="danger"-->
- <!-- :disabled="isApproving(scope.row.status)"-->
- <!-- @click="handleDeleteSingle(scope.row)"-->
- <!-- >鍒犻櫎-->
- <!-- </el-button>-->
+ <el-button
+ link
+ type="danger"
+ :disabled="scope.row.status === '宸插彂璐�' || scope.row.status === '瀹℃牳閫氳繃'"
+ @click="handleDeleteSingle(scope.row)"
+ >鍒犻櫎
+ </el-button>
</template>
</el-table-column>
</el-table>
@@ -239,6 +283,56 @@
</el-form-item>
</el-col>
</el-row>
+ <el-row :gutter="30">
+ <el-col :span="24">
+ <el-form-item label="鍙戣揣鍗曟嵁锛�" prop="shippingDocument">
+ <el-input
+ v-model="form.shippingDocument"
+ placeholder="璇疯緭鍏ュ彂璐у崟鎹�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="8">
+ <el-form-item label="鏄惁瀵硅处锛�" prop="isReconciled">
+ <el-switch v-model="form.isReconciled" :active-value="1" :inactive-value="0" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鏄惁缁撶畻锛�" prop="isSettled">
+ <el-switch v-model="form.isSettled" :active-value="1" :inactive-value="0" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鏄惁宸插紑绁細" prop="isInvoiced">
+ <el-switch v-model="form.isInvoiced" :active-value="1" :inactive-value="0" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12" v-if="form.isReconciled === 1">
+ <el-form-item label="瀵硅处鍗曞綊妗f儏鍐碉細" prop="statementArchivingStatus">
+ <el-input
+ type="textarea"
+ v-model="form.statementArchivingStatus"
+ placeholder="璇疯緭鍏ュ璐﹀崟褰掓。鎯呭喌"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12" v-if="form.isSettled === 1">
+ <el-form-item label="缁撶畻鍗曞綊妗f儏鍐碉細" prop="settlementArchivingStatus">
+ <el-input
+ type="textarea"
+ v-model="form.settlementArchivingStatus"
+ placeholder="璇疯緭鍏ョ粨绠楀崟褰掓。鎯呭喌"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
@@ -293,6 +387,24 @@
<el-descriptions-item label="鍑哄簱鍗曞彿" :span="2">{{
detailRow.outboundBatches || "--"
}}</el-descriptions-item>
+ <el-descriptions-item label="鍙戣揣鍗曟嵁">{{
+ detailRow.shippingDocument || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鏄惁瀵硅处">{{
+ detailRow.isReconciled === 1 ? '鏄�' : '鍚�'
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鏄惁缁撶畻">{{
+ detailRow.isSettled === 1 ? '鏄�' : '鍚�'
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鏄惁宸插紑绁�">{{
+ detailRow.isInvoiced === 1 ? '鏄�' : '鍚�'
+ }}</el-descriptions-item>
+ <el-descriptions-item label="瀵硅处鍗曞綊妗f儏鍐�" :span="2">{{
+ detailRow.statementArchivingStatus || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="缁撶畻鍗曞綊妗f儏鍐�" :span="2">{{
+ detailRow.settlementArchivingStatus || "--"
+ }}</el-descriptions-item>
</el-descriptions>
<el-table
:data="getDeliveryProductInfoList()"
@@ -334,6 +446,19 @@
</div>
</template>
</el-dialog>
+
+ <!-- 閫�璐у崟鍙峰脊妗� -->
+ <el-dialog v-model="returnNosDialogVisible" title="閫�璐у崟鍙峰垪琛�" width="400px" @close="closeReturnNosDialog">
+ <el-table :data="currentReturnNos" border size="small">
+ <el-table-column label="搴忓彿" type="index" width="60" align="center" />
+ <el-table-column label="閫�璐у崟鍙�" prop="returnNo" align="center" />
+ </el-table>
+ <template #footer>
+ <div class="dialog-footer">
+ <el-button @click="closeReturnNosDialog">鍏抽棴</el-button>
+ </div>
+ </template>
+ </el-dialog>
</div>
</template>
@@ -349,6 +474,7 @@
getDeliveryDetail,
} from "@/api/salesManagement/deliveryLedger.js";
import { delLedgerFile } from "@/api/salesManagement/salesLedger.js";
+import { listProject } from "@/api/projectManagement/project.js";
import ImageUpload from "@/components/AttachmentUpload/image/index.vue";
import ImagePreview from "@/components/AttachmentPreview/image/index.vue";
@@ -357,6 +483,7 @@
const selectedRows = ref([]);
const tableLoading = ref(false);
const salesOrderOptions = ref([]);
+const projectOptions = ref([]);
const page = reactive({
current: 1,
size: 100,
@@ -368,14 +495,30 @@
const detailRow = ref(null);
const detailProductList = ref([]);
+// 閫�璐у崟鍙峰脊妗�
+const returnNosDialogVisible = ref(false);
+const currentReturnNos = ref([]);
+
+const openReturnNosDialog = (row) => {
+ currentReturnNos.value = (row.returnNoList || []).map(no => ({ returnNo: no }));
+ returnNosDialogVisible.value = true;
+};
+
+const closeReturnNosDialog = () => {
+ returnNosDialogVisible.value = false;
+ currentReturnNos.value = [];
+};
+
// 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
const operationType = ref("");
const dialogFormVisible = ref(false);
const data = reactive({
searchForm: {
- salesContractNo: "", // 閿�鍞鍗曞彿
- shippingCarNumber: "", // 杞︾墝鍙�
- expressNumber: "", // 蹇�掑崟鍙�
+ salesContractNo: undefined,
+ shippingCarNumber: undefined,
+ expressNumber: undefined,
+ projectId: undefined,
+ shippingDateRange: []
},
form: {
id: null,
@@ -433,7 +576,13 @@
const getList = () => {
tableLoading.value = true;
- deliveryLedgerListPage({ ...searchForm.value, ...page })
+ const params = { ...searchForm.value };
+ if (params.shippingDateRange && params.shippingDateRange.length === 2) {
+ params.beginShippingDate = params.shippingDateRange[0];
+ params.endShippingDate = params.shippingDateRange[1];
+ }
+ delete params.shippingDateRange;
+ deliveryLedgerListPage({ ...params, ...page })
.then((res) => {
tableLoading.value = false;
tableData.value = res.data.records || [];
@@ -461,9 +610,8 @@
// 鎵撳紑寮规
const openForm = async (type, row) => {
- // 鍙戣揣锛氫粎鈥滃鏍搁�氳繃鈥濆厑璁哥紪杈�
- if (type === "edit" && row && !isApproved(row.status)) {
- proxy.$modal.msgWarning("鍙湁瀹℃牳閫氳繃鐨勬暟鎹墠鍙互鍙戣揣");
+ if (type === "edit" && row && (row.status === "瀹℃牳閫氳繃" || row.status === "宸插彂璐�")) {
+ proxy.$modal.msgWarning("璇ョ姸鎬佺殑鏁版嵁涓嶅彲浠ョ紪杈戝彂璐т俊鎭�");
return;
}
@@ -479,6 +627,12 @@
shippingCarNumber: row.shippingCarNumber ?? "",
expressCompany: row.expressCompany ?? "",
expressNumber: row.expressNumber ?? "",
+ shippingDocument: row.shippingDocument ?? "",
+ isReconciled: row.isReconciled ?? 0,
+ statementArchivingStatus: row.statementArchivingStatus ?? "",
+ isSettled: row.isSettled ?? 0,
+ settlementArchivingStatus: row.settlementArchivingStatus ?? "",
+ isInvoiced: row.isInvoiced ?? 0,
};
deliveryFileList.value = row.storageBlobVOs || [];
}
@@ -616,7 +770,13 @@
type: "warning",
})
.then(() => {
- proxy.download("/shippingInfo/export", {}, "鍙戣揣鍙拌处.xlsx");
+ const params = { ...searchForm.value };
+ if (params.shippingDateRange && params.shippingDateRange.length === 2) {
+ params.beginShippingDate = params.shippingDateRange[0];
+ params.endShippingDate = params.shippingDateRange[1];
+ }
+ delete params.shippingDateRange;
+ proxy.download("/shippingInfo/export", params, "鍙戣揣鍙拌处.xlsx");
})
.catch(() => {
proxy.$modal.msg("宸插彇娑�");
@@ -866,6 +1026,7 @@
};
onMounted(() => {
+ listProject({}).then(res => projectOptions.value = res.rows || res.data.records || res.data);
getList();
});
</script>
--
Gitblit v1.9.3