百度小程序新增开票功能

feat/task1-c-wallet
Devil 2020-12-09 11:15:36 +08:00
parent 0bd347c2f9
commit a2cbd72f85
30 changed files with 1457 additions and 15 deletions

View File

@ -65,7 +65,6 @@ Page({
{ name: "快递名称", value: data.data.express_name || '' },
{ name: "快递单号", value: data.data.express_number || '' },
],
data_list_loding_status: 3,
data_bottom_line_status: true,
data_list_loding_msg: '',

View File

@ -1,5 +1,5 @@
<!-- 导航 -->
<view a:if="{{nav_list.length > 0 && (data_base || null) != null}}" class="nav oh bg-white">
<view a:if="{{nav_list.length > 0}}" class="nav oh bg-white">
<block a:for="{{nav_list}}" a:key="key">
<navigator url="{{item.url}}" hover-class="none">
<view class="item fl tc">
@ -11,7 +11,7 @@
</view>
<!-- 通知 -->
<view a:if="{{(data_base.invoice_desc || null) != null && data_base.invoice_desc.length > 0}}" class="tips-container spacing-mt">
<view a:if="{{(data_base || null) != null && (data_base.invoice_desc || null) != null && data_base.invoice_desc.length > 0}}" class="tips-container spacing-mt">
<view class="tips">
<view a:for="{{data_base.invoice_desc}}" a:key="key" class="item">
{{item}}

View File

@ -41,7 +41,12 @@
"pages/plugins/distribution/extraction-apply/extraction-apply",
"pages/plugins/distribution/extraction-order/extraction-order",
"pages/plugins/distribution/introduce/introduce",
"pages/plugins/exchangerate/currency/currency"
"pages/plugins/exchangerate/currency/currency",
"pages/plugins/invoice/user/user",
"pages/plugins/invoice/invoice/invoice",
"pages/plugins/invoice/invoice-detail/invoice-detail",
"pages/plugins/invoice/invoice-saveinfo/invoice-saveinfo",
"pages/plugins/invoice/order/order"
],
"window": {
"navigationBarTitleText": "{{application_title}}",

View File

@ -0,0 +1,27 @@
.panel-item .panel-title {
background: #fff;
font-weight: bold;
padding: 15rpx;
border-bottom: 2px solid #eee;
font-size: 34rpx;
}
.panel-item .panel-content .item {
padding: 20rpx 0;
}
.panel-item .panel-content .item:last-child {
border: 0;
}
.panel-item .panel-content .item .title {
width: 25%;
padding-left: 20rpx;
}
.panel-item .panel-content .item .content {
width: calc(75% - 50rpx);
padding-left: 20rpx;
min-height: 46rpx;
word-wrap: break-word;
word-break: normal;
}
.panel-item .panel-content .item view {
line-height: 46rpx;
}

View File

@ -0,0 +1,127 @@
const app = getApp();
Page({
data: {
params: null,
data_list_loding_status: 1,
data_list_loding_msg: '',
data_bottom_line_status: false,
detail: null,
detail_list: [],
express_data: []
},
onReady() {},
onLoad(params) {
//params['id'] = 1;
this.setData({
params: params
});
this.init();
},
onShow() {},
init() {
var self = this;
swan.showLoading({
title: "加载中..."
});
this.setData({
data_list_loding_status: 1
});
swan.request({
url: app.get_request_url("detail", "user", "invoice"),
method: "POST",
data: {
id: this.data.params.id
},
dataType: "json",
success: res => {
swan.hideLoading();
swan.stopPullDownRefresh();
if (res.data.code == 0) {
var data = res.data.data;
self.setData({
detail: data.data,
detail_list: [
{ name: "业务类型", value: data.data.business_type_name || '' },
{ name: "申请类型", value: data.data.apply_type_name || '' },
{ name: "发票类型", value: data.data.invoice_type_name || '' },
{ name: "发票金额", value: data.data.total_price || '' },
{ name: "状态", value: data.data.status_name || '' },
{ name: "发票内容", value: data.data.invoice_content || '' },
{ name: "发票抬头", value: data.data.invoice_title || '' },
{ name: "纳税识别号", value: data.data.invoice_code || '' },
{ name: "企业开户行名称", value: data.data.invoice_bank || '' },
{ name: "企业开户帐号", value: data.data.invoice_account || '' },
{ name: "企业联系电话", value: data.data.invoice_tel || '' },
{ name: "企业注册地址", value: data.data.invoice_address || '' },
{ name: "收件人姓名", value: data.data.name || '' },
{ name: "收件人电话", value: data.data.tel || '' },
{ name: "收件人地址", value: data.data.address || '' },
{ name: "电子邮箱", value: data.data.email || '' },
{ name: "拒绝原因", value: data.data.refuse_reason || '' },
{ name: "用户备注", value: data.data.user_note || '' },
{ name: "创建时间", value: data.data.add_time || '' },
{ name: "更新时间", value: data.data.upd_time || '' },
],
express_data: [
{ name: "快递名称", value: data.data.express_name || '' },
{ name: "快递单号", value: data.data.express_number || '' },
],
data_list_loding_status: 3,
data_bottom_line_status: true,
data_list_loding_msg: ''
});
} else {
self.setData({
data_list_loding_status: 2,
data_bottom_line_status: false,
data_list_loding_msg: res.data.msg
});
if (app.is_login_check(res.data, self, 'init')) {
app.showToast(res.data.msg);
}
}
},
fail: () => {
swan.hideLoading();
swan.stopPullDownRefresh();
self.setData({
data_list_loding_status: 2,
data_bottom_line_status: false,
data_list_loding_msg: '服务器请求出错'
});
app.showToast("服务器请求出错");
}
});
},
// 下拉刷新
onPullDownRefresh() {
this.init();
},
// 电子发票复制
electronic_invoice_event(e) {
var value = e.currentTarget.dataset.value || null;
if (value != null) {
swan.setClipboardData({
data: value,
success(res) {
swan.showToast({
title: '内容已复制'
});
app.showToast('复制成功', 'success');
}
});
} else {
app.showToast('链接地址有误');
}
}
});

View File

@ -0,0 +1,4 @@
{
"enablePullDownRefresh": true,
"navigationBarTitleText": "发票详情"
}

View File

@ -0,0 +1,47 @@
<view s-if="detail != null">
<view s-if="detail_list.length > 0" class="panel-item">
<view class="panel-title">申请信息</view>
<view class="panel-content bg-white">
<view s-for="item, index in detail_list" s-key="item" class="item br-b oh">
<view class="title fl">{{item.name}}</view>
<view class="content fl br-l">{{item.value}}</view>
</view>
</view>
</view>
<!-- 快递信息 -->
<view s-if="detail.status == 2 && detail.invoice_type != 0 && express_data.length > 0" class="panel-item spacing-mt">
<view class="panel-title">快递信息</view>
<view class="panel-content bg-white">
<view s-for="item, index in express_data" s-key="item" class="item br-b oh">
<view class="title fl">{{item.name}}</view>
<view class="content fl br-l">{{item.value}}</view>
</view>
</view>
</view>
<!-- 电子发票 -->
<view s-if="detail.status == 2 && detail.invoice_type == 0 && (detail.electronic_invoice || null) != null" class="panel-item spacing-mt">
<view class="panel-title">电子发票</view>
<view class="panel-content bg-white">
<view s-for="item, index in detail.electronic_invoice" s-key="item" class="item br-b oh">
<view class="content" bindtap="electronic_invoice_event" data-value="{{item.url}}">{{item.title}}</view>
</view>
</view>
<view class="tips">可点击发票名称复制后、到浏览器打开地址下载发票。</view>
</view>
<import src="/pages/common/bottom_line.swan" />
<template is="bottom_line" data="{{{status: data_bottom_line_status}}}"></template>
</view>
<view s-if="detail == null">
<import src="/pages/common/nodata.swan" />
<template is="nodata" data="{{{status: data_list_loding_status, msg: data_list_loding_msg}}}"></template>
<view class="nav-back tc wh-auto">
<navigator open-type="navigateBack" hover-class="none">
<button type="default" size="mini" class="cr-888 br" hover-class="none">返回</button>
</navigator>
</view>
</view>

View File

@ -0,0 +1,7 @@
.content-top {
padding: 30rpx 10rpx;
}
.content-top text {
font-size: 38rpx;
font-weight: bold;
}

View File

@ -0,0 +1,318 @@
const app = getApp();
Page({
data: {
params: null,
form_submit_loading: false,
data_list_loding_status: 1,
data_list_loding_msg: '',
data_bottom_line_status: false,
data_base: null,
apply_type_list: [],
can_invoice_type_list: [],
invoice_content_list: [],
save_base_data: null,
data: null,
form_invoice_type_index: 0,
form_apply_type_index: 0,
form_invoice_content_index: 0,
form_apply_type_disabled: false,
company_container: false,
company_special_container: false,
addressee_container: false,
email_container: true
},
onReady() {},
onLoad(params) {
this.setData({
params: params
});
this.init();
},
onShow() {},
init() {
var self = this;
swan.showLoading({
title: "加载中..."
});
this.setData({
data_list_loding_status: 1
});
swan.request({
url: app.get_request_url("saveinfo", "user", "invoice"),
method: "POST",
data: this.data.params,
dataType: "json",
success: res => {
swan.hideLoading();
swan.stopPullDownRefresh();
if (res.data.code == 0) {
var data = res.data.data;
self.setData({
data_base: data.base || null,
apply_type_list: data.apply_type_list || [],
can_invoice_type_list: data.can_invoice_type_list || [],
invoice_content_list: data.invoice_content_list || [],
save_base_data: data.save_base_data,
data: (data.data || null) == null || data.data.length == 0 ? null : data.data,
data_list_loding_status: 0,
data_bottom_line_status: true,
data_list_loding_msg: data.save_base_data.total_price <= 0 ? '发票金额必须大于0' : ''
}); // 数据容器处理
this.invoice_container_handle();
} else {
self.setData({
data_list_loding_status: 2,
data_bottom_line_status: false,
data_list_loding_msg: res.data.msg
});
if (app.is_login_check(res.data, self, 'init')) {
app.showToast(res.data.msg);
}
}
},
fail: () => {
swan.hideLoading();
swan.stopPullDownRefresh();
self.setData({
data_list_loding_status: 2,
data_bottom_line_status: false,
data_list_loding_msg: '服务器请求出错'
});
app.showToast("服务器请求出错");
}
});
},
// 下拉刷新
onPullDownRefresh() {
this.init();
},
// 发票类型事件
form_invoice_type_event(e) {
this.setData({
form_invoice_type_index: e.detail.value
});
this.invoice_container_handle();
},
// 发票类型事件
form_apply_type_event(e) {
this.setData({
form_apply_type_index: e.detail.value
});
this.invoice_container_handle();
},
// 发票内容事件
form_invoice_content_event(e) {
this.setData({
form_invoice_content_index: e.detail.value
});
},
// 容器显隐处理
invoice_container_handle() {
// 发票类型
var invoice_type = this.data.can_invoice_type_list[this.data.form_invoice_type_index]['id'];
if (invoice_type == 2) {
// 选择专票的时候申请类型必须是企业
this.setData({
form_apply_type_index: 1,
form_apply_type_disabled: true
});
} else {
this.setData({
form_apply_type_disabled: false
});
} // 申请类型
switch (invoice_type) {
// 增值税普通电子发票
case 0:
this.setData({
company_special_container: false,
addressee_container: false,
email_container: true
});
break;
// 增值税普通纸质发票
case 1:
this.setData({
company_special_container: false,
addressee_container: true,
email_container: false
});
break;
// 增值税专业纸质发票
case 2:
this.setData({
company_container: true,
company_special_container: true,
addressee_container: true,
email_container: false
});
break;
} // 增值税专业纸质发票情况下个人类型处理
if (invoice_type != 2) {
var apply_type = this.data.apply_type_list[this.data.form_apply_type_index]['id'];
if (apply_type == 0) {
this.setData({
company_container: false
});
} else {
this.setData({
company_container: true
});
}
}
},
// 表单提交
formSubmit(e) {
var data = e.detail.value;
if ((this.data.data || null) == null) {
data['ids'] = this.data.params.ids || '';
data['type'] = this.data.params.type || '';
} else {
data['id'] = this.data.data.id;
} // 数据验证
var validation = [{
fields: 'invoice_type',
msg: '请选择发票类型',
is_can_zero: 1
}, {
fields: 'apply_type',
msg: '请选择申请类型',
is_can_zero: 1
}, {
fields: 'invoice_title',
msg: '请填写发票抬头、最多200个字符'
}];
if (app.fields_check(data, validation)) {
var invoice_type = this.data.can_invoice_type_list[this.data.form_invoice_type_index]['id'];
var apply_type = this.data.apply_type_list[this.data.form_apply_type_index]['id'];
if (apply_type == 1) {
validation.push({
fields: 'invoice_code',
msg: '请填写企业统一社会信用代码或纳税识别号、最多160个字符'
});
}
if (invoice_type == 2) {
validation.push({
fields: 'invoice_bank',
msg: '请填写企业开户行名称、最多200个字符'
});
validation.push({
fields: 'invoice_account',
msg: '请填写企业开户帐号、最多160个字符'
});
validation.push({
fields: 'invoice_tel',
msg: '请填写企业联系电话 6~15 个字符'
});
validation.push({
fields: 'invoice_address',
msg: '请填写企业注册地址、最多230个字符'
});
}
if (invoice_type != 0) {
validation.push({
fields: 'name',
msg: '请填写收件人姓名格式 2~30 个字符之间'
});
validation.push({
fields: 'tel',
msg: '请填写收件人电话 6~15 个字符'
});
validation.push({
fields: 'address',
msg: '请填写收件人地址、最多230个字符'
});
}
if (app.fields_check(data, validation)) {
// 发票类型
data['invoice_type'] = this.data.can_invoice_type_list[this.data.form_invoice_type_index]['id']; // 发票内容
if (this.data.invoice_content_list.length > 0 && this.data.invoice_content_list[this.data.form_invoice_content_index] != undefined) {
data['invoice_content'] = this.data.invoice_content_list[this.data.form_invoice_content_index];
}
swan.showLoading({
title: '提交中...'
});
this.setData({
form_submit_loading: true
}); // 网络请求
var self = this;
swan.request({
url: app.get_request_url("save", "user", "invoice"),
method: 'POST',
data: data,
dataType: 'json',
header: {
'content-type': 'application/x-www-form-urlencoded'
},
success: res => {
swan.hideLoading();
if (res.data.code == 0) {
app.showToast(res.data.msg, "success");
setTimeout(function () {
// 是否关闭页面进入我的发票、适合从订单开票中过来提交成功直接进入我的发票列表
if ((self.data.params || null) != null && (self.data.params.is_redirect || 0) == 1) {
swan.redirectTo({
url: "/pages/plugins/invoice/invoice/invoice"
});
} else {
swan.navigateBack();
}
}, 2000);
} else {
this.setData({
form_submit_loading: false
});
if (app.is_login_check(res.data)) {
app.showToast(res.data.msg);
} else {
app.showToast('提交失败,请重试!');
}
}
},
fail: () => {
swan.hideLoading();
this.setData({
form_submit_loading: false
});
app.showToast('服务器请求出错');
}
});
}
}
}
});

View File

@ -0,0 +1,4 @@
{
"enablePullDownRefresh": true,
"navigationBarTitleText": "开票"
}

View File

@ -0,0 +1,104 @@
<view s-if="save_base_data != null && save_base_data.total_price > 0">
<form bindsubmit="formSubmit" s-if="data_list_loding_status == 0">
<view class="content-top bg-white spacing-mb">
发票金额 <text class="cr-main">{{save_base_data.total_price}}</text> 元
</view>
<view class="form-container spacing-mb oh">
<view class="form-gorup bg-white">
<view class="form-gorup-title">发票类型<text class="form-group-tips-must">必选</text></view>
<picker name="invoice_type" bindchange="form_invoice_type_event" value="{{form_invoice_type_index}}" range="{{can_invoice_type_list}}" range-key="name">
<view class="picker {{can_invoice_type_list[form_invoice_type_index] == undefined ? 'cr-ccc' : 'cr-666'}} arrow-right">
{{can_invoice_type_list[form_invoice_type_index] == undefined ? '请选择发票类型' : can_invoice_type_list[form_invoice_type_index]['name']}}
</view>
</picker>
</view>
<view class="form-gorup bg-white">
<view class="form-gorup-title">申请类型<text class="form-group-tips-must">必选</text></view>
<picker name="apply_type" bindchange="form_apply_type_event" disabled="{{form_apply_type_disabled}}" value="{{form_apply_type_index}}" range="{{apply_type_list}}" range-key="name">
<view class="picker {{apply_type_list[form_apply_type_index] == undefined ? 'cr-ccc' : 'cr-666'}} arrow-right">
{{apply_type_list[form_apply_type_index] == undefined ? '请选择申请类型' : apply_type_list[form_apply_type_index]['name']}}
</view>
</picker>
</view>
<view s-if="invoice_content_list.length > 0" class="form-gorup bg-white">
<view class="form-gorup-title">发票内容<text class="form-group-tips-must">必选</text></view>
<picker name="invoice_content" bindchange="form_invoice_content_event" value="{{form_invoice_content_index}}" range="{{invoice_content_list}}">
<view class="picker {{invoice_content_list[form_invoice_content_index] == undefined ? 'cr-ccc' : 'cr-666'}} arrow-right">
{{invoice_content_list[form_invoice_content_index] == undefined ? '请选择发票内容' : invoice_content_list[form_invoice_content_index]}}
</view>
</picker>
</view>
<view class="form-gorup bg-white">
<view class="form-gorup-title">发票抬头<text class="form-group-tips-must">必填</text></view>
<input type="text" name="invoice_title" placeholder-class="cr-ccc" class="cr-666" placeholder="发票抬头、最多200个字符" maxlength="200" value="{=data.invoice_title || ''=}" />
</view>
<!-- 企业信息 -->
<view s-if="company_container">
<view class="form-gorup bg-white">
<view class="form-gorup-title">企业统一社会信用代码或纳税识别号<text class="form-group-tips-must">必填</text></view>
<input type="text" name="invoice_code" placeholder-class="cr-ccc" class="cr-666" placeholder="企业统一社会信用代码或纳税识别号、最多160个字符" maxlength="160" value="{=data.invoice_code || ''=}" />
</view>
</view>
<!-- 企业专票信息 -->
<view s-if="company_special_container">
<view class="form-gorup bg-white">
<view class="form-gorup-title">企业开户行名称<text class="form-group-tips-must">必填</text></view>
<input type="text" name="invoice_bank" placeholder-class="cr-ccc" class="cr-666" placeholder="企业开户行名称、最多200个字符" maxlength="200" value="{=data.invoice_bank || ''=}" />
</view>
<view class="form-gorup bg-white">
<view class="form-gorup-title">企业开户帐号<text class="form-group-tips-must">必填</text></view>
<input type="text" name="invoice_account" placeholder-class="cr-ccc" class="cr-666" placeholder="企业开户帐号、最多160个字符" maxlength="160" value="{=data.invoice_account || ''=}" />
</view>
<view class="form-gorup bg-white">
<view class="form-gorup-title">企业联系电话<text class="form-group-tips-must">必填</text></view>
<input type="text" name="invoice_tel" placeholder-class="cr-ccc" class="cr-666" placeholder="企业联系电话 6~15 个字符" maxlength="15" value="{=data.invoice_tel || ''=}" />
</view>
<view class="form-gorup bg-white">
<view class="form-gorup-title">企业注册地址<text class="form-group-tips-must">必填</text></view>
<input type="text" name="invoice_address" placeholder-class="cr-ccc" class="cr-666" placeholder="企业注册地址、最多230个字符" maxlength="230" value="{=data.invoice_address || ''=}" />
</view>
</view>
<!-- 收件人信息 -->
<view s-if="addressee_container">
<view class="form-gorup bg-white">
<view class="form-gorup-title">收件人姓名<text class="form-group-tips-must">必填</text></view>
<input type="text" name="name" placeholder-class="cr-ccc" class="cr-666" placeholder="收件人姓名格式 2~30 个字符之间" maxlength="30" value="{=data.name || ''=}" />
</view>
<view class="form-gorup bg-white">
<view class="form-gorup-title">收件人电话<text class="form-group-tips-must">必填</text></view>
<input type="text" name="tel" placeholder-class="cr-ccc" class="cr-666" placeholder="收件人电话 6~15 个字符" maxlength="15" value="{=data.tel || ''=}" />
</view>
<view class="form-gorup bg-white">
<view class="form-gorup-title">收件人地址<text class="form-group-tips-must">必填</text></view>
<input type="text" name="address" placeholder-class="cr-ccc" class="cr-666" placeholder="收件人地址、最多230个字符" maxlength="230" value="{=data.address || ''=}" />
</view>
</view>
<!-- 电子邮箱信息 -->
<view s-if="email_container">
<view class="form-gorup bg-white">
<view class="form-gorup-title">电子邮箱<text class="form-group-tips">选填</text></view>
<input type="text" name="email" placeholder-class="cr-ccc" class="cr-666" placeholder="电子邮箱、最多60个字符" maxlength="60" value="{=data.email || ''=}" />
</view>
</view>
<view class="form-gorup bg-white">
<view class="form-gorup-title">备注<text class="form-group-tips">选填</text></view>
<input type="text" name="user_note" placeholder-class="cr-ccc" class="cr-666" placeholder="备注最多230个字符" maxlength="60" value="{=data.user_note || ''=}" />
</view>
<view class="form-gorup">
<button class="bg-main submit-bottom" type="default" formType="submit" hover-class="none" loading="{{form_submit_loading}}" disabled="{{form_submit_loading}}">提交</button>
</view>
</view>
</form>
</view>
<view s-else>
<import src="/pages/common/nodata.swan" />
<template is="nodata" data="{{{status: data_list_loding_status, msg: data_list_loding_msg}}}"></template>
</view>

View File

@ -0,0 +1,47 @@
/*
*
*/
.nav {
background: #eee;
height: 80rpx;
line-height: 80rpx;
}
.nav .item {
width: 20%;
}
.nav .active {
color: #d2364c;
}
/*
*
*/
.scroll-box {
height: calc(100vh - 80rpx);
}
.data-list .item .base,
.data-list .item .content {
padding: 20rpx 10rpx;
}
.data-list .item .content .multi-text {
line-height: 50rpx;
}
.data-list .item .content .multi-text .title {
margin-right: 30rpx;
}
.data-list .item .content .multi-text .value {
font-weight: 500;
}
.data-list .item .content .multi-text .unit {
margin-left: 10rpx;
}
.data-list .item .operation {
padding: 20rpx 10rpx;
}
.data-list .item .operation button:not(:first-child) {
margin-left: 30rpx;
}
.data-list .item .submit-delete {
border: 1px solid #dc7f7f;
color: #dc7f7f !important;
}

View File

@ -0,0 +1,257 @@
const app = getApp();
Page({
data: {
data_base: null,
data_list: [],
data_page_total: 0,
data_page: 1,
data_list_loding_status: 1,
data_bottom_line_status: false,
params: null,
nav_status_list: [{
name: "全部",
value: "-1"
}, {
name: "待审核",
value: "0"
}, {
name: "待开票",
value: "1"
}, {
name: "已开票",
value: "2"
}, {
name: "已拒绝",
value: "3"
}],
nav_status_index: 0
},
onReady() {},
onLoad(params) {
// 是否指定状态
var nav_status_index = 0;
if ((params.status || null) != null) {
for (var i in this.data.nav_status_list) {
if (this.data.nav_status_list[i]['value'] == params.status) {
nav_status_index = i;
break;
}
}
}
this.setData({
params: params,
nav_status_index: nav_status_index
});
},
onShow() {
this.init();
},
init() {
var user = app.get_user_info(this, 'init');
if (user != false) {
// 用户未绑定用户则转到登录页面
if (app.user_is_need_login(user)) {
swan.redirectTo({
url: "/pages/login/login?event_callback=init"
});
return false;
} else {
// 获取数据
this.get_data_list();
}
} else {
this.setData({
data_list_loding_status: 0,
data_bottom_line_status: false
});
}
},
// 获取数据
get_data_list(is_mandatory) {
// 分页是否还有数据
if ((is_mandatory || 0) == 0) {
if (this.data.data_bottom_line_status == true) {
return false;
}
} // 加载loding
swan.showLoading({
title: "加载中..."
});
this.setData({
data_list_loding_status: 1
}); // 请求数据
var data = {
page: this.data.data_page
}; // 参数
var status = (this.data.nav_status_list[this.data.nav_status_index] || null) == null ? -1 : this.data.nav_status_list[this.data.nav_status_index]['value'];
if (status != -1) {
data['status'] = status;
} // 获取数据
swan.request({
url: app.get_request_url("index", "user", "invoice"),
method: "POST",
data: data,
dataType: "json",
success: res => {
swan.hideLoading();
swan.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_base: res.data.data.base || null,
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,
data_list: [],
data_bottom_line_status: false
});
}
} else {
this.setData({
data_list_loding_status: 0
});
if (app.is_login_check(res.data, this, 'get_data_list')) {
app.showToast(res.data.msg);
}
}
},
fail: () => {
swan.hideLoading();
swan.stopPullDownRefresh();
this.setData({
data_list_loding_status: 2
});
app.showToast("服务器请求出错");
}
});
},
// 下拉刷新
onPullDownRefresh() {
this.setData({
data_page: 1
});
this.get_data_list(1);
},
// 滚动加载
scroll_lower(e) {
this.get_data_list();
},
// 导航事件
nav_event(e) {
this.setData({
nav_status_index: e.currentTarget.dataset.index || 0,
data_page: 1
});
this.get_data_list(1);
},
// 编辑事件
edit_event(e) {
swan.navigateTo({
url: '/pages/plugins/invoice/invoice-saveinfo/invoice-saveinfo?id=' + e.currentTarget.dataset.value
});
},
// 删除
delete_event(e) {
swan.showModal({
title: "温馨提示",
content: "删除后不可恢复,确定继续吗?",
confirmText: "确认",
cancelText: "不了",
success: result => {
if (result.confirm) {
// 参数
var value = e.currentTarget.dataset.value;
var index = e.currentTarget.dataset.index; // 加载loding
swan.showLoading({
title: "处理中..."
});
swan.request({
url: app.get_request_url("delete", "user", "invoice"),
method: "POST",
data: {
ids: value
},
dataType: "json",
success: res => {
swan.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
});
}
app.showToast(res.data.msg, "success");
} else {
app.showToast(res.data.msg);
}
},
fail: () => {
swan.hideLoading();
app.showToast("服务器请求出错");
}
});
}
}
});
}
});

