2238 lines
104 KiB
HTML
2238 lines
104 KiB
HTML
|
|
<title>Boss配置</title>
|
|
|
|
<script src="/admin/layui/xm-select.js"></script>
|
|
|
|
<style>
|
|
.boss-form .layui-form-label { width: 140px; }
|
|
.boss-form legend { font-size: 14px; font-weight: normal; }
|
|
.boss-form .layui-form-mid { font-size: 12px; color: #999; }
|
|
.boss-form .layui-elem-field { border-color: #666; }
|
|
.boss-form .layui-input-block { min-height: 36px; }
|
|
.probability-section, .death-config-section { margin-top: 10px; }
|
|
.probability-item, .death-config-item, .luck-wheel-item { border: 1px solid #ddd; padding: 15px; margin: 15px 0; border-radius: 4px; background: #fafafa; }
|
|
.probability-item .fish-select-wrap, .death-config-item .fish-select-wrap { margin-bottom: 15px; }
|
|
.probability-item .fish-select-wrap label, .death-config-item .fish-select-wrap label { display: block; margin-bottom: 5px; font-weight: bold; }
|
|
.probability-item table, .death-config-item table { width: 100%; border-collapse: collapse; margin-top: 10px; }
|
|
.probability-item table th, .probability-item table td, .death-config-item table th, .death-config-item table td { border: 1px solid #ddd; padding: 8px; text-align: center; }
|
|
.probability-item table th, .death-config-item table th { background: #e6e6e6; font-weight: bold; }
|
|
.probability-item .param-row input, .death-config-item .param-row input { width: 100px; text-align: center; }
|
|
.probability-item .item-header, .death-config-item .item-header, .luck-wheel-item .item-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
|
|
.probability-item .item-header .item-title, .death-config-item .item-header .item-title, .luck-wheel-item .item-header .item-title { font-weight: bold; font-size: 14px; }
|
|
.fish-xmselect .xm-select-label { max-height: 80px; overflow-y: auto; }
|
|
.luck-wheel-list { margin-top: 10px; }
|
|
.luck-wheel-item { position: relative; padding-top: 35px; }
|
|
.luck-wheel-item .remove-wheel { position: absolute; top: 10px; right: 10px; }
|
|
.fish-name-tag { display: inline-block; background: #5fb878; color: #fff; padding: 2px 8px; border-radius: 3px; margin: 2px; font-size: 12px; }
|
|
.probability-list { }
|
|
.probability-card { border: 1px solid #e6e6e6; padding: 15px; margin-bottom: 10px; border-radius: 4px; background: #fafafa; cursor: pointer; transition: all 0.3s; }
|
|
.probability-card:hover { border-color: #009688; background: #f0f9f7; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
|
|
.probability-card .card-header { font-weight: bold; margin-bottom: 8px; display: flex; justify-content: space-between; }
|
|
.probability-card .card-fish { color: #666; font-size: 13px; }
|
|
.probability-card .card-params { color: #999; font-size: 12px; margin-top: 5px; }
|
|
.probability-card .empty-hint { color: #999; font-size: 13px; }
|
|
.death-params-container .layui-elem-field { margin-top: 15px; }
|
|
</style>
|
|
|
|
<div class="layui-card layadmin-header">
|
|
<div class="layui-breadcrumb" lay-filter="breadcrumb">
|
|
<a lay-href="">主页</a>
|
|
<a><cite>游戏管理</cite></a>
|
|
<a><cite>Boss配置</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-boss"><i class="layui-icon layui-icon-refresh"></i> 初始化配置</button>
|
|
<button class="layui-btn layui-btn-sm" lay-filter="save-boss"><i class="layui-icon layui-icon-ok"></i> 保存配置</button>
|
|
<button class="layui-btn layui-btn-sm layui-btn-warm" lay-filter="reload-boss"><i class="layui-icon layui-icon-refresh"></i> 刷新</button>
|
|
<button class="layui-btn layui-btn-sm layui-btn-normal" onclick="saveSection('BossConfigs')"><i class="layui-icon layui-icon-export"></i> 保存到初始化文件</button>
|
|
</div>
|
|
<div style="float: right; margin-top: 2px;">
|
|
<span style="font-size: 12px; color: #666; margin-right: 5px;">场景筛选:</span>
|
|
<div id="scene-filter" style="width: 220px; display: inline-block; vertical-align: middle;"></div>
|
|
</div>
|
|
</div>
|
|
<div class="layui-card-body">
|
|
<div class="layui-tab layui-tab-brief" lay-filter="bossTab">
|
|
<ul class="layui-tab-title">
|
|
<li class="layui-this" lay-id="luckWheel">幸运轮盘</li>
|
|
<li lay-id="luckPoker">小丑扑克</li>
|
|
<li lay-id="luckFlyDisk">幸运飞碟</li>
|
|
<li lay-id="fullScreen">全屏秒怪</li>
|
|
<li lay-id="range">范围秒怪</li>
|
|
<li lay-id="interstellarCruise">星际巡航</li>
|
|
<li lay-id="flameStorm">烈焰风暴</li>
|
|
<li lay-id="bomb">破坏球</li>
|
|
<li lay-id="scorpion">机械蝎</li>
|
|
<li lay-id="luckDragon">神龙转盘</li>
|
|
<li lay-id="probability">概率击杀</li>
|
|
</ul>
|
|
<div class="layui-tab-content">
|
|
<!-- 幸运轮盘 -->
|
|
<div class="layui-tab-item layui-show">
|
|
<div class="layui-btn-container" style="margin-bottom: 10px;">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="add-luckWheel-item"><i class="layui-icon layui-icon-add-1"></i> 添加幸运轮盘配置</button>
|
|
</div>
|
|
<div id="luckWheel-list" class="luck-wheel-list"></div>
|
|
</div>
|
|
<!-- 小丑扑克 -->
|
|
<div class="layui-tab-item">
|
|
<fieldset class="layui-elem-field">
|
|
<legend>基础配置</legend>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">鱼编号列表</label>
|
|
<div class="layui-input-block fish-xmselect">
|
|
<div id="luckPoker_fishNumber" name="luckPoker_fishNumber"></div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<fieldset class="layui-elem-field">
|
|
<legend>选项列表</legend>
|
|
<div class="layui-form-item">
|
|
<button class="layui-btn layui-btn-sm" id="add-luckPoker-option">添加选项</button>
|
|
</div>
|
|
<table id="table-luckPoker-option" lay-filter="table-luckPoker-option"></table>
|
|
</fieldset>
|
|
</div>
|
|
<!-- 幸运飞碟 -->
|
|
<div class="layui-tab-item">
|
|
<div class="layui-btn-container" style="margin-bottom: 10px;">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="add-luckFlyDisk-item"><i class="layui-icon layui-icon-add-1"></i> 添加幸运飞碟配置</button>
|
|
</div>
|
|
<div id="luckFlyDisk-list" class="luck-wheel-list"></div>
|
|
</div>
|
|
<!-- 全屏秒怪 -->
|
|
<div class="layui-tab-item">
|
|
<fieldset class="layui-elem-field">
|
|
<legend>基础配置</legend>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">鱼编号列表</label>
|
|
<div class="layui-input-block fish-xmselect">
|
|
<div id="fullScreen_fishNumber" name="fullScreen_fishNumber"></div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<!-- 范围秒怪 -->
|
|
<div class="layui-tab-item">
|
|
<fieldset class="layui-elem-field">
|
|
<legend>基础配置</legend>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">鱼编号列表</label>
|
|
<div class="layui-input-block fish-xmselect">
|
|
<div id="range_fishNumber" name="range_fishNumber"></div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<!-- 星际巡航 -->
|
|
<div class="layui-tab-item">
|
|
<fieldset class="layui-elem-field">
|
|
<legend>基础配置</legend>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">鱼编号列表</label>
|
|
<div class="layui-input-block fish-xmselect">
|
|
<div id="interstellarCruise_fishNumber" name="interstellarCruise_fishNumber"></div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<div id="interstellarCruise-death-configs" class="death-config-section"></div>
|
|
</div>
|
|
<!-- 烈焰风暴 -->
|
|
<div class="layui-tab-item">
|
|
<fieldset class="layui-elem-field">
|
|
<legend>基础配置</legend>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">鱼编号列表</label>
|
|
<div class="layui-input-block fish-xmselect">
|
|
<div id="flameStorm_fishNumber" name="flameStorm_fishNumber"></div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<div id="flameStorm-death-configs" class="death-config-section"></div>
|
|
</div>
|
|
<!-- 破坏球 -->
|
|
<div class="layui-tab-item">
|
|
<fieldset class="layui-elem-field">
|
|
<legend>基础配置</legend>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">鱼编号列表</label>
|
|
<div class="layui-input-block fish-xmselect">
|
|
<div id="bomb_fishNumber" name="bomb_fishNumber"></div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<div id="bomb-death-configs" class="death-config-section"></div>
|
|
</div>
|
|
<!-- 机械蝎 -->
|
|
<div class="layui-tab-item">
|
|
<fieldset class="layui-elem-field">
|
|
<legend>基础配置</legend>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">鱼编号列表</label>
|
|
<div class="layui-input-block fish-xmselect">
|
|
<div id="scorpion_fishNumber" name="scorpion_fishNumber"></div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<div id="scorpion-death-configs" class="death-config-section"></div>
|
|
</div>
|
|
<!-- 神龙转盘 -->
|
|
<div class="layui-tab-item">
|
|
<div class="layui-btn-container" style="margin-bottom: 10px;">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="add-luckDragon-item"><i class="layui-icon layui-icon-add-1"></i> 添加神龙转盘配置</button>
|
|
</div>
|
|
<div id="luckDragon-list" class="luck-wheel-list"></div>
|
|
</div>
|
|
<!-- 概率击杀 -->
|
|
<div class="layui-tab-item">
|
|
<div class="probability-section">
|
|
<div class="layui-btn-container" style="margin-bottom: 10px;">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="add-probability-item"><i class="layui-icon layui-icon-add-1"></i> 添加概率配置</button>
|
|
</div>
|
|
<div id="probability-list" class="probability-list"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 概率击杀弹窗模板 -->
|
|
<div id="probability-modal" style="display:none; padding: 15px; width: 600px;">
|
|
<div class="layui-form" lay-filter="probability-form" id="probability-form">
|
|
<input type="hidden" name="editIndex" value="-1">
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">鱼编号列表</label>
|
|
<div class="layui-input-block">
|
|
<div id="prob-fish-select"></div>
|
|
</div>
|
|
</div>
|
|
<fieldset class="layui-elem-field">
|
|
<legend>参数配置</legend>
|
|
<div class="layui-form-item">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="prob-add-param"><i class="layui-icon layui-icon-add-1"></i> 添加参数</button>
|
|
<button type="button" class="layui-btn layui-btn-sm layui-btn-danger" id="prob-batch-del"><i class="layui-icon layui-icon-delete"></i> 批量删除</button>
|
|
</div>
|
|
<table id="table-prob-params" lay-filter="table-prob-params"></table>
|
|
</fieldset>
|
|
<div class="layui-form-item" style="margin-top:15px; text-align:center;">
|
|
<button type="button" class="layui-btn" id="prob-save">保存</button>
|
|
<button type="button" class="layui-btn layui-btn-primary" id="prob-cancel">取消</button>
|
|
<button type="button" class="layui-btn layui-btn-danger" onclick="probDeleteItem()" style="float:right;">删除</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 幸运轮盘弹窗模板 -->
|
|
<div id="luckWheel-modal" style="display:none; padding: 15px;">
|
|
<div class="layui-form">
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">鱼编号列表</label>
|
|
<div class="layui-input-block">
|
|
<div id="lw-fish-select"></div>
|
|
</div>
|
|
</div>
|
|
<fieldset class="layui-elem-field">
|
|
<legend>选项列表</legend>
|
|
<div class="layui-form-item">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="lw-add-option"><i class="layui-icon layui-icon-add-1"></i> 添加选项</button>
|
|
</div>
|
|
<table id="table-lw-option" lay-filter="table-lw-option"></table>
|
|
</fieldset>
|
|
<fieldset class="layui-elem-field">
|
|
<legend>数量列表</legend>
|
|
<div class="layui-form-item">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="lw-add-count"><i class="layui-icon layui-icon-add-1"></i> 添加数量</button>
|
|
</div>
|
|
<table id="table-lw-count" lay-filter="table-lw-count"></table>
|
|
</fieldset>
|
|
<div class="layui-form-item" style="margin-top:15px; text-align:center;">
|
|
<button type="button" class="layui-btn" id="lw-save">保存</button>
|
|
<button type="button" class="layui-btn layui-btn-primary" id="lw-cancel">取消</button>
|
|
<button type="button" class="layui-btn layui-btn-danger" id="lw-delete" style="float:right;">删除</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 死亡配置弹窗模板 -->
|
|
<div id="deathConfig-modal" style="display:none; padding: 15px;">
|
|
<div class="layui-form">
|
|
<fieldset class="layui-elem-field">
|
|
<legend>死亡次数配置</legend>
|
|
<div class="layui-form-item">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="dc-add-count"><i class="layui-icon layui-icon-add-1"></i> 添加死亡次数</button>
|
|
</div>
|
|
<table id="table-death-count" lay-filter="table-death-count"></table>
|
|
</fieldset>
|
|
<div id="death-params-container" class="death-params-container"></div>
|
|
<div class="layui-form-item" style="margin-top:15px; text-align:center;">
|
|
<button type="button" class="layui-btn" id="dc-save">保存</button>
|
|
<button type="button" class="layui-btn layui-btn-primary" id="dc-cancel">取消</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 机械蝎弹窗模板 -->
|
|
<div id="scorpion-modal" style="display:none; padding: 15px;">
|
|
<div class="layui-form">
|
|
<fieldset class="layui-elem-field">
|
|
<legend>道具数量配置</legend>
|
|
<div class="layui-form-item">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="sc-add-count"><i class="layui-icon layui-icon-add-1"></i> 添加道具数量</button>
|
|
</div>
|
|
<table id="table-sc-count" lay-filter="table-sc-count"></table>
|
|
</fieldset>
|
|
<fieldset class="layui-elem-field">
|
|
<legend>道具配置</legend>
|
|
<div class="layui-form-item">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="sc-add-item"><i class="layui-icon layui-icon-add-1"></i> 添加道具</button>
|
|
</div>
|
|
<table id="table-sc-item" lay-filter="table-sc-item"></table>
|
|
</fieldset>
|
|
<fieldset class="layui-elem-field">
|
|
<legend>金币倍数配置</legend>
|
|
<div class="layui-form-item">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="sc-add-gold"><i class="layui-icon layui-icon-add-1"></i> 添加金币倍数</button>
|
|
</div>
|
|
<table id="table-sc-gold" lay-filter="table-sc-gold"></table>
|
|
</fieldset>
|
|
<fieldset class="layui-elem-field">
|
|
<legend>综合目标(仅展示)</legend>
|
|
<div class="layui-form-item" style="margin:10px;">
|
|
<label class="layui-form-label">综合倍数</label>
|
|
<div class="layui-input-inline" style="width:120px;">
|
|
<input type="text" id="sc-composite-multiplier" class="layui-input" placeholder="650">
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<div class="layui-form-item" style="margin-top:15px; text-align:center;">
|
|
<button type="button" class="layui-btn" id="sc-save">保存</button>
|
|
<button type="button" class="layui-btn layui-btn-primary" id="sc-cancel">取消</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 神龙转盘弹窗模板 -->
|
|
<div id="luckDragon-modal" style="display:none; padding: 15px;">
|
|
<div class="layui-form">
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">鱼编号列表</label>
|
|
<div class="layui-input-block">
|
|
<div id="ld-fish-select"></div>
|
|
</div>
|
|
</div>
|
|
<fieldset class="layui-elem-field">
|
|
<legend>外圈配置</legend>
|
|
<div class="layui-form-item">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="ld-add-outer"><i class="layui-icon layui-icon-add-1"></i> 添加外圈配置</button>
|
|
</div>
|
|
<table id="table-ld-outer" lay-filter="table-ld-outer"></table>
|
|
</fieldset>
|
|
<fieldset class="layui-elem-field">
|
|
<legend>中圈配置</legend>
|
|
<div class="layui-form-item">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="ld-add-middle"><i class="layui-icon layui-icon-add-1"></i> 添加中圈配置</button>
|
|
</div>
|
|
<table id="table-ld-middle" lay-filter="table-ld-middle"></table>
|
|
</fieldset>
|
|
<fieldset class="layui-elem-field">
|
|
<legend>内圈配置</legend>
|
|
<div class="layui-form-item">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="ld-add-inner"><i class="layui-icon layui-icon-add-1"></i> 添加内圈配置</button>
|
|
</div>
|
|
<table id="table-ld-inner" lay-filter="table-ld-inner"></table>
|
|
</fieldset>
|
|
<div class="layui-form-item" style="margin-top:15px; text-align:center;">
|
|
<button type="button" class="layui-btn" id="ld-save">保存</button>
|
|
<button type="button" class="layui-btn layui-btn-primary" id="ld-cancel">取消</button>
|
|
<button type="button" class="layui-btn layui-btn-danger" id="ld-delete" style="float:right;">删除</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 幸运飞碟弹窗模板 -->
|
|
<div id="luckFlyDisk-modal" style="display:none; padding: 15px;">
|
|
<div class="layui-form">
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">鱼编号列表</label>
|
|
<div class="layui-input-block">
|
|
<div id="lfd-fish-select"></div>
|
|
</div>
|
|
</div>
|
|
<fieldset class="layui-elem-field">
|
|
<legend>内层选项列表</legend>
|
|
<div class="layui-form-item">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="lfd-add-inner"><i class="layui-icon layui-icon-add-1"></i> 添加内层选项</button>
|
|
</div>
|
|
<table id="table-lfd-inner" lay-filter="table-lfd-inner"></table>
|
|
</fieldset>
|
|
<fieldset class="layui-elem-field">
|
|
<legend>外层选项列表</legend>
|
|
<div class="layui-form-item">
|
|
<button type="button" class="layui-btn layui-btn-sm" id="lfd-add-outer"><i class="layui-icon layui-icon-add-1"></i> 添加外层选项</button>
|
|
</div>
|
|
<table id="table-lfd-outer" lay-filter="table-lfd-outer"></table>
|
|
</fieldset>
|
|
<div class="layui-form-item" style="margin-top:15px; text-align:center;">
|
|
<button type="button" class="layui-btn" id="lfd-save">保存</button>
|
|
<button type="button" class="layui-btn layui-btn-primary" id="lfd-cancel">取消</button>
|
|
<button type="button" class="layui-btn layui-btn-danger" id="lfd-delete" style="float:right;">删除</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script type="text/html" id="option-toolbar">
|
|
<div class="layui-btn-container">
|
|
<button class="layui-btn layui-btn-sm layui-btn-danger" lay-event="batchdel">批量删除</button>
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/html" id="option-bar">
|
|
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>
|
|
</script>
|
|
|
|
<script type="text/html" id="prob-toolbar">
|
|
<div class="layui-btn-container">
|
|
<button class="layui-btn layui-btn-sm layui-btn-danger" lay-event="batchdel">批量删除</button>
|
|
</div>
|
|
</script>
|
|
|
|
<script>
|
|
layui.use(['admin', 'table', 'form', 'element', 'layer'], function () {
|
|
if (window._bossInitialized) return;
|
|
window._bossInitialized = true;
|
|
|
|
var $ = layui.$,
|
|
admin = layui.admin,
|
|
table = layui.table,
|
|
form = layui.form,
|
|
element = layui.element,
|
|
layer = layui.layer,
|
|
setter = layui.setter;
|
|
|
|
var gameConfig = null;
|
|
var fishTypeList = [];
|
|
var fullFishTypeList = [];
|
|
var fishSelects = {};
|
|
var tableDataCache = {
|
|
luckPokerOption: [],
|
|
luckFlyDiskInner: [],
|
|
luckFlyDiskOuter: [],
|
|
interstellarCruiseCount: [],
|
|
flameStormCount: [],
|
|
bombCount: []
|
|
};
|
|
var luckWheelItemsCache = [];
|
|
var probabilityItemsCache = [];
|
|
var probParamsCache = [];
|
|
var deathConfigCaches = {
|
|
interstellarCruise: { oneDeath: [], twoDeath: [], threeDeath: [] },
|
|
flameStorm: { oneDeath: [], twoDeath: [] },
|
|
bomb: { oneDeath: [], twoDeath: [] }
|
|
};
|
|
var currentProbEditIndex = -1;
|
|
var probFishSelect = null;
|
|
var currentLuckWheelIndex = -1;
|
|
var luckWheelFishSelect = null;
|
|
var luckWheelOptionCache = [];
|
|
var luckWheelCountCache = [];
|
|
var luckDragonItemsCache = [];
|
|
var currentLuckDragonIndex = -1;
|
|
var luckDragonFishSelect = null;
|
|
var luckDragonOuterCache = [];
|
|
var luckDragonMiddleCache = [];
|
|
var luckDragonInnerCache = [];
|
|
var luckFlyDiskItemsCache = [];
|
|
var currentLuckFlyDiskIndex = -1;
|
|
var luckFlyDiskFishSelect = null;
|
|
var luckFlyDiskInnerCache = [];
|
|
var luckFlyDiskOuterCache = [];
|
|
var currentDeathConfigType = '';
|
|
var deathCountCache = [];
|
|
|
|
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 getFishScene(fishNum) {
|
|
var num = parseInt(fishNum);
|
|
if (num >= 11000 && num < 12000 || num >= 32000 && num < 33000) return '风雷之渊';
|
|
if (num >= 12000 && num < 13000 || num >= 30000 && num < 31000) return '星际迷航';
|
|
if (num >= 13000 && num < 14000 || num >= 31000 && num < 32000) return '黑神话悟空';
|
|
if (num >= 15000 && num < 16000) return '永夜尸城';
|
|
return '其他';
|
|
}
|
|
|
|
function getFishDisplayNames(fishNumbers) {
|
|
return fishNumbers.map(function(f) {
|
|
var ft = fullFishTypeList.find(function(t) { return t.value === f; })
|
|
|| fishTypeList.find(function(t) { return t.value === f; });
|
|
return ft ? ft.name : f;
|
|
}).join(', ');
|
|
}
|
|
|
|
function buildFishTypeList() {
|
|
var configs = gameConfig.FishTypeConfigs || gameConfig.fishTypeConfigs || [];
|
|
if (configs.length > 0) {
|
|
var all = configs
|
|
.filter(function(item) {
|
|
var fishType = item.FishType || item.fishType || 0;
|
|
return fishType === 2 || fishType === 4 || fishType === 5;
|
|
})
|
|
.map(function(item) {
|
|
var fishNum = item.FishNumber || item.fishNumber || '';
|
|
var fishName = item.FishName || item.fishName || '';
|
|
return { name: fishName + ' (' + fishNum + ')', value: fishNum, scene: getFishScene(fishNum) };
|
|
});
|
|
fullFishTypeList = all;
|
|
fishTypeList = all.slice();
|
|
}
|
|
}
|
|
|
|
function initFishSelects() {
|
|
var selectNames = [
|
|
'luckPoker_fishNumber',
|
|
'fullScreen_fishNumber', 'range_fishNumber',
|
|
'interstellarCruise_fishNumber', 'flameStorm_fishNumber', 'bomb_fishNumber', 'scorpion_fishNumber'
|
|
];
|
|
selectNames.forEach(function(name) {
|
|
if (fishSelects[name]) {
|
|
fishSelects[name].update({ data: fishTypeList });
|
|
} else {
|
|
fishSelects[name] = xmSelect.render({
|
|
el: '#' + name,
|
|
name: name,
|
|
toolbar: { show: true, confirm: true },
|
|
data: fishTypeList,
|
|
empty: '无数据',
|
|
filterable: true,
|
|
pageEmptyShow: false
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
function setFishSelectValue(name, values) {
|
|
if (fishSelects[name]) {
|
|
fishSelects[name].setValue(values || []);
|
|
}
|
|
}
|
|
|
|
function getFishSelectValue(name) {
|
|
if (fishSelects[name]) {
|
|
return fishSelects[name].getValue('value');
|
|
}
|
|
return [];
|
|
}
|
|
|
|
function initSceneFilter() {
|
|
var scenes = [...new Set(fullFishTypeList.map(function(item) { return item.scene; }))];
|
|
var sceneData = scenes.map(function(s) { return { name: s, value: s }; });
|
|
sceneFilterSelect = xmSelect.render({
|
|
el: '#scene-filter',
|
|
name: 'scene-filter',
|
|
toolbar: { show: true, confirm: true },
|
|
data: sceneData,
|
|
empty: '无数据',
|
|
filterable: true,
|
|
pageEmptyShow: false,
|
|
on: {
|
|
change: function() {
|
|
applySceneFilter();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function applySceneFilter() {
|
|
var selectedScenes = sceneFilterSelect ? sceneFilterSelect.getValue('value') : [];
|
|
fishTypeList = selectedScenes.length === 0
|
|
? fullFishTypeList.slice()
|
|
: fullFishTypeList.filter(function(item) {
|
|
return selectedScenes.indexOf(item.scene) > -1;
|
|
});
|
|
var selectNames = [
|
|
'luckPoker_fishNumber',
|
|
'fullScreen_fishNumber', 'range_fishNumber',
|
|
'interstellarCruise_fishNumber', 'flameStorm_fishNumber', 'bomb_fishNumber', 'scorpion_fishNumber'
|
|
];
|
|
selectNames.forEach(function(name) {
|
|
if (fishSelects[name]) {
|
|
fishSelects[name].update({ data: fishTypeList });
|
|
}
|
|
});
|
|
if (probFishSelect) probFishSelect.update({ data: fishTypeList });
|
|
if (luckWheelFishSelect) luckWheelFishSelect.update({ data: fishTypeList });
|
|
if (luckDragonFishSelect) luckDragonFishSelect.update({ data: fishTypeList });
|
|
if (luckFlyDiskFishSelect) luckFlyDiskFishSelect.update({ data: fishTypeList });
|
|
}
|
|
|
|
function getFieldValue(obj, fieldName) {
|
|
if (!obj) return null;
|
|
var camelCase = fieldName.charAt(0).toLowerCase() + fieldName.slice(1);
|
|
var pascalCase = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);
|
|
var lower = fieldName.toLowerCase();
|
|
return obj[pascalCase] || obj[camelCase] || obj[fieldName] || obj[lower] || obj[lower.replace(/list$/, 'List')] || obj[lower.replace(/list$/, 'List').replace(/^([a-z])/, function(m) { return m.toUpperCase(); })];
|
|
}
|
|
|
|
function loadConfig() {
|
|
admin.req({
|
|
method: "get",
|
|
url: setter.baseurl + "adminapi/GameConfig",
|
|
done: function (res) {
|
|
if (res.code === 0 && res.data) {
|
|
gameConfig = res.data;
|
|
buildFishTypeList();
|
|
initFishSelects();
|
|
initSceneFilter();
|
|
fillForms();
|
|
renderTables();
|
|
renderLuckWheelList();
|
|
renderLuckDragonList();
|
|
renderLuckFlyDiskList();
|
|
renderDeathConfigs();
|
|
initProbabilityCache();
|
|
renderProbabilityList();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function fillForms() {
|
|
var b = gameConfig.bossConfigs || {};
|
|
|
|
// 小丑扑克
|
|
if (b.luckPoker) {
|
|
setFishSelectValue('luckPoker_fishNumber', getFieldValue(b.luckPoker, 'fishNumber'));
|
|
}
|
|
// 幸运飞碟 - 已改为列表模式,不再需要设置单鱼编号
|
|
// 全屏秒怪
|
|
if (b.fullScreen) {
|
|
setFishSelectValue('fullScreen_fishNumber', getFieldValue(b.fullScreen, 'fishNumber'));
|
|
}
|
|
// 范围秒怪
|
|
if (b.range) {
|
|
setFishSelectValue('range_fishNumber', getFieldValue(b.range, 'fishNumber'));
|
|
}
|
|
// 星际巡航
|
|
if (b.interstellarCruise) {
|
|
setFishSelectValue('interstellarCruise_fishNumber', getFieldValue(b.interstellarCruise, 'fishNumber'));
|
|
}
|
|
// 烈焰风暴
|
|
if (b.flameStorm) {
|
|
setFishSelectValue('flameStorm_fishNumber', getFieldValue(b.flameStorm, 'fishNumber'));
|
|
}
|
|
// 破坏球
|
|
if (b.bomb) {
|
|
setFishSelectValue('bomb_fishNumber', getFieldValue(b.bomb, 'fishNumber'));
|
|
}
|
|
// 机械蝎
|
|
if (b.scorpion) {
|
|
setFishSelectValue('scorpion_fishNumber', getFieldValue(b.scorpion, 'fishNumber'));
|
|
}
|
|
}
|
|
|
|
function renderTables() {
|
|
var b = gameConfig.bossConfigs || {};
|
|
|
|
var luckPoker = getFieldValue(b, 'LuckPoker');
|
|
tableDataCache.luckPokerOption = getFieldValue(luckPoker, 'OptionList') || [];
|
|
|
|
// 幸运飞碟 - 已改为列表模式,不再需要设置单鱼编号
|
|
|
|
// 渲染表格
|
|
renderOptionTable('table-luckPoker-option', tableDataCache.luckPokerOption);
|
|
}
|
|
|
|
function renderOptionTable(elemId, data) {
|
|
table.render({
|
|
elem: '#' + elemId,
|
|
data: data,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "optionId", title: "选项编号", width: 150, edit: 'text' },
|
|
{ field: "triggerRate", title: "触发权重", width: 150, edit: 'text' },
|
|
{ field: "score", title: "分值", width: 150, edit: 'text' },
|
|
{ title: "操作", width: 80, fixed: 'right', toolbar: '#option-bar' }
|
|
]],
|
|
toolbar: '#option-toolbar',
|
|
page: false
|
|
});
|
|
}
|
|
|
|
function renderCountTable(elemId, data) {
|
|
table.render({
|
|
elem: '#' + elemId,
|
|
data: data,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "count", title: "死亡次数", width: 150, edit: 'text' },
|
|
{ field: "triggerRate", title: "触发权重", width: 150, edit: 'text' },
|
|
{ field: "killRate", title: "击杀权重", width: 150, edit: 'text' },
|
|
{ title: "操作", width: 80, fixed: 'right', toolbar: '#option-bar' }
|
|
]],
|
|
toolbar: '#option-toolbar',
|
|
page: false
|
|
});
|
|
}
|
|
|
|
// ============ 幸运轮盘列表 ============
|
|
function renderLuckWheelList() {
|
|
var container = $('#luckWheel-list');
|
|
container.empty();
|
|
var b = gameConfig.bossConfigs || {};
|
|
luckWheelItemsCache = getFieldValue(b, 'luckWheel') || [];
|
|
|
|
if (luckWheelItemsCache.length === 0) {
|
|
container.html('<div style="text-align: center; color: #999; padding: 20px;">暂无幸运轮盘配置,点击上方按钮添加</div>');
|
|
return;
|
|
}
|
|
|
|
luckWheelItemsCache.forEach(function(item, index) {
|
|
renderLuckWheelItem(item, index);
|
|
});
|
|
}
|
|
|
|
function renderLuckWheelItem(item, index) {
|
|
var container = $('#luckWheel-list');
|
|
var fishNumbers = getFieldValue(item, 'fishNumber') || [];
|
|
var optionList = getFieldValue(item, 'optionList') || [];
|
|
var countList = getFieldValue(item, 'countList') || [];
|
|
|
|
var fishName = '未选择鱼';
|
|
if (fishNumbers.length > 0) {
|
|
var ft = fishTypeList.find(function(t) { return t.value === fishNumbers[0]; });
|
|
fishName = ft ? ft.name : fishNumbers[0];
|
|
}
|
|
|
|
var fishHtml = fishNumbers.length > 0
|
|
? fishNumbers.map(function(f) {
|
|
var ft = fishTypeList.find(function(t) { return t.value === f; });
|
|
return '<span class="fish-name-tag">' + (ft ? ft.name : f) + '</span>';
|
|
}).join(' ')
|
|
: '<span class="empty-hint">未选择鱼</span>';
|
|
|
|
var html = '<div class="probability-card" data-index="' + index + '">';
|
|
html += '<div class="card-header">';
|
|
html += '<span>幸运轮盘 - ' + fishName + '</span>';
|
|
html += '<span style="color: #009688; font-size: 12px;">点击查看详情</span>';
|
|
html += '</div>';
|
|
html += '<div class="card-fish"><strong>鱼编号:</strong> ' + (fishNumbers.length > 0 ? getFishDisplayNames(fishNumbers) : '<span class="empty-hint">未选择</span>') + '</div>';
|
|
html += '<div class="card-params">选项: ' + optionList.length + ' 条 | 数量: ' + countList.length + ' 条</div>';
|
|
html += '</div>';
|
|
container.append(html);
|
|
}
|
|
|
|
$(document).on('click', '#add-luckWheel-item', function() {
|
|
openLuckWheelModal(-1);
|
|
});
|
|
|
|
$(document).on('click', '#luckWheel-list .probability-card', function(e) {
|
|
if ($(e.target).closest('button').length > 0) return;
|
|
var index = parseInt($(this).data('index'));
|
|
openLuckWheelModal(index);
|
|
});
|
|
|
|
function openLuckWheelModal(index) {
|
|
currentLuckWheelIndex = index;
|
|
var isEdit = index >= 0;
|
|
var data;
|
|
|
|
if (isEdit) {
|
|
data = luckWheelItemsCache[index];
|
|
if (!data) {
|
|
layer.msg('数据不存在');
|
|
return;
|
|
}
|
|
} else {
|
|
data = { fishNumber: [], optionList: [], countList: [] };
|
|
}
|
|
|
|
var fishNumbers = getFieldValue(data, 'fishNumber') || [];
|
|
luckWheelOptionCache = JSON.parse(JSON.stringify(getFieldValue(data, 'optionList') || []));
|
|
luckWheelCountCache = JSON.parse(JSON.stringify(getFieldValue(data, 'countList') || []));
|
|
|
|
var modalHtml = $('#luckWheel-modal').html();
|
|
layer.open({
|
|
type: 1,
|
|
title: isEdit ? '编辑幸运轮盘配置' : '添加幸运轮盘配置',
|
|
area: ['900px', '700px'],
|
|
content: modalHtml,
|
|
success: function(layero, idx) {
|
|
setTimeout(function() {
|
|
luckWheelFishSelect = xmSelect.render({
|
|
el: layero.find('#lw-fish-select')[0],
|
|
data: fishTypeList,
|
|
empty: '无数据',
|
|
filterable: true,
|
|
pageEmptyShow: false
|
|
});
|
|
if (fishNumbers.length > 0) {
|
|
luckWheelFishSelect.setValue(fishNumbers);
|
|
}
|
|
renderLuckWheelOptionTable(layero);
|
|
renderLuckWheelCountTable(layero);
|
|
}, 100);
|
|
}
|
|
});
|
|
}
|
|
|
|
function renderLuckWheelOptionTable(layero) {
|
|
var $elem = layero.find('#table-lw-option');
|
|
$elem.attr('lay-filter', 'table-lw-option');
|
|
console.log('[幸运轮盘-选项] rendering table, lay-filter:', $elem.attr('lay-filter'));
|
|
table.render({
|
|
elem: $elem[0],
|
|
id: 'table-lw-option',
|
|
data: luckWheelOptionCache,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "optionId", title: "选项编号", width: 150, edit: 'text' },
|
|
{ field: "triggerRate", title: "触发权重", width: 150, edit: 'text' },
|
|
{ field: "score", title: "分值", width: 150, edit: 'text' },
|
|
{ title: "操作", width: 80, toolbar: '#option-bar' }
|
|
]],
|
|
page: false
|
|
});
|
|
}
|
|
|
|
function renderLuckWheelCountTable(layero) {
|
|
var $elem = layero.find('#table-lw-count');
|
|
$elem.attr('lay-filter', 'table-lw-count');
|
|
console.log('[幸运轮盘-数量] rendering table, lay-filter:', $elem.attr('lay-filter'));
|
|
table.render({
|
|
elem: $elem[0],
|
|
id: 'table-lw-count',
|
|
data: luckWheelCountCache,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "optionId", title: "选项编号", width: 150, edit: 'text' },
|
|
{ field: "triggerRate", title: "触发权重", width: 150, edit: 'text' },
|
|
{ field: "score", title: "分值", width: 150, edit: 'text' },
|
|
{ title: "操作", width: 80, toolbar: '#option-bar' }
|
|
]],
|
|
page: false
|
|
});
|
|
}
|
|
|
|
// 幸运轮盘弹窗事件
|
|
$(document).on('click', '#lw-add-option', function() {
|
|
luckWheelOptionCache.push({ optionId: luckWheelOptionCache.length + 1, triggerRate: 10, score: 0 });
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckWheelOptionTable(layero);
|
|
});
|
|
|
|
$(document).on('click', '#lw-add-count', function() {
|
|
luckWheelCountCache.push({ optionId: luckWheelCountCache.length + 1, triggerRate: 10, score: 0 });
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckWheelCountTable(layero);
|
|
});
|
|
|
|
$(document).on('click', '#lw-cancel', function() {
|
|
layer.closeAll('page');
|
|
});
|
|
|
|
$(document).on('click', '#lw-delete', function() {
|
|
if (currentLuckWheelIndex >= 0) {
|
|
layer.confirm('确定要删除此幸运轮盘配置吗?', function(idx) {
|
|
luckWheelItemsCache.splice(currentLuckWheelIndex, 1);
|
|
layer.closeAll('page');
|
|
renderLuckWheelList();
|
|
layer.msg('删除成功');
|
|
layer.close(idx);
|
|
});
|
|
}
|
|
});
|
|
|
|
$(document).on('click', '#lw-save', function() {
|
|
var fishNumbers = luckWheelFishSelect ? luckWheelFishSelect.getValue('value') : [];
|
|
var newData = {
|
|
fishNumber: fishNumbers,
|
|
optionList: luckWheelOptionCache,
|
|
countList: luckWheelCountCache
|
|
};
|
|
if (currentLuckWheelIndex >= 0) {
|
|
luckWheelItemsCache[currentLuckWheelIndex] = newData;
|
|
} else {
|
|
luckWheelItemsCache.push(newData);
|
|
}
|
|
layer.closeAll('page');
|
|
renderLuckWheelList();
|
|
layer.msg('保存成功');
|
|
});
|
|
|
|
table.on('edit(table-lw-option)', function(obj) {
|
|
if (!isNaN(obj.value) && obj.value !== '') obj.data[obj.field] = parseFloat(obj.value);
|
|
else obj.data[obj.field] = obj.value;
|
|
});
|
|
table.on('tool(table-lw-option)', function(obj) {
|
|
console.log('[幸运轮盘-选项] tool event triggered:', obj.event, obj.data);
|
|
if (obj.event === 'del') {
|
|
console.log('[幸运轮盘-选项] deleting item:', obj.data);
|
|
console.log('[幸运轮盘-选项] cache before:', JSON.stringify(luckWheelOptionCache));
|
|
var targetId = obj.data.optionId;
|
|
var i = luckWheelOptionCache.findIndex(function(item) {
|
|
console.log('[幸运轮盘-选项] comparing:', item.optionId, 'vs', targetId);
|
|
return item.optionId === targetId;
|
|
});
|
|
console.log('[幸运轮盘-选项] findIndex result:', i);
|
|
if (i !== -1) {
|
|
luckWheelOptionCache.splice(i, 1);
|
|
console.log('[幸运轮盘-选项] deleted, remaining:', luckWheelOptionCache.length);
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckWheelOptionTable(layero);
|
|
} else {
|
|
console.log('[幸运轮盘-选项] item not found in cache!');
|
|
}
|
|
}
|
|
});
|
|
|
|
table.on('edit(table-lw-count)', function(obj) {
|
|
if (!isNaN(obj.value) && obj.value !== '') obj.data[obj.field] = parseFloat(obj.value);
|
|
else obj.data[obj.field] = obj.value;
|
|
});
|
|
table.on('tool(table-lw-count)', function(obj) {
|
|
console.log('[幸运轮盘-数量] tool event triggered:', obj.event, obj.data);
|
|
if (obj.event === 'del') {
|
|
console.log('[幸运轮盘-数量] deleting item:', obj.data);
|
|
var i = luckWheelCountCache.findIndex(function(item) { return item.optionId === obj.data.optionId; });
|
|
if (i !== -1) {
|
|
luckWheelCountCache.splice(i, 1);
|
|
console.log('[幸运轮盘-数量] deleted, remaining:', luckWheelCountCache.length);
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckWheelCountTable(layero);
|
|
}
|
|
}
|
|
});
|
|
|
|
// ============ 神龙转盘列表 ============
|
|
function renderLuckDragonList() {
|
|
var container = $('#luckDragon-list');
|
|
container.empty();
|
|
var b = gameConfig.bossConfigs || {};
|
|
var raw = getFieldValue(b, 'luckDragon');
|
|
luckDragonItemsCache = Array.isArray(raw) ? raw : [];
|
|
|
|
if (luckDragonItemsCache.length === 0) {
|
|
container.html('<div style="text-align: center; color: #999; padding: 20px;">暂无神龙转盘配置,点击上方按钮添加</div>');
|
|
return;
|
|
}
|
|
|
|
luckDragonItemsCache.forEach(function(item, index) {
|
|
renderLuckDragonItem(item, index);
|
|
});
|
|
}
|
|
|
|
function renderLuckDragonItem(item, index) {
|
|
var container = $('#luckDragon-list');
|
|
var fishNumbers = getFieldValue(item, 'fishNumber') || [];
|
|
var outerConfig = getFieldValue(item, 'outerConfig') || [];
|
|
var middleConfig = getFieldValue(item, 'middleConfig') || [];
|
|
var innerConfig = getFieldValue(item, 'innerConfig') || [];
|
|
|
|
var fishName = '未选择鱼';
|
|
if (fishNumbers.length > 0) {
|
|
var ft = fishTypeList.find(function(t) { return t.value === fishNumbers[0]; });
|
|
fishName = ft ? ft.name : fishNumbers[0];
|
|
}
|
|
|
|
var html = '<div class="probability-card" data-index="' + index + '">';
|
|
html += '<div class="card-header">';
|
|
html += '<span>神龙转盘 - ' + fishName + '</span>';
|
|
html += '<span style="color: #009688; font-size: 12px;">点击查看详情</span>';
|
|
html += '</div>';
|
|
html += '<div class="card-fish"><strong>鱼编号:</strong> ' + (fishNumbers.length > 0 ? getFishDisplayNames(fishNumbers) : '<span class="empty-hint">未选择</span>') + '</div>';
|
|
html += '<div class="card-params">外圈: ' + outerConfig.length + ' 条 | 中圈: ' + middleConfig.length + ' 条 | 内圈: ' + innerConfig.length + ' 条</div>';
|
|
html += '</div>';
|
|
container.append(html);
|
|
}
|
|
|
|
$(document).on('click', '#add-luckDragon-item', function() {
|
|
openLuckDragonModal(-1);
|
|
});
|
|
|
|
$(document).on('click', '#luckDragon-list .probability-card', function(e) {
|
|
if ($(e.target).closest('button').length > 0) return;
|
|
var index = parseInt($(this).data('index'));
|
|
openLuckDragonModal(index);
|
|
});
|
|
|
|
function openLuckDragonModal(index) {
|
|
currentLuckDragonIndex = index;
|
|
var isEdit = index >= 0;
|
|
var data;
|
|
|
|
console.log('[神龙转盘] 打开弹窗, index:', index, 'isEdit:', isEdit);
|
|
|
|
if (isEdit) {
|
|
data = luckDragonItemsCache[index];
|
|
if (!data) {
|
|
layer.msg('数据不存在');
|
|
return;
|
|
}
|
|
} else {
|
|
data = { fishNumber: [], outerConfig: [], middleConfig: [], innerConfig: [] };
|
|
}
|
|
|
|
var fishNumbers = getFieldValue(data, 'fishNumber') || [];
|
|
luckDragonOuterCache = JSON.parse(JSON.stringify(getFieldValue(data, 'outerConfig') || []));
|
|
luckDragonMiddleCache = JSON.parse(JSON.stringify(getFieldValue(data, 'middleConfig') || []));
|
|
luckDragonInnerCache = JSON.parse(JSON.stringify(getFieldValue(data, 'innerConfig') || []));
|
|
|
|
console.log('[神龙转盘] 数据加载完成:', {
|
|
fishNumbers: fishNumbers,
|
|
outerConfig: luckDragonOuterCache,
|
|
middleConfig: luckDragonMiddleCache,
|
|
innerConfig: luckDragonInnerCache
|
|
});
|
|
|
|
var modalHtml = $('#luckDragon-modal').html();
|
|
layer.open({
|
|
type: 1,
|
|
title: isEdit ? '编辑神龙转盘配置' : '添加神龙转盘配置',
|
|
area: ['900px', '700px'],
|
|
content: modalHtml,
|
|
success: function(layero, idx) {
|
|
setTimeout(function() {
|
|
luckDragonFishSelect = xmSelect.render({
|
|
el: layero.find('#ld-fish-select')[0],
|
|
data: fishTypeList,
|
|
empty: '无数据',
|
|
filterable: true,
|
|
pageEmptyShow: false
|
|
});
|
|
if (fishNumbers.length > 0) {
|
|
luckDragonFishSelect.setValue(fishNumbers);
|
|
}
|
|
console.log('[神龙转盘] 开始渲染表格');
|
|
renderLuckDragonOuterTable(layero);
|
|
renderLuckDragonMiddleTable(layero);
|
|
renderLuckDragonInnerTable(layero);
|
|
}, 100);
|
|
}
|
|
});
|
|
}
|
|
|
|
function renderLuckDragonOuterTable(layero) {
|
|
var $elem = layero.find('#table-ld-outer');
|
|
$elem.attr('lay-filter', 'table-ld-outer');
|
|
console.log('[神龙转盘-外圈] 渲染表格, elem:', $elem.length, 'data:', luckDragonOuterCache);
|
|
table.render({
|
|
elem: $elem[0],
|
|
id: 'table-ld-outer',
|
|
data: luckDragonOuterCache,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "min", title: "最小值", width: 150, edit: 'text' },
|
|
{ field: "max", title: "最大值", width: 150, edit: 'text' },
|
|
{ field: "triggerRate", title: "触发权重", width: 150, edit: 'text' },
|
|
{ title: "操作", width: 80, toolbar: '#option-bar' }
|
|
]],
|
|
page: false,
|
|
done: function(res) {
|
|
console.log('[神龙转盘-外圈] 表格渲染完成:', res);
|
|
}
|
|
});
|
|
}
|
|
|
|
function renderLuckDragonMiddleTable(layero) {
|
|
var $elem = layero.find('#table-ld-middle');
|
|
$elem.attr('lay-filter', 'table-ld-middle');
|
|
console.log('[神龙转盘-中圈] 渲染表格, elem:', $elem.length, 'data:', luckDragonMiddleCache);
|
|
table.render({
|
|
elem: $elem[0],
|
|
id: 'table-ld-middle',
|
|
data: luckDragonMiddleCache,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "min", title: "最小值", width: 150, edit: 'text' },
|
|
{ field: "max", title: "最大值", width: 150, edit: 'text' },
|
|
{ field: "triggerRate", title: "触发权重", width: 150, edit: 'text' },
|
|
{ title: "操作", width: 80, toolbar: '#option-bar' }
|
|
]],
|
|
page: false,
|
|
done: function(res) {
|
|
console.log('[神龙转盘-中圈] 表格渲染完成:', res);
|
|
}
|
|
});
|
|
}
|
|
|
|
function renderLuckDragonInnerTable(layero) {
|
|
var $elem = layero.find('#table-ld-inner');
|
|
$elem.attr('lay-filter', 'table-ld-inner');
|
|
console.log('[神龙转盘-内圈] 渲染表格, elem:', $elem.length, 'data:', luckDragonInnerCache);
|
|
table.render({
|
|
elem: $elem[0],
|
|
id: 'table-ld-inner',
|
|
data: luckDragonInnerCache,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "min", title: "最小值", width: 150, edit: 'text' },
|
|
{ field: "max", title: "最大值", width: 150, edit: 'text' },
|
|
{ field: "triggerRate", title: "触发权重", width: 150, edit: 'text' },
|
|
{ title: "操作", width: 80, toolbar: '#option-bar' }
|
|
]],
|
|
page: false,
|
|
done: function(res) {
|
|
console.log('[神龙转盘-内圈] 表格渲染完成:', res);
|
|
}
|
|
});
|
|
}
|
|
|
|
$(document).on('click', '#ld-add-outer', function() {
|
|
luckDragonOuterCache.push({ min: 0, max: 0, triggerRate: 10 });
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckDragonOuterTable(layero);
|
|
});
|
|
|
|
$(document).on('click', '#ld-add-middle', function() {
|
|
luckDragonMiddleCache.push({ min: 0, max: 0, triggerRate: 10 });
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckDragonMiddleTable(layero);
|
|
});
|
|
|
|
$(document).on('click', '#ld-add-inner', function() {
|
|
luckDragonInnerCache.push({ min: 0, max: 0, triggerRate: 10 });
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckDragonInnerTable(layero);
|
|
});
|
|
|
|
$(document).on('click', '#ld-cancel', function() {
|
|
layer.closeAll('page');
|
|
});
|
|
|
|
$(document).on('click', '#ld-delete', function() {
|
|
if (currentLuckDragonIndex >= 0) {
|
|
layer.confirm('确定要删除此神龙转盘配置吗?', function(idx) {
|
|
luckDragonItemsCache.splice(currentLuckDragonIndex, 1);
|
|
layer.closeAll('page');
|
|
renderLuckDragonList();
|
|
layer.msg('删除成功');
|
|
layer.close(idx);
|
|
});
|
|
}
|
|
});
|
|
|
|
$(document).on('click', '#ld-save', function() {
|
|
var fishNumbers = luckDragonFishSelect ? luckDragonFishSelect.getValue('value') : [];
|
|
var newData = {
|
|
fishNumber: fishNumbers,
|
|
outerConfig: luckDragonOuterCache,
|
|
middleConfig: luckDragonMiddleCache,
|
|
innerConfig: luckDragonInnerCache
|
|
};
|
|
if (currentLuckDragonIndex >= 0) {
|
|
luckDragonItemsCache[currentLuckDragonIndex] = newData;
|
|
} else {
|
|
luckDragonItemsCache.push(newData);
|
|
}
|
|
layer.closeAll('page');
|
|
renderLuckDragonList();
|
|
layer.msg('保存成功');
|
|
});
|
|
|
|
// 神龙转盘三层表格编辑和删除事件
|
|
table.on('edit(table-ld-outer)', function(obj) {
|
|
if (!isNaN(obj.value) && obj.value !== '') obj.data[obj.field] = parseFloat(obj.value);
|
|
else obj.data[obj.field] = obj.value;
|
|
});
|
|
table.on('tool(table-ld-outer)', function(obj) {
|
|
if (obj.event === 'del') {
|
|
var i = luckDragonOuterCache.indexOf(obj.data);
|
|
if (i !== -1) {
|
|
luckDragonOuterCache.splice(i, 1);
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckDragonOuterTable(layero);
|
|
}
|
|
}
|
|
});
|
|
|
|
table.on('edit(table-ld-middle)', function(obj) {
|
|
if (!isNaN(obj.value) && obj.value !== '') obj.data[obj.field] = parseFloat(obj.value);
|
|
else obj.data[obj.field] = obj.value;
|
|
});
|
|
table.on('tool(table-ld-middle)', function(obj) {
|
|
if (obj.event === 'del') {
|
|
var i = luckDragonMiddleCache.indexOf(obj.data);
|
|
if (i !== -1) {
|
|
luckDragonMiddleCache.splice(i, 1);
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckDragonMiddleTable(layero);
|
|
}
|
|
}
|
|
});
|
|
|
|
table.on('edit(table-ld-inner)', function(obj) {
|
|
if (!isNaN(obj.value) && obj.value !== '') obj.data[obj.field] = parseFloat(obj.value);
|
|
else obj.data[obj.field] = obj.value;
|
|
});
|
|
table.on('tool(table-ld-inner)', function(obj) {
|
|
if (obj.event === 'del') {
|
|
var i = luckDragonInnerCache.indexOf(obj.data);
|
|
if (i !== -1) {
|
|
luckDragonInnerCache.splice(i, 1);
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckDragonInnerTable(layero);
|
|
}
|
|
}
|
|
});
|
|
|
|
// ============ 幸运飞碟列表 ============
|
|
function renderLuckFlyDiskList() {
|
|
var container = $('#luckFlyDisk-list');
|
|
container.empty();
|
|
var b = gameConfig.bossConfigs || {};
|
|
luckFlyDiskItemsCache = getFieldValue(b, 'luckFlyDisk') || [];
|
|
|
|
if (luckFlyDiskItemsCache.length === 0) {
|
|
container.html('<div style="text-align: center; color: #999; padding: 20px;">暂无幸运飞碟配置,点击上方按钮添加</div>');
|
|
return;
|
|
}
|
|
|
|
luckFlyDiskItemsCache.forEach(function(item, index) {
|
|
renderLuckFlyDiskItem(item, index);
|
|
});
|
|
}
|
|
|
|
function renderLuckFlyDiskItem(item, index) {
|
|
var container = $('#luckFlyDisk-list');
|
|
var fishNumbers = getFieldValue(item, 'fishNumber') || [];
|
|
var innerList = getFieldValue(item, 'innerOptionList') || [];
|
|
var outerList = getFieldValue(item, 'outerOptionList') || [];
|
|
|
|
var fishName = '未选择鱼';
|
|
if (fishNumbers.length > 0) {
|
|
var ft = fishTypeList.find(function(t) { return t.value === fishNumbers[0]; });
|
|
fishName = ft ? ft.name : fishNumbers[0];
|
|
}
|
|
|
|
var html = '<div class="probability-card" data-index="' + index + '">';
|
|
html += '<div class="card-header">';
|
|
html += '<span>幸运飞碟 - ' + fishName + '</span>';
|
|
html += '<span style="color: #009688; font-size: 12px;">点击查看详情</span>';
|
|
html += '</div>';
|
|
html += '<div class="card-fish"><strong>鱼编号:</strong> ' + (fishNumbers.length > 0 ? getFishDisplayNames(fishNumbers) : '<span class="empty-hint">未选择</span>') + '</div>';
|
|
html += '<div class="card-params">内层: ' + innerList.length + ' 条 | 外层: ' + outerList.length + ' 条</div>';
|
|
html += '</div>';
|
|
container.append(html);
|
|
}
|
|
|
|
$(document).on('click', '#add-luckFlyDisk-item', function() {
|
|
openLuckFlyDiskModal(-1);
|
|
});
|
|
|
|
$(document).on('click', '#luckFlyDisk-list .probability-card', function(e) {
|
|
if ($(e.target).closest('button').length > 0) return;
|
|
var index = parseInt($(this).data('index'));
|
|
openLuckFlyDiskModal(index);
|
|
});
|
|
|
|
function openLuckFlyDiskModal(index) {
|
|
currentLuckFlyDiskIndex = index;
|
|
var isEdit = index >= 0;
|
|
var data;
|
|
|
|
if (isEdit) {
|
|
data = luckFlyDiskItemsCache[index];
|
|
if (!data) {
|
|
layer.msg('数据不存在');
|
|
return;
|
|
}
|
|
} else {
|
|
data = { fishNumber: [], innerOptionList: [], outerOptionList: [] };
|
|
}
|
|
|
|
var fishNumbers = getFieldValue(data, 'fishNumber') || [];
|
|
luckFlyDiskInnerCache = JSON.parse(JSON.stringify(getFieldValue(data, 'innerOptionList') || []));
|
|
luckFlyDiskOuterCache = JSON.parse(JSON.stringify(getFieldValue(data, 'outerOptionList') || []));
|
|
|
|
var modalHtml = $('#luckFlyDisk-modal').html();
|
|
layer.open({
|
|
type: 1,
|
|
title: isEdit ? '编辑幸运飞碟配置' : '添加幸运飞碟配置',
|
|
area: ['900px', '700px'],
|
|
content: modalHtml,
|
|
success: function(layero, idx) {
|
|
setTimeout(function() {
|
|
luckFlyDiskFishSelect = xmSelect.render({
|
|
el: layero.find('#lfd-fish-select')[0],
|
|
data: fishTypeList,
|
|
empty: '无数据',
|
|
filterable: true,
|
|
pageEmptyShow: false
|
|
});
|
|
if (fishNumbers.length > 0) {
|
|
luckFlyDiskFishSelect.setValue(fishNumbers);
|
|
}
|
|
renderLuckFlyDiskInnerTable(layero);
|
|
renderLuckFlyDiskOuterTable(layero);
|
|
}, 100);
|
|
}
|
|
});
|
|
}
|
|
|
|
function renderLuckFlyDiskInnerTable(layero) {
|
|
var $elem = layero.find('#table-lfd-inner');
|
|
$elem.attr('lay-filter', 'table-lfd-inner');
|
|
console.log('[幸运飞碟-内层] rendering table, lay-filter:', $elem.attr('lay-filter'));
|
|
table.render({
|
|
elem: $elem[0],
|
|
id: 'table-lfd-inner',
|
|
data: luckFlyDiskInnerCache,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "optionId", title: "选项编号", width: 150, edit: 'text' },
|
|
{ field: "triggerRate", title: "触发权重", width: 150, edit: 'text' },
|
|
{ field: "score", title: "分值", width: 150, edit: 'text' },
|
|
{ title: "操作", width: 80, toolbar: '#option-bar' }
|
|
]],
|
|
page: false
|
|
});
|
|
}
|
|
|
|
function renderLuckFlyDiskOuterTable(layero) {
|
|
var $elem = layero.find('#table-lfd-outer');
|
|
$elem.attr('lay-filter', 'table-lfd-outer');
|
|
console.log('[幸运飞碟-外层] rendering table, lay-filter:', $elem.attr('lay-filter'));
|
|
table.render({
|
|
elem: $elem[0],
|
|
id: 'table-lfd-outer',
|
|
data: luckFlyDiskOuterCache,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "optionId", title: "选项编号", width: 150, edit: 'text' },
|
|
{ field: "triggerRate", title: "触发权重", width: 150, edit: 'text' },
|
|
{ field: "score", title: "分值", width: 150, edit: 'text' },
|
|
{ title: "操作", width: 80, toolbar: '#option-bar' }
|
|
]],
|
|
page: false
|
|
});
|
|
}
|
|
|
|
$(document).on('click', '#lfd-add-inner', function() {
|
|
luckFlyDiskInnerCache.push({ optionId: luckFlyDiskInnerCache.length + 1, triggerRate: 10, score: 0 });
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckFlyDiskInnerTable(layero);
|
|
});
|
|
|
|
$(document).on('click', '#lfd-add-outer', function() {
|
|
luckFlyDiskOuterCache.push({ optionId: luckFlyDiskOuterCache.length + 1, triggerRate: 10, score: 0 });
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckFlyDiskOuterTable(layero);
|
|
});
|
|
|
|
$(document).on('click', '#lfd-cancel', function() {
|
|
layer.closeAll('page');
|
|
});
|
|
|
|
$(document).on('click', '#lfd-delete', function() {
|
|
if (currentLuckFlyDiskIndex >= 0) {
|
|
layer.confirm('确定要删除此幸运飞碟配置吗?', function(idx) {
|
|
luckFlyDiskItemsCache.splice(currentLuckFlyDiskIndex, 1);
|
|
layer.closeAll('page');
|
|
renderLuckFlyDiskList();
|
|
layer.msg('删除成功');
|
|
layer.close(idx);
|
|
});
|
|
}
|
|
});
|
|
|
|
$(document).on('click', '#lfd-save', function() {
|
|
var fishNumbers = luckFlyDiskFishSelect ? luckFlyDiskFishSelect.getValue('value') : [];
|
|
var newData = {
|
|
fishNumber: fishNumbers,
|
|
innerOptionList: luckFlyDiskInnerCache,
|
|
outerOptionList: luckFlyDiskOuterCache
|
|
};
|
|
if (currentLuckFlyDiskIndex >= 0) {
|
|
luckFlyDiskItemsCache[currentLuckFlyDiskIndex] = newData;
|
|
} else {
|
|
luckFlyDiskItemsCache.push(newData);
|
|
}
|
|
layer.closeAll('page');
|
|
renderLuckFlyDiskList();
|
|
layer.msg('保存成功');
|
|
});
|
|
|
|
table.on('edit(table-lfd-inner)', function(obj) {
|
|
if (!isNaN(obj.value) && obj.value !== '') obj.data[obj.field] = parseFloat(obj.value);
|
|
else obj.data[obj.field] = obj.value;
|
|
});
|
|
table.on('tool(table-lfd-inner)', function(obj) {
|
|
console.log('[幸运飞碟-内层] tool event triggered:', obj.event, obj.data);
|
|
if (obj.event === 'del') {
|
|
console.log('[幸运飞碟-内层] deleting item:', obj.data);
|
|
var i = luckFlyDiskInnerCache.indexOf(obj.data);
|
|
if (i !== -1) {
|
|
luckFlyDiskInnerCache.splice(i, 1);
|
|
console.log('[幸运飞碟-内层] deleted, remaining:', luckFlyDiskInnerCache.length);
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckFlyDiskInnerTable(layero);
|
|
}
|
|
}
|
|
});
|
|
|
|
table.on('edit(table-lfd-outer)', function(obj) {
|
|
if (!isNaN(obj.value) && obj.value !== '') obj.data[obj.field] = parseFloat(obj.value);
|
|
else obj.data[obj.field] = obj.value;
|
|
});
|
|
table.on('tool(table-lfd-outer)', function(obj) {
|
|
console.log('[幸运飞碟-外层] tool event triggered:', obj.event, obj.data);
|
|
if (obj.event === 'del') {
|
|
console.log('[幸运飞碟-外层] deleting item:', obj.data);
|
|
var i = luckFlyDiskOuterCache.indexOf(obj.data);
|
|
if (i !== -1) {
|
|
luckFlyDiskOuterCache.splice(i, 1);
|
|
console.log('[幸运飞碟-外层] deleted, remaining:', luckFlyDiskOuterCache.length);
|
|
var layero = $('.layui-layer-page');
|
|
renderLuckFlyDiskOuterTable(layero);
|
|
}
|
|
}
|
|
});
|
|
|
|
// ============ 死亡配置渲染 - 列表+弹窗 ============
|
|
function renderDeathConfigs() {
|
|
renderDeathConfig('interstellarCruise');
|
|
renderDeathConfig('flameStorm');
|
|
renderDeathConfig('bomb');
|
|
renderScorpionConfig();
|
|
}
|
|
|
|
function renderDeathConfig(type) {
|
|
var container = $('#' + type + '-death-configs');
|
|
container.empty();
|
|
|
|
var typeName = { interstellarCruise: '星际巡航', flameStorm: '烈焰风暴', bomb: '破坏球' }[type] || type;
|
|
var typeData = getFieldValue(gameConfig.bossConfigs || gameConfig.BossConfigs || {}, type) || {};
|
|
var countConfig = getFieldValue(typeData, 'countConfig') || [];
|
|
var deathConfigs = getFieldValue(typeData, 'deathConfigs') || [];
|
|
if (type === 'bomb' && deathConfigs.length === 0) {
|
|
deathConfigs = [
|
|
getFieldValue(typeData, 'oneDeathConfig') || getFieldValue(typeData, 'oneDeath') || [],
|
|
getFieldValue(typeData, 'twoDeathConfig') || getFieldValue(typeData, 'twoDeath') || []
|
|
];
|
|
}
|
|
|
|
var html = '<div class="death-config-wrapper">';
|
|
html += '<div class="probability-card death-config-card" data-type="' + type + '">';
|
|
html += '<div class="card-header">';
|
|
html += '<span>' + typeName + ' - 死亡配置</span>';
|
|
html += '<span style="color: #009688; font-size: 12px;">点击编辑</span>';
|
|
html += '</div>';
|
|
html += '<div class="card-fish"><strong>死亡次数配置:</strong> ' + countConfig.length + ' 条</div>';
|
|
html += '<div class="card-params">';
|
|
deathConfigs.forEach(function(dc, i) {
|
|
html += (i > 0 ? ' | ' : '') + '第' + (i + 1) + '次: ' + dc.length + '条';
|
|
});
|
|
html += '</div>';
|
|
html += '</div>';
|
|
html += '</div>';
|
|
container.html(html);
|
|
}
|
|
|
|
$(document).on('click', '.death-config-card', function(e) {
|
|
e.stopPropagation();
|
|
var type = $(this).data('type');
|
|
if (type === 'scorpion') return;
|
|
openDeathConfigModal(type);
|
|
});
|
|
|
|
function getDeathTitle(deathNum) {
|
|
switch(deathNum) {
|
|
case 1: return '第一次死亡配置';
|
|
case 2: return '第二次死亡配置';
|
|
case 3: return '第三次死亡配置';
|
|
default: return '第' + deathNum + '次死亡配置';
|
|
}
|
|
}
|
|
|
|
function openDeathConfigModal(type) {
|
|
currentDeathConfigType = type;
|
|
var typeName = { interstellarCruise: '星际巡航', flameStorm: '烈焰风暴', bomb: '破坏球' }[type] || type;
|
|
var typeData = getFieldValue(gameConfig.bossConfigs || gameConfig.BossConfigs || {}, type) || {};
|
|
var countConfig = getFieldValue(typeData, 'countConfig') || [];
|
|
var deathConfigs = getFieldValue(typeData, 'deathConfigs') || [];
|
|
|
|
// 破坏球后端仍为 OneDeathConfig/TwoDeathConfig 固定字段,组装成数组以便统一渲染
|
|
if (type === 'bomb' && deathConfigs.length === 0) {
|
|
deathConfigs = [
|
|
getFieldValue(typeData, 'oneDeathConfig') || getFieldValue(typeData, 'oneDeath') || [],
|
|
getFieldValue(typeData, 'twoDeathConfig') || getFieldValue(typeData, 'twoDeath') || []
|
|
];
|
|
}
|
|
|
|
deathCountCache = {
|
|
countConfig: JSON.parse(JSON.stringify(countConfig)),
|
|
deathConfigs: JSON.parse(JSON.stringify(deathConfigs))
|
|
};
|
|
|
|
var modalHtml = $('#deathConfig-modal').html();
|
|
layer.open({
|
|
type: 1,
|
|
title: '编辑' + typeName + '死亡配置',
|
|
area: ['900px', '700px'],
|
|
content: modalHtml,
|
|
success: function(layero, idx) {
|
|
setTimeout(function() {
|
|
renderDeathCountTableInModal(layero);
|
|
renderDeathParamsTableInModal(layero);
|
|
}, 100);
|
|
}
|
|
});
|
|
}
|
|
|
|
function renderDeathCountTableInModal(layero) {
|
|
var $elem = layero.find('#table-death-count');
|
|
$elem.attr('lay-filter', 'table-death-count');
|
|
console.log('[死亡配置-次数] rendering table, lay-filter:', $elem.attr('lay-filter'));
|
|
table.render({
|
|
elem: $elem[0],
|
|
id: 'table-death-count',
|
|
data: deathCountCache.countConfig || [],
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "count", title: "死亡次数", width: 150, edit: 'text' },
|
|
{ field: "triggerRate", title: "触发权重", width: 150, edit: 'text' },
|
|
{ field: "killRate", title: "击杀权重", width: 150, edit: 'text' },
|
|
{ title: "操作", width: 80, toolbar: '#option-bar' }
|
|
]],
|
|
page: false
|
|
});
|
|
}
|
|
|
|
function renderDeathParamsTableInModal(layero) {
|
|
var type = currentDeathConfigType;
|
|
var container = layero.find('#death-params-container')[0];
|
|
var html = '';
|
|
var deathConfigs = deathCountCache.deathConfigs || [];
|
|
var count = deathConfigs.length;
|
|
|
|
for (var i = 1; i <= count; i++) {
|
|
var title = getDeathTitle(i);
|
|
var data = deathConfigs[i - 1] || [];
|
|
|
|
html += '<fieldset class="layui-elem-field">';
|
|
html += '<legend>' + title + ' (' + data.length + '条)</legend>';
|
|
html += '<div class="layui-form-item">';
|
|
html += '<button type="button" class="layui-btn layui-btn-sm dc-add-param" data-death="' + i + '"><i class="layui-icon layui-icon-add-1"></i> 添加</button>';
|
|
html += '</div>';
|
|
html += '<table id="table-death-' + i + '"></table>';
|
|
html += '</fieldset>';
|
|
}
|
|
container.innerHTML = html;
|
|
|
|
for (var i = 1; i <= count; i++) {
|
|
var data = deathConfigs[i - 1] || [];
|
|
var $elem = layero.find('#table-death-' + i);
|
|
$elem.attr('lay-filter', 'table-death-' + i);
|
|
table.render({
|
|
elem: $elem[0],
|
|
id: 'table-death-' + i,
|
|
data: data,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "min", title: "最小值", width: 120, edit: 'text' },
|
|
{ field: "max", title: "最大值", width: 120, edit: 'text' },
|
|
{ field: "triggerRate", title: "触发权重", width: 120, edit: 'text' },
|
|
{ title: "操作", width: 80, toolbar: '#option-bar' }
|
|
]],
|
|
page: false
|
|
});
|
|
}
|
|
}
|
|
|
|
// 死亡配置弹窗事件
|
|
$(document).on('click', '#dc-add-count', function() {
|
|
deathCountCache.countConfig = deathCountCache.countConfig || [];
|
|
deathCountCache.countConfig.push({ count: deathCountCache.countConfig.length + 1, triggerRate: 10, killRate: 10 });
|
|
deathCountCache.deathConfigs = deathCountCache.deathConfigs || [];
|
|
deathCountCache.deathConfigs.push([]);
|
|
var layero = $('.layui-layer-page');
|
|
renderDeathCountTableInModal(layero);
|
|
renderDeathParamsTableInModal(layero);
|
|
});
|
|
|
|
$(document).on('click', '.dc-add-param', function() {
|
|
var deathNum = parseInt($(this).data('death'));
|
|
deathCountCache.deathConfigs = deathCountCache.deathConfigs || [];
|
|
if (!deathCountCache.deathConfigs[deathNum - 1]) deathCountCache.deathConfigs[deathNum - 1] = [];
|
|
deathCountCache.deathConfigs[deathNum - 1].push({ min: 0, max: 0, triggerRate: 0 });
|
|
var layero = $('.layui-layer-page');
|
|
renderDeathParamsTableInModal(layero);
|
|
});
|
|
|
|
$(document).on('click', '#dc-cancel', function() {
|
|
layer.closeAll('page');
|
|
});
|
|
|
|
$(document).on('click', '#dc-save', function() {
|
|
var type = currentDeathConfigType;
|
|
var typeData = getFieldValue(gameConfig.bossConfigs || {}, type) || {};
|
|
|
|
typeData.countConfig = deathCountCache.countConfig || [];
|
|
|
|
// 破坏球后端仍为 OneDeathConfig/TwoDeathConfig 固定字段,拆开保存
|
|
if (type === 'bomb') {
|
|
var dc = deathCountCache.deathConfigs || [];
|
|
typeData.oneDeathConfig = dc[0] || [];
|
|
typeData.twoDeathConfig = dc[1] || [];
|
|
} else {
|
|
typeData.deathConfigs = deathCountCache.deathConfigs || [];
|
|
}
|
|
|
|
if (!gameConfig.bossConfigs) gameConfig.bossConfigs = {};
|
|
gameConfig.bossConfigs[type] = typeData;
|
|
|
|
layer.closeAll('page');
|
|
renderDeathConfigs();
|
|
layer.msg('保存成功');
|
|
});
|
|
|
|
table.on('edit(table-death-count)', function(obj) {
|
|
if (!isNaN(obj.value) && obj.value !== '') obj.data[obj.field] = parseFloat(obj.value);
|
|
else obj.data[obj.field] = obj.value;
|
|
});
|
|
table.on('tool(table-death-count)', function(obj) {
|
|
if (obj.event === 'del') {
|
|
var idx = obj.tr.data('index');
|
|
if (idx !== undefined && deathCountCache.countConfig && idx < deathCountCache.countConfig.length) {
|
|
deathCountCache.countConfig.splice(idx, 1);
|
|
if (deathCountCache.deathConfigs && idx < deathCountCache.deathConfigs.length)
|
|
deathCountCache.deathConfigs.splice(idx, 1);
|
|
} else {
|
|
var byValue = (deathCountCache.countConfig || []).findIndex(function(it) { return it === obj.data; });
|
|
if (byValue !== -1) deathCountCache.countConfig.splice(byValue, 1);
|
|
if (byValue !== -1 && deathCountCache.deathConfigs && byValue < deathCountCache.deathConfigs.length)
|
|
deathCountCache.deathConfigs.splice(byValue, 1);
|
|
}
|
|
var layero = $('.layui-layer-page');
|
|
renderDeathCountTableInModal(layero);
|
|
renderDeathParamsTableInModal(layero);
|
|
}
|
|
});
|
|
|
|
for (var i = 1; i <= 3; i++) {
|
|
(function(deathNum) {
|
|
table.on('edit(table-death-' + deathNum + ')', function(obj) {
|
|
if (!isNaN(obj.value) && obj.value !== '') obj.data[obj.field] = parseFloat(obj.value);
|
|
else obj.data[obj.field] = obj.value;
|
|
});
|
|
table.on('tool(table-death-' + deathNum + ')', function(obj) {
|
|
if (obj.event === 'del') {
|
|
var dc = (deathCountCache.deathConfigs || [])[deathNum - 1];
|
|
if (dc) {
|
|
var idx = obj.tr.data('index');
|
|
if (idx !== undefined && idx < dc.length) {
|
|
dc.splice(idx, 1);
|
|
} else {
|
|
var byValue = dc.findIndex(function(it) { return it === obj.data; });
|
|
if (byValue !== -1) dc.splice(byValue, 1);
|
|
}
|
|
}
|
|
var layero = $('.layui-layer-page');
|
|
renderDeathParamsTableInModal(layero);
|
|
}
|
|
});
|
|
})(i);
|
|
}
|
|
|
|
// ============ 机械蝎配置 - 卡片+弹窗 ============
|
|
var scorpionCountCache = [];
|
|
var scorpionItemCache = [];
|
|
var scorpionGoldCache = [];
|
|
|
|
function renderScorpionConfig() {
|
|
var container = $('#scorpion-death-configs');
|
|
container.empty();
|
|
|
|
var typeData = getFieldValue(gameConfig.bossConfigs || gameConfig.BossConfigs || {}, 'scorpion') || {};
|
|
var countConfig = getFieldValue(typeData, 'itemCountConfig') || getFieldValue(typeData, 'ItemCountConfig') || [];
|
|
var itemConfig = getFieldValue(typeData, 'itemConfig') || getFieldValue(typeData, 'ItemConfig') || [];
|
|
var goldConfig = getFieldValue(typeData, 'goldConfig') || getFieldValue(typeData, 'GoldConfig') || [];
|
|
var composite = getFieldValue(typeData, 'compositeMultiplier') || getFieldValue(typeData, 'CompositeMultiplier') || 0;
|
|
|
|
var html = '<div class="death-config-wrapper">';
|
|
html += '<div class="probability-card death-config-card" data-type="scorpion">';
|
|
html += '<div class="card-header">';
|
|
html += '<span>机械蝎 - 死亡配置</span>';
|
|
html += '<span style="color: #009688; font-size: 12px;">点击编辑</span>';
|
|
html += '</div>';
|
|
html += '<div class="card-fish"><strong>道具数量:</strong> ' + countConfig.length + ' 条</div>';
|
|
html += '<div class="card-params">';
|
|
html += '道具: ' + itemConfig.length + '条 | 金币: ' + goldConfig.length + '条';
|
|
if (composite > 0) {
|
|
html += ' | 综合倍数: ' + composite;
|
|
}
|
|
html += '</div>';
|
|
html += '</div>';
|
|
html += '</div>';
|
|
container.html(html);
|
|
}
|
|
|
|
function openScorpionModal() {
|
|
var typeData = getFieldValue(gameConfig.bossConfigs || gameConfig.BossConfigs || {}, 'scorpion') || {};
|
|
scorpionCountCache = JSON.parse(JSON.stringify(getFieldValue(typeData, 'itemCountConfig') || getFieldValue(typeData, 'ItemCountConfig') || []));
|
|
scorpionItemCache = JSON.parse(JSON.stringify(getFieldValue(typeData, 'itemConfig') || getFieldValue(typeData, 'ItemConfig') || []));
|
|
scorpionGoldCache = JSON.parse(JSON.stringify(getFieldValue(typeData, 'goldConfig') || getFieldValue(typeData, 'GoldConfig') || []));
|
|
var composite = getFieldValue(typeData, 'compositeMultiplier') || getFieldValue(typeData, 'CompositeMultiplier') || 0;
|
|
|
|
var modalHtml = $('#scorpion-modal').html();
|
|
layer.open({
|
|
type: 1,
|
|
title: '编辑机械蝎死亡配置',
|
|
area: ['950px', '760px'],
|
|
content: modalHtml,
|
|
success: function(layero, idx) {
|
|
setTimeout(function() {
|
|
$('#sc-composite-multiplier').val(composite || '');
|
|
renderScorpionCountTableInModal(layero);
|
|
renderScorpionItemTableInModal(layero);
|
|
renderScorpionGoldTableInModal(layero);
|
|
}, 100);
|
|
}
|
|
});
|
|
}
|
|
|
|
function renderScorpionCountTableInModal(layero) {
|
|
var $elem = layero.find('#table-sc-count');
|
|
$elem.attr('lay-filter', 'table-sc-count');
|
|
table.render({
|
|
elem: $elem[0],
|
|
id: 'table-sc-count',
|
|
data: scorpionCountCache,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "count", title: "道具数量", width: 150, edit: 'text' },
|
|
{ field: "weight", title: "权重", width: 150, edit: 'text' },
|
|
{ title: "操作", width: 80, toolbar: '#option-bar' }
|
|
]],
|
|
page: false
|
|
});
|
|
}
|
|
|
|
function renderScorpionItemTableInModal(layero) {
|
|
var $elem = layero.find('#table-sc-item');
|
|
$elem.attr('lay-filter', 'table-sc-item');
|
|
table.render({
|
|
elem: $elem[0],
|
|
id: 'table-sc-item',
|
|
data: scorpionItemCache,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "propNumber", title: "道具编号", width: 120, edit: 'text' },
|
|
{ field: "count", title: "数量", width: 120, edit: 'text' },
|
|
{ field: "weight", title: "权重", width: 120, edit: 'text' },
|
|
{ title: "操作", width: 80, toolbar: '#option-bar' }
|
|
]],
|
|
page: false
|
|
});
|
|
}
|
|
|
|
function renderScorpionGoldTableInModal(layero) {
|
|
var $elem = layero.find('#table-sc-gold');
|
|
$elem.attr('lay-filter', 'table-sc-gold');
|
|
table.render({
|
|
elem: $elem[0],
|
|
id: 'table-sc-gold',
|
|
data: scorpionGoldCache,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "min", title: "最小倍数", width: 120, edit: 'text' },
|
|
{ field: "max", title: "最大倍数", width: 120, edit: 'text' },
|
|
{ field: "triggerRate", title: "权重", width: 120, edit: 'text' },
|
|
{ title: "操作", width: 80, toolbar: '#option-bar' }
|
|
]],
|
|
page: false
|
|
});
|
|
}
|
|
|
|
$(document).on('click', '.death-config-card[data-type="scorpion"]', function(e) {
|
|
e.stopPropagation();
|
|
openScorpionModal();
|
|
});
|
|
|
|
$(document).on('click', '#sc-add-count', function() {
|
|
scorpionCountCache.push({ count: 0, weight: 0 });
|
|
var layero = $('.layui-layer-page');
|
|
renderScorpionCountTableInModal(layero);
|
|
});
|
|
|
|
$(document).on('click', '#sc-add-item', function() {
|
|
scorpionItemCache.push({ propNumber: '', count: 0, weight: 0 });
|
|
var layero = $('.layui-layer-page');
|
|
renderScorpionItemTableInModal(layero);
|
|
});
|
|
|
|
$(document).on('click', '#sc-add-gold', function() {
|
|
scorpionGoldCache.push({ min: 0, max: 0, triggerRate: 0 });
|
|
var layero = $('.layui-layer-page');
|
|
renderScorpionGoldTableInModal(layero);
|
|
});
|
|
|
|
$(document).on('click', '#sc-cancel', function() {
|
|
layer.closeAll('page');
|
|
});
|
|
|
|
$(document).on('click', '#sc-save', function() {
|
|
var typeData = getFieldValue(gameConfig.bossConfigs || gameConfig.BossConfigs || {}, 'scorpion') || {};
|
|
typeData.itemCountConfig = scorpionCountCache;
|
|
typeData.itemConfig = scorpionItemCache;
|
|
typeData.goldConfig = scorpionGoldCache;
|
|
typeData.compositeMultiplier = parseFloat($('#sc-composite-multiplier').val()) || 0;
|
|
|
|
if (!gameConfig.bossConfigs) gameConfig.bossConfigs = {};
|
|
gameConfig.bossConfigs.scorpion = typeData;
|
|
|
|
layer.closeAll('page');
|
|
renderScorpionConfig();
|
|
layer.msg('保存成功');
|
|
});
|
|
|
|
table.on('edit(table-sc-count)', function(obj) {
|
|
if (!isNaN(obj.value) && obj.value !== '') obj.data[obj.field] = parseFloat(obj.value);
|
|
else obj.data[obj.field] = obj.value;
|
|
});
|
|
table.on('tool(table-sc-count)', function(obj) {
|
|
if (obj.event === 'del') {
|
|
var idx = scorpionCountCache.indexOf(obj.data);
|
|
if (idx !== -1) {
|
|
scorpionCountCache.splice(idx, 1);
|
|
var layero = $('.layui-layer-page');
|
|
renderScorpionCountTableInModal(layero);
|
|
}
|
|
}
|
|
});
|
|
table.on('edit(table-sc-item)', function(obj) {
|
|
if (obj.field === 'propNumber') {
|
|
obj.data[obj.field] = obj.value;
|
|
return;
|
|
}
|
|
if (!isNaN(obj.value) && obj.value !== '') obj.data[obj.field] = parseFloat(obj.value);
|
|
else obj.data[obj.field] = obj.value;
|
|
});
|
|
table.on('tool(table-sc-item)', function(obj) {
|
|
if (obj.event === 'del') {
|
|
var idx = scorpionItemCache.indexOf(obj.data);
|
|
if (idx !== -1) {
|
|
scorpionItemCache.splice(idx, 1);
|
|
var layero = $('.layui-layer-page');
|
|
renderScorpionItemTableInModal(layero);
|
|
}
|
|
}
|
|
});
|
|
table.on('edit(table-sc-gold)', function(obj) {
|
|
if (!isNaN(obj.value) && obj.value !== '') obj.data[obj.field] = parseFloat(obj.value);
|
|
else obj.data[obj.field] = obj.value;
|
|
});
|
|
table.on('tool(table-sc-gold)', function(obj) {
|
|
if (obj.event === 'del') {
|
|
var idx = scorpionGoldCache.indexOf(obj.data);
|
|
if (idx !== -1) {
|
|
scorpionGoldCache.splice(idx, 1);
|
|
var layero = $('.layui-layer-page');
|
|
renderScorpionGoldTableInModal(layero);
|
|
}
|
|
}
|
|
});
|
|
|
|
// ============ 概率击杀配置 - 卡片列表+弹窗 ============
|
|
function renderProbabilityList() {
|
|
var container = $('#probability-list');
|
|
container.empty();
|
|
|
|
if (probabilityItemsCache.length === 0) {
|
|
container.html('<div style="text-align: center; color: #999; padding: 40px; font-size: 14px;">暂无概率配置,点击上方按钮添加</div>');
|
|
return;
|
|
}
|
|
|
|
probabilityItemsCache.forEach(function(item, index) {
|
|
var fishNumbers = getFieldValue(item, 'fishNumber') || [];
|
|
var params = getFieldValue(item, 'configParams') || [];
|
|
|
|
var fishName = '未选择鱼';
|
|
if (fishNumbers.length > 0) {
|
|
var ft = fishTypeList.find(function(t) { return t.value === fishNumbers[0]; });
|
|
fishName = ft ? ft.name : fishNumbers[0];
|
|
}
|
|
|
|
var paramsSummary = params.length > 0
|
|
? '参数: ' + params.length + ' 条'
|
|
: '<span class="empty-hint">无参数</span>';
|
|
|
|
var html = '<div class="probability-card" data-index="' + index + '">';
|
|
html += '<div class="card-header">';
|
|
html += '<span>' + fishName + ' 配置</span>';
|
|
html += '<span style="color: #009688; font-size: 12px;">点击查看详情</span>';
|
|
html += '</div>';
|
|
html += '<div class="card-fish"><strong>鱼编号:</strong> ' + (fishNumbers.length > 0 ? getFishDisplayNames(fishNumbers) : '<span class="empty-hint">未选择</span>') + '</div>';
|
|
html += '<div class="card-params">' + paramsSummary + '</div>';
|
|
html += '</div>';
|
|
|
|
container.append(html);
|
|
});
|
|
}
|
|
|
|
// 概率配置卡片点击
|
|
$(document).on('click', '#probability-list .probability-card', function(e) {
|
|
if ($(e.target).closest('button').length > 0) return;
|
|
var index = parseInt($(this).data('index'));
|
|
openProbabilityModal(index);
|
|
});
|
|
|
|
// 添加按钮
|
|
$(document).on('click', '#add-probability-item', function() {
|
|
openProbabilityModal(-1);
|
|
});
|
|
|
|
function openProbabilityModal(index) {
|
|
currentProbEditIndex = index;
|
|
var modalHtml = $('#probability-modal').html();
|
|
var isEdit = index >= 0;
|
|
|
|
if (isEdit) {
|
|
var data = probabilityItemsCache[index];
|
|
if (!data) {
|
|
layer.msg('数据不存在');
|
|
return;
|
|
}
|
|
var fishNumbers = getFieldValue(data, 'fishNumber') || [];
|
|
probParamsCache = JSON.parse(JSON.stringify(getFieldValue(data, 'configParams') || []));
|
|
|
|
layer.open({
|
|
type: 1,
|
|
title: '编辑概率配置',
|
|
area: ['850px', '650px'],
|
|
content: modalHtml,
|
|
success: function(layero, index) {
|
|
setTimeout(function() {
|
|
probFishSelect = xmSelect.render({
|
|
el: layero.find('#prob-fish-select')[0],
|
|
data: fishTypeList,
|
|
empty: '无数据',
|
|
filterable: true,
|
|
pageEmptyShow: false
|
|
});
|
|
if (fishNumbers.length > 0) {
|
|
probFishSelect.setValue(fishNumbers);
|
|
}
|
|
renderProbParamsTableInModal(layero);
|
|
}, 100);
|
|
}
|
|
});
|
|
} else {
|
|
probParamsCache = [];
|
|
layer.open({
|
|
type: 1,
|
|
title: '添加概率配置',
|
|
area: ['850px', '650px'],
|
|
content: modalHtml,
|
|
success: function(layero, index) {
|
|
setTimeout(function() {
|
|
probFishSelect = xmSelect.render({
|
|
el: layero.find('#prob-fish-select')[0],
|
|
data: fishTypeList,
|
|
empty: '无数据',
|
|
filterable: true,
|
|
pageEmptyShow: false
|
|
});
|
|
renderProbParamsTableInModal(layero);
|
|
}, 100);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function renderProbParamsTableInModal(layero) {
|
|
var $elem = layero.find('#table-prob-params');
|
|
$elem.attr('lay-filter', 'table-prob-params-modal');
|
|
console.log('[概率击杀] rendering table, lay-filter:', $elem.attr('lay-filter'));
|
|
table.render({
|
|
elem: $elem[0],
|
|
id: 'table-prob-params-modal',
|
|
data: probParamsCache,
|
|
cols: [[
|
|
{ type: 'checkbox' },
|
|
{ field: "min", title: "最小值", width: 100, edit: 'text' },
|
|
{ field: "max", title: "最大值", width: 100, edit: 'text' },
|
|
{ field: "triggerRate", title: "触发权重", width: 100, edit: 'text' },
|
|
{ title: "操作", width: 80, toolbar: '#option-bar' }
|
|
]],
|
|
page: false
|
|
});
|
|
}
|
|
|
|
// 弹窗内事件
|
|
$(document).on('click', '#prob-add-param', function() {
|
|
probParamsCache.push({ min: 0, max: 0, triggerRate: 0 });
|
|
var layero = $('.layui-layer-page');
|
|
renderProbParamsTableInModal(layero);
|
|
});
|
|
|
|
$(document).on('click', '#prob-batch-del', function() {
|
|
var checkStatus = table.checkStatus('table-prob-params-modal');
|
|
var data = checkStatus.data;
|
|
if (data.length === 0) {
|
|
return layer.msg('请选择要删除的参数');
|
|
}
|
|
var ids = data.map(function(item) { return probParamsCache.indexOf(item); });
|
|
ids.sort(function(a, b) { return b - a; });
|
|
ids.forEach(function(i) { probParamsCache.splice(i, 1); });
|
|
var layero = $('.layui-layer-page');
|
|
renderProbParamsTableInModal(layero);
|
|
});
|
|
|
|
$(document).on('click', '#prob-cancel', function() {
|
|
layer.closeAll('page');
|
|
});
|
|
|
|
window.probDeleteItem = function() {
|
|
if (currentProbEditIndex < 0) return;
|
|
console.log('[probDelete] deleting index:', currentProbEditIndex);
|
|
layer.confirm('确定要删除此概率配置吗?', function(idx) {
|
|
probabilityItemsCache.splice(currentProbEditIndex, 1);
|
|
currentProbEditIndex = -1;
|
|
layer.closeAll('page');
|
|
renderProbabilityList();
|
|
layer.msg('删除成功');
|
|
layer.close(idx);
|
|
});
|
|
}
|
|
|
|
$(document).on('click', '#prob-save', function() {
|
|
var fishNumbers = probFishSelect ? probFishSelect.getValue('value') : [];
|
|
|
|
var newData = {
|
|
fishNumber: fishNumbers,
|
|
configParams: probParamsCache
|
|
};
|
|
|
|
if (currentProbEditIndex >= 0) {
|
|
probabilityItemsCache[currentProbEditIndex] = newData;
|
|
} else {
|
|
probabilityItemsCache.push(newData);
|
|
}
|
|
|
|
layer.closeAll('page');
|
|
renderProbabilityList();
|
|
layer.msg('保存成功');
|
|
});
|
|
|
|
table.on('edit(table-prob-params-modal)', function(obj) {
|
|
if (!isNaN(obj.value) && obj.value !== '') obj.data[obj.field] = parseFloat(obj.value);
|
|
else obj.data[obj.field] = obj.value;
|
|
});
|
|
table.on('tool(table-prob-params-modal)', function(obj) {
|
|
console.log('[概率击杀] tool event triggered:', obj.event, obj.data);
|
|
if (obj.event === 'del') {
|
|
console.log('[概率击杀] deleting item:', obj.data);
|
|
var i = probParamsCache.indexOf(obj.data);
|
|
if (i !== -1) {
|
|
probParamsCache.splice(i, 1);
|
|
console.log('[概率击杀] deleted, remaining:', probParamsCache.length);
|
|
var layero = $('.layui-layer-page');
|
|
renderProbParamsTableInModal(layero);
|
|
}
|
|
}
|
|
});
|
|
|
|
table.on('tool(table-prob-params-modal)', function(obj) {
|
|
if (obj.event === 'del') {
|
|
var index = probParamsCache.indexOf(obj.data);
|
|
if (index !== -1) {
|
|
probParamsCache.splice(index, 1);
|
|
var layero = $('.layui-layer-page');
|
|
renderProbParamsTableInModal(layero);
|
|
}
|
|
}
|
|
});
|
|
|
|
// ============ 添加按钮事件 ============
|
|
$('#add-luckPoker-option').on('click', function() {
|
|
tableDataCache.luckPokerOption.push({ OptionId: tableDataCache.luckPokerOption.length + 1, TriggerRate: 10, Score: 0 });
|
|
renderOptionTable('table-luckPoker-option', tableDataCache.luckPokerOption);
|
|
});
|
|
|
|
$('#add-luckFlyDisk-inner').on('click', function() {
|
|
tableDataCache.luckFlyDiskInner.push({ OptionId: tableDataCache.luckFlyDiskInner.length + 1, TriggerRate: 10, Score: 0 });
|
|
renderOptionTable('table-luckFlyDisk-inner', tableDataCache.luckFlyDiskInner);
|
|
});
|
|
|
|
$('#add-luckFlyDisk-outer').on('click', function() {
|
|
tableDataCache.luckFlyDiskOuter.push({ OptionId: tableDataCache.luckFlyDiskOuter.length + 1, TriggerRate: 10, Score: 0 });
|
|
renderOptionTable('table-luckFlyDisk-outer', tableDataCache.luckFlyDiskOuter);
|
|
});
|
|
|
|
// ============ 表格编辑和删除事件 ============
|
|
function setupTableEvents(tableId, dataCache) {
|
|
table.on('edit(' + tableId + ')', function(obj) {
|
|
var value = obj.value;
|
|
if (!isNaN(value) && value !== '') {
|
|
obj.data[obj.field] = parseFloat(value);
|
|
} else {
|
|
obj.data[obj.field] = value;
|
|
}
|
|
});
|
|
table.on('tool(' + tableId + ')', function(obj) {
|
|
if (obj.event === 'del') {
|
|
var idx = obj.tr.data('index');
|
|
if (idx === undefined || idx >= dataCache.length) {
|
|
idx = dataCache.findIndex(function(it) { return it === obj.data; });
|
|
}
|
|
if (idx !== undefined && idx !== -1) dataCache.splice(idx, 1);
|
|
obj.del();
|
|
}
|
|
});
|
|
table.on('toolbar(' + tableId + ')', function(obj) {
|
|
if (obj.event === 'batchdel') {
|
|
var checkStatus = table.checkStatus(tableId);
|
|
var data = checkStatus.data;
|
|
if (data.length === 0) {
|
|
return layer.msg('请选择要删除的数据');
|
|
}
|
|
layer.confirm('确定删除选中的 ' + data.length + ' 条数据吗?', function(idx) {
|
|
var ids = data.map(function(item) { return dataCache.indexOf(item); });
|
|
ids.sort(function(a, b) { return b - a; });
|
|
ids.forEach(function(i) { if (i !== -1) dataCache.splice(i, 1); });
|
|
renderOptionTable(tableId, dataCache);
|
|
layer.close(idx);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
setupTableEvents('table-luckPoker-option', tableDataCache.luckPokerOption);
|
|
setupTableEvents('table-luckFlyDisk-inner', tableDataCache.luckFlyDiskInner);
|
|
setupTableEvents('table-luckFlyDisk-outer', tableDataCache.luckFlyDiskOuter);
|
|
|
|
// ============ 初始化和保存 ============
|
|
function initConfig() {
|
|
layer.confirm('确定要初始化全部配置数据吗?此操作将清空现有数据!', function(idx) {
|
|
layer.close(idx);
|
|
admin.req({
|
|
method: "get",
|
|
url: setter.baseurl + "adminapi/GameConfig/InitSection/BossConfigs",
|
|
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-boss"]', 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-boss"]', function() {
|
|
loadConfig();
|
|
layer.msg('刷新成功');
|
|
});
|
|
|
|
$(document).on('click', '[lay-filter="save-boss"]', function() {
|
|
if (window.parent && window.parent.$ && window.parent.layer) {
|
|
window.parent.$('.layui-layer-shade').remove();
|
|
window.parent.layer.closeAll();
|
|
}
|
|
var b = gameConfig.bossConfigs || {};
|
|
|
|
// 小丑扑克
|
|
b.luckPoker = b.luckPoker || {};
|
|
b.luckPoker.fishNumber = getFishSelectValue('luckPoker_fishNumber');
|
|
b.luckPoker.optionList = tableDataCache.luckPokerOption || [];
|
|
|
|
// 幸运飞碟
|
|
b.luckFlyDisk = b.luckFlyDisk || {};
|
|
b.luckFlyDisk.fishNumber = getFishSelectValue('luckFlyDisk_fishNumber');
|
|
b.luckFlyDisk.innerOptionList = tableDataCache.luckFlyDiskInner || [];
|
|
b.luckFlyDisk.outerOptionList = tableDataCache.luckFlyDiskOuter || [];
|
|
|
|
// 全屏秒怪
|
|
b.fullScreen = b.fullScreen || {};
|
|
b.fullScreen.fishNumber = getFishSelectValue('fullScreen_fishNumber');
|
|
|
|
// 范围秒怪
|
|
b.range = b.range || {};
|
|
b.range.fishNumber = getFishSelectValue('range_fishNumber');
|
|
|
|
// 星际巡航 - 死亡配置已通过弹窗直接保存到gameConfig,只需更新鱼编号
|
|
var icConfig = b.interstellarCruise || {};
|
|
icConfig.fishNumber = getFishSelectValue('interstellarCruise_fishNumber');
|
|
b.interstellarCruise = icConfig;
|
|
|
|
// 烈焰风暴 - 死亡配置已通过弹窗直接保存到gameConfig,只需更新鱼编号
|
|
var fsConfig = b.flameStorm || {};
|
|
fsConfig.fishNumber = getFishSelectValue('flameStorm_fishNumber');
|
|
b.flameStorm = fsConfig;
|
|
|
|
// 破坏球 - 死亡配置已通过弹窗直接保存到gameConfig,只需更新鱼编号
|
|
var bombConfig = b.bomb || {};
|
|
bombConfig.fishNumber = getFishSelectValue('bomb_fishNumber');
|
|
b.bomb = bombConfig;
|
|
|
|
// 机械蝎 - 死亡配置已通过弹窗直接保存到gameConfig,只需更新鱼编号
|
|
var scorpionConfig = b.scorpion || {};
|
|
scorpionConfig.fishNumber = getFishSelectValue('scorpion_fishNumber');
|
|
b.scorpion = scorpionConfig;
|
|
|
|
// 幸运轮盘
|
|
b.luckWheel = luckWheelItemsCache || [];
|
|
|
|
// 神龙转盘 - 已在上方的 death-config 弹窗中保存
|
|
|
|
// 幸运飞碟 - 已在上方的弹窗中保存
|
|
|
|
// 概率击杀
|
|
b.probability = probabilityItemsCache || [];
|
|
|
|
gameConfig.bossConfigs = b;
|
|
|
|
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 || '保存失败');
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
// 从 gameConfig 初始化 cache(仅首次加载时调用)
|
|
function initProbabilityCache() {
|
|
var b = gameConfig.bossConfigs || {};
|
|
probabilityItemsCache = JSON.parse(JSON.stringify(getFieldValue(b, 'Probability') || []));
|
|
}
|
|
|
|
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>
|