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_info.js |  668 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 600 insertions(+), 68 deletions(-)

diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js
index a9c5ba3..eacb313 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js
@@ -568,14 +568,13 @@
  * 下一步:切换到价格配置
  */
 TSiteInfo.nextStep = function() {
-    var siteName = $("#name").val();
-    var isHalf = $("input[name='ishalf']:checked").val() || 2;
-    
-    // 验证场地名称
-    if (!siteName) {
-        Feng.error("请输入场地名称!");
+    // 校验步骤一的必填字段
+    if (!TSiteInfo.validateBasicInfo()) {
         return;
     }
+    
+    var siteName = $("#name").val();
+    var isHalf = $("input[name='ishalf']:checked").val() || 2;
     
     // 收集子场地名称
     var nextNames = [];
@@ -626,6 +625,82 @@
 }
 
 /**
+ * 验证步骤一的必填字段
+ */
+TSiteInfo.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 = TSiteInfo.editor.getContent();
+        if (introduce == "") {
+            Feng.error("请输入公告内容");
+            return false;
+        }
+        
+        // 验证实景图
+        var goodImgs = TSiteInfo.goodsPicArray;
+        if (goodImgs.length == 0) {
+            Feng.error("请上传实景图");
+            return false;
+        }
+    }
+    
+    return true;
+}
+
+/**
  * 上一步:返回基本信息
  */
 TSiteInfo.previousStep = function() {
@@ -640,23 +715,31 @@
  * 初始化价格配置
  */
 TSiteInfo.initPriceConfig = function() {
-    // 监听人群选择
-    $("#audience_booking, #audience_walkin").off('change').on('change', function() {
-        TSiteInfo.updateAudienceUI();
-    });
-    
     // 清空价格表
     $("#booking_price_tbody").empty();
     $("#walkin_price_tbody").empty();
+    
+    // 隐藏价格表区域
+    $("#booking_section").hide();
+    $("#walkin_section").hide();
+    
+    // 标记价格表未生成
+    TSiteInfo.priceTablesGenerated = false;
     
     // 初始化计数器
     TSiteInfo.bookingRowIndex = 0;
     TSiteInfo.walkinRowIndex = 0;
     
-    // 生成表头
-    TSiteInfo.buildTableHeaders();
+    // 监听人群选择变化
+    $("#audience_booking, #audience_walkin").off('change').on('change', function() {
+        TSiteInfo.updateAudienceUI();
+        // 如果价格表已生成,提示需要重新生成
+        if (TSiteInfo.priceTablesGenerated) {
+            TSiteInfo.clearPriceTables();
+        }
+    });
     
-    // 更新界面
+    // 更新界面(但不显示价格表)
     TSiteInfo.updateAudienceUI();
     
     // 初始化是否可预定半场状态
@@ -668,6 +751,222 @@
         $("input[name='ishalf_step2'][value='2']").prop('checked', true);
         $("#halfCode_step2").hide();
     }
+    
+    // 加载已有的价格数据(如果是编辑模式)
+    var siteId = $("#id").val();
+    if (siteId) {
+        TSiteInfo.loadSitePrices(siteId);
+    }
+}
+
+/**
+ * 加载场地价格数据
+ */
+TSiteInfo.loadSitePrices = function(siteId) {
+    $.ajax({
+        url: Feng.ctxPath + "/tSite/getSitePrices/" + siteId,
+        type: "GET",
+        success: function(response) {
+            if (response.code === 200 && response.data && response.data.length > 0) {
+                TSiteInfo.renderPriceData(response.data);
+            }
+        },
+        error: function(xhr, status, error) {
+            console.error("加载价格数据失败", error);
+        }
+    });
+}
+
+/**
+ * 渲染价格数据到页面
+ */
+TSiteInfo.renderPriceData = function(priceData) {
+    // 分析数据,确定面向人群
+    var hasBooking = false;
+    var hasWalkin = false;
+    var walkinCapacity = 0;
+    
+    for (var i = 0; i < priceData.length; i++) {
+        if (priceData[i].targetAudience == 1) {
+            hasBooking = true;
+        } else if (priceData[i].targetAudience == 2) {
+            hasWalkin = true;
+        }
+    }
+    
+    // 设置面向人群复选框
+    $("#audience_booking").prop('checked', hasBooking);
+    $("#audience_walkin").prop('checked', hasWalkin);
+    
+    // 如果有散客,从隐藏字段获取并设置容纳散客数
+    if (hasWalkin) {
+        $("#walkin_capacity_group").show();
+        var walkinCapacity = $("#walkinCapacity").val();
+        if (walkinCapacity) {
+            $("#walkin_capacity").val(walkinCapacity);
+        }
+    }
+    
+    // 生成价格表(回显场景不自动添加空白行)
+    TSiteInfo.generatePriceTables(false);
+    
+    // 按时段分组价格数据
+    var timeSlotMap = {};
+    for (var i = 0; i < priceData.length; i++) {
+        var item = priceData[i];
+        var key = item.targetAudience + "_" + item.startTime + "_" + item.endTime;
+        
+        if (!timeSlotMap[key]) {
+            timeSlotMap[key] = {
+                targetAudience: item.targetAudience,
+                startTime: item.startTime,
+                endTime: item.endTime,
+                days: {}
+            };
+        }
+        
+        if (!timeSlotMap[key].days[item.dayOfWeek]) {
+            timeSlotMap[key].days[item.dayOfWeek] = {};
+        }
+        
+        var fieldTypeKey = item.fieldType == 1 ? 'full' : 'half';
+        timeSlotMap[key].days[item.dayOfWeek][fieldTypeKey] = {
+            cashPrice: item.cashPrice,
+            coinPrice: item.coinPrice
+        };
+    }
+    
+    // 填充数据到表格
+    for (var key in timeSlotMap) {
+        var timeSlot = timeSlotMap[key];
+        var targetAudience = timeSlot.targetAudience;
+        var isBooking = (targetAudience == 1);
+        
+        // 添加时段行
+        if (isBooking) {
+            TSiteInfo.addBookingTimeSlot();
+            var index = TSiteInfo.bookingRowIndex - 1;
+            
+            // 设置时间
+            $("#booking_start_" + index).val(timeSlot.startTime);
+            $("#booking_end_" + index).val(timeSlot.endTime);
+            
+            // 填充价格
+            for (var day = 1; day <= 7; day++) {
+                if (timeSlot.days[day]) {
+                    if (timeSlot.days[day].full) {
+                        $("#booking_" + index + "_" + day + "_full_cash").val(timeSlot.days[day].full.cashPrice || '');
+                        $("#booking_" + index + "_" + day + "_full_coin").val(timeSlot.days[day].full.coinPrice || '');
+                    }
+                    if (timeSlot.days[day].half) {
+                        $("#booking_" + index + "_" + day + "_half_cash").val(timeSlot.days[day].half.cashPrice || '');
+                        $("#booking_" + index + "_" + day + "_half_coin").val(timeSlot.days[day].half.coinPrice || '');
+                    }
+                }
+            }
+        } else {
+            TSiteInfo.addWalkinTimeSlot();
+            var index = TSiteInfo.walkinRowIndex - 1;
+            
+            // 设置时间
+            $("#walkin_start_" + index).val(timeSlot.startTime);
+            $("#walkin_end_" + index).val(timeSlot.endTime);
+            
+            // 填充价格
+            for (var day = 1; day <= 7; day++) {
+                if (timeSlot.days[day]) {
+                    if (timeSlot.days[day].full) {
+                        $("#walkin_" + index + "_" + day + "_full_cash").val(timeSlot.days[day].full.cashPrice || '');
+                        $("#walkin_" + index + "_" + day + "_full_coin").val(timeSlot.days[day].full.coinPrice || '');
+                    }
+                    if (timeSlot.days[day].half) {
+                        $("#walkin_" + index + "_" + day + "_half_cash").val(timeSlot.days[day].half.cashPrice || '');
+                        $("#walkin_" + index + "_" + day + "_half_coin").val(timeSlot.days[day].half.coinPrice || '');
+                    }
+                }
+            }
+        }
+    }
+}
+
+/**
+ * 生成价格表
+ * @param {boolean} autoAddRow - 是否自动添加空白时段,默认为 true
+ */
+TSiteInfo.generatePriceTables = function(autoAddRow) {
+    // 默认自动添加空白时段
+    if (autoAddRow === undefined) {
+        autoAddRow = true;
+    }
+    
+    // 验证人群选择
+    var bookingChecked = $("#audience_booking").is(':checked');
+    var walkinChecked = $("#audience_walkin").is(':checked');
+    
+    if (!bookingChecked && !walkinChecked) {
+        Feng.error("请至少选择一种面向人群!");
+        return;
+    }
+    
+    // 验证容纳散客数
+    if (walkinChecked) {
+        var walkinCapacity = $("#walkin_capacity").val();
+        if (!walkinCapacity || parseInt(walkinCapacity) <= 0) {
+            Feng.error("请输入有效的容纳散客数!");
+            return;
+        }
+    }
+    
+    // 清除现有价格表
+    TSiteInfo.clearPriceTables();
+    
+    // 生成表头
+    TSiteInfo.buildTableHeaders();
+    
+    // 显示对应的价格表区域
+    if (bookingChecked) {
+        $("#booking_section").show();
+        // 根据参数决定是否自动添加一条订场时段
+        if (autoAddRow) {
+            TSiteInfo.addBookingTimeSlot();
+        }
+    }
+    if (walkinChecked) {
+        $("#walkin_section").show();
+        // 根据参数决定是否自动添加一条散客时段
+        if (autoAddRow) {
+            TSiteInfo.addWalkinTimeSlot();
+        }
+    }
+    
+    // 标记价格表已生成
+    TSiteInfo.priceTablesGenerated = true;
+    
+    if (autoAddRow) {
+        Feng.success("价格表已生成,请填写价格!");
+    }
+}
+
+/**
+ * 清除价格表
+ */
+TSiteInfo.clearPriceTables = function() {
+    // 清空价格表内容
+    $("#booking_price_tbody").empty();
+    $("#walkin_price_tbody").empty();
+    
+    // 隐藏价格表区域
+    $("#booking_section").hide();
+    $("#walkin_section").hide();
+    
+    // 重置计数器
+    TSiteInfo.bookingRowIndex = 0;
+    TSiteInfo.walkinRowIndex = 0;
+    
+    // 标记价格表未生成
+    TSiteInfo.priceTablesGenerated = false;
+    
+    Feng.info("价格配置已清除,请重新生成价格表!");
 }
 
 /**
@@ -714,36 +1013,30 @@
 TSiteInfo.updateHalfField = function(value) {
     if (value == 1) {
         $("#halfCode_step2").show();
-        // 更新isHalf并重新生成表头
+        // 更新isHalf
         TSiteInfo.priceConfig.isHalf = 1;
     } else {
         $("#halfCode_step2").hide();
         TSiteInfo.priceConfig.isHalf = 2;
     }
-    // 重新生成表头
-    TSiteInfo.buildTableHeaders();
+    
+    // 如果价格表已生成,清除价格表
+    if (TSiteInfo.priceTablesGenerated) {
+        TSiteInfo.clearPriceTables();
+    }
 }
 
 /**
  * 更新人群相关UI
  */
 TSiteInfo.updateAudienceUI = function() {
-    var bookingChecked = $("#audience_booking").is(':checked');
     var walkinChecked = $("#audience_walkin").is(':checked');
     
-    // 显示/隐藏订场表格
-    if (bookingChecked) {
-        $("#booking_section").show();
-    } else {
-        $("#booking_section").hide();
-    }
-    
-    // 显示/隐藏散客表格和容纳散客数
+    // 只控制容纳散客数字段的显示/隐藏
+    // 价格表的显示由生成按钮控制
     if (walkinChecked) {
-        $("#walkin_section").show();
         $("#walkin_capacity_group").show();
     } else {
-        $("#walkin_section").hide();
         $("#walkin_capacity_group").hide();
     }
 }
