zyejMAll-mobile/pages/user/invoices/invoiceCenter.vue
2025-05-08 16:52:29 +08:00

472 lines
11 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<s-layout title="发票管理" class="invoice_center">
<!-- <view class="invoiceTitle">发票列表</view> -->
<view class="invoiceCenters">
<uni-section class="invoice_tabbar" title="实心标签" type="line">
<view class="uni-padding-wrap uni-common-mt invoice_tabbar_title">
<uni-segmented-control :current="current" :values="items" style-type="text" active-color="#7D9337"
@clickItem="onClickItem" />
</view>
<view class="content">
<view v-if="current === 1">
<view class="invoList" v-if="state.invoList.length>0">
<view class="invoice_item-a" v-for="(item,index) in state.invoList" :key="index">
<view class="goods_box">
<image :src="item.picUrl"></image>
<view>{{item.spuName}}</view>
</view>
<view class="invoice_box">
<view>
<view class="invoicea_type">{{item.invoice_type}}</view>
<view>申请时间:{{item.createTime}}</view>
</view>
<view class="goods_mon">
¥{{ fen2yuan(item.price) }}
</view>
</view>
<view class="set_box">
<view class="invoicea_status">{{ item.status === 1 ? "已开票" : "开票中" }}</view>
<view class="lookDetailbtn" @tap.stop="lookinvDetail(item.invoice)">查看发票信息</view>
</view>
</view>
</view>
<view class="noInvoices" v-else>
<image src="/static/data-empty.png"></image>
没有发票信息呦~
</view>
</view>
<view v-if="current === 0">
<view class="invoList" v-if="state.riseList.length>0">
<view class="invoice_item" v-for="(item,index) in state.riseList" :key="index">
<view class="ii_left">
<view class="inhead_name">{{item.name}}
<view class="defaultFont" v-if="item.isDefault">默认</view>
</view>
<view class="inhead_email color-gray">联系邮箱{{ item.email }}</view>
<view class="inhead_tel color-gray">联系电话{{ item.companyTel }}</view>
</view>
<view class="ii_right">
<view class="inhead_type">{{item.type?"企业":'个人'}}普通发票</view>
<view class="inhead_set">
<view class="inhead_set_btn inhead_change" @tap.stop="updateInvoice(item.id)"><uni-icons class="ii_icon" type="compose"
size="18"></uni-icons>编辑</view>
<view class="inhead_set_btn inhead_del" @tap.stop="deleInvoicehead(item.id)"><uni-icons class="ii_icon" type="trash"
size="18"></uni-icons>删除</view>
</view>
</view>
</view>
</view>
<view class="noInvoices" v-else>
<image src="/static/data-empty.png"></image>
没有发票信息呦~
</view>
<view class="addInvoiceBtn" @tap.stop="addInvoice">添加新发票</view>
</view>
</view>
</uni-section>
<!-- <view v-if="isPopupVisible" class="custom-popup">
<view class="popup-content">
<view class="del_btn" @tap.stop="closeImg">X</view>
<image></image>
<!-- <view class="title">请选择升级方向</view>
<radio-group @change="onRadioChange">
<label v-for="(item, index) in options" :key="index" class="radio-item">
<radio :value="item.value" :checked="item.value === selectedValue" />
{{ item.label }}
</label>
</radio-group> -->
<!-- <view class="btns">
<button @click="confirmSelection('up')"></button>
<button @click="confirmSelection('noup')"></button>
</view> -->
</view>
</s-layout>
</template>
<script setup>
import DeliveryApi from '@/sheep/api/trade/delivery';
import {
onMounted,
reactive,
ref
} from 'vue';
import {
fen2yuan,
formatGoodsSwiper,
useDurationTime
} from '@/sheep/hooks/useGoods';
import InvoiceApi from '@/sheep/api/trade/invoices';
import sheep from '@/sheep';
import {
onLoad,onShow
} from '@dcloudio/uni-app';
// let isPopupVisible = ref(false);
const current = ref(0);
const state = reactive({
invoList: [
],
riseList: [{
riseName: "抬头1",
invoice_no: "165121349",
invoice_money: 29800
},
]
})
// onMounted(()=>{
// //获取发票列表
// getInvoicelistdatas()
// //获取抬头列表
// })
onLoad((options)=>{
getInvoicelistdatas()
if(options.toRight){
current.value = 1
}
})
// const closeImg = ()=>{
// // isPopupVisible.value = false
// }
onShow(()=>{
getInvoicelistdatas()
getInvoiceheadlist()
})
const getInvoicelistdatas = async ()=>{
const {data} = await InvoiceApi.getInvoicesList()
console.log(data)
if(data){
data.list.forEach(item => {
item.createTime = formatTimestamp(item.createTime); // 直接修改原对象
});
state.invoList = data.list
console.log(state.invoList)
}
}
const getInvoiceheadlist =async ()=>{
const {data} = await InvoiceApi.getInvoicesHeadList()
state.riseList = data
console.log(state.riseList)
}
const updateInvoice = (headid)=>{
console.log("点击了修改")
uni.navigateTo({
url:"/pages/user/invoices/addInvoiceHeader?type=update&headid="+headid
})
}
const lookinvDetail= (invoiceUrl)=>{
if(!invoiceUrl){
sheep.$helper.toast('暂无发票,联系管理员开票');
return;
}
// isPopupVisible.value = true
uni.navigateTo({
url:"/pages/user/invoices/invoicePreviews?invoiceUrl="+invoiceUrl
})
}
const deleInvoicehead = (headId)=>{
uni.showModal({
title: '提示',
content: '确定要删除此发票吗?',
success: async function (res) {
if (!res.confirm) {
return;
}
deleteInvoicehead(headId)
},
});
}
const deleteInvoicehead = async (headId)=>{
const {code } = await InvoiceApi.deleteInvoicehead(headId)
if(code === 0){
uni.showToast({
title: '删除成功',
icon: 'success',
});
getInvoiceheadlist()
}
}
const onClickItem = (e) => {
if (current.value !== e.currentIndex) {
current.value = e.currentIndex
}
if(e.currentIndex === 0){
getInvoiceheadlist()
}else{
getInvoicelistdatas()
}
}
const items = reactive([ '抬头管理','发票记录'])
const addInvoice = () => {
uni.navigateTo({
url: "/pages/user/invoices/addInvoiceHeader?type=add"
})
}
function formatTimestamp(timestamp) {
const date = new Date(Number(timestamp)); // 确保时间戳是数字
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始,加 1 并补零
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
</script>
<style lang="scss" scoped>
.invoiceCenters{
overflow: auto;
}
::v-deep .invoice_tabbar {
.invoice_tabbar_title {
margin-bottom: 20rpx;
background: white !important;
.segmented-control__text {
font-size: 17px;
}
.segmented-control__item--text {
border-bottom-width: 3px;
}
}
}
//模态框
.custom-popup {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
}
.popup-content {
background-color: #fff;
border-radius: 10px;
width: 72%;
height: 50vh;
position: relative;
text-align: center;
background-repeat: no-repeat;
background-size: 105% 105%;
background-position: center;
background-image: url("https://xcx.dfhg888.cn/admin-api/infra/file/29/get/6bbea043f7ac06e25a33a28c7f942a8034a7a75185084c1556d2b1d25339a7cb.png");
.del_btn{
position: absolute;
right: 20rpx;
top: 13rpx;
font-size: 36rpx;
}
}
.title {
font-size: 18px;
margin-bottom: 10px;
}
.radio-item {
display: flex;
align-items: center;
margin: 10px 0;
}
.btns {
width: 100%;
display: flex;
position: absolute;
bottom: 98rpx;
justify-content: center;
>button{
width: 33%;
height: 42rpx;
margin: 0;
background: transparent;
}
}
//模态框
.addInvoiceBtn {
width: 90%;
height: 95rpx;
line-height: 95rpx;
text-align: center;
border-radius: 100rpx;
z-index: 10;
position: fixed;
color: white;
font-size: 36rpx;
background-color: #7D9337;
bottom: 50rpx;
left: 50%;
transform: translateX(-50%);
}
.color-gray {
color: #6e6a6a;
}
.invoList {
width: 100%;
height: 75vh;
overflow: auto;
background-color: #F5F5F5;
.invoice_item-a {
width: 95%;
margin: 0 auto 20rpx;
padding: 30rpx 20rpx;
box-sizing: border-box;
border-radius: 10rpx;
background-color: white;
.goods_box {
width: 100%;
display: flex;
>image {
margin-right: 20rpx;
width: 80rpx;
min-width: 80rpx;
height: 80rpx;
border-radius: 10rpx;
}
}
.invoice_box {
width: 100%;
margin: 20rpx auto;
padding: 20rpx 30rpx;
background-color: #F5F6F8;
border-radius: 20rpx;
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
.invoicea_type {
font-weight: bold;
margin-bottom: 16rpx;
}
.goods_mon {
font-size: 30rpx;
font-weight: bold;
}
}
.set_box {
display: flex;
margin: 36rpx auto 0;
align-items: center;
justify-content: space-between;
.invoicea_status {
font-size: 30rpx;
font-weight: bold;
}
.lookDetailbtn {
border-radius: 100rpx;
border: 1px solid #bbb5b5;
padding: 10rpx 16rpx;
}
}
}
.invoice_item {
width: 95%;
height: 230rpx;
margin: 0 auto 20rpx;
padding: 30rpx 20rpx;
box-sizing: border-box;
border-radius: 10rpx;
background-color: white;
display: flex;
justify-content: space-between;
.ii_left {
.inhead_name {
display: flex;
font-size: 30rpx;
margin-bottom: 16rpx;
align-items: center;
.defaultFont{
margin-left: 26rpx;
font-size: 22rpx;
padding: 0 10rpx;
color: #7D9337;
border: 1px solid #7D9337;
}
}
.inhead_email {
margin-bottom: 8rpx;
}
}
.ii_right {
display: flex;
flex-direction: column;
align-items: flex-end;
justify-content: space-between;
.inhead_type {
background-color: #FAF0e2;
padding: 5rpx 10rpx;
color: #C9792B;
font-size: 28rpx;
}
.inhead_set {
display: flex;
.inhead_set_btn {
.ii_icon {
margin-right: 5rpx;
}
}
.inhead_change {
margin-right: 24rpx;
}
}
}
}
}
.noInvoices{
width: 100%;
display: flex;
padding-top: 135rpx;
text-align: center;
flex-direction: column;
align-items: center;
font-size: 31rpx;
color: #B0B0B0;
>image{
margin-bottom: 20rpx;
}
}
</style>