mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-08-14 10:21:42 +08:00
整理前端代码
This commit is contained in:
parent
ea8f2732fd
commit
eaa593a274
@ -5,6 +5,7 @@ namespace App\Http\Web\Controllers;
|
||||
use App\Caches\NavTreeList as NavTreeListCache;
|
||||
use App\Caches\Setting as SettingCache;
|
||||
use App\Library\Seo as SiteSeo;
|
||||
use App\Models\User as UserModel;
|
||||
use App\Services\Auth\Web as WebAuth;
|
||||
use App\Traits\Response as ResponseTrait;
|
||||
use App\Traits\Security as SecurityTrait;
|
||||
@ -29,7 +30,7 @@ class Controller extends \Phalcon\Mvc\Controller
|
||||
protected $siteNavs;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
* @var UserModel
|
||||
*/
|
||||
protected $authUser;
|
||||
|
||||
@ -69,7 +70,7 @@ class Controller extends \Phalcon\Mvc\Controller
|
||||
*/
|
||||
$auth = $this->getDI()->get('auth');
|
||||
|
||||
return $auth->getAuthInfo() ?: [];
|
||||
return $auth->getCurrentUser();
|
||||
}
|
||||
|
||||
protected function getSiteNavs()
|
||||
|
@ -37,11 +37,9 @@ class OrderController extends Controller
|
||||
|
||||
$order = $service->handle();
|
||||
|
||||
$service = new OrderInfoService();
|
||||
$location = $this->url->get(['for' => 'web.order.pay', 'sn' => $order->sn]);
|
||||
|
||||
$order = $service->handle($order->sn);
|
||||
|
||||
return $this->jsonSuccess(['order' => $order]);
|
||||
return $this->jsonSuccess(['location' => $location]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
<div class="breadcrumb">
|
||||
<span class="layui-breadcrumb">
|
||||
<a href="/">首页</a>
|
||||
<a href="{{ url({'for':'web.course.list'}) }}">全部课程</a>
|
||||
{% for path in course.category_paths %}
|
||||
<a href="{{ path.url }}">{{ path.name }}</a>
|
||||
|
@ -2,22 +2,24 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{%- macro cart_course_card(course) %}
|
||||
{%- macro cart_course_card(course, user) %}
|
||||
{% set course_url = url({'for':'web.course.show','id':course.id}) %}
|
||||
<div class="cart-course-card clearfix">
|
||||
<div class="cover">
|
||||
<img src="{{ course.cover }}!cover_270" alt="course.title|e">
|
||||
</div>
|
||||
<div class="info">
|
||||
<p><a href="{{ course_url }}" target="_blank">{{ course.title }}</a></p>
|
||||
<p>
|
||||
市场价格 <span class="price">{{ course.market_price }}</span>
|
||||
会员价格 <span class="price">{{ course.vip_price }}</span>
|
||||
市场价格 <span class="price">¥{{ course.market_price }}</span>
|
||||
会员价格 <span class="price">¥{{ course.vip_price }}</span>
|
||||
</p>
|
||||
<p>
|
||||
学习期限 <span class="expiry">{{ course.study_expiry }}</span>
|
||||
退款期限 <span class="expiry">{{ course.refund_expiry }}</span>
|
||||
学习期限 <span class="expiry">{{ course.study_expiry }}个月</span>
|
||||
退款期限 <span class="expiry">{{ course.refund_expiry }}天</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro reward_course_card(reward) %}
|
||||
@ -33,14 +35,14 @@
|
||||
<a><cite>确认订单</cite></a>
|
||||
</div>
|
||||
|
||||
<div class="cart module">
|
||||
<div class="cart-item-list module">
|
||||
{% if confirm.item_type == 'course' %}
|
||||
{% set course = confirm.item_info.course %}
|
||||
{{ cart_course_card(course) }}
|
||||
{{ cart_course_card(course, auth_user) }}
|
||||
{% elseif confirm.item_type == 'package' %}
|
||||
{% set package = confirm.item_info.package %}
|
||||
{% for course in package.courses %}
|
||||
{{ cart_course_card(course) }}
|
||||
{{ cart_course_card(course, auth_user) }}
|
||||
{% endfor %}
|
||||
{% elseif confirm.item_type == 'reward' %}
|
||||
{% set reward = confirm.item_info.reward %}
|
||||
@ -51,4 +53,17 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="cart-stats module clearfix">
|
||||
<div class="info">
|
||||
商品总价:<span class="amount">¥{{ confirm.total_amount }}</span>
|
||||
优惠金额:<span class="amount">¥{{ confirm.discount_amount }}</span>
|
||||
支付金额:<span class="amount pay-amount">¥{{ confirm.pay_amount }}</span>
|
||||
</div>
|
||||
<form class="layui-form cart-form" method="post" action="{{ url({'for':'web.order.create'}) }}">
|
||||
<button class="layui-btn layui-bg-red order-btn" lay-submit="true" lay-filter="go">提交订单</button>
|
||||
<input type="hidden" name="item_id" value="{{ confirm.item_id }}">
|
||||
<input type="hidden" name="item_type" value="{{ confirm.item_type }}">
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
33
app/Http/Web/Views/order/pay.volt
Normal file
33
app/Http/Web/Views/order/pay.volt
Normal file
@ -0,0 +1,33 @@
|
||||
{% extends 'templates/base.volt' %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{%- macro reward_course_card(reward) %}
|
||||
<div>I am reward</div>
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro vip_course_card(vip) %}
|
||||
<div>I am vip</div>
|
||||
{%- endmacro %}
|
||||
|
||||
<div class="layui-breadcrumb breadcrumb">
|
||||
<a href="/">首页</a>
|
||||
<a><cite>支付订单</cite></a>
|
||||
</div>
|
||||
|
||||
<div class="payment module">
|
||||
<div class="header">
|
||||
订单名称:<span>{{ order.subject }}</span>
|
||||
订单编号:<span>{{ order.sn }}</span>
|
||||
支付金额:<span class="amount">¥{{ order.amount }}</span>
|
||||
</div>
|
||||
<div class="channel">
|
||||
<a class="alipay" href="javascript:"></a>
|
||||
<a class="wxpay" href="javascript:"></a>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<span class="tips">友情提示:请在12小时内完成支付,有问题请联系客服</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
@ -32,21 +32,35 @@ class OrderConfirm extends FrontendService
|
||||
$course = $validator->checkCourse($itemId);
|
||||
|
||||
$result['item_info']['course'] = $this->handleCourseInfo($course);
|
||||
$result['amount'] = $user->vip ? $course->vip_price : $course->market_price;
|
||||
|
||||
$result['total_amount'] = $course->market_price;
|
||||
$result['pay_amount'] = $user->vip ? $course->vip_price : $course->market_price;
|
||||
$result['discount_amount'] = $result['total_amount'] - $result['pay_amount'];
|
||||
|
||||
} elseif ($itemType == OrderModel::ITEM_PACKAGE) {
|
||||
|
||||
$package = $validator->checkPackage($itemId);
|
||||
|
||||
$result['item_info']['package'] = $this->handlePackageInfo($package);
|
||||
$result['amount'] = $user->vip ? $package->vip_price : $package->market_price;
|
||||
|
||||
$result['total_amount'] = 0;
|
||||
|
||||
foreach ($result['item_info']['package']['courses'] as $course) {
|
||||
$result['total_amount'] += $course['market_price'];
|
||||
}
|
||||
|
||||
$result['pay_amount'] = $user->vip ? $package->vip_price : $package->market_price;
|
||||
$result['discount_amount'] = $result['total_amount'] - $result['pay_amount'];
|
||||
|
||||
} elseif ($itemType == OrderModel::ITEM_VIP) {
|
||||
|
||||
$vip = $validator->checkVip($itemId);
|
||||
|
||||
$result['item_info']['vip'] = $this->handleVipInfo($vip);
|
||||
$result['amount'] = $vip->price;
|
||||
|
||||
$result['total_amount'] = $vip->price;
|
||||
$result['pay_amount'] = $vip->price;
|
||||
$result['discount_amount'] = 0;
|
||||
|
||||
} elseif ($itemType == OrderModel::ITEM_REWARD) {
|
||||
|
||||
@ -57,10 +71,13 @@ class OrderConfirm extends FrontendService
|
||||
|
||||
$result['item_info']['course'] = $this->handleCourseInfo($course);
|
||||
$result['item_info']['reward'] = $this->handleRewardInfo($reward);
|
||||
$result['amount'] = $reward->price;
|
||||
|
||||
$result['total_amount'] = $reward->price;
|
||||
$result['pay_amount'] = $reward->price;
|
||||
$result['discount_amount'] = 0;
|
||||
}
|
||||
|
||||
$validator->checkAmount($result['amount']);
|
||||
$validator->checkAmount($result['pay_amount']);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ class OrderInfo extends FrontendService
|
||||
{
|
||||
$baseUrl = kg_ci_base_url();
|
||||
|
||||
foreach ($itemInfo['package']['courses'] as &$course) {
|
||||
foreach ($itemInfo['courses'] as &$course) {
|
||||
$course['cover'] = $baseUrl . $course['cover'];
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Traits;
|
||||
|
||||
use App\Caches\User as UserCache;
|
||||
use App\Models\User as UserModel;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Services\Auth as AuthService;
|
||||
@ -22,9 +23,9 @@ trait Auth
|
||||
return $this->getGuestUser();
|
||||
}
|
||||
|
||||
$userRepo = new UserRepo();
|
||||
$userCache = new UserCache();
|
||||
|
||||
return $userRepo->findById($authUser['id']);
|
||||
return $userCache->get($authUser['id']);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -42,9 +43,9 @@ trait Auth
|
||||
|
||||
$validator->checkAuthUser($authUser);
|
||||
|
||||
$userRepo = new UserRepo();
|
||||
$userCache = new UserCache();
|
||||
|
||||
return $userRepo->findById($authUser['id']);
|
||||
return $userCache->get($authUser['id']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -9,7 +9,7 @@ use Phalcon\Mvc\User\Component;
|
||||
class Validator extends Component
|
||||
{
|
||||
|
||||
public function checkAuthUser($authUser)
|
||||
public function checkAuthUser(array $authUser)
|
||||
{
|
||||
if (empty($authUser['id'])) {
|
||||
throw new UnauthorizedException('sys.unauthorized');
|
||||
|
@ -171,7 +171,7 @@ body {
|
||||
}
|
||||
|
||||
.search-empty .text {
|
||||
color: #999;
|
||||
color: #666;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
@ -211,7 +211,7 @@ body {
|
||||
.search-course-card .info {
|
||||
float: left;
|
||||
width: 500px;
|
||||
color: #999;
|
||||
color: #666;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
@ -269,7 +269,7 @@ body {
|
||||
}
|
||||
|
||||
.course-card .meta {
|
||||
color: #999;
|
||||
color: #666;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
@ -325,7 +325,7 @@ body {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.course-meta .info .share {
|
||||
.course-meta .share {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
@ -340,17 +340,17 @@ body {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.course-meta .info .price {
|
||||
.course-meta .price {
|
||||
color: red;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.course-meta .info .free {
|
||||
.course-meta .free {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.course-meta .info span {
|
||||
color: #999;
|
||||
.course-meta span {
|
||||
color: #666;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
@ -382,7 +382,7 @@ body {
|
||||
|
||||
.course-details {
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.lesson-item {
|
||||
@ -407,7 +407,7 @@ body {
|
||||
top: 0;
|
||||
right: 10px;
|
||||
position: absolute;
|
||||
color: #999;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.lesson-item .study-time {
|
||||
@ -447,7 +447,7 @@ body {
|
||||
}
|
||||
|
||||
.package-info .origin-price {
|
||||
color: #999;
|
||||
color: #666;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
@ -458,7 +458,7 @@ body {
|
||||
}
|
||||
|
||||
.package-info .price {
|
||||
color: #999;
|
||||
color: #666;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
@ -545,18 +545,18 @@ body {
|
||||
|
||||
.review-card .user {
|
||||
margin-bottom: 10px;
|
||||
color: #999;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.review-card .content {
|
||||
margin-bottom: 10px;
|
||||
color: #999;
|
||||
color: #666;
|
||||
word-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.review-card .footer {
|
||||
color: #999;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.sidebar-order .order {
|
||||
@ -594,7 +594,7 @@ body {
|
||||
}
|
||||
|
||||
.sidebar-teacher-card .info .title {
|
||||
color: #999;
|
||||
color: #666;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
@ -629,7 +629,7 @@ body {
|
||||
.sidebar-course-card .info {
|
||||
float: left;
|
||||
width: 190px;
|
||||
color: #999;
|
||||
color: #666;
|
||||
font-size: 12px;
|
||||
overflow: hidden;
|
||||
}
|
||||
@ -642,6 +642,124 @@ body {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.cart-course-card {
|
||||
padding-bottom: 10px;
|
||||
margin-bottom: 10px;
|
||||
border-bottom: 1px dashed #ccc;
|
||||
}
|
||||
|
||||
.cart-course-card:last-child {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.cart-course-card .cover {
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.cart-course-card .cover img {
|
||||
width: 175px;
|
||||
height: 95px;
|
||||
}
|
||||
|
||||
.cart-course-card p {
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.cart-course-card .info {
|
||||
float: left;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.cart-course-card span {
|
||||
color: #666;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
.cart-course-card .price {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.cart-stats .info {
|
||||
float: left;
|
||||
line-height: 38px;
|
||||
}
|
||||
|
||||
.cart-stats .amount {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.cart-stats .pay-amount {
|
||||
color: red;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.cart-stats span {
|
||||
color: #666;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.cart-form {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.payment .header {
|
||||
padding-bottom: 15px;
|
||||
border-bottom: 1px solid #f6f6f6;
|
||||
line-height: 30px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.payment .header span {
|
||||
color: #666;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.payment .header .amount {
|
||||
color: red;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.payment .channel {
|
||||
margin-top: 50px;
|
||||
margin-bottom: 40px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.channel .alipay, .channel .wxpay {
|
||||
width: 200px;
|
||||
height: 80px;
|
||||
display: inline-block;
|
||||
margin-right: 15px;
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
.channel .alipay {
|
||||
background-image: url("/static/web/img/alipay.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
}
|
||||
|
||||
.channel .wxpay {
|
||||
background-image: url("/static/web/img/wxpay.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
}
|
||||
|
||||
|
||||
.payment .footer {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.payment .footer .tips {
|
||||
color: #999;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.verify-tips-btn {
|
||||
color: green;
|
||||
}
|
||||
|
BIN
public/static/web/img/alipay.png
Normal file
BIN
public/static/web/img/alipay.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
BIN
public/static/web/img/wxpay.png
Normal file
BIN
public/static/web/img/wxpay.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 994 B |
Loading…
x
Reference in New Issue
Block a user