532 lines
23 KiB
HTML
532 lines
23 KiB
HTML
<!DOCTYPE html>
|
|||
|
|
<html>
|
||
|
|
<head>
|
||
|
|
<meta charset="utf-8">
|
||
|
|
<title>出鱼概率配置</title>
|
||
|
|
</head>
|
||
|
|
<body>
|
||
|
|
<div class="layui-card layadmin-header">
|
||
|
|
<div class="layui-breadcrumb" lay-filter="breadcrumb">
|
||
|
|
<a lay-href="">主页</a>
|
||
|
|
<a><cite>游戏管理</cite></a>
|
||
|
|
<a><cite>出鱼概率配置</cite></a>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div class="layui-fluid">
|
||
|
|
<div class="layui-card">
|
||
|
|
<div class="layui-card-header">
|
||
|
|
<div class="layui-btn-container">
|
||
|
|
<button class="layui-btn layui-btn-sm layui-btn-normal" lay-filter="init-roomfishprobability"><i class="layui-icon layui-icon-refresh"></i> 初始化配置</button>
|
||
|
|
<button class="layui-btn layui-btn-sm" lay-filter="save-roomfishprobability"><i class="layui-icon layui-icon-ok"></i> 保存配置</button>
|
||
|
|
<button class="layui-btn layui-btn-sm layui-btn-warm" lay-filter="reload-roomfishprobability"><i class="layui-icon layui-icon-refresh"></i> 刷新</button>
|
||
|
|
<button class="layui-btn layui-btn-sm layui-btn-normal" onclick="saveSection('RoomFishProbabilityList')"><i class="layui-icon layui-icon-export"></i> 保存到初始化文件</button>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div class="layui-card-body">
|
||
|
|
<div class="layui-row">
|
||
|
|
<div class="layui-col-md3">
|
||
|
|
<div class="layui-card">
|
||
|
|
<div class="layui-card-header">游戏类型选择</div>
|
||
|
|
<div class="layui-card-body">
|
||
|
|
<div class="layui-btn-container" id="game-type-btns">
|
||
|
|
<button class="layui-btn layui-btn-sm layui-btn-primary" data-type="1">风雷之渊</button>
|
||
|
|
<button class="layui-btn layui-btn-sm" data-type="2">永夜尸城</button>
|
||
|
|
<button class="layui-btn layui-btn-sm" data-type="4">星际迷航</button>
|
||
|
|
<button class="layui-btn layui-btn-sm" data-type="5">黑神话悟空</button>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div class="layui-card" style="margin-top: 15px;">
|
||
|
|
<div class="layui-card-header">房间等级筛选</div>
|
||
|
|
<div class="layui-card-body">
|
||
|
|
<div class="layui-btn-container" id="room-level-btns">
|
||
|
|
<button class="layui-btn layui-btn-sm" data-level="all">全部房间</button>
|
||
|
|
<button class="layui-btn layui-btn-sm layui-btn-primary" data-level="1">初级房间</button>
|
||
|
|
<button class="layui-btn layui-btn-sm layui-btn-primary" data-level="2">中级房间</button>
|
||
|
|
<button class="layui-btn layui-btn-sm layui-btn-primary" data-level="3">高级房间</button>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div class="layui-col-md9">
|
||
|
|
<table id="table-roomfishprobability" lay-filter="table-roomfishprobability"></table>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<script type="text/html" id="toolbar-roomfishprobability">
|
||
|
|
<div class="layui-btn-container">
|
||
|
|
</div>
|
||
|
|
</script>
|
||
|
|
|
||
|
|
<script type="text/html" id="table-operate">
|
||
|
|
<a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>
|
||
|
|
</script>
|
||
|
|
|
||
|
|
<script type="text/html" id="tpl-type">
|
||
|
|
{{# var typeMap = {1:'鱼',2:'鱼阵'}; }}
|
||
|
|
{{= typeMap[d.type] || '未知(' + d.type + ')' }}
|
||
|
|
</script>
|
||
|
|
|
||
|
|
<script type="text/html" id="tpl-fishType">
|
||
|
|
{{# var typeMap = {0:'不限',1:'普通鱼',2:'Boss鱼',3:'黄金鱼',4:'特殊鱼',5:'特殊Boss'}; }}
|
||
|
|
{{= typeMap[d.fishType] || '未知(' + d.fishType + ')' }}
|
||
|
|
</script>
|
||
|
|
|
||
|
|
<script>
|
||
|
|
layui.use(['admin', 'table', 'form', 'layer'], function () {
|
||
|
|
if (window._roomFishProbabilityInitialized) return;
|
||
|
|
window._roomFishProbabilityInitialized = true;
|
||
|
|
|
||
|
|
var $ = layui.$,
|
||
|
|
admin = layui.admin,
|
||
|
|
table = layui.table,
|
||
|
|
form = layui.form,
|
||
|
|
layer = layui.layer,
|
||
|
|
setter = layui.setter;
|
||
|
|
|
||
|
|
var TABLE_ID = 'table-roomfishprobability';
|
||
|
|
var gameConfig = null;
|
||
|
|
var probabilityCache = [];
|
||
|
|
var currentGameType = 1;
|
||
|
|
var currentRoomLevel = 'all';
|
||
|
|
var tableRendered = false;
|
||
|
|
|
||
|
|
setTimeout(function() {
|
||
|
|
if (window.parent && window.parent.$ && window.parent.layer) {
|
||
|
|
window.parent.$('.layui-layer-shade').remove();
|
||
|
|
window.parent.layer.closeAll();
|
||
|
|
}
|
||
|
|
$('.layui-layer-shade').remove();
|
||
|
|
layer.closeAll();
|
||
|
|
}, 100);
|
||
|
|
|
||
|
|
// 格式化 range 字段用于显示
|
||
|
|
function formatRange(val) {
|
||
|
|
if (Array.isArray(val)) return val.join('-');
|
||
|
|
if (val !== undefined && val !== null) return String(val);
|
||
|
|
return '';
|
||
|
|
}
|
||
|
|
|
||
|
|
// 从任意值解析为数组
|
||
|
|
function parseIntOrDefault(val, defaultValue) {
|
||
|
|
var parsed = parseInt(val);
|
||
|
|
return Number.isNaN(parsed) ? defaultValue : parsed;
|
||
|
|
}
|
||
|
|
|
||
|
|
function parseRange(val, defaultMin, defaultMax) {
|
||
|
|
if (Array.isArray(val) && val.length >= 2) {
|
||
|
|
return [parseIntOrDefault(val[0], defaultMin), parseIntOrDefault(val[1], defaultMax)];
|
||
|
|
}
|
||
|
|
if (typeof val === 'string' && val.indexOf('-') > -1) {
|
||
|
|
var parts = val.split('-');
|
||
|
|
return [parseIntOrDefault(parts[0], defaultMin), parseIntOrDefault(parts[1], defaultMax)];
|
||
|
|
}
|
||
|
|
return [defaultMin, defaultMax];
|
||
|
|
}
|
||
|
|
|
||
|
|
function loadConfig() {
|
||
|
|
admin.req({
|
||
|
|
method: "get",
|
||
|
|
url: setter.baseurl + "adminapi/GameConfig",
|
||
|
|
done: function (res) {
|
||
|
|
if (res.code === 0 && res.data) {
|
||
|
|
gameConfig = res.data;
|
||
|
|
buildFishNameMap();
|
||
|
|
switchGameType(currentGameType);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
var fishNameMap = {};
|
||
|
|
var fishArrayNameMap = {};
|
||
|
|
|
||
|
|
function buildFishNameMap() {
|
||
|
|
if (!gameConfig) return;
|
||
|
|
fishNameMap = {};
|
||
|
|
fishArrayNameMap = {};
|
||
|
|
|
||
|
|
var fishConfigs = gameConfig.fishTypeConfigs || [];
|
||
|
|
fishConfigs.forEach(function(f) {
|
||
|
|
fishNameMap[f.fishNumber] = f.fishName || f.fishNumber;
|
||
|
|
});
|
||
|
|
|
||
|
|
var fishArrayConfigs = gameConfig.fishArrayConfigs || [];
|
||
|
|
fishArrayConfigs.forEach(function(f) {
|
||
|
|
fishArrayNameMap[f.fishArrayNumber] = f.name || f.fishArrayNumber;
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
function switchGameType(gameType) {
|
||
|
|
currentGameType = gameType;
|
||
|
|
|
||
|
|
$('#game-type-btns .layui-btn').removeClass('layui-btn-primary');
|
||
|
|
$('#game-type-btns .layui-btn[data-type="' + gameType + '"]').addClass('layui-btn-primary');
|
||
|
|
|
||
|
|
var roomFishConfig = null;
|
||
|
|
if (gameConfig && gameConfig.roomFishConfigs) {
|
||
|
|
roomFishConfig = gameConfig.roomFishConfigs.find(function(r) {
|
||
|
|
var gt = r.gameType !== undefined ? r.gameType : r.GameType;
|
||
|
|
return gt === gameType;
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
// 深拷贝,切断与 gameConfig 的引用关系
|
||
|
|
probabilityCache = roomFishConfig
|
||
|
|
? JSON.parse(JSON.stringify(roomFishConfig.roomFishProbabilityList || roomFishConfig.RoomFishProbabilityList || []))
|
||
|
|
: [];
|
||
|
|
// 确保所有 range 字段都是数组,并给每条数据加唯一标识
|
||
|
|
probabilityCache.forEach(function(item, index) {
|
||
|
|
item.firstFishCountRange = parseRange(item.firstFishCountRange || item.FirstFishCountRange, 1, 5);
|
||
|
|
item.timeRange = parseRange(item.timeRange || item.TimeRange, 5, 10);
|
||
|
|
item.countRange = parseRange(item.countRange || item.CountRange, 5, 10);
|
||
|
|
item.maxCountRange = parseRange(item.maxCountRange || item.MaxCountRange, 10, 20);
|
||
|
|
// 给每条数据添加唯一标识(用于编辑时精确匹配)
|
||
|
|
if (!item._uid) {
|
||
|
|
item._uid = 'prob_' + Date.now() + '_' + index;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
renderTable();
|
||
|
|
}
|
||
|
|
|
||
|
|
function renderTable() {
|
||
|
|
var filteredData = probabilityCache;
|
||
|
|
if (currentRoomLevel !== 'all') {
|
||
|
|
var levelNum = parseInt(currentRoomLevel);
|
||
|
|
filteredData = probabilityCache.filter(function(item) {
|
||
|
|
return item.roomLevel === levelNum;
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
var cols = [[
|
||
|
|
{ type: 'checkbox', fixed: 'left' },
|
||
|
|
{ field: "roomLevel", title: "房间等级", width: 100 },
|
||
|
|
{ field: "type", title: "类型", width: 80, templet: '#tpl-type' },
|
||
|
|
{ field: "fishType", title: "鱼类型", width: 100, templet: '#tpl-fishType' },
|
||
|
|
{ field: "firstFishCountRange", title: "首次出鱼数量", width: 140, templet: function(d) { return formatRange(d.firstFishCountRange); } },
|
||
|
|
{ field: "timeRange", title: "出鱼时间频率(秒)", width: 170, templet: function(d) { return formatRange(d.timeRange); } },
|
||
|
|
{ field: "countRange", title: "出鱼数量频率", width: 140, templet: function(d) { return formatRange(d.countRange); } },
|
||
|
|
{ field: "maxCountRange", title: "场内允许数量", width: 140, templet: function(d) { return formatRange(d.maxCountRange); } },
|
||
|
|
{ title: "操作", width: 150, fixed: 'right', toolbar: '#table-operate' }
|
||
|
|
]];
|
||
|
|
|
||
|
|
if (tableRendered) {
|
||
|
|
table.reload(TABLE_ID, {
|
||
|
|
data: JSON.parse(JSON.stringify(filteredData)),
|
||
|
|
cols: cols
|
||
|
|
});
|
||
|
|
} else {
|
||
|
|
table.render({
|
||
|
|
id: TABLE_ID,
|
||
|
|
elem: '#' + TABLE_ID,
|
||
|
|
data: JSON.parse(JSON.stringify(filteredData)),
|
||
|
|
cols: cols,
|
||
|
|
toolbar: '#toolbar-roomfishprobability',
|
||
|
|
defaultToolbar: ['filter', 'exports', 'print']
|
||
|
|
});
|
||
|
|
tableRendered = true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function saveConfig() {
|
||
|
|
if (!gameConfig) return;
|
||
|
|
if (!gameConfig.roomFishConfigs) gameConfig.roomFishConfigs = [];
|
||
|
|
|
||
|
|
var roomFishConfig = gameConfig.roomFishConfigs.find(function(r) {
|
||
|
|
return r.gameType === currentGameType;
|
||
|
|
});
|
||
|
|
|
||
|
|
if (!roomFishConfig) {
|
||
|
|
roomFishConfig = { gameType: currentGameType, roomFishProbabilityList: [] };
|
||
|
|
gameConfig.roomFishConfigs.push(roomFishConfig);
|
||
|
|
}
|
||
|
|
|
||
|
|
// 深拷贝写入,防止引用污染
|
||
|
|
roomFishConfig.roomFishProbabilityList = JSON.parse(JSON.stringify(probabilityCache));
|
||
|
|
|
||
|
|
admin.req({
|
||
|
|
method: "post",
|
||
|
|
contentType: "application/json;charset=UTF-8",
|
||
|
|
url: setter.baseurl + "adminapi/GameConfig/Update",
|
||
|
|
data: JSON.stringify(gameConfig),
|
||
|
|
done: function (res) {
|
||
|
|
if (res.code === 0 || res.code === 200) {
|
||
|
|
layer.msg('保存成功');
|
||
|
|
loadConfig();
|
||
|
|
} else {
|
||
|
|
layer.msg(res.info || '保存失败');
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
function initConfig() {
|
||
|
|
layer.confirm('确定要初始化全部配置数据吗?此操作将清空现有数据!', function(idx) {
|
||
|
|
layer.close(idx);
|
||
|
|
admin.req({
|
||
|
|
method: "get",
|
||
|
|
url: setter.baseurl + "adminapi/GameConfig/InitSection/RoomFishProbabilityList",
|
||
|
|
done: function (res) {
|
||
|
|
if (res.code === 0 || res.code === 200) {
|
||
|
|
layer.msg('初始化成功');
|
||
|
|
loadConfig();
|
||
|
|
} else {
|
||
|
|
layer.msg(res.info || '初始化失败');
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
$(document).on('click', '[lay-filter="init-roomfishprobability"]', function() {
|
||
|
|
if (window.parent && window.parent.$ && window.parent.layer) {
|
||
|
|
window.parent.$('.layui-layer-shade').remove();
|
||
|
|
window.parent.layer.closeAll();
|
||
|
|
}
|
||
|
|
initConfig();
|
||
|
|
});
|
||
|
|
|
||
|
|
$(document).on('click', '[lay-filter="reload-roomfishprobability"]', function() {
|
||
|
|
loadConfig();
|
||
|
|
layer.msg('刷新成功');
|
||
|
|
});
|
||
|
|
|
||
|
|
$(document).on('click', '[lay-filter="save-roomfishprobability"]', function() {
|
||
|
|
if (window.parent && window.parent.$ && window.parent.layer) {
|
||
|
|
window.parent.$('.layui-layer-shade').remove();
|
||
|
|
window.parent.layer.closeAll();
|
||
|
|
}
|
||
|
|
saveConfig();
|
||
|
|
});
|
||
|
|
|
||
|
|
$('#game-type-btns').off().on('click', '.layui-btn', function() {
|
||
|
|
var gameType = parseInt($(this).data('type'));
|
||
|
|
switchGameType(gameType);
|
||
|
|
});
|
||
|
|
|
||
|
|
$('#room-level-btns').off().on('click', '.layui-btn', function() {
|
||
|
|
var level = $(this).data('level');
|
||
|
|
switchRoomLevel(level);
|
||
|
|
});
|
||
|
|
|
||
|
|
function switchRoomLevel(level) {
|
||
|
|
currentRoomLevel = level;
|
||
|
|
|
||
|
|
$('#room-level-btns .layui-btn').removeClass('layui-btn-primary');
|
||
|
|
if (level === 'all') {
|
||
|
|
$('#room-level-btns .layui-btn[data-level="all"]').addClass('layui-btn-primary');
|
||
|
|
} else {
|
||
|
|
$('#room-level-btns .layui-btn[data-level="' + level + '"]').addClass('layui-btn-primary');
|
||
|
|
}
|
||
|
|
|
||
|
|
renderTable();
|
||
|
|
}
|
||
|
|
|
||
|
|
table.on('tool(' + TABLE_ID + ')', function(obj) {
|
||
|
|
if (obj.event === 'edit') {
|
||
|
|
// 使用唯一标识匹配,而不是行号(行号在分页/筛选后会不准)
|
||
|
|
var data = null;
|
||
|
|
if (obj.data._uid) {
|
||
|
|
// 优先通过唯一ID匹配
|
||
|
|
data = probabilityCache.find(function(item) { return item._uid === obj.data._uid; });
|
||
|
|
}
|
||
|
|
if (!data) {
|
||
|
|
// 兜底:通过字段组合匹配
|
||
|
|
var roomLevel = obj.data.roomLevel;
|
||
|
|
var type = obj.data.type;
|
||
|
|
var fishType = obj.data.fishType;
|
||
|
|
data = probabilityCache.find(function(item) {
|
||
|
|
return item.roomLevel === roomLevel && item.type === type && item.fishType === fishType;
|
||
|
|
});
|
||
|
|
}
|
||
|
|
if (!data) data = obj.data;
|
||
|
|
showEditDialog(data);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
function showEditDialog(data) {
|
||
|
|
var d = JSON.parse(JSON.stringify(data));
|
||
|
|
|
||
|
|
// 统一解析 range 为数组
|
||
|
|
d.firstFishCountRange = parseRange(d.firstFishCountRange, 1, 5);
|
||
|
|
d.timeRange = parseRange(d.timeRange, 5, 10);
|
||
|
|
d.countRange = parseRange(d.countRange, 5, 10);
|
||
|
|
d.maxCountRange = parseRange(d.maxCountRange, 10, 20);
|
||
|
|
|
||
|
|
var html = '<form class="layui-form" lay-filter="probability-form" style="padding:20px;">' +
|
||
|
|
'<div class="layui-form-item">' +
|
||
|
|
'<label class="layui-form-label">房间等级</label>' +
|
||
|
|
'<div class="layui-input-inline">' +
|
||
|
|
'<input type="number" name="roomLevel" value="' + (d.roomLevel || 1) + '" class="layui-input">' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'<div class="layui-form-item">' +
|
||
|
|
'<label class="layui-form-label">类型</label>' +
|
||
|
|
'<div class="layui-input-inline">' +
|
||
|
|
'<select name="type">' +
|
||
|
|
'<option value="1" ' + (d.type === 1 ? 'selected' : '') + '>鱼</option>' +
|
||
|
|
'<option value="2" ' + (d.type === 2 ? 'selected' : '') + '>鱼阵</option>' +
|
||
|
|
'</select>' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'<div class="layui-form-item">' +
|
||
|
|
'<label class="layui-form-label">鱼类型</label>' +
|
||
|
|
'<div class="layui-input-inline">' +
|
||
|
|
'<select name="fishType">' +
|
||
|
|
'<option value="0" ' + (d.fishType === 0 ? 'selected' : '') + '>不限</option>' +
|
||
|
|
'<option value="1" ' + (d.fishType === 1 ? 'selected' : '') + '>普通鱼</option>' +
|
||
|
|
'<option value="2" ' + (d.fishType === 2 ? 'selected' : '') + '>Boss鱼</option>' +
|
||
|
|
'<option value="3" ' + (d.fishType === 3 ? 'selected' : '') + '>黄金鱼</option>' +
|
||
|
|
'<option value="4" ' + (d.fishType === 4 ? 'selected' : '') + '>特殊鱼</option>' +
|
||
|
|
'<option value="5" ' + (d.fishType === 5 ? 'selected' : '') + '>特殊Boss</option>' +
|
||
|
|
'</select>' +
|
||
|
|
'</div>' +
|
||
|
|
'<div class="layui-form-mid">鱼阵时此参数无效</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'<fieldset class="layui-elem-field">' +
|
||
|
|
'<legend>首次出鱼数量区间</legend>' +
|
||
|
|
'<div class="layui-form-item">' +
|
||
|
|
'<div class="layui-inline">' +
|
||
|
|
'<label class="layui-form-label">最小值</label>' +
|
||
|
|
'<div class="layui-input-inline">' +
|
||
|
|
'<input type="number" name="firstFishCountMin" value="' + d.firstFishCountRange[0] + '" class="layui-input">' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'<div class="layui-inline">' +
|
||
|
|
'<label class="layui-form-label">最大值</label>' +
|
||
|
|
'<div class="layui-input-inline">' +
|
||
|
|
'<input type="number" name="firstFishCountMax" value="' + d.firstFishCountRange[1] + '" class="layui-input">' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'</fieldset>' +
|
||
|
|
'<fieldset class="layui-elem-field">' +
|
||
|
|
'<legend>出鱼时间频率区间(秒)</legend>' +
|
||
|
|
'<div class="layui-form-item">' +
|
||
|
|
'<div class="layui-inline">' +
|
||
|
|
'<label class="layui-form-label">最小值</label>' +
|
||
|
|
'<div class="layui-input-inline">' +
|
||
|
|
'<input type="number" name="timeRangeMin" value="' + d.timeRange[0] + '" class="layui-input">' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'<div class="layui-inline">' +
|
||
|
|
'<label class="layui-form-label">最大值</label>' +
|
||
|
|
'<div class="layui-input-inline">' +
|
||
|
|
'<input type="number" name="timeRangeMax" value="' + d.timeRange[1] + '" class="layui-input">' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'</fieldset>' +
|
||
|
|
'<fieldset class="layui-elem-field">' +
|
||
|
|
'<legend>出鱼数量频率区间</legend>' +
|
||
|
|
'<div class="layui-form-item">' +
|
||
|
|
'<div class="layui-inline">' +
|
||
|
|
'<label class="layui-form-label">最小值</label>' +
|
||
|
|
'<div class="layui-input-inline">' +
|
||
|
|
'<input type="number" name="countRangeMin" value="' + d.countRange[0] + '" class="layui-input">' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'<div class="layui-inline">' +
|
||
|
|
'<label class="layui-form-label">最大值</label>' +
|
||
|
|
'<div class="layui-input-inline">' +
|
||
|
|
'<input type="number" name="countRangeMax" value="' + d.countRange[1] + '" class="layui-input">' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'</fieldset>' +
|
||
|
|
'<fieldset class="layui-elem-field">' +
|
||
|
|
'<legend>场内允许数量区间</legend>' +
|
||
|
|
'<div class="layui-form-item">' +
|
||
|
|
'<div class="layui-inline">' +
|
||
|
|
'<label class="layui-form-label">最小值</label>' +
|
||
|
|
'<div class="layui-input-inline">' +
|
||
|
|
'<input type="number" name="maxCountRangeMin" value="' + d.maxCountRange[0] + '" class="layui-input">' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'<div class="layui-inline">' +
|
||
|
|
'<label class="layui-form-label">最大值</label>' +
|
||
|
|
'<div class="layui-input-inline">' +
|
||
|
|
'<input type="number" name="maxCountRangeMax" value="' + d.maxCountRange[1] + '" class="layui-input">' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'</fieldset>' +
|
||
|
|
'<div class="layui-form-item">' +
|
||
|
|
'<div class="layui-input-block">' +
|
||
|
|
'<button class="layui-btn" lay-submit lay-filter="probability-save">保存</button>' +
|
||
|
|
'<button type="button" class="layui-btn layui-btn-primary" id="probability-cancel">取消</button>' +
|
||
|
|
'</div>' +
|
||
|
|
'</div>' +
|
||
|
|
'</form>';
|
||
|
|
|
||
|
|
layer.open({
|
||
|
|
type: 1,
|
||
|
|
title: '编辑出鱼概率配置',
|
||
|
|
area: ['600px', '550px'],
|
||
|
|
content: html,
|
||
|
|
success: function(layero) {
|
||
|
|
form.render();
|
||
|
|
|
||
|
|
form.on('submit(probability-save)', function(formData) {
|
||
|
|
var newData = {
|
||
|
|
roomLevel: parseIntOrDefault(formData.field.roomLevel, 1),
|
||
|
|
type: parseIntOrDefault(formData.field.type, 1),
|
||
|
|
fishType: parseIntOrDefault(formData.field.fishType, 0),
|
||
|
|
firstFishCountRange: [
|
||
|
|
parseIntOrDefault(formData.field.firstFishCountMin, 1),
|
||
|
|
parseIntOrDefault(formData.field.firstFishCountMax, 5)
|
||
|
|
],
|
||
|
|
timeRange: [
|
||
|
|
parseIntOrDefault(formData.field.timeRangeMin, 5),
|
||
|
|
parseIntOrDefault(formData.field.timeRangeMax, 10)
|
||
|
|
],
|
||
|
|
countRange: [
|
||
|
|
parseIntOrDefault(formData.field.countRangeMin, 5),
|
||
|
|
parseIntOrDefault(formData.field.countRangeMax, 10)
|
||
|
|
],
|
||
|
|
maxCountRange: [
|
||
|
|
parseIntOrDefault(formData.field.maxCountRangeMin, 10),
|
||
|
|
parseIntOrDefault(formData.field.maxCountRangeMax, 20)
|
||
|
|
]
|
||
|
|
};
|
||
|
|
|
||
|
|
// 通过 roomLevel + type + fishType 匹配找到对应行并更新
|
||
|
|
var found = false;
|
||
|
|
for (var i = 0; i < probabilityCache.length; i++) {
|
||
|
|
if (probabilityCache[i].roomLevel === data.roomLevel &&
|
||
|
|
probabilityCache[i].type === data.type &&
|
||
|
|
probabilityCache[i].fishType === data.fishType) {
|
||
|
|
probabilityCache[i] = newData;
|
||
|
|
found = true;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (!found) {
|
||
|
|
probabilityCache.push(newData);
|
||
|
|
}
|
||
|
|
|
||
|
|
layer.closeAll();
|
||
|
|
renderTable();
|
||
|
|
layer.msg('保存成功');
|
||
|
|
return false;
|
||
|
|
});
|
||
|
|
|
||
|
|
$('#probability-cancel').off().on('click', function() {
|
||
|
|
layer.closeAll();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
window.saveSection=function(n){layui.admin.req({method:'get',url:(layui.setter.baseurl||'/')+'adminapi/GameConfig/SaveSection/'+n,done:function(r){layui.layer.msg(r.info||(r.code===0?'保存成功':'保存失败'))}})}
|
||
|
|
|
||
|
|
loadConfig();
|
||
|
|
});
|
||
|
|
</script>
|
||
|
|
</body>
|
||
|
|
</html>
|