View File

@ -0,0 +1,4 @@
{
"enablePullDownRefresh": true,
"navigationBarTitleText": "我的发票"
}

View File

@ -0,0 +1,56 @@
<!-- 导航 -->
<view class="nav">
<block s-for="item, index in nav_status_list" s-key="key">
<view class="item fl tc cr-888 {{nav_status_index == index ? 'active' : ''}}" data-index="{{index}}" bindtap="nav_event">{{item.name}}</view>
</block>
</view>
<!-- 列表 -->
<scroll-view scroll-y="{{true}}" class="scroll-box" bindscrolltolower="scroll_lower" lower-threshold="30">
<view class="data-list">
<view class="item bg-white spacing-mb" s-if="data_list.length > 0" s-for="item, index in data_list" s-key="key">
<view class="base oh br-b">
<text class="cr-666">{{item.add_time}}</text>
<text class="fr cr-main">{{item.status_name}}</text>
</view>
<navigator url="/pages/plugins/invoice/invoice-detail/invoice-detail?id={{item.id}}" hover-class="none">
<view class="content">
<view class="multi-text">
<text class="title cr-666">业务类型</text>
<text class="value">{{item.business_type_name}}</text>
</view>
<view class="multi-text">
<text class="title cr-666">申请类型</text>
<text class="value">{{item.apply_type_name}}</text>
</view>
<view class="multi-text">
<text class="title cr-666">发票类型</text>
<text class="value">{{item.invoice_type_name}}</text>
</view>
<view class="multi-text">
<text class="title cr-666">发票金额</text>
<text class="value">{{item.total_price}}</text>
<text class="unit cr-888">元</text>
</view>
<view class="multi-text">
<text class="title cr-666">发票抬头</text>
<text class="value">{{item.invoice_title}}</text>
</view>
</view>
</navigator>
<view s-if="item.status == 0 || item.status == 3" class="operation tr br-t-dashed">
<button class="cr-666 br" type="default" size="mini" bindtap="edit_event" data-value="{{item.id}}" hover-class="none">编辑</button>
<button class="submit-delete" type="default" size="mini" bindtap="delete_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">删除</button>
</view>
</view>
<view s-if="data_list.length == 0">
<import src="/pages/common/nodata.swan" />
<template is="nodata" data="{{{status: data_list_loding_status}}}">
</template>
</view>
<import src="/pages/common/bottom_line.swan" />
<template is="bottom_line" data="{{{status: data_bottom_line_status}}}"></template>
</view>
</scroll-view>

