This commit is contained in:
cjb 2025-07-23 09:50:26 +08:00
parent 7eb617f285
commit 22c3c5b53b
5 changed files with 754 additions and 0 deletions

View File

@ -0,0 +1,229 @@
<template>
<up-navbar
title="添加抬头"
bgColor="#00aa7f"
:autoBack="true"
leftIconColor="#fff"
titleStyle="color:#fff"
:placeholder="true"
/>
<view style="padding: 30rpx;">
<!-- 注意如果需要兼容微信小程序最好通过setRules方法设置rules规则 -->
<up-form
labelPosition="left"
labelWidth="100"
:model="formdata"
:rules="rules"
ref="uFormRef"
>
<up-form-item
label="抬头类型"
prop="type"
borderBottom
>
<up-radio-group
v-model="formdata.type"
placement="row"
activeColor="#00aa00"
@change="groupChange"
>
<up-radio
:customStyle="{marginBottom: '8px'}"
v-for="(item, index) in radiolist1"
:key="index"
:label="item.label"
:name="item.name"
>
</up-radio>
</up-radio-group>
</up-form-item>
<up-form-item
label="发票抬头"
prop="header"
borderBottom
>
<up-input v-model="formdata.header" border="none" placeholder="请输入发票抬头" clearable />
</up-form-item>
<up-form-item
v-if="formdata.type == 3"
label="税号"
prop="shuihao"
borderBottom
>
<up-input v-model="formdata.shuihao" border="none" placeholder="请输入税号" clearable />
</up-form-item>
<up-form-item
label="邮箱"
prop="email"
borderBottom
>
<up-input v-model="formdata.email" border="none" placeholder="请输入邮箱" clearable />
</up-form-item>
<up-form-item
label="手机号"
prop="phoneNumber"
borderBottom
>
<up-input v-model="formdata.phoneNumber" border="none" placeholder="请输入手机号" clearable />
</up-form-item>
<up-form-item
label="设为默认"
borderBottom
>
<up-switch v-model="formdata.default" size="20" activeColor="#00aa00" />
<!-- <up-checkbox-group @change="mrchange" v-model="formdata.default">
<up-checkbox activeColor="#00aa00" />
</up-checkbox-group> -->
</up-form-item>
<up-button style="margin-top: 100rpx;" type="success" @tap="submit"> </up-button>
</up-form>
</view>
</template>
<script setup lang="ts">
import { ref, reactive } from 'vue'
import { addrese,gethdz,getphone,carlist } from '@/utils/service'
import { onLoad,onShow } from '@dcloudio/uni-app'
import { isToday,getDateDaysAgo } from '@/utils/commen'
//
const radiolist1 = reactive([
{
name: 1,
label:'个人',
disabled: false
},
{
name: 2,
label:'非企业单位',
disabled: false
},
{
name: 3,
label:'企业',
disabled: false
}
])
const groupChange = (n:any) => {
formdata.type = n
}
//const phoneNumber = uni.getStorageSync('PhoneNumber')
let userInfor = uni.getStorageSync('userInfor')
let formdata = reactive({
type:3,
header:'',
shuihao:'',
email:'',
phoneNumber:'',
default:false
})
onShow(() => {
})
const rules = {
header: {
type: 'string',
required: true,
message: '请输入抬头',
trigger: ['blur', 'change'],
},
shuihao: {
type: 'string',
required: true,
message: '请输入税号',
trigger: ['blur', 'change'],
},
email: {
type: 'string',
required: true,
message: '请输入邮箱',
trigger: ['blur', 'change'],
},
phoneNumber: {
type: 'string',
required: true,
message: '请输入手机号',
trigger: ['blur', 'change'],
}
// plateNum:[
// {
// type: 'string',
// required: true,
// message: '',
// trigger: ['blur', 'change'],
// }
// {
// //
// validator: (rule:any, value:any) => {
// const regExp = new RegExp(/^[使A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF][A-HJ-NP-Z0-9][0-9]{4}))$/)
// if (regExp.test(value)) {
// return true
// }
// return false
// },
// message: '',
// // blurchange
// trigger: ['change','blur'],
// }
// ],
}
//
const uFormRef = ref(null)
function submit() {
(uFormRef as any).value.validate().then((valid:any) => {
if(valid){
}
}).catch(() => {
//
})
}
</script>
<style lang="scss" scoped>
page{
background: #f4f4f4;
}
.content{
margin: 30rpx 20rpx;
padding: 50rpx 20rpx;
border-radius: 20rpx;
background: #fff;
.weidu{
}
.avatar {
width: 130rpx;
height: 130rpx;
padding: 0;
border-radius: 50%;
.img{
width: 100%;
height: 100%;
}
}
}
.actnub{
background: #bcca32;
color: #fff;
}
</style>

