1、订单列表的发票跳转2、申请发票接口对接

3、发票中心的抬头管理接口对接和提交记录的接口对接,以及数组为空时的按钮提示
4、添加发票的静态页面
5、查看发票的静态页面+接口对接数据
This commit is contained in:
wangzimeng 2025-07-01 18:28:55 +08:00
parent 96dda0b4c1
commit f3f6803f30
9 changed files with 1180 additions and 208 deletions

View File

@ -51,7 +51,8 @@
@click="toDetail(item.id, item.order_no, item.status)">核销码</view> @click="toDetail(item.id, item.order_no, item.status)">核销码</view>
<view v-if="item.status == 9 && item.invoice_status == 0" class="btn_Inv" <view v-if="item.status == 9 && item.invoice_status == 0" class="btn_Inv"
@click="toAddInvoic(item.id, item.order_no)">申请开票</view> @click="toAddInvoic(item.id, item.order_no)">申请开票</view>
<view v-if="item.status == 9 && item.invoice_status != 0" class="btn_Inv" <view v-if="item.status == 9 && item.invoice_status == 1" class="btn_InvIng">开票中</view>
<view v-if="item.status == 9 && item.invoice_status == 2" class="btn_Inv"
@click="checkInvoice(item.id, item.order_no)">查看开票</view> @click="checkInvoice(item.id, item.order_no)">查看开票</view>
<view v-if="item.status != 0" class="btn_xq" <view v-if="item.status != 0" class="btn_xq"
@click="toDetail(item.id, item.order_no, item.status)">查看详情</view> @click="toDetail(item.id, item.order_no, item.status)">查看详情</view>
@ -563,6 +564,17 @@
border-radius: 276rpx 276rpx 276rpx 276rpx; border-radius: 276rpx 276rpx 276rpx 276rpx;
margin-right: 10rpx; margin-right: 10rpx;
} }
.btn_InvIng {
width: 180rpx;
height: 70rpx;
line-height: 70rpx;
text-align: center;
color: #999999;
// border: 2rpx solid #999999;
background-color: #f0f0f0;
border-radius: 276rpx 276rpx 276rpx 276rpx;
margin-right: 10rpx;
}
.btnhx { .btnhx {
width: 180rpx; width: 180rpx;

View File

@ -0,0 +1,482 @@
<template>
<!-- <view>添加抬头</view> -->
<view class="container">
<!-- 表单 -->
<view style="height: auto;">
<u-form :model="form" :rules="rules" ref="uForm" label-width="auto" labelPostition="left">
<view class="formBox">
<u-form-item label="发票类型" prop="invoice_type">
<view class="typeBOx" style="width: 300px;justify-content: flex-end;">
<view class="normalInv" @click="handleHeadTp1()">
<view class="typeImgs">
<image v-if="form.invoice_type == 'ordinary'" style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/check.png" mode=""></image>
<image v-else style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/nocheck.png" mode=""></image>
</view>
<view class="typeText">普通发票</view>
</view>
<view class="specialInv" @click="handleHeadTp2()">
<view class="typeImgs">
<image v-if="form.invoice_type == 'special'" style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/check.png" mode=""></image>
<image v-else style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/nocheck.png" mode=""></image>
</view>
<view class="typeText">专用发票</view>
</view>
</view>
</u-form-item>
<u-form-item label="发票内容" prop="">
<view class="typeBOx" style="width: 305px;justify-content: space-between;">
<view class="typeImgs" @click="explainShow = true">
<image style="width: 44rpx;height: 44rpx;" src="/static/invoice/conRecord.png"
mode=""></image>
</view>
<view class="normalInv">
<view class="typeImgs">
<image style="width: 44rpx;height: 44rpx;position: relative;top: 6rpx;" src="/static/fabu/check.png"
mode=""></image>
</view>
<view class="typeText">商品明细</view>
</view>
</view>
<!-- <image style="width: 38rpx;height: 38rpx;" src="/static/tips.png" mode=""></image> -->
<!-- <u-input inputAlign="right" v-model="form.password" placeholder="请输入密码" border="none"/> -->
</u-form-item>
<u-form-item label="抬头类型" prop="head_type">
<view class="typeBOx" style="width: 219px;justify-content: flex-end;">
<view class="normalInv" v-if="form.invoice_type == 'ordinary' || form.invoice_type == ''"
@click="handlePerson()">
<view class="typeImgs">
<image v-if="form.head_type == 'personal'" style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/check.png" mode=""></image>
<image v-else style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/nocheck.png" mode=""></image>
</view>
<view class="typeText">个人或事业单位</view>
</view>
<view class="specialInv" @click="handleCompany()">
<view class="typeImgs">
<image v-if="form.head_type == 'corporate'" style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/check.png" mode=""></image>
<image v-else style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/nocheck.png" mode=""></image>
</view>
<view class="typeText">企业</view>
</view>
</view>
</u-form-item>
<u-form-item label="抬头名称" prop="invoice_header" required>
<u-input inputAlign="right" v-model="form.invoice_header" type="number" placeholder="请输入抬头名称"
border="none" />
</u-form-item>
<u-form-item label="单位税号" prop="tax_id" v-if="form.head_type == 'corporate' || form.head_type == ''">
<u-input inputAlign="right" v-model="form.tax_id" type="number" placeholder="请输入单位税号"
border="none" />
</u-form-item>
<u-form-item label="注册地址" prop="enterprise_address" v-if="form.head_type == 'corporate' || form.head_type == ''">
<u-input inputAlign="right" v-model="form.enterprise_address" type="number" placeholder="必填"
border="none" />
</u-form-item>
<u-form-item label="注册电话" prop="enterprise_phone" v-if="form.head_type == 'corporate' || form.head_type == ''">
<u-input inputAlign="right" v-model="form.enterprise_phone" type="number" placeholder="必填"
border="none" />
</u-form-item>
<u-form-item label="开户银行" prop="bank_deposit" v-if="form.head_type == 'corporate' || form.head_type == ''">
<u-input inputAlign="right" v-model="form.bank_deposit" type="number" placeholder="必填"
border="none" />
</u-form-item>
<u-form-item label="银行账号" prop="bank_number" v-if="form.head_type == 'corporate' || form.head_type == ''">
<u-input inputAlign="right" v-model="form.bank_number" type="number" placeholder="必填"
border="none" />
</u-form-item>
</view>
<!-- <view style="background-color: #f5f5f5;height: 40rpx;"></view> -->
<view class="recipientInfo">
<u-form-item label="手机号" prop="invoice_reservation_phone" required>
<u-input inputAlign="right" v-model="form.invoice_reservation_phone" type="number"
placeholder="请输入发票预留手机号" border="none" />
</u-form-item>
<u-form-item label="邮箱地址" prop="invoice_reservation_email" required>
<u-input inputAlign="right" v-model="form.invoice_reservation_email" type="number"
placeholder="请输入发票预留邮箱" border="none" />
</u-form-item>
</view>
<view class="defaultInfo">
<view class="defaultLeft">
<view class="leftText1">设为默认发票</view>
<view class="leftText2">设置为默认后续下单优先使用以上发票信息</view>
</view>
<view class="defaultRight">
<image style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/check.png" mode=""></image>
<!-- <image v-else style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/nocheck.png" mode=""></image> -->
</view>
</view>
<!--<u-form-item>
<u-button type="primary" @click="submit">申请开票</u-button>
</u-form-item>-->
</u-form>
<view style="width: 100%;height: 140rpx;"></view>
</view>
<!-- 提交按钮 -->
<view class="footer-btn">
<view class="invoiceBtn" @click.stop="submit()">
<view>提交保存</view>
</view>
<view v-if="deleteShow" class="invoiceDeleteBtn" @click.stop="deleteHead()">
<view>删除</view>
</view>
</view>
<u-popup :show="explainShow" :round="22" mode="center" @close="explainShow = false" @open="explainShow = true"
:custom-style="popupStyRe">
<view class="popup_tkall" style="">
<view class="popup_tk">发票内容说明</view>
<view style="font-size: 28rpx;font-weight: 400;color: #3D3D3D;">
<view>·发票内容将显示详细商品名称与价格信息</view>
<view style="margin-top: 20rpx;">·部分商家可能开具发票内容为商品所属类别及价格信息如有特殊需求请向商家客服咨询</view>
</view>
<view class="popup-footer" style="display: flex;justify-content: center;align-items: center;margin-top: 40rpx;">
<view class="headBtn" style="width: 45%;height: 80rpx;background-color: #ffffff;border-radius: 148rpx;color: #999999;font-size: 36rpx;
font-weight: 400;
line-height: 50rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
text-transform: none;
font-style: normal;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
border: 2rpx solid #999999" @click="explainShow = false">
<view>取消</view>
</view>
<view class="headBtn" style="width: 45%;height: 80rpx;background-color: #323232;border-radius: 148rpx;color: #BBFC5B;font-size: 36rpx;
font-weight: 400;
line-height: 50rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
text-transform: none;
font-style: normal;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
margin-left: 20rpx;" @click="explainShow = false">
<view>我已知晓</view>
</view>
</view>
</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
popupStyRe: {
width: '540rpx',
padding: '24rpx 24rpx 42rpx 24rpx',
height: '384rpx',
margin: '0 auto', //
display: 'flex',
justifyContent: 'start',
alignItems: 'center',
flexColumn: 'column'
},
style: {
//
img: 'width: 100%'
},
id: 0,
order_no: '',
order_nos: '',
form: {
order_nos: '',
head_type: '',
invoice_type: '',
invoice_header: '',
tax_id: '',
bank_deposit: '',
bank_number: '',
enterprise_address: '',
enterprise_phone: '',
invoice_reservation_phone: '',
invoice_reservation_email: ''
},
rules: {
// invoice_type: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
invoice_header: [{
required: true,
// type: 'invoice_header',
message: '请输入抬头名称',
trigger: 'blur'
}],
// invoice_type: [{
// required: true,
// // type: 'invoice_type',
// message: '',
// trigger: 'blur'
// }],
invoice_reservation_phone: [{
required: true,
// type: 'invoice_reservation_phone',
message: '请输入发票预留手机号',
trigger: 'blur'
}],
invoice_reservation_email: [{
required: true,
message: '请输入发票预留邮箱',
trigger: 'blur'
}],
},
detail: '', //detail
detailAny: '', //detail
qrimages: '',
headShow: false, //
title:'',
deleteShow: false,
explainShow:false,//
}
},
onLoad(options) {
console.log('options:', options.id);
const ids = options.id
console.log('ids:', ids);
if (ids) {
this.id = ids
console.log('ids1', this.id,ids);
this.title = '编辑发票抬头信息'
this.deleteShow = true
// this.getOrderInfo();
}else {
this.deleteShow = false
this.title = '添加发票抬头信息'
}
},
onReady() {
},
methods: {
handleHeadTp1() {
this.form.invoice_type = 'ordinary'
console.log('1-1', this.form.invoice_type);
},
handleHeadTp2() {
// this.$set(this.form.invoice_type = 'special')
this.form.invoice_type = 'special'
console.log('2-2', this.form.invoice_type);
},
handlePerson() {
console.log('1');
this.form.head_type = 'personal'
},
handleCompany() {
console.log('2');
this.form.head_type = 'corporate'
},
submit() {
console.log('submit');
},
deleteHead() {
console.log('deleteHead');
},
},
}
</script>
<style lang="scss" scoped>
.form_right {
display: flex;
align-items: center;
margin-left: auto;
color: #848484;
width: 300rpx;
padding: 0rpx 0rpx 0rpx 20rpx;
position: relative;
left: 2rpx;
font-size: 26rpx;
font-weight: 400;
text-align: right;
justify-content: flex-end;
}
.typeBOx {
display: flex;
align-items: center;
margin-left: auto;
.normalInv {
display: flex;
align-items: center;
justify-content: center;
.typeImgs {
width: 44rpx;
height: 44rpx;
}
.typeText {
font-size: 30rpx;
font-weight: 400;
color: #999999;
margin-left: 20rpx;
}
.typeText2 {
font-size: 30rpx;
font-weight: 400;
color: #323232;
margin-left: 20rpx;
}
}
.specialInv {
margin-left: 30rpx;
display: flex;
align-items: center;
justify-content: center;
.typeImgs {
width: 44rpx;
height: 44rpx;
}
.typeText {
font-size: 30rpx;
font-weight: 400;
color: #999999;
margin-left: 20rpx;
}
.typeText2 {
font-size: 30rpx;
font-weight: 400;
color: #323232;
margin-left: 20rpx;
}
}
}
.container {
padding: 40rpx 0;
background-color: #f5f5f5;
.formBox {
// width: 100%;
margin-top: 20rpx;
background-color: #ffffff;
padding: 10rpx 20rpx;
border-radius: 20rpx;
}
.recipientInfo {
margin-top: 30rpx;
background-color: #ffffff;
padding: 10rpx 20rpx;
border-radius: 20rpx;
}
.defaultInfo {
margin-top: 30rpx;
background-color: #ffffff;
padding: 30rpx 30rpx 30rpx 20rpx;
border-radius: 20rpx;
width: 690rpx;
display: flex;
justify-content: space-between;
align-items: center;
.defaultLeft {
display: grid;
justify-content: flex-start;
align-items: center;
.leftText1 {
font-weight: 600;
font-size: 32rpx;
color: #3d3d3d;
font-family: PingFang SC, PingFang SC;
line-height: 36rpx;
font-style: normal;
text-transform: none;
}
.leftText2 {
font-weight: 400;
font-size: 24rpx;
color: #3d3d3d;
margin-top: 20rpx;
font-family: PingFang SC, PingFang SC;
line-height: 36rpx;
font-style: normal;
text-transform: none;
}
}
}
.footer-btn {
width: 95%;
padding: 20rpx 20rpx 60rpx;
display: flex;
position: fixed;
bottom: 0;
// left: 0;
right: -2rpx;
z-index: 99;
background-color: #ffffff;
color: #bbfc5b;
.invoiceBtn {
width: 90%;
height: 90rpx;
background-color: #323232;
border-radius: 148rpx;
color: #BBFC5B;
font-size: 36rpx;
font-weight: 400;
line-height: 50rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
text-transform: none;
font-style: normal;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
position: fixed;
bottom: 66rpx;
margin-left: 2%;
}
}
}
</style>

