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

387 lines
9.4 KiB
Vue
Raw 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="set-userinfo-wrap">
<!-- <view class="invoiceTitle">发票列表</view> -->
<view class="invoiceHeader">
<uni-forms ref="baseForm" label-width="200" :modelValue="state.baseFormData" :rules="rules">
<!-- <uni-forms-item label="发票类型" required name="type">
<uni-data-checkbox selectedColor="#7D9337" @change="headChange" v-model="state.baseFormData.type"
:localdata="state.sexs" />
</uni-forms-item> -->
<uni-forms-item label="发票金额" required name="orderMoney">
<uni-easyinput :clearable="false" readonly class="right-input"
v-model="state.baseFormData.orderMoney" inputBorder="false" placeholder="请输入发票金额" />
</uni-forms-item>
<!-- <uni-forms-item label="开票方式" required name="way">
<uni-data-checkbox selectedColor="#7D9337" @change="headChange" v-model="state.baseFormData.way"
:localdata="state.ways" />
</uni-forms-item> -->
<uni-forms-item label="发票抬头" required name="headId">
<!-- <uni-easyinput :clearable="false" class="right-input" v-model="state.baseFormData.taxNumber"
placeholder="请输入发票抬头(必填)" /> -->
<!-- Picker 组件 -->
<picker
mode="selector"
:range="state.options"
:value="selectedIndex"
@change="handlePickerChange"
class="picker"
>
<view class="picker-text">
{{ state.options[selectedIndex] }}
</view>
</picker>
<!-- 单级选择器 -->
</uni-forms-item>
<!-- <uni-forms-item label="手机号" name="companyTel">
<uni-easyinput :clearable="false" class="right-input" v-model="state.baseFormData.companyTel"
placeholder="请输入手机号" />
</uni-forms-item> -->
<!-- <uni-forms-item label="详细地址" name="companyAddress">
<uni-easyinput :clearable="false" class="right-input" v-model="state.baseFormData.companyAddress"
placeholder="请输入详细地址" />
</uni-forms-item> -->
<!-- <uni-forms-item label="邮箱(非必填)" name="email">
<uni-easyinput :clearable="false" class="right-input" v-model="state.baseFormData.email"
placeholder="请输入邮箱" />
</uni-forms-item> -->
<!-- <uni-forms-item label="公司开户行">
<uni-easyinput v-model="state.baseFormData.name" placeholder="请输入公司开户行" />
</uni-forms-item>
<uni-forms-item label="开户行账号">
<uni-easyinput v-model="state.baseFormData.name" placeholder="请输入开户行账号" />
</uni-forms-item>
<uni-forms-item label="开户行账号">
<uni-easyinput v-model="state.baseFormData.name" placeholder="请输入开户行账号" />
</uni-forms-item> -->
<!-- <view class="agreement-box ss-flex ss-row-left">
<label class="radio ss-flex ss-col-center" @tap="onChange">
<radio :checked="state.baseFormData.isDefault" color="var(--ui-BG-Main)"
style="transform: scale(0.8)" @tap.stop="onChange" />
<view class="agreement-text ss-flex ss-col-center ss-m-l-8">
设置为默认抬头
</view>
</label>
</view> -->
</uni-forms>
</view>
<view class="prompt_box">
<view>温馨提示</view>
<view>1应国家税务总局要求您若开具增值税普通发票须同时提供企业抬头及纳税人识别号否则发票将无法用于企业报销;</view>
<view>2发票将由订单所属城市的公司为您开具;</view>
<view>3配合国家税务总局推进全面数字化的电子发票部分城市已转为全电发票发票处理时长为1-3个工作日请耐心等待</view>
</view>
<view class="addInvoiceBtn" @tap.stop="addInvoice">提交申请</view>
<!-- <view class="cancelInvoiceBtn" @tap.stop="onClickBack">取消</view> -->
</s-layout>
</template>
<script setup>
import InvoiceApi from '@/sheep/api/trade/invoices';
import {
onMounted,
reactive,
ref,
unref,
computed
} from 'vue';
import {
fen2yuan,
formatGoodsSwiper,
useDurationTime
} from '@/sheep/hooks/useGoods';
import {
onLoad
} from '@dcloudio/uni-app';
import sheep from '@/sheep';
const state = reactive({
invoList: [],
sexs: [{
text: '电子发票',
value: false
}, {
text: '实体发票',
value: true
}],
ways: [{
text: "商品类别",
value: 0
}, {
text: "商品明细",
value: 1
}],
options:[],
headList:[],
baseFormData: {
orderMoney: '',
headId: '',
companyTel: '',
companyAddress: '',
email: '',
bizId: '',
status: 0,
userId: ''
},
})
// 当前选中的索引
let selectedIndex = ref(0);
// 根据索引获取当前选中的值
let selectedValue = ref(state.options[selectedIndex.value]);
// 处理选择改变事件
const handlePickerChange = (e) => {
const index = e.detail.value; // 获取用户选择的索引
selectedIndex.value = index;
selectedValue.value = state.options[index]; // 更新显示的值
console.log(index)
state.baseFormData.headId = state.headList[index].id
};
const getInvoiceheadlist =async ()=>{
const {data} = await InvoiceApi.getInvoicesHeadList()
if(!data || data.length === 0){
sheep.$helper.toast("请先增加发票抬头");
return
}
state.headList = data
state.baseFormData.headId = data[0].id
console.log(data)
const names = data.map(item => item.name);
state.options = names
}
const rules = {
orderMoney: {
rules: [{
required: true,
errorMessage: '请输入发票金额',
}, ],
},
};
const baseForm = ref(null);
const userInfo = computed(() => sheep.$store('user').userInfo);
onLoad((options) => {
getInvoiceheadlist()
console.log("路由参数:", options)
state.baseFormData.orderMoney = fen2yuan(options.count)
state.baseFormData.bizId = options.orderId
state.baseFormData.userId = userInfo.value.id
})
const hasHistory = sheep.$router.hasHistory();
function onClickBack() {
if (hasHistory) {
sheep.$router.back();
} else {
sheep.$router.go('/pages/index/index');
}
}
const headChange = (e) => {
console.log("e", e)
}
const onChange = () => {
state.baseFormData.isDefault = !state.baseFormData.isDefault;
}
const getInvoiceheaddetail = async (headid) => {
const res = await InvoiceApi.getInvoicesheadDetail(headid)
console.log("返回的数据", res);
state.baseFormData = res.data
}
const addInvoice = async () => {
// console.log("表单数据",state.baseFormData)
// const validate = await unref(baseForm)
// .validate()
// .catch((error) => {
// console.log('error: ', error);
// });
// console.log("validate", validate)
// if (!validate) {
// return;
// }
// if (validate) {
addInvoicehead(state.baseFormData)
// } else {
// console.log('验证失败');
// uni.showToast({
// title: '请检查输入内容',
// icon: 'none',
// });
// }
}
const addInvoicehead = async (data) => {
const res = await InvoiceApi.createInvoicenew(data)
console.log("返回数据", res)
if (res.code === 0) {
uni.hideToast();
uni.showToast({
title: '提交成功',
icon: 'success',
});
setTimeout(() => {
onClickBack()
}, 1000)
} else {
sheep.$helper.toast(res.msg);
// uni.showToast({
// title: res.msg,
// icon: 'error',
// });
}
}
</script>
<style lang="scss" scoped>
::v-deep .invoiceHeader {
// margin: 20rpx 16rpx;
background-color: white;
.uni-forms-item__content{
display: flex;
align-items: center;
justify-content: flex-end;
}
.picker-text{
width: 300rpx;
height:60rpx ;
line-height: 60rpx;
text-align: right;
padding-right: 10px;
}
.uni-easyinput__content-input {
direction: rtl;
text-align: right;
}
.is-input-border {
border: none;
}
.uni-data-checklist .checklist-group {
justify-content: flex-end;
}
.uni-forms-item {
position: relative;
margin-bottom: 6rpx;
}
.uni-forms-item::after {
content: '';
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 1rpx;
/* 调整为你需要的边框厚度 */
background-color: #ededed;
}
.uni-forms-item__inner {
padding-bottom: 10rpx !important;
}
.agreement-text {
white-space: nowrap;
}
.tcp-text {
color: #7D9337;
}
.agreement-box {
margin-top: 20rpx;
width: 100%;
}
.uni-forms-item__label .label-text {
font-size: 29rpx !important;
}
.right-input {
direction: rtl;
text-align: right;
}
}
.prompt_box{
width: 100%;
padding: 0 20rpx;
box-sizing: border-box;
}
.addInvoiceBtn {
width: 90%;
height: 80rpx;
line-height: 80rpx;
text-align: center;
border-radius: 100rpx;
position: fixed;
color: white;
font-size: 36rpx;
background-color: #7D9337;
bottom: 65rpx;
left: 50%;
transform: translateX(-50%);
}
.cancelInvoiceBtn {
width: 90%;
height: 90rpx;
line-height: 90rpx;
text-align: center;
border-radius: 100rpx;
position: fixed;
color: white;
font-size: 36rpx;
background-color: #7D9337;
bottom: 50rpx;
left: 50%;
transform: translateX(-50%);
}
.invoiceHeader {
// padding: 10rpx 20rpx 0 10rpx;
padding: 20rpx 20rpx 20rpx 30rpx;
border-radius: 10rpx;
}
.invoList {
width: 100%;
background-color: #F5F5F5;
.invoice_item {
width: 95%;
margin: 0 auto 20rpx;
padding: 30rpx 20rpx;
box-sizing: border-box;
border-radius: 10rpx;
background-color: white;
.invoice_no {
margin-bottom: 10rpx;
}
}
}
</style>