Commit 16ec0546 authored by lixy's avatar lixy

车辆价格管理、车辆信息管理

parent 8560d93a
......@@ -37,7 +37,7 @@
overflow: hidden;white-space: nowrap;text-overflow:ellipsis;word-wrap:break-word;word-break:break-all;
}
.ellipsis2{
// width: 200px;
// width: 200px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
......@@ -57,6 +57,12 @@
align-items: center;
}
.flex-aic-jce{
display: flex;
justify-content: flex-end;
align-items: center;
}
.flex-jcc-aic-cl{
display: flex;
align-items: center;
......
......@@ -15,7 +15,9 @@ export function getObj(id) {
});
}
/**
* 添加车辆
*/
export function addObj(obj) {
return fetch({
url: '/vehicle/vehicleInfo',
......@@ -162,3 +164,92 @@ export function vehicleCompanyAll(query) {
params: query
});
}
/**
* 获取车辆价格列表--分页
*/
export function vehicleCommonPriceInfo(query) {
return fetch({
url: 'vehicle/vehicleCommonPriceInfo/getAll',
method: 'get',
params: query
});
}
/**
* 获取车辆价格详情
*/
export function vehicleCommonPriceOne(query) {
return fetch({
url: 'vehicle/vehicleCommonPriceInfo/getOne',
method: 'get',
params: query
});
}
/**
* 保存--通用价格
*/
export function vehicleCommonPriceUpdate(query) {
return fetch({
url: 'vehicle/vehicleCommonPriceInfo/admin/addOrUpdate',
method: 'post',
data: query
});
}
/**
* 获取节假日列表、节假日编辑
*/
export function getAllFestivalPrice(query) {
return fetch({
url: 'vehicle/vehicleHolidayPriceInfo/getAll',
method: 'get',
params: query
});
}
/**
* 获取节假日详情
*/
export function getOneFestivalPrice(query) {
return fetch({
url: 'vehicle/vehicleHolidayPriceInfo/getOne',
method: 'get',
params: query
});
}
/**
* 添加、编辑节假日
*/
export function saveOrUpdateFestivalPrice(query) {
return fetch({
url: 'vehicle/vehicleHolidayPriceInfo/saveOrUpdate',
method: 'post',
data: query
});
}
/**
* 生产商
*/
export function allManufacturer(query) {
return fetch({
url: 'vehicle/vehicleInfo/getAllManufacturer',
method: 'get',
params: query
});
}
/**
* 删除节假日
*/
export function deleteFestival(query) {
return fetch({
url: 'vehicle/vehicleHolidayPriceInfo/deleteByVehicleId',
method: 'delete',
params: query
});
}
......@@ -366,6 +366,12 @@ export const asyncRouterMap = [{
name: '车辆信息管理',
authority: 'vehicleInfo'
},
{
path: 'vehiclePrice',
component: _import('vehicle/vehiclePrice'),
name: '车辆价格管理',
authority: 'vehiclePrice'
},
{
path: 'bookRecord',
component: _import('vehicle/bookRecord/index'),
......
<template>
<el-dialog title="节假日" :visible.sync="oneDialogVisible" @close="closePop" :modal="false" width="30%">
<el-form ref="form" :model="form" :rules="rules" label-width="140px">
<el-form-item label="节日名称" prop="festivalDay">
<el-input v-model="form.festivalDay" placeholder="请输入节日名称"></el-input>
</el-form-item>
<el-form-item label="开始时间" prop="startTime">
<el-date-picker v-model="form.startTime" type = "date" placeholder = "开始时间" value-format="yyyy-MM-dd" format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="结束时间" prop="endTime">
<el-date-picker v-model="form.endTime" type = "date" placeholder = "结束时间" value-format="yyyy-MM-dd" format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="租赁价格" prop="rentPrice">
<el-input type="number" v-model="form.rentPrice" placeholder="请输入租赁价格"></el-input>
</el-form-item>
<el-form-item label="免费天数" prop="rentFreeDay">
<el-input type="number" v-model="form.rentFreeDay" placeholder="请输入免费天数"></el-input>
</el-form-item>
<el-form-item label="应用对象" prop="applicationObj">
<el-select
style="width: 100%;"
class="filter-item"
v-model="form.applicationObj"
placeholder="请选择应用对象"
>
<el-option key="1" label="应用于当前车辆" :value="1"></el-option>
<el-option key="2" label="应用于同车型车辆" :value="2"></el-option>
<el-option key="3" label="应用于所有车辆" :value="3"></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="flex-aic-jcc" style="margin-top: 10px;">
<el-button plain @click="closePop">取消</el-button>
<el-button type="primary" v-if="!isClick" class="handle-ok" @click="handleOk('form')">确定</el-button>
<el-button type="primary" v-if="isClick" class="handle-ok" style="opacity: 0.4;" :disabled="true">确定</el-button>
</div>
</el-dialog>
</template>
<script type="javascript">
import {mapGetters} from 'vuex';
import ElFormItem from '../../../node_modules/element-ui/packages/form/src/form-item.vue'
import ElButton from "../../../node_modules/element-ui/packages/button/src/button.vue";
import { getAllFestivalPrice, saveOrUpdateFestivalPrice } from "api/vehicle/vehicleInfo";
import {objDeepCopy} from "../../utils";
export default {
props: ['festivalInfo', 'oneRow'],
components: {
ElButton,
ElFormItem,
},
data() {
return {
isClick: false, // 添加、编辑-确定按钮 是否已点击
oneDialogVisible: false,
form: {
festivalId: undefined,
startTime: undefined, // 开始时间
endTime: undefined, // 结束时间
festivalDay: undefined, // 节日名称
rentFreeDay: undefined, // 免费天数
rentPrice: undefined, // 租赁价格
vehicleId: undefined, // 车型id
applicationObj: 1, // 应用对象
},
rules: {
festivalDay: {
required: true,
message: '请输入节日名称',
trigger: 'blur'
},
rentFreeDay: {
required: true,
message: '请输入免费天数',
trigger: 'blur'
},
applicationObj: {
required: true,
message: '请选择应用对象',
trigger: 'change'
},
rentPrice: {
required: true,
message: '请输入租赁价格',
trigger: 'blur'
},
startTime: {
required: true,
message: '请选择开始时间',
trigger: 'blur'
},
endTime: {
required: true,
message: '请选择结束时间',
trigger: 'blur'
}
}
}
},
mounted() {
this.oneDialogVisible = true;
this.form = {
festivalId: undefined,
startTime: undefined, // 开始时间
endTime: undefined, // 结束时间
festivalDay: undefined, // 节日名称
rentFreeDay: undefined, // 免费天数
rentPrice: undefined, // 租赁价格
vehicleId: this.oneRow.vehicleId, // 车型id
applicationObj: 1, // 应用对象
}
if(this.festivalInfo.festivalId){
// 编辑
this.getOne()
}
},
computed: {
...mapGetters([
'elements'
])
},
methods: {
/**
* 获取节假日详情
*/
getOne(){
let _this = this
getAllFestivalPrice({festivalId: this.festivalInfo.festivalId, vehicleId: _this.oneRow.vehicleId} ).then(response => {debugger
if(response.status == 200) {
if( response.data.length > 0) {
this.form = {
festivalId: response.data[0].festivalId,
startTime: response.data[0].startTime,
endTime: response.data[0].endTime,
applicationObj: response.data[0].allModelUse ? 2 : response.data[0].allVehicleUse ? 3 : 1, // 周末免费天数扣除
festivalDay: response.data[0].festivalDay, // 节日名称
rentFreeDay: response.data[0].rentFreeDay, // 免费天数
rentPrice: response.data[0].rentPrice, // 租赁价格
vehicleId: _this.oneRow.vehicleId, // 车型id
}
}
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
},
/**
* 关闭弹窗
*/
closePop(){
this.oneDialogVisible = false
this.$emit('festivalModalEvent', false);
},
/**
* 确定
*/
handleOk(){
if(this.isClick) {
return
}
this.isClick = true
const set = this.$refs
set['form'].validate(valid => {
if (valid) {
let params = objDeepCopy(this.form)
params.allModelUse = params.applicationObj == 2 ? 1 : 0
params.allVehicleUse = params.applicationObj == 3 ? 1 : 0
params.applicationObj = undefined
saveOrUpdateFestivalPrice(params).then(response => {
if (response.status == 200) {
this.$notify({
title: '成功',
message: '保存成功',
type: 'success',
duration: 2000
})
this.$emit('festivalModalEvent', true);
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
} else {
this.isClick = false
}
})
},
}
}
</script>
<template>
<el-dialog title="节假日价格设置" :visible.sync="oneDialogVisible" @close="closePop" :modal="false" >
<div style="min-height: 500px">
<div class="filter-container flex-aic-jce" ref="filter-container">
<el-button class="filter-item" @click="handleCreate" plain><i class="el-icon-plus"></i>添加节假日</el-button>
</div>
<el-table :key="tableKey" :data="list" border fit highlight-current-row style="width: 100%;">
<el-table-column type="index" align="center" label="序号" width="65"></el-table-column>
<el-table-column align="center" label="节日名称">
<template slot-scope="scope">
<span>{{scope.row.festivalDay}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="开始时间" width="200">
<template slot-scope="scope">
<span>{{scope.row.startTime}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="结束时间" width="200">
<template slot-scope="scope">
<span>{{scope.row.endTime}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="租赁价格">
<template slot-scope="scope">
<span>{{scope.row.rentPrice}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="免费天数">
<template slot-scope="scope">
<span>{{scope.row.rentFreeDay}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button
size="small"
type="text"
@click="handleUpdate(scope.row)"
>编辑</el-button>
<el-button
size="small"
type="text"
@click="deleteHandler(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<!-- 添加、编辑节假日 -->
<festival-modal :festivalInfo="festivalInfo" v-on:festivalModalEvent="festivalModalEvent" v-if="festivalVisible" :oneRow="oneRow"></festival-modal>
</el-dialog>
</template>
<script type="javascript">
import {mapGetters} from 'vuex';
import ElFormItem from '../../../node_modules/element-ui/packages/form/src/form-item.vue'
import ElButton from "../../../node_modules/element-ui/packages/button/src/button.vue";
import {getAllFestivalPrice, deleteFestival} from "api/vehicle/vehicleInfo";
import festivalModal from "./festivalModal";
export default {
props: ['oneRow'],
components: {
festivalModal,
ElButton,
ElFormItem,
},
data() {
return {
oneDialogVisible: false,
showLoadingBody: false,
list: [],
total: null,
listLoading: true,
tableKey: 0,
festivalInfo: {}, // 当前操作项
festivalVisible: false, // 添加、编辑节假日弹窗
}
},
mounted() {
this.oneDialogVisible = true;
this.getList()
},
computed: {
...mapGetters([
'elements'
])
},
methods: {
/**
* 获取列表
*/
getList() {
getAllFestivalPrice({vehicleId: this.oneRow.vehicleId}).then(response => {
if (response.status == 200) {
this.listLoading = false
this.list = response.data
} else {
this.list = []
this.listLoading = false
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
},
/*
* 添加--节假日
*/
handleCreate(){
this.festivalVisible = true
this.festivalInfo = {}
},
/**
* 添加、编辑节假日 返回
*/
festivalModalEvent(e){
this.festivalVisible = false
if(e){
this.getList()
}
},
/**
* 编辑--节假日
*/
handleUpdate(row){
this.festivalVisible = true
this.festivalInfo = row
},
/**
* 删除
* */
deleteHandler(row) {
this.$confirm('确定删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let params = {
vehicleId: this.oneRow.vehicleId, // 车型id
festivalId: row.festivalId, // 节日id
}
deleteFestival(params).then(response => {
if (response.status == 200) {
this.$notify({
title: '成功',
message: '删除成功',
type: 'success',
duration: 2000
})
this.getList()
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
})
},
/**
* 关闭弹窗
*/
closePop(){
this.oneDialogVisible = false
this.$emit('festivalDialogEvent', false);
},
}
}
</script>
<template>
<el-dialog title="通用价格设置" :visible.sync="oneDialogVisible" @close="closePop" :modal="false" width="30%">
<el-form ref="form" :model="form" :rules="rules" label-width="140px">
<el-form-item label="租赁价格" prop="rentPrice">
<el-input type="number" v-model="form.rentPrice" placeholder="输入租赁价格"></el-input>
</el-form-item>
<el-form-item label="周末租赁价格" prop="rentWeekendPrice">
<el-input v-model="form.rentWeekendPrice" placeholder="请输入周末租赁价格" type="number"></el-input>
</el-form-item>
<el-form-item label="免费天数扣除" prop="rentFreeDay">
<el-input type="number" v-model="form.rentFreeDay" placeholder="请输入免费天数扣除"></el-input>
</el-form-item>
<el-form-item label="周末免费天数扣除" prop="rentWeekendDay">
<el-input type="number" v-model="form.rentWeekendDay" placeholder="请输入周末免费天数扣除"></el-input>
</el-form-item>
<el-form-item label="应用对象" prop="applicationObj">
<el-select
style="width: 100%;"
class="filter-item"
v-model="form.applicationObj"
placeholder="请选择应用对象"
>
<el-option key="1" label="应用于当前车辆" :value="1"></el-option>
<el-option key="2" label="应用于同车型车辆" :value="2"></el-option>
<el-option key="3" label="应用于所有车辆" :value="3"></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="flex-aic-jcc" style="margin-top: 10px;">
<el-button plain @click="closePop">取消</el-button>
<el-button type="primary" v-if="!isClick" class="handle-ok" @click="handleOk('form')">确定</el-button>
<el-button type="primary" v-if="isClick" class="handle-ok" style="opacity: 0.4;" :disabled="true">确定</el-button>
</div>
</el-dialog>
</template>
<script type="javascript">
import {mapGetters} from 'vuex';
import ElFormItem from '../../../node_modules/element-ui/packages/form/src/form-item.vue'
import ElButton from "../../../node_modules/element-ui/packages/button/src/button.vue";
import { vehicleCommonPriceOne, vehicleCommonPriceUpdate} from "api/vehicle/vehicleInfo";
import {objDeepCopy} from "../../utils";
export default {
props: ['title', 'oneRow'],
components: {
ElButton,
ElFormItem,
},
data() {
return {
oneDialogVisible: false,
form: {
// id: undefined,
applicationObj: 1, // 应用对象
vehicleId: undefined, // 车辆id
rentFreeDay: undefined, // 免费天数扣除
rentPrice: undefined, // 租赁价格
rentWeekendDay: undefined, // 周末免费天数扣除
rentWeekendPrice: undefined, // 周末租赁价格
},
isClick: false, // 添加、编辑-确定按钮 是否已点击
rules: {
rentFreeDay: {
required: true,
message: '请输入免费天数扣除',
trigger: 'blur'
},
applicationObj: {
required: true,
message: '请选择应用对象',
trigger: 'change'
},
rentPrice: {
required: true,
message: '请输入租赁价格',
trigger: 'blur'
},
rentWeekendDay: {
required: true,
message: '请选择周末免费天数扣除',
trigger: 'change'
},
rentWeekendPrice: {
required: true,
message: '请输入周末租赁价格',
trigger: 'blur'
}
},
}
},
mounted() {
this.oneDialogVisible = true;
this.form = {
// id: undefined,
applicationObj: 1, // 应用对象
vehicleId: undefined, // 车辆id
rentFreeDay: undefined, // 免费天数扣除
rentPrice: undefined, // 租赁价格
rentWeekendDay: undefined, // 周末免费天数扣除
rentWeekendPrice: undefined, // 周末租赁价格
},
this.getOneDetail() // 获取车辆价格详情
},
computed: {
...mapGetters([
'elements'
])
},
methods: {
/**
* 获取车辆价格详情
*/
getOneDetail(){
vehicleCommonPriceOne({id: this.oneRow.id} ).then(response => {
if(response.status == 200) {
this.form = {
// id: response.data.id,
vehicleId: response.data.vehicleId,
applicationObj: response.data.allModelUse ? 2 : response.data.allVehicleUse ? 3 : 1, // 周末免费天数扣除
rentFreeDay: response.data.rentFreeDay, // 免费天数扣除
rentPrice: response.data.rentPrice, // 租赁价格
rentWeekendDay: response.data.rentWeekendDay, // 周末免费天数扣除
rentWeekendPrice: response.data.rentWeekendPrice, // 周末租赁价格
}
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
},
/**
* 关闭弹窗
*/
closePop(){
this.oneDialogVisible = false
this.$emit('generalDialogEvent', false);
},
/**
* 确定
*/
handleOk(){
if(this.isClick) {
return
}
this.isClick = true
const set = this.$refs
set['form'].validate(valid => {
if (valid) {
let params = objDeepCopy(this.form)
params.allModelUse = params.applicationObj == 2 ? 1 : 0
params.allVehicleUse = params.applicationObj == 3 ? 1 : 0
params.applicationObj = undefined
vehicleCommonPriceUpdate(params).then(response => {
if (response.status == 200) {
this.$notify({
title: '成功',
message: '保存成功',
type: 'success',
duration: 2000
})
this.$emit('generalDialogEvent', true);
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
} else {
this.isClick = false
}
})
},
}
}
</script>
......@@ -2,79 +2,96 @@
<div class="app-container calendar-list-container" v-loading.body="showLoadingBody">
<div class="filter-container" ref="filter-container">
<el-form
:rules="rules4Query"
ref="queryForm"
:inline="inline"
:model="listQuery"
label-width="100px"
>
<el-form-item label="车牌号">
<el-input v-model="listQuery.numberPlate" placeholder="请输入车牌号"></el-input>
</el-form-item>
<el-form-item label="所属公司">
<el-select class="filter-item" v-model="listQuery.status" placeholder="请选择所属公司">
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(val,index) in allVehicleCompany "
:key="index"
:label="val.name"
:value="val.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="所属门店">
<el-select class="filter-item" v-model="listQuery.subordinateBranch" placeholder="请选择所属门店">
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(val,index) in allVehicleBranchCompany"
:key="index"
:label="val.name"
:value="val.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="停靠门店">
<el-select class="filter-item" v-model="listQuery.status" placeholder="请选择出行状态">
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(val,index) in getAllVehicleStatus() "
:key="index"
:label="val.val"
:value="val.code"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="车型" prop="modelId">
<el-autocomplete
class="inline-input"
v-model="vehicleArr"
:fetch-suggestions="queryVehicleModelSearch"
placeholder="请选择车型"
@select="handleVehicleModelSelect"
></el-autocomplete>
</el-form-item>
<el-form-item label="出行状态">
<el-select class="filter-item" v-model="listQuery.status" placeholder="请选择出行状态">
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(val,index) in getAllVehicleStatus()"
:key="index"
:label="val.val"
:value="val.code"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="上架状态">
<el-select class="filter-item" v-model="listQuery.status" placeholder="请选择上架状态">
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(val,index) in getAllVehicleStatus() "
:key="index"
:label="val.val"
:value="val.code"
></el-option>
</el-select>
</el-form-item>
<el-row>
<el-col :span="6">
<el-form-item label="车牌号">
<el-input v-model="listQuery.numberPlate" placeholder="请输入车牌号"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="所属公司">
<el-select class="filter-item" v-model="listQuery.companyId" placeholder="请选择所属公司" filterable>
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(val,index) in allVehicleCompany "
:key="index"
:label="val.name"
:value="val.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="所属门店">
<el-select class="filter-item" v-model="listQuery.subordinateBranch" placeholder="请选择所属门店" filterable>
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(val,index) in allVehicleBranchCompany"
:key="index"
:label="val.name"
:value="val.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="停靠门店">
<el-select class="filter-item" v-model="listQuery.parkBranchCompanyId" placeholder="请选择停靠门店" filterable>
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(val,index) in allVehicleBranchCompany"
:key="index"
:label="val.name"
:value="val.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="车型">
<el-select class="filter-item" v-model="listQuery.modelId" placeholder="请选择车型" filterable>
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(val,index) in allVehicleList"
:key="index"
:label="val.name"
:value="val.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="出行状态">
<el-select class="filter-item" v-model="listQuery.status" placeholder="请选择出行状态" filterable>
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(val,index) in getAllVehicleStatus()"
:key="index"
:label="val.val"
:value="val.code"
></el-option>
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="6">-->
<!-- <el-form-item label="上架状态">-->
<!-- <el-select class="filter-item" v-model="listQuery.status" placeholder="请选择上架状态">-->
<!-- <el-option :key="undefined" label="全部" :value="undefined"></el-option>-->
<!-- <el-option-->
<!-- v-for="(val,index) in getAllVehicleStatus() "-->
<!-- :key="index"-->
<!-- :label="val.val"-->
<!-- :value="val.code"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
</el-row>
</el-form>
<el-button
class="filter-item"
......@@ -84,9 +101,9 @@
@click="handleFilter('search')"
>搜索</el-button>
<el-button class="filter-item" type="primary" v-waves @click="reloadPage">清除搜索</el-button>
<el-button class="filter-item" v-if="vehicleInfo_btn_add" @click="handleCreate" plain><i class="el-icon-plus"></i>添加车辆</el-button>
<el-button class="filter-item" v-if="elements['vehicleInfo:btn_add']" @click="handleCreate" plain><i class="el-icon-plus"></i>添加车辆</el-button>
</div>
<el-table :key="tableKey" :data="list" border fit highlight-current-row style="width: 100%">
<el-table :key="tableKey" :data="list" border fit highlight-current-row style="width: 100%" v-loading="listLoading">
<el-table-column type="index" align="center" label="序号" width="65"></el-table-column>
<el-table-column align="center" label="车牌号">
<template slot-scope="scope">
......@@ -100,52 +117,52 @@
</el-table-column>
<el-table-column align="center" label="车型">
<template slot-scope="scope">
<span>{{scope.row.code}}</span>
<span>{{scope.row.vehicleType}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="所属门店">
<template slot-scope="scope">
<span>{{scope.row.code}}</span>
<span>{{scope.row.subBranchName}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="停靠门店">
<template slot-scope="scope">
<span>{{scope.row.code}}</span>
<span>{{scope.row.parkBranchCompanyName}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="所属公司">
<template slot-scope="scope">
<span>{{scope.row.code}}</span>
<span>{{scope.row.companyName}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="出行状态">
<template slot-scope="scope">
<span>{{scope.row.code}}</span>
<span>{{getVehicleStatus(scope.row.status)}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="车辆状态">
<template slot-scope="scope">
<span>{{getVehicleStatus(scope.row.status)}}</span>
</template>
</el-table-column>
<!-- <el-table-column align="center" label="车辆状态">-->
<!-- <template slot-scope="scope">-->
<!-- <span>上下架</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button
size="small"
class="el-button el-button--text el-button--small"
@click="handleUpdate(scope.row)"
>{{vehicleInfo_btn_edit?"编辑":"查看"}}</el-button>
<el-button
size="small"
class="el-button el-button--text el-button--small"
@click="handleUpdate(scope.row)"
>上架/下架</el-button>
>{{elements['vehicleInfo:btn_edit'] ? "编辑" : "查看"}}</el-button>
<!-- <el-button-->
<!-- size="small"-->
<!-- class="el-button el-button&#45;&#45;text el-button&#45;&#45;small"-->
<!-- @click="handleUpdate(scope.row)"-->
<!-- >上架/下架</el-button>-->
<el-button
size="small"
@click="deleteHandler(scope.row)"
class="el-button el-button--text el-button--small"
style="color:red;"
v-if="vehicleInfo_btn_ret"
v-if="elements['vehicleInfo:btn_ret']"
>删除</el-button>
</template>
</el-table-column>
......@@ -163,701 +180,31 @@
<!-- 添加、编辑车辆 -->
<one-vehicle v-on:oneDialogEvent="oneDialogEvent" :title="title" :oneRow="oneRow" v-if="oneDialogVisible"></one-vehicle>
<!-- 对话框相关html元素 -->
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" @close="closePop">
<el-form :model="form" :rules="rules" ref="form" label-width="100px">
<p style="border-bottom:1px solid #bfcbd9;padding-bottom:10px">基础信息</p>
<el-row>
<el-col :span="12">
<el-form-item label="车辆编码" prop="code">
<el-input v-model.number="form.code" placeholder="请输入车辆编码" type="number"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="车牌" prop="numberPlate">
<el-input v-model="form.numberPlate" placeholder="输入车牌"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="车架号" prop="vin">
<el-input v-model="form.vin" placeholder="请输入车架号"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发动机号" prop="engineNum">
<el-input v-model="form.engineNum" placeholder="请输入发动机号"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="所属人">
<el-select v-model.number="form.belongTo" placeholder="请选择所属人" style="width:100%">
<el-option
v-for="(val,index) in getAllBelong2Type() "
:key="index"
:label="val.val"
:value="val.code"
></el-option>
</el-select>
<el-input
v-if="typeof(form.belongTo) !== 'undefined' && form.belongTo != 1"
v-model="form.belongToName"
placeholder="请输入名称"
style="margin-top:10px"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="车辆状态" prop="status">
<el-select
class="filter-item"
v-model="form.status"
placeholder="请选择车辆状态"
style="width:100%"
>
<el-option
v-for="(val,index) in getAllVehicleStatus() "
:key="index"
:label="val.val"
:value="val.code"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="车辆品牌" prop="brand">
<el-select class="filter-item" v-model="form.brand" placeholder="请选择车辆品牌" style="width:100%">
<el-option :key="getUnkownBrandCode" label="未知" :value="getUnkownBrandCode"></el-option>
<el-option
v-for="item in getAllBranch() "
:key="item.code"
:label="item.val"
:value="item.code"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<!--<el-form-item label="车型">
<el-select v-model="form.modelId" filterable placeholder="请选择">
<el-option
v-for="item in allVehicleList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>-->
<el-form-item label="车型" prop="vehicleModelName">
<el-autocomplete
class="inline-input"
v-model="form.vehicleModelName"
:fetch-suggestions="queryVehicleModelSearch"
placeholder="请输入内容"
@select="handleVehicleModelSelectSubordinate"
style="width:100%"
></el-autocomplete>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="生产商" prop="manufacturer">
<el-input v-model="form.manufacturer" placeholder="请输入生产商"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年审日期" prop="manufacturer">
<el-date-picker
v-model="form.annualVerificationDate"
type="date"
placeholder="选择日期"
style="width:100%"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="新旧程度" prop="vehicleStatus">
<el-select
style="width: 100%;"
class="filter-item"
v-model="form.vehicleStatus"
placeholder="请选择新旧程度"
>
<el-option key="1" label="全新" :value="1"></el-option>
<el-option key="2" label="9成新" :value="2"></el-option>
<el-option key="3" label="8成新" :value="3"></el-option>
<el-option key="4" label="7成新" :value="4"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="车身状况" prop="vehicleBodyStatus">
<el-select
class="filter-item"
v-model="form.vehicleBodyStatus"
placeholder="请选择车身状况"
style="width:100%"
>
<el-option key="1" label="无剐蹭" :value="1"></el-option>
<el-option key="2" label="微瑕疵" :value="2"></el-option>
<el-option key="3" label="无瑕疵" :value="3"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="内饰" prop="vehicleInnerStatus">
<el-select
class="filter-item"
v-model="form.vehicleInnerStatus"
placeholder="请选择会员类型"
style="width:100%"
>
<el-option key="1" label="全新" :value="1"></el-option>
<el-option key="2" label="9成新" :value="2"></el-option>
<el-option key="3" label="8成新" :value="3"></el-option>
<el-option key="4" label="7成新" :value="4"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="免费天数" prop="memberUse">
<el-select
class="filter-item"
v-model="form.memberUse"
placeholder="请选择会员类型"
style="width:100%"
@change="handlerChange()"
>
<el-option key="1" label="所有会员可用" :value="1"></el-option>
<el-option key="2" label="付费会员可用" :value="2"></el-option>
<el-option key="3" label="兑换会员可用" :value="3"></el-option>
<el-option key="4" label="不可使用会员天数" :value="4"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<p style="border-bottom:1px solid #bfcbd9;padding-bottom:10px">用途、位置及里程</p>
<el-row>
<el-col :span="12">
<el-form-item label="所属分公司" prop="subordinateBranchName">
<el-autocomplete
class="inline-input"
v-model="form.subordinateBranchName"
:fetch-suggestions="querySearch"
placeholder="请输入内容"
@select="handleSelectSubordinate"
style="width:100%"
></el-autocomplete>
</el-form-item>
</el-col>
<el-col :span="12">
<!--<el-form-item label="停靠分公司" v-if="dialogStatus=='update'" prop="parkBranchCompanyName">-->
<!--<el-input v-model="form.parkBranchCompanyName" placeholder="停靠分公司" readonly disabled></el-input>-->
<!--</el-form-item>-->
<!--v-else-if="dialogStatus=='create'"-->
<el-form-item label="停靠分公司" prop="parkBranchCompanyName">
<el-autocomplete
class="inline-input"
v-model="form.parkBranchCompanyName"
:fetch-suggestions="querySearch"
placeholder="请输入内容"
@select="handleSelectPark"
style="width:100%"
></el-autocomplete>
</el-form-item>
</el-col>
</el-row>
<el-row>
<!--<el-col :span="12">-->
<!--<el-form-item label="目的地分公司" prop="expectDestinationBranchCompanyName">-->
<!--<el-autocomplete-->
<!--class="inline-input"-->
<!--v-model="form.expectDestinationBranchCompanyName"-->
<!--:fetch-suggestions="querySearch"-->
<!--placeholder="请输入内容"-->
<!--@select="handleSelectExport"-->
<!--&gt;</el-autocomplete>-->
<!--</el-form-item>-->
<!--</el-col>-->
<el-col :span="12">
<el-form-item label="用途" prop="useType">
<el-select class="filter-item" v-model="form.useType" placeholder="请选择用途" style="width:100%">
<el-option :key="undefined" label="无" :value="undefined"></el-option>
<el-option
v-for="item in getAllUseType() "
:key="item.code"
:label="item.val"
:value="item.code"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="公里数" prop="mileageLastUpdate">
<el-input v-model="form.mileageLastUpdate" placeholder="请输入公里数"></el-input>
</el-form-item>
</el-col>
</el-row>
<p style="border-bottom:1px solid #bfcbd9;padding-bottom:10px">车辆追踪设备</p>
<el-row>
<el-col :span="12">
<el-form-item label="终端号" prop="terminalNumber">
<el-input v-model="form.terminalNumber" placeholder="请输入终端号"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="SIM卡号" prop="simNumber">
<el-input v-model="form.simNumber" placeholder="请输入SIM卡号"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="通讯类型" prop="CommunicationType">
<el-select
class="filter-item"
v-model="form.communicationType"
placeholder="请选择通讯类型"
style="width:100%"
>
<el-option :key="undefined" label="无" :value="undefined"></el-option>
<!-- <el-option-->
<!-- v-for="item in getAllUseType() "-->
<!-- :key="item.code"-->
<!-- :label="item.val"-->
<!-- :value="item.code"-->
<!-- ></el-option>-->
</el-select>
</el-form-item>
</el-col>
</el-row>
<p style="border-bottom:1px solid #bfcbd9;padding-bottom:10px">保险信息</p>
<el-row>
<el-col :span="12">
<el-form-item label="商业险公司" prop="insuranceCompany">
<el-select
class="filter-item"
v-model="form.insuranceCompany"
placeholder="请选择商业险公司"
style="width:100%"
>
<el-option :key="undefined" label="无" :value="undefined"></el-option>
<el-option
v-for="(val, index) in getAllInsuranceCompany() "
:key="index"
:label="val.val"
:value="val.code"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="商业险单号" prop="insuranceNo">
<el-input v-model="form.insuranceNo" placeholder="请输入商业险单号"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="商业险日期" prop="insuranceEndDate">
<el-date-picker
v-model="form.insuranceEndDate"
type="date"
:editable="true"
format="yyyy-MM-dd"
placeholder="请选择商业险到期时间"
style="width:100%"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="交强险公司" prop="strongInsuranceCompany">
<el-select
class="filter-item"
v-model="form.strongInsuranceCompany"
placeholder="请选择交强险公司"
style="width:100%"
>
<el-option :key="undefined" label="无" :value="undefined"></el-option>
<el-option
v-for="(val, index) in getAllInsuranceCompany() "
:key="index"
:label="val.val"
:value="val.code"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="交强险单号" prop="strongInsuranceNo">
<el-input v-model.text="form.strongInsuranceNo" placeholder="请输入交强险单号"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="交强险日期" prop="strongInsuranceEndDate">
<el-date-picker
v-model="form.strongInsuranceEndDate"
type="date"
:editable="true"
format="yyyy-MM-dd"
placeholder="请选择交强险到期时间"
style="width:100%"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<!--<el-col :span="12">-->
<!--<el-form-item label="收车时间" prop="receiveTime">-->
<!--<el-date-picker-->
<!--v-model="form.receiveTime"-->
<!--type="date"-->
<!--:editable="true"-->
<!--format="yyyy-MM-dd HH:mm:dd"-->
<!--placeholder="请选择收车时间"-->
<!--&gt;</el-date-picker>-->
<!--</el-form-item>-->
<!--</el-col>-->
</el-row>
<p style="border-bottom:1px solid #bfcbd9;padding-bottom:10px">其他</p>
<el-row>
<el-col :span="24">
<el-form-item label="行驶证" prop="drivingLicensePath" :style="{display:'block'}">
<el-upload
class="avatar-uploader"
:action="BASE_API + '/api/universal/file/app/unauth/admin/upload'"
:show-file-list="false"
:headers="getHeaderWithToken"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload"
:style="{display:'inline-block'}"
>
<img
v-if="$utils.isString(form.drivingLicensePath) && !$utils.isEmpty(form.drivingLicensePath)"
:src="getDrivingLicenseUrl(form.drivingLicensePath)"
class="avatar"
:style="{display:'block'}"
/>
<i
v-else
class="el-icon-plus avatar-uploader-icon"
:style="{lineHeight:'350px'}"
style="position: relative;"
>
<br />
<span class="driving-title">行驶证正面</span>
</i>
</el-upload>
<el-upload
class="avatar-uploader"
:action="BASE_API + '/api/universal/file/app/unauth/admin/upload'"
:show-file-list="false"
:headers="getHeaderWithToken"
:on-success="handleAvatarSuccessF"
:before-upload="beforeAvatarUpload"
:style="{display:'inline-block'}"
>
<img
v-if="$utils.isString(form.drivingLicenseDuplicatePath) && !$utils.isEmpty(form.drivingLicenseDuplicatePath)"
:src="getDrivingLicenseUrl(form.drivingLicenseDuplicatePath)"
class="avatar"
:style="{display:'block'}"
/>
<i
v-else
class="el-icon-plus avatar-uploader-icon"
:style="{lineHeight:'350px'}"
style="position: relative;"
>
<br />
<span class="driving-title">行驶证副本</span>
</i>
</el-upload>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col>
<el-form-item label="保单pdf" prop="insurancePDF" :style="{display:'block'}">
<el-upload
ref="uploadPdf"
:action="BASE_API + '/api/universal/file/app/unauth/admin/upload'"
:show-file-list="false"
:headers="getHeaderWithToken"
:on-success="handleAvatarSuccessPDF"
:style="{display:'inline-block'}"
accept=".pdf"
>
<el-button size="small" plain>选择文件</el-button>
</el-upload>
<div v-for="(item, i) in pdfList" :key = i @click="downloadPDF(i)">
<span>{{item.name}}</span>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model="form.remark" placeholder="请输入备注信息"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel('form')">取消</el-button>
<el-button v-if="dialogStatus=='create'" type="primary" @click="create('form')">确定</el-button>
<el-button
type="primary"
@click="update('form')"
v-if="dialogStatus=='update'&&vehicleInfo_btn_edit"
>确 定</el-button>
</div>
</el-dialog>
<!--申请对话框相关html元素 -->
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogForm4ApplyVisible">
<el-form :model="form4Apply" :rules="rules4Apply" ref="form4Apply" label-width="120px">
<el-form-item label="预订日期范围" prop="bookDateRange4Apply">
<el-date-picker
v-model="bookDateRange4Apply"
type="daterange"
:editable="true"
format="yyyy-MM-dd"
placeholder="请输入预订日期范围"
:picker-options="pickerOptions4Apply"
></el-date-picker>
</el-form-item>
<el-form-item label="提车分公司" prop="liftCompany">
<el-autocomplete
class="inline-input"
v-model="form4Apply.state3"
:fetch-suggestions="querySearch"
placeholder="请输入内容"
@select="handleSelect3"
disabled
></el-autocomplete>
</el-form-item>
<el-form-item label="还车分公司" prop="retCompany">
<el-autocomplete
class="inline-input"
v-model="form4Apply.state4"
:fetch-suggestions="querySearch"
placeholder="请输入内容"
@select="handleSelect4"
></el-autocomplete>
</el-form-item>
<el-form-item label="使用人" prop="vehicleUsername">
<el-input v-model="form4Apply.vehicleUsername" placeholder="请输入使用人"></el-input>
</el-form-item>
<el-form-item label="联系方式" prop="vehicleUserPhone">
<el-input type="number" v-model="form4Apply.vehicleUserPhone" placeholder="请输入使用人联系方式"></el-input>
</el-form-item>
<el-form-item label="用途" prop="bookType">
<el-select class="filter-item" v-model="form4Apply.bookType" placeholder="请选择用途">
<el-option :key="undefined" label :value="undefined"></el-option>
<el-option
v-for="(val, index) in book_type_list "
:key="index"
:label="val.name"
:value="val.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="保养项目" prop="upkeepIds" v-if="form4Apply.bookType==6">
<el-checkbox-group v-model="form4Apply.upkeepIds">
<el-checkbox v-for="item in allUpkeepItems" :label="item.id" :key="item.id">{{item.name}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="目的地" prop="destination">
<el-input v-model="form4Apply.destination" placeholder="请输入目的地"></el-input>
</el-form-item>
<el-form-item
label="随行物品"
prop="selectedAccItem"
v-if="form4Apply.bookType!=3&&form4Apply.bookType!=6&&form4Apply.bookType!=8&&form4Apply.bookType!=10"
>
<el-input
type="textarea"
v-model="getSelectedAccItemStr"
:rows="5"
icon="menu"
@focus="handleAccItemSelect"
clearable
placeholder="请选择随行物品"
></el-input>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form4Apply.remark" placeholder="请输入备注信息"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel4Apply('form4Apply')">取 消</el-button>
<el-button type="primary" @click="apply('form4Apply')">确 定</el-button>
</div>
</el-dialog>
<el-dialog title="行驶证" :visible.sync="dialogForm4LicenceVisible">
<img :style="{width:'100%'}" :src="licenceSrcUrl" />
</el-dialog>
<book-info-viewer ref="bookInfoViewer"></book-info-viewer>
<acc-item-selector
v-on:select="accItemSelected"
:selectedAccItem="form4Apply.selectedAccItem"
v-on:clear="accItemClear"
ref="accItemSelector"
></acc-item-selector>
<!-- 收车信息弹窗 -->
<el-dialog title="收车" :visible.sync="arrivalDialogVisible">
<el-form :model="arrivalForm" :rules="rules" ref="form" label-width="90px">
<el-form-item label="车牌号">
<el-input v-model="arrivalForm.numberPlate" disabled></el-input>
</el-form-item>
<el-form-item label="出车时间" prop="arrivalDate">
<el-date-picker
v-model="arrivalForm.arrivalDate"
type="date"
disabled
format="yyyy-MM-dd"
placeholder="选择日期"
></el-date-picker>
</el-form-item>
<el-form-item label="收车人" prop="checkMan">
<el-input v-model="arrivalForm.recycleMan" placeholder="请输入收车人"></el-input>
</el-form-item>
<el-form-item label="收车人联系方式" prop="checkManTel">
<el-input v-model="arrivalForm.recycleManTel" placeholder="请输入收车人联系方式"></el-input>
</el-form-item>
<el-form-item label="公里数" prop="mileage">
<el-input v-model="arrivalForm.mileage" placeholder="请输入收车时公里数"></el-input>
</el-form-item>
<el-form-item label="还车分公司" prop="arrivalBranchCompanyId">
<el-autocomplete
class="inline-input"
v-model="arrivalForm.arrivalBranchCompanyName"
:fetch-suggestions="querySearch"
placeholder="请输入内容"
@select="handleSelectArrivalCompanyName"
></el-autocomplete>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelArrival">取 消</el-button>
<el-button type="primary" @click="arrivalVehicleHandler">确 定</el-button>
</div>
</el-dialog>
<!--出车弹框-->
<departureDialog
v-if="departureDialogVisible"
:departureRow="departureRow"
v-on:departureDialogEvent="departureDialogEvent"
></departureDialog>
<!-- 车辆保养弹窗 -->
<upkeepDialog
v-if="upkeepDialogVisible"
:upkeepRow="upkeepRow"
v-on:upkeepDialogEvent="upkeepDialogEvent"
></upkeepDialog>
</div>
</template>
<script type="javascript">
import axios from 'axios'
import upkeepDialog from '../../modal/upkeepDialogVisible' // 保养弹框
import departureDialog from '../../modal/departureDialog' // 出车弹框
import 'static/css/uploadImg.css' // 引入图片上传组件对话框
import {
page,
addObj,
getObj,
book,
getBookedInfoIn2Month,
getBookedInfo,
putObj,
delObj,
getSysRegionByIds,
checkCode,
downloadExcel,
checkVin,
checkEngineNum,
getArea,
exportExcel,
vehicleBranchCompanyAll,
vehicleCompanyAll
} from '../../../api/vehicle/vehicleInfo/'
import {
getAllVehicleModelList,
getAllVehicleList
} from '../../../api/vehicleType'
import { getSonRegionByCodes } from 'api/base_info/region/'
import {
getConstantByTypeAndCode,
getConstantListByType,
getAllInsuranceCompany,
getInsuranceCompany
} from 'api/base_info/constant/'
import {
departureVehicle,
arrivalVehicle,
upkeepVehicle,
upkeepEndVehicle
} from 'api/vehicle/active'
import { getAllUpkeepItem, getUpkeepAll } from 'api/vehicle/upkeep'
import { getSonRegionByCodes, getRegionByCodes } from 'api/base_info/region/'
import {
VEHICLE_CONSTANT_VEHICLE_BRAND,
VEHICLE_CONSTANT_VEHICLE_USE,
VEHICLE_CONSTANT_BRAND_CODE_UNKOWN,
BELONG_TO_TYPE_OWN,
VEHICLE_CONSTANT_USE_TYPE_UNKOWN,
VEHICLE_CONSTANT_STATUS_NORMAL
} from '../../../store/modules/baseInfo'
import { getAllCompany, getAll } from 'api/base_info/branch_company/'
import { formatDate } from 'utils/dateFormattor'
import {
toEast8Date,
deepCopyDate,
newEast8Date,
convertDate2Str
} from 'utils/dateUtils'
......@@ -865,15 +212,12 @@ import {
import rsCode from '../../../utils/rsCode'
import { mapGetters } from 'vuex'
import { getToken } from 'utils/auth'
import bookInfoViewer from '../bookInfoViewer'
import accItemSelector from '../accompanyingItem/accItemSelector.vue'
import Element1 from '../../admin/menu/components/element'
import ElRow from 'element-ui/packages/row/src/row'
import ElCol from 'element-ui/packages/col/src/col'
import { getAllZone } from 'api/base_info/constant/'
import ElFormItem from '../../../../node_modules/element-ui/packages/form/src/form-item.vue'
import oneVehicle from "./oneVehicle";
......@@ -896,9 +240,9 @@ export default {
oneDialogVisible: false, // 添加、编辑车辆弹框
title: '添加车辆',
oneRow: {}, // 当前操作项
allVehicleBranchCompany: [],// 所属门店列表
allVehicleCompany: [], // 所属公司列表
upkeepRow: {}, //保养数据
departureRow: {}, //出车数据
state1: '',
vehicleArr: '',
BASE_API: process.env.BASE_API,
......@@ -906,223 +250,24 @@ export default {
licenceSrcUrl: undefined,
showLoadingBody: false,
allVehicleList: [], //全部车型
pdfList:[],
form: {
insuranceEndDate: null, //商业险日期
vehicleModelName: '', //车型
subordinateBranchName: '', //所属分公司
subordinateBranch: undefined,
parkBranchCompanyName: '', //停靠分公司
parkBranchCompanyId: undefined,
subordinateBranchName: '', // 所属门店
subordinateBranch: undefined, // 所属门店id
parkBranchCompanyName: '', // 停靠门店
parkBranchCompanyId: undefined, // 停靠门店id
modelId: undefined, //车型id
status: undefined, //车辆状态
code: undefined, //车辆编码
numberPlate: undefined, //车牌
brand: undefined, //车辆品牌
useType: undefined, //用途
vin: undefined, //车架号
insuranceNo: undefined, //商业线单号
insuranceCompany: undefined, //商业险公司
insuranceDateRange4form: undefined,
annualVerificationDate: undefined,
maintenanceDate: undefined,
belongTo: undefined, //所属人
belongToName: undefined,
engineNum: undefined, //发动机号
manufacturer: undefined, //生产商
mileageLastUpdate: undefined, //公里数
// receiveTime: undefined,
drivingLicensePath: undefined,
remark: undefined,
terminalNumber: undefined, //终端号
simNumber: undefined, //sim卡
communicationType: undefined, //通讯类型
strongInsuranceCompany: undefined,
strongInsuranceEndDate: undefined,
strongInsuranceNo: undefined,
memberUse: undefined,
insurancePDF:undefined,
remark: undefined, // 备注
vehicleInnerStatus: 1, // 内饰:1、全新,2、9成新,3、8成新,4、7成新
vehicleStatus: 1, // 车辆状况:1、全新,2、9成新,3、8成新,4、7成新
vehicleBodyStatus: 1// 车身状况:1、无剐蹭,2、微瑕疵,3、无瑕疵
},
rules: {
subordinateBranchName: [
{
required: true,
message: '请选择所属分公司',
trigger: 'change'
}
],
vehicleModelName: [
{
required: true,
message: '请选择车型',
trigger: 'change'
}
],
parkBranchCompanyName: [
{
required: true,
message: '请选择停靠分公司',
trigger: 'change'
}
],
maintenanceMileage: [this.integerValidator()],
code: [
{
validator: (rule, value, callback) => {
if (
this.$utils.isUndefined(value) ||
this.$utils.isNull(value) ||
this.$utils.isEmpty('' + value)
) {
return callback(new Error('请输入车辆编码'))
}
if (!this.$utils.isInteger(value)) {
return callback(new Error('编码必须为整数'))
}
if (value < 1 || value > 9999999999) {
return callback(
new Error('编码合法范围:[1 - 9999999999]')
)
}
//检验code码
checkCode(value, this.form.id).then(response => {
// console.log(response.data);
if (response.data === true) {
return callback(
new Error(
'该车辆编码已经被占用,请重新输入'
)
)
} else {
callback()
}
})
},
trigger: 'blur',
required: true
}
],
vin: [
{
validator: (rule, value, callback) => {
//检验code码
if (
this.$utils.isUndefined(value) ||
this.$utils.isNull(value) ||
this.$utils.isEmpty('' + value)
) {
return callback(new Error('请输入车架号'))
}
if (value.length < 1 || value.length > 17) {
return callback(
new Error('车架号长度小于17 个字符')
)
}
checkVin(value, this.form.id).then(response => {
// console.log(response.data);
if (response.data === true) {
return callback(
new Error(
'该车架号已经被占用,请重新输入'
)
)
} else {
callback()
}
})
},
trigger: 'blur',
required: true
}
],
engineNum: [
{
validator: (rule, value, callback) => {
//检验code码
checkEngineNum(value, this.form.id).then(
response => {
// console.log(response.data);
if (response.data === true) {
return callback(
new Error(
'该发动机号已经被占用,请重新输入'
)
)
} else {
callback()
}
}
)
},
trigger: 'blur'
}
],
numberPlate: [
{
min: 0,
max: 20,
trigger: 'blur',
message: '车牌不能为空且长度小于20个字符',
required: true
}
],
remark: [
{
min: 0,
max: 2000,
message: '长度小于 2000 个字符',
trigger: 'blur'
}
],
vehicleInnerStatus: {
required: true,
message: '请选择内饰',
trigger: 'change'
},
vehicleStatus: {
required: true,
message: '请选择车辆状况',
trigger: 'change'
}, // 车辆状况:1、全新,2、9成新,3、8成新,4、7成新
vehicleBodyStatus: {
required: true,
message: '请选择车身状况',
trigger: 'change'
} // 车身状况:1、无剐蹭,2、微瑕疵,3、无瑕疵
},
book_type_list: [
{
name: '维修',
id: 3
},
{
name: '展览',
id: 4
},
{
name: '旅游',
id: 5
},
{
name: '保养',
id: 6
},
{
name: '禁用',
id: 8
},
{
name: '客户用车',
id: 9
},
{
name: '其他',
id: 10
}
],
form4Apply: {
bookStartDate: undefined,
bookEndDate: undefined,
......@@ -1144,210 +289,6 @@ export default {
pickerOptions4Apply: {
disabledDate: this.checkBookDate
},
rules4Query: {
vin: [
{
min: 0,
max: 200,
message: '长度小于 200 个字符',
trigger: 'blur'
}
],
subordinateBranch: [
{
validator: (rule, value, callback) => {
if (
(this.$utils.isString(
this.listQuery.bookedStartDate
) &&
this.listQuery.bookedStartDate !== '') ||
(this.$utils.isString(
this.listQuery.bookedEndDate
) &&
this.listQuery.bookedEndDate !== '') ||
(this.$utils.isString(
this.listQuery.notBookedStartDate
) &&
this.listQuery.notBookedStartDate !== '') ||
(this.$utils.isString(
this.listQuery.notBookedEndDate
) &&
this.listQuery.notBookedEndDate !== '')
) {
if (!this.listQuery.subordinateBranch) {
return callback(
new Error(
'若需按预定日期查询车辆,选择分公司'
)
)
}
}
callback()
},
trigger: 'blur'
}
],
notBookDateRange: [
{
validator: (rule, value, callback) => {
if (this.notBookDateRange) {
let startDate = toEast8Date(
this.listQuery.notBookedStartDate
)
let endDate = toEast8Date(
this.listQuery.notBookedEndDate
)
if (
this.$utils.isDate(startDate) &&
startDate.setMonth(
startDate.getMonth() + 2
) < endDate
) {
return callback(
new Error('日期范围不能超过2个月')
)
}
}
callback()
},
trigger: 'blur'
}
],
bookDateRange: [
{
validator: (rule, value, callback) => {
if (this.bookDateRange) {
let startDate = toEast8Date(
this.listQuery.bookedStartDate
)
let endDate = toEast8Date(
this.listQuery.bookedEndDate
)
if (
this.$utils.isDate(startDate) &&
startDate.setMonth(
startDate.getMonth() + 2
) < endDate
) {
return callback(
new Error('日期范围不能超过2个月')
)
}
}
callback()
},
trigger: 'blur'
}
]
},
rules4Apply: {
bookDateRange4Apply: [
{
validator: (rule, value, callback) => {
if (
!this.$utils.isArray(
this.bookDateRange4Apply
) ||
this.bookDateRange4Apply.length === 0
) {
return callback(new Error('请输入预定时间。'))
}
let [
oriStartDate,
ortEndDate
] = this.bookDateRange4Apply
if (
!this.$utils.isDate(oriStartDate) ||
!this.$utils.isDate(ortEndDate)
) {
return callback(new Error('请输入预定时间。'))
}
let [startDate, endDate] = [
deepCopyDate(oriStartDate),
deepCopyDate(ortEndDate)
]
if (
!this.$utils.isDate(oriStartDate) ||
!this.$utils.isDate(ortEndDate)
) {
return callback()
}
for (
let curDate = startDate;
curDate <= endDate;
curDate.setDate(curDate.getDate() + 1)
) {
if (this.checkBookDate(curDate)) {
return callback(
new Error(
'请选择从今天起两个月内,未预定的时间。'
)
)
}
}
callback()
},
required: true,
trigger: 'blur'
}
],
vehicleUsername: [
{
required: true,
message: '请输入使用人',
trigger: 'blur'
}
],
vehicleUserPhone: [
{
required: true,
message: '请输入使用人联系方式',
trigger: 'blur'
},
{
pattern: /^1[3456789]\d{9}$/,
message: '请输入正确的手机号'
}
],
bookType: [
{
required: true,
message: '请选择用途'
}
],
liftCompany: [
{
required: true,
message: '请选择提车分公司',
trigger: 'blur',
type: 'integer'
}
],
retCompany: [
{
required: true,
message: '请选择还车分公司',
trigger: 'blur',
type: 'integer'
}
],
destination: [
{
min: 0,
max: 200,
message: '长度小于 200 个字符',
trigger: 'blur'
}
],
remark: [
{
min: 0,
max: 2000,
message: '长度小于 2000 个字符',
trigger: 'blur'
}
]
},
selectArry: [],
selectVehicleModelArray: [],
list: [],
......@@ -1355,34 +296,11 @@ export default {
listLoading: true,
listQuery: {
page: 1,
limit: 20,
limit: 10,
subordinateBranch: undefined, // 所属门店
zoneId: undefined,
addrProvince: undefined, //省份编号
addrProvinceName: '', //省份名称
addrCity: undefined, //城市编号
addrCityName: '', //城市名称
addrTown: undefined,
vin: undefined,
insuranceCompany: undefined,
mileageRangeStart: undefined,
mileageRangeEnd: undefined,
insuranceDateRange: undefined,
mRange: undefined,
aVRange: undefined,
numberPlate: undefined,
status: undefined,
bookedStartDate: undefined,
bookedEndDate: undefined,
notBookedStartDate: undefined,
notBookedEndDate: undefined,
code: undefined,
modelId: undefined,
belongToName: undefined,
useType: undefined
companyName: undefined, // 所属公司
parkBranchCompanyId: undefined, // 停靠门店
modelId: undefined, // 车型
},
showMoreQueryFilter: false,
showMoreMoreCol: false,
......@@ -1428,309 +346,21 @@ export default {
arrivalBranchCompanyName: ''
},
upkeepDialogVisible: false,
allUpkeepItems: null,
allZoneArr: [], //全部片区
provinceRegions: [], //片区下省份数据
cityList: [],
vehicleInfo_btn_edit: false, //编辑
vehicleInfo_btn_add: false, //新增
vehicleInfo_btn_apply: false, //申请预定
vehicleInfo_btn_ride: false, //出车
vehicleInfo_btn_ret: false, //删除
cityArr: [], //城市编码
provinceArr: [], //省份编码
allVehicleBranchCompany: [],// 所属门店列表
allVehicleCompany: [], // 所属公司列表
}
},
created() {
this.getVehicleBranchCompanyAll() // 获取 所属门店 所有门店筛选列表
this.getVehicleCompanyAll() // 获取 所属公司 所有公司筛选条件
let t = this
axios.get('../../static/city.json').then(response => {
t.cityArr = response.data.RECORDS
})
axios.get('../../static/province.json').then(response => {
t.provinceArr = response.data.RECORDS
})
getAll().then(response => {
this.allCompaniesArr = response.data
let query = localStorage.getItem('vehicleInfo')
if (query != 'null' && query) {
let queryJson = JSON.parse(query)
if (queryJson.page) {
t.listQuery.page = queryJson.page
}
if (queryJson.limit) {
t.listQuery.limit = queryJson.limit
}
if (queryJson.addrCityName) {
t.listQuery.addrCityName = queryJson.addrCityName
}
if (queryJson.addrProvinceName) {
t.listQuery.addrProvinceName = queryJson.addrProvinceName
}
if (queryJson.addrCity) {
t.listQuery.addrCity = queryJson.addrCity
} else {
t.listQuery.addrCityName = ''
}
if (queryJson.addrProvince) {
t.listQuery.addrProvince = queryJson.addrProvince
} else {
t.listQuery.addrProvinceName = ''
}
// if (queryJson.vin) {
// t.listQuery.vin = queryJson.vin
// }
if (queryJson.insuranceCompany) {
t.listQuery.insuranceCompany = queryJson.insuranceCompany
}
if (queryJson.mileageRangeStart) {
t.listQuery.mileageRangeStart = queryJson.mileageRangeStart
}
if (queryJson.mileageRangeEnd) {
t.listQuery.mileageRangeEnd = queryJson.mileageRangeEnd
}
if (queryJson.insuranceDateRange) {
t.listQuery.insuranceDateRange =
queryJson.insuranceDateRange
}
if (queryJson.mRange) {
t.listQuery.mRange = queryJson.mRange
}
if (queryJson.aVRange) {
t.listQuery.aVRange = queryJson.aVRange
}
if (queryJson.subordinateBranch) {
t.listQuery.subordinateBranch = queryJson.subordinateBranch
}
if (queryJson.numberPlate) {
t.listQuery.numberPlate = queryJson.numberPlate
}
if (queryJson.status) {
t.listQuery.status = queryJson.status
}
if (queryJson.bookedStartDate) {
t.listQuery.bookedStartDate = queryJson.bookedStartDate
}
if (queryJson.bookedEndDate) {
t.listQuery.bookedEndDate = queryJson.bookedEndDate
}
if (queryJson.notBookedStartDate) {
t.listQuery.notBookedStartDate =
queryJson.notBookedStartDate
}
if (queryJson.notBookedEndDate) {
t.listQuery.notBookedEndDate = queryJson.notBookedEndDate
}
if (queryJson.code) {
t.listQuery.code = queryJson.code
}
if (queryJson.modelId) {
t.listQuery.modelId = queryJson.modelId
}
if (queryJson.subordinateBranch) {
t.allCompaniesArr.map(function(item) {
if (item.id == queryJson.subordinateBranch) {
t.state1 = item.name
}
})
}
if (queryJson.useType) {
t.listQuery.useType = queryJson.useType
}
if (queryJson.belongToName) {
t.listQuery.belongToName = queryJson.belongToName
} else {
t.listQuery.belongToName = undefined
}
}
t.getAllVehicleType() //获取全部车型
})
getUpkeepAll().then(response => {
this.allUpkeepItems = response.data
})
this.vehicleInfo_btn_edit = this.elements['vehicleInfo:btn_edit']
this.vehicleInfo_btn_add = this.elements['vehicleInfo:btn_add']
this.vehicleInfo_btn_apply = this.elements['vehicleInfo:btn_apply']
this.vehicleInfo_btn_ride = this.elements['vehicleInfo:btn_ride']
this.vehicleInfo_btn_ret = this.elements['vehicleInfo:btn_ret']
t.getList() // 获取车辆列表
t.getAllVehicleType() //获取全部车型
},
computed: {
...mapGetters(['elements', 'belong2Type', 'vehicleStatus']),
cityRegions() {
if (!this.$utils.isInteger(this.form.addrProvince)) {
return null
}
return getSonRegionByCodes(this.form.addrProvince)
},
townRegions() {
if (!this.$utils.isInteger(this.form.addrCity)) {
return null
}
return getSonRegionByCodes(this.form.addrCity)
},
getAllZoneList() {
let that = this
that.allZoneArr = getAllZone()
return that.allZoneArr
},
townRegions4Query() {
if (!this.$utils.isInteger(this.listQuery.addrCity)) {
return null
}
return getSonRegionByCodes(this.listQuery.addrCity)
},
getHeaderWithToken() {
return { Authorization: getToken() }
},
getSelectedAccItemStr() {
if (!this.$utils.isEmpty(this.form4Apply.selectedAccItem)) {
let rsStr = ''
for (let key in this.form4Apply.selectedAccItem) {
rsStr =
rsStr +
this.$refs.accItemSelector.getNameById(key) +
' : ' +
this.form4Apply.selectedAccItem[key] +
'\n'
}
return rsStr
}
return ''
},
getUnkownBrandCode: () => VEHICLE_CONSTANT_BRAND_CODE_UNKOWN,
getCurBookedInfo: function() {
if (
!this.$utils.isEmpty(this.curBookedInfo3Month) &&
this.curBookedInfo3Month.length > 0
) {
let rs = {}
for (let index in this.curBookedInfo3Month) {
rs[
this.curBookedInfo3Month[index].yearMonth
] = this.curBookedInfo3Month[index].bookedDate
}
return rs
}
return undefined
},
bookDateRange: {
get: function() {
let startDate = undefined
let endDate = undefined
if (
this.$utils.isString(this.listQuery.bookedStartDate) &&
this.listQuery.bookedStartDate !== ''
) {
startDate = toEast8Date(this.listQuery.bookedStartDate)
}
if (
this.$utils.isString(this.listQuery.bookedEndDate) &&
this.listQuery.bookedEndDate !== ''
) {
endDate = toEast8Date(this.listQuery.bookedEndDate)
}
return [startDate, endDate]
},
set: function([startDate, endDate]) {
if (this.$utils.isDate(startDate)) {
this.listQuery.bookedStartDate = formatDate(
startDate,
'yyyy-MM-dd'
)
} else {
this.listQuery.bookedStartDate = undefined
}
if (this.$utils.isDate(endDate)) {
this.listQuery.bookedEndDate = formatDate(
endDate,
'yyyy-MM-dd'
)
} else {
this.listQuery.bookedEndDate = undefined
}
}
},
notBookDateRange: {
get: function() {
let startDate = undefined
let endDate = undefined
if (
this.$utils.isString(this.listQuery.notBookedStartDate) &&
this.listQuery.notBookedStartDate !== ''
) {
startDate = toEast8Date(this.listQuery.notBookedStartDate)
}
if (
this.$utils.isString(this.listQuery.notBookedEndDate) &&
this.listQuery.notBookedEndDate !== ''
) {
endDate = toEast8Date(this.listQuery.notBookedEndDate)
}
return [startDate, endDate]
},
set: function([startDate, endDate]) {
if (this.$utils.isDate(startDate)) {
this.listQuery.notBookedStartDate = formatDate(
startDate,
'yyyy-MM-dd'
)
} else {
this.listQuery.notBookedStartDate = undefined
}
if (this.$utils.isDate(endDate)) {
this.listQuery.notBookedEndDate = formatDate(
endDate,
'yyyy-MM-dd'
)
} else {
this.listQuery.notBookedEndDate = undefined
}
}
},
bookDateRange4Apply: {
get: function() {
let startDate = undefined
let endDate = undefined
if (
this.$utils.isString(this.form4Apply.bookStartDate) &&
this.form4Apply.bookStartDate !== ''
) {
startDate = toEast8Date(this.form4Apply.bookStartDate)
}
if (
this.$utils.isString(this.form4Apply.bookEndDate) &&
this.form4Apply.bookEndDate !== ''
) {
endDate = toEast8Date(this.form4Apply.bookEndDate)
}
return [startDate, endDate]
},
set: function([startDate, endDate]) {
if (this.$utils.isDate(startDate)) {
this.form4Apply.bookStartDate = formatDate(
startDate,
'yyyy-MM-dd hh:mm:ss'
)
} else {
this.form4Apply.bookStartDate = undefined
}
if (this.$utils.isDate(endDate)) {
this.form4Apply.bookEndDate = formatDate(
endDate,
'yyyy-MM-dd hh:mm:ss'
)
} else {
this.form4Apply.bookEndDate = undefined
}
}
}
},
methods: {
/**
......@@ -1738,7 +368,7 @@ export default {
*/
getVehicleBranchCompanyAll(){
vehicleBranchCompanyAll({state: 1}).then(response => {
if(response.status == 200){debugger
if(response.status == 200){
this.allVehicleBranchCompany = response.data
} else {
this.$notify({
......@@ -1755,7 +385,7 @@ export default {
*/
getVehicleCompanyAll(){
vehicleCompanyAll({state: 1}).then(response => {
if(response.status == 200){debugger
if(response.status == 200){
this.allVehicleCompany = response.data
} else {
this.$notify({
......@@ -1817,62 +447,19 @@ export default {
listRs = response.data
}
this.allVehicleList = listRs
let query = localStorage.getItem('vehicleInfo')
if (query != 'null' && query) {
let queryJson = JSON.parse(query)
if (queryJson.modelId) {
t.allVehicleList.map(function(item) {
if (item.id == queryJson.modelId) {
t.vehicleArr = item.name
}
})
}
}
t.getList()
})
},
/**
* 重置
* */
reloadPage() {
this.state1 = ''
this.vehicleArr = ''
this.listQuery = {
page: 1,
limit: 20,
zoneId: undefined,
addrProvince: undefined,
addrCity: undefined,
addrProvinceName: '',
addrCityName: '',
addrTown: undefined,
vin: undefined,
insuranceCompany: undefined,
mileageRangeStart: undefined,
mileageRangeEnd: undefined,
insuranceDateRange: undefined,
mRange: undefined,
aVRange: undefined,
subordinateBranch: undefined,
numberPlate: undefined,
status: undefined,
bookedStartDate: undefined,
bookedEndDate: undefined,
notBookedStartDate: undefined,
notBookedEndDate: undefined,
code: undefined
}
if (this.listQuery) {
if (!this.listQuery.addrProvince) {
this.listQuery.addrProvinceName = ''
}
if (!this.listQuery.addrCity) {
this.listQuery.addrCityName = ''
}
localStorage.setItem(
'vehicleInfo',
JSON.stringify(this.listQuery)
)
page: 1,
limit: 20,
subordinateBranch: undefined, // 所属门店
companyName: undefined, // 所属公司
parkBranchCompanyId: undefined, // 停靠门店
modelId: undefined, // 车型
}
this.getList()
},
......@@ -2077,441 +664,16 @@ export default {
}
console.log(item)
},
/**
* 提车分公司
* */
handleSelect3(item) {
if (item.value == '全部') {
this.form4Apply.liftCompany = undefined
} else {
this.form4Apply.liftCompany = item.id
}
console.log(item)
},
/**
* 还车分公司
* */
handleSelect4(item) {
if (item.value == '全部') {
this.form4Apply.retCompany = undefined
} else {
this.form4Apply.retCompany = item.id
}
console.log(item)
},
/**
* 所属分公司
* */
handleSelectSubordinate(item) {
if (item.value == '全部') {
this.form.subordinateBranch = undefined
// this.form.subordinateBranchName = "";
} else {
this.form.subordinateBranch = item.id
// this.form.subordinateBranchName = item.name;
}
},
handleVehicleModelSelectSubordinate(item) {
if (item.value == '全部') {
this.form.modelId = undefined
} else {
this.form.modelId = item.id
}
},
/**
* 停靠分公司
* */
handleSelectPark(item) {
if (item.value == '全部') {
this.form.parkBranchCompanyId = undefined
this.form.parkBranchCompanyName = ''
} else {
this.form.parkBranchCompanyId = item.id
this.form.parkBranchCompanyName = item.name
}
},
handleSelect1(item) {
if (item.value == '全部') {
this.form.subordinateBranch = undefined
} else {
this.form.subordinateBranch = item.id
}
console.log(item)
},
/**
* 选择省份
*/
handleSelectProvince(item) {
if (item.value == '全部') {
this.listQuery.addrProvince = undefined
} else {
this.listQuery.addrProvince = item.code
}
},
/**
* 选择城市
*/
handleSelectCity(item) {
if (item.value == '全部') {
this.listQuery.addrCity = undefined
} else {
this.listQuery.addrCity = item.code
}
},
handleSelect(item) {
if (item.value == '全部') {
this.listQuery.subordinateBranch = undefined
} else {
this.listQuery.subordinateBranch = item.id
}
console.log(item)
},
handleVehicleModelSelect(item) {
if (item.value == '全部') {
this.listQuery.modelId = undefined
} else {
this.listQuery.modelId = item.id
}
},
/**
* 出车分公司
* */
handleSelectPark1(item) {
if (item.value == '全部') {
this.departureForm.departureBranchCompanyId = undefined
this.departureForm.departureBranchCompanyName = ''
} else {
this.departureForm.departureBranchCompanyId = item.id
this.departureForm.departureBranchCompanyName = item.name
}
},
/**
* 保养结束
* */
upkeepEndHandler(row) {
console.dir(row)
this.$confirm('此操作将结束保养, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
upkeepEndVehicle({
vehicleId: row.id
}).then(() => {
this.$notify({
title: '成功',
message: '操作成功',
type: 'success',
duration: 2000
})
this.getList()
})
})
},
/**
* 操作-保养-按钮
* */
upkeepHandler(row) {
this.upkeepRow = row
this.upkeepDialogVisible = true
},
handleBookRecord(row) {
this.$router.push({
path: '/vehicle/vehicleSchedulManage',
query: {
numberPlate: row.numberPlate
}
})
},
handleDepartureLog(row) {
this.$router.push({
path: '/vehicle/vehicleDepartureLog',
query: {
numberPlate: row.numberPlate
}
})
},
arrivalHandler(row) {
// open dialog
this.arrivalDialogVisible = true
this.clearArrivalForm()
this.arrivalForm.vehicleId = row.id
this.arrivalForm.mileage = row.mileage
this.arrivalForm.arrivalBranchCompanyId = row.subordinateBranch
let that = this
let selectArry = []
this.allCompaniesArr.map(function(item) {
item.value = item.name
selectArry.push(item)
})
selectArry.map(function(iitem) {
if (row.subordinateBranch == iitem.id) {
that.arrivalForm.arrivalBranchCompanyName = iitem.name
}
})
this.arrivalForm.numberPlate = row.numberPlate
this.arrivalForm.vehicleDate = Date()
},
cancelArrival() {
this.arrivalDialogVisible = false
this.clearArrivalForm()
},
/**
* 收车-确定
*/
arrivalVehicleHandler() {
if (
this.arrivalForm.arrivalBranchCompanyName == '' ||
this.arrivalForm.arrivalBranchCompanyName == '全部'
) {
this.arrivalForm.arrivalBranchCompanyId = undefined
}
arrivalVehicle(this.arrivalForm).then(response => {
if (response.code === rsCode.RS_CODE_SUC) {
this.arrivalDialogVisible = false
this.$notify({
title: '成功',
message: '收车成功',
type: 'success',
duration: 2000
})
this.getList()
} else {
this.$notify({
title: '失败',
message: rsCode.msg[response.code]
? rsCode.msg[response.code]
: '操作失败!',
type: 'error',
duration: 2000
})
}
})
},
clearArrivalForm() {
this.arrivalForm = {
vehicleId: null,
numberPlate: null,
arrivalDate: null,
recycleMan: null,
recycleManTel: null,
mileage: null,
arrivalBranchCompanyId: null,
arrivalBranchCompanyName: ''
}
},
/**
* 出车-按钮
* */
departureHandler(row) {
this.departureRow = row
this.departureDialogVisible = true
},
getAllBelong2Type: function() {
return this.belong2Type
},
getBelongToNameStr(row) {
if (!this.$utils.isInteger(row.belongTo)) {
return undefined
}
if (BELONG_TO_TYPE_OWN === row.belongTo) {
return this.belong2Type[row.belongTo].val
}
if (
this.$utils.isString(row.belongToName) &&
!this.$utils.isEmpty(row.belongToName)
) {
return row.belongToName
}
return undefined
},
showImgDialog(drivingLicensePath) {
this.licenceSrcUrl = this.getDrivingLicenseUrl(drivingLicensePath)
this.dialogForm4LicenceVisible = true
},
getDrivingLicenseUrl(drivingLicensePath) {
if (drivingLicensePath.indexOf('https') > -1) {
return drivingLicensePath
}else{
return (
process.env.BASE_API +
'/vehicle/vehicleInfo/download/drivingLicense?realFileRelPath=' +
encodeURI(drivingLicensePath)
)
}
},
handleAvatarSuccess(res, file) {
this.form.drivingLicensePath = res.data
this.showLoadingBody = false
},
handleAvatarSuccessF(res, file) {
this.form.drivingLicenseDuplicatePath = res.data
this.showLoadingBody = false
},
handleAvatarSuccessPDF(res, file) {
if (res.data) {
if(this.pdfList.length >= 0) {
var data = {
"id": this.pdfList.length + 1,
"name": "车辆保单" + (this.pdfList.length + 1),
"url":res.data
}
this.pdfList.push(data)
}
}
this.showLoadingBody = false
},
downloadPDF(i) {
var data = this.pdfList[i].url;
if(data) {
window.open(data, '_blank');
} else {
alert("车辆保单不存在")
}
},
beforeAvatarUpload(file) {
const isJPG =
file.type === 'image/jpeg' || file.type === 'image/gif'
file.type === 'image/jpeg' || file.type === 'image/gif' || file.type === 'image/pdf'
const isLt2M = file.size / 1024 / 1024 < 10
getVehicleStatus: function(code) {
// console.log(this.getAllVehicleStatus()[1].val);
// let demo = this.getAllVehicleStatus.filter(item => item)
// console.log(this.vehicleStatus[code]);
if (!isJPG) {
this.$message.error('上传图片只能是 JPG/GIF 格式!')
}
if (!isLt2M) {
this.$message.error('上传图片大小不能超过 10MB!')
}
// this.showLoadingBody = true
return isJPG && isLt2M
},
accItemSelected(selected) {
this.form4Apply.selectedAccItem = selected
},
accItemClear() {
this.form4Apply.selectedAccItem = undefined
},
handleAccItemSelect() {
this.$refs.accItemSelector.show()
},
getAllInsuranceCompany,
getInsuranceCompany,
integerValidator: function() {
return {
validator: (rule, value, callback) => {
if (
this.$utils.isUndefined(value) ||
this.$utils.isNull()
) {
return callback()
}
if (!this.$utils.isInteger(value)) {
return callback(new Error('必须为整数'))
}
if (value < 1 || value > 9999999999) {
return callback(
new Error('编码合法范围:[1 - 9999999999]')
)
}
callback()
},
trigger: 'blur'
}
},
fillDateRange2Object: function(
realBelong,
rangePropName,
startDatePropName,
endDatePropName
) {
if (
this.$utils.isEmpty(realBelong) ||
!this.$utils.isArray(realBelong[rangePropName])
) {
return realBelong
}
let belong = this.$utils.clone(realBelong, true)
let [startDate, endDate] = belong[rangePropName]
if (this.$utils.isDate(startDate)) {
belong[startDatePropName] = formatDate(
startDate,
'yyyy-MM-dd hh:mm:ss'
)
} else {
belong[startDatePropName] = undefined
}
if (this.$utils.isDate(endDate)) {
belong[endDatePropName] = formatDate(
endDate,
'yyyy-MM-dd hh:mm:ss'
)
} else {
belong[endDatePropName] = undefined
}
belong[rangePropName] = undefined
return belong
},
fillDates2Range: function(
belong,
rangePropName,
startDatePropName,
endDatePropName
) {
if (
this.$utils.isEmpty(belong) ||
!this.$utils.isString(belong[startDatePropName]) ||
belong[startDatePropName] === '' ||
!this.$utils.isString(belong[endDatePropName]) ||
belong[endDatePropName] === ''
) {
return
}
let [startDateStr, endDateStr] = [
belong[startDatePropName],
belong[endDatePropName]
]
belong[rangePropName] = [
toEast8Date(startDateStr),
toEast8Date(endDateStr)
]
},
changeDate4BookInfo: function(date) {
getBookedInfo(this.form4BookInfo.vehicle, date).then(response => {
this.curBookedInfo = response.data
})
},
checkBookDate: function(time) {
let nowDate = newEast8Date()
if (
this.$utils.toDateString(time, 'yyyy-MM-dd') <
this.$utils.toDateString(nowDate, 'yyyy-MM-dd')
) {
return true
}
if (nowDate.setMonth(nowDate.getMonth() + 2) < time) {
//预定范围两个月内
return true
}
let curYearMonth = formatDate(time, 'yyyy-MM')
if (
!this.$utils.isEmpty(this.getCurBookedInfo) &&
this.$utils.isInteger(this.getCurBookedInfo[curYearMonth])
) {
let int4BitMap = this.getCurBookedInfo[curYearMonth]
let dayOfMonth = time.getDate()
return (int4BitMap & (1 << (dayOfMonth - 1))) != 0
}
return false
},
checkIfRuning: vehicle =>
vehicle.status === VEHICLE_CONSTANT_STATUS_NORMAL,
getVehicleStatus: function(code) {
// console.log(this.getAllVehicleStatus()[1].val);
// let demo = this.getAllVehicleStatus.filter(item => item)
// console.log(this.vehicleStatus[code]);
return this.getAllVehicleStatus()[code].val
},
return this.getAllVehicleStatus()[code].val
},
/**
* 出行状态
*/
getAllVehicleStatus: function() {
return {
1: {
......@@ -2540,155 +702,42 @@ export default {
}
}
},
getBrand: function(code) {
if (
!this.$utils.isInteger(code) ||
code == VEHICLE_CONSTANT_BRAND_CODE_UNKOWN
) {
return '未知'
}
return getConstantByTypeAndCode(
VEHICLE_CONSTANT_VEHICLE_BRAND,
code
)
? getConstantByTypeAndCode(VEHICLE_CONSTANT_VEHICLE_BRAND, code)
.val
: '品牌不存在'
},
getAllBranch: () => {
return getConstantListByType(VEHICLE_CONSTANT_VEHICLE_BRAND)
},
getUseType: function(code) {
if (
!this.$utils.isInteger(code) ||
code == VEHICLE_CONSTANT_USE_TYPE_UNKOWN
) {
return '未知'
}
return getConstantByTypeAndCode(VEHICLE_CONSTANT_VEHICLE_USE, code)
? getConstantByTypeAndCode(VEHICLE_CONSTANT_VEHICLE_USE, code)
.val
: '用途未知'
},
getAllUseType: () => {
return getConstantListByType(VEHICLE_CONSTANT_VEHICLE_USE)
},
/**
* 获取车辆列表
*/
getList() {
// this.listQuery.vin = null
this.listLoading = true
let listQueryTemp = this.fillDateRange2Object(
this.listQuery,
'mRange',
'mRangeDateStart',
'mRangeDateEnd'
)
listQueryTemp = this.fillDateRange2Object(
listQueryTemp,
'aVRange',
'aVRangeDateStart',
'aVRangeDateEnd'
)
listQueryTemp = this.fillDateRange2Object(
listQueryTemp,
'insuranceDateRange',
'insuranceDateRangeStart',
'insuranceDateRangeEnd'
)
if (!this.state1) {
listQueryTemp.subordinateBranch = undefined
}
if (!this.vehicleArr) {
listQueryTemp.modelId = undefined
}
if (!this.listQuery.belongToName) {
this.listQuery.belongToName = undefined
}
page(listQueryTemp).then(response => {
page(this.listQuery).then(response => {
this.listLoading = false
if (response.code == 1) {
let totalCountRs = undefined
let listRs = undefined
// if (
// !this.$utils.isEmpty(response.data.data) &&
// this.$utils.isInteger(response.data.totalCount)
// ) {
// listRs = response.data.data
// totalCountRs = response.data.totalCount
// listRs.map(function(item) {
// item.visible2 = false
// })
// }
this.listLoading = false
console.log(response.data.data)
this.list = response.data.data
this.total = response.data.totalCount
} else {
this.list = []
this.listLoading = false
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
},
getAddrStr(branchCompany) {
let regions = getRegionByCodes([
branchCompany.addrProvince,
branchCompany.addrCity,
branchCompany.addrTown
])
return (
regions[0].name +
' ' +
regions[1].name +
' ' +
regions[2].name +
' '
)
},
/**
* 搜索
*/
handleFilter(p) {
let t = this
this.listQuery.page = 1
this.$refs.queryForm.validate(valid => {
if (valid) {
if (t.listQuery) {
localStorage.setItem(
'vehicleInfo',
JSON.stringify(this.listQuery)
)
}
//搜索
if (p == 'search') {
this.getList()
}
//下载
if (p == 'download') {
this.download()
}
if (p == 'export') {
this.exportExcelInfo();
}
} else {
return false
}
})
this.getList()
},
handleSizeChange(val) {
this.listQuery.limit = val
if (this.listQuery) {
localStorage.setItem(
'vehicleInfo',
JSON.stringify(this.listQuery)
)
}
this.getList()
},
handleCurrentChange(val) {
this.listQuery.page = val
if (this.listQuery) {
localStorage.setItem(
'vehicleInfo',
JSON.stringify(this.listQuery)
)
}
this.getList()
},
/**
......@@ -2706,34 +755,6 @@ export default {
this.oneRow = row
this.oneDialogVisible = true
},
/**
* 操作-申请预定
* */
handleApply(row) {
this.resetTemp4Apply()
let that = this
let selectArry = []
this.allCompaniesArr.map(function(item) {
item.value = item.name
selectArry.push(item)
})
this.form4Apply.liftCompany = row.parkBranchCompanyId
this.form4Apply.vehicleId = row.id
selectArry.map(function(iitem) {
if (row.parkBranchCompanyId == iitem.id) {
that.form4Apply.state3 = iitem.name
}
})
this.form4Apply.vehicle = row.id
getBookedInfoIn2Month(row.id).then(response => {
this.curBookedInfo3Month = response.data
this.dialogStatus = 'apply'
this.dialogForm4ApplyVisible = true
})
},
handleBookInfo(row) {
this.$refs.bookInfoViewer.handleBookInfo(row.id)
},
create(formName) {
const set = this.$refs
set[formName].validate(valid => {
......
<template>
<el-dialog :title="title" :visible.sync="oneDialogVisible" @close="closePop" :modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="140px" style="margin-top: -30px;">
<el-form ref="form" :model="form" :rules="rules" label-width="140px" style="margin-top: -30px;max-height: 500px;overflow: auto;">
<p style="padding: 10px;background: #f5f5f5;">基础信息</p>
<el-form-item label="状态" prop="state">
<el-radio-group v-model="form.state">
<el-radio :label="1">上架</el-radio>
<el-radio :label="2">下架</el-radio>
</el-radio-group>
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="车牌号码" prop="numberPlate">
......@@ -46,17 +40,14 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="停靠门店" prop="stopName">
<el-select
style="width: 100%;"
class="filter-item"
v-model="form.stopName"
placeholder="请选择停靠门店"
>
<el-option key="1" label="全新" :value="1"></el-option>
<el-option key="2" label="9成新" :value="2"></el-option>
<el-option key="3" label="8成新" :value="3"></el-option>
<el-option key="4" label="7成新" :value="4"></el-option>
<el-form-item label="停靠门店" prop="parkBranchCompanyId">
<el-select class="filter-item" v-model="form.parkBranchCompanyId" placeholder="请选择停靠门店" filterable>
<el-option
v-for="(val,index) in allVehicleBranchCompany"
:key="index"
:label="val.name"
:value="val.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
......@@ -113,30 +104,252 @@
<p style="padding: 10px;background: #f5f5f5;">车辆归属</p>
<el-row>
<el-col :span="12">
<el-form-item label="所属门店" prop="vehicleStatus">
<el-form-item label="所属门店" prop="subordinateBranch">
<el-select class="filter-item" v-model="form.subordinateBranch" placeholder="请选择所属门店" filterable>
<el-option
v-for="(val,index) in allVehicleBranchCompany"
:key="index"
:label="val.name"
:value="val.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="托管人">
<el-input v-model="form.belongToName" placeholder="请输入托管人" ></el-input>
</el-form-item>
</el-col>
</el-row>
<p style="padding: 10px;background: #f5f5f5;">品牌、车型</p>
<el-row>
<el-col :span="12">
<el-form-item label="车辆品牌" prop="brand">
<el-select class="filter-item" v-model="form.brand" placeholder="请选择车辆品牌" style="width:100%">
<el-option :key="getUnkownBrandCode" label="未知" :value="getUnkownBrandCode"></el-option>
<el-option
v-for="item in getAllBranch() "
:key="item.code"
:label="item.val"
:value="item.code"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="车型" prop="modelId">
<el-select class="filter-item" v-model="form.modelId" placeholder="请选择车型" filterable>
<el-option
v-for="(val,index) in allVehicleList"
:key="index"
:label="val.name"
:value="val.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="生产商">
<el-select class="filter-item" v-model="form.manufacturer" placeholder="请选择生产商" filterable>
<el-option
v-for="(val,index) in allManufacturer"
:key="index"
:label="val"
:value="val"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<p style="padding: 10px;background: #f5f5f5;">车辆信息</p>
<el-row>
<el-col :span="12">
<el-form-item label="车架号">
<el-input v-model="form.vin" placeholder="请输入车架号" ></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发动机号">
<el-input v-model="form.engineNum" placeholder="请输入发动机号" ></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="上牌日期">
<el-date-picker v-model="form.vehicleRegisterDate" type = "datetime" placeholder = "上牌日期" value-format=" yyyy-MM-dd HH:mm" format="yyyy-MM-dd HH:mm"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年审日期">
<el-date-picker
v-model="form.annualVerificationDate"
type="date"
placeholder="选择日期"
style="width:100%"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="行驶证" :style="{display:'block'}">
<el-upload
class="avatar-uploader"
:action="BASE_API + '/api/universal/file/app/unauth/admin/upload'"
:show-file-list="false"
:headers="getHeaderWithToken"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload"
:style="{display:'inline-block'}"
>
<img
v-if="$utils.isString(form.drivingLicensePath) && !$utils.isEmpty(form.drivingLicensePath)"
:src="getDrivingLicenseUrl(form.drivingLicensePath)"
class="avatar"
:style="{display:'block'}"
/>
<i
v-else
class="el-icon-plus avatar-uploader-icon"
:style="{lineHeight:'350px'}"
style="position: relative;"
>
<br />
<span class="driving-title">行驶证正面</span>
</i>
</el-upload>
<el-upload
class="avatar-uploader"
:action="BASE_API + '/api/universal/file/app/unauth/admin/upload'"
:show-file-list="false"
:headers="getHeaderWithToken"
:on-success="handleAvatarSuccessF"
:before-upload="beforeAvatarUpload"
:style="{display:'inline-block'}"
>
<img
v-if="$utils.isString(form.drivingLicenseDuplicatePath) && !$utils.isEmpty(form.drivingLicenseDuplicatePath)"
:src="getDrivingLicenseUrl(form.drivingLicenseDuplicatePath)"
class="avatar"
:style="{display:'block'}"
/>
<i
v-else
class="el-icon-plus avatar-uploader-icon"
:style="{lineHeight:'350px'}"
style="position: relative;"
>
<br />
<span class="driving-title">行驶证副本</span>
</i>
</el-upload>
</el-form-item>
<p style="padding: 10px;background: #f5f5f5;">保险信息</p>
<el-row>
<el-col :span="12">
<el-form-item label="商业险公司">
<el-select
style="width: 100%;"
class="filter-item"
v-model="form.belongName"
placeholder="请选择所属门店"
v-model="form.insuranceCompany"
placeholder="请选择商业险公司"
style="width:100%"
>
<el-option key="1" label="全新" :value="1"></el-option>
<el-option key="2" label="9成新" :value="2"></el-option>
<el-option key="3" label="8成新" :value="3"></el-option>
<el-option key="4" label="7成新" :value="4"></el-option>
<el-option :key="undefined" label="无" :value="undefined"></el-option>
<el-option
v-for="(val, index) in getAllInsuranceCompany() "
:key="index"
:label="val.val"
:value="val.code"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="托管人">
<el-input v-model="form.belongToName" placeholder="请输入托管人" ></el-input>
<el-form-item label="商业险单号">
<el-input v-model="form.insuranceNo" placeholder="请输入商业险单号"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="商业险日期">
<el-date-picker
v-model="form.insuranceEndDate"
type="date"
:editable="true"
format="yyyy-MM-dd"
placeholder="请选择商业险到期时间"
style="width:100%"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="交强险公司">
<el-select
class="filter-item"
v-model="form.strongInsuranceCompany"
placeholder="请选择交强险公司"
style="width:100%"
>
<el-option :key="undefined" label="无" :value="undefined"></el-option>
<el-option
v-for="(val, index) in getAllInsuranceCompany() "
:key="index"
:label="val.val"
:value="val.code"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="交强险单号">
<el-input v-model.text="form.strongInsuranceNo" placeholder="请输入交强险单号"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="交强险日期">
<el-date-picker
v-model="form.strongInsuranceEndDate"
type="date"
:editable="true"
format="yyyy-MM-dd"
placeholder="请选择交强险到期时间"
style="width:100%"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col>
<el-form-item label="保单pdf" :style="{display:'block'}">
<el-upload
ref="uploadPdf"
:action="BASE_API + '/api/universal/file/app/unauth/admin/upload'"
:show-file-list="false"
:headers="getHeaderWithToken"
:on-success="handleAvatarSuccessPDF"
:style="{display:'inline-block'}"
accept=".pdf"
>
<el-button size="small" plain>选择文件</el-button>
</el-upload>
<div v-for="(item, i) in pdfList" :key = i @click="downloadPDF(i)">
<span>{{item.name}}</span>
</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="flex-aic-jcc" style="margin-top: 10px;">
<el-button plain @click="closePop">取消</el-button>
<el-button type="primary" class="handle-ok" @click="handleOk('form')">确定</el-button>
<el-button type="primary" v-if="!isClick" class="handle-ok" @click="handleOk('form')">确定</el-button>
<el-button type="primary" v-if="isClick" class="handle-ok" style="opacity: 0.4;" :disabled="true">确定</el-button>
</div>
</el-dialog>
</template>
......@@ -147,7 +360,18 @@
import ElCol from 'element-ui/packages/col/src/col'
import ElRadio from "../../../../node_modules/element-ui/packages/radio/src/radio.vue";
import ElButton from "../../../../node_modules/element-ui/packages/button/src/button.vue";
import {getObj} from "../../../api/vehicle/vehicleInfo";
import {addObj, getObj, putObj, vehicleBranchCompanyAll, allManufacturer} from "../../../api/vehicle/vehicleInfo";
import { getToken } from 'utils/auth'
import {
VEHICLE_CONSTANT_VEHICLE_BRAND,
VEHICLE_CONSTANT_BRAND_CODE_UNKOWN,
} from '../../../store/modules/baseInfo'
import {
getConstantListByType,
getAllInsuranceCompany,
getInsuranceCompany
} from 'api/base_info/constant/'
import {getAllVehicleList} from "../../../api/vehicleType";
export default {
props: ['title', 'oneRow'],
components: {
......@@ -159,20 +383,41 @@
},
data() {
return {
BASE_API: process.env.BASE_API,
oneDialogVisible: false,
allVehicleBranchCompany: [], // 全部所属门店列表
allVehicleList: [], //全部车型
allManufacturer: [], // 生产商列表
isClick: false, // 添加、编辑-确定按钮 是否已点击
form: {
state: 1, // 1、上架 2、下架
// state: 1, // 1、上架 2、下架
id: undefined, // 车辆id
numberPlate: undefined, // 车牌号码
code: undefined, // 车辆编号
status: undefined, // 出行状态
mileageLastUpdate: undefined, // 公里数
stopName: undefined, // 停靠门店
belongName: undefined, // 所属门店
parkBranchCompanyId: undefined, // 停靠门店
subordinateBranch: undefined, // 所属门店
belongToName: undefined, // 托管人
vehicleInnerStatus: undefined, // 内饰:1、全新,2、9成新,3、8成新,4、7成新
vehicleStatus: undefined, // 新旧程度:1、全新,2、9成新,3、8成新,4、7成新
vehicleBodyStatus: undefined, // 车身状况:1、无剐蹭,2、微瑕疵,3、无瑕疵
remark: undefined, // 备注
brand: undefined, // 车辆品牌
modelId: undefined, // 车型id
manufacturer: undefined, // 生产商
vin: undefined, //车架号
engineNum: undefined, //发动机号
vehicleRegisterDate: undefined, // 上牌日期
annualVerificationDate: undefined, // 年审日期
drivingLicensePath: undefined, // 行驶证正面
drivingLicenseDuplicatePath: undefined, // 行驶证副本
insuranceCompany: undefined, // 商业险公司
insuranceNo: undefined, // 商业险单号
insuranceEndDate: undefined, // 商业险日期
strongInsuranceCompany: undefined, // 交强险公司
strongInsuranceNo: undefined, // 交强险单号
strongInsuranceEndDate: undefined, // 交强险日期
},
rules: {
numberPlate: {
......@@ -186,12 +431,12 @@
message: '请选择出行状态',
trigger: 'change'
},
state: {
required: true,
message: '请选择上下架状态',
trigger: 'change'
},
stopName: {
// state: {
// required: true,
// message: '请选择上下架状态',
// trigger: 'change'
// },
parkBranchCompanyId: {
required: true,
message: '请选择停靠门店',
trigger: 'change'
......@@ -211,12 +456,23 @@
message: '请选择内饰',
trigger: 'change'
},
belongName: {
subordinateBranch: {
required: true,
message: '请选择所属门店',
trigger: 'change'
}
},
brand: {
required: true,
message: '请选择车辆品牌',
trigger: 'change'
},
modelId: {
required: true,
message: '请选择车型',
trigger: 'change'
},
},
pdfList:[], // 保单列表
}
},
mounted() {
......@@ -226,23 +482,196 @@
// 编辑
this.getVehicleDetail() // 获取车辆详情
}
this.getAllManufacturer()// 获取全部生产商
this.getAllVehicleType() // 获取全部车型
this.getVehicleBranchCompanyAll() // 获取所有门店
},
computed: {
...mapGetters([
'elements'
])
]),
getHeaderWithToken() {
return { Authorization: getToken() }
},
getUnkownBrandCode: () => VEHICLE_CONSTANT_BRAND_CODE_UNKOWN, // 车辆品牌
},
methods: {
/**
* 获取全部供应商列表
*/
getAllManufacturer(){
allManufacturer().then(response => {
if(response.status == 200){
this.allManufacturer = response.data
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
},
/**
* 获取全部车型
* */
getAllVehicleType() {
getAllVehicleList().then(response => {
if(response.status == 200){
let listRs = undefined
if (!this.$utils.isEmpty(response.data)) {
listRs = response.data
}
this.allVehicleList = listRs
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
},
getAllInsuranceCompany,
getInsuranceCompany,
/**
* 获取所有门店
*/
getVehicleBranchCompanyAll(){
vehicleBranchCompanyAll({state: 1}).then(response => {
if(response.status == 200){
this.allVehicleBranchCompany = response.data
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
},
/**
* 获取车辆全部品牌
*/
getAllBranch: () => {
return getConstantListByType(VEHICLE_CONSTANT_VEHICLE_BRAND)
},
/**
* 获取车辆详情
*/
getVehicleDetail(){
getObj(this.oneRow.id).then(response => {
this.$utils.objectEach(response.data, (item, key) => {
this.form[key] = item
})
if(response.status == 200){
this.$utils.objectEach(response.data, (item, key) => {
this.form[key] = item
})
// this.form = {
// id: response.data.id, // 车辆id
// numberPlate: response.data.numberPlate, // 车牌号码
// code: response.data.code, // 车辆编号
// status: response.data.status, // 出行状态
// mileageLastUpdate: response.data.maintenanceMileage, // 公里数
// parkBranchCompanyId: response.data.parkBranchCompanyId, // 停靠门店
// subordinateBranch: response.data.subordinateBranch, // 所属门店
// belongToName: response.data.belongToName, // 托管人
// vehicleInnerStatus: response.data.vehicleInnerStatus, // 内饰:1、全新,2、9成新,3、8成新,4、7成新
// vehicleStatus: response.data.vehicleStatus, // 新旧程度:1、全新,2、9成新,3、8成新,4、7成新
// vehicleBodyStatus: response.data.vehicleBodyStatus, // 车身状况:1、无剐蹭,2、微瑕疵,3、无瑕疵
// remark: response.data.remark, // 备注
// }
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
},
beforeAvatarUpload(file) {
const isJPG =
file.type === 'image/jpeg' || file.type === 'image/gif'
file.type === 'image/jpeg' || file.type === 'image/gif' || file.type === 'image/pdf'
const isLt2M = file.size / 1024 / 1024 < 10
if (!isJPG) {
this.$message.error('上传图片只能是 JPG/GIF 格式!')
}
if (!isLt2M) {
this.$message.error('上传图片大小不能超过 10MB!')
}
// this.showLoadingBody = true
return isJPG && isLt2M
},
/**
* 行驶证--正面
*/
handleAvatarSuccess(res, file) {
this.form.drivingLicensePath = res.data
this.showLoadingBody = false
},
/**
* 行驶证--副本
*/
handleAvatarSuccessF(res, file) {
this.form.drivingLicenseDuplicatePath = res.data
this.showLoadingBody = false
},
/**
* PDF保单上传
*/
handleAvatarSuccessPDF(res, file) {
if (res.data) {
if(this.pdfList.length >= 0) {
var data = {
"id": this.pdfList.length + 1,
"name": "车辆保单" + (this.pdfList.length + 1),
"url":res.data
}
this.pdfList.push(data)
}
}
this.showLoadingBody = false
},
showImgDialog(drivingLicensePath) {
this.licenceSrcUrl = this.getDrivingLicenseUrl(drivingLicensePath)
this.dialogForm4LicenceVisible = true
},
/**
* 行驶证--src
*/
getDrivingLicenseUrl(drivingLicensePath) {
if (drivingLicensePath.indexOf('https') > -1) {
return drivingLicensePath
}else{
return (
process.env.BASE_API +
'/vehicle/vehicleInfo/download/drivingLicense?realFileRelPath=' +
encodeURI(drivingLicensePath)
)
}
},
/**
* 下载保单
*/
downloadPDF(i) {
var data = this.pdfList[i].url;
if(data) {
window.open(data, '_blank');
} else {
this.$notify({
title: '失败',
message: '车辆保单不存在',
type: 'error',
duration: 2000
})
}
},
/**
* 公里数验证
*/
......@@ -273,18 +702,33 @@
*/
cleanForm(){
this.form = {
state: 1, // 1、上架 2、下架
id: undefined, // 车辆id
numberPlate: undefined, // 车牌号码
code: undefined, // 车辆编号
status: undefined, // 出行状态
mileageLastUpdate: undefined, // 公里数
stopName: undefined, // 停靠门店
belongName: undefined, // 所属门店
parkBranchCompanyId: undefined, // 停靠门店
subordinateBranch: undefined, // 所属门店
belongToName: undefined, // 托管人
vehicleInnerStatus: undefined, // 内饰:1、全新,2、9成新,3、8成新,4、7成新
vehicleStatus: undefined, // 新旧程度:1、全新,2、9成新,3、8成新,4、7成新
vehicleBodyStatus: undefined, // 车身状况:1、无剐蹭,2、微瑕疵,3、无瑕疵
remark: undefined, // 备注
brand: undefined, // 车辆品牌
modelId: undefined, // 车型id
manufacturer: undefined, // 生产商
vin: undefined, //车架号
engineNum: undefined, //发动机号
vehicleRegisterDate: undefined, // 上牌日期
annualVerificationDate: undefined, // 年审日期
drivingLicensePath: undefined, // 行驶证正面
drivingLicenseDuplicatePath: undefined, // 行驶证副本
insuranceCompany: undefined, // 商业险公司
insuranceNo: undefined, // 商业险单号
insuranceEndDate: undefined, // 商业险日期
strongInsuranceCompany: undefined, // 交强险公司
strongInsuranceNo: undefined, // 交强险单号
strongInsuranceEndDate: undefined, // 交强险日期
}
},
/**
......@@ -298,7 +742,58 @@
* 确定
*/
handleOk(){
this.$emit('oneDialogEvent', true);
const set = this.$refs
if(this.isClick) {
return
}
this.isClick = true
set['form'].validate(valid => {
if (valid) {
if (this.form.id) {
// 编辑
putObj(this.form).then(response => {
if (response.code == 1) {
this.$notify({
title: '成功',
message: '编辑成功',
type: 'success',
duration: 2000
})
this.$emit('oneDialogEvent', true);
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
} else {
// 添加
addObj(this.form).then(response => {
if (response.code == 1) {
this.$notify({
title: '成功',
message: '添加成功',
type: 'success',
duration: 2000
})
this.$emit('oneDialogEvent', true);
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
}
} else {
this.isClick = false
}
})
},
/**
* 出行状态
......
<template>
<div class="app-container calendar-list-container" v-loading.body="showLoadingBody">
<div class="filter-container" ref="filter-container">
<el-form
ref="queryForm"
:inline="inline"
:model="listQuery"
label-width="100px"
>
<el-form-item label="车牌号">
<el-input v-model="listQuery.numberPlate" placeholder="请输入车牌号"></el-input>
</el-form-item>
<el-form-item label="所属公司">
<el-select class="filter-item" v-model="listQuery.companyId" placeholder="请选择所属公司" filterable>
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(val,index) in allVehicleCompany "
:key="index"
:label="val.name"
:value="val.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="所属门店">
<el-select class="filter-item" v-model="listQuery.subordinateBranch" placeholder="请选择所属门店" filterable>
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(val,index) in allVehicleBranchCompany"
:key="index"
:label="val.name"
:value="val.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="车型">
<el-select class="filter-item" v-model="listQuery.modelId" placeholder="请选择车型" filterable>
<el-option :key="undefined" label="全部" :value="undefined"></el-option>
<el-option
v-for="(val,index) in allVehicleList"
:key="index"
:label="val.name"
:value="val.id"
></el-option>
</el-select>
</el-form-item>
</el-form>
<el-button
class="filter-item"
type="primary"
v-waves
icon="search"
@click="handleFilter('search')"
>搜索</el-button>
<el-button class="filter-item" type="primary" v-waves @click="reloadPage">清除搜索</el-button>
</div>
<el-table :key="tableKey" :data="list" border fit highlight-current-row style="width: 100%">
<el-table-column type="index" align="center" label="序号" width="65"></el-table-column>
<el-table-column align="center" label="车牌号">
<template slot-scope="scope">
<span>{{scope.row.numberPlate}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="车辆编码">
<template slot-scope="scope">
<span>{{scope.row.code}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="车型">
<template slot-scope="scope">
<span>{{scope.row.modelName}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="车龄">
<template slot-scope="scope">
<span>{{scope.row.vehicleAge}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="新旧程度">
<template slot-scope="scope">
<span>{{scope.row.vehicleStatus == 4 ? '7成新' : scope.row.vehicleStatus == 2 ? '9成新': scope.row.vehicleStatus == 3 ? '8成新' : '全新'}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="公里数">
<template slot-scope="scope">
<span>{{scope.row.mileage}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="租赁价格">
<template slot-scope="scope">
<span>{{scope.row.rentPrice}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="免费天数">
<template slot-scope="scope">
<span>{{scope.row.rentFreeDay}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button
size="small"
type="text"
@click="handleGeneralPrice(scope.row)"
>通用价格</el-button>
<el-button
size="small"
type="text"
@click="handlerFestivalPrice(scope.row)"
>节假日价格</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
class="pagination-container"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="listQuery.page"
:page-sizes="[10,20,30, 50]"
:page-size="listQuery.limit"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
<!-- 通用价格设置 -->
<general-price-setting v-on:generalDialogEvent="generalDialogEvent" :one-row="oneRow" v-if="generalDialogVisible"></general-price-setting>
<!-- 节假日价格设置 -->
<festival-price-setting v-on:festivalDialogEvent="festivalDialogEvent" :one-row="oneRow" v-if="festivalDialogVisible"></festival-price-setting>
</div>
</template>
<script type="javascript">
import generalPriceSetting from "./generalPriceSetting";
import festivalPriceSetting from "./festivalPriceSetting";
import {
vehicleCommonPriceInfo,
vehicleBranchCompanyAll,
vehicleCompanyAll
} from 'api/vehicle/vehicleInfo/'
import { mapGetters } from 'vuex'
import {getAllVehicleList} from "../../api/vehicleType";
export default {
components: {
generalPriceSetting,
festivalPriceSetting
},
data() {
return {
tableKey: 0,
oneRow: {}, // 当前操作项
festivalDialogVisible: false, // 节日价格弹框
generalDialogVisible: false, // 通用价格弹框
showLoadingBody: false,
list: [],
total: null,
listLoading: true,
inline: true,
listQuery: {
page: 1,
limit: 20,
subordinateBranch: undefined, // 所属门店
companyName: undefined, // 所属公司
modelId: undefined, // 车型
},
allVehicleBranchCompany: [],// 所属门店列表
allVehicleCompany: [], // 所属公司列表
allVehicleList: [], //全部车型
}
},
created() {
this.getVehicleBranchCompanyAll() // 获取 所属门店 所有门店筛选列表
this.getVehicleCompanyAll() // 获取 所属公司 所有公司筛选条件
this.getList()
this.getAllVehicleType() // 获取全部车型
},
computed: {
...mapGetters(['elements']),
},
methods: {
/**
* 获取全部车型
* */
getAllVehicleType() {
let t = this
getAllVehicleList().then(response => {
let listRs = undefined
if (!this.$utils.isEmpty(response.data)) {
listRs = response.data
}
this.allVehicleList = listRs
})
},
/**
* 获取所有门店-筛选列表
*/
getVehicleBranchCompanyAll(){
vehicleBranchCompanyAll({state: 1}).then(response => {
if(response.status == 200){
this.allVehicleBranchCompany = response.data
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
},
/**
* 获取所属公司 所有公司--筛选条件
*/
getVehicleCompanyAll(){
vehicleCompanyAll({state: 1}).then(response => {
if(response.status == 200){
this.allVehicleCompany = response.data
} else {
this.$notify({
title: '失败',
message: response.message,
type: 'error',
duration: 2000
})
}
})
},
/**
* 通用价格设置--返回
*/
generalDialogEvent(e) {
this.generalDialogVisible = false;
if (e) {
this.getList();
}
},
/**
* 通用价格设置--返回
*/
festivalDialogEvent(e) {
this.festivalDialogVisible = false;
if (e) {
this.getList();
}
},
/**
* 获取列表
*/
getList() {
vehicleCommonPriceInfo(this.listQuery).then(response => {
if (response.status == 200) {
this.listLoading = false
this.list = response.data.data
this.total = response.data.totalCount
} else {
this.list = []
this.listLoading = false
}
})
},
/**
* 搜索
*/
handleFilter(p) {
this.listQuery.page = 1
this.getList()
},
/**
* 清除搜索
*/
reloadPage(){
this.listQuery = {
page: 1,
limit: 20,
subordinateBranch: undefined, // 所属门店
}
this.getList()
},
/**
* 一页显示数量调整
*/
handleSizeChange(val) {
this.listQuery.limit = val
this.getList()
},
/**
* 翻页
*/
handleCurrentChange(val) {
this.listQuery.page = val
this.getList()
},
/**
* 设置通用价格
*/
handleGeneralPrice(row){
this.oneRow = row
this.generalDialogVisible = true
},
/**
* 设置节日价格
*/
handlerFestivalPrice(row){
this.oneRow = row
this.festivalDialogVisible = true
},
}
}
</script>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment