no message

This commit is contained in:
PC-202306242200\Administrator
2026-03-28 23:00:29 +08:00
commit 4d06351f6a
2830 changed files with 166480 additions and 0 deletions

View File

@@ -0,0 +1,172 @@
<template>
<view class="invoice">
<view class="invoice_tip">
<view style="display: flex; align-items: center">
<up-icon name="error-circle-fill" color="#3c9cff"></up-icon>
发票须知
</view>
<view>1.开票金额为用户实际支付金额(不含返利返佣)</view>
<view>2.未寄出的纸质发票会在开票确认后的20个工作日内寄出</view>
<view>3.单笔订单只支持开具一种发票类型</view>
<view>4.云快充仅为平台方实际开票主体以申请开票时展示的开票运营商公司为准</view>
<view>5.发票由各家电站运营商提供一起申请可能会生成多张发票</view>
<view>6.若超过20个工作日仍未收到发票您可以通过(区号)+12366向开票公司所在区域的主管税务机关进行反馈处理</view>
</view>
<view style="height: 20rpx"></view>
<view>
<z-paging ref="paging" v-model="dataList" use-page-scroll @query="queryList">
<up-checkbox-group v-model="checkboxValue1" placement="column" @change="checkboxChange">
<view class="invoice_list" style="margin-bottom: 20rpx" v-for="(item, index) in dataList" :key="index">
<view style="display: flex; align-items: center; font-weight: bold; font-size: 30rpx; margin-bottom: 30rpx">
<up-checkbox shape="circle" :customStyle="{ margin: '0' }" :name="item.id"></up-checkbox>
充电单号{{ item.orderNo }}
</view>
<view style="display: flex; align-items: center; justify-content: space-between; background-color: #f6f6f6; border-radius: 15rpx; padding: 20rpx">
<view style="font-size: 28rpx">
<view style="margin-bottom: 15rpx">即途展厅</view>
<view style="margin-bottom: 15rpx">{{item.electricityAmount}}电费</view>
<view>{{ item.serviceAmount }}服务费</view>
</view>
<view style="text-align: right">
<view style="margin-bottom: 25rpx; font-size: 36rpx; font-weight: bold; color: #4879e6">
{{ item.actuallyAmount }}
<text style="font-size: 30rpx"></text>
</view>
<view style="font-size: 28rpx">个人支付</view>
</view>
</view>
</view>
</up-checkbox-group>
</z-paging>
</view>
<view
style="
position: fixed;
bottom: 0;
left: 0;
width: 750rpx;
padding: 20rpx 50rpx;
background-color: #fff;
display: flex;
align-items: center;
justify-content: space-between;
"
>
<view style="display: flex; align-items: center">
<up-checkbox label="本页全选" v-model:checked="allCel" shape="circle" usedAlone @change="allCheck" :customStyle="{ margin: '0 10rpx 0 0' }"></up-checkbox>
</view>
<view style="width: 230rpx">
<up-button
@click="navTo(`/pageMake/invoice/applyForDay?list=${encodeURIComponent(JSON.stringify(checkboxValue1))}`)"
:customStyle="{ height: '80rpx', width: '230rpx' }"
color="#4879e6"
text="下一步"
shape="circle"
:disabled="checkboxValue1.length == 0"
></up-button>
</view>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue';
import { onLoad, onShow, onPullDownRefresh, onPageScroll, onReachBottom } from '@dcloudio/uni-app';
import { useNav } from '@/hooks/useNav.js';
const { nav, navTo } = useNav();
import { orderList } from '@/api/api.js';
let checkboxValue1 = ref([]);
const dataList = ref([]);
const paging = ref(null);
let allCel = ref(false);
const allCheck = (e) => {
if (e) {
checkboxValue1.value = dataList.value.map((item, index) => {
return item.id;
});
} else {
checkboxValue1.value = [];
}
allCel.value = e;
console.log(e);
};
const queryList = async (pageNo, pageSize) => {
const params = {
current: pageNo,
pageSize: pageSize
};
orderList(params)
.then((res) => {
paging.value.complete(res);
uni.hideLoading();
})
.catch((res) => {
paging.value.complete(false);
uni.hideLoading();
});
};
const checkboxChange = (e) => {
if (e.length == dataList.value.length) {
allCel.value = true;
} else {
allCel.value = false;
}
console.log(e);
};
let isPagingRefNotFound = () => {
return !paging.value;
};
onPullDownRefresh(() => {
if (isPagingRefNotFound()) return;
paging.value.reload().catch(() => {});
});
onPageScroll((e) => {
if (isPagingRefNotFound()) return;
paging.value.updatePageScrollTop(e.scrollTop);
e.scrollTop < 10 && paging.value.doChatRecordLoadMore();
});
onReachBottom(() => {
if (isPagingRefNotFound()) return;
paging.value.pageReachBottom();
});
</script>
<style scoped lang="scss">
.invoice {
&_tip {
padding: 20rpx;
font-size: 24rpx;
color: #3c9cff;
background-color: rgba(60, 156, 255, 0.2);
view {
line-height: 40rpx;
}
}
&_list {
padding: 15rpx 30rpx;
background-color: #fff;
&_view {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 28rpx;
margin-bottom: 25rpx;
&_left {
color: #646368;
}
&_right {
color: #262626;
}
}
}
}
</style>

