This commit is contained in:
youda 2025-04-17 20:51:43 +08:00
parent 551eb68906
commit 9c5c47eb77
12 changed files with 917 additions and 1 deletions

23
.env Normal file
View File

@ -0,0 +1,23 @@
APP_DEBUG = false
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = youda_test
USERNAME = youda_test
PASSWORD = youda_test
HOSTPORT = 3306
CHARSET = utf8
DEBUG = false
[LANG]
default_lang = zh-cn
[REDIS]
HOST = 127.0.0.1
PORT = 6379
PASSWORD =
DB = 3

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
.env merge=ours
config/api.php merge=ours

1
.gitignore vendored
View File

@ -4,5 +4,4 @@ runtime/*
vendor/*
404.html
public/.well-known/*
.env
public/ueditor/*

View File

@ -0,0 +1,138 @@
<?php
namespace app\admin\controller;
use app\admin\controller\Base;
use app\common\model\FloatBallConfig;
use think\facade\Db;
use think\facade\View;
class FloatBall extends Base
{
/**
* 悬浮球配置列表
*/
public function index()
{
if (request()->isAjax()) {
$limit = input('param.limit', 15);
$offset = input('param.offset', 0);
$where = [];
$res = FloatBallConfig::where($where)
->order('id', 'desc')
->limit($offset, $limit)
->select();
$total = FloatBallConfig::where($where)->count();
return $this->renderTable('获取成功', $total, $res, 0);
}
return View::fetch();
}
/**
* 添加悬浮球配置
*/
public function add()
{
if (request()->isPost()) {
$param = input('post.');
$validate = $this->validate($param, [
'type' => 'require|number',
'image' => 'require',
'position_x' => 'require',
'position_y' => 'require',
'width' => 'require',
'height' => 'require',
'effect' => 'require|number',
]);
if (true !== $validate) {
return $this->renderError($validate);
}
$param['status'] = isset($param['status']) ? 1 : 0;
$res = FloatBallConfig::create($param);
if ($res) {
return $this->renderSuccess('添加成功', ['url' => (string)url('float_ball')]);
} else {
return $this->renderError('添加失败');
}
}
return View::fetch();
}
/**
* 编辑悬浮球配置
*/
public function edit()
{
$id = input('param.id', 0);
$info = FloatBallConfig::where('id', $id)->find();
if (empty($info)) {
return $this->renderError('数据不存在');
}
if (request()->isPost()) {
$param = input('post.');
// $validate = $this->validate($param, [
// 'type' => 'require|number',
// 'image' => 'require',
// 'position_x' => 'require',
// 'position_y' => 'require',
// 'width' => 'require',
// 'height' => 'require',
// 'effect' => 'require|number',
// ]);
// if (true !== $validate) {
// return $this->renderError($validate);
// }
$param['status'] = isset($param['status']) ? 1 : 0;
$res = FloatBallConfig::update($param, ['id' => $id]);
if ($res) {
return $this->renderSuccess('编辑成功', ['url' => (string)url('float_ball')]);
} else {
return $this->renderError('编辑失败');
}
}
View::assign('info', $info);
return View::fetch();
}
/**
* 修改状态
*/
public function status()
{
$id = input('param.id', 0);
$status = input('param.status', 0);
$res = FloatBallConfig::update(['status' => $status], ['id' => $id]);
if ($res) {
return $this->renderSuccess('操作成功');
} else {
return $this->renderError('操作失败');
}
}
/**
* 删除悬浮球配置
*/
public function del()
{
$id = input('param.id', 0);
$res = FloatBallConfig::destroy($id);
if ($res) {
return $this->renderSuccess('删除成功');
} else {
return $this->renderError('删除失败');
}
}
}

View File

@ -377,6 +377,15 @@ Route::rule('sign_config_sort', 'SignConfig/sort', 'POST');
Route::rule('sign_config_status', 'SignConfig/status', 'POST');
Route::rule('get_coupons', 'SignConfig/getCoupons', 'GET');
#============================
#FloatBall.php悬浮球配置管理
#============================
Route::rule('float_ball', 'FloatBall/index', 'GET|POST');
Route::rule('float_ball_add', 'FloatBall/add', 'GET|POST');
Route::rule('float_ball_edit', 'FloatBall/edit', 'GET|POST');
Route::rule('float_ball_del', 'FloatBall/del', 'POST');
Route::rule('float_ball_status', 'FloatBall/status', 'POST');
#============================
#Reward.php奖励管理
#============================

