Merge branch 'xhf' of http://git.znkjfw.com/ak/zn-admin-vue3-wcs into xhf
This commit is contained in:
commit
00cfeae17a
@ -68,10 +68,10 @@ const toDocument = () => {
|
||||
<Icon icon="ep:tools" />
|
||||
<div @click="toProfile">{{ t('common.profile') }}</div>
|
||||
</ElDropdownItem>
|
||||
<ElDropdownItem>
|
||||
<!-- <ElDropdownItem>
|
||||
<Icon icon="ep:menu" />
|
||||
<div @click="toDocument">{{ t('common.document') }}</div>
|
||||
</ElDropdownItem>
|
||||
</ElDropdownItem> -->
|
||||
<ElDropdownItem divided>
|
||||
<Icon icon="ep:lock" />
|
||||
<div @click="lockScreen">{{ t('lock.lockScreen') }}</div>
|
||||
|
@ -22,9 +22,9 @@
|
||||
<el-tab-pane :label="t('profile.info.resetPwd')" name="resetPwd">
|
||||
<ResetPwd />
|
||||
</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" />
|
||||
</el-tab-pane>
|
||||
</el-tab-pane> -->
|
||||
</el-tabs>
|
||||
</div>
|
||||
</el-card>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<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-col :span="4">
|
||||
<div class="top-item">
|
||||
@ -41,7 +41,9 @@
|
||||
<el-col :span="4">
|
||||
<div class="top-item" style="border: none; color: #c60606">
|
||||
<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>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -50,7 +52,7 @@
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<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-col :span="4">
|
||||
<div class="top-item">
|
||||
@ -87,7 +89,9 @@
|
||||
<el-col :span="4">
|
||||
<div class="top-item" style="border: none; color: #c60606">
|
||||
<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>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -148,12 +152,12 @@
|
||||
/>
|
||||
</div>
|
||||
<div style="width: 100%; padding-bottom: 120px" class="map-box-allBoard">
|
||||
<indexPage ref="indexPageRef" :isAllBoard="true"/>
|
||||
<indexPage ref="indexPageRef" :isAllBoard="true" />
|
||||
</div>
|
||||
<div
|
||||
style="position: fixed; bottom: 20px"
|
||||
:style="{ width: widthVal + 'px', left: leftVal + 'px' }"
|
||||
v-if="data&&data.deviceStatusInfoVOS"
|
||||
v-if="data && data.deviceStatusInfoVOS"
|
||||
>
|
||||
<div
|
||||
ref="scrollContainer"
|
||||
@ -164,9 +168,16 @@
|
||||
@mouseleave="endDrag"
|
||||
>
|
||||
<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-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">
|
||||
<img
|
||||
:src="n.defaultImage"
|
||||
@ -178,28 +189,22 @@
|
||||
</div>
|
||||
<div class="scroll-container-item-right">
|
||||
<div class="scroll-container-item-right-item">
|
||||
<div class="scroll-container-item-right-item-title">
|
||||
数量:
|
||||
</div>
|
||||
<div class="scroll-container-item-right-item-num">
|
||||
{{ n.totalNum || 0 }}
|
||||
</div>
|
||||
<div class="scroll-container-item-right-item-title"> 数量: </div>
|
||||
<div class="scroll-container-item-right-item-num">
|
||||
{{ n.totalNum || 0 }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="scroll-container-item-right-item" style="margin-top: 3px;">
|
||||
<div class="scroll-container-item-right-item-title">
|
||||
正常数量:
|
||||
</div>
|
||||
<div class="scroll-container-item-right-item-num">
|
||||
{{ n.normalNum || 0 }}
|
||||
</div>
|
||||
<div class="scroll-container-item-right-item" style="margin-top: 3px">
|
||||
<div class="scroll-container-item-right-item-title"> 正常数量: </div>
|
||||
<div class="scroll-container-item-right-item-num">
|
||||
{{ n.normalNum || 0 }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="scroll-container-item-right-item" style="margin-top: 3px;">
|
||||
<div class="scroll-container-item-right-item-title">
|
||||
异常数量:
|
||||
</div>
|
||||
<div class="scroll-container-item-right-item-num" style="color: #c60606">
|
||||
{{ n.abnormalNum || 0 }}
|
||||
</div>
|
||||
<div class="scroll-container-item-right-item" style="margin-top: 3px">
|
||||
<div class="scroll-container-item-right-item-title"> 异常数量: </div>
|
||||
<div class="scroll-container-item-right-item-num" style="color: #c60606">
|
||||
{{ n.abnormalNum || 0 }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -308,7 +313,7 @@
|
||||
import { ref, reactive, onMounted, onBeforeUnmount } from 'vue'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
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 * as MapApi from '@/api/map/map'
|
||||
const router = useRouter() // 路由对象
|
||||
@ -316,15 +321,17 @@ const indexPageRef = ref(null)
|
||||
const typeList = ref([])
|
||||
defineOptions({ name: 'BoardAllBoard' })
|
||||
const data = ref({
|
||||
taskStatusVO: { //顶部左边统计
|
||||
taskStatusVO: {
|
||||
//顶部左边统计
|
||||
pendingExecutionNum: 0,
|
||||
underwayNum: 0,
|
||||
completedNum: 0,
|
||||
cancelledNum: 0,
|
||||
abnormalNum: 0,
|
||||
tasksNumber: 0,
|
||||
tasksNumber: 0
|
||||
},
|
||||
statistics: { //顶部右边 统计
|
||||
statistics: {
|
||||
//顶部右边 统计
|
||||
total: 0,
|
||||
inTask: 0,
|
||||
doLock: 0,
|
||||
@ -336,7 +343,7 @@ const data = ref({
|
||||
pendingExecution: [], //待执行
|
||||
robotWarnMsgDOS: [], //异常信息
|
||||
deviceStatusInfoVOS: [], //设备信息
|
||||
robotElectricityLevelVOS: [], //车辆信息
|
||||
robotElectricityLevelVOS: [] //车辆信息
|
||||
})
|
||||
//获取数据
|
||||
const getAllData = async () => {
|
||||
@ -390,11 +397,10 @@ const toManyWarnMsg = () => {
|
||||
// 前往车辆看板
|
||||
const goCarBord = () => {
|
||||
router.push({
|
||||
path: '/board/carBoard',
|
||||
|
||||
path: '/board/carBoard'
|
||||
})
|
||||
}
|
||||
const list = ref([]) // 地图区域列表
|
||||
const list = ref([]) // 地图区域列表
|
||||
const mapValue = ref([]) //选中的区域绑定的数组值
|
||||
const mapInfo = ref(null) //选中的区域
|
||||
//获取地图区域
|
||||
@ -530,8 +536,8 @@ const getLeft = () => {
|
||||
}
|
||||
const getWidthPx = () => {
|
||||
let width = getElementWidthByClass('map-box-allBoard')
|
||||
// console.log("pppppppppppppp",width)
|
||||
widthVal.value = width
|
||||
// console.log("pppppppppppppp",width)
|
||||
widthVal.value = width
|
||||
}
|
||||
const getLeftWidth = () => {
|
||||
nextTick(() => {
|
||||
@ -541,14 +547,14 @@ const getLeftWidth = () => {
|
||||
}
|
||||
//根据type和列表返回对应中文
|
||||
const filterTypeFun = (type, list) => {
|
||||
if (list.length) {
|
||||
let obj = list.find(item => {
|
||||
return item.value == type
|
||||
})
|
||||
return obj == undefined ? type : obj.label
|
||||
} else {
|
||||
return type
|
||||
}
|
||||
if (list.length) {
|
||||
let obj = list.find((item) => {
|
||||
return item.value == type
|
||||
})
|
||||
return obj == undefined ? type : obj.label
|
||||
} else {
|
||||
return type
|
||||
}
|
||||
}
|
||||
onMounted(() => {
|
||||
typeList.value = getDictOptions(DICT_TYPE.DEVICE_TYPE)
|
||||
@ -556,7 +562,6 @@ onMounted(() => {
|
||||
getList()
|
||||
getLeftWidth()
|
||||
window.addEventListener('resize', getLeftWidth)
|
||||
|
||||
})
|
||||
onBeforeUnmount(() => {
|
||||
window.removeEventListener('resize', getLeftWidth)
|
||||
@ -754,25 +759,29 @@ onBeforeUnmount(() => {
|
||||
flex-shrink: 0;
|
||||
margin-left: 16px;
|
||||
}
|
||||
.noBoarder{
|
||||
.noBoarder {
|
||||
border-right: none;
|
||||
}
|
||||
.scroll-container-item-right-item{
|
||||
.scroll-container-item-right-item {
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.scroll-container-item-right-item-title{
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 12px;
|
||||
color: #0D162A;
|
||||
flex-shrink: 0;
|
||||
.scroll-container-item-right-item-title {
|
||||
font-family:
|
||||
PingFangSC,
|
||||
PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 12px;
|
||||
color: #0d162a;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.scroll-container-item-right-item-num{
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 12px;
|
||||
color: #0D162A;
|
||||
flex-shrink: 0;
|
||||
.scroll-container-item-right-item-num {
|
||||
font-family:
|
||||
PingFangSC,
|
||||
PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 12px;
|
||||
color: #0d162a;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
</style>
|
||||
|
@ -253,8 +253,20 @@
|
||||
<el-text v-if="scope.row.taskStatus == 4">异常</el-text>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="startTime" label="开始时间" align="center" width="150" />
|
||||
<el-table-column prop="endTime" label="结束时间" align="center" width="150" />
|
||||
<el-table-column
|
||||
prop="startTime"
|
||||
label="开始时间"
|
||||
align="center"
|
||||
:formatter="dateFormatter"
|
||||
width="170"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="endTime"
|
||||
label="结束时间"
|
||||
align="center"
|
||||
:formatter="dateFormatter"
|
||||
width="170"
|
||||
/>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
|
@ -2713,7 +2713,6 @@ const cmConversionPx = (cWidth, cHeight) => {
|
||||
pHeight
|
||||
}
|
||||
}
|
||||
|
||||
// 计算直线中间箭头的路径
|
||||
const getLineMidArrowPath = (item) => {
|
||||
const midX = (Number(item.startPointX) + Number(item.endPointX)) / 2
|
||||
@ -2738,7 +2737,6 @@ const getLineMidArrowPath = (item) => {
|
||||
|
||||
return `M ${startXArrow} ${startYArrow} L ${endXArrow} ${endYArrow}`
|
||||
}
|
||||
|
||||
// 计算贝塞尔曲线中间箭头的路径(简单近似)
|
||||
const getBezierMidArrowPath = (item) => {
|
||||
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)
|
||||
return `M ${prevPoint.x} ${prevPoint.y} L ${midPoint.x} ${midPoint.y}`
|
||||
}
|
||||
|
||||
// 计算贝塞尔曲线中间文字的 x 坐标
|
||||
const computedCurveTextX = (item) => {
|
||||
return (
|
||||
@ -2759,7 +2756,6 @@ const computedCurveTextX = (item) => {
|
||||
4
|
||||
)
|
||||
}
|
||||
|
||||
// 计算贝塞尔曲线中间文字的 y 坐标
|
||||
const computedCurveTextY = (item) => {
|
||||
return (
|
||||
@ -2770,7 +2766,6 @@ const computedCurveTextY = (item) => {
|
||||
4
|
||||
)
|
||||
}
|
||||
|
||||
document.onmousedown = function (e) {
|
||||
//左击
|
||||
if (e.button == 2) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<ContentWrap>
|
||||
<el-card shadow="never">
|
||||
<div class="top-box">
|
||||
<div class="top-box-left"> 统计视图 </div>
|
||||
<div class="top-box-right">
|
||||
@ -12,18 +12,18 @@
|
||||
<el-button style="margin-left: 16px" @click="openForm()">看板管理</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</ContentWrap>
|
||||
</el-card>
|
||||
|
||||
<div class="">
|
||||
<div class="mt-4">
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="12">
|
||||
<el-card style="width: 100%">
|
||||
<el-card style="width: 100%" shadow="never">
|
||||
<div class="charts-title"> 任务总览 </div>
|
||||
<div ref="chartDom" style="width: 100%; height: 400px"></div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-card style="width: 100%">
|
||||
<el-card style="width: 100%" shadow="never">
|
||||
<div class="charts-title"> 任务完成率 </div>
|
||||
<div ref="chartDomFinish" style="width: 100%; height: 400px"></div>
|
||||
</el-card>
|
||||
@ -31,13 +31,13 @@
|
||||
</el-row>
|
||||
<el-row :gutter="16" style="margin-top: 12px">
|
||||
<el-col :span="12">
|
||||
<el-card style="width: 100%">
|
||||
<el-card style="width: 100%" shadow="never">
|
||||
<div class="charts-title"> AGV工作利用率统计 </div>
|
||||
<div ref="chartDomAgv" style="width: 100%; height: 400px"></div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-card style="width: 100%">
|
||||
<el-card style="width: 100%" shadow="never">
|
||||
<div class="charts-title"> 任务异常数 </div>
|
||||
<div ref="chartDomError" style="width: 100%; height: 400px"></div>
|
||||
</el-card>
|
||||
|
Loading…
Reference in New Issue
Block a user