1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-08-14 10:21:42 +08:00

整理前端代码

This commit is contained in:
xiaochong0302 2020-05-31 20:09:08 +08:00
parent ea8f2732fd
commit eaa593a274
12 changed files with 235 additions and 51 deletions

View File

@ -5,6 +5,7 @@ namespace App\Http\Web\Controllers;
use App\Caches\NavTreeList as NavTreeListCache; use App\Caches\NavTreeList as NavTreeListCache;
use App\Caches\Setting as SettingCache; use App\Caches\Setting as SettingCache;
use App\Library\Seo as SiteSeo; use App\Library\Seo as SiteSeo;
use App\Models\User as UserModel;
use App\Services\Auth\Web as WebAuth; use App\Services\Auth\Web as WebAuth;
use App\Traits\Response as ResponseTrait; use App\Traits\Response as ResponseTrait;
use App\Traits\Security as SecurityTrait; use App\Traits\Security as SecurityTrait;
@ -29,7 +30,7 @@ class Controller extends \Phalcon\Mvc\Controller
protected $siteNavs; protected $siteNavs;
/** /**
* @var array * @var UserModel
*/ */
protected $authUser; protected $authUser;
@ -69,7 +70,7 @@ class Controller extends \Phalcon\Mvc\Controller
*/ */
$auth = $this->getDI()->get('auth'); $auth = $this->getDI()->get('auth');
return $auth->getAuthInfo() ?: []; return $auth->getCurrentUser();
} }
protected function getSiteNavs() protected function getSiteNavs()

View File

