1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-07-19 22:52:59 +08:00

整理我的订单部分代码

This commit is contained in:
xiaochong0302 2020-07-22 21:07:26 +08:00
parent 5cd001add4
commit 8748b7d52f
12 changed files with 264 additions and 209 deletions

View File

@ -7,6 +7,7 @@ use App\Services\Frontend\Order\OrderCancel as OrderCancelService;
use App\Services\Frontend\Order\OrderConfirm as OrderConfirmService;
use App\Services\Frontend\Order\OrderCreate as OrderCreateService;
use App\Services\Frontend\Order\OrderInfo as OrderInfoService;
use Phalcon\Mvc\View;
/**
* @RoutePrefix("/order")
@ -25,6 +26,7 @@ class OrderController extends Controller
$order = $service->handle($sn);
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->setVar('order', $order);
}

View File

@ -7,6 +7,7 @@ use App\Services\Frontend\Refund\RefundCancel as RefundCancelService;
use App\Services\Frontend\Refund\RefundConfirm as RefundConfirmService;
use App\Services\Frontend\Refund\RefundCreate as RefundCreateService;
use App\Services\Frontend\Refund\RefundInfo as RefundInfoService;
use Phalcon\Mvc\View;
/**
* @RoutePrefix("/refund")
@ -29,6 +30,7 @@ class RefundController extends Controller
$confirm = $service->handle($sn);
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->setVar('order', $order);
$this->view->setVar('confirm', $confirm);
}
@ -61,6 +63,7 @@ class RefundController extends Controller
$refund = $service->handle($sn);
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->setVar('refund', $refund);
}

View File

@ -20,6 +20,7 @@
{% if pager.total_pages > 0 %}
<div class="order-list">
{% for item in pager.items %}
{% set order_info_url = url({'for':'web.order.info'},{'sn':item.sn}) %}
<div class="order-card">
<div class="header">
<span class="sn">编号:{{ item.sn }}</span>
@ -30,7 +31,7 @@
<div class="column price">{{ '¥%0.2f'|format(item.amount) }}</div>
<div class="column status">{{ order_status(item.status) }}</div>
<div class="column action">
<a class="layui-btn layui-btn-sm" href="javascript:">详情</a>
<a class="layui-btn layui-btn-sm btn-order-info" href="javascript:" data-url="{{ order_info_url }}">详情</a>
</div>
</div>
</div>
@ -41,4 +42,10 @@
</div>
</div>
{% endblock %}
{% block include_js %}
{{ js_include('web/js/my.js') }}
{% endblock %}

View File

@ -20,6 +20,7 @@
{% if pager.total_pages > 0 %}
<div class="order-list">
{% for item in pager.items %}
{% set refund_info_url = url({'for':'web.refund.info'},{'sn':item.sn}) %}
<div class="order-card">
<div class="header">
<span class="sn">编号:{{ item.sn }}</span>
@ -30,7 +31,7 @@
<div class="column price">{{ '¥%0.2f'|format(item.amount) }}</div>
<div class="column status">{{ refund_status(item.status) }}</div>
<div class="column action">
<a class="layui-btn layui-btn-sm" href="javascript:">详情</a>
<a class="layui-btn layui-btn-sm btn-refund-info" href="javascript:" data-url="{{ refund_info_url }}">详情</a>
</div>
</div>
</div>
@ -41,4 +42,10 @@
</div>
</div>
{% endblock %}
{% block include_js %}
{{ js_include('web/js/my.js') }}
{% endblock %}

View File

@ -1,44 +1,43 @@
{% extends 'templates/full.volt' %}
{% extends 'templates/layer.volt' %}
{% block content %}
{{ partial('partials/macro_order') }}
<div class="layui-breadcrumb breadcrumb">
<a href="/">首页</a>
<a href="{{ url({'for':'web.my.orders'}) }}">我的订单</a>
<a><cite>订单详情</cite></a>
<a><cite>{{ order.subject }}</cite></a>
{% set order_pay_url = url({'for':'web.order.pay'},{'sn':order.sn}) %}
{% set refund_confirm_url = url({'for':'web.refund.confirm'},{'sn':order.sn}) %}
<table class="layui-table order-table" lay-size="lg">
<tr>
<td colspan="2">
订单金额:<span class="price">{{ '¥%0.2f'|format(order.amount) }}</span>
订单状态:<span class="status">{{ order_status(order.status) }}</span>
</td>
</tr>
<tr>
<td>{{ item_info(order) }}</td>
<td>{{ status_history(order.status_history) }}</td>
</tr>
</table>
<br>
<div class="text-center">
{% if order.status == 'pending' %}
<a class="layui-btn layui-bg-blue" href="{{ order_pay_url }}" target="_top">立即支付</a>
{% endif %}
{% if (order.item_type in ['course','package']) and (order.status == 'finished') %}
<a class="layui-btn layui-bg-blue" href="{{ refund_confirm_url }}">申请退款</a>
{% endif %}
</div>
<div class="wrap">
<table class="layui-table kg-table order-table" lay-size="lg">
<tr>
<td>基本信息</td>
<td>订单金额</td>
<td>订单类型</td>
<td>订单状态</td>
<td>流转时间</td>
</tr>
<tr>
<td>{{ item_info(order) }}</td>
<td><span class="price">{{ '¥%0.2f'|format(order.amount) }}</span></td>
<td>{{ item_type(order.item_type) }}</td>
<td>{{ order_status(order.status) }}</td>
<td>{{ status_history(order.status_history) }}</td>
</tr>
</table>
<br>
<div class="text-center">
<a href="javascript:" class="kg-back layui-btn layui-bg-gray">返回上页</a>
{% if order.status == 'pending' %}
<a class="layui-btn layui-bg-blue" href="{{ url({'for':'web.order.pay'},{'sn':order.sn}) }}">立即支付</a>
{% endif %}
{% if (order.item_type in ['course','package']) and (order.status == 'finished') %}
<a class="layui-btn layui-bg-blue" href="{{ url({'for':'web.refund.confirm'},{'sn':order.sn}) }}">申请退款</a>
{% endif %}
</div>
<br>
</div>
{% endblock %}
{% block inline_js %}
<script>
layui.use(['jquery', 'layer'], function () {
var index = parent.layer.getFrameIndex(window.name);
parent.layer.iframeAuto(index);
});
</script>
{% endblock %}

View File

@ -16,8 +16,8 @@
<div class="channel">
{% set create_url = url({'for':'web.trade.create'}) %}
{% set status_url = url({'for':'web.trade.status'}) %}
<a class="alipay pay-btn" href="javascript:" data-channel="alipay"></a>
<a class="wxpay pay-btn" href="javascript:" data-channel="wxpay"></a>
<a class="alipay btn-pay" href="javascript:" data-channel="alipay"></a>
<a class="wxpay btn-pay" href="javascript:" data-channel="wxpay"></a>
</div>
<div class="footer">
<span class="tips">友情提示请在12小时内完成支付有问题请联系客服</span>
@ -38,55 +38,8 @@
{% endblock %}
{% block inline_js %}
{% block include_js %}
<script>
var $ = layui.jquery;
var layer = layui.layer;
var showQrLayer = function (title, content) {
layer.open({
type: 1,
id: 'pay-layer',
title: title,
content: content,
area: ['640px', '320px']
});
};
$('.pay-btn').on('click', function () {
var channel = $(this).data('channel');
var createUrl = $('input[name=trade_create_url]').val();
var statusUrl = $('input[name=trade_status_url]').val();
var forwardUrl = $('input[name=forward_url]').val();
var orderSn = $('input[name=order_sn]').val();
var $qrBox = $('#' + channel + '-qr-box');
var $snInput = $('input[name=' + channel + '_trade_sn]');
var qrTitle = channel === 'alipay' ? '支付宝扫码支付' : '微信扫码支付';
var qrHtml = $qrBox.html();
if (qrHtml.length === 0) {
var postData = {order_sn: orderSn, channel: channel};
$.post(createUrl, postData, function (res) {
qrHtml = '<div class="qrcode"><img src="' + res.qrcode_url + '" alt="支付二维码"></div>';
showQrLayer(qrTitle, qrHtml);
$qrBox.html(qrHtml);
$snInput.html(res.sn);
var interval = setInterval(function () {
var queryData = {sn: res.sn};
$.get(statusUrl, queryData, function (res) {
if (res.status === 'finished') {
clearInterval(interval);
var html = '<div class="success-tips">支付成功</div>';
$('#pay-layer').html(html);
setTimeout(function () {
window.location.href = forwardUrl;
}, 5000);
}
});
}, 3000)
});
} else {
showQrLayer(qrTitle, qrHtml);
}
});
</script>
{{ js_include('web/js/order.pay.js') }}
{% endblock %}

View File

@ -1,39 +1,36 @@
{%- macro item_info(order) %}
{% if order.item_type == 'course' %}
{% set course = order.item_info.course %}
{% set course_url = url({'for':'web.course.show','id':course.id}) %}
<div class="order-item">
<p>课程名称:<a href="{{ course_url }}" target="_blank">{{ course.title }}</a></p>
<p>课程名称:<span>{{ course.title }}</span></p>
<p>市场价格:<span class="price">{{ '¥%0.2f'|format(course.market_price) }}</span>会员价格:<span class="price">{{ '¥%0.2f'|format(course.vip_price) }}</span></p>
<p>学习期限:{{ date('Y-m-d H:i:s',course.study_expiry_time) }}<span class="space"></span>退款期限:{{ date('Y-m-d H:i:s',course.refund_expiry_time) }}</p>
<p>学习期限:<span>{{ date('Y-m-d',course.study_expiry_time) }}</span>退款期限:<span>{{ date('Y-m-d',course.refund_expiry_time) }}</span></p>
</div>
{% elseif order.item_type == 'package' %}
{% set courses = order.item_info.courses %}
{% for course in courses %}
{% set course_url = url({'for':'web.course.show','id':course.id}) %}
<div class="order-item">
<p>课程名称:<a href="{{ course_url }}" target="_blank">{{ course.title }}</a></p>
<p>课程名称:<span>{{ course.title }}</span></p>
<p>市场价格:<span class="price">{{ '¥%0.2f'|format(course.market_price) }}</span>会员价格:<span class="price">{{ '¥%0.2f'|format(course.vip_price) }}</span></p>
<p>学习期限:{{ date('Y-m-d H:i:s',course.study_expiry_time) }}<span class="space"></span>退款期限:{{ date('Y-m-d H:i:s',course.refund_expiry_time) }}</p>
<p>学习期限:<span>{{ date('Y-m-d',course.study_expiry_time) }}</span>退款期限:<span>{{ date('Y-m-d',course.refund_expiry_time) }}</span></p>
</div>
{% endfor %}
{% elseif order.item_type == 'vip' %}
{% set vip = order.item_info.vip %}
<div class="order-item">
<p>商品名称:{{ order.subject }}</p>
<p>商品名称:<span>{{ order.subject }}</span></p>
<p>商品价格:<span class="price">{{ '¥%0.2f'|format(order.amount) }}</span></p>
</div>
{% elseif order.item_type == 'reward' %}
{% set course = order.item_info.course %}
{% set reward = order.item_info.reward %}
{% set course_url = url({'for':'web.course.show','id':course.id}) %}
<div class="order-item">
<p>课程名称:<a href="{{ course_url }}" target="_blank">{{ course.title }}</a></p>
<p>课程名称:<span>{{ course.title }}</span></p>
<p>赞赏金额:<span class="price">{{ '¥%0.2f'|format(reward.price) }}</span></p>
</div>
{% elseif order.item_type == 'test' %}
<div class="order-item">
<p>商品名称:{{ order.subject }}</p>
<p>商品名称:<span>{{ order.subject }}</span></p>
<p>商品价格:<span class="price">{{ '¥%0.2f'|format(order.amount) }}</span></p>
</div>
{% endif %}
@ -53,20 +50,6 @@
{% endfor %}
{%- endmacro %}
{%- macro item_type(value) %}
{% if value == 'course' %}
课程
{% elseif value == 'package' %}
套餐
{% elseif value == 'vip' %}
会员
{% elseif value == 'reward' %}
赞赏
{% elseif value == 'test' %}
测试
{% endif %}
{%- endmacro %}
{%- macro order_status(value) %}
{% if value == 'pending' %}
待支付

View File

@ -1,50 +1,43 @@
{% extends 'templates/full.volt' %}
{% extends 'templates/layer.volt' %}
{% block content %}
{%- macro item_info(confirm) %}
{% if confirm.item_type == 'course' %}
{% set course = confirm.item_info.course %}
{% set course_url = url({'for':'web.course.show','id':course.id}) %}
{% set expiry_flag = course.refund_expiry_time < time() ? '(已过期)' : '' %}
<div class="order-item">
<p>课程名称:<a href="{{ course_url }}" target="_blank">{{ course.title }}</a></p>
<p>退款期限:{{ date('Y-m-d H:i:s',course.refund_expiry_time) }}</p>
<p>课程名称:<span>{{ course.title }}</span></p>
<p>退款期限:<span>{{ date('Y-m-d H:i:s',course.refund_expiry_time) }} {{ expiry_flag }}</span></p>
<p>退款金额:<span class="price">{{ '¥%0.2f'|format(course.refund_amount) }}</span>退款比例:<span class="price">{{ 100 * course.refund_percent }}%</span></p>
</div>
{% elseif confirm.item_type == 'package' %}
{% set courses = confirm.item_info.courses %}
{% for course in courses %}
{% set course_url = url({'for':'web.course.show','id':course.id}) %}
{% set expiry_flag = course.refund_expiry_time < time() ? '(已过期)' : '' %}
<div class="order-item">
<p>课程名称:<a href="{{ course_url }}" target="_blank">{{ course.title }}</a></p>
<p>退款期限:{{ date('Y-m-d H:i:s',course.refund_expiry_time) }}</p>
<p>课程名称:<span>{{ course.title }}</span></p>
<p>退款期限:<span>{{ date('Y-m-d H:i:s',course.refund_expiry_time) }} {{ expiry_flag }}</span></p>
<p>退款金额:<span class="price">{{ '¥%0.2f'|format(course.refund_amount) }}</span>退款比例:<span class="price">{{ 100 * course.refund_percent }}%</span></p>
</div>
{% endfor %}
{% endif %}
{%- endmacro %}
<div class="layui-breadcrumb breadcrumb">
<a href="/">首页</a>
<a href="{{ url({'for':'web.my.orders'}) }}">我的订单</a>
<a><cite>确认退款</cite></a>
<a><cite>{{ order.subject }}</cite></a>
</div>
<div class="wrap">
<table class="layui-table kg-table order-table" lay-size="lg">
<tr>
<td>订单编号:{{ order.sn }}</td>
<td>订单金额</td>
<td>退款金额</td>
</tr>
<tr>
<td>{{ item_info(confirm) }}</td>
<td><span class="price">{{ '¥%0.2f'|format(order.amount) }}</span></td>
<td><span class="price">{{ '¥%0.2f'|format(confirm.refund_amount) }}</span></td>
</tr>
</table>
<br>
<table class="layui-table order-table" lay-size="lg">
<tr>
<td>退款项目</td>
<td>退款金额</td>
<td>订单金额</td>
</tr>
<tr>
<td>{{ item_info(confirm) }}</td>
<td><span class="price">{{ '¥%0.2f'|format(confirm.refund_amount) }}</span></td>
<td><span class="price">{{ '¥%0.2f'|format(order.amount) }}</span></td>
</tr>
</table>
<br>
{% if confirm.refund_amount > 0 %}
<form class="layui-form layui-form-pane" method="post" action="{{ url({'for':'web.refund.create'}) }}">
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">退款原因</label>
@ -54,11 +47,23 @@
</div>
<br>
<div class="layui-form-item text-center">
<button type="button" class="kg-back layui-btn layui-bg-gray">返回上页</button>
<button class="layui-btn" lay-submit="true" lay-filter="go">申请退款</button>
<input type="hidden" name="order_sn" value="{{ order.sn }}">
</div>
</form>
</div>
{% else %}
<div class="text-center">没有符合条件的退款项目</div>
{% endif %}
{% endblock %}
{% block inline_js %}
<script>
layui.use(['jquery', 'layer'], function () {
var index = parent.layer.getFrameIndex(window.name);
parent.layer.title('申请退款', index);
});
</script>
{% endblock %}

View File

@ -1,41 +1,30 @@
{% extends 'templates/full.volt' %}
{% extends 'templates/layer.volt' %}
{% block content %}
{{ partial('partials/macro_refund') }}
<div class="layui-breadcrumb breadcrumb">
<a href="/">首页</a>
<a href="{{ url({'for':'web.my.refunds'}) }}">我的退款</a>
<a><cite>退款详情</cite></a>
<a><cite>{{ refund.subject }}</cite></a>
</div>
{% set cancel_url = url({'for':'web.refund.cancel'}) %}
<div class="wrap">
<table class="layui-table kg-table order-table" lay-size="lg">
<tr>
<td>退款项目</td>
<td>订单金额</td>
<td>退款金额</td>
<td>退款状态</td>
<td>流转时间</td>
</tr>
<tr>
<td>{{ refund.subject }}</td>
<td><span class="price">{{ '¥%0.2f'|format(refund.order.amount) }}</span></td>
<td><span class="price">{{ '¥%0.2f'|format(refund.amount) }}</span></td>
<td>{{ refund_status(refund.status) }}</td>
<td>{{ status_history(refund.status_history) }}</td>
</tr>
</table>
<br>
<div class="text-center">
<button class="kg-back layui-btn layui-bg-gray">返回上页</button>
{% if refund.status == 'approved' %}
<button class="kg-refund layui-btn" data-sn="{{ refund.sn }}" data-url="{{ url({'for':'web.refund.cancel'}) }}">取消退款</button>
{% endif %}
</div>
<br>
<table class="layui-table order-table" lay-size="lg">
<tr>
<td colspan="2">
订单金额:<span class="price">{{ '¥%0.2f'|format(refund.order.amount) }}</span>
退款金额:<span class="price">{{ '¥%0.2f'|format(refund.amount) }}</span>
退款状态:<span class="status">{{ refund_status(refund.status) }}</span>
</td>
</tr>
<tr>
<td>{{ refund.subject }}</td>
<td>{{ status_history(refund.status_history) }}</td>
</tr>
</table>
<br>
<div class="text-center">
<button class="layui-btn layui-bg-gray btn-close">关闭窗口</button>
{% if refund.status == 'approved' %}
<button class="kg-refund layui-btn" data-sn="{{ refund.sn }}" data-url="{{ cancel_url }}">取消退款</button>
{% endif %}
</div>
{% endblock %}
@ -43,30 +32,30 @@
{% block inline_js %}
<script>
var $ = layui.jquery;
var layer = layui.layer;
$('.kg-refund').on('click', function () {
var url = $(this).data('url');
var data = {sn: $(this).data('sn')};
var tips = '确定要取消退款吗?';
layer.confirm(tips, function () {
$.ajax({
type: 'POST',
url: url,
data: data,
success: function (res) {
layer.msg(res.msg, {icon: 1});
setTimeout(function () {
window.location.href = '/my/refunds';
}, 1500);
},
error: function (xhr) {
var json = JSON.parse(xhr.responseText);
layer.msg(json.msg, {icon: 2});
}
});
}, function () {
layui.use(['jquery', 'layer'], function () {
var $ = layui.jquery;
var layer = layui.layer;
var index = parent.layer.getFrameIndex(window.name);
parent.layer.iframeAuto(index);
$('.kg-refund').on('click', function () {
layer.confirm('确定要取消退款吗?', function () {
$.ajax({
type: 'POST',
url: $(this).data('url'),
data: {sn: $(this).data('sn')},
success: function (res) {
layer.msg(res.msg, {icon: 1});
setTimeout(function () {
parent.window.location.href = '/my/refunds';
}, 1500);
}
});
}, function () {
});
});
});
</script>

View File

@ -1405,18 +1405,39 @@ body {
margin-right: 30px;
}
.kg-table p {
.order-table {
margin: 0;
}
.order-table p {
line-height: 1.8em;
}
.order-table span {
margin-right: 10px;
}
.order-table .price {
color: red;
}
.order-item {
padding-bottom: 10px;
margin-bottom: 10px;
border-bottom: 1px solid #e6e6e6;
}
.order-item:last-child {
padding-bottom: 0;
margin-bottom: 0;
border-bottom: none;
}
.order-card {
padding: 15px;
margin-bottom: 20px;
background-color: white;
color: #666;
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
@ -1430,17 +1451,6 @@ body {
margin-right: 10px;
}
.order-card .header .sn {
color: #666;
}
.order-card .header .time {
color: #666;
}
.order-card .body {
}
.order-card .column {
float: left;
line-height: 40px;

View File

@ -0,0 +1,45 @@
layui.use(['jquery', 'layer', 'helper'], function () {
var $ = layui.jquery;
var layer = layui.layer;
var helper = layui.helper;
/**
* 订单详情
*/
$('.btn-order-info').on('click', function () {
var url = $(this).data('url');
layer.open({
type: 2,
title: '订单详情',
content: [url, 'no'],
area: '800px',
offset: '200px'
});
});
/**
* 退款详情
*/
$('.btn-refund-info').on('click', function () {
var url = $(this).data('url');
layer.open({
type: 2,
title: '退款详情',
content: [url, 'no'],
area: '800px',
offset: '200px'
});
});
if ($('#tab-courses').length > 0) {
var $tabCourses = $('#tab-courses');
helper.ajaxLoadHtml($tabCourses.data('url'), $tabCourses.attr('id'));
}
if ($('#tab-users').length > 0) {
var $tabUsers = $('#tab-users');
helper.ajaxLoadHtml($tabUsers.data('url'), $tabUsers.attr('id'));
}
});

