22 changed files with 514 additions and 141 deletions
Before Width: | Height: | Size: 81 KiB |
@ -0,0 +1,231 @@ |
|||||
|
<template> |
||||
|
<div class="RoadNetworkMonitoring"> |
||||
|
<!-- 搜索栏 --> |
||||
|
<div class="filter"> |
||||
|
<ButtonGradient @click="onRefreshForm" class="refresh-btn"> |
||||
|
<template #prefix> |
||||
|
<img src="./images/refresh.svg" /> |
||||
|
</template> |
||||
|
刷新 |
||||
|
</ButtonGradient> |
||||
|
|
||||
|
<InputSearch |
||||
|
ref="searchComp" |
||||
|
style="width: 500px" |
||||
|
:formList="searchFormList" |
||||
|
:formConfigOptions="{ dFormData: { eventState: '0' } }" |
||||
|
@handleSearch="handleSearch" |
||||
|
/> |
||||
|
</div> |
||||
|
|
||||
|
<!-- 内容 --> |
||||
|
<div class="body"> |
||||
|
<RoadStateCard |
||||
|
v-for="(item, index) in data" |
||||
|
:key="index" |
||||
|
:cardData="item" |
||||
|
:isShowLeft="false" |
||||
|
@firstBtnClick="firstBtnClick" |
||||
|
@lastBtnClick="lastBtnClick" |
||||
|
/> |
||||
|
</div> |
||||
|
|
||||
|
<!-- 分页 --> |
||||
|
<div class="footer"> |
||||
|
<Pagination |
||||
|
@current-change="initData" |
||||
|
@size-change="onSizeChange" |
||||
|
width="'100%'" |
||||
|
:page-sizes="[12, 16, 20, 30, 50]" |
||||
|
:page-size="searchData.pageSize" |
||||
|
:current-page.sync="searchData.pageNum" |
||||
|
layout="total, sizes, prev, pager, next" |
||||
|
:total="total" |
||||
|
> |
||||
|
</Pagination> |
||||
|
</div> |
||||
|
|
||||
|
<EventDetailDialog |
||||
|
:visible="eventDetailDialogVisible" |
||||
|
:formData="detailDialogFormData" |
||||
|
@update:value="handleClose" |
||||
|
/> |
||||
|
<EventDispatchDialog |
||||
|
:visible="eventDispatchDialogVisible" |
||||
|
@update:value="handleClose" |
||||
|
:eventId="eventId" |
||||
|
/> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import ButtonGradient from "@screen/components/Buttons/ButtonGradient.vue"; |
||||
|
import Pagination from "@screen/components/Pagination.vue"; |
||||
|
import InputSearch from "@screen/components/InputSearch/index.vue"; |
||||
|
import RoadStateCard from "@screen/components/RoadStateCard/index.vue"; |
||||
|
import EventDetailDialog from "./EventDetailDialog/index"; |
||||
|
import EventDispatchDialog from "./EventDispatchDialog/index"; |
||||
|
import { searchFormList } from "./data"; |
||||
|
import request from "@/utils/request"; |
||||
|
|
||||
|
const directionMapping = { |
||||
|
1: "菏泽方向", |
||||
|
2: "双向", |
||||
|
3: "济南方向", |
||||
|
}; |
||||
|
|
||||
|
export default { |
||||
|
name: "RoadNetworkMonitoring", |
||||
|
components: { |
||||
|
Pagination, |
||||
|
RoadStateCard, |
||||
|
InputSearch, |
||||
|
EventDispatchDialog, |
||||
|
EventDetailDialog, |
||||
|
ButtonGradient, |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
eventDetailDialogVisible: false, |
||||
|
eventDispatchDialogVisible: false, |
||||
|
searchFormList, |
||||
|
detailDialogFormData: {}, |
||||
|
total: 0, |
||||
|
data: [], |
||||
|
eventId: "0", |
||||
|
searchData: { |
||||
|
pageSize: 16, |
||||
|
pageNum: 1, |
||||
|
eventState: "0", |
||||
|
}, |
||||
|
}; |
||||
|
}, |
||||
|
created() { |
||||
|
this.initData(); |
||||
|
}, |
||||
|
methods: { |
||||
|
onRefreshForm() { |
||||
|
this.searchData.pageNum = 1; |
||||
|
this.$refs.searchComp.handleResetForm(); |
||||
|
}, |
||||
|
initData() { |
||||
|
request({ |
||||
|
// url: `/dc/system/event/dispatchEventList`, |
||||
|
url: "/dc/system/event/dispatchRecordEventList", |
||||
|
method: "get", |
||||
|
params: this.searchData, |
||||
|
}).then((result) => { |
||||
|
if (result.code != 200) return Message.error(result?.msg); |
||||
|
this.total = result.total; |
||||
|
result.rows.forEach((it) => { |
||||
|
it.stringDirection = directionMapping[it.direction] || it.direction; |
||||
|
}); |
||||
|
this.data = result.rows; |
||||
|
}); |
||||
|
}, |
||||
|
onSizeChange(pageSize) { |
||||
|
this.searchData.pageSize = pageSize; |
||||
|
this.initData(); |
||||
|
}, |
||||
|
getStateCardBind(item) { |
||||
|
const { state, textColor, text } = tabMap[this.activeName]; |
||||
|
|
||||
|
return { |
||||
|
cardData: { ...item, state }, |
||||
|
lastBtnColor: textColor, |
||||
|
lastBtnText: text, |
||||
|
}; |
||||
|
}, |
||||
|
onRefresh() { |
||||
|
this.data = []; |
||||
|
setTimeout(() => { |
||||
|
this.initData(); |
||||
|
}, 100); |
||||
|
}, |
||||
|
firstBtnClick(id) { |
||||
|
request({ |
||||
|
url: `/dc/system/event/${id}`, |
||||
|
method: "get", |
||||
|
}).then((result) => { |
||||
|
if (result.code != 200) return Message.error(result?.msg); |
||||
|
this.detailDialogFormData = result.data; |
||||
|
|
||||
|
this.eventDetailDialogVisible = true; |
||||
|
}); |
||||
|
}, |
||||
|
lastBtnClick(id) { |
||||
|
console.log(id); |
||||
|
this.eventDispatchDialogVisible = true; |
||||
|
this.eventId = id; |
||||
|
}, |
||||
|
handleSearch(data) { |
||||
|
console.log("data", data); |
||||
|
let daterange = data.daterange; |
||||
|
|
||||
|
let dStakeMark = data.stakeMark; |
||||
|
let dendStakeMark = data.endStakeMark; |
||||
|
|
||||
|
let stakeMark = dStakeMark[0] ? `K${dStakeMark[0]}+${dStakeMark[1]}` : ""; |
||||
|
let endStakeMark = dendStakeMark[0] |
||||
|
? `K${dendStakeMark[0]}+${dendStakeMark[1]}` |
||||
|
: ""; |
||||
|
|
||||
|
this.searchData = { |
||||
|
...this.searchData, |
||||
|
eventState: data.eventState || 0, |
||||
|
eventType: data.eventType, |
||||
|
eventSources: data.eventSources, |
||||
|
startTime: daterange && daterange.length > 0 ? daterange[0] : "", |
||||
|
endTime: daterange && daterange.length > 0 ? daterange[1] : "", |
||||
|
stakeMark: stakeMark, |
||||
|
endStakeMark: endStakeMark, |
||||
|
}; |
||||
|
this.initData(); |
||||
|
}, |
||||
|
handleClose() { |
||||
|
this.eventDetailDialogVisible = false; |
||||
|
this.eventDispatchDialogVisible = false; |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.RoadNetworkMonitoring { |
||||
|
padding: 21px; |
||||
|
|
||||
|
height: 100%; |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
z-index: 6; |
||||
|
|
||||
|
.filter { |
||||
|
height: 38px; |
||||
|
display: flex; |
||||
|
// justify-content: flex-end; |
||||
|
justify-content: space-between; |
||||
|
|
||||
|
.refresh-btn { |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.body { |
||||
|
flex: 1; |
||||
|
overflow: auto; |
||||
|
display: grid; |
||||
|
grid-template-columns: repeat(4, 1fr); |
||||
|
grid-gap: 20px; |
||||
|
// grid-row-gap: 9px; |
||||
|
// grid-column-gap: 9px; |
||||
|
grid-auto-rows: min-content; |
||||
|
} |
||||
|
|
||||
|
.footer { |
||||
|
margin-top: 15px; |
||||
|
height: 36px; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
} |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue