Files
BuYuHouDuan/AdminSrc/AdminHost/wwwroot/admin/dist/views/gameconfig/room.html
T

331 lines
14 KiB
HTML
Raw Normal View History

2026-10-12 16:22:04 +08:00
<title>房间配置</title>
<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-body" style="padding-top:10px;">
<table id="table-room" lay-filter="table-room"></table>
</div>
</div>
</div>
<script type="text/html" id="toolbar-room">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm layui-btn-normal" lay-filter="init-room"><i class="layui-icon layui-icon-refresh"></i> 初始化配置</button>
<button class="layui-btn layui-btn-sm" lay-filter="save-room"><i class="layui-icon layui-icon-ok"></i> 保存配置</button>
<button class="layui-btn layui-btn-sm layui-btn-warm" lay-filter="reload-room"><i class="layui-icon layui-icon-refresh"></i> 刷新</button>
<button class="layui-btn layui-btn-sm" lay-filter="add-room">添加</button>
<button class="layui-btn layui-btn-sm layui-btn-danger" lay-filter="batchdel-room">批量删除</button>
<button class="layui-btn layui-btn-sm layui-btn-normal" onclick="saveSection('RoomConfigs')"><i class="layui-icon layui-icon-export"></i> 保存到初始化文件</button>
</div>
</script>
<script type="text/html" id="tpl-gameType">
{{# var typeMap = {0:'无',1:'风雷之渊',2:'永夜尸城',3:'中国象棋',4:'星际迷航',5:'黑神话悟空'}; }}
{{= typeMap[d.gameType] || '无' }}
</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>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>
</script>
<script>
layui.use(['admin', 'table', 'form'], function () {
var $ = layui.$,
admin = layui.admin,
table = layui.table,
form = layui.form,
setter = layui.setter;
var gameConfig = null;
// 页面加载时清理可能残留的遮罩
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);
function loadConfig() {
admin.req({
method: "get",
url: setter.baseurl + "adminapi/GameConfig",
done: function (res) {
if (res.code === 0 && res.data) {
gameConfig = res.data;
renderTable();
}
}
});
}
function formatList(list) {
if (!list) return '';
if (Array.isArray(list)) return list.join(',');
return String(list);
}
function parseList(str) {
if (!str) return [];
if (Array.isArray(str)) return str;
if (typeof str === 'string') {
return str.split(',').map(function(x) { return parseInt(x.trim()); }).filter(function(x) { return !isNaN(x); });
}
return [];
}
function renderTable() {
table.render({
elem: '#table-room',
data: gameConfig ? gameConfig.roomConfigs || [] : [],
cols: [[
{ type: 'checkbox', fixed: 'left' },
{ field: "roomNumber", title: "编号", width: 80 },
{ field: "roomName", title: "名称", width: 120 },
{ field: "gameType", title: "游戏类型", width: 100, templet: '#tpl-gameType' },
{ field: "roomLevel", title: "等级", width: 70 },
{ field: "roomPartitionNum", title: "分区数", width: 80 },
{ field: "roomCount", title: "房间数", width: 80 },
{ field: "roomGoldLimit", title: "金币限制", width: 100 },
{ field: "cannonMultipleList", title: "炮倍列表", width: 150, templet: function(d) {
return formatList(d.cannonMultipleList);
}},
{ title: "操作", width: 150, fixed: 'right', toolbar: '#table-operate' }
]],
toolbar: '#toolbar-room',
defaultToolbar: ['filter', 'exports', 'print']
});
}
function initConfig() {
layer.confirm('确定要初始化全部配置数据吗?此操作将清空现有数据!', function(idx) {
layer.close(idx);
admin.req({
method: "get",
url: setter.baseurl + "adminapi/GameConfig/InitSection/RoomConfigs",
done: function (res) {
if (res.code === 0 || res.code === 200) {
layer.msg('初始化成功');
loadConfig();
} else {
layer.msg(res.info || '初始化失败');
}
},
fail: function(res) {
layer.msg(res.info || '初始化失败');
}
});
});
}
$(document).on('click', '[lay-filter="init-room"]', 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-room"]', function() {
loadConfig();
layer.msg('刷新成功');
});
$(document).on('click', '[lay-filter="save-room"]', function() {
if (window.parent && window.parent.$ && window.parent.layer) {
window.parent.$('.layui-layer-shade').remove();
window.parent.layer.closeAll();
}
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 || '保存失败');
}
}
});
});
table.on('tool(table-room)', function(obj) {
var data = obj.data;
var trIndex = obj.tr.index();
if (trIndex < 0) trIndex = gameConfig.roomConfigs.findIndex(function(x) { return x.roomNumber === data.roomNumber; });
if (obj.event === 'edit') {
showEditDialog(data, false, trIndex);
} else if (obj.event === 'del') {
layer.confirm('确定删除该配置吗?', function(idx) {
if (trIndex > -1) gameConfig.roomConfigs.splice(trIndex, 1);
obj.del();
layer.close(idx);
});
}
});
function showAddDialog() {
var newData = {
roomNumber: '',
roomName: '',
gameType: 0,
roomLevel: 0,
roomPartitionNum: 0,
roomCount: 0,
roomGoldLimit: 0,
cannonMultipleList: []
};
showEditDialog(newData, true, -1);
}
$(document).on('click', '[lay-filter="add-room"]', function() {
showAddDialog();
});
$(document).on('click', '[lay-filter="batchdel-room"]', function() {
var checkStatus = table.checkStatus('table-room');
var checkData = checkStatus.data;
if (checkData.length === 0) {
return layer.msg('请选择要删除的数据');
}
layer.confirm('确定删除选中的 ' + checkData.length + ' 条数据吗?', function(idx) {
var ids = checkData.map(function(item) { return item.roomNumber; });
gameConfig.roomConfigs = gameConfig.roomConfigs.filter(function(item) {
return !ids.includes(item.roomNumber);
});
renderTable();
layer.close(idx);
});
});
function showEditDialog(data, isAdd, itemIndex) {
var dialogTitle = isAdd ? '添加房间' : '编辑房间';
var typeOptions = [
{value: 0, text: '无'},
{value: 1, text: '风雷之渊'},
{value: 2, text: '永夜尸城'},
{value: 3, text: '中国象棋'},
{value: 4, text: '星际迷航'},
{value: 5, text: '黑神话悟空'}
];
var typeHtml = '';
typeOptions.forEach(function(opt) {
typeHtml += '<option value="' + opt.value + '"' + (data.gameType === opt.value ? ' selected' : '') + '>' + opt.text + '</option>';
});
var cannonStr = formatList(data.cannonMultipleList);
var html = '<div style="padding:20px;">' +
'<form class="layui-form">' +
'<div class="layui-form-item">' +
'<label class="layui-form-label">编号</label>' +
'<div class="layui-input-block">' +
'<input type="text" name="roomNumber" value="' + (data.roomNumber || '') + '" class="layui-input">' +
'</div>' +
'</div>' +
'<div class="layui-form-item">' +
'<label class="layui-form-label">名称</label>' +
'<div class="layui-input-block">' +
'<input type="text" name="roomName" value="' + (data.roomName || '') + '" class="layui-input">' +
'</div>' +
'</div>' +
'<div class="layui-form-item">' +
'<label class="layui-form-label">游戏类型</label>' +
'<div class="layui-input-block">' +
'<select name="gameType">' + typeHtml + '</select>' +
'</div>' +
'</div>' +
'<div class="layui-form-item">' +
'<label class="layui-form-label">等级</label>' +
'<div class="layui-input-block">' +
'<input type="number" name="roomLevel" value="' + (data.roomLevel || 0) + '" class="layui-input">' +
'</div>' +
'</div>' +
'<div class="layui-form-item">' +
'<label class="layui-form-label">分区数</label>' +
'<div class="layui-input-block">' +
'<input type="number" name="roomPartitionNum" value="' + (data.roomPartitionNum || 0) + '" class="layui-input">' +
'</div>' +
'</div>' +
'<div class="layui-form-item">' +
'<label class="layui-form-label">房间数</label>' +
'<div class="layui-input-block">' +
'<input type="number" name="roomCount" value="' + (data.roomCount || 0) + '" class="layui-input">' +
'</div>' +
'</div>' +
'<div class="layui-form-item">' +
'<label class="layui-form-label">金币限制</label>' +
'<div class="layui-input-block">' +
'<input type="number" name="roomGoldLimit" value="' + (data.roomGoldLimit || 0) + '" class="layui-input">' +
'</div>' +
'</div>' +
'<div class="layui-form-item">' +
'<label class="layui-form-label">炮倍列表</label>' +
'<div class="layui-input-block">' +
'<input type="text" name="cannonMultipleList" value="' + cannonStr + '" placeholder="多个值用逗号分隔" class="layui-input">' +
'</div>' +
'</div>' +
'</form>' +
'</div>';
layer.open({
type: 1,
title: dialogTitle,
area: ['600px', '550px'],
content: html,
btn: ['保存', '取消'],
shadeClose: true,
success: function(layero) {
form.render('select');
},
yes: function(index, layero) {
var cannonStr = layero.find('input[name="cannonMultipleList"]').val();
var cannonList = parseList(cannonStr);
var updatedItem = {
roomNumber: layero.find('input[name="roomNumber"]').val(),
roomName: layero.find('input[name="roomName"]').val(),
gameType: parseInt(layero.find('select[name="gameType"]').val()),
roomLevel: parseInt(layero.find('input[name="roomLevel"]').val()) || 0,
roomPartitionNum: parseInt(layero.find('input[name="roomPartitionNum"]').val()) || 0,
roomCount: parseInt(layero.find('input[name="roomCount"]').val()) || 0,
roomGoldLimit: parseInt(layero.find('input[name="roomGoldLimit"]').val()) || 0,
cannonMultipleList: cannonList
};
if (isAdd) {
gameConfig.roomConfigs.unshift(updatedItem);
} else {
if (itemIndex >= 0 && itemIndex < gameConfig.roomConfigs.length) {
gameConfig.roomConfigs[itemIndex] = updatedItem;
}
}
layer.close(index);
table.reload('table-room', {
data: gameConfig.roomConfigs
});
}
});
}
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>