View File

@ -0,0 +1,43 @@
/*
*
*/
.data-list .item .base,
.data-list .item .content {
padding: 20rpx 10rpx;
}
.data-list .item .content .multi-text {
line-height: 50rpx;
}
.data-list .item .content .multi-text .title {
margin-right: 30rpx;
}
.data-list .item .content .multi-text .value {
font-weight: 500;
}
.data-list .item .content .multi-text .unit {
margin-left: 10rpx;
}
.data-list .item .operation {
padding: 20rpx 10rpx;
}
.data-list .item .operation button:not(:first-child) {
margin-left: 30rpx;
}
/*
*
*/
.selected .icon {
width: 40rpx;
height: 40rpx !important;
margin-left: 10rpx;
margin-right: 20rpx;
vertical-align: middle;
}
.invoice-merge-submit {
width: 220rpx;
height: 70rpx !important;
line-height: 74rpx !important;
left: calc(50% - 110rpx);
bottom: 50rpx;
}

View File

@ -0,0 +1,179 @@
const app = getApp();
Page({
data: {
data_base: null,
data_list: [],
data_page_total: 0,
data_page: 1,
data_list_loding_status: 1,
data_bottom_line_status: false,
params: null,
select_ids: []
},
onReady() {},
onLoad(params) {
this.setData({
params: params
});
},
onShow() {
this.init();
},
init() {
var user = app.get_user_info(this, 'init');
if (user != false) {
// 用户未绑定用户则转到登录页面
if (app.user_is_need_login(user)) {
swan.redirectTo({
url: "/pages/login/login?event_callback=init"
});
return false;
} else {
// 获取数据
this.get_data_list();
}
} else {
this.setData({
data_list_loding_status: 0,
data_bottom_line_status: false
});
}
},
// 获取数据
get_data_list(is_mandatory) {
// 分页是否还有数据
if ((is_mandatory || 0) == 0) {
if (this.data.data_bottom_line_status == true) {
return false;
}
} // 加载loding
swan.showLoading({
title: "加载中..."
});
this.setData({
data_list_loding_status: 1
}); // 请求数据
var data = {
page: this.data.data_page
}; // 获取数据
swan.request({
url: app.get_request_url("index", "order", "invoice"),
method: "POST",
data: data,
dataType: "json",
success: res => {
swan.hideLoading();
swan.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_base: res.data.data.base || null,
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,
data_list: [],
data_bottom_line_status: false
});
}
} else {
this.setData({
data_list_loding_status: 0
});
if (app.is_login_check(res.data, this, 'get_data_list')) {
app.showToast(res.data.msg);
}
}
},
fail: () => {
swan.hideLoading();
swan.stopPullDownRefresh();
this.setData({
data_list_loding_status: 2
});
app.showToast("服务器请求出错");
}
});
},
// 下拉刷新
onPullDownRefresh() {
this.setData({
data_page: 1
});
this.get_data_list(1);
},
// 滚动加载
scroll_lower(e) {
this.get_data_list();
},
// 选择
selected_event(e) {
var value = e.currentTarget.dataset.value;
var temp_select_ids = this.data.select_ids;
var index = temp_select_ids.indexOf(value);
if (index == -1) {
temp_select_ids.push(value);
} else {
temp_select_ids.splice(index, 1);
}
this.setData({
select_ids: temp_select_ids
});
},
// 合并开票
invoice_merge_event(e) {
if (this.data.select_ids.length <= 0) {
app.showToast('请先选择数据');
return false;
}
swan.navigateTo({
url: '/pages/plugins/invoice/invoice-saveinfo/invoice-saveinfo?ids=' + this.data.select_ids.join(',') + '&type=order&is_redirect=1'
});
}
});

