From c7d9c7f73f92dd8fb2b7cb3f8cfe6841ca956d18 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 12 八月 2026 11:48:57 +0800
Subject: [PATCH] dev_天津_建诚恒商贸 1.供应商往来添加付款功能 2.客户往来添加回款功能
---
src/views/productionManagement/productionTraceability/index.vue | 103 +++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 95 insertions(+), 8 deletions(-)
diff --git a/src/views/productionManagement/productionTraceability/index.vue b/src/views/productionManagement/productionTraceability/index.vue
index a850788..53ff013 100644
--- a/src/views/productionManagement/productionTraceability/index.vue
+++ b/src/views/productionManagement/productionTraceability/index.vue
@@ -1,5 +1,7 @@
<template>
<div class="app-container">
+ <PageHeader v-if="showHeader"
+ content="鐢熶骇璁㈠崟" />
<el-card style="height:82vh;overflow:auto;">
<template #header>
<div class="card-header">
@@ -11,7 +13,7 @@
filterable
remote
reserve-keyword
- placeholder="璇疯緭鍏ョ敓浜ц鍗曞彿"
+ placeholder="璇疯緭鍏ョ敓浜ц鍗曞彿鎼滅储"
:loading="npsNoLoading"
:remote-method="handleNpsNoSearch"
@change="handleSearch"
@@ -20,6 +22,18 @@
:key="option.id"
:label="option.npsNo + '-' + option.productName + '-' + option.model"
:value="option.id" />
+ <template #footer>
+ <div v-if="npsNoHasMore"
+ class="select-load-more"
+ @click="loadMoreNpsNo">
+ <span v-if="npsNoLoadingMore">鍔犺浇涓�...</span>
+ <span v-else>鐐瑰嚮鍔犺浇鏇村</span>
+ </div>
+ <div v-else-if="npsNoOptions.length > 0"
+ class="select-load-more no-more">
+ 娌℃湁鏇村浜�
+ </div>
+ </template>
</el-select>
</el-form-item>
</el-form>
@@ -33,7 +47,7 @@
border>
<el-descriptions-item label="鐢熶骇璁㈠崟鍙�">{{ rowData.productionOrderDto?.npsNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="浜у搧鍚嶇О">{{ rowData.productionOrderDto?.productName || '-' }}</el-descriptions-item>
- <el-descriptions-item label="浜у搧瑙勬牸">{{ rowData.productionOrderDto?.model || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="瑙勬牸鍨嬪彿">{{ rowData.productionOrderDto?.model || '-' }}</el-descriptions-item>
<!-- <el-descriptions-item label="鐗╂枡缂栫爜">{{ rowData.productionOrderDto?.materialCode || '-' }}</el-descriptions-item> -->
<el-descriptions-item label="璁″垝鏁伴噺">{{ rowData.productionOrderDto?.quantity || 0 }} <span class="unit">{{ rowData.productionOrderDto?.unit || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="褰撳墠鐘舵��">
@@ -78,11 +92,17 @@
{{ row.workOrder.model || '-' }}
</template>
</el-table-column>
+ <el-table-column label="宸ュ簭"
+ prop="workOrder.operationName"
+ align="center" />
<el-table-column prop="workOrder.planQuantity"
label="闇�姹傛暟閲�"
align="center" />
<el-table-column prop="workOrder.completeQuantity"
label="瀹屾垚鏁伴噺"
+ align="center" />
+ <el-table-column prop="workOrder.scrapQty"
+ label="鎶ュ簾鏁伴噺"
align="center" />
<el-table-column prop="workOrder.completionStatus"
label="瀹屾垚杩涘害"
@@ -152,6 +172,15 @@
{{ parseTime(row.createTime) }}
</template>
</el-table-column>
+ <el-table-column label="宸ユ椂锛坔锛�"
+ prop="workHour"
+ align="center" />
+ <el-table-column label="浜у嚭鏁伴噺"
+ prop="quantity"
+ align="center" />
+ <el-table-column label="鎶ュ簾鏁伴噺"
+ prop="scrapQty"
+ align="center" />
<el-table-column label="鎿嶄綔"
align="center"
width="200">
@@ -267,7 +296,7 @@
</template>
<script setup>
- import { ref, reactive, onMounted } from "vue";
+ import { ref, reactive, onMounted, computed } from "vue";
import { useRoute, useRouter } from "vue-router";
import { ElMessage } from "element-plus";
import { parseTime } from "@/utils/ruoyi";
@@ -280,13 +309,24 @@
const route = useRoute();
const router = useRouter();
+ // 鍒ゆ柇鏄惁鏄剧ず椤靛ご
+ const showHeader = computed(() => {
+ return (
+ Object.keys(route.query).length > 0 || Object.keys(route.params).length > 0
+ );
+ });
+
// 鎼滅储鐩稿叧
const searchForm = reactive({
npsNo: "",
});
const selectedNpsNo = ref(null);
const npsNoLoading = ref(false);
+ const npsNoLoadingMore = ref(false);
const npsNoOptions = ref([]);
+ const npsNoPage = reactive({ current: 1, size: 20, total: 0 });
+ const npsNoHasMore = computed(() => npsNoOptions.value.length < npsNoPage.total);
+ const npsNoSearchKeyword = ref("");
// 璇︽儏鏁版嵁
const rowData = reactive({
@@ -336,21 +376,45 @@
return "#67c23a";
};
- // 妯℃嫙鎼滅储鏂规硶
const handleNpsNoSearch = async query => {
+ npsNoSearchKeyword.value = query || "";
+ npsNoPage.current = 1;
+ npsNoOptions.value = [];
npsNoLoading.value = true;
try {
const res = await productOrderListPage({
npsNo: query || "",
- pageNum: 1,
- pageSize: 50,
+ current: npsNoPage.current,
+ size: npsNoPage.size,
});
- // 鍙傜収 productionOrder/index.vue 鐨勬暟鎹粨鏋� res.data.records
- npsNoOptions.value = res.data?.records || res.rows || [];
+ const records = res.data?.records || [];
+ npsNoOptions.value = records;
+ npsNoPage.total = res.data?.total || 0;
} catch (error) {
console.error(error);
} finally {
npsNoLoading.value = false;
+ }
+ };
+
+ const loadMoreNpsNo = async () => {
+ if (npsNoLoadingMore.value || !npsNoHasMore.value) return;
+ npsNoLoadingMore.value = true;
+ npsNoPage.current++;
+ try {
+ const res = await productOrderListPage({
+ npsNo: npsNoSearchKeyword.value,
+ current: npsNoPage.current,
+ size: npsNoPage.size,
+ });
+ const records = res.data?.records || [];
+ npsNoOptions.value = [...npsNoOptions.value, ...records];
+ npsNoPage.total = res.data?.total || 0;
+ } catch (error) {
+ console.error(error);
+ npsNoPage.current--;
+ } finally {
+ npsNoLoadingMore.value = false;
}
};
@@ -385,6 +449,7 @@
workOrder: row.workOrder || {},
reports: (row.reportList || []).map(r => ({
...r.reportMain,
+ ...(r.reportOutputList[0] || {}),
productionOperationParamList: r.reportParamList || [],
})),
};
@@ -703,4 +768,26 @@
.param-detail-list {
padding: 10px;
}
+
+ .select-load-more {
+ text-align: center;
+ padding: 8px 0;
+ font-size: 13px;
+ color: #409eff;
+ cursor: pointer;
+ border-top: 1px solid #ebeef5;
+
+ &:hover {
+ background-color: #f5f7fa;
+ }
+
+ &.no-more {
+ color: #c0c4cc;
+ cursor: default;
+
+ &:hover {
+ background-color: transparent;
+ }
+ }
+ }
</style>
--
Gitblit v1.9.3