Browse Source

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

wangqin
yyl 11 months ago
parent
commit
941900f522
  1. 0
      ruoyi-ui/src/views/JiHeExpressway/components/Card2/Card.vue
  2. BIN
      ruoyi-ui/src/views/JiHeExpressway/components/Card2/效果图.png
  3. 3
      ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/TimeLine2/DescCard.vue
  4. 44
      ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/TimeLine2/index.vue
  5. 12
      ruoyi-ui/src/views/JiHeExpressway/images/ListItem/AbnormalWeather.svg
  6. 6
      ruoyi-ui/src/views/JiHeExpressway/images/ListItem/Failed.svg
  7. 6
      ruoyi-ui/src/views/JiHeExpressway/images/ListItem/Reviewed.svg
  8. 6
      ruoyi-ui/src/views/JiHeExpressway/images/ListItem/ToBeReviewed.svg
  9. 14
      ruoyi-ui/src/views/JiHeExpressway/images/ListItem/TrafficControl.svg
  10. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/CrowdnessIndicatorRankings/index.vue
  11. 150
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DispatchLiaison/index.vue
  12. 518
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalPlan/index.vue
  13. 95
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalProcess/data.js
  14. BIN
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalProcess/images/mock1.jpg
  15. BIN
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalProcess/images/mock2.jpg
  16. 19
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalProcess/index.vue
  17. 192
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/index.vue
  18. 46
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/RealTimeVideo/index.vue
  19. 244
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/ReleaseInformation/index.vue
  20. 92
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/TrafficControl/index.vue
  21. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/index.vue
  22. 3
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/dispatch/index.vue
  23. 77
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditDetails/DetailCard.vue
  24. 38
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditDetails/index.vue
  25. 110
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditLists/ListItem.vue
  26. 70
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditLists/index.vue
  27. 23
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/index.vue

0
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/components/Card.vue → ruoyi-ui/src/views/JiHeExpressway/components/Card2/Card.vue

BIN
ruoyi-ui/src/views/JiHeExpressway/components/Card2/效果图.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

3
ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/TimeLine2/DescCard.vue

@ -6,7 +6,8 @@
<span class="name">{{ data.name }}</span>
<span class="posts">{{ data.posts }}</span>
</div>
<div class="desc">{{ data.desc }}</div>
<!-- <div class="desc">{{ data.desc }}</div> -->
<div class="desc" v-html="data.desc" />
</div>
</template>

44
ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/TimeLine2/index.vue