View File

@ -0,0 +1,4 @@
{
"enablePullDownRefresh": true,
"navigationBarTitleText": "订单开票"
}

View File

@ -0,0 +1,57 @@
<import-sjs src="../../../../utils/tools.sjs" module="tools" />
<scroll-view scroll-y="{{true}}" class="scroll-box" bindscrolltolower="scroll_lower" lower-threshold="30">
<view class="data-list">
<block s-if="data_list.length > 0">
<view class="item bg-white spacing-mb" s-for="item, index in data_list" s-key="key">
<view class="base oh br-b">
<view bindtap="selected_event" data-type="node" data-value="{{item.id}}" class="fl selected">
<image class="icon" src="/images/default-select{{tools.indexOf(select_ids, item.id) ? '-active' : ''}}-icon.png" mode="widthFix" />
</view>
<text class="cr-666">{{item.add_time}}</text>
</view>
<navigator url="/pages/user-order-detail/user-order-detail?id={{item.id}}" hover-class="none">
<view class="content">
<view class="multi-text">
<text class="title cr-666">订单编号</text>
<text class="value">{{item.order_no}}</text>
</view>
<view class="multi-text">
<text class="title cr-666">订单总价</text>
<text class="value">{{item.total_price}}</text>
<text class="unit cr-888">元</text>
</view>
<view class="multi-text">
<text class="title cr-666">支付金额</text>
<text class="value">{{item.pay_price}}</text>
<text class="unit cr-888">元</text>
</view>
<view class="multi-text">
<text class="title cr-666">订单单价</text>
<text class="value">{{item.price}}</text>
<text class="unit cr-888">元</text>
</view>
</view>
</navigator>
<view class="operation tr br-t-dashed">
<navigator url="/pages/plugins/invoice/invoice-saveinfo/invoice-saveinfo?ids={{item.id}}&type=order&is_redirect=1" hover-class="none">
<button class="cr-666 br" type="default" size="mini" hover-class="none">开票</button>
</navigator>
</view>
</view>
<!-- 合并开票 -->
<view s-if="select_ids.length > 0">
<button class="submit-fixed invoice-merge-submit" type="default" size="mini" hover-class="none" bindtap="invoice_merge_event">合并开票</button>
</view>
</block>
<view s-if="data_list.length == 0">
<import src="/pages/common/nodata.swan" />
<template is="nodata" data="{{{status: data_list_loding_status}}}">
</template>
</view>
<import src="/pages/common/bottom_line.swan" />
<template is="bottom_line" data="{{{status: data_bottom_line_status}}}"></template>
</view>
</scroll-view>

