Browse Source

辖段管理 表单提交

wangqin
Joe 1 year ago
parent
commit
a2d9e2196a
  1. 14664
      ruoyi-ui/pnpm-lock.yaml
  2. 40
      ruoyi-ui/src/views/JiHeExpressway/components/Dialog/index.vue
  3. 3
      ruoyi-ui/src/views/JiHeExpressway/images/clearLayer.svg
  4. BIN
      ruoyi-ui/src/views/JiHeExpressway/images/icon/icon_006.png
  5. 6
      ruoyi-ui/src/views/JiHeExpressway/images/shareWith/phone-active.svg
  6. 6
      ruoyi-ui/src/views/JiHeExpressway/images/shareWith/phone.svg
  7. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/index.vue
  8. 113
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/index.vue
  9. 37
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/dutyOfficer/index.vue
  10. 73
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/emergencyAgencies/index.vue
  11. 50
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/firstResponders/index.vue
  12. 39
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/jurisdictionalManagement/components/EditEventInformationDialog/data.js
  13. 72
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/jurisdictionalManagement/components/EditEventInformationDialog/index.vue
  14. 97
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/jurisdictionalManagement/index.vue
  15. 34
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/components/EditEventInformationDialog/data.js
  16. 72
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/components/EditEventInformationDialog/index.vue
  17. 196
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/index.vue
  18. 87
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/PresetFormItems.js
  19. 81
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/data.js
  20. 3
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/index.vue
  21. 520
      ruoyi-ui/src/views/JiHeExpressway/pages/service/board/index.vue

14664
ruoyi-ui/pnpm-lock.yaml

File diff suppressed because it is too large

40
ruoyi-ui/src/views/JiHeExpressway/components/Dialog/index.vue

@ -2,18 +2,22 @@
<Teleport>
<Transition name="fade">
<div class="mask-layer" v-if="modelVisible">
<div class='dialog'>
<BackgroundClip class='dialog'
clipPath="polygon(calc(100% - var(--clip-width)) 0, 100% var(--clip-width), 100% 100%, var(--clip-width) 100%, 0 calc(100% - var(--clip-width)), 0 0)"
borderColor="linear-gradient(180deg, rgba(78, 174, 204, .6), rgba(78, 174, 204, 0))"
bgColor="linear-gradient(180deg, rgba(14, 69, 92, 0.9) 0%, rgba(20, 89, 119, 0.9) 100%)">
<div class="dialog-title">
<img class="title-icon" src="@screen/images/dialog/title-icon.svg" />
<span>{{ title }}</span>
<img class="icon-close" @click="modelVisible = false" src="@screen/images/dialog/icon-close.svg" />
</div>
<div class="dialog-content">
<slot />
</div>
<img class="bottom-right" src="@screen/images/dialog/right-bottom.svg">
</div>
</BackgroundClip>
</div>
</Transition>
</Teleport>
@ -21,10 +25,12 @@
<script>
import Teleport from '../Teleport.vue';
import BackgroundClip from "@screen/components/Decorations/BackgroundClip.vue"
export default {
components: {
Teleport
Teleport,
BackgroundClip
},
model: {
prop: 'visible',
@ -63,7 +69,7 @@ export default {
align-items: center;
justify-content: center;
--border-width: 2px;
--border-width: 1px;
--clip-width-num: 24;
--clip-width: calc(var(--clip-width-num) * 1px);
}
@ -80,27 +86,27 @@ export default {
.dialog {
max-width: 72vw;
background: linear-gradient(180deg, rgba(14, 69, 92, 0.9) 0%, rgba(20, 89, 119, 0.9) 100%);
// background: linear-gradient(180deg, rgba(14, 69, 92, 0.9) 0%, rgba(20, 89, 119, 0.9) 100%);
opacity: 1;
background-clip: padding-box;
clip-path: polygon(calc(100% - var(--clip-width)) 0, 100% var(--clip-width), 100% 100%, var(--clip-width) 100%, 0 calc(100% - var(--clip-width)), 0 0);
// clip-path: polygon(calc(100% - var(--clip-width)) 0, 100% var(--clip-width), 100% 100%, var(--clip-width) 100%, 0 calc(100% - var(--clip-width)), 0 0);
position: relative;
box-sizing: border-box;
margin: calc(var(--border-width) / 2);
border: 2px solid;
border-image: linear-gradient(180deg, rgba(78, 174, 204, .6), rgba(78, 174, 204, 0)) 2 2;
&::before {
content: "";
position: absolute;
background: rgba(78, 174, 204, .6);
height: 2px;
// width: calc(sqrt(pow(var(--clip-width-num), 2) * 2) * 1px);
right: calc(var(--clip-width) / -2);
top: -2px;
transform-origin: top left;
transform: rotate(45deg);
}
// &::before {
// content: "";
// position: absolute;
// background: rgba(78, 174, 204, .6);
// height: 2px;
// // width: calc(sqrt(pow(var(--clip-width-num), 2) * 2) * 1px);
// right: calc(var(--clip-width) / -2);
// top: -2px;
// transform-origin: top left;
// transform: rotate(45deg);
// }
.dialog-title {
position: relative;

3
ruoyi-ui/src/views/JiHeExpressway/images/clearLayer.svg

@ -0,0 +1,3 @@
<svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path id="Vector" d="M14.3467 10.7578L16.0295 15.9292C16.1457 16.2864 15.8637 16.6484 15.3996 16.7378C15.3308 16.7511 15.2601 16.7578 15.1892 16.7578H12.8281V15.7578C12.8281 15.5757 12.6385 15.4278 12.4029 15.4245L12.395 15.4245H12.3936C12.1543 15.4245 11.9604 15.5737 11.9604 15.7578L11.9604 16.7578H8.48941L8.48943 15.7578C8.48943 15.5757 8.29975 15.4278 8.06418 15.4245L8.0563 15.4245H8.05481C7.81562 15.4245 7.62168 15.5737 7.62168 15.7578V16.7578H4.1507V15.7578C4.1507 15.5757 3.96103 15.4278 3.72545 15.4245L3.71756 15.4245H3.7161C3.47688 15.4245 3.28297 15.5737 3.28297 15.7578L3.28294 16.7578H0.921953C0.443511 16.7578 0.0556641 16.4593 0.0556641 16.0912C0.0556641 16.0365 0.0643722 15.9822 0.0816229 15.9292L1.76438 10.7578H14.3467ZM8.05776 0.757812C8.7754 0.757812 9.35719 1.20552 9.35719 1.75782L9.35714 8.75781H13.0198C13.4172 8.75781 13.7636 8.96589 13.8601 9.26253L14.1143 10.0437H1.99676L2.25097 9.26253C2.34749 8.96589 2.69392 8.75781 3.0913 8.75781H6.75391V1.7578C6.75391 1.20552 7.33569 0.757812 8.05333 0.757812H8.05776Z" fill="#25D8FF"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
ruoyi-ui/src/views/JiHeExpressway/images/icon/icon_006.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 B

6
ruoyi-ui/src/views/JiHeExpressway/images/shareWith/phone-active.svg

@ -1,6 +0,0 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#148;&#181;&#232;&#175;&#157;">
<rect id="Rectangle 3690" width="22" height="22" rx="6" fill="#4BACEF"/>
<path id="Vector" d="M16.7631 14.5146L14.2736 12.0247C14.1234 11.8749 13.9199 11.7908 13.7078 11.7908C13.4957 11.7908 13.2923 11.8749 13.1421 12.0247L12.576 12.5909C12.2565 12.9105 11.2195 12.5909 10.3131 11.6851C9.40673 10.7793 9.08412 9.74214 9.4075 9.42177L9.97361 8.85555C10.1234 8.70534 10.2075 8.50186 10.2075 8.28972C10.2075 8.07758 10.1234 7.8741 9.97361 7.72389L7.48412 5.23392C7.33394 5.08412 7.13049 5 6.9184 5C6.7063 5 6.50285 5.08412 6.35267 5.23392L5.78657 5.80014C5.36871 6.21808 5.11446 6.76816 5.02996 7.43502C4.95315 8.04964 5.02382 8.74646 5.24427 9.49552C5.68287 10.9998 6.68143 12.5817 8.05023 13.9484C9.41902 15.3152 10.9983 16.3132 12.5053 16.7549C13.0118 16.9106 13.5379 16.9931 14.0677 17C14.2341 17.0001 14.4003 16.9899 14.5655 16.9693C15.2322 16.8848 15.7822 16.6305 16.2 16.2125L16.7661 15.6463C16.9159 15.4961 17 15.2926 17 15.0805C17 14.8683 16.9159 14.6649 16.7661 14.5146H16.7631Z" fill="white"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

6
ruoyi-ui/src/views/JiHeExpressway/images/shareWith/phone.svg

@ -1,6 +0,0 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#148;&#181;&#232;&#175;&#157;-&#231;&#129;&#176;">
<rect id="Rectangle 3690" width="22" height="22" rx="6" fill="#ADADAD"/>
<path id="Vector" d="M16.7631 14.5146L14.2736 12.0247C14.1234 11.8749 13.9199 11.7908 13.7078 11.7908C13.4957 11.7908 13.2923 11.8749 13.1421 12.0247L12.576 12.5909C12.2565 12.9105 11.2195 12.5909 10.3131 11.6851C9.40673 10.7793 9.08412 9.74214 9.4075 9.42177L9.97361 8.85555C10.1234 8.70534 10.2075 8.50186 10.2075 8.28972C10.2075 8.07758 10.1234 7.8741 9.97361 7.72389L7.48412 5.23392C7.33394 5.08412 7.13049 5 6.9184 5C6.7063 5 6.50285 5.08412 6.35267 5.23392L5.78657 5.80014C5.36871 6.21808 5.11446 6.76816 5.02996 7.43502C4.95315 8.04964 5.02382 8.74646 5.24427 9.49552C5.68287 10.9998 6.68143 12.5817 8.05023 13.9484C9.41902 15.3152 10.9983 16.3132 12.5053 16.7549C13.0118 16.9106 13.5379 16.9931 14.0677 17C14.2341 17.0001 14.4003 16.9899 14.5655 16.9693C15.2322 16.8848 15.7822 16.6305 16.2 16.2125L16.7661 15.6463C16.9159 15.4961 17 15.2926 17 15.0805C17 14.8683 16.9159 14.6649 16.7661 14.5146H16.7631Z" fill="white"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/index.vue

@ -19,7 +19,7 @@
<div class="bottom">
<div class="cleared-btn" @click="handleCleared">
<img src="@screen/images/icon/icon_006.png" />
<img src="@screen/images/clearLayer.svg" />
<span>清空图层</span>
</div>
</div>

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

@ -2,60 +2,6 @@
<div class='BusinessDataManagement'>
<Tabs :panels="panels" :default-active="activeName" @select="handleSelect" />
<!-- 搜索栏 -->
<div class="filter">
<div>
<template v-if="activeName === 'DutyOfficer'">
<ButtonGradient>
<template #prefix>
<img src="@screen/images/import.svg" />
</template>
机构值班表
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/import.svg" />
</template>
应急机构
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/export.svg" />
</template>
上传
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/insert.svg" />
</template>
新增
</ButtonGradient>
</template>
<template v-else>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/insert.svg" />
</template>
新增
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/export.svg" />
</template>
导出
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/refresh.svg" />
</template>
刷新
</ButtonGradient>
</template>
</div>
<InputSearch style="width: 402px;" />
</div>
<!-- 内容 -->
<div class="body">
<Transition name="fade">
@ -71,11 +17,9 @@
</template>
<script>
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
import Tabs from '@screen/components/Tabs/index.vue';
// import Card from '@screen/components/Card/index.vue';
import Pagination from '@screen/components/Pagination.vue';
import InputSearch from '@screen/components/InputSearch/index.vue';
import DutyOfficer from "./views/dutyOfficer/index.vue";
import EmergencyAgencies from "./views/emergencyAgencies/index.vue";
@ -85,11 +29,8 @@ import FirstResponders from "./views/firstResponders/index.vue";
export default {
name: 'BusinessDataManagement',
components: {
ButtonGradient,
Tabs,
Pagination,
// Card,
InputSearch,
DutyOfficer,
EmergencyAgencies,
@ -127,6 +68,23 @@ export default {
}
</script>
<!-- <style lang='scss'>
.BusinessDataManagement {
div {
.filter {
height: 60px;
display: flex;
justify-content: space-between;
align-items: center;
>div {
display: flex;
gap: 6px;
}
}
}
}
</style> -->
<style lang='scss' scoped>
.fade-enter-active,
.fade-leave-active {
@ -148,18 +106,6 @@ export default {
width: 100%;
height: 100%;
.filter {
height: 60px;
display: flex;
justify-content: space-between;
align-items: center;
>div {
display: flex;
gap: 6px;
}
}
.body {
flex: 1;
position: relative;
@ -169,7 +115,28 @@ export default {
position: absolute;
width: 100%;
height: 100%;
overflow: auto;
overflow: hidden;
display: flex;
flex-direction: column;
::v-deep {
.filter {
height: 60px;
display: flex;
justify-content: space-between;
align-items: center;
div {
display: flex;
gap: 6px;
}
}
.body {
flex: 1;
overflow: auto;
}
}
}
}

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

@ -1,6 +1,37 @@
<template>
<div class='DutyOfficer'>
<SpecialTable :columns="columns" :data="data">
<div class="filter">
<div>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/import.svg" />
</template>
机构值班表
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/import.svg" />
</template>
应急机构
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/export.svg" />
</template>
上传
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/insert.svg" />
</template>
新增
</ButtonGradient>
</div>
<InputSearch style="width: 402px;" />
</div>
<SpecialTable :columns="columns" :data="data" class="body">
<template #title-DateDuty>
<div class="special-title">
值班中心
@ -117,6 +148,7 @@ import SpecialTable from "./../../components/SpecialTable.vue"
import OperateRecord from "./components/OperateRecord.vue"
import ModifyDutyInformationTable from "./components/ModifyDutyInformationTable.vue"
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
import InputSearch from '@screen/components/InputSearch/index.vue';
export default {
name: 'DutyOfficer',
@ -124,7 +156,8 @@ export default {
SpecialTable,
OperateRecord,
ModifyDutyInformationTable,
ButtonGradient
ButtonGradient,
InputSearch
},
data() {
return {

73
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/emergencyAgencies/index.vue

@ -1,16 +1,47 @@
<template>
<div class='EmergencyAgencies'>
<Card v-for="(item, index) in data" :cardData="item" :key="index" />
<div class="filter">
<div>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/insert.svg" />
</template>
新增
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/export.svg" />
</template>
导出
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/refresh.svg" />
</template>
刷新
</ButtonGradient>
</div>
<InputSearch style="width: 402px;" />
</div>
<div class='body'>
<Card v-for="(item, index) in data" :cardData="item" :key="index" />
</div>
</div>
</template>
<script>
import Card from "@screen/components/Card1/index.vue"
import InputSearch from '@screen/components/InputSearch/index.vue';
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
export default {
name: 'EmergencyAgencies',
components: {
Card
Card,
ButtonGradient,
InputSearch
},
data() {
return {
@ -29,25 +60,27 @@ export default {
<style lang='scss' scoped>
.EmergencyAgencies {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-gap: 21px;
// grid-row-gap: 9px;
// grid-column-gap: 9px;
grid-auto-rows: min-content;
.endSpecial {
font-size: 14px;
font-weight: 400;
color: #00B3CC;
line-height: 16px;
span:first-child {
color: rgba(0, 179, 204, 1)#000;
}
.body {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-gap: 21px;
// grid-row-gap: 9px;
// grid-column-gap: 9px;
grid-auto-rows: min-content;
.endSpecial {
font-size: 14px;
font-weight: 400;
color: #00B3CC;
line-height: 16px;
span:first-child {
color: rgba(0, 179, 204, 1)#000;
}
span:last-child {
color: rgba(217, 0, 27, 1)
span:last-child {
color: rgba(217, 0, 27, 1)
}
}
}
}

50
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/firstResponders/index.vue

@ -1,16 +1,47 @@
<template>
<div class='FirstResponders'>
<PeopleCard v-for="(item, index) in 15" :buttonIcon="null" :key="index" buttonText="详情" />
<div class="filter">
<div>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/insert.svg" />
</template>
新增
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/export.svg" />
</template>
导出
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/refresh.svg" />
</template>
刷新
</ButtonGradient>
</div>
<InputSearch style="width: 402px;" />
</div>
<div class='body'>
<PeopleCard v-for="(item, index) in 15" :buttonIcon="null" :key="index" buttonText="详情" />
</div>
</div>
</template>
<script>
import PeopleCard from "./../../components/PeopleCard/index.vue";
import InputSearch from '@screen/components/InputSearch/index.vue';
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
export default {
name: 'FirstResponders',
components: {
PeopleCard
PeopleCard,
ButtonGradient,
InputSearch
},
data() {
return {
@ -21,11 +52,14 @@ export default {
<style lang='scss' scoped>
.FirstResponders {
display: grid;
grid-template-columns: repeat(10, 1fr);
grid-gap: 9px;
// grid-auto-flow: row;
justify-content: space-between;
grid-auto-rows: minmax(270px, max-content);
.body {
display: grid;
grid-template-columns: repeat(10, 1fr);
grid-gap: 9px;
// grid-auto-flow: row;
justify-content: space-between;
grid-auto-rows: minmax(270px, max-content);
}
}
</style>

39
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/jurisdictionalManagement/components/EditEventInformationDialog/data.js

@ -0,0 +1,39 @@
import * as PresetFormItems from "@screen/pages/control/event/event/FormEvent/PresetFormItems.js";
export const formConfigList = [
{
label: "事故类型:",
key: "key13",
type: "select",
},
PresetFormItems.trafficAccidentType,
PresetFormItems.callPolicePersonName,
PresetFormItems.callPolicePersonPhone,
PresetFormItems.route,
PresetFormItems.direction,
PresetFormItems.eventLevel,
PresetFormItems.station,
PresetFormItems.locationMode,
PresetFormItems.pressure,
PresetFormItems.eventHappenTime,
PresetFormItems.aEstimatedReleaseTime,
PresetFormItems.weatherConditions,
PresetFormItems.effect,
PresetFormItems.isMaintenanceAccident,
PresetFormItems.isCongestionAhead,
PresetFormItems.isCurveRoad,
PresetFormItems.isInTunnel,
PresetFormItems.isArrives,
PresetFormItems.isForkRoad,
PresetFormItems.emptyLine,
PresetFormItems.trafficPolicePhone,
{
...PresetFormItems.emptyLine,
key: "096993",
},
PresetFormItems.wreckerCalls,
PresetFormItems.spillName,
PresetFormItems.ownerPhone,
PresetFormItems.laneOccupancy,
PresetFormItems.vehicleCondition,
];

72
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/views/jurisdictionalManagement/components/EditEventInformationDialog/index.vue

@ -0,0 +1,72 @@
<template>
<Dialog v-model="modelVisible" title="修改事件信息">
<div class="EditEventInformationDialog">
<Form class="form" :formList="formConfigList" column="2" labelWidth="120px" />
<div class="footer">
<Button>保存</Button>
<Button style="background: #C9C9C9;">关闭</Button>
</div>
</div>
</Dialog>
</template>
<script>
import Dialog from "@screen/components/Dialog/index";
import Form from '@screen/components/FormConfig';
import Button from '@screen/components/Buttons/Button.vue';
import { formConfigList } from "./data.js"
export default {
name: 'EditEventInformationDialog',
components: {
Dialog,
Form,
Button
},
model: {
prop: 'visible',
event: 'close'
},
props: {
visible: Boolean
},
data() {
return {
formConfigList
}
},
computed: {
modelVisible: {
get() {
return this.visible;
},
set(val) {
this.$emit('close', val)
}
},
}
}
</script>
<style lang='scss' scoped>
.EditEventInformationDialog {
gap: 9px;
width: 810px;
height: 771px;
display: flex;
flex-direction: column;
.form {
flex: 1;
overflow-y: auto;
}
.footer {
display: flex;
justify-content: end;
gap: 15px;
}
}
</style>

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

@ -1,27 +1,63 @@
<template>
<div class='JurisdictionalManagement'>
<Card v-for="(item, index) in data" :buttonIcon="null" :keyMap="keyMap" :cardData="item" :key="index" buttonText="详情">
<template #form-location="{ data }">
<div class="endSpecial">
<span>
: {{ data.location }}
</span>
<span>
: {{ data.location }}
</span>
</div>
</template>
</Card>
<div class="filter">
<div>
<ButtonGradient @click.native="editEventInformationDialogVisible = true">
<template #prefix>
<img src="@screen/images/insert.svg" />
</template>
新增
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/export.svg" />
</template>
导出
</ButtonGradient>
<ButtonGradient>
<template #prefix>
<img src="@screen/images/refresh.svg" />
</template>
刷新
</ButtonGradient>
</div>
<InputSearch style="width: 402px;" />
</div>
<div class="body">
<Card v-for="(item, index) in data" :buttonIcon="null" :keyMap="keyMap" :cardData="item" :key="index"
buttonText="详情">
<template #form-location="{ data }">
<div class="endSpecial">
<span>
: {{ data.location }}
</span>
<span>
: {{ data.location }}
</span>
</div>
</template>
</Card>
</div>
<EditEventInformationDialog v-model="editEventInformationDialogVisible" />
</div>
</template>
<script>
import Card from "@screen/components/Card1/index.vue"
import EditEventInformationDialog from "./components/EditEventInformationDialog/index"
import InputSearch from '@screen/components/InputSearch/index.vue';
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
export default {
name: 'JurisdictionalManagement',
components: {
Card
Card,
EditEventInformationDialog,
ButtonGradient,
InputSearch
},
data() {
return {
@ -55,6 +91,7 @@ export default {
return Math.floor(Math.random() * (max - min + 1)) + min;
})()
})),
editEventInformationDialogVisible: false
}
}
@ -64,25 +101,27 @@ export default {
<style lang='scss' scoped>
.JurisdictionalManagement {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-gap: 21px;
// grid-row-gap: 9px;
// grid-column-gap: 9px;
grid-auto-rows: min-content;
.body {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-gap: 21px;
// grid-row-gap: 9px;
// grid-column-gap: 9px;
grid-auto-rows: min-content;
.endSpecial {
font-size: 14px;
font-weight: 400;
color: #00B3CC;
line-height: 16px;
.endSpecial {
font-size: 14px;
font-weight: 400;
color: #00B3CC;
line-height: 16px;
span:first-child {
color: rgba(0, 179, 204, 1)#000;
}
span:first-child {
color: rgba(0, 179, 204, 1)#000;
}
span:last-child {
color: rgba(217, 0, 27, 1)
span:last-child {
color: rgba(217, 0, 27, 1)
}
}
}
}

34
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/EventInformation/components/EditEventInformationDialog/data.js

@ -0,0 +1,34 @@
import * as PresetFormItems from "@screen/pages/control/event/event/FormEvent/PresetFormItems.js";
export const formConfigList = [
{
label: "事故类型:",
key: "key13",
type: "select",
},
PresetFormItems.trafficAccidentType,
PresetFormItems.eventLevel,
PresetFormItems.callPolicePersonName,
PresetFormItems.callPolicePersonPhone,
PresetFormItems.locationMode,
PresetFormItems.route,
PresetFormItems.direction,
PresetFormItems.station,
PresetFormItems.eventHappenTime,
PresetFormItems.aEstimatedReleaseTime,
PresetFormItems.pressure,
PresetFormItems.weatherConditions,
PresetFormItems.effect,
PresetFormItems.isArrives,
PresetFormItems.isMaintenanceAccident,
PresetFormItems.isCongestionAhead,
PresetFormItems.isForkRoad,
PresetFormItems.isCurveRoad,
PresetFormItems.isInTunnel,
PresetFormItems.trafficPolicePhone,
PresetFormItems.wreckerCalls,
PresetFormItems.spillName,
PresetFormItems.ownerPhone,
PresetFormItems.laneOccupancy,
PresetFormItems.vehicleCondition,
];

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

@ -0,0 +1,72 @@
<template>
<Dialog v-model="modelVisible" title="修改事件信息">
<div class="EditEventInformationDialog">
<Form class="form" :formList="formConfigList" labelWidth="120px" />
<div class="footer">
<Button>保存</Button>
<Button style="background: #C9C9C9;">关闭</Button>
</div>
</div>
</Dialog>
</template>
<script>
import Dialog from "@screen/components/Dialog/index";
import Form from '@screen/components/FormConfig';
import Button from '@screen/components/Buttons/Button.vue';
import { formConfigList } from "./data.js"
export default {
name: 'EditEventInformationDialog',
components: {
Dialog,
Form,
Button
},
model: {
prop: 'visible',
event: 'close'
},
props: {
visible: Boolean
},
data() {
return {
formConfigList
}
},
computed: {
modelVisible: {
get() {
return this.visible;
},
set(val) {
this.$emit('close', val)
}
},
}
}
</script>
<style lang='scss' scoped>
.EditEventInformationDialog {
gap: 9px;
width: 1050px;
height: 810px;
display: flex;
flex-direction: column;
.form {
flex: 1;
overflow-y: auto;
}
.footer {
display: flex;
justify-content: end;
gap: 15px;
}
}
</style>

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

@ -1,119 +1,123 @@
<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" @click.native="editEventInformationDialogVisible = true">
编写
</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>
<EditEventInformationDialog v-model="editEventInformationDialogVisible" />
</Card>
</template>
<script>
import Card from "@screen/components/Card2/Card.vue";
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
import Descriptions from '@screen/components/Descriptions.vue';
import EditEventInformationDialog from "./components/EditEventInformationDialog/index"
export default {
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",
}
]
}
}
name: 'EventInformation',
components: {
Card,
ButtonGradient,
Descriptions,
EditEventInformationDialog
},
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",
}
],
editEventInformationDialogVisible: false
}
},
}
</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>

87
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/FormItem.js → ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/PresetFormItems.js

@ -213,6 +213,7 @@ export const vehicleCondition = {
suffix: {
text: "辆",
},
type: "inputNumber",
},
{
prefix: {
@ -221,6 +222,7 @@ export const vehicleCondition = {
suffix: {
text: "辆",
},
type: "inputNumber",
},
{
prefix: {
@ -229,6 +231,7 @@ export const vehicleCondition = {
suffix: {
text: "辆",
},
type: "inputNumber",
},
{
prefix: {
@ -237,6 +240,7 @@ export const vehicleCondition = {
suffix: {
text: "辆",
},
type: "inputNumber",
},
],
},
@ -316,7 +320,7 @@ export const remark = {
export const isInTunnel = {
label: "是否处在隧道:",
key: "key6240",
isAlone: true,
// isAlone: true,
required: true,
type: "RadioGroup",
options: {
@ -526,3 +530,84 @@ export const isCurveRoad = {
],
},
};
export const effect = {
label: "影响:",
key: "key13599",
type: "select",
};
export const isArrives = {
label: "是否到货:",
key: "key14",
type: "RadioGroup",
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "是",
label: "是",
},
{
key: "否",
label: "否",
},
],
},
};
export const isMaintenanceAccident = {
label: "是否养护事故:",
key: "key15",
type: "RadioGroup",
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "是",
label: "是",
},
{
key: "否",
label: "否",
},
],
},
};
export const trafficPolicePhone = {
label: "交警电话:",
key: "key16",
};
export const wreckerCalls = {
label: "清障电话:",
options: {
placeholder: "请输入清障电话(区号+号码)",
},
key: "key17",
};
export const spillName = {
label: "洒落物名称:",
key: "key22",
isAlone: true,
options: {
type: "textarea",
autosize: true,
maxlength: 50,
autosize: { minRows: 3, maxRows: 3 },
showWordLimit: true,
},
};
export const ownerPhone = {
label: "车主电话:",
key: "key23",
isAlone: true,
};
export const emptyLine = {
key: "key222",
type: "empty",
};

81
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/data.js

@ -1,4 +1,4 @@
import * as PresetFormItems from "./FormItem";
import * as PresetFormItems from "./PresetFormItems";
export const tabConfigList = [
{
@ -18,72 +18,17 @@ export const tabConfigList = [
PresetFormItems.aEstimatedReleaseTime,
PresetFormItems.pressure,
PresetFormItems.weatherConditions,
{
label: "影响:",
key: "key13",
type: "select",
},
{
label: "是否到货:",
key: "key14",
type: "RadioGroup",
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "是",
label: "是",
},
{
key: "否",
label: "否",
},
],
},
},
{
label: "是否养护事故:",
key: "key15",
type: "RadioGroup",
options: {
activeColor: "linear-gradient(180deg, #37E7FF 0%, #009BCC 100%)",
options: [
{
key: "是",
label: "是",
},
{
key: "否",
label: "否",
},
],
},
},
{
label: "交警电话:",
key: "key16",
},
{
label: "清障电话:",
options: {
placeholder: "请输入清障电话(区号+号码)",
},
key: "key17",
},
PresetFormItems.effect,
PresetFormItems.isArrives,
PresetFormItems.isMaintenanceAccident,
PresetFormItems.trafficPolicePhone,
PresetFormItems.wreckerCalls,
PresetFormItems.isCongestionAhead,
PresetFormItems.isForkRoad,
PresetFormItems.isCurveRoad,
PresetFormItems.isInTunnel,
{
label: "洒落物名称:",
key: "key22",
isAlone: true,
},
{
label: "车主电话:",
key: "key23",
isAlone: true,
},
PresetFormItems.spillName,
PresetFormItems.ownerPhone,
PresetFormItems.laneOccupancy,
PresetFormItems.vehicleCondition,
PresetFormItems.casualties,
@ -350,10 +295,7 @@ export const tabConfigList = [
},
PresetFormItems.freeway,
PresetFormItems.direction,
{
key: "key222",
type: "empty",
},
PresetFormItems.emptyLine,
{
label: "措施:",
required: true,
@ -722,10 +664,7 @@ export const tabConfigList = [
PresetFormItems.freeway,
PresetFormItems.direction,
PresetFormItems.station,
{
key: "key222",
type: "empty",
},
PresetFormItems.emptyLine,
{
label: "特殊地点描述:",
key: "key00036",

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

@ -20,9 +20,10 @@
<script>
import Dialog from "@screen/components/Dialog/index";
import Form from '@screen/components/FormConfig';
import { tabConfigList } from "./data.js"
import Button from '@screen/components/Buttons/Button.vue';
import { tabConfigList } from "./data.js"
export default {
name: 'EventDetailDialog',
components: {

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

@ -2,75 +2,80 @@
<div class="infoBoardBox">
<div class="infoBoardCon">
<div style="width: 20%" class="part partLeft">
<div class="partTitle boardListTitle">
<img class="qbbBigDot" src="@/assets/screen/xtb/qbbdot.png" alt="">
<div>情报板列表</div>
<img class="qbbBigDotBa" src="@/assets/screen/xtb/qbba.png" alt="">
</div>
<el-form ref="form" :model="form" class="partCon">
<el-form-item style="margin-bottom: 12px;">
<el-select v-model="form.selectedDirection" size="medium" placeholder="请选择方向" style="overflow: hidden;width: 100%;">
<el-option v-for="item in boardDirectionList" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue" @click.native="____changeDirection(item.dictValue)" />
</el-select>
</el-form-item>
<el-form-item>
<!-- {{ boardSizeDic }} -->
<el-collapse v-model="selectedSize" accordion @change="____onChangeSize">
<el-collapse-item v-for="(item, key) in boardSizeDic" :key="key" :title="item.label" :name="key">
<div v-if="item.list.length>0">
<!-- <el-checkbox style="width: 100%" :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选
<div class="partTitle boardListTitle">
<img class="qbbBigDot" src="@/assets/screen/xtb/qbbdot.png" alt="">
<div>情报板列表</div>
<img class="qbbBigDotBa" src="@/assets/screen/xtb/qbba.png" alt="">
</div>
<el-form ref="form" :model="form" class="partCon">
<el-form-item style="margin-bottom: 12px;">
<el-select v-model="form.selectedDirection" size="medium" placeholder="请选择方向"
style="overflow: hidden;width: 100%;">
<el-option v-for="item in boardDirectionList" :key="item.dictValue" :label="item.dictLabel"
:value="item.dictValue" @click.native="____changeDirection(item.dictValue)" />
</el-select>
</el-form-item>
<el-form-item>
<!-- {{ boardSizeDic }} -->
<el-collapse v-model="selectedSize" accordion @change="____onChangeSize">
<el-collapse-item v-for="(item, key) in boardSizeDic" :key="key" :title="item.label" :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="checkedCities" @change="handleCheckedCitiesChange" :max="1">
<el-checkbox v-for="(itm, index) in item.list" :label="itm.id" :key="index">
<el-tooltip :content="itm.ip" placement="top">
<div>{{ itm.deviceName }}</div>
</el-tooltip>
<el-tooltip content="回读当前信息" placement="top">
<el-button class="el-icon-tickets huiduButton" @click.stop.prevent="onSubmit(itm.id)" :disabled="submitButton"></el-button>
</el-tooltip>
</el-checkbox>
</el-checkbox-group>
</div>
<div v-else style="color: #fff; text-align: center; line-height: 60px;">暂无数据</div>
</el-collapse-item>
</el-collapse>
</el-form-item>
</el-form>
<el-checkbox-group class="checkbox" v-model="checkedCities" @change="handleCheckedCitiesChange"
:max="1">
<el-checkbox v-for="(itm, index) in item.list" :label="itm.id" :key="index">
<el-tooltip :content="itm.ip" placement="top">
<div>{{ itm.deviceName }}</div>
</el-tooltip>
<el-tooltip content="回读当前信息" placement="top">
<el-button class="el-icon-tickets huiduButton" @click.stop.prevent="onSubmit(itm.id)"
:disabled="submitButton"></el-button>
</el-tooltip>
</el-checkbox>
</el-checkbox-group>
</div>
<div v-else style="color: #fff; text-align: center; line-height: 60px;">暂无数据</div>
</el-collapse-item>
</el-collapse>
</el-form-item>
</el-form>
</div>
<div style="width: 37.8%" class="part partMiddle">
<div class="partTitle partDeviceTempateTitle">
<div>
<div style="display: flex;justify-content: start !important;align-items: center;">
<img class="qbbBigDot" src="@/assets/screen/xtb/qbbdot.png" alt="">
<div>{{ selectedDevice.deviceName }}</div>
<span v-if="selectedSize"> {{ selectedSize }}</span>
</div>
<img class="qbbBigDotBa" src="@/assets/screen/xtb/qbba.png" alt="">
</div>
<div class="controlBox">
<el-button type="primary" @click.native="openDialogVisible(1, 2)">添加信息</el-button>
<el-button type="primary" @click="publishInfo" :disabled="contentList.length == 0">发布信息</el-button>
<div class="partTitle partDeviceTempateTitle">
<div>
<div style="display: flex;justify-content: start !important;align-items: center;">
<img class="qbbBigDot" src="@/assets/screen/xtb/qbbdot.png" alt="">
<div>{{ selectedDevice.deviceName }}</div>
<span v-if="selectedSize"> {{ selectedSize }}</span>
</div>
<img class="qbbBigDotBa" src="@/assets/screen/xtb/qbba.png" alt="">
</div>
<div class="controlBox">
<el-button type="primary" @click.native="openDialogVisible(1, 2)">添加信息</el-button>
<el-button type="primary" @click="publishInfo" :disabled="contentList.length == 0">发布信息</el-button>
</div>
<div class="partCon">
<el-table :data="contentList" row-key="ID" v-loading="loading" style="height: 100%;padding: 0 1vh; background-color: #112d3b;overflow-y: scroll;" :key="toggleIndex">
<el-table-column width="545">
<template slot-scope="scope">
<div class="con">
<div style="background: black; position: relative" :style="{
color: getColorStyle(scope.row.COLOR) ,
</div>
<div class="partCon">
<el-table :data="contentList" row-key="ID" v-loading="loading"
style="height: 100%;padding: 0 1vh; background-color: #112d3b;overflow-y: scroll;" :key="toggleIndex">
<el-table-column width="545">
<template slot-scope="scope">
<div class="con">
<div style="background: black; position: relative" :style="{
color: getColorStyle(scope.row.COLOR),
fontSize: getFontSize(scope.row.FONT_SIZE),
fontFamily: scope.row.FONT,
width: getScreenSize(form.selectedPixel, 'width') + 'px',
height: getScreenSize(form.selectedPixel, 'height') + 'px',
'lineHeight':'1',
'lineHeight': '1',
'display': 'flex',
'align-items': 'center',
'justify-content': getTextAlign(scope.row.formatStyle),
}">
<span :style="{
<span :style="{
/*left: getCoordinate(
scope.row.COORDINATE.substring(0, 3),
'left'
@ -79,79 +84,80 @@
scope.row.COORDINATE.substring(3, 6),
'top'
),*/
position:'relative',
maxHeight:getScreenSize(form.selectedPixel, 'height') + 'px',
}" class="infoTxt" v-html="
scope.row.CONTENT? scope.row.CONTENT.replace(/\n|\r\n/g,'<br>').replace(/ /g, '&nbsp'): ''"></span>
</div>
position: 'relative',
maxHeight: getScreenSize(form.selectedPixel, 'height') + 'px',
}" class="infoTxt"
v-html="scope.row.CONTENT ? scope.row.CONTENT.replace(/\n|\r\n/g, '<br>').replace(/ /g, '&nb sp'): ''"></span>
</div>
</template>
</el-table-column>
<el-table-column width="130">
<template slot-scope="scope">
<div class="infoBtnBox">
<!-- <el-tooltip content="加入信息模板" placement="top">
</div>
</template>
</el-table-column>
<el-table-column width="130">
<template slot-scope="scope">
<div class="infoBtnBox">
<!-- <el-tooltip content="加入信息模板" placement="top">
<div @click="arrowRight(scope.row)"></div>
</el-tooltip> -->
<el-tooltip content="编辑" placement="top">
<div @click="openQbbDrawer(scope.row, scope.$index, 1)" class="edit"></div>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<div @click="delQbbDrawer(scope.$index)" class="del"></div>
</el-tooltip>
</div>
</template>
</el-table-column>
</el-table>
</div>
<el-tooltip content="编辑" placement="top">
<div @click="openQbbDrawer(scope.row, scope.$index, 1)" class="edit"></div>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<div @click="delQbbDrawer(scope.$index)" class="del"></div>
</el-tooltip>
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
<!-- 信息模板 -->
<div style=" width: 42.2%" class="part partRight">
<div class="partTitle partDeviceTempateTitle">
<div>
<div style="display: flex;justify-content: start !important;align-items: center;">
<img class="qbbBigDot" src="@/assets/screen/xtb/qbbdot.png" alt="">
<div>信息模板<span v-if="selectedSize">[{{ selectedSize }}]</span></div>
</div>
<img class="qbbBigDotBa" src="@/assets/screen/xtb/qbba.png" alt="">
<!-- <span>信息模板</span>
<span v-if="form.selectedPixel"> {{ form.selectedPixel }}</span> -->
</div>
<div class="controlBox">
<el-button type="primary" @click="____onAddTemplate">添加模板</el-button>
<div class="partTitle partDeviceTempateTitle">
<div>
<div style="display: flex;justify-content: start !important;align-items: center;">
<img class="qbbBigDot" src="@/assets/screen/xtb/qbbdot.png" alt="">
<div>信息模板<span v-if="selectedSize">[{{ selectedSize }}]</span></div>
</div>
<img class="qbbBigDotBa" src="@/assets/screen/xtb/qbba.png" alt="">
<!-- <span>信息模板</span>
<span v-if="form.selectedPixel"> {{ form.selectedPixel }}</span> -->
</div>
<div class="controlBox">
<el-button type="primary" @click="____onAddTemplate">添加模板</el-button>
</div>
<div class="partCon">
<vuescroll :ops="scrollOptions" class="templateBox">
<div v-for="(item,index) in templateAvailable" :key="item.dictValue">
<!-- 原来是<el-collapse v-model="activeNames"> -->
<h3>{{ item.dictLabel }}</h3>
<div v-for="(itm, indx) in item.list" :key="indx" class="tplItem">
<!-- 模板内容 -->
<BoardPreview class="boardPreview" :boardWH="selectedSize" :tpl="itm"></BoardPreview>
<!-- <div class="infoPreview">
</div>
<div class="partCon">
<vuescroll :ops="scrollOptions" class="templateBox">
<div v-for="(item, index) in templateAvailable" :key="item.dictValue">
<!-- 原来是<el-collapse v-model="activeNames"> -->
<h3>{{ item.dictLabel }}</h3>
<div v-for="(itm, indx) in item.list" :key="indx" class="tplItem">
<!-- 模板内容 -->
<BoardPreview class="boardPreview" :boardWH="selectedSize" :tpl="itm"></BoardPreview>
<!-- <div class="infoPreview">
<div class="infoBox" :style="____boardBgStyle">
<span class="infoTxt" :style="____boardTxtStyle(itm)" v-html="itm.content.replace(/\n|\r\n/g, '<br>').replace(/ /g, '&nbsp')"></span>
</div>
</div> -->
<!-- 操作按钮 -->
<div class="infoBtnBox">
<el-tooltip content="加入待下发信息" placement="top">
<p @click="arrowLeft(itm)" :class="disabledButton && !selectedSize ? 'disabledClass' : '' " class="btn btnApply"></p>
</el-tooltip>
<el-tooltip content="编辑" placement="top">
<p @click="____onEditTemplate(itm)" class="btn btnEdit"></p>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<p @click="____onDeleteTemplate(itm)" class="btn btnDelete"></p>
</el-tooltip>
</div>
</div>
<!-- 操作按钮 -->
<div class="infoBtnBox">
<el-tooltip content="加入待下发信息" placement="top">
<p @click="arrowLeft(itm)" :class="disabledButton && !selectedSize ? 'disabledClass' : ''"
class="btn btnApply"></p>
</el-tooltip>
<el-tooltip content="编辑" placement="top">
<p @click="____onEditTemplate(itm)" class="btn btnEdit"></p>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<p @click="____onDeleteTemplate(itm)" class="btn btnDelete"></p>
</el-tooltip>
</div>
</div>
</vuescroll>
</div>
</div>
</vuescroll>
</div>
</div>
</div>
<el-dialog title="提示" :visible.sync="arrowRightVisible" width="20%" :before-close="dialogClose">
@ -169,7 +175,8 @@
</el-col>
</el-row>
</el-dialog>
<BoardInfoEditor @afterSubmit="____onEditSubmit" :mode="editDialog.mode" :type="editDialog.type" :visible.sync="editDialog.visible" :screenSize="selectedSize" :tpl="editDialog.tpl"></BoardInfoEditor>
<BoardInfoEditor @afterSubmit="____onEditSubmit" :mode="editDialog.mode" :type="editDialog.type"
:visible.sync="editDialog.visible" :screenSize="selectedSize" :tpl="editDialog.tpl"></BoardInfoEditor>
<!-- <editInfo :boardEmitItem="this.boardEmitItem" @receiveForm="receiveForm" v-if="this.showEmit" @dialogClose="dialogClose"></editInfo> -->
</div>
</template>
@ -232,7 +239,7 @@ export default {
loading: false,
submitButton: false, //
selectedSize: '', //
selectedDevice:{},
selectedDevice: {},
boardSizeDic: {}, //
boardDirectionList: [], //
userQueryParams: {
@ -252,9 +259,9 @@ export default {
devicessizeList: [], //
deviceList: [], //
checkedCities: [], //
templateAvailable:[],
templateAvailable: [],
form: {
selectedDirection:"",
selectedDirection: "",
company: null,
mechanism: null,
localInfo: null,
@ -267,12 +274,12 @@ export default {
isIndeterminate: false,
contentList: [], //
toRightItem: {}, //
selectedBdMsg:[],
editDialog:{
mode:"",
type:"",
visible:false,
tpl:{}
selectedBdMsg: [],
editDialog: {
mode: "",
type: "",
visible: false,
tpl: {}
},
scrollOptions
}
@ -297,7 +304,7 @@ export default {
// }
},
created() {
Promise.all([this.____initDirection(), this.____getBoardPixel(), this.____getTemplateCategory(), this.____getAllTemplate()]).then((res)=>{
Promise.all([this.____initDirection(), this.____getBoardPixel(), this.____getTemplateCategory(), this.____getAllTemplate()]).then((res) => {
this.____getIotBoard();
})
},
@ -305,8 +312,8 @@ export default {
// this.rowDrop();
this.hideScrollFn()
},
computed:{
____boardScale(){
computed: {
____boardScale() {
let arr = this.selectedSize.split("*");
let boxW = 540;
let boxH = 80;
@ -317,29 +324,29 @@ computed:{
scale = boxH / arr[1];
}
return scale;
},
____boardBgStyle() {
let arr = this.selectedSize.split("*");
return {
width: `${arr[0] * this.____boardScale}px`,
height: `${arr[1] * this.____boardScale}px`
}
},
},
____boardBgStyle(){
let arr = this.selectedSize.split("*");
return {
width: `${arr[0] * this.____boardScale}px`,
height: `${arr[1] * this.____boardScale}px`
}
},
},
methods: {
____boardTxtStyle(){
____boardTxtStyle() {
return {
color : "#F00"
color: "#F00"
}
},
//
____getBoardPixel() {
this.boardSizeDic = {}
return this.getDicts('iot_board_pixel').then(res => {
res.data.forEach(item =>{
res.data.forEach(item => {
this.boardSizeDic[item.dictValue] = {
label:item.dictLabel,
list:[]
label: item.dictLabel,
list: []
};
})
})
@ -351,8 +358,8 @@ computed:{
})
},
____getAllTemplate(){
return getTemplateList().then((res) => {
____getAllTemplate() {
return getTemplateList().then((res) => {
this.templateAll = res.data;
});
},
@ -372,7 +379,7 @@ computed:{
})
}
},
____initDirection(){
____initDirection() {
return this.getDicts('iot_board_direction').then(res => {
this.boardDirectionList = res.data;
this.form.selectedDirection = res.data[0].dictValue;
@ -386,8 +393,8 @@ computed:{
//
____getIotBoard() {
this.checkAll = false
for(let key in this.boardSizeDic){
this.boardSizeDic[key].list=[];
for (let key in this.boardSizeDic) {
this.boardSizeDic[key].list = [];
}
// TODO
let param = {
@ -395,15 +402,15 @@ computed:{
};
getBoardList(param).then((res) => {
res.data.forEach(item => {
if(_.isString(item.otherConfig)){
if (_.isString(item.otherConfig)) {
item.otherConfig = JSON.parse(item.otherConfig);
}
this.boardSizeDic[item.otherConfig.screenSize].list.push(item);
if(!this.selectedSize){
if (!this.selectedSize) {
this.selectedSize = item.otherConfig.screenSize;
this.____onChangeSize();
}
if(!this.selectedDevice.deviceName){
if (!this.selectedDevice.deviceName) {
this.selectedDevice = item;
this.____getBoardMessage();
}
@ -413,15 +420,15 @@ computed:{
});
},
____getBoardMessage(){
____getBoardMessage() {
//
this.selectedBdMsg = [];
},
____onAddTemplate(){
____onAddTemplate() {
this.editDialog = {
visible : true,
mode : "add",
type : "template"
visible: true,
mode: "add",
type: "template"
}
},
____onEditTemplate(tpl) {
@ -432,10 +439,10 @@ computed:{
tpl
}
},
____onEditSubmit(para){
____onEditSubmit(para) {
this.____refreshPageData(para);
},
____refreshPageData(para){
____refreshPageData(para) {
if (para.type == 'template') {
this.____getAllTemplate().then(this.____onChangeSize)
} else {
@ -529,7 +536,7 @@ computed:{
},
//
editOutline(item, index, type) {
this.index = index
this.editType = type
@ -561,11 +568,11 @@ computed:{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(()=>{
deleteTemplate(id).then(()=>{
this.$message.success('删除成功!');
this.____refreshPageData({type:"template"});
})
}).then(() => {
deleteTemplate(id).then(() => {
this.$message.success('删除成功!');
this.____refreshPageData({ type: "template" });
})
});
},
@ -712,21 +719,21 @@ computed:{
// }
// }
},
____setAvailableTemplate(){
____setAvailableTemplate() {
this.templateAvailable = [];
this.tplCategory.forEach((item,index)=>{
let arr = this.templateAll[''+index];
if(arr.length>0){
this.tplCategory.forEach((item, index) => {
let arr = this.templateAll['' + index];
if (arr.length > 0) {
let temp = [];
arr.forEach(tpl=>{
if(tpl.screenSize == this.selectedSize){
arr.forEach(tpl => {
if (tpl.screenSize == this.selectedSize) {
temp.push(tpl);
}
})
if(temp.length>0){
if (temp.length > 0) {
this.templateAvailable.push({
...item,
list:temp
list: temp
});
}
}
@ -1050,19 +1057,24 @@ computed:{
</script>
<style lang="scss" scoped>
.infoBoardBox {
.infoBoardCon{
.infoBoardCon {
width: 100%;
height: 100%;
display: flex; flex-direction: row;
display: flex;
flex-direction: row;
align-items: stretch;
padding: 20px;
.part {
background-color: #133242;
margin-right: 10px;
display: flex; flex-direction: column;
&.partRight{
display: flex;
flex-direction: column;
&.partRight {
margin-right: 0;
}
.partTitle {
padding: 0px 0;
/* // border-bottom: 1px solid #05afe3; */
@ -1073,11 +1085,12 @@ computed:{
font-size: 18px;
align-items: center;
}
.partCon {
flex: 1;
height: 0;
padding:10px;
padding: 10px;
.con {
/* // border: 1px solid #05afe3; */
height: 75px;
@ -1089,6 +1102,7 @@ computed:{
align-items: center;
border: 2px solid #004c64;
}
/* // } */
.controlBox {
display: flex;
@ -1096,79 +1110,85 @@ computed:{
margin-bottom: 10px;
}
}
.templateBox {
width: 100%; height: 100%;
width: 100%;
height: 100%;
.tplItem {
margin-right: 14px;
display: flex;
align-items: stretch;
margin-bottom: 10px;
.boardPreview{
border: 2px solid #004c64;
// width: 560px;
// height:80px;
flex: 1;
.boardPreview {
border: 2px solid #004c64;
// width: 560px;
// height:80px;
flex: 1;
}
.infoBtnBox {
width: 160px;
height: 80px;
display: flex;
float: right;
margin-left: 10px;
padding: 0 0.2vw;
/* // border: solid 1px #05afe3; */
border: 2px solid #004c64;
display: flex;
justify-content: space-around;
align-items: center;
.btn {
background-repeat: no-repeat;
background-size: 100% 100%;
width: 40px;
height: 40px;
&.btnApply{
background-image: url(~@/assets/jihe/images/button/toLeft.png);
}
&.btnEdit{
background-image: url(~@/assets/jihe/images/button/edit.png);
}
&.btnDelete{
background-image: url(~@/assets/jihe/images/button/delete.png);
}
}
i {
font-size: 24px;
color: #666;
padding-left: 4px;
cursor: pointer;
caret-color: rgba(0, 0, 0, 0);
user-select: none;
}
i:hover {
color: #05afe3;
}
.disabledClass {
pointer-events: none;
cursor: auto !important;
color: #ccc;
}
width: 160px;
height: 80px;
display: flex;
float: right;
margin-left: 10px;
padding: 0 0.2vw;
/* // border: solid 1px #05afe3; */
border: 2px solid #004c64;
display: flex;
justify-content: space-around;
align-items: center;
.btn {
background-repeat: no-repeat;
background-size: 100% 100%;
width: 40px;
height: 40px;
&.btnApply {
background-image: url(~@/assets/jihe/images/button/toLeft.png);
}
&.btnEdit {
background-image: url(~@/assets/jihe/images/button/edit.png);
}
&.btnDelete {
background-image: url(~@/assets/jihe/images/button/delete.png);
}
}
i {
font-size: 24px;
color: #666;
padding-left: 4px;
cursor: pointer;
caret-color: rgba(0, 0, 0, 0);
user-select: none;
}
i:hover {
color: #05afe3;
}
.disabledClass {
pointer-events: none;
cursor: auto !important;
color: #ccc;
}
}
}
.controlBox {
margin-top: 10px;
margin-bottom: 10px;
display: flex;
justify-content: center;
}
.el-collapse {
max-height: 100% !important;
overflow: auto;
@ -1189,6 +1209,7 @@ computed:{
}
}
}
.qbbBigDotBa {
width: 64px;
height: 9px;
@ -1249,11 +1270,13 @@ computed:{
align-items: center;
position: relative;
}
.qbbBigDot {
width: 18px;
height: 22px;
margin: 0 0.5vw 0 0.5vw;
}
.partDeviceTempateTitle {
width: 100%;
color: #fff;
@ -1289,14 +1312,16 @@ computed:{
padding-left: 5px;
}
::v-deep .el-checkbox + .el-checkbox {
::v-deep .el-checkbox+.el-checkbox {
margin-left: 0px !important;
}
::v-deep .el-select .el-input .el-input__inner {
color: #fff;
background-color: #053b4f;
border-color: transparent;
}
::v-deep .el-collapse-item__header {
background-color: #053b4f;
color: #fff;
@ -1305,56 +1330,71 @@ computed:{
border-radius: 7px;
border-bottom: 5px solid #112d3b;
}
::v-deep .el-collapse-item__wrap {
background-color: #053b4f;
padding: 0 1vw;
}
::v-deep .el-collapse {
color: #fff;
border: none;
}
::v-deep .el-collapse-item__wrap {
border: none;
}
::v-deep .el-checkbox__label {
color: #fff;
}
::v-deep .el-button--medium {
width: 96px;
height: 23px;
line-height: 1px;
border-radius: 15px;
}
::v-deep .el-table__body-wrapper {
background-color: #053b4f;
padding: 0 1vw;
}
::v-deep .el-table tr {
background-color: #053b4f;
}
::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td.el-table__cell {
::v-deep .el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell {
background-color: #053b4f;
}
::v-deep .el-table td.el-table__cell {
border: none;
}
.el-table::before,
.el-table--group::after,
.el-table--border::after {
content: none;
}
/* 通用滚动条样式 */
::-webkit-scrollbar {
width: 3px; /* 设置滚动条宽度 */
height: 3px; /* 设置滚动条高度 */
width: 3px;
/* 设置滚动条宽度 */
height: 3px;
/* 设置滚动条高度 */
}
::-webkit-scrollbar-track {
background-color: #00295b; /* 设置滚动条轨道颜色 */
background-color: #00295b;
/* 设置滚动条轨道颜色 */
}
::-webkit-scrollbar-thumb {
background-color: #9abce0; /* 设置滚动条滑块颜色 */
border-radius: 4px; /* 设置滚动条滑块圆角 */
}
</style>
background-color: #9abce0;
/* 设置滚动条滑块颜色 */
border-radius: 4px;
/* 设置滚动条滑块圆角 */
}</style>

Loading…
Cancel
Save