bike/pages_adminSet/ChargingDetail.vue
2024-12-19 10:16:17 +08:00

683 lines
16 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>
<view class="page">
<u-navbar title="收费模版编辑" :border-bottom="false" :background="bgc" title-color='#000' title-size='36'
height='45'></u-navbar>
<view class="card">
<view class="card_li">
<view class="tops">
<view class="card_left">
套餐名称
</view>
<view class="card_right">
<input type="text" v-model="data.name" placeholder="请输入套餐名称" class="input"
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.instructions" placeholder="请输入说明内容" class="input"
placeholder-style="color:#C7CDD3">
</view>
</view>
</view>
</view>
<view class="card">
<view class="card_li">
<view class="tops">
<view class="card_left">
免费骑行
</view>
<view class="card_right">
<input type="text" v-model="data.freeRideTime" placeholder="可以免费骑行的时间" class="input"
placeholder-style="color:#C7CDD3">
</view>
</view>
<view class="tips">
可以免费骑行的时间(分钟)
</view>
</view>
<view class="card_li">
<view class="tops">
<view class="card_left">
还车结算
</view>
<view class="card_right">
<input type="text" v-model="data.autoRefundDeposit" placeholder="多少小时后自动退押金" class="input"
placeholder-style="color:#C7CDD3">
</view>
</view>
<view class="tips">
多少小时后自动退押金(小时)
</view>
</view>
<view class="card_li">
<view class="tops">
<view class="card_left">
租赁单位
</view>
<view class="card_right">
<u-radio-group v-model="timevalue" @change="radioGroupChange">
<u-radio v-for="(item, index) in timeList" :key="index" :name="item.name"
:disabled="item.disabled">
{{item.name}}
</u-radio>
</u-radio-group>
</view>
</view>
</view>
<view class="card_li">
<view class="rule">
起步价
<input type="text" v-model="startingPrice" placeholder=" " class="input"
placeholder-style="color:#C7CDD3">
元 含( <input type="text" v-model="startingTime" placeholder=" " class="input"
placeholder-style="color:#C7CDD3"> {{timevalue}}
</view>
<view class="tips">
<!-- 可以免费骑行的时间 -->
</view>
</view>
<view class="card_li">
<view class="rule">
超出价
<input type="text" v-model="timeoutPrice" placeholder=" " class="input"
placeholder-style="color:#C7CDD3">
元 / <input type="text" v-model="timeoutTime" placeholder=" " class="input"
placeholder-style="color:#C7CDD3">{{timevalue}}
</view>
<view class="tips" style="text-align: left;">
超出起步价后
</view>
<view class="tips" style="text-align: left;">
注:
1) 不是起步时间的仍按起步时间收取费用;超出起步时间后的均匀计算。
2) 为避免免费用户使用,切勿频繁切换。
</view>
</view>
<view class="card_li">
<view class="tops">
<view class="card_left">
计费周期
</view>
<view class="card_right">
订单生成后
<input type="text" v-model="data.chargingCycleValue" placeholder="多少小时后自动退押金" class="input"
placeholder-style="color:#C7CDD3" style="width: 100rpx;">小时
</view>
</view>
<view class="tips" style="text-align: left;">
1) 若计费周期为订单生成后X小时每达到X小时订单按规则重新计费各周期内金额总和为订单总费用
2) 若计费周期为自定义时刻,每当达到该时刻,订单按规则重新计费,各周期内金额总和为订单总费用
</view>
</view>
<view class="card_li">
<view class="tops">
<view class="card_left">
封顶金额
</view>
<view class="card_right">
<input type="text" v-model="data.cappedAmount" placeholder="多少小时后自动退押金" class="input"
placeholder-style="color:#C7CDD3" style="width: 100rpx;">元
</view>
</view>
<view class="tips" style="text-align: left;">
注:在单个计费周期内,达到封顶金额后,则订单费用不再增加;超过计费周期后,在新的周期内重新计费,订单总费用继续增加
</view>
</view>
</view>
<view class="btn_box">
<view class="btn1" @click="backpage()">
取消
</view>
<view class="btn2" @click="sub">
保存
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
bgc: {
backgroundColor: "#fff",
},
showpart: false,
list: [],
Accessorylist: [],
chooseIdxArr: [], // 存储选中的索引
timevalue: '按分钟',
timeList: [{
name: '按分钟',
disabled: false
},
{
name: '按小时',
disabled: false
},
],
startingPrice: "",
startingTime: '',
timeoutPrice: '',
timeoutTime: '',
data: {
name: '',
instructions: '按小时计费',
status: "0",
autoRefundDeposit: '0',
orderExceedMinutes: '',
orderExceedWarn: '',
freeRideTime: '5',
rentalUnit: 'minutes',
ridingRule: '1',
chargingCycle: '1',
chargingCycleValue: '24',
cappedAmount: '200',
// rule: [{
// start: '',
// end: '',
// eachUnit: '',
// fee: ''
// }],
timeoutTime: '',
startingTime: ''
},
deptInfo: {},
areaId: '',
ruleId: {}
}
},
onLoad(e) {
if (e.ruleId) {
this.ruleId = e.ruleId
this.getFeeInfo()
}
},
onShow() {
if (uni.getStorageSync('adminAreaid')) {
this.areaId = uni.getStorageSync('adminAreaid')
}
this.getdept()
},
methods: {
getFeeInfo() {
this.$u.get(`/app/fee/` + this.ruleId).then((res) => {
if (res.code == 200) {
this.data = res.data;
if (this.data.rentalUnit == 'minutes') {
this.timevalue='按分钟'
} else if (this.data.rentalUnit == 'hours') {
this.timevalue='按小时'
} else if (this.data.rentalUnit == 'day') {
this.timevalue='按天'
}
if (this.data.area) {
this.returnVerify = this.data.area.returnVerify;
}
// console.log("-------returnVerify------",this.returnVerify)
// delete this.form.ridingRuleJson;
let json = JSON.parse(res.data.ridingRuleJson)
if (this.data.ridingRule == 1) {
this.timeoutTime = json.timeoutTime
this.startingPrice = json.startingPrice
this.startingTime = json.startingTime
this.timeoutPrice = json.timeoutPrice
} else {
this.rule = json.rule.slice(0, -1);
// 获取数组的最后一个元素
this.more = json.rule[json.rule.length - 1];
}
console.log(this.data, 'this.formthis.form');
} else {
// 处理接口返回错误的情况
}
}).catch(error => {
// 处理接口请求失败的情况
});
},
backpage() {
uni.redirectTo({
url: '/pages_admin/worke/ChargingTemplate'
})
},
getdept() {
let data = {
areaId: this.areaId
}
this.$u.get(`/appVerify/getDept?`, data).then((res) => {
if (res.code == 200) {
this.deptInfo = res.data
// this.list = res.data
} else {
// 处理接口返回错误的情况
}
}).catch(error => {
// 处理接口请求失败的情况
});
},
// 选中任一radio时由radio-group触发
radioGroupChange(e) {
console.log(e);
if (e == '按分钟') {
this.data.rentalUnit = 'minutes'
} else {
this.data.rentalUnit = 'hours'
}
},
sub() {
console.log(this.data);
if (this.data.name === undefined || this.data.name === null || this.data.name === '') {
uni.showToast({
title: '请填写套餐名称',
icon: 'none',
duration: 2000
});
return; // 阻止请求继续执行
}
if (this.data.instructions === undefined || this.data.instructions === null || this.data.instructions === '') {
uni.showToast({
title: '请填写套餐说明',
icon: 'none',
duration: 2000
});
return; // 阻止请求继续执行
}
if (this.data.freeRideTime === undefined || this.data.freeRideTime === null || this.data.freeRideTime === '') {
uni.showToast({
title: '请填写免费骑行时间',
icon: 'none',
duration: 2000
});
return; // 阻止请求继续执行
}
if (this.data.autoRefundDeposit === undefined || this.data.autoRefundDeposit === null || this.data.autoRefundDeposit === '') {
uni.showToast({
title: '请填写还车结算时间',
icon: 'none',
duration: 2000
});
return; // 阻止请求继续执行
}
if (this.startingPrice === undefined || this.startingPrice === null || this.startingPrice === '') {
uni.showToast({
title: '请填写起步价',
icon: 'none',
duration: 2000
});
return; // 阻止请求继续执行
}
if (this.startingTime === undefined || this.startingTime === null || this.startingTime === '') {
uni.showToast({
title: '请填写起步价包含的时间',
icon: 'none',
duration: 2000
});
return; // 阻止请求继续执行
}
if (this.timeoutPrice === undefined || this.timeoutPrice === null || this.timeoutPrice === '') {
uni.showToast({
title: '请填写超出价',
icon: 'none',
duration: 2000
});
return; // 阻止请求继续执行
}
if (this.timeoutTime === undefined || this.timeoutTime === null || this.timeoutTime === '') {
uni.showToast({
title: '请填写超出价的时间',
icon: 'none',
duration: 2000
});
return; // 阻止请求继续执行
}
if (this.data.chargingCycleValue === undefined || this.data.chargingCycleValue === null || this.data.chargingCycleValue === '') {
uni.showToast({
title: '请填写计费周期',
icon: 'none',
duration: 2000
});
return; // 阻止请求继续执行
}
if (this.data.cappedAmount === undefined || this.data.cappedAmount === null || this.data.cappedAmount === '') {
uni.showToast({
title: '请填写封顶金额',
icon: 'none',
duration: 2000
});
return; // 阻止请求继续执行
}
if (!/^\d+$/.test(this.startingTime)) {
uni.showToast({
title: '起步时间必须为正整数',
icon: 'none'
});
return;
}
if (!/^\d+$/.test(this.timeoutTime)) {
uni.showToast({
title: '超时时间必须为正整数',
icon: 'none'
});
return;
}
// this.form.rule.push(this.more)
// console.log(this.form,'mmmmmmmmmmmmm');
let data = {
...this.data
}; // 使用对象扩展运算符确保复制一个新对象,避免直接修改 this.form
// this.rule.push(this.more)
data.ridingRuleJson = {}
if (this.data.ridingRule == 2) {
data.ridingRuleJson.rule = this.rule
data.ridingRuleJson.enablelnterval = this.enablelnterval
} else {
data.ridingRuleJson.timeoutTime = this.timeoutTime
data.ridingRuleJson.startingPrice = this.startingPrice
data.ridingRuleJson.startingTime = this.startingTime
data.ridingRuleJson.timeoutPrice = this.timeoutPrice
}
data.ridingRuleJson = JSON.stringify(data.ridingRuleJson);
console.log(data, 'mmmmmmmmmmmmm');
if (this.data.ruleId != null) {
this.$u.put(`/system/fee`, data).then((res) => {
if (res.code == 200) {
// this.list = res.data
uni.showToast({
title: '修改成功',
icon: 'none',
duration: 1000
});
setTimeout(() => {
uni.navigateBack()
}, 1100)
} else {
// 处理接口返回错误的情况
}
}).catch(error => {
// 处理接口请求失败的情况
});
} else {
data.deptId = this.deptInfo.deptId
this.$u.post(`/system/fee`, data).then((res) => {
if (res.code == 200) {
// this.list = res.data
uni.showToast({
title: '添加成功',
icon: 'none',
duration: 1000
});
setTimeout(() => {
uni.navigateBack()
}, 1100)
} else {
// 处理接口返回错误的情况
}
}).catch(error => {
// 处理接口请求失败的情况
});
}
}
}
}
</script>
<style lang="scss">
page {}
.page {
.choose_part {
position: fixed;
top: 530rpx;
left: 54rpx;
z-index: 110;
width: 644rpx;
padding: 40rpx 48rpx;
background: #FFFFFF;
border-radius: 26rpx 26rpx 26rpx 26rpx;
.part_box {
margin-top: 40rpx;
display: flex;
flex-wrap: wrap;
.part:nth-child(3n) {
margin-right: 0;
}
.part {
margin-top: 10rpx;
position: relative;
margin-right: 36rpx;
display: flex;
align-items: center;
justify-content: center;
// width: 160rpx;
// height: 60rpx;
padding: 4rpx 8rpx;
background: #F0F0F0;
border-radius: 6rpx 6rpx 6rpx 6rpx;
border: 1rpx solid #F0F0F0;
font-weight: 500;
font-size: 32rpx;
color: #3D3D3D;
image {
position: absolute;
right: 0;
bottom: 0;
width: 34rpx;
height: 34rpx;
}
}
.act {
background: #DCEDFF;
border: 1rpx solid #4297F3;
color: #4297F3;
}
}
.tit {
width: 100%;
text-align: center;
font-weight: 600;
font-size: 36rpx;
color: #3D3D3D;
}
.btn {
margin-top: 60rpx;
display: flex;
align-items: center;
justify-content: center;
width: 552rpx;
height: 88rpx;
background: #4C97E7;
border-radius: 10rpx 10rpx 10rpx 10rpx;
font-weight: 600;
font-size: 36rpx;
color: #FFFFFF;
}
}
.btn_box {
position: fixed;
width: 750rpx;
bottom: 50rpx;
display: flex;
flex-wrap: nowrap;
align-content: center;
justify-content: center;
.btn1 {
margin-right: 52rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
justify-content: center;
width: 310rpx;
height: 100rpx;
background: #E2F2FF;
font-weight: 500;
font-size: 40rpx;
color: #4C97E7;
}
.btn2 {
display: flex;
flex-wrap: nowrap;
align-items: center;
justify-content: center;
width: 310rpx;
height: 100rpx;
background: #4C97E7;
font-weight: 500;
font-size: 40rpx;
color: #FFFFFF;
}
}
.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;
}
.tips {
width: 100%;
text-align: right;
font-weight: 400;
font-size: 22rpx;
color: #6F6F6F;
}
.card_li {
width: 100%;
padding-top: 24rpx;
display: flex;
flex-wrap: wrap;
// align-content: center;
// justify-content: space-between;
border-bottom: 1rpx solid #D8D8D8;
padding-bottom: 18rpx;
.rule {
display: flex;
align-items: center;
font-weight: 400;
font-size: 30rpx;
color: #3D3D3D;
.input {
margin-left: 6rpx;
margin-right: 6rpx;
padding: 6rpx;
border: 1rpx solid #ccc;
border-radius: 20rpx;
width: 100rpx;
}
}
.tops {
width: 100%;
display: flex;
flex-wrap: nowrap;
align-items: center;
.card_left {
font-weight: 400;
font-size: 30rpx;
color: #3D3D3D;
}
.card_right {
margin-left: auto;
display: flex;
flex-wrap: nowrap;
align-items: center;
// justify-content: space-between;
span {
font-weight: 400;
font-size: 30rpx;
color: #3D3D3D;
}
.input {
padding-right: 10rpx;
padding: 6rpx;
border: 1rpx solid #ccc;
border-radius: 20rpx;
width: 400rpx;
text-align: left;
/* 输入框内容靠右显示 */
}
}
}
}
}
}
</style>