@@ -969,6 +1262,12 @@
  * 保存价格配置
  */
 TSiteInfo.savePriceConfig = function() {
+    // 验证价格表是否已生成
+    if (!TSiteInfo.priceTablesGenerated) {
+        Feng.error("请先点击【生成价格表】按钮生成价格配置表!");
+        return;
+    }
+    
     // 验证人群选择
     var bookingChecked = $("#audience_booking").is(':checked');
     var walkinChecked = $("#audience_walkin").is(':checked');
@@ -993,18 +1292,21 @@
     }
     
     // 收集价格数据
-    var priceDetails = TSiteInfo.collectPriceData();
+    var priceDTOS = TSiteInfo.collectPriceData();
     
-    if (priceDetails.length === 0) {
+    // 如果返回 null,说明验证失败,已经显示了具体错误信息
+    if (priceDTOS === null) {
+        return;
+    }
+    
+    // 如果返回空数组,说明没有填写任何价格
+    if (priceDTOS.length === 0) {
         Feng.error("请至少添加一个时段并填写价格!");
         return;
     }
     
     var siteId = $("#siteId").val();
-    if (!siteId) {
-        Feng.error("场地ID不存在,请先保存场地基本信息!");
-        return;
-    }
+    var isAddMode = !siteId; // 判断是新增模式还是编辑模式
     
     // 收集场地配置
     var nextNames = [];
@@ -1031,14 +1333,23 @@
     if (walkinChecked) targetAudience.push('2');
     
     var data = {
-        siteId: parseInt(siteId),
         targetAudience: targetAudience.join(','),
         walkinCapacity: walkinChecked ? parseInt($("#walkin_capacity").val()) : 0,
         nextName: nextNames.join(','),
         halfName: halfNames.join(','),
-        isHalf: parseInt(isHalf),
-        priceDetails: priceDetails
+        ishalf: parseInt(isHalf),
+        priceDTOS: priceDTOS
     };
+    
+    if (!isAddMode) {
+        data.siteId = parseInt(siteId);
+    } else {
+        // 新增模式:收集基本信息
+        data = Object.assign(data, TSiteInfo.collectBasicData());
+        if (!data.name) { // 如果基本信息收集失败
+            return;
+        }
+    }
     
     // 确认提交
     layer.confirm('确定要保存价格配置吗?', {
@@ -1047,13 +1358,16 @@
         layer.close(index);
         
         // 提交到后端
+        var url = isAddMode ? "/tSite/addSite" : "/tSite/savePriceConfig";
+        var successMsg = isAddMode ? "场地添加成功!" : "价格配置保存成功!";
+        
         $.ajax({
-            url: Feng.ctxPath + "/tSite/savePriceConfig",
+            url: Feng.ctxPath + url,
             type: "POST",
             data: JSON.stringify(data),
             contentType: "application/json",
             success: function(response) {
-                Feng.success("价格配置保存成功!");
+                Feng.success(successMsg);
                 // 刷新列表
                 if (window.parent.TSite && window.parent.TSite.table) {
                     window.parent.TSite.table.refresh();
@@ -1075,17 +1389,157 @@
 }
 
 /**
- * 收集价格数据
+ * 收集基本信息数据(用于新增场地)
+ */
+TSiteInfo.collectBasicData = function() {
+    var data = {
+        province:"",
+        city:"",
+        cityManagerId:"",
+        storeId:"",
+        siteTypeId:null,
+        appointmentStartTime:"",
+        appointmentEndTime:"",
+        cashPrice:null,
+        playPaiCoin:null,
+        insuranceEndTime:"",
+        name:"",
+        insuranceImg:"",
+        managementPlan:"",
+        operatorId:"",
+        typeName:"",
+        nextName:"",
+        ishalf:"",
+        cashPriceOne:"",
+        playPaiCoinOne:"",
+        halfName:"",
+        introduce:"",
+        imgs:"",
+        reservation:"",
+        isCanBeBooked:"",
+        type:"",
+    };
+    
+    data.province            = $("#pCode").val()
+    data.city                = $("#cCode").val()
+    data.cityManagerId       = $("#account").val()
+    data.storeId             = $("#store").val()
+    data.siteTypeId          = $("#siteTypeId").val()
+    data.appointmentStartTime= $("#start-time").val()
+    data.appointmentEndTime  = $("#end-time").val()
+    data.cashPrice           = $("#cashPrice").val()
+    data.playPaiCoin         = $("#playPaiCoin").val()
+    data.insuranceEndTime    = $("#insuranceEndTime").val()
+    data.name                = $("#name").val()
+    data.insuranceImg        = $("#img").val()
+    data.managementPlan      = $('#courseVideo').val()
+    data.typeName            = $('#siteTypeOne').val()
+    
+    var reservation= $("input[name='reservation']:checked").val();
+    data.reservation= reservation;
+    data.isCanBeBooked= reservation;
+    
+    var checkbox = document.querySelector('input[name="pt"]');
+    if (checkbox!=null){
+        if (checkbox.checked) {
+            data.type = 1
+            data.operatorId = 0;
+        } else {
+            data.type = 2;
+        }
+    }
+    
+    var SelectValue="";
+    var getSelectValueMenbers = $("input[name='pt']:checked").each(function(j) {
+        if (j >= 0) {
+            SelectValue += $(this).val()
+        }
+    });
+    if(SelectValue==''){
+        let yys = $("#yys").val()
+        if(yys==""){
+            Feng.info("请选择运营商")
+            return null;
+        }
+        SelectValue= yys
+    }
+    data.operatorId= SelectValue;
+    
+    let introduce = "";
+    var objectType = $("#objectType").val();
+    if (objectType==1){
+       introduce = TSiteInfo.editor.getContent();
+       if(introduce==""){
+           Feng.info("请输入公告内容")
+           return null;
+       }
+    }
+    data.introduce= introduce;
+    
+    var goodImgs = TSiteInfo.goodsPicArray;
+    if(objectType==1){
+        if(goodImgs.length==0){
+            Feng.info("请上传实景图")
+            return null;
+        }
+    }
+    
+    var imgOne ="";
+    for (let i = 0; i <goodImgs.length; i++) {
+        if(i==goodImgs.length-1){
+            imgOne += (goodImgs[i].response)
+        }else {
+            imgOne+=(goodImgs[i].response+",")
+        }
+    }
+    data.imgs = imgOne
+    
+    // 基本验证
+    if($("#store").val()=='' ){
+        Feng.info("请选择门店")
+        return null;
+    }
+    if($("#siteTypeId").val()=='' ){
+        Feng.info("请选择场地分类")
+        return null;
+    }
+    if($("#name").val()==''){
+        Feng.info("请输入场地名称")
+        return null;
+    }
+    if($("#insuranceEndTime").val()==''){
+        Feng.info("请输入场地责任险有效期")
+        return null;
+    }
+    if($("#img").val()==''){
+        Feng.info("请上传场地责任有效期图片")
+        return null;
+    }
+    if($('#courseVideo').val()==''){
+        Feng.info("请上传消防及应急管理方案")
+        return null;
+    }
+    
+    return data;
+}
+
+/**
+ * 收集价格数据(返回符合后端 PriceDTO 格式的数据)
+ * targetAudience: 1=订场, 2=散客
+ * fieldType: 1=全场, 2=半场
  */
 TSiteInfo.collectPriceData = function() {
-    var priceDetails = [];
+    var priceDTOS = [];
     var isHalf = TSiteInfo.priceConfig.isHalf;
     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();
@@ -1093,27 +1547,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) {
-                    priceDetails.push({
+                // 全场价格验证
+                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,
-                        fieldType: 'full',
+                        targetAudience: 1,  // 1=订场
+                        fieldType: 1,       // 1=全场
                         cashPrice: fullCash,
                         coinPrice: fullCoin
                     });
@@ -1121,28 +1589,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) {
-                        priceDetails.push({
+                    // 半场价格验证
+                    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,
-                            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();
@@ -1150,27 +1644,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) {
-                    priceDetails.push({
+                // 全场价格验证
+                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,
-                        fieldType: 'full',
+                        targetAudience: 2,  // 2=散客
+                        fieldType: 1,       // 1=全场
                         cashPrice: fullCash,
                         coinPrice: fullCoin
                     });
@@ -1178,26 +1686,50 @@
                 
                 // 半场价格(如果可预订半场)
                 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) {
-                        priceDetails.push({
+                    // 半场价格验证
+                    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,
-                            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 priceDetails;
+    return priceDTOS;
 }
 
 function UploadFileFn(){

--
Gitblit v1.7.1