Files
BuYuHouDuan/AdminSrc/AdminHost/wwwroot/admin/dist/views/gameconfig/battleorder.html
T
2026-10-12 16:22:04 +08:00

647 lines
38 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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-header">基础配置</div>
<div class="layui-card-body">
<form class="layui-form" lay-filter="bo-form">
<div class="layui-form-item">
<label class="layui-form-label">是否开启</label>
<div class="layui-input-inline">
<input type="checkbox" name="isOpen" lay-skin="switch" lay-text="开启|关闭">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">结束时间</label>
<div class="layui-input-inline">
<input type="text" name="endTime" id="endTime" class="layui-input" placeholder="选择日期时间">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">规则描述</label>
<div class="layui-input-inline" style="width:400px;">
<input type="text" name="ruleDesc" class="layui-input" placeholder="规则描述">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">购买描述</label>
<div class="layui-input-inline" style="width:400px;">
<input type="text" name="buyDesc" class="layui-input" placeholder="购买描述">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">进阶描述</label>
<div class="layui-input-inline" style="width:400px;">
<input type="text" name="advanceGiftDesc" class="layui-input" placeholder="进阶奖励描述">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="save-base">保存基础配置</button>
</div>
</div>
</form>
</div>
</div>
<div class="layui-card">
<div class="layui-card-header">等级配置</div>
<div class="layui-card-body">
<div class="layui-btn-container" style="margin-bottom:10px;">
<button class="layui-btn layui-btn-sm layui-btn-normal" lay-filter="init-level"><i class="layui-icon layui-icon-refresh"></i> 初始化</button>
<button class="layui-btn layui-btn-sm" lay-filter="add-level"><i class="layui-icon layui-icon-add-1"></i> 添加等级</button>
<button class="layui-btn layui-btn-sm" lay-filter="save-levels"><i class="layui-icon layui-icon-ok"></i> 保存</button>
<button class="layui-btn layui-btn-sm layui-btn-normal" onclick="saveAct('BattleOrderConfig')"><i class="layui-icon layui-icon-export"></i> 保存到初始化文件</button>
</div>
<table id="table-level" lay-filter="table-level"></table>
</div>
</div>
<div class="layui-card">
<div class="layui-card-header">进阶配置</div>
<div class="layui-card-body">
<div class="layui-btn-container" style="margin-bottom:10px;">
<button class="layui-btn layui-btn-sm layui-btn-normal" lay-filter="init-advance"><i class="layui-icon layui-icon-refresh"></i> 初始化</button>
<button class="layui-btn layui-btn-sm" lay-filter="add-advance"><i class="layui-icon layui-icon-add-1"></i> 添加进阶</button>
<button class="layui-btn layui-btn-sm" lay-filter="save-advances"><i class="layui-icon layui-icon-ok"></i> 保存</button>
</div>
<table id="table-advance" lay-filter="table-advance"></table>
</div>
</div>
</div>
<script type="text/html" id="bar-level">
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
<script type="text/html" id="bar-advance">
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="reward">奖励</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
<script type="text/html" id="tpl-payType">
{{# var m = {1:'金币',2:'钻石',3:'现金'}; }}
{{= m[d.payType] || '金币' }}
</script>
<script type="text/html" id="tpl-advance-type">
{{# var m = {1:'豪华',2:'至尊',3:'豪华+至尊'}; }}
{{= m[d.type] || '豪华' }}
</script>
<script type="text/html" id="reward-dialog-tpl">
<div class="reward-tabs" style="padding:10px;">
<div class="layui-tab" lay-filter="reward-tab">
<ul class="layui-tab-title">
<li class="layui-this">普通奖励</li>
<li>豪华奖励</li>
<li>至尊奖励</li>
</ul>
<div class="layui-tab-content" style="height:480px;">
<div class="layui-tab-item layui-show" data-key="normalGiftList"></div>
<div class="layui-tab-item" data-key="luxuryGiftList"></div>
<div class="layui-tab-item" data-key="supremeGiftList"></div>
</div>
</div>
</div>
</script>
<script type="text/html" id="gift-editor-tpl">
<div class="gift-container">
<div class="gift-left">
<div class="gift-toolbar">
<button class="layui-btn layui-btn-sm" id="btn-add-gift"><i class="layui-icon layui-icon-add-1"></i> 新增</button>
<button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete-gift"><i class="layui-icon layui-icon-delete"></i> 删除</button>
</div>
<div class="gift-table-wrap"><table id="table-gift-list"></table></div>
</div>
<div class="gift-right">
<h4>礼包项详情</h4>
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">类型</label>
<div class="layui-input-block">
<select id="giftType" lay-filter="giftType">
<option value="1">金币</option>
<option value="2">钻石</option>
<option value="3">道具</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">数量</label>
<div class="layui-input-block"><input type="number" id="giftCount" class="layui-input" placeholder="数量"></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">随机</label>
<div class="layui-input-block"><input type="checkbox" id="giftIsRandom" lay-skin="switch" lay-text="是|否"></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">最小值</label>
<div class="layui-input-block"><input type="number" id="giftMinCount" class="layui-input" placeholder="最小值"></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">最大值</label>
<div class="layui-input-block"><input type="number" id="giftMaxCount" class="layui-input" placeholder="最大值"></div>
</div>
<div class="layui-form-item gift-prop-select" style="display:none;">
<label class="layui-form-label">道具编号</label>
<div class="layui-input-block"><input type="text" id="giftProductNumber" class="layui-input" placeholder="输入道具编号"></div>
</div>
<div class="layui-form-item" style="margin-top:10px;">
<button class="layui-btn layui-btn-normal" id="btn-save-gift" style="width:100%;">保存</button>
</div>
</div>
</div>
</div>
</script>
<script>
layui.use(['admin', 'table', 'form', 'layer', 'laydate', 'element', 'upload'], function () {
var $ = layui.$, admin = layui.admin, table = layui.table, form = layui.form,
layer = layui.layer, laydate = layui.laydate, setter = layui.setter, element = layui.element, upload = layui.upload;
var activityConfig = null;
var rewardCtx = null; // { giftList, title }
setTimeout(function() {
$('.layui-layer-shade').remove(); layer.closeAll();
}, 100);
laydate.render({ elem: '#endTime', type: 'datetime' });
function loadConfig() {
admin.req({ method: 'get', url: setter.baseurl + 'adminapi/ActivityConfig/Get',
done: function(r2) {
activityConfig = (r2.code === 0 && r2.data) ? r2.data : { battleOrderConfig: {} };
initForm();
}
});
}
function bo() {
if (!activityConfig.battleOrderConfig) activityConfig.battleOrderConfig = {};
return activityConfig.battleOrderConfig;
}
function initForm() {
var b = bo();
$('input[name="isOpen"]').prop('checked', b.isOpen);
$('input[name="endTime"]').val(b.endTime ? new Date(b.endTime * 1000).toLocaleString() : '');
$('input[name="ruleDesc"]').val(b.ruleDesc || '');
$('input[name="buyDesc"]').val(b.buyDesc || '');
$('input[name="advanceGiftDesc"]').val(b.advanceGiftDesc || '');
form.render();
renderLevelTable();
renderAdvanceTable();
}
function save(msg) {
admin.req({
method: 'post', contentType: 'application/json;charset=UTF-8',
url: setter.baseurl + 'adminapi/ActivityConfig/UpdateBattleOrder',
data: JSON.stringify(activityConfig.battleOrderConfig),
done: function(r) {
r.code === 0 ? (layer.msg(msg || '保存成功'), loadConfig()) : layer.msg(r.info || '保存失败');
}
});
}
form.on('submit(save-base)', function(d) {
var b = bo();
b.isOpen = d.field.isOpen === 'on';
b.ruleDesc = d.field.ruleDesc || '';
b.buyDesc = d.field.buyDesc || '';
b.advanceGiftDesc = d.field.advanceGiftDesc || '';
if (d.field.endTime) b.endTime = Math.floor(new Date(d.field.endTime).getTime() / 1000);
save('保存成功'); return false;
});
// ==================== 等级表格 ====================
function renderLevelTable() {
var levels = bo().levelConfig || [];
table.render({ elem: '#table-level', data: levels, page: true,
cols: [[
{ type: 'numbers', title: '序号', width: 60 },
{ field: 'level', title: '等级', width: 70, sort: true },
{ field: 'exp', title: '升级经验', width: 90 },
{ title: '普通奖励', width: 90, templet: function(d) { return (d.normalGiftList||[]).length + '项'; } },
{ title: '豪华奖励', width: 90, templet: function(d) { return (d.luxuryGiftList||[]).length + '项'; } },
{ title: '至尊奖励', width: 90, templet: function(d) { return (d.supremeGiftList||[]).length + '项'; } },
{ field: 'payType', title: '付费', width: 70, templet: '#tpl-payType' },
{ field: 'payCount', title: '费用', width: 80 },
{ title: '操作', width: 200, fixed: 'right', toolbar: '#bar-level' }
]]
});
}
// ==================== 进阶表格 ====================
function renderAdvanceTable() {
var list = bo().advanceGift || [];
table.render({ elem: '#table-advance', data: list, page: false,
cols: [[
{ type: 'numbers', title: '序号', width: 60 },
{ field: 'type', title: '类型', width: 80, templet: '#tpl-advance-type' },
{ field: 'name', title: '名称', width: 120 },
{ field: 'count', title: '数量', width: 80 },
{ field: 'payType', title: '付费', width: 70, templet: '#tpl-payType' },
{ field: 'payCount', title: '费用', width: 80 },
{ title: '奖励', width: 80, templet: function(d) { return (d.giftList||[]).length + '项'; } },
{ title: '操作', width: 180, fixed: 'right', toolbar: '#bar-advance' }
]]
});
}
// ==================== 等级 CRUD ====================
function showLevelEdit(data, isAdd) {
var readonly = isAdd ? '' : 'readonly';
var html = '<div style="padding:15px;"><form class="layui-form">' +
'<div class="layui-row"><div class="layui-col-md6"><div class="layui-form-item"><label class="layui-form-label">等级</label><div class="layui-input-block"><input type="number" id="dlg-level" value="'+(data.level||'')+'" class="layui-input" '+readonly+'></div></div></div>' +
'<div class="layui-col-md6"><div class="layui-form-item"><label class="layui-form-label">升级经验</label><div class="layui-input-block"><input type="number" id="dlg-exp" value="'+(data.exp||0)+'" class="layui-input"></div></div></div></div>' +
'<div class="layui-row"><div class="layui-col-md6"><div class="layui-form-item"><label class="layui-form-label">付费类型</label><div class="layui-input-block"><select id="dlg-payType"><option value="1"'+(data.payType===1?' selected':'')+'>金币</option><option value="2"'+(data.payType===2?' selected':'')+'>钻石</option><option value="3"'+(data.payType===3?' selected':'')+'>现金</option></select></div></div></div>' +
'<div class="layui-col-md6"><div class="layui-form-item"><label class="layui-form-label">付费金额</label><div class="layui-input-block"><input type="number" id="dlg-payCount" value="'+(data.payCount||0)+'" class="layui-input"></div></div></div></div>' +
'<div style="margin-top:10px;border-top:1px solid #eee;padding-top:10px;"><div class="layui-tab" lay-filter="dlg-reward-tab"><ul class="layui-tab-title"><li class="layui-this">普通奖励</li><li>豪华奖励</li><li>至尊奖励</li></ul>' +
'<div class="layui-tab-content" style="height:300px;padding:5px 0;">' +
'<div class="layui-tab-item layui-show"><div class="inplace-gift" data-key="normalGiftList"></div></div>' +
'<div class="layui-tab-item"><div class="inplace-gift" data-key="luxuryGiftList"></div></div>' +
'<div class="layui-tab-item"><div class="inplace-gift" data-key="supremeGiftList"></div></div>' +
'</div></div></div></form></div>';
layer.open({ type:1, title:isAdd?'添加等级':'编辑等级', area:['850px','580px'], content:html, btn:['保存','取消'],
success:function(l){
form.render('select');
element.render('tab');
var keys = ['normalGiftList','luxuryGiftList','supremeGiftList'];
var tgt = {};
keys.forEach(function(k){ tgt[k] = data[k] || []; });
renderInplaceGift(l.find('.inplace-gift[data-key="normalGiftList"]'), tgt.normalGiftList);
element.on('tab(dlg-reward-tab)', function(o){
var k = keys[o.index];
var ph = l.find('.inplace-gift[data-key="'+k+'"]');
if (ph.is(':empty')) renderInplaceGift(ph, tgt[k]);
});
window._dlgGiftData = tgt;
},
yes:function(idx,l){
var tgt = window._dlgGiftData || {};
var item = {
level: parseInt(l.find('#dlg-level').val()) || data.level,
exp: parseInt(l.find('#dlg-exp').val()) || 0,
normalGiftList: tgt.normalGiftList || [],
luxuryGiftList: tgt.luxuryGiftList || [],
supremeGiftList: tgt.supremeGiftList || [],
payType: parseInt(l.find('#dlg-payType').val()) || 1,
payCount: parseInt(l.find('#dlg-payCount').val()) || 0
};
var b = bo();
if (!b.levelConfig) b.levelConfig = [];
if (isAdd) {
if (b.levelConfig.some(function(x) { return x.level === item.level; }))
{ layer.msg('等级已存在'); return; }
b.levelConfig.push(item);
} else {
var i = b.levelConfig.findIndex(function(x) { return x.level === data.level; });
if (i > -1) b.levelConfig[i] = item;
}
delete window._dlgGiftData;
layer.close(idx); save(isAdd?'添加成功':'保存成功');
}
});
}
function renderInplaceGift(container, giftList) {
if (!giftList) giftList = [];
var html = '<div style="margin-bottom:8px;"><button class="layui-btn layui-btn-xs layui-btn-normal btn-ip-add"><i class="layui-icon layui-icon-add-1"></i> 新增奖励项</button></div>' +
'<table class="ip-gift-table"><thead><tr><th style="width:60px">类型</th><th style="width:60px">数量</th><th style="width:60px">最小值</th><th style="width:60px">最大值</th><th style="width:60px">随机</th><th style="width:100px">道具ID</th><th style="width:60px">操作</th></tr></thead><tbody></tbody></table>';
container.html(html);
var tbody = container.find('tbody');
function renderRows(){
tbody.empty();
giftList.forEach(function(g,idx){
var typeMap = {1:'金币',2:'钻石',3:'道具'};
var tr = $('<tr><td>'+ (typeMap[g.type]||'金币') +'</td><td>'+ (g.count||0) +'</td><td>'+ (g.minCount||0) +'</td><td>'+ (g.maxCount||0) +'</td><td>'+ (g.isRandom?'是':'否') +'</td><td>'+ (g.otherId||'') +'</td><td><button class="layui-btn layui-btn-xs btn-ip-edit" data-idx="'+idx+'">编辑</button><button class="layui-btn layui-btn-xs layui-btn-danger btn-ip-del" data-idx="'+idx+'">删除</button></td></tr>');
tbody.append(tr);
});
}
renderRows();
container.find('.btn-ip-add').off('click').on('click', function(){
giftList.push({type:1,count:100,isRandom:false,minCount:0,maxCount:0,otherId:''});
renderRows();
});
container.off('click','.btn-ip-del').on('click','.btn-ip-del', function(){
var idx = parseInt($(this).data('idx'));
giftList.splice(idx,1);
renderRows();
});
container.off('click','.btn-ip-edit').on('click','.btn-ip-edit', function(){
var idx = parseInt($(this).data('idx'));
var g = giftList[idx];
if (!g) return;
var ehtml = '<div style="padding:15px;"><form class="layui-form"><div class="layui-form-item"><label class="layui-form-label">类型</label><div class="layui-input-block"><select id="ip-type"><option value="1"'+(g.type===1?' selected':'')+'>金币</option><option value="2"'+(g.type===2?' selected':'')+'>钻石</option><option value="3"'+(g.type===3?' selected':'')+'>道具</option></select></div></div>' +
'<div class="layui-form-item"><label class="layui-form-label">数量</label><div class="layui-input-block"><input type="number" id="ip-count" value="'+(g.count||0)+'" class="layui-input"></div></div>' +
'<div class="layui-form-item"><label class="layui-form-label">随机</label><div class="layui-input-block"><input type="checkbox" id="ip-random" lay-skin="switch" lay-text="是|否"'+(g.isRandom?' checked':'')+'></div></div>' +
'<div class="layui-form-item"><label class="layui-form-label">最小值</label><div class="layui-input-block"><input type="number" id="ip-min" value="'+(g.minCount||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" id="ip-max" value="'+(g.maxCount||0)+'" class="layui-input"></div></div>' +
'<div class="layui-form-item gift-prop-select" style="'+(g.type===3?'':'display:none;')+'"><label class="layui-form-label">道具编号</label><div class="layui-input-block"><input type="text" id="ip-oid" class="layui-input" value="'+(g.otherId||'')+'" placeholder="输入道具编号"></div></div></form></div>';
layer.open({type:1,title:'编辑奖励项',area:['420px','420px'],content:ehtml,btn:['保存','取消'],
success:function(el){ form.render(); form.on('select(ip-type)', function(o){ el.find('.gift-prop-select').toggle(o.value==='3'); }); },
yes:function(ei,el){
var t = parseInt(el.find('#ip-type').val())||1;
var propNum = t===3 ? (el.find('#ip-oid').val()||'') : '';
giftList[idx] = {
type:t, count: parseInt(el.find('#ip-count').val())||0,
isRandom: el.find('#ip-random')[0].checked,
minCount: parseInt(el.find('#ip-min').val())||0,
maxCount: parseInt(el.find('#ip-max').val())||0,
otherId: propNum
};
layer.close(ei);
renderRows();
}
});
});
}
// ==================== 进阶 CRUD ====================
function showAdvanceEdit(data, isAdd) {
var readonly = isAdd ? '' : 'readonly';
var html = '<div style="padding:20px;"><form class="layui-form">' +
'<div class="layui-row"><div class="layui-col-md6"><div class="layui-form-item"><label class="layui-form-label">类型</label><div class="layui-input-block"><select id="dlg-type" '+readonly+'><option value="1"'+(data.type===1?' selected':'')+'>豪华</option><option value="2"'+(data.type===2?' selected':'')+'>至尊</option><option value="3"'+(data.type===3?' selected':'')+'>豪华+至尊</option></select></div></div></div>' +
'<div class="layui-col-md6"><div class="layui-form-item"><label class="layui-form-label">名称</label><div class="layui-input-block"><input type="text" id="dlg-name" value="'+(data.name||'')+'" class="layui-input"></div></div></div></div>' +
'<div class="layui-row"><div class="layui-col-md6"><div class="layui-form-item"><label class="layui-form-label">奖励数量</label><div class="layui-input-block"><input type="number" id="dlg-count" value="'+(data.count||0)+'" class="layui-input"></div></div></div>' +
'<div class="layui-col-md6"><div class="layui-form-item"><label class="layui-form-label">图片</label><div class="layui-input-block" style="display:flex;"><input type="text" id="dlg-image" value="'+(data.imageUrl||'')+'" class="layui-input" placeholder="图片URL" style="flex:1;margin-right:5px;"><button type="button" id="btn-upload-advance-img" class="layui-btn layui-btn-sm"><i class="layui-icon layui-icon-upload"></i></button></div></div></div></div>' +
'<div class="layui-row"><div class="layui-col-md6"><div class="layui-form-item"><label class="layui-form-label">付费类型</label><div class="layui-input-block"><select id="dlg-payType"><option value="1"'+(data.payType===1?' selected':'')+'>金币</option><option value="2"'+(data.payType===2?' selected':'')+'>钻石</option><option value="3"'+(data.payType===3?' selected':'')+'>现金</option></select></div></div></div>' +
'<div class="layui-col-md6"><div class="layui-form-item"><label class="layui-form-label">付费金额</label><div class="layui-input-block"><input type="number" id="dlg-payCount" value="'+(data.payCount||0)+'" class="layui-input"></div></div></div></div>' +
'</form></div>';
layer.open({ type:1, title:isAdd?'添加进阶':'编辑进阶', area:['550px','380px'], content:html, btn:['保存','取消'],
success:function(l){
form.render('select');
layui.upload.render({
elem: l.find('#btn-upload-advance-img'),
url: (layui.setter.baseurl||'/')+'adminapi/ImageUpload/upload/temp',
done: function(r) {
if (r.code === 0) l.find('#dlg-image').val(r.data.path);
}
});
},
yes:function(idx,l){
var item = {
type: parseInt(l.find('#dlg-type').val()) || 1,
name: l.find('#dlg-name').val() || '',
count: parseInt(l.find('#dlg-count').val()) || 0,
imageUrl: l.find('#dlg-image').val() || '',
payType: parseInt(l.find('#dlg-payType').val()) || 1,
payCount: parseInt(l.find('#dlg-payCount').val()) || 0,
giftList: data.giftList || []
};
var b = bo();
if (!b.advanceGift) b.advanceGift = [];
if (isAdd) {
if (b.advanceGift.some(function(x) { return x.type === item.type; }))
{ layer.msg('类型已存在'); return; }
b.advanceGift.push(item);
} else {
var i = b.advanceGift.findIndex(function(x) { return x.type === data.type; });
if (i > -1) b.advanceGift[i] = item;
}
layer.close(idx); save(isAdd?'添加成功':'保存成功');
}
});
}
// ==================== 奖励编辑弹窗(三层tab,与奖池页面一致) ====================
function showRewardDialog(title, levelData) {
rewardCtx = { normal: levelData.normalGiftList || [], luxury: levelData.luxuryGiftList || [], supreme: levelData.supremeGiftList || [] };
var html = '<div class="reward-tabs" style="padding:10px;"><div class="layui-tab" lay-filter="reward-tab">' +
'<ul class="layui-tab-title"><li class="layui-this">普通奖励</li><li>豪华奖励</li><li>至尊奖励</li></ul>' +
'<div class="layui-tab-content" style="height:480px;">' +
'<div class="layui-tab-item layui-show"><div class="gift-placeholder" data-key="normalGiftList"></div></div>' +
'<div class="layui-tab-item"><div class="gift-placeholder" data-key="luxuryGiftList"></div></div>' +
'<div class="layui-tab-item"><div class="gift-placeholder" data-key="supremeGiftList"></div></div>' +
'</div></div></div>';
layer.open({
type: 1, title: title, area: ['1000px', '620px'],
content: html, shade: 0.1, shadeClose: true,
success: function(layero) {
// 初始化第一个tab的编辑器
initGiftEditor(layero, rewardCtx.normal);
// tab切换时重新初始化编辑器
form.on('tab(reward-tab)', function(o) {
var key = o.index === 0 ? 'normalGiftList' : o.index === 1 ? 'luxuryGiftList' : 'supremeGiftList';
var list = rewardCtx[key];
var ph = layero.find('.gift-placeholder[data-key="' + key + '"]');
ph.html($('#gift-editor-tpl').html());
var propOpts = '<option value="">请选择道具</option>';
propList.forEach(function(p) { propOpts += '<option value="'+p.number+'">'+p.number+' - '+p.name+'</option>'; });
ph.find('#giftProductNumber').html(propOpts);
form.render();
bindGiftEvents(ph, list);
});
},
end: function() { renderLevelTable(); renderAdvanceTable(); }
});
}
function initGiftEditor(layero, giftList) {
var ph = layero.find('.gift-placeholder[data-key="normalGiftList"]');
ph.html($('#gift-editor-tpl').html());
var propOpts = '<option value="">请选择道具</option>';
propList.forEach(function(p) { propOpts += '<option value="'+p.number+'">'+p.number+' - '+p.name+'</option>'; });
ph.find('#giftProductNumber').html(propOpts);
form.render();
bindGiftEvents(ph, giftList);
}
function bindGiftEvents(container, giftList) {
var $c = $(container);
currentGiftIndex = -1;
renderGiftTable($c, giftList);
$c.find('#btn-add-gift').on('click', function() {
giftList.push({ type:1, count:100, isRandom:false, minCount:0, maxCount:0, otherId:'' });
currentGiftIndex = giftList.length - 1;
renderGiftTable($c, giftList, currentGiftIndex);
loadGiftForm(giftList[giftList.length-1], $c);
});
$c.find('#btn-delete-gift').on('click', function() {
if (currentGiftIndex < 0) return layer.msg('请先选择要删除的项');
giftList.splice(currentGiftIndex, 1);
currentGiftIndex = -1; clearGiftForm($c);
renderGiftTable($c, giftList, -1);
});
$c.find('#btn-save-gift').on('click', function() {
if (currentGiftIndex < 0) return layer.msg('请先选择要编辑的项');
var t = parseInt($c.find('#giftType').val()) || 1;
var oid = t === 3 ? ($c.find('#giftProductNumber').val()||'') : '';
giftList[currentGiftIndex] = {
type: t, count: parseInt($c.find('#giftCount').val()) || 0,
isRandom: $c.find('#giftIsRandom')[0].checked,
minCount: parseInt($c.find('#giftMinCount').val()) || 0,
maxCount: parseInt($c.find('#giftMaxCount').val()) || 0,
otherId: oid
};
renderGiftTable($c, giftList, currentGiftIndex);
layer.msg('保存成功');
});
form.on('select(giftType)', function(o) {
$c.find('.gift-prop-select').toggle(o.value === '3');
$c.find('#giftCount').val(0); $c.find('#giftIsRandom')[0].checked = false; form.render('checkbox');
});
$c.find('#giftCount').on('input', function() { $c.find('#giftIsRandom')[0].checked = false; form.render('checkbox'); });
$c.find('#giftIsRandom').on('click', function() {
if (this.checked) setTimeout(function() { $c.find('#giftCount').val(0); }, 10);
});
}
var currentGiftIndex = -1;
function renderGiftTable(container, giftList, selectIndex) {
table.render({ elem: container.find('#table-gift-list'), data: giftList, page: false, height: 380,
cols: [[
{ type: 'numbers', title: '序号', width: 60 },
{ field: 'type', title: '类型', width: 80, templet: function(d) { return ({1:'金币',2:'钻石',3:'道具'})[d.type]||'金币'; }},
{ field: 'count', title: '数量', width: 80 },
{ field: 'minCount', title: '最小值', width: 80 },
{ field: 'maxCount', title: '最大值', width: 80 },
{ field: 'isRandom', title: '随机', width: 70, templet: function(d) { return d.isRandom ? '是' : '否'; }},
{ field: 'otherId', title: '道具Id', width: 120 }
]],
done: function() {
if (selectIndex === undefined) selectIndex = giftList.length > 0 ? 0 : -1;
if (selectIndex >= 0 && selectIndex < giftList.length) {
currentGiftIndex = selectIndex;
var tr = container.find('#table-gift-list + .layui-table-view tr[data-index="'+selectIndex+'"]');
if (tr.length) { tr.addClass('layui-table-click'); loadGiftForm(giftList[selectIndex], container); }
}
}
});
container.find('#table-gift-list + .layui-table-view').off('click').on('click', 'tr[data-index]', function() {
var idx = parseInt($(this).attr('data-index'));
if (idx >= 0 && idx < giftList.length) {
currentGiftIndex = idx;
container.find('tr[data-index]').removeClass('layui-table-click');
$(this).addClass('layui-table-click');
loadGiftForm(giftList[idx], container);
}
});
}
function loadGiftForm(data, container) {
container.find('#giftType').val(data.type || 1);
container.find('#giftCount').val(data.count || 0);
container.find('#giftIsRandom')[0].checked = data.isRandom || false;
container.find('#giftMinCount').val(data.minCount || 0);
container.find('#giftMaxCount').val(data.maxCount || 0);
var oid = data.otherId || '';
container.find('#giftProductNumber').val(oid);
container.find('.gift-prop-select').toggle(data.type === 3);
form.render('checkbox'); form.render('select');
}
function clearGiftForm(container) {
container.find('#giftType').val('1');
container.find('#giftCount').val('0');
container.find('#giftIsRandom')[0].checked = false;
container.find('#giftMinCount').val('0');
container.find('#giftMaxCount').val('0');
container.find('#giftProductNumber').val('');
container.find('.gift-prop-select').hide();
form.render('checkbox'); form.render('select');
}
// ==================== 初始化按钮(从 JSON 还原) ====================
$(document).on('click', '[lay-filter="init-level"],[lay-filter="init-advance"]', function() {
layer.confirm('确定要从配置文件还原战令数据吗?', function(i) {
layer.close(i);
admin.req({
method: 'get',
url: setter.baseurl + 'adminapi/GameConfig/InitActivitySection/BattleOrderConfig',
done: function(r) {
if (r.code === 0 || r.code === 200) {
layer.msg('初始化成功');
loadConfig();
} else {
layer.msg(r.info || '初始化失败');
}
}
});
});
});
$(document).on('click', '[lay-filter="add-level"]', function() {
var b = bo(), levels = b.levelConfig || [];
var max = levels.length ? Math.max.apply(null, levels.map(function(l){return l.level;})) : 0;
showLevelEdit({ level:max+1, exp:(max+1)*100, normalGiftList:[], luxuryGiftList:[], supremeGiftList:[], payType:1, payCount:(max+1)*100 }, true);
});
$(document).on('click', '[lay-filter="add-advance"]', function() {
var b = bo(), list = b.advanceGift || [];
var used = list.map(function(a){return a.type;});
var nt = 1; while (used.indexOf(nt) > -1) nt++;
showAdvanceEdit({ type:nt, name:({1:'豪华',2:'至尊',3:'豪华+至尊'})[nt]||'进阶', count:100, payType:1, payCount:10000, giftList:[] }, true);
});
$(document).on('click', '[lay-filter="save-levels"],[lay-filter="save-advances"]', function() { save('保存成功'); });
// ==================== 表格操作事件 ====================
table.on('tool(table-level)', function(obj) {
var d = obj.data, b = bo(), i = b.levelConfig.findIndex(function(x){return x.level===d.level;});
if (i < 0) return;
if (obj.event === 'del') {
layer.confirm('确定删除等级'+d.level+'?', function(idx) { b.levelConfig.splice(i,1); layer.close(idx); save('删除成功'); });
} else if (obj.event === 'edit') {
showLevelEdit(d, false);
}
});
table.on('tool(table-advance)', function(obj) {
var d = obj.data, b = bo(), i = b.advanceGift.findIndex(function(x){return String(x.type)===String(d.type);});
if (i < 0) return;
if (obj.event === 'del') {
layer.confirm('确定删除进阶'+d.name+'?', function(idx) { b.advanceGift.splice(i,1); layer.close(idx); save('删除成功'); });
} else if (obj.event === 'edit') {
showAdvanceEdit(d);
} else if (obj.event === 'reward') {
if (!b.advanceGift[i].giftList) b.advanceGift[i].giftList = [];
var html = '<div class="gift-placeholder">'+$('#gift-editor-tpl').html()+'</div>';
layer.open({
type:1, title:'进阶 - '+d.name+' 奖励列表', area:['1000px','620px'],
content: html, shade: 0.1, shadeClose: true,
success: function(layero) {
// 奖励类型下拉与道具编号输入是两个不同字段,不能把道具选项塞进类型下拉。
form.render();
bindGiftEvents(layero.find('.gift-placeholder'), b.advanceGift[i].giftList);
},
end: function() { renderLevelTable(); renderAdvanceTable(); }
});
}
});
window.saveAct=function(n){layui.admin.req({method:'get',url:(layui.setter.baseurl||'/')+'adminapi/ActivityConfig/SaveSection/'+n,done:function(r){layui.layer.msg(r.info||(r.code===0?'保存成功':'保存失败'))}})}
loadConfig();
});
</script>
<style>
.gift-container { display: flex; height: 460px; padding: 10px; }
.gift-left { flex: 1; margin-right: 15px; }
.gift-table-wrap { height: 380px; overflow: auto; }
.gift-right { width: 280px; border-left: 1px solid #e6e6e6; padding-left: 15px; }
.gift-right h4 { margin-bottom: 12px; color: #333; font-size: 15px; padding-bottom: 8px; border-bottom: 1px solid #eee; }
.gift-toolbar { margin-bottom: 8px; }
.gift-toolbar .layui-btn { margin-right: 5px; }
.gift-right .layui-form-item { margin-bottom: 10px; }
.gift-right .layui-form-label { padding: 9px 0; width: 60px; }
.gift-right .layui-input-block { margin-left: 70px; }
.reward-tabs .layui-tab-title { height: 42px; }
.reward-tabs .layui-tab-title li { line-height: 42px; }
.reward-tabs .layui-tab-content { padding: 10px 0; }
</style>