From a32219b5f00c173e04bf20ff0b1cbb05fb15c28f Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 27 十月 2025 21:08:53 +0800
Subject: [PATCH] 场地管理接口联调

---
 cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js |  238 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 209 insertions(+), 29 deletions(-)

diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js b/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js
index e3bedca..3a9ba36 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js
@@ -867,13 +867,12 @@
  * 下一步:切换到价格配置
  */
 TSite.nextStep = function() {
-    var siteName = $("#name").val();
-    
-    // 验证场地名称
-    if (!siteName) {
-        Feng.error("请输入场地名称!");
+    // 校验步骤一的必填字段
+    if (!TSite.validateBasicInfo()) {
         return;
     }
+    
+    var siteName = $("#name").val();
     
     // 这些将在步骤二中配置
     var isHalf = 2; // 默认不可预定半场
@@ -904,6 +903,82 @@
     
     // 滚动到顶部
     $('html, body').animate({scrollTop: 0}, 300);
+}
+
+/**
+ * 验证步骤一的必填字段
+ */
+TSite.validateBasicInfo = function() {
+    // 验证门店
+    if ($("#store").val() == '') {
+        Feng.error("请选择门店");
+        return false;
+    }
+    
+    // 验证场地分类
+    if ($("#siteTypeId").val() == '') {
+        Feng.error("请选择场地分类");
+        return false;
+    }
+    
+    // 验证场地名称
+    if ($("#name").val() == '') {
+        Feng.error("请输入场地名称");
+        return false;
+    }
+    
+    // 验证场地责任险有效期
+    if ($("#insuranceEndTime").val() == '') {
+        Feng.error("请输入场地责任险有效期");
+        return false;
+    }
+    
+    // 验证场地责任险图片
+    if ($("#img").val() == '') {
+        Feng.error("请上传场地责任有效期图片");
+        return false;
+    }
+    
+    // 验证消防及应急管理方案
+    if ($('#courseVideo').val() == '') {
+        Feng.error("请上传消防及应急管理方案");
+        return false;
+    }
+    
+    // 验证运营商
+    var SelectValue = "";
+    $("input[name='pt']:checked").each(function(j) {
+        if (j >= 0) {
+            SelectValue += $(this).val();
+        }
+    });
+    if (SelectValue == '') {
+        let yys = $("#yys").val();
+        if (yys == "") {
+            Feng.error("请选择运营商");
+            return false;
+        }
+    }
+    
+    // 验证对象类型相关字段
+    var objectType = $("#objectType").val();
+    if (objectType == 1) {
+        // 验证公告内容
+        var introduce = TSite.editor.getContent();
+        if (introduce == "") {
+            Feng.error("请输入公告内容");
+            return false;
+        }
+        
+        // 验证实景图
+        var goodImgs = TSite.goodsPicArray;
+        if (goodImgs.length == 0) {
+            Feng.error("请上传实景图");
+            return false;
+        }
+    }
+    
+    return true;
 }
 
 /**
@@ -963,8 +1038,14 @@
 
 /**
  * 生成价格表
+ * @param {boolean} autoAddRow - 是否自动添加空白时段,默认为 true
  */
-TSite.generatePriceTables = function() {
+TSite.generatePriceTables = function(autoAddRow) {
+    // 默认自动添加空白时段
+    if (autoAddRow === undefined) {
+        autoAddRow = true;
+    }
+    
     // 验证人群选择
     var bookingChecked = $("#audience_booking").is(':checked');
     var walkinChecked = $("#audience_walkin").is(':checked');
@@ -992,15 +1073,25 @@
     // 显示对应的价格表区域
     if (bookingChecked) {
         $("#booking_section").show();
+        // 根据参数决定是否自动添加一条订场时段
+        if (autoAddRow) {
+            TSite.addBookingTimeSlot();
+        }
     }
     if (walkinChecked) {
         $("#walkin_section").show();
+        // 根据参数决定是否自动添加一条散客时段
+        if (autoAddRow) {
+            TSite.addWalkinTimeSlot();
+        }
     }
     
     // 标记价格表已生成
     TSite.priceTablesGenerated = true;
     
-    Feng.success("价格表已生成,请添加时段并填写价格!");
+    if (autoAddRow) {
+        Feng.success("价格表已生成,请填写价格!");
+    }
 }
 
 /**
@@ -1266,6 +1357,12 @@
     // 收集价格数据
     var priceDTOS = TSite.collectPriceData();
     
+    // 如果返回 null,说明验证失败,已经显示了具体错误信息
+    if (priceDTOS === null) {
+        return;
+    }
+    
+    // 如果返回空数组,说明没有填写任何价格
     if (priceDTOS.length === 0) {
         Feng.error("请至少添加一个时段并填写价格!");
         return;
@@ -1480,16 +1577,21 @@
 
 /**
  * 收集价格数据(返回符合后端 PriceDTO 格式的数据)
+ * targetAudience: 1=订场, 2=散客
+ * fieldType: 1=全场, 2=半场
  */
 TSite.collectPriceData = function() {
     var priceDTOS = [];
     var isHalf = TSite.priceConfig ? TSite.priceConfig.isHalf : 2;
     var bookingChecked = $("#audience_booking").is(':checked');
     var walkinChecked = $("#audience_walkin").is(':checked');
+    var validationFailed = false;  // 验证失败标志
     
     // 收集订场价格
     if (bookingChecked) {
         $("#booking_price_tbody tr").each(function() {
+            if (validationFailed) return false;  // 如果已经验证失败,终止循环
+            
             var index = $(this).data('index');
             var startTime = $("#booking_start_" + index).val();
             var endTime = $("#booking_end_" + index).val();
@@ -1497,27 +1599,41 @@
             // 验证时段
             if (!startTime || !endTime) {
                 Feng.error("订场价格配置中存在空的时段!");
+                validationFailed = true;
                 return false;
             }
             
             if (startTime >= endTime) {
                 Feng.error("订场价格配置中,结束时间必须大于开始时间!");
+                validationFailed = true;
                 return false;
             }
             
             // 遍历周一到周日
+            var hasAnyPrice = false;  // 标记该时段是否有任何价格
             for (var day = 1; day <= 7; day++) {
-                var fullCash = parseFloat($("#booking_" + index + "_" + day + "_full_cash").val() || 0);
-                var fullCoin = parseFloat($("#booking_" + index + "_" + day + "_full_coin").val() || 0);
+                var fullCashVal = $("#booking_" + index + "_" + day + "_full_cash").val();
+                var fullCoinVal = $("#booking_" + index + "_" + day + "_full_coin").val();
+                var fullCash = parseFloat(fullCashVal || 0);
+                var fullCoin = parseFloat(fullCoinVal || 0);
                 
-                // 全场价格
-                if (fullCash > 0 || fullCoin > 0) {
+                // 全场价格验证
+                if (fullCashVal !== '' || fullCoinVal !== '') {
+                    hasAnyPrice = true;
+                    // 如果填写了一个,检查另一个是否为空
+                    if (fullCashVal === '' || fullCoinVal === '') {
+                        var dayName = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'][day - 1];
+                        Feng.error("订场价格 " + startTime + "-" + endTime + " " + dayName + " 全场的现金价格和玩湃币价格都必须填写!");
+                        validationFailed = true;
+                        return false;
+                    }
+                    
                     priceDTOS.push({
                         startTime: startTime,
                         endTime: endTime,
                         dayOfWeek: day,
-                        targetAudience: "1",  // String 类型,1=订场
-                        fieldType: 'full',
+                        targetAudience: 1,  // 1=订场
+                        fieldType: 1,       // 1=全场
                         cashPrice: fullCash,
                         coinPrice: fullCoin
                     });
@@ -1525,28 +1641,54 @@
                 
                 // 半场价格(如果可预订半场)
                 if (isHalf == 1) {
-                    var halfCash = parseFloat($("#booking_" + index + "_" + day + "_half_cash").val() || 0);
-                    var halfCoin = parseFloat($("#booking_" + index + "_" + day + "_half_coin").val() || 0);
+                    var halfCashVal = $("#booking_" + index + "_" + day + "_half_cash").val();
+                    var halfCoinVal = $("#booking_" + index + "_" + day + "_half_coin").val();
+                    var halfCash = parseFloat(halfCashVal || 0);
+                    var halfCoin = parseFloat(halfCoinVal || 0);
                     
-                    if (halfCash > 0 || halfCoin > 0) {
+                    // 半场价格验证
+                    if (halfCashVal !== '' || halfCoinVal !== '') {
+                        hasAnyPrice = true;
+                        // 如果填写了一个,检查另一个是否为空
+                        if (halfCashVal === '' || halfCoinVal === '') {
+                            var dayName = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'][day - 1];
+                            Feng.error("订场价格 " + startTime + "-" + endTime + " " + dayName + " 半场的现金价格和玩湃币价格都必须填写!");
+                            validationFailed = true;
+                            return false;
+                        }
+                        
                         priceDTOS.push({
                             startTime: startTime,
                             endTime: endTime,
                             dayOfWeek: day,
-                            targetAudience: "1",  // String 类型,1=订场
-                            fieldType: 'half',
+                            targetAudience: 1,  // 1=订场
+                            fieldType: 2,       // 2=半场
                             cashPrice: halfCash,
                             coinPrice: halfCoin
                         });
                     }
                 }
             }
+            
+            // 检查该时段是否至少有一个价格
+            if (!hasAnyPrice) {
+                Feng.error("订场价格时段 " + startTime + "-" + endTime + " 价格未填写完整!");
+                validationFailed = true;
+                return false;
+            }
         });
+        
+        // 如果订场价格验证失败,直接返回 null
+        if (validationFailed) {
+            return null;
+        }
     }
     
     // 收集散客价格
     if (walkinChecked) {
         $("#walkin_price_tbody tr").each(function() {
+            if (validationFailed) return false;  // 如果已经验证失败,终止循环
+            
             var index = $(this).data('index');
             var startTime = $("#walkin_start_" + index).val();
             var endTime = $("#walkin_end_" + index).val();
@@ -1554,27 +1696,41 @@
             // 验证时段
             if (!startTime || !endTime) {
                 Feng.error("散客价格配置中存在空的时段!");
+                validationFailed = true;
                 return false;
             }
             
             if (startTime >= endTime) {
                 Feng.error("散客价格配置中,结束时间必须大于开始时间!");
+                validationFailed = true;
                 return false;
             }
             
             // 遍历周一到周日
+            var hasAnyPrice = false;  // 标记该时段是否有任何价格
             for (var day = 1; day <= 7; day++) {
-                var fullCash = parseFloat($("#walkin_" + index + "_" + day + "_full_cash").val() || 0);
-                var fullCoin = parseFloat($("#walkin_" + index + "_" + day + "_full_coin").val() || 0);
+                var fullCashVal = $("#walkin_" + index + "_" + day + "_full_cash").val();
+                var fullCoinVal = $("#walkin_" + index + "_" + day + "_full_coin").val();
+                var fullCash = parseFloat(fullCashVal || 0);
+                var fullCoin = parseFloat(fullCoinVal || 0);
                 
-                // 全场价格
-                if (fullCash > 0 || fullCoin > 0) {
+                // 全场价格验证
+                if (fullCashVal !== '' || fullCoinVal !== '') {
+                    hasAnyPrice = true;
+                    // 如果填写了一个,检查另一个是否为空
+                    if (fullCashVal === '' || fullCoinVal === '') {
+                        var dayName = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'][day - 1];
+                        Feng.error("散客价格 " + startTime + "-" + endTime + " " + dayName + " 全场的现金价格和玩湃币价格都必须填写!");
+                        validationFailed = true;
+                        return false;
+                    }
+                    
                     priceDTOS.push({
                         startTime: startTime,
                         endTime: endTime,
                         dayOfWeek: day,
-                        targetAudience: "2",  // String 类型,2=散客
-                        fieldType: 'full',
+                        targetAudience: 2,  // 2=散客
+                        fieldType: 1,       // 1=全场
                         cashPrice: fullCash,
                         coinPrice: fullCoin
                     });
@@ -1582,23 +1738,47 @@
                 
                 // 半场价格(如果可预订半场)
                 if (isHalf == 1) {
-                    var halfCash = parseFloat($("#walkin_" + index + "_" + day + "_half_cash").val() || 0);
-                    var halfCoin = parseFloat($("#walkin_" + index + "_" + day + "_half_coin").val() || 0);
+                    var halfCashVal = $("#walkin_" + index + "_" + day + "_half_cash").val();
+                    var halfCoinVal = $("#walkin_" + index + "_" + day + "_half_coin").val();
+                    var halfCash = parseFloat(halfCashVal || 0);
+                    var halfCoin = parseFloat(halfCoinVal || 0);
                     
-                    if (halfCash > 0 || halfCoin > 0) {
+                    // 半场价格验证
+                    if (halfCashVal !== '' || halfCoinVal !== '') {
+                        hasAnyPrice = true;
+                        // 如果填写了一个,检查另一个是否为空
+                        if (halfCashVal === '' || halfCoinVal === '') {
+                            var dayName = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'][day - 1];
+                            Feng.error("散客价格 " + startTime + "-" + endTime + " " + dayName + " 半场的现金价格和玩湃币价格都必须填写!");
+                            validationFailed = true;
+                            return false;
+                        }
+                        
                         priceDTOS.push({
                             startTime: startTime,
                             endTime: endTime,
                             dayOfWeek: day,
-                            targetAudience: "2",  // String 类型,2=散客
-                            fieldType: 'half',
+                            targetAudience: 2,  // 2=散客
+                            fieldType: 2,       // 2=半场
                             cashPrice: halfCash,
                             coinPrice: halfCoin
                         });
                     }
                 }
             }
+            
+            // 检查该时段是否至少有一个价格
+            if (!hasAnyPrice) {
+                Feng.error("散客价格时段 " + startTime + "-" + endTime + " 价格未填写完整!");
+                validationFailed = true;
+                return false;
+            }
         });
+        
+        // 如果散客价格验证失败,直接返回 null
+        if (validationFailed) {
+            return null;
+        }
     }
     
     return priceDTOS;

--
Gitblit v1.7.1