提交
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/*
|
vendor/*
|
||||||
404.html
|
404.html
|
||||||
public/.well-known/*
|
public/.well-known/*
|
||||||
.env
|
|
||||||
public/ueditor/*
|
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('sign_config_status', 'SignConfig/status', 'POST');
|
||||||
Route::rule('get_coupons', 'SignConfig/getCoupons', 'GET');
|
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奖励管理
|
#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\OrderList;
|
||||||
use app\common\model\User;
|
use app\common\model\User;
|
||||||
use app\common\model\Yushou;
|
use app\common\model\Yushou;
|
||||||
|
use app\common\model\FloatBallConfig;
|
||||||
use think\facade\Db;
|
use think\facade\Db;
|
||||||
use \think\Request;
|
use \think\Request;
|
||||||
use app\common\model\Order;
|
use app\common\model\Order;
|
||||||
|
|
@ -281,4 +282,32 @@ class Index extends Base
|
||||||
return $this->renderSuccess('请求成功', $data);
|
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_list', 'Order/getOrderList');
|
||||||
Route::any('order_detail', 'Order/getOrderDetail');
|
Route::any('order_detail', 'Order/getOrderDetail');
|
||||||
|
|
||||||
|
#============================
|
||||||
|
#FloatBall.php悬浮球
|
||||||
|
#============================
|
||||||
|
Route::any('getFloatBall', 'Index/getFloatBall');
|
||||||
|
|
||||||
// // getUserAccount
|
// // getUserAccount
|
||||||
// Route::any('getUserAccount', 'User/getUserAccount');
|
// Route::any('getUserAccount', 'User/getUserAccount');
|
||||||
// Route::any('createUser', 'User/createUser');
|
// 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',
|
'url' => '/admin/advert',
|
||||||
'name' => 'banner图片',
|
'name' => 'banner图片',
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'url' => '/admin/float_ball',
|
||||||
|
'name' => '悬浮球管理',
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'url' => '/admin/welfare_house',
|
'url' => '/admin/welfare_house',
|
||||||
'name' => '福利屋管理',
|
'name' => '福利屋管理',
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user