View File

@ -16,7 +16,7 @@
</view> </view>
<view v-else> <view v-else>
<view style="color: #3D3D3D;font-size: 26rpx;font-weight: 400;margin-top: 10rpx;">已选择{{num}}个订单 预计发票金额 <view style="color: #3D3D3D;font-size: 26rpx;font-weight: 400;margin-top: 10rpx;">已选择{{num}}个订单 预计发票金额
43.25</view> {{totalPrice}}</view>
<view style="color: #999999;font-size: 26rpx;font-weight: 400;margin-top: 10rpx;">预计金额仅作为参考请以合并后的实际金额为准 <view style="color: #999999;font-size: 26rpx;font-weight: 400;margin-top: 10rpx;">预计金额仅作为参考请以合并后的实际金额为准
</view> </view>
</view> </view>
@ -26,7 +26,7 @@
<u-form :model="form" :rules="rules" ref="uForm" label-width="auto" labelPostition="left"> <u-form :model="form" :rules="rules" ref="uForm" label-width="auto" labelPostition="left">
<view class="formBox"> <view class="formBox">
<u-form-item label="发票类型" prop="invoice_type"> <u-form-item label="发票类型" prop="invoice_type">
<view class="typeBOx" style="width: 800rpx;justify-content: center;"> <view class="typeBOx" style="width: 300px;justify-content: flex-end;">
<view class="normalInv" @click="handleHeadTp1()"> <view class="normalInv" @click="handleHeadTp1()">
<view class="typeImgs"> <view class="typeImgs">
<image v-if="form.invoice_type == 'ordinary'" style="width: 44rpx;height: 44rpx;" <image v-if="form.invoice_type == 'ordinary'" style="width: 44rpx;height: 44rpx;"
@ -49,11 +49,15 @@
</u-form-item> </u-form-item>
<u-form-item label="发票内容" prop="password"> <u-form-item label="发票内容" prop="">
<view class="typeBOx" style="width: 400rpx;justify-content: flex-end;"> <view class="typeBOx" style="width: 305px;justify-content: space-between;">
<view class="typeImgs" @click="explainShow = true">
<image style="width: 44rpx;height: 44rpx;" src="/static/invoice/conRecord.png"
mode=""></image>
</view>
<view class="normalInv"> <view class="normalInv">
<view class="typeImgs"> <view class="typeImgs">
<image style="width: 44rpx;height: 44rpx;" src="../../static/fabu/check.png" <image style="width: 44rpx;height: 44rpx;" src="/static/fabu/check.png"
mode=""></image> mode=""></image>
</view> </view>
<view class="typeText">商品明细</view> <view class="typeText">商品明细</view>
@ -230,6 +234,46 @@
</view> </view>
</u-popup> </u-popup>
<u-popup :show="explainShow" :round="22" mode="center" @close="explainShow = false" @open="explainShow = true"
:custom-style="popupStyRe">
<view class="popup_tkall" style="">
<view class="popup_tk">发票内容说明</view>
<view style="font-size: 28rpx;font-weight: 400;color: #3D3D3D;">
<view>·发票内容将显示详细商品名称与价格信息</view>
<view style="margin-top: 20rpx;">·部分商家可能开具发票内容为商品所属类别及价格信息如有特殊需求请向商家客服咨询</view>
</view>
<view class="popup-footer" style="display: flex;justify-content: center;align-items: center;margin-top: 40rpx;">
<view class="headBtn" style="width: 45%;height: 80rpx;background-color: #ffffff;border-radius: 148rpx;color: #999999;font-size: 36rpx;
font-weight: 400;
line-height: 50rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
text-transform: none;
font-style: normal;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
border: 2rpx solid #999999" @click="explainShow = false">
<view>取消</view>
</view>
<view class="headBtn" style="width: 45%;height: 80rpx;background-color: #323232;border-radius: 148rpx;color: #BBFC5B;font-size: 36rpx;
font-weight: 400;
line-height: 50rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
text-transform: none;
font-style: normal;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
margin-left: 20rpx;" @click="explainShow = false">
<view>我已知晓</view>
</view>
</view>
</view>
</u-popup>
</view> </view>
</template> </template>
@ -247,6 +291,16 @@
alignItems: 'center', alignItems: 'center',
flexColumn: 'column' flexColumn: 'column'
}, },
popupStyRe: {
width: '540rpx',
padding: '24rpx 24rpx 42rpx 24rpx',
height: '384rpx',
margin: '0 auto', //
display: 'flex',
justifyContent: 'start',
alignItems: 'center',
flexColumn: 'column'
},
style: { style: {
// //
img: 'width: 100%' img: 'width: 100%'
@ -307,6 +361,8 @@
limit: 10, limit: 10,
headList: [], headList: [],
selectHeadIndex: null, selectHeadIndex: null,
totalPrice:0,
explainShow:false,//
// keywords: '', // keywords: '',
} }
}, },
@ -318,8 +374,11 @@
this.id = options.id this.id = options.id
console.log('id1', this.id); console.log('id1', this.id);
this.getOrderInfo(); this.getOrderInfo();
}else {
this.totalPrice = options.totalPrice
console.log('totalPrice:',this.totalPrice);
} }
console.log('num:', this.num, 'order_nos:', this.order_nos); console.log('order_nos:', this.order_nos,'totalPrice:',this.totalPrice);
}, },
onReady() { onReady() {
console.log('设置规则:', this.rules); console.log('设置规则:', this.rules);
@ -370,7 +429,7 @@
this.form.head_type = 'corporate' this.form.head_type = 'corporate'
}, },
openHeadShow() { openHeadShow() {
this.headShow = true; // this.headShow = true;
this.getHeadList(); this.getHeadList();
}, },
closeHeadShow() { closeHeadShow() {
@ -388,6 +447,7 @@
console.log('res:', res); console.log('res:', res);
this.headList = res.data.list this.headList = res.data.list
console.log('headlist', this.headList[2]); console.log('headlist', this.headList[2]);
this.headShow = true;
} else { } else {
uni.showToast({ uni.showToast({
title: res.msg, title: res.msg,
@ -491,8 +551,12 @@
return; return;
} }
} }
console.log('submit:',this.order_nos);
//
const cleanOrderNos = this.order_nos.replace(/^"+|"+$/g, '');
uni.$u.http.post('/api/school.header/apply', { uni.$u.http.post('/api/school.header/apply', {
order_nos: this.order_nos, // order_nos: this.order_nos,
order_nos: cleanOrderNos,
head_type: this.form.head_type, head_type: this.form.head_type,
invoice_type: this.form.invoice_type, invoice_type: this.form.invoice_type,
invoice_header: this.form.invoice_header, invoice_header: this.form.invoice_header,
@ -506,7 +570,7 @@
}).then(res => { }).then(res => {
if (res.code == 1) { if (res.code == 1) {
uni.showToast({ uni.showToast({
title: '提交申请成功', title: res.msg,
icon: 'success', icon: 'success',
duration: 2000 duration: 2000
}) })
@ -518,16 +582,6 @@
}) })
} }
}).catch(error => {}); }).catch(error => {});
// this.$refs.uForm.validate(valid => {
// console.log('sub2');
// if (valid) {
// console.log('sub3');
// console.log(':', this.form)
// } else {
// console.log('')
// }
// })
}, },
}, },
} }

