Browse Source

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

wangqin
hui 1 year ago
parent
commit
1c11afe2e1
  1. 4
      ruoyi-ui/src/views/JiHeExpressway/components/Adaptation.vue
  2. 94
      ruoyi-ui/src/views/JiHeExpressway/components/Descriptions.vue
  3. 79
      ruoyi-ui/src/views/JiHeExpressway/components/Dialog/index.vue
  4. 70
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/FatigueWakesUp/index.vue
  5. 96
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFilter/index.vue
  6. 62
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/index.vue
  7. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/auditAnalytics/StatsDialogVisible/index.vue
  8. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/data.js
  9. 13
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/index.vue
  10. 16
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/TemperatureTrend/assets/charts.js
  11. 16
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/visibilityTrends/assets/charts.js
  12. 6
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/flowstate/assets/charts.js
  13. 39
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/flowstate/index.vue
  14. 1
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/index.vue
  15. 30
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/trafficIndicators/assets/chartsRadar.js
  16. 147
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/trafficIndicators/index.vue
  17. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/service/sensitive/index.vue

4
ruoyi-ui/src/views/JiHeExpressway/components/Adaptation.vue

@ -51,8 +51,8 @@ export default {
return this.scale return this.scale
} }
}, },
watch:{ watch: {
headerHeight(){ headerHeight() {
} }
}, },
methods: { methods: {

94
ruoyi-ui/src/views/JiHeExpressway/components/Descriptions.vue

@ -1,20 +1,37 @@
<template> <template>
<div class='Descriptions keep-ratio' origin="left" :style="getStyle()"> <div class="Descriptions keep-ratio" origin="left" :style="getStyle()">
<div class="item" v-for="(item, index) in getResolveList" :key="`${item.key || item.label}${index}`" <div
:style="[gridStyle(item, index), transformStyle(itemStyle)]"> class="item"
<div class="text title" :style="{ v-for="(item, index) in getResolveList"
...transformStyle(titleStyle), :key="`${item.key || item.label}${index}`"
width: labelWidth :style="[gridStyle(item, index), transformStyle(itemStyle)]"
}"> >
<div
class="text title"
:style="{
...transformStyle(titleStyle),
width: labelWidth,
}"
>
<p> <p>
<slot :name="`title-${item.key || item.label}`" :data="item"> <slot :name="`title-${item.key || item.label}`" :data="item">
{{ item.label || '-' }} {{ item.label || "-" }}
</slot> </slot>
</p>: </p>
:
</div> </div>
<ContentText :style="transformStyle(titleStyle)" class="content text" :data="data" :_config="item"> <ContentText
:style="transformStyle(titleStyle)"
class="content text"
:data="data"
:_config="item"
>
<template #default="{ value }"> <template #default="{ value }">
<slot :name="`content-${item.key || item.label}`" :value="value" :data="item"> <slot
:name="`content-${item.key || item.label}`"
:value="value"
:data="item"
>
{{ value }} {{ value }}
</slot> </slot>
</template> </template>
@ -24,18 +41,18 @@
</template> </template>
<script> <script>
import { getContent } from "@screen/components/FormConfig/utils/index.js" import { getContent } from "@screen/components/FormConfig/utils/index.js";
import ContentText from "@screen/components/FormConfig/components/Text.vue" import ContentText from "@screen/components/FormConfig/components/Text.vue";
export default { export default {
name: 'Descriptions', name: "Descriptions",
components: { components: {
ContentText ContentText,
}, },
props: { props: {
data: { data: {
type: Object, type: Object,
default: () => ({}) default: () => ({}),
}, },
/** /**
* { * {
@ -47,74 +64,73 @@ export default {
*/ */
list: { list: {
type: Array, type: Array,
default: () => [] default: () => [],
}, },
column: { column: {
type: String, type: String,
default: "2" default: "2",
}, },
labelWidth: String, labelWidth: String,
titleStyle: { titleStyle: {
type: [String, Object], type: [String, Object],
default: null default: null,
}, },
contentStyle: { contentStyle: {
type: [String, Object], type: [String, Object],
default: null default: null,
}, },
itemStyle: { itemStyle: {
type: [String, Object], type: [String, Object],
default: null default: null,
} },
}, },
computed: { computed: {
gridStyle() { gridStyle() {
return (item, index) => ({ return (item, index) => ({
gridRow: `span ${item.gridRow || 1}`, gridRow: `span ${item.gridRow || 1}`,
gridColumn: `span ${item.gridColumn || 1}`, gridColumn: `span ${item.gridColumn || 1}`,
}) });
}, },
getText() { getText() {
return (item) => getContent(this.data, item) return (item) => getContent(this.data, item);
}, },
getResolveList() { getResolveList() {
return this.list.reduce((prev, data) => { return this.list.reduce((prev, data) => {
if (typeof data.visible === "function") {
if (typeof data.visible === 'function') {
if (!data.visible(data)) return prev; if (!data.visible(data)) return prev;
} }
prev.push(data); prev.push(data);
return prev return prev;
}, []) }, []);
} },
}, },
methods: { methods: {
getStyle() { getStyle() {
return { return {
gridTemplateColumns: `repeat(${this.column}, 1fr)`, gridTemplateColumns: `repeat(${this.column}, 1fr)`,
} };
}, },
getComponent(type) { getComponent(type) {
return `Form${type.replace(/^[a-z]/, word => word.toUpperCase())}` return `Form${type.replace(/^[a-z]/, (word) => word.toUpperCase())}`;
}, },
transformStyle(style) { transformStyle(style) {
if (typeof style != 'string') return style; if (typeof style != "string") return style;
return style.split(';').reduce((prev, cur) => { return style.split(";").reduce((prev, cur) => {
const [key, value] = cur.split(":"); const [key, value] = cur.split(":");
prev[key] = value; prev[key] = value;
return prev; return prev;
}, {}); }, {});
} },
} },
} };
</script> </script>
<style lang='scss' scoped> <style lang="scss" scoped>
.Descriptions { .Descriptions {
display: grid; display: grid;
gap: 9px; gap: 9px;
@ -123,7 +139,7 @@ export default {
font-size: 15px; font-size: 15px;
font-family: PingFang SC, PingFang SC; font-family: PingFang SC, PingFang SC;
font-weight: 400; font-weight: 400;
color: #FFF; color: #fff;
line-height: 18px; line-height: 18px;
gap: 3px; gap: 3px;
display: flex; display: flex;
@ -135,7 +151,7 @@ export default {
gap: 6px; gap: 6px;
.title { .title {
color: #3DE8FF; color: #3de8ff;
p { p {
width: 100%; width: 100%;

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

@ -1,22 +1,38 @@
<template> <template>
<Teleport> <Teleport>
<Transition name="fade"> <Transition name="fade">
<div :class="['mask-layer', { 'none-mask': noneMask }]" v-if="modelVisible"> <div
<BackgroundClip class='dialog' :class="['mask-layer', { 'none-mask': noneMask }]"
v-if="modelVisible"
>
<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)" 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, .9), rgba(78, 174, 204, 0))" borderColor="linear-gradient(180deg, rgba(78, 174, 204, .9), rgba(78, 174, 204, 0))"
bgColor="linear-gradient(180deg, rgba(14, 69, 92, 0.9) 0%, rgba(20, 89, 119, 0.9) 100%)" ref="DialogContentRef"> bgColor="linear-gradient(180deg, rgba(14, 69, 92, 0.9) 0%, rgba(20, 89, 119, 0.9) 100%)"
ref="DialogContentRef"
>
<div class="dialog-title"> <div class="dialog-title">
<img class="title-icon" src="@screen/images/dialog/title-icon.svg" /> <img
class="title-icon"
src="@screen/images/dialog/title-icon.svg"
/>
<span>{{ title }}</span> <span>{{ title }}</span>
<img class="icon-close" @click.stop="modelVisible = false" src="@screen/images/dialog/icon-close.svg" /> <img
class="icon-close"
@click.stop="modelVisible = false"
src="@screen/images/dialog/icon-close.svg"
/>
</div> </div>
<div class="dialog-content"> <div class="dialog-content">
<slot /> <slot />
</div> </div>
<img class="bottom-right" src="@screen/images/dialog/right-bottom.svg"> <img
class="bottom-right"
src="@screen/images/dialog/right-bottom.svg"
/>
<div class="footer" v-if="$slots.footer"> <div class="footer" v-if="$slots.footer">
<slot name="footer"></slot> <slot name="footer"></slot>
@ -28,71 +44,74 @@
</template> </template>
<script> <script>
import Teleport from '../Teleport.vue'; import Teleport from "../Teleport.vue";
import BackgroundClip from "@screen/components/Decorations/BackgroundClip.vue"; import BackgroundClip from "@screen/components/Decorations/BackgroundClip.vue";
import { moveable, stopPropagation } from "./utils" import { moveable, stopPropagation } from "./utils";
export default { export default {
components: { components: {
Teleport, Teleport,
BackgroundClip BackgroundClip,
}, },
model: { model: {
prop: 'visible', prop: "visible",
event: "update:value" event: "update:value",
}, },
name: 'Dialog', name: "Dialog",
props: { props: {
title: { title: {
type: String type: String,
}, },
visible: Boolean, visible: Boolean,
noneMask: { noneMask: {
type: Boolean, type: Boolean,
default: false default: false,
} },
}, },
watch: { watch: {
visible: { visible: {
deep: true, deep: true,
handler(bool) { handler(bool) {
this.$nextTick(() => { this.$nextTick(() => {
if (!bool) return this.destroyMoveable?.() if (!bool) return this.destroyMoveable?.();
const container = this.$refs.DialogContentRef.$el; const container = this.$refs.DialogContentRef.$el;
this.destroyMoveable = moveable(container, { target: container.querySelector(".dialog-title") }); this.destroyMoveable = moveable(container, {
target: container.querySelector(".dialog-title"),
});
stopPropagation(container.querySelector(".dialog-title").lastChild) stopPropagation(container.querySelector(".dialog-title").lastChild);
this.$once("hook:beforeDestroy", () => this.destroyMoveable?.()); this.$once("hook:beforeDestroy", () => this.destroyMoveable?.());
}) });
} },
} },
}, },
computed: { computed: {
modelVisible: { modelVisible: {
get() { get() {
return this.visible return this.visible;
}, },
set(val) { set(val) {
this.$emit('update:value', val) console.log("val", val);
} this.$emit("update:value", val);
} },
},
}, },
beforeDestroy() { beforeDestroy() {
this.modelVisible = false; this.modelVisible = false;
}, },
} };
</script> </script>
<style lang='scss' scoped> <style lang="scss" scoped>
.mask-layer { .mask-layer {
position: fixed; position: fixed;
top: 0; top: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
background: rgba(0, 0, 0, .36); background: rgba(0, 0, 0, 0.36);
border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px;
z-index: 100; z-index: 100;
display: flex; display: flex;
@ -111,7 +130,7 @@ export default {
.fade-enter-active, .fade-enter-active,
.fade-leave-active { .fade-leave-active {
transition: opacity .24s; transition: opacity 0.24s;
} }
.fade-enter, .fade-enter,
@ -185,7 +204,7 @@ export default {
padding: 0 27px; padding: 0 27px;
::v-deep { ::v-deep {
>div { > div {
min-width: 96px; min-width: 96px;
} }
} }

70
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/FatigueWakesUp/index.vue

@ -2,42 +2,56 @@
<Dialog v-model="obverseVisible" title="疲劳唤醒弹窗"> <Dialog v-model="obverseVisible" title="疲劳唤醒弹窗">
<div class="FatigueWakesUp"> <div class="FatigueWakesUp">
<Video class="video-stream" :pileNum="dialogData.stakeMark" /> <Video class="video-stream" :pileNum="dialogData.stakeMark" />
<ElTabs v-model="activeName" @tab-click="handleClickTabs" class="tabs">
<Descriptions labelWidth="72px" :list="list" :data="data" style="gap: 18px" /> <ElTabPane label="基本信息" name="first">
<Descriptions
labelWidth="72px"
:list="list"
:data="data"
style="gap: 18px"
/>
</ElTabPane>
<ElTabPane label="设备参数" name="second">设备参数</ElTabPane>
<ElTabPane label="在线率统计" name="third">在线率统计</ElTabPane>
</ElTabs>
</div> </div>
<template #footer> <template #footer>
<Button @click.native="deviceControlVisible = true">设备操作</Button> <Button @click.native="deviceControlVisible = true">设备操作</Button>
</template> </template>
<DeviceControlDialog v-model="deviceControlVisible" :deviceId="dialogData.iotDeviceId" /> <DeviceControlDialog
v-model="deviceControlVisible"
:deviceId="dialogData.iotDeviceId"
/>
</Dialog> </Dialog>
</template> </template>
<script> <script>
import Dialog from "@screen/components/Dialog/index.vue"; import Dialog from "@screen/components/Dialog/index.vue";
import Descriptions from '@screen/components/Descriptions.vue'; import Descriptions from "@screen/components/Descriptions.vue";
import Button from "@screen/components/Buttons/Button.vue" import Button from "@screen/components/Buttons/Button.vue";
// import { getRoadInfoByStakeMark, getProduct } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js" // import { getRoadInfoByStakeMark, getProduct } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js"
import Video from "@screen/components/Video" import Video from "@screen/components/Video";
import DeviceControlDialog from "./components/DeviceControlDialog.vue" import DeviceControlDialog from "./components/DeviceControlDialog.vue";
import request from "@/utils/request"; import request from "@/utils/request";
import { dialogDelayVisible } from "./../mixin" import { dialogDelayVisible } from "./../mixin";
// //
export default { export default {
name: 'FatigueWakesUp', name: "FatigueWakesUp",
mixins: [dialogDelayVisible], mixins: [dialogDelayVisible],
components: { components: {
Dialog, Dialog,
Descriptions, Descriptions,
Video, Video,
DeviceControlDialog, DeviceControlDialog,
Button Button,
}, },
data() { data() {
return { return {
activeName: "first",
deviceControlVisible: false, deviceControlVisible: false,
data: { data: {
deviceType: "行车诱导", deviceType: "行车诱导",
@ -49,52 +63,52 @@ export default {
}, },
list: [ list: [
{ {
label: '设备名称', label: "设备名称",
key: "deviceName", key: "deviceName",
}, },
{ {
label: '设备桩号', label: "设备桩号",
key: "stakeMark", key: "stakeMark",
}, },
{ {
label: '道路名称', label: "道路名称",
key: "roadName", key: "roadName",
}, },
{ {
label: '设备方向', label: "设备方向",
key: "direction", key: "direction",
enum: "CameraDirectionEnum" enum: "CameraDirectionEnum",
}, },
{ {
label: '设备状态', label: "设备状态",
key: "deviceState", key: "deviceState",
enum: "DeviceTypeEnum" enum: "DeviceTypeEnum",
}, },
{ {
label: '设备厂商', label: "设备厂商",
key: "brand", key: "brand",
}, },
] ],
} };
}, },
async created() { async created() {
this.data = { ...this.dialogData }; this.data = { ...this.dialogData };
getProduct(this.dialogData.productId) getProduct(this.dialogData.productId).then((data) => {
.then(data => { this.dialogData.brand = data.brand;
this.dialogData.brand = data.brand; });
})
const roadInfo = await getRoadInfoByStakeMark(this.dialogData.stakeMark); const roadInfo = await getRoadInfoByStakeMark(this.dialogData.stakeMark);
if (roadInfo) this.data.roadName = roadInfo.roadName; if (roadInfo) this.data.roadName = roadInfo.roadName;
}, },
methods: { methods: {
} handleClickTabs() {},
} },
};
</script> </script>
<style lang='scss' scoped> <style lang="scss" scoped>
.FatigueWakesUp { .FatigueWakesUp {
width: 420px; width: 420px;
color: #fff; color: #fff;
@ -130,7 +144,7 @@ export default {
align-items: center; align-items: center;
justify-content: end; justify-content: end;
>div { > div {
font-size: 16px; font-size: 16px;
padding: 6px 12px; padding: 6px 12px;
} }

96
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFilter/index.vue

@ -1,24 +1,38 @@
<template> <template>
<div class='HomeFilter'> <div class="HomeFilter">
<ElPopover trigger="manual" :value="activeIcon === 'filter'" :visibleArrow="false" placement="left" <ElPopover
popper-class="global-input-search-popover"> trigger="manual"
<Button :class="['btn', { 'btn-active': activeIcon }]" slot="reference" @click.native="handleClick('filter')"> :value="activeIcon === 'filter'"
<img src="@screen/images/home-filter/filter.svg"> :visibleArrow="false"
placement="left"
popper-class="global-input-search-popover"
>
<Button
:class="['btn', { 'btn-active': activeIcon }]"
slot="reference"
@click.native="handleClick('filter')"
>
<img src="@screen/images/home-filter/filter.svg" />
</Button> </Button>
<div class="body"> <div class="body">
<div class="title"> <div class="title">设备筛选</div>
设备筛选 <Form
</div> labelWidth="90px"
<Form labelWidth="90px" column="1" class="form" ref="FormConfigRef" :formList="formList" /> column="1"
class="form"
ref="FormConfigRef"
:formList="formList"
/>
<div class="footer"> <div class="footer">
<Button style="background-color: rgba(0, 179, 204, .3);" @click.native="handleResetForm"> <Button
style="background-color: rgba(0, 179, 204, 0.3)"
@click.native="handleResetForm"
>
重置 重置
</Button> </Button>
<Button @click.native="handleSearch"> <Button @click.native="handleSearch"> 搜索 </Button>
搜索
</Button>
</div> </div>
</div> </div>
</ElPopover> </ElPopover>
@ -26,17 +40,18 @@
</template> </template>
<script> <script>
import Button from '@screen/components/Buttons/Button.vue'; import Button from "@screen/components/Buttons/Button.vue";
import Form from '@screen/components/FormConfig'; import Form from "@screen/components/FormConfig";
import * as PresetFormItems from "@screen/common/PresetFormItems.js"; import * as PresetFormItems from "@screen/common/PresetFormItems.js";
import { merge, cloneDeep } from "lodash" import { merge, cloneDeep } from "lodash";
import request from "@/utils/request"; import request from "@/utils/request";
import { log } from "mathjs";
export default { export default {
name: 'HomeFilter', name: "HomeFilter",
components: { components: {
Button, Button,
Form Form,
}, },
data() { data() {
return { return {
@ -49,7 +64,7 @@ export default {
key: "deviceType", key: "deviceType",
type: "select", type: "select",
options: { options: {
options: [] options: [],
}, },
// visible: data => { // visible: data => {
// if (data.searchType == 1) { // if (data.searchType == 1) {
@ -57,29 +72,32 @@ export default {
// } // }
// }, // },
}, },
] ],
} };
}, },
methods: { methods: {
handleClick(type) { handleClick(type) {
console.log("type: ", type);
this.activeIcon = this.activeIcon === type ? null : type; this.activeIcon = this.activeIcon === type ? null : type;
console.log("this.activeIcon", this.activeIcon);
}, },
filterEnd(data) { filterEnd(data) {
this.activeIcon = null;
// this.filterData = data;
this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data); this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data);
}, },
async handleResetForm() { async handleResetForm() {
this.$refs.FormConfigRef?.reset(); this.$refs.FormConfigRef?.reset();
this.filterEnd(null) this.activeIcon = "filter";
this.filterEnd(null);
}, },
async handleSearch() { async handleSearch() {
const data = await this.$refs.FormConfigRef.validate(); const data = await this.$refs.FormConfigRef.validate();
if (!data.startStakeMark[0] || !data.startStakeMark[1]) delete data.startStakeMark; if (!data.startStakeMark[0] || !data.startStakeMark[1])
if (!data.endStakeMark[0] || !data.endStakeMark[1]) delete data.endStakeMark; delete data.startStakeMark;
if (!data.endStakeMark[0] || !data.endStakeMark[1])
this.filterEnd(data) delete data.endStakeMark;
this.activeIcon = null;
this.filterEnd(data);
}, },
async getDeviceTypeOptions() { async getDeviceTypeOptions() {
// try { // try {
@ -90,15 +108,15 @@ export default {
// }); // });
// } catch (e) { console.error(e); } // } catch (e) { console.error(e); }
// return ; // return ;
} },
}, },
async created() { async created() {
// await this.getDeviceTypeOptions(); // await this.getDeviceTypeOptions();
} },
} };
</script> </script>
<style lang='scss'> <style lang="scss">
div.el-popper.global-input-search-popover { div.el-popper.global-input-search-popover {
background: rgba(6, 66, 88, 0.8); background: rgba(6, 66, 88, 0.8);
border: 1px solid rgba(42, 217, 253, 0.6); border: 1px solid rgba(42, 217, 253, 0.6);
@ -108,23 +126,25 @@ div.el-popper.global-input-search-popover {
.body { .body {
.title { .title {
background: linear-gradient(90deg, #237E9B 0%, rgba(23, 145, 184, 0) 100%); background: linear-gradient(
90deg,
#237e9b 0%,
rgba(23, 145, 184, 0) 100%
);
padding: 3px 9px; padding: 3px 9px;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
width: 100%; width: 100%;
} }
} }
} }
</style> </style>
<style lang='scss' scoped> <style lang="scss" scoped>
.HomeFilter { .HomeFilter {
.btn { .btn {
padding: 9px; padding: 9px;
background: linear-gradient(180deg, #152E3C 0%, #163A45 100%); background: linear-gradient(180deg, #152e3c 0%, #163a45 100%);
border-radius: 4px; border-radius: 4px;
overflow: hidden; overflow: hidden;
height: unset; height: unset;
@ -132,7 +152,7 @@ div.el-popper.global-input-search-popover {
} }
.btn-active { .btn-active {
background: linear-gradient(180deg, #005C79 0%, #009BCC 100%); background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
} }
} }
</style> </style>

62
ruoyi-ui/src/views/JiHeExpressway/pages/Home/index.vue

@ -1,6 +1,13 @@
<template> <template>
<div class='Home'> <div class="Home">
<AMapContainer ref="AMapContainerRef" @update:isGisCompleted="(data) => { this.isGisCompleted = data; }" /> <AMapContainer
ref="AMapContainerRef"
@update:isGisCompleted="
(data) => {
this.isGisCompleted = data;
}
"
/>
<section class="content"> <section class="content">
<!-- 左侧 --> <!-- 左侧 -->
<div class="content-l"> <div class="content-l">
@ -8,7 +15,11 @@
<FocusedMonitoring class="card-menu" /> <FocusedMonitoring class="card-menu" />
<!-- --> <!-- -->
<RoadAndEvents ref="RoadAndEventsRef" :isGisCompleted="isGisCompleted" class="content-l-b card-menu" /> <RoadAndEvents
ref="RoadAndEventsRef"
:isGisCompleted="isGisCompleted"
class="content-l-b card-menu"
/>
</div> </div>
<!-- 右侧 --> <!-- 右侧 -->
@ -24,7 +35,11 @@
<footer class="footer card-menu"> <footer class="footer card-menu">
<div class="footer-title"> <div class="footer-title">
<span>济菏高速缩略图</span> <span>济菏高速缩略图</span>
<i class="el-icon-s-fold" style="color: #2AD9FD; transform: rotate(-90deg);" @click.stop="handleShrink" /> <i
class="el-icon-s-fold"
style="color: #2ad9fd; transform: rotate(-90deg)"
@click.stop="handleShrink"
/>
</div> </div>
<div class="footer-content"> <div class="footer-content">
<Thumbnail /> <Thumbnail />
@ -41,12 +56,12 @@ import RoadAndEvents from "./components/RoadAndEvents/index.vue";
import AMapContainer from "./components/AMapContainer/index.vue"; import AMapContainer from "./components/AMapContainer/index.vue";
import HomeFilter from "./components/HomeFilter/index.vue"; import HomeFilter from "./components/HomeFilter/index.vue";
import HomeFrame from "./components/HomeFrame/index.vue"; import HomeFrame from "./components/HomeFrame/index.vue";
import Button from '@screen/components/Buttons/Button.vue'; import Button from "@screen/components/Buttons/Button.vue";
// import InfoBoard from "./components/InfoBoard" // import InfoBoard from "./components/InfoBoard"
export default { export default {
name: 'Home', name: "Home",
components: { components: {
FocusedMonitoring, FocusedMonitoring,
ConditionStatistics, ConditionStatistics,
@ -63,34 +78,37 @@ export default {
isShowInfoBoard: false, isShowInfoBoard: false,
selectedDevice: null, selectedDevice: null,
isGisCompleted: false, isGisCompleted: false,
} };
}, },
provide() { provide() {
return { return {
getMap: () => this.$refs.AMapContainerRef.getMapInstance() getMap: () => this.$refs.AMapContainerRef.getMapInstance(),
} };
}, },
methods: { methods: {
handleShrink(e) { handleShrink(e) {
const translateXElement = e.target.parentElement.parentElement; const translateXElement = e.target.parentElement.parentElement;
const result = (e.target.style.transform.match(/[-0-9]+/)?.[0] || -90) * -1 const result =
(e.target.style.transform.match(/[-0-9]+/)?.[0] || -90) * -1;
e.target.style.transform = `rotate(${result}deg)`; e.target.style.transform = `rotate(${result}deg)`;
if (translateXElement.style.transform !== `translateY(calc(100% - 36px))`) { if (
translateXElement.style.transform = `translateY(calc(100% - 36px))` translateXElement.style.transform !== `translateY(calc(100% - 36px))`
) {
translateXElement.style.transform = `translateY(calc(100% - 36px))`;
translateXElement.style.position = `absolute`; translateXElement.style.position = `absolute`;
translateXElement.style.bottom = `0px`; translateXElement.style.bottom = `0px`;
} else { } else {
translateXElement.style.transform = `translateY(0)` translateXElement.style.transform = `translateY(0)`;
translateXElement.style.position = `relative`; translateXElement.style.position = `relative`;
} }
} },
} },
} };
</script> </script>
<style lang='scss' scoped> <style lang="scss" scoped>
.Home { .Home {
height: 100%; height: 100%;
z-index: 6; z-index: 6;
@ -101,7 +119,7 @@ export default {
justify-content: center; justify-content: center;
.card-menu { .card-menu {
transition: all .24s linear; transition: all 0.24s linear;
} }
.content { .content {
@ -113,7 +131,7 @@ export default {
height: min-content; height: min-content;
pointer-events: none; pointer-events: none;
>div { > div {
pointer-events: auto; pointer-events: auto;
} }
@ -127,7 +145,7 @@ export default {
overflow: hidden; overflow: hidden;
height: 100%; height: 100%;
>div { > div {
pointer-events: all; pointer-events: all;
flex: 1; flex: 1;
} }
@ -176,7 +194,7 @@ export default {
will-change: height; will-change: height;
bottom: 0; bottom: 0;
>div { > div {
pointer-events: all; pointer-events: all;
} }
@ -205,7 +223,7 @@ export default {
} }
i { i {
transition: all .24s linear; transition: all 0.24s linear;
cursor: pointer; cursor: pointer;
} }

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

@ -1,5 +1,6 @@
<template> <template>
<Dialog v-model="modelVisible" title="收费站管制统计" style="width: 100%"> <Dialog v-model="modelVisible" title="收费站管制统计" style="width: 100%">
{{ modelVisible }}
<div class="search"> <div class="search">
<InputSearch <InputSearch
:formList="searchFormList" :formList="searchFormList"
@ -379,9 +380,7 @@ export default {
}); });
this.searchFormList[2].options.options = dataList; this.searchFormList[2].options.options = dataList;
this.facilityIds = res[0].value.data.map((item) => item.id); this.facilityIds = res[0].value.data.map((item) => item.id);
this.searchFormList[2].default = res[0].value.data.map( this.searchFormList[2].default = dataList.map((item) => item.key);
(item) => item.id
);
console.log(56, this.searchFormList[2].default); console.log(56, this.searchFormList[2].default);
let currentMonth = moment().format("YYYY-MM"); let currentMonth = moment().format("YYYY-MM");
let currentDate = moment().format("YYYY-MM-DD"); let currentDate = moment().format("YYYY-MM-DD");

5
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/data.js

@ -29,6 +29,10 @@ export const searchFormList = [
key: "time", key: "time",
required: true, required: true,
type: "datePicker", type: "datePicker",
default: [
moment().startOf("month").format("YYYY-MM-DD HH:mm:ss"),
moment().format("YYYY-MM-DD HH:mm:ss"),
],
options: { options: {
format: "yyyy-MM-dd", format: "yyyy-MM-dd",
type: "daterange", type: "daterange",
@ -39,6 +43,7 @@ export const searchFormList = [
key: "type", key: "type",
required: true, required: true,
type: "select", type: "select",
default: "1",
options: { options: {
options: [ options: [
{ {

13
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/index.vue

@ -202,8 +202,7 @@ export default {
initData() { initData() {
this.startTime = moment().startOf("month").format("YYYY-MM-DD HH:mm:ss"); this.startTime = moment().startOf("month").format("YYYY-MM-DD HH:mm:ss");
this.time = moment().format("YYYY-MM-DD HH:mm:ss"); this.time = moment().format("YYYY-MM-DD HH:mm:ss");
this.typeQuery = searchFormList[1].options.options[0].value; this.typeQuery = this.searchFormList[1].options.options[0].value;
console.log(8888, this.startTime, this.time, this.typeQuery);
clearInterval(this.interval); clearInterval(this.interval);
if (this.activeName == "first") { if (this.activeName == "first") {
this.initDevice(); this.initDevice();
@ -247,8 +246,8 @@ export default {
handleSearch(data) { handleSearch(data) {
console.log(777, data); console.log(777, data);
this.typeQuery = data.type; this.typeQuery = data.type;
this.startTime = this.formatDate(data.time[0]); this.startTime = moment(data.time[0]).format("YYYY-MM-DD HH:mm:ss");
this.time = this.formatDate(data.time[1]); this.time = moment(data.time[1]).format("YYYY-MM-DD HH:mm:ss");
let typeText = let typeText =
this.searchFormList[1].options.options[this.typeQuery - 1].label; this.searchFormList[1].options.options[this.typeQuery - 1].label;
this.searchText = `${moment(this.startTime).format( this.searchText = `${moment(this.startTime).format(
@ -259,7 +258,6 @@ export default {
}, },
changeTabs() { changeTabs() {
this.initData(); this.initData();
console.log("======================", this.queryChart);
this.$nextTick(() => { this.$nextTick(() => {
this.queryChart.resize(); this.queryChart.resize();
}); });
@ -414,8 +412,9 @@ export default {
}); });
}, },
}, },
mounted() { async mounted() {
this.initData(); console.log("__________________", searchFormList[0].default);
await this.initData();
}, },
}; };
</script> </script>

16
ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/TemperatureTrend/assets/charts.js

@ -6,10 +6,10 @@ var options = {
}, },
color: "#FFD15C", color: "#FFD15C",
grid: { grid: {
left: "2%", left: "0",
right: "5%", right: "0",
bottom: "10%", bottom: "0",
top: "10%", top: "30px",
containLabel: true, containLabel: true,
}, },
legend: { legend: {
@ -72,14 +72,12 @@ var options = {
], ],
}, },
yAxis: { yAxis: {
name: "℃ ",
type: "value", type: "value",
min: 0,
max: 40,
minInterval: 1,
nameTextStyle: { nameTextStyle: {
fontSize: 10, fontSize: 12,
color: "#fff", color: "#fff",
align: "center", align: "right",
}, },
splitLine: { splitLine: {
lineStyle: { lineStyle: {

16
ruoyi-ui/src/views/JiHeExpressway/pages/perception/meteorologyCheck/components/weatherInfoQuery/components/visibilityTrends/assets/charts.js

@ -11,10 +11,10 @@ var options = {
// }, // },
}, },
grid: { grid: {
left: "2%", left: "0",
right: "5%", right: "0",
bottom: "10%", bottom: "0",
top: "10%", top: "30px",
containLabel: true, containLabel: true,
}, },
legend: { legend: {
@ -75,15 +75,13 @@ var options = {
], ],
}, },
yAxis: { yAxis: {
name: "M ",
type: "value", type: "value",
min: 0,
max: 40,
minInterval: 5,
splitNumber: 5, splitNumber: 5,
nameTextStyle: { nameTextStyle: {
fontSize: 12, fontSize: 12,
color: "#BDD8FB", color: "#fff",
align: "center", align: "right",
}, },
splitLine: { splitLine: {
lineStyle: { lineStyle: {

6
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/flowstate/assets/charts.js

@ -9,7 +9,11 @@ var options = {
"" ""
)}<br/>${params[0].marker}${ )}<br/>${params[0].marker}${
params[0].seriesName params[0].seriesName
}: <span style="font-weight:bold;"> ${params[0].value} </span>`; }: <span style="font-weight:bold;"> ${params[0].value} </span><br/>${
params[1].marker
}${params[1].seriesName}: <span style="font-weight:bold;"> ${
params[1].value
} </span>`;
}, },
}, },
axisPointer: { axisPointer: {

39
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/flowstate/index.vue

@ -1,47 +1,42 @@
<template> <template>
<div class='flowstate'> <div class="flowstate">
<WgtTitle :title="'全路车流量状况'"></WgtTitle> <WgtTitle :title="'全路车流量状况'"></WgtTitle>
<div class="board"> <div class="board">
<div class="tag1">方向济南</div> <div class="tag1">方向济南</div>
<div class="tag2">方向菏泽</div> <div class="tag2">方向菏泽</div>
<div class="charts keep-ratio " id="flowStateEchartBox"></div> <div class="charts keep-ratio" id="flowStateEchartBox"></div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import WgtTitle from "../../../widgets/title";
import WgtTitle from '../../../widgets/title'
import * as echarts from "echarts"; import * as echarts from "echarts";
import chartsStatistics from "./assets/charts"; import chartsStatistics from "./assets/charts";
export default { export default {
name: 'Flowstate', name: "Flowstate",
components: { components: {
WgtTitle WgtTitle,
}, },
data() { data() {
return { return {};
}
}, },
mounted() { mounted() {
setTimeout(() => { setTimeout(() => {
this.$nextTick(() => { this.$nextTick(() => {
var myChart = echarts.init(document.getElementById('flowStateEchartBox')); var myChart = echarts.init(
document.getElementById("flowStateEchartBox")
);
myChart.setOption(chartsStatistics); myChart.setOption(chartsStatistics);
}); });
}); });
}, },
created() { created() {},
methods: {},
}, };
methods: {
}
}
</script> </script>
<style lang='scss' scoped> <style lang="scss" scoped>
.flowstate { .flowstate {
width: 100%; width: 100%;
@ -53,11 +48,15 @@ export default {
border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px;
opacity: 1; opacity: 1;
border: 1px solid; border: 1px solid;
border-image: linear-gradient(360deg, rgba(55, 231, 255, 0.3), rgba(55, 231, 255, 0)) 1 1; border-image: linear-gradient(
360deg,
rgba(55, 231, 255, 0.3),
rgba(55, 231, 255, 0)
)
1 1;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
.charts { .charts {

1
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/index.vue

@ -6,7 +6,6 @@
<!-- 在途车流量车型分类 --> <!-- 在途车流量车型分类 -->
<!-- 全路段拥堵状况 --> <!-- 全路段拥堵状况 -->
<Congestion class="content-l"></Congestion> <Congestion class="content-l"></Congestion>
<!-- 畅通率 --> <!-- 畅通率 -->
<!-- <Unblocked class="content-m" /> --> <!-- <Unblocked class="content-m" /> -->
<!-- 全路车流量状况 --> <!-- 全路车流量状况 -->

30
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/trafficIndicators/assets/chartsRadar.js

@ -1,14 +1,22 @@
import * as echarts from "echarts"; window.radarData = {'交通特征':9,'拥挤度':8,'饱和度':5,}
let options = { let options = {
legend: { legend: {
show: false, show: false,
}, },
tooltip: {
trigger: "item",
formatter: function (params) {
let data = params.data;
return `交通特征: ${data.value[0]}<br>拥挤度: ${data.value[1]}<br>饱和度: ${data.value[2]}`;
},
},
radar: [ radar: [
{ {
indicator: [ indicator: [
{ text: "Indicator1" }, { name: "交通特征",max: 10 },
{ text: "Indicator2" }, { name: "拥挤度" ,max: 10},
{ text: "Indicator3" }, { name: "饱和度",max: 10 },
], ],
center: ["50%", "55%"], center: ["50%", "55%"],
radius: 70, radius: 70,
@ -16,8 +24,10 @@ let options = {
splitNumber: 4, splitNumber: 4,
shape: "circle", shape: "circle",
axisName: { axisName: {
formatter: "{value}", formatter: function (value) {
color: "#428BD4", return value + ' '+ (radarData[value] / 10 * 100) + "%";
},
color: "#fff",
}, },
splitArea: { splitArea: {
areaStyle: { areaStyle: {
@ -45,8 +55,8 @@ let options = {
}, },
data: [ data: [
{ {
value: [1, 5, 1], value: [9,8,5],
name: "Data B", name: "月指标",
areaStyle: { areaStyle: {
color: { color: {
type: "linear", type: "linear",
@ -56,12 +66,12 @@ let options = {
y2: 1, y2: 1,
colorStops: [ colorStops: [
{ {
offset: 0.1, offset: 0,
color: "#DC6A00", // 0% 处的颜色 color: "#DC6A00", // 0% 处的颜色
}, },
{ {
offset: 0.5, offset: 0.5,
color: "#5D887C", // 100% 处的颜色 color: "#5D887C", // 50% 处的颜色
}, },
{ {
offset: 1, offset: 1,

147
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/trafficIndicators/index.vue

@ -33,87 +33,38 @@
<el-button type="primary" size="mini" class="btnSearch" icon="el-icon-search">查询</el-button> <el-button type="primary" size="mini" class="btnSearch" icon="el-icon-search">查询</el-button>
<el-button class="btnReset" size="mini" icon="el-icon-refresh-left" >重置</el-button> <el-button class="btnReset" size="mini" icon="el-icon-refresh-left" >重置</el-button>
</div> --> </div> -->
<ProgressBar <ProgressBar :dataList="dataList" class="keep-ratio progressbar" :selectIndex="7" />
:dataList="dataList"
class="keep-ratio progressbar"
:selectIndex="7"
/>
<div class="body"> <div class="body">
<div class="body-l"> <div class="body-l">
<div class="searchPanel_1"> <div class="searchPanel_1">
<!-- <el-from ref="form"> --> <!-- <el-from ref="form"> -->
<RadioGroup <RadioGroup :options="[
:options="[ { key: '1', label: '菏泽' },
{ key: '1', label: '菏泽' }, { key: '3', label: '济南' },
{ key: '3', label: '济南' }, ]" v-model="direction" type="button" />
]" <el-select v-model="type" size="mini" class="selectRoad" placeholder="请选择">
v-model="direction" <el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value">
type="button"
/>
<el-select
v-model="type"
size="mini"
class="selectRoad"
placeholder="请选择"
>
<el-option
v-for="item in typeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
<el-select <el-select v-model="quarter" size="medium" v-if="type == '3'" class="selectRoad-medium" placeholder="请选择">
v-model="quarter" <el-option v-for="item in quarterOptions" :key="item.value" :label="item.label" :value="item.value">
size="medium"
v-if="type == '3'"
class="selectRoad-medium"
placeholder="请选择"
>
<el-option
v-for="item in quarterOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
<!-- <el-quarter-picker size="mini" class="selectRoad" style="width:180px;" v-if="type == '3'" v-model="dateTime" <!-- <el-quarter-picker size="mini" class="selectRoad" style="width:180px;" v-if="type == '3'" v-model="dateTime"
aria-placeholder="请选季度" /> --> aria-placeholder="请选季度" /> -->
<el-date-picker <el-date-picker size="mini" v-if="type != '3'" class="selectRoad" v-model="dateTime" style="width: 140px"
size="mini" :type="type == 1
v-if="type != '3'" ? 'date'
class="selectRoad" : type == 2
v-model="dateTime" ? 'month'
style="width: 140px" : type == 4
:type=" ? 'year'
type == 1 : ''
? 'date' " placeholder="请选择" />
: type == 2
? 'month' <el-button type="primary" size="mini" class="btnSearch" @click="searchQuery"
: type == 4 icon="el-icon-search">查询</el-button>
? 'year' <el-button class="btnReset" size="mini" icon="el-icon-refresh-left" @click="handleClear">重置</el-button>
: ''
"
placeholder="请选择"
/>
<el-button
type="primary"
size="mini"
class="btnSearch"
@click="searchQuery"
icon="el-icon-search"
>查询</el-button
>
<el-button
class="btnReset"
size="mini"
icon="el-icon-refresh-left"
@click="handleClear"
>重置</el-button
>
<!-- </el-from> --> <!-- </el-from> -->
</div> </div>
<!-- <div class="searchPanel_1"> <!-- <div class="searchPanel_1">
@ -138,7 +89,7 @@
<div class="chartOrg"> <div class="chartOrg">
<div class="itemChart"> <div class="itemChart">
<div class="title">上月指标</div> <div class="title">上月指标</div>
<div id="chart2" class="keep-ratio"></div> <div id="chart2" class=""></div>
</div> </div>
<div class="itemChart"> <div class="itemChart">
<div class="title">本月指标</div> <div class="title">本月指标</div>
@ -338,7 +289,7 @@ export default {
}; };
}, },
created() {}, created() { },
methods: {}, methods: {},
mounted() { mounted() {
setTimeout(() => { setTimeout(() => {
@ -358,46 +309,60 @@ export default {
canvas.height = parentDiv.offsetHeight; canvas.height = parentDiv.offsetHeight;
parentDiv.appendChild(canvas); parentDiv.appendChild(canvas);
const context = canvas.getContext("2d"); const context = canvas.getContext("2d");
context.lineWidth = 1; // 线
// //
var gr = context.createLinearGradient(247, 63, 450, 0); var gr = context.createLinearGradient(140, 0, 180, 0);
// //
gr.addColorStop(1, "rgba(92,197,255,0)"); gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)"); gr.addColorStop(0, "rgba(92,197,255,0.5)");
context.lineWidth = 1; // 线
// //
drawRoundRect(context, 300, 78, 160, 24, 12, gr); drawRoundRect(context, 98, 1, 90, 22, 12, gr);
var gr = context.createLinearGradient(240, 63, 450, 0); var gr = context.createLinearGradient(35, 0, 75, 0);
// //
gr.addColorStop(1, "rgba(92,197,255,0)"); gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)"); gr.addColorStop(0, "rgba(92,197,255,0.5)");
drawRoundRect(context, 300, 148, 160, 24, 12, gr); drawRoundRect(context, -1, 136, 80, 20, 12, gr);
var gr = context.createLinearGradient(240, 63, 450, 0); var gr = context.createLinearGradient(230, 0, 275, 0);
// //
gr.addColorStop(1, "rgba(92,197,255,0)"); gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)"); gr.addColorStop(0, "rgba(92,197,255,0.5)");
drawRoundRect(context, 300, 218, 160, 24, 12, gr); context.lineWidth = 1; // 线
drawRoundRect(context, 211, 136, 220, 20, 12, gr);
var gr = context.createLinearGradient(400, 63, 450, 0); const domMap3 = document.getElementById("chart3");
let parentDiv3 = domMap3.firstChild;
// canvas
let canvas3 = document.createElement("canvas");
canvas3.width = parentDiv3.offsetWidth;
canvas3.height = parentDiv3.offsetHeight;
parentDiv3.appendChild(canvas3);
const context3 = canvas3.getContext("2d");
context3.lineWidth = 1; // 线
//
var gr = context3.createLinearGradient(140, 0, 180, 0);
// //
gr.addColorStop(1, "rgba(92,197,255,0)"); gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)"); gr.addColorStop(0, "rgba(92,197,255,0.5)");
//
drawRoundRect(context3, 98, 4, 90, 20, 12, gr);
drawRoundRect(context, 460, 78, 160, 24, 12, gr); var gr = context3.createLinearGradient(35, 0, 75, 0);
var gr = context.createLinearGradient(350, 63, 450, 0);
// //
gr.addColorStop(1, "rgba(92,197,255,0)"); gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)"); gr.addColorStop(0, "rgba(92,197,255,0.5)");
drawRoundRect(context, 460, 148, 160, 24, 12, gr); drawRoundRect(context3, -1, 138, 80, 20, 12, gr);
var gr = context.createLinearGradient(300, 63, 450, 0);
var gr = context3.createLinearGradient(240, 0, 290, 0);
// //
gr.addColorStop(1, "rgba(92,197,255,0)"); gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)"); gr.addColorStop(0, "rgba(92,197,255,0.5)");
drawRoundRect(context, 460, 218, 160, 24, 12, gr); context3.lineWidth = 1; // 线
drawRoundRect(context3, 211, 138, 220, 20, 12, gr);
}); });
}); });
}, },
@ -420,7 +385,7 @@ export default {
width: 100%; width: 100%;
font-size: 14px; font-size: 14px;
> div { >div {
display: inline-flex; display: inline-flex;
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
@ -436,7 +401,7 @@ export default {
.chartOrg { .chartOrg {
flex-direction: row !important; flex-direction: row !important;
> div { >div {
display: inline-flex; display: inline-flex;
flex-direction: column; flex-direction: column;
width: 50%; width: 50%;
@ -444,7 +409,7 @@ export default {
} }
.itemChart { .itemChart {
> .title { >.title {
display: inline-flex; display: inline-flex;
width: 100%; width: 100%;
height: 30px; height: 30px;

2
ruoyi-ui/src/views/JiHeExpressway/pages/service/sensitive/index.vue

@ -84,7 +84,7 @@
:total="numTotal" :total="numTotal"
:current-page.sync="currentPage" :current-page.sync="currentPage"
:page-size="pageSize" :page-size="pageSize"
layout="total,prev, pager, next, jumper" layout="total,sizes,prev, pager, next, jumper"
@size-change="handleSizeChange" @size-change="handleSizeChange"
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
/> />

Loading…
Cancel
Save