diff --git a/ruoyi-ui/src/assets/images/login/139.png b/ruoyi-ui/src/assets/images/login/139.png new file mode 100644 index 00000000..edd626e4 Binary files /dev/null and b/ruoyi-ui/src/assets/images/login/139.png differ diff --git a/ruoyi-ui/src/assets/images/login/login-background.png b/ruoyi-ui/src/assets/images/login/login-background.png new file mode 100644 index 00000000..26a364dc Binary files /dev/null and b/ruoyi-ui/src/assets/images/login/login-background.png differ diff --git a/ruoyi-ui/src/assets/images/login/logo.png b/ruoyi-ui/src/assets/images/login/logo.png new file mode 100644 index 00000000..bb77139b Binary files /dev/null and b/ruoyi-ui/src/assets/images/login/logo.png differ diff --git a/ruoyi-ui/src/assets/images/login/password.png b/ruoyi-ui/src/assets/images/login/password.png new file mode 100644 index 00000000..8231760a Binary files /dev/null and b/ruoyi-ui/src/assets/images/login/password.png differ diff --git a/ruoyi-ui/src/assets/images/login/user.png b/ruoyi-ui/src/assets/images/login/user.png new file mode 100644 index 00000000..9c5c54d9 Binary files /dev/null and b/ruoyi-ui/src/assets/images/login/user.png differ diff --git a/ruoyi-ui/src/views/JiHeExpressway/components/Pagination.vue b/ruoyi-ui/src/views/JiHeExpressway/components/Pagination.vue index 97dcbe14..5c3ed94a 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/components/Pagination.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/components/Pagination.vue @@ -14,7 +14,7 @@ export default { getProps() { return { // total - layout: "prev, pager, next, sizes, jumper,total", + layout: "prev, pager, next, sizes, jumper, total", ...this.$attrs, small: true, }; @@ -109,5 +109,8 @@ export default { margin-right: 6px; } } + ::v-deep .el-pagination__total { + margin-left: 10px; + } } </style> diff --git a/ruoyi-ui/src/views/JiHeExpressway/images/home-Frame/logoMean.jpg b/ruoyi-ui/src/views/JiHeExpressway/images/home-Frame/logoMean.jpg deleted file mode 100644 index 67814fe5..00000000 Binary files a/ruoyi-ui/src/views/JiHeExpressway/images/home-Frame/logoMean.jpg and /dev/null differ diff --git a/ruoyi-ui/src/views/JiHeExpressway/images/home-Frame/logoMean.png b/ruoyi-ui/src/views/JiHeExpressway/images/home-Frame/logoMean.png new file mode 100644 index 00000000..fa12035a Binary files /dev/null and b/ruoyi-ui/src/views/JiHeExpressway/images/home-Frame/logoMean.png differ diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrame/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrame/index.vue index 4f7ea6e3..2ac7dcd5 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrame/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrame/index.vue @@ -1,17 +1,24 @@ <template> - <div class='HomeFrame'> - <ElPopover trigger="manual" :value="activeIcon === 'Frame'" :visibleArrow="false" placement="left" - popper-class="global-input-search-popover"> - <Button :class="['btn', { 'btn-active': activeIcon }]" slot="reference" @click.native="handleClick('Frame')"> - <img src="@screen/images/home-Frame/Frame.svg"> + <div class="HomeFrame"> + <ElPopover + trigger="manual" + :value="activeIcon === 'Frame'" + :visibleArrow="false" + placement="left" + popper-class="global-input-search-popover" + > + <Button + :class="['btn', { 'btn-active': activeIcon }]" + slot="reference" + @click.native="handleClick('Frame')" + > + <img src="@screen/images/home-Frame/Frame.svg" /> </Button> <div class="body"> - <div class="title"> - 图标含义 - </div> + <div class="title">图标含义</div> <!-- <Form labelWidth="90px" column="1" class="form" ref="FormConfigRef" :formList="formList" /> --> - <img class="image" src="@screen/images/home-Frame/logoMean.jpg"> + <img class="image" src="@screen/images/home-Frame/logoMean.png" /> <!-- <div class="footer"> </div> --> </div> @@ -20,21 +27,21 @@ </template> <script> -import Button from '@screen/components/Buttons/Button.vue'; -import Form from '@screen/components/FormConfig'; +import Button from "@screen/components/Buttons/Button.vue"; +import Form from "@screen/components/FormConfig"; import * as PresetFormItems from "@screen/pages/control/event/event/FormEvent/PresetFormItems.js"; -import { merge, cloneDeep } from "lodash" +import { merge, cloneDeep } from "lodash"; export default { - name: 'HomeFrame', + name: "HomeFrame", components: { Button, - Form + Form, }, data() { return { - activeIcon: null - } + activeIcon: null, + }; }, methods: { handleClick(type) { @@ -45,43 +52,45 @@ export default { // this.filterData = data; this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data); }, - } -} + }, +}; </script> -<style lang='scss'> +<style lang="scss"> div.el-popper.global-input-search-popover { background: rgba(6, 66, 88, 0.8); border: 1px solid rgba(42, 217, 253, 0.6); position: relative; padding-top: 36px; transform: translateY(24px); - margin-top: 3vh; + margin-top: 6vh; .body { .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; position: absolute; top: 0; left: 0; width: 100%; - } } } </style> -<style lang='scss' scoped> +<style lang="scss" scoped> .image { - width: 45vw; + width: 60vw; height: 65vh; } .HomeFrame { - .btn { padding: 9px; - background: linear-gradient(180deg, #152E3C 0%, #163A45 100%); + background: linear-gradient(180deg, #152e3c 0%, #163a45 100%); border-radius: 4px; overflow: hidden; height: unset; @@ -89,7 +98,7 @@ div.el-popper.global-input-search-popover { } .btn-active { - background: linear-gradient(180deg, #005C79 0%, #009BCC 100%); + background: linear-gradient(180deg, #005c79 0%, #009bcc 100%); } } </style> diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/dispatch/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/dispatch/index.vue index 8d6451a1..2e422e03 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/dispatch/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/dispatch/index.vue @@ -42,6 +42,12 @@ import EventDispatchDialog from "./EventDispatchDialog/index"; import { searchFormList } from './data'; import request from "@/utils/request"; +const directionMapping = { + '1': '菏泽方向', + '2': '双向', + '3': '济南方向' +} + export default { name: 'RoadNetworkMonitoring', components: { @@ -81,8 +87,11 @@ export default { params: this.searchData, }).then((result) => { if (result.code != 200) return Message.error(result?.msg); - this.data = result.rows; this.total = result.total; + result.rows.forEach(it => { + it.stringDirection = directionMapping[it.direction] || it.direction; + }) + this.data = result.rows; }); }, onSizeChange(pageSize) { diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue index 19d2210e..3d4d0d68 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue @@ -1,13 +1,13 @@ <template> <Dialog v-model="modelVisible" title="事件详情"> - <div class="EventDetail" :style="{ height: (activeName == '-1' || activeName == '0') ? '380px' : '768px'}"> + <div class="EventDetail" :style="{ height: (activeName == '-1' || activeName == '0') ? '380px' : '768px' }"> <Form :formList="formList" :dFormData="formData" label-width="100px" /> <div class="video-pic"> - <Video style="height: 100%;" :showHeader="activeName != '-1'"/> + <Video style="height: 100%;" :showHeader="activeName != '-1'" /> <Video v-if="activeName != '-1'" style="height: 100%;" /> - <Carousel v-else style="flex: 1" :pictures="formData.pictures"/> + <Carousel v-else style="flex: 1" :pictures="formData.pictures" /> </div> <TimeLine1 v-if="activeName == '1' || activeName == '2'" :data="timeLine1List" /> @@ -15,9 +15,10 @@ </div> <template #footer> - <Button v-if="activeName == '-1' || activeName == '0'" style="padding: 0 24px;" @click.native="modelVisible = false">误报</Button> + <Button style="padding: 0 24px;" @click.native="onDelete">误报</Button> <Button :style="{ backgroundColor: '#C9C9C9', padding: '0 24px' }" @click.native="modelVisible = false">取消</Button> - <Button v-if="activeName == '-1' || activeName == '0'" style="padding: 0 24px;" @click.native="modelVisible = false">确认</Button> + <Button v-if="activeName == '-1' || activeName == '0'" style="padding: 0 24px;" + @click.native="modelVisible = false">确认</Button> </template> </Dialog> </template> @@ -33,6 +34,7 @@ import Video from "@screen/components/Video"; import Carousel from "./Carousel/index.vue" import Button from '@screen/components/Buttons/Button.vue'; import request from "@/utils/request"; +import { Message } from "element-ui"; var moment = require("moment"); export default { @@ -92,7 +94,7 @@ export default { }, methods: { getProcess() { - if(this.activeName == '-1' || this.activeName == '0'){ + if (this.activeName == '-1' || this.activeName == '0') { this.timeLine1List = []; this.timeLine2List = []; return; @@ -144,6 +146,31 @@ export default { }) + }, + onDelete() { + if (this.formData.id) { + this.$confirm('确定误报吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + // this.modelVisible = false; + // this.$emit('queryData', true); + // return; + request({ + url: `/business/warning/delete`, + method: "post", + data: { id: this.formData.id } + }).then(result => { + if (result.code == 200) Message.success('成功!'); + else Message.error(result?.msg); + this.modelVisible = false; + this.$emit('queryData', true); + }) + }) + + } + } } } diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/PresetFormItems.js b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/PresetFormItems.js index 5f63793a..bde66452 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/PresetFormItems.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/PresetFormItems.js @@ -367,6 +367,9 @@ export const vehicleCondition = (keyPrefix = "dcEventAccident") => ({ text: "辆", }, type: "inputNumber", + options: { + min: 0, + }, key: `${keyPrefix}.smallCar`, }, { @@ -376,6 +379,9 @@ export const vehicleCondition = (keyPrefix = "dcEventAccident") => ({ suffix: { text: "辆", }, + options: { + min: 0, + }, type: "inputNumber", key: `${keyPrefix}.trucks`, }, @@ -387,6 +393,9 @@ export const vehicleCondition = (keyPrefix = "dcEventAccident") => ({ text: "辆", }, type: "inputNumber", + options: { + min: 0, + }, key: `${keyPrefix}.buses`, }, { @@ -397,6 +406,9 @@ export const vehicleCondition = (keyPrefix = "dcEventAccident") => ({ text: "辆", }, type: "inputNumber", + options: { + min: 0, + }, key: `${keyPrefix}.tankers`, }, ], @@ -630,23 +642,23 @@ export const trafficAccidentType = { options: { options: [ { - value: "1", + value: "1-1", label: "追尾", }, { - value: "2", + value: "1-2", label: "侧翻", }, { - value: "3", + value: "1-3", label: "撞护栏", }, { - value: "4", + value: "1-4", label: "自然", }, { - value: "5", + value: "1-5", label: "其他事故", }, ], diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/data.js b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/data.js index 2f1098d2..0516f4e2 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/data.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/data.js @@ -63,10 +63,7 @@ export const tabConfigList = [ ...PresetFormItems.callPolicePersonPhone, key: "dcEventAccident.reporterPhoneNumber", }, - { - ...PresetFormItems.trafficAccidentType, - key: "dcEventAccident.accidentType", - }, + PresetFormItems.trafficAccidentType, PresetFormItems.eventLevel, { ...PresetFormItems.locationMode, @@ -422,7 +419,14 @@ export const tabConfigList = [ }, }, PresetFormItems.direction, - PresetFormItems.station, + { ...PresetFormItems.station, + visible: (data) => { + if (data.dcEventVehicleAccident && data.dcEventVehicleAccident.locationType != 1) { + return false; + } + return true; + }, + }, PresetFormItems.eventHappenTime, PresetFormItems.aEstimatedReleaseTime, { diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/data.js b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/data.js index a5423158..775dc18d 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/data.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/data.js @@ -83,6 +83,10 @@ export const gjSearchFormList = [ key: "6", label: "非机预警", }, + { + key: "7", + label: "气象监测器", + }, ], }, }, @@ -145,17 +149,17 @@ export const gzSearchFormList = [ options: { options: [ { - key: "济南方向", - label: "济南方向", - }, - { - key: "菏泽方向", + key: "1", label: "菏泽方向", }, { - key: "双向", - label: "双向", + key: "3", + label: "济南方向", }, + // { + // key: "双向", + // label: "双向", + // }, ], }, }, diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue index 6a44b764..3fe4e4c2 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue @@ -5,7 +5,7 @@ <!-- 搜索栏 --> <div class="filter"> <div> - <ButtonGradient @click="onAddNew"> + <ButtonGradient @click="onAddNew" v-if="activeName != '1' && activeName != '2'"> <template #prefix> <img src="./images/insert.svg" /> </template> @@ -43,7 +43,7 @@ </div> <!-- "详情"弹出框 --> - <EventDetailDialog :visible="eventDetailDialogVisible" :formData="detailDialogFormData" :activeName="activeName" @update:value="handleClose" /> + <EventDetailDialog :visible="eventDetailDialogVisible" :formData="detailDialogFormData" :activeName="activeName" @update:value="handleClose" @queryData="queryData"/> <!-- "新增"弹出框 --> <FormEvent :visible="isShowAddNew" @close="onCloseAddNew" /> </div> @@ -59,6 +59,7 @@ import EventDetailDialog from "./EventDetailDialog/index"; import FormEvent from "./FormEvent/index"; import { tabMap, gjSearchFormList, gzSearchFormList } from "./data"; import request from "@/utils/request"; +import { Message } from "element-ui"; import { Loading } from 'element-ui'; function getRandomData(min = 1, max = 15) { @@ -81,6 +82,7 @@ const warningSourceMapping = { 4: '护栏碰撞', 5: '扫码报警', 6: '非机预警', + 7: '气象监测器' } const directionMapping = { '1': '上行', @@ -179,6 +181,9 @@ export default { lastBtnText: text, }; }, + queryData(flag){ + this.getData() + }, getData() { if (this.activeName === '-1') { request({ diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/assets/charts.js index bf55ef05..322bd9bd 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/assets/charts.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/assets/charts.js @@ -24,7 +24,7 @@ var options = { grid: { top: "15%", //上边距 right: "0", //右边距 - left: "10px", //左边距 + left: "15px", //左边距 bottom: "10%", //下边距 containLabel: true, }, diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/data.js b/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/data.js index d605840d..e5324981 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/data.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/data.js @@ -27,7 +27,7 @@ export const searchFormList = [ { label: "时间范围:", key: "time", - required: true, + // required: true, type: "datePicker", options: { format:"yyyy-MM-dd", @@ -35,9 +35,9 @@ export const searchFormList = [ }, }, { - label: "型号类型:", + label: "设备类型:", key: "type", - required: true, + // required: true, type: "select", options: { options: [ diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dayTotal/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dayTotal/assets/charts.js index edffb3de..61c85463 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dayTotal/assets/charts.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dayTotal/assets/charts.js @@ -39,7 +39,7 @@ var options = { }, }, grid: { - left: "1%", + left: "10px", right: "0%", top: "16%", bottom: "5%", diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dayTotal/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dayTotal/index.vue index 9d533bae..879158ae 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dayTotal/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/dayTotal/index.vue @@ -1,52 +1,55 @@ <template> - <div class='congestion'> + <div class="congestion"> <WgtTitle :title="'日累计感知事件趋势'"></WgtTitle> <div class="board"> - <Empty v-show="!dataList || dataList.length <= 0" text="暂无数据..."></Empty> - <div v-show="dataList && dataList.length > 0" style="width: 450px;" class="charts keep-ratio " id="daytotal"></div> + <Empty + v-show="!dataList || dataList.length <= 0" + text="暂无数据..." + ></Empty> + <div + v-show="dataList && dataList.length > 0" + style="width: 450px" + class="charts keep-ratio" + id="daytotal" + ></div> </div> </div> </template> - -<script> -import WgtTitle from '../../../widgets/title' +<script> +import WgtTitle from "../../../widgets/title"; import * as echarts from "echarts"; import chartsStatistics from "./assets/charts"; -import { getDailyCumulative } from '../../../../../../../api/event/perceiveEvent'; +import { getDailyCumulative } from "../../../../../../../api/event/perceiveEvent"; import moment from "moment"; export default { - name: 'RailWayDay', + name: "RailWayDay", components: { - WgtTitle + WgtTitle, }, data() { return { - dataList: [] - } - }, - - created() { - + dataList: [], + }; }, - methods: { - }, + created() {}, + methods: {}, mounted() { setTimeout(() => { this.$nextTick(() => { - var myChart = echarts.init(document.getElementById('daytotal')); + var myChart = echarts.init(document.getElementById("daytotal")); - getDailyCumulative().then(res => { + getDailyCumulative().then((res) => { if (res.code == 200) { - this.dataList = res.data + this.dataList = res.data; let data = res.data; let timer = []; let number = []; data.forEach((it) => { - timer.push(moment(it.time).format('HH:mm')); + timer.push(moment(it.time).format("HH:mm")); number.push(it.number); }); @@ -55,32 +58,34 @@ export default { myChart.setOption(chartsStatistics); } - }); - }); }); }, -} +}; </script> - -<style lang='scss' scoped> + +<style lang="scss" scoped> .congestion { width: 100%; .board { height: 200px; width: 100%; - padding: 0px 20px; + // padding: 0px 20px; background: linear-gradient(180deg, rgba(6, 66, 88, 0.2) 0%, #064258 100%); border-radius: 5px 5px 5px 5px; opacity: 1; 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; justify-content: space-between; align-items: center; - } } @@ -89,4 +94,3 @@ export default { width: 100%; } </style> - \ No newline at end of file diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/assets/charts2.js b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/assets/charts2.js index 221623b2..86fa33f2 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/assets/charts2.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/assets/charts2.js @@ -51,8 +51,8 @@ let chartData = [], "#50EED3", "#5DEF9E", "#29B3FF", - "#FB5C38", - "#FB5C38", + "#29A1AF", + "#2D5CA8", "#FCBB14", ]; for (let i = 0; i < data.length; i++) { diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/assets/charts3.js b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/assets/charts3.js index b18cc633..59bddcab 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/assets/charts3.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/assets/charts3.js @@ -54,7 +54,7 @@ let options = { name: "(起)", nameTextStyle: { color: "#fff", - fomtSize: 10, + fontSize: 10, align: "right", }, min: 0, @@ -191,6 +191,9 @@ let options = { zlevel: 10, data: [], animationDelay: 500, + tooltip: { + show: false, + }, }, ], }; diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index.vue index 9abb5d86..60366b91 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index.vue @@ -220,8 +220,8 @@ export default { dateTime: "2024", direction: "1", dataList: [], - selectIndex: 3, - selectId: 3, + selectIndex: 1, + selectId: 1, type: "year", chart1List: [], chart2List: [], @@ -400,30 +400,24 @@ export default { data.forEach((it) => { if (it.warningType == 1) { types.push("交通拥堵"); - } - if (it.warningType == 2) { + } else if (it.warningType == 2) { types.push("行人"); - } - if (it.warningType == 3) { + } else if (it.warningType == 3) { types.push("非机动车"); - } - if (it.warningType == 4) { + } else if (it.warningType == 4) { types.push("停车"); - } - if (it.warningType == 5) { + } else if (it.warningType == 5) { types.push("倒车/逆行"); - } - if (it.warningType == 6) { + } else if (it.warningType == 6) { types.push("烟火"); - } - if (it.warningType == 7) { + } else if (it.warningType == 7) { types.push("撒落物"); - } - if (it.warningType == 8) { + } else if (it.warningType == 8) { types.push("异常天气"); - } - if (it.warningType == 9) { + } else if (it.warningType == 9) { types.push("护栏碰撞"); + } else { + types.push("其他"); } numbers.push({ diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/assets/charts.js index 6ea73b0c..7bfe5e2e 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/assets/charts.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/assets/charts.js @@ -1,25 +1,4 @@ -let data = [ - { - average: 30, - name: "视频识别", - percent: 0.2, - }, - { - average: 25, - name: "雷达识别", - percent: 0.25, - }, - { - average: 15, - name: "锥桶", - percent: 0.3, - }, - { - average: 30, - name: "护栏碰撞", - percent: 0.25, - }, -]; +let data = []; window.mainData = data; @@ -115,7 +94,7 @@ var options = { right: 0, orient: "vertical", //改变排列方式 icon: "circle", //改变legend小图标形状 - itemGap: 15, // 设置legend的间距 + itemGap: 10, // 设置legend的间距 itemWidth: 8, // 设置宽度 // itemHeight: 15, // 设置高度 diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/index.vue index 4ec2128f..5de3c418 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventSource/index.vue @@ -86,7 +86,7 @@ export default { { average: 0, name: "护栏碰撞", - percent: 0.2, + percent: 0.1, }, { average: 0, @@ -98,6 +98,11 @@ export default { name: "非机预警", percent: 0.1, }, + { + average: 0, + name: "气象监测器", + percent: 0.1, + }, ]; data.forEach((it) => { if (it.warningSource == 1) { @@ -118,6 +123,9 @@ export default { if (it.warningSource == 6) { chartData[5].average += it.number; } + if (it.warningSource == 7) { + chartData[6].average += it.number; + } // total ++; // drawRoundRect(context, 231, 37 + (index * 27), 138, 20, 12, gr); }); @@ -148,7 +156,7 @@ export default { }); } window.mainData = mainData; - console.log("mainData", mainData); + // console.log("mainData", mainData); chartsStatistics.title.text = `{tb|${total}}`; chartsStatistics.title.subtext = "{zb|总数}"; @@ -208,12 +216,13 @@ export default { let gr = context.createLinearGradient(230, 0, 360, 0); gr.addColorStop(1, "rgba(92,197,255,0)"); gr.addColorStop(0, "rgba(92,197,255,0.3)"); - drawRoundRect(context, 214, 15, 134, 21, 12, gr); - drawRoundRect(context, 214, 42, 134, 21, 12, gr); - drawRoundRect(context, 214, 69, 134, 21, 12, gr); - drawRoundRect(context, 214, 96, 134, 21, 12, gr); - drawRoundRect(context, 214, 123, 134, 21, 12, gr); - drawRoundRect(context, 214, 150, 134, 21, 12, gr); + 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; // 设置线段宽度 diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/monthStatistics/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/monthStatistics/index.vue index 9a758274..ec5c19d6 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/monthStatistics/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/monthStatistics/index.vue @@ -1,42 +1,44 @@ <template> - <div class='congestion'> + <div class="congestion"> <WgtTitle :title="'近一月感知事件时段分布统计'"></WgtTitle> <div class="board"> - <Empty v-show="!dataList || dataList.length <= 0" text="暂无数据..."></Empty> - <div v-show="dataList && dataList.length > 0" style="width: 450px;" class="charts keep-ratio " id="monthStatistics"> - </div> + <Empty + v-show="!dataList || dataList.length <= 0" + text="暂无数据..." + ></Empty> + <div + v-show="dataList && dataList.length > 0" + style="width: 450px" + class="charts keep-ratio" + id="monthStatistics" + ></div> </div> </div> </template> - -<script> -import WgtTitle from '../../../widgets/title' +<script> +import WgtTitle from "../../../widgets/title"; import * as echarts from "echarts"; import chartsStatistics from "./assets/charts"; -import { getDailyCumulativeMonth } from '../../../../../../../api/event/perceiveEvent'; +import { getDailyCumulativeMonth } from "../../../../../../../api/event/perceiveEvent"; export default { - name: 'MonthStatistics', + name: "MonthStatistics", components: { - WgtTitle + WgtTitle, }, data() { return { - dataList: [] - } - }, - - created() { - + dataList: [], + }; }, - methods: { - }, + created() {}, + methods: {}, mounted() { setTimeout(() => { this.$nextTick(() => { - var myChart = echarts.init(document.getElementById('monthStatistics')); + var myChart = echarts.init(document.getElementById("monthStatistics")); getDailyCumulativeMonth().then((res) => { console.log(res); if (res.code == 200) { @@ -64,31 +66,34 @@ export default { myChart.setOption(chartsStatistics); } - }); }); }); }, -} +}; </script> - -<style lang='scss' scoped> + +<style lang="scss" scoped> .congestion { width: 100%; .board { height: 200px; width: 100%; - padding: 0px 20px; + // padding: 0px 20px; background: linear-gradient(180deg, rgba(6, 66, 88, 0.2) 0%, #064258 100%); border-radius: 5px 5px 5px 5px; opacity: 1; 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; justify-content: space-between; align-items: center; - } } @@ -97,4 +102,3 @@ export default { width: 100%; } </style> - \ No newline at end of file diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/index.vue index aac78436..74e7399f 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/index.vue @@ -6,10 +6,16 @@ <div class="checked">路段车流量Top10</div> <div>断面交通量Top10</div> </div> --> - <Empty v-show="!dataList || dataList.length <= 0" text="暂无数据..."></Empty> - <div v-show="dataList && dataList.length > 0" style="width: 450px;" class="charts keep-ratio" - id="situationEchartBox"></div> - + <Empty + v-show="!dataList || dataList.length <= 0" + text="暂无数据..." + ></Empty> + <div + v-show="dataList && dataList.length > 0" + style="width: 450px" + class="charts keep-ratio" + id="situationEchartBox" + ></div> </div> </div> </template> @@ -27,7 +33,7 @@ export default { }, data() { return { - dataList: [] + dataList: [], }; }, @@ -41,7 +47,7 @@ export default { getSectionPerceivedList().then((res) => { console.log(res); if (res.code == 200) { - this.dataList = res.data + this.dataList = res.data; let data = res.data; let texts = []; @@ -60,7 +66,7 @@ export default { }); }); }, - created() { }, + created() {}, methods: {}, }; </script> @@ -77,9 +83,12 @@ export default { border-radius: 5px 5px 5px 5px; opacity: 1; border: 1px solid; - border-image: linear-gradient(360deg, + border-image: linear-gradient( + 360deg, rgba(55, 231, 255, 0.3), - rgba(55, 231, 255, 0)) 1 1; + rgba(55, 231, 255, 0) + ) + 1 1; display: flex; justify-content: flex-start; align-items: center; diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/assets/charts.js index 32496833..2de31be1 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/assets/charts.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/assets/charts.js @@ -58,7 +58,7 @@ var options = { grid: { top: "15%", //上边距 right: "0", //右边距 - left: "0", //左边距 + left: "10px", //左边距 bottom: "0%", //下边距 containLabel: true, }, diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/index.vue index 02b0c23b..8e043c37 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railwayDay/index.vue @@ -1,42 +1,44 @@ <template> - <div class='congestion'> + <div class="congestion"> <WgtTitle :title="'路段日感知事件'"></WgtTitle> <div class="board"> - <Empty v-show="!dataList || dataList.length <= 0" text="暂无数据..."></Empty> - <div v-show="dataList && dataList.length > 0" style="width: 450px;" class="charts keep-ratio " id="railwayDay"> - </div> + <Empty + v-show="!dataList || dataList.length <= 0" + text="暂无数据..." + ></Empty> + <div + v-show="dataList && dataList.length > 0" + style="width: 450px" + class="charts keep-ratio" + id="railwayDay" + ></div> </div> </div> </template> <script> - -import WgtTitle from '../../../widgets/title' +import WgtTitle from "../../../widgets/title"; import * as echarts from "echarts"; import chartsStatistics from "./assets/charts"; -import { getSectionPerceivedNumber } from '../../../../../../../api/event/perceiveEvent'; +import { getSectionPerceivedNumber } from "../../../../../../../api/event/perceiveEvent"; export default { - name: 'RailWayDay', + name: "RailWayDay", components: { - WgtTitle + WgtTitle, }, data() { return { - dataList: [] - } + dataList: [], + }; }, - created() { - - }, - methods: { - - }, + created() {}, + methods: {}, mounted() { setTimeout(() => { this.$nextTick(() => { - var myChart = echarts.init(document.getElementById('railwayDay')); + var myChart = echarts.init(document.getElementById("railwayDay")); getSectionPerceivedNumber().then((res) => { if (res.code == 200) { this.dataList = res.data; @@ -44,9 +46,11 @@ export default { if (data.length > 0) { let texts = []; let datas = []; - const maxObject = data.reduce((prev, current) => (current.number > prev.number ? current : prev)); + const maxObject = data.reduce((prev, current) => + current.number > prev.number ? current : prev + ); - data.forEach(it => { + data.forEach((it) => { texts.push(it.sectionName); if (it.number == maxObject.number) { @@ -54,62 +58,69 @@ export default { value: it.number, itemStyle: { color: { - type: 'linear', + type: "linear", x: 0, y: 0, x2: 0, y2: 1, - colorStops: [{ - offset: 0, color: '#0469FF' // 0% 处的颜色 - }, { - offset: 1, color: '#699CFF' // 100% 处的颜色 - }], - global: false // 缺省为 false + colorStops: [ + { + offset: 0, + color: "#0469FF", // 0% 处的颜色 + }, + { + offset: 1, + color: "#699CFF", // 100% 处的颜色 + }, + ], + global: false, // 缺省为 false }, - borderRadius: 6 + borderRadius: 6, }, }); } else { datas.push({ value: it.number, itemStyle: { - borderRadius: 6 + borderRadius: 6, }, }); } - }); chartsStatistics.xAxis.data = texts; chartsStatistics.series[0].data = datas; } myChart.setOption(chartsStatistics); - } - }) + }); }); }); }, -} +}; </script> -<style lang='scss' scoped> +<style lang="scss" scoped> .congestion { width: 100%; .board { height: 200px; width: 100%; - padding: 0px 20px; + // padding: 0px 20px; background: linear-gradient(180deg, rgba(6, 66, 88, 0.2) 0%, #064258 100%); border-radius: 5px 5px 5px 5px; opacity: 1; 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; justify-content: space-between; align-items: center; - } } diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/assets/charts.js index 7fe27863..95cb7750 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/assets/charts.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/assets/charts.js @@ -21,6 +21,8 @@ window.colorList1 = ["#61D8FF", "#FFB905", "#6AE0BC"]; var options = { color: colorList, legend: { + width: "500px", + height: "160px", orient: "vertical", top: "10", icon: "circle", @@ -54,17 +56,25 @@ var options = { }, formatter: (params) => { let count = 0; + console.log("typeAnalysisData", typeAnalysisData); typeAnalysisData.forEach((it) => { count += it.value; }); + console.log("count", count); let obj = typeAnalysisData.filter((it) => { return it.name == params; }); - // console.log(obj); return `{ast|${obj[0].name}} {bst|${ Math.round((obj[0].value / count) * 100) || 0 }%} {cst|${obj[0].value}起}`; }, + pageIconColor: "#fff", + pageIconSize: 10, + pageTextStyle: { + color: "#fff", + }, + type: "scroll", + pageButtonPosition: "end", // data: typeAnalysisData?.map(x => x.name), }, tooltip: { diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/index.vue index a31445f2..206fcb26 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/typeAnalysis/index.vue @@ -1,179 +1,193 @@ <template> - <div class='congestion'> + <div class="congestion"> <WgtTitle :title="'感知事件类型分析'"></WgtTitle> <div class="board"> - <div class="charts keep-ratio " id="typeAnalysis"></div> + <div class="charts keep-ratio" id="typeAnalysis"></div> </div> </div> </template> <script> - -import WgtTitle from '../../../widgets/title' +import WgtTitle from "../../../widgets/title"; import * as echarts from "echarts"; import chartsStatistics from "./assets/charts"; -import { getWarningTypeDay } from '../../../../../../../api/event/perceiveEvent'; - +import { getWarningTypeDay } from "../../../../../../../api/event/perceiveEvent"; const drawRoundRect = (ctx, x, y, width, height, radius, gr) => { - // ctx, 矩形距离x坐标位置, 矩形距离y坐标的位置, 矩形的宽, 矩形的长,圆角角度 + // ctx, 矩形距离x坐标位置, 矩形距离y坐标的位置, 矩形的宽, 矩形的长,圆角角度 ctx.beginPath(); ctx.fillStyle = gr; - ctx.arc(x + radius, y + radius, radius, Math.PI, Math.PI * 3 / 2); + ctx.arc(x + radius, y + radius, radius, Math.PI, (Math.PI * 3) / 2); ctx.lineTo(width - radius + x, y); - ctx.arc(width - radius + x, radius + y, radius, Math.PI * 3 / 2, Math.PI * 2); + ctx.arc( + width - radius + x, + radius + y, + radius, + (Math.PI * 3) / 2, + Math.PI * 2 + ); ctx.lineTo(width + x, height + y - radius); - ctx.arc(width - radius + x, height - radius + y, radius, 0, Math.PI * 1 / 2); + ctx.arc( + width - radius + x, + height - radius + y, + radius, + 0, + (Math.PI * 1) / 2 + ); ctx.lineTo(radius + x, height + y); - ctx.arc(radius + x, height - radius + y, radius, Math.PI * 1 / 2, Math.PI); + ctx.arc(radius + x, height - radius + y, radius, (Math.PI * 1) / 2, Math.PI); ctx.closePath(); //ctx.stroke(); - ctx.fill() -} - + ctx.fill(); +}; export default { - name: 'TypeAnalysis', + name: "TypeAnalysis", components: { - WgtTitle + WgtTitle, }, data() { - return { - - } - }, - created() { - - }, - methods: { - + return {}; }, + created() {}, + methods: {}, mounted() { setTimeout(() => { this.$nextTick(() => { - var myChart = echarts.init(document.getElementById('typeAnalysis')); + var myChart = echarts.init(document.getElementById("typeAnalysis")); - - getWarningTypeDay().then(res => { + getWarningTypeDay().then((res) => { console.log(res); if (res.code == 200) { let data = res.data; - console.log("===================", data); - typeAnalysisData = []; - for (var i = 0; i < data.length; i++) { - var it = data[i]; - if (it.warningType == 1) { - typeAnalysisData.push({ - name: '交通拥堵', - value: it.number - }); - } - if (it.warningType == 2) { - typeAnalysisData.push({ - name: '行人', - value: it.number - }); - } - if (it.warningType == 3) { - typeAnalysisData.push({ - name: '非机动车', - value: it.number - }); - } - if (it.warningType == 4) { - typeAnalysisData.push({ - name: '停车', - value: it.number - }); - } - if (it.warningType == 5) { - typeAnalysisData.push({ - name: '倒车/逆行', - value: it.number - }); - } - if (it.warningType == 6) { - typeAnalysisData.push({ - name: '烟火', - value: it.number - }); - } - if (it.warningType == 7) { - typeAnalysisData.push({ - name: '撒落物', - value: it.number - }); - } - if (it.warningType == 8) { - typeAnalysisData.push({ - name: '异常天气', - value: it.number - }); - } - if (it.warningType == 9) { - typeAnalysisData.push({ - name: '护栏碰撞', - value: it.number - }); - } - - drawRoundRect(context, 250, 8 + i * 28, 120, 24, 12, gr) - } - - chartsStatistics.legend.data = typeAnalysisData?.map(x => x.name); - chartsStatistics.series[0].data = typeAnalysisData.map((item, index) => { - return { - ...item, - label: { - color: colorList[index] + console.log("===================22", data); + typeAnalysisData = [ + { + name: "交通拥堵", + warningType: 1, + value: 0, + }, + { + name: "行人", + warningType: 1, + value: 0, + }, + { + name: "非机动车", + warningType: 3, + value: 0, + }, + { + name: "停车", + warningType: 4, + value: 0, + }, + { + name: "倒车/逆行", + warningType: 5, + value: 0, + }, + { + name: "烟火", + warningType: 6, + value: 0, + }, + { + name: "撒落物", + warningType: 7, + value: 0, + }, + { + name: "异常天气", + warningType: 8, + value: 0, + }, + { + name: "护栏碰撞", + warningType: 9, + value: 0, + }, + { + name: "交通事故", + warningType: 10, + value: 0, + }, + { + name: "车辆故障", + warningType: 11, + value: 0, + }, + { + name: "其他", + warningType: 99, + value: 0, + }, + ]; + data.forEach((item, index) => { + typeAnalysisData.forEach((r) => { + if (item.warningType == r.warningType) { + r.value += item.number; } + }); + // drawRoundRect(context, 250, 8 + index * 28, 120, 24, 12, gr); + }); + + chartsStatistics.legend.data = typeAnalysisData?.map((x) => x.name); + chartsStatistics.series[0].data = typeAnalysisData.map( + (item, index) => { + return { + ...item, + label: { + color: colorList[index], + }, + }; } - }) - chartsStatistics.series[1].data = typeAnalysisData.map((item, index) => { - return { - ...item, - label: { - color: colorList[index] - } + ); + chartsStatistics.series[1].data = typeAnalysisData.map( + (item, index) => { + return { + ...item, + label: { + color: colorList[index], + }, + }; } - }) + ); } myChart.setOption(chartsStatistics); - }) + }); const domMap = document.getElementById("typeAnalysis"); let parentDiv = domMap.firstChild; // 创建canvas - let canvas = document.createElement('canvas'); + let canvas = document.createElement("canvas"); canvas.width = parentDiv.offsetWidth; canvas.height = parentDiv.offsetHeight; parentDiv.appendChild(canvas); - const context = canvas.getContext('2d'); + const context = canvas.getContext("2d"); // 填充渐变颜色 var gr = context.createLinearGradient(230, 0, 360, 0); // 颜色断点 - gr.addColorStop(1, 'rgba(92,197,255,0)'); - gr.addColorStop(0, 'rgba(92,197,255,0.5)'); - + gr.addColorStop(1, "rgba(92,197,255,0)"); + gr.addColorStop(0, "rgba(92,197,255,0.5)"); context.lineWidth = 1; // 设置线段宽度 // 绘制圆角矩形 - - // drawRoundRect(context, 260, 36, 120, 24, 12,gr) - // drawRoundRect(context, 260, 64, 120, 24, 12,gr) - // drawRoundRect(context, 260, 92, 120, 24, 12,gr) - // drawRoundRect(context, 260, 120, 120, 24, 12,gr) - // drawRoundRect(context, 260, 148, 120, 24, 12,gr) + drawRoundRect(context, 260, 6, 120, 24, 12, gr); + drawRoundRect(context, 260, 36, 120, 24, 12, gr); + drawRoundRect(context, 260, 64, 120, 24, 12, gr); + drawRoundRect(context, 260, 92, 120, 24, 12, gr); + drawRoundRect(context, 260, 120, 120, 24, 12, gr); }); }); }, -} +}; </script> - -<style lang='scss' scoped> + +<style lang="scss" scoped> .congestion { width: 100%; @@ -181,15 +195,23 @@ export default { height: 200px; width: 100%; padding: 0px 20px; - background: linear-gradient(180deg, rgba(6, 66, 88, 0.2) 0%, #06425888 100%); + background: linear-gradient( + 180deg, + rgba(6, 66, 88, 0.2) 0%, + #06425888 100% + ); border-radius: 5px 5px 5px 5px; opacity: 1; border: 1px solid; - border-image: linear-gradient(360deg, rgba(55, 231, 255, 0.1), rgba(55, 231, 255, 0)) 1 1; + border-image: linear-gradient( + 360deg, + rgba(55, 231, 255, 0.1), + rgba(55, 231, 255, 0) + ) + 1 1; display: flex; justify-content: space-between; align-items: center; - } } @@ -198,4 +220,3 @@ export default { width: 100%; } </style> - \ No newline at end of file diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/index.vue index c4379cb6..4cd1a98d 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/index.vue @@ -1,5 +1,5 @@ <template> - <div class='TrafficFlow'> + <div class="TrafficFlow"> <section class="content"> <Railway class="content-l" /> <div class="content-m"> @@ -10,7 +10,7 @@ <EventSource class="content-m-t" /> <DailyDisposal class="content-m-t" /> </div> - <div class="content-m" style="margin-right: 0;"> + <div class="content-m" style="margin-right: 0"> <MonthStatistice class="content-m-t" /> <TypeAnalysis class="content-m-t" /> </div> @@ -20,19 +20,19 @@ </section> </div> </template> - + <script> -import Railway from './components/railway/index.vue'; -import RailWayDay from './components/railwayDay/index.vue'; -import DayTotal from './components/dayTotal/index.vue'; -import EventSource from './components/eventSource/index.vue'; -import DailyDisposal from './components/dailyDisposal/index.vue'; -import TypeAnalysis from './components/typeAnalysis'; -import MonthStatistice from './components/monthStatistics/index.vue'; -import EventQuery from './components/eventQuery'; +import Railway from "./components/railway/index.vue"; +import RailWayDay from "./components/railwayDay/index.vue"; +import DayTotal from "./components/dayTotal/index.vue"; +import EventSource from "./components/eventSource/index.vue"; +import DailyDisposal from "./components/dailyDisposal/index.vue"; +import TypeAnalysis from "./components/typeAnalysis"; +import MonthStatistice from "./components/monthStatistics/index.vue"; +import EventQuery from "./components/eventQuery"; export default { - name: 'EventDetection', + name: "EventDetection", components: { Railway, RailWayDay, @@ -42,11 +42,11 @@ export default { TypeAnalysis, MonthStatistice, EventQuery, - } -} + }, +}; </script> - -<style lang='scss' scoped> + +<style lang="scss" scoped> .TrafficFlow { width: 100%; height: 100%; @@ -68,7 +68,7 @@ export default { pointer-events: none; margin-top: 19px; - >div { + > div { pointer-events: auto; } @@ -76,10 +76,8 @@ export default { width: calc(100% / 4 - 25px * 3); min-width: 475px; margin-right: 15px; - } - .content-m { display: inline-flex; flex-direction: column; @@ -107,13 +105,12 @@ export default { pointer-events: none; margin-top: 0px; - >div { + > div { pointer-events: auto; } .foot-w { width: 100%; - } .foot-l { @@ -130,4 +127,3 @@ export default { } } </style> - \ No newline at end of file diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/classification/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/classification/assets/charts.js index 0c5d9bd3..fd3edf39 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/classification/assets/charts.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/classification/assets/charts.js @@ -189,7 +189,7 @@ var options = { itemStyle: { normal: { borderRadius: "5", - borderWidth: 2, + borderWidth: 4, borderType: "solid", borderCap: "round", borderJoin: "round", diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/congestion/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/congestion/assets/charts.js index 46e65aa3..213ed6ef 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/congestion/assets/charts.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/congestion/assets/charts.js @@ -55,6 +55,10 @@ nameList.map((item, index) => { }); var options = { + tooltip: { + show: true, + trigger: "axis", + }, grid: { top: "5%", //上边距 right: "20px", //右边距 @@ -157,6 +161,9 @@ var options = { borderRadius: 6, }, }, + tooltip: { + show: false, + }, }, ], }; diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/flowstate/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/flowstate/assets/charts.js index a2ed2068..a6743533 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/flowstate/assets/charts.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/flowstate/assets/charts.js @@ -1,5 +1,9 @@ import * as echarts from "echarts"; var options = { + tooltip: { + show: true, + trigger: "axis", + }, axisPointer: { link: [ { @@ -127,7 +131,7 @@ var options = { ], series: [ { - name: "Evaporation", + name: "", type: "line", symbolSize: 0, lineStyle: { @@ -160,7 +164,7 @@ var options = { ], }, { - name: "Rainfall", + name: "", type: "line", symbol: "circle", symbolSize: 0, diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorQuery/data.js b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorQuery/data.js new file mode 100644 index 00000000..ceb40be9 --- /dev/null +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorQuery/data.js @@ -0,0 +1,43 @@ +export const searchFormList = [ + { + label: "路段名称:", + key: "ld", + // required: true, + type: "select", + options: { + options: [], + }, + }, + { + label: "指标名称:", + key: "type", + // required: true, + type: "select", + options: { + options: [ + { + value: "1", + label: "拥挤度", + }, + { + value: "2", + label: "饱和度", + }, + { + value: "3", + label: "交通组成特征指数", + }, + ], + }, + }, + { + label: "时间范围:", + key: "time", + // required: true, + type: "datePicker", + options: { + format: "yyyy-MM-dd", + type: "daterange", + }, + }, +]; diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorQuery/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorQuery/index.vue index b974fb6f..e365ea3e 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorQuery/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorQuery/index.vue @@ -1,12 +1,19 @@ <template> <div class='congestion'> <div class="buttonbar"> - <div class="button"> - <i class="el-icon-refresh-right"></i>刷新 - </div> - <div class="button"> - <i class="el-icon-upload2"></i>导出Excal - </div> + <ButtonGradient class="button"> + <template #prefix> + <i class="el-icon-refresh-right"></i> + </template> + 刷新 + </ButtonGradient> + <ButtonGradient class="button"> + <template #prefix> + <i class="el-icon-upload2"></i> + </template> + 导出 + </ButtonGradient> + <InputSearch style="width: 402px;margin-left: 1300px;" :formList="formList" @handleSearch="handleSearch" /> </div> <div class="board"> @@ -26,15 +33,29 @@ </el-table> </div> </div> + <!-- 分页 --> + <div class="footer"> + <Pagination @current-change="getData" @size-change="onSizeChange" width="'100%'" :page-sizes="[10, 20, 30, 40, 50]" + :page-size="pageSize" :current-page.sync="pageNum" layout="total, sizes, prev, pager, next" :total="50"> + </Pagination> + </div> </div> </template> <script> +import Pagination from "@screen/components/Pagination.vue"; +import ButtonGradient from "@screen/components/Buttons/ButtonGradient.vue"; +import InputSearch from "@screen/components/InputSearch/index.vue"; +import request from "@/utils/request"; +import { Message } from "element-ui"; +import { searchFormList } from './data.js' export default { name: 'IndicatorQuery', components: { - + Pagination, + ButtonGradient, + InputSearch }, data() { return { @@ -199,17 +220,46 @@ export default { name: '2640.78m', address: 'K100+000-K110+000' }, - ] + ], + formList: [], + pageSize: 10, + pageNum: 1 } }, - created() { - + // this.formList = searchFormList; + this.queryLdAll(); }, methods: { selectItem(index) { this.selectIndex = index; }, + getData() { + + }, + onSizeChange() { + + }, + handleSearch() { + + }, + queryLdAll() { + request({ + url: `/business/roadSection/listAll`, + method: "get", + }).then((result) => { + if (result.code != 200) return Message.error(result?.msg); + let lds = []; + result.data.forEach(it => { + lds.push({ + value: it.id, + label: it.sectionName + }) + }) + searchFormList[0].options.options = lds; + this.formList = searchFormList; + }); + } }, mounted() { @@ -303,7 +353,7 @@ export default { } .board { - height: 880px; + height: 829px; width: 100%; padding: 0px 0px; border-radius: 5px 5px 5px 5px; @@ -313,7 +363,7 @@ export default { align-items: center; flex-direction: column; margin-top: 20px; - + overflow-y: auto; .warningList { @@ -496,6 +546,14 @@ export default { } } + + .footer { + margin-top: 15px; + height: 36px; + display: flex; + align-items: center; + justify-content: center; + } } .charts { diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/auditAnalytics/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/auditAnalytics/assets/charts.js index 8d1412fa..5f088a5c 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/auditAnalytics/assets/charts.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/auditAnalytics/assets/charts.js @@ -1,391 +1,399 @@ var res = [ - { value: 50, name: '情报板发布' }, - { value: 1, name: '' }, - { value: 20, name: '微博发布' }, - { value: 1, name: '' }, - { value: 30, name: '服务网站' }, - { value: 1, name: '' }, - ]; - // var res = this.evaluatedCountList; - var data1 = [], data2 = [], data3 = [], legendData = []; - var curIndex = 0; - var index = 0; - let angle = 0; //角度,用来做简单的动画效果的 + { value: 50, name: "情报板发布" }, + { value: 20, name: "微博发布" }, + { value: 30, name: "服务网站" }, +]; +// var res = this.evaluatedCountList; +var data1 = [], + data2 = [], + data3 = [], + legendData = []; +var curIndex = 0; +var index = 0; +let angle = 0; //角度,用来做简单的动画效果的 - for (var i = 0; i < res.length; i++) { +for (var i = 0; i < res.length; i++) { + data1.push({ + value: res[i].value, + name: res[i].name, + }); + data2.push({ + value: res[i].value, + name: res[i].name, + itemStyle: { + opacity: 0.4, + }, + }); - data1.push({ - value: res[i].value, - name: res[i].name, - }) - data2.push({ - value: res[i].value, - name: res[i].name, - itemStyle: { - opacity: 0.4, - }, - }) + data3.push({ + value: res[i].value, + name: res[i].name, + itemStyle: { + opacity: 0.1, + }, + }); + if (res[i].name != "") legendData.push(res[i].name); +} - data3.push({ - value: res[i].value, - name: res[i].name, - itemStyle: { - opacity: 0.1, +var options = { + color: ["#5CC5FF", "#54EFD5", "#FD9666", "#5C8CFE", "#51D5AD"], + title: [ + { + text: "999", + top: "27%", + textAlign: "center", + left: "49%", + textStyle: { + color: "#ffffff", + fontSize: 30, + fontFamily: "PangMenZhengDao", }, - }) - if ( res[i].name != "" ) - legendData.push(res[i].name); - } - - var options = { - color: ['#5CC5FF', 'transparent', '#54EFD5', 'transparent', '#FD9666', 'transparent', '#5C8CFE', 'transparent', '#51D5AD', 'transparent'], - title: [ - { - text:'999', - top: '27%', - textAlign: 'center', - left: '49%', - textStyle: { - color: '#ffffff', - fontSize: 30, - fontFamily: 'PangMenZhengDao', - }, + }, + { + text: "总数", + top: "38%", + textAlign: "center", + left: "49%", + textStyle: { + color: "rgba(242, 252, 253, 0.84)", + fontSize: 14, + fontWeight: 400, }, - { - text: '总数', - top: '38%', - textAlign: 'center', - left: '49%', - textStyle: { - color: 'rgba(242, 252, 253, 0.84)', + }, + ], + grid: { + top: "3%", + left: "6%", + right: "6%", + bottom: "3%", + containLabel: true, + }, + tooltip: { + trigger: "item", + // formatter: '{b} : {c}:{d}' + }, + legend: { + orient: "vertical", + height: "80px", + // left: "10%", + top: "68%", + itemWidth: 10, + itemHeight: 10, + icon: "circle", + textStyle: { + color: "#ffffff", + fontSize: 14, + lineHeight: 22, + rich: { + text: { + width: 80, + marginLeft: 32, + fontSize: 14, + }, + number: { + fontSize: 14, + color: "#37E7FF", + marginLeft: 32, + fontWeight: "bold", + }, + unit: { fontSize: 14, - fontWeight: 400, }, }, - ], - grid: { - top: '3%', - left: '6%', - right: '6%', - bottom: '3%', - containLabel: true }, - tooltip: { - trigger: 'item', - formatter: '{b} : {c}:{d}' - }, - legend: { - orient: '', - left: '10%', - top: '68%', - itemWidth: 10, - itemHeight: 10, - icon:"circle", - textStyle: { - color: "#ffffff", - fontSize: 14, - lineHeight: 22, - rich: { - text: { - marginLeft:32, - fontSize: 14, - }, - number: { - fontSize: 14, - color: "#37E7FF", - marginLeft:32, - fontWeight: 'bold' - }, - unit: { - fontSize: 14, - } + data: legendData, + formatter(name) { + if (name == "") return ""; + const newData = res; + let tarValue = 0; + let total = 0; + for (let i = 0; i < newData.length; i++) { + total += newData[i].value; + if (newData[i].name === name) { + tarValue = newData[i].value; } - }, - data: legendData, - formatter(name) { - if ( name == "" ) return ""; - const newData = res; - let tarValue = 0; - let total = 0; - for (let i = 0; i < newData.length; i++) { - total += newData[i].value; - if (newData[i].name === name) { - tarValue = newData[i].value; - } - } - var percert = total == 0 ? 0 : ((tarValue / total) * 100).toFixed(2); - const arr = name + ' ' + tarValue; - return `{text|${name}} {number|${percert}%}`;; - }, + } + var percert = total == 0 ? 0 : ((tarValue / total) * 100).toFixed(2); + const arr = name + " " + tarValue; + return `{text|${name}} {number|${percert}%}`; + }, + pageIconColor: "#fff", + pageIconSize: 10, + pageTextStyle: { + color: "#fff", }, - series: [ - /** 饼图上刻度 */ + type: "scroll", + pageButtonPosition: "end", + }, + series: [ + /** 饼图上刻度 */ { - type: 'gauge', - center: ['50%', '35%'], - radius: '40%', // 错位调整此处 + type: "gauge", + center: ["50%", "35%"], + radius: "40%", // 错位调整此处 startAngle: 0, endAngle: 360, splitNumber: 52, axisLine: { show: false }, - splitLine: { + splitLine: { // length: 39, - length: '2', + length: "2", lineStyle: { width: 5, - color: '#5CC5FF' - } + color: "#5CC5FF", + }, }, axisTick: { show: false }, - axisLabel: { show: false } + axisLabel: { show: false }, }, - /** 绘制外部圆弧-2-开始圆点 <left-top> */ + /** 绘制外部圆弧-2-开始圆点 <left-top> */ { - type: 'custom', - coordinateSystem: 'none', + type: "custom", + coordinateSystem: "none", renderItem: (params, api) => { let x0 = api.getWidth() / 2; let y0 = api.getHeight() / 2 - 59; - let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50; + let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.5; return { - type: 'circle', + type: "circle", shape: { /** 角度175° 外弧2开始角度 */ - cx: x0 + r * Math.cos((350 + -angle) * Math.PI / 180), - cy: y0 + r * Math.sin((350 + -angle) * Math.PI / 180), - r: 4 + cx: x0 + r * Math.cos(((350 + -angle) * Math.PI) / 180), + cy: y0 + r * Math.sin(((350 + -angle) * Math.PI) / 180), + r: 4, }, style: { - fill: '#5BC4FF', - stroke: '#5BC4FF' + fill: "#5BC4FF", + stroke: "#5BC4FF", }, - silent: true - } + silent: true, + }; }, - data: [0] + data: [0], }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - return { - type: 'arc', - shape: { - cx: api.getWidth() / 2, - cy: api.getHeight() / 2 - 59, - r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50, - startAngle: (350 + -angle) * Math.PI / 180, - endAngle: (120 + -angle) * Math.PI / 180 - }, - style: { - fill: 'transparent', - stroke: '#5BC4FF66', - lineWidth: 2.6 - }, - silent: true - } - }, - data: [0] + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + return { + type: "arc", + shape: { + cx: api.getWidth() / 2, + cy: api.getHeight() / 2 - 59, + r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.5, + startAngle: ((350 + -angle) * Math.PI) / 180, + endAngle: ((120 + -angle) * Math.PI) / 180, + }, + style: { + fill: "transparent", + stroke: "#5BC4FF66", + lineWidth: 2.6, + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - let x0 = api.getWidth() / 2; - let y0 = api.getHeight() / 2 - 59; - let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50; - return { - type: 'circle', - shape: { - /** 角度175° 外弧2开始角度 */ - cx: x0 + r * Math.cos((150 + -angle) * Math.PI / 180), - cy: y0 + r * Math.sin((150 + -angle) * Math.PI / 180), - r: 4 - }, - style: { - fill: '#5BC4FF', - stroke: '#5BC4FF' - }, - silent: true - } - }, - data: [0] + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + let x0 = api.getWidth() / 2; + let y0 = api.getHeight() / 2 - 59; + let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.5; + return { + type: "circle", + shape: { + /** 角度175° 外弧2开始角度 */ + cx: x0 + r * Math.cos(((150 + -angle) * Math.PI) / 180), + cy: y0 + r * Math.sin(((150 + -angle) * Math.PI) / 180), + r: 4, + }, + style: { + fill: "#5BC4FF", + stroke: "#5BC4FF", + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - return { - type: 'arc', - shape: { - cx: api.getWidth() / 2, - cy: api.getHeight() / 2 - 59, - r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50, - startAngle: (150 + -angle) * Math.PI / 180, - endAngle: (-30 + -angle) * Math.PI / 180 - }, - style: { - fill: 'transparent', - stroke: '#5BC4FF66', - lineWidth: 2.6 - }, - silent: true - } + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + return { + type: "arc", + shape: { + cx: api.getWidth() / 2, + cy: api.getHeight() / 2 - 59, + r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.5, + startAngle: ((150 + -angle) * Math.PI) / 180, + endAngle: ((-30 + -angle) * Math.PI) / 180, }, - data: [0] - }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - let x0 = api.getWidth() / 2; - let y0 = api.getHeight() / 2 - 59; - let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56; - return { - type: 'circle', - shape: { - /** 角度175° 外弧2开始角度 */ - cx: x0 + r * Math.cos((590 + -angle) * Math.PI / 180), - cy: y0 + r * Math.sin((590 + -angle) * Math.PI / 180), - r: 4 - }, - style: { - fill: '#5BC4FF', - stroke: '#5BC4FF' - }, - silent: true - } - }, - data: [0] + style: { + fill: "transparent", + stroke: "#5BC4FF66", + lineWidth: 2.6, + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - return { - type: 'arc', - shape: { - cx: api.getWidth() / 2, - cy: api.getHeight() / 2 - 59, - r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56, - startAngle: (590 + -angle) * Math.PI / 180, - endAngle: (350 + -angle) * Math.PI / 180 - }, - style: { - fill: 'transparent', - stroke: '#5BC4FF66', - lineWidth: 2.6 - }, - silent: true - } - }, - data: [0] + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + let x0 = api.getWidth() / 2; + let y0 = api.getHeight() / 2 - 59; + let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.56; + return { + type: "circle", + shape: { + /** 角度175° 外弧2开始角度 */ + cx: x0 + r * Math.cos(((590 + -angle) * Math.PI) / 180), + cy: y0 + r * Math.sin(((590 + -angle) * Math.PI) / 180), + r: 4, + }, + style: { + fill: "#5BC4FF", + stroke: "#5BC4FF", + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - let x0 = api.getWidth() / 2; - let y0 = api.getHeight() / 2 - 59; - let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56; - return { - type: 'circle', - shape: { - /** 角度175° 外弧2开始角度 */ - cx: x0 + r * Math.cos((90 + -angle) * Math.PI / 180), - cy: y0 + r * Math.sin((90 + -angle) * Math.PI / 180), - r: 4 - }, - style: { - fill: '#5BC4FF', - stroke: '#5BC4FF' - }, - silent: true - } - }, - data: [0] + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + return { + type: "arc", + shape: { + cx: api.getWidth() / 2, + cy: api.getHeight() / 2 - 59, + r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.56, + startAngle: ((590 + -angle) * Math.PI) / 180, + endAngle: ((350 + -angle) * Math.PI) / 180, + }, + style: { + fill: "transparent", + stroke: "#5BC4FF66", + lineWidth: 2.6, + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - return { - type: 'arc', - shape: { - cx: api.getWidth() / 2, - cy: api.getHeight() / 2 - 59, - r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56, - startAngle: (90 + -angle) * Math.PI / 180, - endAngle: (160 + -angle) * Math.PI / 180 - }, - style: { - fill: 'transparent', - stroke: '#5BC4FF66', - lineWidth: 2.6 - }, - silent: true - } - }, - data: [0] + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + let x0 = api.getWidth() / 2; + let y0 = api.getHeight() / 2 - 59; + let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.56; + return { + type: "circle", + shape: { + /** 角度175° 外弧2开始角度 */ + cx: x0 + r * Math.cos(((90 + -angle) * Math.PI) / 180), + cy: y0 + r * Math.sin(((90 + -angle) * Math.PI) / 180), + r: 4, + }, + style: { + fill: "#5BC4FF", + stroke: "#5BC4FF", + }, + silent: true, + }; }, - { - type: 'pie', - radius: ['45%', '39%'], - center: ['50%', '35%'], - z: 10, - label: { - show: false, - position: 'center', - formatter: (params) => { - return params.name + "\r\n" + params.value + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + return { + type: "arc", + shape: { + cx: api.getWidth() / 2, + cy: api.getHeight() / 2 - 59, + r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.56, + startAngle: ((90 + -angle) * Math.PI) / 180, + endAngle: ((160 + -angle) * Math.PI) / 180, }, - rich: { - total: { - fontSize: 16, - color: '#04F5FE', - }, - efficiency: { - fontSize: 12, - color: '#00FD6D', - }, + style: { + fill: "transparent", + stroke: "#5BC4FF66", + lineWidth: 2.6, }, - color: '#FFFFFF', - fontSize: 12, - lineHeight: 16, + silent: true, + }; + }, + data: [0], + }, + { + type: "pie", + radius: ["45%", "39%"], + center: ["50%", "35%"], + z: 10, + label: { + show: false, + position: "center", + formatter: (params) => { + return params.name + "\r\n" + params.value; }, - data: data1, - labelLine: { - show: false, + rich: { + total: { + fontSize: 16, + color: "#04F5FE", + }, + efficiency: { + fontSize: 12, + color: "#00FD6D", + }, }, - itemStyle: { - normal: { - borderWidth: 6, - shadowBlur: 10, - borderRadius: 50, // 圆角 - } - } + color: "#FFFFFF", + fontSize: 12, + lineHeight: 16, }, - { - type: 'pie', - radius: ['25%', '39%'], - center: ['50%', '35%'], - label: { - show: false, + data: data1, + labelLine: { + show: false, + }, + itemStyle: { + normal: { + borderRadius: "5", + borderWidth: 4, + borderType: "solid", + borderColor: "#0C2D3A", }, - data: data2, - labelLine: { - show: false, + }, + }, + { + type: "pie", + radius: ["25%", "39%"], + center: ["50%", "35%"], + label: { + show: false, + }, + data: data2, + labelLine: { + show: false, + }, + itemStyle: { + normal: { + borderRadius: "5", + borderWidth: 4, + borderType: "solid", + borderColor: "#0C2D3A", }, - itemStyle: { - normal: { - borderWidth: 6, - shadowBlur: 10, - borderRadius: 0, // 圆角 - } - } }, - ], - - }; + }, + ], +}; - export default options \ No newline at end of file +export default options; diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/channelAnalytics/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/channelAnalytics/assets/charts.js index d57f651c..435b6e5b 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/channelAnalytics/assets/charts.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/channelAnalytics/assets/charts.js @@ -1,392 +1,406 @@ var res = [ - { value: 20, name: '情报板发布' }, - { value: 1, name: '' }, - { value: 20, name: '微博发布' }, - { value: 1, name: '' }, - { value: 20, name: '服务网站' }, - { value: 1, name: '' }, - { value: 20, name: '短信发布' }, - { value: 1, name: '' }, - { value: 20, name: '微信发布' }, - { value: 1, name: '' }, - ]; - // var res = this.evaluatedCountList; - var data1 = [], data2 = [], data3 = [], legendData = []; - var curIndex = 0; - var index = 0; + { value: 20, name: "情报板发布" }, + { value: 20, name: "微博发布" }, + { value: 20, name: "服务网站" }, + { value: 20, name: "短信发布" }, + { value: 20, name: "微信发布" }, +]; +// var res = this.evaluatedCountList; +var data1 = [], + data2 = [], + data3 = [], + legendData = []; +var curIndex = 0; +var index = 0; - for (var i = 0; i < res.length; i++) { - data1.push({ - value: res[i].value, - name: res[i].name, - }) - data2.push({ - value: res[i].value, - name: res[i].name, - itemStyle: { - opacity: 0.4, - }, - }) +for (var i = 0; i < res.length; i++) { + data1.push({ + value: res[i].value, + name: res[i].name, + }); + data2.push({ + value: res[i].value, + name: res[i].name, + itemStyle: { + opacity: 0.4, + }, + }); - data3.push({ - value: res[i].value, - name: res[i].name, - itemStyle: { - opacity: 0.1, + data3.push({ + value: res[i].value, + name: res[i].name, + itemStyle: { + opacity: 0.1, + }, + }); + if (res[i].name != "") legendData.push(res[i].name); +} +let angle = 0; //角度,用来做简单的动画效果的 +var options = { + color: ["#68F4DD", "#FFDD69", "#3CC3F0", "#5C8CFE", "#51D5AD"], + title: [ + { + text: "999", + top: "27%", + textAlign: "center", + left: "49%", + textStyle: { + color: "#ffffff", + fontSize: 30, + fontFamily: "PangMenZhengDao", }, - }) - if ( res[i].name != "" ) - legendData.push(res[i].name); - } - let angle = 0; //角度,用来做简单的动画效果的 - var options = { - color: ['#68F4DD', 'transparent', '#FFDD69', 'transparent', '#3CC3F0', 'transparent', '#5C8CFE', 'transparent', '#51D5AD', 'transparent'], - title: [ - { - text:'999', - top: '27%', - textAlign: 'center', - left: '49%', - textStyle: { - color: '#ffffff', - fontSize: 30, - fontFamily: 'PangMenZhengDao', - }, + }, + { + text: "总数", + top: "38%", + textAlign: "center", + left: "49%", + textStyle: { + color: "rgba(242, 252, 253, 0.84)", + fontSize: 14, + fontWeight: 400, }, - { - text: '总数', - top: '38%', - textAlign: 'center', - left: '49%', - textStyle: { - color: 'rgba(242, 252, 253, 0.84)', + }, + ], + grid: { + top: "3%", + left: "6%", + right: "6%", + bottom: "3%", + containLabel: true, + }, + tooltip: { + trigger: "item", + // formatter: "{b} : {c}:{d}", + }, + legend: { + orient: "vertical", + // width: "350px", + height: "80px", + // left: "10%", + top: "68%", + itemWidth: 10, + itemHeight: 10, + icon: "circle", + textStyle: { + color: "#ffffff", + fontSize: 12, + lineHeight: 22, + rich: { + text: { + width: 80, + marginLeft: 32, + fontSize: 14, + }, + number: { + fontSize: 14, + color: "#37E7FF", + marginLeft: 32, + fontWeight: "bold", + }, + unit: { fontSize: 14, - fontWeight: 400, }, }, - ], - grid: { - top: '3%', - left: '6%', - right: '6%', - bottom: '3%', - containLabel: true - }, - tooltip: { - trigger: 'item', - formatter: '{b} : {c}:{d}' }, - legend: { - orient: '', - left: '10%', - top: '68%', - itemWidth: 10, - itemHeight: 10, - icon:"circle", - textStyle: { - color: "#ffffff", - fontSize: 14, - lineHeight: 22, - rich: { - text: { - marginLeft:32, - fontSize: 14, - }, - number: { - fontSize: 14, - color: "#37E7FF", - marginLeft:32, - fontWeight: 'bold' - }, - unit: { - fontSize: 14, - } - } - }, - data: legendData, - formatter(name) { - const newData = res; - let tarValue = 0; - let total = 0; - for (let i = 0; i < newData.length; i++) { - total += newData[i].value; - if (newData[i].name === name) { - tarValue = newData[i].value; - } + data: legendData, + formatter(name) { + const newData = res; + let tarValue = 0; + let total = 0; + for (let i = 0; i < newData.length; i++) { + total += newData[i].value; + if (newData[i].name === name) { + tarValue = newData[i].value; } - var percert = total == 0 ? 0 : ((tarValue / total) * 100).toFixed(2); - const arr = name + ' ' + tarValue; - return `{text|${name}} {number|${percert}%}`;; - }, + } + var percert = total == 0 ? 0 : ((tarValue / total) * 100).toFixed(2); + const arr = name + " " + tarValue; + return `{text|${name}} {number|${percert}%}`; + }, + pageIconColor: "#fff", + pageIconSize: 10, + pageTextStyle: { + color: "#fff", }, - series: [ - /** 饼图上刻度 */ + type: "scroll", + pageButtonPosition: "end", + }, + series: [ + /** 饼图上刻度 */ { - type: 'gauge', - center: ['50%', '35%'], - radius: '46%', // 错位调整此处 + type: "gauge", + center: ["50%", "35%"], + radius: "46%", // 错位调整此处 startAngle: 0, endAngle: 360, splitNumber: 52, axisLine: { show: false }, - splitLine: { + splitLine: { // length: 39, - length: '2', + length: "2", lineStyle: { width: 5, - color: '#5CC5FF' - } + color: "#5CC5FF", + }, }, axisTick: { show: false }, - axisLabel: { show: false } + axisLabel: { show: false }, }, - /** 绘制外部圆弧-2-开始圆点 <left-top> */ + /** 绘制外部圆弧-2-开始圆点 <left-top> */ { - type: 'custom', - coordinateSystem: 'none', + type: "custom", + coordinateSystem: "none", renderItem: (params, api) => { let x0 = api.getWidth() / 2; let y0 = api.getHeight() / 2 - 59; - let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50; + let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.5; return { - type: 'circle', + type: "circle", shape: { /** 角度175° 外弧2开始角度 */ - cx: x0 + r * Math.cos((350 + -angle) * Math.PI / 180), - cy: y0 + r * Math.sin((350 + -angle) * Math.PI / 180), - r: 4 + cx: x0 + r * Math.cos(((350 + -angle) * Math.PI) / 180), + cy: y0 + r * Math.sin(((350 + -angle) * Math.PI) / 180), + r: 4, }, style: { - fill: '#5BC4FF', - stroke: '#5BC4FF' + fill: "#5BC4FF", + stroke: "#5BC4FF", }, - silent: true - } + silent: true, + }; }, - data: [0] + data: [0], }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - return { - type: 'arc', - shape: { - cx: api.getWidth() / 2, - cy: api.getHeight() / 2 - 59, - r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50, - startAngle: (350 + -angle) * Math.PI / 180, - endAngle: (120 + -angle) * Math.PI / 180 - }, - style: { - fill: 'transparent', - stroke: '#5BC4FF66', - lineWidth: 2.6 - }, - silent: true - } - }, - data: [0] + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + return { + type: "arc", + shape: { + cx: api.getWidth() / 2, + cy: api.getHeight() / 2 - 59, + r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.5, + startAngle: ((350 + -angle) * Math.PI) / 180, + endAngle: ((120 + -angle) * Math.PI) / 180, + }, + style: { + fill: "transparent", + stroke: "#5BC4FF66", + lineWidth: 2.6, + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - let x0 = api.getWidth() / 2; - let y0 = api.getHeight() / 2 - 59; - let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50; - return { - type: 'circle', - shape: { - /** 角度175° 外弧2开始角度 */ - cx: x0 + r * Math.cos((150 + -angle) * Math.PI / 180), - cy: y0 + r * Math.sin((150 + -angle) * Math.PI / 180), - r: 4 - }, - style: { - fill: '#5BC4FF', - stroke: '#5BC4FF' - }, - silent: true - } - }, - data: [0] + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + let x0 = api.getWidth() / 2; + let y0 = api.getHeight() / 2 - 59; + let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.5; + return { + type: "circle", + shape: { + /** 角度175° 外弧2开始角度 */ + cx: x0 + r * Math.cos(((150 + -angle) * Math.PI) / 180), + cy: y0 + r * Math.sin(((150 + -angle) * Math.PI) / 180), + r: 4, + }, + style: { + fill: "#5BC4FF", + stroke: "#5BC4FF", + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - return { - type: 'arc', - shape: { - cx: api.getWidth() / 2, - cy: api.getHeight() / 2 - 59, - r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50, - startAngle: (150 + -angle) * Math.PI / 180, - endAngle: (-30 + -angle) * Math.PI / 180 - }, - style: { - fill: 'transparent', - stroke: '#5BC4FF66', - lineWidth: 2.6 - }, - silent: true - } + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + return { + type: "arc", + shape: { + cx: api.getWidth() / 2, + cy: api.getHeight() / 2 - 59, + r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.5, + startAngle: ((150 + -angle) * Math.PI) / 180, + endAngle: ((-30 + -angle) * Math.PI) / 180, }, - data: [0] - }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - let x0 = api.getWidth() / 2; - let y0 = api.getHeight() / 2 - 59; - let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56; - return { - type: 'circle', - shape: { - /** 角度175° 外弧2开始角度 */ - cx: x0 + r * Math.cos((590 + -angle) * Math.PI / 180), - cy: y0 + r * Math.sin((590 + -angle) * Math.PI / 180), - r: 4 - }, - style: { - fill: '#5BC4FF', - stroke: '#5BC4FF' - }, - silent: true - } - }, - data: [0] + style: { + fill: "transparent", + stroke: "#5BC4FF66", + lineWidth: 2.6, + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - return { - type: 'arc', - shape: { - cx: api.getWidth() / 2, - cy: api.getHeight() / 2 - 59, - r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56, - startAngle: (590 + -angle) * Math.PI / 180, - endAngle: (350 + -angle) * Math.PI / 180 - }, - style: { - fill: 'transparent', - stroke: '#5BC4FF66', - lineWidth: 2.6 - }, - silent: true - } - }, - data: [0] + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + let x0 = api.getWidth() / 2; + let y0 = api.getHeight() / 2 - 59; + let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.56; + return { + type: "circle", + shape: { + /** 角度175° 外弧2开始角度 */ + cx: x0 + r * Math.cos(((590 + -angle) * Math.PI) / 180), + cy: y0 + r * Math.sin(((590 + -angle) * Math.PI) / 180), + r: 4, + }, + style: { + fill: "#5BC4FF", + stroke: "#5BC4FF", + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - let x0 = api.getWidth() / 2; - let y0 = api.getHeight() / 2 - 59; - let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56; - return { - type: 'circle', - shape: { - /** 角度175° 外弧2开始角度 */ - cx: x0 + r * Math.cos((90 + -angle) * Math.PI / 180), - cy: y0 + r * Math.sin((90 + -angle) * Math.PI / 180), - r: 4 - }, - style: { - fill: '#5BC4FF', - stroke: '#5BC4FF' - }, - silent: true - } - }, - data: [0] + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + return { + type: "arc", + shape: { + cx: api.getWidth() / 2, + cy: api.getHeight() / 2 - 59, + r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.56, + startAngle: ((590 + -angle) * Math.PI) / 180, + endAngle: ((350 + -angle) * Math.PI) / 180, + }, + style: { + fill: "transparent", + stroke: "#5BC4FF66", + lineWidth: 2.6, + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - return { - type: 'arc', - shape: { - cx: api.getWidth() / 2, - cy: api.getHeight() / 2 - 59, - r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56, - startAngle: (90 + -angle) * Math.PI / 180, - endAngle: (160 + -angle) * Math.PI / 180 - }, - style: { - fill: 'transparent', - stroke: '#5BC4FF66', - lineWidth: 2.6 - }, - silent: true - } - }, - data: [0] + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + let x0 = api.getWidth() / 2; + let y0 = api.getHeight() / 2 - 59; + let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.56; + return { + type: "circle", + shape: { + /** 角度175° 外弧2开始角度 */ + cx: x0 + r * Math.cos(((90 + -angle) * Math.PI) / 180), + cy: y0 + r * Math.sin(((90 + -angle) * Math.PI) / 180), + r: 4, + }, + style: { + fill: "#5BC4FF", + stroke: "#5BC4FF", + }, + silent: true, + }; }, - { - type: 'pie', - radius: ['45%', '40%'], - center: ['50%', '35%'], - z: 10, - label: { - show: false, - position: 'center', - formatter: (params) => { - return params.name + "\r\n" + params.value + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + return { + type: "arc", + shape: { + cx: api.getWidth() / 2, + cy: api.getHeight() / 2 - 59, + r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.56, + startAngle: ((90 + -angle) * Math.PI) / 180, + endAngle: ((160 + -angle) * Math.PI) / 180, }, - rich: { - total: { - fontSize: 16, - color: '#04F5FE', - }, - efficiency: { - fontSize: 12, - color: '#00FD6D', - }, + style: { + fill: "transparent", + stroke: "#5BC4FF66", + lineWidth: 2.6, }, - color: '#FFFFFF', - fontSize: 12, - lineHeight: 16, + silent: true, + }; + }, + data: [0], + }, + { + type: "pie", + radius: ["45%", "40%"], + center: ["50%", "35%"], + + z: 10, + label: { + show: false, + position: "center", + formatter: (params) => { + return params.name + "\r\n" + params.value; }, - data: data1, - labelLine: { - show: false, + rich: { + total: { + fontSize: 16, + color: "#04F5FE", + }, + efficiency: { + fontSize: 12, + color: "#00FD6D", + }, }, - itemStyle: { - normal: { - borderWidth: 6, - shadowBlur: 10, - borderRadius: 50, // 圆角 - } - } + color: "#FFFFFF", + fontSize: 12, + lineHeight: 16, }, - { - type: 'pie', - radius: ['29%', '40%'], - center: ['50%', '35%'], - label: { - show: false, + data: data1, + labelLine: { + show: false, + }, + itemStyle: { + // normal: { + // borderWidth: 4, + // shadowBlur: 10, + // borderRadius: 50, // 圆角 + // }, + normal: { + borderRadius: "5", + borderWidth: 4, + borderType: "solid", + borderColor: "#0C2D3A", }, - data: data2, - labelLine: { - show: false, + }, + }, + { + type: "pie", + radius: ["29%", "40%"], + center: ["50%", "35%"], + label: { + show: false, + }, + data: data2, + labelLine: { + show: false, + }, + itemStyle: { + normal: { + borderRadius: "5", + borderWidth: 8, + borderType: "solid", + borderColor: "#0C2D3A", }, - itemStyle: { - normal: { - borderWidth: 6, - shadowBlur: 10, - borderRadius: 0, // 圆角 - } - } }, - ], - - }; + }, + ], +}; - export default options \ No newline at end of file +export default options; diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/eventTypeAnalysis/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/eventTypeAnalysis/assets/charts.js index 4c0891f5..6b71da75 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/eventTypeAnalysis/assets/charts.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/eventTypeAnalysis/assets/charts.js @@ -1,25 +1,16 @@ var res = [ - { value: 20, name: '交通事故' }, - { value: 1, name: '' }, - { value: 20, name: '车辆故障' }, - { value: 1, name: '' }, - { value: 15, name: '路障清除' }, - { value: 1, name: '' }, - { value: 10, name: '交通管制' }, - { value: 1, name: '' }, - { value: 5, name: '道路拥堵' }, - { value: 1, name: '' }, - { value: 5, name: '异常天气' }, - { value: 1, name: '' }, - { value: 5, name: '其他事件' }, - { value: 1, name: '' }, - { value: 10, name: '施工建设' }, - { value: 1, name: '' }, - { value: 10, name: '服务区异常' }, - { value: 1, name: '' }, - ]; - let angle = 0; //角度,用来做简单的动画效果的 - + { value: 20, name: "交通事故" }, + { value: 20, name: "车辆故障" }, + { value: 15, name: "路障清除" }, + { value: 10, name: "交通管制" }, + { value: 5, name: "道路拥堵" }, + { value: 5, name: "异常天气" }, + { value: 5, name: "其他事件" }, + { value: 10, name: "施工建设" }, + { value: 10, name: "服务区异常" }, +]; +let angle = 0; //角度,用来做简单的动画效果的 + //获取圆上面某点的坐标(x0,y0表示坐标,r半径,angle角度) function getCirlPoint(x0, y0, r, angle) { let x1 = x0 + r * Math.cos((angle * Math.PI) / 180); @@ -30,383 +21,405 @@ function getCirlPoint(x0, y0, r, angle) { }; } - // var res = this.evaluatedCountList; - var data1 = [], data2 = [], data3 = [], legendData = []; - var curIndex = 0; - var index = 0; +// var res = this.evaluatedCountList; +var data1 = [], + data2 = [], + data3 = [], + legendData = []; +var curIndex = 0; +var index = 0; - for (var i = 0; i < res.length; i++) { - data1.push({ - value: res[i].value, - name: res[i].name, - }) - data2.push({ - value: res[i].value, - name: res[i].name, - itemStyle: { - opacity: 0.4, - }, - }) +for (var i = 0; i < res.length; i++) { + data1.push({ + value: res[i].value, + name: res[i].name, + }); + data2.push({ + value: res[i].value, + name: res[i].name, + itemStyle: { + opacity: 0.4, + }, + }); - data3.push({ - value: res[i].value, - name: res[i].name, - itemStyle: { - opacity: 0.1, - }, - }) - if ( res[i].name != "" ) - legendData.push(res[i].name); - } + data3.push({ + value: res[i].value, + name: res[i].name, + itemStyle: { + opacity: 0.1, + }, + }); + if (res[i].name != "") legendData.push(res[i].name); +} - var options = { - color: ['#2867FF', 'transparent', '#58C3FF', 'transparent', '#FF6A3B', 'transparent','#FDA474', 'transparent','#FEE58F','transparent', '#8DFEBF','transparent', '#66F4DC', 'transparent','#33E27D', 'transparent','#5D8CFE','transparent',], - title: [ - { - text:'999', - top: '27%', - textAlign: 'center', - left: '49%', - textStyle: { - color: '#ffffff', - fontSize: 30, - fontFamily: 'PangMenZhengDao', - }, - }, - { - text: '总数', - top: '38%', - textAlign: 'center', - left: '49%', - textStyle: { - color: 'rgba(242, 252, 253, 0.84)', - fontSize: 14, - fontWeight: 400, - }, +var options = { + color: [ + "#2867FF", + "#58C3FF", + "#FF6A3B", + "#FDA474", + "#FEE58F", + "#8DFEBF", + "#66F4DC", + "#33E27D", + "#5D8CFE", + ], + title: [ + { + text: "999", + top: "27%", + textAlign: "center", + left: "49%", + textStyle: { + color: "#ffffff", + fontSize: 30, + fontFamily: "PangMenZhengDao", }, - ], - grid: { - top: '38%', - left: '6%', - right: '6%', - bottom: '3%', - containLabel: true - }, - tooltip: { - trigger: 'item', - formatter: '{b} : {c}:{d}' }, - legend: { - orient: '', - left: '0%', - top: '68%', - itemWidth: 10, - itemHeight: 10, - icon:"circle", + { + text: "总数", + top: "38%", + textAlign: "center", + left: "49%", textStyle: { - color: "#ffffff", + color: "rgba(242, 252, 253, 0.84)", fontSize: 14, - lineHeight: 22, - rich: { - text: { - marginLeft:32, - fontSize: 14, - }, - number: { - fontSize: 14, - color: "#37E7FF", - marginLeft:32, - fontWeight: 'bold' - }, - unit: { - fontSize: 14, - } - } + fontWeight: 400, }, - data: legendData, - formatter(name) { - const newData = res; - let tarValue = 0; - let total = 0; - for (let i = 0; i < newData.length; i++) { - total += newData[i].value; - if (newData[i].name === name) { - tarValue = newData[i].value; - } - } - var percert = total == 0 ? 0 : ((tarValue / total) * 100).toFixed(2); - const arr = name + ' ' + tarValue; - return `{text|${name}} {number|${percert}%}`;; + }, + ], + grid: { + top: "38%", + left: "6%", + right: "6%", + bottom: "3%", + containLabel: true, + }, + tooltip: { + trigger: "item", + // formatter: "{b} : {c}:{d}", + }, + legend: { + orient: "vertical", + height: "80px", + // left: "0%", + top: "68%", + itemWidth: 10, + itemHeight: 10, + icon: "circle", + textStyle: { + color: "#ffffff", + fontSize: 14, + lineHeight: 22, + rich: { + text: { + width: 80, + marginLeft: 32, + fontSize: 14, + }, + number: { + fontSize: 14, + color: "#37E7FF", + marginLeft: 32, + fontWeight: "bold", + }, + unit: { + fontSize: 14, + }, }, }, - series: [ - /** 饼图上刻度 */ + data: legendData, + formatter(name) { + const newData = res; + let tarValue = 0; + let total = 0; + for (let i = 0; i < newData.length; i++) { + total += newData[i].value; + if (newData[i].name === name) { + tarValue = newData[i].value; + } + } + var percert = total == 0 ? 0 : ((tarValue / total) * 100).toFixed(2); + const arr = name + " " + tarValue; + return `{text|${name}} {number|${percert}%}`; + }, + pageIconColor: "#fff", + pageIconSize: 10, + pageTextStyle: { + color: "#fff", + }, + type: "scroll", + pageButtonPosition: "end", + }, + series: [ + /** 饼图上刻度 */ { - type: 'gauge', - center: ['50%', '35%'], - radius: '46%', // 错位调整此处 + type: "gauge", + center: ["50%", "35%"], + radius: "46%", // 错位调整此处 startAngle: 0, endAngle: 360, splitNumber: 52, axisLine: { show: false }, - splitLine: { + splitLine: { // length: 39, - length: '2', + length: "2", lineStyle: { width: 5, - color: '#5CC5FF' - } + color: "#5CC5FF", + }, }, axisTick: { show: false }, - axisLabel: { show: false } + axisLabel: { show: false }, }, - /** 绘制外部圆弧-2-开始圆点 <left-top> */ + /** 绘制外部圆弧-2-开始圆点 <left-top> */ { - type: 'custom', - coordinateSystem: 'none', + type: "custom", + coordinateSystem: "none", renderItem: (params, api) => { let x0 = api.getWidth() / 2; let y0 = api.getHeight() / 2 - 59; - let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50; + let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.5; return { - type: 'circle', + type: "circle", shape: { /** 角度175° 外弧2开始角度 */ - cx: x0 + r * Math.cos((350 + -angle) * Math.PI / 180), - cy: y0 + r * Math.sin((350 + -angle) * Math.PI / 180), - r: 4 + cx: x0 + r * Math.cos(((350 + -angle) * Math.PI) / 180), + cy: y0 + r * Math.sin(((350 + -angle) * Math.PI) / 180), + r: 4, }, style: { - fill: '#5BC4FF', - stroke: '#5BC4FF' + fill: "#5BC4FF", + stroke: "#5BC4FF", }, - silent: true - } + silent: true, + }; }, - data: [0] + data: [0], }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - return { - type: 'arc', - shape: { - cx: api.getWidth() / 2, - cy: api.getHeight() / 2 - 59, - r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50, - startAngle: (350 + -angle) * Math.PI / 180, - endAngle: (120 + -angle) * Math.PI / 180 - }, - style: { - fill: 'transparent', - stroke: '#5BC4FF66', - lineWidth: 2.6 - }, - silent: true - } - }, - data: [0] + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + return { + type: "arc", + shape: { + cx: api.getWidth() / 2, + cy: api.getHeight() / 2 - 59, + r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.5, + startAngle: ((350 + -angle) * Math.PI) / 180, + endAngle: ((120 + -angle) * Math.PI) / 180, + }, + style: { + fill: "transparent", + stroke: "#5BC4FF66", + lineWidth: 2.6, + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - let x0 = api.getWidth() / 2; - let y0 = api.getHeight() / 2 - 59; - let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50; - return { - type: 'circle', - shape: { - /** 角度175° 外弧2开始角度 */ - cx: x0 + r * Math.cos((150 + -angle) * Math.PI / 180), - cy: y0 + r * Math.sin((150 + -angle) * Math.PI / 180), - r: 4 - }, - style: { - fill: '#5BC4FF', - stroke: '#5BC4FF' - }, - silent: true - } - }, - data: [0] + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + let x0 = api.getWidth() / 2; + let y0 = api.getHeight() / 2 - 59; + let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.5; + return { + type: "circle", + shape: { + /** 角度175° 外弧2开始角度 */ + cx: x0 + r * Math.cos(((150 + -angle) * Math.PI) / 180), + cy: y0 + r * Math.sin(((150 + -angle) * Math.PI) / 180), + r: 4, + }, + style: { + fill: "#5BC4FF", + stroke: "#5BC4FF", + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - return { - type: 'arc', - shape: { - cx: api.getWidth() / 2, - cy: api.getHeight() / 2 - 59, - r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50, - startAngle: (150 + -angle) * Math.PI / 180, - endAngle: (-30 + -angle) * Math.PI / 180 - }, - style: { - fill: 'transparent', - stroke: '#5BC4FF66', - lineWidth: 2.6 - }, - silent: true - } + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + return { + type: "arc", + shape: { + cx: api.getWidth() / 2, + cy: api.getHeight() / 2 - 59, + r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.5, + startAngle: ((150 + -angle) * Math.PI) / 180, + endAngle: ((-30 + -angle) * Math.PI) / 180, }, - data: [0] - }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - let x0 = api.getWidth() / 2; - let y0 = api.getHeight() / 2 - 59; - let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56; - return { - type: 'circle', - shape: { - /** 角度175° 外弧2开始角度 */ - cx: x0 + r * Math.cos((590 + -angle) * Math.PI / 180), - cy: y0 + r * Math.sin((590 + -angle) * Math.PI / 180), - r: 4 - }, - style: { - fill: '#5BC4FF', - stroke: '#5BC4FF' - }, - silent: true - } - }, - data: [0] + style: { + fill: "transparent", + stroke: "#5BC4FF66", + lineWidth: 2.6, + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - return { - type: 'arc', - shape: { - cx: api.getWidth() / 2, - cy: api.getHeight() / 2 - 59, - r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56, - startAngle: (590 + -angle) * Math.PI / 180, - endAngle: (350 + -angle) * Math.PI / 180 - }, - style: { - fill: 'transparent', - stroke: '#5BC4FF66', - lineWidth: 2.6 - }, - silent: true - } - }, - data: [0] + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + let x0 = api.getWidth() / 2; + let y0 = api.getHeight() / 2 - 59; + let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.56; + return { + type: "circle", + shape: { + /** 角度175° 外弧2开始角度 */ + cx: x0 + r * Math.cos(((590 + -angle) * Math.PI) / 180), + cy: y0 + r * Math.sin(((590 + -angle) * Math.PI) / 180), + r: 4, + }, + style: { + fill: "#5BC4FF", + stroke: "#5BC4FF", + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - let x0 = api.getWidth() / 2; - let y0 = api.getHeight() / 2 - 59; - let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56; - return { - type: 'circle', - shape: { - /** 角度175° 外弧2开始角度 */ - cx: x0 + r * Math.cos((90 + -angle) * Math.PI / 180), - cy: y0 + r * Math.sin((90 + -angle) * Math.PI / 180), - r: 4 - }, - style: { - fill: '#5BC4FF', - stroke: '#5BC4FF' - }, - silent: true - } - }, - data: [0] + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + return { + type: "arc", + shape: { + cx: api.getWidth() / 2, + cy: api.getHeight() / 2 - 59, + r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.56, + startAngle: ((590 + -angle) * Math.PI) / 180, + endAngle: ((350 + -angle) * Math.PI) / 180, + }, + style: { + fill: "transparent", + stroke: "#5BC4FF66", + lineWidth: 2.6, + }, + silent: true, + }; }, - { - type: 'custom', - coordinateSystem: 'none', - renderItem: (params, api) => { - return { - type: 'arc', - shape: { - cx: api.getWidth() / 2, - cy: api.getHeight() / 2 - 59, - r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56, - startAngle: (90 + -angle) * Math.PI / 180, - endAngle: (160 + -angle) * Math.PI / 180 - }, - style: { - fill: 'transparent', - stroke: '#5BC4FF66', - lineWidth: 2.6 - }, - silent: true - } - }, - data: [0] + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + let x0 = api.getWidth() / 2; + let y0 = api.getHeight() / 2 - 59; + let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.56; + return { + type: "circle", + shape: { + /** 角度175° 外弧2开始角度 */ + cx: x0 + r * Math.cos(((90 + -angle) * Math.PI) / 180), + cy: y0 + r * Math.sin(((90 + -angle) * Math.PI) / 180), + r: 4, + }, + style: { + fill: "#5BC4FF", + stroke: "#5BC4FF", + }, + silent: true, + }; }, - { - type: 'pie', - radius: ['45%', '40%'], - center: ['50%', '35%'], - z: 10, - label: { - show: false, - position: 'center', - formatter: (params) => { - return params.name + "\r\n" + params.value + data: [0], + }, + { + type: "custom", + coordinateSystem: "none", + renderItem: (params, api) => { + return { + type: "arc", + shape: { + cx: api.getWidth() / 2, + cy: api.getHeight() / 2 - 59, + r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.56, + startAngle: ((90 + -angle) * Math.PI) / 180, + endAngle: ((160 + -angle) * Math.PI) / 180, }, - rich: { - total: { - fontSize: 16, - color: '#04F5FE', - }, - efficiency: { - fontSize: 12, - color: '#00FD6D', - }, + style: { + fill: "transparent", + stroke: "#5BC4FF66", + lineWidth: 2.6, }, - color: '#FFFFFF', - fontSize: 12, - lineHeight: 16, + silent: true, + }; + }, + data: [0], + }, + { + type: "pie", + radius: ["45%", "40%"], + center: ["50%", "35%"], + z: 10, + label: { + show: false, + position: "center", + formatter: (params) => { + return params.name + "\r\n" + params.value; }, - data: data1, - labelLine: { - show: false, + rich: { + total: { + fontSize: 16, + color: "#04F5FE", + }, + efficiency: { + fontSize: 12, + color: "#00FD6D", + }, }, - itemStyle: { - normal: { - borderWidth: 6, - shadowBlur: 10, - borderRadius: 50, // 圆角 - } - } + color: "#FFFFFF", + fontSize: 12, + lineHeight: 16, }, - { - type: 'pie', - radius: ['29%', '39%'], - center: ['50%', '35%'], - label: { - show: false, + data: data1, + labelLine: { + show: false, + }, + itemStyle: { + normal: { + borderRadius: "5", + borderWidth: 4, + borderType: "solid", + borderColor: "#0C2D3A", }, - data: data2, - labelLine: { - show: false, + }, + }, + { + type: "pie", + radius: ["29%", "39%"], + center: ["50%", "35%"], + label: { + show: false, + }, + data: data2, + labelLine: { + show: false, + }, + itemStyle: { + normal: { + borderRadius: "5", + borderWidth: 4, + borderType: "solid", + borderColor: "#0C2D3A", }, - itemStyle: { - normal: { - borderWidth: 6, - shadowBlur: 10, - borderRadius: 0, // 圆角 - } - } }, - ], - - }; + }, + ], +}; - export default options \ No newline at end of file +export default options; diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/nucleusThrough/assets/charts3.js b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/nucleusThrough/assets/charts3.js index a32f9e85..edac1849 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/nucleusThrough/assets/charts3.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/nucleusThrough/assets/charts3.js @@ -19,25 +19,25 @@ let data2 = [120, 340, 750, 600, 400, 700, 900, 200, 540, 320, 370, 500]; let data3 = [200, 530, 920, 400, 600, 700, 300, 800, 900, 120, 570, 800]; let options = { tooltip: { - show: false, + show: true, trigger: "axis", - axisPointer: { - // 坐标轴指示器,坐标轴触发有效 - type: "shadow", // 默认为直线,可选为:'line' | 'shadow' - }, - textStyle: { - color: "#fff", - fontSize: 14, - }, - backgroundColor: "rgba(3, 31, 71, .0)", //设置背景颜色 - borderColor: "rgba(3, 31, 71, .0)", - formatter: "健康监测<br>{b1}:{c1}人", + // axisPointer: { + // // 坐标轴指示器,坐标轴触发有效 + // type: "shadow", // 默认为直线,可选为:'line' | 'shadow' + // }, + // textStyle: { + // color: "#fff", + // fontSize: 14, + // }, + // backgroundColor: "rgba(3, 31, 71, .0)", //设置背景颜色 + // borderColor: "rgba(3, 31, 71, .0)", + // formatter: "健康监测<br>{b1}:{c1}人", }, grid: { - left: "2%", - right: "4%", - top: "20%", - bottom: "10%", + left: "0", + right: "0", + top: "80px", + bottom: "25px", containLabel: true, }, xAxis: { @@ -51,7 +51,7 @@ let options = { }, axisLine: { lineStyle: { - color: "#1C82C5", + color: "#2CC9EC", }, }, axisLabel: { @@ -60,17 +60,23 @@ let options = { rotate: "1", margin: "20", textStyle: { - fontSize: 12, - color: "#50A2C1", + fontSize: 10, + color: "#fff", }, }, }, yAxis: [ { - min: 0, + name: "(起)", + nameTextStyle: { + color: "#fff", + fontSize: 10, + align: "right", + verticalAlign: "center", + }, axisLine: { lineStyle: { - color: "#1C82C5", + color: "#1D7B93", }, }, splitLine: { @@ -81,9 +87,9 @@ let options = { }, }, axisLabel: { - color: "#DEEBFF", + color: "#fff", textStyle: { - fontSize: 12, + fontSize: 10, }, }, axisTick: { diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/nucleusThrough/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/nucleusThrough/index.vue index 0c6f1fe6..ebc29771 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/nucleusThrough/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/nucleusThrough/index.vue @@ -1,54 +1,70 @@ <template> - <div class='congestion'> + <div class="congestion"> <WgtTitle :title="'月审核通过趋势分析'"></WgtTitle> <div class="board"> <div class="searchPanel_1"> - <el-date-picker size="mini" type="month" class="selectRoad" v-model="dateTime" style="width:140px;" - placeholder="请选择" /> - <el-quarter-picker size="mini" class="selectRoad" style="width:180px;" v-if="year == 'quarter'" v-model="quarter" - aria-placeholder="请选季度" /> - - <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-date-picker + size="mini" + type="month" + class="selectRoad" + v-model="dateTime" + style="width: 140px" + placeholder="请选择" + /> + <el-quarter-picker + size="mini" + class="selectRoad" + style="width: 180px" + v-if="year == 'quarter'" + v-model="quarter" + aria-placeholder="请选季度" + /> + + <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 + > </div> - <div class="charts keep-ratio " id="nucleusThrough"></div> + <div class="charts keep-ratio" id="nucleusThrough"></div> </div> </div> </template> - + <script> import WgtTitle from "@screen/pages/perception/widgets/title"; import * as echarts from "echarts"; import chartsStatistics from "./assets/charts3"; export default { - name: 'nucleusThrough', + name: "nucleusThrough", components: { - WgtTitle + WgtTitle, }, data() { return { dateTime: "", - } - }, - - created() { - + }; }, - methods: { - }, + created() {}, + methods: {}, mounted() { setTimeout(() => { this.$nextTick(() => { - var myChart = echarts.init(document.getElementById('nucleusThrough')); + var myChart = echarts.init(document.getElementById("nucleusThrough")); myChart.setOption(chartsStatistics); }); }); }, -} +}; </script> - -<style lang='scss' scoped> + +<style lang="scss" scoped> .congestion { width: 100%; @@ -61,18 +77,22 @@ export default { border-radius: 5px 5px 5px 5px; opacity: 1; 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; justify-content: space-between; align-items: center; - .searchPanel_1 { position: absolute; display: flex; align-items: center; height: 40px; - width: 100%; + width: 50%; font-size: 14px; margin-bottom: 10px; left: 20px; @@ -102,7 +122,7 @@ export default { .selectRoad { width: 89px; - border: 1px solid #00B3CC; + border: 1px solid #00b3cc; ::v-deep { .el-input__inner { @@ -113,19 +133,17 @@ export default { } .btnSearch { - background: linear-gradient(180deg, #005C79 0%, #009BCC 100%); + background: linear-gradient(180deg, #005c79 0%, #009bcc 100%); margin-left: 10px; border-color: transparent; } .btnReset { - background: linear-gradient(180deg, #005C79 0%, #009BCC 100%); - ; + background: linear-gradient(180deg, #005c79 0%, #009bcc 100%); border-color: transparent; color: white; } } - } } @@ -134,4 +152,3 @@ export default { width: 100%; } </style> - \ No newline at end of file diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsDay/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsDay/assets/charts.js index 3bff0d09..9991db10 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsDay/assets/charts.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsDay/assets/charts.js @@ -1,271 +1,302 @@ - /* 数据 */ -let nameList = ["00:00", "02:00", "04:00", "06:00", "08:00", "10:00", "12:00", "14:00", "16:00", "18:00", "20:00", "22:00"]; // 类别 -let valueList = [800, 520, 650, 950, 420, 600, 450, 720, 303, 503 , 203 ,703 , 903 ]; // 人数 -var yList = [ "1000","800","轻度拥堵","基本畅通","畅通"] +let nameList = [ + "00:00", + "02:00", + "04:00", + "06:00", + "08:00", + "10:00", + "12:00", + "14:00", + "16:00", + "18:00", + "20:00", + "22:00", +]; // 类别 +let valueList = [ + 800, 520, 650, 950, 420, 600, 450, 720, 303, 503, 203, 703, 903, +]; // 人数 +var yList = ["1000", "800", "轻度拥堵", "基本畅通", "畅通"]; /* 数据整合 */ let dataList = []; nameList.map((item, index) => { - if (index === 4) { - dataList.push({ - name: item, - value: valueList[index], - itemStyle: { - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [{ - offset: 0, color: '#FFB904' // 0% 处的颜色 - }, { - offset: 1, color: '#FF6969' // 100% 处的颜色 - }], - global: false // 缺省为 false + if (index === 4) { + dataList.push({ + name: item, + value: valueList[index], + itemStyle: { + color: { + type: "linear", + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { + offset: 0, + color: "#FFB904", // 0% 处的颜色 + }, + { + offset: 1, + color: "#FF6969", // 100% 处的颜色 }, - borderRadius: 6 - }, - label: { show: false } - }) - } else { - dataList.push({ - name: item, - value: valueList[index], - itemStyle:{ - borderRadius: 6 - } - }) - } -}) + ], + global: false, // 缺省为 false + }, + borderRadius: 6, + }, + label: { show: false }, + }); + } else { + dataList.push({ + name: item, + value: valueList[index], + itemStyle: { + borderRadius: 6, + }, + }); + } +}); var options = { - legend: { - // orient: 'vertical', - icon: "circle", - itemHeight: 8, - itemWidth: 8, - top: "5%", - x: "right", - textStyle: { - color: "#fff", - }, + tooltip: { + show: true, + trigger: "axis", + }, + legend: { + // orient: 'vertical', + icon: "circle", + itemHeight: 8, + itemWidth: 8, + top: "20px", + x: "right", + textStyle: { + color: "#fff", }, - grid: { - top: '15%',//上边距 - right: '0',//右边距 - left: '0',//左边距 - bottom: "10%",//下边距 - containLabel: true, - }, - xAxis: { - type: 'category', - data: nameList, - axisTick: { - show: false //隐藏X轴刻度 - }, - axisLine: { - lineStyle: { - color: "rgba(49, 217, 255, 0.8)" - } - }, - axisLabel: { - show: true, - color: '#B6E6FF', - fontSize:8, - fontFamily: 'Source Han Sans CN-Regular', + }, + grid: { + top: "75px", //上边距 + right: "0", //右边距 + left: "0", //左边距 + bottom: "20px", //下边距 + containLabel: true, + }, + xAxis: { + type: "category", + data: nameList, + axisTick: { + show: false, //隐藏X轴刻度 + }, + axisLine: { + lineStyle: { + color: "rgba(49, 217, 255, 0.8)", }, - }, - yAxis: [{ - type: 'value', - name: "", - max: 1200, - min:0, - splitNumber:5, + }, + axisLabel: { + show: true, + color: "#fff", + fontSize: 10, + }, + }, + yAxis: [ + { + type: "value", + name: "(起)", nameTextStyle: { - color: '#B6E6FF', - fontSize: 13, - fontFamily: 'Source Han Sans CN-Regular', - align: "left", - verticalAlign: "center", + color: "#fff", + fontSize: 10, + align: "right", + verticalAlign: "center", }, axisLabel: { - fontSize: 13, - color: '#B6E6FF', - fontFamily: 'HarmonyOS Sans-Regular', - // formatter:function(value,index){ - // return yList[index] - // } + fontSize: 10, + color: "#fff", + // formatter:function(value,index){ + // return yList[index] + // } }, axisLine: { - show: false, + show: false, }, axisTick: { - show: false + show: false, }, splitLine: { - lineStyle: { - color: 'rgba(49, 217, 255, 0.5)', - } + lineStyle: { + color: "rgba(49, 217, 255, 0.5)", + }, + }, + }, + ], + series: [ + { + name: "情报板发布", + type: "line", + symbol: "circle", + symbolSize: 0, + smooth: true, + areaStyle: { + width: 4, + opacity: 0.25, + color: { + type: "linear", + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0.389, color: "#32BB8A90" }, + { offset: 1, color: "#32BB8A00" }, + ], + global: false, + }, + }, + // yAxisIndex: 1, // 与第二个 y 轴关联 + itemStyle: { + color: "#32BB8A", + }, + lineStyle: { + width: 2, }, - }], - series: [ - { - name: '情报板发布', - type: 'line', - symbol: 'circle', - symbolSize: 0, - smooth: true, - areaStyle: { - width: 4, - opacity: 0.25, - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [ - { offset: 0.389, color: "#32BB8A90" }, - { offset: 1, color: "#32BB8A00" }, - ], - global: false, - }, - }, - // yAxisIndex: 1, // 与第二个 y 轴关联 - itemStyle: { - color: '#32BB8A', - }, - lineStyle: { - width:2, - }, - - data: [1000, 800, 520, 600, 900, 700, 700,1000, 800, 520, 600, 900, 700, 700], // 折线图的数据 - }, - { - name: '服务网站', - type: 'line', - symbol: 'circle', - symbolSize: 0, - // yAxisIndex: 1, // 与第二个 y 轴关联 - itemStyle: { - color: '#08BAF4', - }, - lineStyle: { - width: 2, - }, - smooth: true, - areaStyle: { - width: 4, - opacity: 0.25, - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [ - { offset: 0.389, color: "#08BAF490" }, - { offset: 1, color: "#08BAF400" }, - ], - global: false, - }, - }, - data: [600, 700, 900, 400, 500, 800, 600,600, 700, 900, 400, 500, 800, 600], // 折线图的数据 - }, - { - name: '微信发布', - type: 'line', - symbol: 'circle', - symbolSize: 0, - // yAxisIndex: 1, // 与第二个 y 轴关联 - itemStyle: { - color: '#E2BA74', - }, - smooth: true, - areaStyle: { - width: 4, - opacity: 0.25, - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [ - { offset: 0.389, color: "#E2BA7490" }, - { offset: 1, color: "#E2BA7400" }, - ], - global: false, - }, - }, - lineStyle: { - width: 2, - }, - data: [850, 810, 712, 580, 480, 480, 780,850, 810, 712, 580, 480, 480, 780], // 折线图的数据 - },{ - name: '微博发布', - type: 'line', - symbol: 'circle', - symbolSize: 0, - // yAxisIndex: 1, // 与第二个 y 轴关联 - itemStyle: { - color: '#51BFA4', - }, - smooth: true, - areaStyle: { - width: 4, - opacity: 0.25, - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [ - { offset: 0.389, color: "#51BFA490" }, - { offset: 1, color: "#51BFA400" }, - ], - global: false, - }, - }, - lineStyle: { - width: 2, - }, - data: [850, 810, 712, 580, 480, 480, 780,850, 810, 712, 580, 480, 480, 780], // 折线图的数据 - },{ - name: '短信发布', - type: 'line', - symbol: 'circle', - symbolSize: 0, - // yAxisIndex: 1, // 与第二个 y 轴关联 - itemStyle: { - color: '#08BAF4', - }, - smooth: true, - areaStyle: { - width: 4, - opacity: 0.25, - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [ - { offset: 0.389, color: "#08BAF490" }, - { offset: 1, color: "#08BAF400" }, - ], - global: false, - }, - }, - lineStyle: { - width: 2, - }, - data: [850, 410, 712, 680, 50, 280, 480,850, 810, 712, 580, 480, 480, 780], // 折线图的数据 - }, - ] -} + data: [ + 1000, 800, 520, 600, 900, 700, 700, 1000, 800, 520, 600, 900, 700, 700, + ], // 折线图的数据 + }, + { + name: "服务网站", + type: "line", + symbol: "circle", + symbolSize: 0, + + // yAxisIndex: 1, // 与第二个 y 轴关联 + itemStyle: { + color: "#08BAF4", + }, + lineStyle: { + width: 2, + }, + smooth: true, + areaStyle: { + width: 4, + opacity: 0.25, + color: { + type: "linear", + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0.389, color: "#08BAF490" }, + { offset: 1, color: "#08BAF400" }, + ], + global: false, + }, + }, + data: [ + 600, 700, 900, 400, 500, 800, 600, 600, 700, 900, 400, 500, 800, 600, + ], // 折线图的数据 + }, + { + name: "微信发布", + type: "line", + symbol: "circle", + symbolSize: 0, + // yAxisIndex: 1, // 与第二个 y 轴关联 + itemStyle: { + color: "#E2BA74", + }, + smooth: true, + areaStyle: { + width: 4, + opacity: 0.25, + color: { + type: "linear", + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0.389, color: "#E2BA7490" }, + { offset: 1, color: "#E2BA7400" }, + ], + global: false, + }, + }, + lineStyle: { + width: 2, + }, + data: [ + 850, 810, 712, 580, 480, 480, 780, 850, 810, 712, 580, 480, 480, 780, + ], // 折线图的数据 + }, + { + name: "微博发布", + type: "line", + symbol: "circle", + symbolSize: 0, + // yAxisIndex: 1, // 与第二个 y 轴关联 + itemStyle: { + color: "#51BFA4", + }, + smooth: true, + areaStyle: { + width: 4, + opacity: 0.25, + color: { + type: "linear", + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0.389, color: "#51BFA490" }, + { offset: 1, color: "#51BFA400" }, + ], + global: false, + }, + }, + lineStyle: { + width: 2, + }, + data: [ + 850, 810, 712, 580, 480, 480, 780, 850, 810, 712, 580, 480, 480, 780, + ], // 折线图的数据 + }, + { + name: "短信发布", + type: "line", + symbol: "circle", + symbolSize: 0, + // yAxisIndex: 1, // 与第二个 y 轴关联 + itemStyle: { + color: "#08BAF4", + }, + smooth: true, + areaStyle: { + width: 4, + opacity: 0.25, + color: { + type: "linear", + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0.389, color: "#08BAF490" }, + { offset: 1, color: "#08BAF400" }, + ], + global: false, + }, + }, + lineStyle: { + width: 2, + }, + data: [ + 850, 410, 712, 680, 50, 280, 480, 850, 810, 712, 580, 480, 480, 780, + ], // 折线图的数据 + }, + ], +}; export default options; diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsMonth/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsMonth/assets/charts.js index b5d032e2..c0b1c0e7 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsMonth/assets/charts.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsMonth/assets/charts.js @@ -1,271 +1,293 @@ - /* 数据 */ -let nameList = ["00:00", "02:00", "04:00", "06:00", "08:00", "10:00", "12:00", "14:00", "16:00", "18:00", "20:00", "22:00"]; // 类别 -let valueList = [800, 520, 650, 950, 420, 600, 450, 720, 303, 503 , 203 ,703 , 903 ]; // 人数 -var yList = [ "1000","800","轻度拥堵","基本畅通","畅通"] +let nameList = [ + "00:00", + "02:00", + "04:00", + "06:00", + "08:00", + "10:00", + "12:00", + "14:00", + "16:00", + "18:00", + "20:00", + "22:00", +]; // 类别 +let valueList = [ + 800, 520, 650, 950, 420, 600, 450, 720, 303, 503, 203, 703, 903, 903, +]; // 人数 +var yList = ["1000", "800", "轻度拥堵", "基本畅通", "畅通"]; /* 数据整合 */ let dataList = []; nameList.map((item, index) => { - if (index === 4) { - dataList.push({ - name: item, - value: valueList[index], - itemStyle: { - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [{ - offset: 0, color: '#FFB904' // 0% 处的颜色 - }, { - offset: 1, color: '#FF6969' // 100% 处的颜色 - }], - global: false // 缺省为 false + if (index === 4) { + dataList.push({ + name: item, + value: valueList[index], + itemStyle: { + color: { + type: "linear", + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { + offset: 0, + color: "#FFB904", // 0% 处的颜色 + }, + { + offset: 1, + color: "#FF6969", // 100% 处的颜色 }, - borderRadius: 6 - }, - label: { show: false } - }) - } else { - dataList.push({ - name: item, - value: valueList[index], - itemStyle:{ - borderRadius: 6 - } - }) - } -}) + ], + global: false, // 缺省为 false + }, + borderRadius: 6, + }, + label: { show: false }, + }); + } else { + dataList.push({ + name: item, + value: valueList[index], + itemStyle: { + borderRadius: 6, + }, + }); + } +}); var options = { - legend: { - // orient: 'vertical', - icon: "circle", - itemHeight: 8, - itemWidth: 8, - top: "5%", - x: "right", - textStyle: { - color: "#fff", - }, + tooltip: { + show: true, + trigger: "axis", + }, + legend: { + // orient: 'vertical', + icon: "circle", + itemHeight: 8, + itemWidth: 8, + top: "5%", + x: "right", + textStyle: { + color: "#fff", }, - grid: { - top: '20%',//上边距 - right: '0',//右边距 - left: '0',//左边距 - bottom: "10%",//下边距 - containLabel: true, - }, - xAxis: { - type: 'category', - data: nameList, - axisTick: { - show: false //隐藏X轴刻度 - }, - axisLine: { - lineStyle: { - color: "rgba(49, 217, 255, 0.8)" - } - }, - axisLabel: { - show: true, - color: '#B6E6FF', - fontSize:8, - fontFamily: 'Source Han Sans CN-Regular', + }, + grid: { + top: "80px", //上边距 + right: "0", //右边距 + left: "0", //左边距 + bottom: "10px", //下边距 + containLabel: true, + }, + xAxis: { + type: "category", + data: nameList, + axisTick: { + show: false, //隐藏X轴刻度 + }, + axisLine: { + lineStyle: { + color: "rgba(49, 217, 255, 0.8)", }, - }, - yAxis: [{ - type: 'value', - name: "", - max: 1000, - min:0, - splitNumber:5, + }, + axisLabel: { + show: true, + color: "#fff", + fontSize: 10, + }, + }, + yAxis: [ + { + type: "value", + name: "(起)", nameTextStyle: { - color: '#B6E6FF', - fontSize: 13, - fontFamily: 'Source Han Sans CN-Regular', - align: "left", - verticalAlign: "center", + color: "#fff", + fontSize: 10, + align: "right", + verticalAlign: "center", }, axisLabel: { - fontSize: 13, - color: '#B6E6FF', - fontFamily: 'HarmonyOS Sans-Regular', - // formatter:function(value,index){ - // return yList[index] - // } + fontSize: 10, + color: "#fff", + // fontFamily: "HarmonyOS Sans-Regular", + // formatter:function(value,index){ + // return yList[index] + // } }, axisLine: { - show: false, + show: false, }, axisTick: { - show: false + show: false, }, splitLine: { - lineStyle: { - color: 'rgba(49, 217, 255, 0.5)', - } + lineStyle: { + color: "rgba(49, 217, 255, 0.5)", + }, + }, + }, + ], + series: [ + { + name: "情报板发布", + type: "line", + symbol: "circle", + symbolSize: 0, + smooth: true, + areaStyle: { + width: 4, + opacity: 0.25, + color: { + type: "linear", + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0.389, color: "#51BFA490" }, + { offset: 1, color: "#51BFA400" }, + ], + global: false, + }, + }, + // yAxisIndex: 1, // 与第二个 y 轴关联 + itemStyle: { + color: "#51BFA4", + }, + lineStyle: { + width: 2, }, - }], - series: [ - { - name: '情报板发布', - type: 'line', - symbol: 'circle', - symbolSize: 0, - smooth: true, - areaStyle: { - width: 4, - opacity: 0.25, - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [ - { offset: 0.389, color: "#51BFA490" }, - { offset: 1, color: "#51BFA400" }, - ], - global: false, - }, - }, - // yAxisIndex: 1, // 与第二个 y 轴关联 - itemStyle: { - color: '#51BFA4', - }, - lineStyle: { - width:2, - }, - - data: [1000, 800, 520, 600, 900, 700, 700,1000, 800, 520, 600, 900, 700, 700], // 折线图的数据 - }, - { - name: '服务网站', - type: 'line', - symbol: 'circle', - symbolSize: 0, - // yAxisIndex: 1, // 与第二个 y 轴关联 - itemStyle: { - color: '#08BAF4', - }, - lineStyle: { - width: 2, - }, - smooth: true, - areaStyle: { - width: 4, - opacity: 0.25, - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [ - { offset: 0.389, color: "#08BAF490" }, - { offset: 1, color: "#08BAF400" }, - ], - global: false, - }, - }, - data: [600, 700, 900, 400, 500, 800, 600,600, 700, 900, 400, 500, 800, 600], // 折线图的数据 - }, - { - name: '微信发布', - type: 'line', - symbol: 'circle', - symbolSize: 0, - // yAxisIndex: 1, // 与第二个 y 轴关联 - itemStyle: { - color: '#E2BA74', - }, - smooth: true, - areaStyle: { - width: 4, - opacity: 0.25, - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [ - { offset: 0.389, color: "#E2BA7490" }, - { offset: 1, color: "#E2BA7400" }, - ], - global: false, - }, - }, - lineStyle: { - width: 2, - }, - data: [850, 810, 712, 580, 480, 480, 780,850, 810, 712, 580, 480, 480, 780], // 折线图的数据 - },{ - name: '微博发布', - type: 'line', - symbol: 'circle', - symbolSize: 0, - // yAxisIndex: 1, // 与第二个 y 轴关联 - itemStyle: { - color: '#FB6D07', - }, - smooth: true, - areaStyle: { - width: 4, - opacity: 0.25, - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [ - { offset: 0.389, color: "#FB6D0799" }, - { offset: 1, color: "#FB6D0700" }, - ], - global: false, - }, - }, - lineStyle: { - width: 2, - }, - data: [850, 810, 712, 580, 480, 480, 780,850, 810, 712, 580, 480, 480, 780], // 折线图的数据 - },{ - name: '短信发布', - type: 'line', - symbol: 'circle', - symbolSize: 0, - // yAxisIndex: 1, // 与第二个 y 轴关联 - itemStyle: { - color: '#07DEFB', - }, - smooth: true, - areaStyle: { - width: 4, - opacity: 0.25, - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [ - { offset: 0.389, color: "#07DEFB90" }, - { offset: 1, color: "#07DEFB00" }, - ], - global: false, - }, - }, - lineStyle: { - width: 2, - }, - data: [850, 410, 712, 680, 50, 280, 480,850, 810, 712, 580, 480, 480, 780], // 折线图的数据 - }, - ] -} + data: [1000, 800, 520, 600, 900, 700, 700, 1000, 800, 520, 600, 900], // 折线图的数据 + }, + { + name: "服务网站", + type: "line", + symbol: "circle", + symbolSize: 0, + + // yAxisIndex: 1, // 与第二个 y 轴关联 + itemStyle: { + color: "#08BAF4", + }, + lineStyle: { + width: 2, + }, + smooth: true, + areaStyle: { + width: 4, + opacity: 0.25, + color: { + type: "linear", + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0.389, color: "#08BAF490" }, + { offset: 1, color: "#08BAF400" }, + ], + global: false, + }, + }, + data: [600, 700, 900, 400, 500, 800, 600, 600, 700, 900, 400, 500], // 折线图的数据 + }, + { + name: "微信发布", + type: "line", + symbol: "circle", + symbolSize: 0, + // yAxisIndex: 1, // 与第二个 y 轴关联 + itemStyle: { + color: "#E2BA74", + }, + smooth: true, + areaStyle: { + width: 4, + opacity: 0.25, + color: { + type: "linear", + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0.389, color: "#E2BA7490" }, + { offset: 1, color: "#E2BA7400" }, + ], + global: false, + }, + }, + lineStyle: { + width: 2, + }, + data: [850, 810, 712, 580, 480, 480, 780, 850, 810, 712, 580, 480], // 折线图的数据 + }, + { + name: "微博发布", + type: "line", + symbol: "circle", + symbolSize: 0, + // yAxisIndex: 1, // 与第二个 y 轴关联 + itemStyle: { + color: "#FB6D07", + }, + smooth: true, + areaStyle: { + width: 4, + opacity: 0.25, + color: { + type: "linear", + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0.389, color: "#FB6D0799" }, + { offset: 1, color: "#FB6D0700" }, + ], + global: false, + }, + }, + lineStyle: { + width: 2, + }, + data: [850, 810, 712, 580, 480, 480, 780, 850, 810, 712, 580, 480], // 折线图的数据 + }, + { + name: "短信发布", + type: "line", + symbol: "circle", + symbolSize: 0, + // yAxisIndex: 1, // 与第二个 y 轴关联 + itemStyle: { + color: "#07DEFB", + }, + smooth: true, + areaStyle: { + width: 4, + opacity: 0.25, + color: { + type: "linear", + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0.389, color: "#07DEFB90" }, + { offset: 1, color: "#07DEFB00" }, + ], + global: false, + }, + }, + lineStyle: { + width: 2, + }, + data: [850, 410, 712, 680, 50, 280, 480, 850, 810, 712, 580, 480], // 折线图的数据 + }, + ], +}; export default options; diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsMonth/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsMonth/index.vue index 5afcef2d..57d54279 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsMonth/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/components/postTrendsMonth/index.vue @@ -1,54 +1,71 @@ <template> - <div class='congestion'> + <div class="congestion"> <WgtTitle :title="'月发布渠道趋势分析'"></WgtTitle> <div class="board"> <div class="searchPanel_1"> - <el-date-picker size="mini" v-if="year != 'quarter'" class="selectRoad" v-model="dateTime" style="width:140px;" - type="month" placeholder="请选择" /> - <el-quarter-picker size="mini" class="selectRoad" style="width:180px;" v-if="year == 'quarter'" v-model="quarter" - aria-placeholder="请选季度" /> - - <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-date-picker + size="mini" + v-if="year != 'quarter'" + class="selectRoad" + v-model="dateTime" + style="width: 140px" + type="month" + placeholder="请选择" + /> + <el-quarter-picker + size="mini" + class="selectRoad" + style="width: 180px" + v-if="year == 'quarter'" + v-model="quarter" + aria-placeholder="请选季度" + /> + + <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 + > </div> - <div class="charts keep-ratio " id="postTrendsMonth"></div> + <div class="charts keep-ratio" id="postTrendsMonth"></div> </div> </div> </template> - + <script> import WgtTitle from "@screen/pages/perception/widgets/title"; import * as echarts from "echarts"; import chartsStatistics from "./assets/charts"; export default { - name: 'postTrendsMonth', + name: "postTrendsMonth", components: { - WgtTitle + WgtTitle, }, data() { return { dateTime: "", - } - }, - - created() { - + }; }, - methods: { - }, + created() {}, + methods: {}, mounted() { setTimeout(() => { this.$nextTick(() => { - var myChart = echarts.init(document.getElementById('postTrendsMonth')); + var myChart = echarts.init(document.getElementById("postTrendsMonth")); myChart.setOption(chartsStatistics); }); }); }, -} +}; </script> - -<style lang='scss' scoped> + +<style lang="scss" scoped> .congestion { width: 100%; @@ -61,7 +78,12 @@ export default { border-radius: 5px 5px 5px 5px; opacity: 1; 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; justify-content: space-between; align-items: center; @@ -72,7 +94,7 @@ export default { display: flex; align-items: center; height: 40px; - width: 100%; + width: 50%; font-size: 14px; margin-bottom: 10px; left: 20px; @@ -102,7 +124,7 @@ export default { .selectRoad { width: 89px; - border: 1px solid #00B3CC; + border: 1px solid #00b3cc; ::v-deep { .el-input__inner { @@ -113,25 +135,22 @@ export default { } .btnSearch { - background: linear-gradient(180deg, #005C79 0%, #009BCC 100%); + background: linear-gradient(180deg, #005c79 0%, #009bcc 100%); margin-left: 10px; border-color: transparent; } .btnReset { - background: linear-gradient(180deg, #005C79 0%, #009BCC 100%); - ; + background: linear-gradient(180deg, #005c79 0%, #009bcc 100%); border-color: transparent; color: white; } } - - } } .charts { height: 300px; width: 100%; -}</style> - \ No newline at end of file +} +</style> diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/index.vue index ef8fab4e..be27eb70 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/service/publicService/index.vue @@ -1,177 +1,166 @@ <template> - <div class='TrafficFlow'> - <section class="foot"> - <el-tabs class="footTabs" v-model="activeName" @tab-click="changeTabs"> - <el-tab-pane label="公众服务统计分析" name="first"> - <div class="header-shot" > - <TopComponent /> - </div> - <div class="content" > - <ChannelAnalytics class="content-l" /> - <EventTypeAnalysis class="content-l" /> - <AuditAnalytics class="content-l" /> - <PostTrendsDay class="content-l" /> - </div> - <div class="content" > - <PostTrendsMonth class="content-mi" /> - <NucleusThrough class="content-mi" /> - </div> - </el-tab-pane> - <el-tab-pane label="公众服务统计查询" name="second"> - - </el-tab-pane> - </el-tabs> - </section> - </div> - </template> - - <script> - import TopComponent from './components/topComponent'; - import ChannelAnalytics from './components/channelAnalytics'; - import EventTypeAnalysis from './components/eventTypeAnalysis'; - import AuditAnalytics from './components/auditAnalytics'; - import PostTrendsDay from './components/postTrendsDay'; - import PostTrendsMonth from './components/postTrendsMonth'; - import NucleusThrough from './components/nucleusThrough'; - - export default { - name: 'publicService', - components: { - TopComponent, - ChannelAnalytics, - EventTypeAnalysis, - AuditAnalytics, - PostTrendsDay, - PostTrendsMonth, - NucleusThrough - }, - data(){ - return { - activeName:"first" - } - }, - methods:{ - changeTabs(){ - - } - } - + <div class="TrafficFlow"> + <section class="foot"> + <el-tabs class="footTabs" v-model="activeName" @tab-click="changeTabs"> + <el-tab-pane label="公众服务统计分析" name="first"> + <div class="header-shot"> + <TopComponent /> + </div> + <div class="content"> + <ChannelAnalytics class="content-l" /> + <EventTypeAnalysis class="content-l" /> + <AuditAnalytics class="content-l" /> + <PostTrendsDay class="content-l" style="margin-right: 0" /> + </div> + <div class="content"> + <PostTrendsMonth class="content-mi" /> + <NucleusThrough class="content-mi" style="margin-right: 0" /> + </div> + </el-tab-pane> + <el-tab-pane label="公众服务统计查询" name="second"> </el-tab-pane> + </el-tabs> + </section> + </div> +</template> + +<script> +import TopComponent from "./components/topComponent"; +import ChannelAnalytics from "./components/channelAnalytics"; +import EventTypeAnalysis from "./components/eventTypeAnalysis"; +import AuditAnalytics from "./components/auditAnalytics"; +import PostTrendsDay from "./components/postTrendsDay"; +import PostTrendsMonth from "./components/postTrendsMonth"; +import NucleusThrough from "./components/nucleusThrough"; + +export default { + name: "publicService", + components: { + TopComponent, + ChannelAnalytics, + EventTypeAnalysis, + AuditAnalytics, + PostTrendsDay, + PostTrendsMonth, + NucleusThrough, + }, + data() { + return { + activeName: "first", + }; + }, + methods: { + changeTabs() {}, + }, +}; +</script> + +<style lang="scss" scoped> +::v-deep .el-tabs__item { + display: inline-flex; + justify-content: center; + font-size: 16px; + font-family: PingFang SC, PingFang SC; + font-weight: 500; + color: #ffffff; + min-width: 128px; + position: relative; + left: 10px; +} + +::v-deep .el-tabs__active-bar { + min-width: 128px; +} + +::v-deep .el-tabs__nav-wrap::after { + background-color: #133242; + opacity: 0.1; +} + +.footTabs { + display: inline; + width: 100%; +} + +.TrafficFlow { + width: 100%; + height: 100%; + position: relative; + z-index: 6; + color: white; + + .header-shot { + width: 98%; + margin: auto; + margin-top: 15px; + height: 160px; } - </script> - - <style lang='scss' scoped> - - ::v-deep .el-tabs__item{ - display: inline-flex; - justify-content: center; - font-size: 16px; - font-family: PingFang SC, PingFang SC; - font-weight: 500; - color: #FFFFFF; - min-width:128px; - position: relative; - left:10px; - } - - ::v-deep .el-tabs__active-bar { - min-width:128px; - } - - ::v-deep .el-tabs__nav-wrap::after { - background-color: #133242; - opacity: 0.1; - } - - .footTabs { - display: inline; - width:100%; - - } - - .TrafficFlow { + + .content { width: 100%; - height: 100%; - position: relative; - z-index: 6; - color: white; - - .header-shot{ - width: 98%; - margin: auto; - margin-top: 15px; - height:160px; + margin: auto; + display: flex; + flex: 1; + pointer-events: none; + margin-top: 19px; + --keep-ratio: scaleX(1); + > div { + pointer-events: auto; } - .content { - width: 100%; - margin: auto; - display: flex; - flex: 1; - pointer-events: none; - margin-top: 19px; - - >div { - pointer-events: auto; - } - - .content-l { - width: calc(25%); - - margin-right:20px; + .content-l { + width: calc(25%); - } + margin-right: 20px; + } - .content-mi { - width: calc(50%); - - margin-right:20px; - } - - - .content-m { - display: inline-flex; - flex-direction: column; - width: calc(100% / 4 ); - margin-right:20px; - - .content-m-t { - width:100%; - height:240px; - margin-bottom: 20px; - } - } - .content-r { - width: 49.4%; - } + .content-mi { + width: calc(50%); + + margin-right: 20px; } - .foot{ - width: 98%; - margin: auto; - display: flex; - justify-content: space-between; - flex: 1; - pointer-events: none; - margin-top: 8px; - >div { - pointer-events: auto; - } - .foot-w { - width:100%; + .content-m { + display: inline-flex; + flex-direction: column; + width: calc(100% / 4); + margin-right: 20px; + .content-m-t { + width: 100%; + height: 240px; + margin-bottom: 20px; } - - .foot-l { - width: 726px; - } - .foot-m { - width: 613px; - } - .foot-r { - width: 493px; - } + } + .content-r { + width: 49.4%; + } + } + .foot { + width: 98%; + margin: auto; + display: flex; + justify-content: space-between; + flex: 1; + pointer-events: none; + margin-top: 8px; + > div { + pointer-events: auto; + } + + .foot-w { + width: 100%; + } + + .foot-l { + width: 726px; + } + .foot-m { + width: 613px; + } + .foot-r { + width: 493px; } } - </style> - \ No newline at end of file +} +</style> diff --git a/ruoyi-ui/src/views/JiHeExpressway/utils/enum.js b/ruoyi-ui/src/views/JiHeExpressway/utils/enum.js index 33c2c982..cad7cfc3 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/utils/enum.js +++ b/ruoyi-ui/src/views/JiHeExpressway/utils/enum.js @@ -129,6 +129,9 @@ export const InfoWarningSource = { 6: { text: "非机预警", }, + 7: { + text: "气象监测器", + } }; // 事件主类 warningType diff --git a/ruoyi-ui/src/views/login copy.vue b/ruoyi-ui/src/views/login copy.vue new file mode 100644 index 00000000..a65882cb --- /dev/null +++ b/ruoyi-ui/src/views/login copy.vue @@ -0,0 +1,461 @@ +<template> + <div class="login"> + <!-- <Bg2 style=" width: 600px; height:800px; position: fixed; left: 100px; top:100px">发多少刚发的刚发的</Bg2> --> + <el-form + ref="loginForm" + :model="loginForm" + :rules="loginRules" + class="login-form" + > + <div + style=" + width: 100%; + text-align: center; + padding-right: 20px; + padding-bottom: 10px; + " + > + <!-- <img src="../assets/image/login-logo.png" width="120px;" /> --> + <div class="loginTitle">欢迎登录</div> + </div> + <div class="title">{{ "" }}</div> + <el-form-item prop="username" style="margin-top: 40px"> + <el-input + v-model="loginForm.username" + type="text" + auto-complete="off" + placeholder="请输入用户名" + class="username" + > + <img + slot="prefix" + src="../assets/images/Vector.png" + class="el-input__icon input-icon" + /> + </el-input> + <!-- <div style="border-bottom: 1px solid #cfcfcf; margin-top: 5px"></div> --> + </el-form-item> + <el-form-item prop="password"> + <el-input + v-model="loginForm.password" + type="password" + auto-complete="off" + placeholder="请输入密码" + @keyup.enter.native="handleLogin" + class="password" + > + <img + slot="prefix" + src="../assets/images/locked.png" + class="el-input__icon input-icon" + /> + </el-input> + <!-- <div style="border-bottom: 1px solid #cfcfcf; margin-top: 5px"></div> --> + </el-form-item> + <Verify + @success="capctchaCheckSuccess" + :mode="'pop'" + :captchaType="'blockPuzzle'" + :imgSize="{ width: '330px', height: '155px' }" + ref="verify" + ></Verify> + <el-checkbox + v-model="loginForm.rememberMe" + style="margin: 40px 0px 20px 0px" + >记住密码</el-checkbox + > + <el-form-item style="width: 100%; text-align: center"> + <el-button + :loading="loading" + size="medium" + type="goon" + style="width: 100%" + @click.native.prevent="handleLogin" + > + <span v-if="!loading">登 录</span> + <span v-else>登 录 中...</span> + </el-button> + <div style="float: right" v-if="register"> + <router-link class="link-type" :to="'/register'" + >立即注册</router-link + > + </div> + </el-form-item> + </el-form> + + <!-- 底部 --> + <div class="el-login-footer"> + <!-- <span>Copyright ©hamdell All Rights Reserved.</span> --> + </div> + </div> +</template> + +<script> +import Cookies from "js-cookie"; +import { encrypt, decrypt } from "@/utils/jsencrypt"; +import Verify from "@/components/Verifition/Verify"; +import { getCaptchaOnOff } from "@/api/login.js"; +import { listOrder } from "@/api/payment/order"; +import { getUserDeptId } from "@/api/system/user"; +import { listTunnels } from "@/api/equipment/tunnel/api.js"; +import { getConfigKey } from "@/api/system/config.js"; + +import Bg2 from "@screen/components/Decorations/bg-2.vue"; + +export default { + components: { Verify, Bg2 }, + name: "Login", + data() { + return { + title: "", // 系统标题 + cookiePassword: "", + loginForm: { + // username: "admin", + // password: "dxc123!@#", + //dxc123!@# + username: "", + password: "", + rememberMe: false, + code: "", + uuid: "", + }, + loginRules: { + username: [ + { required: true, trigger: "blur", message: "请输入您的账号" }, + ], + password: [ + { required: true, trigger: "blur", message: "请输入您的密码" }, + ], + }, + loading: false, + // 验证码开关 + captchaOnOff: false, + // 注册开关 + register: false, + redirect: undefined, + }; + }, + watch: { + $route: { + handler: function (route) { + this.redirect = route.query && route.query.redirect; + }, + immediate: true, + }, + }, + created() { + this.getCookie(); + //this.getCaptchaOnOffFun(); + this.title = systemConfig.title(systemConfig.systemType); + }, + methods: { + // 获取验证码是否开启 + getCaptchaOnOffFun() { + getCaptchaOnOff().then((response) => { + this.captchaOnOff = response.captchaOnOff; + }); + }, + // 验证码 + capctchaCheckSuccess(params) { + this.loginForm.code = params.captchaVerification; + this.loading = true; + console.log(this.loginForm.rememberMe, "======================="); + if (this.loginForm.rememberMe == true) { + Cookies.set("username", this.loginForm.username, { expires: 30 }); + Cookies.set("password", encrypt(this.loginForm.password), { + expires: 30, + }); + Cookies.set("rememberMe", this.loginForm.rememberMe, { expires: 30 }); + } else { + Cookies.remove("username"); + Cookies.remove("password"); + Cookies.remove("rememberMe"); + } + this.$store + .dispatch("Login", this.loginForm) + .then(() => { + this.$router.push({ path: this.redirect || "/" }).catch(() => {}); + }) + .catch(() => { + this.loading = false; + }); + }, + getCookie() { + const username = Cookies.get("username"); + const password = Cookies.get("password"); + const rememberMe = Cookies.get("rememberMe"); + console.log("rem", rememberMe); + this.loginForm = { + username: username === undefined ? this.loginForm.username : username, + password: + password === undefined ? this.loginForm.password : decrypt(password), + rememberMe: rememberMe === undefined ? false : Boolean(rememberMe), + }; + }, + handleLogin() { + if (this.captchaOnOff) { + this.$refs.loginForm.validate((valid) => { + if (valid) { + this.$refs.verify.show(); + } + }); + } else { + if (this.loginForm.rememberMe == true) { + Cookies.set("username", this.loginForm.username, { expires: 30 }); + Cookies.set("password", encrypt(this.loginForm.password), { + expires: 30, + }); + Cookies.set("rememberMe", this.loginForm.rememberMe, { expires: 30 }); + } else { + Cookies.remove("username"); + Cookies.remove("password"); + Cookies.remove("rememberMe"); + } + + this.$store + .dispatch("Login", this.loginForm) + .then(() => { + this.$router.push({ path: this.redirect || "/" }).catch(() => {}); + // this.getManageStation(); + }) + .catch(() => { + this.loading = false; + }); + } + }, + getManageStation() { + getConfigKey("sd.moduleSwitch").then((res) => { + console.log(res, "管理站01"); + this.$cache.local.set("manageStation", res.msg); + }); + getConfigKey("sd.navigationBar").then((res) => { + console.log(res, "res"); + let sideTheme = "theme-blue"; + if (res.msg == "0") { + sideTheme = "theme-dark"; + } else { + sideTheme = "theme-blue"; + } + // console.log(res, "是否胡山隧道,胡山单独导航栏样式"); + this.$cache.local.set("navigationBar", res.msg); + this.$store.dispatch("settings/changeSetting", { + key: "sideTheme", + value: sideTheme, + }); + // this.sideTheme = val; + this.$cache.local.set( + "layout-setting", + `{ + "topNav":${this.$store.state.settings.topNav}, + "tagsView":${this.$store.state.settings.tagsView}, + "weatherView":${this.$store.state.settings.weatherView}, + "fixedHeader":${this.$store.state.settings.fixedHeader}, + "sidebarLogo":${this.$store.state.settings.sidebarLogo}, + "dynamicTitle":${this.$store.state.settings.dynamicTitle}, + "sideTheme":"${sideTheme}", + "theme":"${this.$store.state.settings.theme}" + }` + ); + // console.log(this.$store.state.settings.sideTheme) + }); + }, + }, +}; +</script> + +<style rel="stylesheet/scss" lang="scss" scoped> +::v-deep .el-input__inner { + background-color: transparent !important; + height: 100%; + font-size: 22px; + font-family: Source Han Sans CN, Source Han Sans CN; + font-weight: 400; + color: #07caf6; + margin-left: 68px; +} + +::v-deep .el-checkbox__label { + color: #fff; + font-size: 18px !important; + font-family: Source Han Sans CN, Source Han Sans CN; + font-weight: 400; + color: #ffffff !important; + margin-bottom: 10px; +} + +::v-deep .el-form-item__error { + position: absolute; + top: 75px; +} + +::v-deep .el-input__inner::placeholder { + color: #07caf6; +} + +.login { + position: relative; + height: 100%; + background-image: url("../assets/images/login-background.png"); + // background-size: 100% auto; + background-repeat: no-repeat; + background-size: 100% 100%; +} + +.login::after { + content: ""; + position: absolute; + width: 100%; + height: 120px; + background-image: url("../assets/images/login-head.png"); + background-repeat: no-repeat; + background-size: auto 100%; + background-position: center center; +} + +.title { + margin: 0px auto 10px auto; + font-size: 24px; + text-align: center; + color: #353f55; + letter-spacing: 2px; +} + +.login-form::after { + content: ""; + position: absolute; + left: -4px; + top: 0px; + width: 4px; + height: 100%; + background: linear-gradient( + 180deg, + #bdfff600 0%, + #bdfff6 50%, + #bdfff600 100% + ); +} + +.login-form::before { + content: ""; + position: absolute; + right: -4px; + top: 0px; + width: 4px; + height: 100%; + background: linear-gradient( + 180deg, + #bdfff600 0%, + #bdfff6 50%, + #bdfff600 100% + ); +} + +.login-form { + position: absolute; + left: 50%; + top: 20%; + transform: translateX(-50%); + width: 400px; + height: 500px; + background: #00000080; + border-radius: 0px 0px 0px 0px; + opacity: 1; + border: 4px solid #0c5963; + padding: 50px; + // margin-left: 50%; + + .loginTitle { + display: inline-flex; + width: 100%; + height: 45px; + font-size: 30px; + font-family: Source Han Sans CN, Source Han Sans CN; + font-weight: 500; + color: #ffffff; + justify-content: center; + align-items: center; + } + + .el-input { + width: 300px; + height: 60px; + border-radius: 4px 4px 4px 4px; + opacity: 1; + border: 1px solid #01cffe; + background-color: transparent; + margin-bottom: 12px; + + ::v-deep .el-input__inner { + font-size: 20px !important; + } + + input { + border: 0; + height: 35px; + } + } + + .input-icon { + height: 20px; + width: 20px; + margin-left: 2px; + position: relative; + left: 14px; + top: 18px; + } +} + +.login-tip { + font-size: 13px; + text-align: center; + color: #bfbfbf; +} + +.login-code { + width: 37%; + height: 35px; + float: right; + + img { + cursor: pointer; + vertical-align: middle; + } +} + +.el-login-footer { + height: 40px; + line-height: 40px; + position: fixed; + bottom: 0; + width: 100%; + text-align: center; + color: #fff; + font-family: Arial; + font-size: 12px; + letter-spacing: 1px; +} + +.login-code-img { + height: 35px; +} + +/* 重置按钮 */ +.el-button--goon { + font-size: 24px; + font-weight: 400; + color: #fff; + width: 380px; + height: 55px; + background: #07caf6; + border-radius: 4px; + opacity: 1; + border: none; +} + +.el-button--goon:hover { +} + +::v-deep .el-form-item__error { + top: 62px; +} +</style> diff --git a/ruoyi-ui/src/views/login.vue b/ruoyi-ui/src/views/login.vue index 6b0ab0a5..1f1ab1c8 100644 --- a/ruoyi-ui/src/views/login.vue +++ b/ruoyi-ui/src/views/login.vue @@ -1,43 +1,79 @@ <template> <div class="login"> - <!-- <Bg2 style=" width: 600px; height:800px; position: fixed; left: 100px; top:100px">发多少刚发的刚发的</Bg2> --> - <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form"> - <div style=" - width: 100%; - text-align: center; - padding-right: 20px; - padding-bottom: 10px; - "> - <!-- <img src="../assets/image/login-logo.png" width="120px;" /> --> - <div class="loginTitle">欢迎登录</div> + <div class="login-content"> + <div class="login-l"> + <div class="logo"><img src="../assets/images/login/logo.png" /></div> + <span>山东高速</span> + <span>济菏数字运营管理平台</span> </div> - <div class="title">{{ '' }}</div> - <el-form-item prop="username" style="margin-top: 40px;"> - <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="请输入用户名" class="username"> - <img slot="prefix" src="../assets/images/Vector.png" class="el-input__icon input-icon" /> - </el-input> - <!-- <div style="border-bottom: 1px solid #cfcfcf; margin-top: 5px"></div> --> - </el-form-item> - <el-form-item prop="password"> - <el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="请输入密码" - @keyup.enter.native="handleLogin" class="password"> - <img slot="prefix" src="../assets/images/locked.png" class="el-input__icon input-icon" /> - </el-input> - <!-- <div style="border-bottom: 1px solid #cfcfcf; margin-top: 5px"></div> --> - </el-form-item> - <Verify @success="capctchaCheckSuccess" :mode="'pop'" :captchaType="'blockPuzzle'" - :imgSize="{ width: '330px', height: '155px' }" ref="verify"></Verify> - <el-checkbox v-model="loginForm.rememberMe" style="margin:40px 0px 20px 0px;">记住密码</el-checkbox> - <el-form-item style="width: 100%; text-align: center"> - <el-button :loading="loading" size="medium" type="goon" style="width: 100%" @click.native.prevent="handleLogin"> - <span v-if="!loading">登 录</span> - <span v-else>登 录 中...</span> - </el-button> - <div style="float: right" v-if="register"> - <router-link class="link-type" :to="'/register'">立即注册</router-link> - </div> - </el-form-item> - </el-form> + <div class="login-r"> + <span class="title">欢迎登录</span> + <img class="line" src="../assets/images/login/139.png" /> + <el-form + ref="loginForm" + :model="loginForm" + :rules="loginRules" + class="login-form" + ><el-form-item prop="username"> + <el-input + v-model="loginForm.username" + type="text" + auto-complete="off" + placeholder="请输入用户名" + class="username" + > + <img + slot="prefix" + src="../assets/images/login/user.png" + class="el-input__icon input-icon" + /> + </el-input> + </el-form-item> + <el-form-item prop="password"> + <el-input + v-model="loginForm.password" + type="password" + auto-complete="off" + placeholder="请输入密码" + @keyup.enter.native="handleLogin" + class="password" + > + <img + slot="prefix" + src="../assets/images/login/password.png" + class="el-input__icon input-icon" + /> + </el-input> + </el-form-item> + <Verify + @success="capctchaCheckSuccess" + :mode="'pop'" + :captchaType="'blockPuzzle'" + :imgSize="{ width: '330px', height: '155px' }" + ref="verify" + ></Verify> + <el-checkbox v-model="loginForm.rememberMe">记住密码</el-checkbox> + <el-form-item> + <el-button + class="btn" + :loading="loading" + size="medium" + type="goon" + style="width: 100%" + @click.native.prevent="handleLogin" + > + <span v-if="!loading">登 录</span> + <span v-else>登 录 中...</span> + </el-button> + <div style="float: right" v-if="register"> + <router-link class="link-type" :to="'/register'" + >立即注册</router-link + > + </div> + </el-form-item> + </el-form> + </div> + </div> <!-- 底部 --> <div class="el-login-footer"> @@ -56,9 +92,7 @@ import { getUserDeptId } from "@/api/system/user"; import { listTunnels } from "@/api/equipment/tunnel/api.js"; import { getConfigKey } from "@/api/system/config.js"; - -import Bg2 from "@screen/components/Decorations/bg-2.vue" - +import Bg2 from "@screen/components/Decorations/bg-2.vue"; export default { components: { Verify, Bg2 }, @@ -132,7 +166,7 @@ export default { this.$store .dispatch("Login", this.loginForm) .then(() => { - this.$router.push({ path: this.redirect || "/" }).catch(() => { }); + this.$router.push({ path: this.redirect || "/" }).catch(() => {}); }) .catch(() => { this.loading = false; @@ -158,7 +192,6 @@ export default { } }); } else { - if (this.loginForm.rememberMe == true) { Cookies.set("username", this.loginForm.username, { expires: 30 }); Cookies.set("password", encrypt(this.loginForm.password), { @@ -174,7 +207,7 @@ export default { this.$store .dispatch("Login", this.loginForm) .then(() => { - this.$router.push({ path: this.redirect || "/" }).catch(() => { }); + this.$router.push({ path: this.redirect || "/" }).catch(() => {}); // this.getManageStation(); }) .catch(() => { @@ -188,7 +221,7 @@ export default { this.$cache.local.set("manageStation", res.msg); }); getConfigKey("sd.navigationBar").then((res) => { - console.log(res, "res") + console.log(res, "res"); let sideTheme = "theme-blue"; if (res.msg == "0") { sideTheme = "theme-dark"; @@ -224,155 +257,170 @@ export default { <style rel="stylesheet/scss" lang="scss" scoped> ::v-deep .el-input__inner { - background-color: transparent !important; - height: 100%; - font-size: 22px; - font-family: Source Han Sans CN, Source Han Sans CN; + background-color: #fff !important; + height: 34px; + font-size: 14px; font-weight: 400; - color: #07CAF6; - margin-left: 68px; + color: #999999; + border: 1px solid rgba(0, 145, 67, 0.5); + // margin-left: 20px; } ::v-deep .el-checkbox__label { - color: #fff; - font-size: 18px !important; - font-family: Source Han Sans CN, Source Han Sans CN; + color: #999; + font-size: 12px !important; font-weight: 400; - color: #FFFFFF !important; + color: #999 !important; margin-bottom: 10px; + margin-top: 20px; } - -::v-deep .el-form-item__error { - position: absolute; - top: 75px; -} +// ::v-deep .el-form-item__error { +// position: absolute; +// top: 75px; +// } ::v-deep .el-input__inner::placeholder { - color: #07CAF6; + color: #999999; } .login { position: relative; height: 100%; - background-image: url("../assets/images/login-background.png"); + background-image: url("../assets/images/login/login-background.png"); // background-size: 100% auto; background-repeat: no-repeat; background-size: 100% 100%; } -.login::after { - content: ""; - position: absolute; - width: 100%; - height: 120px; - background-image: url('../assets/images/login-head.png'); - background-repeat: no-repeat; - background-size: auto 100%; - background-position: center center; -} - -.title { - margin: 0px auto 10px auto; - font-size: 24px; - text-align: center; - color: #353f55; - letter-spacing: 2px; -} - -.login-form::after { - content: ""; - position: absolute; - left: -4px; - top: 0px; - width: 4px; - height: 100%; - background: linear-gradient(180deg, #BDFFF600 0%, #BDFFF6 50%, #BDFFF600 100%); - ; -} - -.login-form::before { - content: ""; - position: absolute; - right: -4px; - top: 0px; - width: 4px; - height: 100%; - background: linear-gradient(180deg, #BDFFF600 0%, #BDFFF6 50%, #BDFFF600 100%); -} - -.login-form { +.login-content { position: absolute; left: 50%; - top: 20%; + top: 367px; transform: translateX(-50%); - width: 400px; - height: 500px; - background: #00000080; - border-radius: 0px 0px 0px 0px; - opacity: 1; - border: 4px solid #0C5963; - padding: 50px; - // margin-left: 50%; - - .loginTitle { - display: inline-flex; - width: 100%; - height: 45px; - font-size: 30px; - font-family: Source Han Sans CN, Source Han Sans CN; - font-weight: 500; - color: #FFFFFF; - justify-content: center; - align-items: center; + width: 700px; + height: 367px; + background: rgba(10, 82, 123, 0.6); + display: flex; + .login-l { + // width: 300px; + margin-top: 42px; + margin-left: 25px; + .logo { + width: 177px; + height: 135px; + margin: auto; + margin-bottom: 10px; + img { + width: 100%; + height: 100%; + } + } + span { + display: block; + font-family: PingFang; + font-weight: 600; + font-size: 30px; + color: rgba(42, 217, 253, 0.7); + line-height: 35px; + text-align: center; + margin-top: 20px; + } } + .login-r { + width: 320px; + height: 290px; + margin-right: 27px; + margin-top: 42px; + margin-left: 20px; + background: #c9e5eb; + padding: 25px 22px; + + .title { + display: block; + width: 100%; + font-family: PingFang; + font-weight: 600; + font-size: 28px; + color: #009143; + text-align: center; + } + .line { + width: 210px; + height: 3px; + display: block; + margin: auto; + margin-bottom: 20px; + } + .btn { + margin: auto; + width: 155px; + height: 34px; + background: #009143; + border-radius: 1px; + color: #fff; + font-size: 16px; + display: flex; + align-items: center; + justify-content: center; + margin-top: 5px; + } + } + // .loginTitle { + // display: inline-flex; + // width: 100%; + // height: 45px; + // font-size: 30px; + // font-family: Source Han Sans CN, Source Han Sans CN; + // font-weight: 500; + // color: #ffffff; + // justify-content: center; + // align-items: center; + // } .el-input { - width: 300px; - height: 60px; - border-radius: 4px 4px 4px 4px; - opacity: 1; - border: 1px solid #01CFFE; - background-color: transparent; - margin-bottom: 12px; + width: 275px; + height: 36px; + border-radius: 2px; + background: #fff; + padding-left: 20px; ::v-deep .el-input__inner { - font-size: 20px !important; + font-size: 14px !important; } - input { border: 0; - height: 35px; + height: 36px; } } .input-icon { height: 20px; width: 20px; - margin-left: 2px; + margin-right: 10px; position: relative; - left: 14px; - top: 18px; + left: 10px; + top: 7px; } } -.login-tip { - font-size: 13px; - text-align: center; - color: #bfbfbf; -} +// .login-tip { +// font-size: 13px; +// text-align: center; +// color: #bfbfbf; +// } -.login-code { - width: 37%; - height: 35px; - float: right; +// .login-code { +// width: 37%; +// height: 35px; +// float: right; - img { - cursor: pointer; - vertical-align: middle; - } -} +// img { +// cursor: pointer; +// vertical-align: middle; +// } +// } .el-login-footer { height: 40px; @@ -395,18 +443,19 @@ export default { .el-button--goon { font-size: 24px; font-weight: 400; - color: #FFF; + color: #fff; width: 380px; height: 55px; - background: #07CAF6; + background: #07caf6; border-radius: 4px; opacity: 1; border: none; } -.el-button--goon:hover {} +.el-button--goon:hover { +} -::v-deep .el-form-item__error{ - top:62px; +::v-deep .el-form-item__error { + top: 62px; } </style>