Browse Source

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

wangqin
hui 11 months ago
parent
commit
5900124c62
  1. 16
      ruoyi-ui/src/common/menuData.js
  2. 54
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/components/FormInput.vue
  3. 50
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/components/FormSelect.vue
  4. 131
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/components/FormTimePicker.vue
  5. 20
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue
  6. 47
      ruoyi-ui/src/views/JiHeExpressway/components/Popover/index.vue
  7. 4
      ruoyi-ui/src/views/JiHeExpressway/components/RadioGroup/RadioButton.vue
  8. 16
      ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/TimeLine1/index.vue
  9. 28
      ruoyi-ui/src/views/JiHeExpressway/components/Video/index.vue
  10. 41
      ruoyi-ui/src/views/JiHeExpressway/components/Video/videoStream.js
  11. 45
      ruoyi-ui/src/views/JiHeExpressway/index.vue
  12. 13
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Camera/index.vue
  13. 13
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/ControlCamera/index.vue
  14. 47
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/videoStream.js
  15. 13
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/CrowdnessIndicatorRankings/index.vue
  16. 81
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalPlan/index.vue
  17. 21
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalPlan/utils.js
  18. 9
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalProcess/index.vue
  19. 27
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/RealTimeVideo/index.vue
  20. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/ReleaseInformation/index.vue
  21. 15
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/index.vue
  22. 15
      ruoyi-ui/src/views/JiHeExpressway/pages/service/PublishingChannelManagement/index.vue
  23. 295
      ruoyi-ui/src/views/JiHeExpressway/scss/el-reset.scss
  24. 37
      ruoyi-ui/src/views/JiHeExpressway/scss/reset.scss

16
ruoyi-ui/src/common/menuData.js

