Commit 928df183 by weix

添加运力方管理模块

parent a563af8f
import {get, post, put, deletes} from '@/request/http'
// 根据品牌查运力
export function getTransportList(data) {
const url = process.env.VUE_APP_BASE_API6+'/part/manage/list';
return post(url, data)
}
......@@ -282,6 +282,14 @@ export const routes = [
meta: {title: '运力方管理', icon: 'el-icon-s-home'}
},
{
path: 'transport-detail',
name: 'transportDetail',
component: () =>
import ('@/views/transports/transportDetail.vue'),
meta: {title: '运力方管理', icon: 'el-icon-s-home'},
hidden: true
},
{
path: 'car',
name: 'Car',
component: () =>
......
......@@ -72,6 +72,7 @@
<el-table
:data="data"
stripe
border
v-loading="tableLoading"
:header-cell-style="tableHeaderColor"
@row-dblclick="carDetail"
......
<template>
<el-card>
<el-row>
<div class="title-left" style="padding-left: 10px;font-weight: 800;">
车辆管理
</div>
</el-row>
<el-form class="search-form">
<el-row>
<el-col :span="8">
<el-form-item>
<el-input suffix-icon="el-icon-search" v-model="selectResult.searchStr"
style="max-width: 302px;"
placeholder="请输入车牌号或者车主姓名"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="运营区域:">
<el-cascader clearable v-model="selectResult.areaCodeList"
:show-all-levels="false" style="width: 100%;max-width: 221px;"
:props="props"></el-cascader>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<Selects :options="dataSource.CarType"
:selectName="'车辆类型:'" :type="'driverTypeList'"
@changeList="handlechangeList"></Selects>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<Selects :options="dataSource.auditStatusList"
:selectName="'车辆类别:'" :type="'auditStatusList'"
@changeList="handlechangeList"></Selects>
</el-col>
<el-col :span="8">
<Selects :options="dataSource.serviceStatusList"
:selectName="'服务状态:'" :type="'serviceStatusList'"
@changeList="handlechangeList"></Selects>
</el-col>
<el-col :span="8">
<Selects :options="dataSource.runStatus"
:selectName="'运营状态:'" :type="'runStatus'"
@changeList="handlechangeList"></Selects>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
网络运输证:
<el-select v-model="selectResult.warrantStatus">
<el-option label="全部" value="0"></el-option>
<el-option label="已上传" value="1"></el-option>
<el-option label="未上传" value="2"></el-option>
</el-select>
</el-col>
<el-col :span="8">
<el-button type="primary" size="mini" @click="searchByInfo">查询</el-button>
</el-col>
</el-row>
</el-form>
<el-table
:data="data"
stripe
border
v-loading="tableLoading"
:header-cell-style="tableHeaderColor"
@row-dblclick="carDetail"
style="width: 100%">
<el-table-column
type="index"
label="序号"
align="center"
width="50">
</el-table-column>
<el-table-column
label="车牌号"
align="center"
width="120">
<template slot-scope="{row}">
<span style="color: #43a1fc">{{ row.plateNumber }}</span>
</template>
</el-table-column>
<el-table-column
label="车辆类别"
align="center"
width="120">
<template slot-scope="{row}">
<span style="margin-left: 10px">{{ row.commercialType == 1 ? '加盟' : '自营' }}</span>
</template>
</el-table-column>
<el-table-column
label="车辆类型"
align="center"
:show-overflow-tooltip=true
width="180">
<template slot-scope="{row}">
<span>{{ carTypeText(row.vehicleType) }}</span>
</template>
</el-table-column>
<el-table-column
label="车主"
align="center"
:show-overflow-tooltip=true
width="120">
<template slot-scope="{row}">
<span>{{ row.ownerName }}</span>
</template>
</el-table-column>
<el-table-column
label="品牌型号"
align="center"
:show-overflow-tooltip=true
>
<template slot-scope="{row}">
<span>{{
row.vehcileLicenseJson ? JSON.parse(row.vehcileLicenseJson).vehicleType : ''
}}</span>
</template>
</el-table-column>
<el-table-column
prop="seats"
label="核定载人数/人"
align="center"
width="120">
</el-table-column>
<el-table-column
prop="createTime"
label="加入时间"
align="center"
:show-overflow-tooltip=true>
<template slot-scope="{row}">
<span>{{ row.createTime ? dateTime2Str(row.createTime, 'yyyy-mm-dd hh:mm:ss') : '/' }}</span>
</template>
</el-table-column>
<el-table-column
prop="hasWarrant"
label="网络运输证"
align="center"
width="100">
<template slot-scope="{row}">
<span>{{ row.hasWarrant ? '已上传' : '未上传' }}</span>
</template>
</el-table-column>
<el-table-column
label="服务状态"
align="center"
width="120">
<template slot-scope="{row}">
<span style="margin-left: 10px">{{ serverStatusText(row.runStatus) }}</span>
</template>
</el-table-column>
<el-table-column
prop="name"
label="运营状态"
align="center"
width="100">
<template slot-scope="{row}">
<span>{{ runStatusText(row.serviceStatus) }}</span>
</template>
</el-table-column>
</el-table>
<div class="pagination" v-if="total > 10">
<el-pagination
background
layout="prev, pager, next, jumper, total"
:current-page="page"
@current-change="current_change"
:total="total">
</el-pagination>
</div>
</el-card>
</template>
<script>
import Selects from '@/components/Selects';
import dataSource from "@/libs/screen";
import JudgeType from "@/mixins/judgeType";
import {
getAllprovinceAndCity,
} from "@/port/set-request";
import {
carQuery,
} from "@/port/carOrDriver/carOrDriver";
export default {
name: "car",
props: ['transport'],
components: {
Selects
},
mixins: [JudgeType],
data() {
return {
dataSource: dataSource,
props: {
checkStrictly: true,
lazy: true,
lazyLoad(node, resolve) {
const {level} = node
console.log(node)
let parent
if (level == 0) {
parent = 100000
} else {
parent = node.value
}
getAllprovinceAndCity(parent).then(res => {
if (res.status == 200) {
let list = res.data
const nodes = list.map(item => {
return {
value: item.id,
label: item.fullname,
leaf: level >= 2,
disabled: parent == 100000 ? true : false,
}
})
resolve(nodes)
}
})
}
},
data: [],
tableLoading: false,
page: 1,
size: 10,
total: 0,
transportData: [],
areaCodeData: [],
// 参数集合
selectResult: {
transportList: [],
driverTypeList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17],
auditStatusList: [1, 2],
serviceStatusList: [1, 2, 3],
runStatus: [1, 2, 3, 4],
positiveImageUrl: '',
reverseImageUrl: '',
carPositiveImageUrl: '',
areaCodeList: '',
warrantStatus: '0',
searchStr: ''
},
}
},
async created() {
await this.initTable();
},
methods: {
carDetail(row) {
this.$router.push({path: '/transports/car-detail', query: {id: row.id, type: row.auditState}})
},
searchByInfo() {
this.page = 1;
this.initTable();
},
handlechangeList(val) {
let source = JSON.parse(JSON.stringify(val))
let type = source.type
let data = this.filftersFun(source.data)
this.selectResult[type] = data
},
current_change(page) {
this.page = page;
this.initTable();
},
async initTable() {
let json = {
commercialTypeList: this.selectResult.auditStatusList,
operateOrgIdList: [this.transport],
runStatus: this.selectResult.serviceStatusList,
serviceStatus: this.selectResult.runStatus,
vehicleTypeList: this.selectResult.driverTypeList,
searchStr: this.selectResult.searchStr,
pageVo: {
page: this.page,
rows: this.size
},
platformId: this.$store.getters.platformId,
regionCode: this.selectResult.areaCodeList.length > 0 ? this.selectResult.areaCodeList[this.selectResult.areaCodeList.length - 1] : '',
warrantStatus: this.selectResult.warrantStatus,
};
this.tableLoading = true;
await carQuery(json).then(res => {
if (res.status == 200) {
res.data.content.forEach(item => {
if (item.carStatus == '5') {
return item.operatingStatus = '停运'
} else if (item.carStatus == '1') return item.operatingStatus = '待审核'
else return item.operatingStatus = '上线'
})
this.data = res.data.content
console.info(this.tableData)
this.total = res.data.total
this.$emit('getCarTotal', this.total);
}else {
// this.$message.error(res.msg);
}
this.tableLoading = false;
})
// .catch(() => {
//
// })
},
tableRowStyle({row, rowIndex}) {
if (rowIndex % 2 !== 0) {
return {'background-color': '#e3f4ff'};
}
},
// table变色,头
tableHeaderColor({row, column, rowIndex, columnIndex}) {
return {'background-color': '#0099ff', color: '#ffffff'};
},
}
}
</script>
<style scoped lang="scss">
.search-form {
margin: 5px 0 5px 0;
.el-form-item {
margin-bottom: 5px;
}
}
.pagination {
margin-top: 16px;
text-align: right;
}
</style>
<template>
<el-card>
<el-row>
<div class="title-left" style="padding-left: 10px;font-weight: 800;">
司机管理
</div>
</el-row>
<el-form class="search-form">
<el-row>
<el-col :span="8">
<el-form-item>
<el-input suffix-icon="el-icon-search" v-model="selectResult.searchStr"
style="max-width: 302px;"
placeholder="请输入车牌号或者车主姓名"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="运营区域:">
<el-cascader clearable v-model="selectResult.areaCodeList"
:show-all-levels="false" style="width: 100%;max-width: 221px;"
:props="props"></el-cascader>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<Selects :options="dataSource.driverTypeList"
:selectName="'司机类型:'" :type="'driverTypeList'"
@changeList="handlechangeList"></Selects>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<Selects :options="dataSource.serviceStatusList"
:selectName="'服务状态:'" :type="'serviceStatusList'"
@changeList="handlechangeList"></Selects>
</el-col>
<el-col :span="8">
<Selects :options="dataSource.runStatus"
:selectName="'运营状态:'" :type="'runStatus'"
@changeList="handlechangeList"></Selects>
</el-col>
<el-col :span="8">
网络驾驶证:
<el-select v-model="selectResult.networkPaperStatus">
<el-option label="全部" value="0"></el-option>
<el-option label="已上传" value="1"></el-option>
<el-option label="未上传" value="2"></el-option>
</el-select>
<el-button type="primary" size="mini" style="margin-left: 10px;" @click="searchByInfo">查询</el-button>
</el-col>
</el-row>
</el-form>
<el-table
:data="data"
stripe
border
v-loading="tableLoading"
:header-cell-style="tableHeaderColor"
@row-dblclick="carDetail"
style="width: 100%">
<el-table-column
type="index"
label="序号"
align="center"
width="50">
</el-table-column>
<el-table-column
label="姓名"
align="center"
width="120">
<template slot-scope="{row}">
<span style="color: #43a1fc">{{ row.driverName }}</span>
</template>
</el-table-column>
<el-table-column
label="司机类型"
align="center"
width="120">
<template slot-scope="{row}">
<span style="margin-left: 10px">{{ row.driverType == 1 ? '专职司机' : '兼职司机' }}</span>
</template>
</el-table-column>
<el-table-column
prop="idCardNo"
label="身份证号码"
align="center"
>
</el-table-column>
<el-table-column
prop="driverMobile"
label="联系方式"
align="center"
width="120">
</el-table-column>
<el-table-column
prop="createTime"
label="入驻时间"
align="center"
>
<!-- :show-overflow-tooltip=true-->
</el-table-column>
<el-table-column
prop="hasNetworkPapers"
label="网络驾驶证"
align="center"
width="100">
<template slot-scope="{row}">
<span>{{ row.hasNetworkPapers ? '已上传' : '未上传' }}</span>
</template>
</el-table-column>
<el-table-column
prop="name"
label="运营状态"
align="center"
width="100">
<template slot-scope="{row}">
<span>{{ runStatusText(row.serviceStatus) }}</span>
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- prop="name"-->
<!-- label="审核状态"-->
<!-- align="center"-->
<!-- width="100">-->
<!-- <template slot-scope="{row}">-->
<!-- <span v-html="auditStatus(row.auditStatus)"></span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column
label="服务状态"
align="center"
width="100">
<template slot-scope="{row}">
<span style="margin-left: 10px">{{ serverStatusText(row.runStatus) }}</span>
</template>
</el-table-column>
</el-table>
<div class="pagination" v-if="total > 10">
<el-pagination
background
layout="prev, pager, next, jumper, total"
:current-page="page"
@current-change="current_change"
:total="total">
</el-pagination>
</div>
</el-card>
</template>
<script>
import Selects from '@/components/Selects';
import dataSource from "@/libs/screen";
import JudgeType from "@/mixins/judgeType";
import {
getAllprovinceAndCity,
} from "@/port/set-request";
import {
driverQuery,
} from "@/port/carOrDriver/carOrDriver";
export default {
name: "driver",
props: ['transport'],
components: {
Selects
},
mixins: [JudgeType],
data() {
return {
dataSource: dataSource,
props: {
checkStrictly: true,
lazy: true,
lazyLoad(node, resolve) {
const {level} = node
console.log(node)
let parent
if (level == 0) {
parent = 100000
} else {
parent = node.value
}
getAllprovinceAndCity(parent).then(res => {
if (res.status == 200) {
let list = res.data
const nodes = list.map(item => {
return {
value: item.id,
label: item.fullname,
leaf: level >= 2,
disabled: parent == 100000 ? true : false,
}
})
resolve(nodes)
}
})
}
},
data: [],
tableLoading: false,
page: 1,
size: 10,
total: 0,
transportData: [],
areaCodeData: [],
// 参数集合
selectResult: {
transportList: [],
driverTypeList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17],
auditStatusList: [1, 2],
serviceStatusList: [1, 2, 3],
runStatus: [1, 2, 3, 4],
positiveImageUrl: '',
reverseImageUrl: '',
carPositiveImageUrl: '',
areaCodeList: '',
networkPaperStatus: '0',
searchStr: ''
},
}
},
async created() {
await this.initTable();
},
methods: {
carDetail(row) {
this.$router.push({path: '/transports/driver-detail', query: {id: row.userId, type: row}})
},
searchByInfo() {
this.page = 1;
this.initTable();
},
handlechangeList(val) {
let source = JSON.parse(JSON.stringify(val))
let type = source.type
let data = this.filftersFun(source.data)
this.selectResult[type] = data
},
current_change(page) {
this.page = page;
this.initTable();
},
async initTable() {
let json = {
commercialTypeList: this.selectResult.auditStatusList,
operateOrgIdList: [this.transport],
runStatus: this.selectResult.serviceStatusList,
serviceStatus: this.selectResult.runStatus,
driverTypeList: this.selectResult.driverTypeList,
searchStr: this.selectResult.searchStr,
pageVo: {
page: this.page,
rows: this.size
},
platformId: this.$store.getters.platformId,
operateCode: this.selectResult.areaCodeList.length > 0 ? this.selectResult.areaCodeList[this.selectResult.areaCodeList.length - 1] : '',
networkPaperStatus: this.selectResult.networkPaperStatus,
};
this.tableLoading = true;
await driverQuery(json).then(res => {
if (res.status == 200) {
if (!!res.data) {
res.data.content.forEach(item => {
if (item.status == '5' || item.status == '1') {
return item.operatingStatus = '停运'
} else return item.operatingStatus = '上线'
})
this.data = res.data.content
this.total = res.data.total
this.$emit('getDriverTotal', this.total);
}
}else {
this.$message.error(res.msg);
}
this.tableLoading = false;
})
},
tableRowStyle({row, rowIndex}) {
if (rowIndex % 2 !== 0) {
return {'background-color': '#e3f4ff'};
}
},
// table变色,头
tableHeaderColor({row, column, rowIndex, columnIndex}) {
return {'background-color': '#0099ff', color: '#ffffff'};
},
}
}
</script>
<style scoped lang="scss">
.search-form {
margin: 5px 0 5px 0;
.el-form-item {
margin-bottom: 5px;
}
}
.pagination {
margin-top: 16px;
text-align: right;
}
</style>
......@@ -67,6 +67,7 @@
<el-table
:data="data"
stripe
border
v-loading="tableLoading"
:header-cell-style="tableHeaderColor"
@row-dblclick="carDetail"
......
<template>
<el-card>
运力
<el-row>
<div class="title-left" style="padding-left: 10px;font-weight: 800;">
运力方管理
</div>
</el-row>
<el-row style="margin-top: 10px;">
<el-form>
<el-col :span="12">
<el-input v-model="form.searchParam" placeholder="请输入运力方简称/营业执照名称" size="mini" style="width: 90%;" suffix-icon="el-icon-search"></el-input>
</el-col>
<el-col :span="8">
<Selects :options="platformList" sizeType="mini"
:selectName="'车辆类别:'" :type="'platformList'" @changeList="handlechangeList"></Selects>
<el-button size="mini" type="primary" style="margin-left: 10px;padding: 5px 15px;">查询</el-button>
</el-col>
</el-form>
</el-row>
<el-table
:data="data"
v-loading="loading"
style="margin-top: 10px;"
@row-dblclick="handledbClick"
stripe
border
:header-cell-style="tableHeaderColor"
>
<el-table-column prop="orgForShort" label="运力方简称" align="center"></el-table-column>
<el-table-column prop="organizeName" label="营业执照名称" align="center"></el-table-column>
<el-table-column prop="areas" label="运营区域" align="center">
<template slot-scope="{row}">
<span v-for="(item,index) in row.areas" :key="item.areaCode">
{{ item.areaName }}
</span>
</template>
</el-table-column>
<el-table-column prop="channels" label="合作品牌" align="center">
<template slot-scope="{row}">
<span v-for="(item,index) in row.channels" :key="'channels'+index">
{{ item.brandName }}
</span>
</template>
</el-table-column>
<el-table-column prop="vehicleCount" label="车辆数" align="center"></el-table-column>
<el-table-column prop="driverCount" label="司机数" align="center"></el-table-column>
<el-table-column prop="productCount" label="开通产品数" align="center"></el-table-column>
</el-table>
<div style="text-align: right;margin-top: 5px;">
<el-pagination
background
layout="prev, pager, next, jumper, total"
:current-page="page"
@current-change="current_change"
:total="total">
</el-pagination>
</div>
</el-card>
</template>
<script>
import Selects from '@/components/Selects';
import judgeType from "@/mixins/judgeType";
import {getTransportList} from "@/port/tansport/tansport";
import {
getplatformList
} from "@/port/set-request";
export default {
name: "tranport"
name: "transport",
mixins: [judgeType],
components: {
Selects
},
data() {
return {
page: 1,
total: 0,
rows: 10,
data: [],
loading: false,
form: {
platformList: [],
searchParam: ''
},
platformList: []
}
},
async created() {
await this.getAllPlatformList();
this.initTable();
},
methods: {
async getAllPlatformList() {
await getplatformList()
.then((res) => {
if(res.status === 200) {
this.$nextTick(() => {
let idList = [];
let list = [];
res.data.forEach((item) => {
if(item.brandUrl) {
list.push({
value: item.platformId,
label: item.name,
});
idList.push(item.platformId)
}
});
this.platformList = list;
this.form.platformList = idList;
})
}
})
},
current_change(page) {
this.page = page;
this.initTable();
},
handledbClick(row) {
this.$router.push({path: '/transports/transport-detail', query: {row: JSON.stringify(row)}})
},
handlechangeList(val) {
let source = JSON.parse(JSON.stringify(val))
let data = this.filftersFun(source.data)
this.form.platformList = data
},
initTable() {
let params = {
//模糊查询
searchStr: this.form.searchParam,
//平台方ID多选
platformIdList: this.form.platformList,
pageVo: {
page: this.page,
rows: this.rows
}
}
this.loading = true;
getTransportList(params)
.then((res) => {
if(res.status === 200) {
this.data = res.data.content;
this.total = res.data.total;
}else {
this.$message.error(res.msg);
}
this.loading = false;
})
.catch(() => {
this.loading = false;
})
},
// table变色,头
tableHeaderColor({row, column, rowIndex, columnIndex}) {
return {"background-color": "#0099ff", color: "#ffffff"};
},
}
}
</script>
......
<template>
<div>
<el-card>
<el-row v-if="Object.keys(queryRow).length > 0" type="flex" align="flex-end">
<div style="width: 100px;">
<el-image style="width: 100px;height: 60px;" :src="queryRow.logo" lazy></el-image>
</div>
<div style="width: calc(100% - 100px);padding-left: 10px;display: flex;align-items: flex-end;padding-bottom: 5px;">
<el-row>
<el-row>
<span style="font-size: 18px;font-weight: 800;margin-right: 10px;">{{queryRow.orgForShort}}</span>
({{queryRow.organizeName}})
</el-row>
<el-row>
管理员:{{JSON.parse(queryRow.chargePerson).userName}}{{queryRow.chargePhone}}
</el-row>
</el-row>
</div>
</el-row>
</el-card>
<el-card style="margin-top: 10px;">
<el-tabs style="background-color: #fff;" v-model="activeName" type="card"
@tab-click="handleClick">
<el-tab-pane :label="item.name" :name="item.id"
v-for="(item,index) in tabsList"
:key="index"></el-tab-pane>
</el-tabs>
<driver :transport="queryRow.organizeId" @getDriverTotal="getDriverTotal" v-show="activeName === '0'"></driver>
<car :transport="queryRow.organizeId" @getCarTotal="getCarTotal" v-show="activeName === '1'"></car>
</el-card>
</div>
</template>
<script>
import car from "./components/car";
import driver from "./components/driver";
export default {
name: "transportDetail",
components: {
car,
driver
},
data() {
return {
queryRow: {},
activeName: '',
tabsList: [{id: '0', name: '司机数'},{id: '1', name: '车辆数'}]
}
},
created() {
this.queryRow = JSON.parse(this.$route.query.row);
this.activeName = '0';
console.log(this.queryRow)
},
methods: {
handleClick() {
},
getCarTotal(t) {
this.tabsList[1].name = `车辆数(${t})`;
},
getDriverTotal(t) {
this.tabsList[0].name = `司机数(${t})`;
},
}
}
</script>
<style scoped lang="scss">
</style>
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