@ -37,11 +37,9 @@ class OrderController extends Controller
$order = $service->handle(); $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(['location' => $location]);
return $this->jsonSuccess(['order' => $order]);
} }
/** /**

View File

@ -6,6 +6,7 @@
<div class="breadcrumb"> <div class="breadcrumb">
<span class="layui-breadcrumb"> <span class="layui-breadcrumb">
<a href="/">首页</a>
<a href="{{ url({'for':'web.course.list'}) }}">全部课程</a> <a href="{{ url({'for':'web.course.list'}) }}">全部课程</a>
{% for path in course.category_paths %} {% for path in course.category_paths %}
<a href="{{ path.url }}">{{ path.name }}</a> <a href="{{ path.url }}">{{ path.name }}</a>

View File

@ -2,21 +2,23 @@
{% block content %} {% block content %}
{%- macro cart_course_card(course) %} {%- macro cart_course_card(course, user) %}
{% set course_url = url({'for':'web.course.show','id':course.id}) %} {% set course_url = url({'for':'web.course.show','id':course.id}) %}
<div class="cover"> <div class="cart-course-card clearfix">
<img src="{{ course.cover }}!cover_270" alt="course.title|e"> <div class="cover">
</div> <img src="{{ course.cover }}!cover_270" alt="course.title|e">
<div class="info"> </div>
<p><a href="{{ course_url }}" target="_blank">{{ course.title }}</a></p> <div class="info">
<p> <p><a href="{{ course_url }}" target="_blank">{{ course.title }}</a></p>
市场价格 <span class="price">{{ course.market_price }}</span> <p>
会员价格 <span class="price">{{ course.vip_price }}</span> 市场价格 <span class="price">¥{{ course.market_price }}</span>
</p> 会员价格 <span class="price">¥{{ course.vip_price }}</span>
<p> </p>
学习期限 <span class="expiry">{{ course.study_expiry }}</span> <p>
退款期限 <span class="expiry">{{ course.refund_expiry }}</span> 学习期限 <span class="expiry">{{ course.study_expiry }}个月</span>
</p> 退款期限 <span class="expiry">{{ course.refund_expiry }}天</span>
</p>
</div>
</div> </div>
{%- endmacro %} {%- endmacro %}
@ -33,14 +35,14 @@
<a><cite>确认订单</cite></a> <a><cite>确认订单</cite></a>
</div> </div>
<div class="cart module"> <div class="cart-item-list module">
{% if confirm.item_type == 'course' %} {% if confirm.item_type == 'course' %}
{% set course = confirm.item_info.course %} {% set course = confirm.item_info.course %}
{{ cart_course_card(course) }} {{ cart_course_card(course, auth_user) }}
{% elseif confirm.item_type == 'package' %} {% elseif confirm.item_type == 'package' %}
{% set package = confirm.item_info.package %} {% set package = confirm.item_info.package %}
{% for course in package.courses %} {% for course in package.courses %}
{{ cart_course_card(course) }} {{ cart_course_card(course, auth_user) }}
{% endfor %} {% endfor %}
{% elseif confirm.item_type == 'reward' %} {% elseif confirm.item_type == 'reward' %}
{% set reward = confirm.item_info.reward %} {% set reward = confirm.item_info.reward %}
@ -51,4 +53,17 @@
{% endif %} {% endif %}
</div> </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 %} {% endblock %}

View 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 %}

View File

@ -32,21 +32,35 @@ class OrderConfirm extends FrontendService
$course = $validator->checkCourse($itemId); $course = $validator->checkCourse($itemId);
$result['item_info']['course'] = $this->handleCourseInfo($course); $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) { } elseif ($itemType == OrderModel::ITEM_PACKAGE) {
$package = $validator->checkPackage($itemId); $package = $validator->checkPackage($itemId);
$result['item_info']['package'] = $this->handlePackageInfo($package); $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) { } elseif ($itemType == OrderModel::ITEM_VIP) {
$vip = $validator->checkVip($itemId); $vip = $validator->checkVip($itemId);
$result['item_info']['vip'] = $this->handleVipInfo($vip); $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) { } elseif ($itemType == OrderModel::ITEM_REWARD) {
@ -57,10 +71,13 @@ class OrderConfirm extends FrontendService
$result['item_info']['course'] = $this->handleCourseInfo($course); $result['item_info']['course'] = $this->handleCourseInfo($course);
$result['item_info']['reward'] = $this->handleRewardInfo($reward); $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; return $result;
} }

View File

@ -75,7 +75,7 @@ class OrderInfo extends FrontendService
{ {
$baseUrl = kg_ci_base_url(); $baseUrl = kg_ci_base_url();
foreach ($itemInfo['package']['courses'] as &$course) { foreach ($itemInfo['courses'] as &$course) {
$course['cover'] = $baseUrl . $course['cover']; $course['cover'] = $baseUrl . $course['cover'];
} }

View File

@ -2,6 +2,7 @@
namespace App\Traits; namespace App\Traits;
use App\Caches\User as UserCache;
use App\Models\User as UserModel; use App\Models\User as UserModel;
use App\Repos\User as UserRepo; use App\Repos\User as UserRepo;
use App\Services\Auth as AuthService; use App\Services\Auth as AuthService;
@ -22,9 +23,9 @@ trait Auth
return $this->getGuestUser(); 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); $validator->checkAuthUser($authUser);
$userRepo = new UserRepo(); $userCache = new UserCache();
return $userRepo->findById($authUser['id']); return $userCache->get($authUser['id']);
} }
/** /**

View File

@ -9,7 +9,7 @@ use Phalcon\Mvc\User\Component;
class Validator extends Component class Validator extends Component
{ {
public function checkAuthUser($authUser) public function checkAuthUser(array $authUser)
{ {
if (empty($authUser['id'])) { if (empty($authUser['id'])) {
throw new UnauthorizedException('sys.unauthorized'); throw new UnauthorizedException('sys.unauthorized');

View File

@ -171,7 +171,7 @@ body {
} }
.search-empty .text { .search-empty .text {
color: #999; color: #666;
font-size: 18px; font-size: 18px;
} }
@ -211,7 +211,7 @@ body {
.search-course-card .info { .search-course-card .info {
float: left; float: left;
width: 500px; width: 500px;
color: #999; color: #666;
font-size: 12px; font-size: 12px;
} }
@ -269,7 +269,7 @@ body {
} }
.course-card .meta { .course-card .meta {
color: #999; color: #666;
font-size: 12px; font-size: 12px;
} }
@ -325,7 +325,7 @@ body {
font-size: 12px; font-size: 12px;
} }
.course-meta .info .share { .course-meta .share {
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
@ -340,17 +340,17 @@ body {
color: #000; color: #000;
} }
.course-meta .info .price { .course-meta .price {
color: red; color: red;
font-size: 14px; font-size: 14px;
} }
.course-meta .info .free { .course-meta .free {
color: green; color: green;
} }
.course-meta .info span { .course-meta span {
color: #999; color: #666;
margin: 0 5px; margin: 0 5px;
} }
@ -382,7 +382,7 @@ body {
.course-details { .course-details {
font-size: 12px; font-size: 12px;
color: #999; color: #666;
} }
.lesson-item { .lesson-item {
@ -407,7 +407,7 @@ body {
top: 0; top: 0;
right: 10px; right: 10px;
position: absolute; position: absolute;
color: #999; color: #666;
} }
.lesson-item .study-time { .lesson-item .study-time {
@ -447,7 +447,7 @@ body {
} }
.package-info .origin-price { .package-info .origin-price {
color: #999; color: #666;
margin-bottom: 10px; margin-bottom: 10px;
} }
@ -458,7 +458,7 @@ body {
} }
.package-info .price { .package-info .price {
color: #999; color: #666;
margin-bottom: 15px; margin-bottom: 15px;
} }
@ -545,18 +545,18 @@ body {
.review-card .user { .review-card .user {
margin-bottom: 10px; margin-bottom: 10px;
color: #999; color: #666;
} }
.review-card .content { .review-card .content {
margin-bottom: 10px; margin-bottom: 10px;
color: #999; color: #666;
word-wrap: break-word; word-wrap: break-word;
white-space: pre-wrap; white-space: pre-wrap;
} }
.review-card .footer { .review-card .footer {
color: #999; color: #666;
} }
.sidebar-order .order { .sidebar-order .order {
@ -594,7 +594,7 @@ body {
} }
.sidebar-teacher-card .info .title { .sidebar-teacher-card .info .title {
color: #999; color: #666;
font-size: 12px; font-size: 12px;
} }
@ -629,7 +629,7 @@ body {
.sidebar-course-card .info { .sidebar-course-card .info {
float: left; float: left;
width: 190px; width: 190px;
color: #999; color: #666;
font-size: 12px; font-size: 12px;
overflow: hidden; overflow: hidden;
} }
@ -642,6 +642,124 @@ body {
margin-right: 10px; 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 { .verify-tips-btn {
color: green; color: green;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 994 B