Browse Source

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

wangqin
qingzhengli 1 year ago
parent
commit
534f3ec966
  1. 19
      ruoyi-ui/src/views/JiHeExpressway/components/Adaptation.vue
  2. 172
      ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/UserArea.vue
  3. 13
      ruoyi-ui/src/views/JiHeExpressway/components/InputSearch/index.vue
  4. 2
      ruoyi-ui/src/views/JiHeExpressway/components/Pagination.vue
  5. 426
      ruoyi-ui/src/views/JiHeExpressway/components/infoBoard/BoardInfoEditor.vue
  6. 44
      ruoyi-ui/src/views/JiHeExpressway/index.vue
  7. 133
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/InfoBoard/index.vue
  8. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/businessDataManagement/index.vue
  9. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/dispatch/EventDetailDialog/index.vue
  10. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue
  11. 3
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/PresetFormItems.js
  12. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/index.vue
  13. 27
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/data.js
  14. 20
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue
  15. 22
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/auditAnalytics/StatsDialogVisible/index.vue
  16. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/assets/charts.js
  17. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts.js
  18. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts2.js
  19. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts3.js
  20. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/datav/roadNet/index.vue
  21. 42
      ruoyi-ui/src/views/JiHeExpressway/pages/datav/roadNet/sensors.vue
  22. 5
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dailyDisposal/assets/charts.js
  23. 6
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dailyDisposal/index.vue
  24. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dayTotal/assets/charts.js
  25. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/assets/charts3.js
  26. 18
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index.vue
  27. 11
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/assets/charts.js
  28. 17
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/index.vue
  29. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/assets/charts.js
  30. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/assets/charts.js
  31. 9
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/assets/charts.js
  32. 10
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/index.vue
  33. 6
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/changesIndicators/assets/charts3.js
  34. 9
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/composeFeatures/assets/charts.js
  35. 9
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/crowding/assets/charts.js
  36. 10
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/saturationMax/assets/charts.js
  37. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/trafficIndicators/assets/charts.js
  38. 47
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditLists/index.vue
  39. 37
      ruoyi-ui/src/views/JiHeExpressway/pages/service/PublishingChannelManagement/index.vue
  40. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/service/board/index.vue
  41. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/service/sensitive/index.vue
  42. 4
      ruoyi-ui/vue.config.js

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