View File

@ -0,0 +1,253 @@
<template>
<up-navbar
title="电子发票"
bgColor="#00aa7f"
:autoBack="true"
leftIconColor="#fff"
titleStyle="color:#fff"
:placeholder="true"
/>
<view>
<view class="tabct">
<up-tabs
:list="statelist"
:scrollable="false"
@click="tabshand"
lineColor="#00aa00"
/>
</view>
<view style="padding-top: 130rpx;">
<template v-if="type == 1">
<view style="padding:0 25rpx 25rpx;">
<up-checkbox-group
v-model="fparr"
@change="chechange"
activeColor="#5ac725"
>
<view v-for="(n,i) in list" :key="i" style="display: flex;width: 100%;margin-bottom:25rpx;padding: 25rpx;border-radius: 10rpx;background: #fff;">
<up-checkbox :name="`${n.id}:${n.jiner}`" shape="circle" />
<view style="flex: 1;display: flex;padding-right:10rpx;align-items: center;justify-content: space-between;padding-left: 20rpx;">
<view>
<view style="padding-bottom: 10rpx;font-size: 38rpx;">{{n.name}}</view>
<view style="color: #9a9a9a;">{{n.time}}</view>
</view>
<view>
<text style="font-size: 42rpx;color: #aa0000;">{{n.jiner}} </text>
<text></text>
</view>
</view>
</view>
</up-checkbox-group>
</view>
<!-- <parcont>
<item v-for="(n,i) in list" :key="i" :obj="n" />
</parcont> -->
<view class="addbtn" style="display: flex;align-items: center;justify-content: space-between;">
<up-checkbox
shape="circle"
activeColor="#5ac725"
label="全选"
@change="allhand"
v-model:checked="allChecked"
usedAlone
/>
<view style="width: 45%;color: #5d5d5d;">
<view>已选<text style="font-size: 38rpx;font-weight: bold;"> {{total}} </text>个订单</view>
<view>预计金额共:<text style="font-size: 34rpx;font-weight: bold;">¥{{amount}}</text></view>
</view>
<view style="width: 30%;">
<up-button type="success" @tap="topage('/minePages/kaipiao/index')">下一步</up-button>
</view>
<!-- <view @tap="allChecked = !allChecked">全选</view> -->
</view>
</template>
<template v-else-if="type == 2">
<up-empty mode="list" text="暂无记录" />
</template>
<template v-else>
<view class="fplist" v-for="n in 2">
<view>
<text style="font-size: 36rpx;font-weight: bold;color: #3e3e3e;">石家庄城配运输有限责任公司</text>
<text v-if="n == 1" style="margin-left: 10rpx;padding: 8rpx;font-size:20rpx;border-radius: 10rpx;color: #fff;background: #5ac725;">默认</text>
</view>
<view style="padding: 20rpx 0;">789456MAFSR6Y</view>
<view style="display: flex;justify-content: flex-end;">
<view @tap="topage('/minePages/addfptt/index')" style="display: flex;align-items: center;margin-right: 20rpx;">
<up-icon name="order" color="#b3b3b3" size="22" />
<view style="color:#b3b3b3;">编辑</view>
</view>
<view style="display: flex;align-items: center;">
<up-icon name="trash" color="#ad6143" size="22" />
<view @tap="showpop = true" style="color: #ad6143;">删除</view>
</view>
</view>
</view>
<!-- <view class="ttbtn" @tap="topage('/minePages/addfptt/index')">添加抬头</view> -->
<view class="addbtn">
<up-button type="success" @tap="topage('/minePages/addfptt/index')">添加抬头</up-button>
</view>
</template>
</view>
</view>
<up-modal
:show="showpop"
title="确定删除?"
:showCancelButton="true"
confirmColor="#5ac725"
@confirm="confirm"
@cancel="cancel"
/>
<!-- <up-popup :show="showpop" /> -->
</template>
<script setup lang="ts">
import { ref,reactive,watch } from 'vue'
// import Parcont from './parcont.vue'
// import Item from './item.vue'
let showpop = ref(false)
let type = ref(1)
const statelist = reactive([
{ name: '自助开票',type:1},
{ name: '开票记录', type:2},
{ name: '抬头管理', type:3}
])
let list = ref<any>([
{
name:'慧鹏大连站',
time:'2025-05-15',
jiner:120,
id:111
},
{
name:'慧鹏大连站',
time:'2025-05-20',
jiner:100,
id:222
},
])
let checked = ref(false)
let fparr = ref<any>([])
//tabs
function tabshand(n:any){
type.value = n.type
}
function topage(url:string) {
uni.navigateTo({
url
})
}
function confirm() {
showpop.value = false
}
function cancel() {
showpop.value = false
}
//
let total = ref(0)
//
let amount = ref(0)
//
let allChecked = ref<any>(false)
// watch(() => allChecked.value,(v) => {
// fparr.value.splice(0)
// if(v){
// list.value.map((n:any) => {
// fparr.value.push(n.id)
// })
// }
// })
function allhand() {
fparr.value.splice(0)
if(allChecked.value){
list.value.map((n:any) => {
fparr.value.push(n.id)
})
}
}
function chechange(v:any) {
fparr.value.splice(0)
amount.value = 0
v.forEach((n:any) => {
let glarr = n.split(':')
fparr.value.push(glarr[0])
amount.value = glarr[1]*1 + amount.value
})
if(list.value.length == v.length){
allChecked.value = true
}else{
allChecked.value = false
}
total.value = v.length
}
</script>
<style lang="scss">
page{
background: #f4f4f4;
}
.tabct{
position: fixed;
width: 100%;
box-sizing: border-box;
padding-bottom: 10rpx;
background: #fff;
z-index: 99;
}
.fplist{
margin:0 25rpx 40rpx;
padding: 25rpx;
//padding: 25rpx;
border-radius: 20rpx;
box-shadow: 0 0 10px 2px rgba(190, 190, 190, 0.5);
background: #fff;
border-radius: 20rpx;
}
.ttbtn{
width: 90%;
height: 85rpx;
margin: 0 auto;
line-height: 85rpx;
border-radius: 50rpx;
text-align: center;
color: #5ac725;
border: 1px solid #5ac725;
}
.addbtn{
position: fixed;
box-sizing: border-box;
left: 0;
bottom: 0;
width: 100%;
height: 200rpx;
padding: 30rpx;
background: #fff;
}
.zzkpbtn{
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 200rpx;
background: #fff;
}
</style>

