From e93f24d1daf7a2c485033020bd4115bceb70f1c0 Mon Sep 17 00:00:00 2001
From: 1 <1>
Date: 星期一, 01 十二月 2025 17:05:54 +0800
Subject: [PATCH] *

---
 src/main/java/basAgvLocDetl.sql                                         |    8 
 src/main/java/com/zy/asrs/controller/OpenController.java                |   27 +
 src/main/java/com/zy/asrs/entity/param/ArmOKParam.java                  |   10 
 src/main/java/com/zy/asrs/controller/OrderDetlPakinController.java      |    5 
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java             |   36 ++
 src/main/webapp/views/orderCargoGrouping/orderCargoGroupingOperate.html |  872 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/zy/asrs/service/OpenService.java                      |    1 
 7 files changed, 954 insertions(+), 5 deletions(-)

diff --git a/src/main/java/basAgvLocDetl.sql b/src/main/java/basAgvLocDetl.sql
index 46fa58a..ad31936 100644
--- a/src/main/java/basAgvLocDetl.sql
+++ b/src/main/java/basAgvLocDetl.sql
@@ -16,3 +16,11 @@
 insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basAgvLocDetl#btn-edit', N'缂栬緫', '', '3', '2', '1');
 insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basAgvLocDetl#btn-delete', N'鍒犻櫎', '', '3', '3', '1');
 insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basAgvLocDetl#btn-export', N'瀵煎嚭', '', '3', '4', '1');