View File

@@ -0,0 +1,115 @@
<template>
<view class="invoice">
<view class="invoice_tip">
<view style="display: flex; align-items: center">
<up-icon name="error-circle-fill" color="#3c9cff"></up-icon>
发票须知
</view>
<view>1.开票金额为用户实际支付金额(不含返利返佣)</view>
<view>2.未寄出的纸质发票会在开票确认后的20个工作日内寄出</view>
<view>3.单笔订单只支持开具一种发票类型</view>
<view>4.云快充仅为平台方实际开票主体以申请开票时展示的开票运营商公司为准</view>
<view>5.发票由各家电站运营商提供一起申请可能会生成多张发票</view>
<view>6.若超过20个工作日仍未收到发票您可以通过(区号)+12366向开票公司所在区域的主管税务机关进行反馈处理</view>
</view>
<view style="height: 20rpx"></view>
<view>
<view class="invoice_list" style="margin-bottom: 20rpx" v-for="(item, index) in dataList" :key="index">
<view style="display: flex; align-items: center; font-weight: bold; font-size: 30rpx; margin-bottom: 30rpx">
<!-- <up-checkbox shape="circle" :customStyle="{ margin: '0' }" :name="item.transactionNo"></up-checkbox> -->
开票运营商{{ item.merchantName }}
</view>
<view style="display: flex; align-items: center; justify-content: space-between; background-color: #f6f6f6; border-radius: 15rpx; padding: 20rpx">
<view style="font-size: 28rpx">
<view style="margin-bottom: 15rpx">{{ item.electricityAmount }}电费</view>
<view>{{ item.serviceAmount }}服务费</view>
</view>
<view style="text-align: right">
<view style="margin-bottom: 25rpx; font-size: 36rpx; font-weight: bold; color: #4879e6">
{{ item.invoiceAmount }}
<text style="font-size: 30rpx"></text>
</view>
<view style="font-size: 28rpx">个人支付</view>
</view>
</view>
</view>
</view>
<view
style="
position: fixed;
bottom: 0;
left: 0;
width: 750rpx;
padding: 20rpx 50rpx;
background-color: #fff;
display: flex;
align-items: center;
justify-content: space-between;
"
>
<view></view>
<!-- <view style="display: flex; align-items: center">
<up-checkbox label="本页全选" v-model:checked="allCel" shape="circle" usedAlone @change="allCheck" :customStyle="{ margin: '0 10rpx 0 0' }"></up-checkbox>
</view> -->
<view style="width: 230rpx">
<up-button
@click="navTo(`/pageMake/invoice/makeInvoice?list=${encodeURIComponent(JSON.stringify(checkboxValue1))}`)"
:customStyle="{ height: '80rpx', width: '230rpx' }"
color="#4879e6"
text="下一步"
shape="circle"
></up-button>
</view>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue';
import { onLoad } from '@dcloudio/uni-app';
import { useNav } from '@/hooks/useNav.js';
const { nav, navTo } = useNav();
import { preApply } from '@/api/api.js';
const dataList = ref([]);
let checkboxValue1 = ref([]);
onLoad(async (options) => {
checkboxValue1.value = JSON.parse(decodeURIComponent(options.list));
console.log(checkboxValue1.value);
let _res = await preApply({ ordersIds: JSON.parse(decodeURIComponent(options.list)) });
dataList.value = _res;
});
</script>
<style scoped lang="scss">
.invoice {
&_tip {
padding: 20rpx;
font-size: 24rpx;
color: #3c9cff;
background-color: rgba(60, 156, 255, 0.2);
view {
line-height: 40rpx;
}
}
&_list {
padding: 15rpx 30rpx;
background-color: #fff;
&_view {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 28rpx;
margin-bottom: 25rpx;
&_left {
color: #646368;
}
&_right {
color: #262626;
}
}
}
}
</style>

View File

@@ -0,0 +1,127 @@
<template>
<view class="invoice">
<view class="invoice_tip">
<view style="display: flex; align-items: center">
<up-icon name="error-circle-fill" color="#3c9cff"></up-icon>
温馨提示
</view>
<view>1.云充电仅为平台方实际开票主体以下方展示的开票公司为准</view>
<view>2.若超过20个工作日仍未收到发票您可以通过(区号)+12366向开票公司所在区域的主管税务机关进行反馈处理</view>
</view>
<view style="height: 20rpx"></view>
<z-paging ref="paging" v-model="dataList" use-page-scroll @query="queryList">
<view class="invoice_list" v-for="(item, index) in dataList" :key="index">
<view class="invoice_list_view">
<view class="invoice_list_view_left" style="display: flex; align-items: center">
<up-icon name="clock-fill"></up-icon>
{{item.createTime}}
</view>
<up-icon name="arrow-right"></up-icon>
</view>
<view class="invoice_list_view">
<view class="invoice_list_view_left">发票抬头</view>
<view class="invoice_list_view_right">{{item.invoiceTitle}}</view>
</view>
<view class="invoice_list_view">
<view class="invoice_list_view_left">开票运营商</view>
<view class="invoice_list_view_right">{{item.merchantInvoice || '-'}}</view>
</view>
<view style="border: 1px dashed #eee"></view>
<view style="height: 20rpx"></view>
<view style="display: flex; align-items: center; justify-content: space-between">
<view>
<up-tag v-if="item.status == 0" text="待开票" type="warning" plain plainFill></up-tag>
<up-tag v-if="item.status == 1" text="已开票" type="success" plain plainFill></up-tag>
<up-tag v-if="item.status == -1" text="取消" type="error" plain plainFill></up-tag>
</view>
<view style="font-size: 36rpx; font-weight: bold">
{{item.invoiceAmount}}
<text style="font-size: 30rpx"></text>
</view>
</view>
</view>
</z-paging>
<view style="height: 150rpx;"></view>
<view style="position: fixed; bottom: 0; left: 0; width: 750rpx; padding: 20rpx 50rpx; background-color: #fff">
<up-button @click="navTo('/pageMake/invoice/applyFor')" :customStyle="{ height: '80rpx' }" color="#4879e6" text="申请开票" shape="circle"></up-button>
</view>
</view>
</template>
<script setup>
import { onLoad, onShow, onPullDownRefresh, onPageScroll, onReachBottom } from '@dcloudio/uni-app';
import { useNav } from '@/hooks/useNav.js';
import { ref } from 'vue';
const { nav, navTo } = useNav();
import { invoiceList } from '@/api/api.js';
const dataList = ref([]);
const paging = ref(null);
const queryList = async (pageNo, pageSize) => {
const params = {
current: pageNo,
pageSize: pageSize
};
invoiceList(params)
.then((res) => {
paging.value.complete(res);
uni.hideLoading();
})
.catch((res) => {
paging.value.complete(false);
uni.hideLoading();
});
};
let isPagingRefNotFound = () => {
return !paging.value;
};
onPullDownRefresh(() => {
if (isPagingRefNotFound()) return;
paging.value.reload().catch(() => {});
});
onPageScroll((e) => {
if (isPagingRefNotFound()) return;
paging.value.updatePageScrollTop(e.scrollTop);
e.scrollTop < 10 && paging.value.doChatRecordLoadMore();
});
onReachBottom(() => {
if (isPagingRefNotFound()) return;
paging.value.pageReachBottom();
});
</script>
<style scoped lang="scss">
.invoice {
&_tip {
padding: 20rpx;
font-size: 24rpx;
color: #3c9cff;
background-color: rgba(60, 156, 255, 0.2);
view {
line-height: 40rpx;
}
}
&_list {
padding: 15rpx 30rpx;
background-color: #fff;
&_view {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 28rpx;
margin-bottom: 25rpx;
&_left {
color: #646368;
}
&_right {
color: #262626;
}
}
}
}
</style>

View File

@@ -0,0 +1,296 @@
<template>
<view class="invoice">
<view class="invoice_tip">
<view style="display: flex; align-items: center">
<up-icon name="error-circle-fill" color="#3c9cff"></up-icon>
发票须知
</view>
<view>1.开票金额为用户实际支付金额(不含返利返佣)</view>
<view>2.未寄出的纸质发票会在开票确认后的20个工作日内寄出</view>
<view>3.单笔订单只支持开具一种发票类型</view>
<view>4.云快充仅为平台方实际开票主体以申请开票时展示的开票运营商公司为准</view>
<view>5.发票由各家电站运营商提供一起申请可能会生成多张发票</view>
<view>6.若超过20个工作日仍未收到发票您可以通过(区号)+12366向开票公司所在区域的主管税务机关进行反馈处理</view>
</view>
<view style="height: 30rpx"></view>
<view style="padding: 30rpx; font-size: 28rpx; background-color: #fff">
<view class="flex-acsb" style="height: 80rpx">
<view>
发票主体
<text style="color: #f56c6c">*</text>
</view>
<view class="flex-acsb" @click="show2 = true">
<text :style="{ color: !dataFrom.subjectType ? '#808080' : '' }">
{{ !dataFrom.subjectType ? '请选择' : columns2[0].find((val) => val.id == dataFrom.subjectType).label }}
</text>
<up-icon name="arrow-down"></up-icon>
</view>
</view>
<view class="flex-acsb" style="height: 80rpx">
<view>
发票类型
<text style="color: #f56c6c">*</text>
</view>
<view class="flex-acsb" @click="show1True">
<text :style="{ color: !dataFrom.invoiceType ? '#808080' : '' }">
{{ !dataFrom.invoiceType ? '请选择' : columns1[0].find((val) => val.id == dataFrom.invoiceType).label }}
</text>
<up-icon name="arrow-down"></up-icon>
</view>
</view>
<view class="flex-acsb" style="height: 80rpx">
<view>
发票抬头
<text style="color: #f56c6c">*</text>
</view>
<view>
<input v-model="dataFrom.invoiceTitle" placeholder="请输入发票抬头" style="text-align: right" type="text" />
</view>
</view>
<view class="flex-acsb" style="height: 80rpx" v-if="dataFrom.subjectType == 1">
<view>
发票税号
<text style="color: #f56c6c">*</text>
</view>
<view>
<input v-model="dataFrom.taxNumber" placeholder="请输入发票税号" style="text-align: right" type="text" />
</view>
</view>
<view class="flex-acsb" style="height: 80rpx" v-if="dataFrom.invoiceType == 2">
<view>
公司地址
<text style="color: #f56c6c">*</text>
</view>
<view>
<input v-model="dataFrom.registrationAddress" placeholder="请输入公司地址" style="text-align: right" type="text" />
</view>
</view>
<view class="flex-acsb" style="height: 80rpx" v-if="dataFrom.invoiceType == 2">
<view>
公司电话
<text style="color: #f56c6c">*</text>
</view>
<view>
<input v-model="dataFrom.registrationPhone" placeholder="请输入公司电话" style="text-align: right" type="text" />
</view>
</view>
<view class="flex-acsb" style="height: 80rpx" v-if="dataFrom.invoiceType == 2">
<view>
开户行名称
<text style="color: #f56c6c">*</text>
</view>
<view>
<input v-model="dataFrom.bankName" placeholder="请输入开户行名称" style="text-align: right" type="text" />
</view>
</view>
<view class="flex-acsb" style="height: 80rpx" v-if="dataFrom.invoiceType == 2">
<view>
开户行账号
<text style="color: #f56c6c">*</text>
</view>
<view>
<input v-model="dataFrom.bankAccount" placeholder="请输入开户行账号" style="text-align: right" type="text" />
</view>
</view>
</view>
<view style="height: 30rpx"></view>
<view style="padding: 30rpx; font-size: 28rpx; background-color: #fff">
<view class="flex-acsb" style="height: 80rpx">
<view>
收票人姓名
<text style="color: #f56c6c">*</text>
</view>
<view>
<input v-model="dataFrom.name" placeholder="请输入收票人姓名" style="text-align: right" type="text" />
</view>
</view>
<view class="flex-acsb" style="height: 80rpx">
<view>
收票人手机
<text style="color: #f56c6c">*</text>
</view>
<view>
<input v-model="dataFrom.phone" type="number" placeholder="请输入收票人手机" style="text-align: right" />
</view>
</view>
<view class="flex-acsb" style="height: 80rpx">
<view>
收票人地址
<text style="color: #f56c6c">*</text>
</view>
<view>
<input v-model="dataFrom.address" placeholder="请输入收票人地址" style="text-align: right" type="text" />
</view>
</view>
<view class="flex-acsb" style="height: 80rpx">
<view>
收票人邮箱
<text style="color: #f56c6c">*</text>
</view>
<view>
<input v-model="dataFrom.email" placeholder="请输入收票人邮箱" style="text-align: right" type="text" />
</view>
</view>
</view>
<view style="height: 30rpx"></view>
<view class="p30">
<view style="font-weight: bold; font-size: 30rpx">发票备注改内容会打印在发票上</view>
<up-textarea v-model="dataFrom.invoiceRemark" placeholder="请输入内容"></up-textarea>
</view>
<view style="height: 150rpx"></view>
<view
style="
position: fixed;
bottom: 0;
left: 0;
width: 750rpx;
padding: 20rpx 50rpx;
background-color: #fff;
display: flex;
align-items: center;
justify-content: space-between;
"
>
<view style="display: flex; align-items: center; font-size: 28rpx">
<text>合计</text>
<text style="font-size: 36rpx; font-weight: bold; margin: 0 15rpx">14.05</text>
<text></text>
</view>
<view style="width: 230rpx">
<up-button @click="applyCon" :customStyle="{ height: '80rpx', width: '230rpx' }" color="#4879e6" text="确认开票" shape="circle"></up-button>
</view>
</view>
<up-picker @confirm="aaa1" keyName="label" :show="show1" @cancel="show1 = false" :columns="columns1"></up-picker>
<up-picker @confirm="aaa2" keyName="label" :show="show2" @cancel="show2 = false" :columns="columns2"></up-picker>
</view>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { apply } from '@/api/api.js';
import { onLoad } from '@dcloudio/uni-app';
let checkboxValue1 = ref([]);
let dataFrom = ref({
invoiceType: null,
subjectType: null,
ordersIds: []
});
let show1 = ref(false);
let show2 = ref(false);
onLoad(async (options) => {
console.log(options);
console.log(JSON.parse(decodeURIComponent(options.list)));
dataFrom.value.ordersIds = JSON.parse(decodeURIComponent(options.list));
});
const applyCon = async () => {
if (!dataFrom.value.subjectType) return uni.showToast({ title: '请选择发票主体', icon: 'none' });
if (!dataFrom.value.invoiceType) return uni.showToast({ title: '请选择发票类型', icon: 'none' });
if (!dataFrom.value.invoiceType == 1 && !dataFrom.value.taxNumber) return uni.showToast({ title: '请输入发票税号', icon: 'none' });
if (!dataFrom.value.subjectType == 1 && !dataFrom.value.registrationPhone) return uni.showToast({ title: '请输入发票税号', icon: 'none' });
if (!dataFrom.value.subjectType == 1 && !dataFrom.value.invoiceType == 2 && !dataFrom.value.taxNumber) return uni.showToast({ title: '请输入发票税号', icon: 'none' });
if (!dataFrom.value.subjectType == 1 && !dataFrom.value.invoiceType == 2 && !dataFrom.value.registrationAddress)
return uni.showToast({ title: '请输入公司地址', icon: 'none' });
if (!dataFrom.value.subjectType == 1 && !dataFrom.value.invoiceType == 2 && !dataFrom.value.registrationPhone) return uni.showToast({ title: '请输入公司电话', icon: 'none' });
if (!dataFrom.value.subjectType == 1 && !dataFrom.value.invoiceType == 2 && !dataFrom.value.bankName) return uni.showToast({ title: '请输入开户行名称', icon: 'none' });
if (!dataFrom.value.subjectType == 1 && !dataFrom.value.invoiceType == 2 && !dataFrom.value.bankAccount) return uni.showToast({ title: '请输入开户行账户', icon: 'none' });
if (!dataFrom.value.name) return uni.showToast({ title: '请输入收票人姓名', icon: 'none' });
if (!dataFrom.value.address) return uni.showToast({ title: '请输入收票人地址', icon: 'none' });
if (!dataFrom.value.phone) return uni.showToast({ title: '请输入收票人电话', icon: 'none' });
if (!dataFrom.value.email) return uni.showToast({ title: '请输入收票人邮箱', icon: 'none' });
let _res = await apply(dataFrom.value);
uni.navigateBack({
delta: 3
});
};
const aaa1 = (ee) => {
dataFrom.value.invoiceType = ee.value[0].id;
show1.value = false;
console.log(dataFrom.value.invoiceType);
};
const aaa2 = (ee) => {
dataFrom.value.subjectType = ee.value[0].id;
show2.value = false;
if (ee.value[0].id == 2) {
dataFrom.value.invoiceType = 1;
}
};
const show1True = () => {
if (dataFrom.value.subjectType == 2) {
return;
}
show1.value = true;
};
const columns1 = reactive([
[
{
label: '增值税普通发票',
id: 1
},
{
label: '增值税专用发票',
id: 2
}
]
]);
const columns2 = reactive([
[
{
label: '企业',
id: 1
},
{
label: '个人',
id: 2
}
]
]);
const checkboxChange = (e) => {
console.log(e);
};
</script>
<style>
page {
background-color: #f5f5f5;
}
</style>
<style scoped lang="scss">
.invoice {
&_tip {
padding: 20rpx;
font-size: 24rpx;
color: #3c9cff;
background-color: rgba(60, 156, 255, 0.2);
view {
line-height: 40rpx;
}
}
&_list {
padding: 15rpx 30rpx;
background-color: #fff;
&_view {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 28rpx;
margin-bottom: 25rpx;
&_left {
color: #646368;
}
&_right {
color: #262626;
}
}
}
}
</style>