Browse Source

Merge branch 'develop' of http://39.106.31.193:9211/mengff/jihe-hs into develop

wangqin
qingzhengli 1 year ago
parent
commit
ff4e6db2d7
  1. 3
      ruoyi-ui/src/assets/styles/JiHeExpressway.scss
  2. 42
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/components/ElCheckboxGroup.vue
  3. 16
      ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/LineClick/images/bg-active.svg
  4. 12
      ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/LineClick/images/bg.svg
  5. 274
      ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/LineClick/index.vue
  6. 160
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/dutyOfficer/components/ModifyDutyInformationTable.vue
  7. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/dutyOfficer/components/OperateRecord.vue
  8. 11
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/dutyOfficer/index.vue
  9. 72
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/jurisdictionalManagement/data.js
  10. 7
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/jurisdictionalManagement/index.vue
  11. 183
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/emergencyProcessManagement/commonPhrases/index.vue
  12. 168
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/emergencyProcessManagement/disposalProcess/index.vue
  13. 27
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/emergencyProcessManagement/index.vue
  14. 22
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/auditAnalytics/StatsDialogVisible/index.vue
  15. 255
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index.vue
  16. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/index.vue
  17. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/assets/charts.js
  18. 8
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/index.vue
  19. 162
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorQuery/index.vue
  20. 9
      ruoyi-ui/src/views/JiHeExpressway/pages/service/board/index.vue

3
ruoyi-ui/src/assets/styles/JiHeExpressway.scss

