+
{% 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 %}
+
+
+ 商品总价:¥{{ confirm.total_amount }}
+ 优惠金额:¥{{ confirm.discount_amount }}
+ 支付金额:¥{{ confirm.pay_amount }}
+
+
+
+
{% endblock %}
\ No newline at end of file
diff --git a/app/Http/Web/Views/order/pay.volt b/app/Http/Web/Views/order/pay.volt
new file mode 100644
index 00000000..b953cd0e
--- /dev/null
+++ b/app/Http/Web/Views/order/pay.volt
@@ -0,0 +1,33 @@
+{% extends 'templates/base.volt' %}
+
+{% block content %}
+
+ {%- macro reward_course_card(reward) %}
+
I am reward
+ {%- endmacro %}
+
+ {%- macro vip_course_card(vip) %}
+
I am vip
+ {%- endmacro %}
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/Services/Frontend/Order/OrderConfirm.php b/app/Services/Frontend/Order/OrderConfirm.php
index 70d6daa0..7dd1ac4f 100644
--- a/app/Services/Frontend/Order/OrderConfirm.php
+++ b/app/Services/Frontend/Order/OrderConfirm.php
@@ -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;
}
diff --git a/app/Services/Frontend/Order/OrderInfo.php b/app/Services/Frontend/Order/OrderInfo.php
index 22103daf..7a38cd1b 100644
--- a/app/Services/Frontend/Order/OrderInfo.php
+++ b/app/Services/Frontend/Order/OrderInfo.php
@@ -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'];
}
diff --git a/app/Traits/Auth.php b/app/Traits/Auth.php
index 221594b3..9659d32b 100644
--- a/app/Traits/Auth.php
+++ b/app/Traits/Auth.php
@@ -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']);
}
/**
diff --git a/app/Validators/Validator.php b/app/Validators/Validator.php
index 99f95dba..c69a9811 100644
--- a/app/Validators/Validator.php
+++ b/app/Validators/Validator.php
@@ -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');
diff --git a/public/static/web/css/common.css b/public/static/web/css/common.css
index 19dbe935..3c63738c 100644
--- a/public/static/web/css/common.css
+++ b/public/static/web/css/common.css
@@ -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;
}
diff --git a/public/static/web/img/alipay.png b/public/static/web/img/alipay.png
new file mode 100644
index 00000000..368c6a5e
Binary files /dev/null and b/public/static/web/img/alipay.png differ
diff --git a/public/static/web/img/wxpay.png b/public/static/web/img/wxpay.png
new file mode 100644
index 00000000..081f266e
Binary files /dev/null and b/public/static/web/img/wxpay.png differ