Authored by wenjiekong

手机验证功能、地址管理部分接口

... ... @@ -246,3 +246,39 @@ exports.checkMobile = (req, res, next) => {
res.json(result);
}).catch(next);
};
/**
* 校验短信验证码-ajax
*/
exports.checkMobileMsg = (req, res, next) => {
let uid = '8039836';
// 真实数据输出
accountService.checkMobileMsg(req, uid).then(result => {
res.json(result);
}).catch(next);
};
/**
* 向验证手机号发送短信-ajax
*/
exports.sendMobileMsg = (req, res, next) => {
let uid = '8039836';
// 真实数据输出
accountService.sendMobileMsg(req, uid).then(result => {
res.json(result);
}).catch(next);
};
/**
* 修改验证手机号
*/
exports.modifyMobile = (req, res, next) => {
let uid = '8039836';
// 真实数据输出
accountService.modifyMobile(req, uid).then(result => {
res.json(result);
}).catch(next);
};
\ No newline at end of file
... ...
/**
* 个人中心-地址管理
* 个人中心---地址管理
* @author gaohongwei <hongwei.gao@yoho.cn>
* @date: 2016/9/5
*/
'use strict';
const mRoot = '../models';
const addressService = require(`${mRoot}/address-service`); // user model
/**
* 地址管理列表
*/
exports.index = (req, res, next) => {
let channel = req.query.channel || req.cookies._Channel || 'boys';
let uid = '8039836';
let responseData = {
module: 'home',
page: 'address'
};
// 真实数据输出
addressService.getAddressInfo(channel, uid).then(result => {
responseData.headerData = result.headerData;
responseData.meAddressPage = true;
responseData.address = result.address;
res.render('home/address/address', responseData);
}).catch(next);
};
/**
* 编辑修改地址
*/
exports.editAddress = (req, res, next) => {
let uid = '8039836';
// 真实数据输出
addressService.getAddressInfo(req, uid).then(result => {
res.json(result);
}).catch(next);
};
/**
* 添加保存地址
*/
exports.saveAddress = (req, res, next) => {
let uid = '8039836';
// 真实数据输出
addressService.saveAddress(req.body, uid).then(result => {
res.json(result);
}).catch(next);
};
\ No newline at end of file
... ...
... ... @@ -142,6 +142,23 @@ const modifyPwd = (uid, newPwd) => {
};
/**
* 发送验证
* @param type $uid
* @param type $mobile
* @param type $area
* @return type
*/
const sendMobileMsg = (uid, mobile, area) => {
return api.get('', {
method: 'web.passport.sendcode',
uid: uid,
mobile: mobile,
area: area
});
};
module.exports = {
getVerifyInfo,
checkEmailCode,
... ... @@ -153,5 +170,6 @@ module.exports = {
checkVerifyMobile,
sendVerifyEmail,
modifyVerifyMobile,
modifyPwd
modifyPwd,
sendMobileMsg
};
... ...
... ... @@ -770,16 +770,16 @@
/**
* 向验证手机号发送短信-ajax
*/
const sendMobileMsg = (req) => {
const sendMobileMsg = (req, uid) => {
return co(function*() {
let mobile = req.body.mobile || '',
resqData = {code: 400},
uid = req.uid;
resqData = {code: 400};
let mobileInfo = handleMobile(mobile);
console.info(mobileInfo);
resqData = yield accountApi.sendMobileMsg(uid, mobileInfo.mobile, mobileInfo.area);
console.info(resqData);
return resqData;
})();
};
... ... @@ -787,11 +787,10 @@
/**
* 校验短信验证码-ajax
*/
const checkMobileMsg = (req) => {
const checkMobileMsg = (req, uid) => {
return co(function*() {
let mobile = req.body.mobile || '',
code = req.body.code || '',
uid = req.uid,
resqData;
if (mobile === '') {
... ... @@ -882,11 +881,10 @@
/**
* 修改验证手机号
*/
const modifyMobile = (req) => {
const modifyMobile = (req, uid) => {
return co(function*() {
let mobile = req.body.mobile || '',
code = req.body.code || '',
uid = req.uid,
resqData = {code: 400};
if (mobile === '') {
... ...
/**
* 个人中心---地址管理
* @author gaohongwei <hongwei.gao@yoho.cn>
* @date: 2016/8/30
*/
'use strict';
const api = global.yoho.API;
/**
* 地址数据
*
* @param int $uid 用户ID
* @param int $limit 分页大小参数(默认10条)
* @return array 地址接口返回的数据
*/
exports.addressData = (uid, lmt) => {
let limit = lmt ? lmt : 10;
return api.get('', {
method: 'app.address.gethidden',
uid: uid,
limit: limit
});
};
/**
* 保存地址数据
*
* @param int $uid 用户ID
* @param string $address 地址信息
* @param int $area_code 城市码
* @param string $consignee 收货人
* @param string $email 邮箱地址
* @param int $id 地址唯一标识符id
* @param string $mobile 手机号码
* @param string $phone 电话号码
* @param string $zip_code 邮编
* @return array 地址接口返回的数据
*/
exports.saveAddressData = (params) => {
if (params.id !== null) {
params.method = 'app.address.update';//修改
}else {
delete params.id;
params.method = 'app.address.add';//添加
}
return api.get('', params);
};
/**
* 删除地址
*
* @param int $uid 用户ID
* @param int $id 地址唯一标识符id
* @return array 接口返回的数据
*/
exports.deleteAddress = (uid, id) => {
return api.get('', {
method: 'app.address.del',
uid: uid,
id: id
});
};
\ No newline at end of file
... ...
/**
* 个人中心---地址管理
* @author gaohongwei <hongwei.gao@yoho.cn>
* @date: 2016/9/5
*/
'use strict';
const Promise = require('bluebird');
const co = Promise.coroutine;
const _ = require('lodash');
const headerModel = require('../../../doraemon/models/header');
const addressApi = require('./address-api');
/*
* 个人中心-地址管理列表
*
* @param int $uid 用户ID
* @return array|mixed 处理之后的返回数据
*
*/
const getAddressList = (channel, uid) => {
return co(function*() {
let result = [],
addressData = yield addressApi.addressData(uid, 10);
if (addressData.data) {
let addressList = addressData.data;
for (let i = 0; i < addressList.length; i++) {
result.push({
id: addressList[i].address_id || '',
addressee: addressList[i].consignee || '',
address: addressList[i].area + addressList[i].address + (addressList[i].zip_code|| ''),
phone: (addressList[i].mobile|| '') + (addressList[i].phone|| ''),
isPreferred: addressList[i].is_default == 'Y' ? 'true' : ''//默认地址
});
}
}
console.info(addressData);
return result;
})();
};
/**
* 地址管理列表
*/
exports.getAddressInfo = (channel, uid) => {
return co(function*() {
let resq = {},
addressList = yield getAddressList(channel, 10);
resq.headerData = yield headerModel.requestHeaderData(channel);
resq.address = {
submitId: 'address-info',
addressList: addressList,
data: [{
key: 'addressName',
labelText: '收货人姓名:',
value: '',
tips: '请输入收货人姓名'
},{
isSelect: true,
labelText: '省份:',
tips: '注:标"*"的为支持货到付款的地区',
tipsUrl: '/help/?category_id=48',
selects: [{
key: 'province'
},
{
key: 'city'
},
{
key: 'areaCode'
}
]
},{
key: 'address',
labelText: '地址:',
value: '',
tips: '请填写详细地址'
},{
key: 'zipCode',
labelText: '邮编:',
value: '',
tips: '请输入收货人所在地邮编号'
},{
key: 'phone',
labelText: '固定电话:',
value: '',
tips: '请输入你的联系电话,可以为空哦'
},{
key: 'mobile',
labelText: '手机号码:',
value: '',
tips: '填写手机号便于接收发货和收货通知'
},{
key: 'email',
labelText: '电子邮件:',
value: '',
tips: '用来接收订单提醒邮件,便于您及时了解订单状态'
}]
}
return resq;
})();
};
/**
* 编辑修改地址
*/
exports.editAddress = (req, uid) => {
return co(function*() {
let id = req.body.id || null,
respData = {code: 400};
if (id === null) {
return respData;
}
let data = yield addressApi.addressData(uid);
respData.code = data.code;
// 获取该用户对应的地址id数据
if (data.data) {
let addressList = data.data;
for (let i = 0; i < addressList.length; i++) {
if (addressList[i].address_id == id) {
respData.data = addressList[i];
break;
}
}
}
if (!('data' in respData)) {
respData.message = '无数据返回';
}
return respData;
})();
};
/**
* 添加保存地址
*/
exports.saveAddress = (params, uid) => {
return co(function*() {
let query = {
uid: uid,
address: _.trim(params.address || ''),
area_code: _.trim(params.areaCode || ''),
consignee: _.trim(params.addressName || ''),
email: _.trim(params.email || ''),
id: params.addrId === '0' ? null : params.addrId,
mobile: _.trim(params.mobile || ''),
phone: _.trim(params.phone || ''),
zip_code: _.trim(params.zipCode || '')
}
if (query.uid === '' || query.address === '' ||
query.area_code === '' || query.consignee === '' ||
query.email === '' || query.zip_code === '') {
return {
code: 400,
message: '缺失必填项'
}
}
let respData = yield addressApi.saveAddressData(query);
console.info(respData);
return respData;
})();
};
\ No newline at end of file
... ...
... ... @@ -26,6 +26,7 @@ const FavoriteController = require(`${cRoot}/Favorite`);
const CouponsController = require(`${cRoot}/coupons`);
const UserController = require(`${cRoot}/user`);
const AccountController = require(`${cRoot}/account`);
const AddressController = require(`${cRoot}/address`);
const homeNav = [
{
... ... @@ -190,6 +191,18 @@ router.get('/account/mailresult', [getCommonHeader, getHomeNav], AccountControll
router.post('/account/checkmobile', AccountController.checkMobile);
router.post('/account/checkmobilemsg', AccountController.checkMobileMsg);
router.post('/account/sendmobilemsg', AccountController.sendMobileMsg);
router.post('/account/modifymobile', AccountController.modifyMobile);
router.get('/address', [getCommonHeader, getHomeNav], AddressController.index);
router.get('/address/editAddress', AddressController.editAddress);
router.post('/address/saveAddress', AddressController.saveAddress);
router.get('/favorite', FavoriteController.index);
router.get('/coupons', CouponsController.index);
... ...
{{> layout/header}}
<div class="user-me-page me-page yoho-page clearfix">
{{> path}}
{{> navigation}}
{{# address}}
{{> path}}
{{> navigation}}
<div class="me-main">
<div class="address block">
<div class="title">
... ... @@ -88,4 +87,3 @@
{{> help-us}}
</div>
{{> layout/footer}}
... ...
/**
* 个人中心页-地址管理
* @author: wsl<shuiling.wang@yoho.cn>
* @date: 2016/02/24
*/
var $ = require('yoho-jquery'),
regionCode = require('./common-address'),
dialog = require('../common/dialog'),
Alert = dialog.Alert;
var active;
var $del = $('.address-del'),
$edit = $('.address-modify'),
$input = $('.input-1');
var address = {
evil: function(fn) {
var Fn = Function;
return new Fn('return ' + fn)();
},
clearAddrForm: function() {
$('#addressName').val('');
$('#address').val('');
$('#zipCode').val('');
$('#phone').val('');
$('#mobile').val('');
$('#email').val('');
$('#addrId').val(0);
$('#province').val(0);
$('#city').val(0);
$('#areaCode').val(0).hide();
$('#btn-reset').hide();
$('#form-status').html('添加新地址');
},
editAddr: function(id) {
$.getJSON('/home/address/editAddress?id=' + id, function(jsonData) {
if (jsonData.code === 200) {
$('#form-status').html('修改地址');
$('#addressName').val(jsonData.data.consignee);
regionCode.loadAllData(jsonData.data.area_code, {});
$('#address').val(jsonData.data.address);
$('#email').val(jsonData.data.email);
$('#phone').val(jsonData.data.phone);
$('#mobile').val(jsonData.data.mobile);
$('#zipCode').val(jsonData.data.zip_code);
$('#addrId').val(jsonData.data.address_id);
$('#btn-reset').show();
}
});
},
saveAddr: function(callbackFunc) {
$.post('/home/address/saveAddress', $('#address-form').serialize(), function(data) {
if (data.code === 200) {
location.reload();
} else {
active = new Alert(data.message);
active.show();
}
}, 'json');
},
// 删除地址
delAddr: function(addrId) {
$.getJSON('/home/address/delAddress?id=' + addrId, function(jsonData) {
if (jsonData.code === 200) {
$('.address-list').find('li[addressId=' + addrId + ']').remove();
if (addrId === $('#addrId').val()) {
address.clearAddrForm();
}
} else {
active = new Alert('删除失败');
active.show();
}
});
},
setDefaultAddr: function(addrId) {
var oldBtn = $('.address-list').find('.default-btn'),
oldLi = $('.address-list').find('.default-btn').parents('li'),
curLi = $('.address-list').find('li[addressId=' + addrId + ']'),
curBtn = curLi.find('.set-default-btn');
$.getJSON('/home/address/defaultAddress?id=' + addrId, function(jsonData) {
if (jsonData.code === 200) {
oldBtn.attr('class', 'btn-c3 set-default-btn');
oldLi.removeClass('preferred');
oldBtn.html('<span>设为常用地址</span>');
curBtn.attr('class', 'btn-c2 default-btn');
oldBtn.html('<span>设为常用地址</span>');
curLi.addClass('preferred');
} else {
active = new Alert('设置失败');
active.show();
}
});
}
};
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(obj, start) {
var i,
j;
for (i = (start || 0), j = this.length; i < j; i++) {
if (this[i] === obj) {
return i;
}
}
return -1;
};
}
// 获取地址id
function getAddressId(dom) {
var li = dom.parents('.address-content'),
id = li.attr('addressId');
return id;
}
// 表单焦点显示
function focusAction(opt) {
var msg = '';
if (opt.inputName === 'addressName') {
msg = '真实姓名在2到5个汉字之间';
}
if (opt.inputName === 'address') {
msg = '请填写详细地址';
}
if (opt.inputName === 'zipCode') {
msg = '请输入收货人所在地邮编号';
}
if (opt.inputName === 'phone') {
msg = '格式例如:0577-88888888';
}
if (opt.inputName === 'mobile') {
msg = '请输入手机号,如1360000000';
}
if (opt.inputName === 'email') {
msg = '用来接收订单提醒邮件,便于您及时了解订单状态';
}
opt.$checkInfo.removeClass('form-prompt').addClass('form-focus').html(msg);
}
// 表单失去焦点显示
function blurAction(opt) {
var regular = '',
res = true,
msg = '输入正确',
domClass = 'form-info form-success',
value = opt.val;
if (opt.inputName === 'addressName') {
regular = /^[\u4e00-\u9fa5]{2,5}$/;
if (opt.len < 1 || opt.len > 12) {
msg = '真实姓名在2到5个汉字之间,请确认';
res = false;
domClass = 'form-info form-error';
} else if (regular.test(opt.val) === false) {
msg = '真实姓名至少2个中文,最多5个中文';
res = false;
domClass = 'form-info form-error';
}
}
if (opt.inputName === 'address') {
if (opt.len < 2) {
msg = '请填写详细地址';
res = false;
domClass = 'form-info form-error';
}
}
if (opt.inputName === 'zipCode') {
regular = /^[0-9]{6}$/;
if (opt.len === 0) {
msg = '请输入收货人所在地邮编号';
res = false;
domClass = 'form-info form-error';
} else if (regular.test(opt.val) === false) {
msg = '你输入的邮编式不正确';
res = false;
domClass = 'form-info form-error';
}
}
if (opt.inputName === 'phone') {
regular = /^(0[0-9]{2,3}\-)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$/;
if (opt.len === 0) {
msg = '你真的不想留联系电话了吗?';
res = true;
domClass = 'form-info form-success';
} else if (regular.test(opt.val) === false) {
msg = '你输入的联系电话格式不正确';
res = false;
domClass = 'form-info form-error';
}
}
if (opt.inputName === 'mobile') {
regular = /^1[3|4|5|8|7][0-9]{9}$/;
if (opt.len !== 11) {
msg = '手机号码必须是11位的,请确认';
res = false;
domClass = 'form-info form-error';
} else if (regular.test(opt.val) === false) {
msg = '您输入的手机号格式不正确';
res = false;
domClass = 'form-info form-error';
}
}
if (opt.inputName === 'email') {
regular = '^[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]+\.)+([a-z]{2}|aero|arpa|biz|com|coop|' +
'edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)$';
if (value.match(regular) === null || opt.len === 0) {
msg = '你输入的邮件地址格式不正确';
res = false;
domClass = 'form-info form-error';
}
}
opt.$checkInfo.removeClass().addClass(domClass).html(msg);
return res;
}
// 地址表单验证
function checkAddressForm(dom, action) {
var val = dom.val(),
$domParent = dom.parent(),
opt = {
val: val,
len: val.length,
$domParent: dom.parent(),
$checkInfo: $domParent.find('span'),
inputName: dom.attr('name')
};
if (action === 'focus') {
focusAction(opt);
}
if (action === 'blur') {
return blurAction(opt);
}
}
function fullOneValidator() {
var phone = $('#phone').next(),
mobile = $('#mobile').next();
if (mobile.hasClass('form-success') && !phone.hasClass('form-error') && $('#phone').val().length === 0) {
phone.removeClass().addClass('form-prompt form-info').html('请输入你的联系电话,可以为空哦');
return true;
} else if (phone.html() === '输入正确' && !mobile.hasClass('form-error') && $('#mobile').val().length === 0) {
mobile.removeClass().addClass('form-prompt form-info').html('填写手机号便于接收发货和收货通知');
return true;
} else if (!mobile.hasClass('form-success') && phone.html() !== '输入正确') {
phone.removeClass().addClass('form-success form-info').html('你真的不想留联系电话了吗?');
mobile.removeClass().addClass('form-prompt form-info').html('填写手机号便于接收发货和收货通知');
$('#mobile').focus();
return false;
}
}
// 校验所有内容
function checkAllForm() {
var arr = [];
$.each($input, function(key, item) {
arr.push(checkAddressForm($(item), 'blur'));
});
arr.push(fullOneValidator());
$.each($('.form-info'), function(key, item) {
if ($(item).hasClass('form-error')) {
$(item).prev().focus();
return false;
}
});
if (arr.indexOf(false) === -1) {
return true;
} else {
return false;
}
}
$(document).on('click', '.set-default-btn', function() {
var id = getAddressId($(this));
address.setDefaultAddr(id);
});
$del.on('click', function() {
var id = getAddressId($(this));
address.delAddr(id);
});
$edit.on('click', function() {
var id = getAddressId($(this));
address.editAddr(id);
$('#btn-reset').show();
});
$input.on('focus', function() {
checkAddressForm($(this), 'focus');
});
$input.on('blur', function() {
checkAddressForm($(this), 'blur');
});
$('#address-info').on('click', function() {
if (checkAllForm()) {
address.saveAddr();
}
});
$(document).ready(function() {
regionCode.loadAllData(
0,
{
provinceDomId: 'province',
cityDomId: 'city',
areaDomId: 'areaCode'
}
);
address.clearAddrForm();
$('#btn-reset').click(function() {
address.clearAddrForm();
});
});
... ...
... ... @@ -305,7 +305,6 @@ function toHome() {
// ajax公共处理模块
function ajaxAction(opt, flag) {
$.post(opt.url, opt.data, function(data) {
console.info(data);
if (data.code === 200) {
if (flag) {
opt.hrefUrl += '&checkCode=' + data.data;
... ...