30 changed files with 2063 additions and 1107 deletions
|
After Width: | Height: | Size: 804 B |
|
After Width: | Height: | Size: 1018 KiB |
@ -0,0 +1,94 @@ |
|||||
|
<template> |
||||
|
<div class='HomeFrame'> |
||||
|
<ElPopover trigger="manual" :value="activeIcon === 'Frame'" :visibleArrow="false" placement="left" |
||||
|
popper-class="global-input-search-popover"> |
||||
|
<Button :class="['btn', { 'btn-active': activeIcon }]" slot="reference" @click.native="handleClick('Frame')"> |
||||
|
<img src="@screen/images/home-Frame/Frame.svg"> |
||||
|
</Button> |
||||
|
|
||||
|
<div class="body"> |
||||
|
<div class="title"> |
||||
|
图标含义 |
||||
|
</div> |
||||
|
<!-- <Form labelWidth="90px" column="1" class="form" ref="FormConfigRef" :formList="formList" /> --> |
||||
|
<img class="image" src="@screen/images/home-Frame/logoMean.jpg"> |
||||
|
<div class="footer"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</ElPopover> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import Button from '@screen/components/Buttons/Button.vue'; |
||||
|
import Form from '@screen/components/FormConfig'; |
||||
|
import * as PresetFormItems from "@screen/pages/control/event/event/FormEvent/PresetFormItems.js"; |
||||
|
import { merge, cloneDeep } from "lodash" |
||||
|
|
||||
|
export default { |
||||
|
name: 'HomeFrame', |
||||
|
components: { |
||||
|
Button, |
||||
|
Form |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
activeIcon: null |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
handleClick(type) { |
||||
|
this.activeIcon = this.activeIcon === type ? null : type; |
||||
|
}, |
||||
|
filterEnd(data) { |
||||
|
this.activeIcon = null; |
||||
|
// this.filterData = data; |
||||
|
this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data); |
||||
|
}, |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang='scss'> |
||||
|
div.el-popper.global-input-search-popover { |
||||
|
background: rgba(6, 66, 88, 0.8); |
||||
|
border: 1px solid rgba(42, 217, 253, 0.6); |
||||
|
position: relative; |
||||
|
padding-top: 36px; |
||||
|
transform: translateY(24px); |
||||
|
|
||||
|
.body { |
||||
|
.title { |
||||
|
background: linear-gradient(90deg, #237E9B 0%, rgba(23, 145, 184, 0) 100%); |
||||
|
padding: 3px 9px; |
||||
|
position: absolute; |
||||
|
top: 0; |
||||
|
left: 0; |
||||
|
width: 100%; |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</style> |
||||
|
<style lang='scss' scoped> |
||||
|
.image { |
||||
|
width: 1440px; |
||||
|
height: 900px; |
||||
|
} |
||||
|
|
||||
|
.HomeFrame { |
||||
|
|
||||
|
.btn { |
||||
|
padding: 9px; |
||||
|
background: linear-gradient(180deg, #152E3C 0%, #163A45 100%); |
||||
|
border-radius: 4px; |
||||
|
overflow: hidden; |
||||
|
height: unset; |
||||
|
border: 1px solid rgba(40, 144, 167, 1); |
||||
|
} |
||||
|
|
||||
|
.btn-active { |
||||
|
background: linear-gradient(180deg, #005C79 0%, #009BCC 100%); |
||||
|
} |
||||
|
} |
||||
|
</style> |
||||
@ -1,393 +1,552 @@ |
|||||
<template> |
<template> |
||||
<Dialog v-model="modelVisible" title="收费站管制统计" style="width: 100%;"> |
<Dialog v-model="modelVisible" title="收费站管制统计" style="width: 100%"> |
||||
<div class="search"> |
<div class="search"> |
||||
<InputSearch :formList="searchFormList" @handleSearch="handleSearch" style="width: 502px;" /> |
<InputSearch |
||||
</div> |
:formList="searchFormList" |
||||
|
@handleSearch="handleSearch" |
||||
<div class="StatsDetail"> |
style="width: 502px" |
||||
<el-table key="table1" v-if="searchType == 2" :data="tableData" style="width: 100%" |
/> |
||||
:span-method="arraySpanMethod"> |
</div> |
||||
<el-table-column prop="controlCauseName" label="封闭原因" width="150" align="center"> |
|
||||
</el-table-column> |
<div class="StatsDetail"> |
||||
<el-table-column prop="causeTypeName" label="" align="center"> |
<el-table |
||||
</el-table-column> |
key="table1" |
||||
<el-table-column label="封闭站次" align="center"> |
v-if="searchType == 2 && controlType == 1" |
||||
<el-table-column label="目标时段" width="120" align="center"> |
:data="tableData" |
||||
<el-table-column prop="num" label="站次" width="120" align="center"> |
style="width: 100%" |
||||
</el-table-column> |
:span-method="arraySpanMethod" |
||||
<el-table-column prop="numRatio" label="占比(%)" width="120" align="center"> |
> |
||||
</el-table-column> |
<el-table-column |
||||
</el-table-column> |
prop="controlCauseName" |
||||
<el-table-column label="去年同期时间段" align="center"> |
label="封闭原因" |
||||
<el-table-column prop="lastYearNum" label="站次" width="120" align="center"> |
width="150" |
||||
</el-table-column> |
align="center" |
||||
<el-table-column prop="lastYearNumRatio" label="占比(%)" width="120" align="center"> |
> |
||||
</el-table-column> |
</el-table-column> |
||||
</el-table-column> |
<el-table-column prop="causeTypeName" label="" align="center"> |
||||
<el-table-column prop="yearNumRatio" label="同比(%)" align="center"></el-table-column> |
</el-table-column> |
||||
</el-table-column> |
<el-table-column label="封闭站次" align="center"> |
||||
<el-table-column label="封闭时长" align="center"> |
<el-table-column label="目标时段" width="120" align="center"> |
||||
<el-table-column label="目标时段" width="120" align="center"> |
<el-table-column prop="num" label="站次" width="120" align="center"> |
||||
<el-table-column prop="minuteTime" label="时长(分钟)" width="120" align="center"> |
</el-table-column> |
||||
</el-table-column> |
<el-table-column |
||||
<el-table-column prop="timeRatio" label="占比(%)" width="120" align="center"> |
prop="numRatio" |
||||
</el-table-column> |
label="占比(%)" |
||||
</el-table-column> |
width="120" |
||||
<el-table-column label="去年同期时间段" align="center"> |
align="center" |
||||
<el-table-column prop="lastYearTime" label="时长(分钟)" width="120" align="center"> |
> |
||||
</el-table-column> |
</el-table-column> |
||||
<el-table-column prop="lastYearTimeRatio" label="占比(%)" width="120" align="center"> |
</el-table-column> |
||||
</el-table-column> |
<el-table-column label="去年同期时间段" align="center"> |
||||
</el-table-column> |
<el-table-column |
||||
<el-table-column prop="yearTimeRatio" label="同比(%)" align="center"></el-table-column> |
prop="lastYearNum" |
||||
</el-table-column> |
label="站次" |
||||
</el-table> |
width="120" |
||||
<el-table key="table2" v-else :data="facilityTableData" style="width: 100%"> |
align="center" |
||||
<el-table-column prop="facilityName" label="" width="150" align="center"> |
> |
||||
</el-table-column> |
</el-table-column> |
||||
<el-table-column prop="facilityClose" label="封闭" align="center"> |
<el-table-column |
||||
</el-table-column> |
prop="lastYearNumRatio" |
||||
<el-table-column prop="facilityRestriction" label="限行" align="center"> |
label="占比(%)" |
||||
</el-table-column> |
width="120" |
||||
<el-table-column prop="facilityInterval" label="间隔放行" align="center"> |
align="center" |
||||
</el-table-column> |
> |
||||
<el-table-column prop="total" label="合计" align="center"> |
</el-table-column> |
||||
</el-table-column> |
</el-table-column> |
||||
</el-table> |
<el-table-column |
||||
|
prop="yearNumRatio" |
||||
</div> |
label="同比(%)" |
||||
</Dialog> |
align="center" |
||||
|
></el-table-column> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="封闭时长" align="center"> |
||||
|
<el-table-column label="目标时段" width="120" align="center"> |
||||
|
<el-table-column |
||||
|
prop="minuteTime" |
||||
|
label="时长(分钟)" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="timeRatio" |
||||
|
label="占比(%)" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="去年同期时间段" align="center"> |
||||
|
<el-table-column |
||||
|
prop="lastYearTime" |
||||
|
label="时长(分钟)" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="lastYearTimeRatio" |
||||
|
label="占比(%)" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="yearTimeRatio" |
||||
|
label="同比(%)" |
||||
|
align="center" |
||||
|
></el-table-column> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
<el-table |
||||
|
key="table2" |
||||
|
v-else-if="searchType == 2 && controlType == 2" |
||||
|
:data="tableData" |
||||
|
style="width: 100%" |
||||
|
:span-method="arraySpanMethod" |
||||
|
> |
||||
|
<el-table-column |
||||
|
prop="controlCauseName" |
||||
|
label="限行原因" |
||||
|
width="150" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="causeTypeName" label="" align="center"> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="限行站次" align="center"> |
||||
|
<el-table-column label="目标时段" width="120" align="center"> |
||||
|
<el-table-column prop="num" label="站次" width="120" align="center"> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="numRatio" |
||||
|
label="占比(%)" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="去年同期时间段" align="center"> |
||||
|
<el-table-column |
||||
|
prop="lastYearNum" |
||||
|
label="站次" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="lastYearNumRatio" |
||||
|
label="占比(%)" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="yearNumRatio" |
||||
|
label="同比(%)" |
||||
|
align="center" |
||||
|
></el-table-column> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="限行时长" align="center"> |
||||
|
<el-table-column label="目标时段" width="120" align="center"> |
||||
|
<el-table-column |
||||
|
prop="minuteTime" |
||||
|
label="时长(分钟)" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="timeRatio" |
||||
|
label="占比(%)" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="去年同期时间段" align="center"> |
||||
|
<el-table-column |
||||
|
prop="lastYearTime" |
||||
|
label="时长(分钟)" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="lastYearTimeRatio" |
||||
|
label="占比(%)" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="yearTimeRatio" |
||||
|
label="同比(%)" |
||||
|
align="center" |
||||
|
></el-table-column> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
<el-table |
||||
|
key="table3" |
||||
|
v-else |
||||
|
show-summary |
||||
|
:data="facilityTableData" |
||||
|
style="width: 100%" |
||||
|
> |
||||
|
<el-table-column |
||||
|
prop="facilityName" |
||||
|
label="" |
||||
|
width="150" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="facilityClose" label="封闭" align="center"> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="facilityRestriction" label="限行" align="center"> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="facilityInterval" |
||||
|
label="间隔放行" |
||||
|
align="center" |
||||
|
> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="total" label="合计" align="center"> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
</div> |
||||
|
</Dialog> |
||||
</template> |
</template> |
||||
|
|
||||
<script> |
<script> |
||||
import Dialog from "@screen/components/Dialog/index"; |
import Dialog from "@screen/components/Dialog/index"; |
||||
import InputSearch from '@screen/components/InputSearch/index.vue'; |
import InputSearch from "@screen/components/InputSearch/index.vue"; |
||||
import Table from "@screen/components/Table.vue"; |
import Table from "@screen/components/Table.vue"; |
||||
import { selectTollStation } from "@/api/event/governanceAnalysis" |
import { selectTollStation } from "@/api/event/governanceAnalysis"; |
||||
import options from "../assets/charts"; |
import options from "../assets/charts"; |
||||
import request from "@/utils/request"; |
import request from "@/utils/request"; |
||||
export default { |
export default { |
||||
name: 'StatsDetail', |
name: "StatsDetail", |
||||
components: { |
components: { |
||||
Dialog, |
Dialog, |
||||
InputSearch, |
InputSearch, |
||||
Table |
Table, |
||||
}, |
}, |
||||
model: { |
model: { |
||||
prop: 'visible', |
prop: "visible", |
||||
event: 'update:value' |
event: "update:value", |
||||
}, |
}, |
||||
props: { |
props: { |
||||
visible: Boolean |
visible: Boolean, |
||||
}, |
}, |
||||
data() { |
data() { |
||||
return { |
return { |
||||
num: 0, |
num: 0, |
||||
tableData: [], |
tableData: [], |
||||
weatherNum: [], |
weatherNum: [], |
||||
startTime: "", |
startTime: "", |
||||
endTime: "", |
endTime: "", |
||||
|
pickerOptions: { |
||||
|
disabledDate(time) { |
||||
|
return time.getTime() > Date.now(); |
||||
|
}, |
||||
|
}, |
||||
|
searchType: 1, |
||||
|
controlType: 1, |
||||
|
facilityIds: [], |
||||
|
facilityTableData: [], |
||||
|
searchFormList: [ |
||||
|
{ |
||||
|
label: "查询条件:", |
||||
|
key: "searchType", |
||||
|
required: true, |
||||
|
isAlone: true, |
||||
|
type: "RadioGroup", |
||||
|
default: 1, |
||||
|
options: { |
||||
|
type: "circle", |
||||
|
options: [ |
||||
|
{ |
||||
|
key: 1, |
||||
|
label: "站点", |
||||
|
}, |
||||
|
{ |
||||
|
key: 2, |
||||
|
label: "原因", |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
label: "事件类型:", |
||||
|
key: "controlType", |
||||
|
required: true, |
||||
|
isAlone: true, |
||||
|
type: "RadioGroup", |
||||
|
visible: (data) => { |
||||
|
if (data.searchType == 2) { |
||||
|
return true; |
||||
|
} |
||||
|
}, |
||||
|
default: 1, |
||||
|
options: { |
||||
|
type: "circle", |
||||
|
options: [ |
||||
|
{ |
||||
|
key: 1, |
||||
|
label: "收费站封闭", |
||||
|
}, |
||||
|
{ |
||||
|
key: 2, |
||||
|
label: "收费站限行", |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
label: "选择站点:", |
||||
|
key: "facilityId", |
||||
|
required: true, |
||||
|
type: "Select", |
||||
|
options: { |
||||
|
multiple: true, |
||||
|
options: [], |
||||
|
}, |
||||
|
visible: (data) => { |
||||
|
if (data.searchType == 1) { |
||||
|
return true; |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
label: "日期:", |
||||
|
key: "date", |
||||
|
required: true, |
||||
|
type: "datePicker", |
||||
|
options: { |
||||
pickerOptions: { |
pickerOptions: { |
||||
disabledDate(time) { |
disabledDate(time) { |
||||
return time.getTime() > Date.now(); |
return time.getTime() > Date.now(); |
||||
}, |
}, |
||||
}, |
}, |
||||
|
valueFormat: "yyyy-MM-dd", |
||||
|
type: "daterange", |
||||
|
}, |
||||
|
}, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
computed: { |
||||
|
modelVisible: { |
||||
|
get() { |
||||
|
return this.visible; |
||||
|
}, |
||||
|
set(val) { |
||||
|
this.$emit("update:value", val); |
||||
|
}, |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
getFacilityList() { |
||||
|
Promise.allSettled([ |
||||
|
// 查询收费站 |
||||
|
request({ |
||||
|
url: `/business/facility/query`, |
||||
|
method: "get", |
||||
|
}), |
||||
|
]).then((res) => { |
||||
|
if (res[0].status === "fulfilled" && res[0].value.code == 200) { |
||||
|
this.searchFormList[2].options.options = res[0].value.data.map( |
||||
|
(item) => ({ |
||||
|
key: item.id, |
||||
|
label: item.facilityName, |
||||
|
}) |
||||
|
); |
||||
|
this.facilityIds = res[0].value.data.map((item) => item.id); |
||||
|
// this.searchFormList[2].default = res[0].value.data.map(item => item.id) |
||||
|
let currentMonth = moment().format("YYYY-MM"); |
||||
|
let currentDate = moment().format("YYYY-MM-DD"); |
||||
|
let data = { |
||||
searchType: 1, |
searchType: 1, |
||||
facilityIds: [], |
facilityId: this.facilityIds, |
||||
facilityTableData: [], |
date: [currentMonth + "-01", currentDate], |
||||
searchFormList: [ |
}; |
||||
{ |
this.getSelectTollStation(data); |
||||
label: "查询条件:", |
|
||||
key: "searchType", |
|
||||
required: true, |
|
||||
isAlone: true, |
|
||||
type: "RadioGroup", |
|
||||
default: 1, |
|
||||
options: { |
|
||||
type: 'circle', |
|
||||
options: [ |
|
||||
{ |
|
||||
key: 1, |
|
||||
label: "站点", |
|
||||
}, |
|
||||
{ |
|
||||
key: 2, |
|
||||
label: "原因", |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
label: "事件类型:", |
|
||||
key: "controlType", |
|
||||
required: true, |
|
||||
isAlone: true, |
|
||||
type: "RadioGroup", |
|
||||
visible: data => { |
|
||||
if (data.searchType == 2) { |
|
||||
return true |
|
||||
} |
|
||||
}, |
|
||||
default: 1, |
|
||||
options: { |
|
||||
type: 'circle', |
|
||||
options: [{ |
|
||||
key: 1, |
|
||||
label: "收费站封闭", |
|
||||
}, |
|
||||
{ |
|
||||
key: 2, |
|
||||
label: "收费站限行", |
|
||||
}] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
label: "选择站点:", |
|
||||
key: "facilityId", |
|
||||
required: true, |
|
||||
type: "Select", |
|
||||
options: { |
|
||||
multiple: true, |
|
||||
options: [] |
|
||||
}, |
|
||||
visible: data => { |
|
||||
if (data.searchType == 1) { |
|
||||
return true |
|
||||
} |
|
||||
}, |
|
||||
}, |
|
||||
{ |
|
||||
label: "日期:", |
|
||||
key: "date", |
|
||||
required: true, |
|
||||
type: "datePicker", |
|
||||
options: { |
|
||||
pickerOptions: { |
|
||||
disabledDate(time) { |
|
||||
return time.getTime() > Date.now(); |
|
||||
}, |
|
||||
}, |
|
||||
valueFormat: "yyyy-MM-dd", |
|
||||
type: "daterange" |
|
||||
} |
|
||||
}, |
|
||||
], |
|
||||
} |
} |
||||
|
}); |
||||
}, |
}, |
||||
computed: { |
handleSearch(data) { |
||||
modelVisible: { |
this.getSelectTollStation(data); |
||||
get() { |
}, |
||||
return this.visible; |
arraySpanMethod({ row, column, rowIndex, columnIndex }) { |
||||
}, |
if (this.searchType == 2) { |
||||
set(val) { |
if (!row.causeTypeName) { |
||||
this.$emit('update:value', val) |
if (columnIndex === 0) { |
||||
|
return [1, 2]; |
||||
|
} else if (columnIndex === 1) { |
||||
|
return [0, 0]; |
||||
|
} |
||||
|
} |
||||
|
if (row.controlCauseName === "恶劣天气") { |
||||
|
if (columnIndex === 0) { |
||||
|
console.log(this.weatherNum.length); |
||||
|
if (rowIndex === 0) { |
||||
|
return [this.weatherNum.length, 1]; |
||||
|
} else if (rowIndex <= this.weatherNum.length) { |
||||
|
return [0, 0]; |
||||
} |
} |
||||
|
// if (rowIndex === 2) { |
||||
|
// return [7, 1]; |
||||
|
// } |
||||
|
// else if (rowIndex === 3) { |
||||
|
// return [0, 0]; |
||||
|
// } else if (rowIndex === 4) { |
||||
|
// return [0, 0]; |
||||
|
// } |
||||
|
// else if (rowIndex === 5) { |
||||
|
// return [0, 0]; |
||||
|
// } |
||||
|
// else if (rowIndex === 6) { |
||||
|
// return [0, 0]; |
||||
|
// } |
||||
|
// else if (rowIndex === 7) { |
||||
|
// return [0, 0]; |
||||
|
// } |
||||
|
// else if (rowIndex === 8) { |
||||
|
// return [0, 0]; |
||||
|
// } |
||||
|
} |
||||
|
// this.weatherNum = 0 |
||||
} |
} |
||||
|
} |
||||
}, |
}, |
||||
|
getSelectTollStation(data) { |
||||
methods: { |
let startTime = ""; |
||||
getFacilityList() { |
let endTime = ""; |
||||
Promise.allSettled([ |
if (data) { |
||||
// 查询收费站 |
startTime = data.date[0] + " 00:00:00"; |
||||
request({ |
endTime = data.date[1] + " 23:59:59"; |
||||
url: `/business/facility/query`, |
} else { |
||||
method: "get", |
startTime = new Date("2024-01-01 11:12:21"); |
||||
}), |
startTime = new Date("2024-01-26 11:12:36"); |
||||
]) |
} |
||||
.then((res) => { |
|
||||
if (res[0].status === 'fulfilled' && res[0].value.code == 200) { |
var formData = new FormData(); |
||||
this.searchFormList[2].options.options = res[0].value.data.map(item => ({ |
this.searchType = data.searchType; |
||||
key: item.id, |
this.controlType = data.controlType; |
||||
label: item.facilityName, |
if (data.searchType == 1) { |
||||
})) |
formData.append("facilityId", data.facilityId); |
||||
this.facilityIds = res[0].value.data.map(item => item.id) |
} else { |
||||
// this.searchFormList[2].default = res[0].value.data.map(item => item.id) |
formData.append("controlType", data.controlType); |
||||
|
} |
||||
let date = moment().format('YYYY-MM-DD') |
formData.append("searchType", data.searchType); |
||||
let data = { |
formData.append("startTime", startTime); |
||||
searchType: 1, |
formData.append("endTime", endTime); |
||||
facilityId: this.facilityIds, |
let weatherData = []; |
||||
date: [date + " 00:00:00", date + " 23:59:59"] |
let otherData = []; |
||||
} |
selectTollStation(formData).then((res) => { |
||||
this.getSelectTollStation(data) |
if (data.searchType == 2) { |
||||
} |
this.weatherNum = []; |
||||
}) |
res.data.forEach((item) => { |
||||
|
if (item.causeTypeName) { |
||||
}, |
this.weatherNum.push(item.causeTypeName); |
||||
handleSearch(data) { |
weatherData.push(item); |
||||
this.getSelectTollStation(data) |
|
||||
}, |
|
||||
arraySpanMethod({ row, column, rowIndex, columnIndex }) { |
|
||||
|
|
||||
if (this.searchType == 2) { |
|
||||
|
|
||||
if (!row.causeTypeName) { |
|
||||
if (columnIndex === 0) { |
|
||||
return [1, 2]; |
|
||||
} |
|
||||
else if (columnIndex === 1) { |
|
||||
return [0, 0]; |
|
||||
} |
|
||||
}; |
|
||||
if (row.controlCauseName === '恶劣天气') { |
|
||||
if (columnIndex === 0) { |
|
||||
console.log(this.weatherNum.length) |
|
||||
if (rowIndex === 0) { |
|
||||
return [this.weatherNum.length, 1]; |
|
||||
} else if (rowIndex <= this.weatherNum.length) { |
|
||||
return [0, 0]; |
|
||||
} |
|
||||
// if (rowIndex === 2) { |
|
||||
// return [7, 1]; |
|
||||
// } |
|
||||
// else if (rowIndex === 3) { |
|
||||
// return [0, 0]; |
|
||||
// } else if (rowIndex === 4) { |
|
||||
// return [0, 0]; |
|
||||
// } |
|
||||
// else if (rowIndex === 5) { |
|
||||
// return [0, 0]; |
|
||||
// } |
|
||||
// else if (rowIndex === 6) { |
|
||||
// return [0, 0]; |
|
||||
// } |
|
||||
// else if (rowIndex === 7) { |
|
||||
// return [0, 0]; |
|
||||
// } |
|
||||
// else if (rowIndex === 8) { |
|
||||
// return [0, 0]; |
|
||||
// } |
|
||||
|
|
||||
} |
|
||||
// this.weatherNum = 0 |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
|
|
||||
}, |
|
||||
getSelectTollStation(data) { |
|
||||
let startTime = "" |
|
||||
let endTime = "" |
|
||||
if (data) { |
|
||||
startTime = data.date[0] + ' 00:00:00' |
|
||||
endTime = data.date[1] + ' 23:59:59' |
|
||||
} else { |
} else { |
||||
startTime = new Date("2024-01-01 11:12:21") |
otherData.push(item); |
||||
startTime = new Date("2024-01-26 11:12:36") |
|
||||
} |
} |
||||
|
}); |
||||
var formData = new FormData(); |
this.tableData = weatherData.concat(otherData); |
||||
this.searchType = data.searchType |
} else { |
||||
if (data.searchType == 1) { |
res.data.forEach((item) => { |
||||
formData.append("facilityId", data.facilityId); |
item.total = |
||||
} else { |
item.facilityClose + |
||||
formData.append("controlType", data.controlType); |
item.facilityRestriction + |
||||
} |
item.facilityInterval; |
||||
formData.append("searchType", data.searchType); |
}); |
||||
formData.append("startTime", startTime); |
this.facilityTableData = res.data; |
||||
formData.append("endTime", endTime); |
|
||||
let weatherData = [] |
|
||||
let otherData = [] |
|
||||
selectTollStation(formData).then((res) => { |
|
||||
if (data.searchType == 2) { |
|
||||
this.weatherNum = [] |
|
||||
res.data.forEach(item => { |
|
||||
if (item.causeTypeName) { |
|
||||
this.weatherNum.push(item.causeTypeName) |
|
||||
weatherData.push(item) |
|
||||
} else { |
|
||||
otherData.push(item) |
|
||||
} |
|
||||
}); |
|
||||
this.tableData = weatherData.concat(otherData) |
|
||||
} else { |
|
||||
res.data.forEach((item) => { |
|
||||
item.total = item.facilityClose + item.facilityRestriction + item.facilityInterval |
|
||||
}) |
|
||||
this.facilityTableData = res.data |
|
||||
|
|
||||
} |
|
||||
|
|
||||
}) |
|
||||
|
|
||||
} |
} |
||||
|
}); |
||||
}, |
}, |
||||
mounted() { |
}, |
||||
this.getFacilityList() |
mounted() { |
||||
|
this.getFacilityList(); |
||||
|
}, |
||||
} |
}; |
||||
} |
|
||||
</script> |
</script> |
||||
|
|
||||
<style lang="scss" scoped> |
<style lang="scss" scoped> |
||||
.dialog { |
.dialog { |
||||
min-height: 800px; |
min-height: 800px; |
||||
} |
} |
||||
|
|
||||
.search { |
.search { |
||||
display: flex; |
display: flex; |
||||
flex-direction: row-reverse; |
flex-direction: row-reverse; |
||||
} |
} |
||||
|
|
||||
::v-deep .is-scrolling-none { |
::v-deep .is-scrolling-none { |
||||
background: #0B6581; |
background: #0b6581; |
||||
|
|
||||
} |
} |
||||
|
|
||||
::v-deep .el-table__empty-text { |
::v-deep .el-table__empty-text { |
||||
color: #3AE0F8; |
color: #3ae0f8; |
||||
} |
} |
||||
|
|
||||
.StatsDetail { |
.StatsDetail { |
||||
// height: 770px; |
// height: 770px; |
||||
margin: 20px 0; |
margin: 20px 0; |
||||
width: 100%; |
width: 100%; |
||||
display: flex; |
display: flex; |
||||
gap: 5px; |
gap: 5px; |
||||
} |
} |
||||
|
|
||||
.el-table { |
.el-table { |
||||
border: 1px solid #07AEC6; |
border: 1px solid #07aec6; |
||||
background: #0B6581; |
background: #0b6581; |
||||
} |
} |
||||
|
|
||||
::v-deep .el-table .el-table__header-wrapper th, |
::v-deep .el-table .el-table__header-wrapper th, |
||||
.el-table .el-table__fixed-header-wrapper th { |
.el-table .el-table__fixed-header-wrapper th { |
||||
background: #0B6581; |
background: #0b6581; |
||||
border: 1px solid #07AEC6; |
border: 1px solid #07aec6; |
||||
} |
} |
||||
|
|
||||
::v-deep .el-table th.el-table__cell>.cell { |
::v-deep .el-table th.el-table__cell > .cell { |
||||
color: #3DE8FF; |
color: #3de8ff; |
||||
} |
} |
||||
|
|
||||
::v-deep .el-table thead.is-group th.el-table__cell { |
::v-deep .el-table thead.is-group th.el-table__cell { |
||||
background: #0B6581; |
background: #0b6581; |
||||
border: 1px solid #07AEC6; |
border: 1px solid #07aec6; |
||||
} |
} |
||||
|
|
||||
// ::v-deep .el-table th.el-table__cell.is-leaf, |
// ::v-deep .el-table th.el-table__cell.is-leaf, |
||||
::v-deep .el-table td.el-table__cell { |
::v-deep .el-table td.el-table__cell { |
||||
border: 1px solid #07AEC6; |
border: 1px solid #07aec6; |
||||
background: #1B586D; |
background: #1b586d; |
||||
color: #fff; |
color: #fff; |
||||
} |
} |
||||
|
|
||||
::v-deep .el-table tr { |
::v-deep .el-table tr { |
||||
border: 1px solid #07AEC6; |
border: 1px solid #07aec6; |
||||
background-color: #0B6581; |
background-color: #0b6581; |
||||
} |
} |
||||
|
|
||||
::v-deep .el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell { |
::v-deep |
||||
background: #1B586D; |
.el-table--enable-row-hover |
||||
border: 1px solid #07AEC6; |
.el-table__body |
||||
|
tr:hover |
||||
|
> td.el-table__cell { |
||||
|
background: #1b586d; |
||||
|
border: 1px solid #07aec6; |
||||
} |
} |
||||
|
|
||||
::v-deep .el-table::before, |
::v-deep .el-table::before, |
||||
.el-table--group::after, |
.el-table--group::after, |
||||
.el-table--border::after { |
.el-table--border::after { |
||||
background: none; |
background: none; |
||||
} |
} |
||||
</style> |
</style> |
||||
|
|||||
@ -1,130 +1,155 @@ |
|||||
|
|
||||
/* 数据 */ |
/* 数据 */ |
||||
let nameList = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]; // 类别
|
let nameList = [ |
||||
let valueList = [800, 520, 650, 950, 420, 600, 450, 720, 303, 503, 203, 703, 903]; // 人数
|
"1月", |
||||
|
"2月", |
||||
|
"3月", |
||||
|
"4月", |
||||
|
"5月", |
||||
|
"6月", |
||||
|
"7月", |
||||
|
"8月", |
||||
|
"9月", |
||||
|
"10月", |
||||
|
"11月", |
||||
|
"12月", |
||||
|
]; // 类别
|
||||
|
let valueList = [ |
||||
|
800, 520, 650, 950, 420, 600, 450, 720, 303, 503, 203, 703, 903, |
||||
|
]; // 人数
|
||||
// var yList = ["1000", "800", "轻度拥堵", "基本畅通", "畅通"]
|
// var yList = ["1000", "800", "轻度拥堵", "基本畅通", "畅通"]
|
||||
/* 数据整合 */ |
/* 数据整合 */ |
||||
let dataList = []; |
let dataList = []; |
||||
nameList.map((item, index) => { |
nameList.map((item, index) => { |
||||
if (index === 4) { |
if (index === 4) { |
||||
dataList.push({ |
dataList.push({ |
||||
name: item, |
name: item, |
||||
value: valueList[index], |
value: valueList[index], |
||||
itemStyle: { |
itemStyle: { |
||||
color: { |
color: { |
||||
type: 'linear', |
type: "linear", |
||||
x: 0, |
x: 0, |
||||
y: 0, |
y: 0, |
||||
x2: 0, |
x2: 0, |
||||
y2: 1, |
y2: 1, |
||||
colorStops: [{ |
colorStops: [ |
||||
offset: 0, color: '#FFB904' // 0% 处的颜色
|
{ |
||||
}, { |
offset: 0, |
||||
offset: 1, color: '#FF6969' // 100% 处的颜色
|
color: "#FFB904", // 0% 处的颜色
|
||||
}], |
|
||||
global: false // 缺省为 false
|
|
||||
}, |
}, |
||||
borderRadius: 6 |
{ |
||||
}, |
offset: 1, |
||||
label: { show: false } |
color: "#FF6969", // 100% 处的颜色
|
||||
}) |
}, |
||||
} else { |
], |
||||
dataList.push({ |
global: false, // 缺省为 false
|
||||
name: item, |
}, |
||||
value: valueList[index], |
borderRadius: 6, |
||||
itemStyle: { |
|
||||
borderRadius: 6 |
|
||||
} |
|
||||
}) |
|
||||
} |
|
||||
}) |
|
||||
|
|
||||
var options = { |
|
||||
grid: { |
|
||||
top: '7%',//上边距
|
|
||||
right: '0',//右边距
|
|
||||
left: '0',//左边距
|
|
||||
bottom: "2%",//下边距
|
|
||||
containLabel: true, |
|
||||
}, |
|
||||
tooltip: { |
|
||||
|
|
||||
}, |
|
||||
xAxis: { |
|
||||
type: 'category', |
|
||||
data: nameList, |
|
||||
axisTick: { |
|
||||
show: false //隐藏X轴刻度
|
|
||||
}, |
}, |
||||
axisLine: { |
label: { show: false }, |
||||
lineStyle: { |
}); |
||||
color: "rgba(49, 217, 255, 0.8)" |
} else { |
||||
} |
dataList.push({ |
||||
|
name: item, |
||||
|
value: valueList[index], |
||||
|
itemStyle: { |
||||
|
borderRadius: 6, |
||||
}, |
}, |
||||
axisLabel: { |
}); |
||||
show: true, |
} |
||||
color: '#B6E6FF', |
}); |
||||
fontSize: 8, |
|
||||
fontFamily: 'Source Han Sans CN-Regular', |
var options = { |
||||
|
grid: { |
||||
|
top: "7%", //上边距
|
||||
|
right: "0", //右边距
|
||||
|
left: "0", //左边距
|
||||
|
bottom: "2%", //下边距
|
||||
|
containLabel: true, |
||||
|
}, |
||||
|
tooltip: {}, |
||||
|
xAxis: { |
||||
|
type: "category", |
||||
|
data: [], |
||||
|
axisTick: { |
||||
|
show: false, //隐藏X轴刻度
|
||||
|
}, |
||||
|
axisLine: { |
||||
|
lineStyle: { |
||||
|
color: "rgba(49, 217, 255, 0.8)", |
||||
}, |
}, |
||||
}, |
}, |
||||
yAxis: [{ |
axisLabel: { |
||||
type: 'value', |
show: true, |
||||
|
color: "#fff", |
||||
|
fontSize: "10px", |
||||
|
fontFamily: "Source Han Sans CN-Regular", |
||||
|
}, |
||||
|
}, |
||||
|
yAxis: [ |
||||
|
{ |
||||
|
type: "value", |
||||
name: "", |
name: "", |
||||
splitNumber: 5, |
splitNumber: 5, |
||||
nameTextStyle: { |
nameTextStyle: { |
||||
color: '#B6E6FF', |
color: "#B6E6FF", |
||||
fontSize: 13, |
fontSize: 10, |
||||
fontFamily: 'Source Han Sans CN-Regular', |
fontFamily: "Source Han Sans CN-Regular", |
||||
align: "left", |
align: "left", |
||||
verticalAlign: "center", |
verticalAlign: "center", |
||||
}, |
}, |
||||
axisLabel: { |
axisLabel: { |
||||
fontSize: 13, |
fontSize: "10px", |
||||
color: '#B6E6FF', |
color: "#fff", |
||||
fontFamily: 'HarmonyOS Sans-Regular', |
fontFamily: "HarmonyOS Sans-Regular", |
||||
// formatter:function(value,index){
|
// formatter:function(value,index){
|
||||
// return yList[index]
|
// return yList[index]
|
||||
// }
|
// }
|
||||
}, |
}, |
||||
axisLine: { |
axisLine: { |
||||
show: false, |
show: false, |
||||
}, |
}, |
||||
axisTick: { |
axisTick: { |
||||
show: false |
show: false, |
||||
}, |
}, |
||||
splitLine: { |
splitLine: { |
||||
lineStyle: { |
lineStyle: { |
||||
color: 'rgba(49, 217, 255, 0.5)', |
color: "rgba(49, 217, 255, 0.5)", |
||||
} |
}, |
||||
}, |
}, |
||||
}], |
}, |
||||
series: [{ |
], |
||||
type: 'bar', |
series: [ |
||||
data: dataList, |
{ |
||||
|
type: "bar", |
||||
|
data: [], |
||||
z: 4, |
z: 4, |
||||
itemStyle: { |
itemStyle: { |
||||
color: { |
color: { |
||||
type: 'linear', |
type: "linear", |
||||
x: 0, |
x: 0, |
||||
y: 0, |
y: 0, |
||||
x2: 0, |
x2: 0, |
||||
y2: 1, |
y2: 1, |
||||
colorStops: [{ |
colorStops: [ |
||||
offset: 0, color: '#06D7B1' // 0% 处的颜色
|
{ |
||||
}, { |
offset: 0, |
||||
offset: 1, color: '#80F1BB' // 100% 处的颜色
|
color: "#06D7B1", // 0% 处的颜色
|
||||
}], |
}, |
||||
global: false // 缺省为 false
|
{ |
||||
}, |
offset: 1, |
||||
borderRadius: [4, 4, 0, 0] |
color: "#80F1BB", // 100% 处的颜色
|
||||
|
}, |
||||
|
], |
||||
|
global: false, // 缺省为 false
|
||||
|
}, |
||||
|
borderRadius: [4, 4, 0, 0], |
||||
}, |
}, |
||||
barWidth: 10, |
barWidth: 10, |
||||
label: { |
label: { |
||||
show: false, |
show: false, |
||||
} |
}, |
||||
}, |
}, |
||||
] |
], |
||||
} |
}; |
||||
|
|
||||
export default options; |
export default options; |
||||
|
|||||
@ -1,203 +1,225 @@ |
|||||
|
|
||||
import * as echarts from "echarts"; |
import * as echarts from "echarts"; |
||||
let color = ['#4278F8F9', 'transparent','#5372C4F9', 'transparent', '#0046FFF9', 'transparent','#FB9434F9', 'transparent','#854101F9', 'transparent', '#05E599F9', 'transparent','#219F73F9', 'transparent','#7CEDD5F9', 'transparent',]; |
let color = [ |
||||
let colorend = ['#4278F800', 'transparent', '#5372C400', 'transparent','#0046FF00', 'transparent', '#FB943400', 'transparent','#85410100', 'transparent','#05E59900', 'transparent','#219F7300', 'transparent','#7CEDD500', 'transparent',]; |
"#4278F8F9", |
||||
|
"#5372C4F9", |
||||
|
"#0046FFF9", |
||||
|
"#FB9434F9", |
||||
|
"#854101F9", |
||||
|
"#05E599F9", |
||||
|
"#219F73F9", |
||||
|
"#7CEDD5F9", |
||||
|
]; |
||||
|
let colorend = [ |
||||
|
"#4278F800", |
||||
|
"#5372C400", |
||||
|
"#0046FF00", |
||||
|
"#FB943400", |
||||
|
"#85410100", |
||||
|
"#05E59900", |
||||
|
"#219F7300", |
||||
|
"#7CEDD500", |
||||
|
]; |
||||
const datas = [ |
const datas = [ |
||||
{ |
{ |
||||
name: '客1', |
name: "客1", |
||||
// num:''
|
// num:''
|
||||
value: 13456, |
value: 13456, |
||||
}, |
}, |
||||
{ |
{ |
||||
name: '客2', |
name: "客2", |
||||
value: 13456, |
value: 13456, |
||||
}, |
}, |
||||
{ |
{ |
||||
name: '客3', |
name: "客3", |
||||
value: 13456, |
value: 13456, |
||||
}, |
}, |
||||
{ |
{ |
||||
name: '专1', |
name: "专1", |
||||
// num:''
|
// num:''
|
||||
value: 13456, |
value: 13456, |
||||
}, |
}, |
||||
{ |
{ |
||||
name: '专2', |
name: "专2", |
||||
value: 13456, |
value: 13456, |
||||
}, |
}, |
||||
{ |
{ |
||||
name: '专3', |
name: "专3", |
||||
value: 13456, |
value: 13456, |
||||
}, |
}, |
||||
{ |
{ |
||||
name: '货1', |
name: "货1", |
||||
value: 13456, |
value: 13456, |
||||
}, |
}, |
||||
{ |
{ |
||||
name: '货2', |
name: "货2", |
||||
value: 13456, |
value: 13456, |
||||
}, |
}, |
||||
]; |
]; |
||||
|
|
||||
let sum = 0; |
let sum = 0; |
||||
for (var i of datas) { |
for (var i of datas) { |
||||
sum += i.value; |
sum += i.value; |
||||
} |
} |
||||
|
|
||||
var options = { |
var options = { |
||||
tooltip: { |
tooltip: { |
||||
show:true, |
show: true, |
||||
trigger: 'item', |
// trigger: "item",
|
||||
formatter: '{a} <br/>{b}: {c} ({d}%)', |
// formatter: "{a} <br/>{b}: {c} ({d}%)",
|
||||
backgroundColor:"#ffffff", |
// backgroundColor: "#ffffff",
|
||||
textStyle:{ |
// textStyle: {
|
||||
color:"#666" |
// color: "#666",
|
||||
} |
// },
|
||||
|
}, |
||||
|
legend: { |
||||
|
orient: "vertical", |
||||
|
right: 40, |
||||
|
top: 50, |
||||
|
formatter: (name) => { |
||||
|
let res = datas.filter((v) => v.name === name); |
||||
|
let str = ""; |
||||
|
str = |
||||
|
"{name1|" + |
||||
|
res[0].name + |
||||
|
"}{name2|" + |
||||
|
res[0].value + |
||||
|
"}辆" + |
||||
|
"{name2|" + |
||||
|
(res[0].value / sum) * 100 + |
||||
|
"}%"; |
||||
|
return str; |
||||
}, |
}, |
||||
legend: { |
icon: "circle", |
||||
orient: 'vertical', |
itemWidth: 10, |
||||
right: 40, |
itemHeight: 10, |
||||
top:50, |
itemGap: 20, |
||||
formatter:(name)=>{ |
borderRadius: 50, |
||||
let res = datas.filter(v => v.name === name); |
itemStyle: {}, |
||||
let str = '' |
textStyle: { |
||||
str = '{name1|' + res[0].name + '}{name2|' + res[0].value + '}辆'+ '{name2|' + res[0].value/sum * 100 + '}%' |
rich: { |
||||
return str |
background: { |
||||
|
background: "#DEDEDE", |
||||
|
fontSize: 14, |
||||
|
align: "left", |
||||
|
padding: [0, 10, 20, 0], |
||||
}, |
}, |
||||
icon: 'circle', |
name1: { |
||||
itemWidth:10, |
color: "#fff", |
||||
itemHeight:10, |
fontSize: 14, |
||||
itemGap: 20, |
Width: 12, |
||||
borderRadius:50, |
align: "left", |
||||
itemStyle:{ |
padding: [0, 0, 0, 10], |
||||
|
|
||||
}, |
}, |
||||
textStyle:{ |
name2: { |
||||
rich:{ |
color: "#37E7FF", |
||||
background: { |
fontSize: 14, |
||||
background: '#DEDEDE', |
align: "left", |
||||
fontSize: 14, |
padding: [0, 0, 0, 10], |
||||
align: 'left', |
}, |
||||
padding: [0, 10, 20, 0], |
value: { |
||||
}, |
color: "#ccc", |
||||
name1: { |
fontSize: 14, |
||||
color: '#fff', |
align: "left", |
||||
fontSize: 14, |
}, |
||||
Width: 12, |
title: { |
||||
align: 'left', |
// color: '#fff',
|
||||
padding: [0, 0, 0, 10], |
color: "#C60020", |
||||
}, |
fontWeight: "bold", |
||||
name2: { |
fontSize: 40, |
||||
color: '#37E7FF', |
|
||||
fontSize: 14, |
|
||||
align: 'left', |
|
||||
padding: [0, 0, 0, 10], |
|
||||
}, |
|
||||
value: { |
|
||||
color: '#ccc', |
|
||||
fontSize: 14, |
|
||||
align: 'left', |
|
||||
}, |
|
||||
title: { |
|
||||
// color: '#fff',
|
|
||||
color: "#C60020", |
|
||||
fontWeight:'bold', |
|
||||
fontSize: 40, |
|
||||
} |
|
||||
}, |
|
||||
color:"#fff", |
|
||||
}, |
}, |
||||
data: [ |
}, |
||||
{ |
color: "#fff", |
||||
name:'客1', |
|
||||
backgroundColor:'#5CC5FF', |
|
||||
}, '客2', '客3', '货1', |
|
||||
'货2', '专1', '专2', '专3'] |
|
||||
}, |
}, |
||||
series: [ |
data: [ |
||||
{ |
{ |
||||
name: '', |
name: "客1", |
||||
type: 'pie', |
backgroundColor: "#5CC5FF", |
||||
selectedMode: 'single', |
}, |
||||
radius: [0, '50%'], |
"客2", |
||||
center:['25%','50%'], |
"客3", |
||||
label: { |
"货1", |
||||
normal: { |
"货2", |
||||
position: 'inner', |
"专1", |
||||
show: true, |
"专2", |
||||
color:'#fff', |
"专3", |
||||
fontSize:14, |
], |
||||
formatter: '{b}\n{c}辆', |
}, |
||||
} |
series: [ |
||||
}, |
{ |
||||
data: [ |
name: "", |
||||
{value: 2290, name: '客车\n'}, |
type: "pie", |
||||
{value: 1020, name: '货车\n'}, |
selectedMode: "single", |
||||
{value: 3000, name: '专项车\n'}, |
radius: [0, "50%"], |
||||
], |
center: ["25%", "50%"], |
||||
color:['#708FFF','#FB9434','#219F73'] |
label: { |
||||
|
normal: { |
||||
|
position: "inner", |
||||
|
show: true, |
||||
|
color: "#fff", |
||||
|
fontSize: 14, |
||||
|
formatter: "{b}\n{c}辆", |
||||
}, |
}, |
||||
{ |
}, |
||||
name: '', |
data: [ |
||||
type: 'pie', |
{ value: 2290, name: "客车\n" }, |
||||
radius: ['60%', '70%'], |
{ value: 1020, name: "货车\n" }, |
||||
center:['25%','50%'], |
{ value: 3000, name: "专项车\n" }, |
||||
label: { |
], |
||||
position: 'inner', |
color: ["#708FFF", "#FB9434", "#219F73"], |
||||
show: false |
}, |
||||
}, |
{ |
||||
data: [ |
name: "", |
||||
{value: 13456, name: '客1'}, |
type: "pie", |
||||
{value: 2000, name: ''}, |
radius: ["60%", "70%"], |
||||
{value: 13456, name: '客2'}, |
center: ["25%", "50%"], |
||||
{value: 2000, name: ''}, |
label: { |
||||
{value: 13456, name: '客3'}, |
position: "inner", |
||||
{value: 2000, name: ''}, |
show: false, |
||||
{value: 13456, name: '货1'}, |
}, |
||||
{value: 2000, name: ''}, |
data: [ |
||||
{value: 13456, name: '货2'}, |
{ value: 13456, name: "客1" }, |
||||
{value: 2000, name: ''}, |
{ value: 13456, name: "客2" }, |
||||
{value: 13456, name: '专1'}, |
{ value: 13456, name: "客3" }, |
||||
{value: 2000, name: ''}, |
{ value: 13456, name: "货1" }, |
||||
{value: 13456, name: '专2'}, |
{ value: 13456, name: "货2" }, |
||||
{value: 2000, name: ''}, |
{ value: 13456, name: "专1" }, |
||||
{value: 13456, name: '专3'}, |
{ value: 13456, name: "专2" }, |
||||
{value: 2000, name: ''}, |
{ value: 13456, name: "专3" }, |
||||
], |
], |
||||
itemStyle: { |
itemStyle: { |
||||
normal: { |
normal: { |
||||
borderRadius: "5", |
borderRadius: "5", |
||||
borderWidth:0, |
borderWidth: 2, |
||||
borderType:"solid", |
borderType: "solid", |
||||
borderCap:"round", |
borderCap: "round", |
||||
borderJoin:"round", |
borderJoin: "round", |
||||
borderColor:"#064258", |
borderColor: "#064258", |
||||
borderMiterLimit:"20", |
borderMiterLimit: "20", |
||||
color: function(params) { |
color: function (params) { |
||||
return { |
return { |
||||
type: 'linear', |
type: "linear", |
||||
x: 0, |
x: 0, |
||||
y: 0, |
y: 0, |
||||
x2: 1, |
x2: 1, |
||||
y2: 1, |
y2: 1, |
||||
colorStops: [{ |
colorStops: [ |
||||
offset: 0, |
{ |
||||
color: color[params.dataIndex] // 0% 处的颜色
|
offset: 0, |
||||
}, |
color: color[params.dataIndex], // 0% 处的颜色
|
||||
{ |
|
||||
offset: 1, |
|
||||
color: colorend[params.dataIndex] // 100% 处的颜色
|
|
||||
} |
|
||||
], |
|
||||
globalCoord: false // 缺省为 false
|
|
||||
} |
|
||||
} |
|
||||
}, |
}, |
||||
}, |
{ |
||||
color:['#009688','#63BA79','#FFB800','#F7ED46','#666666'] |
offset: 1, |
||||
} |
color: colorend[params.dataIndex], // 100% 处的颜色
|
||||
] |
}, |
||||
} |
], |
||||
|
globalCoord: false, // 缺省为 false
|
||||
|
}; |
||||
|
}, |
||||
|
}, |
||||
|
}, |
||||
|
// color: ["#009688", "#63BA79", "#FFB800", "#F7ED46", "#666666"],
|
||||
|
}, |
||||
|
], |
||||
|
}; |
||||
|
|
||||
export default options; |
export default options; |
||||
|
|||||
@ -1,188 +1,256 @@ |
|||||
<template> |
<template> |
||||
<div class='heightway'> |
<div class="heightway"> |
||||
<WgtTitle :title="'交通路段状态'"></WgtTitle> |
<WgtTitle :title="'交通路段状态'"></WgtTitle> |
||||
<div class="board"> |
<div class="board"> |
||||
<div class="searchPanel"> |
<div class="searchPanel"> |
||||
<div >起始桩号:k</div> |
<div>起始桩号:k</div> |
||||
<el-input class="inputZh" v-model="start"></el-input> |
<el-input class="inputZh" v-model="start" placeholder="55"></el-input> |
||||
<el-input class="inputZh inputJl" v-model="start1"></el-input> |
<span>+</span> |
||||
<div >结束桩号:k</div> |
<el-input |
||||
<el-input class="inputZh" v-model="start2"></el-input> |
class="inputZh inputJl" |
||||
<el-input class="inputZh inputJl" v-model="start3"></el-input> |
v-model="start1" |
||||
<div >路段方向:</div> |
placeholder="378" |
||||
<el-select v-model="area" class="selectRoad" placeholder="请选择"> |
></el-input> |
||||
<el-option |
<div>结束桩号:k</div> |
||||
v-for="item in areaOptions" |
<el-input class="inputZh" v-model="start2" placeholder="208"></el-input> |
||||
:key="item.value" |
<span>+</span> |
||||
:label="item.label" |
<el-input |
||||
:value="item.value"> |
class="inputZh inputJl" |
||||
</el-option> |
v-model="start3" |
||||
</el-select> |
placeholder="153" |
||||
<el-button type="primary" class="btnSearch" @click="onSubmit">搜索</el-button> |
></el-input> |
||||
<el-button class="btnReset">重置</el-button> |
<div>路段方向:</div> |
||||
|
<el-select v-model="area" class="selectRoad" placeholder="请选择"> |
||||
|
<el-option |
||||
|
v-for="item in areaOptions" |
||||
|
:key="item.value" |
||||
|
:label="item.label" |
||||
|
:value="item.value" |
||||
|
> |
||||
|
</el-option> |
||||
|
</el-select> |
||||
|
<el-button type="primary" class="btnSearch" @click="onSubmit" |
||||
|
>搜索</el-button |
||||
|
> |
||||
|
<el-button class="btnReset">重置</el-button> |
||||
|
</div> |
||||
|
<div class="tblResult"> |
||||
|
<div class="tblTd"> |
||||
|
<div>路段名称</div> |
||||
|
<div>方向</div> |
||||
|
<div>状态</div> |
||||
|
<div>平均车速</div> |
||||
|
<div>总车流量</div> |
||||
</div> |
</div> |
||||
<div class="tblResult"> |
<div |
||||
<div class="tblTd"> |
:class="'tblTd ' + (index % 2 === 0 ? 'tblTwo' : '')" |
||||
<div>路段名称</div> |
v-for="(item, index) of list" |
||||
<div>方向</div> |
> |
||||
<div>状态</div> |
<div>{{ item.name }}</div> |
||||
<div>平均车速</div> |
<div>{{ item.direction }}</div> |
||||
<div>总车流量</div> |
<div style="color: #00ebc1">{{ item.state }}</div> |
||||
</div> |
<div>{{ item.speed }}</div> |
||||
<div :class="'tblTd ' + (index%2===0?'tblTwo':'')" v-for="(item,index) of list"> |
<div>{{ item.follow }}</div> |
||||
<div>{{ item.name }}</div> |
|
||||
<div>{{ item.direction }}</div> |
|
||||
<div style="color:#00EBC1">{{ item.state }}</div> |
|
||||
<div>{{ item.speed }}</div> |
|
||||
<div>{{ item.follow }}</div> |
|
||||
</div> |
|
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
|
</div> |
||||
</div> |
</div> |
||||
</template> |
</template> |
||||
|
|
||||
<script> |
<script> |
||||
|
import WgtTitle from "../../../widgets/title"; |
||||
import WgtTitle from '../../../widgets/title' |
|
||||
export default { |
export default { |
||||
name: 'Heightway', |
name: "Heightway", |
||||
components: { |
components: { |
||||
WgtTitle |
WgtTitle, |
||||
}, |
}, |
||||
data() { |
data() { |
||||
return { |
return { |
||||
start:'', |
start: "", |
||||
start1:'', |
start1: "", |
||||
start2:'', |
start2: "", |
||||
start3:'', |
start3: "", |
||||
areaOptions: [{ |
areaOptions: [ |
||||
value: '济南', |
{ |
||||
label: '济南' |
value: "济南", |
||||
}, { |
label: "济南", |
||||
value: '菏泽', |
}, |
||||
label: '菏泽' |
{ |
||||
}], |
value: "菏泽", |
||||
area: '济南', |
label: "菏泽", |
||||
list:[ |
}, |
||||
{name:'大学城-长清', direction:'济南方向', state:"正常",speed:'108.14km/h', follow:'161'}, |
], |
||||
{name:'大学城-长清', direction:'济南方向', state:"正常",speed:'108.14km/h', follow:'161'}, |
area: "济南", |
||||
{name:'大学城-长清', direction:'济南方向', state:"正常",speed:'108.14km/h', follow:'161'}, |
list: [ |
||||
{name:'大学城-长清', direction:'济南方向', state:"正常",speed:'108.14km/h', follow:'161'}, |
{ |
||||
{name:'大学城-长清', direction:'济南方向', state:"正常",speed:'108.14km/h', follow:'161'}, |
name: "大学城-长清", |
||||
{name:'大学城-长清', direction:'济南方向', state:"正常",speed:'108.14km/h', follow:'161'} |
direction: "济南方向", |
||||
] |
state: "正常", |
||||
|
speed: "108.14km/h", |
||||
} |
follow: "161", |
||||
|
}, |
||||
|
{ |
||||
|
name: "大学城-长清", |
||||
|
direction: "济南方向", |
||||
|
state: "正常", |
||||
|
speed: "108.14km/h", |
||||
|
follow: "161", |
||||
|
}, |
||||
|
{ |
||||
|
name: "大学城-长清", |
||||
|
direction: "济南方向", |
||||
|
state: "正常", |
||||
|
speed: "108.14km/h", |
||||
|
follow: "161", |
||||
|
}, |
||||
|
{ |
||||
|
name: "大学城-长清", |
||||
|
direction: "济南方向", |
||||
|
state: "正常", |
||||
|
speed: "108.14km/h", |
||||
|
follow: "161", |
||||
|
}, |
||||
|
{ |
||||
|
name: "大学城-长清", |
||||
|
direction: "济南方向", |
||||
|
state: "正常", |
||||
|
speed: "108.14km/h", |
||||
|
follow: "161", |
||||
|
}, |
||||
|
{ |
||||
|
name: "大学城-长清", |
||||
|
direction: "济南方向", |
||||
|
state: "正常", |
||||
|
speed: "108.14km/h", |
||||
|
follow: "161", |
||||
|
}, |
||||
|
], |
||||
|
}; |
||||
}, |
}, |
||||
|
|
||||
created() { |
created() {}, |
||||
|
|
||||
}, |
|
||||
methods: { |
methods: { |
||||
onSubmit() { |
onSubmit() { |
||||
console.log('submit!'); |
console.log("submit!"); |
||||
} |
}, |
||||
} |
}, |
||||
} |
}; |
||||
</script> |
</script> |
||||
|
|
||||
<style lang='scss' scoped> |
<style lang="scss" scoped> |
||||
|
|
||||
|
|
||||
.el-input__inner { |
.el-input__inner { |
||||
background-color: transparent !important; |
background-color: transparent !important; |
||||
|
font-size: 12px; |
||||
|
} |
||||
|
::v-deep .el-input__inner { |
||||
|
padding: 0 10px; |
||||
|
} |
||||
|
::v-deep .el-input__inner::placeholder { |
||||
|
color: #9f9f9f; |
||||
|
font-size: 12px; |
||||
} |
} |
||||
.heightway { |
.heightway { |
||||
width: 100%; |
width: 100%; |
||||
.board{ |
.board { |
||||
height: 400px; |
height: 400px; |
||||
width: 100%; |
width: 100%; |
||||
background: linear-gradient(180deg, rgba(6,66,88,0.2) 0%, #064258 100%); |
background: linear-gradient(180deg, rgba(6, 66, 88, 0.2) 0%, #064258 100%); |
||||
border-radius: 5px 5px 5px 5px; |
border-radius: 5px 5px 5px 5px; |
||||
opacity: 1; |
opacity: 1; |
||||
border: 1px solid; |
border: 1px solid; |
||||
border-image: linear-gradient(360deg, rgba(55, 231, 255,0.3), rgba(55, 231, 255, 0)) 1 1; |
border-image: linear-gradient( |
||||
|
360deg, |
||||
|
rgba(55, 231, 255, 0.3), |
||||
|
rgba(55, 231, 255, 0) |
||||
|
) |
||||
|
1 1; |
||||
display: flex; |
display: flex; |
||||
justify-content: center; |
justify-content: center; |
||||
align-items: center; |
align-items: center; |
||||
flex-direction: column; |
flex-direction: column; |
||||
padding:15px 10px; |
padding: 15px 10px; |
||||
.searchPanel{ |
.searchPanel { |
||||
display: flex; |
display: flex; |
||||
justify-content: center; |
justify-content: center; |
||||
align-items: center; |
align-items: center; |
||||
height: 40px; |
height: 40px; |
||||
width:100%; |
width: 100%; |
||||
font-size: 14px; |
font-size: 13px; |
||||
margin-bottom: 10px; |
margin-bottom: 10px; |
||||
div{ |
div { |
||||
white-space: nowrap; |
white-space: nowrap; |
||||
margin-right: 4px; |
margin-right: 4px; |
||||
} |
} |
||||
.inputZh{ |
.inputZh { |
||||
width: 47px; |
width: 60px; |
||||
::v-deep{ |
::v-deep { |
||||
.el-input__inner{ |
.el-input__inner { |
||||
background-color: #064258 !important; |
background-color: #064258 !important; |
||||
border-width: 0px !important; |
border-width: 0px !important; |
||||
|
} |
||||
} |
} |
||||
} |
} |
||||
} |
.inputJl { |
||||
.inputJl{ |
// width: 60px; |
||||
margin-left: 5px; |
margin-left: 5px; |
||||
margin-right: 10px; |
margin-right: 10px; |
||||
} |
} |
||||
.selectRoad{ |
.selectRoad { |
||||
width:87px; |
width: 87px; |
||||
::v-deep{ |
::v-deep { |
||||
.el-input__inner{ |
.el-input__inner { |
||||
background-color: #064258 !important; |
background-color: #064258 !important; |
||||
border-width: 0px !important; |
border-width: 0px !important; |
||||
|
font-size: 12px; |
||||
|
} |
||||
} |
} |
||||
} |
} |
||||
|
.btnSearch { |
||||
|
background-color: #00b3cc; |
||||
|
margin-left: 10px; |
||||
|
padding: 6px 15px; |
||||
|
font-size: 13px; |
||||
|
} |
||||
|
.btnReset { |
||||
|
background-color: transparent; |
||||
|
border-color: #00b3cc; |
||||
|
color: white; |
||||
|
padding: 6px 15px; |
||||
|
font-size: 13px; |
||||
|
} |
||||
} |
} |
||||
.btnSearch{ |
|
||||
background-color: #00B3CC; |
|
||||
margin-left: 10px; |
|
||||
} |
|
||||
.btnReset{ |
|
||||
background-color: transparent; |
|
||||
border-color: #00B3CC; |
|
||||
color: white; |
|
||||
} |
|
||||
} |
|
||||
} |
} |
||||
|
|
||||
.tblResult{ |
.tblResult { |
||||
height: 300px; |
height: 300px; |
||||
|
width: 100%; |
||||
|
.tblTd { |
||||
width: 100%; |
width: 100%; |
||||
.tblTd{ |
display: flex; |
||||
width:100%; |
justify-content: space-between; |
||||
display: flex; |
background-color: #064258; |
||||
justify-content: space-between; |
height: 42px; |
||||
background-color: #064258; |
line-height: 42px; |
||||
height: 42px; |
color: #fff; |
||||
line-height: 42px; |
div { |
||||
color: #fff; |
text-align: left; |
||||
div{ |
width: 25%; |
||||
text-align: left; |
|
||||
width: 25%; |
|
||||
} |
|
||||
} |
|
||||
.tblTd:first-child{ |
|
||||
background-color: #0d3646; |
|
||||
color: #00D1FF; |
|
||||
} |
|
||||
.tblTd>div:first-child{ |
|
||||
width: 35%; |
|
||||
margin-left: 20px; |
|
||||
} |
|
||||
.tblTd>div:last-child{ |
|
||||
text-align: center; |
|
||||
} |
|
||||
.tblTwo{ |
|
||||
background-color: transparent !important; |
|
||||
} |
} |
||||
} |
} |
||||
|
.tblTd:first-child { |
||||
|
background-color: #0d3646; |
||||
|
color: #00d1ff; |
||||
|
} |
||||
|
.tblTd > div:first-child { |
||||
|
width: 35%; |
||||
|
margin-left: 20px; |
||||
|
} |
||||
|
.tblTd > div:last-child { |
||||
|
text-align: center; |
||||
|
} |
||||
|
.tblTwo { |
||||
|
background-color: transparent !important; |
||||
|
} |
||||
|
} |
||||
} |
} |
||||
</style> |
</style> |
||||
|
|||||
@ -1,125 +1,137 @@ |
|||||
let chartIcon = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAC4jAAAuIwF4pT92AAAFw2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuMTcxYzI3ZmFiLCAyMDIyLzA4LzE2LTIyOjM1OjQxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjQuMCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMTItMjlUMTA6MTM6MTQrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIzLTEyLTI5VDEwOjQ2OjE3KzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzLTEyLTI5VDEwOjQ2OjE3KzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplYzhkN2NkNS01ZjdjLTQ5Y2ItOTgyMy1lOTM4ODViNjRjMmIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ZjE1ZWVkNDgtNDA3ZS00MDU0LTliNTMtYTllZmQ1ODE5YjVmIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZjE1ZWVkNDgtNDA3ZS00MDU0LTliNTMtYTllZmQ1ODE5YjVmIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMTVlZWQ0OC00MDdlLTQwNTQtOWI1My1hOWVmZDU4MTliNWYiIHN0RXZ0OndoZW49IjIwMjMtMTItMjlUMTA6MTM6MTQrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNC4wIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplYzhkN2NkNS01ZjdjLTQ5Y2ItOTgyMy1lOTM4ODViNjRjMmIiIHN0RXZ0OndoZW49IjIwMjMtMTItMjlUMTA6NDY6MTcrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNC4wIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PibZhN0AAAHBSURBVDiNfdTtThNREAbgZ5sCrRTaRaBqQDTR6AXaq9grJEaiKCJWaAv9ENDUH2fWLkU8yeTkZGbe885nNp/PVU9vIMMGNtHGo1BNMQoZF7k7jlkVqDewji72sI5VrIT6F64xwRecFbnJPaDeQBsv8RSdCpsS6BYzDENOcVTkLv8CBZPX2McOdrEVITYC6BpjnKOP7zjG+yI3yd5dzLNg8jbY7MW9g+2lHJUgpzgJOcRRPX7dj3C6eIaDAO+iGUCzYPERWSXU5+jXIxct5MFgN0AOsLaoi9Ul0HHkaoBOLZg0IoQNPMaTJZAqWDfytylVtol2LdishNFaKBv/AClPI3waISto1UKZoRZ39h8QFZus8laTqvEbNyEzqdQPnZ/hcyMl/BbTmpSsacg43v0wXD43+BE2V+FzjWFdmp1ZKAZheByUt91tyD4+S/00wGWAjerxOJYS2JSSngX4lrsNeREfnUg9dRG+o3JEWniDF1Lpd6U2KEdkHoyuwvkM36TmPCxy4+rQdvDKoss7FhugzM8kIjiPED8UuSH310jLYkRaUl9V18gswD7ha5Ebl77ZA4utLY1MOT4sRmKI0fJi+wM9v6Q1QC+Y6wAAAABJRU5ErkJggg==`; |
let chartIcon = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAC4jAAAuIwF4pT92AAAFw2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuMTcxYzI3ZmFiLCAyMDIyLzA4LzE2LTIyOjM1OjQxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjQuMCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMTItMjlUMTA6MTM6MTQrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIzLTEyLTI5VDEwOjQ2OjE3KzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzLTEyLTI5VDEwOjQ2OjE3KzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplYzhkN2NkNS01ZjdjLTQ5Y2ItOTgyMy1lOTM4ODViNjRjMmIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ZjE1ZWVkNDgtNDA3ZS00MDU0LTliNTMtYTllZmQ1ODE5YjVmIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZjE1ZWVkNDgtNDA3ZS00MDU0LTliNTMtYTllZmQ1ODE5YjVmIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMTVlZWQ0OC00MDdlLTQwNTQtOWI1My1hOWVmZDU4MTliNWYiIHN0RXZ0OndoZW49IjIwMjMtMTItMjlUMTA6MTM6MTQrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNC4wIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplYzhkN2NkNS01ZjdjLTQ5Y2ItOTgyMy1lOTM4ODViNjRjMmIiIHN0RXZ0OndoZW49IjIwMjMtMTItMjlUMTA6NDY6MTcrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNC4wIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PibZhN0AAAHBSURBVDiNfdTtThNREAbgZ5sCrRTaRaBqQDTR6AXaq9grJEaiKCJWaAv9ENDUH2fWLkU8yeTkZGbe885nNp/PVU9vIMMGNtHGo1BNMQoZF7k7jlkVqDewji72sI5VrIT6F64xwRecFbnJPaDeQBsv8RSdCpsS6BYzDENOcVTkLv8CBZPX2McOdrEVITYC6BpjnKOP7zjG+yI3yd5dzLNg8jbY7MW9g+2lHJUgpzgJOcRRPX7dj3C6eIaDAO+iGUCzYPERWSXU5+jXIxct5MFgN0AOsLaoi9Ul0HHkaoBOLZg0IoQNPMaTJZAqWDfytylVtol2LdishNFaKBv/AClPI3waISto1UKZoRZ39h8QFZus8laTqvEbNyEzqdQPnZ/hcyMl/BbTmpSsacg43v0wXD43+BE2V+FzjWFdmp1ZKAZheByUt91tyD4+S/00wGWAjerxOJYS2JSSngX4lrsNeREfnUg9dRG+o3JEWniDF1Lpd6U2KEdkHoyuwvkM36TmPCxy4+rQdvDKoss7FhugzM8kIjiPED8UuSH310jLYkRaUl9V18gswD7ha5Ebl77ZA4utLY1MOT4sRmKI0fJi+wM9v6Q1QC+Y6wAAAABJRU5ErkJggg==`; |
||||
let xdata = { |
let xdata = { |
||||
value: ['大学城-长清', '长清-孝里', '孝里-平阴北', '平阴北-平阴', '平阴-东平', '东平-梁山东', '梁山东-嘉祥'] |
value: [ |
||||
|
"大学城-长清", |
||||
|
"长清-孝里", |
||||
|
"孝里-平阴北", |
||||
|
"平阴北-平阴", |
||||
|
"平阴-东平", |
||||
|
"东平-梁山东", |
||||
|
"梁山东-嘉祥", |
||||
|
"平阴2-东平", |
||||
|
"东平2-梁山东", |
||||
|
"梁山东2-嘉祥", |
||||
|
], |
||||
}; |
}; |
||||
|
let ind = -30; |
||||
let sdata = { |
let sdata = { |
||||
value: [32774, 30067, 28774, 30067, 30021, 30067, 32774] |
value: [32774, 30067, 28774, 30067, 30021, 30067, 32774, 30021, 30067, 32774], |
||||
} |
}; |
||||
|
|
||||
let dataZoomMove = { |
let dataZoomMove = { |
||||
start: 0, |
start: 0, |
||||
end: 4 |
end: 4, |
||||
} |
}; |
||||
var options = { |
var options = { |
||||
|
grid: { |
||||
grid: { |
containLabel: true, |
||||
containLabel: true, |
// 边距自行修改
|
||||
// 边距自行修改
|
bottom: "0%", |
||||
bottom: '0%', |
left: "0%", |
||||
left: '0%', |
top: "8%", |
||||
top: '20%', |
right: "10%", |
||||
right: '10%', |
}, |
||||
|
xAxis: { |
||||
|
type: "value", |
||||
|
axisLabel: { |
||||
|
show: false, |
||||
|
}, |
||||
|
axisLine: { |
||||
|
show: false, |
||||
|
}, |
||||
|
axisTick: { |
||||
|
show: false, |
||||
|
}, |
||||
|
splitLine: { |
||||
|
show: false, |
||||
|
}, |
||||
|
}, |
||||
|
yAxis: [ |
||||
|
{ |
||||
|
type: "category", |
||||
|
data: xdata.value, |
||||
|
inverse: true, |
||||
|
axisLabel: { |
||||
|
fontSize: "14px", |
||||
|
inside: true, |
||||
|
verticalAlign: "bottom", |
||||
|
color: "#fff", |
||||
|
padding: 10, |
||||
|
margin: -5, |
||||
|
formatter: function (value) { |
||||
|
let index = xdata.value.indexOf(value); |
||||
|
return `{a|Top${(ind += 1)}} {b|${value}}`; |
||||
|
}, |
||||
|
rich: { |
||||
|
a: { |
||||
|
fontSize: "10px", |
||||
|
}, |
||||
|
|
||||
|
b: { |
||||
|
fontSize: "12px", |
||||
|
padding: [0, 0, 0, 70], |
||||
|
}, |
||||
|
}, |
||||
|
}, |
||||
|
axisLine: { |
||||
|
show: false, |
||||
}, |
}, |
||||
xAxis: { |
axisTick: { |
||||
type: 'value', |
show: false, |
||||
axisLabel: { |
|
||||
show: false |
|
||||
}, |
|
||||
axisLine: { |
|
||||
show: false, |
|
||||
}, |
|
||||
axisTick: { |
|
||||
show: false, |
|
||||
}, |
|
||||
splitLine: { |
|
||||
show: false, |
|
||||
}, |
|
||||
}, |
}, |
||||
yAxis: [ |
}, |
||||
{ |
], |
||||
type: 'category', |
series: [ |
||||
data: xdata.value, |
{ |
||||
inverse: true, |
realtimeSort: true, |
||||
axisLabel: { |
data: sdata.value, |
||||
fontSize: '14px', |
type: "bar", |
||||
inside: true, |
barWidth: 8, |
||||
verticalAlign: 'bottom', |
itemStyle: { |
||||
color:'#fff', |
borderRadius: 40, |
||||
padding:10, |
color: { |
||||
margin:-5, |
type: "linear", |
||||
formatter: function (value) { |
x: 0, |
||||
let index = xdata.value.indexOf(value); |
y: 0, |
||||
return `{a|Top${index+1}} {b|${value}}` |
x2: 1, |
||||
}, |
y2: 0, |
||||
rich: { |
colorStops: [ |
||||
a: { |
{ |
||||
fontSize: '14px', |
offset: 0, |
||||
}, |
color: "#1cd0f000", // 0% 处的颜色
|
||||
|
|
||||
b: { |
|
||||
fontSize: '14px', |
|
||||
padding: [0, 0, 0, 70], |
|
||||
} |
|
||||
}, |
|
||||
}, |
}, |
||||
axisLine: { |
{ |
||||
show: false, |
offset: 1, |
||||
|
color: "#1cd0f0", // 100% 处的颜色
|
||||
}, |
}, |
||||
axisTick: { |
], |
||||
show: false, |
global: false, // 缺省为 false
|
||||
} |
}, |
||||
} |
}, |
||||
], |
label: { |
||||
series: [ |
show: true, |
||||
{ |
position: "right", |
||||
data: sdata.value, |
distance: -10, |
||||
type: 'bar', |
data: sdata, |
||||
barWidth: 8, |
color: "#fff", |
||||
itemStyle: { |
formatter: (c) => { |
||||
borderRadius: 40, |
return `{a|}{b|${c.value}辆}`; |
||||
color: { |
}, |
||||
type: 'linear', |
rich: { |
||||
x: 0, |
a: { |
||||
y: 0, |
widht: 20, |
||||
x2: 1, |
height: 20, |
||||
y2: 0, |
backgroundColor: { |
||||
colorStops: [ |
image: chartIcon, |
||||
{ |
|
||||
offset: 0, |
|
||||
color: '#1cd0f000', // 0% 处的颜色
|
|
||||
}, |
|
||||
{ |
|
||||
offset: 1, |
|
||||
color: '#1cd0f0', // 100% 处的颜色
|
|
||||
}, |
|
||||
], |
|
||||
global: false, // 缺省为 false
|
|
||||
} |
|
||||
}, |
}, |
||||
label: { |
}, |
||||
show: true, |
b: { |
||||
position: 'right', |
padding: [0, 0, 0, 10], |
||||
distance: -10, |
}, |
||||
data: sdata, |
}, |
||||
color:'#fff', |
}, |
||||
formatter: (c) => { |
}, |
||||
return `{a|}{b|${c.value}辆}` |
], |
||||
}, |
}; |
||||
rich: { |
|
||||
a: { |
|
||||
widht: 20, |
|
||||
height: 20, |
|
||||
backgroundColor: { |
|
||||
image: chartIcon |
|
||||
}, |
|
||||
}, |
|
||||
b:{ |
|
||||
padding:[0,0,0,10] |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
|
|
||||
export default options; |
export default options; |
||||
|
|||||
Loading…
Reference in new issue