@ -15,6 +15,11 @@ export default {
defaultHeight: { defaultHeight: {
type: Number, type: Number,
default: () => 1080 default: () => 1080
},
headerHeight: {
type: Number,
default: () => 68
} }
}, },
provide() { provide() {
@ -33,10 +38,10 @@ export default {
computed: { computed: {
transformStyle() { transformStyle() {
const obj = {}; const obj = {};
obj["transform"] = `scaleX(${this.scale.scaleX}) scaleY(${this.scale.scaleY})`; obj["transform"] = `scaleX(${this.scale.scaleX}) scaleY(${this.scale.scaleY})`;
obj["width"] = this.defaultWidth + "px"; obj["width"] = this.defaultWidth + "px";
obj["height"] = this.defaultHeight + "px"; obj["height"] = this.defaultHeight - this.headerHeight + "px";
obj["top"] = this.headerHeight + "px";
// obj.top = `calc(50% - ${(this.defaultHeight / 2) * this.scaleY}px)`; // obj.top = `calc(50% - ${(this.defaultHeight / 2) * this.scaleY}px)`;
// obj.left = `calc(50% - ${(this.defaultWidth / 2) * this.scaleX}px)`; // obj.left = `calc(50% - ${(this.defaultWidth / 2) * this.scaleX}px)`;
@ -46,12 +51,16 @@ export default {
return this.scale return this.scale
} }
}, },
watch:{
headerHeight(){
}
},
methods: { methods: {
initScale() { initScale() {
let winW = window.innerWidth; let winW = window.innerWidth;
let winH = window.innerHeight; let winH = window.innerHeight - this.headerHeight;
this.setScale(this.scale.scaleX = winW / this.defaultWidth, this.scale.scaleY = winH / this.defaultHeight) this.setScale(this.scale.scaleX = winW / this.defaultWidth, this.scale.scaleY = winH / (this.defaultHeight - this.headerHeight))
}, },
setScale(scaleX, scaleY) { setScale(scaleX, scaleY) {
const cssGlobalVariable = [ const cssGlobalVariable = [
@ -141,7 +150,7 @@ body {
<style lang="scss" scoped> <style lang="scss" scoped>
.Adaptation { .Adaptation {
transition: all 0.15s linear; transition: all 0.15s linear;
position: absolute; position: fixed;
transform-origin: 0 0; transform-origin: 0 0;
} }
</style> </style>

172
ruoyi-ui/src/views/JiHeExpressway/components/HeaderMenu/UserArea.vue

@ -3,8 +3,15 @@
<div class="opCon"> <div class="opCon">
<el-dropdown class="userBox"> <el-dropdown class="userBox">
<span class="user"> <span class="user">
<img class="icon head" src="@/assets/jihe/images/user/author.png" alt=""> <img
<p class="title"><span class="txt">admin</span><i class="menuIcon el-icon-arrow-down el-icon--right"></i></p> class="icon head"
src="@/assets/jihe/images/user/author.png"
alt=""
/>
<p class="title">
<span class="txt">admin</span
><i class="menuIcon el-icon-arrow-down el-icon--right"></i>
</p>
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item> <el-dropdown-item>
@ -14,22 +21,26 @@
</el-dropdown-item> </el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
<div class="config"><img class="icon" src="@/assets/jihe/images/user/set.png" alt=""></div> <div class="config">
<div class="logout" @click="logout"><img class="icon" src="@/assets/jihe/images/user/out.png" alt=""></div> <img class="icon" src="@/assets/jihe/images/user/set.png" alt="" />
</div>
<div class="logout" @click="logout">
<img class="icon" src="@/assets/jihe/images/user/out.png" alt="" />
</div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { mapGetters } from 'vuex' import { mapGetters } from "vuex";
import Breadcrumb from '@/components/Breadcrumb' import Breadcrumb from "@/components/Breadcrumb";
import Hamburger from '@/components/Hamburger' import Hamburger from "@/components/Hamburger";
import Screenfull from '@/components/Screenfull' import Screenfull from "@/components/Screenfull";
import SizeSelect from '@/components/SizeSelect' import SizeSelect from "@/components/SizeSelect";
import Search from '@/components/HeaderSearch' import Search from "@/components/HeaderSearch";
import RuoYiGit from '@/components/RuoYi/Git' import RuoYiGit from "@/components/RuoYi/Git";
// import BigScreen from '@/components/bigScreen' // import BigScreen from '@/components/bigScreen'
import RuoYiDoc from '@/components/RuoYi/Doc' import RuoYiDoc from "@/components/RuoYi/Doc";
export default { export default {
data() { data() {
return { return {
@ -37,17 +48,17 @@ export default {
warningList: [], warningList: [],
unReadWarningList: [], unReadWarningList: [],
warnTypes: [ warnTypes: [
{ value: 0, label: '遥测越限' }, { value: 0, label: "遥测越限" },
{ value: 1, label: '遥信告警' }, { value: 1, label: "遥信告警" },
{ value: 2, label: '通道告警' }, { value: 2, label: "通道告警" },
{ value: 3, label: '其他事项' } { value: 3, label: "其他事项" },
], ],
dealStatuss: [ dealStatuss: [
{ value: '', label: '全部' }, { value: "", label: "全部" },
{ value: 0, label: '未处理' }, { value: 0, label: "未处理" },
{ value: 1, label: '处理中' }, { value: 1, label: "处理中" },
{ value: 2, label: '已处理' }, { value: 2, label: "已处理" },
{ value: 3, label: '已忽略' } { value: 3, label: "已忽略" },
], ],
// //
total: 0, total: 0,
@ -55,11 +66,11 @@ export default {
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
deviceCode: '' deviceCode: "",
}, },
visible: false, visible: false,
recordForm: {} recordForm: {},
} };
}, },
components: { components: {
Breadcrumb, Breadcrumb,
@ -69,72 +80,111 @@ export default {
Search, Search,
RuoYiGit, RuoYiGit,
// BigScreen, // BigScreen,
RuoYiDoc RuoYiDoc,
}, },
computed: { computed: {
...mapGetters(['sidebar', 'avatar', 'device']), ...mapGetters(["sidebar", "avatar", "device"]),
setting: { setting: {
get() { get() {
return this.$store.state.settings.showSettings return this.$store.state.settings.showSettings;
}, },
set(val) { set(val) {
this.$store.dispatch('settings/changeSetting', { this.$store.dispatch("settings/changeSetting", {
key: 'showSettings', key: "showSettings",
value: val value: val,
}) });
} },
}, },
topNav: { topNav: {
get() { get() {
return this.$store.state.settings.topNav return this.$store.state.settings.topNav;
} },
}, },
sideTheme: { sideTheme: {
get() { get() {
return this.$store.state.settings.sideTheme return this.$store.state.settings.sideTheme;
} },
} },
}, },
methods: { methods: {
toggleSideBar() { toggleSideBar() {
this.$store.dispatch('app/toggleSideBar') this.$store.dispatch("app/toggleSideBar");
}, },
async logout() { async logout() {
this.$confirm('确定注销并退出系统吗?', '提示', { this.$confirm("确定注销并退出系统吗?", "提示", {
confirmButtonText: '确定', confirmButtonText: "确定",
cancelButtonText: '取消', cancelButtonText: "取消",
type: 'warning' type: "warning",
}) })
.then(() => { .then(() => {
this.$store.dispatch('LogOut').then(() => { this.$store.dispatch("LogOut").then(() => {
//location.href = '/index'; //location.href = '/index';
location.reload() location.reload();
});
}) })
}) .catch(() => {});
.catch(() => {}) },
} },
} };
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.operations { .operations {
display: flex; justify-content: flex-end; display: flex;
.opCon{ width:100%; max-width: 160px; display: flex; flex-direction: row; height: 16px; justify-content: space-between; align-items: center; justify-content: flex-end;
.icon{ height: 16px; width: 16px; object-fit: contain;} .opCon {
.userBox{ flex: 1; width: 100%;
.user{ display: flex; flex-direction: row; align-items: center; cursor: pointer; max-width: 160px;
.head{ width: 16px; } display: flex;
.title{flex: 1; width: 0; display: flex; flex-direction: row; color: #fff; display: flex; flex-direction: row;
.txt{ flex: 1; width: 0; text-align: center; white-space: nowrap; word-break: break-all; overflow: hidden; text-overflow: ellipsis;} height: 16px;
.menuIcon{ line-height: 16px;} justify-content: space-between;
align-items: center;
.icon {
height: 16px;
width: 16px;
object-fit: contain;
cursor: pointer;
} }
.userBox {
flex: 1;
.user {
display: flex;
flex-direction: row;
align-items: center;
cursor: pointer;
.head {
width: 16px;
} }
.title {
flex: 1;
width: 0;
display: flex;
flex-direction: row;
color: #fff;
display: flex;
.txt {
flex: 1;
width: 0;
text-align: center;
white-space: nowrap;
word-break: break-all;
overflow: hidden;
text-overflow: ellipsis;
}
.menuIcon {
line-height: 16px;
}
}
}
}
& > * {
padding: 0 5px;
border-right: 1px solid rgba($color: #fff, $alpha: 0.1);
&:last-child {
border: none;
} }
&>*{padding:0 5px; border-right: 1px solid rgba($color: #FFF, $alpha: 0.1);
&:last-child{border: none;}
} }
} }
} }
</style> </style>

13
ruoyi-ui/src/views/JiHeExpressway/components/InputSearch/index.vue

@ -133,11 +133,16 @@ export default {
this.width = this.$refs.ReferenceInputRef.getBoundingClientRect().width; this.width = this.$refs.ReferenceInputRef.getBoundingClientRect().width;
}, },
handleResetForm() { handleResetForm() {
this.visible = true;
this.$refs.FormConfigRef?.reset(); this.$refs.FormConfigRef?.reset();
this.$refs.FormConfigRef.$refs.ElFormRef.resetFields(); this.$refs.FormConfigRef.$refs.ElFormRef.resetFields();
this.$refs.PopoverRef.doClose(); // this.$refs.PopoverRef.doClose();
this.$emit("handleSearch", cloneDeep(this.$refs.FormConfigRef?.formData)); this.$emit(
"handleSearch",
cloneDeep(this.$refs.FormConfigRef?.formData),
"reset"
);
}, },
async handleSearch() { async handleSearch() {
if (this.types === "input") { if (this.types === "input") {
@ -156,12 +161,12 @@ export default {
} }
let resultParams = { ...result, ...params }; let resultParams = { ...result, ...params };
this.$emit("handleSearch", resultParams); this.$emit("handleSearch", resultParams, "search");
} else { } else {
this.$refs.FormConfigRef.validate() this.$refs.FormConfigRef.validate()
.then((result) => { .then((result) => {
this.$refs.PopoverRef.doClose(); this.$refs.PopoverRef.doClose();
this.$emit("handleSearch", result); this.$emit("handleSearch", result, "search");
}) })
.catch((err) => { .catch((err) => {
console.log("catch"); console.log("catch");

2
ruoyi-ui/src/views/JiHeExpressway/components/Pagination.vue

@ -85,7 +85,7 @@ export default {
} }
.el-pagination__jump { .el-pagination__jump {
margin-left: -6px; margin-left: 10px;
color: #fff; color: #fff;
font-size: 12px; font-size: 12px;

426
ruoyi-ui/src/views/JiHeExpressway/components/infoBoard/BoardInfoEditor.vue

@ -1,5 +1,11 @@
<template> <template>
<el-dialog :title="calcTitle" :visible.sync="dialogVisible" width="800px" append-to-body :close-on-click-modal="false"> <el-dialog
:title="calcTitle"
:visible.sync="dialogVisible"
width="800px"
append-to-body
:close-on-click-modal="false"
>
<!-- <div style="color:#fff"> <!-- <div style="color:#fff">
<p>类型:{{type}} 增删改类型:{{mode}}</p> <p>类型:{{type}} 增删改类型:{{mode}}</p>
<p>模板id:{{ tpl }}</p> <p>模板id:{{ tpl }}</p>
@ -9,15 +15,38 @@
<div class="dialogCloseButton"></div> <div class="dialogCloseButton"></div>
</div> </div>
<el-card> <el-card>
<BoardTplPreview style="width: 100%;" :boardWH="screenSize" :tpl="dataForm"></BoardTplPreview> <BoardTplPreview
style="width: 100%"
:boardWH="screenSize"
:tpl="dataForm"
></BoardTplPreview>
</el-card> </el-card>
<el-card> <el-card>
<el-form :model="dataForm" :rules="dataRule" label-width="110px" ref="dataForm" size="mini"> <el-form
:model="dataForm"
:rules="dataRule"
label-width="110px"
ref="dataForm"
size="mini"
>
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="所属类别" v-if="type == 'template' && mode!='toDevice'" prop="category"> <el-form-item
<el-select v-model="dataForm.category" placeholder="请选择所属类别" size="mini"> label="所属类别"
<el-option v-for="item in templateCategoryList" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"> v-if="type == 'template' && mode != 'toDevice'"
prop="category"
>
<el-select
v-model="dataForm.category"
placeholder="请选择所属类别"
size="mini"
>
<el-option
v-for="item in templateCategoryList"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -33,16 +62,33 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="24" style="display: flex; flex-wrap: wrap;width:100%"> <el-row
:gutter="24"
style="display: flex; flex-wrap: wrap; width: 100%"
>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="详细内容" prop="content"> <el-form-item label="详细内容" prop="content">
<el-input type="textarea" :rows="6" placeholder="详细内容" v-model="dataForm.content"></el-input> <el-input
type="textarea"
:rows="6"
placeholder="详细内容"
v-model="dataForm.content"
></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="字体颜色"> <el-form-item label="字体颜色">
<el-select v-model="dataForm.fontColor" filterable placeholder="请选择"> <el-select
<el-option v-for="item in colorList" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"> v-model="dataForm.fontColor"
filterable
placeholder="请选择"
>
<el-option
v-for="item in colorList"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -50,7 +96,12 @@
<el-col :span="8"> <el-col :span="8">
<el-form-item label="字体大小"> <el-form-item label="字体大小">
<el-select v-model="dataForm.fontSize" style="width: 100%"> <el-select v-model="dataForm.fontSize" style="width: 100%">
<el-option v-for="item in fontSizeList" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"> <el-option
v-for="item in fontSizeList"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -58,7 +109,12 @@
<el-col :span="8"> <el-col :span="8">
<el-form-item label="字体类型"> <el-form-item label="字体类型">
<el-select v-model="dataForm.fontType" placeholder="请选择"> <el-select v-model="dataForm.fontType" placeholder="请选择">
<el-option v-for="item in fontTypeList" :key="item.dictLabel" :label="item.dictLabel" :value="item.dictValue"> <el-option
v-for="item in fontTypeList"
:key="item.dictLabel"
:label="item.dictLabel"
:value="item.dictValue"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -72,7 +128,12 @@
<el-col :span="8"> <el-col :span="8">
<el-form-item label="入屏方式"> <el-form-item label="入屏方式">
<el-select v-model="dataForm.inScreenMode" placeholder="请选择"> <el-select v-model="dataForm.inScreenMode" placeholder="请选择">
<el-option v-for="item in inScreenModeList" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"> <el-option
v-for="item in inScreenModeList"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -80,7 +141,12 @@
<el-col :span="8"> <el-col :span="8">
<el-form-item label="屏幕尺寸"> <el-form-item label="屏幕尺寸">
<el-select v-model="screenSize" placeholder="请选择" disabled> <el-select v-model="screenSize" placeholder="请选择" disabled>
<el-option v-for="item in screenSizeOptions" :key="item.device_pixel" :label="item.device_pixel" :value="item.device_pixel"> <el-option
v-for="item in screenSizeOptions"
:key="item.device_pixel"
:label="item.device_pixel"
:value="item.device_pixel"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -90,55 +156,73 @@
</el-card> </el-card>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="onSubmit('dataForm')" v-loading="loading" style="background-color: #10aac2;color:#fff;">确认</el-button> <el-button style="background-color: #0e708b; color: #fff" @click="onClose"
<el-button style="background-color:#b5b5b6;color:#fff" @click="onClose">取消</el-button> >取消</el-button
>
<el-button
@click="onSubmit('dataForm')"
v-loading="loading"
style="background-color: #10aac2; color: #fff"
>确认</el-button
>
</div> </div>
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import { getTemplateList, addTemplate, addTemplateContent, editTemplateContent, editTemplate, deleteTemplate, getTemplateContent, getGalleryList, getFontSizeByDevicePixel, uploadBoardEditInfo } from '@/api/board/template' import {
import { devicessize } from '@/api/information/api.js' getTemplateList,
import { checkIotBoardContent } from '@/api/board/vocabulary' addTemplate,
import BoardPreview from "@screen/components/infoBoard/BoardPreview.vue" addTemplateContent,
import BoardTplPreview from "@screen/components/infoBoard/BoardTplPreview.vue" editTemplateContent,
import infoBoardUtils from "@screen/utils/infoBoard.js" editTemplate,
import { checkBoardContent } from '@/api/board/board' deleteTemplate,
import { debounce } from 'lodash' getTemplateContent,
getGalleryList,
getFontSizeByDevicePixel,
uploadBoardEditInfo,
} from "@/api/board/template";
import { devicessize } from "@/api/information/api.js";
import { checkIotBoardContent } from "@/api/board/vocabulary";
import BoardPreview from "@screen/components/infoBoard/BoardPreview.vue";
import BoardTplPreview from "@screen/components/infoBoard/BoardTplPreview.vue";
import infoBoardUtils from "@screen/utils/infoBoard.js";
import { checkBoardContent } from "@/api/board/board";
import { debounce } from "lodash";
export default { export default {
data() { data() {
return { return {
alignmentNum: 2, alignmentNum: 2,
content: '', content: "",
boardWidth: '', boardWidth: "",
boardHeight: '', boardHeight: "",
checkList: [], // checkList: [], //
obj: '', obj: "",
imgUrl: [], imgUrl: [],
imgUrlOther: [], imgUrlOther: [],
dialogVisible: false, dialogVisible: false,
fileList: [ fileList: [
{ {
name: 'food.jpeg', name: "food.jpeg",
url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100' url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
}, },
{ {
name: 'food2.jpeg', name: "food2.jpeg",
url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100' url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
} },
], ],
listquery: [], // listquery: [], //
curDragImgItem: '', curDragImgItem: "",
startTxt_x: '000', startTxt_x: "000",
startTxt_y: '000', startTxt_y: "000",
width: '400', width: "400",
height: '40', height: "40",
// content: "", // content: "",
fontSize: '24', fontSize: "24",
fontType: 'KaiTi', fontType: "KaiTi",
fontSpacing: 0, fontSpacing: 0,
coordinate: '000000', coordinate: "000000",
url: '', url: "",
previewContent: '', // previewContent: "", //
ispreviewContent: -1, ispreviewContent: -1,
dataForm: { dataForm: {
category: "", category: "",
@ -149,7 +233,7 @@ export default {
fontType: "", fontType: "",
stopTime: "", stopTime: "",
inScreenMode: "", inScreenMode: "",
screenSize:"" screenSize: "",
}, },
templateContent: [], templateContent: [],
templateDelContent: [], templateDelContent: [],
@ -157,119 +241,124 @@ export default {
content: [ content: [
{ {
required: true, required: true,
message: '请输入详细内容', message: "请输入详细内容",
trigger: 'blur' trigger: "blur",
} },
], ],
category: [ category: [
{ {
required: true, required: true,
message: '请选择类别', message: "请选择类别",
trigger: 'blur' trigger: "blur",
} },
] ],
}, },
screenSizeOptions: [], screenSizeOptions: [],
colorList: [], colorList: [],
isCurrencyOptions: [ isCurrencyOptions: [
{ {
code: '0', code: "0",
content: '通用' content: "通用",
}, },
{ {
code: '1', code: "1",
content: '仅为智能推荐模板' content: "仅为智能推荐模板",
} },
], ],
inScreenModeList: [], inScreenModeList: [],
imgSize: [ imgSize: [
{ {
type: '1024*128', type: "1024*128",
name: '全屏' name: "全屏",
}, },
{ {
type: '', type: "",
name: '正常' name: "正常",
} },
], ],
fontSizeList: [], fontSizeList: [],
title: '选择图片', title: "选择图片",
loading: false, loading: false,
isAdd: false, isAdd: false,
templateCategoryList: [], templateCategoryList: [],
infoType: '', infoType: "",
devicePixelBoolean: false, devicePixelBoolean: false,
categoryRules: false, categoryRules: false,
deviceCttDefault: { deviceCttDefault: {
"residenceTime": "50", residenceTime: "50",
"intonation": "0", intonation: "0",
"fontSpacing": "1", fontSpacing: "1",
"screenEntryMethod": "1", screenEntryMethod: "1",
"screenOutputMethod": "1", screenOutputMethod: "1",
"lineSpacing": "0", lineSpacing: "0",
"yCoordinate": "0", yCoordinate: "0",
"whetherToSynchronizePlayback": "0", whetherToSynchronizePlayback: "0",
"whetherToPlayText": "0", whetherToPlayText: "0",
"playbackCount": "1", playbackCount: "1",
"flashingFrequency": "5", flashingFrequency: "5",
"backgroundColor": "8", backgroundColor: "8",
"foregroundColor": "FFFF00", foregroundColor: "FFFF00",
"textContent": "", textContent: "",
"fontStyle": "0", fontStyle: "0",
"displayAreaWidth": "768", displayAreaWidth: "768",
"playbackDuration": "50", playbackDuration: "50",
"displayAreaHeight": "64", displayAreaHeight: "64",
"volume": "0", volume: "0",
"xCoordinate": "0", xCoordinate: "0",
"screenEntrySpeed": "1", screenEntrySpeed: "1",
"horizontalAlignment": "2", horizontalAlignment: "2",
"playSpecialEffects": "0", playSpecialEffects: "0",
"setUpTheSpeaker": "0", setUpTheSpeaker: "0",
"flickerSpeed": "0", flickerSpeed: "0",
"specialEffectsSpeed": "1", specialEffectsSpeed: "1",
"fontSize": "20", fontSize: "20",
"verticalAlignment": "2", verticalAlignment: "2",
"speechSpeed": "0", speechSpeed: "0",
"font": "3" font: "3",
}, },
isLocked: false, isLocked: false,
} };
}, },
props: { props: {
mode:{ //add edit mode: {
//add edit
type: String, type: String,
default:"" default: "",
}, },
type: { //template board type: {
//template board
type: String, type: String,
default: "" default: "",
}, },
visible: { visible: {
type: Boolean, type: Boolean,
default:false default: false,
}, },
screenSize: { screenSize: {
type: String, type: String,
default:"" default: "",
}, },
tpl: { tpl: {
type: Object, type: Object,
default:()=>{} default: () => {},
} },
}, },
components: { components: {
BoardPreview, BoardTplPreview BoardPreview,
BoardTplPreview,
}, },
computed: { computed: {
calcTitle() { calcTitle() {
let str = ''; let str = "";
if (this.mode == "toDevice") { if (this.mode == "toDevice") {
str = `从模板添加设备信息`; str = `从模板添加设备信息`;
} else { } else {
str = `${this.mode == 'add' ? '新增' : '编辑'}${this.type == 'template' ? '信息模板' : '设备信息'}` str = `${this.mode == "add" ? "新增" : "编辑"}${
this.type == "template" ? "信息模板" : "设备信息"
}`;
} }
return str; return str;
} },
}, },
watch: { watch: {
visible: { visible: {
@ -282,7 +371,7 @@ export default {
// this.initData(); // this.initData();
// } // }
}, },
immediate:true immediate: true,
}, },
dialogVisible(newV) { dialogVisible(newV) {
this.$emit("update:visible", newV); this.$emit("update:visible", newV);
@ -291,49 +380,51 @@ export default {
handler(newV) { handler(newV) {
// { "id": 3, "category": "0", "content": "", "screenSize": "768*64", "fontColor": "FFFF00", "fontSize": "64", "fontType": "2", "fontSpacing": "0", "rollingSpeed": null, "stopTime": "50", "inScreenMode": "1", "formatStyle": "2", "remark": null, "createTime": "2024-01-06 10:40:19", "updateTime": "2024-01-06 11:04:53" } // { "id": 3, "category": "0", "content": "", "screenSize": "768*64", "fontColor": "FFFF00", "fontSize": "64", "fontType": "2", "fontSpacing": "0", "rollingSpeed": null, "stopTime": "50", "inScreenMode": "1", "formatStyle": "2", "remark": null, "createTime": "2024-01-06 10:40:19", "updateTime": "2024-01-06 11:04:53" }
if(newV && Object.keys(newV).length>0){ // if (newV && Object.keys(newV).length > 0) {
//
this.initData(); this.initData();
} }
}, },
deep:true deep: true,
}, },
"mode": { mode: {
handler(newV) { handler(newV) {
this.initData(); this.initData();
}
}, },
"type": { },
type: {
handler(newV) { handler(newV) {
this.initData(); this.initData();
}
}
}, },
mounted() {
}, },
},
mounted() {},
created() { created() {
this.getDicts('iot_devices_font_color').then(res => { this.getDicts("iot_devices_font_color").then((res) => {
this.colorList = res.data; this.colorList = res.data;
// console.log(this.colorList, ""); // console.log(this.colorList, "");
}) });
this.getDicts('iot_device_font_inScreen_mode').then(res => { this.getDicts("iot_device_font_inScreen_mode").then((res) => {
this.inScreenModeList = res.data this.inScreenModeList = res.data;
// console.log(this.inScreenModeList, ""); // console.log(this.inScreenModeList, "");
}) });
this.getDicts('iot_template_category').then(res => { this.getDicts("iot_template_category").then((res) => {
this.templateCategoryList = res.data; this.templateCategoryList = res.data;
}) });
this.getDicts('iot_device_font_size').then(res => { this.getDicts("iot_device_font_size").then((res) => {
this.fontSizeList = res.data; this.fontSizeList = res.data;
// this.dataForm.FONT_SIZE = res.data[1].dictValue // this.dataForm.FONT_SIZE = res.data[1].dictValue
}) });
}, },
methods: { methods: {
initData() { initData() {
if (this.isLocked) { if (this.isLocked) {
return return;
} }
this.isLocked = true; this.isLocked = true;
setTimeout(()=>{this.isLocked = false}, 100); setTimeout(() => {
this.isLocked = false;
}, 100);
// getTemplateList({id:this.tpl.id}).then(res=>{ // getTemplateList({id:this.tpl.id}).then(res=>{
// console.log(res.data , "++++++++==========="); // console.log(res.data , "++++++++===========");
@ -351,15 +442,23 @@ export default {
fontType: this.fontTypeList[0].dictValue, fontType: this.fontTypeList[0].dictValue,
stopTime: 50, stopTime: 50,
inScreenMode: this.inScreenModeList[0].dictValue, inScreenMode: this.inScreenModeList[0].dictValue,
screenSize: this.screenSize screenSize: this.screenSize,
} };
} } else {
else {
tempTpl = _.merge({}, this.deviceCttDefault, this.tpl.origin); // tempTpl = _.merge({}, this.deviceCttDefault, this.tpl.origin); //
} }
this.dataForm = infoBoardUtils.dialogSourceFormat(tempTpl, this.type, this.mode); this.dataForm = infoBoardUtils.dialogSourceFormat(
tempTpl,
this.type,
this.mode
);
} else { } else {
this.dataForm = infoBoardUtils.dialogSourceFormat(this.tpl, this.type, this.mode, this.deviceCttDefault); this.dataForm = infoBoardUtils.dialogSourceFormat(
this.tpl,
this.type,
this.mode,
this.deviceCttDefault
);
} }
if (this.visible == false && this.mode == "toDevice") { if (this.visible == false && this.mode == "toDevice") {
this.onSubmit(); this.onSubmit();
@ -370,7 +469,6 @@ export default {
}, },
// //
async onSubmit(formName) { async onSubmit(formName) {
// this.$refs[formName].validate((valid) => { // this.$refs[formName].validate((valid) => {
// if (valid) { // if (valid) {
@ -380,68 +478,76 @@ export default {
// } // }
// }); // });
if (this.type == "template" && this.dataForm.category == undefined) { if (this.type == "template" && this.dataForm.category == undefined) {
return this.$modal.msgError('请选择分类!') return this.$modal.msgError("请选择分类!");
} }
if (!this.dataForm.content.trim()) { if (!this.dataForm.content.trim()) {
return this.$modal.msgError('当前输入内容为空') return this.$modal.msgError("当前输入内容为空");
} }
if (this.dataForm.content.indexOf('\\')>=0) { if (this.dataForm.content.indexOf("\\") >= 0) {
return this.$modal.msgError("内容不能含有特殊字符'\\\\'") return this.$modal.msgError("内容不能含有特殊字符'\\\\'");
} }
let ctt = this.dataForm.content; let ctt = this.dataForm.content;
checkBoardContent(ctt).then(res => { checkBoardContent(ctt).then((res) => {
if (res.code == 200) { if (res.code == 200) {
doNext(); doNext();
} else { } else {
this.$message({ this.$message({
type: 'danger', type: "danger",
message: res.msg message: res.msg,
}); });
return; return;
} }
}) });
let doNext = () => { let doNext = () => {
let data = infoBoardUtils.dialogSaveFormat(
this.dataForm,
this.type,
this.mode
);
let data = infoBoardUtils.dialogSaveFormat(this.dataForm, this.type, this.mode); this.loading = true;
this.loading = true
// let templateId = ""; // let templateId = "";
if (this.type == "template") { if (this.type == "template") {
if(this.mode=='edit'){ if (this.mode == "edit") {
editTemplate(data).then(res=>{ editTemplate(data).then((res) => {
afterSave("修改"); afterSave("修改");
}); });
} else if (this.mode == "toDevice") { } else if (this.mode == "toDevice") {
this.loading = false this.loading = false;
this.$emit("afterSubmit", { type: this.type, mode: this.mode, data: data }); this.$emit("afterSubmit", {
type: this.type,
mode: this.mode,
data: data,
});
} else { } else {
addTemplate(data).then(res => { addTemplate(data).then((res) => {
afterSave("新增"); afterSave("新增");
}); });
} }
} else { } else {
this.loading = false this.loading = false;
// this.dialogVisible = false // this.dialogVisible = false
this.$emit("afterSubmit", { type: this.type, mode: this.mode, data:data }); this.$emit("afterSubmit", {
type: this.type,
mode: this.mode,
data: data,
});
} }
const afterSave = (para) => { const afterSave = (para) => {
this.$message.success(para + '成功!') this.$message.success(para + "成功!");
this.loading = false this.loading = false;
// this.dialogVisible = false // this.dialogVisible = false
this.$emit("afterSubmit", { type: this.type, mode: this.mode }); this.$emit("afterSubmit", { type: this.type, mode: this.mode });
} };
};
}
}, },
} },
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.infoBoardButton { .infoBoardButton {

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

@ -1,12 +1,12 @@
<template> <template>
<Adaptation class="pageBox"> <div class="pageBox">
<HeaderMenu @onChange="handleChange" class="header" /> <HeaderMenu @onChange="handleChange" class="header" :style="headerStyle"/>
<div class="content"> <Adaptation class="content" :headerHeight="headerHeight">
<Transition name="fade"> <Transition name="fade">
<router-view v-if="isShowContent" /> <router-view v-if="isShowContent" />
</Transition> </Transition>
</div>
</Adaptation> </Adaptation>
</div>
</template> </template>
<script> <script>
@ -19,14 +19,29 @@ export default {
name: "ji_ze_gao_su", name: "ji_ze_gao_su",
components: { components: {
HeaderMenu, HeaderMenu,
Adaptation, Adaptation
// ...modules // ...modules
}, },
data() { data() {
return { return {
isShowContent:false isShowContent:false,
headerHeight:68,
header: {
scale: 1,
originW: 1920,
originH: 68
},
}; };
}, },
computed:{
headerStyle(){
return {
width : `${this.header.originW}px`,
height : `${this.header.originH}px`,
transform : `scale(${this.header.scale}, ${this.header.scale})`
}
}
},
mounted(){ mounted(){
getBoardBaseData().then(res => { getBoardBaseData().then(res => {
this.isShowContent = true; this.isShowContent = true;
@ -34,8 +49,18 @@ export default {
// Promise.all()getBoardBaseData().then(()=>{ // Promise.all()getBoardBaseData().then(()=>{
// this.isShowContent = true ; // this.isShowContent = true ;
// }); // });
window.addEventListener(
"resize",
_.debounce(this.calcHeaderScale.bind(this), 360)
);
this.calcHeaderScale();
}, },
methods: { methods: {
calcHeaderScale(){
let winW = window.innerWidth;
this.header.scale = winW / this.header.originW;
this.headerHeight = this.header.scale * this.header.originH;
},
handleChange(activeMenu) { handleChange(activeMenu) {
this.$route.path != activeMenu.path && this.$router.push(activeMenu.path); this.$route.path != activeMenu.path && this.$router.push(activeMenu.path);
} }
@ -66,15 +91,14 @@ export default {
} }
.header { .header {
height: 68px; position: fixed;
transform-origin: left top;
left: 0; top:0; z-index: 1000;
} }
.content { .content {
flex: 1;
height: 0;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
position: relative;
pointer-events: none; pointer-events: none;
::v-deep { ::v-deep {

133
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/InfoBoard/index.vue

@ -6,22 +6,49 @@
<div class="mainDialog"> <div class="mainDialog">
<div class="dialog_head"> <div class="dialog_head">
<div class="tit">{{ selectedDevice.deviceName }}</div> <div class="tit">{{ selectedDevice.deviceName }}</div>
<img class="btnCls" src="@/assets/jihe/images/dialog/ibCls.png" alt="" @click="____onClose" /> <img
<img class="deco" src="@/assets/jihe/images/dialog/ibHeadDeco.png" alt="" /> class="btnCls"
src="@/assets/jihe/images/dialog/ibCls.png"
alt=""
@click="____onClose"
/>
<img
class="deco"
src="@/assets/jihe/images/dialog/ibHeadDeco.png"
alt=""
/>
</div> </div>
<div class="dialogContent"> <div class="dialogContent">
<div v-if="selectedBdMsg.length > 0" class="dialogContent_box" style="height: 100%"> <div
v-if="selectedBdMsg.length > 0"
class="dialogContent_box"
style="height: 100%"
>
<vuescroll :ops="scrollOptions" class="listBox"> <vuescroll :ops="scrollOptions" class="listBox">
<div v-for="(itm, indx) in selectedBdMsg" :key="indx" class="tplItem"> <div
v-for="(itm, indx) in selectedBdMsg"
:key="indx"
class="tplItem"
>
<!-- 模板内容 --> <!-- 模板内容 -->
<BoardPreview class="boardPreview" :boardWH="selectedSize" :tpl="itm"></BoardPreview> <BoardPreview
class="boardPreview"
:boardWH="selectedSize"
:tpl="itm"
></BoardPreview>
<!-- 操作按钮 --> <!-- 操作按钮 -->
<div class="infoBtnBox"> <div class="infoBtnBox">
<el-tooltip content="编辑" placement="top"> <el-tooltip content="编辑" placement="top">
<p @click="____onEditBoardItem(itm, indx)" class="btn btnEdit"></p> <p
@click="____onEditBoardItem(itm, indx)"
class="btn btnEdit"
></p>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<p @click="____onDeleteBoardItem(indx)" class="btn btnDelete"></p> <p
@click="____onDeleteBoardItem(indx)"
class="btn btnDelete"
></p>
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>
@ -61,30 +88,62 @@
</div> --> </div> -->
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="设备参数" name="second">设备参数</el-tab-pane> <el-tab-pane label="设备参数" name="second"
<el-tab-pane label="在线率统计" name="third">在线率统计</el-tab-pane> >设备参数</el-tab-pane
>
<el-tab-pane label="在线率统计" name="third"
>在线率统计</el-tab-pane
>
</el-tabs> </el-tabs>
</div> </div>
<div class="dialogContent_bottom_btn"> <div class="dialogContent_bottom_btn">
<el-button class="btnInfoBoard" type="add" @click.native="____onAddDeviceItem()">添加信息</el-button> <el-button
<el-button class="btnInfoBoard" type="publish" @click="____publishInfo" class="btnInfoBoard"
:disabled="selectedBdMsg.length <= 0 || selectedDevice.iotDeviceId === null || selectedDevice.iotDeviceId === undefined">发布信息</el-button> type="add"
@click.native="____onAddDeviceItem()"
>添加信息</el-button
>
<el-button
class="btnInfoBoard"
type="publish"
@click="____publishInfo"
:disabled="
selectedBdMsg.length <= 0 ||
selectedDevice.iotDeviceId === null ||
selectedDevice.iotDeviceId === undefined
"
>发布信息</el-button
>
</div> </div>
<div class="sideSwitch" @click="____onShowTemplate"> <div class="sideSwitch" @click="____onShowTemplate">
<img class="img" src="@/assets/screen/xtb/leftd.png" alt="" :style="{ <img
class="img"
src="@/assets/screen/xtb/leftd.png"
alt=""
:style="{
transform: isShowTemplate transform: isShowTemplate
? 'rotate(0deg)' ? 'rotate(0deg)'
: 'rotate(180deg)', : 'rotate(180deg)',
}" /> }"
/>
<div class="txt">信息模板</div> <div class="txt">信息模板</div>
</div> </div>
<!-- 附近的摄像机 --> <!-- 附近的摄像机 -->
<div class="sideSwitch" style="top: 36%" @click="____onShowCameraShower"> <div
<img class="img" src="@/assets/screen/xtb/leftd.png" alt="" :style="{ class="sideSwitch"
style="top: 36%"
@click="____onShowCameraShower"
>
<img
class="img"
src="@/assets/screen/xtb/leftd.png"
alt=""
:style="{
transform: dialogInfoCamera transform: dialogInfoCamera
? 'rotate(0deg)' ? 'rotate(0deg)'
: 'rotate(180deg)', : 'rotate(180deg)',
}" /> }"
/>
<div class="txt">附近相机</div> <div class="txt">附近相机</div>
</div> </div>
</div> </div>
@ -93,12 +152,23 @@
<!-- 信息模板 --> <!-- 信息模板 -->
<div v-if="isShowTemplate" class="sideContent template"> <div v-if="isShowTemplate" class="sideContent template">
<vuescroll :ops="scrollOptions" class="listBox"> <vuescroll :ops="scrollOptions" class="listBox">
<div v-for="(item, index) in templateAvailable" :key="item.dictValue"> <div
v-for="(item, index) in templateAvailable"
:key="item.dictValue"
>
<!-- 原来是<el-collapse v-model="activeNames"> --> <!-- 原来是<el-collapse v-model="activeNames"> -->
<h3>{{ item.dictLabel }}</h3> <h3>{{ item.dictLabel }}</h3>
<div v-for="(itm, indx) in item.list" :key="indx" class="tplItem"> <div
v-for="(itm, indx) in item.list"
:key="indx"
class="tplItem"
>
<!-- 模板内容 --> <!-- 模板内容 -->
<BoardTplPreview class="boardPreview" :boardWH="selectedSize" :tpl="itm"></BoardTplPreview> <BoardTplPreview
class="boardPreview"
:boardWH="selectedSize"
:tpl="itm"
></BoardTplPreview>
<!-- <div class="infoPreview"> <!-- <div class="infoPreview">
<div class="infoBox" :style="____boardBgStyle"> <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> <span class="infoTxt" :style="____boardTxtStyle(itm)" v-html="itm.content.replace(/\n|\r\n/g, '<br>').replace(/ /g, '&nbsp')"></span>
@ -107,7 +177,10 @@
<!-- 操作按钮 --> <!-- 操作按钮 -->
<div class="infoBtnBox infoBtnBoxSm"> <div class="infoBtnBox infoBtnBoxSm">
<el-tooltip content="加入待下发信息" placement="top"> <el-tooltip content="加入待下发信息" placement="top">
<p @click="____onTplToDevice(itm, false)" class="btn btnApply"></p> <p
@click="____onTplToDevice(itm, false)"
class="btn btnApply"
></p>
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>
@ -116,13 +189,23 @@
</div> </div>
<!-- 附近相机 --> <!-- 附近相机 -->
<CameraShower class="sideContent camera" :visible.sync="dialogInfoCamera" :list="nearbyCameraList"> <CameraShower
class="sideContent camera"
:visible.sync="dialogInfoCamera"
:list="nearbyCameraList"
>
</CameraShower> </CameraShower>
</div> </div>
</transition> </transition>
<BoardInfoEditor @afterSubmit="____onEditSubmit" :mode="editDialog.mode" :type="editDialog.type" <BoardInfoEditor
:visible.sync="editDialog.visible" :screenSize="selectedSize" :tpl="editDialog.tpl"></BoardInfoEditor> @afterSubmit="____onEditSubmit"
:mode="editDialog.mode"
:type="editDialog.type"
:visible.sync="editDialog.visible"
:screenSize="selectedSize"
:tpl="editDialog.tpl"
></BoardInfoEditor>
</div> </div>
</Teleport> </Teleport>
</template> </template>
@ -317,7 +400,7 @@ export default {
____onDeleteBoardItem(index) { ____onDeleteBoardItem(index) {
if (index > -1) { if (index > -1) {
this.selectedBdMsg.splice(index, 1); this.selectedBdMsg.splice(index, 1);
this.$message.success("删除成功"); this.$message.success("删除成功");
} }
}, },
// //

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

@ -12,7 +12,7 @@
<!-- 分页 --> <!-- 分页 -->
<div class="footer"> <div class="footer">
<Pagination :total="total" :current-page.sync="currentPage" :page-size="30" :page-sizes="[30, 60, 90]" <Pagination :total="total" :current-page.sync="currentPage" :page-size="30" :page-sizes="[30, 60, 90]"
@size-change="handleSizeChange" @current-change="handleCurrentChange" /> @size-change="handleSizeChange" @current-change="handleCurrentChange" layout="total, sizes, prev, pager, next"/>
</div> </div>
</div> </div>
</template> </template>

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

@ -4,7 +4,7 @@
<Form :formList="formList" :dFormData="formData" label-width="100px" /> <Form :formList="formList" :dFormData="formData" label-width="100px" />
<div class="video"> <div class="video">
<Video style="height: 100%;" /> <Video style="height: 100%; width: 600px;" />
</div> </div>
<div class="pic"> <div class="pic">
<Carousel style="flex: 1;height: 80%;" /> <Carousel style="flex: 1;height: 80%;" />

4
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue

@ -4,8 +4,8 @@
<Form :formList="formList" :dFormData="formData" label-width="100px" /> <Form :formList="formList" :dFormData="formData" label-width="100px" />
<div class="video-pic"> <div class="video-pic">
<Video style="height: 100%;" :showHeader="activeName != '-1'" /> <Video style="height: 100%; width: 380px;" :showHeader="activeName != '-1'" />
<Video v-if="activeName != '-1'" style="height: 100%;" /> <Video v-if="activeName != '-1'" style="height: 100%; width: 380px;" />
<Carousel v-else style="flex: 1" :pictures="formData.pictures" /> <Carousel v-else style="flex: 1" :pictures="formData.pictures" />
</div> </div>

3
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/PresetFormItems.js

@ -262,9 +262,10 @@ export const laneOccupancy = {
export const eventSources = { export const eventSources = {
label: "事件源:", label: "事件源:",
key: "eventSources", key: "eventSource",
type: "select", type: "select",
options: { options: {
clearable: true,
options: [ options: [
{ {
key: "1", key: "1",

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

@ -173,6 +173,9 @@ export default {
// eventType: Number(this.index) + 1, // eventType: Number(this.index) + 1,
// stakeMark: (stakeMark && stakeMark[0] != null) ? ((stakeMark && stakeMark.length > 0) ? ('K' + stakeMark[0] + '+' + stakeMark[1]) : '') : '', // stakeMark: (stakeMark && stakeMark[0] != null) ? ((stakeMark && stakeMark.length > 0) ? ('K' + stakeMark[0] + '+' + stakeMark[1]) : '') : '',
// }) // })
// this.modelVisible = false;
// this.submitting = false;
// this.$emit('queryData',true)
// return; // return;
request({ request({
@ -181,6 +184,7 @@ export default {
data: { data: {
...formData, ...formData,
eventType: Number(this.index) + 1, eventType: Number(this.index) + 1,
eventState: 0,
stakeMark: (stakeMark && stakeMark[0] != null) ? ((stakeMark && stakeMark.length > 0) ? ('K' + stakeMark[0] + '+' + stakeMark[1]) : '') : '', stakeMark: (stakeMark && stakeMark[0] != null) ? ((stakeMark && stakeMark.length > 0) ? ('K' + stakeMark[0] + '+' + stakeMark[1]) : '') : '',
} }
}).then((result) => { }).then((result) => {
@ -191,6 +195,7 @@ export default {
Message.error("提交失败"); Message.error("提交失败");
}).finally(() => { }).finally(() => {
this.submitting = false; this.submitting = false;
this.$emit('queryData',true);
}) })
}) })

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

@ -58,6 +58,7 @@ export const gjSearchFormList = [
key: "warningSource", key: "warningSource",
type: "select", type: "select",
options: { options: {
clearable: true,
options: [ options: [
{ {
key: "1", key: "1",
@ -98,11 +99,11 @@ export const gjSearchFormList = [
options: [ options: [
{ {
key: "1", key: "1",
label: "上行", label: "菏泽方向",
}, },
{ {
key: "3", key: "3",
label: "下行", label: "济南方向",
}, },
], ],
}, },
@ -113,6 +114,7 @@ export const gjSearchFormList = [
required: false, required: false,
type: "datePicker", type: "datePicker",
options: { options: {
style: 'width: 250px',
type: "datetimerange", type: "datetimerange",
format: "yyyy-MM-dd HH:mm:ss", format: "yyyy-MM-dd HH:mm:ss",
valueFormat: "yyyy-MM-dd HH:mm:ss", valueFormat: "yyyy-MM-dd HH:mm:ss",
@ -123,25 +125,16 @@ export const gjSearchFormList = [
label: "桩号:", label: "桩号:",
required: false, required: false,
}, },
// merge(cloneDeep(PresetFormItems.station), {
// options: {
// options: [
// {
// key: "endStakeMark[0]",
// },
// {
// key: "endStakeMark[1]",
// },
// ],
// },
// label: "结束桩号:",
// required: false,
// }),
]; ];
export const gzSearchFormList = [ export const gzSearchFormList = [
PresetFormItems.eventSources, PresetFormItems.eventSources,
PresetFormItems.eventType, merge(PresetFormItems.eventType, {
options: {
clearable: true,
},
}),
// PresetFormItems.eventType,
{ {
label: "方向:", label: "方向:",
key: "direction", key: "direction",

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

@ -5,7 +5,7 @@
<!-- 搜索栏 --> <!-- 搜索栏 -->
<div class="filter"> <div class="filter">
<div> <div>
<ButtonGradient @click="onAddNew" v-if="activeName != '1' && activeName != '2'"> <ButtonGradient @click="onAddNew" v-if="activeName == '0'">
<template #prefix> <template #prefix>
<img src="./images/insert.svg" /> <img src="./images/insert.svg" />
</template> </template>
@ -43,9 +43,10 @@
</div> </div>
<!-- "详情"弹出框 --> <!-- "详情"弹出框 -->
<EventDetailDialog :visible="eventDetailDialogVisible" :formData="detailDialogFormData" :activeName="activeName" @update:value="handleClose" @queryData="queryData"/> <EventDetailDialog :visible="eventDetailDialogVisible" :formData="detailDialogFormData" :activeName="activeName"
@update:value="handleClose" @queryData="queryData" />
<!-- "新增"弹出框 --> <!-- "新增"弹出框 -->
<FormEvent :visible="isShowAddNew" @close="onCloseAddNew" /> <FormEvent :visible="isShowAddNew" @close="onCloseAddNew" @queryData="queryData" />
</div> </div>
</template> </template>
@ -84,11 +85,6 @@ const warningSourceMapping = {
6: '非机预警', 6: '非机预警',
7: '气象监测器' 7: '气象监测器'
} }
const directionMapping = {
'1': '上行',
'2': '中',
'3': '下行'
}
const gzDirectionMapping = { const gzDirectionMapping = {
'1': '菏泽方向', '1': '菏泽方向',
'2': '双向', '2': '双向',
@ -195,7 +191,7 @@ export default {
if (result.code != 200) return Message.error(result?.msg); if (result.code != 200) return Message.error(result?.msg);
result.rows.forEach(it => { result.rows.forEach(it => {
it.stringEventSource = it?.warningSource ? warningSourceMapping[it?.warningSource] : ''; it.stringEventSource = it?.warningSource ? warningSourceMapping[it?.warningSource] : '';
it.stringDirection = directionMapping[it.direction] || it.direction; it.stringDirection = gzDirectionMapping[it.direction] || it.direction;
it.startTime = it.warningTime; it.startTime = it.warningTime;
if (it.otherConfig) { if (it.otherConfig) {
@ -309,7 +305,7 @@ export default {
let data = result.data; let data = result.data;
data.stringEventSource = data?.warningSource ? warningSourceMapping[data.warningSource] : ''; data.stringEventSource = data?.warningSource ? warningSourceMapping[data.warningSource] : '';
data.direction = directionMapping[data.direction] || data.direction; data.direction = gzDirectionMapping[data.direction] || data.direction;
data.startTime = data.warningTime; data.startTime = data.warningTime;
data.stringEventState = warningStateMapping[data.warningState]; data.stringEventState = warningStateMapping[data.warningState];
data.stringEventType = warningTypeMapping[data.warningType]; data.stringEventType = warningTypeMapping[data.warningType];
@ -330,7 +326,7 @@ export default {
}).then((result) => { }).then((result) => {
if (result.code != 200) return Message.error(result?.msg); if (result.code != 200) return Message.error(result?.msg);
let data = result.data; let data = result.data;
data.stringDirection = directionMapping[data.direction] || data.direction; data.stringDirection = gzDirectionMapping[data.direction] || data.direction;
this.detailDialogFormData = data; this.detailDialogFormData = data;
@ -358,7 +354,7 @@ export default {
this.searchData = { this.searchData = {
...this.searchData, ...this.searchData,
eventType: data.eventType, eventType: data.eventType,
eventSources: data.eventSources, eventSource: data.eventSource,
warningSource: data?.warningSource || '', warningSource: data?.warningSource || '',
direction: data.direction, direction: data.direction,
startTime: daterange && daterange.length > 0 ? daterange[0] : "", startTime: daterange && daterange.length > 0 ? daterange[0] : "",

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

@ -314,6 +314,7 @@ export default {
multiple: true, multiple: true,
options: [], options: [],
}, },
default: [],
visible: (data) => { visible: (data) => {
if (data.searchType == 1) { if (data.searchType == 1) {
return true; return true;
@ -325,6 +326,7 @@ export default {
key: "date", key: "date",
required: true, required: true,
type: "datePicker", type: "datePicker",
default: "",
options: { options: {
pickerOptions: { pickerOptions: {
disabledDate(time) { disabledDate(time) {
@ -336,6 +338,7 @@ export default {
}, },
}, },
], ],
queryParams: {},
}; };
}, },
computed: { computed: {
@ -376,19 +379,30 @@ 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(item => item.id) this.searchFormList[2].default = res[0].value.data.map(
(item) => item.id
);
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");
let data = { this.queryParams = {
searchType: 1, searchType: 1,
facilityId: this.facilityIds, facilityId: this.facilityIds,
date: [currentMonth + "-01", currentDate], date: [currentMonth + "-01", currentDate],
}; };
this.getSelectTollStation(data); this.searchFormList[3].default = [currentMonth + "-01", currentDate];
this.getSelectTollStation(this.queryParams);
} }
}); });
}, },
handleSearch(data) { // handleResetForm(data) {
// this.getSelectTollStation(data);
// },
handleSearch(data, value) {
console.log(888, data, value);
if (value == "reset") {
data = this.queryParams;
}
this.getSelectTollStation(data); this.getSelectTollStation(data);
}, },
arraySpanMethod({ row, column, rowIndex, columnIndex }) { arraySpanMethod({ row, column, rowIndex, columnIndex }) {

4
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/assets/charts.js

@ -3,10 +3,6 @@ var options = {
tooltip: { tooltip: {
show: true, show: true,
trigger: "axis", trigger: "axis",
textStyle: {
// color: "#fff",
fontSize: 10,
},
// formatter: "{b}:{c}人", // formatter: "{b}:{c}人",
}, },
legend: { legend: {

4
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts.js

@ -23,10 +23,6 @@ let options = {
// 坐标轴指示器,坐标轴触发有效 // 坐标轴指示器,坐标轴触发有效
type: "shadow", // 默认为直线,可选为:'line' | 'shadow' type: "shadow", // 默认为直线,可选为:'line' | 'shadow'
}, },
textStyle: {
// color: "#fff",
fontSize: 10,
},
// backgroundColor: "rgba(3, 31, 71, .0)", //设置背景颜色 // backgroundColor: "rgba(3, 31, 71, .0)", //设置背景颜色
// borderColor: "rgba(3, 31, 71, .0)", // borderColor: "rgba(3, 31, 71, .0)",
// formatter: "健康监测<br>{b}:{c}人", // formatter: "健康监测<br>{b}:{c}人",

5
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts2.js

@ -5,11 +5,6 @@ let options = {
tooltip: { tooltip: {
show: true, show: true,
trigger: "axis", trigger: "axis",
// backgroundColor: "rgba(17,95,182,0.5)", //设置背景颜色
textStyle: {
// color: "#fff",
fontSize: 10,
},
// formatter: "{b}:{c}人", // formatter: "{b}:{c}人",
}, },
grid: { grid: {

4
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts3.js

@ -23,10 +23,6 @@ var options = {
}, },
tooltip: { tooltip: {
show: true, show: true,
textStyle: {
// color: "#fff",
fontSize: 10,
},
// valueFormatter: function (value) { // valueFormatter: function (value) {
// return value; // return value;
// // return (value + minNumber).toFixed(2) + " %"; // // return (value + minNumber).toFixed(2) + " %";

4
ruoyi-ui/src/views/JiHeExpressway/pages/datav/roadNet/index.vue

@ -316,7 +316,7 @@ h4, p, ul,li{ margin: 0; padding:0;}
flex-basis: 816px; display: flex; flex-direction: column; justify-content: space-between; flex-basis: 816px; display: flex; flex-direction: column; justify-content: space-between;
} }
.share{ .share{
height: 420px; display: flex; justify-content: center; align-items: center; flex:1.2; margin-bottom: 46px; display: flex; justify-content: center; align-items: center;
.arrow{ transform: rotateZ(90deg); left: 48%; top:calc(100% + 8px);} .arrow{ transform: rotateZ(90deg); left: 48%; top:calc(100% + 8px);}
.shareCon{ .shareCon{
background-image: url(./img/ShareAll.svg); background-position: center center; background-size: contain; background-repeat: no-repeat; width: 756px; height: 245px; display: flex; align-items: center; justify-content: center; position: relative; background-image: url(./img/ShareAll.svg); background-position: center center; background-size: contain; background-repeat: no-repeat; width: 756px; height: 245px; display: flex; align-items: center; justify-content: center; position: relative;
@ -340,7 +340,7 @@ h4, p, ul,li{ margin: 0; padding:0;}
} }
.apply{ .apply{
height: 390px; display: flex; flex-wrap: wrap; padding: 40px 45px; align-content: stretch; flex: 1; display: flex; flex-wrap: wrap; padding: 40px 45px; align-content: stretch;
.applyUnit{ flex-basis: 25%; display: flex; flex-direction: column; justify-content: center; align-items: center; .applyUnit{ flex-basis: 25%; display: flex; flex-direction: column; justify-content: center; align-items: center;
.con{ width: 140px; text-align: center; align-items: center; justify-content: center; .con{ width: 140px; text-align: center; align-items: center; justify-content: center;
h4, p{ font-family: PangMenZhengDao; font-size: 15px; line-height: 22px; margin: 0; padding:0; h4, p{ font-family: PangMenZhengDao; font-size: 15px; line-height: 22px; margin: 0; padding:0;

42
ruoyi-ui/src/views/JiHeExpressway/pages/datav/roadNet/sensors.vue

@ -1,6 +1,6 @@
<template> <template>
<div class="compBox"> <div class="compBox">
<div id="container" class="compCon"> <div id="container" class="compCon" ref="canvas">
</div> </div>
</div> </div>
</template> </template>
@ -12,22 +12,34 @@ export default {
name: 'sensors', name: 'sensors',
data(){ data(){
return { return {
graph:null
} }
}, },
components: { components: {
}, },
mounted(){ mounted(){
this.initGraph(); this.refresh();
window.addEventListener("resize",
_.debounce(this.refresh.bind(this), 1000)
)
}, },
methods: { methods: {
initGraph(){ refresh(){
let _this = this;
this.$nextTick(() => {
_this.initGraph(_this.$refs["canvas"].offsetHeight);
})
},
initGraph(canvasHeight){
let unitH = 42;
let average = unitH + (canvasHeight - unitH*13)/12;
Graph.registerNode( Graph.registerNode(
'sensor', 'sensor',
{ {
width: 180, width: 180,
height: 42, height: unitH,
markup: [ markup: [
{ {
tagName: 'rect', tagName: 'rect',
@ -97,8 +109,12 @@ export default {
}, },
true, true,
) )
if(this.graph){
this.graph.clearCells();
this.graph = null;
}
const graph = new Graph({ this.graph = new Graph({
container: document.getElementById('container'), container: document.getElementById('container'),
autoResize: true, autoResize: true,
grid: false, grid: false,
@ -114,8 +130,8 @@ export default {
}) })
function createSub(x, y, title) { const createSub = (x, y, title) => {
return graph.addNode({ return this.graph.addNode({
x, x,
y, y,
shape: 'sensor', shape: 'sensor',
@ -132,8 +148,8 @@ export default {
}) })
} }
function link(source, target, vertices) { const link = (source, target, vertices) => {
return graph.addEdge({ return this.graph.addEdge({
source: { source: {
cell: source, cell: source,
anchor: { anchor: {
@ -153,7 +169,7 @@ export default {
}) })
} }
const main = graph.addNode({ const main = this.graph.addNode({
shape: 'circle', shape: 'circle',
x: 310, x: 310,
y: 80, y: 80,
@ -184,7 +200,7 @@ export default {
] ]
subItems.forEach((item, index) => { subItems.forEach((item, index) => {
let temp = createSub(0, index * 68, item); let temp = createSub(0, index * average, item);
link(main, temp); link(main, temp);
}) })
@ -219,7 +235,7 @@ export default {
// }, // },
// ]) // ])
// graph.zoomToFit({ padding: 0, maxScale: 1, mainScale: 1 }) // this.graph.zoomToFit({ padding: 0, maxScale: 1, mainScale: 1 })

5
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dailyDisposal/assets/charts.js

@ -31,16 +31,17 @@ var options = {
width: 50, width: 50,
}, },
bst: { bst: {
width: 35,
align: "left", align: "left",
fontSize: 12, fontSize: 12,
marginLeft: 10,
color: "#37E7FF", color: "#37E7FF",
marginLeft: 10,
}, },
cst: { cst: {
align: "left", align: "left",
fontSize: 12, fontSize: 12,
marginLeft: 10,
color: "#37E7FF", color: "#37E7FF",
marginLeft: 10,
}, },
}, },
}, },

6
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dailyDisposal/index.vue

@ -142,10 +142,10 @@ export default {
context.lineWidth = 1; // 线 context.lineWidth = 1; // 线
// //
drawRoundRect(context, 230, 36, 180, 24, 12, gr); drawRoundRect(context, 230, 35, 180, 24, 12, gr);
drawRoundRect(context, 230, 63, 180, 24, 12, gr); drawRoundRect(context, 230, 63, 180, 24, 12, gr);
drawRoundRect(context, 230, 90, 180, 24, 12, gr); drawRoundRect(context, 230, 91, 180, 24, 12, gr);
drawRoundRect(context, 230, 117, 180, 24, 12, gr); drawRoundRect(context, 230, 119, 180, 24, 12, gr);
}); });
}); });
}, },

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

@ -39,7 +39,7 @@ var options = {
}, },
}, },
grid: { grid: {
left: "10px", left: "15px",
right: "0%", right: "0%",
top: "16%", top: "16%",
bottom: "5%", bottom: "5%",

2
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/assets/charts3.js

@ -39,7 +39,7 @@ let options = {
}, },
}, },
axisLabel: { axisLabel: {
interval: 0, interval: 'auto',
align: "center", align: "center",
rotate: "1", rotate: "1",
margin: "20", margin: "20",

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

@ -451,7 +451,7 @@ export default {
this.chart3List = res.data; this.chart3List = res.data;
let data = res.data; let data = res.data;
const maxObject = data const maxObject = data
.filter((it) => it.sectionNumber > 0) .filter((it) => it.sectionNumber >= 0)
.reduce((prev, current) => .reduce((prev, current) =>
current.sectionNumber > prev.sectionNumber ? current : prev current.sectionNumber > prev.sectionNumber ? current : prev
); );
@ -460,7 +460,7 @@ export default {
let values2 = []; let values2 = [];
data.forEach((it) => { data.forEach((it) => {
if (it.sectionNumber > 0) { if (it.sectionNumber >= 0) {
values2.push(it.sectionNumber); values2.push(it.sectionNumber);
zhs.push(it.stakeMarkId); zhs.push(it.stakeMarkId);
@ -530,14 +530,14 @@ export default {
id: it.id, id: it.id,
}); });
}); });
//
if (rows.length > 1) {
this.dataList.push({
title: rows[rows.length - 1].sectionName.split("-")[1],
id: rows[rows.length - 1].id,
});
}
console.log("dataList", this.dataList); console.log("dataList", this.dataList);
// if (rows.length > 0) {
// let lastRoad = rows[rows.length - 1].sectionName.split("-")[1];
// this.dataList.push({
// title: lastRoad,
// id: rows[rows.length - 1].id,
// });
// }
} }
this.searchQuery(); this.searchQuery();
}); });

11
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/assets/charts.js

@ -90,13 +90,13 @@ var options = {
}, },
color: ["#5973FF", "#14d8b4", "#FFC30D", "#61D8FF", "#1DA7FF", "#2967EA"], color: ["#5973FF", "#14d8b4", "#FFC30D", "#61D8FF", "#1DA7FF", "#2967EA"],
legend: { legend: {
top: "8%", top: "5%",
right: 0, right: 0,
orient: "vertical", //改变排列方式 orient: "vertical", //改变排列方式
icon: "circle", //改变legend小图标形状 icon: "circle", //改变legend小图标形状
itemGap: 10, // 设置legend的间距 itemGap: 12, // 设置legend的间距
itemWidth: 8, // 设置宽度 itemWidth: 8, // 设置宽度
// itemHeight: 15, // 设置高度 itemHeight: 9, // 设置高度
itemStyle: { itemStyle: {
borderColor: "transparent", borderColor: "transparent",
@ -130,15 +130,16 @@ var options = {
width: 65, width: 65,
}, },
bst: { bst: {
width: 35,
align: "left", align: "left",
fontSize: 12, fontSize: 12,
marginLeft: 20, marginLeft: 10,
color: "#37E7FF", color: "#37E7FF",
}, },
cst: { cst: {
align: "left", align: "left",
fontSize: 12, fontSize: 12,
marginLeft: 30, marginLeft: 10,
width: 60, width: 60,
color: "#37E7FF", color: "#37E7FF",
}, },

17
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/index.vue

@ -215,16 +215,15 @@ export default {
// //
let gr = context.createLinearGradient(230, 0, 360, 0); let gr = context.createLinearGradient(230, 0, 360, 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.3)"); gr.addColorStop(0, "rgba(92,197,255,0.5)");
drawRoundRect(context, 206, 16, 134, 18, 12, gr);
drawRoundRect(context, 206, 39, 134, 18, 12, gr);
drawRoundRect(context, 206, 61, 134, 18, 12, gr);
drawRoundRect(context, 206, 83, 134, 18, 12, gr);
drawRoundRect(context, 206, 105, 134, 18, 12, gr);
drawRoundRect(context, 206, 127, 134, 18, 12, gr);
drawRoundRect(context, 206, 149, 134, 18, 12, gr);
context.lineWidth = 1; // 线 context.lineWidth = 1; // 线
drawRoundRect(context, 202, 8, 280, 20, 12, gr);
drawRoundRect(context, 202, 32, 280, 20, 10, gr);
drawRoundRect(context, 202, 56, 280, 20, 10, gr);
drawRoundRect(context, 202, 80, 280, 20, 10, gr);
drawRoundRect(context, 202, 104, 280, 20, 10, gr);
drawRoundRect(context, 202, 128, 280, 20, 10, gr);
drawRoundRect(context, 202, 152, 280, 20, 10, gr);
this.myChart = myChart; this.myChart = myChart;
}); });

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

@ -15,7 +15,7 @@ var options = {
containLabel: true, containLabel: true,
// 边距自行修改 // 边距自行修改
bottom: "0%", bottom: "0%",
left: "0%", left: "10px",
top: "2%", top: "2%",
right: "15%", right: "15%",
}, },

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

@ -58,7 +58,7 @@ var options = {
grid: { grid: {
top: "15%", //上边距 top: "15%", //上边距
right: "0", //右边距 right: "0", //右边距
left: "10px", //左边距 left: "15px", //左边距
bottom: "0%", //下边距 bottom: "0%", //下边距
containLabel: true, containLabel: true,
}, },

9
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/assets/charts.js

@ -37,19 +37,20 @@ var options = {
ast: { ast: {
marginLeft: 0, marginLeft: 0,
fontSize: 12, fontSize: 12,
width: 40, width: 60,
}, },
bst: { bst: {
align: "left", align: "left",
fontSize: 12, fontSize: 12,
color: "#37E7FF", color: "#37E7FF",
width: 30, width: 35,
marginLeft: 10,
}, },
cst: { cst: {
align: "right", align: "right",
fontSize: 12, fontSize: 12,
width: 40, width: 45,
// marginLeft: 20, marginLeft: 10,
color: "#37E7FF", color: "#37E7FF",
}, },
}, },

10
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/index.vue

@ -176,11 +176,11 @@ export default {
context.lineWidth = 1; // 线 context.lineWidth = 1; // 线
// //
drawRoundRect(context, 260, 6, 120, 24, 12, gr); drawRoundRect(context, 228, 8, 280, 24, 12, gr);
drawRoundRect(context, 260, 36, 120, 24, 12, gr); drawRoundRect(context, 228, 36, 280, 24, 12, gr);
drawRoundRect(context, 260, 64, 120, 24, 12, gr); drawRoundRect(context, 228, 64, 280, 24, 12, gr);
drawRoundRect(context, 260, 92, 120, 24, 12, gr); drawRoundRect(context, 228, 92, 280, 24, 12, gr);
drawRoundRect(context, 260, 120, 120, 24, 12, gr); drawRoundRect(context, 228, 120, 280, 24, 12, gr);
}); });
}); });
}, },

6
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/changesIndicators/assets/charts3.js

@ -57,6 +57,12 @@ let options = {
yAxis: [ yAxis: [
{ {
min: 0, min: 0,
name: '(指标)',
nameTextStyle: {
color: "#fff",
fontSize: 10,
align: "right",
},
axisLine: { axisLine: {
lineStyle: { lineStyle: {
color: "#27B5D7", color: "#27B5D7",

9
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/composeFeatures/assets/charts.js

@ -2,10 +2,10 @@ import * as echarts from "echarts";
var options = { var options = {
color: ["#07A3FB"], color: ["#07A3FB"],
grid: { grid: {
left: "0%", left: "2px",
right: "8%", right: "8%",
bottom: "0%", bottom: "0%",
top: "10%", top: "28px",
containLabel: true, containLabel: true,
}, },
tooltip: { tooltip: {
@ -44,10 +44,11 @@ var options = {
}, },
yAxis: { yAxis: {
type: "value", type: "value",
name: '(指标)',
nameTextStyle: { nameTextStyle: {
fontSize: 10,
color: "#fff", color: "#fff",
align: "center", fontSize: 10,
align: "right",
}, },
splitLine: { splitLine: {
lineStyle: { lineStyle: {

9
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/crowding/assets/charts.js

@ -2,10 +2,10 @@ import * as echarts from "echarts";
var options = { var options = {
color: ["#E29E37"], color: ["#E29E37"],
grid: { grid: {
left: "0%", left: "2px",
right: "0%", right: "0%",
bottom: "0%", bottom: "0%",
top: "10%", top: "28px",
containLabel: true, containLabel: true,
}, },
tooltip: { tooltip: {
@ -44,10 +44,11 @@ var options = {
}, },
yAxis: { yAxis: {
type: "value", type: "value",
name: '(指标)',
nameTextStyle: { nameTextStyle: {
fontSize: 10,
color: "#fff", color: "#fff",
align: "center", fontSize: 10,
align: "right",
}, },
splitLine: { splitLine: {
lineStyle: { lineStyle: {

10
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/saturationMax/assets/charts.js

@ -6,10 +6,10 @@ var options = {
trigger: "axis", trigger: "axis",
}, },
grid: { grid: {
left: "0%", left: "2px",
right: "0%", right: "0%",
bottom: "0%", bottom: "0%",
top: "10%", top: "28px",
containLabel: true, containLabel: true,
}, },
@ -45,6 +45,12 @@ var options = {
}, },
yAxis: { yAxis: {
type: "value", type: "value",
name: '(指标)',
nameTextStyle: {
color: "#fff",
fontSize: 10,
align: "right",
},
splitLine: { splitLine: {
lineStyle: { lineStyle: {
color: "#32BB8A", color: "#32BB8A",

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

@ -101,12 +101,12 @@ var options = {
yAxis: [ yAxis: [
{ {
type: "value", type: "value",
name: "", name: "(指标)",
nameTextStyle: { nameTextStyle: {
color: "#fff", color: "#fff",
fontSize: 10, fontSize: 10,
fontFamily: "Source Han Sans CN-Regular", fontFamily: "Source Han Sans CN-Regular",
align: "left", align: "right",
verticalAlign: "center", verticalAlign: "center",
}, },
axisLabel: { axisLabel: {

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

@ -1,30 +1,42 @@
<template> <template>
<Card2 class='Auditlists' title="审核列表"> <Card2 class="Auditlists" title="审核列表">
<InputSearch style="width: 100%;" :formList="searchFormList" /> <InputSearch style="width: 100%" :formList="searchFormList" />
<div class="body"> <div class="body">
<ListItem v-for="item in list1" :key="item.id" :data="item" origin="left" class="middle-ratio" /> <ListItem
<ListItem v-for="item in list2" :key="item.id" :data="item" origin="left" class="middle-ratio" /> v-for="item in list1"
:key="item.id"
:data="item"
origin="left"
class="middle-ratio"
/>
<ListItem
v-for="item in list2"
:key="item.id"
:data="item"
origin="left"
class="middle-ratio"
/>
</div> </div>
<div class="footer"> <div class="footer">
<Pagination :total="90" /> <Pagination layout="total,prev, pager, next, jumper" :total="90" />
</div> </div>
</Card2> </Card2>
</template> </template>
<script> <script>
import Card2 from "@screen/components/Card2/Card.vue"; import Card2 from "@screen/components/Card2/Card.vue";
import Pagination from '@screen/components/Pagination.vue'; import Pagination from "@screen/components/Pagination.vue";
import InputSearch from '@screen/components/InputSearch/index.vue'; import InputSearch from "@screen/components/InputSearch/index.vue";
import { searchFormList } from './data'; import { searchFormList } from "./data";
import ListItem from "./ListItem.vue"; import ListItem from "./ListItem.vue";
export default { export default {
name: 'Auditlists', name: "Auditlists",
components: { components: {
Card2, Card2,
InputSearch, InputSearch,
Pagination, Pagination,
ListItem ListItem,
}, },
data() { data() {
return { return {
@ -37,7 +49,7 @@ export default {
const min = 0; const min = 0;
const max = 2; const max = 2;
return Math.floor(Math.random() * (max - min + 1)) + min; return Math.floor(Math.random() * (max - min + 1)) + min;
})() })(),
})), })),
list2: Array.from({ length: 10 }).map(() => ({ list2: Array.from({ length: 10 }).map(() => ({
title: "交通事故", title: "交通事故",
@ -47,26 +59,23 @@ export default {
const min = 0; const min = 0;
const max = 2; const max = 2;
return Math.floor(Math.random() * (max - min + 1)) + min; return Math.floor(Math.random() * (max - min + 1)) + min;
})() })(),
})), })),
} };
}, },
created() { created() {
// axiosIns.get("/business/dcPublishInfo/list") // axiosIns.get("/business/dcPublishInfo/list")
// .then((result) => { // .then((result) => {
// console.log("%c [ result ]-39-index.vue", "font-size:15px; background:#4bd543; color:#8fff87;", result); // console.log("%c [ result ]-39-index.vue", "font-size:15px; background:#4bd543; color:#8fff87;", result);
// if (result.code !== 200) return this.list = []; // if (result.code !== 200) return this.list = [];
// this.list = result.rows; // this.list = result.rows;
// }).catch((err) => { // }).catch((err) => {
// }); // });
},
} };
}
</script> </script>
<style lang='scss' scoped> <style lang="scss" scoped>
.Auditlists { .Auditlists {
::v-deep { ::v-deep {
.content { .content {

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

@ -1,5 +1,5 @@
<template> <template>
<div class='PublishingChannelManagement'> <div class="PublishingChannelManagement">
<!-- 搜索栏 --> <!-- 搜索栏 -->
<div class="filter"> <div class="filter">
<div> <div>
@ -17,7 +17,11 @@
</ButtonGradient> </ButtonGradient>
</div> </div>
<InputSearch style="width: 402px;" :formList="searchFormList" @handleSearch="handleSearch" /> <InputSearch
style="width: 402px"
:formList="searchFormList"
@handleSearch="handleSearch"
/>
</div> </div>
<!-- 内容 --> <!-- 内容 -->
@ -27,7 +31,7 @@
<!-- 分页 --> <!-- 分页 -->
<div class="footer"> <div class="footer">
<Pagination :total="90" /> <Pagination layout="total,prev, pager, next, jumper" :total="90" />
</div> </div>
<!-- 新增编辑弹窗 --> <!-- 新增编辑弹窗 -->
@ -36,34 +40,34 @@
</template> </template>
<script> <script>
import Pagination from '@screen/components/Pagination.vue'; import Pagination from "@screen/components/Pagination.vue";
import InputSearch from '@screen/components/InputSearch/index.vue'; import InputSearch from "@screen/components/InputSearch/index.vue";
import Card from './components/Card'; import Card from "./components/Card";
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue'; import ButtonGradient from "@screen/components/Buttons/ButtonGradient.vue";
import AddNEditDialog from "./components/AddNEditDialog.vue"; import AddNEditDialog from "./components/AddNEditDialog.vue";
import { searchFormList } from './data'; import { searchFormList } from "./data";
export default { export default {
name: 'PublishingChannelManagement', name: "PublishingChannelManagement",
components: { components: {
Pagination, Pagination,
InputSearch, InputSearch,
Card, Card,
ButtonGradient, ButtonGradient,
AddNEditDialog AddNEditDialog,
}, },
data() { data() {
return { return {
searchFormList, searchFormList,
data: [], data: [],
addNEditDialogVisible: false, addNEditDialogVisible: false,
dialogData: null dialogData: null,
} };
}, },
methods: { methods: {
handleOpenDialogAddEdit(data) { handleOpenDialogAddEdit(data) {
console.log('data', data); console.log("data", data);
this.addNEditDialogVisible = true; this.addNEditDialogVisible = true;
this.dialogData = data; this.dialogData = data;
}, },
@ -71,13 +75,12 @@ export default {
// this.searchData = data; // this.searchData = data;
// this.getData(); // this.getData();
}, },
} },
} };
</script> </script>
<style lang='scss' scoped> <style lang="scss" scoped>
.PublishingChannelManagement { .PublishingChannelManagement {
padding: 21px; padding: 21px;
height: 100%; height: 100%;

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

@ -736,7 +736,7 @@ export default {
type: "warning", type: "warning",
}).then(() => { }).then(() => {
deleteTemplate(id).then(() => { deleteTemplate(id).then(() => {
this.$message.success("删除成功!"); this.$message.success("删除成功");
this.____refreshPageData({ type: "template" }); this.____refreshPageData({ type: "template" });
}); });
}); });
@ -746,7 +746,7 @@ export default {
____onDeleteBoardItem(index) { ____onDeleteBoardItem(index) {
if (index > -1) { if (index > -1) {
this.selectedBdMsg.splice(index, 1); this.selectedBdMsg.splice(index, 1);
this.$message.success("删除成功"); this.$message.success("删除成功");
} }
}, },

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

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

4
ruoyi-ui/vue.config.js

@ -51,8 +51,8 @@ module.exports = {
// target: `http://10.0.81.204:8087`, //现场后台 刘文阁 // target: `http://10.0.81.204:8087`, //现场后台 刘文阁
// target: `http://10.168.69.255:8087`, //正晨后台 连现场物联 刘文阁 // target: `http://10.168.69.255:8087`, //正晨后台 连现场物联 刘文阁
// target: `http://10.168.78.135:8087`, //王钦 // target: `http://10.168.78.135:8087`, //王钦
target: `http://10.168.66.196:8087`, //正晨后台 连现场物联 刘文阁2 // target: `http://10.168.66.196:8087`, //正晨后台 连现场物联 刘文阁2
// target: `http://10.168.68.42:8087`, //王思祥 target: `http://10.168.68.42:8087`, //王思祥
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
["^" + process.env.VUE_APP_BASE_API]: "", ["^" + process.env.VUE_APP_BASE_API]: "",

Loading…
Cancel
Save