| | |
| | | * 下一步:切换到价格配置 |
| | | */ |
| | | TSite.nextStep = function() { |
| | | var siteName = $("#name").val(); |
| | | |
| | | // 验证场地名称 |
| | | if (!siteName) { |
| | | Feng.error("请输入场地名称!"); |
| | | // 校验步骤一的必填字段 |
| | | if (!TSite.validateBasicInfo()) { |
| | | return; |
| | | } |
| | | |
| | | var siteName = $("#name").val(); |
| | | |
| | | // 这些将在步骤二中配置 |
| | | var isHalf = 2; // 默认不可预定半场 |
| | |
| | | |
| | | // 滚动到顶部 |
| | | $('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; |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | /** |
| | | * 生成价格表 |
| | | * @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'); |
| | |
| | | // 显示对应的价格表区域 |
| | | 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("价格表已生成,请填写价格!"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | // 收集价格数据 |
| | | var priceDTOS = TSite.collectPriceData(); |
| | | |
| | | // 如果返回 null,说明验证失败,已经显示了具体错误信息 |
| | | if (priceDTOS === null) { |
| | | return; |
| | | } |
| | | |
| | | // 如果返回空数组,说明没有填写任何价格 |
| | | if (priceDTOS.length === 0) { |
| | | Feng.error("请至少添加一个时段并填写价格!"); |
| | | return; |
| | |
| | | |
| | | /** |
| | | * 收集价格数据(返回符合后端 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(); |
| | |
| | | // 验证时段 |
| | | 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 |
| | | }); |
| | |
| | | |
| | | // 半场价格(如果可预订半场) |
| | | 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(); |
| | |
| | | // 验证时段 |
| | | 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 |
| | | }); |
| | |
| | | |
| | | // 半场价格(如果可预订半场) |
| | | 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; |