View File

@ -0,0 +1,29 @@
/*
*
*/
.nav {
border-top: 1px solid #eee;
}
.nav .item {
padding: 30rpx 0;
width: calc(50% - 1px);
border-bottom: 1px solid #eee;
}
.nav .item:nth-child(odd) {
border-right: 1px solid #eee;
}
.nav .item image {
width: 100rpx;
height: 100rpx;
margin: 0 auto;
}
.nav .item .title {
margin-top: 20rpx;
}
/*
*
*/
.tips-container {
padding: 0 10rpx;
}

View File

@ -0,0 +1,103 @@
const app = getApp();
Page({
data: {
data_bottom_line_status: false,
data_list_loding_status: 1,
data_list_loding_msg: '',
data_base: null,
nav_list: [{
icon: "/images/plugins/invoice/user-center-invoice-icon.png",
title: "我的发票",
url: "/pages/plugins/invoice/invoice/invoice"
}, {
icon: "/images/plugins/invoice/user-center-order-icon.png",
title: "订单开票",
url: "/pages/plugins/invoice/order/order"
}]
},
onReady() {},
onLoad(params) {},
onShow() {
this.init();
},
init(e) {
var user = app.get_user_info(this, "init"),
self = this;
if (user != false) {
// 用户未绑定用户则转到登录页面
if (app.user_is_need_login(user)) {
swan.showModal({
title: '温馨提示',
content: '绑定手机号码',
confirmText: '确认',
cancelText: '暂不',
success: result => {
swan.stopPullDownRefresh();
if (result.confirm) {
swan.navigateTo({
url: "/pages/login/login?event_callback=init"
});
}
}
});
} else {
self.get_data();
}
}
},
// 获取数据
get_data() {
var self = this;
swan.request({
url: app.get_request_url("center", "user", "invoice"),
method: "POST",
data: {},
dataType: "json",
success: res => {
swan.stopPullDownRefresh();
if (res.data.code == 0) {
var data = res.data.data;
self.setData({
data_base: data.base || null,
data_list_loding_msg: '',
data_list_loding_status: 0,
data_bottom_line_status: false
});
} else {
self.setData({
data_bottom_line_status: false,
data_list_loding_status: 2,
data_list_loding_msg: res.data.msg
});
if (app.is_login_check(res.data, self, 'get_data')) {
app.showToast(res.data.msg);
}
}
},
fail: () => {
swan.stopPullDownRefresh();
self.setData({
data_bottom_line_status: false,
data_list_loding_status: 2,
data_list_loding_msg: '服务器请求出错'
});
app.showToast("服务器请求出错");
}
});
},
// 下拉刷新
onPullDownRefresh() {
this.get_data();
}
});