+
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderCargoGrouping/orderCargoGroupingOperate.html', N'basAgvLocDetl绠$悊', '40524', '2', '0', '1');
+
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderCargoGroupingOperate#view', N'鏌ヨ', '90634', '3', '0', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderCargoGroupingOperate#btn-add', N'鏂板', '90634', '3', '1', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderCargoGroupingOperate#btn-edit', N'缂栬緫', '90634', '3', '2', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderCargoGroupingOperate#btn-delete', N'鍒犻櫎', '90634', '3', '3', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderCargoGroupingOperate#btn-export', N'瀵煎嚭', '90634', '3', '4', '1');
diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index f830bdc..fabb4a2 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -332,6 +332,33 @@
 
 
     /**
+     * 鎵樼洏灏辩华鐘舵�佹煡璇�
+     */
+    @PostMapping("/arm/task/loc_status")
+    @AppAuth(memo = "鎵樼洏灏辩华鐘舵�佹煡璇�")
+    public synchronized R TaskArmLocStatus(@RequestHeader(required = false) String appkey,
+                                                 @RequestBody ArmOKParam param,
+                                                 HttpServletRequest request) {
+        auth(appkey, param, request);
+        if (Cools.isEmpty(param)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        if (Cools.isEmpty(param.getArmNo())) {
+            return R.error("鏈烘鑷傜紪鍙穂armNo]涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(param.getStaNo())) {
+            return R.error("绔欑偣缂栧彿[staNo]涓嶈兘涓虹┖");
+        }
+
+        boolean taskArmLocStatus = openService.TaskArmLocStatus(param);
+        if (taskArmLocStatus){
+            return new R(200,"OK").add(true);
+        }
+        return R.error("涓嶇鍚�").add(false);
+    }
+
+
+    /**
      * 寮傚父涓婃姤
      */
     @PostMapping("/armAbnormalOperation")
diff --git a/src/main/java/com/zy/asrs/controller/OrderDetlPakinController.java b/src/main/java/com/zy/asrs/controller/OrderDetlPakinController.java
index 21215b6..403fca0 100644
--- a/src/main/java/com/zy/asrs/controller/OrderDetlPakinController.java
+++ b/src/main/java/com/zy/asrs/controller/OrderDetlPakinController.java
@@ -15,10 +15,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @RestController
 @RequestMapping("order/pakin")
diff --git a/src/main/java/com/zy/asrs/entity/param/ArmOKParam.java b/src/main/java/com/zy/asrs/entity/param/ArmOKParam.java
new file mode 100644
index 0000000..8a43042
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/ArmOKParam.java
@@ -0,0 +1,10 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+@Data
+public class ArmOKParam {
+    Integer armNo; //浠诲姟鍙�
+    Integer staNo; //绔欑偣缂栧彿
+
+}
diff --git a/src/main/java/com/zy/asrs/service/OpenService.java b/src/main/java/com/zy/asrs/service/OpenService.java
index 55c7660..5b9467a 100644
--- a/src/main/java/com/zy/asrs/service/OpenService.java
+++ b/src/main/java/com/zy/asrs/service/OpenService.java
@@ -47,6 +47,7 @@
     void taskArmReport(TaskArmReportParam param);
     void taskArmCycleResult(TaskArmCycleResultParam param);
     void taskArmWorkspaceStatus(TaskArmWorkspaceStatusParam param);
+    boolean TaskArmLocStatus(ArmOKParam param);
     void taskArmWorkOrderStatus(OrderArmEndParam param);
     boolean TaskArmWorkOrderSign(OrderArmEndParam param);
     boolean TaskAgvReport(TaskAgvReportParam param);
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index ea7ac92..1ace7d3 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -721,6 +721,40 @@
 
     @Override
     @Transactional
+    public boolean TaskArmLocStatus(ArmOKParam param) {
+        BasArm basArm = basArmService.selectOne(new EntityWrapper<BasArm>()
+                .eq("arm_no", param.getArmNo())
+                .eq("sta_no", param.getStaNo())
+                .eq("status", 1)
+        );
+        if (Cools.isEmpty(basArm)){
+            log.error("鏈烘鑷傞厤缃紓甯革紝鏌ヨ涓嶅埌鏈烘鑷傛暟鎹紒锛侊紒"+ JSON.toJSONString(param));
+            return false;
+        }
+        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", basArm.getStaNoSou()));
+        if (Cools.isEmpty(locMast)){
+            log.error("鏌ヨ涓嶅埌locMast鏁版嵁锛侊紒锛�"+ JSON.toJSONString(param));
+            return false;
+        }
+        if (locMast.getLocSts().equals("D")){
+            BasArmMast basArmMast = basArmMastService.selectOne(
+                    new EntityWrapper<BasArmMast>()
+                            .eq("sta_no", basArm.getStaNoSou())
+                            .eq("arm_no", param.getArmNo())
+                            .eq("status", 3)
+            );
+            if (Cools.isEmpty(basArmMast)){
+                return true;
+            }
+            log.error("鏈煡璇㈠埌鐩稿叧鏈烘鑷傛媶鐮佸灈浠诲姟锛侊紒锛�"+ JSON.toJSONString(param));
+        } else {
+            log.error("locMast鐘舵�佷笉涓篋锛侊紒锛�"+ JSON.toJSONString(param));
+        }
+        return false;
+    }
+
+    @Override
+    @Transactional
     public void taskArmWorkspaceStatus(TaskArmWorkspaceStatusParam param) {
         BasArm basArm = basArmService.selectOne(new EntityWrapper<BasArm>()
                 .eq("arm_no", param.getArm_no())
@@ -999,7 +1033,7 @@
             }
             return false;
         }else {
-            if (basAgvMast.getIoType()==0 && basAgvMast.getStaNo()==2034){
+            if (basAgvMast.getIoType()==0 && (basAgvMast.getStaNo()==2034 || basAgvMast.getStaNo()==4003)){
                 AgvBindCtnrAndBinTwoParam agvBindCtnrAndBinTwoParam = new AgvBindCtnrAndBinTwoParam();
                 agvBindCtnrAndBinTwoParam.setReqCode(String.valueOf(snowflakeIdWorker.nextId()));
                 agvBindCtnrAndBinTwoParam.setPodcode(basAgvMast.getBarcode());
diff --git a/src/main/webapp/views/orderCargoGrouping/orderCargoGroupingOperate.html b/src/main/webapp/views/orderCargoGrouping/orderCargoGroupingOperate.html
new file mode 100644
index 0000000..cb1107b
--- /dev/null
+++ b/src/main/webapp/views/orderCargoGrouping/orderCargoGroupingOperate.html
@@ -0,0 +1,872 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="UTF-8">
+	<title>璁㈠崟鍏ュ簱鏁伴噺淇敼</title>
+	<link rel="stylesheet" href="../../static/css/element.css">
+	<link rel="stylesheet" href="../../static/css/element-ui.css">
+	<link rel="icon" href="../../static/images/favicon.ico" type="image/x-icon">
+	<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+	<script type="text/javascript" src="../../static/js/common.js"></script>
+	<script type="text/javascript" src="../../static/js/vue.min.js"></script>
+	<script type="text/javascript" src="../../static/js/element.js"></script>
+	<style>
+		.container {
+			padding: 20px;
+			width: 100%;
+			max-width: 1200px;
+			margin: 0 auto;
+		}
+		.table-container {
+			margin-bottom: 20px;
+			box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+			border-radius: 4px;
+			overflow: hidden;
+		}
+		.detail-dialog .el-dialog__body {
+			padding: 20px;
+		}
+		.pagination-container {
+			margin-top: 15px;
+			text-align: right;
+		}
+		.operation-cell {
+			display: flex;
+			justify-content: center;
+			gap: 8px;
+		}
+		/* 鎼滅储鏍忔牱寮� */
+		.search-container {
+			background: #f5f7fa;
+			padding: 15px;
+			margin-bottom: 20px;
+			border-radius: 4px;
+			box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+		}
+		.search-form {
+			display: flex;
+			flex-wrap: wrap;
+			align-items: center;
+			gap: 15px;
+		}
+		.search-item {
+			display: flex;
+			align-items: center;
+			margin-right: 15px;
+		}
+		.search-label {
+			min-width: 80px;
+			text-align: right;
+			margin-right: 10px;
+			font-size: 14px;
+			color: #606266;
+		}
+		.search-actions {
+			display: flex;
+			gap: 10px;
+			margin-left: auto;
+		}
+		/* 纭涓婃姤鎸夐挳鏍峰紡 */
+		.confirm-report-btn {
+			border: 2px solid #F56C6C;
+			color: #F56C6C;
+			font-weight: bold;
+			background-color: transparent;
+			padding: 10px 20px;
+		}
+		.confirm-report-btn:hover {
+			background-color: #F56C6C;
+			color: white;
+		}
+		.dialog-footer {
+			display: flex;
+			justify-content: flex-end;
+			align-items: center;
+			gap: 10px;
+			margin-top: 20px;
+		}
+		/* 浜屾纭瀵硅瘽妗嗘牱寮� */
+		.confirm-dialog .el-message-box__message {
+			text-align: center;
+			font-size: 16px;
+			line-height: 1.5;
+		}
+		.confirm-dialog .el-message-box__status {
+			font-size: 24px !important;
+		}
+	</style>
+</head>
+<body>
+<div id="app" style="display: flex;justify-content: center;flex-wrap: wrap;">
+	<!-- 鎼滅储鏍� -->
+	<div class="search-container" style="width: 100%;">
+		<el-form :inline="true" class="search-form">
+			<div class="search-item">
+				<span class="search-label">缁勮揣鍗曞彿:</span>
+				<el-input
+						v-model="searchForm.orderNo"
+						placeholder="璇疯緭鍏ョ粍璐у崟鍙�"
+						clearable
+						style="width: 150px;"
+						@keyup.enter.native="handleSearch"
+				></el-input>
+			</div>
+			<div class="search-item">
+				<span class="search-label">瀹㈡埛鍚嶇О:</span>
+				<el-input
+						v-model="searchForm.cstmrName"
+						placeholder="璇疯緭鍏ュ鎴峰悕绉�"
+						clearable
+						style="width: 180px;"
+						@keyup.enter.native="handleSearch"
+				></el-input>
+			</div>
+			<div class="search-item">
+				<span class="search-label">鐘舵��:</span>
+				<el-select
+						v-model="searchForm.settle"
+						placeholder="璇烽�夋嫨鐘舵��"
+						clearable
+						style="width: 150px;"
+				>
+					<el-option label="鍒濆鍖�" value="0"></el-option>
+					<el-option label="寰呭鐞�" value="1"></el-option>
+					<el-option label="浣滀笟涓�" value="2"></el-option>
+					<el-option label="宸插彇娑�" value="3"></el-option>
+					<el-option label="宸插畬鎴�" value="4"></el-option>
+					<el-option label="鍑嗗鍙栨秷" value="5"></el-option>
+					<el-option label="涓婃姤瀹屾垚" value="6"></el-option>
+					<el-option label="鏁版嵁寮傚父" value="7"></el-option>
+					<el-option label="瀹℃牳瀹屾垚" value="8"></el-option>
+					<el-option label="鎻愪氦瀹屾垚" value="9"></el-option>
+					<el-option label="淇濆瓨瀹屾垚" value="10"></el-option>
+					<el-option label="涓婃姤瀹屾垚鏈畬缁�" value="98"></el-option>
+					<el-option label="閲嶆柊涓嬪彂" value="99"></el-option>
+				</el-select>
+			</div>
+			<div class="search-actions">
+				<el-button type="primary" icon="el-icon-search" @click="handleSearch">鎼滅储</el-button>
+				<el-button icon="el-icon-refresh" @click="handleReset">閲嶇疆</el-button>
+			</div>
+		</el-form>
+	</div>
+
+	<!-- 涓昏〃A -->
+	<div class="table-container" style="width: 100%;">
+		<el-table
+				border
+				ref="mainTable"
+				:data="tableDataA"
+				highlight-current-row
+				style="width: 100%"
+				v-loading="loading"
+				@sort-change="handleSortChange">
+			<el-table-column prop="orderNo" label="璁㈠崟鍙�" width="240" align="center" sortable="custom"></el-table-column>
+			<el-table-column prop="cstmrName" label="璐т富" min-width="120" align="center"></el-table-column>
+<!--			<el-table-column prop="orderCount" label="缁勮揣鍗曟暟" width="80" align="center"></el-table-column>-->
+			<el-table-column prop="settle$" label="鐘舵��" min-width="100" align="center" :formatter="formatStatus"></el-table-column>
+			<el-table-column prop="createTime" label="鏃ユ湡" min-width="100" align="center" :formatter="formatDateColumn"></el-table-column>
+			<el-table-column prop="updateTime" label="鏇存柊鏃ユ湡" min-width="100" align="center" :formatter="formatDateColumn"></el-table-column>
+			<el-table-column label="鎿嶄綔" width="150" align="center" fixed="right">
+				<template slot-scope="scope">
+					<div class="operation-cell">
+						<el-button
+								type="primary"
+								size="mini"
+								@click="showDetail(scope.row)">
+							鏄庣粏鏌ョ湅
+						</el-button>
+					</div>
+				</template>
+			</el-table-column>
+		</el-table>
+
+		<!-- 鍒嗛〉鎺т欢 -->
+		<div class="pagination-container">
+			<el-pagination
+					@size-change="handleSizeChange"
+					@current-change="handleCurrentChange"
+					:current-page="currentPage"
+					:page-sizes="[10, 20, 50, 100]"
+					:page-size="pageSize"
+					layout="total, sizes, prev, pager, next, jumper"
+					:total="total">
+			</el-pagination>
+		</div>
+	</div>
+
+	<!-- 瀛愯〃B璇︽儏寮圭獥 -->
+	<el-dialog
+			title="鏄庣粏"
+			:visible.sync="detailDialogVisible"
+			width="80%"
+			class="detail-dialog"
+			@close="closeDetailDialog">
+		<div v-if="currentRow">
+			<h3>缁勮揣鍗曚富琛� (缁勮揣鍗曞彿: {{ currentRow.itemName }})</h3>
+			<el-descriptions :column="2" border>
+				<el-descriptions-item label="瀹㈡埛鍚嶇О">{{ currentRow.cstmrName }}</el-descriptions-item>
+				<el-descriptions-item label="鐘舵��">{{ formatStatus(currentRow)}}</el-descriptions-item>
+				<el-descriptions-item label="鍒涘缓鏃堕棿">{{ formatDate(currentRow.createTime) }}</el-descriptions-item>
+				<el-descriptions-item label="澶囨敞">{{ currentRow.memo || '鏃�' }}</el-descriptions-item>
+			</el-descriptions>
+
+			<h3 style="margin-top: 20px;">缁勮揣鍗曟槑缁�</h3>
+			<el-table
+					border
+					:data="tableDataB"
+					style="width: 100%"
+					v-loading="detailLoading">
+				<el-table-column prop="matnr" label="鍟嗗搧缂栧彿" min-width="80" align="center"></el-table-column>
+				<el-table-column prop="maktx" label="鍚嶇О" min-width="80" align="center"></el-table-column>
+				<el-table-column prop="standby1" label="瀹㈡埛PO" min-width="80" align="center" ></el-table-column>
+				<el-table-column prop="standby2" label="UPC" min-width="80" align="center" ></el-table-column>
+				<el-table-column prop="standby3" label="瀹㈡埛SKU" min-width="80" align="center" ></el-table-column>
+<!--				<el-table-column prop="boxType1" label="璐т富" min-width="80" align="center" ></el-table-column>-->
+<!--				<el-table-column prop="boxType2" label="璐т富" min-width="80" align="center" ></el-table-column>-->
+				<el-table-column prop="boxType3" label="閲囪喘鍗曞彿" min-width="80" align="center" ></el-table-column>
+				<el-table-column prop="anfme" label="鏁伴噺" min-width="100" align="center"></el-table-column>
+				<el-table-column prop="status" label="鐘舵��" min-width="100" align="center" :formatter="formatStatusB"></el-table-column>
+				<!-- 鏂板鎿嶄綔鍒楋紝鏍规嵁status鍊兼帶鍒舵樉绀� -->
+				<el-table-column label="鏄惁涓婃姤" width="120" align="center" fixed="right">
+					<template slot-scope="scope">
+						<div class="operation-cell">
+							<el-button v-if="scope.row.status === 2"
+									   type="primary"
+									   size="mini"
+									   @click="handleModifyN(scope.row)">
+								鍚�
+							</el-button>
+							<el-button v-if="scope.row.status === 1"
+									   type="primary"
+									   size="mini"
+									   @click="handleModifyY(scope.row)">
+								鏄�
+							</el-button>
+						</div>
+					</template>
+				</el-table-column>
+			</el-table>
+
+			<!-- 瀛愯〃鍒嗛〉 -->
+			<div class="pagination-container">
+				<el-pagination
+						@size-change="handleDetailSizeChange"
+						@current-change="handleDetailCurrentChange"
+						:current-page="detailCurrentPage"
+						:page-sizes="[5, 10, 20]"
+						:page-size="detailPageSize"
+						layout="total, sizes, prev, pager, next, jumper"
+						:total="detailTotal">
+				</el-pagination>
+			</div>
+		</div>
+
+		<div slot="footer" class="dialog-footer">
+			<el-button
+					class="confirm-report-btn"
+					@click="showConfirmDialog"
+					:loading="reportLoading">
+				<!-- 鐩存帴鍦ㄦā鏉夸腑鍒ゆ柇 -->
+				{{ settleA === 17 ? '鍐嶆涓婃姤' :  '纭涓婃姤' }}
+			</el-button>
+			<el-button @click="closeDetailDialog">鍏抽棴</el-button>
+		</div>
+	</el-dialog>
+</div>
+
+<script>
+	var app = new Vue({
+		el: '#app',
+		data: {
+			// 鎼滅储琛ㄥ崟
+			searchForm: {
+				item_name: '',
+				cstmr_name: '',
+				settle: '',
+				order_no: ''
+			},
+			// 鎺掑簭鐩稿叧
+			orderByField: '',
+			orderByType: 'asc',
+			// 涓昏〃A鏁版嵁
+			tableDataA: [],
+			// 瀛愯〃B鏁版嵁
+			tableDataB: [],
+			// 鍒嗛〉鐩稿叧
+			currentPage: 1,
+			pageSize: 10,
+			total: 0,
+			// 璇︽儏寮圭獥鎺у埗
+			detailDialogVisible: false,
+			currentRow: null,
+			// 瀛愯〃鍒嗛〉
+			detailCurrentPage: 1,
+			settleA: 1,
+			detailPageSize: 5,
+			detailTotal: 0,
+			// 鍔犺浇鐘舵��
+			loading: false,
+			detailLoading: false,
+			reportLoading: false
+		},
+		created() {
+			this.init();
+		},
+		methods: {
+			init() {
+				this.getTableDataA();
+
+				// 姣�5绉掕嚜鍔ㄥ埛鏂版暟鎹�
+				setInterval(() => {
+					this.getTableDataA();
+				}, 10000);
+			},
+
+			// 鑾峰彇涓昏〃A鏁版嵁 - 浣跨敤鏂扮殑API
+			getTableDataA() {
+				let that = this;
+				that.loading = true;
+
+				// 鏋勫缓璇锋眰鍙傛暟
+				let params = {
+					curr: that.currentPage,
+					limit: that.pageSize
+				};
+
+				// 娣诲姞鎺掑簭鍙傛暟
+				if (that.orderByField) {
+					params.orderByField = that.orderByField;
+					params.orderByType = that.orderByType;
+				}
+
+				// 娣诲姞鎼滅储鍙傛暟
+				Object.keys(that.searchForm).forEach(key => {
+					if (that.searchForm[key] !== '') {
+						if (key === 'orderNo'){
+							params['order_no'] = that.searchForm[key];
+						} else if (key === 'itemName'){
+							params['item_name'] = that.searchForm[key];
+						} else if (key === 'cstmrName'){
+							params['cstmr_name'] = that.searchForm[key];
+						} else {
+							params[key] = that.searchForm[key];
+						}
+					}
+				});
+
+				$.ajax({
+					url: baseUrl + "/order/pakin/order/head/page/auth",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: params,
+					dataType: 'json',
+					method: 'get',
+					success: function (res) {
+						if (res.code === 200 || res.success) {
+							that.tableDataA = res.data.records || [];
+							that.total = res.data.total || 0;
+						} else {
+							that.$message.error(res.message || '鑾峰彇鏁版嵁澶辫触');
+							that.tableDataA = [];
+							that.total = 0;
+						}
+						that.loading = false;
+					},
+					error: function(xhr, status, error) {
+						that.loading = false;
+						that.$message.error('缃戠粶璇锋眰澶辫触');
+						console.error('API璋冪敤澶辫触:', error);
+						// 妯℃嫙鏁版嵁锛堝疄闄呴」鐩腑搴斿垹闄わ級
+						that.mockTableAData();
+					}
+				});
+			},
+
+			// 鑾峰彇瀛愯〃B鏁版嵁锛堟牴鎹疄闄呬笟鍔¤皟鏁达級
+			getTableDataB(orderNo) {
+				let that = this;
+				that.detailLoading = true;
+
+				// 鏋勫缓璇锋眰鍙傛暟
+				let params = {
+					order_no: orderNo,
+					curr: that.detailCurrentPage,
+					limit: that.detailPageSize
+				};
+
+				// 妯℃嫙API璋冪敤 - 鏍规嵁瀹為檯涓氬姟璋冩暣API鍦板潃
+				$.ajax({
+					url: baseUrl + "/order/pakin/orderDetl/list/auth",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: params,
+					dataType: 'json',
+					contentType: 'application/json;charset=UTF-8',
+					method: 'get',
+					success: function (res) {
+						if (res.code === 200 || res.success) {
+							that.tableDataB = res.data.records || [];
+							that.detailTotal = res.data.total || 0;
+						} else {
+							that.$message.error(res.message || '鑾峰彇鏁版嵁澶辫触');
+							that.tableDataB = [];
+							that.detailTotal = 0;
+						}
+						that.detailLoading = false;
+					},
+					error: function() {
+						that.detailLoading = false;
+						// 瀹為檯椤圭洰涓簲浣跨敤鐪熷疄API锛岃繖閲屼娇鐢ㄦā鎷熸暟鎹�
+						that.mockTableBData(itemName);
+					}
+				});
+			},
+
+			// 澶勭悊淇敼鎸夐挳鐐瑰嚮浜嬩欢
+			handleModifyY(row) {
+				if (!this.currentRow) {
+					this.$message.error('娌℃湁閫夋嫨涓昏〃鏁版嵁');
+					return;
+				}
+
+				const groupOrderNo = this.currentRow.itemName; // 缁勮揣鍗曞彿
+				const batch = row.batch; // 绠卞彿
+				const status = 2; // 绠卞彿
+
+				this.$confirm(
+						`纭畾灏嗙粍璐у崟鍙凤細 <strong style="color: #409EFF;">${groupOrderNo}</strong> 涓殑绠卞彿锛� <strong style="color: #409EFF;">${batch}</strong> 娣诲姞鍒颁笂鎶ュ垪鍚楋紵`,
+						'纭淇敼',
+						{
+							confirmButtonText: '纭淇敼',
+							cancelButtonText: '鍙栨秷',
+							type: 'warning',
+							dangerouslyUseHTMLString: true
+						}
+				).then(() => {
+					this.submitModify(groupOrderNo, batch, status);
+				}).catch(() => {
+					this.$message({
+						type: 'info',
+						message: '宸插彇娑堜慨鏀�'
+					});
+				});
+			},
+
+			// 澶勭悊淇敼鎸夐挳鐐瑰嚮浜嬩欢
+			handleModifyN(row) {
+				if (!this.currentRow) {
+					this.$message.error('娌℃湁閫夋嫨涓昏〃鏁版嵁');
+					return;
+				}
+
+				const groupOrderNo = this.currentRow.itemName; // 缁勮揣鍗曞彿
+				const batch = row.batch; // 绠卞彿
+				const status = 1; // 绠卞彿
+
+				this.$confirm(
+						`纭畾灏嗙粍璐у崟鍙凤細 <strong style="color: #409EFF;">${groupOrderNo}</strong> 銆佺鍙凤細 <strong style="color: #409EFF;">${batch}</strong> 娣诲姞鍒颁笂鎶ュ垪鍚楋紵`,
+						'纭淇敼',
+						{
+							confirmButtonText: '纭淇敼',
+							cancelButtonText: '鍙栨秷',
+							type: 'warning',
+							dangerouslyUseHTMLString: true
+						}
+				).then(() => {
+					this.submitModify(groupOrderNo, batch, status);
+				}).catch(() => {
+					this.$message({
+						type: 'info',
+						message: '宸插彇娑堜慨鏀�'
+					});
+				});
+			},
+
+			// 鎻愪氦淇敼鍒板悗鍙�
+			submitModify(groupOrderNo, batch, status) {
+				// 鏄剧ず鍔犺浇鐘舵��
+				const loadingInstance = this.$loading({
+					lock: true,
+					text: '鎻愪氦淇敼涓�...',
+					spinner: 'el-icon-loading',
+					background: 'rgba(0, 0, 0, 0.7)'
+				});
+
+				$.ajax({
+					url: baseUrl + "/order/pakout/orderDetl/batch/report/auth",
+					headers: {'token': localStorage.getItem('token')},
+					data: top.reObject({
+						item_name: groupOrderNo, // 缁勮揣鍗曞彿
+						batch: batch, // 绠卞彿
+						status: status // 绠卞彿
+					}),
+					method: 'POST',
+					success: (res) => {
+						loadingInstance.close();
+
+						if (res.code === 200 || res.success) {
+							this.$message({
+								message: `淇敼鎴愬姛锛佺粍璐у崟鍙�: ${groupOrderNo}, 绠卞彿: ${batch}`,
+								type: 'success',
+								duration: 3000
+							});
+
+							this.getTableDataB(groupOrderNo);
+						} else {
+							this.$message.error(res.message || '淇敼澶辫触');
+						}
+					},
+					error: (error) => {
+						loadingInstance.close();
+						console.error('淇敼澶辫触:', error);
+						this.$message.error('淇敼澶辫触锛岃妫�鏌ョ綉缁滆繛鎺�');
+					}
+				});
+			},
+
+			// 琛ㄦ牸鎺掑簭鍙樺寲
+			handleSortChange(column) {
+				if (column.prop) {
+					this.orderByField = column.prop;
+					this.orderByType = column.order === 'ascending' ? 'asc' : 'desc';
+				} else {
+					this.orderByField = '';
+					this.orderByType = 'asc';
+				}
+				this.currentPage = 1;
+				this.getTableDataA();
+			},
+
+			showConfirmDialog() {
+				if (!this.currentRow) {
+					this.$message.error('娌℃湁閫夋嫨瑕佷笂鎶ョ殑鏁版嵁');
+					return;
+				}
+
+				const groupOrderNo = this.currentRow.itemName;
+
+				this.$confirm(
+						`鏄惁纭寮�濮嬩笂鎶ョ粍璐у崟鍙� <strong style="color: #F56C6C; font-size: 16px;">${groupOrderNo}</strong>?<br/><br/>灏嗙敓鎴愬疄闄呯粍璐у崟锛屽崟涓�缁勮揣鍗曞彿鍙兘鎿嶄綔涓�娆�!!!`,
+						'纭涓婃姤',
+						{
+							confirmButtonText: '纭涓婃姤',
+							cancelButtonText: '鍙栨秷',
+							type: 'warning',
+							dangerouslyUseHTMLString: true,
+							customClass: 'confirm-dialog',
+							confirmButtonClass: 'confirm-report-btn',
+							beforeClose: (action, instance, done) => {
+								if (action === 'confirm') {
+									instance.confirmButtonLoading = true;
+									this.confirmReport(groupOrderNo, done);
+								} else {
+									done();
+								}
+							}
+						}
+				).then(() => {
+					// 纭涓婃姤鍚庣殑澶勭悊鍦╞eforeClose涓畬鎴�
+				}).catch(() => {
+					this.$message({
+						type: 'info',
+						message: '宸插彇娑堟搷浣�'
+					});
+				});
+			},
+
+			// 纭涓婃姤
+			confirmReport(groupOrderNo, done) {
+				this.reportLoading = true;
+
+				// 璋冪敤鍚庡彴API涓婃姤鏁版嵁
+				$.ajax({
+					url: baseUrl + "/order/pakout/actual/shipment/order/report/auth",
+					headers: {'token': localStorage.getItem('token')},
+					data: {
+						itemName: groupOrderNo // 浼犻�掔粍璐у崟鍙�
+					},
+					method: 'POST',
+					success: (res) => {
+						this.reportLoading = false;
+						if (typeof done === 'function') {
+							done();
+						}
+						if (res.code === 200 || res.success) {
+							this.$message({
+								message: `缁勮揣鍗曞彿 ${groupOrderNo} 涓婃姤鎴愬姛`,
+								type: 'success',
+								duration: 3000
+							});
+							// 涓婃姤鎴愬姛鍚庡叧闂脊绐楀苟鍒锋柊鏁版嵁
+							setTimeout(() => {
+								this.closeDetailDialog();
+								this.getTableDataA(); // 鍒锋柊涓昏〃鏁版嵁
+							}, 1500);
+						} else {
+							this.$message.error(res.message || '涓婃姤澶辫触');
+						}
+					},
+					error: (error) => {
+						this.reportLoading = false;
+						if (typeof done === 'function') {
+							done();
+						}
+						console.error('涓婃姤澶辫触:', error);
+						this.$message.error('涓婃姤澶辫触锛岃妫�鏌ョ綉缁滆繛鎺�');
+					}
+				});
+			},
+
+			// 鎼滅储澶勭悊
+			handleSearch() {
+				this.currentPage = 1;
+				this.orderByField = '';
+				this.orderByType = 'asc';
+				this.getTableDataA();
+			},
+
+			// 閲嶇疆鎼滅储鏉′欢
+			handleReset() {
+				this.searchForm = {
+					item_name: '',
+					cstmr_name: '',
+					settle: '',
+					order_no: ''
+				};
+				this.orderByField = '';
+				this.orderByType = 'asc';
+				this.currentPage = 1;
+				this.getTableDataA();
+			},
+
+			// 鏄剧ず璇︽儏寮圭獥
+			showDetail(row) {
+				this.currentRow = row;
+				this.detailDialogVisible = true;
+				this.detailCurrentPage = 1;
+				this.settleA = row.settle;
+				this.getTableDataB(row.orderNo);
+			},
+
+			// 鍏抽棴璇︽儏寮圭獥
+			closeDetailDialog() {
+				this.detailDialogVisible = false;
+				this.currentRow = null;
+				this.tableDataB = [];
+				this.reportLoading = false;
+			},
+
+			// 涓昏〃鍒嗛〉澶у皬鏀瑰彉
+			handleSizeChange(val) {
+				this.pageSize = val;
+				this.currentPage = 1;
+				this.getTableDataA();
+			},
+
+			// 涓昏〃椤电爜鏀瑰彉
+			handleCurrentChange(val) {
+				this.currentPage = val;
+				this.getTableDataA();
+			},
+
+			// 瀛愯〃鍒嗛〉澶у皬鏀瑰彉
+			handleDetailSizeChange(val) {
+				this.detailPageSize = val;
+				this.detailCurrentPage = 1;
+				if (this.currentRow) {
+					this.getTableDataB(this.currentRow.itemName);
+				}
+			},
+
+			// 瀛愯〃椤电爜鏀瑰彉
+			handleDetailCurrentChange(val) {
+				this.detailCurrentPage = val;
+				if (this.currentRow) {
+					this.getTableDataB(this.currentRow.itemName);
+				}
+			},
+
+			// 鏍煎紡鍖栫姸鎬佹樉绀�
+			formatStatus(row) {
+				if (row.settle === 10) {
+					return '寰呭鐞�';
+				} else if (row.settle === 11) {
+					return '妫�楠屼腑';
+				} else if (row.settle === 12) {
+					return '鍑哄簱涓�';
+				} else if (row.settle === 13) {
+					return '瀛樺湪涓嶅悎鏍�';
+				} else if (row.settle === 15) {
+					return '寰呬笂鎶�';
+				} else if (row.settle === 16) {
+					return '涓婃姤瀹屾垚';
+				} else if (row.settle === 17) {
+					return '涓婃姤澶辫触';
+				} else if (row.settle === 98) {
+					return '寮傚父';
+				} else if (row.settle === 99) {
+					return '搴熷純';
+				} else {
+					return row.settle || '鏈煡';
+				}
+			},
+
+			// 鏍煎紡鍖栫姸鎬佹樉绀�
+			formatStatusB(row) {
+				if (row.status === 0) {
+					return '寮傚父';
+				} else if (row.status === 1) {
+					return '涓嶄笂鎶�';
+				} else if (row.status === 2) {
+					return '寰呬笂鎶�';
+				} else if (row.status === 3) {
+					return '宸蹭笂鎶�';
+				} else {
+					return row.status || '鏈煡';
+				}
+			},
+
+			// 鏍煎紡鍖栭噾棰濇樉绀�
+			formatCurrency(row) {
+				if (row.totalFee) {
+					return '楼' + parseFloat(row.totalFee).toFixed(2);
+				}
+				return '楼0.00';
+			},
+
+			// 妯℃嫙涓昏〃鏁版嵁 - 瀹為檯椤圭洰涓簲鍒犻櫎
+			mockTableAData() {
+				this.tableDataA = [
+					{
+						itemName: 'zh20251110',
+						orderNo: 'ORDER2024001',
+						cstmrName: 'zh20251110',
+						settle: 10,
+						totalFee: 1500.00,
+						createTime: '2025-11-10T09:50:16.343+0000',
+						memo: '娴嬭瘯鏁版嵁'
+					}
+				];
+				this.total = 1;
+				this.loading = false;
+			},
+
+			// 妯℃嫙瀛愯〃鏁版嵁 - 瀹為檯椤圭洰涓簲鍒犻櫎
+			mockTableBData(itemName) {
+				this.tableDataB = [
+					{
+						matnr: '6渭m脳436mm',
+						batch: 'L241034114',
+						model: '24092501D01A6',
+						origin: '1',
+						danger: '1',
+						memo: '',
+						status: 1 // 鐘舵�佷负1锛屼細鏄剧ず淇敼鎸夐挳
+					}
+				];
+				this.detailTotal = 1;
+				this.detailLoading = false;
+			},
+
+			// 涓鸿〃鏍煎垪娣诲姞鏍煎紡鍖栨柟娉�
+			formatDateColumn(row, column, cellValue) {
+				return this.formatDate(cellValue);
+			},
+
+
+
+			// // 鏍煎紡鍖栨棩鏈熸樉绀�
+			// formatDate(dateStr) {
+			// 	if (!dateStr) return '';
+			// 	// 绠�鍗曠殑鏃ユ湡鏍煎紡鍖栵紝鍙互鏍规嵁瀹為檯鏍煎紡璋冩暣
+			// 	return dateStr;
+			// },
+
+			// 鍦╒ue瀹炰緥鐨刴ethods涓坊鍔犳垨淇敼formatDate鏂规硶
+			formatDate(dateStr) {
+				if (!dateStr) return '';
+
+				try {
+					// 鍒涘缓Date瀵硅薄
+					const date = new Date(dateStr);
+
+					// 妫�鏌ユ棩鏈熸槸鍚︽湁鏁�
+					if (isNaN(date.getTime())) {
+						return dateStr; // 濡傛灉瑙f瀽澶辫触锛岃繑鍥炲師瀛楃涓�
+					}
+
+					// 鑾峰彇鍚勪釜鏃堕棿缁勪欢
+					const year = date.getFullYear();
+					const month = String(date.getMonth() + 1).padStart(2, '0');
+					const day = String(date.getDate()).padStart(2, '0');
+					const hours = String(date.getHours()).padStart(2, '0');
+					const minutes = String(date.getMinutes()).padStart(2, '0');
+					const seconds = String(date.getSeconds()).padStart(2, '0');
+
+					// 杩斿洖鏍煎紡鍖栧悗鐨勫瓧绗︿覆锛歒YYY-MM-DD HH:mm:ss
+					return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+				} catch (error) {
+					console.error('鏃ユ湡鏍煎紡鍖栭敊璇�:', error);
+					return dateStr; // 濡傛灉鍑洪敊锛岃繑鍥炲師瀛楃涓�
+				}
+			},
+
+//鏈湴鏃跺尯鐨勬椂闂�
+			formatDate2(dateStr) {
+				if (!dateStr) return '';
+
+				try {
+					const date = new Date(dateStr);
+
+					if (isNaN(date.getTime())) {
+						return dateStr;
+					}
+
+					// 浣跨敤鏈湴鏃跺尯
+					const year = date.getFullYear();
+					const month = String(date.getMonth() + 1).padStart(2, '0');
+					const day = String(date.getDate()).padStart(2, '0');
+					const hours = String(date.getHours()).padStart(2, '0');
+					const minutes = String(date.getMinutes()).padStart(2, '0');
+					const seconds = String(date.getSeconds()).padStart(2, '0');
+
+					return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+				} catch (error) {
+					console.error('鏃ユ湡鏍煎紡鍖栭敊璇�:', error);
+					return dateStr;
+				}
+			},
+			//淇濇寔UTC鏃堕棿浣嗚浆鎹负鏇存槗璇荤殑鏍煎紡
+			formatDate3(dateStr) {
+				if (!dateStr) return '';
+
+				try {
+					// 鐩存帴瑙f瀽瀛楃涓诧紝涓嶈浆鎹㈡椂鍖�
+					const date = new Date(dateStr);
+
+					if (isNaN(date.getTime())) {
+						return dateStr;
+					}
+
+					// 浣跨敤UTC鏃堕棿缁勪欢
+					const year = date.getUTCFullYear();
+					const month = String(date.getUTCMonth() + 1).padStart(2, '0');
+					const day = String(date.getUTCDate()).padStart(2, '0');
+					const hours = String(date.getUTCHours()).padStart(2, '0');
+					const minutes = String(date.getUTCMinutes()).padStart(2, '0');
+					const seconds = String(date.getUTCSeconds()).padStart(2, '0');
+
+					return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+				} catch (error) {
+					console.error('鏃ユ湡鏍煎紡鍖栭敊璇�:', error);
+					return dateStr;
+				}
+			}
+		}
+	});
+</script>
+</body>
+</html>
\ No newline at end of file

--
Gitblit v1.9.1