初始化提交
This commit is contained in:
258
app/manager/view/package_callback/add.html
Normal file
258
app/manager/view/package_callback/add.html
Normal file
@@ -0,0 +1,258 @@
|
||||
{extend name="../../admin/view/main"}
|
||||
|
||||
{block name="content"}
|
||||
<form class="layui-form layui-card" action="{:request()->url()}" data-auto="true" method="post">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">选择包名</label>
|
||||
<div class="layui-input-block">
|
||||
<div id="packageSelect"></div>
|
||||
<input type="hidden" name="package_id" id="selectedPackageId">
|
||||
<input type="hidden" name="package_name" id="selectedPackageName">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">事件名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="event_name" required lay-verify="required" placeholder="请输入事件名称" class="layui-input">
|
||||
<tip>例如:install, register, purchase 等</tip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">回传地址</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="callback_url" required lay-verify="required|callback_url" placeholder="请输入回传地址" class="layui-input">
|
||||
<tip>
|
||||
完整的回传接口地址,例如:http://api.example.com/callback<br>
|
||||
支持变量替换,如 {package_name}, {event_name} 等<br>
|
||||
详细说明请查看完整回传指南
|
||||
</tip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="status" value="1" title="启用" checked>
|
||||
<input type="radio" name="status" value="0" title="停用">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="hr-line-dashed"></div>
|
||||
|
||||
<div class="layui-form-item text-center">
|
||||
<button class="layui-btn" lay-submit lay-filter="formSubmit">保存数据</button>
|
||||
<button class="layui-btn layui-btn-danger" type="button" data-close>取消添加</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<style>
|
||||
.layui-form tip {
|
||||
display: block;
|
||||
padding: 10px;
|
||||
margin-top: 10px;
|
||||
color: #666;
|
||||
background-color: #f8f8f8;
|
||||
border-radius: 2px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
.layui-badge {
|
||||
margin: 2px;
|
||||
font-family: Consolas, monospace;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
$(function () {
|
||||
layui.use(['form', 'xmSelect', 'layer'], function () {
|
||||
let form = layui.form;
|
||||
let layer = layui.layer;
|
||||
let existingConfig = null; // 用于存储已存在的配置信息
|
||||
|
||||
// 定义包名选择器
|
||||
const packageSelect = xmSelect.render({
|
||||
el: '#packageSelect',
|
||||
name: 'package_id',
|
||||
radio: true,
|
||||
clickClose: true,
|
||||
filterable: true,
|
||||
tips: '请选择包名',
|
||||
data: [],
|
||||
direction: 'auto',
|
||||
model: { label: { type: 'text' } },
|
||||
on: function(data) {
|
||||
if(data.arr.length > 0) {
|
||||
let selected = data.arr[0];
|
||||
$('#selectedPackageId').val(selected.value);
|
||||
$('#selectedPackageName').val(selected.package_name);
|
||||
// 选择包名后,如果已有事件名称,则检查是否存在
|
||||
checkEventExists();
|
||||
} else {
|
||||
$('#selectedPackageId').val('');
|
||||
$('#selectedPackageName').val('');
|
||||
}
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
|
||||
let checkTimer = null; // 添加防抖定时器
|
||||
|
||||
// 监听事件名称输入框
|
||||
$('input[name="event_name"]').on('input propertychange', function() {
|
||||
let currentValue = $(this).val();
|
||||
console.log('事件名称输入:', currentValue);
|
||||
|
||||
// 使用防抖,避免频繁请求
|
||||
if (checkTimer) clearTimeout(checkTimer);
|
||||
checkTimer = setTimeout(function() {
|
||||
checkEventExists(currentValue);
|
||||
}, 300);
|
||||
});
|
||||
|
||||
// 检查事件是否存在
|
||||
function checkEventExists(eventValue) {
|
||||
// 获取当前弹窗内的元素
|
||||
let $dialog = $('.layui-layer-page').last();
|
||||
let packageId = $('#selectedPackageId').val();
|
||||
let $eventInput = $dialog.find('input[name="event_name"]');
|
||||
|
||||
// 清除现有提示和验证状态
|
||||
$eventInput.removeClass('layui-form-danger');
|
||||
$eventInput.nextAll('.layui-form-mid,.layui-word-aux').remove();
|
||||
$dialog.find('tip').show();
|
||||
|
||||
// 重置existingConfig
|
||||
existingConfig = null;
|
||||
|
||||
if (packageId && eventValue) {
|
||||
// 直接获取配置详情
|
||||
$.ajax({
|
||||
url: '{:url("getExistingConfig")}',
|
||||
type: 'POST',
|
||||
data: {
|
||||
package_id: packageId,
|
||||
event_name: eventValue
|
||||
},
|
||||
dataType: 'json',
|
||||
success: function(configRes) {
|
||||
if (configRes.code === 1 && configRes.data) {
|
||||
// 保存已存在的配置信息
|
||||
existingConfig = configRes.data; // 保存完整的配置信息
|
||||
|
||||
// 添加验证失败样式
|
||||
$eventInput.addClass('layui-form-danger');
|
||||
// 隐藏当前弹窗内的tip
|
||||
$dialog.find('.layui-input-block tip').hide();
|
||||
// 添加提示信息
|
||||
$eventInput.after(`
|
||||
<div class="layui-form-mid" style="margin-top: 5px;">
|
||||
<div style="color: #FF5722; font-weight: bold; margin-bottom: 5px;">
|
||||
<i class="layui-icon layui-icon-warning" style="font-size: 16px; margin-right: 5px;"></i>
|
||||
该包名下已存在此事件名称的配置,提交时将覆盖现有配置
|
||||
</div>
|
||||
<div style="color: #666; background: #f8f8f8; padding: 8px; border-radius: 2px; margin-top: 5px;">
|
||||
<i class="layui-icon layui-icon-link" style="margin-right: 5px;"></i>
|
||||
已配置的回调地址:${configRes.data.callback_url}
|
||||
</div>
|
||||
</div>
|
||||
`);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 加载包名列表
|
||||
function loadPackageList() {
|
||||
$.get('{:url("searchPackages")}', {
|
||||
init: 1
|
||||
}, function(res) {
|
||||
if (res.code === 1) {
|
||||
let data = res.data.map(function(item) {
|
||||
return {
|
||||
name: item.package_name + ' (' + item.name + ')',
|
||||
value: item.id,
|
||||
package_name: item.package_name
|
||||
};
|
||||
});
|
||||
packageSelect.update({
|
||||
data: data,
|
||||
autoRow: true
|
||||
});
|
||||
}
|
||||
}, 'json');
|
||||
}
|
||||
|
||||
// 初始加载包名列表
|
||||
loadPackageList();
|
||||
|
||||
// 表单验证
|
||||
form.verify({
|
||||
callback_url: function(value) {
|
||||
if (!/^https?:\/\/.+/.test(value)) {
|
||||
return '请输入正确的URL地址';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 修改表单提交处理
|
||||
form.on('submit(formSubmit)', function(data) {
|
||||
// 如果存在配置,显示确认框
|
||||
if (existingConfig) {
|
||||
layer.confirm('该包名下已存在此事件配置,是否确认覆盖?', {
|
||||
title: '覆盖确认',
|
||||
btn: ['确认覆盖', '取消'],
|
||||
icon: 3
|
||||
}, function(index) {
|
||||
// 确认覆盖,将请求转为更新操作
|
||||
let formData = data.field;
|
||||
formData.id = existingConfig.id; // 添加已存在配置的ID
|
||||
|
||||
$.ajax({
|
||||
url: '{:url("edit")}',
|
||||
type: 'POST',
|
||||
data: formData,
|
||||
dataType: 'json',
|
||||
success: function(res) {
|
||||
if (res.code === 1) {
|
||||
layer.msg(res.info, {icon: 1, time: 1500}, function() {
|
||||
parent.layer.close(parent.layer.getFrameIndex(window.name));
|
||||
parent.location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.info, {icon: 2, time: 1500});
|
||||
}
|
||||
}
|
||||
});
|
||||
layer.close(index);
|
||||
});
|
||||
} else {
|
||||
// 如果不存在配置,使用默认表单提交
|
||||
let formData = data.field;
|
||||
$.ajax({
|
||||
url: '{:url("add")}',
|
||||
type: 'POST',
|
||||
data: formData,
|
||||
dataType: 'json',
|
||||
success: function(res) {
|
||||
if (res.code === 1) {
|
||||
layer.msg(res.info, {icon: 1, time: 1500}, function() {
|
||||
parent.layer.close(parent.layer.getFrameIndex(window.name));
|
||||
parent.location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.info, {icon: 2, time: 1500});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return false; // 阻止表单默认提交
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
160
app/manager/view/package_callback/edit.html
Normal file
160
app/manager/view/package_callback/edit.html
Normal file
@@ -0,0 +1,160 @@
|
||||
{extend name="../../admin/view/main"}
|
||||
|
||||
{block name="content"}
|
||||
<form class="layui-form layui-card" action="{:request()->url()}" data-auto="true" method="post">
|
||||
<div class="layui-card-body">
|
||||
<input type="hidden" name="id" value="{$vo.id|default=''}">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">选择包名</label>
|
||||
<div class="layui-input-block">
|
||||
<div id="packageSelect"></div>
|
||||
<input type="hidden" name="package_id" id="selectedPackageId" value="{$vo.package_id|default=''}">
|
||||
<input type="hidden" name="package_name" id="selectedPackageName" value="{$vo.package_name|default=''}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">事件名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="event_name" required lay-verify="required" placeholder="请输入事件名称" class="layui-input" value="{$vo.event_name|default=''}">
|
||||
<tip>例如:install, register, purchase 等</tip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">回传地址</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="callback_url" required lay-verify="required|callback_url" placeholder="请输入回传地址" class="layui-input" value="{$vo.callback_url|default=''}">
|
||||
<tip>
|
||||
完整的回传接口地址,例如:http://api.example.com/callback<br>
|
||||
支持变量替换,如 {package_name}, {event_name} 等<br>
|
||||
详细说明请查看完整回传指南
|
||||
</tip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="status" value="1" title="启用" {if $vo.status eq 1}checked{/if}>
|
||||
<input type="radio" name="status" value="0" title="停用" {if $vo.status eq 0}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="hr-line-dashed"></div>
|
||||
|
||||
<div class="layui-form-item text-center">
|
||||
<button class="layui-btn" lay-submit lay-filter="formSubmit">保存数据</button>
|
||||
<button class="layui-btn layui-btn-danger" type="button" data-close>取消编辑</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<style>
|
||||
.layui-form tip {
|
||||
display: block;
|
||||
padding: 10px;
|
||||
margin-top: 10px;
|
||||
color: #666;
|
||||
background-color: #f8f8f8;
|
||||
border-radius: 2px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
.layui-badge {
|
||||
margin: 2px;
|
||||
font-family: Consolas, monospace;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
$(function () {
|
||||
layui.use(['form', 'xmSelect'], function () {
|
||||
let form = layui.form;
|
||||
|
||||
// 定义包名选择器
|
||||
const packageSelect = xmSelect.render({
|
||||
el: '#packageSelect',
|
||||
name: 'package_id',
|
||||
radio: true,
|
||||
clickClose: true,
|
||||
filterable: true,
|
||||
tips: '请选择包名',
|
||||
data: [],
|
||||
direction: 'auto',
|
||||
model: { label: { type: 'text' } },
|
||||
initValue: [{$vo.package_id|default=0}], // 设置初始选中值
|
||||
on: function(data) {
|
||||
if(data.arr.length > 0) {
|
||||
let selected = data.arr[0];
|
||||
$('#selectedPackageId').val(selected.value);
|
||||
$('#selectedPackageName').val(selected.package_name);
|
||||
} else {
|
||||
$('#selectedPackageId').val('');
|
||||
$('#selectedPackageName').val('');
|
||||
}
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
|
||||
// 加载包名列表并选中当前包名
|
||||
function loadPackageList() {
|
||||
$.get('{:url("searchPackages")}', {
|
||||
init: 1,
|
||||
edit_id: '{$vo.id|default=0}' // 传递当前编辑的ID
|
||||
}, function(res) {
|
||||
if (res.code === 1) {
|
||||
let data = res.data.map(function(item) {
|
||||
return {
|
||||
name: item.package_name + ' (' + item.name + ')',
|
||||
value: item.id,
|
||||
package_name: item.package_name,
|
||||
selected: item.id == '{$vo.package_id|default=0}' // 标记当前选中项
|
||||
};
|
||||
});
|
||||
packageSelect.update({
|
||||
data: data,
|
||||
autoRow: true
|
||||
});
|
||||
}
|
||||
}, 'json');
|
||||
}
|
||||
|
||||
// 初始加载包名列表
|
||||
loadPackageList();
|
||||
|
||||
// 表单验证
|
||||
form.verify({
|
||||
callback_url: function(value) {
|
||||
if (!/^https?:\/\/.+/.test(value)) {
|
||||
return '请输入正确的URL地址';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 表单提交
|
||||
form.on('submit(formSubmit)', function(data) {
|
||||
let formData = data.field;
|
||||
$.ajax({
|
||||
url: '{:url("edit")}',
|
||||
type: 'POST',
|
||||
data: formData,
|
||||
dataType: 'json',
|
||||
success: function(res) {
|
||||
if (res.code === 1) {
|
||||
layer.msg(res.info, {icon: 1, time: 1500}, function() {
|
||||
parent.layer.close(parent.layer.getFrameIndex(window.name));
|
||||
parent.location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.info, {icon: 2, time: 1500});
|
||||
}
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
232
app/manager/view/package_callback/index.html
Normal file
232
app/manager/view/package_callback/index.html
Normal file
@@ -0,0 +1,232 @@
|
||||
{extend name="../../admin/view/main"}
|
||||
|
||||
|
||||
{block name="content"}
|
||||
<!-- 操作指南开始 -->
|
||||
<div class="think-box-shadow" style="margin-bottom: 15px; padding: 15px;">
|
||||
<h3 class="layui-inline" style="margin-right: 15px;">回传配置指南</h3>
|
||||
<button class="layui-btn layui-btn-sm" id="showGuide">展开/收起</button>
|
||||
<div class="guide-content layui-hide" style="margin-top: 10px;">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-elem-quote" style="border-left: 5px solid #009688;">
|
||||
<h4>基本说明:</h4>
|
||||
<p>本页面用于管理事件回传配置,支持变量替换功能,可以灵活配置回传地址。</p>
|
||||
</div>
|
||||
|
||||
<div class="layui-elem-quote" style="border-left: 5px solid #FFB800;">
|
||||
<h4>支持的变量:</h4>
|
||||
<ol>
|
||||
<li><code>{package_name}</code> - 应用包名,如:com.example.app</li>
|
||||
<li><code>{event_name}</code> - 事件名称,如:install, register</li>
|
||||
<li><code>{event_time}</code> - 事件发生时间,格式:YYYY-MM-DD HH:mm:ss</li>
|
||||
<li><code>{gaid}</code> - 广告ID</li>
|
||||
<li><code>{network_name}</code> - 网络名称,如:AppsFlyer, Kochava</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="layui-elem-quote" style="border-left: 5px solid #FF5722;">
|
||||
<h4>配置示例:</h4>
|
||||
<ol>
|
||||
<li>基础URL:http://api.example.com/callback</li>
|
||||
<li>
|
||||
完整示例:http://api.example.com/callback?package={package_name}&event={event_name}&time={event_time}&gaid={gaid}&network={network_name}
|
||||
</li>
|
||||
<li>实际回传时,花括号中的变量会被替换为实际值</li>
|
||||
<li>所有特殊字符会自动进行URL编码</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="layui-elem-quote" style="border-left: 5px solid #01AAED;">
|
||||
<h4>注意事项:</h4>
|
||||
<ol>
|
||||
<li>变量名称必须使用大括号{}包裹,且区分大小写</li>
|
||||
<li>同一个包名下不能配置重复的事件名称</li>
|
||||
<li>回传地址必须以http://或https://开头</li>
|
||||
<li>建议在测试环境验证回传地址的正确性</li>
|
||||
<li>可以通过状态开关临时停用某个回传配置</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 操作指南结束 -->
|
||||
|
||||
<!-- 表单搜索区域 -->
|
||||
<div class="think-box-shadow">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md11">
|
||||
<form class="layui-form layui-form-pane form-search" action="">
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">包名</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="package_name" placeholder="请输入包名" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">事件名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="event_name" placeholder="请输入事件名称" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="status" lay-search>
|
||||
<option value="">所有状态</option>
|
||||
<option value="1">启用</option>
|
||||
<option value="0">停用</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="search_form">
|
||||
<i class="layui-icon"></i> 搜 索
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md1 text-right">
|
||||
<!--{if auth("add")}-->
|
||||
<button class='layui-btn layui-btn-normal' data-modal='{:url("add")}'
|
||||
data-title="添加回传配置">
|
||||
<i class="layui-icon layui-icon-add-circle"></i> 添加事件
|
||||
</button>
|
||||
<!--{/if}-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 数据表格区域 -->
|
||||
<div class="think-box-shadow">
|
||||
<table class="layui-table" id="CallbackTable" data-url="{:url('get_list')}"
|
||||
data-target-search="form.form-search"></table>
|
||||
</div>
|
||||
|
||||
<!-- 数据操作工具条模板 -->
|
||||
<script type="text/html" id="toolbar">
|
||||
<!--{if auth("edit")}-->
|
||||
<a class="layui-btn layui-btn-sm" data-modal="{:url('edit')}?id={{d.id}}" data-title="编辑回传配置">
|
||||
<i class="layui-icon layui-icon-edit"></i> 编辑
|
||||
</a>
|
||||
<!--{/if}-->
|
||||
<!--{if auth("remove")}-->
|
||||
<a class="layui-btn layui-btn-sm layui-btn-danger" data-action="{:url('remove')}" data-value="id#{{d.id}}"
|
||||
data-confirm="确定要删除此配置吗?">
|
||||
<i class="layui-icon layui-icon-delete"></i> 删除
|
||||
</a>
|
||||
<!--{/if}-->
|
||||
</script>
|
||||
|
||||
<!-- 数据状态切换模板 -->
|
||||
<script type="text/html" id="statusTpl">
|
||||
<!--{if auth("state")}-->
|
||||
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="启用|停用" lay-filter="status"
|
||||
{{d.status>0?'checked':''}}>
|
||||
<!--{else}-->
|
||||
{{d.status ? '<b class="color-green">启用</b>' : '<b class="color-red">停用</b>'}}
|
||||
<!--{/if}-->
|
||||
</script>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script>
|
||||
$(function () {
|
||||
let table; // 定义表格变量
|
||||
|
||||
// 初始化表格组件
|
||||
table = $('#CallbackTable').layTable({
|
||||
url: '{:url("get_list")}',
|
||||
method: 'get',
|
||||
even: true,
|
||||
page: true,
|
||||
limit: 15,
|
||||
limits: [10, 15, 20, 25, 50, 100],
|
||||
cols: [[
|
||||
{field: 'id', title: 'ID', width: 80, align: 'center'},
|
||||
{field: 'package_name', title: '包名', minWidth: 200},
|
||||
{field: 'event_name', title: '事件名称', minWidth: 150},
|
||||
{field: 'callback_url', title: '回传地址', minWidth: 300},
|
||||
{field: 'status', title: '状态', width: 100, align: 'center', templet: '#statusTpl'},
|
||||
{field: 'create_at', title: '创建时间', width: 180, align: 'center'},
|
||||
{title: '操作', toolbar: '#toolbar', width: 180, align: 'center', fixed: 'right'}
|
||||
]],
|
||||
text: {
|
||||
none: '暂无回传配置数据'
|
||||
}
|
||||
});
|
||||
|
||||
// 数据状态切换操作
|
||||
form.on('switch(status)', function (obj) {
|
||||
$.ajax({
|
||||
url: '{:url("state")}',
|
||||
type: 'POST',
|
||||
data: {
|
||||
id: obj.value,
|
||||
status: obj.elem.checked ? 1 : 0
|
||||
},
|
||||
dataType: 'json',
|
||||
success: function (res) {
|
||||
if (res.code === 1) {
|
||||
layer.msg(res.info, {icon: 1});
|
||||
// 仅重载表格数据
|
||||
table.reload('CallbackTable', {
|
||||
page: {
|
||||
curr: $(".layui-laypage-em").next().html() // 保持在当前页
|
||||
}
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.info, {icon: 2});
|
||||
// 状态切换失败,回滚switch状态
|
||||
obj.elem.checked = !obj.elem.checked;
|
||||
form.render('checkbox');
|
||||
}
|
||||
},
|
||||
error: function () {
|
||||
layer.msg('操作失败,请重试', {icon: 2});
|
||||
// 发生错误时也回滚switch状态
|
||||
obj.elem.checked = !obj.elem.checked;
|
||||
form.render('checkbox');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 操作指南展开/收起
|
||||
$('#showGuide').on('click', function () {
|
||||
$('.guide-content').toggleClass('layui-hide');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* 操作指南样式 */
|
||||
.guide-content .layui-elem-quote {
|
||||
margin: 10px 0;
|
||||
padding: 15px;
|
||||
background-color: #f8f8f8;
|
||||
}
|
||||
|
||||
.guide-content h4 {
|
||||
margin-bottom: 10px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.guide-content code {
|
||||
padding: 2px 4px;
|
||||
background-color: #f1f1f1;
|
||||
border-radius: 3px;
|
||||
color: #333;
|
||||
font-family: Consolas, monospace;
|
||||
}
|
||||
|
||||
.guide-content ol li {
|
||||
margin: 5px 0;
|
||||
color: #666;
|
||||
}
|
||||
</style>
|
||||
{/block}
|
||||
Reference in New Issue
Block a user