@ -81,12 +81,13 @@
line-height: $inputHeight;
padding: 0;
width: 100%;
border: none;
.el-input-number__decrease,
.el-input-number__increase {
width: 22px;
height: $inputHeight;
background-color: #004a69;
background-color: #0D5F79;
border: none;
color: #fff;

42
ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/components/ElCheckboxGroup.vue

@ -1,15 +1,26 @@
<template>
<ElCheckboxGroup v-bind="$attrs" v-on="$listeners" class='ElCheckboxGroup' :style="{ gap }">
<ElCheckbox v-for="item in options" :disabled="item.disabled" :label="item[id] || item[label]"
:key="item[id] || item[label]">
<slot :name="item[id] || item[label]" :data="item">{{ item[label] }}</slot>
<ElCheckboxGroup
v-bind="$attrs"
v-on="$listeners"
class="ElCheckboxGroup"
:style="{ gap }"
>
<ElCheckbox
v-for="item in options"
:disabled="item.disabled"
:label="item[id] || item[label]"
:key="item[id] || item[label]"
>
<slot :name="item[id] || item[label]" :data="item">{{
item[label]
}}</slot>
</ElCheckbox>
</ElCheckboxGroup>
</template>
<script>
export default {
name: 'ElCheckboxGroup_',
name: "ElCheckboxGroup_",
props: {
/**
* {
@ -19,24 +30,24 @@ export default {
*/
options: {
type: Array,
default: () => []
default: () => [],
},
id: {
type: String,
default: 'key'
default: "key",
},
label: {
type: String,
default: 'label'
default: "label",
},
gap: {
default: "24px"
}
}
}
default: "24px",
},
},
};
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
.ElCheckboxGroup {
display: flex;
flex-wrap: wrap;
@ -47,6 +58,7 @@ export default {
display: flex;
align-items: center;
gap: 6px;
width: 100px;
.el-checkbox__input {
line-height: 0;
@ -54,10 +66,10 @@ export default {
.el-checkbox__inner {
width: 16px;
height: 16px;
background: #0A3E54;
background: #0a3e54;
border-radius: 2px 2px 2px 2px;
opacity: 1;
border: 1px solid rgba(98, 224, 254, .6);
border: 1px solid rgba(98, 224, 254, 0.6);
&::after {
width: 4.5px;

16
ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/LineClick/images/bg-active.svg

@ -0,0 +1,16 @@
<svg width="83" height="26" viewBox = "min-x min-y width height" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Group 1142814474">
<path id="Rectangle 3602" d="M10.25 25H6C3.23858 25 1 22.7614 1 20V6C1 3.23858 3.23858 1 6 1H10.25M74.75 25H77C79.7614 25 82 22.7614 82 20V6C82 3.23858 79.7614 1 77 1H74.75" stroke="url(#paint0_linear_308_581)" stroke-width="1.5"/>
<path id="Rectangle 3618" d="M82 20V6C82 3.23858 79.7614 1 77 1H74.75H10.25H6C3.23858 1 1 3.23858 1 6V20C1 22.7614 3.23858 25 6 25H10.25H74.75H77C79.7614 25 82 22.7614 82 20Z" fill="url(#paint1_linear_308_581)"/>
</g>
<defs>
<linearGradient id="paint0_linear_308_581" x1="40.0452" y1="5.58015" x2="40.0452" y2="24.4504" gradientUnits="userSpaceOnUse">
<stop stop-color="#39D5BF"/>
<stop offset="1" stop-color="#1FAED6"/>
</linearGradient>
<linearGradient id="paint1_linear_308_581" x1="41.5" y1="1" x2="41.5" y2="25" gradientUnits="userSpaceOnUse">
<stop stop-color="#20AFD7" stop-opacity="0"/>
<stop offset="1" stop-color="#39D5BF"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

12
ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/LineClick/images/bg.svg

@ -0,0 +1,12 @@
<svg width="83" height="26" viewBox="min-x min-y width height" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Group 1142814479">
<path id="Rectangle 3602" d="M10.25 25H6C3.23858 25 1 22.7614 1 20V6C1 3.23858 3.23858 1 6 1H10.25M74.75 25H77C79.7614 25 82 22.7614 82 20V6C82 3.23858 79.7614 1 77 1H74.75" stroke="#CACACA" stroke-width="1.5"/>
<path id="Rectangle 3618" d="M82 20V6C82 3.23858 79.7614 1 77 1H74.75H10.25H6C3.23858 1 1 3.23858 1 6V20C1 22.7614 3.23858 25 6 25H10.25H74.75H77C79.7614 25 82 22.7614 82 20Z" fill="url(#paint0_linear_308_590)"/>
</g>
<defs>
<linearGradient id="paint0_linear_308_590" x1="41.5" y1="1" x2="41.5" y2="25" gradientUnits="userSpaceOnUse">
<stop stop-color="#CACACA" stop-opacity="0"/>
<stop offset="1" stop-color="#CACACA"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 803 B

274
ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/LineClick/index.vue

@ -0,0 +1,274 @@
<template>
<div :class='["TimeLine1", { "auto-size": autoSize }]' ref="TimeLine1Ref">
<!-- 节点 -->
<div class="node" v-for="(item, index) in data" :key="index" ref="nodeRefs">
<span class="top-label keep-ratio-bottom">
<slot name="bottom-label" :data="item">
{{ item.time }}
</slot>
</span>
<div class="center">
<div class="line" v-if="!index" :style="{ width: `${nodeLinesWidth[-1]}px` }" />
<div class="circle keep-ratio" :style="{ '--active-color': !item.isActive ? normalColor : activeColor }">
</div>
<div class="line" :style="{
width: `${nodeLinesWidth[index]}px`,
borderImage: getBorderImageStyle(item),
}" />
</div>
<slot name="bottom-label" :data="item">
<div class="bottom keep-ratio" @click="onClick(item)"
:style="{ backgroundImage: `url(${require(`./images/bg${item.isActive ? '-active' : ''}.svg`)})` }">
{{ item.label }}
</div>
</slot>
</div>
</div>
</template>
<script>
function getPositionAtCenter(element) {
const { top, left } = element.getBoundingClientRect();
return {
x: left,
y: top
};
}
function getDistanceBetweenElements(domA, domB) {
const domAPosition = getPositionAtCenter(domA);
const domBPosition = getPositionAtCenter(domB);
return Math.hypot(domAPosition.x - domBPosition.x, domAPosition.y - domBPosition.y);
}
export default {
name: 'TimeLine1',
props: {
data: {
type: Array,
default: () => Array.from({ length: 15 }).map(() => ({
time: "16.36",
label: "阿发",
isActive: false
}))
},
activeColor: {
type: String,
default: "#39D5BF"
},
normalColor: {
type: String,
default: "#ccc"
},
lineActiveColor: {
type: String,
default: "linear-gradient(90deg, rgba(59, 216, 188, 1), rgba(29, 171, 215, 1)}) 2 2"
},
lineNormalColor: {
type: String,
default: null
},
//
autoSize: {
type: Boolean,
default: true
},
filterDistance: {
type: Function,
default: null
}
},
data() {
return {
nodeLinesWidth: {}
}
},
watch: {
data: {
handler(data) {
let needFilter = false
const nodeLinesWidth = [];
const filterDistance = num => needFilter ? this.filterDistance(num) : num;
const removeDistance = 20 + 4 * 2;
function getDistance(index) {
return filterDistance(getDistanceBetweenElements(
this.$refs.nodeRefs[index].querySelector('.center'),
this.$refs.nodeRefs[index + 1].querySelector('.center'))
) - removeDistance
};
function getSpecialDistance(index) {
return filterDistance(getDistanceBetweenElements(
this.$refs.nodeRefs[index].parentElement,
this.$refs.nodeRefs[index].querySelector('.center'))
) - removeDistance
}
const getLineWidths = () => {
nodeLinesWidth.length = 0;
data.forEach((_, index) => {
if (index === data.length - 1) {
if (this.autoSize) {
nodeLinesWidth[-1] = getSpecialDistance.call(this, 0)
nodeLinesWidth[data.length - 1] = getSpecialDistance.call(this, data.length - 1)
}
return
};
nodeLinesWidth[index] = getDistance.call(this, index);
});
this.nodeLinesWidth = nodeLinesWidth;
}
this.$nextTick(() => {
const timeLine1RefDom = this.$refs.TimeLine1Ref;
if (timeLine1RefDom.clientWidth != timeLine1RefDom.getBoundingClientRect().width) {
needFilter = true
}
getLineWidths();
})
},
immediate: true
}
},
methods: {
getBorderImageStyle(item) {
const linearColor = item.isActive ? (this.lineActiveColor || `${this.activeColor}, ${this.activeColor}`) : (this.lineNormalColor || `${this.normalColor}, ${this.normalColor}`)
return `linear-gradient(90deg, ${linearColor}) 2 2`
},
onClick(item) {
this.data.forEach(it => {
if (it.id == item.id) {
it.isActive = true;
} else {
it.isActive = false;
}
})
this.$emit('update:tableData', item.id);
// console.log('data', item)
}
}
}
</script>
<style lang='scss' scoped>
div.auto-size {
justify-content: space-between;
overflow: hidden;
.node {
flex: 1;
min-width: auto !important;
&:first-child,
&:last-child {
.line {
width: auto;
}
}
}
}
.TimeLine1 {
color: #fff;
width: auto;
font-size: 14px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #FFFFFF;
display: flex;
flex-wrap: nowrap;
overflow: auto;
gap: 15px;
padding-left: 15px;
.node {
display: flex;
align-items: center;
// justify-content: center;
flex-direction: column;
gap: 3px;
min-width: 90px;
.top-label {
line-height: 16px;
height: 24px;
}
.center {
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
position: relative;
.circle {
border: 1px solid var(--active-color, #39D5BF);
border-radius: 50%;
width: 15px;
height: 15px;
position: relative;
&::before {
content: "";
position: absolute;
width: 72%;
height: 72%;
border-radius: 50%;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
background-color: var(--active-color, #39D5BF);
}
}
.line {
position: absolute;
height: 0px;
opacity: 1;
border: 2px solid;
//border-image: linear-gradient(90deg, rgba(59, 216, 188, 1), rgba(29, 171, 215, 1)) 2 2;
border-image: linear-gradient(90deg, rgb(204, 204, 204), rgb(204, 204, 204)) 2 / 1 / 0 stretch;
&:first-child {
right: calc(50% + 8px + 6px);
}
&:last-child {
left: calc(50% + 8px + 6px);
}
}
}
&:first-child,
&:last-child {
.line {
width: 60px;
}
}
.bottom {
line-height: 16px;
background-repeat: no-repeat;
background-size: 100% 100%;
min-width: 90px;
text-align: center;
padding: 6px 12px;
height: 27px;
}
}
}
</style>

160
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/dutyOfficer/components/ModifyDutyInformationTable.vue

@ -20,8 +20,9 @@
<div :class="['line', { active: active == 'dayShift' }]">
<p @click="active = 'dayShift'">白天值班:</p>
<div>
<p v-for="(item, index) in dayShift" :key="`${item.id}_${index}`" @click="removeDutyPerson(item)">{{
item.name }}</p>
<p v-for="(item, index) in dayShift" :key="`${item.id}_${index}`" @click="removeDutyPerson(item)">
{{ item.name }}
</p>
<div class="no-data" v-if="!dayShift.length">未添加人员</div>
</div>
</div>
@ -29,8 +30,9 @@
<div :class="['line', { active: active == 'graveyardShift' }]">
<p @click="active = 'graveyardShift'">晚上值班:</p>
<div>
<p v-for="(item, index) in graveyardShift" :key="`${index}_${item.id}`" @click="removeDutyPerson(item)">{{
item.name }}</p>
<p v-for="(item, index) in graveyardShift" :key="`${index}_${item.id}`" @click="removeDutyPerson(item)">
{{ item.name }}
</p>
<div class="no-data" v-if="!graveyardShift.length">未添加人员</div>
</div>
</div>
@ -141,7 +143,8 @@ export default {
},
methods: {
chooseDutyPerson(item) {
const hasInserted = this[this.active].find(_item => _item.id === item.id);
const hasInserted = this[this.active].find(_item => _item.employeesId === item.id || _item.id === item.id);
if (hasInserted) return Message.warning("人员已存在");
@ -150,11 +153,11 @@ export default {
removeDutyPerson(item) {
const index = this[this.active].findIndex(_item => _item.id === item.id);
if (index === -1) return Message.warning("人员不存在");
if (index === -1) return;//Message.warning("");
this[this.active].splice(index, 1);
},
getPeopleList(id) {
getPeopleList(stationId) {
this.peopleList = [];
this.dayShift = [];
@ -163,32 +166,44 @@ export default {
const closeMessage = loadingMessage({ message: "人员获取中..." });
request({
// url: `/business/employees/list`,
// method: "GET",
// params: {
// organizationId: id
// }
url: `/business/shifts/byStation`,
method: "POST",
data: {
station: this.data.station,
date: this.data.date,
url: `/business/employees/list`,
method: "GET",
params: {
organizationId: stationId
}
})
.then((result) => {
if (result.code != 200) return Message.error("人员获取失败");
if (!result.data?.length) return Message.warning("该驻点下暂无人员");
}).then((result) => {
if (result.code != 200) return Message.error("人员获取失败");
if (!result.rows?.length) return Message.warning("该驻点下暂无人员");
Message.success("人员获取成功")
// Message.success("")
this.peopleList = result.data;
})
.catch((err) => {
this.peopleList = result.rows;
}).catch((err) => {
Message.error("人员获取失败")
}).finally(() => {
closeMessage();
})
//,
if (this.data) {
request({
url: `/business/shifts/byStation`,
method: "POST",
data: {
station: this.data.station,
date: this.data.date,
}
}).then((result) => {
console.log("result.data:", result.data);
this.dayShift = result.data.filter(item => item.scheduling === "1");
console.log("this.dayShift11:", this.dayShift);
this.graveyardShift = result.data.filter(item => item.scheduling === "2");
}).catch((err) => {
Message.error("人员获取失败")
})
.finally(() => {
}).finally(() => {
closeMessage();
})
}
},
updateData(data) {
return request({
@ -197,13 +212,14 @@ export default {
data: {
date: data.date,
employeesJson: [
...this.dayShift.map(({ id }) => ({
employeesId: id,
...this.dayShift.map((item) => ({
//,id
employeesId: item.employeesId ? item.employeesId : item.id,
scheduling: 1,
station: data.station
})),
...this.graveyardShift.map(({ id }) => ({
employeesId: id,
...this.graveyardShift.map((item) => ({
employeesId: item.employeesId ? item.employeesId : item.id,
scheduling: 2,
station: data.station
})),
@ -214,26 +230,24 @@ export default {
async submit() {
let data = this.data;
if (this.$refs.FormRef)
if (this.$refs.FormRef) {
data = await this.$refs.FormRef.validate();
console.log("%c [ data ]-202-「ModifyDutyInformationTable.vue」", "font-size:15px; background:#9afce6; color:#deffff;", data, this.value2);
}
// console.log("%c [ data ]-202-ModifyDutyInformationTable.vue", "font-size:15px; background:#9afce6; color:#deffff;", data, this.value2);
const closeMessage = loadingMessage({ message: "正在保存值班信息..." });
const closeMessage = loadingMessage({ message: "正在保存值班信息111..." });
if (!this.data) {
this.updateData(data)
.then((result) => {
console.log("%c [ result ]-217-「ModifyDutyInformationTable.vue」", "font-size:15px; background:#335cf6; color:#77a0ff;", result);
this.updateData(data).then((result) => {
// console.log("%c [ result ]-217-ModifyDutyInformationTable.vue", "font-size:15px; background:#335cf6; color:#77a0ff;", result);
if (result.code != 200) return Message.error("保存失败");
Message.success("保存成功");
this.$emit('close')
})
.catch((err) => {
}).catch((err) => {
Message.error("保存失败")
})
.finally(() => {
}).finally(() => {
closeMessage();
})
return;
@ -244,31 +258,71 @@ export default {
(this.data.dayShift || []).forEach(item => {
const findIndex = this.dayShift.findIndex(_item => _item.id === item.id);
if (findIndex === -1) deleteIds.push(item.delId)
if (findIndex === -1) deleteIds.push(item.id)
});
(this.data.graveyardShift || []).forEach(item => {
const findIndex = this.graveyardShift.findIndex(_item => _item.id === item.id);
if (findIndex === -1) deleteIds.push(item.delId)
if (findIndex === -1) deleteIds.push(item.id)
})
Promise.allSettled([
deleteIds?.length ? request({
// Promise.allSettled([
// deleteIds?.length ? request({
// url: `/business/shifts/${deleteIds.join()}`,
// method: "DELETE",
// data: {}
// }) : Promise.resolve(),
// this.updateData(this.data)
// ]).then(([del, update]) => {
// if (del.status === 'rejected' && update.status === 'rejected') return Message.error("");
// if (del.value?.code != '200' && update.value?.code != '200') return Message.error("");
// this.$emit('close')
// }).finally(() => {
// closeMessage();
// })
//,,
if(deleteIds?.length){
request({
url: `/business/shifts/${deleteIds.join()}`,
method: "DELETE",
data: {}
}) : Promise.resolve(),
this.updateData(this.data)
])
.then(([del, update]) => {
if (del.status === 'rejected' && update.status === 'rejected') return Message.error("修改失败");
if (del.value?.code != '200' && update.value?.code != '200') return Message.error("修改失败");
}).then((result) => {
if (result.code != 200) return Message.error("修改失败");
this.updateData(this.data).then((result) => {
if (result.code != 200) return Message.error("修改失败");
Message.success("修改成功");
this.$emit('close')
}).catch((err) => {
Message.error("修改失败")
}).finally(() => {
closeMessage();
})
}).catch((err) => {
Message.error("删除失败")
}).finally(() => {
closeMessage();
})
}else{
this.updateData(this.data).then((result) => {
if (result.code != 200) return Message.error("修改失败");
Message.success("修改成功");
this.$emit('close')
})
.finally(() => {
}).catch((err) => {
Message.error("修改失败")
}).finally(() => {
closeMessage();
})
}
}
}
}

4
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/dutyOfficer/components/OperateRecord.vue

@ -6,8 +6,8 @@
<div class="no-data" v-else>暂无操作记录</div>
<div class="bottom">
<Button>确认</Button>
<Button :style="{ backgroundColor: '#C9C9C9' }"> 取消</Button>
<Button @click.native="$emit('close')">确认</Button>
<Button :style="{ backgroundColor: '#C9C9C9' }" @click.native="$emit('close')"> 取消</Button>
</div>
</div>
</Dialog>

11
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/dutyOfficer/index.vue

@ -217,11 +217,12 @@ export default {
this.modifyDutyInformationTableVisible = bool;
this.dialogData = !data ? null : {
...data,
dayShift: (data.dayShift || []).map(item => ({ ...item, delId: item.id, id: item.employeesId })),
graveyardShift: (data.graveyardShift || []).map(item => ({ ...item, id: item.employeesId }))
};
// this.dialogData = !data ? null : {
// ...data,
// dayShift: (data.dayShift || []).map(item => ({ ...item, delId: item.id, id: item.employeesId })),
// graveyardShift: (data.graveyardShift || []).map(item => ({ ...item, id: item.employeesId }))
// };
this.dialogData = data;
},
handleExport() {
exportFile({

72
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/jurisdictionalManagement/data.js

@ -36,75 +36,13 @@ export const addEditFormList = [
required: true,
},
merge(cloneDeep(PresetFormItems.station), {
required: false,
label: "起始桩号:",
options: {
options: [
{
rules: [
{
message: "请补全桩号",
callback(value, data) {
if (!value?.trim() && data.startStakeMark[1]?.trim())
return false;
else return true;
},
},
],
key: "startStakeMark[0]",
},
{
rules: [
{
message: "请补全桩号",
callback(value, data) {
if (!value?.trim() && data.startStakeMark[0]?.trim())
return false;
else return true;
},
},
],
key: "startStakeMark[1]",
},
],
},
merge(cloneDeep(PresetFormItems.startStation), {
required: true,
}),
merge(cloneDeep(PresetFormItems.station), {
required: false,
label: "结束桩号:",
options: {
options: [
{
rules: [
{
message: "请补全桩号",
callback(value, data) {
if (!value?.trim() && data.endStakeMark[1]?.trim())
return false;
else return true;
},
},
],
key: "endStakeMark[0]",
},
{
rules: [
{
message: "请补全桩号",
callback(value, data) {
if (!value?.trim() && data.endStakeMark[0]?.trim())
return false;
else return true;
},
},
],
key: "endStakeMark[1]",
},
],
},
merge(cloneDeep(PresetFormItems.endStation), {
required: true,
}),
{
label: "辖区路段编号:",
key: "roadCode",

7
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/jurisdictionalManagement/index.vue

@ -88,7 +88,7 @@ export default {
AddNEditDialog,
Button
},
inject: ['getPagination', 'setTotal'],
inject: ['getPagination', 'setTotal', "setCurrentPage"],
data() {
return {
searchFormList,
@ -172,8 +172,9 @@ export default {
Message.success("删除成功")
})
.catch(() => {
Message.error("删除失败")
.catch((e) => {
console.log("辖段删除error:",e);
//Message.error("")
})
},
handleAddEdit(bool, data) {

183
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/emergencyProcessManagement/commonPhrases/index.vue

@ -1,17 +1,38 @@
<template>
<Dialog v-model="modelVisible" title="配置常用语">
<Button style="margin: 10px 0 20px 20px; width: 100px;" @click.native="onAdd">添加</Button>
<!-- <Button style="margin: 10px 0 20px 20px; width: 100px;" @click.native="onAdd">添加</Button> -->
<div class="header">
<el-form ref="form" label-width="120px">
<el-form-item label="事件类型">
<el-select v-model="eventType" placeholder="请选择" style="width: 220px">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
</div>
<div>
<TimeLine1 :data="process" @update:tableData="updateTableData" />
</div>
<div class="EventDetail">
<Table :data="tableData">
<ElTableColumn prop="phrases" label="常用语" width="720" align="center">
<Table :data="getTableData()" :show-header="false">
<ElTableColumn label="步骤" width="110" align="center">
<template slot-scope="scope">
<ElInput type="textarea" v-model="scope.row.phrases" :autosize="{ minRows: 2, maxRows: 2 }"
:maxlength="150" showWordLimit placeholder="请输入常用语内容" />
{{ `${scope.$index + 1}` }}
</template>
</ElTableColumn>
<ElTableColumn label="操作" width="110" align="center">
<ElTableColumn prop="phrases" label="常用语" width="550" align="center">
<template slot-scope="scope">
<ElButton type="text" style="color: #ea4d2d;" @click.native="onDel(scope.$index)">删除</ElButton>
<ElInput type="textarea" style="margin-top: 5px;" v-model="scope.row.phrases"
:autosize="{ minRows: 2, maxRows: 2 }" :maxlength="150" showWordLimit placeholder="请输入常用语内容" />
</template>
</ElTableColumn>
<ElTableColumn label="操作" width="160" align="center">
<template slot-scope="scope">
<ElButton class="elButton" icon="el-icon-plus" plain size="mini"
@click.native="onAdd(scope.row.id)" />
<ElButton class="elButton" icon="el-icon-delete" plain size="mini"
@click.native="onDel(scope.$index)" />
</template>
</ElTableColumn>
</Table>
@ -30,6 +51,7 @@ import Dialog from "@screen/components/Dialog/index";
import Table from '@screen/components/Table.vue';
import Button from '@screen/components/Buttons/Button.vue';
import request from "@/utils/request";
import TimeLine1 from "@screen/components/TimeLine/LineClick/index";
import { Message } from 'element-ui'
@ -39,6 +61,7 @@ export default {
Dialog,
Button,
Table,
TimeLine1
},
model: {
prop: 'visible',
@ -46,11 +69,66 @@ export default {
},
props: {
visible: Boolean,
eventType: Number
eventType: Number,
// process: {
// type: Array,
// default: () => []
// }
},
data() {
return {
tableData: []
tableData: [{
phrases: ''
}],
// eventType: 1,
options: [
{
value: 1,
label: '交通事故'
},
{
value: 2,
label: '车辆故障'
},
{
value: 3,
label: '交通管制'
},
{
value: 4,
label: '交通拥堵'
},
{
value: 5,
label: '非法上路'
},
{
value: 6,
label: '路障清除'
},
{
value: 7,
label: '施工建设'
},
{
value: 8,
label: '服务区异常'
},
{
value: 9,
label: '设施设备隐患'
},
{
value: 10,
label: '异常天气'
},
{
value: 11,
label: '其他事件'
}
],
process: [],
id: 0
}
},
computed: {
@ -74,31 +152,79 @@ export default {
method: "get",
}).then(result => {
if (result.code != 200) return Message.error(result.msg);
result.data.processConfigList?.forEach(it => {
const phrs = it.commonPhrases.split(',');
phrs?.forEach(phr => {
if (phr && !this.tableData.find(op => op.phrases == phr)) this.tableData.push({ phrases: phr })
//
this.process = [];
this.tableData = [];
result.data.processConfigList?.forEach((it, index) => {
let commonPhrasesArr = it.commonPhrases ? it.commonPhrases.split(',') : [''];
let phrs = [];
commonPhrasesArr?.forEach(phr => {
phrs.push({ id: it.id, phrases: phr })
})
this.process.push({
...it,
phrs: phrs,
label: it.processNode,
isActive: index == 0 ? true : false,
})
if (index == 0) {
this.id = it.id;
this.tableData = phrs;
}
})
})
},
onAdd() {
getTableData() {
let rows = this.process.find(item => item.id == this.id);
return rows?.phrs || [];
},
updateTableData(id = 1) {
this.id = id;
this.tableData = [];
let pros = this.process.find(item => item.id == id);
this.tableData = pros.phrs;
},
onAdd(id) {
this.tableData.push({
id: id,
phrases: ''
})
},
onDel(index) {
if (this.tableData.length <= 1) {
return Message.warning('最后一项不可删除!');
}
this.tableData.splice(index, 1)
},
submitTable() {
this.$emit('update:phrasesData', this.tableData)
this.modelVisible = false;
console.log(this.tableData)
let data = []
this.process.forEach((lc) => {
let commonPhrases = [];
lc.phrs.forEach(phr => { if (phr.phrases) commonPhrases.push(phr.phrases) })
data.push({
commonPhrases: commonPhrases.join(','),
id: lc.id,
eventType: lc.eventType,
nodeNode: lc.nodeNode,
processNode: lc.processNode
})
})
console.log('data', data)
// return;
request({
url: `/business/dcEventType/updateDcProcessConfig`,
method: "post",
data: {
eventType: this.eventType,
processConfigList: data
}
}).then(result => {
if (result.code != 200) return Message.error(result.msg);
Message.success(result.msg);
this.modelVisible = false;
this.$emit('reInitData', true)
})
}
}
}
@ -110,6 +236,7 @@ export default {
gap: 9px;
width: 836px;
height: 768px;
margin-top: 20px;
flex-direction: column;
.video-pic {
@ -118,5 +245,19 @@ export default {
gap: 15px
}
}
.elButton {
background: #2ba8c3;
border-radius: 2px 2px 2px 2px;
color: #FFFFFF;
}
.elButton:hover,
.elButton:focus {
background: #2ba8c3;
border-radius: 2px 2px 2px 2px;
border-color: #FFFFFF;
color: #FFFFFF;
}
</style>

168
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/emergencyProcessManagement/disposalProcess/index.vue

@ -1,34 +1,46 @@
<template>
<Dialog v-model="modelVisible" title="配置处置流程">
<Button style="margin: 10px 0 20px 20px; width: 100px;" @click.native="onAdd">添加</Button>
<div class="header">
<el-form ref="form" label-width="120px">
<el-form-item label="事件类型">
<el-select v-model="eventType" placeholder="请选择" style="width: 220px">
<el-option v-for="item in eventTypeOptions" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
</div>
<div class="EventDetail">
<Table :data="tableData">
<Table :data="tableData" :show-header="false">
<ElTableColumn label="步骤" width="110" align="center">
<template slot-scope="scope">
{{ `步骤${scope.$index + 1}` }}
{{ `${scope.$index + 1}` }}
</template>
</ElTableColumn>
<ElTableColumn prop="phrases" label="处置流程" width="610" align="center">
<ElTableColumn prop="phrases" label="处置流程" width="570" align="center">
<template slot-scope="scope">
<ElForm :model="scope.row" inline>
<ElFormItem label="流程名称">
<ElInput v-model="scope.row.processNode" placeholder="请输入流程名称" />
<ElForm :model="scope.row" inline :ref="'scopeForm' + scope.$index">
<!-- <ElFormItem label="流程名称" :rules="[{ required: true, message: '流程名称不能为空' }]">
<ElInput v-model="scope.row.processNode" placeholder="请输入流程名称" />
</ElFormItem>
<ElFormItem label="常用语">
</ElFormItem> -->
<!-- <ElFormItem label="常用语">
<ElSelect class="disposal-process-select" v-model="scope.row.commonPhrases" multiple
:collapse-tags="true">
<ElOption v-for="item in options" :key="item.key || item.value" :label="item.label"
:value="item.key || item.value">
</ElOption>
</ElSelect>
</ElFormItem>
</ElFormItem> -->
</ElForm>
<!-- <Form :formList="formList" :dFormData="scope.row" label-width="100px" /> -->
</template>
</ElTableColumn>
<ElTableColumn label="操作" width="110" align="center">
<ElTableColumn label="操作" width="150" align="center">
<template slot-scope="scope">
<ElButton type="text" style="color: #ea4d2d;" @click.native="onDel(scope.$index)">删除</ElButton>
<ElButton class="elButton" icon="el-icon-plus" plain size="mini" @click.native="onAdd" />
<ElButton class="elButton" icon="el-icon-delete" plain size="mini" @click.native="onDel(scope.$index)" />
</template>
</ElTableColumn>
</Table>
@ -73,7 +85,13 @@ export default {
},
data() {
return {
tableData: [],
tableData: [{
id: '',
eventType: '',
nodeNode: '',
processNode: '',
commonPhrases: ''
}],
formList: [
{
label: "流程名称:",
@ -93,7 +111,53 @@ export default {
}
},
],
options: []
options: [],
eventTypeOptions: [
{
value: 1,
label: '交通事故'
},
{
value: 2,
label: '车辆故障'
},
{
value: 3,
label: '交通管制'
},
{
value: 4,
label: '交通拥堵'
},
{
value: 5,
label: '非法上路'
},
{
value: 6,
label: '路障清除'
},
{
value: 7,
label: '施工建设'
},
{
value: 8,
label: '服务区异常'
},
{
value: 9,
label: '设施设备隐患'
},
{
value: 10,
label: '异常天气'
},
{
value: 11,
label: '其他事件'
}
]
}
},
computed: {
@ -113,33 +177,46 @@ export default {
getProcess() {
let addFlg = true;
this.tableData = [];
this.phrasesData.forEach(it => {
this.options.push({
key: it.phrases
})
addFlg = false;
})
// this.phrasesData.forEach(it => {
// this.options.push({
// key: it.phrases
// })
// addFlg = false;
// })
request({
url: `/business/dcEventType/${this.eventType}`,
method: "get",
}).then(result => {
if (result.code != 200) return Message.error(result.msg);
this.eventType = result.data.eventType;
result.data.processConfigList?.forEach(it => {
const phrs = it.commonPhrases.split(',');
if (addFlg) {
phrs?.forEach(phr => {
if (phr && !this.options.find(op => op.key == phr)) this.options.push({ key: phr })
})
}
if (phrs && phrs[0]) {
it.commonPhrases = phrs
}
})
// this.eventType = result.data.eventType;
// result.data.processConfigList?.forEach(it => {
// const phrs = it.commonPhrases.split(',');
// if (addFlg) {
// phrs?.forEach(phr => {
// if (phr && !this.options.find(op => op.key == phr)) this.options.push({ key: phr })
// })
// }
// if (phrs && phrs[0]) {
// it.commonPhrases = phrs
// }
// })
if (result.data.processConfigList.length > 0) {
this.tableData = result.data.processConfigList;
} else {
this.tableData = [
{
id: '',
eventType: '',
nodeNode: '',
processNode: '',
commonPhrases: ''
}
]
}
this.tableData = result.data.processConfigList;
// console.log('this.tableData', this.tableData)
})
@ -149,26 +226,32 @@ export default {
onAdd() {
this.tableData.push({
// eventType: this.eventType,
commonPhrases: [],
commonPhrases: '',
processNode: '',
// nodeNode: 1
})
},
onDel(index) {
if (this.tableData.length <= 1) {
return Message.warning('最后一项不可删除!');
}
this.tableData.splice(index, 1)
},
submitTable() {
let data = []
let flg = false;
this.tableData.forEach((it, index) => {
if (!it.processNode) return flg = true;
data.push({
commonPhrases: it.commonPhrases.join(','),
commonPhrases: it.commonPhrases,
eventType: this.eventType,
nodeNode: index + 1,
processNode: it.processNode
})
})
if (flg) return Message.error('节点名称不能为空');
// console.log(data)
// return;
request({
url: `/business/dcEventType/updateDcProcessConfig`,
method: "post",
@ -202,6 +285,19 @@ export default {
gap: 15px
}
}
.elButton {
background: #2ba8c3;
border-radius: 2px 2px 2px 2px;
color: #FFFFFF;
}
.elButton:hover,
.elButton:focus {
background: #2ba8c3;
border-radius: 2px 2px 2px 2px;
border-color: #FFFFFF;
color: #FFFFFF;
}
</style>
<style lang="scss">

27
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/emergencyProcessManagement/index.vue

@ -28,16 +28,16 @@
<ElTableColumn prop="processConfig" label="处置流程" />
<ElTableColumn label="操作" width="210">
<template slot-scope="scope">
<ElButton type="text" style="color: #00EBC1;" @click="showPhrases(scope.row.eventType)">常用语</ElButton>
<ElButton type="text" style="color: #00D1FF;" @click="showDisposal(scope.row.eventType)">流程配置</ElButton>
<ElButton type="text" style="color: #00EBC1;" @click="showPhrases(scope.row)">常用语</ElButton>
</template>
</ElTableColumn>
</Table>
</div>
<!-- 配置常用户弹窗 -->
<CommonPhrases :visible="isShowPhrases" :eventType="eventType" @update:value="onClosePhrases"
@update:phrasesData="onUpdatePhrasesData" />
<CommonPhrases :visible="isShowPhrases" :eventType="eventType" :process="process" @update:value="onClosePhrases"
@update:phrasesData="onUpdatePhrasesData" @reInitData="initData" />
<!-- "流程配置"弹出框 -->
<DisposalProcess :visible="isShowDisposal" :eventType="eventType" :phrasesData="phrasesData"
@update:value="onCloseDisposal" @reInitData="initData" />
@ -82,7 +82,8 @@ export default {
pageSize: 20,
pageNum: 1,
},
phrasesData: []
phrasesData: [],
process: []
}
},
created() {
@ -110,9 +111,23 @@ export default {
this.searchData.pageSize = pageSize;
this.getData();
},
showPhrases(eventType) {
showPhrases(data) {
if (data?.processConfigList.length <= 0) {
Message.warning('请先配置流程!');
return;
}
let process = []
data.processConfigList.forEach(it => {
process.push({
id: it.id,
commonPhrases: it.commonPhrases,
label: it.processNode,
isActive: false,
})
})
this.process = process;
this.isShowPhrases = true;
this.eventType = eventType;
this.eventType = data.eventType;
},
showDisposal(eventType) {
this.isShowDisposal = true;

22
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/auditAnalytics/StatsDialogVisible/index.vue

@ -359,12 +359,22 @@ export default {
}),
]).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.searchFormList[2].options.options = res[0].value.data.map(
// (item) => ({
// key: item.id,
// label: item.facilityName,
// })
// );
let dataList = [];
res[0].value.data.forEach((item) => {
if (item.facilityType == 1) {
dataList.push({
key: item.id,
label: item.facilityName,
});
}
});
this.searchFormList[2].options.options = dataList;
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");

255
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index.vue

@ -1,126 +1,54 @@
<template>
<div class="congestion">
<div class="board">
<ProgressBar
class="keep-ratio"
@selectItem="selectProgress"
:dataList="dataList"
:selectIndex="selectIndex"
/>
<ProgressBar class="keep-ratio" @selectItem="selectProgress" :dataList="dataList" :selectIndex="selectIndex" />
<div class="searchPanel">
<RadioGroup
:options="[
{ key: '1', label: '菏泽' },
{ key: '3', label: '济南' },
]"
v-model="direction"
type="button"
/>
<el-select
v-model="type"
size="mini"
class="selectRoad"
placeholder="请选择"
>
<el-option
v-for="item in typeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
<RadioGroup :options="[
{ key: '1', label: '菏泽' },
{ key: '3', label: '济南' },
]" v-model="direction" type="button" />
<el-select v-model="type" size="mini" class="selectRoad" placeholder="请选择" @change="changeType">
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-select
v-model="quarter"
size="medium"
v-if="type == 'quarter'"
class="selectRoad-medium"
placeholder="请选择"
>
<el-option
v-for="item in quarterOptions"
:key="item.value"
:label="item.label"
:value="item.value"
style="width: 140px"
>
<el-select v-model="quarter" size="medium" v-if="type == 'quarter'" class="selectRoad-medium" placeholder="请选择">
<el-option v-for="item in quarterOptions" :key="item.value" :label="item.label" :value="item.value"
style="width: 140px">
</el-option>
</el-select>
<el-date-picker
size="mini"
v-if="type != 'quarter'"
class="selectRoad"
v-model="dateTime"
style="width: 140px"
:type="
type == 'date'
? 'date'
: type == 'month'
<el-date-picker size="mini" v-if="type != 'quarter'" class="selectRoad" v-model="dateTime" style="width: 140px"
:type="type == 'date'
? 'date'
: type == 'month'
? 'month'
: type == 'year'
? 'year'
: ''
"
placeholder="请选择"
:clearable="false"
/>
<el-button
type="primary"
size="mini"
class="btnSearch"
@click="searchQuery"
icon="el-icon-search"
>查询</el-button
>
<el-button
class="btnReset"
size="mini"
icon="el-icon-refresh-left"
@click="onReset"
>重置</el-button
>
? 'year'
: ''
" placeholder="请选择" :clearable="false" />
<el-button type="primary" size="mini" class="btnSearch" @click="searchQuery" icon="el-icon-search">查询</el-button>
<el-button class="btnReset" size="mini" icon="el-icon-refresh-left" @click="onReset">重置</el-button>
</div>
</div>
<div class="body">
<div>
<WgtTitle :title="'感知事件趋势分析'"></WgtTitle>
<Empty
v-show="!chart1List || chart1List.length <= 0"
text="暂无数据..."
></Empty>
<div
v-show="chart1List || chart1List.length > 0"
id="chart1"
class="btnChart"
/>
<!-- <Empty v-show="!chart1List || chart1List.length <= 0" text="暂无数据..."></Empty> -->
<!-- <div v-show="chart1List || chart1List.length > 0" id="chart1" class="btnChart" />-->
<div id="chart1" class="btnChart" />
</div>
<div>
<WgtTitle :title="'感知事件类型分析'"></WgtTitle>
<Empty
v-show="!chart2List || chart2List.length <= 0"
text="暂无数据..."
></Empty>
<div
v-show="chart2List || chart2List.length > 0"
id="chart2"
class="btnChart"
/>
<Empty v-show="!chart2List || chart2List.length <= 0" text="暂无数据..."></Empty>
<div v-show="chart2List || chart2List.length > 0" id="chart2" class="btnChart" />
</div>
<div>
<WgtTitle :title="'桩号范围内事件分析趋势'"></WgtTitle>
<Empty
v-show="!chart3List || chart3List.length <= 0"
text="暂无数据..."
></Empty>
<div
v-show="chart3List || chart3List.length > 0"
id="chart3"
class="btnChart"
/>
<Empty v-show="!chart3List || chart3List.length <= 0" text="暂无数据..."></Empty>
<div v-show="chart3List || chart3List.length > 0" id="chart3" class="btnChart" />
</div>
</div>
</div>
@ -135,6 +63,7 @@ import chart1 from "./assets/charts";
import chart2 from "./assets/charts2";
import chart3 from "./assets/charts3";
import ElQuarterPicker from "./ElQuarterPicker";
import moment from 'moment';
import {
getWarningTrend,
getWarningSectionType,
@ -220,8 +149,8 @@ export default {
dateTime: "2024",
direction: "1",
dataList: [],
selectIndex: 1,
selectId: 1,
selectIndex: 2,
selectId: 2,
type: "year",
chart1List: [],
chart2List: [],
@ -272,7 +201,7 @@ export default {
],
};
},
created() {},
created() { },
methods: {
selectProgress(item, index) {
this.selectIndex = index;
@ -284,7 +213,9 @@ export default {
this.type = "year";
this.dateTime = "2024";
this.selectId = this.dataList[0].id;
this.selectIndex = 1;
this.selectId = 2;
this.selectIndex = 2;
this.searchQuery()
},
searchQuery() {
let startTime = "";
@ -319,6 +250,43 @@ export default {
let data = res.data;
chart1.series[0].data = [];
chart1.xAxis.data = [];
//
if (this.type == "month") {
let daysInMonth = moment(this.dateTime, "YYYY-MM").daysInMonth();
let sData = {};
data.forEach(it => sData[parseInt(it.day.slice(-2))] = it.number)
let pData = []
for (let index = 1; index <= daysInMonth; index++) {
pData.push({
day: index,
number: sData[index] || 0
})
}
data = pData;
}
//
if (this.type == "quarter") {
let quarterMap = {
1: [1, 2, 3],
2: [4, 5, 6],
3: [7, 8, 9],
4: [10, 11, 12],
};
let sData = {}
data.forEach(it => sData[it.month] = it.number);
let pData = []
for (let index = 0; index < 3; index++) {
let month = quarterMap[this.quarter][index];
pData.push({
month: month,
number: sData[month] || 0
})
}
data = pData;
}
if (data.length > 0) {
const maxObject = data.reduce((prev, current) =>
current.number > prev.number ? current : prev
@ -331,10 +299,11 @@ export default {
xData.push(it.month + "月");
}
if (this.type == "month") {
xData.push(it.day.split("-")[2] + "日");
// xData.push(it.day.split("-")[2] + "");
xData.push(it.day + "日");
}
if (this.type == "date") {
xData.push(it.time.split(" ")[1] + "时");
xData.push(it.time + "时");
}
if (this.type == "quarter") {
xData.push(it.month + "月");
@ -541,6 +510,11 @@ export default {
// if (this.type == "day")
// this.type = "date";
},
changeType() {
if (this.type == 'date') {
this.dateTime = moment(new Date()).format("YYYY-MM-DD")
}
}
},
mounted() {
setTimeout(() => {
@ -660,21 +634,16 @@ export default {
justify-content: space-evenly;
font-size: 14px;
> div {
>div {
width: 33%;
height: 470px;
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: 1px solid;
border-image: linear-gradient(
360deg,
border-image: linear-gradient(360deg,
rgba(55, 231, 255, 0.3),
rgba(55, 231, 255, 0)
)
1 1;
rgba(55, 231, 255, 0)) 1 1;
}
:nth-child(1) {
@ -790,54 +759,12 @@ export default {
</style>
<style lang="scss">
div.el-popover:has(> .el-date-picker)
div
.el-picker-panel__body
.el-picker-panel__content
table
tr
td.today
span,
div.el-popover:has(> .el-date-picker)
div
.el-picker-panel__body
.el-picker-panel__content
table
tr
td.today
.cell,
div.el-picker-panel.el-date-picker.el-popper
div
.el-picker-panel__body
.el-picker-panel__content
table
tr
td.today
span,
div.el-picker-panel.el-date-picker.el-popper
div
.el-picker-panel__body
.el-picker-panel__content
table
tr
td.today
.cell,
div.el-picker-panel.el-date-range-picker.el-popper
div
.el-picker-panel__body
.el-picker-panel__content
table
tr
td.today
span,
div.el-picker-panel.el-date-range-picker.el-popper
div
.el-picker-panel__body
.el-picker-panel__content
table
tr
td.today
.cell {
div.el-popover:has(> .el-date-picker) div .el-picker-panel__body .el-picker-panel__content table tr td.today span,
div.el-popover:has(> .el-date-picker) div .el-picker-panel__body .el-picker-panel__content table tr td.today .cell,
div.el-picker-panel.el-date-picker.el-popper div .el-picker-panel__body .el-picker-panel__content table tr td.today span,
div.el-picker-panel.el-date-picker.el-popper div .el-picker-panel__body .el-picker-panel__content table tr td.today .cell,
div.el-picker-panel.el-date-range-picker.el-popper div .el-picker-panel__body .el-picker-panel__content table tr td.today span,
div.el-picker-panel.el-date-range-picker.el-popper div .el-picker-panel__body .el-picker-panel__content table tr td.today .cell {
color: #fff;
}
</style>

5
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/index.vue

@ -52,9 +52,10 @@ export default {
let texts = [];
let datas = [];
data.forEach((it) => {
data.forEach((it,index) => {
if(index > 9) return;
texts.push(it.sectionName);
datas.push(it.number);
datas.push(it.number2);
});
chartsStatistics.yAxis[0].data = texts;

2
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/assets/charts.js

@ -82,6 +82,8 @@ var options = {
show: true,
color: "#fff",
fontSize: 10,
// interval: 0,
// rotate: -20
},
},
yAxis: [

8
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/index.vue

@ -47,15 +47,15 @@ export default {
let texts = [];
let datas = [];
const maxObject = data.reduce((prev, current) =>
current.number > prev.number ? current : prev
current.number2 > prev.number2 ? current : prev
);
data.forEach((it) => {
texts.push(it.sectionName);
if (it.number == maxObject.number) {
if (it.number2 == maxObject.number2) {
datas.push({
value: it.number,
value: it.number2,
itemStyle: {
color: {
type: "linear",
@ -80,7 +80,7 @@ export default {
});
} else {
datas.push({
value: it.number,
value: it.number2,
itemStyle: {
borderRadius: 6,
},

162
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorQuery/index.vue

@ -36,7 +36,7 @@
<!-- 分页 -->
<div class="footer">
<Pagination @current-change="getData" @size-change="onSizeChange" width="'100%'" :page-sizes="[10, 20, 30, 40, 50]"
:page-size="pageSize" :current-page.sync="pageNum" layout="total, sizes, prev, pager, next" :total="50">
:page-size="pageSize" :current-page.sync="pageNum" layout="total, sizes, prev, pager, next" :total="10">
</Pagination>
</div>
</div>
@ -61,164 +61,44 @@ export default {
return {
tableData: [{
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
name: '畅通',
address: '大学城-长活'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
name: '畅通',
address: '长湑-孝里'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
name: '畅通',
address: '孝里-平阴北平阴北-平阴'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
name: '畅通',
address: '平阴-平阴南'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
name: '畅通',
address: '平阴南-东平'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
name: '畅通',
address: '平明-平阴南'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
name: '畅通',
address: '平明南-东平'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
name: '畅通',
address: '孝里-平阴北平明北-平明'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
name: '畅通',
address: '平阴-平阴南'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, , {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, , {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, , {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, , {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, , {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, , {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, , {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, , {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
}, {
date: '2023-12-31 13:00:00',
name: '2640.78m',
address: 'K100+000-K110+000'
name: '畅通',
address: '平阴-平阴南'
},
],
formList: [],

9
ruoyi-ui/src/views/JiHeExpressway/pages/service/board/index.vue

@ -32,7 +32,6 @@
</el-select>
</el-form-item>
<vuescroll :ops="scrollOptions" style="flex: 1; height: 0">
<!-- {{ boardSizeDic }} -->
<el-collapse
v-model="selectedSize"
accordion
@ -46,8 +45,6 @@
:name="key"
>
<div v-if="item.list.length > 0">
<!-- <el-checkbox style="width: 100%" :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选
</el-checkbox> -->
<el-checkbox-group
class="checkbox"
v-model="checkedDeviceIds"
@ -60,8 +57,6 @@
:key="index"
>
<div>{{ itm.deviceName }}</div>
<!-- <el-tooltip :content="itm.ip" placement="top">
</el-tooltip> -->
<el-tooltip content="回读当前信息" placement="right">
<el-button
class="el-icon-tickets huiduButton"
@ -91,6 +86,7 @@
<el-button
class="btnInfoBoard"
type="add"
:disabled="!selectedSize"
@click.native="____onAddDeviceItem()"
>添加信息</el-button
>
@ -570,7 +566,7 @@ export default {
this.selectedBdMsg = _.cloneDeep(testDeviceInfo.data["3A"].content);
} else {
if (!deviceFrom.iotDeviceId) {
this.$message.warning("提示设备未接入!");
this.$message.warning("设备未接入!");
return;
}
this.selectedBdMsg = [];
@ -811,6 +807,7 @@ export default {
// },
//
____onChangeSize(val) {
console.log("777777");
this.____setAvailableTemplate();
this.checkedDeviceIds = [];
this.selectedDevice = {};

Loading…
Cancel
Save