Authored by 姜枫

handle merge

... ... @@ -8,10 +8,58 @@
const helpModel = require('../models/help');
/**
* 根据id获取文章数据
* @param id
* @returns {*}
*/
/* const getData = (id)=> {
let contentData = helpModel.contentData().content;
for (var i = 0; i < contentData.length; i++) {
if (contentData[i].id === id) {
return contentData[i]
}
}
};*/
/**
* 根据id获取当前所在位置,拼接面包屑
* @param id
*/
const getNav = (id)=> {
let menuData = helpModel.menuData().menuData;
for (let i = 0; i < menuData.length; i++) {
if (menuData[i].subsets) {
for (let j = 0; j < menuData[i].subsets.length; j++) {
if (menuData[i].subsets[j].id === id) {
return [
{
name: menuData[i].text
}, {
name: menuData[i].subsets[j].text
}
];
}
}
} else {
if (menuData[i].id === id) {
return [
{
name: menuData[i].text
}
];
}
}
}
};
/**
* 主界面
*/
const index = (req, res) => {
const index = (req, res,next) => {
let id = req.query.id || '11';
helpModel.getHelpDetail('81', 1, 15, '').then(result=> {
let content = {content: result.helpdetail_list[0].content};
let data = Object.assign(content, helpModel.menuData());
... ... @@ -24,13 +72,16 @@ const index = (req, res) => {
name: '帮助中心'
}
];
nav = nav.concat(getNav(id));
if (!(typeof (getNav(id)) === "undefined")) {
nav = nav.concat(getNav(id));
}
res.display('detail', {
module: 'help',
page: 'help',
content: Object.assign({nav}, data)
});
});
}).catch(next);
/* let data = Object.assign(getData(id), helpModel.menuData());
let nav = [
... ... @@ -50,52 +101,6 @@ const index = (req, res) => {
});*/
};
/**
* 根据id获取文章数据
* @param id
* @returns {*}
*/
const getData = (id)=> {
let contentData = helpModel.contentData().content;
for (var i = 0; i < contentData.length; i++) {
if (contentData[i].id === id) {
return contentData[i];
}
}
};
/**
* 根据id获取当前所在位置,拼接面包屑
* @param id
*/
const getNav = (id)=> {
let menuData = helpModel.menuData().menuData;
for (let i = 0; i < menuData.length; i++) {
if (menuData[i].subsets) {
for (let j = 0; j < menuData[i].subsets.length; j++) {
if (menuData[i].subsets[j].id === id) {
return [
{
name: menuData[i].text
}, {
name: menuData[i].subsets[j].text
}
];
}
}
} else {
if (menuData[i].id === id) {
return [
{
name: menuData[i].text
}
];
}
}
}
};
module.exports = {
index
... ...
... ... @@ -213,6 +213,15 @@ const getUnion = (req, res, next) => {
}).catch(next);
};
const getChangeType = (req, res, next) => {
const uid = req.user.uid;
const areaCode = req.query.areaCode;
returns.getChangeType(uid, areaCode).then(result => {
res.json(result);
}).catch(next);
};
module.exports = {
index,
refund,
... ... @@ -224,5 +233,6 @@ module.exports = {
exchangeSubmit,
cancelApply,
setEepress,
getUnion
getUnion,
getChangeType
};
... ...
/**
* 个人中心-我的订单model
* @author: 赵彪<bill.zhao@yoho.cn>
* @date: 2016/7/19
*/
'use strict';
const api = global.yoho.API;
... ... @@ -24,6 +30,7 @@ const paymentTypeStr = {
4: '抵消支付'
};
// 订单操作按钮
const btnMap = {
all: [
{
... ... @@ -135,11 +142,17 @@ const _convertUnixTime = src => {
return moment.unix(src).format('YYYY-MM-DD hh:mm:ss');
};
/**
* 获取订单物流信息
* @param { [Object] } addressList
* @param { String } createTime
* @return { [Object] }
*/
const _convertAddress = (addressList, createTime) => {
let addrList = [];
addressList.forEach(addr => {
let address = {
const address = {
time: '',
city: '',
action: ''
... ... @@ -169,7 +182,11 @@ const _convertAddress = (addressList, createTime) => {
return _.reverse(addrList);
};
// 根据订单状态获取当前步骤
/**
* 获取订单状态
* @param { String } st 订单状态
* @return { [Object] }
*/
const _getStepByOrderStatus = st => {
let steps = [
{
... ... @@ -197,6 +214,12 @@ const _getStepByOrderStatus = st => {
return steps;
};
/**
* 获取订单详情
* @param { Number } uid 用户id
* @param { Number } code 订单编码
* @return { Object } Promise 对象
*/
const _getDetail = (uid, code) => {
return api.get('', {
method: 'app.SpaceOrders.detail',
... ... @@ -207,6 +230,13 @@ const _getDetail = (uid, code) => {
});
};
/**
* 获取订单列表
* @param { Number } uid 用户id
* @param { String } type 订单类型
* @param { Number } page 当前页
* @return { Object } Promise 对象
*/
const _getUserOrder = (uid, type, page) => {
return api.get('', {
... ... @@ -302,6 +332,12 @@ const _getUserOrder = (uid, type, page) => {
};
/**
* 删除订单
* @param { Number } uid 用户id
* @param { String } code 订单编码
* @return { Object } Promise 对象
*/
const deleteOrder = (uid, code) => {
return api.get('', {
method: 'app.SpaceOrders.delOrderByCode',
... ... @@ -310,6 +346,12 @@ const deleteOrder = (uid, code) => {
});
};
/**
* 取消订单
* @param { Number } uid 用户id
* @param { Object } data 调用接口所需的数据
* @return { Object } Promise 对象
*/
const cancelOrder = (uid, data) => {
return api.get('', {
method: 'app.SpaceOrders.close',
... ... @@ -320,6 +362,10 @@ const cancelOrder = (uid, data) => {
});
};
/**
* 获取取消订单的理由
* @return { Object } Promise 对象
*/
const getCancelOrderReason = () => {
return api.get('', {
method: 'app.SpaceOrders.closeReasons'
... ... @@ -328,6 +374,12 @@ const getCancelOrderReason = () => {
});
};
/**
* 获取快递信息
* @param { Number } uid 用户id
* @param { String } code 订单编号
* @return { Object } Promise 对象
*/
const getExpressInfo = (uid, code) => {
return api.get('', {
method: 'app.express.get',
... ... @@ -338,6 +390,13 @@ const getExpressInfo = (uid, code) => {
});
};
/**
* 获取全部订单
* @param { Number } uid 用户id
* @param { String } type 订单类型
* @param { Number } page 页码
* @return { Object } Promise 对象
*/
const getOrderData = (uid, type, page) => {
const navBar = {
tabs: [
... ... @@ -411,10 +470,16 @@ const getOrderData = (uid, type, page) => {
});
};
/**
* 获取订单详情
* @param { Number } uid 用户id
* @param { String } code 订单编号
* @return { Object } Promise 对象
*/
const getOrderDetail = (uid, code) => {
return api.all([_getDetail(uid, code), getExpressInfo(uid, code)]).then(result => {
let detail = result[0] && camelCase(result[0].data);
let express = result[1] && camelCase(result[1].data);
const detail = result[0] && camelCase(result[0].data);
const express = result[1] && camelCase(result[1].data);
const st = parseInt(detail.status, 10);
... ... @@ -460,6 +525,11 @@ const getOrderDetail = (uid, code) => {
});
};
/**
* 编辑订单
* @param { Object } data 调用接口所需的数据
* @return { Object } Promise 对象
*/
const editOrder = data => {
return api.get('', {
method: 'app.SpaceOrders.updateDeliveryAddress',
... ... @@ -474,6 +544,12 @@ const editOrder = data => {
});
};
/**
* 重新购买
* @param { Number } uid 用户id
* @param { String } code 订单编号
* @return { Object } Promise 对象
*/
const reAddCart = (uid, code) => {
return api.get('', {
method: 'app.Shopping.readd',
... ... @@ -483,6 +559,12 @@ const reAddCart = (uid, code) => {
});
};
/**
* 确认收货
* @param { Number } uid 用户id
* @param { String } code 订单编号
* @return { Object } Promise 对象
*/
const confirmReceive = (uid, code) => {
return api.get('', {
method: 'app.SpaceOrders.confirm',
... ...
... ... @@ -192,6 +192,23 @@ const getRefundBank = () => {
});
};
/**
* 获取换货类型API
* @param { number } uid 用户uid
* @param { number } areaCode 地区码
* @return { Object } 换货类型
*/
const getChangeTypeAsync = (uid, areaCode) => {
return api.get('', {
method: 'app.change.getDelivery',
uid: uid,
area_code: areaCode
}, {
code: 200
});
};
module.exports = {
getExpressCompanyAsync,
getOrderInfoAsync,
... ... @@ -204,6 +221,7 @@ module.exports = {
changeSubmitAsync,
setExpressNumberAsync,
cancelReturnAsync,
getRefundBank
getRefundBank,
getChangeTypeAsync
};
... ...
... ... @@ -587,6 +587,27 @@ const getProductInfo = (productId, productSkn) => {
});
};
// `
/**
* 获取换货类型
* @param { number } uid 用户uid
* @param { number } areaCode 地区码
* @return { Object } 换货类型
*/
const getChangeType = (uid, areaCode) => {
return returnsAPI.getChangeTypeAsync(uid, areaCode).then(result => {
camelCase(result);
if (result.data) {
result.data.forEach(data => {
data.isDefault = data.isDefault === 'Y';
});
}
return result;
});
};
/**
* 获取换货商品列表
* @function getChangeGoodsList
... ... @@ -729,5 +750,6 @@ module.exports = {
submitChange,
cancelReturnApply,
setBackEepress,
getUnionData
getUnionData,
getChangeType
};
... ...
... ... @@ -45,6 +45,7 @@ router.post('/return/setEepress', returns.setEepress);
router.get('/return/getProductInfo', returns.getProductInfo);
router.get('/return/submitExchange', returns.exchangeSubmit);
router.get('/return/unionInfo', returns.getUnion);
router.get('/return/getChangeType', returns.getChangeType);
// 个人中心首页/收货地址
router.get('/address', auth, address.index);
... ...
{{# refund}}
<div class="refund-wrap">
<a href="/help?id=43" class="refund-notice">退货须知</a>
{{> returns/returns-status}}
<h4 class="third-title">选择退货商品</h4>
... ...
... ... @@ -53,8 +53,6 @@
</div>
<div class="change-type">
<span class="box-title">换货方式</span>
<span class="type active" data-type="10">寄回换货</span>
<span class="type" data-type="11">上门取货</span>
</div>
{{#address}}
... ...
... ... @@ -314,7 +314,7 @@ const relateMobile = (req, res, next) => {
let areaCode = req.body.areaCode || '86';
let sourceType = req.body.sourceType;
return BindService.relateMobileAsync(openId, sourceType, mobile, areaCode).then(result => {
BindService.relateMobileAsync(openId, sourceType, mobile, areaCode).then(result => {
if (result && result.code) {
if (result.code === 200 && result.data && result.data.uid) {
let refer = helpers.urlFormat('/passport/thirdlogin/relatesuccess', {
... ...
... ... @@ -193,7 +193,7 @@ let msgCaptcha = (req, res, next) => {
};
/**
* 注册接口
* 手机注册
*/
let mobileRegister = (req, res, next) => {
Promise.coroutine(function*() {
... ...
/**
* 订单 controller
* @author: TODO
* @author: xuqi<qi.xu@yoho.cn>
* @date: 2016/07/04
*/
... ...
... ... @@ -3,9 +3,9 @@
<ul class="about-us clearfix">
<li><a href="{{siteUrl}}">BLK首页</a></li>
<li><a href="{{siteUrl}}/help">客户服务</a></li>
<li><a href="{{siteUrl}}/#">支付方式</a></li>
<li><a href="{{siteUrl}}/#">配送方式</a></li>
<li><a href="{{siteUrl}}/#">售后服务</a></li>
<li><a href="{{siteUrl}}/help?id=2">支付方式</a></li>
<li><a href="{{siteUrl}}/help?id=31">配送方式</a></li>
<li><a href="{{siteUrl}}/help?id=41">售后服务</a></li>
</ul>
<div class="record-info">
<p>
... ...
... ... @@ -61,7 +61,7 @@
"uuid": "^2.0.2",
"winston": "^2.2.0",
"winston-daily-rotate-file": "^1.1.4",
"yoho-node-lib": "0.0.30"
"yoho-node-lib": "0.0.31"
},
"devDependencies": {
"autoprefixer": "^6.3.6",
... ...
... ... @@ -7,6 +7,7 @@
var queryId = location.search.split('=')[1] || '1';
var $cate = $('.cateId-' + queryId);// 当前分类
var $subsets = $('.subsets');
var parentID = queryId.substr(0, 1);// 一级分类id
/**
* 目录切换
... ... @@ -18,7 +19,6 @@ $subsets.click(function() {
var parentId = 'parentId-' + className.split('-')[1];
var $child = $this.parent().find('.' + parentId);// 当前子分类
if ($this.hasClass('open')) {
$child.hide();
$this.removeClass('open').children('.plus').css('background-image', 'url(\'../img/help/plus.png\')');
... ... @@ -29,11 +29,6 @@ $subsets.click(function() {
});
if (!$cate.hasClass('big-category')) {
var parentId = queryId.substr(0, 1);
$('.parentId-' + parentId).show();
$('.cateId-' + parentId).find('.plus').css('background-image', 'url(\'../img/help/minus.png\')');
$('.parentId-' + parentID).show();
$('.cateId-' + parentID).find('.plus').css('background-image', 'url(\'../img/help/minus.png\')');
}
... ...
... ... @@ -21,6 +21,9 @@ var reg = new RegExp(/^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57
require('./me');
require('../plugins/check');
require('yoho-jquery-placeholder');
$('[placeholder]').placeholder();
$(function() {
var address = cascadingAddress({el: '#address'});
... ...
... ... @@ -15,6 +15,7 @@ var phoneReg = /^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$/;
var validate = require('./order/validation');
var imgBoxTpl = require('../../tpl/me/thumbnail.hbs');
var changeTypeTpl = require('../../tpl/me/change-type.hbs');
var validateMap = {
user: {
... ... @@ -450,13 +451,46 @@ function bindUploadEvent() {
});
}
function bindKeyUpEvent() {
$('.mark-text').on('keyup', function() {
var $this = $(this),
str = $.trim($this.val());
if (str.length > 100) {
str = str.substring(0, 100);
}
$this.val(str);
});
}
function getChangeType(areaCode) {
$.ajax({
url: '/me/return/getChangeType',
data: {
areaCode: areaCode
}
}).done(function(result) {
var changeTypeHtml = changeTypeTpl({
type: result.data
});
if (changeTypeHtml.length) {
$('.change-type .box-title').after(changeTypeHtml);
bindTypeEvent();
}
});
}
$(document).on('ready', function() {
var areaCode = $('#city').data('code');
getProductInfo();
getChangeType(areaCode);
initAddr(areaCode);
bindSelectEvent();
bindTypeEvent();
bindCheckboxEvent();
bindConfirmEvent();
initAddr($('#city').data('code'));
bindBlurEvent();
bindUploadEvent();
bindKeyUpEvent();
});
... ...
... ... @@ -59,7 +59,7 @@ function cancelOrder(code, onCancel) {
]
}).show();
} else {
new _alert('<h1>出错了!修改失败!</h1>').show();
new _alert('<h1>' + result.message + '</h1>').show();
}
}).fail(function(err) {
... ...
... ... @@ -11,8 +11,11 @@ module.exports = function(code) {
if (result.code === 200) {
location.href = '/shopping/cart';
} else {
new _alert('出错了,请重试!').show();
new _alert(result.message).show();
}
}).fail(function(err) {
console.log(err);
new _alert('出错了!').show();
});
};
... ...
... ... @@ -223,6 +223,11 @@ $refundTable.on('change', '.refund-reason', function() {
upload.up({
callback: function(result) {
if (result && result.code === 200) {
// 避免异步上传导致数量不统一
num = $this.data('num') || 0;
if (num > 3) {
return;
}
$this.siblings('.img-up-tip').text(++num + '/4');
$this.data('num', num);
$this.before(imgFn(result));
... ...
... ... @@ -50,6 +50,7 @@ var Bll = {
require('./me');
require('../plugins/check');
require('yoho-jquery-placeholder');
// 第一步:身份验证
require('../me/setting/validate');
... ... @@ -57,6 +58,7 @@ require('../me/setting/validate');
// 第二步:操作
require('../me/setting/operate');
$('[placeholder]').placeholder();
// 编辑头像移入移出切换效果
$('.user-icon').hover(function() {
... ...
... ... @@ -41,6 +41,10 @@ var validatePhoneNumLocal = function(phoneNum) {
}
};
require('yoho-jquery-placeholder');
$('[placeholder]').placeholder();
/**
* 绑定手机号码部分
*/
... ...
... ... @@ -28,6 +28,10 @@ var disableSMSBtn = function() {
}
};
require('yoho-jquery-placeholder');
$('[placeholder]').placeholder();
// 发送手机验证码
$sms.click(function() {
var mobile = $('#real-mobile').val();
... ...
... ... @@ -318,9 +318,9 @@ exports.init = function() {
var name = $clickItem.data('value');
var $selectedItem = $clickItem.siblings('.selected');
$selectedItem.find('.iconfont').html('').removeClass('selected');
$selectedItem.find('.iconfont').html('').end().removeClass('selected');
$clickItem.find('.iconfont').html(selectedIcon).addClass('selected');
$clickItem.find('.iconfont').html(selectedIcon).end().addClass('selected');
$regionSelectHeader.find('.name').html(name);
$regionCodeText.text(areaCode);
... ...
... ... @@ -287,9 +287,9 @@ $regionSelectList.on('click', '.option', function() {
var name = $clickItem.data('value');
var $selectedItem = $clickItem.siblings('.selected');
$selectedItem.find('.iconfont').html('').removeClass('selected');
$selectedItem.find('.iconfont').html('').end().removeClass('selected');
$clickItem.find('.iconfont').html(selectedIcon).addClass('selected');
$clickItem.find('.iconfont').html(selectedIcon).end().addClass('selected');
$regionSelectHeader.find('.name').html(name);
$regionCodeText.text(areaCode);
... ...
... ... @@ -534,9 +534,8 @@ exports.init = function() {
var name = $clickItem.data('value');
var $selectedItem = $clickItem.siblings('.selected');
$selectedItem.find('.iconfont').html('').removeClass('selected');
$clickItem.find('.iconfont').html(selectedIcon).addClass('selected');
$selectedItem.find('.iconfont').html('').end().removeClass('selected');
$clickItem.find('.iconfont').html(selectedIcon).end().addClass('selected');
$regionSelectHeader.find('.name').html(name);
$regionCodeText.text(areaCode);
... ...
... ... @@ -39,6 +39,8 @@ var pkgCache = {};
var $pkgList;
require('yoho-jquery-placeholder');
require('yoho-jquery-dotdotdot');
require('../plugins/check'); // before 地址和发票
... ... @@ -48,6 +50,9 @@ require('./order/invoice'); // 发票
lazyLoad($('img.lazy'));
// IE8 placeholder
$('[placeholder]').placeholder();
// dot
$('.brand-and-name .name').dotdotdot({
wrap: 'letter'
... ...
... ... @@ -13,6 +13,34 @@
text-align: center;
background: #fff;
}
.nav {
li {
cursor: pointer;
padding: 10px 15px;
width: 200px;
font-size: 14px;
.plus {
cursor: pointer;
margin-right: 10px;
height: 14px;
width: 14px;
background-repeat: no-repeat;
background-image: resolve('help/plus.png');
background-size: 14px 14px;
}
.mult {
margin-right: 26px;
height: 14px;
width: 14px;
}
}
.smll-category {
display: none;
}
}
}
.help-main {
... ... @@ -22,5 +50,3 @@
}
}
@import "menu";
... ...
.nav {
li {
cursor: pointer;
padding: 10px 15px;
width: 200px;
font-size: 14px;
.plus {
cursor: pointer;
margin-right: 10px;
height: 14px;
width: 14px;
background-repeat: no-repeat;
background-image: resolve('help/plus.png');
background-size: 14px 14px;
}
}
.smll-category {
display: none;
}
}
.mult {
margin-right: 26px;
height: 14px;
width: 14px;
}
... ... @@ -105,9 +105,10 @@
.type {
display: inline-block;
width: 120px;
min-width: 120px;
height: 40px;
line-height: 40px;
padding: 0 10px;
margin-right: 15px;
border: 1px solid #f1f1f1;
text-align: center;
... ...
.refund-wrap {
position: relative;
.refund-notice {
width: 70px;
height: 24px;
line-height: 26px;
text-align: center;
font-size: 12px;
border: 1px solid #eee;
display: block;
cursor: pointer;
position: absolute;
top: -64px;
right: 0;
}
.returns-status {
margin-bottom: 40px;
}
... ...
{{#type}}
<span class="type {{#if isDefault}}active{{/if}}" data-type="{{id}}">{{name}}</span>
{{/type}}
... ...