Authored by htoooth

Merge branch 'master' into feature/yohood

... ... @@ -16,11 +16,19 @@ const index = co(function* (channel) {
const removeBlack = (remoteIp) => {
let key = `pc:limiter:${remoteIp}`,
key10m = `pc:limiter:10m:${remoteIp}`;
key10m = `pc:limiter:10m:${remoteIp}`,
keyMax = `pc:limiter:max:${remoteIp}`,
key10mMax = `pc:limiter:10m:max:${remoteIp}`,
synchronizeKey = `pc:limiter:synchronize:${remoteIp}`,
spiderKey = `pc:limiter:spider:${remoteIp}`;
return Promise.all([
cache.delAsync(key),
cache.delAsync(key10m)
cache.delAsync(key10m),
cache.delAsync(keyMax),
cache.delAsync(key10mMax),
cache.delAsync(synchronizeKey),
cache.delAsync(spiderKey)
]);
};
... ...
... ... @@ -125,7 +125,8 @@ const orderSubmitAsync = (uid, cartType, addressId, deliveryTime, deliveryWay, p
invoices_type: other.invoicesType,
invoices_title: other.invoicesTitle,
invoice_content: other.invoicesContent,
receiverMobile: other.receiverMobile
receiverMobile: other.receiverMobile,
buyerTaxNumber: other.taxNumber
});
}
... ...
... ... @@ -70,6 +70,15 @@ const submit = (uid, cartType, p, remoteIp) => {
p.addressId = crypto.decrypt('', `${p.addressId}`);
}
// 5.8.1 发票优化需求
// 只接受电子发票(1 纸质 2 电子),发票内容为明细(id 12:明细)
if (p.invoicesType) {
Object.assign(p, {
invoicesType: 2,
invoicesContent: 12
});
}
return ensureApi.orderSubmitAsync(uid, cartType, p.addressId, p.deliveryTime,
p.deliveryWay, p.paymentType, p.paymentId, p.printPrice, p, remoteIp).then(result => {
if (result.code === 200) {
... ...
... ... @@ -77,21 +77,22 @@
<script id="invoice-chose-tpl" type="text/html">
<div class="invoice-close"><i class="iconfont">&#xe60d;</i></div>
<p class="invoice-header">发票信息</p>
<ul class="invoice-type">
<li class="el-invoice focus">电子发票</li>
<li class="pa-invoice">纸质发票</li>
</ul>
<div class="invoice-content el-content">
<p class="invoice-type-text">
<span class="row-title">发&nbsp;票&nbsp;类&nbsp;型:</span>
电子发票
</p>
<p class="el-tip">
※ 电子发票是税务局认可的有效凭证,其法律效力、基本用途及使用规定同纸质发票,如需纸质发票可自行下载打印。<br>
<a href="/help/detail?id=33&contId=139" target="_blank">什么是电子发票?</a>
<a href="/help/detail?id=33&contId=139" target="_blank">查看发票须知</a>
</p>
<ul>
<li class="invoice-title invoice-row">
<span class="row-title">
<em>*</em>
票抬头
&nbsp;票&nbsp;抬&nbsp;头:
</span>
<div class="row-content">
<span class="radio-wrap">
... ... @@ -100,36 +101,41 @@
<span class="radio-wrap">
<label class="rbt-2 radio-btn" data-id="2"></label> 单位
</span>
<div class="company-row hide">
</div>
</li>
<li class="invoice-title-name invoice-row company-row hide">
<span class="row-title">
<em>*</em>
单&nbsp;位&nbsp;名&nbsp;称:
</span>
<div class="row-content">
<input id="company-name" class="company-name" type="text" placeholder="请填写单位名称">
<span class="input-tip invoice-title-tip red hide">
<span class="input-tip company-name-tip red hide">
<span class="iconfont">&#xe629;</span>
请填写发票抬头
<em>请填写发票抬头</em>
</span>
</div>
</div>
</li>
<li class="invoice-goods-type invoice-row">
<li class="invoice-tax-num invoice-row company-row hide">
<span class="row-title">
<em>*</em>
发票内容
税&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;号
</span>
<div class="row-content">
{{#each invoices.invoiceContentList}}
<span class="radio-wrap">
<label class="radio-btn rbc-{{invoices_type_id}}{{#if @first}} on{{/if}}" data-id="{{invoices_type_id}}" data-name="{{invoices_type_name}}"></label> {{invoices_type_name}}
<input id="company-tax-num" class="company-tax-num" type="text" placeholder="请输入正确的纳税人识别号">
<span class="input-tip company-tax-tip red hide">
<span class="iconfont">&#xe629;</span>
<em>请填写纳税人识别号</em>
</span>
{{/each}}
</div>
</li>
<li class="receiver invoice-row" data-full="{{receiverMobile}}" data-hide="{{hideReceiverMobile}}">
<span class="row-title">
<em>*</em>
机号码:
&nbsp;机&nbsp;号&nbsp;码:
</span>
<div class="row-content">
<input id="receiver-phone" class="receiver-phone" type="text">
<input id="receiver-phone" class="receiver-phone" type="text" placeholder="可通过手机号码在发票服务平台查询">
<span class="input-tip receiver-tip red hide">
<span class="iconfont">&#xe629;</span>
<em></em>
... ...
... ... @@ -295,7 +295,7 @@ module.exports = class extends global.yoho.BaseModel {
ht = `${params.keywords}`;
} else {
nav = _this._getNav(params.id, menuData, params.url);
ht = _.last(nav).name;
ht = _.get(_.last(nav), 'name', '');
}
return {
... ...
... ... @@ -135,7 +135,6 @@
{{/if}}
</div>
<p>发票抬头:{{title}}</p>
<p>发票内容:{{contentValue}}</p>
{{^}}
<p>暂不需要发票
{{/if}}
... ...
... ... @@ -42,11 +42,14 @@ const index = (req, res, next) => {
return res.render('search/no-result', resData);
}
if (queryKey) {
Object.assign(resData, {
title: `${queryKey}价格_图片_品牌_怎么样-YOHO!BUY有货`,
keywords: `${queryKey},${queryKey}价格,${queryKey}图片,${queryKey}怎么样,${queryKey}品牌,YOHO!BUY有货`,
description: `YOHO!BUY有货网yohobuy.com是国内专业的${queryKey}网上潮流购物商城,为您找到${_.get(resData, 'search.totalCount', 0)}${queryKey}、产品的详细参数,实时报价,价格行情,图片、评价、品牌等信息。买${queryKey},就上YOHO!BUY有货` // eslint-disable-line
});
}
res.render('search/index', resData);
});
... ...
... ... @@ -11,7 +11,7 @@ module.exports = (url, width, height) => {
<a href="javascript:;" class="video-close-btn"></a>
<object id="video_0" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
<param value="http://rescdn.yohoboys.com/res/new/boys/swf/util/VideoPlayerNew.swf?id=video_0&amp;url=${url}&amp;language=1&amp;sharepic=http://img01.yohoboys.com/contentimg/2016/06/12/14/0183fabea5332c5902cdd1d0d7fb63df04.jpg?imageMogr2/thumbnail/738x424|watermark/1/image/aHR0cDovL3Jlc2Nkbi55b2hvYm95cy5jb20vcmVzL25ldy9ib3lzL2ltYWdlcy9iYW5uZXJwbGF5LnBuZw==/dissolve/100/gravity/Center/dx/10/dy/10&amp;title1=Meet...Cody Sanderson &amp;shareurl=http://www.yohoboys.com/channel/detail/index/id/10657/time/1478052894&amp;coverpic=http://img01.yohoboys.com/contentimg/2016/06/12/14/0183fabea5332c5902cdd1d0d7fb63df04.jpg"
<param value="//cdn.yoho.cn/tool/VideoPlayerNew.swf?id=video_0&amp;url=${url}&amp;language=1&amp;sharepic=http://img01.yohoboys.com/contentimg/2016/06/12/14/0183fabea5332c5902cdd1d0d7fb63df04.jpg?imageMogr2/thumbnail/738x424|watermark/1/image/aHR0cDovL3Jlc2Nkbi55b2hvYm95cy5jb20vcmVzL25ldy9ib3lzL2ltYWdlcy9iYW5uZXJwbGF5LnBuZw==/dissolve/100/gravity/Center/dx/10/dy/10&amp;title1=Meet...Cody Sanderson &amp;shareurl=http://www.yohoboys.com/channel/detail/index/id/10657/time/1478052894&amp;coverpic=http://img01.yohoboys.com/contentimg/2016/06/12/14/0183fabea5332c5902cdd1d0d7fb63df04.jpg"
name="movie">
<param value="high" name="quality">
<param value="#ffffff" name="bgcolor">
... ... @@ -21,7 +21,7 @@ module.exports = (url, width, height) => {
<embed style="width: ${width}px;height: ${height}px;" id="flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" loop="false"
play="true" bgcolor="#ffffff" quality="high" wmode="transparent" name="vMessage"
src="http://rescdn.yohoboys.com/res/new/boys/swf/util/VideoPlayerNew.swf?id=video_0&amp;url=${url}&amp;language=1&amp;sharepic=http://img01.yohoboys.com/contentimg/2016/06/12/14/0183fabea5332c5902cdd1d0d7fb63df04.jpg?imageMogr2/thumbnail/738x424|watermark/1/image/aHR0cDovL3Jlc2Nkbi55b2hvYm95cy5jb20vcmVzL25ldy9ib3lzL2ltYWdlcy9iYW5uZXJwbGF5LnBuZw==/dissolve/100/gravity/Center/dx/10/dy/10&amp;title1=Meet...Cody Sanderson &amp;shareurl=http://www.yohoboys.com/channel/detail/index/id/10657/time/1478052894&amp;coverpic=${url}?vframe/jpg/offset/0">
src="//cdn.yoho.cn/tool/VideoPlayerNew.swf?id=video_0&amp;url=${url}&amp;language=1&amp;sharepic=http://img01.yohoboys.com/contentimg/2016/06/12/14/0183fabea5332c5902cdd1d0d7fb63df04.jpg?imageMogr2/thumbnail/738x424|watermark/1/image/aHR0cDovL3Jlc2Nkbi55b2hvYm95cy5jb20vcmVzL25ldy9ib3lzL2ltYWdlcy9iYW5uZXJwbGF5LnBuZw==/dissolve/100/gravity/Center/dx/10/dy/10&amp;title1=Meet...Cody Sanderson &amp;shareurl=http://www.yohoboys.com/channel/detail/index/id/10657/time/1478052894&amp;coverpic=${url}?vframe/jpg/offset/0">
</object>
</div> `;
};
... ...
... ... @@ -64,7 +64,7 @@ const setSearchData = (result, params, channel) => {
_.get(finalResult, 'search.leftContent.sort', {}));
filters.checkedConditions.conditions = _.concat(filters.checkedConditions.conditions,
finalResult.search.leftContent.checked);
_.get(finalResult, 'search.leftContent.checked', []));
Object.assign(finalResult.search,
searchHandler.handlePathNavData({total: result[2].data.total }, params, 'search', channel),
... ...
... ... @@ -7,6 +7,7 @@
'use strict';
const aes = require('./aes-pwd');
const helpers = global.yoho.helpers;
const common = require('../../../config/common');
const clientApi = require('../models/client-api');
const clientService = require('../models/client-service');
... ... @@ -16,10 +17,11 @@ const clientService = require('../models/client-service');
*/
const index = (req, res, next) => {
let type = 2;
let uid = req.user.uid;
let reg = /MSIE\s?[987]\.0/i;
let userAgent = req.headers['user-agent'];
let unSupport = reg.test(userAgent);
let encryptedUid = aes.encryptionUid(req.user.uid);
let encryptedUid = aes.encryptionUid(uid);
let domains = common.domains;
let imCs = domains.imCs;
let imSocket = domains.imSocket;
... ... @@ -36,8 +38,11 @@ const index = (req, res, next) => {
layout: false
});
} else {
clientService.getClientData(type, encryptedUid)
clientService.getClientData(uid, type, encryptedUid)
.then(result => {
if (result.code === 401) {
return res.redirect(helpers.urlFormat('/signin.html'));
}
res.render('client', Object.assign(data, result));
}).catch(next);
}
... ... @@ -58,10 +63,11 @@ const domains = (req, res) => {
* @param next
*/
const history = (req, res, next) => {
const encId = aes.encryptionUid(req.user.uid);
const uid = req.user.uid;
const encId = aes.encryptionUid(uid);
const endTime = req.body.endTime;
clientApi.getMsgHistory(encId, endTime)
clientApi.getMsgHistory(uid, encId, endTime)
.then(result => {
res.json(result);
}).catch(next);
... ... @@ -74,7 +80,10 @@ const history = (req, res, next) => {
* @param next
*/
const saveEval = (req, res, next) => {
const params = {};
const uid = req.user.uid;
const params = {
uid
};
params.stars = req.body.stars;
params.promoter = req.body.promoter;
... ... @@ -102,9 +111,12 @@ const saveEval = (req, res, next) => {
* @param next
*/
const queryReason = (req, res, next) => {
const uid = req.user.uid;
const type = req.body.type;
const encryptedUid = aes.encryptionUid(uid);
clientApi.queryReason(type)
clientApi.queryReason(uid, encryptedUid, type)
.then(result => {
res.json(result);
}).catch(next);
... ... @@ -117,11 +129,12 @@ const queryReason = (req, res, next) => {
* @param next
*/
const saveMessage = (req, res, next) => {
const uid = req.user.uid;
const content = req.body.content;
const encId = req.body.encryptedUid;
const cvId = req.body.conversationId;
clientApi.saveMessage(content, encId, cvId)
clientApi.saveMessage(content, encId, cvId, uid)
.then(result => {
res.json(result);
}).catch(next);
... ...
... ... @@ -32,8 +32,9 @@ let urls = {
* @param { string } encryptedUid 用户ID
* @return { Object } 最近10条订单
*/
const getLastTenOrders = (encryptedUid) => {
const getLastTenOrders = (uid, encryptedUid) => {
return api.post(urls.lastTen, {
uid,
encryptedUid
});
};
... ... @@ -43,8 +44,11 @@ const getLastTenOrders = (encryptedUid) => {
* @function getQas
* @return { Object } 问答列表
*/
const getQas = () => {
return api.post(urls.qas, {});
const getQas = (uid, encryptedUid) => {
return api.post(urls.qas, {
uid,
encryptedUid
});
};
/**
... ... @@ -65,8 +69,10 @@ const getCsSetting = (type) => {
* @param { string } endTime 截止时间
* @return { Array } 历史聊天记录
*/
const getMsgHistory = (encryptedUid, endTime) => {
const getMsgHistory = (uid, encryptedUid, endTime) => {
let params = {
uid,
encryptedUid
};
... ... @@ -91,9 +97,11 @@ const saveEval = (params) => {
* @param cvId
* @returns {*}
*/
const queryReason = (type) => {
const queryReason = (uid, encryptedUid, type) => {
const params = {
type
uid,
type,
encryptedUid
};
return api.post(urls.evalReason, params);
... ... @@ -106,8 +114,9 @@ const queryReason = (type) => {
* @param cvId 会话ID
* @returns {*}
*/
const saveMessage = (content, encId, cvId) => {
const saveMessage = (content, encId, cvId, uid) => {
const params = {
uid,
content,
encryptedUid: encId,
conversationId: cvId
... ...
... ... @@ -17,7 +17,7 @@ const clientAPI = require('./client-api');
* @param { string } encryptedUid
* @return { Object } 客服设置
*/
const getClientData = (type, encryptedUid) => {
const getClientData = (uid, type, encryptedUid) => {
const logoSize = '136x40';
const qcSize = '135x135';
const advSize = '160x335';
... ... @@ -25,9 +25,9 @@ const getClientData = (type, encryptedUid) => {
let apiMethod = [
clientAPI.getCsSetting(type),
clientAPI.getMsgHistory(encryptedUid),
clientAPI.getLastTenOrders(encryptedUid),
clientAPI.getQas()
clientAPI.getMsgHistory(uid, encryptedUid),
clientAPI.getLastTenOrders(uid, encryptedUid),
clientAPI.getQas(uid, encryptedUid)
];
return Promise.all(apiMethod)
... ... @@ -38,6 +38,14 @@ const getClientData = (type, encryptedUid) => {
let records = [];
let hasHistory = false;
if (res[1].code === 401 ||
res[2].code === 401 ||
res[3].code === 401) {
return {
code: 401
};
}
if (res[0] && res[0].code === 200) {
if (res[0].data.config) {
csSetting = res[0].data.config;
... ...
... ... @@ -5,6 +5,7 @@ const logger = global.yoho.logger;
const ip = require('./rules/ip-list');
const userAgent = require('./rules/useragent');
const qpsLimiter = require('./rules/qps-limit');
const asynchronous = require('./rules/asynchronous');
// const fakerLimiter = require('./rules/faker-limit');
const captchaPolicy = require('./policies/captcha');
... ... @@ -53,7 +54,8 @@ module.exports = (req, res, next) => {
Promise.all([
limiter(userAgent, captchaPolicy, context),
limiter(ip, captchaPolicy, context),
limiter(qpsLimiter, captchaPolicy, context)
limiter(qpsLimiter, captchaPolicy, context),
limiter(asynchronous, captchaPolicy, context)
// limiter(fakerLimiter, reporterPolicy, context)
]).then((results) => {
... ...
'use strict';
const cache = global.yoho.cache.master;
const _ = require('lodash');
const logger = global.yoho.logger;
const ASYNCHRONOUSPAGES = {
'/product/index/isFavoriteShop': 1,
'/common/suggestfeedback': 1,
'/product/detail/hotarea': 1,
'/common/getbanner': 1,
'/passport/cert/headerTip': 1
};
function isNormalSpider(userAgent) {
let normalReg = /(spider)|(bot.html)/i;
if (normalReg.test(userAgent)) {
return true;
} else {
return false;
}
}
module.exports = (limiter, policy) => {
const ua = limiter.req.header('User-Agent');
const synchronizeKey = `pc:limiter:synchronize:${limiter.remoteIp}`; // 同步
const asynchronousKey = `pc:limiter:asynchronous:${limiter.remoteIp}`; // 异步
const spiderKey = `pc:limiter:spider:${limiter.remoteIp}`; // 异步
// 正常蜘蛛直接过
if (isNormalSpider(ua)) {
return Promise.resolve(true);
}
const req = limiter.req,
res = limiter.res;
res.on('render', function() {
cache.incrAsync(synchronizeKey, 1).catch(e=>console.log(e)); // eslint-disable-line
});
return cache.getMultiAsync([synchronizeKey, asynchronousKey, spiderKey]).then((results) => {
logger.debug(results);
if (results[spiderKey]) {
return Promise.resolve(policy);
}
// 默认数据设置
if (!results[synchronizeKey] && !_.isNumber(results[synchronizeKey])) {
cache.setAsync(synchronizeKey, 1, 600);
}
// 默认数据设置
if (ASYNCHRONOUSPAGES[req.path] > 0) {
cache.setAsync(asynchronousKey, 1, 600);
cache.setAsync(synchronizeKey, 1, 600);
}
if (results[synchronizeKey] > 10 && !results[asynchronousKey]) {
cache.setAsync(spiderKey, 1, 60 * 60 * 24);
return Promise.resolve(policy);
}
return Promise.resolve(true);
});
};
... ...
{
"name": "yohobuy-node",
"version": "5.8.4",
"version": "5.8.7",
"private": true,
"description": "A New Yohobuy Project With Express",
"repository": {
... ...
... ... @@ -23,9 +23,18 @@ function validateInvoice($el, info) {
// 发票抬头
if (!info.titleName) {
pass = false;
$('.invoice-title-tip', $el).removeClass('hide');
$('.company-name-tip', $el).removeClass('hide');
} else {
$('.invoice-title-tip', $el).addClass('hide');
$('.company-name-tip', $el).addClass('hide');
}
if (info.titleId === 2) {
if (!info.taxNumber) {
pass = false;
$('.company-tax-tip', $el).removeClass('hide');
} else {
$('.company-tax-tip', $el).addClass('hide');
}
}
// 收票人手机号
... ... @@ -38,7 +47,7 @@ function validateInvoice($el, info) {
} else if (info.receiver === defaultReceiver.hide) {
$receiverTip.addClass('hide');
} else if (!/^[0-9]{11}$/.test(info.receiver)) {
$receiverTip.removeClass('hide').find('em').html('手机号码不正确');
$receiverTip.removeClass('hide').find('em').html('请输入正确手机号');
pass = false;
} else {
$receiverTip.addClass('hide');
... ... @@ -49,29 +58,9 @@ function validateInvoice($el, info) {
}
function bindInvoiceEvent($el) {
var $invoiceTypeWrap = $('.invoice-type', $el),
$titleWrap = $('.invoice-title', $el),
$goodsTypeWrap = $('.invoice-goods-type', $el),
$receiver = $('.receiver', $el),
var $titleWrap = $('.invoice-title', $el),
$companyRow = $('.company-row', $el);
$invoiceTypeWrap.on('click', 'li', function() {
var $this = $(this);
if ($this.hasClass('focus')) {
return;
}
if ($this.hasClass('el-invoice')) {
$receiver.removeClass('hide');
} else {
$receiver.addClass('hide');
}
$this.siblings('.focus').removeClass('focus');
$this.addClass('focus');
});
$titleWrap.on('click', '.radio-btn', function() {
var $this = $(this),
id = $this.data('id');
... ... @@ -90,17 +79,6 @@ function bindInvoiceEvent($el) {
$this.addClass('on');
});
$goodsTypeWrap.on('click', '.radio-btn', function() {
var $this = $(this);
if ($this.hasClass('on')) {
return;
}
$goodsTypeWrap.find('.on').removeClass('on');
$this.addClass('on');
});
$el.on('click', '.invoice-close', function() {
$('.btn-close', $el).trigger('click');
});
... ... @@ -109,48 +87,35 @@ function bindInvoiceEvent($el) {
function bindInvoiceInfo($el, info) {
info = info || {};
// 发票类型
if (info.invocesType === 1) {
$('.pa-invoice', $el).trigger('click');
}
if (info.titleId) {
$('.rbt-' + info.titleId).trigger('click');
if (info.titleId === 2 && info.titleName) {
$('#company-name', $el).val(info.titleName);
if (info.titleId === 2) {
$('#company-name', $el).val(info.titleName || '');
$('#company-tax-num', $el).val(info.taxNumber || '');
}
}
if (info.contentId) {
$('.rbc-' + info.contentId, $el).trigger('click');
}
$('#receiver-phone', $el).val(info.receiver || defaultReceiver.hide || '');
}
function packInvoiceInfo($el) {
var $goodsType = $('.invoice-goods-type .on', $el);
var resData = {},
var resData = { // 5.8.1需求,只支持电子发票(type: 2),发票内容只能开明细(id:12)
invocesType: 2,
contentId: 12,
contentName: '明细'
},
receiver = $('#receiver-phone', $el).val();
if ($('.pa-invoice', $el).hasClass('focus')) {
resData.invocesType = 1;
} else {
resData.invocesType = 2;
}
resData.titleId = $('.invoice-title .on', $el).data('id') || 1;
if (resData.titleId * 1 === 1) {
resData.titleName = '个人';
} else {
resData.titleName = $('#company-name', $el).val();
resData.taxNumber = $('#company-tax-num', $el).val();
}
resData.contentId = $goodsType.data('id');
resData.contentName = $goodsType.data('name');
if (receiver) {
resData.receiver = receiver;
}
... ... @@ -173,8 +138,7 @@ function setShowInvoiceInfo() {
_h += '电子发票';
}
_h += '&nbsp;&nbsp;&nbsp;&nbsp;' + invoiceInfo.titleName +
'&nbsp;&nbsp;&nbsp;&nbsp;' + invoiceInfo.contentName;
_h += '&nbsp;&nbsp;&nbsp;&nbsp;' + invoiceInfo.titleName;
$dom.removeClass('hide').find('span').html(_h);
}
... ... @@ -186,7 +150,7 @@ function invoiceEditDialog(baseInfo) {
btns: [
{
id: 'save-invoice',
name: '保存发票信息',
name: '提交',
btnClass: ['save-invoice'],
cb: function() {
var info = packInvoiceInfo(invoice.$el);
... ... @@ -258,6 +222,7 @@ exports.getInvoice = function() {
invoicesType: invoiceInfo.invocesType,
invoicesTitle: invoiceInfo.titleName,
invoicesContent: invoiceInfo.contentId,
taxNumber: invoiceInfo.taxNumber || '',
receiver: invoiceInfo.receiver === defaultReceiver.hide ? defaultReceiver.full : invoiceInfo.receiver
};
};
... ...
... ... @@ -237,6 +237,7 @@ function _loadPage() {
// 接入人工客服需要评价
processInfo.manual = true;
processInfo.savedEval = false;
// 显示评价&隐藏人工
edit.setIcons({
... ... @@ -607,6 +608,12 @@ function _loadPage() {
serviceApi.history(data)
.done(function(res) {
if (res && res.code === 401) {
window.onbeforeunload = null;
return location.href = '//www.yohobuy.com/signin.html?refer=' + // eslint-disable-line
encodeURIComponent(location.href);
}
if (res && res.code === 200) {
if (processInfo.hasMore) {
msgList = res.data.records || [];
... ... @@ -690,7 +697,13 @@ function _loadPage() {
encryptedUid: encryptedUid,
conversationId: socketConfCM.conversationId
})
.done(function() {})
.done(function(res) {
if (res && res.code === 401) {
window.onbeforeunload = null;
return location.href = '//www.yohobuy.com/signin.html?refer=' + // eslint-disable-line
encodeURIComponent(location.href);
}
})
.always(function() {
lMsg.modal('hide');
});
... ...
... ... @@ -36,6 +36,12 @@ var _fetchReason = (function() {
type: YOHO_CS
})
.done(function(res) {
if (res && res.code === 401) {
window.onbeforeunload = null;
return location.href = '//www.yohobuy.com/signin.html?refer=' + // eslint-disable-line
encodeURIComponent(location.href);
}
if (res.code === 200) {
cache = res.data;
render(cache);
... ... @@ -131,6 +137,12 @@ function _evalSubmit() {
$btnEval.hide();
processSign.savedEval = true;
if (res && res.code === 401) {
window.onbeforeunload = null;
return location.href = '//www.yohobuy.com/signin.html?refer=' + // eslint-disable-line
encodeURIComponent(location.href);
}
if (res && res.code === 200) {
send.completeEval();
self.close();
... ...
... ... @@ -771,6 +771,15 @@
padding-right: 20px;
font-size: 14px;
> span {
display: inline-block;
max-width: 300px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
vertical-align: middle;
}
> label {
width: 80px;
height: 24px;
... ... @@ -1593,10 +1602,12 @@
.ensure-invoice-dialog {
$red: #d0021b;
width: 440px;
width: 690px;
padding: 20px 58px;
font-size: 14px;
color: #444;
background-color: #fff;
box-sizing: border-box;
> .close {
display: none;
... ... @@ -1639,31 +1650,17 @@
}
.invoice-header {
font-size: 18px;
padding-bottom: 10px;
font-size: 14px;
padding: 24px 0 20px;
border-bottom: 1px solid #e8e8e8;
}
.invoice-type {
padding: 20px 0;
> li {
width: 98px;
height: 28px;
line-height: 28px;
text-align: center;
font-size: 14px;
margin-right: 17px;
border: 1px solid #505050;
color: #505050;
display: inline-block;
cursor: pointer;
.invoice-content {
font-weight: 300;
}
.focus {
border-color: #d0021b;
color: #d0021b;
}
.row-title {
font-weight: normal;
}
.el-tip {
... ... @@ -1672,15 +1669,24 @@
line-height: 1.5;
> a {
color: $red;
display: inline-block;
padding-top: 12px;
font-weight: 500;
}
}
.invoice-type-text {
line-height: 20px;
padding: 20px 10px;
.row-title {
margin-right: 10px;
}
}
.invoice-row {
padding-top: 16px;
padding-left: 84px;
padding-left: 92px;
overflow: hidden;
.row-content {
... ... @@ -1690,7 +1696,7 @@
.row-title {
line-height: 30px;
position: absolute;
margin-left: -84px;
margin-left: -92px;
> em {
color: $red;
... ... @@ -1707,9 +1713,11 @@
}
input {
width: 194px;
height: 26px;
width: 220px;
height: 30px;
padding: 0 10px;
background: #f5f5f5;
border: 1px solid #e0e0e0;
}
.red {
... ... @@ -1722,15 +1730,17 @@
padding-bottom: 10px;
.btn {
width: 130px;
height: 28px;
line-height: 28px;
width: 140px;
height: 40px;
line-height: 38px;
box-sizing: border-box;
}
.save-invoice {
background-color: #000;
color: #fff;
font-weight: 300;
margin-right: 30px;
}
}
}
... ...
User-Agent: *
Disallow: /*?*
Disallow: /passport/
Disallow: /help
Disallow: signin.html
... ...