View File

@ -0,0 +1,4 @@
{
"enablePullDownRefresh": true,
"navigationBarTitleText": "我的发票"
}

View File

@ -0,0 +1,20 @@
<!-- 导航 -->
<view s-if="nav_list.length > 0" class="nav oh bg-white">
<block s-for="item, index in nav_list" s-key="key">
<navigator url="{{item.url}}" hover-class="none">
<view class="item fl tc">
<image src="{{item.icon}}" mode="scaleToFill" class="dis-block" />
<view class="title">{{item.title}}</view>
</view>
</navigator>
</block>
</view>
<!-- 通知 -->
<view s-if="(data_base || null) != null && (data_base.invoice_desc || null) != null && data_base.invoice_desc.length > 0" class="tips-container spacing-mt">
<view class="tips">
<view s-for="item, index in data_base.invoice_desc" s-key="key" class="item">
{{item}}
</view>
</view>
</view>

View File

@ -65,7 +65,6 @@ Page({
{ name: "快递名称", value: data.data.express_name || '' },
{ name: "快递单号", value: data.data.express_number || '' },
],
data_list_loding_status: 3,
data_bottom_line_status: true,
data_list_loding_msg: '',

View File

@ -1,5 +1,5 @@
<!-- -->
<view qq:if="{{nav_list.length > 0 && (data_base || null) != null}}" class="nav oh bg-white">
<view qq:if="{{nav_list.length > 0}}" class="nav oh bg-white">
<block qq:for="{{nav_list}}" qq:key="key">
<navigator url="{{item.url}}" hover-class="none">
<view class="item fl tc">
@ -11,7 +11,7 @@
</view>
<!-- -->
<view qq:if="{{(data_base.invoice_desc || null) != null && data_base.invoice_desc.length > 0}}" class="tips-container spacing-mt">
<view qq:if="{{(data_base || null) != null && (data_base.invoice_desc || null) != null && data_base.invoice_desc.length > 0}}" class="tips-container spacing-mt">
<view class="tips">
<view qq:for="{{data_base.invoice_desc}}" qq:key="key" class="item">
{{item}}

View File

@ -65,7 +65,6 @@ Page({
{ name: "快递名称", value: data.data.express_name || '' },
{ name: "快递单号", value: data.data.express_number || '' },
],
data_list_loding_status: 3,
data_bottom_line_status: true,
data_list_loding_msg: '',

View File

@ -1,5 +1,5 @@
<!-- 导航 -->
<view tt:if="{{nav_list.length > 0 && (data_base || null) != null}}" class="nav oh bg-white">
<view tt:if="{{nav_list.length > 0}}" class="nav oh bg-white">
<block tt:for="{{nav_list}}" tt:key="key">
<navigator url="{{item.url}}" hover-class="none">
<view class="item fl tc">
@ -11,7 +11,7 @@
</view>
<!-- 通知 -->
<view tt:if="{{(data_base.invoice_desc || null) != null && data_base.invoice_desc.length > 0}}" class="tips-container spacing-mt">
<view tt:if="{{(data_base || null) != null && (data_base.invoice_desc || null) != null && data_base.invoice_desc.length > 0}}" class="tips-container spacing-mt">
<view class="tips">
<view tt:for="{{data_base.invoice_desc}}" tt:key="key" class="item">
{{item}}

View File

@ -73,8 +73,8 @@ App({
// 请求地址
request_url: "{{request_url}}",
request_url: 'http://shopxo.com/',
request_url: 'https://dev.shopxo.net/',
// request_url: 'http://shopxo.com/',
// request_url: 'https://dev.shopxo.net/',
// 基础信息
application_title: "{{application_title}}",

View File

@ -65,7 +65,6 @@ Page({
{ name: "快递名称", value: data.data.express_name || '' },
{ name: "快递单号", value: data.data.express_number || '' },
],
data_list_loding_status: 3,
data_bottom_line_status: true,
data_list_loding_msg: '',

View File

@ -1,5 +1,5 @@
<!-- 导航 -->
<view wx:if="{{nav_list.length > 0 && (data_base || null) != null}}" class="nav oh bg-white">
<view wx:if="{{nav_list.length > 0}}" class="nav oh bg-white">
<block wx:for="{{nav_list}}" wx:key="key">
<navigator url="{{item.url}}" hover-class="none">
<view class="item fl tc">
@ -11,7 +11,7 @@
</view>
<!-- 通知 -->
<view wx:if="{{(data_base.invoice_desc || null) != null && data_base.invoice_desc.length > 0}}" class="tips-container spacing-mt">
<view wx:if="{{(data_base || null) != null && (data_base.invoice_desc || null) != null && data_base.invoice_desc.length > 0}}" class="tips-container spacing-mt">
<view class="tips">
<view wx:for="{{data_base.invoice_desc}}" wx:key="key" class="item">
{{item}}