Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
starsw001
ShopXO
提交
7f847e73
ShopXO
项目概览
starsw001
/
ShopXO
与 Fork 源项目一致
Fork自
纵之格 / ShopXO
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
ShopXO
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7f847e73
编写于
5月 22, 2019
作者:
D
devil_gong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
订单售后
上级
fcc745a3
变更
17
展开全部
隐藏空白更改
内联
并排
Showing
17 changed file
with
451 addition
and
317 deletion
+451
-317
application/admin/controller/Cache.php
application/admin/controller/Cache.php
+3
-1
application/admin/lang/zh-cn.php
application/admin/lang/zh-cn.php
+0
-28
application/index/controller/Order.php
application/index/controller/Order.php
+16
-1
application/index/view/default/order/aftersale.html
application/index/view/default/order/aftersale.html
+96
-87
application/index/view/default/order/aftersale_form.html
application/index/view/default/order/aftersale_form.html
+40
-0
application/index/view/default/order/aftersale_popup.html
application/index/view/default/order/aftersale_popup.html
+0
-108
application/index/view/default/order/aftersale_step.html
application/index/view/default/order/aftersale_step.html
+43
-0
application/index/view/default/order/index.html
application/index/view/default/order/index.html
+11
-9
application/index/view/default/public/footer_nav.html
application/index/view/default/public/footer_nav.html
+1
-0
application/service/CacheService.php
application/service/CacheService.php
+62
-0
config/shopxo.sql
config/shopxo.sql
+34
-5
public/static/common/js/common.js
public/static/common/js/common.js
+2
-1
public/static/common/lib/ueditor/ueditor.all.js
public/static/common/lib/ueditor/ueditor.all.js
+1
-1
public/static/index/default/css/common.css
public/static/index/default/css/common.css
+2
-0
public/static/index/default/css/order.aftersale.css
public/static/index/default/css/order.aftersale.css
+75
-35
public/static/index/default/css/order.css
public/static/index/default/css/order.css
+12
-10
public/static/index/default/js/order.aftersale.js
public/static/index/default/js/order.aftersale.js
+53
-31
未找到文件。
application/admin/controller/Cache.php
浏览文件 @
7f847e73
...
...
@@ -10,6 +10,8 @@
// +----------------------------------------------------------------------
namespace
app\admin\controller
;
use
app\service\CacheService
;
/**
* 缓存管理
* @author Devil
...
...
@@ -48,7 +50,7 @@ class Cache extends Common
public
function
Index
()
{
// 缓存类型
$this
->
assign
(
'cache_type_list'
,
lang
(
'cache_type_list'
));
$this
->
assign
(
'cache_type_list'
,
CacheService
::
AdminCacheTypeList
(
));
return
$this
->
fetch
();
}
...
...
application/admin/lang/zh-cn.php
浏览文件 @
7f847e73
...
...
@@ -79,34 +79,6 @@ return array(
2
=>
array
(
'value'
=>
2
,
'name'
=>
'PATHINFO模式+短地址'
),
),
// 缓存类型列表
'cache_type_list'
=>
array
(
array
(
'is_enable'
=>
1
,
'name'
=>
'站点缓存'
,
'url'
=>
MyUrl
(
'admin/cache/statusupdate'
),
'desc'
=>
'数据转换后或前台不能正常访问时,可以使用此功能更新所有缓存'
),
array
(
'is_enable'
=>
1
,
'name'
=>
'模板缓存'
,
'url'
=>
MyUrl
(
'admin/cache/templateupdate'
),
'desc'
=>
'当页面显示不正常,可尝试使用此功能修复'
),
array
(
'is_enable'
=>
0
,
'name'
=>
'模块缓存'
,
'url'
=>
MyUrl
(
'admin/cache/moduleupdate'
),
'desc'
=>
'更新页面布局与模块后未生效,可尝试使用此功能修复'
),
array
(
'is_enable'
=>
1
,
'name'
=>
'日志清除'
,
'url'
=>
MyUrl
(
'admin/cache/logdelete'
),
'desc'
=>
'清除站点日志'
),
),
// 用户excel导出标题列表
'excel_user_title_list'
=>
[
'username'
=>
[
...
...
application/index/controller/Order.php
浏览文件 @
7f847e73
...
...
@@ -226,7 +226,21 @@ class Order extends Common
$data
=
OrderService
::
OrderList
(
$data_params
);
if
(
!
empty
(
$data
[
'data'
][
0
]))
{
$this
->
assign
(
'data'
,
$data
[
'data'
][
0
]);
// 商品处理
$goods
=
[];
if
(
!
empty
(
$data
[
'data'
][
0
][
'items'
]))
{
foreach
(
$data
[
'data'
][
0
][
'items'
]
as
$v
)
{
if
(
isset
(
$params
[
'gid'
])
&&
$params
[
'gid'
]
==
$v
[
'goods_id'
])
{
$goods
=
$v
;
break
;
}
}
}
$this
->
assign
(
'goods'
,
$goods
);
$this
->
assign
(
'order'
,
$data
[
'data'
][
0
]);
// 仅退款原因
$return_only_money_reason
=
MyC
(
'home_order_aftersale_return_only_money_reason'
);
...
...
@@ -236,6 +250,7 @@ class Order extends Common
$return_money_goods_reason
=
MyC
(
'home_order_aftersale_return_money_goods_reason'
);
$this
->
assign
(
'return_money_goods_reason_list'
,
empty
(
$return_money_goods_reason
)
?
[]
:
explode
(
"
\n
"
,
$return_money_goods_reason
));
$this
->
assign
(
'params'
,
$params
);
return
$this
->
fetch
();
}
else
{
$this
->
assign
(
'msg'
,
'没有相关数据'
);
...
...
application/index/view/default/order/aftersale.html
浏览文件 @
7f847e73
...
...
@@ -24,104 +24,113 @@
<div
class=
"user-content-body"
>
{{if true }}
<!-- 商品列表 -->
{{if !empty($data.items)}}
<table
class=
"am-table"
>
<thead>
<tr>
<th>
商品信息
</th>
<th
class=
"am-hide-sm-only"
>
单价
</th>
<th>
操作
</th>
</tr>
</thead>
<tbody>
{{foreach $data.items as $goods}}
<tr
id=
"data-list-{{$goods.id}}"
>
<td
class=
"base"
>
<div
class=
"goods-detail"
>
<a
href=
"{{$goods.goods_url}}"
target=
"_blank"
>
<img
src=
"{{$goods.images}}"
>
</a>
<div
class=
"goods-base"
>
<a
href=
"{{$goods.goods_url}}"
target=
"_blank"
class=
"goods-title"
>
{{$goods.title}}
</a>
{{if !empty($goods.spec)}}
<ul
class=
"goods-attr"
>
{{foreach $goods.spec as $spec}}
<li>
{{$spec.type}}:{{$spec.value}}
</li>
{{/foreach}}
</ul>
{{/if}}
{{if !empty($goods)}}
<div
class=
"am-panel am-panel-default order-base-panel"
>
<div
class=
"am-panel-bd"
>
<table
class=
"am-table"
>
<thead>
<tr>
<th
class=
"row-base"
>
商品信息
</th>
<th
class=
"row-price"
>
单价
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<div
class=
"goods-detail"
>
<a
href=
"{{$goods.goods_url}}"
target=
"_blank"
>
<img
src=
"{{$goods.images}}"
>
</a>
<div
class=
"goods-base"
>
<a
href=
"{{$goods.goods_url}}"
target=
"_blank"
class=
"goods-title"
>
{{$goods.title}}
</a>
{{if !empty($goods.spec)}}
<ul
class=
"goods-attr"
>
{{foreach $goods.spec as $spec}}
<li>
{{$spec.type}}:{{$spec.value}}
</li>
{{/foreach}}
</ul>
{{/if}}
</div>
</div>
</
div
>
<
div
class=
"wap-base am-show-sm-only"
>
</
td
>
<
td
>
{{if $goods['original_price'] gt 0}}
<
span
class=
"original-price"
>
¥{{$goods.original_price}}
</span
>
<
p
class=
"original-price"
>
¥{{$goods.original_price}}
</p
>
{{/if}}
<strong
class=
"total-price-content"
>
¥{{$goods.price}}
</strong>
<span
class=
"wap-number"
>
x{{$goods.buy_number}}
</span>
</div>
</td>
<td
class=
"am-hide-sm-only"
>
{{if $goods['original_price'] gt 0}}
<p
class=
"original-price"
>
¥{{$goods.original_price}}
</p>
{{/if}}
<p
class=
"line-price"
>
¥{{$goods.price}} x {{$goods.buy_number}}
</p>
</td>
<td
class=
"operations"
>
<!-- <a href="{{:MyUrl('index/order/aftersale', ['order_id'=>$data['id'], 'goods_id'=>$goods['goods_id']])}}" target="_blank" class="am-btn am-btn-default am-btn-xs am-radius am-icon-puzzle-piece am-btn-block"> 申请售后</a> -->
<button
class=
"am-btn am-btn-default am-btn-xs am-radius am-icon-puzzle-piece am-btn-block"
data-order-id=
"{{$data.id}}"
data-goods-id=
"{{$goods.goods_id}}"
data-number=
"{{$goods.buy_number}}"
data-price=
"{{$data.pay_price}}"
>
申请售后
</button>
</td>
</tr>
{{/foreach}}
</tbody>
</table>
<p
class=
"line-price"
>
¥{{$goods.price}} x {{$goods.buy_number}}
</p>
</td>
</tr>
</tbody>
</table>
{{if !empty($data['extension_data'])}}
<div
class=
"am-alert am-alert-warning"
>
{{foreach $data.extension_data as $ertk=>$ext}}
<div
class=
"items am-cf"
>
<div
class=
"items-title am-fl"
>
{{$ext.name}}:
</div>
<div
class=
"items-detail am-fl"
>
{{$ext.tips}}
</div>
</div>
{{/foreach}}
<div
class=
"am-alert am-alert-secondary"
>
{{if !empty($order.price)}}
<div
class=
"items am-cf"
>
<div
class=
"items-title am-fl"
>
商品总价:
</div>
<div
class=
"items-detail am-fl"
>
¥{{$order.price}}
</div>
</div>
{{/if}}
{{if !empty($order.increase_price)}}
<div
class=
"items am-cf"
>
<div
class=
"items-title am-fl"
>
增加金额:
</div>
<div
class=
"items-detail am-fl"
>
+¥{{$order.increase_price}}
</div>
</div>
{{/if}}
{{if !empty($order.preferential_price)}}
<div
class=
"items am-cf"
>
<div
class=
"items-title am-fl"
>
优惠金额:
</div>
<div
class=
"items-detail am-fl"
>
-¥{{$order.preferential_price}}
</div>
</div>
{{/if}}
{{if !empty($order.total_price)}}
<div
class=
"items am-cf"
>
<div
class=
"items-title am-fl"
>
订单总价:
</div>
<div
class=
"items-detail am-fl line-price"
>
¥{{$order.total_price}}
</div>
</div>
{{/if}}
{{if !empty($order.pay_price)}}
<div
class=
"items am-cf"
>
<div
class=
"items-title am-fl"
>
支付金额:
</div>
<div
class=
"items-detail am-fl"
>
<strong
class=
"total-price-content"
>
¥{{$order.pay_price}}
</strong>
</div>
</div>
{{/if}}
</div>
</div>
{{/if}}
</div>
<div
class=
"am-alert am-alert-secondary"
>
{{if !empty($data.price)}}
<div
class=
"items am-cf"
>
<div
class=
"items-title am-fl"
>
商品总价:
</div>
<div
class=
"items-detail am-fl"
>
¥{{$data.price}}
</div>
</div>
{{/if}}
{{if !empty($data.increase_price)}}
<div
class=
"items am-cf"
>
<div
class=
"items-title am-fl"
>
增加金额:
</div>
<div
class=
"items-detail am-fl"
>
+¥{{$data.increase_price}}
</div>
</div>
{{/if}}
{{if !empty($data.preferential_price)}}
<div
class=
"items am-cf"
>
<div
class=
"items-title am-fl"
>
优惠金额:
</div>
<div
class=
"items-detail am-fl"
>
-¥{{$data.preferential_price}}
</div>
</div>
{{/if}}
{{if !empty($data.total_price)}}
<div
class=
"items am-cf"
>
<div
class=
"items-title am-fl"
>
订单总价:
</div>
<div
class=
"items-detail am-fl line-price"
>
¥{{$data.total_price}}
</div>
<!-- 类型 -->
<div
class=
"am-cf aftersale-type"
>
<div
class=
"am-fl items-align"
data-type=
"0"
>
<div
class=
"items-middle"
>
<div
class=
"am-fl icon"
>
<i
class=
"am-icon-random"
></i>
</div>
<p
class=
"name"
>
仅退款
</p>
<p
class=
"desc"
>
未收到货(未签收),协商同意前提下
</p>
</div>
{{/if}}
{{if !empty($data.pay_price)}}
<div
class=
"items am-cf"
>
<div
class=
"items-title am-fl"
>
支付金额:
</div>
<div
class=
"items-detail am-fl"
>
<strong
class=
"total-price-content"
>
¥{{$data.pay_price}}
</strong>
</div>
<div
class=
"am-fr items-align"
data-type=
"1"
>
<div
class=
"items-middle"
>
<div
class=
"am-fl icon"
>
<i
class=
"am-icon-retweet"
></i>
</div>
<p
class=
"name"
>
退货退款
</p>
<p
class=
"desc"
>
已收到货,需要退换已收到的货物
</p>
</div>
{{/if}}
</div>
</div>
{{include file="order/aftersale_popup" /}}
<!-- 步骤 -->
{{include file="order/aftersale_step" /}}
<!-- 表单 -->
<div
class=
"am-panel am-panel-default aftersale-form-panel none"
>
<div
class=
"am-panel-bd"
>
{{include file="order/aftersale_form" /}}
</div>
</div>
{{/if}}
{{else /}}
<div
class=
"table-no"
><i
class=
"am-icon-warning"
></i>
你已进行过评论
</div>
...
...
application/index/view/default/order/aftersale_form.html
0 → 100644
浏览文件 @
7f847e73
<form
class=
"am-form form-validation view-save"
action=
"{{:PluginsHomeUrl('answers', 'index', 'answer')}}"
method=
"POST"
request-type=
"ajax-reload"
>
<div
class=
"am-form-group"
>
<label>
退款原因
<span
class=
"am-form-group-label-tips-must"
>
必选
</span></label>
<select
name=
"reason"
class=
"chosen-select"
data-placeholder=
"退款原因..."
data-validation-message=
"请选择退款原因"
data-only-json=
'{{:json_encode($return_only_money_reason_list)}}'
data-goods-json=
'{{:json_encode($return_money_goods_reason_list)}}'
required
>
</select>
</div>
<div
class=
"am-form-group form-number"
>
<label>
商品件数
<span
class=
"am-form-group-label-tips-must"
>
必填
</span></label>
<div
class=
"am-input-group am-input-group-sm number-container"
>
<span
class=
"am-input-group-label"
data-type=
"0"
>
-
</span>
<input
type=
"number"
name=
"number"
class=
"am-form-field"
value=
"1"
min=
"1"
max=
"{{$goods.buy_number}}"
data-validation-message=
"请填写有效的商品件数,最小1,最大{{$goods.buy_number}}"
required
/>
<span
class=
"am-input-group-label"
data-type=
"1"
>
+
</span>
</div>
</div>
<div
class=
"am-form-group"
>
<label>
退款金额
<span
class=
"am-form-group-label-tips-must"
>
必填
</span></label>
<input
type=
"number"
name=
"price"
value=
"{{$order.pay_price}}"
step=
"0.01"
min=
"0.01"
max=
"{{$order.pay_price}}"
class=
"am-radius"
placeholder=
"退款金额"
data-validation-message=
"请输入有效的退款金额,最低0.01元,最高{{$order.pay_price}}元"
required
/>
</div>
<div
class=
"am-form-group"
>
<label>
退款说明
<span
class=
"am-form-group-label-tips-must"
>
必填
</span></label>
<textarea
class=
"am-radius"
name=
"msg"
rows=
"5"
minlength=
"5"
maxlength=
"200"
placeholder=
"退款说明 5~200 个字符之间"
data-validation-message=
"退款说明格式 5~200 个字符之间"
required
></textarea>
</div>
<div
class=
"am-form-group"
>
<label>
上传凭证
<span
class=
"am-form-group-label-tips"
>
最多上传3张图片
</span></label>
<ul
class=
"plug-file-upload-view goods-images-view"
data-form-name=
"images[]"
data-max-number=
"3"
data-dialog-type=
"images"
>
</ul>
<div
class=
"plug-file-upload-submit"
data-view-tag=
"ul.goods-images-view"
>
+上传图片
</div>
</div>
<div
class=
"am-form-group am-form-group-refreshing"
>
<input
type=
"hidden"
name=
"order_id"
value=
"{{$params.id}}"
/>
<input
type=
"hidden"
name=
"goods_id"
value=
"{{$params.gid}}"
/>
<input
type=
"hidden"
name=
"type"
value=
""
/>
<button
type=
"submit"
class=
"am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block"
data-am-loading=
"{loadingText:'处理中...'}"
>
提交
</button>
</div>
</form>
\ No newline at end of file
application/index/view/default/order/aftersale_popup.html
已删除
100644 → 0
浏览文件 @
fcc745a3
<div
class=
"am-popup"
id=
"aftersale-popup"
>
<div
class=
"am-popup-inner"
>
<div
class=
"am-popup-hd"
>
<h4
class=
"am-popup-title"
>
售后申请
</h4>
<span
data-am-modal-close
class=
"am-close"
>
×
</span>
</div>
<div
class=
"am-popup-bd"
>
<form
class=
"am-form form-validation view-save"
action=
"{{:PluginsHomeUrl('answers', 'index', 'answer')}}"
method=
"POST"
request-type=
"ajax-reload"
>
<div
class=
"am-cf aftersale-type"
>
<div
class=
"am-fl am-vertical-align"
data-type=
"0"
>
<div
class=
"am-vertical-align-middle"
>
<div
class=
"am-fl icon"
>
<i
class=
"am-icon-random"
></i>
</div>
<p
class=
"name"
>
仅退款
</p>
<p
class=
"desc"
>
未收到货(包含未签收),或卖家协商同意前提下
</p>
</div>
</div>
<div
class=
"am-fr am-vertical-align"
data-type=
"1"
>
<div
class=
"am-vertical-align-middle"
>
<div
class=
"am-fl icon"
>
<i
class=
"am-icon-retweet"
></i>
</div>
<p
class=
"name"
>
退货退款
</p>
<p
class=
"desc"
>
已收到货,需要退换已收到的货物
</p>
</div>
</div>
</div>
<ul
class=
"aftersale-step am-cf am-text-center"
>
<li
class=
"selected"
>
<span
class=
"number"
>
1
</span>
<span
class=
"text"
>
用户申请退款
</span>
<i
class=
"am-icon-caret-right"
></i>
<i
class=
"am-icon-angle-right"
></i>
</li>
<li
class=
"selected selected-end"
>
<span
class=
"number"
>
2
</span>
<span
class=
"text"
>
管理员处理退款申请
</span>
<i
class=
"am-icon-caret-right"
></i>
<i
class=
"am-icon-angle-right"
></i>
</li>
<li>
<span
class=
"number"
>
3
</span>
<span
class=
"text"
>
退款完毕
</span>
</li>
</ul>
<div
class=
"am-form-group form-only-money"
>
<label>
退款原因
<span
class=
"am-form-group-label-tips-must"
>
必选
</span></label>
<select
name=
"return_only_money_reason"
class=
"chosen-select"
data-placeholder=
"退款原因..."
data-validation-message=
"请选择退款原因"
required
>
<option
value=
""
>
退款原因...
</option>
{{if !empty($return_only_money_reason_list)}}
{{foreach $return_only_money_reason_list as $reason}}
<option
value=
"{{$reason}}"
>
{{$reason}}
</option>
{{/foreach}}
{{/if}}
</select>
</div>
<div
class=
"am-form-group form-money-goods"
>
<label>
退款原因
<span
class=
"am-form-group-label-tips-must"
>
必选
</span></label>
<select
name=
"return_money_goods_reason"
class=
"chosen-select"
data-placeholder=
"退款原因..."
data-validation-message=
"请选择退款原因"
required
>
<option
value=
""
>
退款原因...
</option>
{{if !empty($return_money_goods_reason_list)}}
{{foreach $return_money_goods_reason_list as $reason}}
<option
value=
"{{$reason}}"
>
{{$reason}}
</option>
{{/foreach}}
{{/if}}
</select>
</div>
<div
class=
"am-form-group"
>
<label>
商品件数
<span
class=
"am-form-group-label-tips-must"
>
必填
</span></label>
<div
class=
"am-input-group am-input-group-sm"
>
<span
class=
"am-input-group-label"
>
-
</span>
<input
type=
"text"
name=
"number"
class=
"am-form-field"
value=
"1"
min=
"1"
max=
"3"
data-validation-message=
"请填写有效的商品件数"
required
/>
<span
class=
"am-input-group-label"
>
+
</span>
</div>
</div>
<div
class=
"am-form-group"
>
<label>
退款金额
<span
class=
"am-form-group-label-tips-must"
>
必填
</span></label>
<input
type=
"number"
name=
"price"
step=
"0.01"
max=
"3"
class=
"am-radius"
placeholder=
"退款金额"
data-validation-message=
"请输入有效的退款金额"
required
/>
</div>
<div
class=
"am-form-group"
>
<label>
退款说明
<span
class=
"am-form-group-label-tips-must"
>
必填
</span></label>
<textarea
class=
"am-radius"
name=
"msg"
rows=
"5"
minlength=
"5"
maxlength=
"200"
placeholder=
"退款说明 5~200 个字符之间"
data-validation-message=
"退款说明格式 5~200 个字符之间"
required
></textarea>
</div>
<div
class=
"am-form-group"
>
<label>
上传凭证
<span
class=
"am-form-group-label-tips"
>
最多上传3张图片
</span></label>
<ul
class=
"plug-file-upload-view goods-images-view"
data-form-name=
"images[]"
data-max-number=
"3"
data-dialog-type=
"images"
>
</ul>
<div
class=
"plug-file-upload-submit"
data-view-tag=
"ul.goods-images-view"
>
+上传图片
</div>
</div>
<div
class=
"am-form-group am-form-group-refreshing"
>
<input
type=
"hidden"
name=
"order_id"
value=
""
/>
<input
type=
"hidden"
name=
"goods_id"
value=
""
/>
<input
type=
"hidden"
name=
"type"
value=
""
/>
<button
type=
"submit"
class=
"am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block"
data-am-loading=
"{loadingText:'处理中...'}"
>
提交
</button>
</div>
</form>
</div>
</div>
</div>
\ No newline at end of file
application/index/view/default/order/aftersale_step.html
0 → 100644
浏览文件 @
7f847e73
<ul
class=
"aftersale-step am-cf am-text-center return-only-money-step none"
>
<li
class=
"am-text-truncate selected"
>
<span
class=
"number"
>
1
</span>
<span
class=
"text"
>
用户申请仅退款
</span>
<i
class=
"am-icon-caret-right"
></i>
<i
class=
"am-icon-angle-right"
></i>
</li>
<li
class=
"am-text-truncate selected selected-end"
>
<span
class=
"number"
>
2
</span>
<span
class=
"text"
>
管理员处理退款申请
</span>
<i
class=
"am-icon-caret-right"
></i>
<i
class=
"am-icon-angle-right"
></i>
</li>
<li
class=
"am-text-truncate"
>
<span
class=
"number"
>
3
</span>
<span
class=
"text"
>
退款完毕
</span>
</li>
</ul>
<ul
class=
"aftersale-step am-cf am-text-center return-money-goods-step none"
>
<li
class=
"am-text-truncate selected"
>
<span
class=
"number"
>
1
</span>
<span
class=
"text"
>
用户申请退货退款
</span>
<i
class=
"am-icon-caret-right"
></i>
<i
class=
"am-icon-angle-right"
></i>
</li>
<li
class=
"am-text-truncate selected"
>
<span
class=
"number"
>
2
</span>
<span
class=
"text"
>
管理员处理退货申请
</span>
<i
class=
"am-icon-caret-right"
></i>
<i
class=
"am-icon-angle-right"
></i>
</li>
<li
class=
"am-text-truncate selected selected-end"
>
<span
class=
"number"
>
3
</span>
<span
class=
"text"
>
用户退货
</span>
<i
class=
"am-icon-caret-right"
></i>
<i
class=
"am-icon-angle-right"
></i>
</li>
<li
class=
"am-text-truncate"
>
<span
class=
"number"
>
4
</span>
<span
class=
"text"
>
退款完毕
</span>
</li>
</ul>
\ No newline at end of file
application/index/view/default/order/index.html
浏览文件 @
7f847e73
...
...
@@ -130,6 +130,7 @@
<th
class=
"row-content"
>
商品
</th>
<th
class=
"row-price am-hide-sm-only"
>
单价
</th>
<th
class=
"row-number am-hide-sm-only"
>
数量
</th>
<th
class=
"row-goods-operate"
>
商品操作
</th>
<th
class=
"row-total-price am-hide-sm-only"
>
合计
</th>
<th
class=
"row-status"
>
状态
</th>
<th
class=
"row-operate"
>
操作
</th>
...
...
@@ -142,17 +143,17 @@
{{foreach $data_list as $order}}
<table
id=
"data-list-{{$order.id}}"
class=
"data-list {{if $order['status'] LT 4}}data-ongoing{{/if}}"
>
<tr
class=
"content-hd"
>
<td
colspan=
"
6
"
>
<span
class=
"am-icon-
calendar-check-o"
>
{{$order.add_time
}}
</span>
<span
class=
"am-icon-
bookmark-o"
>
{{$order.order_no
}}
</span>
<td
colspan=
"
7
"
>
<span
class=
"am-icon-
bookmark-o am-fl"
>
{{$order.order_no
}}
</span>
<span
class=
"am-icon-
calendar-check-o am-fr"
>
{{$order.add_time
}}
</span>
</td>
</tr>
{{foreach $order.items as $keys=>$goods}}
<tr>
<td
class=
"base row-content"
>
<div
class=
"goods-detail"
>
<a
href=
"{{$goods.goods_url}}"
target=
"_blank"
>
<img
src=
"{{$goods.images}}"
>
<a
href=
"{{$goods.goods_url}}"
target=
"_blank"
class=
"goods-images"
>
<img
src=
"{{$goods.images}}"
alt=
"{{$goods.title}}"
/
>
</a>
<div
class=
"goods-base"
>
<a
href=
"{{$goods.goods_url}}"
target=
"_blank"
class=
"goods-title"
>
{{$goods.title}}
</a>
...
...
@@ -182,6 +183,11 @@
<td
class=
"row-number am-hide-sm-only"
>
x{{$goods.buy_number}}
</td>
<td
class=
"row-number"
>
{{if in_array($order['status'], [2,3,4])}}
<a
href=
"{{:MyUrl('index/order/aftersale', ['id'=>$order['id'], 'gid'=>$goods['goods_id']])}}"
target=
"_blank"
>
申请售后
</a>
{{/if}}
</td>
{{if $keys eq 0}}
<td
class=
"row-total-price am-hide-sm-only"
rowspan=
"{{$order.items_count}}"
>
<strong
class=
"total-price-content"
>
¥{{$order.total_price}}
</strong>
...
...
@@ -207,10 +213,6 @@
<a
href=
"{{:MyUrl('index/order/comments', ['id'=>$order['id']])}}"
target=
"_blank"
class=
"am-btn am-btn-primary am-btn-xs am-radius am-icon-heart-o am-btn-block"
>
评论
</a>
{{/if}}
{{if in_array($order['status'], [2,3,4])}}
<a
href=
"{{:MyUrl('index/order/aftersale', ['id'=>$order['id']])}}"
target=
"_blank"
class=
"am-btn am-btn-default am-btn-xs am-radius am-icon-puzzle-piece am-btn-block"
>
售后
</a>
{{/if}}
{{if in_array($order['status'], [4,5,6])}}
<button
type=
"button"
class=
"am-btn am-btn-danger am-btn-xs am-radius am-icon-trash-o am-btn-block submit-delete"
data-url=
"{{:MyUrl('index/order/delete')}}"
data-id=
"{{$order.id}}"
data-view=
"reload"
>
删除
</button>
{{/if}}
...
...
application/index/view/default/public/footer_nav.html
浏览文件 @
7f847e73
...
...
@@ -88,6 +88,7 @@
Powered by
<a
href=
"http://shopxo.net/"
title=
"ShopXO电商系统"
target=
"_blank"
>
<span
class=
"b"
>
Shop
</span><span
class=
"o"
>
XO
</span>
</a>
{{$Think.APPLICATION_VERSION}}
</p>
<p>
<a
href=
"http://www.miitbeian.gov.cn/"
target=
"_blank"
>
{{:MyC('home_site_icp')}}
</a>
</p>
...
...
application/service/CacheService.php
0 → 100644
浏览文件 @
7f847e73
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace
app\service
;
/**
* 缓存服务层
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class
CacheService
{
/**
* 后台缓存管理-缓存类型
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-05-22
* @desc description
* @param [array] $params [输入参数]
*/
public
static
function
AdminCacheTypeList
(
$params
=
[])
{
// 缓存类型列表
return
[
[
'is_enable'
=>
1
,
'name'
=>
'站点缓存'
,
'url'
=>
MyUrl
(
'admin/cache/statusupdate'
),
'desc'
=>
'数据转换后或前台不能正常访问时,可以使用此功能更新所有缓存'
],
[
'is_enable'
=>
1
,
'name'
=>
'模板缓存'
,
'url'
=>
MyUrl
(
'admin/cache/templateupdate'
),
'desc'
=>
'当页面显示不正常,可尝试使用此功能修复'
],
[
'is_enable'
=>
0
,
'name'
=>
'模块缓存'
,
'url'
=>
MyUrl
(
'admin/cache/moduleupdate'
),
'desc'
=>
'更新页面布局与模块后未生效,可尝试使用此功能修复'
],
[
'is_enable'
=>
1
,
'name'
=>
'日志清除'
,
'url'
=>
MyUrl
(
'admin/cache/logdelete'
),
'desc'
=>
'清除站点日志'
],
];
}
}
?>
\ No newline at end of file
config/shopxo.sql
浏览文件 @
7f847e73
此差异已折叠。
点击以展开。
public/static/common/js/common.js
浏览文件 @
7f847e73
...
...
@@ -1298,7 +1298,8 @@ $(function()
$
(
'
.chosen-select
'
).
chosen
({
inherit_select_classes
:
true
,
enable_split_word_search
:
true
,
search_contains
:
true
search_contains
:
true
,
no_results_text
:
'
没有匹配到结果
'
});
}
// 多选插件 空内容失去焦点验证bug兼容处理
...
...
public/static/common/lib/ueditor/ueditor.all.js
浏览文件 @
7f847e73
...
...
@@ -18975,7 +18975,7 @@ UE.plugins['video'] = function (){
html.push('</tr>')
}
//禁止指定table-width
return '<table><tbody>' + html.join('') + '</tbody></table>'
return '<table
class="am-table am-table-bordered"
><tbody>' + html.join('') + '</tbody></table>'
}
if (!opt) {
public/static/index/default/css/common.css
浏览文件 @
7f847e73
...
...
@@ -32,6 +32,8 @@ button { outline: none; }
.am-input-group-sm
>
.am-input-group-btn
>
.am-btn
{
height
:
28px
;
font-size
:
12px
!important
;
}
.am-input-group-sm
>
.am-input-group-label
{
line-height
:
26px
;
}
...
...
public/static/index/default/css/order.aftersale.css
浏览文件 @
7f847e73
...
...
@@ -11,40 +11,38 @@
.goods-attr
li
{
color
:
#888
;
line-height
:
16px
;
}
.original-price
,
.line-price
{
font-family
:
Verdana
,
Tahoma
,
arial
;
}
.original-price
{
color
:
#9c9c9c
;
text-decoration
:
line-through
;
}
.line-price
{
color
:
#3c3c3c
;
}
.line-price
,
strong
.total-price-content
{
font-weight
:
700
;
}
strong
.total-price-content
{
color
:
#d2364c
;
font-size
:
16px
;
}
.line-price
{
color
:
#3c3c3c
;
font-weight
:
700
;
}
.am-table
{
margin-bottom
:
10px
;
}
.am-table
>
tbody
>
tr
>
td
{
border-top
:
1px
solid
#F5F5F5
;
}
.am-table
>
thead
>
tr
>
th
{
border-bottom
:
1px
solid
#f7f7f7
;
}
@media
only
screen
and
(
min-width
:
640px
)
{
.cart-content
table
tr
.base
{
width
:
40%
;
}
.cart-content
table
tr
.price
{
width
:
20%
;
}
.cart-content
table
tr
.number
{
width
:
20%
;
}
.cart-content
table
tr
.total-price
{
width
:
20%
;
}
.cart-content
{
margin-top
:
20px
;
}
.user-content-body
table
tr
.row-base
{
width
:
60%
;
}
.user-content-body
table
tr
.row-price
{
width
:
40%
;
}
}
@media
only
screen
and
(
max-width
:
640px
)
{
.goods-detail
img
{
width
:
60px
;
height
:
60px
;
}
.goods-base
{
margin-left
:
65px
;
}
.goods-detail
{
min-height
:
60px
;
}
.user-content-body
table
tr
.row-base
{
width
:
60%
;
}
.user-content-body
table
tr
.row-price
{
width
:
40%
;
}
}
/**
* 列表
*/
.user-content-body
table
.am-table
.operations
{
width
:
100px
;
.user-content-body
.order-base-panel
{
-webkit-box-shadow
:
none
;
box-shadow
:
none
;
}
.user-content-body
.order-base-panel
.am-panel-bd
{
padding-top
:
5px
;
}
.user-content-body
.order-base-panel
.am-alert-secondary
{
margin-bottom
:
0
;
}
/**
*
弹窗
*
类型
*/
.user-content-body
.aftersale-type
{
padding
:
5px
;
}
.user-content-body
.aftersale-type
.am-vertical-align
{
.user-content-body
.aftersale-type
.items-align
{
width
:
49%
;
border
:
1px
solid
#eee
;
padding
:
10px
;
...
...
@@ -55,40 +53,64 @@ strong.total-price-content { color: #d2364c; font-size: 16px; }
-o-transition
:
border-color
.2s
ease-in
;
transition
:
border-color
.2s
ease-in
;
}
.user-content-body
.aftersale-type
.
am-vertical-align.selected
,
.user-content-body
.aftersale-type
.am-vertical
-align
:hover
{
.user-content-body
.aftersale-type
.
items-align.selected
,
.user-content-body
.aftersale-type
.items
-align
:hover
{
border
:
1px
solid
#d2364c
;
box-shadow
:
0px
0
0px
1px
#d2364c
;
}
.user-content-body
.aftersale-type
.am-vertical-align
.icon
{
height
:
75px
;
margin-right
:
10px
;
.user-content-body
.aftersale-type
.items-middle
{
width
:
100%
;
position
:
relative
;
}
.user-content-body
.aftersale-type
.items-align
.icon
{
height
:
70px
;
line-height
:
70px
;
}
.user-content-body
.aftersale-type
.
am-vertical
-align
.icon
i
{
font-size
:
46
px
;
.user-content-body
.aftersale-type
.
items
-align
.icon
i
{
font-size
:
38
px
;
color
:
#d2354c
;
}
.user-content-body
.aftersale-type
.am-vertical-align
.name
{
.user-content-body
.aftersale-type
.items-align
p
{
position
:
absolute
;
left
:
50px
;
}
.user-content-body
.aftersale-type
.items-align
.name
{
font-size
:
16px
;
font-weight
:
500
;
top
:
12px
;
}
.user-content-body
.aftersale-type
.
am-vertical
-align
.desc
{
.user-content-body
.aftersale-type
.
items
-align
.desc
{
color
:
#888
;
margin-top
:
5px
;
top
:
37px
;
}
@media
only
screen
and
(
max-width
:
460px
)
{
.user-content-body
.aftersale-type
.items-align
.icon
i
{
font-size
:
30px
;
}
.user-content-body
.aftersale-type
.items-align
p
{
left
:
38px
;
}
.user-content-body
.aftersale-type
.items-align
.name
{
top
:
0px
;
}
.user-content-body
.aftersale-type
.items-align
.desc
{
top
:
25px
;
}
}
/**
* 步骤
*/
.aftersale-step
{
margin
:
10px
5px
;
margin
:
10px
0px
;
overflow
:
hidden
;
height
:
29px
;
}
.aftersale-step
li
{
float
:
left
;
width
:
33.33%
;
padding
:
5px
0
;
position
:
relative
;
overflow
:
hidden
;
background
:
#
ccc
;
background
:
#
e1e1e1
;
}
.aftersale-step
li
.number
{
padding
:
2px
6px
;
...
...
@@ -98,7 +120,7 @@ strong.total-price-content { color: #d2364c; font-size: 16px; }
color
:
#b4b4b4
;
}
.aftersale-step
li
.text
{
color
:
#
fff
;
color
:
#
666
;
margin-left
:
2px
;
}
.aftersale-step
li
i
.am-icon-angle-right
{
...
...
@@ -111,10 +133,13 @@ strong.total-price-content { color: #d2364c; font-size: 16px; }
color
:
#fff
;
}
.aftersale-step
li
.selected
{
background
:
#
d2354c
;
background
:
#
4CAF50
;
}
.aftersale-step
li
.selected
.number
{
color
:
#d2354c
;
color
:
#4CAF50
;
}
.aftersale-step
li
.selected
.text
{
color
:
#fff
;
}
.aftersale-step
li
.selected
i
.am-icon-caret-right
{
position
:
absolute
;
...
...
@@ -122,8 +147,23 @@ strong.total-price-content { color: #d2364c; font-size: 16px; }
right
:
5px
;
z-index
:
1
;
font-size
:
56px
;
color
:
#
d2354c
;
color
:
#
4CAF50
;
}
.aftersale-step
li
.selected-end
i
.am-icon-angle-right
{
background
:
#ccc
;
background
:
#e1e1e1
;
}
.return-only-money-step
li
{
width
:
33.33%
;
}
.return-money-goods-step
li
{
width
:
25%
;
}
/**
* 表单
*/
form
.form-validation
.number-container
.am-input-group-label
{
cursor
:
pointer
;
}
\ No newline at end of file
public/static/index/default/css/order.css
浏览文件 @
7f847e73
...
...
@@ -19,18 +19,20 @@ table.data-list td { padding:10px; vertical-align: top; }
.wap-base
,
.base-operate
{
padding-top
:
3px
;
}
.base-operate
{
margin-top
:
3px
;
}
.content-hd
td
span
{
color
:
#666
;
}
.content-hd
td
span
:not
(
:last-child
)
{
margin-right
:
20px
;
}
@media
only
screen
and
(
min-width
:
641px
){
.row-content
{
width
:
35%
;
}
@media
only
screen
and
(
min-width
:
641px
)
{
.row-content
{
width
:
25%
;
}
.row-price
{
width
:
15%
;
}
.row-number
{
width
:
10%
;
}
.row-goods-operate
{
width
:
10%
;
}
.row-total-price
{
width
:
20%
;
}
.row-status
{
width
:
10%
;
}
.row-operate
{
width
:
10%
;
}
}
@media
only
screen
and
(
max-width
:
641px
){
.row-content
{
width
:
55%
;
}
.row-status
{
width
:
25%
;
}
@media
only
screen
and
(
max-width
:
641px
)
{
table
.data-list
td
{
padding
:
5px
;
}
.row-content
{
width
:
40%
;
}
.row-goods-operate
{
width
:
20%
;
}
.row-status
{
width
:
20%
;
}
.row-operate
{
width
:
20%
;
}
}
...
...
@@ -58,7 +60,7 @@ table.data-ongoing .base-operate { border-top: 1px dashed #fff1f5; }
*/
.goods-detail
{
position
:
relative
;
min-height
:
80px
;
}
.goods-detail
img
{
width
:
80px
;
height
:
80px
;
position
:
absolute
;
left
:
0
;
border
:
1px
solid
#eee
;
}
.goods-title
{
display
:
block
;
max-height
:
36px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
}
.goods-title
{
display
:
-webkit-box
;
max-height
:
36px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
-webkit-line-clamp
:
2
;
-webkit-box-orient
:
vertical
;
}
.goods-title
:hover
{
text-decoration
:
underline
;
}
.goods-base
{
float
:
left
;
top
:
0
;
margin-left
:
85px
;
}
.goods-attr
{
margin-top
:
5px
;
}
...
...
@@ -67,11 +69,11 @@ table.data-ongoing .base-operate { border-top: 1px dashed #fff1f5; }
.original-price
{
color
:
#9c9c9c
;
text-decoration
:
line-through
;
}
.line-price
{
color
:
#3c3c3c
;
}
.line-price
,
strong
.total-price-content
{
font-weight
:
700
;
}
strong
.total-price-content
{
color
:
#d2364c
;
font-size
:
1
6
px
;
}
strong
.total-price-content
{
color
:
#d2364c
;
font-size
:
1
4
px
;
}
@media
only
screen
and
(
max-width
:
640px
)
{
.goods-detail
{
min-height
:
40px
;
}
.goods-detail
img
{
width
:
40px
;
height
:
40px
;
}
.goods-base
{
margin-left
:
45
px
;
}
.goods-detail
.goods-images
{
display
:
none
;
}
.goods-base
{
margin-left
:
0
px
;
}
table
.data-list
td
.row-status
{
border-left
:
1px
solid
#eee
;
}
table
.data-ongoing
td
.row-status
{
border-left
:
1px
solid
#fff1f5
;
}
}
\ No newline at end of file
public/static/index/default/js/order.aftersale.js
浏览文件 @
7f847e73
$
(
function
()
{
var
$popup
=
$
(
'
#aftersale-popup
'
);
// 弹窗事件
$
(
'
.user-content-body table.am-table .operations button
'
).
on
(
'
click
'
,
function
()
{
var
order_id
=
$
(
this
).
data
(
'
order-id
'
)
||
0
;
var
goods_id
=
$
(
this
).
data
(
'
goods-id
'
)
||
0
;
var
number
=
$
(
this
).
data
(
'
number
'
)
||
0
;
var
price
=
$
(
this
).
data
(
'
price
'
)
||
0
;
if
(
order_id
==
0
||
goods_id
==
0
||
number
==
0
)
{
Prompt
(
'
参数配置有误
'
);
return
false
;
}
$popup
.
find
(
'
.am-form-group
'
).
addClass
(
'
none
'
);
$popup
.
find
(
'
input[name="order_id"]
'
).
val
(
order_id
);
$popup
.
find
(
'
input[name="goods_id"]
'
).
val
(
goods_id
);
$popup
.
find
(
'
input[name="number"]
'
).
val
(
number
);
$popup
.
find
(
'
input[name="number"]
'
).
attr
(
'
max
'
,
number
);
$popup
.
find
(
'
input[name="price"]
'
).
val
(
price
);
$
(
'
.aftersale-type .am-vertical-align
'
).
removeClass
(
'
selected
'
);
$popup
.
modal
(
'
open
'
);
});
// 表单面板
var
$form_panel
=
$
(
'
.aftersale-form-panel
'
);
// 类型切换
$
(
'
.aftersale-type .
am-vertical
-align
'
).
on
(
'
click
'
,
function
()
$
(
'
.aftersale-type .
items
-align
'
).
on
(
'
click
'
,
function
()
{
$
(
'
.aftersale-type .
am-vertical
-align
'
).
removeClass
(
'
selected
'
);
$
(
'
.aftersale-type .
items
-align
'
).
removeClass
(
'
selected
'
);
$
(
this
).
addClass
(
'
selected
'
);
// 表单处理
var
type
=
$
(
this
).
data
(
'
type
'
);
if
(
type
!=
undefined
)
{
$
popup
.
find
(
'
.am-form-group
'
)
.
removeClass
(
'
none
'
);
$
popup
.
find
(
'
input[name="type"]
'
).
val
(
type
);
$
form_panel
.
removeClass
(
'
none
'
);
$
form_panel
.
find
(
'
input[name="type"]
'
).
val
(
type
);
}
var
json
=
[];
switch
(
type
)
{
// 仅退款
case
0
:
$popup
.
find
(
'
.form-only-money
'
).
removeClass
(
'
none
'
);
$popup
.
find
(
'
.form-money-goods
'
).
addClass
(
'
none
'
);
json
=
$form_panel
.
find
(
'
select[name="reason"]
'
).
data
(
'
only-json
'
)
||
null
;
$form_panel
.
find
(
'
.form-number
'
).
addClass
(
'
none
'
);
$
(
'
.return-only-money-step
'
).
removeClass
(
'
none
'
);
$
(
'
.return-money-goods-step
'
).
addClass
(
'
none
'
);
break
;
// 退款退货
case
1
:
$popup
.
find
(
'
.form-only-money
'
).
addClass
(
'
none
'
);
$popup
.
find
(
'
.form-money-goods
'
).
removeClass
(
'
none
'
);
json
=
$form_panel
.
find
(
'
select[name="reason"]
'
).
data
(
'
goods-json
'
)
||
null
;
$form_panel
.
find
(
'
.form-number
'
).
removeClass
(
'
none
'
);
$
(
'
.return-only-money-step
'
).
addClass
(
'
none
'
);
$
(
'
.return-money-goods-step
'
).
removeClass
(
'
none
'
);
break
;
}
// 退款原因
if
(
json
.
length
>
0
)
{
var
html
=
''
;
for
(
var
i
in
json
)
{
html
+=
'
<option value="
'
+
json
[
i
]
+
'
">
'
+
json
[
i
]
+
'
</option>
'
;
}
$form_panel
.
find
(
'
select[name="reason"]
'
).
html
(
html
);
}
else
{
$form_panel
.
find
(
'
select[name="reason"]
'
).
html
(
''
);
Prompt
(
'
退款原因数据为空
'
);
}
$form_panel
.
find
(
'
.chosen-select
'
).
val
(
''
).
trigger
(
'
chosen:updated
'
);
});
// 数量加减
$
(
'
.number-container .am-input-group-label
'
).
on
(
'
click
'
,
function
()
{
var
number
=
$
(
'
.number-container input
'
).
val
();
var
max
=
$
(
'
.number-container input
'
).
attr
(
'
max
'
)
||
1
;
if
((
$
(
this
).
data
(
'
type
'
)
||
0
)
==
0
)
{
number
--
;
}
else
{
number
++
;
}
if
(
number
<=
0
)
{
number
=
1
;
}
if
(
number
>
max
)
{
number
=
max
;
}
$
(
'
.number-container input
'
).
val
(
number
);
});
});
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录