View File

@ -0,0 +1,249 @@
{include file="Public/header3" /}
<div class="layui-form" style="width: 90%; margin: 0 auto; padding-top: 20px;">
<div class="layui-form-item">
<label class="layui-form-label">状态</label>
<div class="layui-input-block">
<input type="radio" name="status" value="0" title="关闭" checked>
<input type="radio" name="status" value="1" title="开启">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">标题</label>
<div class="layui-input-block">
<input type="text" name="title" id="title" autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">X坐标</label>
<div class="layui-input-inline">
<input type="text" name="position_x" id="position_x" autocomplete="off" placeholder="请输入X坐标15% 或 15rpx" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">Y坐标</label>
<div class="layui-input-inline">
<input type="text" name="position_y" id="position_y" autocomplete="off" placeholder="请输入Y坐标15% 或 15rpx" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">宽度</label>
<div class="layui-input-inline">
<input type="text" name="width" id="width" autocomplete="off" placeholder="请输入宽度100rpx" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">高度</label>
<div class="layui-input-inline">
<input type="text" name="height" id="height" autocomplete="off" placeholder="请输入高度100rpx" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">类型</label>
<div class="layui-input-block">
<input type="radio" name="type" value="1" title="展示图片" checked lay-filter="typeFilter">
<input type="radio" name="type" value="2" title="跳转页面" lay-filter="typeFilter">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">图片</label>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="uploadImage">上传图片</button>
<div class="layui-upload-list">
<img class="layui-upload-img" id="imagePreview" style="max-width: 120px; max-height: 80px;">
</div>
<input type="hidden" name="image" id="image" value="">
</div>
</div>
<!-- 展示图片类型专属字段 -->
<div id="showImageFields">
<div class="layui-form-item" id="imageDetailsDiv">
<label class="layui-form-label">图片详情</label>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="uploadImageDetails">上传图片详情</button>
<div class="layui-upload-list">
<img class="layui-upload-img" id="imageDetailsPreview" style="max-width: 120px; max-height: 80px;">
</div>
<input type="hidden" name="image_details" id="image_details" value="">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">背景图</label>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="uploadImageBj">上传背景图</button>
<div class="layui-upload-list">
<img class="layui-upload-img" id="imageBjPreview" style="max-width: 120px; max-height: 80px;">
</div>
<input type="hidden" name="image_bj" id="image_bj" value="">
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">详情图X坐标</label>
<div class="layui-input-inline">
<input type="text" name="image_details_x" id="image_details_x" autocomplete="off" placeholder="请输入详情图X坐标" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">详情图Y坐标</label>
<div class="layui-input-inline">
<input type="text" name="image_details_y" id="image_details_y" autocomplete="off" placeholder="请输入详情图Y坐标" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">详情图宽度</label>
<div class="layui-input-inline">
<input type="text" name="image_details_w" id="image_details_w" autocomplete="off" placeholder="请输入详情图宽度" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">详情图高度</label>
<div class="layui-input-inline">
<input type="text" name="image_details_h" id="image_details_h" autocomplete="off" placeholder="请输入详情图高度" class="layui-input">
</div>
</div>
</div>
</div>
<div class="layui-form-item" id="linkUrlDiv">
<label class="layui-form-label">跳转链接</label>
<div class="layui-input-block">
<input type="text" name="link_url" id="link_url" autocomplete="off" placeholder="请输入跳转链接" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">特效</label>
<div class="layui-input-block">
<select name="effect">
<option value="0"></option>
<option value="1">特效1放大缩小</option>
</select>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="saveBtn">保存</button>
</div>
</div>
</div>
{include file="Public/footer3" /}
<script>
layui.use(['form', 'upload', 'layer'], function () {
var form = layui.form,
layer = layui.layer,
upload = layui.upload,
$ = layui.jquery;
// 初始隐藏跳转链接和展示图片相关字段
$('#linkUrlDiv').hide();
$('#showImageFields').hide();
// 监听类型切换
form.on('radio(typeFilter)', function(data){
if(data.value == 1) {
$('#linkUrlDiv').hide();
$('#showImageFields').show();
} else {
$('#linkUrlDiv').show();
$('#showImageFields').hide();
}
});
// 上传图片
upload.render({
accept: 'imgurl',
elem: '#uploadImage',
url: '/admin/picture',
done: function (res) {
if (res.status == 1) {
layer.msg("上传成功", { icon: 1, time: 1000 }, function () {
$("#imagePreview").attr("src", res.data.path);
$("input[name=image]").val(res.data.imgurl);
});
} else {
layer.msg(res.msg, { icon: 2, anim: 6, time: 1500 });
}
},
error: function () {
layer.msg('服务繁忙,请稍后再试', { icon: 2, anim: 6, time: 1500 });
}
});
// 上传图片详情
upload.render({
accept: 'imgurl',
elem: '#uploadImageDetails',
url: '/admin/picture',
done: function (res) {
if (res.status == 1) {
layer.msg("上传成功", { icon: 1, time: 1000 }, function () {
$("#imageDetailsPreview").attr("src", res.data.path);
$("input[name=image_details]").val(res.data.imgurl);
});
} else {
layer.msg(res.msg, { icon: 2, anim: 6, time: 1500 });
}
},
error: function () {
layer.msg('服务繁忙,请稍后再试', { icon: 2, anim: 6, time: 1500 });
}
});
// 上传背景图
upload.render({
accept: 'imgurl',
elem: '#uploadImageBj',
url: '/admin/picture',
done: function (res) {
if (res.status == 1) {
layer.msg("上传成功", { icon: 1, time: 1000 }, function () {
$("#imageBjPreview").attr("src", res.data.path);
$("input[name=image_bj]").val(res.data.imgurl);
});
} else {
layer.msg(res.msg, { icon: 2, anim: 6, time: 1500 });
}
},
error: function () {
layer.msg('服务繁忙,请稍后再试', { icon: 2, anim: 6, time: 1500 });
}
});
// 表单提交
form.on('submit(saveBtn)', function (data) {
$.ajax({
url: '{:url("/admin/float_ball_add")}',
type: 'POST',
data: data.field,
success: function (res) {
if (res.status) {
layer.msg(res.msg, {icon: 1, time: 1000}, function () {
parent.layui.table.reload('tableList');
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
} else {
layer.msg(res.msg, {icon: 2});
}
}
});
return false;
});
});
</script>

View File

@ -0,0 +1,258 @@
{include file="Public:header3"/}
<div class="layui-form" style="width: 90%; margin: 0 auto; padding-top: 20px;">
<input type="hidden" name="id" value="{$info.id}">
<div class="layui-form-item">
<label class="layui-form-label">状态</label>
<div class="layui-input-block">
<input type="radio" name="status" value="0" title="关闭" {if $info.status eq 0}checked{/if}>
<input type="radio" name="status" value="1" title="开启" {if $info.status eq 1}checked{/if}>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">标题</label>
<div class="layui-input-block">
<input type="text" name="title" id="title" autocomplete="off" placeholder="请输入标题" class="layui-input" value="{$info.title}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">类型</label>
<div class="layui-input-block">
<input type="radio" name="type" value="1" title="展示图片" {if $info.type eq 1}checked{/if} lay-filter="typeFilter">
<input type="radio" name="type" value="2" title="跳转页面" {if $info.type eq 2}checked{/if} lay-filter="typeFilter">
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">X坐标</label>
<div class="layui-input-inline">
<input type="text" name="position_x" id="position_x" autocomplete="off" placeholder="请输入X坐标15% 或 15rpx" class="layui-input" value="{$info.position_x}">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">Y坐标</label>
<div class="layui-input-inline">
<input type="text" name="position_y" id="position_y" autocomplete="off" placeholder="请输入Y坐标15% 或 15rpx" class="layui-input" value="{$info.position_y}">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">宽度</label>
<div class="layui-input-inline">
<input type="text" name="width" id="width" autocomplete="off" placeholder="请输入宽度100rpx" class="layui-input" value="{$info.width}">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">高度</label>
<div class="layui-input-inline">
<input type="text" name="height" id="height" autocomplete="off" placeholder="请输入高度100rpx" class="layui-input" value="{$info.height}">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">悬浮球图片</label>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="uploadImage">上传图片</button>
<div class="layui-upload-list">
<img class="layui-upload-img" id="imagePreview" style="max-width: 120px; max-height: 80px;" src="{$info.image}">
</div>
<input type="hidden" name="image" id="image" value="{$info.image}">
</div>
</div>
<!-- 展示图片类型专属字段 -->
<div id="showImageFields">
<div class="layui-form-item" id="imageDetailsDiv">
<label class="layui-form-label">图片详情</label>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="uploadImageDetails">上传图片详情</button>
<div class="layui-upload-list">
<img class="layui-upload-img" id="imageDetailsPreview" style="max-width: 120px; max-height: 80px;" src="{$info.image_details}">
</div>
<input type="hidden" name="image_details" id="image_details" value="{$info.image_details}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">背景图</label>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="uploadImageBj">上传背景图</button>
<div class="layui-upload-list">
<img class="layui-upload-img" id="imageBjPreview" style="max-width: 120px; max-height: 80px;" src="{$info.image_bj}">
</div>
<input type="hidden" name="image_bj" id="image_bj" value="{$info.image_bj}">
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">详情图X坐标</label>
<div class="layui-input-inline">
<input type="text" name="image_details_x" id="image_details_x" autocomplete="off" placeholder="请输入详情图X坐标" class="layui-input" value="{$info.image_details_x}">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">详情图Y坐标</label>
<div class="layui-input-inline">
<input type="text" name="image_details_y" id="image_details_y" autocomplete="off" placeholder="请输入详情图Y坐标" class="layui-input" value="{$info.image_details_y}">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">详情图宽度</label>
<div class="layui-input-inline">
<input type="text" name="image_details_w" id="image_details_w" autocomplete="off" placeholder="请输入详情图宽度" class="layui-input" value="{$info.image_details_w}">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">详情图高度</label>
<div class="layui-input-inline">
<input type="text" name="image_details_h" id="image_details_h" autocomplete="off" placeholder="请输入详情图高度" class="layui-input" value="{$info.image_details_h}">
</div>
</div>
</div>
</div>
<div class="layui-form-item" id="linkUrlDiv">
<label class="layui-form-label">跳转链接</label>
<div class="layui-input-block">
<input type="text" name="link_url" id="link_url" autocomplete="off" placeholder="请输入跳转链接" class="layui-input" value="{$info.link_url}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">特效</label>
<div class="layui-input-block">
<select name="effect">
<option value="0" {if $info.effect eq 0}selected{/if}></option>
<option value="1" {if $info.effect eq 1}selected{/if}>特效1放大缩小</option>
</select>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="saveBtn">保存</button>
</div>
</div>
</div>
{include file="Public/footer3" /}
<script>
layui.use(['form', 'upload', 'layer'], function () {
var form = layui.form,
layer = layui.layer,
upload = layui.upload,
$ = layui.jquery;
// 初始化显示隐藏跳转链接和展示图片相关字段
var type = $('input[name="type"]:checked').val();
if(type == 1) {
$('#linkUrlDiv').hide();
$('#showImageFields').show();
} else {
$('#linkUrlDiv').show();
$('#showImageFields').hide();
}
// 监听类型切换
form.on('radio(typeFilter)', function(data){
if(data.value == 1) {
$('#linkUrlDiv').hide();
$('#showImageFields').show();
} else {
$('#linkUrlDiv').show();
$('#showImageFields').hide();
}
});
// 上传图片
upload.render({
accept: 'imgurl',
elem: '#uploadImage',
url: '/admin/picture',
done: function (res) {
if (res.status == 1) {
layer.msg("上传成功", { icon: 1, time: 1000 }, function () {
$("#imagePreview").attr("src", res.data.path);
$("input[name=image]").val(res.data.imgurl);
});
} else {
layer.msg(res.msg, { icon: 2, anim: 6, time: 1500 });
}
},
error: function () {
layer.msg('服务繁忙,请稍后再试', { icon: 2, anim: 6, time: 1500 });
}
});
// 上传图片详情
upload.render({
accept: 'imgurl',
elem: '#uploadImageDetails',
url: '/admin/picture',
done: function (res) {
if (res.status == 1) {
layer.msg("上传成功", { icon: 1, time: 1000 }, function () {
$("#imageDetailsPreview").attr("src", res.data.path);
$("input[name=image_details]").val(res.data.imgurl);
});
} else {
layer.msg(res.msg, { icon: 2, anim: 6, time: 1500 });
}
},
error: function () {
layer.msg('服务繁忙,请稍后再试', { icon: 2, anim: 6, time: 1500 });
}
});
// 上传背景图
upload.render({
accept: 'imgurl',
elem: '#uploadImageBj',
url: '/admin/picture',
done: function (res) {
if (res.status == 1) {
layer.msg("上传成功", { icon: 1, time: 1000 }, function () {
$("#imageBjPreview").attr("src", res.data.path);
$("input[name=image_bj]").val(res.data.imgurl);
});
} else {
layer.msg(res.msg, { icon: 2, anim: 6, time: 1500 });
}
},
error: function () {
layer.msg('服务繁忙,请稍后再试', { icon: 2, anim: 6, time: 1500 });
}
});
// 表单提交
form.on('submit(saveBtn)', function (data) {
$.ajax({
url: '{:url("/admin/float_ball_edit")}',
type: 'POST',
data: data.field,
success: function (res) {
if (res.status) {
layer.msg(res.msg, {icon: 1, time: 1000}, function () {
parent.layui.table.reload('tableList');
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
} else {
layer.msg(res.msg, {icon: 2});
}
}
});
return false;
});
});
</script>

View File

@ -0,0 +1,166 @@
{include file="Public:header3"/}
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-header">悬浮球配置</div>
<div class="layui-card-body">
<div class="layui-form toolbar">
<div class="layui-form-item">
<div class="layui-inline">
<a class="layui-btn layui-btn-sm" id="btnAdd"><i class="layui-icon">&#xe654;</i>添加</a>
</div>
</div>
</div>
<table id="tableList" lay-filter="tableList"></table>
</div>
</div>
</div>
<!-- 表格操作列 -->
<script type="text/html" id="tableBar">
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
{{# if(d.status == 0){ }}
<a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="enable">启用</a>
{{# }else{ }}
<a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="disable">禁用</a>
{{# } }}
</script>
<!-- 开关状态模板 -->
<script type="text/html" id="switchTpl">
{{# if(d.status == 1){ }}
<span class="layui-badge layui-bg-green">开启</span>
{{# }else{ }}
<span class="layui-badge">关闭</span>
{{# } }}
</script>
<!-- 类型模板 -->
<script type="text/html" id="typeTpl">
{{# if(d.type == 1){ }}
<span>展示图片</span>
{{# }else{ }}
<span>跳转页面</span>
{{# } }}
</script>
<!-- 特效模板 -->
<script type="text/html" id="effectTpl">
{{# if(d.effect == 0){ }}
<span></span>
{{# }else{ }}
<span>特效1</span>
{{# } }}
</script>
{include file="Public/footer3" /}
<script>
layui.use(['table', 'form', 'jquery', 'layer'], function () {
var $ = layui.jquery;
var table = layui.table;
var form = layui.form;
var layer = layui.layer;
// 渲染表格
table.render({
elem: '#tableList',
url: '{:url("/admin/float_ball")}',
page: true,
cols: [[
{type: 'numbers', title: '序号', width: 60},
{field: 'title', title: '标题'},
{field: 'image', title: '图片', templet: function (d) {
return '<img src="' + d.image + '" style="max-height: 50px;">';
}},
{field: 'image_bj', title: '背景图', templet: function (d) {
return d.image_bj ? '<img src="' + d.image_bj + '" style="max-height: 50px;">' : '';
}},
{field: 'image_details', title: '图片详情', templet: function (d) {
return d.image_details ? '<img src="' + d.image_details + '" style="max-height: 50px;">' : '';
}},
{field: 'type', title: '类型', templet: '#typeTpl'},
{field: 'link_url', title: '跳转链接'},
{field: 'position_x', title: 'X坐标'},
{field: 'position_y', title: 'Y坐标'},
{field: 'width', title: '宽度'},
{field: 'height', title: '高度'},
{field: 'image_details_x', title: '详情图X坐标'},
{field: 'image_details_y', title: '详情图Y坐标'},
{field: 'image_details_w', title: '详情图宽度'},
{field: 'image_details_h', title: '详情图高度'},
{field: 'effect', title: '特效', templet: '#effectTpl'},
{field: 'status', title: '状态', templet: '#switchTpl'},
{field: 'create_time', title: '创建时间', templet: function (d) {
return layui.util.toDateString(d.create_time * 1000);
}},
{title: '操作', toolbar: '#tableBar', width: 180}
]]
});
// 添加按钮点击事件
$('#btnAdd').click(function () {
layer.open({
type: 2,
title: '添加悬浮球配置',
area: ['1000px', '600px'],
shade: 0.4,
shadeClose: true,
// offset: 'c',
content: '{:url("/admin/float_ball_add")}'
});
});
// 表格工具条点击事件
table.on('tool(tableList)', function (obj) {
var data = obj.data;
var layEvent = obj.event;
if (layEvent === 'edit') {
layer.open({
type: 2,
title: '编辑悬浮球配置',
area: ['1000px', '600px'],
shade: 0.4,
shadeClose: true,
// offset: 'r',
content: '{:url("/admin/float_ball_edit")}?id=' + data.id
});
} else if (layEvent === 'del') {
layer.confirm('确定要删除吗?', function (i) {
layer.close(i);
layer.load(2);
$.post('{:url("/admin/float_ball_del")}', {id: data.id}, function (res) {
layer.closeAll('loading');
if (res.status) {
layer.msg(res.msg, {icon: 1});
table.reload('tableList');
} else {
layer.msg(res.msg, {icon: 2});
}
}, 'json');
});
} else if (layEvent === 'enable') {
layer.load(2);
$.post('{:url("/admin/float_ball_status")}', {id: data.id, status: 1}, function (res) {
layer.closeAll('loading');
if (res.status) {
layer.msg(res.msg, {icon: 1});
table.reload('tableList');
} else {
layer.msg(res.msg, {icon: 2});
}
}, 'json');
} else if (layEvent === 'disable') {
layer.load(2);
$.post('{:url("/admin/float_ball_status")}', {id: data.id, status: 0}, function (res) {
layer.closeAll('loading');
if (res.status) {
layer.msg(res.msg, {icon: 1});
table.reload('tableList');
} else {
layer.msg(res.msg, {icon: 2});
}
}, 'json');
}
});
});
</script>

View File

@ -12,6 +12,7 @@ use app\common\model\GoodsList;
use app\common\model\OrderList;
use app\common\model\User;
use app\common\model\Yushou;
use app\common\model\FloatBallConfig;
use think\facade\Db;
use \think\Request;
use app\common\model\Order;
@ -281,4 +282,32 @@ class Index extends Base
return $this->renderSuccess('请求成功', $data);
}
/**
* 获取启用的悬浮球配置
* @return \think\response\Json
*/
public function getFloatBall()
{
// 查询状态为启用的悬浮球配置
$floatBalls = FloatBallConfig::where('status', 1)->select();
// 处理图片路径
foreach ($floatBalls as &$item) {
if (!empty($item['image'])) {
$item['image'] = imageUrl($item['image']);
}
if (!empty($item['image_details'])) {
$item['image_details'] = imageUrl($item['image_details']);
}
if (!empty($item['image_bj'])) {
$item['image_bj'] = imageUrl($item['image_bj']);
}
unset($item['status']);
unset($item['create_time']);
unset($item['update_time']);
}
return $this->renderSuccess('获取悬浮球配置成功', $floatBalls);
}
}

View File

@ -207,6 +207,11 @@ Route::any('getRankList', 'Index/getRankList');
Route::any('order_list', 'Order/getOrderList');
Route::any('order_detail', 'Order/getOrderDetail');
#============================
#FloatBall.php悬浮球
#============================
Route::any('getFloatBall', 'Index/getFloatBall');
// // getUserAccount
// Route::any('getUserAccount', 'User/getUserAccount');
// Route::any('createUser', 'User/createUser');

View File

@ -0,0 +1,34 @@
<?php
namespace app\common\model;
use think\Model;
class FloatBallConfig extends Model
{
// 设置当前模型对应的完整数据表名称
protected $table = 'float_ball_config';
// 设置自动时间戳
protected $autoWriteTimestamp = true;
// 状态获取器
public function getStatusTextAttr($value, $data)
{
$status = [0 => '关闭', 1 => '开启'];
return isset($status[$data['status']]) ? $status[$data['status']] : '未知';
}
// 类型获取器
public function getTypeTextAttr($value, $data)
{
$types = [1 => '展示图片', 2 => '跳转页面'];
return isset($types[$data['type']]) ? $types[$data['type']] : '未知';
}
// 特效获取器
public function getEffectTextAttr($value, $data)
{
$effects = [0 => '无', 1 => '特效1'];
return isset($effects[$data['effect']]) ? $effects[$data['effect']] : '未知';
}
}

View File

@ -188,6 +188,10 @@ return [
'url' => '/admin/advert',
'name' => 'banner图片',
],
[
'url' => '/admin/float_ball',
'name' => '悬浮球管理',
],
[
'url' => '/admin/welfare_house',
'name' => '福利屋管理',