View File

@ -16,14 +16,17 @@
<view class="invoiceList" v-for="(item,index) in unInvoiceList" :key="index"> <view class="invoiceList" v-for="(item,index) in unInvoiceList" :key="index">
<view class="invoiceList-item flex" @click="checkInvoice(item.invoiceCheck,index)"> <view class="invoiceList-item flex" @click="checkInvoice(item.invoiceCheck,index)">
<view class="changedBox"> <view class="changedBox">
<view class="changedBox-Img" > <view class="changedBox-Img">
<image v-if="item.invoiceCheck === 1" style="width: 44rpx;height: 44rpx;" src="../../static/fabu/check.png" mode=""></image> <image v-if="item.invoiceCheck === 1" style="width: 44rpx;height: 44rpx;"
<image v-else style="width: 44rpx;height: 44rpx;" src="../../static/fabu/nocheck.png" mode=""></image> src="../../static/fabu/check.png" mode=""></image>
<image v-else style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/nocheck.png" mode=""></image>
</view> </view>
</view> </view>
<view class="item-img"> <view class="item-img">
<image style="width: 170rpx;height: 170rpx;border-radius: 20rpx;" :src="item.detail.images[0]" mode=""></image> <image style="width: 170rpx;height: 170rpx;border-radius: 20rpx;"
:src="item.detail.images[0]" mode=""></image>
</view> </view>
<view class="item-con"> <view class="item-con">
<view class="itenCon-actName" style="">{{item.detail.title}}</view> <view class="itenCon-actName" style="">{{item.detail.title}}</view>
@ -34,42 +37,70 @@
<view class="invoiceBtn" @click="handleIssueInvoice()"> <view class="invoiceBtn" @click="handleIssueInvoice()">
<view>申请开票</view> <view>申请开票</view>
</view> </view>
<view class="bottom_box flex justify-center align-items" style="height: 1240rpx;width: 100%;"
v-if="unInvoiceList.length == 0">
<view style="text-align: center;">
<image src="/static/no.png" style="width: 150rpx;height: 150rpx;"></image>
<view>暂无数据</view>
</view> </view>
</view>
</view>
<!-- 提交记录 --> <!-- 提交记录 -->
<view class="recordList" v-else-if="selected == 1"> <view class="recordList" v-else-if="selected == 1">
<view class="record-tabs"> <view class="record-tabs">
<span class="s-header flex flex-column" v-for="(item, index) in recordTypeList" :key="index" <span class="s-header flex flex-column" v-for="(item, index) in recordTypeList" :key="index"
:class="{ selected: recordIndexSelected(item.index) }" @click="selecRecordIndex(item.index)"> :class="{ selected: recordIndexSelected(item.status) }"
@click="selecRecordIndex(item.status)">
{{ item.text }} {{ item.text }}
<!-- <span class="lines" ></span> --> <!-- <span class="lines" ></span> -->
</span> </span>
</view> </view>
<!-- v-if="item[index].length == 1" --> <!-- v-if="item[index].length == 1" -->
<view class="recordList-item flex"> <view v-for="(item,index) in recordList" :key="index">
<view class="recordList-item flex" v-if="item.apply_type == '1'">
<view class="item-img2"> <view class="item-img2">
<image style="width: 170rpx;height: 170rpx;border-radius: 20rpx;" src="../../static/index/about.png" mode=""></image> <image style="width: 170rpx;height: 170rpx;border-radius: 20rpx;"
src="../../static/index/about.png" mode=""></image>
</view> </view>
<view class="item-con2"> <view class="item-con2">
<view class="itenCon2-actName">名字</view> <view class="itenCon2-actName">{{item.activityorders[0].title}}</view>
<view class="itenCon2-actPrice"> <view class="itenCon2-actPrice">
<view> 价格</view> <view> {{item.activityorders[0].price}}</view>
<view class="lookInvoice"> <view class="lookInvoice" v-if="item.status == 2">
<text>查看发票</text> <text>查看发票</text>
<u-icon name="arrow-right"></u-icon> <u-icon name="arrow-right"></u-icon>
</view> </view>
<!-- <view class="lookInvoice2"> <view class="lookInvoice2" v-else-if="item.status == 1">
<text >开票中</text> <text >开票中</text>
</view> --> </view>
<view class="lookInvoices" v-else>
<text>已作废</text>
</view> </view>
</view> </view>
</view> </view>
<!-- v-if="item[index].length > 1" --> </view>
<view class="recordList-items flex"> <!-- v-if="item[index].length > 1" 多个-->
<view class="recordList-items flex" v-else>
<!-- <view></view> --> <!-- <view></view> -->
<view class="reListIts-item flex"> <view class="reListIts-item flex" v-for="(e,i) in item.activityorders" :key="i">
<view class="itsItem-img2"> <view class="itsItem-img2">
<image style="width: 170rpx;height: 170rpx;border-radius: 20rpx;" src="../../static/index/about.png" mode=""></image> <image style="width: 170rpx;height: 170rpx;border-radius: 20rpx;"
:src="e.detail.images[0]" mode=""></image>
</view>
<view class="itsItem-con2">
<view class="itsItemCon2-actName">{{e.detail.title}}</view>
<view class="itsItemCon2-actPrice">
<view> {{e.detail.price}}</view>
</view>
</view>
</view>
<!-- <view class="reListIts-item flex">
<view class="itsItem-img2">
<image style="width: 170rpx;height: 170rpx;border-radius: 20rpx;"
src="../../static/index/about.png" mode=""></image>
</view> </view>
<view class="itsItem-con2"> <view class="itsItem-con2">
<view class="itsItemCon2-actName">名字</view> <view class="itsItemCon2-actName">名字</view>
@ -79,59 +110,62 @@
</view> </view>
</view> </view> -->
<view class="reListIts-item flex">
<view class="itsItem-img2">
<image style="width: 170rpx;height: 170rpx;border-radius: 20rpx;" src="../../static/index/about.png" mode=""></image>
</view>
<view class="itsItem-con2">
<view class="itsItemCon2-actName">名字</view>
<view class="itsItemCon2-actPrice">
<view> 价格</view>
</view>
</view>
</view>
<view class="reLine"></view> <view class="reLine"></view>
<view class="reListIts-itemData"> <view class="reListIts-itemData">
<view>2个订单 发票金额1213</view> <view>{{item.activityorders.length}}个订单 发票金额{{item.price}}</view>
<!-- <view class="lookInvoices"> <view class="lookInvoices" v-if="item.status == 2">
<text>查看发票</text> <text>查看发票</text>
<u-icon name="arrow-right"></u-icon> <u-icon name="arrow-right"></u-icon>
</view> --> </view>
<view class="lookInvoices2"> <view class="lookInvoices2" v-else-if="item.status == 1">
<text >开票中</text> <text>开票中</text>
</view>
<view class="lookInvoices" v-else>
<text>已作废</text>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<view class="bottom_box flex justify-center align-items" style="height: 1240rpx;width: 100%;"
v-if="recordList.length == 0">
<view style="text-align: center;">
<image src="/static/no.png" style="width: 150rpx;height: 150rpx;"></image>
<view>暂无数据</view>
</view>
</view>
</view>
<!-- 抬头管理 --> <!-- 抬头管理 -->
<view class="manageList" v-else> <view class="manageList" v-else>
<!-- 信息提醒 --> <!-- 信息提醒 -->
<view class="manageRecord"> <view class="manageRecord">
<image style="width: 36rpx;height: 36rpx;" src="/static/invoice/manageRecord.png" mode=""></image> <image style="width: 36rpx;height: 36rpx;" src="/static/invoice/manageRecord.png" mode="">
</image>
<text style="margin-left: 10rpx;">抬头信息仅用于开具发票请勿用于转账等其他用途谨防受骗</text> <text style="margin-left: 10rpx;">抬头信息仅用于开具发票请勿用于转账等其他用途谨防受骗</text>
</view> </view>
<!-- 专用 --> <!-- 专用 -->
<view class="manageList-item"> <view class="manageList-item" v-for="(item,index) in headList" :key="index">
<view class="manage-type">专业发票抬头</view> <view class="manage-type" v-if="item.head_type == 'corporate'">专业发票抬头</view>
<view class="manage-type" v-else>个人发票抬头</view>
<view class="manageLine"></view> <view class="manageLine"></view>
<view class="manageCon"> <view class="manageCon">
<view class="messContext"> <view class="messContext">
<view class="textFir"> <view class="textFir">
<view class="defaultBox">默认</view> <view class="defaultBox" v-if="item.is_default == 1">默认</view>
<view class="manageName">洛阳灵睿网络技术有限公司</view> <view class="manageName">{{item.invoice_header}}</view>
</view> </view>
<view class="textSec">9741212154551411C</view> <view class="textSec">{{item.tax_id}}</view>
</view> </view>
<view class="manageEdit"> <view class="manageEdit" @click="editHead(item.id)">
<image style="width: 50rpx;height: 50rpx;" src="/static/invoice/manageEdit.png" mode=""></image> <image style="width: 50rpx;height: 50rpx;" src="/static/invoice/manageEdit.png" mode="">
</image>
</view> </view>
</view> </view>
</view> </view>
<!-- 个人 --> <!-- 个人
<view class="manageList-item"> <view class="manageList-item">
<view class="manage-type">个人发票抬头</view> <view class="manage-type">个人发票抬头</view>
<view class="manageLine"></view> <view class="manageLine"></view>
@ -142,18 +176,25 @@
默认</view> 默认</view>
<view class="manageName">洛阳灵睿网络技术有限公司</view> <view class="manageName">洛阳灵睿网络技术有限公司</view>
</view> </view>
<!-- <view class="textSec">9741212154551411C</view> -->
</view> </view>
<view class="manageEdit"> <view class="manageEdit">
<image style="width: 50rpx;height: 50rpx;" src="/static/invoice/manageEdit.png" mode=""></image> <image style="width: 50rpx;height: 50rpx;" src="/static/invoice/manageEdit.png" mode=""></image>
</view> </view>
</view> </view>
</view> </view>-->
<!-- 按钮 --> <!-- 按钮 -->
<view class="invoiceBtn"> <view class="invoiceBtn" @click="addHead()">
<view>添加发票抬头</view> <view>添加发票抬头</view>
</view> </view>
<view class="bottom_box flex justify-center align-items" style="height: 1240rpx;width: 100%;"
v-if="headList.length == 0">
<view style="text-align: center;">
<image src="/static/no.png" style="width: 150rpx;height: 150rpx;"></image>
<view>暂无数据</view>
</view>
</view>
</view> </view>
</view> </view>
@ -178,9 +219,8 @@
}, },
size: 13, size: 13,
sortStyle: ['#ff557f', '#3f3f3f'], sortStyle: ['#ff557f', '#3f3f3f'],
selected:'0', selected: '0',
headers: [ headers: [{
{
index: '0', index: '0',
text: '合开发票' text: '合开发票'
}, },
@ -193,39 +233,45 @@
text: '抬头管理' text: '抬头管理'
} }
], ],
invoiceCheck: '0',//01 invoiceCheck: '0', //01
recordTypeList: [ recordTypeList: [{
{ status: '',
index: '0',
text: '全部' text: '全部'
}, },
{ {
index: '1', status: '1',
text: '已开票' text: '已开票'
}, },
{ {
index: '2', status: '2',
text: '未开票' text: '未开票'
} }
],//tabs ], //tabs
recordeIndex: '0',//tabs recordeStatus: '', //tabs
recordList: [], //
page: 1, page: 1,
limit: 10, limit: 10,
loadStatus: 'loading', loadStatus: 'loading',
unInvoiceList:[],// unInvoiceList: [], //
invoicedList: [],// invoicedList: [], //
upList: [],// upList: [], //
count:0, count: 0,
order_nos: '',// order_nos: '', //
num:0, totalPrice: 0,
num: 0,
id: 0, id: 0,
headList: [], //
}; };
}, },
onLoad(option) { onLoad(option) {
this.getInvoiceList() this.getInvoiceList()
this.getHeadList()
this.getRecordList()
}, },
onShow() { onShow() {
this.getInvoiceList() this.getInvoiceList()
this.getHeadList()
this.getRecordList()
}, },
onPullDownRefresh() { onPullDownRefresh() {
@ -238,25 +284,39 @@
methods: { methods: {
// //
selectheader(index) { selectheader(index) {
console.log('111');
const that = this; const that = this;
that.selected = index; that.selected = index;
console.log(index, '') console.log('selectheader', that.selected)
if (that.selected == 0) {
console.log('合开');
this.getInvoiceList()
} else if (that.selected == 1) {
console.log('记录', this.recordeStatus);
this.getRecordList()
} else {
console.log('抬头');
this.getHeadList();
}
}, },
// //
headerSelected(index) { headerSelected(index) {
console.log('index',index); console.log('3333');
// console.log('index',index);
return this.selected === index; return this.selected === index;
}, },
// //
selecRecordIndex(index) { selecRecordIndex(recordStatus) {
const that = this; // const that = this;
that.recordeIndex = index; this.recordeStatus = recordStatus;
console.log(index, '') console.log('recordeStatus', this.recordeStatus)
this.getRecordList()
}, },
// //
recordIndexSelected(index) { recordIndexSelected(recordStatus) {
console.log('index',index); console.log('recordStatus', recordStatus);
return this.recordeIndex === index; return this.recordeStatus === recordStatus;
}, },
// //
getInvoiceList() { getInvoiceList() {
@ -269,11 +329,11 @@
invoice_status: 0, invoice_status: 0,
} }
}).then(res => { }).then(res => {
console.log('code',res.code); console.log('code', res.code);
if (res.code === 1) { if (res.code === 1) {
this.count = res.data.count this.count = res.data.count
this.unInvoiceList = [...res.data.list]; this.unInvoiceList = [...res.data.list];
console.log('unInvoiceList:',this.unInvoiceList); console.log('unInvoiceList:', this.unInvoiceList);
if (this.unInvoiceList.length >= res.data.count) { if (this.unInvoiceList.length >= res.data.count) {
this.loadStatus = 'nomore'; this.loadStatus = 'nomore';
} else { } else {
@ -297,7 +357,7 @@
}); });
}, },
// //
checkInvoice(e,index) { checkInvoice(e, index) {
this.$set(this.unInvoiceList, index, { this.$set(this.unInvoiceList, index, {
...this.unInvoiceList[index], ...this.unInvoiceList[index],
invoiceCheck: e === 0 ? 1 : 0 invoiceCheck: e === 0 ? 1 : 0
@ -308,31 +368,106 @@
// //
const list = this.unInvoiceList.filter(item => item.invoiceCheck == 1).map(item => item.order_no) const list = this.unInvoiceList.filter(item => item.invoiceCheck == 1).map(item => item.order_no)
const idList = this.unInvoiceList.filter(item => item.invoiceCheck == 1).map(item => item.id) const idList = this.unInvoiceList.filter(item => item.invoiceCheck == 1).map(item => item.id)
console.log('list:',list,idList); console.log('list:', list, idList);
// this.order_nos = JSON.stringify(list) // this.order_nos = JSON.stringify(list)
this.order_nos = JSON.stringify(list.join(',')) this.order_nos = JSON.stringify(list.join(','))
this.num = list.length this.num = list.length
console.log('num:',this.num); if(list.length) {
if(list.length<1){ this.list.forEach(e => {
// if(e.payprice)
this.totalPrice += e.payprice
})
}
console.log('num:', this.num, 'totalPrice:', this.totalPrice);
console.log('unInvoiceList',this.unInvoiceList.length);
if(this.unInvoiceList.length == 0){
uni.showToast({
title: '暂无可开发票的订单,请先去参加活动下单',
icon: 'none',
duration: 2000
})
return
}
if (list.length < 1) {
uni.showToast({ uni.showToast({
title: '请选择需要开发票的订单', title: '请选择需要开发票的订单',
icon: 'none', icon: 'none',
duration: 2000 duration: 2000
}) })
}else if(list.length === 1){ } else if (list.length === 1) {
this.id = idList[0] this.id = idList[0]
console.log('id',this.id); console.log('id', this.id);
uni.navigateTo({ uni.navigateTo({
url:'/packageB/invoice/addInvoice?order_nos=' + this.order_nos + '&num=' + this.num + '&id=' + this.id url: '/packageB/invoice/addInvoice?order_nos=' + this.order_nos + '&num=' + this.num +
'&id=' + this.id
})
} else {
uni.navigateTo({
url: '/packageB/invoice/addInvoice?order_nos=' + this.order_nos + '&num=' + this.num +
'&totalPrice=' + this.totalPrice
}) })
} }
else{ // uni.navigateTo({
uni.navigateTo({ // url: '/packageB/invoice/addInvoice?order_nos=' + this.order_nos + '&num=' + this.num
url:'/packageB/invoice/addInvoice?order_nos=' + this.order_nos + '&num=' + this.num // })
},
//
getRecordList() {
console.log('提交记录', this.recordeStatus);
uni.$u.http.get('/api/school.header/apply_list', {
params: {
// keywords: this.keywords,
page: this.page,
limit: this.limit,
status: this.recordeStatus
}
}).then(res => {
if (res.code == 1) {
console.log('res:', res);
this.recordList = res.data.list
console.log('recordList', this.recordList);
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
}) })
} }
}).catch(error => {});
},
//
getHeadList() {
uni.$u.http.get('/api/school.header/header_list', {
params: {
// keywords: this.keywords,
page: this.page,
limit: this.limit,
} }
}).then(res => {
if (res.code == 1) {
console.log('res:', res);
this.headList = res.data.list
console.log('headlist', this.headList[2]);
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
}
}).catch(error => {});
},
addHead() {
uni.navigateTo({
url: '/packageB/invoice/addHead'
})
},
editHead(id) {
uni.navigateTo({
url: '/packageB/invoice/addInvoice?id=' + this.id
})
},
} }
@ -509,7 +644,8 @@
font-size: 28rpx; font-size: 28rpx;
color: #9E9E9E; color: #9E9E9E;
border-radius: 40rpx; border-radius: 40rpx;
background-color: #ffffff;
margin-right: 20rpx;
line-height: 26rpx; line-height: 26rpx;
flex: 0 0 auto; flex: 0 0 auto;
position: relative; position: relative;
@ -518,7 +654,7 @@
.s-header.selected { .s-header.selected {
width: 150rpx; width: 150rpx;
height: 80rpx; height: 80rpx;
background: #ffffff; background-color: #ffffff;
// font-weight: 800; // font-weight: 800;
// font-size: 32rpx; // font-size: 32rpx;
color: #323232; color: #323232;
@ -837,5 +973,4 @@
border-radius: 0rpx 0rpx 0rpx 0rpx; border-radius: 0rpx 0rpx 0rpx 0rpx;
margin: 0 30rpx; margin: 0 30rpx;
} }
</style> </style>

View File

@ -1,9 +1,292 @@
<template> <template>
<view>查看发票</view> <!-- <view>查看发票</view> -->
<view class="container">
<view class="info-top">
<image style="height: 122px;width: 294px;position: absolute;right: 5%;top:0%" src="/static/invoice/invInfoBk.png"></image>
<view class="info-status">
<view class="statusFir">
<image style="width: 32rpx;height: 32rpx;" src="/static/invoice/statusInv.png"></image>
<view style="margin-left: 20rpx;">{{detailAny.invoice_status_text}}</view>
</view>
<view class="statusSec" style="margin-top: 20rpx;">已开发票金额: {{detail.price}}</view>
</view>
</view>
<view class="infoCon">
<view class="conFIr">
<view class="conFir-left">
<view class="leftTitle">发票类型<span style="color: #323232;" v-if="detail.invoice_type == 'ordinary'">普通发票 </span>
<span style="color: #323232;" v-else>专用发票</span></view>
<view class="leftTitle">发票内容<span style="color: #323232;">商品明细</span></view>
<view class="leftTitle">抬头类型<span style="color: #323232;" v-if="detail.head_type == 'personal'">个人或事业单位</span>
<span style="color: #323232;" v-else>企业</span></view>
</view>
<view class="conFir-right" @click="checkImages()">
<image style="width: 266rpx;height: 166rpx;border-radius: 14rpx;" :src="detail.images[0]" mode=""></image>
<view class="ringhtImg-text">{{imagesNum}}</view>
</view>
</view>
<view class="conSec">
<view class="rightTitle">抬头名称<span style="color: #323232;">{{detail.invoice_header}}</span></view>
<view class="rightTitle">开票金额<span style="color: #323232;">{{detail.price}}</span></view>
<view class="rightTitle">申请时间<span style="color: #323232;">{{detail.createtime_text}}</span></view>
<view class="rightTitle">开票时间<span style="color: #323232;">{{detail.invoicingtime_text}}</span></view>
</view>
</view>
<u-popup :show="imagesShow" :round="22" mode="center" @close="imagesShow = false" @open="imagesShow = true"
:custom-style="popupStyImg">
<view class="popup_tkall" style="">
<image src="/static/center/close.png" style="width: 64rpx;height: 64rpx;position: absolute;top: 10rpx;right: 20rpx;" @click="imagesShow = false"></image>
<view class="popup_tk">
<view style="width: 20rpx;height: 20rpx;">
<u-icon v-if="imagesIndex != 0" name="arrow-left" @click="changeLeft()"></u-icon>
</view>
<image style="width: 320px;height: 240px;margin: 0rpx 26rpx;" :src="imagesList[imagesIndex]" mode=""></image>
<view style="width: 20rpx;height: 20rpx;">
<u-icon v-if="imagesIndex != iamgesListIndexNum" name="arrow-right" @click="changeRight()"></u-icon>
</view>
</view>
</view>
</u-popup>
</view>
</template> </template>
<script> <script>
export default {
data() {
return {
popupStyImg: {
width: '700rpx',
padding: '24rpx 24rpx 42rpx 24rpx',
height: '500rpx',
margin: '0 auto', //
display: 'flex',
justifyContent: 'start',
alignItems: 'center',
flexColumn: 'column',
backgroundColor: '#f8f8f8'
},
order_nos: '', //
id: 0,
detail: '', //detail
detailAny: '', //detail
qrimages: '',
imagesShow:false,
imagesNum:0,
imagesList: [],
imagesIndex:0,
iamgesListIndexNum: 0,
};
},
onLoad(options) {
console.log('options',options.id);
this.id = options.id
console.log('options',this.id);
if(this.id){
this.getOrderInfo()
}
},
// onShow() {
// this.getInvoiceList()
// },
onPullDownRefresh() {
},
onReachBottom() {
},
methods: {
getOrderInfo() {
console.log('id', this.id);
uni.$u.http.get('/api/school.newactivity.order/detail', {
params: {
id: this.id,
}
}).then(res => {
if (res.code == 1) {
this.detail = res.data.detail.invoiceaplpy;
this.detailAny = res.data.detail;
this.imagesNum = this.detail.images.length
this.imagesList = this.detail.images
this.iamgesListIndexNum = this.imagesNum -1
console.log('qrimages:', this.qrimages);
console.log('imagesNum:', this.imagesNum);
console.log('detail:', this.detail);
console.log('iamgesListIndexNum:', this.iamgesListIndexNum);
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
}
}).catch(error => {});
},
checkImages() {
this.imagesIndex = 0
this.imagesShow = true;
},
changeLeft() {
console.log('left');
if(this.imagesIndex > 0) {
this.imagesIndex = this.imagesIndex-1
}
},
changeRight() {
console.log('right');
if(this.imagesIndex < this.iamgesListIndexNum) {
this.imagesIndex = this.imagesIndex + 1
}
},
}
}
</script> </script>
<style> <style lang="scss" scoped>
.container {
width: 100%;
background-color: #f7f7f7;
.info-top {
width: 100%;
height: 260rpx;
background-color: #323232;
// background-image: ;
.info-status {
display: inline;
width: 100%;
justify-content: center;
align-items: center;
color: #bbfc5b;
//margin-top: 60rpx;
position: relative;
top: 110rpx;
.statusFir {
display: flex;
justify-content: center;
align-items: center;
// margin-top: 60rpx;
}
.statusSec {
margin-top: 20rpx;
display: grid;
justify-content: center;
align-items: center;
}
}
}
.infoCon {
display: block;
width: 95%;
height: 506rpx;
background-color: #ffffff;
padding: 30rpx 20rpx;
border-radius: 30rpx 30rpx 0 0;
.conFIr{
width: 96%;
display: flex;
justify-content: space-between;
align-items: center;
.conFir-left {
display: inline;
.leftTitle {
font-size: 28rpx;
font-weight: 400;
color: #9c9c9c;
line-height: 36rpx;
margin-top: 20rpx;
}
}
.conFir-right {
.ringhtImg-text {
background-color: #4d4d4d;
opacity: 0.65;
font-size: 22rpx;
font-weight: 400;
color: #ffffff;
text-align: center;
display: grid;
justify-content: center;
align-items: center;
height: 42rpx;
border-radius: 0rpx 0rpx 14rpx 14rpx;
position: relative;
bottom: 50rpx;
}
}
}
.conSec {
width: 90%;
display: grid;
justify-content: flex-start;
align-items: center;
position: relative;
bottom: 26rpx;
.rightTitle {
font-size: 28rpx;
font-weight: 400;
color: #9c9c9c;
line-height: 36rpx;
margin-top: 20rpx;
}
}
}
.popup_tkall {
display: grid;
justify-content: center;
align-items: center;
// background-color: #ffffff;
.popup_tk {
display: flex;
justify-content: center;
align-items: center;
margin-top: 56rpx;
// font-size: 32rpx;
// font-weight: 500;
// margin: 12rpx 0 24rpx 0;
// text-align: center;
// color: #3D3D3D;
}
}
}
</style> </style>

View File

@ -370,6 +370,12 @@
"style": { "style": {
"navigationBarTitleText": "查看发票" "navigationBarTitleText": "查看发票"
} }
},
{
"path": "invoice/addHead",
"style": {
"navigationBarTitleText": "添加发票抬头信息"
}
} }
] ]
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB