小鹿骑行

This commit is contained in:
3321822538@qq.com 2025-04-28 15:40:26 +08:00
parent 791012d572
commit 3d824ff22e
13 changed files with 716 additions and 344 deletions

View File

@ -62,10 +62,11 @@
wateringList: [],
keyword:'',
tabindex:-1,
areaId:''
}
},
onLoad() {
onLoad(option) {
this.areaId = option.areaId
},
onShow() {
this.tabindex = -1
@ -123,7 +124,7 @@
})
},
getlist() {
this.$u.get(`/bst/areaJoin/list?pageNum=1&pageSize=999&types=1,2`).then(res => {
this.$u.get(`/bst/areaJoin/list?pageNum=1&pageSize=999&types=1,2&areaId=${this.areaId}`).then(res => {
if (res.code == 200) {
this.wateringList = res.rows
}

View File

@ -333,9 +333,25 @@
</view>
</view>
</view>
<view style="width: 100%;height: 100vh;position: fixed;top: 0;left: 0;background-color: #fff;z-index: 999;" v-if="zhezhaoflag"></view>
<view class="noticetc" v-if="ggobj">
<view class="name">
公告
</view>
<view class="biaoti">
{{ggobj.title == undefined ? '' : ggobj.title}}
</view>
<u-parse :html="ggobj.content" style="width: 100%;height: 620rpx;background-color: #efefef;padding: 10rpx;box-sizing: border-box;margin-top: 20rpx;"></u-parse>
<view class="btn" style="background-color: #efefef;" v-if="countdown > 0">
我知道了<span v-if="countdown > 0">({{countdown}})</span>
</view>
<view class="btn" v-else @click="ggobj = null">
我知道了
</view>
</view>
<view v-if="ggobj" style="width: 100%;height: 100vh;position: fixed;top: 0;left: 0;background-color: rgba(0, 0, 0, .5);z-index: 997;"></view>
</view>
</template>
<script>
@ -358,6 +374,7 @@
yucun: '',
suitId: '',
yucobj: {},
ggobj:{},
channelId: '',
sn: '',
tit: '',
@ -369,7 +386,8 @@
mac: '',
zhezhaoflag:true,
tit:' ',
actiobj:{}
actiobj:{},
countdown:1
}
},
onLoad(option) {
@ -496,8 +514,32 @@
})
},1000)
}
setTimeout(()=>{
this.getgg()
},1500)
},
methods: {
startCountdown() {
const timer = setInterval(() => {
if (this.countdown <= 0) {
clearInterval(timer)
} else {
this.countdown--
}
}, 1000)
},
//
getgg(){
this.$u.get(`/app/agreement/latest?areaId=${this.bikeobj.areaId}&agreementType=0`).then(res=>{
if(res.code == 200){
if(res.data){
this.ggobj = res.data
this.countdown = res.data.duration == null ? 0 : res.data.duration
this.startCountdown()
}
}
})
},
//
btnxy(num) {
uni.navigateTo({
@ -841,7 +883,52 @@
/deep/ .u-checkbox {
width: 40rpx;
}
.noticetc{
width: 680rpx;
height: 950rpx;
background-color: #fff;
border-radius: 20rpx;
padding: 0 20rpx;
box-sizing: border-box;
position: fixed;
top: 340rpx;
left: 50%;
transform: translateX(-50%);
z-index: 998;
.btn{
width: 600rpx;
height: 100rpx;
line-height: 100rpx;
text-align: center;
border-radius: 50rpx;
background-color: #4297F3;
color: #fff;
font-size: 32rpx;
font-weight: 600;
margin: auto;
margin-top: 30rpx;
}
.name{
width: 100%;
text-align: center;
font-size: 36rpx;
font-weight: 600;
margin-top: 30rpx;
}
.biaoti{
font-size: 32rpx;
margin-top: 20rpx;
}
.cont{
width: 100%;
height: 620rpx;
overflow: scroll;
background-color: #ececec;
margin-top: 20rpx;
padding: 20rpx;
box-sizing: border-box;
}
}
.gaoliang {
background: #DCEDFF !important;
border: 2rpx solid #4297F3 !important;

View File

@ -56,10 +56,11 @@
wateringList: [],
keyword:'',
tabindex:-1,
areaId:''
}
},
onLoad() {
onLoad(option) {
this.areaId = option.areaId
},
onShow() {
this.tabindex = -1
@ -117,7 +118,7 @@
})
},
getlist() {
this.$u.get(`/bst/areaJoin/list?pageNum=1&pageSize=999&types=3`).then(res => {
this.$u.get(`/bst/areaJoin/list?pageNum=1&pageSize=999&types=3&areaId=${this.areaId}`).then(res => {
if (res.code == 200) {
this.wateringList = res.rows
}

View File

@ -62,9 +62,13 @@
backgroundColor: "#fff",
},
list:[],
areaId:''
areaId:'',
userId:''
}
},
onLoad(option) {
this.userId = option.userId
},
onShow() {
if (uni.getStorageSync('adminAreaid')) {
this.areaId = uni.getStorageSync('adminAreaid')
@ -108,7 +112,7 @@
},
//
getModelList(){
this.$u.get(`/bst/model/list?pageNum=1&pageSize=999`).then((res) => {
this.$u.get(`/bst/model/list?pageNum=1&pageSize=999&userId=${this.userId}`).then((res) => {
if (res.code == 200) {
this.list=res.rows
} else {

View File

@ -13,7 +13,20 @@
placeholder-style="color:#C7CDD3">
</view>
</view>
</view>
<view class="card_li">
<view class="tops">
<view class="card_left">
显示顺序
</view>
<view class="card_right">
<input type="text" v-model="data.orderNum" placeholder="请输入显示顺序" class="input"
placeholder-style="color:#C7CDD3">
</view>
</view>
<view class="tips">
显示顺序数字越小越靠前
</view>
</view>
<view class="card_li">
<view class="tops">
@ -25,7 +38,6 @@
placeholder-style="color:#C7CDD3">
</view>
</view>
</view>
<view class="card_li">
<view class="tops">
@ -191,8 +203,52 @@
在单个计费周期内达到封顶金额后则订单费用不再增加超过计费周期后在新的周期内重新计费订单总费用继续增加
</view>
</view>
</view>
<view class="card">
<view class="card_li1">
<view class="card_top" @click="showpart = true">
<view class="card_left">
车型模版
</view>
<view class="card_right">
<view class="iconfont icon-xiangyou1 " style="color: #CBCBCB;">
</view>
</view>
</view>
<view class="taocan" v-if="lists.suitIds">
<view v-for="(name, index) in getAccessoryNames()" :key="index"
style="width: 100%; display: flex;margin-top: 10rpx;">
<view class="tc_li">
{{ name }}
</view>
</view>
</view>
</view>
</view>
<u-mask :show="showpart" :z-index='100' @click="closepart()" />
<view class="choose_part" v-if="showpart">
<view class="tit">
选择车型
</view>
<scroll-view class="part_box" scroll-y>
<view class="part_list">
<view class="part_item" v-for="(item, index) in Accessorylist" :key="index"
@click="chooseAcc(item.id)">
<view class="part" :class="lists.suitIds.includes(item.id) ? 'act' : ''">
{{ item.name }}
<image src="https://lxnapi.ccttiot.com/bike/img/static/uJNlGEGmN0F4AuPJmOZn" mode=""
v-if="lists.suitIds.includes(item.id)">
</image>
</view>
</view>
</view>
</scroll-view>
<view class="btn" @click="subacc()">
确定
</view>
</view>
<view class="btn_box">
<view class="btn1" @click="backpage()">
取消
@ -208,6 +264,16 @@
export default {
data() {
return {
lists: {
model: "",
fullVoltage: "",
lowVoltage: "",
fullEndurance: "",
suitIds: [],
lowBatteryReminder: '20',
lowBatteryReminderSwitch: false
},
showpart: false,
bgc: {
backgroundColor: "#fff",
},
@ -236,6 +302,7 @@
data: {
name: '',
instructions: '',
orderNum:'',
status: "0",
autoRefundDeposit: '0',
orderExceedMinutes: '',
@ -250,7 +317,8 @@
startingTime: '',
orderNum:0,
userId:'',
startRule:{}
startRule:{},
modellds:[]
},
ruleId: '',
userinfo: {},
@ -287,10 +355,50 @@
},
methods: {
closepart() {
this.showpart = false
},
subacc() {
this.showpart = false
console.log(this.chooseIdxArr)
},
chooseAcc(id) {
const index = this.lists.suitIds.indexOf(id)
if (index > -1) {
// id suitIds
this.lists.suitIds.splice(index, 1)
} else {
// id suitIds
this.lists.suitIds.push(id)
}
},
getAccessoryNames(accessoryIds) {
const accessoryNames = this.lists.suitIds.map(id => {
const item = this.Accessorylist.find(accessory => accessory.id == id)
return item ? item.name : ''
})
//
return accessoryNames.filter(name => name)
},
getAccessorylist() {
this.$u.get(`/bst/model/list?pageNum=1&pageSize=999&userId=${this.userinfo.userId}`).then((res) => {
if (res.code == 200) {
this.Accessorylist = res.rows
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 1000
})
}
})
},
getinfo() {
this.$u.get("/getInfo").then((res) => {
if (res.code == 200) {
this.userinfo = res.user
this.getAccessorylist()
this.data.userId = this.userinfo.userId
}
})
@ -299,6 +407,8 @@
this.$u.get(`/bst/suit/${this.ruleId}`).then((res) => {
if (res.code == 200) {
this.data = res.data;
this.lists.suitIds = res.data.modelIds
console.log(this.lists);
if (this.data.rentalUnit == 'minutes') {
this.timevalue='分钟'
} else if (this.data.rentalUnit == 'hours') {
@ -426,11 +536,13 @@
}
},
sub() {
console.log(this.lists.suitIds,'000');
let data = {
...this.data,
type: 1
type: 1,
modelIds:this.lists.suitIds
}
console.log(data,'111');
if (this.data.ridingRule == 2) {
// 使intervalRule
data.intervalRule = this.intervalRule.map((item, index) => ({
@ -500,7 +612,142 @@
page {
background-color: #f5f7fa;
}
.choose_part {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 110;
width: 644rpx;
padding: 40rpx 48rpx;
background: #FFFFFF;
border-radius: 26rpx;
.part_box {
margin-top: 40rpx;
max-height: 600rpx;
.part_list {
display: flex;
flex-direction: column;
gap: 20rpx;
.part_item {
width: 100%;
}
.part {
position: relative;
display: flex;
align-items: center;
justify-content: center;
padding: 20rpx;
background: #F0F0F0;
border-radius: 12rpx;
border: 1rpx solid #F0F0F0;
font-size: 32rpx;
color: #3D3D3D;
transition: all 0.3s ease;
image {
position: absolute;
right: 10rpx;
bottom: 10rpx;
width: 34rpx;
height: 34rpx;
}
&.act {
background: #DCEDFF;
border: 1rpx solid #4297F3;
color: #4297F3;
}
&:active {
opacity: 0.8;
}
}
}
}
.tit {
width: 100%;
text-align: center;
font-weight: 600;
font-size: 36rpx;
color: #3D3D3D;
margin-bottom: 20rpx;
}
.btn {
margin-top: 40rpx;
width: 100%;
height: 88rpx;
background: #4C97E7;
border-radius: 10rpx;
font-weight: 600;
font-size: 36rpx;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
&:active {
opacity: 0.9;
}
}
}
.card {
padding: 0 24rpx;
margin: 0 auto;
margin-top: 24rpx;
width: 672rpx;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 22rpx 0rpx rgba(0, 0, 0, 0.07);
border-radius: 10rpx 10rpx 10rpx 10rpx;
.card_li:last-child {
border-bottom: 1rpx solid #fff;
}
.card_li1 {
padding-top: 24rpx;
display: flex;
flex-wrap: wrap;
.taocan {
margin-top: 10rpx;
padding-bottom: 20rpx;
display: flex;
flex-wrap: wrap;
.tc_li {
padding: 8rpx 14rpx;
margin-right: 20rpx;
background: #DCEDFF;
border-radius: 6rpx 6rpx 6rpx 6rpx;
font-weight: 400;
font-size: 26rpx;
color: #4297F3;
}
}
.card_top {
display: flex;
flex-wrap: nowrap;
align-content: center;
justify-content: space-between;
width: 100%;
// border-bottom: 1rpx solid #D8D8D8;
padding-bottom: 18rpx;
.card_left {
font-weight: 400;
font-size: 30rpx;
color: #3D3D3D;
}
.card_right {
display: flex;
flex-wrap: nowrap;
align-items: center;
span {
font-weight: 400;
font-size: 30rpx;
color: #3D3D3D;
}
.input {
text-align: right;
/* 输入框内容靠右显示 */
}
}
}
}
}
.page {
padding: 24rpx;
padding-bottom: 180rpx;
@ -576,7 +823,7 @@
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 12rpx;
// gap: 12rpx;
font-size: 30rpx;
color: #333;

View File

@ -187,39 +187,43 @@
})
},
getModelList() {
this.$u.get(`/bst/suit/list?pageNum=1&pageSize=999`).then((res) => {
if (res.code == 200) {
this.list = res.rows.map(item => {
try {
//
if (typeof item.startRule === 'string') {
item.startRule = JSON.parse(item.startRule);
}
if (!item.startRule) {
item.startRule = {};
}
//
if (typeof item.intervalRule === 'string') {
item.intervalRule = JSON.parse(item.intervalRule);
}
if (!item.intervalRule) {
item.intervalRule = [];
}
return item;
} catch (e) {
console.error('Invalid JSON in rules:', e);
item.startRule = {};
item.intervalRule = [];
return item;
this.$u.get("/getInfo").then(res => {
if(res.code == 200){
this.$u.get(`/bst/suit/list?pageNum=1&pageSize=999&userId=${res.user.userId}`).then((res) => {
if (res.code == 200) {
this.list = res.rows.map(item => {
try {
//
if (typeof item.startRule === 'string') {
item.startRule = JSON.parse(item.startRule);
}
if (!item.startRule) {
item.startRule = {};
}
//
if (typeof item.intervalRule === 'string') {
item.intervalRule = JSON.parse(item.intervalRule);
}
if (!item.intervalRule) {
item.intervalRule = [];
}
return item;
} catch (e) {
console.error('Invalid JSON in rules:', e);
item.startRule = {};
item.intervalRule = [];
return item;
}
});
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration:2000
})
}
});
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration:2000
})
}
})

View File

@ -113,16 +113,11 @@
收费模版
</view>
<view class="card_right">
<view class="iconfont icon-xiangyou1 " style="color: #CBCBCB;">
</view>
</view>
</view>
<!-- <view class="taocan" v-if="data.suitIds">
{{getAccessoryNames()}}
</view> -->
<view class="taocan" v-if="data.suitIds">
<view v-for="(name, index) in getAccessoryNames()" :key="index"
style="width: 100%; display: flex;margin-top: 10rpx;">
@ -132,7 +127,6 @@
</view>
</view>
</view>
<!-- <span v-if="data.suitIds">{{getAccessoryNames()}}</span> -->
</view>
</view>
<u-mask :show="showpart" :z-index='100' @click="closepart()" />
@ -196,7 +190,7 @@ export default {
upurl: '',
modelId: '',
areaId: '',
userinfo:''
userinfo:'',
}
},
onLoad(e) {
@ -210,7 +204,6 @@ export default {
}
},
onShow() {
this.getAccessorylist()
this.getinfo()
},
methods: {
@ -218,6 +211,7 @@ export default {
this.$u.get("/getInfo").then((res) => {
if (res.code == 200) {
this.userinfo = res.user
this.getAccessorylist()
}
})
},
@ -308,7 +302,7 @@ export default {
return accessoryNames.filter(name => name)
},
getAccessorylist() {
this.$u.get(`/bst/suit/list?pageNum=1&pageSize=999`).then((res) => {
this.$u.get(`/bst/suit/list?pageNum=1&pageSize=999&userId=${this.userinfo.userId}`).then((res) => {
if (res.code == 200) {
this.Accessorylist = res.rows
} else {

View File

@ -67,9 +67,13 @@
pageNum: 1, //
pageSize: 20, //
list: [] ,//
total:''
total:'',
areaId:''
};
},
onLoad(option) {
this.areaId = option.areaId
},
onShow() {
this.pageNum = 1
this.getlist();
@ -162,7 +166,7 @@
pageSize: this.pageSize,
pageNum: this.pageNum
};
this.$u.get(`/bst/fault/list?pageNum=${this.pageNum}&pageSize=10`).then((res) => {
this.$u.get(`/bst/fault/list?pageNum=${this.pageNum}&pageSize=10&areaId=${this.areaId}`).then((res) => {
if (res.code === 200) {
this.total = res.total
if(this.pageNum == 1){

View File

@ -87,8 +87,8 @@
订单费用<span>{{item.totalFee}}</span>
</view>
<view class="half_info_li">
有无退款<span v-if="item.payRefunded>0" style="color: red;"></span>
<span v-else></span>
人工退款<span v-if="item.payAdminRefund>0" style="color: red;">{{item.payAdminRefund.toFixed(2)}}</span>
<span v-else>0.00</span>
</view>
</view>
<view class="info_li">

View File

@ -194,7 +194,8 @@ export default {
gonggaoxq:{},
gonggaoflag:false,
announcements: {},
yyqid:''
yyqid:'',
userId:''
}
},
onLoad(option) {
@ -239,7 +240,7 @@ export default {
//
btnywry(){
uni.navigateTo({
url:'/page_fenbao/yunwei/index'
url:'/page_fenbao/yunwei/index?areaId=' + this.areaId
})
},
//
@ -281,7 +282,7 @@ export default {
//
btnreturnbike(){
uni.navigateTo({
url:'/page_user/returnbike'
url:'/page_user/returnbike?areaId=' + this.areaId
})
},
//
@ -325,7 +326,7 @@ export default {
//
btnjm(){
uni.navigateTo({
url:'/page_fenbao/jiameng/index'
url:'/page_fenbao/jiameng/index?areaId=' + this.areaId
})
},
handleSearch(e) {
@ -423,7 +424,7 @@ export default {
})
} else if (num == 7) { //
uni.navigateTo({
url: '/page_shanghu/gongzuotai/shgl'
url: '/page_shanghu/gongzuotai/shgl?areaId=' + this.areaId
})
} else if (num == 8) {
uni.navigateTo({
@ -431,7 +432,7 @@ export default {
})
} else if (num == 9) {
uni.navigateTo({
url: '/page_shanghu/gongzuotai/CarModel'
url: '/page_shanghu/gongzuotai/CarModel?userId=' + this.userinfo.userId
})
} else if (num == 10) {
uni.navigateTo({

View File

@ -13,103 +13,120 @@
mode=""></cover-image>
</cover-view>
</map>
<view class="info_card">
<view class="info_tit">
<view class="dingdanxx">
<view class="name">
订单信息
</view>
<view class="lines"></view>
<view class="cont">
<view class="info_li">
<view class="half_infoli">
订单号<span>{{orderxqobj.no}}</span>
</view>
</view>
<view class="info_li">
<view class="half_infoli">
订单类型<span>骑行订单</span> <!-- <span v-if="orderxqobj.type == 2">租车订单</span> -->
</view>
<view class="half_infoli">
用户名
<span v-if="orderxqobj.userName">{{orderxqobj.userName}}</span>
<view class="dingdanbh">
订单编号<span>{{orderxqobj.no}}</span>
</view>
<view class="dingdanul">
<view class="dingdanli">
套餐名称<span v-if="orderxqobj.suitName">{{orderxqobj.suitName}}</span>
<span v-else>--</span>
</view>
</view>
<view class="info_li">
<view class="half_infoli">
订单总金额<span>{{orderxqobj.totalFee == undefined ? '¥0.00' : orderxqobj.totalFee}}</span>
</view>
<view class="half_infoli">
预存<span>{{orderxqobj.depositFee == undefined ? '¥0.00' : orderxqobj.depositFee}}</span>
</view>
<view class="dingdanli">
计费方式<span v-if="orderxqobj.suitRidingRule == 1">起步价计费</span>
<span v-if="orderxqobj.suitRidingRule == 2">区间计费</span>
</view>
<view class="info_li">
<view class="half_infoli">
调度费
<span v-if="orderxqobj.dispatchFee">{{orderxqobj.dispatchFee}}</span>
</view>
<view class="dingdanul">
<view class="dingdanli">
预存费用<span style="color: #3A7EDB;font-weight: 600;">{{orderxqobj.depositFee == undefined ? '¥0.00' : '¥' + orderxqobj.depositFee}}</span>
</view>
<view class="dingdanli">
免费时长<span>{{orderxqobj.suitFreeRideTime}}分钟</span>
</view>
</view>
<view class="dingdanul">
<view class="dingdanli">
租赁用户<span v-if="orderxqobj.userName">{{orderxqobj.userName}}</span>
<span v-else>--</span>
</view>
<view class="dingdanli">
手机号码<span v-if="orderxqobj.userPhone" style="color: #4C97E7;" @click="checkbtn(1)">{{orderxqobj.userPhone}}</span>
<span v-else>--</span>
</view>
</view>
<view class="yingshouprice">
应收金额<span style="color: #4C97E7;font-weight: 600;">{{orderxqobj.totalFee == null ? '¥0.00' : '¥' + orderxqobj.totalFee}}</span>
</view>
<view class="dingdanul">
<view class="dingdanli">
骑行费用<span v-if="orderxqobj.ridingFee">{{orderxqobj.ridingFee}}</span>
<span v-else>0.00</span>
</view>
<view class="half_infoli">
管理费
<span v-if="orderxqobj.manageFee">{{orderxqobj.manageFee}}</span>
</view>
<view class="dingdanli" style="position: relative;" @click="btnflagxs">
调度费用<span v-if="orderxqobj.dispatchFee">{{orderxqobj.dispatchFee}}</span>
<span v-if="orderxqobj.manageFee">{{orderxqobj.manageFee}}</span>
<span v-else>0.00</span>
</view>
<image v-if="orderxqobj.dispatchFee || orderxqobj.manageFee" style="width: 20rpx;height: 20rpx;margin-left: 16rpx;" src="https://api.ccttiot.com/smartmeter/img/static/ubRtJnZqaAxybajDMLSG" mode=""></image>
<view class="" v-if="flagdiaodu" style="width: 166rpx;height: 82rpx;background-color: #F3F3F3;position: absolute;top: 40rpx;right: 0;text-align: center;border-radius: 4rpx;">
<view class="" style="font-size: 20rpx;color: #808080;width: 100%;margin-top: 8rpx;">
停车区外<span style="color: #3D3D3D;">{{orderxqobj.dispatchFee == null ? '0.00' : orderxqobj.dispatchFee}}</span>
</view>
<view class="" style="font-size: 20rpx;color: #808080;width: 100%;margin-top: 8rpx;">
运营区外<span style="color: #3D3D3D;">{{orderxqobj.manageFee == null ? '0.00' : orderxqobj.manageFee}}</span>
</view>
</view>
</view>
<view class="info_li">
<view class="half_infoli">
骑行费
<span v-if="orderxqobj.ridingFee">{{orderxqobj.ridingFee}}</span>
<span v-else>0.00</span>
</view>
<view class="half_infoli">
距离
<span v-if="orderxqobj.distance">
{{kmDistance}}km
</span>
<span v-else>0.00m</span>
</view>
</view>
<view class="info_li">
<view class="half_infoli">
套餐名称
<span v-if="orderxqobj.suitName">{{orderxqobj.suitName}}</span>
<span v-else>--</span>
</view>
<view class="half_infoli">
套餐免费骑行时长(分钟)
<span v-if="orderxqobj.suitFreeRideTime">{{orderxqobj.suitFreeRideTime}}</span>
<span v-else>--</span>
</view>
</view>
<view class="yingshouprice" style="border: 0;">
退款总额<span style="color: #4C97E7;font-weight: 600;">{{ orderxqobj.payRefunded == null ? '¥0.00' : '¥' + orderxqobj.payRefunded }}</span>
</view>
<view class="dingdanul">
<view class="dingdanli">
还车退款<span v-if="orderxqobj.payAutoRefund">{{orderxqobj.payAutoRefund}}</span>
<span v-else>0.00</span>
</view>
<view class="info_li">
退款金额
<span>{{ orderxqobj.payRefunded == null ? '¥0.00' : '¥' + orderxqobj.payRefunded }}</span>
</view>
<view class="info_li">
订单时长
<span>{{ formattedDuration }}</span>
</view>
<view class="info_li">
开始时间
<span v-if="orderxqobj.startTime">{{orderxqobj.startTime}}</span>
<span v-else>--</span>
</view>
<view class="info_li">
结束时间
<span v-if="orderxqobj.endTime">{{orderxqobj.endTime}}</span>
<span v-else>--</span>
<view class="dingdanli">
人工退款<span v-if="orderxqobj.payAdminRefund">{{orderxqobj.payAdminRefund}}</span>
<span v-else>0.00</span>
</view>
</view>
<view class="yingshouprice" style="border: 0;">
实收金额<span style="color: #4C97E7;font-weight: 600;">{{formattedPayedAmount}}</span>
</view>
</view>
<view class="info_card" style="max-height: 9999rpx;padding-bottom: 50rpx;box-sizing: border-box;">
<view class="info_tit">
<view class="xingchengxx" style="padding-bottom: 30rpx;box-sizing: border-box;">
<view class="name">
行程信息
</view>
<view class="dingdanul">
<view class="dingdanli">
订单时长<span>{{ formattedDuration }}</span>
</view>
<view class="dingdanli">
行驶距离<span v-if="orderxqobj.distance">
{{kmDistance}}km
</span>
<span v-else>0.00m</span>
</view>
</view>
<view class="start">
开始时间<span v-if="orderxqobj.startTime">{{orderxqobj.startTime}}</span>
<span v-else>--</span>
</view>
<view class="start">
结束时间<span v-if="orderxqobj.endTime">{{orderxqobj.endTime}}</span>
<span v-else>--</span>
</view>
</view>
<view class="xingchengxx" style="max-height: 9999rpx;padding-bottom: 20rpx;box-sizing: border-box;">
<view class="name">
车辆信息
</view>
<view class="lines"></view>
<view class="card">
<view class="pic_cont" v-for="(item,index) in processedOrderDeviceList" :key="index">
<view class="jilu">
<view class="one">
记录{{index + 1}}
<view class="one" v-if="index == 0">
初始车辆
</view>
<view class="one" v-else>
更换车辆
</view>
<view class="two">
{{item.startTime == null ? '--' : item.startTime}}
@ -117,20 +134,32 @@
</view>
<view class="bianhao">
<view class="">
车辆编号<span>{{item.deviceSn == null ? '--' : item.deviceSn}}</span>
</view>
<view class="">
车牌号<span>{{item.deviceVehicleNum == null ? '--' : item.deviceVehicleNum}}</span>
SN<span>{{item.deviceSn == null ? '--' : item.deviceSn}}</span>
</view>
<view class="">
MAC号<span>{{item.deviceMac == null ? '--' : item.deviceMac}}</span>
</view>
</view>
<view class="bianhao">
<view class="">
车牌号<span>{{item.deviceVehicleNum == null ? '--' : item.deviceVehicleNum}}</span>
</view>
<view class="">
车型<span>{{item.deviceModelName == null ? '--' : item.deviceModelName}}</span>
</view>
</view>
<view class="bianhao">
<view class="" style="width: 100%;">
开锁时间<span>{{item.startTime == null ? '--' : item.startTime}}</span>
</view>
</view>
<view class="bianhao">
<view class="" style="width: 100%;">
结束时间<span>{{item.endTime == null ? '--' : item.endTime}}</span>
</view>
</view>
<view class="imgs">
<!-- <view class="" v-for="(img, imgidx) in item.pictures" :key="imgidx"> -->
<!-- <image :src="img" mode="aspectFill" @click="preview(img, item)"></image> -->
<video v-if="item.finishPicture != null" :src="item.finishPicture"></video>
<!-- </view> -->
<video v-if="item.finishPicture != null" :src="item.finishPicture"></video>
</view>
</view>
<view class="btn_cont" v-if="orderxqobj.status == 'WAIT_VERIFY'">
@ -180,9 +209,7 @@
<view class="btn" @click="checkbtn(0)">
退款
</view>
<view class="btn" @click="checkbtn(1)">
联系客户
</view>
<!-- -->
<view class="btn" @click="btnfuzhu" v-if="orderxqobj.status=='PROCESSING'">
辅助还车
</view>
@ -290,7 +317,7 @@
</view>
<input type="text" v-model="amount" placeholder="请输入退款金额" />
<view class="" style="margin-top: 20rpx;">
可退款金额{{orderxqobj.payedAmount == undefined ? '--' : orderxqobj.payedAmount - orderxqobj.payRefunded}}
可退款金额{{formattedPayedAmount}}
</view>
<view class="anniu">
<view class="qx" @click="btnqx">
@ -358,7 +385,7 @@
maskepage: 0,
backgps: {},
buletxt: '',
flagdiaodu:false,
buleclose: false,
buleopen: false,
bulering: false,
@ -380,7 +407,8 @@
},
tkflag:false,
amount:'',
orderDeviceList:[]
orderDeviceList:[],
suitSeconds:''
}
},
onLoad(e) {
@ -424,9 +452,66 @@
},
kmDistance() {
return (this.orderxqobj?.distance / 1000).toFixed(2);
}
},
formattedPayedAmount() {
//
const payedAmount = parseFloat(this.orderxqobj?.payedAmount) || 0;
const payRefunded = parseFloat(this.orderxqobj?.payRefunded) || 0;
const payRefunding = parseFloat(this.orderxqobj?.payRefunding) || 0;
//
const actualAmount = payedAmount - (payRefunded + payRefunding);
// XX.XX
return `${isNaN(actualAmount) ? '0.00' : actualAmount.toFixed(2)}`;
}
},
methods: {
updateTrackData() {
const formattedStartTime = this.orderxqobj.startTime
const formattedEndTime = this.orderxqobj.endTime
this.$u.get('/bst/locationLog/listByTime?sn=' + this.sn + '&startTime=' + formattedStartTime + '&endTime=' + formattedEndTime).then((res) => {
if (res.code === 200) {
if (!res.data || res.data.length === 0) {
// 使 uni.showToast
uni.showToast({
title: '该时间段内无轨迹数据',
icon: 'none',
duration: 2000
});
//
this.trackPoints = []
this.currentPolyline = []
this.markers = []
return
}
this.trackPoints = res.data.map(point => ({
latitude: parseFloat(point.latitude),
longitude: parseFloat(point.longitude),
time: point.at,
status: point.status,
onlineStatus: point.onlineStatus,
remainingPower: point.bat || 0
}))
if (this.trackPoints.length > 0) {
this.currentProgress = 0;
this.updateMapPoint(0);
}
}
}).catch(error => {
uni.showToast({
title: '获取轨迹数据失败',
icon: 'none',
duration: 2000
})
console.error("Error fetching track data:", error);
})
},
btnflagxs(){
this.flagdiaodu = !this.flagdiaodu
},
unpass(pass){
let data = {
id:this.orderxqobj.id,
@ -556,6 +641,7 @@
this.$u.get(`/bst/order/${this.orid}?assembleOrderDeviceList=true`).then(res =>{
if(res.code == 200){
this.orderxqobj = res.data
this.suitSeconds = res.data.suitSeconds == null ? '--' : Math.ceil(res.data.suitSeconds / 3600)
this.orderDeviceList = res.data.orderDeviceList
console.log(this.orderDeviceList,'12212121211124121')
}
@ -1693,6 +1779,105 @@
overflow-x: hidden;
background-color: #F3F3F3;
}
.xingchengxx{
width: 750rpx;
max-height: 99999rpx;
background: #FFFFFF;
border-radius: 0rpx 0rpx 0rpx 0rpx;
margin-top: 20rpx;
.start{
font-size: 28rpx;
color: #808080;
padding: 0 28rpx;
box-sizing: border-box;
margin-top: 26rpx;
span{
color: #3D3D3D;
}
}
.dingdanul{
font-size: 28rpx;
color: #808080;
padding: 0 28rpx;
box-sizing: border-box;
margin-top: 26rpx;
display: flex;
justify-content: space-between;
view{
width: 50%;
}
span{
color: #3D3D3D;
}
}
.name{
font-weight: 600;
font-size: 32rpx;
color: #3D3D3D;
width: 100%;
border-bottom: 1rpx solid #F3F3F3;
padding-top: 22rpx;
padding-left: 28rpx;
padding-bottom: 22rpx;
box-sizing: border-box;
}
}
.dingdanxx{
width: 750rpx;
height: 758rpx;
background: #FFFFFF;
border-radius: 0rpx 0rpx 0rpx 0rpx;
.yingshouprice{
border-top: 1px solid #F3F3F3;
margin-top: 26rpx;
padding-top: 26rpx;
padding-left: 28rpx;
box-sizing: border-box;
font-size: 28rpx;
color: #808080;
span{
color: #3D3D3D;
}
}
.dingdanul{
font-size: 28rpx;
color: #808080;
padding: 0 28rpx;
box-sizing: border-box;
margin-top: 26rpx;
display: flex;
justify-content: space-between;
view{
width: 50%;
}
span{
color: #3D3D3D;
}
}
.dingdanbh{
font-size: 28rpx;
color: #808080;
padding: 0 28rpx;
box-sizing: border-box;
margin-top: 26rpx;
span{
color: #3D3D3D;
}
}
.name{
font-weight: 600;
font-size: 32rpx;
color: #3D3D3D;
width: 100%;
border-bottom: 1rpx solid #F3F3F3;
padding-top: 22rpx;
padding-left: 28rpx;
padding-bottom: 22rpx;
box-sizing: border-box;
}
}
.tktc{
width: 560rpx;
height: 330rpx;
@ -2049,110 +2234,6 @@
}
}
// .tip_box {
// position: fixed;
// left: 72rpx;
// top: 628rpx;
// width: 610rpx;
// // height: 282rpx;
// background: #FFFFFF;
// border-radius: 30rpx 30rpx 30rpx 30rpx;
// z-index: 110;
// padding-bottom: 100rpx;
// .top {
// padding: 52rpx 38rpx 42rpx 36rpx;
// .ipt_box {
// margin-top: 22rpx;
// display: flex;
// flex-wrap: nowrap;
// align-items: center;
// .text {
// width: 96rpx;
// font-weight: 400;
// font-size: 32rpx;
// color: #3D3D3D;
// }
// .ipt {
// padding: 10rpx 18rpx;
// display: flex;
// align-items: center;
// justify-content: space-between;
// margin-left: 26rpx;
// width: 420rpx;
// height: 64rpx;
// border-radius: 0rpx 0rpx 0rpx 0rpx;
// border: 2rpx solid #979797;
// .input {
// width: 80%;
// }
// }
// }
// .tip {
// width: 100%;
// text-align: center;
// font-weight: 700;
// font-size: 32rpx;
// color: #3D3D3D;
// }
// .txt {
// margin-top: 32rpx;
// width: 100%;
// text-align: center;
// font-weight: 500;
// font-size: 32rpx;
// color: #3D3D3D;
// }
// }
// .bot {
// position: absolute;
// width: 610rpx;
// // border-top: 2rpx solid #D8D8D8;
// display: flex;
// flex-wrap: nowrap;
// // height: 100%;
// bottom: -20rpx;
// .bot_left {
// border-radius: 0rpx 0rpx 0rpx 30rpx;
// width: 50%;
// height: 86rpx;
// display: flex;
// align-items: center;
// justify-content: center;
// font-weight: 500;
// font-size: 32rpx;
// color: #3D3D3D;
// background: #EEEEEE;
// }
// .bot_right {
// border-radius: 0rpx 0rpx 30rpx 0rpx;
// width: 50%;
// height: 86rpx;
// background: #4C97E7;
// display: flex;
// align-items: center;
// justify-content: center;
// color: #FFFFFF;
// // border-left: 2rpx solid #D8D8D8;
// font-weight: 500;
// font-size: 32rpx;
// // color: #4C97E7;
// }
// }
// }
.bot_btn {
@ -2178,14 +2259,15 @@
display: flex;
align-items: center;
justify-content: center;
width: 164rpx;
height: 66rpx;
background: #E2F2FF;
width: 204rpx;
height: 80rpx;
background: #4C97E7;
border-radius: 0rpx 0rpx 0rpx 0rpx;
border: 2rpx solid #4C97E7;
// border: 2rpx solid #4C97E7;
border-radius: 50rpx;
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
font-size: 32rpx;
color: #fff;
}
}
.card {
@ -2260,13 +2342,16 @@
// display: flex;
// flex-wrap: wrap;
width: 100%;
background-color: #efefef;
background-color: #f6fbff;
padding: 20rpx;
box-sizing: border-box;
margin-top: 20rpx;
border-radius: 10rpx;
.bianhao{
display: flex;
view{
width: 50%;
margin-top: 10rpx;
font-size: 24rpx;
color: #979797;
@ -2279,11 +2364,11 @@
width: 100%;
display: flex;
.one{
width: 100rpx;
width: 130rpx;
height: 40rpx;
text-align: center;
line-height:40rpx;
background-color: #64B6A8;
background-color: #5fc2f7;
color: #fff;
border-radius: 4rpx;
margin-right: 20rpx;
@ -2309,72 +2394,7 @@
}
}
}
.info_card {
background: #FFFFFF;
.info_tit {
display: flex;
flex-wrap: nowrap;
padding: 22rpx 28rpx;
font-weight: 600;
font-size: 32rpx;
color: #3D3D3D;
.money {
margin-left: auto;
font-weight: 500;
font-size: 32rpx;
color: #4C97E7;
}
}
.lines {
width: 750rpx;
// height: 2rpx;
border-bottom: 2rpx solid #E7E7E7;
}
.cont {
padding: 26rpx 16rpx;
.info_li {
width: 98%;
display: flex;
flex-wrap: nowrap;
font-weight: 400;
font-size: 28rpx;
color: #808080;
span {
color: #3D3D3D;
}
white-space: nowrap;
/* 禁止换行 */
overflow: hidden;
/* 超出部分隐藏 */
text-overflow: ellipsis;
/* 显示省略号 */
line-height: 48rpx;
.half_infoli {
display: flex;
flex-wrap: nowrap;
width: 50%;
font-weight: 400;
font-size: 28rpx;
color: #808080;
span {
color: #3D3D3D;
}
.input {
width: 30%;
}
}
}
}
}
}

View File

@ -74,9 +74,13 @@
pageNum: 1,
pageSize: 20,
list: [] ,
total:''
total:'',
areaId:''
}
},
onLoad(option) {
this.areaId = option.areaId
},
onShow() {
this.pageNum = 1
this.getlist()
@ -133,7 +137,7 @@
pageSize: this.pageSize,
pageNum: this.pageNum
}
this.$u.get(`/bst/order/list?pageNum=${this.pageNum}&pageSize=10&status=WAIT_VERIFY`).then((res) => {
this.$u.get(`/bst/order/list?pageNum=${this.pageNum}&pageSize=10&status=WAIT_VERIFY&areaId=${this.areaId}`).then((res) => {
if (res.code === 200) {
this.total = res.total
if(this.pageNum == 1){

View File

@ -265,6 +265,11 @@
title: ""
})
}
}else{
this.lists.push({
image:"https://api.ccttiot.com/smartmeter/img/static/uTZBBRuyRexKd6c4VE9d",
title: ""
})
}
})
},