Authored by yyq

Merge branch 'feature/invoice' into release/5.8.1

... ... @@ -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">
<input id="company-name" class="company-name" type="text" placeholder="请填写单位名称">
<span class="input-tip invoice-title-tip red hide">
<span class="iconfont">&#xe629;</span>
请填写发票抬头
</span>
</div>
</div>
</li>
<li class="invoice-goods-type invoice-row">
<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 company-name-tip red hide">
<span class="iconfont">&#xe629;</span>
<em>请填写发票抬头</em>
</span>
</div>
</li>
<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}}
</span>
{{/each}}
<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>
</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>
... ...
... ... @@ -135,7 +135,6 @@
{{/if}}
</div>
<p>发票抬头:{{title}}</p>
<p>发票内容:{{contentValue}}</p>
{{^}}
<p>暂不需要发票
{{/if}}
... ...
... ... @@ -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
};
};
... ...
... ... @@ -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;
... ... @@ -1555,10 +1564,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;
... ... @@ -1601,31 +1612,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 {
... ... @@ -1634,15 +1631,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 {
... ... @@ -1652,7 +1658,7 @@
.row-title {
line-height: 30px;
position: absolute;
margin-left: -84px;
margin-left: -92px;
> em {
color: $red;
... ... @@ -1669,9 +1675,11 @@
}
input {
width: 194px;
height: 26px;
width: 210px;
height: 30px;
padding: 0 10px;
background: #f5f5f5;
border: 1px solid #e0e0e0;
}
.red {
... ... @@ -1684,15 +1692,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;
}
}
}
... ...