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/java/com/dsh/guns/modular/system/controller/code/TSiteController.java | 17 +
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html | 2
cloud-server-other/src/main/java/com/dsh/other/entity/Site.java | 11
cloud-server-other/src/main/java/com/dsh/other/entity/TSite.java | 11
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js | 238 +++++++++++++++++--
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js | 398 +++++++++++++++++++++++++++++---
6 files changed, 607 insertions(+), 70 deletions(-)
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java
index 75abdb6..c1905a2 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java
+++ b/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);
+ }
/**
* 场地管理首页 选择省 返回市
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html
index dab9d60..4582400 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html
+++ b/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" >
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;
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 8506659..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 = [];
@@ -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(){
diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/Site.java b/cloud-server-other/src/main/java/com/dsh/other/entity/Site.java
index 867ce75..65134e1 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/entity/Site.java
+++ b/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;
}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/TSite.java b/cloud-server-other/src/main/java/com/dsh/other/entity/TSite.java
index 0ffdd44..bd182a4 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/entity/TSite.java
+++ b/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;
}
--
Gitblit v1.7.1