mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-06-24 12:05:39 +08:00
v1.2.6预览版01
This commit is contained in:
parent
bc48169ff9
commit
122b4adfa8
21
CHANGELOG.md
21
CHANGELOG.md
@ -1,3 +1,24 @@
|
|||||||
|
### [v1.2.6](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.6)(2021-02-20)
|
||||||
|
|
||||||
|
### 新增
|
||||||
|
|
||||||
|
- 积分兑换机制
|
||||||
|
- 课程增加原价属性
|
||||||
|
- gitee提交webhooks自动化部署脚本
|
||||||
|
|
||||||
|
### 更新
|
||||||
|
|
||||||
|
- course和chapter数据迁移文件中遗漏了recourse_count字段
|
||||||
|
- app/Caches/TopicCourseList不存在
|
||||||
|
- Model文件属性定义默认值
|
||||||
|
- 隐藏非付费课程的咨询服务
|
||||||
|
- 教学中心教师直播推流按钮无反应
|
||||||
|
- 用户中心部分样式调整
|
||||||
|
- 播放器清晰度标签和实际的清晰度不对应
|
||||||
|
- CNZZ统计代码会显示出站长统计图标
|
||||||
|
- 自动安装后访问站点500错误
|
||||||
|
- 自动更新脚本可更新css和js版本号
|
||||||
|
|
||||||
### [v1.2.5](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.5)(2021-01-20)
|
### [v1.2.5](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.5)(2021-01-20)
|
||||||
|
|
||||||
### 新增
|
### 新增
|
||||||
|
@ -24,6 +24,14 @@ class PointGiftController extends Controller
|
|||||||
$this->view->setVar('pager', $pager);
|
$this->view->setVar('pager', $pager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Get("/search", name="admin.point_gift.search")
|
||||||
|
*/
|
||||||
|
public function searchAction()
|
||||||
|
{
|
||||||
|
$this->view->pick('point/gift/search');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Get("/add", name="admin.point_gift.add")
|
* @Get("/add", name="admin.point_gift.add")
|
||||||
*/
|
*/
|
||||||
|
@ -481,22 +481,22 @@ class AuthNode extends Service
|
|||||||
'title' => '积分商城',
|
'title' => '积分商城',
|
||||||
'type' => 'menu',
|
'type' => 'menu',
|
||||||
'children' => [
|
'children' => [
|
||||||
[
|
|
||||||
'id' => '2-8-1',
|
|
||||||
'title' => '兑换记录',
|
|
||||||
'type' => 'menu',
|
|
||||||
'route' => 'admin.point_redeem.list',
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
'id' => '2-8-2',
|
'id' => '2-8-2',
|
||||||
'title' => '礼品列表',
|
'title' => '礼品列表',
|
||||||
'type' => 'menu',
|
'type' => 'menu',
|
||||||
'route' => 'admin.point_gift.list',
|
'route' => 'admin.point_gift.list',
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'id' => '2-8-1',
|
||||||
|
'title' => '兑换记录',
|
||||||
|
'type' => 'menu',
|
||||||
|
'route' => 'admin.point_redeem.list',
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'id' => '2-8-3',
|
'id' => '2-8-3',
|
||||||
'title' => '添加礼品',
|
'title' => '添加礼品',
|
||||||
'type' => 'menu',
|
'type' => 'button',
|
||||||
'route' => 'admin.point_gift.add',
|
'route' => 'admin.point_gift.add',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
@ -76,6 +76,10 @@ class PointGift extends Service
|
|||||||
$data['details'] = $validator->checkDetails($post['details']);
|
$data['details'] = $validator->checkDetails($post['details']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($post['attrs'])) {
|
||||||
|
$data['attrs'] = $validator->checkAttrs($gift, $post['attrs']);
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($post['point'])) {
|
if (isset($post['point'])) {
|
||||||
$data['point'] = $validator->checkPoint($post['point']);
|
$data['point'] = $validator->checkPoint($post['point']);
|
||||||
}
|
}
|
||||||
|
@ -5,96 +5,9 @@
|
|||||||
{% set update_url = url({'for':'admin.point_gift.update','id':gift.id}) %}
|
{% set update_url = url({'for':'admin.point_gift.update','id':gift.id}) %}
|
||||||
|
|
||||||
{% if gift.type == 1 %}
|
{% if gift.type == 1 %}
|
||||||
<form class="layui-form kg-form" method="POST" action="{{ update_url }}">
|
{{ partial('point/gift/edit_course') }}
|
||||||
<fieldset class="layui-elem-field layui-field-title">
|
{% elseif gift.type == 2 %}
|
||||||
<legend>编辑礼品</legend>
|
{{ partial('point/gift/edit_goods') }}
|
||||||
</fieldset>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label">课程封面</label>
|
|
||||||
<div class="layui-input-inline">
|
|
||||||
<img id="img-cover" class="kg-cover" src="{{ gift.cover }}">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label">课程名称</label>
|
|
||||||
<div class="layui-form-mid layui-word-aux">{{ gift.name }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label">所需积分</label>
|
|
||||||
<div class="layui-input-block">
|
|
||||||
<input class="layui-input" type="text" name="point" value="{{ gift.point }}" lay-verify="number">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label">库存数量</label>
|
|
||||||
<div class="layui-input-block">
|
|
||||||
<input class="layui-input" type="text" name="stock" value="{{ gift.stock }}" lay-verify="number">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label"></label>
|
|
||||||
<div class="layui-input-block">
|
|
||||||
<button class="layui-btn" lay-submit="true" lay-filter="go">提交</button>
|
|
||||||
<button type="button" class="kg-back layui-btn layui-btn-primary">返回</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if gift.type == 2 %}
|
|
||||||
<form class="layui-form kg-form" method="POST" action="{{ update_url }}">
|
|
||||||
<fieldset class="layui-elem-field layui-field-title">
|
|
||||||
<legend>编辑礼品</legend>
|
|
||||||
</fieldset>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label">商品封面</label>
|
|
||||||
<div class="layui-input-inline">
|
|
||||||
<img id="img-cover" class="kg-cover" src="{{ gift.cover }}">
|
|
||||||
<input type="hidden" name="cover" value="{{ gift.cover }}">
|
|
||||||
</div>
|
|
||||||
<div class="layui-input-inline" style="padding-top:35px;">
|
|
||||||
<button id="change-cover" class="layui-btn layui-btn-sm" type="button">更换</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label">商品名称</label>
|
|
||||||
<div class="layui-input-block">
|
|
||||||
<input class="layui-input" type="text" name="name" value="{{ gift.name }}" lay-verify="required">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label">商品详情</label>
|
|
||||||
<div class="layui-input-block">
|
|
||||||
<div id="vditor"></div>
|
|
||||||
<textarea name="details" class="layui-hide" id="vditor-textarea">{{ gift.details }}</textarea>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label">所需积分</label>
|
|
||||||
<div class="layui-input-block">
|
|
||||||
<input class="layui-input" type="text" name="point" value="{{ gift.point }}" lay-verify="number">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label">库存数量</label>
|
|
||||||
<div class="layui-input-block">
|
|
||||||
<input class="layui-input" type="text" name="stock" value="{{ gift.stock }}" lay-verify="number">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label">兑换限额</label>
|
|
||||||
<div class="layui-input-block">
|
|
||||||
<input class="layui-input" type="text" name="redeem_limit" value="{{ gift.redeem_limit }}" lay-verify="number">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label"></label>
|
|
||||||
<div class="layui-input-block">
|
|
||||||
<button class="kg-submit layui-btn" lay-submit="true" lay-filter="go">提交</button>
|
|
||||||
<button type="button" class="kg-back layui-btn layui-btn-primary">返回</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
34
app/Http/Admin/Views/point/gift/edit_course.volt
Normal file
34
app/Http/Admin/Views/point/gift/edit_course.volt
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<form class="layui-form kg-form" method="POST" action="{{ update_url }}">
|
||||||
|
<fieldset class="layui-elem-field layui-field-title">
|
||||||
|
<legend>编辑礼品</legend>
|
||||||
|
</fieldset>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">课程封面</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<img id="img-cover" class="kg-cover" src="{{ gift.cover }}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">课程名称</label>
|
||||||
|
<div class="layui-form-mid layui-word-aux">{{ gift.name }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">所需积分</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input class="layui-input" type="text" name="point" value="{{ gift.point }}" lay-verify="number">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">库存数量</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input class="layui-input" type="text" name="stock" value="{{ gift.stock }}" lay-verify="number">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label"></label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<button class="layui-btn" lay-submit="true" lay-filter="go">提交</button>
|
||||||
|
<button type="button" class="kg-back layui-btn layui-btn-primary">返回</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
59
app/Http/Admin/Views/point/gift/edit_goods.volt
Normal file
59
app/Http/Admin/Views/point/gift/edit_goods.volt
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<form class="layui-form kg-form" method="POST" action="{{ update_url }}">
|
||||||
|
<fieldset class="layui-elem-field layui-field-title">
|
||||||
|
<legend>编辑礼品</legend>
|
||||||
|
</fieldset>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">商品封面</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<img id="img-cover" class="kg-cover" src="{{ gift.cover }}">
|
||||||
|
<input type="hidden" name="cover" value="{{ gift.cover }}">
|
||||||
|
</div>
|
||||||
|
<div class="layui-input-inline" style="padding-top:35px;">
|
||||||
|
<button id="change-cover" class="layui-btn layui-btn-sm" type="button">更换</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">商品名称</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input class="layui-input" type="text" name="name" value="{{ gift.name }}" lay-verify="required">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">采购地址</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input class="layui-input" type="text" name="attrs[url]" value="{{ gift.attrs['url'] }}" placeholder="淘宝或京东等平台商品链接地址" lay-verify="url">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">商品详情</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<div id="vditor"></div>
|
||||||
|
<textarea name="details" class="layui-hide" id="vditor-textarea">{{ gift.details }}</textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">所需积分</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input class="layui-input" type="text" name="point" value="{{ gift.point }}" lay-verify="number">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">库存数量</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input class="layui-input" type="text" name="stock" value="{{ gift.stock }}" lay-verify="number">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">兑换限额</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input class="layui-input" type="text" name="redeem_limit" value="{{ gift.redeem_limit }}" lay-verify="number">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label"></label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<button class="kg-submit layui-btn" lay-submit="true" lay-filter="go">提交</button>
|
||||||
|
<button type="button" class="kg-back layui-btn layui-btn-primary">返回</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
@ -5,6 +5,7 @@
|
|||||||
{{ partial('macros/point') }}
|
{{ partial('macros/point') }}
|
||||||
|
|
||||||
{% set add_url = url({'for':'admin.point_gift.add'}) %}
|
{% set add_url = url({'for':'admin.point_gift.add'}) %}
|
||||||
|
{% set search_url = url({'for':'admin.point_gift.search'}) %}
|
||||||
|
|
||||||
<div class="kg-nav">
|
<div class="kg-nav">
|
||||||
<div class="kg-nav-left">
|
<div class="kg-nav-left">
|
||||||
@ -16,6 +17,9 @@
|
|||||||
<a class="layui-btn layui-btn-sm" href="{{ add_url }}">
|
<a class="layui-btn layui-btn-sm" href="{{ add_url }}">
|
||||||
<i class="layui-icon layui-icon-add-1"></i>添加礼品
|
<i class="layui-icon layui-icon-add-1"></i>添加礼品
|
||||||
</a>
|
</a>
|
||||||
|
<a class="layui-btn layui-btn-sm" href="{{ search_url }}">
|
||||||
|
<i class="layui-icon layui-icon-search"></i>搜索礼品
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -2,40 +2,27 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<form class="layui-form kg-form" method="GET" action="{{ url({'for':'admin.group.list'}) }}">
|
<form class="layui-form kg-form" method="GET" action="{{ url({'for':'admin.point_gift.list'}) }}">
|
||||||
<fieldset class="layui-elem-field layui-field-title">
|
<fieldset class="layui-elem-field layui-field-title">
|
||||||
<legend>搜索群组</legend>
|
<legend>搜索礼品</legend>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label">群组编号</label>
|
<label class="layui-form-label">礼品编号</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input class="layui-input" type="text" name="id" placeholder="群组编号精确匹配">
|
<input class="layui-input" type="text" name="id" placeholder="礼品编号精确匹配">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label">群组名称</label>
|
<label class="layui-form-label">礼品名称</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input class="layui-input" type="text" name="name" placeholder="群组名称模糊匹配">
|
<input class="layui-input" type="text" name="name" placeholder="礼品名称模糊匹配">
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label">群主编号</label>
|
|
||||||
<div class="layui-input-block">
|
|
||||||
<input class="layui-input" type="text" name="user_id" placeholder="群主编号精确匹配">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label">课程编号</label>
|
|
||||||
<div class="layui-input-block">
|
|
||||||
<input class="layui-input" type="text" name="course_id" placeholder="课程编号精确匹配">
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label">类型</label>
|
<label class="layui-form-label">类型</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="radio" name="type" value="1" title="课程">
|
<input type="radio" name="type" value="1" title="课程">
|
||||||
<input type="radio" name="type" value="2" title="聊天">
|
<input type="radio" name="type" value="2" title="商品">
|
||||||
<input type="radio" name="type" value="3" title="职工">
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
|
@ -2,13 +2,10 @@
|
|||||||
|
|
||||||
namespace App\Http\Api\Services;
|
namespace App\Http\Api\Services;
|
||||||
|
|
||||||
use App\Models\User as UserModel;
|
|
||||||
use App\Repos\User as UserRepo;
|
use App\Repos\User as UserRepo;
|
||||||
use App\Services\Auth\Api as AuthService;
|
use App\Services\Auth\Api as AuthService;
|
||||||
use App\Services\Logic\Account\Register as RegisterService;
|
use App\Services\Logic\Account\Register as RegisterService;
|
||||||
use App\Validators\Account as AccountValidator;
|
use App\Validators\Account as AccountValidator;
|
||||||
use Phalcon\Di as Di;
|
|
||||||
use Phalcon\Events\Manager as EventsManager;
|
|
||||||
|
|
||||||
class Account extends Service
|
class Account extends Service
|
||||||
{
|
{
|
||||||
@ -35,7 +32,7 @@ class Account extends Service
|
|||||||
|
|
||||||
$token = $this->auth->saveAuthInfo($user);
|
$token = $this->auth->saveAuthInfo($user);
|
||||||
|
|
||||||
$this->fireAfterRegisterEvent($user);
|
$this->eventsManager->fire('Account:afterRegister', $this, $user);
|
||||||
|
|
||||||
return $token;
|
return $token;
|
||||||
}
|
}
|
||||||
@ -59,7 +56,7 @@ class Account extends Service
|
|||||||
|
|
||||||
$token = $this->auth->saveAuthInfo($user);
|
$token = $this->auth->saveAuthInfo($user);
|
||||||
|
|
||||||
$this->fireAfterLoginEvent($user);
|
$this->eventsManager->fire('Account:afterLogin', $this, $user);
|
||||||
|
|
||||||
return $token;
|
return $token;
|
||||||
}
|
}
|
||||||
@ -83,7 +80,7 @@ class Account extends Service
|
|||||||
|
|
||||||
$token = $this->auth->saveAuthInfo($user);
|
$token = $this->auth->saveAuthInfo($user);
|
||||||
|
|
||||||
$this->fireAfterLoginEvent($user);
|
$this->eventsManager->fire('Account:afterLogin', $this, $user);
|
||||||
|
|
||||||
return $token;
|
return $token;
|
||||||
}
|
}
|
||||||
@ -94,37 +91,7 @@ class Account extends Service
|
|||||||
|
|
||||||
$this->auth->clearAuthInfo();
|
$this->auth->clearAuthInfo();
|
||||||
|
|
||||||
$this->fireAfterLogoutEvent($user);
|
$this->eventsManager->fire('Account:afterLogout', $this, $user);
|
||||||
}
|
|
||||||
|
|
||||||
protected function fireAfterRegisterEvent(UserModel $user)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var EventsManager $eventsManager
|
|
||||||
*/
|
|
||||||
$eventsManager = Di::getDefault()->getShared('eventsManager');
|
|
||||||
|
|
||||||
$eventsManager->fire('Account:afterRegister', $this, $user);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function fireAfterLoginEvent(UserModel $user)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var EventsManager $eventsManager
|
|
||||||
*/
|
|
||||||
$eventsManager = Di::getDefault()->getShared('eventsManager');
|
|
||||||
|
|
||||||
$eventsManager->fire('Account:afterLogin', $this, $user);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function fireAfterLogoutEvent(UserModel $user)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var EventsManager $eventsManager
|
|
||||||
*/
|
|
||||||
$eventsManager = Di::getDefault()->getShared('eventsManager');
|
|
||||||
|
|
||||||
$eventsManager->fire('Account:afterLogout', $this, $user);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,11 @@
|
|||||||
|
|
||||||
namespace App\Http\Home\Services;
|
namespace App\Http\Home\Services;
|
||||||
|
|
||||||
use App\Models\User as UserModel;
|
|
||||||
use App\Repos\User as UserRepo;
|
use App\Repos\User as UserRepo;
|
||||||
use App\Services\Auth\Home as AuthService;
|
use App\Services\Auth\Home as AuthService;
|
||||||
use App\Services\Logic\Account\Register as RegisterService;
|
use App\Services\Logic\Account\Register as RegisterService;
|
||||||
use App\Validators\Account as AccountValidator;
|
use App\Validators\Account as AccountValidator;
|
||||||
use App\Validators\Captcha as CaptchaValidator;
|
use App\Validators\Captcha as CaptchaValidator;
|
||||||
use Phalcon\Di as Di;
|
|
||||||
use Phalcon\Events\Manager as EventsManager;
|
|
||||||
|
|
||||||
class Account extends Service
|
class Account extends Service
|
||||||
{
|
{
|
||||||
@ -36,7 +33,7 @@ class Account extends Service
|
|||||||
|
|
||||||
$this->auth->saveAuthInfo($user);
|
$this->auth->saveAuthInfo($user);
|
||||||
|
|
||||||
$this->fireAfterRegisterEvent($user);
|
$this->eventsManager->fire('Account:afterRegister', $this, $user);
|
||||||
|
|
||||||
return $user;
|
return $user;
|
||||||
}
|
}
|
||||||
@ -55,7 +52,7 @@ class Account extends Service
|
|||||||
|
|
||||||
$this->auth->saveAuthInfo($user);
|
$this->auth->saveAuthInfo($user);
|
||||||
|
|
||||||
$this->fireAfterLoginEvent($user);
|
$this->eventsManager->fire('Account:afterLogin', $this, $user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loginByVerify()
|
public function loginByVerify()
|
||||||
@ -68,7 +65,7 @@ class Account extends Service
|
|||||||
|
|
||||||
$this->auth->saveAuthInfo($user);
|
$this->auth->saveAuthInfo($user);
|
||||||
|
|
||||||
$this->fireAfterLoginEvent($user);
|
$this->eventsManager->fire('Account:afterLogin', $this, $user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function logout()
|
public function logout()
|
||||||
@ -77,37 +74,7 @@ class Account extends Service
|
|||||||
|
|
||||||
$this->auth->clearAuthInfo();
|
$this->auth->clearAuthInfo();
|
||||||
|
|
||||||
$this->fireAfterLogoutEvent($user);
|
$this->eventsManager->fire('Account:afterLogout', $this, $user);
|
||||||
}
|
|
||||||
|
|
||||||
protected function fireAfterRegisterEvent(UserModel $user)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var EventsManager $eventsManager
|
|
||||||
*/
|
|
||||||
$eventsManager = Di::getDefault()->getShared('eventsManager');
|
|
||||||
|
|
||||||
$eventsManager->fire('Account:afterRegister', $this, $user);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function fireAfterLoginEvent(UserModel $user)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var EventsManager $eventsManager
|
|
||||||
*/
|
|
||||||
$eventsManager = Di::getDefault()->getShared('eventsManager');
|
|
||||||
|
|
||||||
$eventsManager->fire('Account:afterLogin', $this, $user);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function fireAfterLogoutEvent(UserModel $user)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var EventsManager $eventsManager
|
|
||||||
*/
|
|
||||||
$eventsManager = Di::getDefault()->getShared('eventsManager');
|
|
||||||
|
|
||||||
$eventsManager->fire('Account:afterLogout', $this, $user);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<div class="layout-main clearfix">
|
<div class="layout-main clearfix">
|
||||||
<div class="layout-content">
|
<div class="layout-content">
|
||||||
<div class="layui-card">
|
<div class="layui-card">
|
||||||
<div class="layui-card-header">礼品信息</div>
|
<div class="layui-card-header">物品信息</div>
|
||||||
<div class="layui-card-body">
|
<div class="layui-card-body">
|
||||||
<div class="gift-meta clearfix">
|
<div class="gift-meta clearfix">
|
||||||
<div class="cover">
|
<div class="cover">
|
||||||
@ -56,7 +56,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-card">
|
<div class="layui-card">
|
||||||
<div class="layui-card-header">礼品详情</div>
|
<div class="layui-card-header">物品详情</div>
|
||||||
<div class="layui-card-body">
|
<div class="layui-card-body">
|
||||||
<div class="gift-details markdown-body">{{ gift.details }}</div>
|
<div class="gift-details markdown-body">{{ gift.details }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -12,13 +12,13 @@
|
|||||||
<span class="title">我的好友</span>
|
<span class="title">我的好友</span>
|
||||||
</div>
|
</div>
|
||||||
{% if pager.total_pages > 0 %}
|
{% if pager.total_pages > 0 %}
|
||||||
<table class="layui-table" lay-size="lg">
|
<table class="layui-table">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col>
|
<col>
|
||||||
<col>
|
<col>
|
||||||
<col>
|
<col>
|
||||||
<col>
|
<col>
|
||||||
<col width="15%">
|
<col width="10%">
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -12,17 +12,19 @@
|
|||||||
<div class="layout-main clearfix">
|
<div class="layout-main clearfix">
|
||||||
<div class="my-sidebar">{{ partial('user/console/menu') }}</div>
|
<div class="my-sidebar">{{ partial('user/console/menu') }}</div>
|
||||||
<div class="my-content">
|
<div class="my-content">
|
||||||
<div class="my-nav">
|
<div class="wrap">
|
||||||
<span class="title">我的群组</span>
|
<div class="my-nav">
|
||||||
<a class="{{ joined_class }}" href="{{ joined_url }}">参加的</a>
|
<span class="title">我的群组</span>
|
||||||
<a class="{{ owned_class }}" href="{{ owned_url }}">管理的</a>
|
<a class="{{ joined_class }}" href="{{ joined_url }}">参加的</a>
|
||||||
</div>
|
<a class="{{ owned_class }}" href="{{ owned_url }}">管理的</a>
|
||||||
<div class="my-group-wrap wrap">
|
</div>
|
||||||
{% if scope == 'owned' %}
|
<div class="my-group-wrap">
|
||||||
{{ partial('user/console/groups_owned') }}
|
{% if scope == 'owned' %}
|
||||||
{% else %}
|
{{ partial('user/console/groups_owned') }}
|
||||||
{{ partial('user/console/groups_joined') }}
|
{% else %}
|
||||||
{% endif %}
|
{{ partial('user/console/groups_joined') }}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -10,36 +10,38 @@
|
|||||||
<div class="layout-main clearfix">
|
<div class="layout-main clearfix">
|
||||||
<div class="my-sidebar">{{ partial('user/console/menu') }}</div>
|
<div class="my-sidebar">{{ partial('user/console/menu') }}</div>
|
||||||
<div class="my-content">
|
<div class="my-content">
|
||||||
<div class="my-nav">
|
<div class="wrap">
|
||||||
<span class="title">我的订单</span>
|
<div class="my-nav">
|
||||||
{% for key,value in status_types %}
|
<span class="title">我的订单</span>
|
||||||
{% set class = (status == key) ? 'layui-btn layui-btn-xs' : 'none' %}
|
{% for key,value in status_types %}
|
||||||
{% set url = (key == '0') ? url({'for':'home.uc.orders'}) : url({'for':'home.uc.orders'},{'status':key}) %}
|
{% set class = (status == key) ? 'layui-btn layui-btn-xs' : 'none' %}
|
||||||
<a class="{{ class }}" href="{{ url }}">{{ value }}</a>
|
{% set url = (key == '0') ? url({'for':'home.uc.orders'}) : url({'for':'home.uc.orders'},{'status':key}) %}
|
||||||
{% endfor %}
|
<a class="{{ class }}" href="{{ url }}">{{ value }}</a>
|
||||||
</div>
|
|
||||||
{% if pager.total_pages > 0 %}
|
|
||||||
<div class="order-list">
|
|
||||||
{% for item in pager.items %}
|
|
||||||
{% set order_info_url = url({'for':'home.order.info'},{'sn':item.sn}) %}
|
|
||||||
<div class="order-card">
|
|
||||||
<div class="header">
|
|
||||||
<span class="sn">编号:{{ item.sn }}</span>
|
|
||||||
<span class="time">时间:{{ date('Y-m-d H:i:s',item.create_time) }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="body clearfix">
|
|
||||||
<div class="column subject">{{ item.subject }}</div>
|
|
||||||
<div class="column price">{{ '¥%0.2f'|format(item.amount) }}</div>
|
|
||||||
<div class="column status">{{ order_status(item.status) }}</div>
|
|
||||||
<div class="column action">
|
|
||||||
<button class="layui-btn layui-btn-sm btn-order-info" data-url="{{ order_info_url }}">详情</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{{ partial('partials/pager') }}
|
{% if pager.total_pages > 0 %}
|
||||||
{% endif %}
|
<div class="order-list">
|
||||||
|
{% for item in pager.items %}
|
||||||
|
{% set order_info_url = url({'for':'home.order.info'},{'sn':item.sn}) %}
|
||||||
|
<div class="order-card">
|
||||||
|
<div class="header">
|
||||||
|
<span class="sn">编号:{{ item.sn }}</span>
|
||||||
|
<span class="time">时间:{{ date('Y-m-d H:i:s',item.create_time) }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="body clearfix">
|
||||||
|
<div class="column subject">{{ item.subject }}</div>
|
||||||
|
<div class="column price">{{ '¥%0.2f'|format(item.amount) }}</div>
|
||||||
|
<div class="column status">{{ order_status(item.status) }}</div>
|
||||||
|
<div class="column action">
|
||||||
|
<button class="layui-btn layui-btn-sm btn-order-info" data-url="{{ order_info_url }}">详情</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{{ partial('partials/pager') }}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -7,10 +7,10 @@
|
|||||||
<div class="layout-main clearfix">
|
<div class="layout-main clearfix">
|
||||||
<div class="my-sidebar">{{ partial('user/console/menu') }}</div>
|
<div class="my-sidebar">{{ partial('user/console/menu') }}</div>
|
||||||
<div class="my-content">
|
<div class="my-content">
|
||||||
<div class="my-nav">
|
<div class="wrap">
|
||||||
<span class="title">积分记录</span>
|
<div class="my-nav">
|
||||||
</div>
|
<span class="title">积分记录</span>
|
||||||
<div class="history-wrap wrap">
|
</div>
|
||||||
{% if pager.total_pages > 0 %}
|
{% if pager.total_pages > 0 %}
|
||||||
<table class="layui-table history-table" lay-size="lg">
|
<table class="layui-table history-table" lay-size="lg">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
|
@ -7,10 +7,10 @@
|
|||||||
<div class="layout-main clearfix">
|
<div class="layout-main clearfix">
|
||||||
<div class="my-sidebar">{{ partial('user/console/menu') }}</div>
|
<div class="my-sidebar">{{ partial('user/console/menu') }}</div>
|
||||||
<div class="my-content">
|
<div class="my-content">
|
||||||
<div class="my-nav">
|
<div class="wrap">
|
||||||
<span class="title">兑换记录</span>
|
<div class="my-nav">
|
||||||
</div>
|
<span class="title">兑换记录</span>
|
||||||
<div class="history-wrap wrap">
|
</div>
|
||||||
{% if pager.total_pages > 0 %}
|
{% if pager.total_pages > 0 %}
|
||||||
<table class="layui-table" lay-size="lg">
|
<table class="layui-table" lay-size="lg">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
|
@ -10,36 +10,38 @@
|
|||||||
<div class="layout-main clearfix">
|
<div class="layout-main clearfix">
|
||||||
<div class="my-sidebar">{{ partial('user/console/menu') }}</div>
|
<div class="my-sidebar">{{ partial('user/console/menu') }}</div>
|
||||||
<div class="my-content">
|
<div class="my-content">
|
||||||
<div class="my-nav">
|
<div class="wrap">
|
||||||
<span class="title">我的退款</span>
|
<div class="my-nav">
|
||||||
{% for key,value in status_types %}
|
<span class="title">我的退款</span>
|
||||||
{% set class = (status == key) ? 'layui-btn layui-btn-xs' : 'none' %}
|
{% for key,value in status_types %}
|
||||||
{% set url = (key == 'all') ? url({'for':'home.uc.refunds'}) : url({'for':'home.uc.refunds'},{'status':key}) %}
|
{% set class = (status == key) ? 'layui-btn layui-btn-xs' : 'none' %}
|
||||||
<a class="{{ class }}" href="{{ url }}">{{ value }}</a>
|
{% set url = (key == 'all') ? url({'for':'home.uc.refunds'}) : url({'for':'home.uc.refunds'},{'status':key}) %}
|
||||||
{% endfor %}
|
<a class="{{ class }}" href="{{ url }}">{{ value }}</a>
|
||||||
</div>
|
|
||||||
{% if pager.total_pages > 0 %}
|
|
||||||
<div class="order-list">
|
|
||||||
{% for item in pager.items %}
|
|
||||||
{% set refund_info_url = url({'for':'home.refund.info'},{'sn':item.sn}) %}
|
|
||||||
<div class="order-card">
|
|
||||||
<div class="header">
|
|
||||||
<span class="sn">编号:{{ item.sn }}</span>
|
|
||||||
<span class="time">时间:{{ date('Y-m-d H:i:s',item.create_time) }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="body clearfix">
|
|
||||||
<div class="column subject">{{ item.subject }}</div>
|
|
||||||
<div class="column price">{{ '¥%0.2f'|format(item.amount) }}</div>
|
|
||||||
<div class="column status">{{ refund_status(item.status) }}</div>
|
|
||||||
<div class="column action">
|
|
||||||
<button class="layui-btn layui-btn-sm btn-refund-info" data-url="{{ refund_info_url }}">详情</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{{ partial('partials/pager') }}
|
{% if pager.total_pages > 0 %}
|
||||||
{% endif %}
|
<div class="order-list">
|
||||||
|
{% for item in pager.items %}
|
||||||
|
{% set refund_info_url = url({'for':'home.refund.info'},{'sn':item.sn}) %}
|
||||||
|
<div class="order-card">
|
||||||
|
<div class="header">
|
||||||
|
<span class="sn">编号:{{ item.sn }}</span>
|
||||||
|
<span class="time">时间:{{ date('Y-m-d H:i:s',item.create_time) }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="body clearfix">
|
||||||
|
<div class="column subject">{{ item.subject }}</div>
|
||||||
|
<div class="column price">{{ '¥%0.2f'|format(item.amount) }}</div>
|
||||||
|
<div class="column status">{{ refund_status(item.status) }}</div>
|
||||||
|
<div class="column action">
|
||||||
|
<button class="layui-btn layui-btn-sm btn-refund-info" data-url="{{ refund_info_url }}">详情</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{{ partial('partials/pager') }}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -11,11 +11,13 @@ class AppInfo
|
|||||||
|
|
||||||
protected $link = 'https://koogua.com';
|
protected $link = 'https://koogua.com';
|
||||||
|
|
||||||
protected $version = '1.2.5';
|
protected $version = '1.2.6';
|
||||||
|
|
||||||
public function __get($name)
|
public function __get($name)
|
||||||
{
|
{
|
||||||
return $this->{$name} ?? null;
|
if (isset($this->{$name})) {
|
||||||
|
return $this->{$name};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -68,8 +68,6 @@ class Audit extends Model
|
|||||||
|
|
||||||
public function beforeCreate()
|
public function beforeCreate()
|
||||||
{
|
{
|
||||||
$this->create_time = time();
|
|
||||||
|
|
||||||
if (is_array($this->req_data) && !empty($this->req_data)) {
|
if (is_array($this->req_data) && !empty($this->req_data)) {
|
||||||
foreach ($this->req_data as $key => $value) {
|
foreach ($this->req_data as $key => $value) {
|
||||||
if (!is_scalar($value)) {
|
if (!is_scalar($value)) {
|
||||||
@ -80,7 +78,11 @@ class Audit extends Model
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->req_data = kg_json_encode($this->req_data);
|
$this->req_data = kg_json_encode($this->req_data);
|
||||||
|
} else {
|
||||||
|
$this->req_data = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->create_time = time();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -24,8 +24,7 @@ class PointGift extends Model
|
|||||||
protected $_course_attrs = [
|
protected $_course_attrs = [
|
||||||
'id' => 0,
|
'id' => 0,
|
||||||
'title' => '',
|
'title' => '',
|
||||||
'market_price' => 0,
|
'price' => 0,
|
||||||
'study_expiry_time' => 0,
|
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -101,6 +101,17 @@ class PointGift extends Validator
|
|||||||
return kg_cos_img_style_trim($value);
|
return kg_cos_img_style_trim($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function checkAttrs(PointGiftModel $gift, array $attrs)
|
||||||
|
{
|
||||||
|
$result = $gift->attrs;
|
||||||
|
|
||||||
|
if ($gift->type == PointGiftModel::TYPE_GOODS) {
|
||||||
|
$result['url'] = $attrs['url'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
public function checkType($type)
|
public function checkType($type)
|
||||||
{
|
{
|
||||||
$list = PointGiftModel::types();
|
$list = PointGiftModel::types();
|
||||||
|
@ -1683,7 +1683,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.order-card {
|
.order-card {
|
||||||
padding: 15px 20px;
|
padding: 10px 0;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
color: #666;
|
color: #666;
|
||||||
@ -1842,7 +1842,6 @@
|
|||||||
|
|
||||||
.gift-meta .info {
|
.gift-meta .info {
|
||||||
float: left;
|
float: left;
|
||||||
width: 400px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.gift-meta .info p {
|
.gift-meta .info p {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user