提交
This commit is contained in:
parent
551eb68906
commit
9c5c47eb77
23
.env
Normal file
23
.env
Normal 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
2
.gitattributes
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
.env merge=ours
|
||||
config/api.php merge=ours
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -4,5 +4,4 @@ runtime/*
|
|||
vendor/*
|
||||
404.html
|
||||
public/.well-known/*
|
||||
.env
|
||||
public/ueditor/*
|
||||
138
app/admin/controller/FloatBall.php
Normal file
138
app/admin/controller/FloatBall.php
Normal 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('删除失败');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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奖励管理
|
||||
#============================
|
||||
|
|
|
|||
249
app/admin/view/float_ball/add.html
Normal file
249
app/admin/view/float_ball/add.html
Normal 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>
|
||||
|
||||
258
app/admin/view/float_ball/edit.html
Normal file
258
app/admin/view/float_ball/edit.html
Normal 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>
|
||||
|
||||
166
app/admin/view/float_ball/index.html
Normal file
166
app/admin/view/float_ball/index.html
Normal 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"></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>
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
34
app/common/model/FloatBallConfig.php
Normal file
34
app/common/model/FloatBallConfig.php
Normal 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']] : '未知';
|
||||
}
|
||||
}
|
||||
|
|
@ -188,6 +188,10 @@ return [
|
|||
'url' => '/admin/advert',
|
||||
'name' => 'banner图片',
|
||||
],
|
||||
[
|
||||
'url' => '/admin/float_ball',
|
||||
'name' => '悬浮球管理',
|
||||
],
|
||||
[
|
||||
'url' => '/admin/welfare_house',
|
||||
'name' => '福利屋管理',
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user