From 30d31694407fd089a3df140e141c9520e7fe811c Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 08 Apr 2025 17:03:43 +0800
Subject: [PATCH] Merge branch 'master' of http://139.196.74.78:10010/r/drone/command-center-dashboard
---
src/views/Home/EventOverviewDetail/EventOverviewDetail.vue | 2
src/components/CommonDateTime.vue | 2
src/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue | 199 +++++++++++++++++++++++++++++++++++++++
src/api/home/common.js | 8 -
src/api/system/dictbiz.js | 7 +
src/api/home/event.js | 19 +++
.prettierrc.json | 4
src/views/TaskManage/components/TaskAlgorithmBusiness.vue | 7
8 files changed, 234 insertions(+), 14 deletions(-)
diff --git a/.prettierrc.json b/.prettierrc.json
index aaa321c..c78fa85 100644
--- a/.prettierrc.json
+++ b/.prettierrc.json
@@ -1,5 +1,5 @@
{
- "printWidth": 100,
+ "printWidth": 120,
"tabWidth": 2,
"semi": false,
"singleAttributePerLine": false,
@@ -21,4 +21,4 @@
}
}
]
-}
\ No newline at end of file
+}
diff --git a/src/api/home/common.js b/src/api/home/common.js
index 9a56796..0ebc986 100644
--- a/src/api/home/common.js
+++ b/src/api/home/common.js
@@ -1,13 +1,5 @@
import request from '@/axios'
-// 字典查询 行业 算法 工单类型
-export const getDictionary = params => {
- return request({
- url: `/blade-system/dict-biz/listByCodes?codes=${params}`,
- method: 'get',
- })
-}
-
// 区域
export const deptsByAreaCode = params => {
return request({
diff --git a/src/api/home/event.js b/src/api/home/event.js
index 9c92dbf..1bdb630 100644
--- a/src/api/home/event.js
+++ b/src/api/home/event.js
@@ -35,3 +35,22 @@
data,
})
}
+
+
+// 大屏首页=>事件状态数量
+export const getEventStatusNum = data => {
+ return request({
+ url: '/drone-device-core/jobEvent/eventStatusNum',
+ method: 'post',
+ data,
+ })
+}
+
+// 工单列表=>事件数量(所有)
+export const getEvenNum = data => {
+ return request({
+ url: '/drone-device-core/jobEvent/evenNum',
+ method: 'post',
+ data,
+ })
+}
diff --git a/src/api/system/dictbiz.js b/src/api/system/dictbiz.js
index 5488f55..2b00ea2 100644
--- a/src/api/system/dictbiz.js
+++ b/src/api/system/dictbiz.js
@@ -86,3 +86,10 @@
params,
})
}
+// 多个字典查询
+export const getMultipleDictionary = params => {
+ return request({
+ url: `/blade-system/dict-biz/listByCodes?codes=${params}`,
+ method: 'get',
+ })
+}
diff --git a/src/components/CommonDateTime.vue b/src/components/CommonDateTime.vue
index 2cf3a06..07202e5 100644
--- a/src/components/CommonDateTime.vue
+++ b/src/components/CommonDateTime.vue
@@ -51,7 +51,7 @@
};
const change = value => {
- // todo 我对接
+ // todo 待对接
// emit('change', value);
};
diff --git a/src/views/Home/EventOverviewDetail/EventOverviewDetail.vue b/src/views/Home/EventOverviewDetail/EventOverviewDetail.vue
index c53b87c..35d24ed 100644
--- a/src/views/Home/EventOverviewDetail/EventOverviewDetail.vue
+++ b/src/views/Home/EventOverviewDetail/EventOverviewDetail.vue
@@ -1,7 +1,9 @@
<template>
<EventOverviewDetailLeft />
+ <EventOverviewDetailRight/>
</template>
<script setup>
import EventOverviewDetailLeft from './EventOverviewDetailLeft/EventOverviewDetailLeft.vue'
+import EventOverviewDetailRight from '@/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue'
</script>
<style scoped lang="scss"></style>
diff --git a/src/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue b/src/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue
new file mode 100644
index 0000000..1706c28
--- /dev/null
+++ b/src/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue
@@ -0,0 +1,199 @@
+<template>
+ <div class="right">
+ <div>工单列表</div>
+ <div>
+ <el-date-picker
+ style="width: 100%"
+ v-model="timeArr"
+ type="daterange"
+ :value-format="timeFormat"
+ range-separator="-"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期"
+ @change="timeChange"
+ />
+ </div>
+
+ <el-select style="width: 100%" v-model="params.device_sn" placeholder="机巢" filterable clearable @change="getList">
+ <el-option v-for="item in deviceList" :label="item.nickname" :value="item.device_sn" :key="item.device_sn" />
+ </el-select>
+ <el-select v-model="params.word_order_type" placeholder="工单类型" filterable clearable @change="getList">
+ <el-option v-for="item in workOrderType" :label="item.dictValue" :value="item.dictKey" :key="item.dictKey" />
+ </el-select>
+ <div class="statusList">
+ <div v-for="item in statusList" @click="statusClick(item)" :class="{ active: item.active }">
+ <div>{{ item.name }}</div>
+ <div>{{ item.num || 0 }}</div>
+ </div>
+ </div>
+
+ <el-checkbox-group v-model="params.eventKeys" @change="getList">
+ <el-checkbox
+ v-for="item in eventList"
+ :label="item.name + ' ' + item.value"
+ :value="item.status"
+ :key="item.dictKey"
+ />
+ </el-checkbox-group>
+
+ <div class="eventList">
+ <div class="eventListItem" v-for="item in list">
+ <img class="eventListItemImg" :src="item.photo_url" alt="" />
+ <div class="eventListItemText">
+ <div class="eventListItemName">{{ item.event_name }}</div>
+ <div class="eventListItemTime">{{ item.create_time }}</div>
+ </div>
+ </div>
+ </div>
+
+ <el-pagination
+ background
+ v-model:current-page="params.current"
+ v-model:page-size="params.size"
+ layout="total, prev, pager, next"
+ :total="total"
+ @change="pageChange"
+ />
+ </div>
+</template>
+<script setup>
+import dayjs from 'dayjs'
+import { selectDevicePage } from '@/api/home/machineNest'
+import { getMultipleDictionary } from '@/api/system/dictbiz'
+import { getEvenNum, getEventPage, getEventStatusNum, getEventTrend } from '@/api/home/event'
+
+const timeFormat = 'YYYY-MM-DD HH:mm:ss'
+const today = dayjs().format(timeFormat)
+const oneWeekAgo = dayjs().subtract(7, 'day').format(timeFormat)
+const timeArr = ref([oneWeekAgo, today])
+const deviceList = ref([])
+
+const total = ref(0)
+const params = ref({
+ start_date: timeArr.value[0],
+ end_date: timeArr.value[1],
+ device_sn: undefined,
+ word_order_type: undefined,
+ status: undefined,
+ eventKeys: [],
+ current: 1,
+ size: 10,
+})
+
+const statusClick = row => {
+ params.value.status = row.id || undefined
+ statusList.value = statusList.value.map(item => ({
+ ...item,
+ active: item.name === row.name,
+ }))
+ getList()
+}
+
+const getDeviceList = async () => {
+ const res = await selectDevicePage({ current: 1, size: 99999, type: 1 })
+ deviceList.value = res.data?.data?.records || []
+}
+
+// 工单类型
+const workOrderType = ref([])
+const getDictList = () => {
+ getMultipleDictionary('WORK_ORDER_TYPE,SF').then(res => {
+ workOrderType.value = res.data.data?.['WORK_ORDER_TYPE'] || []
+ })
+}
+
+// 事件状态+数量
+const statusList = ref([])
+const getEventStatusNumFun = () => {
+ const [start_date, end_date] = timeArr.value
+ getEventStatusNum({ start_date, end_date }).then(res => {
+ statusList.value = (res.data?.data || []).map(i => ({ ...i, active: false }))
+ statusList.value[0].active = true
+ })
+}
+
+// 事件+数量
+const eventList = ref([])
+const getEventList = () => {
+ const [start_date, end_date] = timeArr.value
+ getEvenNum({ start_date, end_date }).then(res => {
+ eventList.value = res.data.data
+ })
+}
+
+const timeChange = value => {
+ const [start_date, end_date] = timeArr.value
+ params.value.start_date = start_date
+ params.value.end_date = end_date
+ // 重置
+ getEventStatusNumFun()
+ getEventList()
+ params.value.status = undefined
+ params.value.eventKeys = undefined
+ getList()
+}
+
+const pageChange = val => {
+ params.value.current = val
+ getList()
+}
+
+const list = ref([])
+const getList = () => {
+ getEventPage(params.value).then(res => {
+ const resData = res.data.data
+ list.value = resData?.records || []
+ total.value = resData.total
+ })
+}
+
+onMounted(() => {
+ getDeviceList()
+ getDictList()
+ getEventStatusNumFun()
+ getEventList()
+ getList()
+})
+</script>
+<style scoped lang="scss">
+.right {
+ position: absolute;
+ right: 0;
+ top: 88px;
+ color: black;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ height: 900px;
+ width: 400px;
+ background: white;
+ font-size: 18px;
+
+ .statusList {
+ display: flex;
+ flex-wrap: wrap;
+
+ .active {
+ background: #19ad8d;
+ }
+ }
+
+ .eventList {
+ display: flex;
+ flex-wrap: wrap;
+
+ .eventListItem {
+ .eventListItemImg {
+ width: 120px;
+ height: 100px;
+ }
+
+ .eventListItemText {
+ display: flex;
+ justify-content: space-between;
+ font-size: 16px;
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/TaskManage/components/TaskAlgorithmBusiness.vue b/src/views/TaskManage/components/TaskAlgorithmBusiness.vue
index 2dcd44a..8878c26 100644
--- a/src/views/TaskManage/components/TaskAlgorithmBusiness.vue
+++ b/src/views/TaskManage/components/TaskAlgorithmBusiness.vue
@@ -13,7 +13,8 @@
</template>
<script setup>
-import { getDictionary } from '@/api/home/common';
+
+import { getMultipleDictionary } from '@/api/system/dictbiz'
// 接收父组件传参
const props = defineProps({
@@ -36,7 +37,7 @@
// 请求字典字段
const requestDictionary = () => {
- getDictionary('SF,HYLB').then((res) => {
+ getMultipleDictionary('SF,HYLB').then((res) => {
if (res.code !== 0) {
// 处理数据
taskAlgorithm.value = res.data.data['SF'];
@@ -57,4 +58,4 @@
onMounted(() => {
requestDictionary();
});
-</script>
\ No newline at end of file
+</script>
--
Gitblit v1.9.3