View File

@ -0,0 +1,52 @@
layui.use(['jquery', 'layer'], function () {
var $ = layui.jquery;
var layer = layui.layer;
$('.btn-pay').on('click', function () {
var channel = $(this).data('channel');
var createUrl = $('input[name=trade_create_url]').val();
var statusUrl = $('input[name=trade_status_url]').val();
var forwardUrl = $('input[name=forward_url]').val();
var orderSn = $('input[name=order_sn]').val();
var $qrBox = $('#' + channel + '-qr-box');
var $snInput = $('input[name=' + channel + '_trade_sn]');
var qrTitle = channel === 'alipay' ? '支付宝扫码支付' : '微信扫码支付';
var qrHtml = $qrBox.html();
if (qrHtml.length === 0) {
var postData = {order_sn: orderSn, channel: channel};
$.post(createUrl, postData, function (res) {
qrHtml = '<div class="qrcode"><img src="' + res.qrcode_url + '" alt="支付二维码"></div>';
showQrLayer(qrTitle, qrHtml);
$qrBox.html(qrHtml);
$snInput.html(res.sn);
var interval = setInterval(function () {
var queryData = {sn: res.sn};
$.get(statusUrl, queryData, function (res) {
if (res.status === 'finished') {
clearInterval(interval);
var html = '<div class="success-tips">支付成功</div>';
$('#pay-layer').html(html);
setTimeout(function () {
window.location.href = forwardUrl;
}, 5000);
}
});
}, 3000)
});
} else {
showQrLayer(qrTitle, qrHtml);
}
});
function showQrLayer(title, content) {
layer.open({
type: 1,
id: 'pay-layer',
title: title,
content: content,
area: ['640px', '320px']
})
}
});