@ -36,7 +36,7 @@ export default [
path: "/perception/trafficSituation",
name: "perceptionTrafficSituation",
component: "perception/trafficSituation/index.vue",
}
},
],
},
{
@ -112,6 +112,18 @@ export default [
path: "/service/board",
component: "service/board/index.vue",
},
{
title: "发布渠道管理",
name: "PublishingChannelManagement",
path: "/service/PublishingChannelManagement",
component: "service/PublishingChannelManagement/index.vue",
},
{
title: "信息发布管理",
name: "InformationReleaseManagement",
path: "/service/InformationReleaseManagement",
component: "service/InformationReleaseManagement/index.vue",
},
],
},
{
@ -139,7 +151,7 @@ export default [
path: "/datav/gisAndBim",
component: "datav/gisAndBim/index.vue",
},
]
],
},
{
title: "配置中心",

54
ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/components/FormInput.vue

@ -1,54 +0,0 @@
<template>
<ElInput class='FormInput' v-bind="getBind" v-on="$listeners" />
</template>
<script>
export default {
name: 'FormInput',
computed: {
getBind() {
return {
placeholder: "请输入",
...this.$attrs
}
}
}
}
</script>
<style lang='scss' scoped>
.FormInput {
height: 100%;
::v-deep {
.el-input__inner {
background-color: #0D5F79;
color: #fff;
border-radius: 2px;
border: 0;
height: fit-content;
line-height: unset;
&::placeholder {
color: #fff;
}
}
.el-textarea__inner {
background: #0A3E54;
border-radius: 5px;
opacity: 1;
border: 1px solid rgba(98, 224, 254, .6);
}
.el-input__count {
background-color: rgba(0, 0, 0, 0);
font-size: 12px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #3DE8FF;
line-height: 14px;
}
}
}
</style>

50
ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/components/FormSelect.vue

@ -1,50 +0,0 @@
<template>
<ElSelect class='FormSelect' v-bind="$attrs" v-on="$listeners">
<ElOption v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
<slot></slot>
</ElOption>
</ElSelect>
</template>
<script>
export default {
name: 'FormSelect',
props: {
// options: {
// /**
// * {
// * value: any;
// * label: any;
// * }[]
// */
// type: Array,
// default: () => []
// }
},
data() {
return {
options: [{
value: '选项1',
label: '黄金糕'
}, {
value: '选项2',
label: '双皮奶'
}, {
value: '选项3',
label: '蚵仔煎'
}, {
value: '选项4',
label: '龙须面'
}, {
value: '选项5',
label: '北京烤鸭'
}],
value: ''
}
}
}
</script>
<style lang='scss' scoped>
.FormSelect {}
</style>

131
ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/components/FormTimePicker.vue

@ -1,131 +0,0 @@
<template>
<ElTimePicker class="TimeSelect" v-bind="getBind" v-on="$listeners" />
</template>
<script>
export default {
name: 'TimeSelect',
computed: {
getBind() {
return {
placeholder: "请选择时间",
...this.$attrs
}
}
}
}
</script>
<style lang='scss'>
body {
.el-time-range-picker.el-popper,
.el-popper.el-time-panel {
background: #064258;
border-radius: 3px;
border: 0;
.el-time-range-picker__body,
.el-time-panel__content {
border-radius: 9px;
&::after {
border: 0;
// background-image: url(~@screen/images/active.svg);
}
&::before {
border: 0;
margin-top: -12px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-image: url(~@screen/images/active.svg);
width: 100%;
margin-left: 0;
padding: 0;
}
.el-time-spinner__arrow {
color: #fff;
}
.el-time-spinner__item {
color: rgba(0, 209, 255, .51);
&:hover:not(.disabled):not(.active) {
background-color: unset;
color: rgba(0, 209, 255, 1);
}
}
.active {
color: rgba(0, 209, 255);
}
}
.el-time-range-picker__body {
border: 1px solid #00B3CC;
}
.el-time-panel__content {
&::before {
margin-top: -15px;
}
}
.el-time-range-picker__content {
.el-time-range-picker__cell {
.el-time-range-picker__header {
color: #fff;
}
}
}
.el-time-panel__footer {
border-top: 0;
.cancel {
color: #FFFFFF;
}
.confirm {
color: #01B4DE;
}
}
.popper__arrow {
border-bottom-color: #064258;
&::after {
border-bottom-color: #064258;
}
}
}
}
</style>
<style lang='scss' scoped>
.TimeSelect {
::v-deep {
.el-range-input {
background-color: #0D5F79;
}
.el-range-separator {
color: #56CEFE;
}
&,
.el-input__inner {
background-color: #0D5F79;
color: #fff;
border-radius: 2px;
border: 0;
&::placeholder {
color: #fff;
}
}
}
}
</style>

20
ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue

@ -3,21 +3,19 @@
<ElFormItem class="formItem" :rules="rules && rules[item.key]" v-for="(item, index) in formList" :key="item.key"
:label="item.label" :style="gridStyle(item, index)">
<slot :name="item.key" :data="item" :formData="formData">
<component :is="getComponent(item.type)" v-bind="item.options" />
<component :is="getComponent(item.type)" v-bind="item.options" placeholder="请输入" v-model="formData[item.key]" />
</slot>
</ElFormItem>
</ElForm>
</template>
<script>
import FormInput from "./components/FormInput.vue";
import FormTimePicker from "./components/FormTimePicker.vue";
export default {
name: 'FormConfig',
components: {
FormInput,
FormTimePicker
// FormInput,
// FormTimePicker
},
props: {
/**
@ -75,7 +73,7 @@ export default {
}
},
getComponent(type) {
return `Form${type.replace(/^[a-z]/, word => word.toUpperCase())}`
return `El${type.replace(/^[a-z]/, word => word.toUpperCase())}`
}
}
}
@ -100,12 +98,19 @@ export default {
margin: 0;
height: 100%;
&:first-child {
.el-form-item__label-wrap {
padding-top: 9px;
}
}
.el-form-item__label-wrap {
width: fit-content;
align-self: start;
.el-form-item__label {
height: 22px;
font-size: 16px;
font-size: 15px;
// font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #3DE8FF;
@ -118,6 +123,7 @@ export default {
.el-form-item__content {
margin: 0 !important;
flex: 1;
height: 100%;
.el-input__prefix {
color: #fff;

47
ruoyi-ui/src/views/JiHeExpressway/components/Popover/index.vue

@ -1,47 +0,0 @@
<template>
<ElPopover class='Popover' v-bind="getBind" v-on="$listeners">
<slot />
<template #reference>
<slot name="reference" />
</template>
</ElPopover>
</template>
<script>
export default {
name: 'Popover',
computed: {
getBind() {
return {
trigger: 'hover',
placement: "left",
...this.$attrs,
popperClass: "Popover-Scope-Screen"
}
}
}
}
</script>
<style lang='scss'>
div.el-popper.Popover-Scope-Screen {
background: linear-gradient(180deg, #005C79 0%, #009BCC 100%);
border: 0;
color: #fff;
font-size: 14px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #FFFFFF;
div.popper__arrow {
border-left-color: #00799f;
&::after {
border-left-color: #00799f;
}
}
}
</style>
<style lang='scss' scoped>
.Popover {}
</style>

4
ruoyi-ui/src/views/JiHeExpressway/components/RadioGroup/RadioButton.vue

@ -19,7 +19,7 @@ export default {
</script>
<style lang='scss' scoped>
.RadioButton {
label.RadioButton.el-radio-button {
margin: 0;
height: 27px;
@ -38,7 +38,7 @@ export default {
::v-deep {
span.el-radio-button__inner {
background: linear-gradient(180deg, #005C79 0%, #009BCC 100%);
border-color: rgba(0, 0, 0, 0);
// border-color: rgba(0, 0, 0, 0);
}
}
}

16
ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/TimeLine1/index.vue

@ -1,5 +1,5 @@
<template>
<div :class='["TimeLine1", { "auto-size": autoSize }]'>
<div :class='["TimeLine1", { "auto-size": autoSize }]' ref="TimeLine1Ref">
<!-- 节点 -->
<div class="node" v-for="(item, index) in data" ref="nodeRefs">
<span class="top-label">
@ -89,9 +89,10 @@ export default {
watch: {
data: {
handler(data) {
let needFilter = false
const nodeLinesWidth = [];
const filterDistance = this.filterDistance || (num => num);
const filterDistance = num => needFilter ? this.filterDistance(num) : num;
const removeDistance = 20 + 4 * 2;
@ -100,7 +101,8 @@ export default {
this.$refs.nodeRefs[index].querySelector('.center'),
this.$refs.nodeRefs[index + 1].querySelector('.center'))
) - removeDistance
}
};
function getSpecialDistance(index) {
return filterDistance(getDistanceBetweenElements(
this.$refs.nodeRefs[index].parentElement,
@ -128,12 +130,20 @@ export default {
}
this.$nextTick(() => {
const timeLine1RefDom = this.$refs.TimeLine1Ref;
if (timeLine1RefDom.clientWidth != timeLine1RefDom.getBoundingClientRect().width) {
needFilter = true
}
getLineWidths();
})
},
immediate: true
}
},
mounted() {
// console.log()
console.log(this.$refs.nodeRefs[0].getBoundingClientRect())
},
methods: {
getBorderImageStyle(item) {
const linearColor = item.isActive ? (this.lineActiveColor || `${this.activeColor}, ${this.activeColor}`) : (this.lineNormalColor || `${this.normalColor}, ${this.normalColor}`)

28
ruoyi-ui/src/views/JiHeExpressway/components/Video/index.vue

@ -0,0 +1,28 @@
<template>
<video controls class="video-stream" v-bind="$attrs" ref="videoContainerRef" />
</template>
<script>
import { openVideoStream } from "./videoStream.js"
export default {
name: 'Video',
props: {
camId: {
type: String,
default: null
},
url: {
type: String,
default: null
}
},
mounted() {
openVideoStream(this.$refs.videoContainerRef, { camId: this.camId, url: this.url })
},
}
</script>
<style lang='scss' scoped>
.video-stream {}
</style>

41
ruoyi-ui/src/views/JiHeExpressway/components/Video/videoStream.js

@ -0,0 +1,41 @@
import flvJs from "flv.js";
import { getCameraStream } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js";
/**
*
* @param {HTMLElement} container 容器
* @param {{camId?: string; url?: string}?} options {camId: 相机ID; url: 直播地址}
* @returns
*/
export async function openVideoStream(container, { camId, url } = {}) {
if (camId) {
const { code, data } = await getCameraStream(camId).catch(() => ({}));
if (code != 200) return;
url = data.liveUrl;
}
if (!url) return;
const flvPlayer = flvJs.createPlayer({
type: "flv",
url: url,
isLive: true,
hasVideo: true,
hasAudio: true,
});
console.log(
"%c [ flvPlayer ]-26-「videoStream.js」",
"font-size:15px; background:#b2b540; color:#f6f984;",
flvPlayer
);
flvPlayer.attachMediaElement(container);
flvPlayer.load();
flvPlayer.play();
return flvPlayer;
}

45
ruoyi-ui/src/views/JiHeExpressway/index.vue

@ -32,48 +32,9 @@ export default {
};
</script>
<style lang="less">
body {
input,
textarea {
caret-color: white;
}
div {
/* 滚动条整体部分 */
&::-webkit-scrollbar {
width: 6px !important;
height: 6px !important;
padding: 15px;
}
/* 滚动条的轨道 */
&::-webkit-scrollbar-track {
background: rgba(17, 72, 90, .4);
border-radius: 4px;
}
/* 滚动条的滑块按钮 */
&::-webkit-scrollbar-thumb {
background: #3785A0;
border-radius: 4px;
}
/* 上下箭头 */
&::-webkit-scrollbar-button {
display: none;
}
/* 滚动条角 */
&::-webkit-scrollbar-corner {
display: none;
}
}
}
</style>
<style scoped lang="less">
<style lang="scss" scope src="./scss/reset.scss" />
<style lang="scss" scope src="./scss/el-reset.scss" />
<style scoped lang="scss">
.pageBox {
background: #13272F;
position: relative;

13
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Camera/index.vue

@ -6,7 +6,7 @@
<img src="@screen/images/dialog/icon-video.png" />
</div>
<video controls class="video-stream" ref="videoContainerRef" />
<Video class="video-stream" :camId="dialogData.camId" />
<ElTabs v-model="activeName" @tab-click="handleClickTabs" class="tabs">
<ElTabPane label="详细设计" name="first">
@ -26,8 +26,9 @@
<script>
import Dialog from "@screen/components/Dialog/index.vue";
import Button from "@screen/components/Buttons/Button.vue"
import { openVideoStream } from "@screen/pages/Home/components/RoadAndEvents/utils/videoStream.js"
import Video from "@screen/components/Video"
import Descriptions from "./Descriptions.vue"
import { dialogDelayVisible } from "./../mixin"
// G35 K094+079
@ -37,18 +38,14 @@ export default {
components: {
Dialog,
Button,
Descriptions
Descriptions,
Video
},
data() {
return {
activeName: 'first'
}
},
mounted() {
this.$nextTick(() => {
openVideoStream(this.dialogData.camId, this.$refs.videoContainerRef)
})
},
methods: {
handleClickTabs() { }
}

13
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/ControlCamera/index.vue

@ -14,7 +14,7 @@
<div class="btn">全屏</div>
</div>
</div>
<video controls class="videoStream" ref="videoContainerRef" />
<Video class="videoStream" :camId="dialogData.camId" />
</div>
<div class="content">
@ -81,18 +81,20 @@
<script>
import Dialog from "@screen/components/Dialog/index.vue"
import Button from "@screen/components/Buttons/Button.vue"
import Video from "@screen/components/Video";
import { dialogDelayVisible } from "./../mixin"
import { CameraStatusEnum, CameraDirectionEnum } from "@screen/utils/enum.js"
import { controlCamera } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js"
import { throttle } from "lodash"
import { openVideoStream } from "@screen/pages/Home/components/RoadAndEvents/utils/videoStream.js"
export default {
name: 'ControlCamera',
mixins: [dialogDelayVisible],
components: {
Dialog,
Button
Button,
Video
},
data() {
return {
@ -120,11 +122,6 @@ export default {
]
}
},
mounted() {
this.$nextTick(() => {
openVideoStream(this.dialogData.camId, this.$refs.videoContainerRef)
})
},
methods: {
controlClick: throttle(function (type) {
controlCamera(this.dialogData.camId, type)

47
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/videoStream.js

@ -1,47 +0,0 @@
import flvJs from "flv.js";
import { getCameraStream } from "./httpList";
/**
*
* @param {string} camId 相机ID
* @param {HTMLElement} container 容器
* @param {DPlayerOptions?} options 配置项
* @returns
*/
export async function openVideoStream(camId, container) {
const { code, data } = await getCameraStream(camId).catch(() => ({}));
if (code != 200) return;
const flvPlayer = flvJs.createPlayer({
type: "flv",
url: data.liveUrl,
isLive: true,
hasVideo: true,
hasAudio: true,
});
console.log(
"%c [ flvPlayer ]-26-「videoStream.js」",
"font-size:15px; background:#b2b540; color:#f6f984;",
flvPlayer
);
flvPlayer.attachMediaElement(container);
flvPlayer.load();
flvPlayer.play();
return flvPlayer;
// return new DPlayer({
// container,
// autoplay: true,
// ...options,
// hotkey: false,
// video: {
// url: data.liveUrl,
// type: "hls",
// // type: "flv",
// },
// });
}

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

@ -1,18 +1,18 @@
<template>
<Card class='CrowdnessIndicatorRankings border' title="拥挤度指标排名情况">
<div class="map">
map
<AMapContainer style="z-index: 9;" />
</div>
<div class="right border">
<div :class="['item', { active: active === item.key }]" v-for="item in operation" :key="item.key"
@click="handleClick(item)">
<Popover :disabled="item.key !== 'weather'">
<ElPopover :disabled="item.key !== 'weather'" trigger="hover" placement="left">
<div v-if="item.key === 'weather'">
天气 能见度 风向西南 风力1
</div>
<div class="label" slot="reference"
:style="{ backgroundImage: `url(${require(`./images/${item.key}${active === item.key ? '-active' : ''}.svg`)})` }" />
</Popover>
</ElPopover>
</div>
</div>
</Card>
@ -20,14 +20,13 @@
<script>
import Card from "./../../components/Card.vue";
import Popover from "@screen/components/Popover/index.vue"
import AMapContainer from "@screen/pages/Home/components/AMapContainer/index.vue"
export default {
name: 'CrowdnessIndicatorRankings',
components: {
Card,
Popover
AMapContainer
},
data() {
return {
@ -84,6 +83,8 @@ export default {
.map {
flex: 1;
position: relative;
overflow: hidden;
}
.right {

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

@ -8,7 +8,7 @@
import Card from "./../../components/Card.vue";
import { CanvasFlow } from "./utils";
import { merge } from "lodash"
import { merge } from "lodash";
function getDefaultBlockOption() {
return {
@ -38,6 +38,12 @@ function getDefaultLegendOption() {
}
}
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%)`,
}
export default {
name: 'DisposalPlan',
components: {
@ -45,7 +51,12 @@ export default {
},
data() {
return {
// list: []
data: null
}
},
watch: {
data() {
this.draw();
}
},
mounted() {
@ -82,8 +93,8 @@ export default {
this.canvasFlow.fillText(text, { ...textOptions, x: x + width + 3, y: y + height / 2, }, { height });
}
},
drawLine({ x, y, width, height, backgroundColor, linearGradient, }) {
drawLine({ x, y, vertices }) {
this.canvasFlow.drawLine({ x, y, color: '#154D6A', lineWidth: 6 }, vertices);
},
draw() {
const { clientWidth } = this.$refs.FlowCanvasRef;
@ -202,11 +213,67 @@ export default {
const linePoints = [
{
x: clientWidth / 7 - halfWidth,
y: 1
}
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));
[...blockList, ...legends].forEach(item => {
this[item.type]?.(item.options)
})

21
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/commandDispatch/Cards/DisposalPlan/utils.js

@ -80,6 +80,8 @@ export class CanvasFlow {
backgroundColor,
radius,
}) {
this.context.beginPath();
if (backgroundColor) this.context.fillStyle = backgroundColor;
x *= this.zoom;
@ -88,7 +90,6 @@ export class CanvasFlow {
height *= this.zoom;
if (radius) {
this.context.beginPath();
this.context.roundRect(x, y, width, height, radius);
this.context.fill();
} else {
@ -145,21 +146,23 @@ export class CanvasFlow {
this.context.fillStyle = gradient;
}
drawLine({ startX, endX, color }, vertices) {
startX *= this.zoom;
endX *= this.zoom;
drawLine({ x, y, color, lineWidth = 1 }, vertices) {
x *= this.zoom;
y *= this.zoom;
ctx.beginPath();
this.context.beginPath();
ctx.moveTo(startX, endX);
this.context.moveTo(x, y);
vertices.forEach(({ x, y }) => {
ctx.lineTo(x * this.zoom, y * this.zoom);
this.context.lineTo(x * this.zoom, y * this.zoom);
});
this.context.strokeStyle = color;
ctx.stroke();
this.context.lineWidth = lineWidth;
this.context.stroke();
}
fillText(
@ -175,6 +178,8 @@ export class CanvasFlow {
} = {},
{ width: rectWidth = 0, height: rectHeight = 0 } = {}
) {
this.context.beginPath();
this.context.font = `${fontWeight} ${fontSize * this.zoom}px ${fontFamily}`;
this.context.textBaseline = "middle";

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

@ -27,7 +27,9 @@
<TimeLine1 :data="timeLine1List" :filterDistance="filterDistance" />
<TimeLine2 :data="timeLine2List" style="flex: 1;" />
<div class="bottom">
<ElSelect placeholder="请选择关键点" />
<RadioGroup :list="[{ key: 'input', label: '输入' }, { key: 'upload', label: '上传' }]" value="input" type="button" />
<ElInput placeholder="请输入调度指令" />
<ButtonGradient class="title-button special-button">
发送
</ButtonGradient>
@ -56,7 +58,7 @@ export default {
ButtonGradient,
TimeLine1,
TimeLine2,
RadioGroup
RadioGroup,
},
emit: ['fullHeight'],
data() {
@ -74,7 +76,7 @@ export default {
},
methods: {
filterDistance(distance) {
return distance
return 1 / this.adpScale.scaleX * distance
},
handleFullHeight() {
this.isFullHeight = !this.isFullHeight;
@ -107,7 +109,8 @@ export default {
}
.bottom {
display: flex;
display: grid;
grid-template-columns: .5fr auto 1fr 90px 90px;
width: 100%;
gap: 6px;
}

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

@ -1,20 +1,37 @@
<template>
<Card class='RealTimeVideo' title="实时视频">
RealTimeVideo
<Video class="item-video" />
<Video class="item-video" />
</Card>
</template>
<script>
import Card from "./../../components/Card.vue"
import Card from "./../../components/Card.vue";
import Video from "@screen/components/Video"
export default {
name: 'RealTimeVideo',
components: {
Card
Card,
Video
}
}
</script>
<style lang='scss' scoped>
.RealTimeVideo {}
.RealTimeVideo {
::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%;
}
}
</style>

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

@ -72,13 +72,10 @@ export default {
key: "content",
type: "input",
options: {
// style: {
// height: "90px",
// },
type: "textarea",
autosize: true,
maxlength: 200,
autosize: { minRows: 6, maxRows: 6 },
autosize: { minRows: 9, maxRows: 9 },
showWordLimit: true
}
},

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

@ -0,0 +1,15 @@
<template>
<div class='InformationReleaseManagement'>
InformationReleaseManagement
</div>
</template>
<script>
export default {
name: 'InformationReleaseManagement',
}
</script>
<style lang='scss' scoped>
.InformationReleaseManagement {}
</style>

15
ruoyi-ui/src/views/JiHeExpressway/pages/service/PublishingChannelManagement/index.vue

@ -0,0 +1,15 @@
<template>
<div class='PublishingChannelManagement'>
PublishingChannelManagement
</div>
</template>
<script>
export default {
name: 'PublishingChannelManagement',
}
</script>
<style lang='scss' scoped>
.PublishingChannelManagement {}
</style>

295
ruoyi-ui/src/views/JiHeExpressway/scss/el-reset.scss

@ -0,0 +1,295 @@
div.el-popper {
background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
color: #fff;
font-size: 15px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
border: 0;
&[x-placement^="top"] {
div.popper__arrow {
border-top-color: #00799f;
&::after {
border-top-color: #00799f;
}
}
}
&[x-placement^="left"] {
div.popper__arrow {
border-left-color: #00799f;
&::after {
border-left-color: #00799f;
}
}
}
&[x-placement^="right"] {
div.popper__arrow {
border-right-color: #00799f;
&::after {
border-right-color: #00799f;
}
}
}
&[x-placement^="bottom"] {
div.popper__arrow {
border-bottom-color: #00799f;
&::after {
border-bottom-color: #00799f;
}
}
}
}
div.el-popper.el-select-dropdown {
background: #123542;
box-shadow: 2px 2px 8px 0px rgba(82, 90, 102, 0.08),
1px 1px 2px 0px rgba(82, 90, 102, 0.04);
border-radius: 4px;
.el-select-dropdown__list {
.el-select-dropdown__item {
font-size: 15px;
font-family: PingFang SC, PingFang SC;
color: #fff;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
/**
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
*/
&:hover {
background: #0d5f79;
}
&.hover {
background: #0d5f79;
}
}
}
&.el-select-dropdown {
&[x-placement^="top"] {
div.popper__arrow {
border-top-color: #1a3442;
&::after {
border-top-color: #1a3442;
}
}
}
&[x-placement^="left"] {
div.popper__arrow {
border-left-color: #1a3442;
&::after {
border-left-color: #1a3442;
}
}
}
&[x-placement^="right"] {
div.popper__arrow {
border-right-color: #1a3442;
&::after {
border-right-color: #1a3442;
}
}
}
&[x-placement^="bottom"] {
div.popper__arrow {
border-bottom-color: #1a3442;
&::after {
border-bottom-color: #1a3442;
}
}
}
}
}
div.el-scrollbar {
.el-scrollbar__wrap {
/**
overflow: auto;
*/
overflow-x: hidden;
}
}
body {
input.el-input__inner {
background-color: #0d5f79;
color: #fff;
border-radius: 2px;
border: 0;
height: 100%;
min-height: fit-content;
line-height: unset;
&::placeholder {
color: #fff;
}
}
div.el-input {
input.el-input__inner {
font-size: 12px;
}
.el-input__suffix {
display: flex;
align-items: center;
justify-content: center;
}
}
div.el-textarea {
textarea.el-textarea__inner {
background: #0a3e54;
border-radius: 5px;
opacity: 1;
border: 1px solid rgba(98, 224, 254, 0.6);
}
.el-input__count {
background-color: rgba(0, 0, 0, 0);
font-size: 12px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #3de8ff;
line-height: 14px;
}
}
div.el-time-panel.el-popper,
div.el-time-range-picker.el-popper {
background: #064258;
border-radius: 3px;
border: 0;
.el-time-range-picker__body,
.el-time-panel__content {
border-radius: 9px;
&::after {
border: 0;
}
&::before {
border: 0;
margin-top: -12px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-image: url(~@screen/images/active.svg);
width: 100%;
margin-left: 0;
padding: 0;
}
.el-time-spinner__arrow {
color: #fff;
}
.el-time-spinner__item {
color: rgba(0, 209, 255, 0.51);
&:hover:not(.disabled):not(.active) {
background-color: unset;
color: rgba(0, 209, 255, 1);
}
}
.active {
color: rgba(0, 209, 255);
}
}
.el-time-range-picker__body {
border: 1px solid #00b3cc;
}
.el-time-panel__content {
&::before {
margin-top: -15px;
}
}
.el-time-range-picker__content {
.el-time-range-picker__cell {
.el-time-range-picker__header {
color: #fff;
}
}
}
.el-time-panel__footer {
border-top: 0;
.cancel {
color: #ffffff;
}
.confirm {
color: #01b4de;
}
}
.el-range-input {
background-color: #0d5f79;
}
.el-range-separator {
color: #56cefe;
}
&,
.el-input__inner {
background-color: #0d5f79;
color: #fff;
border-radius: 2px;
border: 0;
&::placeholder {
color: #fff;
}
}
&[x-placement^="top"] {
div.popper__arrow {
border-top-color: #275e79;
&::after {
border-top-color: #275e79;
}
}
}
&[x-placement^="left"] {
div.popper__arrow {
border-left-color: #275e79;
&::after {
border-left-color: #275e79;
}
}
}
&[x-placement^="right"] {
div.popper__arrow {
border-right-color: #275e79;
&::after {
border-right-color: #275e79;
}
}
}
&[x-placement^="bottom"] {
div.popper__arrow {
border-bottom-color: #275e79;
&::after {
border-bottom-color: #275e79;
}
}
}
}
}

37
ruoyi-ui/src/views/JiHeExpressway/scss/reset.scss

@ -0,0 +1,37 @@
body {
input,
textarea {
caret-color: white;
}
div {
/* 滚动条整体部分 */
&::-webkit-scrollbar {
width: 6px !important;
height: 6px !important;
padding: 15px;
}
/* 滚动条的轨道 */
&::-webkit-scrollbar-track {
background: rgba(17, 72, 90, 0.4);
border-radius: 4px;
}
/* 滚动条的滑块按钮 */
&::-webkit-scrollbar-thumb {
background: #3785a0;
border-radius: 4px;
}
/* 上下箭头 */
&::-webkit-scrollbar-button {
display: none;
}
/* 滚动条角 */
&::-webkit-scrollbar-corner {
display: none;
}
}
}
Loading…
Cancel
Save