移除插件

This commit is contained in:
Anyon 2020-10-24 10:44:25 +08:00
parent eee2c5069a
commit a0fdcf2841
32 changed files with 4731 additions and 5668 deletions

View File

@ -1,199 +0,0 @@
<?php
namespace app\data\controller\app;
use app\wechat\service\WechatService;
use think\admin\Controller;
/**
* 抽奖活动管理
* Class Luckdraw
* @package app\data\controller\wap
*/
class Luckdraw extends Controller
{
/**
* 当前活动
* @var array
*/
protected $vo;
/**
* 活动编号
* @var string
*/
protected $code;
/**
* 当前会员数据
* @var array
*/
protected $member;
/**
* 当前中奖记录
* @var array
*/
protected $record;
/**
* 活动规则
* @var string
*/
protected $rules;
/**
* 控制器初始化
* @throws \WeChat\Exceptions\InvalidResponseException
* @throws \WeChat\Exceptions\LocalCacheException
* @throws \think\Exception
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
protected function initialize()
{
$this->code = $this->request->param('code');
if (empty($this->code)) $this->error('活动编号不能为空!');
// 微信网页授权
$this->jsoptin = json_encode(WechatService::instance()->getWebJssdkSign(), 256);
$this->openid = WechatService::instance()->getWebOauthInfo($this->request->url(true), 0, true)['openid'];
// 活动数据初始化
$map = ['code' => $this->code, 'deleted' => 0];
$this->vo = $this->app->db->name('ActivityLuckdrawConfig')->where($map)->find();
if (empty($this->vo)) $this->error('活动不存在,请通过邀请二维码进入!');
// 活动会员信息
$map = ['openid' => $this->openid];
$this->member = $this->app->db->name('ActivityLuckdrawMember')->where($map)->find();
// 会员中奖数据
$map = ['mid' => $this->member['id'], 'code' => $this->vo['code']];
$this->record = $this->app->db->name('ActivityLuckdrawRecord')->where($map)->find();
// 抽奖活动规则
$this->rules = explode("\n", $this->vo['content']);
}
/**
* 进入活动列表
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function index()
{
$map = [['prize_code', '<>', ''], ['code', '=', $this->vo['code']]];
$this->records = $this->app->db->name('ActivityLuckdrawRecord')->where($map)->order('id desc')->select()->toArray();
foreach ($this->records as &$vo) $vo['username'] = mb_substr($vo['username'], 0, 1) . ' * * ';
$this->fetch();
}
/**
* 用户信息录入
* @throws \think\Exception
* @throws \think\exception\PDOException
*/
public function info()
{
$data = $this->_vali([
'openid.value' => $this->openid,
'username.require' => '请输入您的姓名!',
'phone.require' => '请输入您的手机!',
'phone.mobile' => '请输入正确的手机号!',
]);
if (data_save('ActivityLuckdrawMember', $data, 'openid')) {
$this->success('信息录入成功,可以进行抽奖了!');
}
$this->error('信息录入失败,请稍候再试!');
}
/**
* 进行抽奖
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function prize()
{
if ($this->record) {
$this->error('已经参与抽奖,不能再抽奖了!');
}
/* 统计已经发出的奖品 */
$map = ['code' => $this->code];
[$check, $useds, $rateNumber, $rateRand] = [[], [], 0, rand(1, 1000000) / 10000];
$query = $this->app->db->name('ActivityLuckdrawRecord')->where($map)->group('prize_code,prize_level');
$query->field('prize_code,prize_level,count(1) prize_used')->select()->map(function ($item) use (&$useds) {
$useds["{$item['prize_code']}_{$item['prize_level']}"] = $item['prize_used'];
});
/* 统计活动的奖品数据 */
$query = $this->app->db->name('ActivityLuckdrawConfigRecord')->field('prize_num,prize_rate,prize_level,prize_code');
/* 计算抽奖的中奖数据 */
foreach ($query->where($map)->select()->toArray() as $key => $item) {
$item['prize_used'] = $useds["{$item['prize_code']}_{$item['prize_level']}"] ?? 0;
if (empty($item['prize_num']) || $item['prize_used'] >= $item['prize_num']) {
continue;
} elseif ($rateRand <= ($rateNumber += $item['prize_rate'])) {
$check = $item;
break;
}
}
/* 组装活动中奖记录 */
$data = ['code' => $this->code];
$data['mid'] = $this->member['id'];
$data['phone'] = $this->member['phone'];
$data['username'] = $this->member['username'];
if (empty($check)) {
$data['prize_code'] = '';
$data['prize_level'] = '未中奖';
if ($this->app->db->name('ActivityLuckdrawRecord')->insert($data) !== false) {
$this->success('抱歉没有抽到奖品哦!');
}
} else {
$map = ['code' => $check['prize_code'], 'deleted' => 0, 'status' => 1];
$prize = $this->app->db->name('ActivityLuckdrawPrize')->where($map)->find();
if (empty($prize)) {
$this->error('奖品已下架或被禁用!');
} else {
$data['prize_code'] = $prize['code'];
$data['prize_name'] = $prize['name'];
$data['prize_cover'] = $prize['cover'];
$data['prize_remark'] = $prize['remark'];
$data['prize_express'] = $prize['express'];
$data['prize_level'] = $check['prize_level'];
if ($this->app->db->name('ActivityLuckdrawRecord')->insert($data) !== false) {
$this->success('奖品抽取成功!', $data);
}
}
}
$this->error('抽奖失败,请稍候再试!');
}
/**
* 奖品记录核销
* @throws \think\db\exception\DbException
*/
public function used()
{
$map = $this->_vali(['uncode.require' => '奖品核销码不能为空!']);
if ($this->vo['uncode'] !== $map['uncode']) $this->error('核销码错误,请重新输入!');
if ($this->vo['uncode_status'] > 0) $this->error('该奖品已经核销,请勿重复核销!');
$data = ['uncode_code' => $map['uncode'], 'uncode_status' => 1, 'uncode_datatime' => date('Y-m-d H:i:s')];
$result = $this->app->db->name('ActivityLuckdrawRecord')->where(['id' => $this->record['id']])->update($data);
$result !== false ? $this->success('奖品核销成功!') : $this->error('奖品核销失败,请稍候再试!');
}
/**
* 提交收货地址
* @throws \think\db\exception\DbException
*/
public function express()
{
$data = $this->_vali([
'express_city.require#city' => '收货城市不能为空!',
'express_area.require#area' => '收货区域不能为空!',
'express_address.require#address' => '详细地址不能为空!',
'express_province.require#province' => '收货省份不能为空!',
]);
$result = $this->app->db->name('ActivityLuckdrawRecord')->where(['id' => $this->record['id']])->update($data);
$result !== false ? $this->success('提交收货地址成功!') : $this->error('提交收货地址失败,请稍候再试!');
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -1,153 +0,0 @@
{extend name="../../admin/view/main"}
{block name="content"}
<table class="layui-hide">
<tbody id='add-item-tpl'>
<tr>
<td class="padding-0">
<select name='prize_code[]' class="layui-select full-width border-0" lay-ignore>
{foreach $prizes as $prize}
<option value="{$prize.code}">{$prize.code} {$prize.name}</option>
{/foreach}
</select>
</td>
<td class="nowrap padding-0">
<label class="label-required-null">
<input name="prize_level[]" placeholder="请输入奖项" required value="特等奖" class="layui-input border-0 text-center">
</label>
</td>
<td class="nowrap padding-0">
<label class="label-required-null">
<input name="prize_num[]" data-blur-number="0" value="1" class="layui-input border-0 text-center">
</label>
</td>
<td class="nowrap padding-0">
<label class="label-required-null">
<input name="prize_rate[]" data-blur-number="4" value="0.0001" class="layui-input border-0 text-center inline-block">
<span class="absolute font-s14" style='right:10px;width:39px;text-align:center;height:39px;line-height:39px;display:inline-block'>%</span>
</label>
</td>
<td class="nowrap padding-0 text-center">
<a onclick="moveUp(this)" class="layui-btn layui-btn-xs layui-icon layui-icon-up"></a>
<a onclick="moveDn(this)" class="layui-btn layui-btn-xs layui-icon layui-icon-down"></a>
<a onclick="moveRm(this)" class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-close"></a>
</td>
</tr>
</tbody>
</table>
<form class="layui-form layui-card" action="{:request()->url()}" data-auto="true" method="post" autocomplete="off">
<div class="layui-card-body padding-40 padding-bottom-20">
<div class="layui-form-item">
<span class="color-green font-w7 label-required-prev">活动图片</span>
<label class="relative block">
<input name="cover" value='{$vo.cover|default=""}' class="layui-input">
<a data-file data-field="cover" data-type="png,jpg,gif" class="layui-icon layui-icon-upload input-right-icon"></a>
<script>$('[name=cover]').uploadOneImage()</script>
</label>
</div>
<label class="layui-form-item relative block">
<span class="color-green font-w7 label-required-prev">活动名称</span>
<input name="name" value='{$vo.name|default=""}' autofocus required placeholder="请输入活动名称" class="layui-input">
</label>
<label class="layui-form-item relative block">
<span class="color-green font-w7 label-required-prev">奖品核销码</span>
<input name="uncode" value='{$vo.uncode|default=""}' autofocus required placeholder="请输入奖品核销码" class="layui-input">
</label>
<div class="layui-form-item">
<span class="color-green font-w7 label-required-prev">活动奖品规则</span>
<table class="layui-table">
<thead>
<tr>
<th class="nowrap">奖品名称</th>
<th class="nowrap text-center" style="width:200px">奖项等级</th>
<th class="nowrap text-center" style="width:120px">奖品数量</th>
<th class="nowrap text-center" style="width:100px">中奖率(总概率100%)</th>
<th style="width:100px"></th>
</tr>
</thead>
<tbody class="layui-bg-gray">
{foreach $selectPrizes as $pz}
<tr>
<td class="nowrap padding-0">
<select name='prize_code[]' class="layui-select full-width border-0" lay-ignore>
{foreach $prizes as $prize}
{if $pz.prize_code eq $prize.code}
<option selected value="{$prize.code}">{$prize.code} {$prize.name}</option>
{else}
<option value="{$prize.code}">{$prize.code} {$prize.name}</option>
{/if}{/foreach}
</select>
</td>
<td class="nowrap padding-0 relative">
<label class="label-required-null">
<input name="prize_level[]" placeholder="请输入奖项" required value="{$pz.prize_level|default=''}" class="layui-input text-center border-0">
</label>
</td>
<td class="nowrap padding-0 text-center">
<label class="label-required-null">
<input name="prize_num[]" data-blur-number="0" value="{$pz.prize_num|default='1'}" class="layui-input border-0 text-center">
</label>
</td>
<td class="nowrap padding-0 text-center">
<label class="label-required-null">
<input name="prize_rate[]" data-blur-number="4" value="{$pz.prize_rate|default='0.0001'}" class="layui-input border-0 inline-block text-center">
<span class="absolute font-s14" style='right:10px;width:39px;text-align:center;height:39px;line-height:39px;display:inline-block'>%</span>
</label>
</td>
<td class="nowrap padding-0 text-center">
<a onclick="moveUp(this)" class="layui-btn layui-btn-xs layui-icon layui-icon-up"></a>
<a onclick="moveDn(this)" class="layui-btn layui-btn-xs layui-icon layui-icon-down"></a>
<a onclick="moveRm(this)" class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-close"></a>
</td>
</tr>
{/foreach}
<tr>
<td colspan="5"><a onclick="$(this).parents('tr').before($('#add-item-tpl').html()),form.render();" class="layui-btn layui-btn-xs">添加奖项</a></td>
</tr>
</tbody>
</table>
</div>
<label class="layui-form-item relative block">
<span class="color-green font-w7 label-required-prev">活动规则</span>
<textarea class="layui-textarea" name="content" placeholder="请输入活动规则">{$vo.content|default=''}</textarea>
</label>
</div>
<div class="hr-line-dashed"></div>
<!--{notempty name='vo.code'}-->
<input type='hidden' value='{$vo.code}' name='code'>
<!--{/notempty}-->
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消编辑吗?" data-history-back>取消编辑</button>
</div>
<script>
window.form.render();
function moveRm(that) {
$.msg.confirm('确定要移除这个选项吗?', function (index) {
$(that).parents('tr').remove(), $.msg.close(index);
})
}
function moveUp(that) {
this.$item = $(that).parents("tr");
if (this.$item.index() > 0) this.$item.prev().before(this.$item);
}
function moveDn(that) {
this.$item = $(that).parents("tr");
if (this.$item.index() < this.$item.siblings('tr').size()) {
this.$item.next().after(this.$item);
}
}
</script>
</form>
{/block}

View File

@ -1,72 +0,0 @@
{extend name="../../admin/view/main"}
{block name="button"}
<!--{if auth("add")}-->
<button data-open='{:url("add")}' class='layui-btn layui-btn-sm layui-btn-primary'>添加活动</button>
<!--{/if}-->
<!--{if auth("del")}-->
<button data-action='{:url("del")}' data-rule="id#{key}" data-confirm="确定要删除这些活动吗?" class='layui-btn layui-btn-sm layui-btn-primary'>删除活动</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="think-box-shadow table-block">
{include file='luckdraw_config/index_search'}
<table class="layui-table" lay-skin="line">
{notempty name='list'}
<thead>
<tr>
<th class='list-table-check-td think-checkbox'>
<label><input data-auto-none="" data-check-target='.list-check-box' type='checkbox'></label>
</th>
<th class='text-left nowrap'>活动编号</th>
<th class='text-left nowrap'>活动名称</th>
<th class='text-left nowrap'>创建时间</th>
<th class='text-left nowrap'>活动状态</th>
<th class='text-left nowrap'></th>
</tr>
</thead>
{/notempty}
<tbody>
{foreach $list as $key=>$vo}
<tr>
<td class='list-table-check-td think-checkbox'>
<label><input class="list-check-box" value='{$vo.id}' type='checkbox'></label>
</td>
<td class='text-left nowrap'>
{$vo.code|default=''}
<span data-tips-text="复制活动链接" data-copy="{:url('@data/app.luckdraw/index/code/'.$vo.code,[],true,true)}" class="margin-left-5 pointer">
<i class="layui-icon layui-icon-link font-s12"></i>
</span>
</td>
<td class='text-left nowrap'>
<i class="fa fa-qrcode fa-lg margin-right-5 pointer" data-load="{:url('index')}?action=qrc&code={$vo.code}" data-time="false"></i>
{$vo.name|default=''}
</td>
<td class='text-left nowrap'>
{$vo.create_at|format_datetime}
</td>
<td class='text-left nowrap'>
{eq name='vo.status' value='0'}<span class="layui-badge">已停止</span>{else}<span class="layui-badge layui-bg-green">进行中</span>{/eq}
</td>
<td class='text-left nowrap'>
<!--{if auth("edit")}-->
<a class="layui-btn layui-btn-xs" data-title="编辑活动" data-open='{:url("edit")}?code={$vo.code}'> </a>
<!--{/if}-->
<!--{if $vo.status eq 1 and auth("state")}-->
<a class="layui-btn layui-btn-xs layui-btn-warm" data-action="{:url('state')}" data-value="id#{$vo.id};status#0"> </a>
<!--{/if}-->
<!--{if $vo.status eq 0 and auth("state")}-->
<a class="layui-btn layui-btn-xs layui-btn-warm" data-action="{:url('state')}" data-value="id#{$vo.id};status#1"> </a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-xs layui-btn-danger" data-confirm="确定要删除该活动吗?" data-action="{:url('remove')}" data-value="id#{$vo.id}"> </a>
<!--{/if}-->
</td>
</tr>
{/foreach}
</tbody>
</table>
{empty name='list'}<span class="notdata">没有记录哦</span>{else}{$pagehtml|raw|default=''}{/empty}
</div>
{/block}

View File

@ -1,40 +0,0 @@
<fieldset>
<legend>条件搜索</legend>
<form class="layui-form layui-form-pane form-search" action="{:request()->url()}" onsubmit="return false" method="get" autocomplete="off">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">活动编号</label>
<label class="layui-input-inline">
<input name="code" value="{:input('code','')}" placeholder="请输入活动编号" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">活动名称</label>
<label class="layui-input-inline">
<input name="name" value="{:input('name','')}" placeholder="请输入活动名称" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">使用状态</label>
<label class="layui-input-inline">
<select class="layui-select" name="status">
{foreach [''=>'-- 全部 --','0'=>'已停止的活动','1'=>'进行中的活动'] as $k=>$v}
{if input('status') eq $k.''}
<option selected value="{$k}">{$v}</option>
{else}
<option value="{$k}">{$v}</option>
{/if}{/foreach}
</select>
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-input-inline">
<input data-date-range name="create_at" value="{:input('create_at','')}" placeholder="请选择创建时间" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
</div>
</form>
<script>form.render()</script>
</fieldset>

View File

@ -1,47 +0,0 @@
<form class="layui-form layui-card" action="{:request()->url()}" data-auto="true" method="post" autocomplete="off">
<div class="layui-card-body padding-left-40">
<label class="layui-form-item relative block">
<span class="color-green font-w7 label-required-prev">奖品名称</span>
<input name="name" autofocus value='{$vo.name|default=""}' required placeholder="请输入奖品名称" class="layui-input">
</label>
<div class="layui-form-item">
<span class="color-green font-w7 label-required-prev">是否需要发货</span>
{php} $vo['express'] = $vo['express'] ?? 0; {/php}
<div class="layui-input">
{foreach ['无需发货','需要发货'] as $k=>$v}
{if isset($vo.express) and $k eq $vo.express}
<label class="think-radio"><input checked name="express" type="radio" value="{$k}" lay-ignore>{$v}</label>
{else}
<label class="think-radio"><input name="express" type="radio" value="{$k}" lay-ignore>{$v}</label>
{/if}{/foreach}
</div>
</div>
<div class="layui-form-item">
<span class="color-green font-w7 label-required-prev">奖品图片</span>
<label class="relative block label-required-null">
<input name="cover" value='{$vo.cover|default=""}' required placeholder="请上传奖品图片链接 " class="layui-input">
<a data-file data-type="png,jpg,gif" data-field="cover" class="input-right-icon"><i class="layui-icon layui-icon-upload"></i></a>
<script>$('[name=cover]').uploadOneImage()</script>
</label>
</div>
<label class="layui-form-item relative block">
<span class="color-green font-w7">奖品描述</span>
<textarea name="remark" class="layui-textarea">{$vo.remark|default=""}</textarea>
</label>
<div class="hr-line-dashed"></div>
<!--{notempty name='vo.code'}-->
<input type='hidden' value='{$vo.code}' name='code'>
<!--{/notempty}-->
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消编辑吗?" data-close>取消编辑</button>
</div>
</div>
</form>

View File

@ -1,64 +0,0 @@
{extend name="../../admin/view/main"}
{block name="button"}
<!--{if auth("add")}-->
<button data-modal='{:url("add")}' data-title="添加奖品" class='layui-btn layui-btn-sm layui-btn-primary'>添加奖品</button>
<!--{/if}-->
<!--{if auth("del")}-->
<button data-action='{:url("del")}' data-rule="id#{key}" data-confirm="确定要删除这些奖品吗?" class='layui-btn layui-btn-sm layui-btn-primary'>删除奖品</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="think-box-shadow table-block">
{include file='luckdraw_prize/index_search'}
<table class="layui-table" lay-skin="line">
{notempty name='list'}
<thead>
<tr>
<th class='list-table-check-td think-checkbox'>
<label><input data-auto-none data-check-target='.list-check-box' type='checkbox'></label>
</th>
<th class='text-left nowrap'>奖品编号</th>
<th class='text-left nowrap'>奖品名称</th>
<th class='text-left nowrap'>创建时间</th>
<th class='text-left nowrap'>账号状态</th>
<th class='text-left nowrap'></th>
</tr>
</thead>
{/notempty}
<tbody>
{foreach $list as $key=>$vo}
<tr>
<td class='list-table-check-td think-checkbox'>
<label><input class="list-check-box" value='{$vo.id}' type='checkbox'></label>
</td>
<td class='text-left nowrap'>{$vo.code|default=''}</td>
<td class='text-left nowrap'>{$vo.name|default=''}</td>
<td class='text-left nowrap'>{$vo.create_at|format_datetime}</td>
<td class='text-left nowrap'>{eq name='vo.status' value='0'}<span class="layui-badge">已禁用</span>{else}<span class="layui-badge layui-bg-green">使用中</span>{/eq}</td>
<td class='text-left nowrap'>
<!--{if auth("edit")}-->
<a class="layui-btn layui-btn-xs" data-title="编辑奖品" data-modal='{:url("edit")}?code={$vo.code}'> </a>
<!--{/if}-->
<!--{if auth('state') and $vo.status eq 1}-->
<a class="layui-btn layui-btn-xs layui-btn-warm" data-action="{:url('state')}" data-value="id#{$vo.id};status#0"> </a>
<!--{/if}-->
<!--{if auth("state") and $vo.status eq 0}-->
<a class="layui-btn layui-btn-xs layui-btn-warm" data-action="{:url('state')}" data-value="id#{$vo.id};status#1"> </a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-xs layui-btn-danger" data-confirm="确定要删除该奖品吗?" data-action="{:url('del')}" data-value="id#{$vo.id}"> </a>
<!--{/if}-->
</td>
</tr>
{/foreach}
</tbody>
</table>
{empty name='list'}<span class="notdata">没有记录哦</span>{else}{$pagehtml|raw|default=''}{/empty}
</div>
{/block}

View File

@ -1,40 +0,0 @@
<fieldset>
<legend>条件搜索</legend>
<form class="layui-form layui-form-pane form-search" action="{:request()->url()}" onsubmit="return false" method="get" autocomplete="off">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">奖品编号</label>
<label class="layui-input-inline">
<input name="code" value="{:input('code','')}" placeholder="请输入奖品编号" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">奖品名称</label>
<label class="layui-input-inline">
<input name="name" value="{:input('name','')}" placeholder="请输入奖品名称" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">使用状态</label>
<div class="layui-input-inline">
<select class="layui-select" name="status">
{foreach [''=>'-- 全部 --','0'=>'已禁用的奖品','1'=>'使用中的奖品'] as $k=>$v}
{if input('status') eq $k.''}
<option selected value="{$k}">{$v}</option>
{else}
<option value="{$k}">{$v}</option>
{/if}{/foreach}
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-input-inline">
<input data-date-range name="create_at" value="{:input('create_at','')}" placeholder="请选择创建时间" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
</div>
</form>
<script>window.form.render()</script>
</fieldset>

View File

@ -1,52 +0,0 @@
{extend name="../../admin/view/main"}
{block name="content"}
<div class="think-box-shadow table-block">
{include file='luckdraw_record/index_search'}
<table class="layui-table" lay-skin="line">
{notempty name='list'}
<thead>
<tr>
<th class='list-table-check-td think-checkbox'>
<input data-auto-none="" data-check-target='.list-check-box' type='checkbox'>
</th>
<th class='text-left nowrap'>中奖信息</th>
<th class='text-left nowrap'>活动信息</th>
<th class='text-left nowrap'>奖品信息</th>
<th class='text-left nowrap'>核销信息</th>
</tr>
</thead>
{/notempty}
<tbody>
{foreach $list as $key=>$vo}
<tr>
<td class='list-table-check-td think-checkbox'>
<input class="list-check-box" value='{$vo.id}' type='checkbox'>
</td>
<td class='text-left nowrap'>
姓名:{$vo.username|default=''}<br>
手机:{$vo.phone|default=''}
</td>
<td class='text-left nowrap'>
活动编号:{$vo.info.code|default=''}<br>
活动名称:{$vo.info.name|default=''}
</td>
<td class='text-left nowrap'>
{if $vo.prize_code neq ''}
<div>奖品编号:{$vo.prize_code|default=''}{$vo.prize_express ? "<span class='color-blue margin-left-5'>需要发货</span>":"<span class='color-desc margin-left-5'>无需发货</span>"}</div>
<div>奖品名称:{$vo.prize_name|default=''}<span class='color-blue margin-left-5'>{$vo.prize_level|default=''}</span></div>
{else}<span class="color-desc">未中奖</span>{/if}
</td>
<td class='text-left nowrap'>
中奖时间:{$vo.create_at|format_datetime}<br>
核销状态:{if $vo.prize_code neq ''}{if empty($vo.prize_express)}{$vo.uncode_datetime|default='未核销'}
{else}{$vo.express_province|default=''}{$vo.express_city|default=''}{$vo.express_area|default=''}{$vo.express_address|default=''}{/if}
{else}<span class="color-desc">未中奖</span>{/if}
</td>
</tr>
{/foreach}
</tbody>
</table>
{empty name='list'}<span class="notdata">没有记录哦</span>{else}{$pagehtml|raw|default=''}{/empty}
</div>
{/block}

View File

@ -1,105 +0,0 @@
<fieldset>
<legend>条件搜索</legend>
<form class="layui-form layui-form-pane form-search" action="{:request()->url()}" onsubmit="return false" method="get" autocomplete="off">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">中奖姓名</label>
<label class="layui-input-inline">
<input name="username" value="{:input('username','')}" placeholder="请输入中奖姓名" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">中奖手机</label>
<label class="layui-input-inline">
<input name="phone" value="{:input('phone','')}" placeholder="请输入中奖手机" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">中奖级别</label>
<label class="layui-input-inline">
<input name="prize_level" value="{:input('prize_level','')}" placeholder="请输入中奖级别" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">活动名称</label>
<label class="layui-input-inline">
<select class="layui-select" name="code" lay-search>
<option value="">- 全部记录 -</option>
{foreach $prizes as $k => $v}
{if input('code','') eq $v.code}
<option selected value="{$v.code}">{$v.name}</option>
{else}
<option value="{$v.code}">{$v.name}</option>
{/if}{/foreach}
</select>
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">核销状态</label>
<label class="layui-input-inline">
<select class="layui-select" name="uncode_status">
{foreach [''=>'-- 全部 --','0'=>'未核销的奖品','1'=>'已核销的奖品'] as $k=>$v}
{if input('uncode_status') eq $k.''}
<option selected value="{$k}">{$v}</option>
{else}
<option value="{$k}">{$v}</option>
{/if}{/foreach}
</select>
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">中奖时间</label>
<label class="layui-input-inline">
<input data-date-range name="create_at" value="{:input('create_at','')}" placeholder="请选择中奖时间" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">核销时间</label>
<label class="layui-input-inline">
<input data-date-range name="uncode_datetime" value="{:input('uncode_datetime','')}" placeholder="请选择核销时间" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<button type="submit" class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button type="button" data-form-export="{:url('index')}" class="layui-btn layui-btn-primary">
<i class="layui-icon layui-icon-export"></i>
</button>
</div>
</form>
</fieldset>
<script>
window.form.render();
require(['excel'], function (excel) {
excel.bind(function (data) {
data.forEach(function (item, index) {
data[index] = [
item.username,
item.phone,
item.info.code || '',
item.info.name || '',
item.prize_code || '',
item.prize_name || '',
item.prize_level || '',
item.create_at,
item.prize_express ? '需要发货' : '不需要发货',
item.prize_express ?
(item.express_province || '') + (item.express_city || '') + (item.express_area || '') + (item.express_address || '') :
(item.uncode_status ? '已核销' : '未核销'),
];
});
data.unshift(['中奖姓名', '中奖手机', '活动编号', '活动名称', '奖品编号', '奖品名称', '奖品等级', '中奖时间', '是否需要发货', '收货地址']);
return data;
}, '中奖记录数据');
});
</script>

View File

@ -1,534 +0,0 @@
@charset "UTF-8";
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite,
code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li,
fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure,
figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video, input, textarea, button,
::after, ::before {
margin: 0;
padding: 0;
border: 0;
outline: none;
font-style: normal;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-webkit-tap-highlight-color: transparent;
}
html, body {
width: 100%;
font-family: "PingFang SC", Helvetica, Arial, sans-serif;
-webkit-user-select: none; /*文本不能被选择*/
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-text-size-adjust: 100% !important; /*阻止文字被放大*/
-moz-text-size-adjust: 100% !important;
-ms-text-size-adjust: 100% !important;
text-size-adjust: 100% !important;
-webkit-font-smoothing: antialiased; /*抗锯齿*/
}
body {
background-color: #fff;
overflow-x: hidden;
overflow-y: auto;
font-size: initial;
height: 100%;
}
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
display: block;
}
a, button, em, del, strong, var, label, cite, small, time, mark, code {
display: inline-block;
color: inherit;
}
a, a:visited, a:active, a:hover {
text-decoration: none;
outline: 0;
}
img {
display: block;
width: 100%;
height: auto;
}
ol, ul, li {
list-style: none;
}
input, button, textarea {
background-color: rgba(0, 0, 0, 0);
}
input, textarea {
min-width: .1rem;
border-radius: 0;
-webkit-user-select: auto;
-moz-user-select: auto;
-ms-user-select: auto;
user-select: auto;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
textarea {
resize: none;
display: block;
}
label, textarea, .word-wrap {
word-wrap: break-word;
word-break: break-all;
}
input::-webkit-input-placeholder {
color: #bbb;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after, q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
.clearfix:after {
content: ' ';
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
::-webkit-scrollbar {
display: none;
}
/* reset end */
/* 首页 */
html {
height: 100%;
}
body {
min-height: 100%;
background: url('../images/bg_rp.jpg') repeat-y;
background-size: 100%;
position: relative;
}
.page {
position: relative;
min-height: 100%;
}
.index-page::before {
content: ' ';
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 4.36rem;
background: url('../images/bottom.png') no-repeat;
background-size: cover;
z-index: 2;
}
.index-page .page-body {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 5;
padding-top: 32%;
}
.index-page .rule {
position: absolute;
top: 2.3%;
right: 3.3%;
width: 1.46rem;
height: auto;
z-index: 2;
}
.index-page .btn {
width: 4.58rem;
margin: 0 auto;
-webkit-animation: ripple 3s infinite;
animation: ripple 3s infinite;
}
@-webkit-keyframes ripple {
0% {
-webkit-transform: scale(1);
transform: scale(1)
}
50% {
-webkit-transform: scale(1.1);
transform: scale(1.1)
}
100% {
-webkit-transform: scale(1);
transform: scale(1)
}
}
@keyframes ripple {
0% {
-webkit-transform: scale(1);
transform: scale(1)
}
50% {
-webkit-transform: scale(1.1);
transform: scale(1.1)
}
100% {
-webkit-transform: scale(1);
transform: scale(1)
}
}
.index-page .detail {
position: relative;
z-index: 3;
margin-top: 11%;
}
.index-page .title {
width: 1.16rem;
margin: 0 auto .18rem;
}
.index-page .ls-box {
width: 5.4rem;
height: 3.3rem;
margin: 0 auto;
background: #fff0e8;
border: 1px solid #e60b11;
border-radius: 2px;
position: relative;
-webkit-box-shadow: 0 0 18px 2px rgba(122, 0, 9, .7);
box-shadow: 0 0 18px 2px rgba(122, 0, 9, .7);
}
.index-page .icon1 {
position: absolute;
top: 0;
left: 0;
width: .62rem;
z-index: 2;
}
.index-page .icon2 {
left: initial;
right: 0;
-webkit-transform: rotate(90deg);
transform: rotate(90deg);
}
.index-page .ls-box ul {
padding: 0 .26rem;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.index-page .ls-box ul li {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
border-bottom: 1px dashed #acacac;
height: .8rem;
font-size: 0;
}
.index-page .ls-box ul span {
font-size: .24rem;
color: #530006;
vertical-align: middle;
}
.index-page .ls-box ul span:first-child {
margin-right: .12rem;
max-width: 4.2em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
display: inline-block;
}
.index-page .ls-box .ls-title {
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
}
.index-page .ls-box .ls-text {
font-size: .24rem;
color: #dd0d1d;
padding-left: .1rem;
}
/* 填写信息 */
.mask,
.luck-mask,
.rule-mask,
.info-dialog {
-webkit-transition: all .3s;
transition: all .3s;
}
.mask,
.luck-mask,
.rule-mask {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, .7);
z-index: -1;
opacity: 0;
visibility: hidden;
}
.info-dialog {
position: fixed;
top: 27%;
left: 50%;
width: 6rem;
height: 5.2rem;
margin-left: -3rem;
background: url('../images/info_bg.jpg') no-repeat;
background-size: 100% 100%;
z-index: -1;
border-radius: 2px;
overflow: hidden;
opacity: 0;
visibility: hidden;
-webkit-transform: scale(.8);
transform: scale(.8);
}
.info-dialog h2 {
font-size: .36rem;
color: #dd0d1d;
text-align: center;
line-height: 1;
padding: .4rem 0 .56rem;
}
.info-dialog .form {
padding: 0 .5rem;
}
.info-dialog label {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
margin-bottom: .4rem;
}
.info-dialog label span {
font-size: .26rem;
color: #000;
}
.info-dialog input {
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
border: 1px solid #333;
height: .6rem;
border-radius: .6rem;
line-height: .4rem;
font-size: .28rem;
color: #333;
padding-left: .28rem;
}
.btns {
font-size: 0;
text-align: center;
margin-top: .5rem;
}
.btns span {
display: inline-block;
vertical-align: middle;
width: 1.8rem;
line-height: .6rem;
border-radius: .6rem;
text-align: center;
font-size: .24rem;
color: #fff;
background: #c8c8c8;
margin: 0 .2rem;
}
.btns span:last-child {
background: #dd0d1d;
}
.show.mask {
opacity: 1;
visibility: visible;
z-index: 20;
}
.show.info-dialog {
opacity: 1;
visibility: visible;
-webkit-transform: scale(1);
transform: scale(1);
z-index: 33;
}
/* 中奖弹窗 */
.luck-dialog {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 38;
text-align: center;
padding-top: 58%;
}
.luck-dialog h1 {
font-size: .64rem;
color: #ffe100;
margin-bottom: .2rem;
}
.luck-dialog h3 {
font-size: .36rem;
color: #ffe100;
margin-bottom: .4rem;
}
.luck-dialog label {
width: 6.5rem;
display: inline-block;
position: relative;
}
.luck-dialog input,
.luck-dialog select {
width: 78%;
height: .8rem;
display: block;
font-size: .26rem;
line-height: .4rem;
background: #fff;
border-radius: .1rem;
margin: 0 auto .4rem;
text-align: left;
padding-left: .3rem;
}
.luck-dialog select {
width: 25.2%;
text-align: center;
margin-bottom: .1rem;
display: inline-block;
}
.luck-dialog .dialog-btn {
width: 4.7rem;
margin: 0 auto;
font-size: .3rem;
line-height: .8rem;
border-radius: .8rem;
color: #dd0d1d;
background: #ffe100;
}
.luck-dialog .btn1 {
color: #dd0d1d;
background: #fff0e8;
}
.show.luck-mask,
.show.rule-mask {
opacity: 1;
visibility: visible;
z-index: 35;
}
.rule-mask {
padding-top: 24%;
}
.rule-dialog {
width: 6rem;
height: 8.8rem;
background: url('../images/rule_bg.jpg') no-repeat;
background-size: 100% 100%;
border-radius: 2px;
overflow: hidden;
margin: 0 auto;
}
.rule-dialog .dialog-title {
font-size: .36rem;
color: #dd0d1d;
text-align: center;
padding: .4rem 0 .3rem;
}
.rule-content {
padding: 0 .3rem;
font-size: .24rem;
color: #333;
}
.close {
position: absolute;
top: 6.8%;
right: 6.8%;
width: .5rem;
z-index: 99;
}
.hide {
display: none !important;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

View File

@ -1,2 +0,0 @@
/*! layer mobile-v2.0 弹层组件移动版 License LGPL http://layer.layui.com/mobile By 贤心 */
;!function(a){"use strict";var b=document,c="querySelectorAll",d="getElementsByClassName",e=function(a){return b[c](a)},f={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:"scale"},g={extend:function(a){var b=JSON.parse(JSON.stringify(f));for(var c in a)b[c]=a[c];return b},timer:{},end:{}};g.touch=function(a,b){a.addEventListener("click",function(a){b.call(this,a)},!1)};var h=0,i=["layui-m-layer"],j=function(a){var b=this;b.config=g.extend(a),b.view()};j.prototype.view=function(){var a=this,c=a.config,f=b.createElement("div");a.id=f.id=i[0]+h,f.setAttribute("class",i[0]+" "+i[0]+(c.type||0)),f.setAttribute("index",h);var g=function(){var a="object"==typeof c.title;return c.title?'<h3 style="'+(a?c.title[1]:"")+'">'+(a?c.title[0]:c.title)+"</h3>":""}(),j=function(){"string"==typeof c.btn&&(c.btn=[c.btn]);var a,b=(c.btn||[]).length;return 0!==b&&c.btn?(a='<span yes type="1">'+c.btn[0]+"</span>",2===b&&(a='<span no type="0">'+c.btn[1]+"</span>"+a),'<div class="layui-m-layerbtn">'+a+"</div>"):""}();if(c.fixed||(c.top=c.hasOwnProperty("top")?c.top:100,c.style=c.style||"",c.style+=" top:"+(b.body.scrollTop+c.top)+"px"),2===c.type&&(c.content='<i></i><i class="layui-m-layerload"></i><i></i><p>'+(c.content||"")+"</p>"),c.skin&&(c.anim="up"),"msg"===c.skin&&(c.shade=!1),f.innerHTML=(c.shade?"<div "+("string"==typeof c.shade?'style="'+c.shade+'"':"")+' class="layui-m-layershade"></div>':"")+'<div class="layui-m-layermain" '+(c.fixed?"":'style="position:static;"')+'><div class="layui-m-layersection"><div class="layui-m-layerchild '+(c.skin?"layui-m-layer-"+c.skin+" ":"")+(c.className?c.className:"")+" "+(c.anim?"layui-m-anim-"+c.anim:"")+'" '+(c.style?'style="'+c.style+'"':"")+">"+g+'<div class="layui-m-layercont">'+c.content+"</div>"+j+"</div></div></div>",!c.type||2===c.type){var k=b[d](i[0]+c.type),l=k.length;l>=1&&layer.close(k[0].getAttribute("index"))}document.body.appendChild(f);var m=a.elem=e("#"+a.id)[0];c.success&&c.success(m),a.index=h++,a.action(c,m)},j.prototype.action=function(a,b){var c=this;a.time&&(g.timer[c.index]=setTimeout(function(){layer.close(c.index)},1e3*a.time));var e=function(){var b=this.getAttribute("type");0==b?(a.no&&a.no(),layer.close(c.index)):a.yes?a.yes(c.index):layer.close(c.index)};if(a.btn)for(var f=b[d]("layui-m-layerbtn")[0].children,h=f.length,i=0;h>i;i++)g.touch(f[i],e);if(a.shade&&a.shadeClose){var j=b[d]("layui-m-layershade")[0];g.touch(j,function(){layer.close(c.index,a.end)})}a.end&&(g.end[c.index]=a.end)},a.layer={v:"2.0",index:h,open:function(a){var b=new j(a||{});return b.index},close:function(a){var c=e("#"+i[0]+a)[0];c&&(c.innerHTML="",b.body.removeChild(c),clearTimeout(g.timer[a]),delete g.timer[a],"function"==typeof g.end[a]&&g.end[a](),delete g.end[a])},closeAll:function(){for(var a=b[d](i[0]),c=0,e=a.length;e>c;c++)layer.close(0|a[0].getAttribute("index"))}},"function"==typeof define?define(function(){return layer}):function(){var a=document.scripts,c=a[a.length-1],d=c.src,e=d.substring(0,d.lastIndexOf("/")+1);c.getAttribute("merge")||document.head.appendChild(function(){var a=b.createElement("link");return a.href=e+"need/layer.css?2.0",a.type="text/css",a.rel="styleSheet",a.id="layermcss",a}())}()}(window);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -226,7 +226,6 @@ return array(
'app\\data\\controller\\api\\auth\\Center' => $baseDir . '/app/data/controller/api/auth/Center.php',
'app\\data\\controller\\api\\auth\\News' => $baseDir . '/app/data/controller/api/auth/News.php',
'app\\data\\controller\\api\\auth\\Order' => $baseDir . '/app/data/controller/api/auth/Order.php',
'app\\data\\controller\\app\\Luckdraw' => $baseDir . '/app/data/controller/app/Luckdraw.php',
'app\\data\\service\\GoodsService' => $baseDir . '/app/data/service/GoodsService.php',
'app\\data\\service\\NewsService' => $baseDir . '/app/data/service/NewsService.php',
'app\\data\\service\\OrderService' => $baseDir . '/app/data/service/OrderService.php',

View File

@ -354,7 +354,6 @@ class ComposerStaticInit33b66ed99ea8fcca84c95dfb0e7ed409
'app\\data\\controller\\api\\auth\\Center' => __DIR__ . '/../..' . '/app/data/controller/api/auth/Center.php',
'app\\data\\controller\\api\\auth\\News' => __DIR__ . '/../..' . '/app/data/controller/api/auth/News.php',
'app\\data\\controller\\api\\auth\\Order' => __DIR__ . '/../..' . '/app/data/controller/api/auth/Order.php',
'app\\data\\controller\\app\\Luckdraw' => __DIR__ . '/../..' . '/app/data/controller/app/Luckdraw.php',
'app\\data\\service\\GoodsService' => __DIR__ . '/../..' . '/app/data/service/GoodsService.php',
'app\\data\\service\\NewsService' => __DIR__ . '/../..' . '/app/data/service/NewsService.php',
'app\\data\\service\\OrderService' => __DIR__ . '/../..' . '/app/data/service/OrderService.php',

2
vendor/services.php vendored
View File

@ -1,5 +1,5 @@
<?php
// This file is automatically generated at:2020-10-23 14:29:29
// This file is automatically generated at:2020-10-24 10:43:30
declare (strict_types = 1);
return array (
0 => 'think\\admin\\Library',