This commit is contained in:
xhf 2025-03-20 16:49:33 +08:00
commit 00cfeae17a
6 changed files with 95 additions and 79 deletions

View File

@ -68,10 +68,10 @@ const toDocument = () => {
<Icon icon="ep:tools" /> <Icon icon="ep:tools" />
<div @click="toProfile">{{ t('common.profile') }}</div> <div @click="toProfile">{{ t('common.profile') }}</div>
</ElDropdownItem> </ElDropdownItem>
<ElDropdownItem> <!-- <ElDropdownItem>
<Icon icon="ep:menu" /> <Icon icon="ep:menu" />
<div @click="toDocument">{{ t('common.document') }}</div> <div @click="toDocument">{{ t('common.document') }}</div>
</ElDropdownItem> </ElDropdownItem> -->
<ElDropdownItem divided> <ElDropdownItem divided>
<Icon icon="ep:lock" /> <Icon icon="ep:lock" />
<div @click="lockScreen">{{ t('lock.lockScreen') }}</div> <div @click="lockScreen">{{ t('lock.lockScreen') }}</div>

View File

@ -22,9 +22,9 @@
<el-tab-pane :label="t('profile.info.resetPwd')" name="resetPwd"> <el-tab-pane :label="t('profile.info.resetPwd')" name="resetPwd">
<ResetPwd /> <ResetPwd />
</el-tab-pane> </el-tab-pane>
<el-tab-pane :label="t('profile.info.userSocial')" name="userSocial"> <!-- <el-tab-pane :label="t('profile.info.userSocial')" name="userSocial">
<UserSocial v-model:activeName="activeName" /> <UserSocial v-model:activeName="activeName" />
</el-tab-pane> </el-tab-pane> -->
</el-tabs> </el-tabs>
</div> </div>
</el-card> </el-card>

View File

@ -4,7 +4,7 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<div class="grid-content ep-bg-purple"> <div class="grid-content ep-bg-purple">
<el-card style="max-width: 100%"> <el-card style="max-width: 100%" shadow="never">
<el-row :gutter="5" v-if="data.taskStatusVO"> <el-row :gutter="5" v-if="data.taskStatusVO">
<el-col :span="4"> <el-col :span="4">
<div class="top-item"> <div class="top-item">
@ -41,7 +41,9 @@
<el-col :span="4"> <el-col :span="4">
<div class="top-item" style="border: none; color: #c60606"> <div class="top-item" style="border: none; color: #c60606">
<div class="top-item-title"> 异常 </div> <div class="top-item-title"> 异常 </div>
<div class="top-item-num" style="color: #c60606"> {{ data.taskStatusVO.abnormalNum || 0 }} </div> <div class="top-item-num" style="color: #c60606">
{{ data.taskStatusVO.abnormalNum || 0 }}
</div>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -50,7 +52,7 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<div class="grid-content ep-bg-purple"> <div class="grid-content ep-bg-purple">
<el-card style="max-width: 100%"> <el-card style="max-width: 100%" shadow="never">
<el-row :gutter="5" v-if="data.statistics"> <el-row :gutter="5" v-if="data.statistics">
<el-col :span="4"> <el-col :span="4">
<div class="top-item"> <div class="top-item">
@ -87,7 +89,9 @@
<el-col :span="4"> <el-col :span="4">
<div class="top-item" style="border: none; color: #c60606"> <div class="top-item" style="border: none; color: #c60606">
<div class="top-item-title"> 故障 </div> <div class="top-item-title"> 故障 </div>
<div class="top-item-num" style="color: #c60606"> {{ data.statistics.fault || 0 }} </div> <div class="top-item-num" style="color: #c60606">
{{ data.statistics.fault || 0 }}
</div>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -148,12 +152,12 @@
/> />
</div> </div>
<div style="width: 100%; padding-bottom: 120px" class="map-box-allBoard"> <div style="width: 100%; padding-bottom: 120px" class="map-box-allBoard">
<indexPage ref="indexPageRef" :isAllBoard="true"/> <indexPage ref="indexPageRef" :isAllBoard="true" />
</div> </div>
<div <div
style="position: fixed; bottom: 20px" style="position: fixed; bottom: 20px"
:style="{ width: widthVal + 'px', left: leftVal + 'px' }" :style="{ width: widthVal + 'px', left: leftVal + 'px' }"
v-if="data&&data.deviceStatusInfoVOS" v-if="data && data.deviceStatusInfoVOS"
> >
<div <div
ref="scrollContainer" ref="scrollContainer"
@ -164,9 +168,16 @@
@mouseleave="endDrag" @mouseleave="endDrag"
> >
<div class="content"> <div class="content">
<div v-for="(n, i) in data.deviceStatusInfoVOS" :key="i" class="item" :class="{ noBoarder: i === data.deviceStatusInfoVOS.length - 1 }"> <div
v-for="(n, i) in data.deviceStatusInfoVOS"
:key="i"
class="item"
:class="{ noBoarder: i === data.deviceStatusInfoVOS.length - 1 }"
>
<div class="scroll-container-item-left"> <div class="scroll-container-item-left">
<div class="scroll-container-item-left-title">{{ filterTypeFun(n.deviceType, typeList) }}</div> <div class="scroll-container-item-left-title">{{
filterTypeFun(n.deviceType, typeList)
}}</div>
<div class="scroll-container-item-left-img"> <div class="scroll-container-item-left-img">
<img <img
:src="n.defaultImage" :src="n.defaultImage"
@ -178,28 +189,22 @@
</div> </div>
<div class="scroll-container-item-right"> <div class="scroll-container-item-right">
<div class="scroll-container-item-right-item"> <div class="scroll-container-item-right-item">
<div class="scroll-container-item-right-item-title"> <div class="scroll-container-item-right-item-title"> 数量 </div>
数量 <div class="scroll-container-item-right-item-num">
</div> {{ n.totalNum || 0 }}
<div class="scroll-container-item-right-item-num"> </div>
{{ n.totalNum || 0 }}
</div>
</div> </div>
<div class="scroll-container-item-right-item" style="margin-top: 3px;"> <div class="scroll-container-item-right-item" style="margin-top: 3px">
<div class="scroll-container-item-right-item-title"> <div class="scroll-container-item-right-item-title"> 正常数量 </div>
正常数量 <div class="scroll-container-item-right-item-num">
</div> {{ n.normalNum || 0 }}
<div class="scroll-container-item-right-item-num"> </div>
{{ n.normalNum || 0 }}
</div>
</div> </div>
<div class="scroll-container-item-right-item" style="margin-top: 3px;"> <div class="scroll-container-item-right-item" style="margin-top: 3px">
<div class="scroll-container-item-right-item-title"> <div class="scroll-container-item-right-item-title"> 异常数量 </div>
异常数量 <div class="scroll-container-item-right-item-num" style="color: #c60606">
</div> {{ n.abnormalNum || 0 }}
<div class="scroll-container-item-right-item-num" style="color: #c60606"> </div>
{{ n.abnormalNum || 0 }}
</div>
</div> </div>
</div> </div>
</div> </div>
@ -308,7 +313,7 @@
import { ref, reactive, onMounted, onBeforeUnmount } from 'vue' import { ref, reactive, onMounted, onBeforeUnmount } from 'vue'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import * as ChartsApi from '@/api/boardCharts' import * as ChartsApi from '@/api/boardCharts'
import { DICT_TYPE, getIntDictOptions,getDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions, getDictOptions } from '@/utils/dict'
import indexPage from '../../mapPage/realTimeMap/components/indexPage.vue' import indexPage from '../../mapPage/realTimeMap/components/indexPage.vue'
import * as MapApi from '@/api/map/map' import * as MapApi from '@/api/map/map'
const router = useRouter() // const router = useRouter() //
@ -316,15 +321,17 @@ const indexPageRef = ref(null)
const typeList = ref([]) const typeList = ref([])
defineOptions({ name: 'BoardAllBoard' }) defineOptions({ name: 'BoardAllBoard' })
const data = ref({ const data = ref({
taskStatusVO: { // taskStatusVO: {
//
pendingExecutionNum: 0, pendingExecutionNum: 0,
underwayNum: 0, underwayNum: 0,
completedNum: 0, completedNum: 0,
cancelledNum: 0, cancelledNum: 0,
abnormalNum: 0, abnormalNum: 0,
tasksNumber: 0, tasksNumber: 0
}, },
statistics: { // statistics: {
//
total: 0, total: 0,
inTask: 0, inTask: 0,
doLock: 0, doLock: 0,
@ -336,7 +343,7 @@ const data = ref({
pendingExecution: [], // pendingExecution: [], //
robotWarnMsgDOS: [], // robotWarnMsgDOS: [], //
deviceStatusInfoVOS: [], // deviceStatusInfoVOS: [], //
robotElectricityLevelVOS: [], // robotElectricityLevelVOS: [] //
}) })
// //
const getAllData = async () => { const getAllData = async () => {
@ -390,11 +397,10 @@ const toManyWarnMsg = () => {
// //
const goCarBord = () => { const goCarBord = () => {
router.push({ router.push({
path: '/board/carBoard', path: '/board/carBoard'
}) })
} }
const list = ref([]) // const list = ref([]) //
const mapValue = ref([]) // const mapValue = ref([]) //
const mapInfo = ref(null) // const mapInfo = ref(null) //
// //
@ -530,8 +536,8 @@ const getLeft = () => {
} }
const getWidthPx = () => { const getWidthPx = () => {
let width = getElementWidthByClass('map-box-allBoard') let width = getElementWidthByClass('map-box-allBoard')
// console.log("pppppppppppppp",width) // console.log("pppppppppppppp",width)
widthVal.value = width widthVal.value = width
} }
const getLeftWidth = () => { const getLeftWidth = () => {
nextTick(() => { nextTick(() => {
@ -541,14 +547,14 @@ const getLeftWidth = () => {
} }
//type //type
const filterTypeFun = (type, list) => { const filterTypeFun = (type, list) => {
if (list.length) { if (list.length) {
let obj = list.find(item => { let obj = list.find((item) => {
return item.value == type return item.value == type
}) })
return obj == undefined ? type : obj.label return obj == undefined ? type : obj.label
} else { } else {
return type return type
} }
} }
onMounted(() => { onMounted(() => {
typeList.value = getDictOptions(DICT_TYPE.DEVICE_TYPE) typeList.value = getDictOptions(DICT_TYPE.DEVICE_TYPE)
@ -556,7 +562,6 @@ onMounted(() => {
getList() getList()
getLeftWidth() getLeftWidth()
window.addEventListener('resize', getLeftWidth) window.addEventListener('resize', getLeftWidth)
}) })
onBeforeUnmount(() => { onBeforeUnmount(() => {
window.removeEventListener('resize', getLeftWidth) window.removeEventListener('resize', getLeftWidth)
@ -754,25 +759,29 @@ onBeforeUnmount(() => {
flex-shrink: 0; flex-shrink: 0;
margin-left: 16px; margin-left: 16px;
} }
.noBoarder{ .noBoarder {
border-right: none; border-right: none;
} }
.scroll-container-item-right-item{ .scroll-container-item-right-item {
display: flex; display: flex;
flex-shrink: 0; flex-shrink: 0;
} }
.scroll-container-item-right-item-title{ .scroll-container-item-right-item-title {
font-family: PingFangSC, PingFang SC; font-family:
font-weight: 400; PingFangSC,
font-size: 12px; PingFang SC;
color: #0D162A; font-weight: 400;
flex-shrink: 0; font-size: 12px;
color: #0d162a;
flex-shrink: 0;
} }
.scroll-container-item-right-item-num{ .scroll-container-item-right-item-num {
font-family: PingFangSC, PingFang SC; font-family:
font-weight: 400; PingFangSC,
font-size: 12px; PingFang SC;
color: #0D162A; font-weight: 400;
flex-shrink: 0; font-size: 12px;
color: #0d162a;
flex-shrink: 0;
} }
</style> </style>

View File

@ -253,8 +253,20 @@
<el-text v-if="scope.row.taskStatus == 4">异常</el-text> <el-text v-if="scope.row.taskStatus == 4">异常</el-text>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="startTime" label="开始时间" align="center" width="150" /> <el-table-column
<el-table-column prop="endTime" label="结束时间" align="center" width="150" /> prop="startTime"
label="开始时间"
align="center"
:formatter="dateFormatter"
width="170"
/>
<el-table-column
prop="endTime"
label="结束时间"
align="center"
:formatter="dateFormatter"
width="170"
/>
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
<Pagination <Pagination

View File

@ -2713,7 +2713,6 @@ const cmConversionPx = (cWidth, cHeight) => {
pHeight pHeight
} }
} }
// 线 // 线
const getLineMidArrowPath = (item) => { const getLineMidArrowPath = (item) => {
const midX = (Number(item.startPointX) + Number(item.endPointX)) / 2 const midX = (Number(item.startPointX) + Number(item.endPointX)) / 2
@ -2738,7 +2737,6 @@ const getLineMidArrowPath = (item) => {
return `M ${startXArrow} ${startYArrow} L ${endXArrow} ${endYArrow}` return `M ${startXArrow} ${startYArrow} L ${endXArrow} ${endYArrow}`
} }
// 线 // 线
const getBezierMidArrowPath = (item) => { const getBezierMidArrowPath = (item) => {
const path = document.createElementNS('http://www.w3.org/2000/svg', 'path') const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')
@ -2748,7 +2746,6 @@ const getBezierMidArrowPath = (item) => {
const prevPoint = path.getPointAtLength(length / 2 - 1) const prevPoint = path.getPointAtLength(length / 2 - 1)
return `M ${prevPoint.x} ${prevPoint.y} L ${midPoint.x} ${midPoint.y}` return `M ${prevPoint.x} ${prevPoint.y} L ${midPoint.x} ${midPoint.y}`
} }
// 线 x // 线 x
const computedCurveTextX = (item) => { const computedCurveTextX = (item) => {
return ( return (
@ -2759,7 +2756,6 @@ const computedCurveTextX = (item) => {
4 4
) )
} }
// 线 y // 线 y
const computedCurveTextY = (item) => { const computedCurveTextY = (item) => {
return ( return (
@ -2770,7 +2766,6 @@ const computedCurveTextY = (item) => {
4 4
) )
} }
document.onmousedown = function (e) { document.onmousedown = function (e) {
// //
if (e.button == 2) { if (e.button == 2) {

View File

@ -1,5 +1,5 @@
<template> <template>
<ContentWrap> <el-card shadow="never">
<div class="top-box"> <div class="top-box">
<div class="top-box-left"> 统计视图 </div> <div class="top-box-left"> 统计视图 </div>
<div class="top-box-right"> <div class="top-box-right">
@ -12,18 +12,18 @@
<el-button style="margin-left: 16px" @click="openForm()">看板管理</el-button> <el-button style="margin-left: 16px" @click="openForm()">看板管理</el-button>
</div> </div>
</div> </div>
</ContentWrap> </el-card>
<div class=""> <div class="mt-4">
<el-row :gutter="16"> <el-row :gutter="16">
<el-col :span="12"> <el-col :span="12">
<el-card style="width: 100%"> <el-card style="width: 100%" shadow="never">
<div class="charts-title"> 任务总览 </div> <div class="charts-title"> 任务总览 </div>
<div ref="chartDom" style="width: 100%; height: 400px"></div> <div ref="chartDom" style="width: 100%; height: 400px"></div>
</el-card> </el-card>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-card style="width: 100%"> <el-card style="width: 100%" shadow="never">
<div class="charts-title"> 任务完成率 </div> <div class="charts-title"> 任务完成率 </div>
<div ref="chartDomFinish" style="width: 100%; height: 400px"></div> <div ref="chartDomFinish" style="width: 100%; height: 400px"></div>
</el-card> </el-card>
@ -31,13 +31,13 @@
</el-row> </el-row>
<el-row :gutter="16" style="margin-top: 12px"> <el-row :gutter="16" style="margin-top: 12px">
<el-col :span="12"> <el-col :span="12">
<el-card style="width: 100%"> <el-card style="width: 100%" shadow="never">
<div class="charts-title"> AGV工作利用率统计 </div> <div class="charts-title"> AGV工作利用率统计 </div>
<div ref="chartDomAgv" style="width: 100%; height: 400px"></div> <div ref="chartDomAgv" style="width: 100%; height: 400px"></div>
</el-card> </el-card>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-card style="width: 100%"> <el-card style="width: 100%" shadow="never">
<div class="charts-title"> 任务异常数 </div> <div class="charts-title"> 任务异常数 </div>
<div ref="chartDomError" style="width: 100%; height: 400px"></div> <div ref="chartDomError" style="width: 100%; height: 400px"></div>
</el-card> </el-card>