bick_back/src/views/system/fee/index.vue

856 lines
32 KiB
Vue
Raw Normal View History

2024-05-20 18:07:24 +08:00
<template>
<div class="app-container">
<!-- 搜索表单 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
2024-11-06 10:53:33 +08:00
<el-form-item label="代理商" prop="deptId" v-if="userName == 'admin' && !deptId" >
2024-09-12 16:30:33 +08:00
<el-select v-model="queryParams.deptId" filterable placeholder="请选择代理商" clearable>
2024-06-20 15:09:30 +08:00
<el-option
v-for="item in deptOptions"
:key="item.deptId"
:label="item.deptName"
:value="item.deptId"
></el-option>
</el-select>
</el-form-item>
2024-05-20 18:07:24 +08:00
<el-form-item label="套餐名称" prop="name">
2024-05-22 17:28:19 +08:00
<el-input v-model="queryParams.name" placeholder="请输入套餐名称" clearable @keyup.enter.native="handleQuery" />
2024-05-20 18:07:24 +08:00
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
2024-05-22 17:28:19 +08:00
<el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label"
:value="dict.value" />
2024-05-20 18:07:24 +08:00
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 按钮和表格 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
2024-05-22 17:28:19 +08:00
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:fee:add']">新增</el-button>
2024-05-20 18:07:24 +08:00
</el-col>
<el-col :span="1.5">
2024-05-22 17:28:19 +08:00
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['system:fee:edit']">修改</el-button>
2024-05-20 18:07:24 +08:00
</el-col>
<el-col :span="1.5">
2024-05-22 17:28:19 +08:00
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['system:fee:remove']">删除</el-button>
2024-05-20 18:07:24 +08:00
</el-col>
<el-col :span="1.5">
2024-05-22 17:28:19 +08:00
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['system:fee:export']">导出</el-button>
2024-05-20 18:07:24 +08:00
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="feeList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="id" align="center" prop="ruleId" />
2024-11-06 10:53:33 +08:00
<el-table-column label="代理商" align="center" :show-overflow-tooltip="true">
<template slot-scope="scope">
<router-link :to="'/system/deptDetail/index/' + scope.row.deptId" class="link-type">
<span>{{scope.row.deptName}}</span>
</router-link>
</template>
</el-table-column>
<!-- <el-table-column label="代理商" align="center" prop="deptName" v-if="userName == 'admin'"/> -->
2024-09-10 10:25:06 +08:00
<!-- <el-table-column label="应用运营区" align="center" prop="areaName"/>-->
2024-05-20 18:07:24 +08:00
<el-table-column label="套餐名称" align="center" prop="name" />
2024-06-06 22:08:03 +08:00
<el-table-column label="说明" :show-overflow-tooltip="true" align="center" prop="instructions" />
2024-09-03 16:51:50 +08:00
<el-table-column label="价格说明" align="left" prop="description" >
<template slot-scope="scope">
<div v-html="appUserNameFormatter(scope.row.description)"></div>
</template>
</el-table-column>
2024-05-20 18:07:24 +08:00
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
2024-05-22 17:28:19 +08:00
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status" />
2024-05-20 18:07:24 +08:00
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
2024-10-24 21:44:10 +08:00
<el-table-column prop="orderNum" align="center" label="排序"></el-table-column>
2024-05-20 18:07:24 +08:00
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
2024-05-22 17:28:19 +08:00
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:fee:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:fee:remove']">删除</el-button>
2024-05-20 18:07:24 +08:00
</template>
</el-table-column>
</el-table>
2024-05-22 17:28:19 +08:00
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
2024-05-20 18:07:24 +08:00
<!-- 添加或修改收费方式对话框 -->
<el-dialog :title="title" :visible.sync="open" width="1200px" append-to-body>
2024-05-22 17:28:19 +08:00
2024-05-20 18:07:24 +08:00
<el-form ref="form" :model="form" :rules="rules" label-width="150px">
2024-05-22 17:28:19 +08:00
<el-form-item label="套餐名称" prop="name">
<el-input v-model="form.name" placeholder="请输入套餐名称" />
</el-form-item>
2024-07-24 18:17:13 +08:00
<el-row>
<el-col :span="12" v-if="userName == 'admin'">
2024-09-12 16:30:33 +08:00
<el-form-item label="代理商" prop="deptId" >
2024-10-02 18:33:10 +08:00
<el-select v-model="form.deptId" filterable placeholder="请选择代理商">
2024-07-24 18:17:13 +08:00
<el-option
v-for="item in deptOptions"
:key="item.deptId"
:label="item.deptName"
:value="item.deptId"
></el-option>
</el-select>
</el-form-item>
</el-col>
2024-10-24 21:44:10 +08:00
<el-col :span="12">
<el-form-item label="显示排序" prop="orderNum">
<el-input-number v-model="form.orderNum" controls-position="right" :min="0" />
</el-form-item>
</el-col>
2024-07-24 18:17:13 +08:00
</el-row>
2024-05-27 09:02:28 +08:00
<el-form-item label="说明" prop="instructions" :show-overflow-tooltip="true">
<editor v-model="form.instructions" :min-height="192"/>
<!-- <el-input v-model="form.explain" type="textarea" placeholder="请输入内容" /> -->
2024-05-22 17:28:19 +08:00
</el-form-item>
<el-form-item label="状态" prop="status" v-if="title != '添加收费方式'">
<el-select v-model="form.status" placeholder="请选择状态">
<el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
2024-07-13 15:07:14 +08:00
<el-form-item v-if="returnVerify == '0'" label="还车结算" prop="autoRefundDeposit">
2024-05-22 17:28:19 +08:00
<el-col :span="4">
<el-input v-model="form.autoRefundDeposit" placeholder="请输入" />
</el-col>
小时 后自动退押金
</el-form-item>
2024-07-18 12:01:43 +08:00
<!-- <el-form-item label="订单超过" prop="unit">-->
<!-- <el-col :span="4">-->
<!-- <el-input v-model="form.orderExceedMinutes" placeholder="请输入" />-->
<!-- </el-col>-->
<!-- <el-col :span="1.2">-->
<!-- 分钟,-->
<!-- </el-col>-->
2024-05-22 17:28:19 +08:00
2024-07-18 12:01:43 +08:00
<!-- <el-col :span="4">-->
<!-- <el-input v-model="form.orderExceedWarn" placeholder="请输入" />-->
<!-- </el-col>-->
<!-- 分钟语音提醒一次归还设备-->
<!-- </el-form-item>-->
2024-05-22 17:28:19 +08:00
<el-form-item label="免费骑行" prop="freeRideTime">
<el-col :span="4">
<el-input v-model="form.freeRideTime" placeholder="请输入" />
</el-col>
分钟
</el-form-item>
<!-- 套餐名称说明租赁单位等字段省略假设这些部分不需要修改 -->
<el-form-item label="租赁单位" prop="rentalUnit">
<el-radio-group v-model="form.rentalUnit" @change="handleUnitChange">
<el-radio label="minutes">按分钟</el-radio>
<el-radio label="hours">按小时</el-radio>
2024-07-24 10:09:51 +08:00
<!-- <el-radio label="day">按天</el-radio>-->
2024-05-22 17:28:19 +08:00
</el-radio-group>
</el-form-item>
<!-- 计费周期和封顶金额只在非按天计费时显示 -->
<!-- 骑行计费规则选择 -->
<el-form-item label="骑行计费规则" prop="ridingRule">
<el-radio-group v-model="form.ridingRule" @change="handleBillingRuleChange">
<el-radio label="1">起步价计费</el-radio>
<el-radio label="2">区间计费</el-radio>
</el-radio-group>
</el-form-item>
<!-- 起步价计费选项 -->
<div v-if="form.ridingRule == '1'">
<el-form-item label="起步价">
<el-row :gutter="10">
<el-col :span="4">
2024-05-28 13:53:17 +08:00
<el-input v-model="startingPrice" placeholder="请输入起步价" />
2024-05-22 17:28:19 +08:00
</el-col>
<el-col :span="2" style="line-height: 32px;">
</el-col>
<el-col :span="4">
2024-07-22 10:29:30 +08:00
<el-form-item>
<el-input v-model="startingTime" placeholder="请输入起步时间" />
</el-form-item>
2024-05-22 17:28:19 +08:00
</el-col>
<el-col :span="2" style="line-height: 32px;">
{{ timeUnit }})
</el-col>
</el-row>
</el-form-item>
<el-form-item label="超出价">
<el-row :gutter="10">
<el-col :span="4">
2024-07-22 10:29:30 +08:00
<el-input v-model="timeoutPrice" placeholder="请输入超出价格" />
2024-05-22 17:28:19 +08:00
</el-col>
<el-col :span="2" style="line-height: 32px;">
/
</el-col>
<el-col :span="4">
2024-07-22 10:29:30 +08:00
<el-form-item>
2024-07-18 12:01:43 +08:00
<el-input v-model="timeoutTime" placeholder="请输入超出时间" />
</el-form-item>
2024-05-22 17:28:19 +08:00
</el-col>
<el-col :span="4" style="line-height: 32px;">
{{ timeUnit }}超出起步价后
</el-col>
</el-row>
</el-form-item>
<el-form-item>
<div>
<br />1) 不是起步时间的仍按起步时间收取费用超出起步时间后的均匀计算
<br />2) 为避免免费用户使用切勿频繁切换
</div>
</el-form-item>
</div>
2024-05-20 18:07:24 +08:00
<!-- 区间计费选项 -->
2024-05-22 17:28:19 +08:00
<div v-if="form.ridingRule == '2'">
2024-05-20 18:07:24 +08:00
<el-form-item label="启用区间">
2024-05-22 17:28:19 +08:00
<!-- <el-switch v-model="form.enablelnterval" @change="toggleInterval" /> -->
2024-05-20 18:07:24 +08:00
</el-form-item>
2024-05-22 17:28:19 +08:00
<div>
<div v-for="(interval, index) in rule" :key="index" class="interval-group"
style="display: flex;flex-wrap: wrap;">
<el-form-item>
<el-row :gutter="10">
<div style="display: flex;flex-wrap: nowrap;">
<el-col :span="1">
<span></span>
</el-col>
<el-col :span="2">
2024-11-28 17:56:21 +08:00
<el-input v-model="interval.start" :placeholder="'请输入'" :disabled="true"/>
2024-05-22 17:28:19 +08:00
</el-col>
<el-col :span="0.5" style="line-height: 32px;">
~
</el-col>
<el-col :span="2">
<el-input v-model="interval.end" :placeholder="'请输入'" />
</el-col>
<el-col :span="2.5" style="line-height: 32px;">
{{ timeUnit }} 之间
</el-col>
<el-col :span="3" v-if="!form.enablelnterval">
<el-input v-model="interval.eachUnit" placeholder="请输入" />
</el-col>
<el-col :span="2" style="line-height: 32px;">
<span v-if="!form.enablelnterval">{{ timeUnit }}</span> 收费
</el-col>
<el-col :span="4">
<el-input v-model="interval.fee" placeholder="请输入" />
</el-col>
<el-col :span="1" style="line-height: 32px;">
</el-col>
<el-col :span="2">
<el-button type="danger" icon="el-icon-delete" @click="removeInterval(index)">删除</el-button>
</el-col>
</div>
</el-row>
</el-form-item>
2024-05-20 18:07:24 +08:00
</div>
<el-form-item>
<el-row :gutter="10">
2024-05-22 17:28:19 +08:00
<el-col :span="1">
2024-05-20 18:07:24 +08:00
<span>大于</span>
</el-col>
2024-05-22 17:28:19 +08:00
<el-col :span="2">
2024-11-28 17:56:21 +08:00
<el-input placeholder="请输入" v-model="more.start" disabled/>
2024-05-20 18:07:24 +08:00
</el-col>
2024-05-22 17:28:19 +08:00
<el-col :span="3" style="line-height: 32px;">
2024-05-20 18:07:24 +08:00
{{ timeUnit }} 之后
</el-col>
<el-col :span="4">
2024-05-22 17:28:19 +08:00
<el-input placeholder="请输入" v-model="more.eachUnit" />
2024-05-20 18:07:24 +08:00
</el-col>
2024-05-22 17:28:19 +08:00
<el-col :span="2" style="line-height: 32px;">
2024-05-20 18:07:24 +08:00
{{ timeUnit }} 收费
</el-col>
2024-05-22 17:28:19 +08:00
<el-col :span="2">
<el-input placeholder="请输入" v-model="more.fee" />
2024-05-20 18:07:24 +08:00
</el-col>
<el-col :span="1" style="line-height: 32px;">
</el-col>
</el-row>
</el-form-item>
<el-form-item>
2024-05-22 17:28:19 +08:00
<el-button type="primary" icon="el-icon-plus" @click="addInterval">添加区间</el-button>
</el-form-item>
<el-form-item>
<div style="color: red;">
2024-05-20 18:07:24 +08:00
2024-05-22 17:28:19 +08:00
2024-05-20 18:07:24 +08:00
<br />1) 不是单位时间的仍按单位时间收取费用超出起步时间后的均匀计算
<br />2) 为避免免费用户使用切勿频繁切换
2024-05-22 17:28:19 +08:00
<br />3) 请注意第一个时间应该为0时间区间要连贯 不能出现有时间跨度的场景 1-20 每30分钟收费10元 大于50分钟之后每分钟10分钟收费30元这种情况否则无法计算
2024-05-20 18:07:24 +08:00
</div>
</el-form-item>
2024-05-22 17:28:19 +08:00
2024-05-20 18:07:24 +08:00
</div>
2024-05-22 17:28:19 +08:00
2024-05-20 18:07:24 +08:00
</div>
2024-05-22 17:28:19 +08:00
<el-form-item v-if="form.rentalUnit != 'day'" label="计费周期" prop="chargingCycle">
2024-06-13 16:21:53 +08:00
<el-radio-group v-model="form.chargingCycle">
<el-radio label="1">
订单生成后
<el-input v-model="time1"
style="width: 80px; display: inline-block; margin-left: 10px;" />
小时
</el-radio>
2024-07-26 17:39:51 +08:00
<el-radio label="2">
自定义时刻
<el-time-picker v-model="time2" value-format="HH:mm:ss" placeholder="选择时间" style="margin-left: 10px;" />
</el-radio>
2024-06-13 16:21:53 +08:00
</el-radio-group>
</el-form-item>
2024-05-22 17:28:19 +08:00
<el-form-item v-if="form.rentalUnit != 'day'">
<div>
<br />1) 若计费周期为订单生成后X小时每达到X小时订单按规则重新计费各周期内金额总和为订单总费用
<br />2) 若计费周期为自定义时刻每当达到该时刻订单按规则重新计费各周期内金额总和为订单总费用
</div>
</el-form-item>
<el-form-item v-if="form.rentalUnit != 'day'" label="封顶金额" prop="cappedAmount">
<el-col :span="4">
<el-input v-model="form.cappedAmount" placeholder="请输入封顶金额" />
</el-col>
</el-form-item>
<el-form-item v-if="form.rentalUnit != 'day'">
<div>
在单个计费周期内达到封顶金额后则订单费用不再增加超过计费周期后在新的周期内重新计费订单总费用继续增加
</div>
</el-form-item>
2024-05-20 18:07:24 +08:00
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listFee, getFee, delFee, addFee, updateFee } from "@/api/system/fee";
2024-07-24 18:17:13 +08:00
import { listArea, selectAreaListByDeptId } from '@/api/system/area'
2024-09-10 10:25:06 +08:00
import { listDept2} from '@/api/system/dept'
2024-05-20 18:07:24 +08:00
export default {
name: "Fee",
dicts: ['sys_normal_disable'],
2024-07-24 18:17:13 +08:00
watch: {
'form.deptId': function(deptId) {
this.getAreaListByDeptId(deptId);
},
2024-11-28 17:56:21 +08:00
'rule': {
handler(newVal) {
newVal.forEach((interval, index) => {
// 跳过第一条,从第二条开始更新
if (index > 0) {
interval.start = newVal[index - 1].end || ''; // 动态更新 start
}
});
// 更新 more.start 的值为新数组最后一条的 end 值
if (newVal.length > 0) {
this.more.start = newVal[newVal.length - 1].end || ''; // 设置 more.start
}
},
deep: true, // 深度监听
immediate: true // 初始化立即执行
}
2024-07-24 18:17:13 +08:00
},
2024-11-06 10:53:33 +08:00
props: {
// 用户id
deptId: {
type: Number,
default: null,
}
},
2024-05-20 18:07:24 +08:00
data() {
return {
2024-06-07 10:07:13 +08:00
userName: undefined,
2024-05-20 18:07:24 +08:00
loading: true,
ids: [],
2024-08-02 11:06:15 +08:00
returnVerify: '0',
2024-05-20 18:07:24 +08:00
single: true,
2024-06-13 16:21:53 +08:00
// 运营区下拉框
areaOptions: [],
2024-06-20 15:09:30 +08:00
deptOptions: [],
2024-05-20 18:07:24 +08:00
multiple: true,
showSearch: true,
total: 0,
feeList: [],
title: "",
open: false,
queryParams: {
pageNum: 1,
2024-08-21 09:03:18 +08:00
pageSize: 20,
2024-11-06 10:53:33 +08:00
deptId:this.deptId,
2024-05-20 18:07:24 +08:00
name: null,
status: null,
},
2024-11-13 10:50:55 +08:00
//不分页
queryParams2: {
pageNum: 1,
pageSize: 999
},
2024-08-02 11:06:15 +08:00
time1:'24',
2024-05-29 11:45:47 +08:00
time2:'',
2024-05-20 18:07:24 +08:00
form: {
2024-05-22 17:28:19 +08:00
name: '',
2024-08-02 11:06:15 +08:00
instructions: '按小时计费',
2024-05-22 17:28:19 +08:00
status: "正常",
2024-08-02 11:06:15 +08:00
autoRefundDeposit: '0',
2024-05-22 17:28:19 +08:00
orderExceedMinutes: '',
orderExceedWarn: '',
2024-08-02 11:06:15 +08:00
freeRideTime: '5',
2024-05-22 17:28:19 +08:00
rentalUnit: 'minutes',
ridingRule: '1',
2024-08-02 11:06:15 +08:00
chargingCycle: '1',
chargingCycleValue: '24',
cappedAmount: '200',
2024-05-22 17:28:19 +08:00
rule: [{ start: '', end: '', eachUnit: '', fee: '' }],
2024-07-22 10:29:30 +08:00
timeoutTime: '',
startingTime: ''
2024-05-22 17:28:19 +08:00
// chargingCycle: 1, // 默认选择第一个选项
// chargingCycleValue: '', // 对应的值
2024-05-20 18:07:24 +08:00
},
2024-08-02 11:06:15 +08:00
timeoutTime: '1',
startingPrice: '5',
startingTime: '1',
timeoutPrice: '5',
2024-05-22 17:28:19 +08:00
enablelnterval: false,
2024-11-28 17:56:21 +08:00
rule: [{ start: '0', end: '', eachUnit: '', fee: '' }],
2024-05-22 17:28:19 +08:00
more: { start: '', end: '9999', eachUnit: '', fee: '' },
2024-05-20 18:07:24 +08:00
timeUnit: '分钟',
rules: {
2024-05-22 17:28:19 +08:00
name: [
{ required: true, message: '请输入套餐名称', trigger: 'blur' },
],
2024-05-27 09:02:28 +08:00
instructions: [
2024-05-22 17:28:19 +08:00
{ required: true, message: '请输入说明', trigger: 'blur' },
],
status: [
{ required: true, message: '请选择状态', trigger: 'change' },
],
2024-06-25 09:30:33 +08:00
autoRefundDeposit: [
{ required: true, message: '请输入还车结算时间', trigger: 'blur' },
],
2024-05-22 17:28:19 +08:00
orderExceedMinutes: [
{ required: true, message: '请输入订单超过时间', trigger: 'blur' },
],
orderExceedWarn: [
{ required: true, message: '请输入订单提醒时间', trigger: 'blur' },
],
freeRideTime: [
{ required: true, message: '请输入免费骑行时间', trigger: 'blur' },
],
rentalUnit: [
{ required: true, message: '请选择租赁单位', trigger: 'change' },
],
chargingCycle: [
{ required: true, message: '请选择计费周期', trigger: 'change' },
],
cappedAmount: [
{ required: true, message: '请输入封顶金额', trigger: 'blur' },
],
ridingRule: [
{ required: true, message: '请选择骑行计费规则', trigger: 'change' },
],
hourlyFee: [
{ required: true, message: '请输入每小时收费', trigger: 'blur' },
],
perKmFee: [
{ required: true, message: '请输入每公里收费', trigger: 'blur' },
],
sectionCharges: [
{ required: true, message: '请输入区间收费', trigger: 'blur' },
],
2024-07-24 18:17:13 +08:00
deptId: [
2024-09-12 16:30:33 +08:00
{ required: true, message: '请选择代理商', trigger: 'change' },
2024-07-22 10:29:30 +08:00
]
2024-05-22 17:28:19 +08:00
},
2024-05-20 18:07:24 +08:00
};
},
created() {
2024-06-07 10:07:13 +08:00
console.log("当前用户信息:",this.$store.state.user.name)
this.userName = this.$store.state.user.name;
2024-05-20 18:07:24 +08:00
this.getList();
2024-06-20 15:09:30 +08:00
if(this.userName === 'admin'){
2024-08-05 22:25:24 +08:00
listDept2({status: '0',pageNum:1,pageSize:999 }).then(response => {
this.deptOptions = response.rows;
2024-06-20 15:09:30 +08:00
});
}
2024-11-13 10:50:55 +08:00
listArea(this.queryParams2).then(response => {
2024-07-24 18:17:13 +08:00
this.areaOptions = response.rows;
});
2024-05-20 18:07:24 +08:00
},
methods: {
2024-09-03 16:51:50 +08:00
appUserNameFormatter(value){
return value ? value.split(',').join('<br>') : '';
},
2024-07-24 18:17:13 +08:00
getAreaListByDeptId(deptId){
console.log('---------------deptId:', deptId)
if(deptId){
selectAreaListByDeptId(deptId).then(response => {
2024-09-12 16:30:33 +08:00
console.log("根据代理商id获取运营区和型号=========",response.data)
2024-07-24 18:17:13 +08:00
this.areaOptions = response.data.areaList;
let areaOptions = response.data.areaList;
if(this.form.areaId != null){
areaOptions.length > 0 ? this.form.areaId = areaOptions[0].areaId : this.form.areaId = null;
}
});
}else{
2024-11-13 10:50:55 +08:00
listArea(this.queryParams2).then(response => {
2024-07-24 18:17:13 +08:00
this.areaOptions = response.rows;
});
}
},
2024-05-20 18:07:24 +08:00
handleUnitChange() {
2024-05-22 17:28:19 +08:00
if (this.form.rentalUnit == 'minutes') {
this.timeUnit = '分钟';
} else if (this.form.rentalUnit == 'hours') {
this.timeUnit = '小时';
} else if (this.form.rentalUnit == 'day') {
this.timeUnit = '天';
// 如果需要的话,你可以取消注释下面的代码,以处理特定于“天”的逻辑
// this.form.intervals = [];
2024-05-20 18:07:24 +08:00
}
},
handleBillingRuleChange() {
2024-05-22 17:28:19 +08:00
if (this.form.ridingRule === '2' && this.rule.length === 0) {
2024-05-20 18:07:24 +08:00
this.addInterval();
}
},
2024-11-28 17:56:21 +08:00
validateMore() {
2024-12-02 20:59:12 +08:00
if(this.form.ridingRule === '1'){
return true
}
2024-11-28 17:56:21 +08:00
const { start, end, eachUnit, fee } = this.more;
// 检查开始和结束值是否为空
if (start === '' || end === '') {
this.$modal.msgError('区间计费:大于分钟数不能为空');
return false;
}
// 检查分钟数和金额是否为空
if (eachUnit === '') {
this.$modal.msgError('区间计费:大于每分钟数不能为空');
return false;
}
if (fee === '') {
this.$modal.msgError('区间计费:大于分钟之后的金额不能为空');
return false;
}
// 检查开始和结束值是否为数值
if (isNaN(Number(start)) || isNaN(Number(end))) {
this.$modal.msgError('区间计费:大于分钟数必须是数值');
return false;
}
// 检查分钟数和金额是否为数值
if (isNaN(Number(eachUnit))) {
this.$modal.msgError('区间计费:大于每分钟数必须是数值');
return false;
}
if (isNaN(Number(fee))) {
this.$modal.msgError('区间计费:大于分钟之后的金额必须是数值');
return false;
}
return true; // 校验通过
},
validateRules() {
2024-12-02 20:59:12 +08:00
if(this.form.ridingRule === '1'){
console.log(111111111111)
return true
}
2024-11-28 17:56:21 +08:00
for (let i = 0; i < this.rule.length; i++) {
const { start, end, eachUnit, fee } = this.rule[i];
if (start === '' || end === '') {
this.$modal.msgError(`区间计费:第 ${i + 1} 区间的开始或结束值不能为空`);
return false;
}
if (eachUnit === '') {
this.$modal.msgError(`区间计费:第 ${i + 1} 区间的分钟数不能为空`);
return false;
}
if (fee === '') {
this.$modal.msgError(`区间计费:第 ${i + 1} 区间的金额不能为空`);
return false;
}
// 检查开始和结束值是否为数值
if (isNaN(Number(start)) || isNaN(Number(end))) {
this.$modal.msgError(`区间计费:第 ${i + 1} 区间的开始和结束值必须是数值`);
return false;
}
if (isNaN(Number(eachUnit))) {
this.$modal.msgError(`区间计费:第 ${i + 1} 区间的分钟数必须是数值`);
return false;
}
if (isNaN(Number(fee))) {
this.$modal.msgError(`区间计费:第 ${i + 1} 区间的金额必须是数值`);
return false;
}
if (parseFloat(start) >= parseFloat(end)) {
this.$modal.msgError(`区间计费:第 ${i + 1} 区间的结束值必须小于开始值`);
return false;
}
}
return true; // 校验通过
},
2024-05-20 18:07:24 +08:00
addInterval() {
2024-11-28 17:56:21 +08:00
// this.rule.push({ start: '', end: '', eachUnit: '', fee: '' });
const lastInterval = this.rule[this.rule.length - 1];
const newInterval = { start: '', end: '', eachUnit: '', fee: '' };
// 如果存在上一条规则,则将新规则的 start 设置为上一条的 end
if (lastInterval && lastInterval.end) {
newInterval.start = lastInterval.end;
}else{
this.$modal.msgError('请先设置上一条规则的结束值');
return;
}
this.rule.push(newInterval);
2024-05-20 18:07:24 +08:00
},
removeInterval(index) {
2024-05-22 17:28:19 +08:00
this.rule.splice(index, 1);
2024-05-20 18:07:24 +08:00
},
getList() {
this.loading = true;
listFee(this.queryParams).then(response => {
this.feeList = response.rows;
this.total = response.total;
this.loading = false;
});
},
cancel() {
this.open = false;
this.reset();
},
reset() {
this.form = {
2024-05-22 17:28:19 +08:00
name: '',
2024-08-02 11:06:15 +08:00
instructions: '按小时计费',
2024-05-22 17:28:19 +08:00
status: "正常",
2024-08-02 11:06:15 +08:00
autoRefundDeposit: '0',
2024-05-22 17:28:19 +08:00
orderExceedMinutes: '',
orderExceedWarn: '',
2024-08-02 11:06:15 +08:00
freeRideTime: '5',
2024-05-22 17:28:19 +08:00
rentalUnit: 'minutes',
ridingRule: '1',
2024-08-02 11:06:15 +08:00
chargingCycle: '1',
chargingCycleValue: '24',
cappedAmount: '200',
2024-07-24 18:17:13 +08:00
areaId: null
2024-05-22 17:28:19 +08:00
}
this.enablelnterval = false,
2024-11-28 17:56:21 +08:00
this.more = { start: '', end: '9999', eachUnit: '', fee: '' }
this.rule = [{ start: '0', end: '', eachUnit: '', fee: '' }],
2024-08-02 11:06:15 +08:00
this.timeoutTime = '60',
this.startingPrice = '5',
this.startingTime = '60',
this.timeoutPrice = '5',
2024-05-22 17:28:19 +08:00
this.resetForm("form")
2024-05-20 18:07:24 +08:00
},
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
handleSelectionChange(selection) {
this.ids = selection.map(item => item.ruleId);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
handleAdd() {
this.reset();
2024-07-24 18:17:13 +08:00
this.open = true;
this.title = "添加收费方式";
2024-11-08 09:38:40 +08:00
if(this.deptId){
this.form.deptId=this.deptId
}
2024-05-20 18:07:24 +08:00
},
handleUpdate(row) {
this.reset();
const ruleId = row.ruleId || this.ids;
getFee(ruleId).then(response => {
this.form = response.data;
2024-05-28 13:53:17 +08:00
if(this.form.rentalUnit=='minutes'){
this.timeUnit='分钟'
}else if(this.form.rentalUnit=='hours'){
this.timeUnit='小时'
}else if(this.form.rentalUnit=='day'){
this.timeUnit='天'
}
2024-07-18 12:01:43 +08:00
if(this.form.area){
this.returnVerify = this.form.area.returnVerify;
}
2024-07-13 15:07:14 +08:00
// console.log("-------returnVerify------",this.returnVerify)
2024-05-22 17:28:19 +08:00
// delete this.form.ridingRuleJson;
let json = JSON.parse(response.data.ridingRuleJson)
if (this.form.ridingRule == 1) {
2024-07-22 10:29:30 +08:00
this.timeoutTime = json.timeoutTime
2024-05-28 13:53:17 +08:00
this.startingPrice = json.startingPrice
2024-07-22 10:29:30 +08:00
this.startingTime = json.startingTime
2024-05-28 13:53:17 +08:00
this.timeoutPrice = json.timeoutPrice
2024-05-22 17:28:19 +08:00
} else {
this.rule = json.rule.slice(0, -1);
// 获取数组的最后一个元素
this.more = json.rule[json.rule.length - 1];
}
2024-05-29 11:45:47 +08:00
if(this.form.chargingCycle==1){
this.time1=this.form.chargingCycleValue
}else if(this.form.chargingCycle==2){
// this.data.chargingCycleValue=time2
this.time2=this.form.chargingCycleValue
}
2024-05-22 17:28:19 +08:00
console.log(this.form,'this.formthis.form');
2024-05-20 18:07:24 +08:00
this.open = true;
this.title = "修改收费方式";
});
},
submitForm() {
this.$refs["form"].validate(valid => {
2024-11-28 17:56:21 +08:00
if(!this.validateRules()){
return
}
if (!this.validateMore()) {
return; // 校验未通过,阻止提交
}
2024-05-20 18:07:24 +08:00
if (valid) {
2024-07-22 10:29:30 +08:00
// 如何不是整数,弹窗提示
if (!/^\d+$/.test(this.startingTime)) {
this.$modal.msgError('起步时间必须为正整数');
return;
}
if (!/^\d+$/.test(this.timeoutTime)) {
this.$modal.msgError('超时时间必须为正整数');
return;
}
2024-05-22 17:28:19 +08:00
// this.form.rule.push(this.more)
2024-10-22 15:39:37 +08:00
console.log(this.form,'mmmmmmmmmmmmm');
2024-05-22 17:28:19 +08:00
let data = { ...this.form }; // 使用对象扩展运算符确保复制一个新对象,避免直接修改 this.form
this.rule.push(this.more)
2024-05-29 11:45:47 +08:00
2024-05-22 17:28:19 +08:00
data.ridingRuleJson = {}
if (this.form.ridingRule == 2) {
data.ridingRuleJson.rule = this.rule
data.ridingRuleJson.enablelnterval = this.enablelnterval
} else {
2024-07-22 10:29:30 +08:00
data.ridingRuleJson.timeoutTime = this.timeoutTime
2024-05-28 13:53:17 +08:00
data.ridingRuleJson.startingPrice = this.startingPrice
2024-07-22 10:29:30 +08:00
data.ridingRuleJson.startingTime = this.startingTime
2024-05-28 13:53:17 +08:00
data.ridingRuleJson.timeoutPrice = this.timeoutPrice
2024-05-22 17:28:19 +08:00
}
data.ridingRuleJson = JSON.stringify(data.ridingRuleJson);
2024-05-29 11:45:47 +08:00
if(this.form.chargingCycle==1){
data.chargingCycleValue=this.time1
}else if(this.form.chargingCycle==2){
2024-10-22 15:39:37 +08:00
if(!this.time2){
this.$modal.msgError('自定义时刻不能为空');
return;
}
2024-05-29 11:45:47 +08:00
data.chargingCycleValue=this.time2
}
2024-05-22 17:28:19 +08:00
// console.log(data, 'mmmmmmmmmmmmm');
2024-05-20 18:07:24 +08:00
if (this.form.ruleId != null) {
2024-05-22 17:28:19 +08:00
updateFee(data).then(() => {
2024-05-20 18:07:24 +08:00
this.$message.success("修改成功");
this.open = false;
this.getList();
2024-05-22 17:28:19 +08:00
this.reset()
2024-05-20 18:07:24 +08:00
});
} else {
2024-05-22 17:28:19 +08:00
addFee(data).then(() => {
2024-05-20 18:07:24 +08:00
this.$message.success("新增成功");
this.open = false;
this.getList();
2024-05-22 17:28:19 +08:00
this.reset()
2024-05-20 18:07:24 +08:00
});
}
}
});
},
handleDelete(row) {
const ruleIds = row.ruleId || this.ids;
2024-07-09 14:19:21 +08:00
this.$confirm('删除计费规则会导致正在骑行中的订单计费错乱,是否确认删除计费规则为"' + ruleIds + '"的记录?')
2024-05-20 18:07:24 +08:00
.then(() => {
return delFee(ruleIds);
}).then(() => {
this.getList();
this.$message.success("删除成功");
2024-05-22 17:28:19 +08:00
}).catch(() => { });
2024-05-20 18:07:24 +08:00
},
handleExport() {
this.download('system/fee/export', {
...this.queryParams
}, `fee_${new Date().getTime()}.xlsx`);
},
resetForm(formName) {
this.$refs[formName] && this.$refs[formName].resetFields();
},
toggleInterval() {
2024-05-22 17:28:19 +08:00
if (!this.form.enablelnterval) {
this.more = { start: '', end: '9999', eachUnit: '', fee: '' }
this.enablelnterval = false
this.rule = [{ start: '', end: '', eachUnit: '', fee: '' }]
2024-07-22 10:29:30 +08:00
this.timeoutTime = ''
2024-05-28 13:53:17 +08:00
this.startingPrice = ''
2024-07-22 10:29:30 +08:00
this.startingTime = ''
2024-05-28 13:53:17 +08:00
this.timeoutPrice = ''
2024-05-20 18:07:24 +08:00
}
},
}
};
</script>
<style scoped>
.interval-group {
margin-bottom: 10px;
}
2024-05-22 17:28:19 +08:00
2024-05-20 18:07:24 +08:00
.el-row {
align-items: center;
}
2024-05-22 17:28:19 +08:00
2024-05-20 18:07:24 +08:00
.el-col {
display: flex;
align-items: center;
}
2024-06-06 22:08:03 +08:00
</style>