mitao
昨天 a32219b5f00c173e04bf20ff0b1cbb05fb15c28f
场地管理接口联调
6个文件已修改
677 ■■■■ 已修改文件
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js 238 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js 398 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/entity/Site.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/entity/TSite.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java
@@ -350,6 +350,11 @@
        }
        model.addAttribute("halfNames",strings2);
        model.addAttribute("halfName",halfName);
        // 添加价格配置相关字段
        TSite fullSite = siteService.getById(id);
        model.addAttribute("targetAudience", fullSite.getTargetAudience());
        model.addAttribute("walkinCapacity", fullSite.getWalkinCapacity());
        return PREFIX + "TSite_edit.html";
    }
@@ -467,6 +472,18 @@
    public Store getTime(@PathVariable("oneId") String oneId) {
        return storeClient.getTime(oneId);
    }
    /**
     * 根据场地ID获取价格配置
     */
    @ResponseBody
    @GetMapping("/getSitePrices/{siteId}")
    public ResultUtil getSitePrices(@PathVariable("siteId") Integer siteId) {
        List<TSitePrice> prices = sitePriceService.list(
            new QueryWrapper<TSitePrice>().eq("siteId", siteId)
        );
        return ResultUtil.success(prices);
    }
    /**
     *  场地管理首页 选择省 返回市
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html
@@ -241,6 +241,8 @@
            <input id="reservation" value="${list.reservation}" hidden>
            <input id="objectType" value="${objectType}" hidden>
            <input type="hidden" id="siteId" value="${list.id}">
            <input type="hidden" id="targetAudience" value="${targetAudience}">
            <input type="hidden" id="walkinCapacity" value="${walkinCapacity}">
            @if(objectType == 1){
            <div class="form-group" >
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;
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 = [];
@@ -623,6 +622,82 @@
    
    // 滚动到顶部
    $('html, body').animate({scrollTop: 0}, 300);
}
/**
 * 验证步骤一的必填字段
 */
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;
}
/**
@@ -676,12 +751,154 @@
        $("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() {
TSiteInfo.generatePriceTables = function(autoAddRow) {
    // 默认自动添加空白时段
    if (autoAddRow === undefined) {
        autoAddRow = true;
    }
    // 验证人群选择
    var bookingChecked = $("#audience_booking").is(':checked');
    var walkinChecked = $("#audience_walkin").is(':checked');
@@ -709,15 +926,25 @@
    // 显示对应的价格表区域
    if (bookingChecked) {
        $("#booking_section").show();
        // 根据参数决定是否自动添加一条订场时段
        if (autoAddRow) {
            TSiteInfo.addBookingTimeSlot();
        }
    }
    if (walkinChecked) {
        $("#walkin_section").show();
        // 根据参数决定是否自动添加一条散客时段
        if (autoAddRow) {
            TSiteInfo.addWalkinTimeSlot();
        }
    }
    
    // 标记价格表已生成
    TSiteInfo.priceTablesGenerated = true;
    
    Feng.success("价格表已生成,请添加时段并填写价格!");
    if (autoAddRow) {
        Feng.success("价格表已生成,请填写价格!");
    }
}
/**
@@ -1065,9 +1292,15 @@
    }
    
    // 收集价格数据
    var priceDetails = TSiteInfo.collectPriceData();
    var priceDTOS = TSiteInfo.collectPriceData();
    
    if (priceDetails.length === 0) {
    // 如果返回 null,说明验证失败,已经显示了具体错误信息
    if (priceDTOS === null) {
        return;
    }
    // 如果返回空数组,说明没有填写任何价格
    if (priceDTOS.length === 0) {
        Feng.error("请至少添加一个时段并填写价格!");
        return;
    }
@@ -1104,8 +1337,8 @@
        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) {
@@ -1291,17 +1524,22 @@
}
/**
 * 收集价格数据
 * 收集价格数据(返回符合后端 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();
@@ -1309,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
                    });
@@ -1337,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();
@@ -1366,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
                    });
@@ -1394,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(){
cloud-server-other/src/main/java/com/dsh/other/entity/Site.java
@@ -135,4 +135,15 @@
    private Integer sign;
    @TableField("reservation")
    private Integer reservation;
    /**
     * 面向人群:1=订场,2=散客,多个用逗号分隔(如:1,2)
     */
    @TableField("targetAudience")
    private String targetAudience;
    /**
     * 容纳散客数(仅当包含散客时有效)
     */
    @TableField("walkinCapacity")
    private Integer walkinCapacity;
}
cloud-server-other/src/main/java/com/dsh/other/entity/TSite.java
@@ -108,4 +108,15 @@
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date insertTime;
    /**
     * 面向人群:1=订场,2=散客,多个用逗号分隔(如:1,2)
     */
    @TableField("targetAudience")
    private String targetAudience;
    /**
     * 容纳散客数(仅当包含散客时有效)
     */
    @TableField("walkinCapacity")
    private Integer walkinCapacity;
}