bick_back/src/views/system/area/index.vue
2024-05-27 09:02:28 +08:00

742 lines
26 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>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="运营区" prop="areaName">
<el-input
v-model="queryParams.areaName"
placeholder="请输入运营区"
clearable
@keyup.enter.native="handleQuery"
/>
</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">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:area:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:area:edit']"
>修改</el-button>
<!-- <el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="openmap"
v-hasPermi="['system:area:edit']"
>电子围栏修改</el-button> -->
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:area:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:area:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="areaList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="运营区域" align="center" prop="areaName" />
<el-table-column label="车数量" align="center" prop="deviceNum" />
<el-table-column label="停车区" align="center" :show-overflow-tooltip="true">
<template slot-scope="scope">
<router-link :to="'/system/area-parking/index/' + scope.row.areaId" class="link-type">
<span>去设置</span>
</router-link>
</template>
</el-table-column>
<el-table-column label="禁停区" align="center" :show-overflow-tooltip="true">
<template slot-scope="scope">
<router-link :to="'/system/area-noparking/index/' + scope.row.areaId" class="link-type">
<span>去设置</span>
</router-link>
</template>
</el-table-column>
<el-table-column label="禁行区" align="center" :show-overflow-tooltip="true">
<template slot-scope="scope">
<router-link :to="'/system/area-noriding/index/' + scope.row.areaId" class="link-type">
<span>去设置</span>
</router-link>
</template>
</el-table-column>
<el-table-column label="收费方式" align="center" prop="ruleStr" />
<el-table-column label="联系人" align="center" prop="contact" />
<el-table-column label="联系人电话" align="center" prop="phone" />
<el-table-column label="状态" align="center" key="status" >
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
active-value="0"
inactive-value="1"
@change="handleStatusChange(scope.row)"
></el-switch>
</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>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:area:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="openmaps(scope.row)"
v-hasPermi="['system:area:edit']"
>修改电子围栏</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:area:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog title="电子围栏" :visible.sync="mapopen" width="1200px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="电子围栏" prop="boundaryStr">
<area-map :key="key" v-model="form.boundaryStr" :dataId="form.areaId" :pathList="form.boundaryStr" @center="center" @mapList="mapList" />
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="经度" prop="longitude">
<el-input v-model="form.longitude" placeholder="请输入经度" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="纬度" prop="latitude">
<el-input v-model="form.latitude" placeholder="请输入纬度" disabled/>
</el-form-item>
</el-col>
</el-row>
</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>
<!-- 添加或修改运营区对话框 -->
<el-dialog :title="title" :visible.sync="open" width="1200px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="运营区" prop="areaName">
<el-input v-model="form.areaName" placeholder="请输入运营区" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="运营区域">
<el-select v-model="form.province" clearable size="small" placeholder="请选择省" class="filter-item" style="width: 90px" @change="provinceChange($event)">
<el-option v-for="item in form.provinceList" :key="item.name" :label="item.name" :value="item.name"/>
</el-select>
<el-select v-model="form.city" clearable size="small" placeholder="请选择城市" class="filter-item" style="width: 100px" @change="cityChange($event)">
<el-option v-for="item in form.cityList" :key="item.name" :label="item.name" :value="item.name" />
</el-select>
<el-select v-model="form.county" clearable size="small" placeholder="请选择区县" class="filter-item" style="width: 100px" >
<el-option v-for="item in form.countyList" :key="item.name" :label="item.name" :value="item.name" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="运营个性化图片" prop="picture" label-width="140px">
<image-upload v-model="form.picture"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="运营个性化标语" prop="slogan" label-width="120px">
<el-input v-model="form.slogan" placeholder="请输入运营个性化标语" style="" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="联系人" prop="contact">
<el-input v-model="form.contact" placeholder="请输入联系人" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人电话" label-width="90" prop="phone">
<el-input v-model="form.phone" style="width: 75%" placeholder="请输入联系人电话" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="运营时间" prop="areaTime">
<el-select v-model="form.areaTime" placeholder="请选择运营时间" style="width: 100%;">
<el-option
v-for="dict in dict.type.et_operating_area_time"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="客服电话" prop="phone">
<el-input v-model="form.servicePhone " placeholder="请输入客服电话" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.areaTime==2">
<el-col :span="12">
<el-form-item label="自定义" >
<el-time-picker
v-model="value1"
:picker-options="{
selectableRange: '18:30:00 - 20:30:00'
}"
placeholder="开始时间">
</el-time-picker>
<el-time-picker
arrow-control
v-model="value2"
:picker-options="{
selectableRange: '18:30:00 - 20:30:00'
}"
placeholder="结束时间">
</el-time-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="运营区域外断电" label-width="120">
<el-radio-group v-model="form.areaOutOutage" style="width: 50%">
<el-radio
v-for="dict in dict.type.et_business_switch"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="停车点外还车调度" label-width="150">
<el-radio-group v-model="form.parkingOutDispatch" style="width: 50%">
<el-radio
v-for="dict in dict.type.et_business_switch"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="电子围栏外还车调度" label-width="150">
<el-radio-group v-model="form.areaOutDispatch" style="width: 50%">
<el-radio
v-for="dict in dict.type.et_business_switch"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="禁行区内断电" label-width="90">
<el-radio-group v-model="form.noRidingOutage" style="width: 60%">
<el-radio
v-for="dict in dict.type.et_business_switch"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="实名认证" >
<el-radio-group v-model="form.authentication" style="width: 60%">
<el-radio
v-for="dict in dict.type.et_business_switch"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="短信通知服务" label-width="90">
<el-radio-group v-model="form.msgSwitch" style="width: 60%">
<el-radio
v-for="dict in dict.type.et_business_switch"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="收费方式">
<el-select v-model="form.ruleIds" multiple placeholder="请选择收费方式">
<el-option
v-for="item in ruleOptions"
:key="item.ruleId"
:label="item.name"
:value="item.ruleId"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="低于电量(%)不得骑行" label-width="150">
<el-input-number style="width: 50%" v-model="form.undercharge" placeholder="低于电量(%)不得骑行"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="骑行押金" label-width="150">
<el-input-number style="width: 50%" v-model="form.deposit" placeholder="骑行前需要充值的押金"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="预约服务费" label-width="150">
<el-input-number style="width: 50%" v-model="form.appointmentServiceFee" placeholder="预约时每十分钟的计费"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="调度费" label-width="150">
<el-input-number style="width: 50%" v-model="form.dispatchFee" placeholder="车辆超出运行区外的调度费用"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="管理费" label-width="150">
<el-input-number style="width: 50%" v-model="form.vehicleManagementFee" placeholder="车辆在运营区内但没在停车区产生的调度费用"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="电量低于多少值自动生成换电订单" label-width="150" prop="autoReplacementOrder">
<el-input-number style="width: 50%" v-model="form.autoReplacementOrder" placeholder="电量低于多少值自动生成换电订单"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="最大预约时间" label-width="150">
<el-input-number style="width: 50%" v-model="form.timeoutMinutes" placeholder="车辆可最长预约多少分钟"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="还车误差(米)" label-width="100">
<el-input-number v-model="form.error" placeholder="还车误差"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="超出电子围栏多少时长断电(s)" label-width="150">
<el-input-number style="width: 50%" v-model="form.outage" placeholder="超出电子围栏多少时长断电(s)"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="安全协议">
<editor v-model="form.agreement" :min-height="192"/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="电子围栏" prop="boundaryStr">
<area-map :key="key" v-model="form.boundaryStr" :dataId="form.areaId" :pathList="form.boundaryStr" @center="center" @mapList="mapList" />
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="经度" prop="longitude">
<el-input v-model="form.longitude" placeholder="请输入经度" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="纬度" prop="latitude">
<el-input v-model="form.latitude" placeholder="请输入纬度" disabled/>
</el-form-item>
</el-col>
</el-row>
</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 { listArea, getArea, delArea, addArea, updateArea } from "@/api/system/area";
import AreaMap from "@/components/AreaMap";
import {listFee} from "@/api/system/fee";
import {getDistrictList} from "@/api/common/common";
export default {
name: "Area",
dicts: ['et_operating_area_status','et_operating_area_time','et_business_switch'],
components: { AreaMap },
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 日期范围
dateRange: [],
// 收费方式选项
ruleOptions: [],
provinceList: [],
cityList: [],
countyList: [],
CITY: [],
XIAN: [],
// 运营区表格数据
areaList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
mapopen:false,
// 通过key重新渲染area-map组件
key: 0,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
areaName: null,
},
// 表单参数
form: {
status:'1',
province: '',
city: '',
county: '',
provinceList: [],
cityList: [],
countyList: [],
},
loading:false,
// 表单校验
rules: {
areaName: [{ required: true, message: "运营区域不能为空", trigger: "blur" }],
contact: [{ required: true, message: "联系人不能为空", trigger: "blur" }],
phone: [{ required: true, message: "联系人电话不能为空", trigger: "blur" }],
autoReplacementOrder: [{ required: true, message: "最低电量不能为空", trigger: "blur" }],
},
};
},
created() {
this.getList();
},
methods: {
getCityList() {
this.loading=false
getDistrictList().then(res => {
this.form.provinceList = JSON.parse(res.data)
// console.log("provinceList======"+JSON.stringify(this.form.provinceList))
// this.form.provinceList = res.data.districts[0].districts /* 省*/
/* 进行遍历赋值*/
/* 市区和县区*/
let newProvince = this.form.provinceList
for(let i = 0; i < newProvince.length; i++){ /* 省级*/
for(let j = 0; j < newProvince[i].districts.length; j++){ /* 市级*/
let city = newProvince[i].districts[j].name
this.CITY.push({id:j+1,name:city,code:i+1})
for(let k = 0;k<newProvince[i].districts[j].districts.length; k++){/* 县级*/
let xian = newProvince[i].districts[j].districts[k].name
this.XIAN.push({id:k+1,name:xian,code:j+1,cityCountyName:city})
}
}
}
for(let m = 0; m < newProvince.length;m++){
newProvince[m] = {...newProvince[m],...{code:m+1}}
}
// console.log("newProvince======"+JSON.stringify(newProvince))
this.form.provinceList = newProvince
this.loading=true
console.log(console.log( this.form.provinceList,' this.form.provinceList'))
})
},
handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用";
this.$modal.confirm('确认要"' + text + row.areaName + '"运营区吗').then(function() {
let data={
areaId:row.areaId,
status:row.status
}
updateArea(data).then(response => {
this.getList();
});
}).then(() => {
this.$modal.msgSuccess(text + "成功");
}).catch(function() {
row.status = row.status === "0" ? "1" : "0";
});
},
cityChange(that){
let countyCode = 0
let cityname = ''
let newCountyArry = []
this.form.cityList.forEach((item,index)=>{
if(item.name == that){
countyCode = item.id
cityname = item.name
}
})
if(countyCode){
this.form.countyList = []
this.XIAN.forEach((item,index)=>{
if(item.code == countyCode && item.cityCountyName == cityname){
this.form.countyList.push(item)
}
})
}
},
provinceChange(that){
// 根据选中省,匹配市
let cityCode = 0
let newCityArry = []
this.form.provinceList.forEach((item,index)=>{
if(item.name == that){
cityCode = item.code
}
})
// console.log(cityCode)
if(cityCode){
this.form.cityList = []
this.CITY.forEach((item,index)=>{
if(item.code == cityCode){
this.form.cityList.push(item)
}
}) /* 市匹配成功*/
}
},
mapList(data){
let mapListJson = JSON.stringify(data);
console.log("mapListJson:"+mapListJson);
this.form.boundaryStr = mapListJson;
},
center(data){
this.form.longitude = data.lng;
this.form.latitude = data.lat;
},
/** 查询运营区列表 */
getList() {
this.loading = true;
listArea(this.queryParams).then(response => {
this.areaList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.mapopen=false
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
areaId: null,
areaName: null,
boundaryStr: null,
longitude: null,
latitude: null,
// parkingPoint: null,
createBy: null,
createTime: null,
status:'1',
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.areaId)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.getCityList();
listFee().then(response => {
this.ruleOptions = response.rows;
this.open = true;
this.title = "添加运营区";
this.key++;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const areaId = row.areaId || this.ids
getArea(areaId).then(response => {
this.form = response.data;
this.form.ruleIds=response.ruleIds
this.open = true;
this.title = "修改运营区";
this.key++;
listFee().then(response => {
this.ruleOptions = response.rows;
this.open = true;
this.title = "添加运营区";
this.key++;
});
// this.getCityList()
this.getCityList();
});
},
openmaps(row) {
this.reset();
const areaId = row.areaId || this.ids
getArea(areaId).then(response => {
this.form = response.data;
this.mapopen = true;
this.title = "修改运营区";
this.key++;
console.log('点击了');
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
const { cityList, countyList, provinceList, ...rest } = this.form;
// 将 rest 对象中的属性赋值给 data
let data = { ...rest };
// console.log(data, 'data without cityList, countyList, provinceList');
// console.log(this.form,'formformformformform');
if (this.form.areaId != null) {
updateArea(data).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.mapopen=false
this.getList();
});
} else {
addArea(data).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const areaIds = row.areaId || this.ids;
this.$modal.confirm('是否确认删除运营区编号为"' + areaIds + '"的数据项?').then(function() {
return delArea(areaIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/area/export', {
...this.queryParams
}, `area_${new Date().getTime()}.xlsx`)
}
}
};
</script>
<style>
.el-dialog:not(.is-fullscreen) {
margin-top: 2vh !important;
}
</style>