View File

@ -0,0 +1,252 @@
<template>
<up-navbar
title="电子发票"
bgColor="#00aa7f"
:autoBack="true"
leftIconColor="#fff"
titleStyle="color:#fff"
:placeholder="true"
/>
<!-- <view style="padding: 20rpx;background: #d09b24;color: #fff;">温馨提示:将为您开具增值税电子普通发票</view> -->
<view style="padding: 30rpx;">
<!-- 注意如果需要兼容微信小程序最好通过setRules方法设置rules规则 -->
<up-form
labelPosition="left"
labelWidth="100"
:model="formdata"
:rules="rules"
ref="uFormRef"
>
<view style="margin-bottom: 50rpx;padding: 30rpx;border: 1px solid #50a100;border-radius: 20rpx;">
<view style="font-size: 34rpx;color: #50a100;">发票详情</view>
<up-form-item
label="抬头类型"
prop="type"
borderBottom
>
<up-radio-group
v-model="formdata.type"
placement="row"
activeColor="#00aa00"
@change="groupChange"
>
<up-radio
:customStyle="{marginBottom: '8px'}"
v-for="(item, index) in radiolist1"
:key="index"
:label="item.label"
:name="item.name"
>
</up-radio>
</up-radio-group>
</up-form-item>
<up-form-item
label="发票抬头"
prop="header"
borderBottom
>
<up-input v-model="formdata.header" border="none" placeholder="请输入发票抬头" clearable />
</up-form-item>
<up-form-item
v-if="formdata.type == 3"
label="税号"
prop="shuihao"
borderBottom
>
<up-input v-model="formdata.shuihao" border="none" placeholder="请输入税号" clearable />
</up-form-item>
<up-form-item
label="发票内容"
prop="shuihao"
borderBottom
>
<up-input border="none" disabled />
</up-form-item>
<up-form-item
label="发票金额"
prop="shuihao"
borderBottom
>
<view>200</view>
</up-form-item>
</view>
<view style="padding: 30rpx;border: 1px solid #50a100;border-radius: 20rpx;">
<view style="font-size: 34rpx;color: #50a100;">发票信息</view>
<up-form-item
label="邮箱"
prop="email"
borderBottom
>
<up-input v-model="formdata.email" border="none" placeholder="请输入邮箱" clearable />
</up-form-item>
<up-form-item
label="手机号"
prop="phoneNumber"
borderBottom
>
<up-input v-model="formdata.phoneNumber" border="none" placeholder="请输入手机号" clearable />
</up-form-item>
<up-form-item
label="备注"
prop="phoneNumber"
borderBottom
>
<up-input v-model="formdata.phoneNumber" border="none" placeholder="请输入备注" clearable />
</up-form-item>
</view>
<up-button style="margin-top: 100rpx;" type="success" @tap="submit"> </up-button>
</up-form>
</view>
</template>
<script setup lang="ts">
import { ref, reactive } from 'vue'
import { addrese,gethdz,getphone,carlist } from '@/utils/service'
import { onLoad,onShow } from '@dcloudio/uni-app'
import { isToday,getDateDaysAgo } from '@/utils/commen'
//
const radiolist1 = reactive([
{
name: 1,
label:'个人',
disabled: false
},
{
name: 2,
label:'非企业单位',
disabled: false
},
{
name: 3,
label:'企业',
disabled: false
}
])
const groupChange = (n:any) => {
formdata.type = n
}
//const phoneNumber = uni.getStorageSync('PhoneNumber')
let userInfor = uni.getStorageSync('userInfor')
let formdata = reactive({
type:3,
header:'',
shuihao:'',
email:'',
phoneNumber:'',
default:false
})
onShow(() => {
})
const rules = {
header: {
type: 'string',
required: true,
message: '请输入抬头',
trigger: ['blur', 'change'],
},
shuihao: {
type: 'string',
required: true,
message: '请输入税号',
trigger: ['blur', 'change'],
},
email: {
type: 'string',
required: true,
message: '请输入邮箱',
trigger: ['blur', 'change'],
},
phoneNumber: {
type: 'string',
required: true,
message: '请输入手机号',
trigger: ['blur', 'change'],
}
// plateNum:[
// {
// type: 'string',
// required: true,
// message: '',
// trigger: ['blur', 'change'],
// }
// {
// //
// validator: (rule:any, value:any) => {
// const regExp = new RegExp(/^[使A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF][A-HJ-NP-Z0-9][0-9]{4}))$/)
// if (regExp.test(value)) {
// return true
// }
// return false
// },
// message: '',
// // blurchange
// trigger: ['change','blur'],
// }
// ],
}
//
const uFormRef = ref(null)
function submit() {
(uFormRef as any).value.validate().then((valid:any) => {
if(valid){
}
}).catch(() => {
//
})
}
</script>
<style lang="scss" scoped>
page{
background: #f4f4f4;
}
.content{
margin: 30rpx 20rpx;
padding: 50rpx 20rpx;
border-radius: 20rpx;
background: #fff;
.weidu{
}
.avatar {
width: 130rpx;
height: 130rpx;
padding: 0;
border-radius: 50%;
.img{
width: 100%;
height: 100%;
}
}
}
.actnub{
background: #bcca32;
color: #fff;
}
</style>

View File

@ -75,6 +75,12 @@
},
{
"path": "invoice/index" //
},
{
"path": "addfptt/index" //
},
{
"path": "kaipiao/index" //
}
]
}

View File

@ -60,6 +60,13 @@
</view>
<up-icon name="arrow-right" color="#b9b9b9" />
</view>
<view class="gnrk" @tap="topage('/minePages/invoice/index')">
<view>
<image src="../../static/img/cd4.png" />
<view>电子发票</view>
</view>
<up-icon name="arrow-right" color="#b9b9b9" />
</view>
</template>
<template v-else>
<view class="gnrk" @tap="wdltip">
@ -97,6 +104,13 @@
</view>
<up-icon name="arrow-right" color="#b9b9b9" />
</view>
<view class="gnrk">
<view>
<image src="../../static/img/cd4.png" />
<view>电子发票</view>
</view>
<up-icon name="arrow-right" color="#b9b9b9" />
</view>
</template>
<view class="gnrk" @tap="kefu">
<view>