@ -2,7 +2,8 @@
<div class='TimeLine2'>
<div class="node" v-for="(item, index) in data">
<div class="content" v-if="direction != 'right'">
<template v-if="direction === 'auto' ? !!((index + 1) & 1) : true">
<!-- <template v-if="direction === 'auto' ? !!((index + 1) & 1) : true"> -->
<template v-if="getDirection(item, index, 'left')">
<span class="title" v-if="item.title">{{ item.title }}</span>
<DescCard :data="item" />
</template>
@ -12,9 +13,12 @@
<div class="line"></div>
</div>
<div class="content" v-if="direction != 'left'">
<template v-if="direction === 'auto' ? !((index + 1) & 1) : true">
<!-- <template v-if="direction === 'auto' ? !((index + 1) & 1) : true"> -->
<template v-if="getDirection(item, index, 'right')">
<span class="title" v-if="item.title">{{ item.title }}</span>
<DescCard :data="item" />
<slot name="content" :data="item">
<DescCard :data="item" />
</slot>
</template>
</div>
</div>
@ -37,6 +41,7 @@ export default {
* name: "",
* desc: "",
* posts: ''
* direction: 'left' | 'right'
* }[]
*/
data: {
@ -52,6 +57,19 @@ export default {
type: String,
default: "auto"
}
},
methods: {
getDirection(item, index, position) {
if (this.direction != 'auto') return this.direction === position;
if (item.direction) return item.direction === position;
switch (position) {
case 'left':
return !!((index + 1) & 1)
case 'right':
return !((index + 1) & 1)
}
}
}
}
</script>
@ -98,11 +116,25 @@ export default {
margin-top: 6px;
.circle {
min-width: 9px;
min-height: 9px;
background: #39D5BF;
min-width: 15px;
min-height: 15px;
border-radius: 50%;
opacity: 1;
border: 1px solid var(--active-color, #39D5BF);
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 {

12
ruoyi-ui/src/views/JiHeExpressway/images/ListItem/AbnormalWeather.svg

@ -0,0 +1,12 @@
<svg width="47" height="47" viewBox="0 0 47 47" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#229;&#188;&#130;&#229;&#184;&#184;&#229;&#164;&#169;&#230;&#176;&#148;">
<rect id="Rectangle 3695" x="0.5" y="0.5" width="46" height="46" rx="23" fill="#00B3CC" fill-opacity="0.2" stroke="#00B3CC"/>
<path id="Vector" d="M31.4164 27.2473H15.5802C14.5118 27.2463 13.4773 26.872 12.6554 26.1891C11.8335 25.5062 11.2758 24.5576 11.0787 23.5071C10.8816 22.4566 11.0574 21.3703 11.5758 20.4357C12.0942 19.5011 12.9225 18.777 13.9178 18.3884C13.9322 17.8249 14.0737 17.272 14.3319 16.771C14.59 16.27 14.9581 15.8339 15.4086 15.4953C15.8591 15.1568 16.3802 14.9246 16.9331 14.816C17.486 14.7075 18.0563 14.7254 18.6012 14.8685C19.3962 13.432 20.6403 12.2961 22.1427 11.635C23.6451 10.9739 25.3228 10.8241 26.9185 11.2086C28.5142 11.5932 29.9397 12.4908 30.9764 13.7637C32.0131 15.0367 32.6037 16.6148 32.6576 18.2558C33.7231 18.5547 34.6444 19.2295 35.251 20.1555C35.8576 21.0815 36.1083 22.1959 35.9569 23.2925C35.8055 24.3892 35.2622 25.3939 34.4275 26.1207C33.5927 26.8476 32.5231 27.2473 31.4164 27.2461V27.2473ZM13.9178 29.3117C13.9627 29.2244 14.025 29.1473 14.1008 29.0851C14.1767 29.023 14.2646 28.9771 14.359 28.9503C14.4534 28.9236 14.5522 28.9166 14.6494 28.9297C14.7466 28.9428 14.8401 28.9758 14.924 29.0266C15.0957 29.1365 15.2191 29.3076 15.2693 29.5053C15.3194 29.7029 15.2925 29.9122 15.194 30.0907L14.4566 31.4399C14.4117 31.5263 14.3496 31.6026 14.2742 31.6642C14.1988 31.7258 14.1117 31.7714 14.018 31.798C13.9244 31.8247 13.8263 31.832 13.7298 31.8195C13.6333 31.8069 13.5403 31.7747 13.4566 31.7249C13.285 31.615 13.1615 31.4439 13.1114 31.2463C13.0613 31.0487 13.0882 30.8394 13.1867 30.6609L13.9178 29.3117ZM17.2188 31.8125C17.2638 31.7251 17.3262 31.648 17.4022 31.5858C17.4782 31.5236 17.5662 31.4778 17.6606 31.451C17.7551 31.4243 17.8541 31.4173 17.9514 31.4304C18.0487 31.4435 18.1422 31.4765 18.2262 31.5274C18.398 31.6369 18.5217 31.8076 18.5723 32.005C18.6229 32.2023 18.5966 32.4115 18.4987 32.5902L17.7625 33.9394C17.7177 34.0276 17.655 34.1055 17.5785 34.1683C17.502 34.231 17.4134 34.2773 17.3181 34.304C17.2229 34.3308 17.1231 34.3376 17.0252 34.3239C16.9272 34.3102 16.8331 34.2763 16.7489 34.2245C16.5774 34.1144 16.4542 33.9431 16.4043 33.7455C16.3544 33.5479 16.3815 33.3387 16.4801 33.1604L17.2188 31.8125ZM21.8322 28.4977H24.332L22.2484 31.4148H25.1644L19.3324 36L21.5935 32.2489H19.3324L21.8322 28.4977ZM25.9044 31.8112C25.9492 31.7248 26.0113 31.6484 26.0867 31.5869C26.1621 31.5253 26.2493 31.4797 26.3429 31.453C26.4365 31.4263 26.5346 31.4191 26.6311 31.4316C26.7277 31.4442 26.8206 31.4764 26.9043 31.5261C27.076 31.636 27.1994 31.8072 27.2495 32.0048C27.2997 32.2024 27.2728 32.4117 27.1743 32.5902L26.4368 33.9394C26.392 34.0258 26.3299 34.1021 26.2545 34.1637C26.1791 34.2253 26.0919 34.2709 25.9983 34.2976C25.9047 34.3243 25.8066 34.3315 25.7101 34.319C25.6135 34.3064 25.5206 34.2742 25.4369 34.2245C25.2652 34.1146 25.1418 33.9434 25.0917 33.7458C25.0415 33.5482 25.0684 33.3389 25.1669 33.1604L25.9044 31.8112ZM30.4553 29.3105C30.5002 29.2231 30.5626 29.146 30.6386 29.0838C30.7146 29.0216 30.8026 28.9757 30.8971 28.949C30.9915 28.9223 31.0905 28.9152 31.1878 28.9284C31.2851 28.9415 31.3787 28.9745 31.4627 29.0254C31.6341 29.1355 31.7573 29.3067 31.8072 29.5043C31.8571 29.7019 31.83 29.9111 31.7314 30.0894L30.9977 31.4386C30.9528 31.5259 30.8904 31.6031 30.8144 31.6653C30.7383 31.7274 30.6504 31.7733 30.5559 31.8001C30.4614 31.8268 30.3625 31.8338 30.2652 31.8207C30.1679 31.8075 30.0743 31.7745 29.9903 31.7237C29.8189 31.6136 29.6956 31.4425 29.6455 31.2449C29.5954 31.0474 29.6221 30.8382 29.7203 30.6596L30.4553 29.3105Z" fill="url(#paint0_linear_110_69)"/>
</g>
<defs>
<linearGradient id="paint0_linear_110_69" x1="23.5" y1="13.5" x2="23.5" y2="36" gradientUnits="userSpaceOnUse">
<stop stop-color="#00E0FF"/>
<stop offset="1" stop-color="#00A0B6"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

6
ruoyi-ui/src/views/JiHeExpressway/images/ListItem/Failed.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

6
ruoyi-ui/src/views/JiHeExpressway/images/ListItem/Reviewed.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

6
ruoyi-ui/src/views/JiHeExpressway/images/ListItem/ToBeReviewed.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

14
ruoyi-ui/src/views/JiHeExpressway/images/ListItem/TrafficControl.svg

@ -0,0 +1,14 @@
<svg width="47" height="47" viewBox="0 0 47 47" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#228;&#186;&#164;&#233;&#128;&#154;&#231;&#174;&#161;&#229;&#136;&#182;">
<rect id="Rectangle 3695" x="0.5" y="0.5" width="46" height="46" rx="23" fill="#00B3CC" fill-opacity="0.2" stroke="#00B3CC"/>
<circle id="Ellipse 2116" cx="23.5" cy="23.5" r="16.5" stroke="#01ADC4" stroke-width="2"/>
<path id="Vector" d="M32.3499 22.438C32.7961 23.5 33.4509 24.562 33.4509 25.6253V30.9367C33.4509 31.6328 32.8344 32 31.8008 32C30.7672 32 30.1507 31.5691 30.1507 30.9367V29.8747H15.8493V30.9367C15.8493 31.5742 15.2341 32 14.1992 32C13.1643 32 12.5491 31.6328 12.5491 30.9367V25.6253C12.5491 24.562 13.2092 23.5 13.6501 22.438C14.091 21.376 12 21.5073 12 20.8443C12 20.1813 12.132 19.781 13.0996 19.781H14.7497C14.7497 19.781 15.5311 17.6136 15.8493 16.5937C16.1674 15.5737 17.4993 15 18.6003 15H27.3997C28.5007 15 29.8313 15.5737 30.1507 16.5937C30.4702 17.6136 31.2503 19.781 31.2503 19.781H32.9004C33.8627 19.781 34 20.1801 34 20.8443C34 21.5085 31.9051 21.3747 32.3499 22.438ZM20.2503 26.1557C20.2503 26.2965 20.3081 26.4315 20.4111 26.5312C20.514 26.6308 20.6537 26.687 20.7995 26.6873H25.2005C25.3463 26.687 25.486 26.6308 25.5889 26.5312C25.6919 26.4315 25.7497 26.2965 25.7497 26.1557V25.6253C25.7497 25.4845 25.6919 25.3495 25.5889 25.2498C25.486 25.1502 25.3463 25.094 25.2005 25.0937H20.7995C20.6537 25.094 20.514 25.1502 20.4111 25.2498C20.3081 25.3495 20.2503 25.4845 20.2503 25.6253V26.1557ZM14.7497 26.1557C14.7497 26.4709 14.8464 26.779 15.0278 27.0411C15.2091 27.3032 15.4668 27.5074 15.7683 27.6281C16.0698 27.7487 16.4016 27.7802 16.7216 27.7187C17.0417 27.6572 17.3357 27.5055 17.5665 27.2826C17.7973 27.0597 17.9544 26.7757 18.0181 26.4666C18.0818 26.1575 18.0491 25.837 17.9242 25.5458C17.7993 25.2546 17.5878 25.0057 17.3165 24.8306C17.0451 24.6555 16.7261 24.562 16.3997 24.562C15.9621 24.562 15.5424 24.7299 15.233 25.0288C14.9235 25.3277 14.7497 25.733 14.7497 26.1557ZM30.1507 19.781C30.1507 19.2506 29.0498 17.1253 29.0498 17.1253H16.9502C16.9502 17.1253 15.8493 19.2506 15.8493 19.781V20.3127C15.8493 20.4522 15.8778 20.5904 15.9331 20.7194C15.9884 20.8483 16.0696 20.9654 16.1718 21.0641C16.2741 21.1627 16.3954 21.2409 16.529 21.2942C16.6626 21.3475 16.8057 21.3748 16.9502 21.3747H29.0498C29.1943 21.3748 29.3374 21.3475 29.471 21.2942C29.6046 21.2409 29.7259 21.1627 29.8282 21.0641C29.9304 20.9654 30.0116 20.8483 30.0669 20.7194C30.1222 20.5904 30.1507 20.4522 30.1507 20.3127V19.781ZM29.6003 24.562C29.2739 24.562 28.9549 24.6555 28.6835 24.8306C28.4122 25.0057 28.2007 25.2546 28.0758 25.5458C27.9509 25.837 27.9182 26.1575 27.9819 26.4666C28.0456 26.7757 28.2027 27.0597 28.4335 27.2826C28.6643 27.5055 28.9583 27.6572 29.2784 27.7187C29.5984 27.7802 29.9302 27.7487 30.2317 27.6281C30.5332 27.5074 30.7909 27.3032 30.9722 27.0411C31.1536 26.779 31.2503 26.4709 31.2503 26.1557C31.2503 25.733 31.0765 25.3277 30.767 25.0288C30.4576 24.7299 30.0379 24.562 29.6003 24.562Z" fill="url(#paint0_linear_110_72)"/>
<path id="Line 523" d="M9.5 13.5L36.5 35" stroke="#01A9C0" stroke-width="2"/>
</g>
<defs>
<linearGradient id="paint0_linear_110_72" x1="18.0332" y1="-0.42283" x2="18.0332" y2="32" gradientUnits="userSpaceOnUse">
<stop stop-color="#00E0FF"/>
<stop offset="1" stop-color="#00A0B6"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/CrowdnessIndicatorRankings/index.vue

@ -19,7 +19,7 @@
</template>
<script>
import Card from "./../../components/Card.vue";
import Card from "@screen/components/Card2/Card.vue";;
import AMapContainer from "@screen/pages/Home/components/AMapContainer/index.vue"
export default {

150
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DispatchLiaison/index.vue

@ -1,90 +1,90 @@
<template>
<Card class='DispatchLiaison' title="调度联络">
<template #title-suffix>
<ButtonGradient class="title-button">
调度
</ButtonGradient>
</template>
<Descriptions :list="list" style="gap: 24px; flex: 1;">
<template #content-phone1="{ data: { text } }">
{{ text }}
<img src="./images/phone.svg" />
</template>
<template #content-phone2="{ data: { text } }">
{{ text }}
<img src="./images/phone.svg" />
<img src="./images/camera.svg" />
</template>
<template #content-rescueVehicles="{ data: { text } }">
{{ text }}
<img src="./images/rescueVehicles.svg" />
</template>
</Descriptions>
</Card>
<Card class='DispatchLiaison' title="调度联络">
<template #title-suffix>
<ButtonGradient class="title-button">
调度
</ButtonGradient>
</template>
<Descriptions :list="list" style="gap: 24px; flex: 1;">
<template #content-phone1="{ data: { text } }">
{{ text }}
<img src="./images/phone.svg" />
</template>
<template #content-phone2="{ data: { text } }">
{{ text }}
<img src="./images/phone.svg" />
<img src="./images/camera.svg" />
</template>
<template #content-rescueVehicles="{ data: { text } }">
{{ text }}
<img src="./images/rescueVehicles.svg" />
</template>
</Descriptions>
</Card>
</template>
<script>
import Card from "./../../components/Card.vue"
import Card from "@screen/components/Card2/Card.vue";
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
import Descriptions from '@screen/components/Descriptions.vue';
export default {
name: 'DispatchLiaison',
components: {
Card,
ButtonGradient,
Descriptions
},
data() {
return {
list: [
{
label: '业务单位',
text: '山东正晨科技股份有限公司',
gridColumn: 2
},
{
label: '值班领导',
text: '张亮亮',
},
{
label: '手机',
key: "phone1",
text: '18888888888',
},
{
label: '调度人员',
text: '',
gridColumn: 2
},
{
label: '路管人员',
text: '王一博',
},
{
label: '手机',
key: "phone2",
text: '16666666666',
},
{
label: '救援车辆',
key: "rescueVehicles",
text: '鲁A34567 (大型清障车)',
gridColumn: 2
},
]
}
}
name: 'DispatchLiaison',
components: {
Card,
ButtonGradient,
Descriptions
},
data() {
return {
list: [
{
label: '业务单位',
text: '山东正晨科技股份有限公司',
gridColumn: 2
},
{
label: '值班领导',
text: '张亮亮',
},
{
label: '手机',
key: "phone1",
text: '18888888888',
},
{
label: '调度人员',
text: '',
gridColumn: 2
},
{
label: '路管人员',
text: '王一博',
},
{
label: '手机',
key: "phone2",
text: '16666666666',
},
{
label: '救援车辆',
key: "rescueVehicles",
text: '鲁A34567 (大型清障车)',
gridColumn: 2
},
]
}
}
}
</script>
<style lang='scss' scoped>
.DispatchLiaison {
::v-deep {
.content {
display: flex;
align-items: center;
}
}
::v-deep {
.content {
display: flex;
align-items: center;
}
}
}
</style>

518
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalPlan/index.vue

@ -1,301 +1,301 @@
<template>
<Card class='DisposalPlan' title="处置预案">
<canvas ref="FlowCanvasRef" />
</Card>
<Card class='DisposalPlan' title="处置预案">
<canvas ref="FlowCanvasRef" />
</Card>
</template>
<script>
import Card from "./../../components/Card.vue";
import Card from "@screen/components/Card2/Card.vue";;
import { CanvasFlow } from "./utils";
import { merge } from "lodash";
function getDefaultBlockOption() {
return {
width: 100,
height: 30,
radius: 9,
linearGradient: "linear-gradient(180deg, #005C79 0%, #009BCC 100%)",
text: {
font: "PingFang SC",
fontSize: 14,
color: "#FFFFFF"
},
}
return {
width: 100,
height: 30,
radius: 9,
linearGradient: "linear-gradient(180deg, #005C79 0%, #009BCC 100%)",
text: {
font: "PingFang SC",
fontSize: 14,
color: "#FFFFFF"
},
}
}
function getDefaultLegendOption() {
return {
width: 9,
height: 9,
y: 0,
text: {
font: "PingFang SC",
fontSize: 9,
align: 'left',
color: "#FFFFFF"
},
}
return {
width: 9,
height: 9,
y: 0,
text: {
font: "PingFang SC",
fontSize: 9,
align: 'left',
color: "#FFFFFF"
},
}
}
const status = {
0: `linear-gradient(180deg, #004960 0%, #004B62 100%)`,
1: `linear-gradient(90deg, #006121 0%, #488000 100%)`,
2: `linear-gradient(180deg, #005C79 0%, #009BCC 100%)`,
0: `linear-gradient(180deg, #004960 0%, #004B62 100%)`,
1: `linear-gradient(90deg, #006121 0%, #488000 100%)`,
2: `linear-gradient(180deg, #005C79 0%, #009BCC 100%)`,
}
export default {
name: 'DisposalPlan',
components: {
Card
},
data() {
return {
data: null
}
},
watch: {
data() {
this.draw();
}
},
mounted() {
this.canvasFlow = new CanvasFlow(this.$refs.FlowCanvasRef);
name: 'DisposalPlan',
components: {
Card
},
data() {
return {
data: null
}
},
watch: {
data() {
this.draw();
}
},
mounted() {
this.canvasFlow = new CanvasFlow(this.$refs.FlowCanvasRef);
this.draw();
},
methods: {
drawBlock({ x, y, width, height, backgroundColor, linearGradient,
radius,
text: {
color, text, fontSize, fontWeight, fontFamily
} = {} }) {
this.draw();
},
methods: {
drawBlock({ x, y, width, height, backgroundColor, linearGradient,
radius,
text: {
color, text, fontSize, fontWeight, fontFamily
} = {} }) {
if (linearGradient) this.canvasFlow.setLinearGradient(...this.canvasFlow.transformCssLinearGradient(x, y, width, height, linearGradient))
if (linearGradient) this.canvasFlow.setLinearGradient(...this.canvasFlow.transformCssLinearGradient(x, y, width, height, linearGradient))
this.canvasFlow.drawRectangle({ x, y, width, height, backgroundColor, radius });
this.canvasFlow.drawRectangle({ x, y, width, height, backgroundColor, radius });
if (text) {
this.canvasFlow.fillText(text, { x, y, color, fontSize, fontWeight, fontFamily }, { width, height });
}
},
drawLegend({ x, y, width, height, backgroundColor, linearGradient,
radius,
text: {
text, ...textOptions
} = {} }) {
if (text) {
this.canvasFlow.fillText(text, { x, y, color, fontSize, fontWeight, fontFamily }, { width, height });
}
},
drawLegend({ x, y, width, height, backgroundColor, linearGradient,
radius,
text: {
text, ...textOptions
} = {} }) {
if (linearGradient) this.canvasFlow.setLinearGradient(...this.canvasFlow.transformCssLinearGradient(x, y, width, height, linearGradient))
if (linearGradient) this.canvasFlow.setLinearGradient(...this.canvasFlow.transformCssLinearGradient(x, y, width, height, linearGradient))
this.canvasFlow.drawRectangle({ x, y, width, height, backgroundColor, radius });
this.canvasFlow.drawRectangle({ x, y, width, height, backgroundColor, radius });
if (text) {
this.canvasFlow.fillText(text, { ...textOptions, x: x + width + 3, y: y + height / 2, }, { height });
}
},
drawLine({ x, y, vertices }) {
this.canvasFlow.drawLine({ x, y, color: '#154D6A', lineWidth: 6 }, vertices);
},
draw() {
const { clientWidth } = this.$refs.FlowCanvasRef;
if (text) {
this.canvasFlow.fillText(text, { ...textOptions, x: x + width + 3, y: y + height / 2, }, { height });
}
},
drawLine({ x, y, vertices }) {
this.canvasFlow.drawLine({ x, y, color: '#154D6A', lineWidth: 6 }, vertices);
},
draw() {
const { clientWidth } = this.$refs.FlowCanvasRef;
const defaultBlockOption = getDefaultBlockOption();
const defaultBlockOption = getDefaultBlockOption();
const halfWidth = defaultBlockOption.width / 2;
const halfWidth = defaultBlockOption.width / 2;
this.canvasFlow.clear();
this.canvasFlow.clear();
const legends = [
{
type: 'drawLegend',
options: merge(getDefaultLegendOption(), {
x: 150,
linearGradient: "linear-gradient(180deg, #004960 0%, #004B62 100%)",
text: {
text: "未完成"
}
})
},
{
type: 'drawLegend',
options: merge(getDefaultLegendOption(), {
x: 210,
linearGradient: "linear-gradient(90deg, #006121 0%, #488000 100%)",
text: {
text: "进行中"
}
})
},
{
type: 'drawLegend',
options: merge(getDefaultLegendOption(), {
x: 270,
linearGradient: "linear-gradient(180deg, #005C79 0%, #009BCC 100%)",
text: {
text: "已完成"
}
})
}
]
const legends = [
{
type: 'drawLegend',
options: merge(getDefaultLegendOption(), {
x: 150,
linearGradient: "linear-gradient(180deg, #004960 0%, #004B62 100%)",
text: {
text: "未完成"
}
})
},
{
type: 'drawLegend',
options: merge(getDefaultLegendOption(), {
x: 210,
linearGradient: "linear-gradient(90deg, #006121 0%, #488000 100%)",
text: {
text: "进行中"
}
})
},
{
type: 'drawLegend',
options: merge(getDefaultLegendOption(), {
x: 270,
linearGradient: "linear-gradient(180deg, #005C79 0%, #009BCC 100%)",
text: {
text: "已完成"
}
})
}
]
const blockList = [
{
type: 'drawBlock',
key: "DisposalPlan",
options: merge(getDefaultBlockOption(), {
x: clientWidth / 2 - halfWidth,
y: 24,
text: {
text: "处置预案"
}
})
},
{
type: 'drawBlock',
key: "AnalyzeConfirm",
options: merge(getDefaultBlockOption(), {
x: clientWidth / 2 - halfWidth,
y: 75,
text: {
text: "分析确认"
}
})
},
{
type: 'drawBlock',
key: "InstructionsGiven",
options: merge(getDefaultBlockOption(), {
x: clientWidth / 7 - halfWidth,
y: 123,
linearGradient: "linear-gradient(90deg, #006121 0%, #488000 100%)",
text: {
text: "指令下达"
}
})
},
{
type: 'drawBlock',
key: "OnSiteConfirmation",
options: merge(getDefaultBlockOption(), {
x: clientWidth / 7 * 6 - halfWidth,
y: 123,
linearGradient: "linear-gradient(90deg, #006121 0%, #488000 100%)",
text: {
text: "现场确认"
}
})
},
{
type: 'drawBlock',
key: "OnSiteDisposal",
options: merge(getDefaultBlockOption(), {
x: clientWidth / 2 - halfWidth,
y: 170,
linearGradient: "linear-gradient(180deg, #004960 0%, #004B62 100%)",
text: {
text: "现场处置"
}
})
},
{
type: 'drawBlock',
key: "FollowUpProcessing",
options: merge(getDefaultBlockOption(), {
x: clientWidth / 2 - halfWidth,
y: 225,
linearGradient: "linear-gradient(180deg, #004960 0%, #004B62 100%)",
text: {
text: "后续处理"
}
})
},
];
const blockList = [
{
type: 'drawBlock',
key: "DisposalPlan",
options: merge(getDefaultBlockOption(), {
x: clientWidth / 2 - halfWidth,
y: 24,
text: {
text: "处置预案"
}
})
},
{
type: 'drawBlock',
key: "AnalyzeConfirm",
options: merge(getDefaultBlockOption(), {
x: clientWidth / 2 - halfWidth,
y: 75,
text: {
text: "分析确认"
}
})
},
{
type: 'drawBlock',
key: "InstructionsGiven",
options: merge(getDefaultBlockOption(), {
x: clientWidth / 7 - halfWidth,
y: 123,
linearGradient: "linear-gradient(90deg, #006121 0%, #488000 100%)",
text: {
text: "指令下达"
}
})
},
{
type: 'drawBlock',
key: "OnSiteConfirmation",
options: merge(getDefaultBlockOption(), {
x: clientWidth / 7 * 6 - halfWidth,
y: 123,
linearGradient: "linear-gradient(90deg, #006121 0%, #488000 100%)",
text: {
text: "现场确认"
}
})
},
{
type: 'drawBlock',
key: "OnSiteDisposal",
options: merge(getDefaultBlockOption(), {
x: clientWidth / 2 - halfWidth,
y: 170,
linearGradient: "linear-gradient(180deg, #004960 0%, #004B62 100%)",
text: {
text: "现场处置"
}
})
},
{
type: 'drawBlock',
key: "FollowUpProcessing",
options: merge(getDefaultBlockOption(), {
x: clientWidth / 2 - halfWidth,
y: 225,
linearGradient: "linear-gradient(180deg, #004960 0%, #004B62 100%)",
text: {
text: "后续处理"
}
})
},
];
const linePoints = [
{
x: blockList[0].options.x + blockList[0].options.width / 2,
y: blockList[0].options.y + blockList[0].options.height,
vertices: [
{
x: blockList[0].options.x + blockList[0].options.width / 2,
y: blockList[2].options.y + blockList[2].options.height / 2
}
]
},
{
x: blockList[2].options.x + blockList[2].options.width / 2,
y: blockList[2].options.y + blockList[2].options.height / 2,
vertices: [
{
x: blockList[3].options.x + blockList[3].options.width / 2,
y: blockList[2].options.y + blockList[2].options.height / 2,
}
]
},
{
x: blockList[0].options.x + blockList[0].options.width / 2,
y: blockList[4].options.y,
vertices: [
{
x: blockList[0].options.x + blockList[0].options.width / 2,
y: blockList[5].options.y,
}
]
},
{
x: blockList[2].options.x + blockList[2].options.width / 2,
y: blockList[2].options.y + blockList[2].options.height,
vertices: [
{
x: blockList[2].options.x + blockList[2].options.width / 2,
y: blockList[4].options.y + blockList[4].options.height / 2,
},
{
x: blockList[4].options.x,
y: blockList[4].options.y + blockList[4].options.height / 2,
}
]
},
{
x: blockList[3].options.x + blockList[3].options.width / 2,
y: blockList[3].options.y + blockList[3].options.height,
vertices: [
{
x: blockList[3].options.x + blockList[3].options.width / 2,
y: blockList[4].options.y + blockList[4].options.height / 2,
},
{
x: blockList[4].options.x - blockList[3].options.width,
y: blockList[4].options.y + blockList[4].options.height / 2,
}
]
},
];
const linePoints = [
{
x: blockList[0].options.x + blockList[0].options.width / 2,
y: blockList[0].options.y + blockList[0].options.height,
vertices: [
{
x: blockList[0].options.x + blockList[0].options.width / 2,
y: blockList[2].options.y + blockList[2].options.height / 2
}
]
},
{
x: blockList[2].options.x + blockList[2].options.width / 2,
y: blockList[2].options.y + blockList[2].options.height / 2,
vertices: [
{
x: blockList[3].options.x + blockList[3].options.width / 2,
y: blockList[2].options.y + blockList[2].options.height / 2,
}
]
},
{
x: blockList[0].options.x + blockList[0].options.width / 2,
y: blockList[4].options.y,
vertices: [
{
x: blockList[0].options.x + blockList[0].options.width / 2,
y: blockList[5].options.y,
}
]
},
{
x: blockList[2].options.x + blockList[2].options.width / 2,
y: blockList[2].options.y + blockList[2].options.height,
vertices: [
{
x: blockList[2].options.x + blockList[2].options.width / 2,
y: blockList[4].options.y + blockList[4].options.height / 2,
},
{
x: blockList[4].options.x,
y: blockList[4].options.y + blockList[4].options.height / 2,
}
]
},
{
x: blockList[3].options.x + blockList[3].options.width / 2,
y: blockList[3].options.y + blockList[3].options.height,
vertices: [
{
x: blockList[3].options.x + blockList[3].options.width / 2,
y: blockList[4].options.y + blockList[4].options.height / 2,
},
{
x: blockList[4].options.x - blockList[3].options.width,
y: blockList[4].options.y + blockList[4].options.height / 2,
}
]
},
];
linePoints.forEach(item => this.drawLine(item));
linePoints.forEach(item => this.drawLine(item));
[...blockList, ...legends].forEach(item => {
this[item.type]?.(item.options)
})
}
},
[...blockList, ...legends].forEach(item => {
this[item.type]?.(item.options)
})
}
},
}
</script>
<style lang='scss' scoped>
.DisposalPlan {
::v-deep {
.content {
display: flex;
flex-direction: column;
}
}
::v-deep {
.content {
display: flex;
flex-direction: column;
}
}
canvas {
flex: 1;
width: 100%;
height: 100%;
}
canvas {
flex: 1;
width: 100%;
height: 100%;
}
}
</style>

95
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalProcess/data.js

@ -35,3 +35,98 @@ export const timeLine1List = [
isActive: false,
},
];
export const timeLine2List = [
{
time: "2023-12-21 16:35:44",
name: "王传明",
desc: `<img style="width: 390px;" src="${require(`./images/mock1.jpg`)}" /> <img style="width: 390px;" src="${require(`./images/mock2.jpg`)}" />`,
posts: "山东高速枣庄发展有限公司",
direction: "left",
},
{
time: "2023-12-21 17:48:23",
name: "王霞",
desc: `
四级预案升级为三级应急预案已报中心领导智慧管理中心
`,
posts: "山东高速滨州发展有限公司",
direction: "right",
},
{
time: "2023-06-14 12:07:53",
name: "王传明",
desc: `
<audio controls src=""></audio>
<div>翻译:现场隔离磁已恢复完毕应急人员已撤离现场</div>
`,
posts: "山东高速枣庄发展有限公司",
direction: "left",
},
{
time: "2023-6-15 17:48:23",
name: "王霞",
desc: `
安全警示标志已收取道路恢复畅通
`,
posts: "山东高速滨州发展有限公司",
direction: "right",
},
{
time: "2023-06-14 12:08:02",
name: "王传明",
desc: `
<audio controls src=""></audio>
<div>翻译:安全警示标志已收取道路恢复畅通申请事件解除</div>
<div style="color: #F7C42C;">
节点:恢复畅通
</div>
`,
posts: "山东高速枣庄发展有限公司",
direction: "left",
},
{
time: "2023-06-14 12:10:21",
name: "张庆庆",
desc: `
事件解除处置完毕处置时长: 2小时31分钟
`,
posts: "山东高速枣庄发展有限公司",
direction: "right",
},
{
time: "2023-09-24 13:48:23",
name: "王霞",
desc: `
四级预案升级为三级应急预案已报中心领导智慧管理中心
`,
posts: "山东高速滨州发展有限公司",
direction: "right",
},
{
time: "2023-09-24 13:51:52",
name: "王霞",
desc: `
重要事件上报:G25长深高速K1303+200深圳方向一小轿车和一辆货车追尾事故造成主线封闭并在滨州南滨州滨城收费站设置分流点分流点压车5公里各部门已做好保畅工作: <span style="color: blue;cursor: pointer;">详情</span>
`,
posts: "山东高速滨州发展有限公司",
direction: "right",
},
{
time: "2023-09-24 13:52:39",
name: "王霞",
desc: `
<div>现场开始清障</div>
<div style="color: #F7C42C;">节点:开始清障</div>
`,
posts: "山东高速滨州发展有限公司",
direction: "right",
},
{
time: "2023-09-24 13:55:25",
name: "王霞",
desc: `事故处理完毕,但是货物仍需倒货,现场开通一条行车道可通行,主线封闭解除。`,
posts: "山东高速滨州发展有限公司",
direction: "right",
},
];

BIN
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalProcess/images/mock1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

BIN
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalProcess/images/mock2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

19
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalProcess/index.vue

@ -41,14 +41,14 @@
</template>
<script>
import Card from "./../../components/Card.vue";
import Card from "@screen/components/Card2/Card.vue";;
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
import RadioGroup from '@screen/components/RadioGroup/index.vue';
import TimeLine1 from "@screen/components/TimeLine/TimeLine1/index";
import TimeLine2 from "@screen/components/TimeLine/TimeLine2/index";
import { timeLine1List } from "./data";
import { timeLine1List, timeLine2List } from "./data";
export default {
name: 'DisposalProcess',
@ -64,13 +64,14 @@ export default {
data() {
return {
timeLine1List,
timeLine2List: Array.from({ length: 6 }).map(() => ({
title: "接警记录",
time: "2023-12-21 16:35:44",
name: "甘易玫",
desc: "描述性文字文字文字文字文字文字文字文字描述性文字文字文字文字文字文字文字文字",
posts: '淄博发展公司管理员'
})),
// timeLine2List: Array.from({ length: 6 }).map(() => ({
// title: "",
// time: "2023-12-21 16:35:44",
// name: "",
// desc: "",
// posts: ''
// })),
timeLine2List,
isFullHeight: false
}
},

192
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/index.vue

@ -1,119 +1,119 @@
<template>
<Card class='EventInformation' title="事件信息">
<template #title-suffix>
<ButtonGradient class="title-button">
搜索
</ButtonGradient>
<ButtonGradient class="title-button">
编写
</ButtonGradient>
</template>
<Card class='EventInformation' title="事件信息">
<template #title-suffix>
<ButtonGradient class="title-button">
搜索
</ButtonGradient>
<ButtonGradient class="title-button">
编写
</ButtonGradient>
</template>
<Descriptions :list="list" style="gap: 15px;" />
<Descriptions :list="list" style="gap: 15px;" />
<div class="road-lane">
<div v-for="i in 11">
<img v-if="i != 6" src="./images/normal.svg">
</div>
</div>
<div class="bottom-info">
<div class="tag">拥堵五级事件</div>
</div>
</Card>
<div class="road-lane">
<div v-for="i in 11">
<img v-if="i != 6" src="./images/normal.svg">
</div>
</div>
<div class="bottom-info">
<div class="tag">拥堵五级事件</div>
</div>
</Card>
</template>
<script>
import Card from "./../../components/Card.vue"
import Card from "@screen/components/Card2/Card.vue";
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
import Descriptions from '@screen/components/Descriptions.vue';
export default {
name: 'EventInformation',
components: {
Card,
ButtonGradient,
Descriptions
},
data() {
return {
name: 'EventInformation',
components: {
Card,
ButtonGradient,
Descriptions
},
data() {
return {
list: [
{
label: '情报时间',
text: '2024-01-03 14:00:21',
gridColumn: 2
},
{
label: '情报来源',
text: '96659',
gridColumn: 2
},
{
label: '事件类型',
text: '交通事故',
},
{
label: '所属路线',
text: 'G34济菏高速',
},
{
label: '道路方向',
text: '菏泽方向',
},
{
label: '桩号:',
text: "K266+001",
}
]
}
}
list: [
{
label: '情报时间',
text: '2024-01-03 14:00:21',
gridColumn: 2
},
{
label: '情报来源',
text: '96659',
gridColumn: 2
},
{
label: '事件类型',
text: '交通事故',
},
{
label: '所属路线',
text: 'G34济菏高速',
},
{
label: '道路方向',
text: '菏泽方向',
},
{
label: '桩号:',
text: "K266+001",
}
]
}
}
}
</script>
<style lang='scss' scoped>
.EventInformation {
::v-deep {
>.content {
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 12px;
}
}
::v-deep {
>.content {
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 12px;
}
}
.road-lane {
background-image: url(./images/lane.svg);
flex: 1;
background-repeat: no-repeat;
background-size: 100% 100%;
display: grid;
grid-template-columns: 1.2fr 1fr 1fr 1fr 1fr 0.6fr 1fr 1fr 1fr 1fr 1.2fr;
.road-lane {
background-image: url(./images/lane.svg);
flex: 1;
background-repeat: no-repeat;
background-size: 100% 100%;
display: grid;
grid-template-columns: 1.2fr 1fr 1fr 1fr 1fr 0.6fr 1fr 1fr 1fr 1fr 1.2fr;
>div {
display: flex;
align-items: end;
padding-bottom: 18px;
justify-content: center;
}
}
>div {
display: flex;
align-items: end;
padding-bottom: 18px;
justify-content: center;
}
}
.bottom-info {
display: flex;
gap: 9px;
.bottom-info {
display: flex;
gap: 9px;
.tag {
padding: 3px 6px;
height: 24px;
background: rgba(245, 80, 80, 0.4);
border-radius: 2px;
border: 1px solid #F55050;
.tag {
padding: 3px 6px;
height: 24px;
background: rgba(245, 80, 80, 0.4);
border-radius: 2px;
border: 1px solid #F55050;
font-size: 12px;
font-family: Source Han Sans SC, Source Han Sans SC;
font-weight: 400;
color: #F55050;
line-height: 14px;
}
}
font-size: 12px;
font-family: Source Han Sans SC, Source Han Sans SC;
font-weight: 400;
color: #F55050;
line-height: 14px;
}
}
}
</style>

46
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/RealTimeVideo/index.vue

@ -1,37 +1,37 @@
<template>
<Card class='RealTimeVideo' title="实时视频">
<Video class="item-video" />
<Video class="item-video" />
</Card>
<Card class='RealTimeVideo' title="实时视频">
<Video class="item-video" />
<Video class="item-video" />
</Card>
</template>
<script>
import Card from "./../../components/Card.vue";
import Card from "@screen/components/Card2/Card.vue";;
import Video from "@screen/components/Video"
export default {
name: 'RealTimeVideo',
components: {
Card,
Video
}
name: 'RealTimeVideo',
components: {
Card,
Video
}
}
</script>
<style lang='scss' scoped>
.RealTimeVideo {
::v-deep {
.content {
display: flex;
align-items: center;
justify-content: space-between;
gap: 9px;
}
}
::v-deep {
.content {
display: flex;
align-items: center;
justify-content: space-between;
gap: 9px;
}
}
.item-video {
flex: 1;
width: calc(50% - 4.5px);
height: 100%;
}
.item-video {
flex: 1;
width: calc(50% - 4.5px);
height: 100%;
}
}
</style>

244
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/ReleaseInformation/index.vue

@ -1,150 +1,150 @@
<template>
<Card class='ReleaseInformation' title="信息发布">
<Form :formList="formList" column="1">
<template #platform="{ formData, data }">
<CheckboxGroup :list="checkboxList" v-model="formData[data.key]">
<template v-for="item in checkboxList" #[item.key]="{ data }">
<div class="checkbox-content">
<img :src="require(`./images/${item.key}.svg`)" />
{{ data.label }}
</div>
</template>
</CheckboxGroup>
</template>
</Form>
<Card class='ReleaseInformation' title="信息发布">
<Form :formList="formList" column="1">
<template #platform="{ formData, data }">
<CheckboxGroup :list="checkboxList" v-model="formData[data.key]">
<template v-for="item in checkboxList" #[item.key]="{ data }">
<div class="checkbox-content">
<img :src="require(`./images/${item.key}.svg`)" />
{{ data.label }}
</div>
</template>
</CheckboxGroup>
</template>
</Form>
<div class="line"></div>
<div class="line"></div>
<Descriptions :list="list" style="flex: 1;" column="1" titleStyle="align-self: flex-start;">
<template #content-informationBoard>
<div class="informationBoard-content">
<div>暂无情报板推荐发布信息</div>
<img src="./images/add.svg" />
</div>
</template>
</Descriptions>
<Descriptions :list="list" style="flex: 1;" column="1" titleStyle="align-self: flex-start;">
<template #content-informationBoard>
<div class="informationBoard-content">
<div>暂无情报板推荐发布信息</div>
<img src="./images/add.svg" />
</div>
</template>
</Descriptions>
<div class="bottom">
<ButtonGradient class="title-button special-button">
一键发布
</ButtonGradient>
<ButtonGradient class="title-button special-button">
发布预案
</ButtonGradient>
</div>
</Card>
<div class="bottom">
<ButtonGradient class="title-button special-button">
一键发布
</ButtonGradient>
<ButtonGradient class="title-button special-button">
发布预案
</ButtonGradient>
</div>
</Card>
</template>
<script>
import Card from "./../../components/Card.vue"
import Card from "@screen/components/Card2/Card.vue";
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
import Form from '@screen/components/FormConfig';
import CheckboxGroup from '@screen/components/CheckboxGroup/index.vue';
import Descriptions from '@screen/components/Descriptions.vue';
export default {
name: 'ReleaseInformation',
components: {
Card,
ButtonGradient,
CheckboxGroup,
Form,
Descriptions
},
data() {
return {
list: [
{
label: '情报板',
key: "informationBoard",
gridColumn: 1
}
],
checkboxValues: [],
checkboxList: [
{ key: 'weChat', label: '微信' },
{ key: 'message', label: '短信' },
{ key: 'website', label: '网站' },
{ key: 'weibo', label: '新浪' },
],
formList: [{
label: "发布内容:",
key: "content",
type: "input",
options: {
type: "textarea",
autosize: true,
maxlength: 200,
autosize: { minRows: 9, maxRows: 9 },
showWordLimit: true
}
},
{
label: "发布平台:",
key: "platform",
type: "input",
default: []
}],
}
}
name: 'ReleaseInformation',
components: {
Card,
ButtonGradient,
CheckboxGroup,
Form,
Descriptions
},
data() {
return {
list: [
{
label: '情报板',
key: "informationBoard",
gridColumn: 1
}
],
checkboxValues: [],
checkboxList: [
{ key: 'weChat', label: '微信' },
{ key: 'message', label: '短信' },
{ key: 'website', label: '网站' },
{ key: 'weibo', label: '新浪' },
],
formList: [{
label: "发布内容:",
key: "content",
type: "input",
options: {
type: "textarea",
autosize: true,
maxlength: 200,
autosize: { minRows: 9, maxRows: 9 },
showWordLimit: true
}
},
{
label: "发布平台:",
key: "platform",
type: "input",
default: []
}],
}
}
}
</script>
<style lang='scss' scoped>
.ReleaseInformation {
::v-deep {
.content {
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 18px;
}
}
::v-deep {
.content {
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 18px;
}
}
.informationBoard-content {
width: 100%;
height: 100%;
display: flex;
align-items: start;
gap: 6px;
.informationBoard-content {
width: 100%;
height: 100%;
display: flex;
align-items: start;
gap: 6px;
>div {
flex: 1;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: rgba(255, 255, 255, .6);
line-height: 19px;
letter-spacing: 1px;
}
>div {
flex: 1;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: rgba(255, 255, 255, .6);
line-height: 19px;
letter-spacing: 1px;
}
img {
cursor: pointer;
}
}
img {
cursor: pointer;
}
}
.checkbox-content {
display: flex;
align-items: center;
gap: 3px;
}
.checkbox-content {
display: flex;
align-items: center;
gap: 3px;
}
.line {
background: linear-gradient(to left, transparent 0%, transparent 24%, #3DE8FF 24%, #3DE8FF 100%);
background-size: 10px 1px;
background-repeat: repeat-x;
height: 1px;
}
.line {
background: linear-gradient(to left, transparent 0%, transparent 24%, #3DE8FF 24%, #3DE8FF 100%);
background-size: 10px 1px;
background-repeat: repeat-x;
height: 1px;
}
.bottom {
display: flex;
gap: 9px;
justify-content: end;
.bottom {
display: flex;
gap: 9px;
justify-content: end;
.special-button {
padding: 0 9px;
}
}
.special-button {
padding: 0 9px;
}
}
}
</style>

92
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/TrafficControl/index.vue

@ -1,65 +1,65 @@
<template>
<Card class='TrafficControl' title="交通管制">
<RadioGroup :list="radioList" value="mainlineControl" />
<Card class='TrafficControl' title="交通管制">
<RadioGroup :list="radioList" value="mainlineControl" />
<div class="bottom">
<ButtonGradient class="title-button special-button"
style="background: linear-gradient(180deg, #E94D4E 0%, #FF195E 100%);">
封闭
</ButtonGradient>
<ButtonGradient class="title-button special-button" style="
<div class="bottom">
<ButtonGradient class="title-button special-button"
style="background: linear-gradient(180deg, #E94D4E 0%, #FF195E 100%);">
封闭
</ButtonGradient>
<ButtonGradient class="title-button special-button" style="
background: linear-gradient(82deg, #FFCD48 0%, #FE861E 100%);">
限行
</ButtonGradient>
</div>
</Card>
限行
</ButtonGradient>
</div>
</Card>
</template>
<script>
import Card from "./../../components/Card.vue"
import Card from "@screen/components/Card2/Card.vue";
import RadioGroup from '@screen/components/RadioGroup/index.vue';
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
export default {
name: 'TrafficControl',
components: {
Card,
RadioGroup,
ButtonGradient
},
data() {
return {
radioList: [
{ key: 'mainlineControl', label: '主线管制' },
{ key: 'tollboothControl', label: '收费站管制' },
{ key: 'serviceAreaControl', label: '服务区管制' },
{ key: 'hubInterchangeControl', label: '枢纽立交管制' },
{ key: 'otherControls', label: '其他管制' },
]
}
}
name: 'TrafficControl',
components: {
Card,
RadioGroup,
ButtonGradient
},
data() {
return {
radioList: [
{ key: 'mainlineControl', label: '主线管制' },
{ key: 'tollboothControl', label: '收费站管制' },
{ key: 'serviceAreaControl', label: '服务区管制' },
{ key: 'hubInterchangeControl', label: '枢纽立交管制' },
{ key: 'otherControls', label: '其他管制' },
]
}
}
}
</script>
<style lang='scss' scoped>
.TrafficControl {
::v-deep {
.content {
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 12px;
}
}
::v-deep {
.content {
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 12px;
}
}
.bottom {
display: flex;
gap: 9px;
justify-content: end;
.bottom {
display: flex;
gap: 9px;
justify-content: end;
.special-button {
padding: 0 24px;
}
}
.special-button {
padding: 0 24px;
}
}
}
</style>

2
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/index.vue

@ -6,7 +6,6 @@
</template>
<script>
import Card from "./components/Card.vue";
const files = require.context('./Cards', true, /[^/]+\/index\.vue$/);
@ -30,7 +29,6 @@ const originGridArea = {
export default {
name: 'CommandDispatch',
components: {
Card,
...components,
},
data() {

3
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/dispatch/index.vue

@ -31,7 +31,8 @@ export default {
Pagination,
RoadStateCard,
InputSearch,
EventDetailDialog
EventDetailDialog,
Pagination
},
data() {
return {

77
ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditDetails/DetailCard.vue

@ -0,0 +1,77 @@
<template>
<div class='DetailCard'>
<div class="header">
<div class="left">
<div class="title">{{ data.title || '-' }}</div>
<div class="state">{{ data.state || '-' }}</div>
</div>
<div class="right">
<span>icon</span>
<span>{{ data.time || '-' }}</span>
</div>
</div>
<div class="body">
<div class="">
</div>
<div class="suffix"></div>
<div class="suffix"></div>
</div>
<div class="footer">
<Button :style="{ background: '#00B3CC', width: '96px' }">审核</Button>
</div>
</div>
</template>
<script>
import Button from "@screen/components/Buttons/Button.vue"
export default {
name: 'DetailCard',
components: {
Button
},
props: {
data: {
type: Object,
default: () => ({
title: "事件详情",
state: 0,
desc: ''
})
}
}
}
</script>
<style lang='scss' scoped>
.DetailCard {
display: flex;
flex-direction: column;
background: rgba(6, 66, 88, 0.8);
border-radius: 4px 4px 4px 4px;
opacity: 1;
border: 1px solid;
border-image: linear-gradient(180deg, rgba(9, 60, 80, 0), rgba(0, 134, 187, 1)) 1 1;
>div {
padding: 12px 24px;
}
>.header {
border-bottom: 2px solid #055670;
display: flex;
}
>.body {
flex: 1;
}
>.footer {
display: flex;
gap: 9px;
justify-content: flex-end;
padding: 6px;
}
}
</style>

38
ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditDetails/index.vue

@ -0,0 +1,38 @@
<template>
<Card2 class='AuditDetails' title="审核详情">
<TimeLine2 :data="timeLine2List" style="flex: 1;" direction="right">
<template #content="{ data }">
<DetailCard :data="data" />
</template>
</TimeLine2>
</Card2>
</template>
<script>
import Card2 from "@screen/components/Card2/Card.vue";
import TimeLine2 from "@screen/components/TimeLine/TimeLine2/index";
import DetailCard from "./DetailCard.vue"
export default {
name: 'AuditDetails',
components: {
Card2,
TimeLine2,
DetailCard
},
data() {
return {
timeLine2List: Array.from({ length: 6 }).map(() => ({
time: "2023-12-21 16:35:44",
name: "甘易玫",
desc: "描述性文字文字文字文字文字文字文字文字描述性文字文字文字文字文字文字文字文字",
posts: '淄博发展公司管理员'
})),
}
}
}
</script>
<style lang='scss' scoped>
.AuditDetails {}
</style>

110
ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditLists/ListItem.vue

@ -0,0 +1,110 @@
<template>
<div class='ListItem'>
<img class="prefix" :src="require(`@screen/images/ListItem/${eventTypeIcon[data.type]}.svg`)" />
<div class="center">
<div class="header">
<span class="title">{{ data.title || '-' }}</span>
<span class="state" :style="{ backgroundColor: state[data.state].color }">{{ state[data.state].text }}</span>
</div>
<div class="content">{{ data.desc || '-' }}</div>
</div>
<img class="suffix" :src="require(`@screen/images/ListItem/${state[data.state].icon}.svg`)" />
</div>
</template>
<script>
export default {
name: 'ListItem',
props: {
data: {
type: Object,
default: () => ({
state: 0,
type: 0
})
}
},
data() {
return {
eventTypeIcon: {
0: 'AbnormalWeather',
1: 'TrafficControl',
},
state: {
0: {
color: "#00B1A0",
text: "处理中",
icon: 'ToBeReviewed'
},
1: {
color: "#057DD3",
text: "已处理",
icon: 'Reviewed'
},
2: {
color: "#057DD3",
text: "已处理",
icon: 'Failed'
},
}
}
}
}
</script>
<style lang='scss' scoped>
.ListItem {
min-height: 88px;
background: rgba(6, 66, 88, 0.8);
border-radius: 4px 4px 4px 4px;
opacity: 1;
border: 1px solid;
padding: 21px;
border-image: linear-gradient(180deg, rgba(9, 60, 80, 0), rgba(0, 134, 187, .72)) 1 1;
display: flex;
align-items: center;
justify-content: space-between;
gap: 15px;
.center {
flex: 1;
.header {
margin-bottom: 9px;
display: flex;
align-items: center;
gap: 9px;
.title {
font-size: 18px;
font-family: PingFang SC, PingFang SC;
font-weight: 600;
color: #E2B066;
line-height: 21px;
}
.state {
background: #00B1A0;
border-radius: 18px;
font-size: 14px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #FFFFFF;
line-height: 16px;
padding: 2px 15px;
}
}
.content {
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #FFFFFF;
line-height: 19px;
}
}
}
</style>

70
ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditLists/index.vue

@ -0,0 +1,70 @@
<template>
<Card2 class='Auditlists' title="审核列表">
<InputSearch style="width: 100%;" />
<div class="body">
<ListItem v-for="(item, index) in list" :key="index" :data="item" />
</div>
<div class="footer">
<Pagination :total="90" />
</div>
</Card2>
</template>
<script>
import Card2 from "@screen/components/Card2/Card.vue";
import Pagination from '@screen/components/Pagination.vue';
import InputSearch from '@screen/components/InputSearch/index.vue';
import ListItem from "./ListItem.vue";
export default {
name: 'Auditlists',
components: {
Card2,
InputSearch,
Pagination,
ListItem
},
data() {
return {
list: Array.from({ length: 20 }).map(() => ({
title: "异常天气",
desc: "2023.12.23 13:00:00 济南方向K100+000 交通事故",
type: (() => {
const min = 0;
const max = 1;
return Math.floor(Math.random() * (max - min + 1)) + min;
})(),
state: (() => {
const min = 0;
const max = 2;
return Math.floor(Math.random() * (max - min + 1)) + min;
})()
})),
}
}
}
</script>
<style lang='scss' scoped>
.Auditlists {
::v-deep {
.content {
display: flex;
flex-direction: column;
gap: 15px;
}
}
.body {
flex: 1;
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 9px;
}
.footer {
text-align: center;
}
}
</style>

23
ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/index.vue

@ -1,15 +1,34 @@
<template>
<div class='InformationReleaseManagement'>
InformationReleaseManagement
<AuditLists class="card" />
<AuditDetails class="card" />
</div>
</template>
<script>
import AuditDetails from "./Cards/AuditDetails/index.vue"
import AuditLists from "./Cards/AuditLists"
export default {
name: 'InformationReleaseManagement',
components: {
AuditLists,
AuditDetails
}
}
</script>
<style lang='scss' scoped>
.InformationReleaseManagement {}
.InformationReleaseManagement {
padding: 24px;
display: grid;
gap: 36px;
grid-template-columns: 0.42fr 1fr;
.card {
overflow: hidden;
width: 100%;
height: 100%;
}
}
</style>

Loading…
Cancel
Save