feat/task1-c-wallet
devil_gong 2018-11-26 11:09:01 +08:00
parent 603c5739d1
commit 0da6564341
21 changed files with 795 additions and 65 deletions

View File

@ -43,6 +43,9 @@ App({
"user": "用户中心",
"goods_category": "分类",
"cart": "购物车",
"message": "消息",
"user_integral": "我的积分",
"user_goods_browse": "我的足迹",
},
// 请求地址

View File

@ -7,12 +7,10 @@
"pages/web-view/web-view",
"pages/login/login",
"pages/paytips/paytips",
"pages/goods-search/goods-search",
"pages/goods-detail/goods-detail",
"pages/goods-attribute/goods-attribute",
"pages/buy/buy",
"pages/user-address/user-address",
"pages/user-address-save/user-address-save",
"pages/user-order/user-order",
@ -20,7 +18,10 @@
"pages/user-faovr/user-faovr",
"pages/user-answer-list/user-answer-list",
"pages/answer-list/answer-list",
"pages/answer-form/answer-form"
"pages/answer-form/answer-form",
"pages/message/message",
"pages/user-integral/user-integral",
"pages/user-goods-browse/user-goods-browse"
],
"window": {
"defaultTitle": "ShopXO电商系统",

View File

@ -0,0 +1,15 @@
.data-card {
padding: 30rpx 20rpx;
font-size: 24rpx;
color: #a6a6a6;
}
.data-card .data-box {
margin-bottom: 20rpx;
}
.data-card .data-title {
font-size: 28rpx;
color: #4a4a4a;
}
.data-card .data-detail {
line-height: 36rpx;
}

View File

@ -0,0 +1,17 @@
<scroll-view scroll-y="{{true}}" class="scroll-box" onScrollToLower="scroll_lower" lower-threshold="30">
<view a:if="{{data_list.length > 0}}" class="content">
<view class="data-card bg-white br-b" a:for="{{data_list}}">
<view class="data-box oh">
<text class="data-title">{{item.title}}</text>
<text class="data-time fr">{{item.add_time_time}}</text>
</view>
<view class="data-detail">{{item.detail}}</view>
</view>
<view a:if="{{data_list.length == 0}}">
<import src="/pages/common/nodata.axml" />
<template is="nodata" data="{{status: data_list_loding_status}}"></template>
</view>
</view>
<import src="/pages/common/bottom_line.axml" />
<template is="bottom_line" data="{{status: data_bottom_line_status}}"></template>
</scroll-view>

View File

@ -0,0 +1,127 @@
const app = getApp();
Page({
data: {
data_list: [],
data_page_total: 0,
data_page: 1,
data_list_loding_status: 1,
data_bottom_line_status: false
},
onShow() {
my.setNavigationBar({ title: app.data.common_pages_title.message });
this.init();
},
init() {
var user = app.GetUserInfo(this, "init");
if (user != false) {
// 用户未绑定用户则转到登录页面
if ((user.mobile || null) == null) {
my.redirectTo({
url: "/pages/login/login?event_callback=init"
});
return false;
} else {
// 获取数据
this.get_data_list();
}
}
},
get_data_list(is_mandatory) {
// 分页是否还有数据
if ((is_mandatory || 0) == 0) {
if (this.data.data_bottom_line_status == true) {
return false;
}
} else {
this.setData({ data_bottom_line_status: false });
}
// 加载loding
my.showLoading({ content: "加载中..." });
this.setData({
data_list_loding_status: 1
});
// 获取数据
my.httpRequest({
url: app.get_request_url("Index", "Message"),
method: "POST",
data: {
page: this.data.data_page
},
dataType: "json",
success: res => {
my.hideLoading();
my.stopPullDownRefresh();
if (res.data.code == 0) {
if (res.data.data.data.length > 0) {
if (this.data.data_page <= 1) {
var temp_data_list = res.data.data.data;
} else {
var temp_data_list = this.data.data_list;
var temp_data = res.data.data.data;
for (var i in temp_data) {
temp_data_list.push(temp_data[i]);
}
}
this.setData({
data_list: temp_data_list,
data_total: res.data.data.total,
data_page_total: res.data.data.page_total,
data_list_loding_status: 3,
data_page: this.data.data_page + 1
});
// 是否还有数据
if (
this.data.data_page > 1 &&
this.data.data_page > this.data.data_page_total
) {
this.setData({ data_bottom_line_status: true });
}
} else {
this.setData({
data_list_loding_status: 0
});
}
} else {
this.setData({
data_list_loding_status: 0
});
my.showToast({
type: "fail",
content: res.data.msg
});
}
},
fail: () => {
my.hideLoading();
my.stopPullDownRefresh();
this.setData({
data_list_loding_status: 2
});
my.showToast({
type: "fail",
content: "服务器请求出错"
});
}
});
},
// 下拉刷新
onPullDownRefresh() {
this.setData({ data_page: 1 });
this.get_data_list(1);
},
// 滚动加载
scroll_lower(e) {
this.get_data_list();
}
});

View File

@ -0,0 +1,3 @@
{
"pullRefresh": true
}

View File

@ -1,5 +1,4 @@
const app = getApp();
Page({
data: {
data_list: [],
@ -7,11 +6,6 @@ Page({
data_page: 1,
data_list_loding_status: 1,
data_bottom_line_status: false,
params: null,
},
onLoad(params) {
this.setData({params: params});
},
onShow() {

View File

@ -1,3 +1,3 @@
{
"pullRefresh": true
"pullRefresh": true
}

View File

@ -0,0 +1,27 @@
.goods-title {
line-height: 36rpx;
}
.goods-item {
padding: 20rpx 10rpx;
position: relative;
}
.goods-title {
margin-bottom: 10rpx;
}
.goods-image {
width: 160rpx;
height: 160rpx;
margin-right: 20rpx;
}
.item-base {
padding: 25rpx 10rpx 20rpx 10rpx;
}
.submit-cancel {
position: absolute;
right: 10rpx;
bottom: 20rpx;
border: 1px solid #f7c3b3;
color: #f7c3b3;
padding: 0 35rpx;
}

View File

@ -0,0 +1,23 @@
<scroll-view scroll-y="{{true}}" class="scroll-box" onScrollToLower="scroll_lower" lower-threshold="30">
<view class="list-item" a:if="{{data_list.length > 0}}">
<view class="goods-item oh bg-white spacing-mb" a:for="{{data_list}}" a:for-item="item">
<navigator url="/pages/goods-detail/goods-detail?goods_id={{item.goods_id}}">
<image class="goods-image fl" src="{{item.images}}" mode="aspectFill" />
<view class="goods-base">
<view class="goods-title multi-text">{{item.title}}</view>
<view class="oh goods-price">
<text class="sales-price">¥{{item.price}}</text>
<text a:if="{{item.original_price > 0}}" class="original-price">¥{{item.original_price}}</text>
</view>
</view>
</navigator>
<button class="submit-cancel" type="default" size="mini" onTap="delete_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">删除</button>
</view>
</view>
<view a:if="{{data_list.length == 0}}">
<import src="/pages/common/nodata.axml" />
<template is="nodata" data="{{status: data_list_loding_status}}"></template>
</view>
<import src="/pages/common/bottom_line.axml" />
<template is="bottom_line" data="{{status: data_bottom_line_status}}"></template>
</scroll-view>

View File

@ -0,0 +1,185 @@
const app = getApp();
Page({
data: {
data_list: [],
data_page_total: 0,
data_page: 1,
data_list_loding_status: 1,
data_bottom_line_status: false,
},
onShow() {
my.setNavigationBar({ title: app.data.common_pages_title.user_goods_browse });
this.init();
},
init() {
var user = app.GetUserInfo(this, "init");
if (user != false) {
// 用户未绑定用户则转到登录页面
if ((user.mobile || null) == null) {
my.redirectTo({
url: "/pages/login/login?event_callback=init"
});
return false;
} else {
// 获取数据
this.get_data_list();
}
}
},
// 获取数据
get_data_list(is_mandatory) {
// 分页是否还有数据
if ((is_mandatory || 0) == 0) {
if (this.data.data_bottom_line_status == true) {
return false;
}
}
// 加载loding
my.showLoading({ content: "加载中..." });
this.setData({
data_list_loding_status: 1
});
// 获取数据
my.httpRequest({
url: app.get_request_url("Index", "UserGoodsBrowse"),
method: "POST",
data: {
page: this.data.data_page
},
dataType: "json",
success: res => {
my.hideLoading();
my.stopPullDownRefresh();
if (res.data.code == 0) {
if (res.data.data.data.length > 0) {
if (this.data.data_page <= 1) {
var temp_data_list = res.data.data.data;
} else {
var temp_data_list = this.data.data_list;
var temp_data = res.data.data.data;
for (var i in temp_data) {
temp_data_list.push(temp_data[i]);
}
}
this.setData({
data_list: temp_data_list,
data_total: res.data.data.total,
data_page_total: res.data.data.page_total,
data_list_loding_status: 3,
data_page: this.data.data_page + 1
});
// 是否还有数据
if (this.data.data_page > 1 && this.data.data_page > this.data.data_page_total) {
this.setData({ data_bottom_line_status: true });
} else {
this.setData({ data_bottom_line_status: false });
}
} else {
this.setData({
data_list_loding_status: 0
});
}
} else {
this.setData({
data_list_loding_status: 0
});
my.showToast({
type: "fail",
content: res.data.msg
});
}
},
fail: () => {
my.hideLoading();
my.stopPullDownRefresh();
this.setData({
data_list_loding_status: 2
});
my.showToast({
type: "fail",
content: "服务器请求出错"
});
}
});
},
// 下拉刷新
onPullDownRefresh() {
this.setData({
data_page: 1
});
this.get_data_list(1);
},
// 滚动加载
scroll_lower(e) {
this.get_data_list();
},
// 删除
delete_event(e) {
my.confirm({
title: "温馨提示",
content: "删除后不可恢复?,确定继续吗?",
confirmButtonText: "确认",
cancelButtonText: "不了",
success: result => {
if (result.confirm) {
// 参数
var id = e.target.dataset.value;
var index = e.target.dataset.index;
// 加载loding
my.showLoading({ content: "处理中..." });
my.httpRequest({
url: app.get_request_url("Delete", "UserGoodsBrowse"),
method: "POST",
data: { id: id },
dataType: "json",
success: res => {
my.hideLoading();
if (res.data.code == 0) {
var temp_data_list = this.data.data_list;
temp_data_list.splice(index, 1);
this.setData({ data_list: temp_data_list });
if (temp_data_list.length == 0) {
this.setData({
data_list_loding_status: 0,
data_bottom_line_status: false,
});
}
my.showToast({
type: "success",
content: res.data.msg
});
} else {
my.showToast({
type: "fail",
content: res.data.msg
});
}
},
fail: () => {
my.hideLoading();
my.showToast({
type: "fail",
content: "服务器请求出错"
});
}
});
}
}
});
},
});

View File

@ -0,0 +1,3 @@
{
"pullRefresh": true
}

View File

@ -0,0 +1,21 @@
.data-card {
padding: 30rpx 20rpx;
font-size: 24rpx;
color: #a6a6a6;
}
.data-card .data-box {
margin-bottom: 20rpx;
}
.data-card .data-title {
font-size: 28rpx;
color: #4a4a4a;
}
.data-card .data-detail {
line-height: 36rpx;
}
.data-value {
margin-bottom: 10rpx;
}
.data-value text:first-child {
margin-right: 20rpx;
}

View File

@ -0,0 +1,22 @@
<scroll-view scroll-y="{{true}}" class="scroll-box" onScrollToLower="scroll_lower" lower-threshold="30">
<view a:if="{{data_list.length > 0}}" class="content">
<view class="data-card bg-white br-b" a:for="{{data_list}}">
<view class="data-box oh">
<import src="/pages/common/nodata.axml" />
<text class="data-title">{{item.type_name}}</text>
<text class="data-time fr">{{item.add_time_time}}</text>
</view>
<view class="data-value">
<text class="cr-666">原始 {{item.original_integral}}</text>
<text class="cr-main">最新 {{item.new_integral}}</text>
</view>
<view class="data-detail">{{item.msg}}</view>
</view>
<view a:if="{{data_list.length == 0}}">
<import src="/pages/common/nodata.axml" />
<template is="nodata" data="{{status: data_list_loding_status}}"></template>
</view>
</view>
<import src="/pages/common/bottom_line.axml" />
<template is="bottom_line" data="{{status: data_bottom_line_status}}"></template>
</scroll-view>

View File

@ -0,0 +1,127 @@
const app = getApp();
Page({
data: {
data_list: [],
data_page_total: 0,
data_page: 1,
data_list_loding_status: 1,
data_bottom_line_status: false
},
onShow() {
my.setNavigationBar({ title: app.data.common_pages_title.user_integral });
this.init();
},
init() {
var user = app.GetUserInfo(this, "init");
if (user != false) {
// 用户未绑定用户则转到登录页面
if ((user.mobile || null) == null) {
my.redirectTo({
url: "/pages/login/login?event_callback=init"
});
return false;
} else {
// 获取数据
this.get_data_list();
}
}
},
get_data_list(is_mandatory) {
// 分页是否还有数据
if ((is_mandatory || 0) == 0) {
if (this.data.data_bottom_line_status == true) {
return false;
}
} else {
this.setData({ data_bottom_line_status: false });
}
// 加载loding
my.showLoading({ content: "加载中..." });
this.setData({
data_list_loding_status: 1
});
// 获取数据
my.httpRequest({
url: app.get_request_url("Index", "UserIntegral"),
method: "POST",
data: {
page: this.data.data_page
},
dataType: "json",
success: res => {
my.hideLoading();
my.stopPullDownRefresh();
if (res.data.code == 0) {
if (res.data.data.data.length > 0) {
if (this.data.data_page <= 1) {
var temp_data_list = res.data.data.data;
} else {
var temp_data_list = this.data.data_list;
var temp_data = res.data.data.data;
for (var i in temp_data) {
temp_data_list.push(temp_data[i]);
}
}
this.setData({
data_list: temp_data_list,
data_total: res.data.data.total,
data_page_total: res.data.data.page_total,
data_list_loding_status: 3,
data_page: this.data.data_page + 1
});
// 是否还有数据
if (
this.data.data_page > 1 &&
this.data.data_page > this.data.data_page_total
) {
this.setData({ data_bottom_line_status: true });
}
} else {
this.setData({
data_list_loding_status: 0
});
}
} else {
this.setData({
data_list_loding_status: 0
});
my.showToast({
type: "fail",
content: res.data.msg
});
}
},
fail: () => {
my.hideLoading();
my.stopPullDownRefresh();
this.setData({
data_list_loding_status: 2
});
my.showToast({
type: "fail",
content: "服务器请求出错"
});
}
});
},
// 下拉刷新
onPullDownRefresh() {
this.setData({ data_page: 1 });
this.get_data_list(1);
},
// 滚动加载
scroll_lower(e) {
this.get_data_list();
}
});

View File

@ -0,0 +1,3 @@
{
"pullRefresh": true
}

View File

@ -149,6 +149,8 @@ Page({
this.setData({
data_list_loding_status: 0,
load_status: 1,
data_list: [],
data_bottom_line_status: false,
});
}
} else {

View File

@ -54,7 +54,7 @@
<text class="item-name">清除缓存</text>
</view>
<view class="nav-item" onTap="call_event">
<view a:if="{{customer_service_tel != null}}" class="nav-item" onTap="call_event">
<image src="/images/user-nav-customer-service-icon.png" class="item-icon" mode="widthFix" />
<text class="item-name">联系客服 </text>
<text class="item-name cr-blue">{{customer_service_tel}}</text>

View File

@ -1,6 +1,8 @@
<?php
namespace Home\Controller;
namespace Api\Controller;
use Service\MessageService;
/**
* 消息
@ -31,12 +33,6 @@ class MessageController extends CommonController
// 登录校验
$this->Is_Login();
// 站点校验
if(APPLICATION_CLIENT == 'shanghu')
{
$this->Is_Merchant();
}
}
/**
@ -48,61 +44,39 @@ class MessageController extends CommonController
*/
public function Index()
{
$m = M('Message');
// 参数
$params = $this->data_post;
$params['user'] = $this->user;
// 获取数据
$number = 15;
$page = intval(I('page', 1));
$where = $this->GetIndexWhere();
$total = $m->where($where)->count();
// 消息更新未已读
MessageService::MessageRead($params);
// 分页
$number = 10;
// 条件
$where = MessageService::UserMessgeListWhere($params);
// 获取总数
$total = MessageService::MessageTotal($where);
$page_total = ceil($total/$number);
$start = intval(($page-1)*$number);
$field = 'id,title,detail,is_read,add_time';
$data = $m->where($where)->field($field)->limit($start, $number)->order('id desc')->select();
// 获取列表
$data_params = array(
'limit_start' => $start,
'limit_number' => $number,
'where' => $where,
);
$data = MessageService::MessageList($data_params);
// 返回数据
$result = [
'total' => $total,
'page_total' => $page_total,
'data' => $this->SetData($data),
'total' => $total,
'page_total' => $page_total,
'data' => $data['data'],
];
$this->ajaxReturn(L('common_operation_success'), 0, $result);
}
/**
* [SetData 数据设置]
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-04-13T23:08:38+0800
* @param [array] $data [数据]
*/
private function SetData($data)
{
if(!empty($data))
{
foreach($data as &$v)
{
$v['add_time'] = date('Y-m-d H:i', $v['add_time']);
}
}
return $data;
}
/**
* [GetIndexWhere 列表条件]
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-04-08T15:13:32+0800
*/
private function GetIndexWhere()
{
$where = array(
'is_delete_time' => 0,
'user_id' => $this->user['id'],
);
return $where;
}
}
?>

View File

@ -0,0 +1,102 @@
<?php
namespace Api\Controller;
use Service\GoodsService;
/**
* 用户商品浏览
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class UserGoodsBrowseController extends CommonController
{
/**
* [_initialize 前置操作-继承公共前置方法]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-03T12:39:08+0800
*/
public function _initialize()
{
// 调用父类前置方法
parent::_initialize();
// 是否ajax请求
if(!IS_AJAX)
{
$this->error(L('common_unauthorized_access'));
}
// 登录校验
$this->Is_Login();
}
/**
* 商品浏览列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-10-09
* @desc description
*/
public function Index()
{
// 参数
$params = $this->data_post;
$params['user'] = $this->user;
// 分页
$number = 10;
// 条件
$where = GoodsService::UserGoodsBrowseListWhere($params);
// 获取总数
$total = GoodsService::GoodsBrowseTotal($where);
$page_total = ceil($total/$number);
$start = intval(($page-1)*$number);
// 获取列表
$data_params = array(
'limit_start' => $start,
'limit_number' => $number,
'where' => $where,
);
$data = GoodsService::GoodsBrowseList($data_params);
// 返回数据
$result = [
'total' => $total,
'page_total' => $page_total,
'data' => $data['data'],
];
$this->ajaxReturn(L('common_operation_success'), 0, $result);
}
/**
* 商品浏览删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-14
* @desc description
*/
public function Delete()
{
// 是否ajax请求
if(!IS_AJAX)
{
$this->error(L('common_unauthorized_access'));
}
$params = $this->data_post;
$params['user'] = $this->user;
$ret = GoodsService::GoodsBrowseDelete($params);
$this->ajaxReturn($ret['msg'], $ret['code'], $ret['data']);
}
}
?>

View File

@ -0,0 +1,81 @@
<?php
namespace Api\Controller;
use Service\IntegralService;
/**
* 用户积分管理
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class UserIntegralController extends CommonController
{
/**
* [_initialize 前置操作-继承公共前置方法]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-03T12:39:08+0800
*/
public function _initialize()
{
// 调用父类前置方法
parent::_initialize();
// 是否ajax请求
if(!IS_AJAX)
{
$this->error(L('common_unauthorized_access'));
}
// 登录校验
$this->Is_Login();
}
/**
* 用户积分列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-28
* @desc description
*/
public function Index()
{
// 参数
$params = $this->data_post;
$params['user'] = $this->user;
// 分页
$number = 10;
// 条件
$where = IntegralService::UserIntegralLogListWhere($params);
// 获取总数
$total = IntegralService::UserIntegralLogTotal($where);
$page_total = ceil($total/$number);
$start = intval(($page-1)*$number);
// 获取列表
$data_params = array(
'limit_start' => $start,
'limit_number' => $number,
'where' => $where,
);
$data = IntegralService::UserIntegralLogList($data_params);
// 返回数据
$result = [
'total' => $total,
'page_total' => $page_total,
'data' => $data['data'],
];
$this->ajaxReturn(L('common_operation_success'), 0, $result);
}
}
?>