From 888bc41f22b18b6ab05f248266a2c36d046ff717 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Tue, 01 Apr 2025 13:37:45 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
src/page/login/index.vue | 246 +++++++++++++++---------------
src/views/SignMachineNest/components/MachineRight/InspectionRaskList.vue | 140 ++++++++++++++---
src/views/Home/components/HomeLeft/OverviewNext.vue | 6
src/api/home/machineNest.js | 8 +
src/styles/login.scss | 7
src/views/SignMachineNest/components/MachineLeft/InspectionRaskDetails.vue | 5
src/api/home/index.js | 35 ++++
src/views/SignMachineNest/components/MachineLeft/MachineData.vue | 23 ++
8 files changed, 309 insertions(+), 161 deletions(-)
diff --git a/src/api/home/index.js b/src/api/home/index.js
index 889838d..7d5b8fd 100644
--- a/src/api/home/index.js
+++ b/src/api/home/index.js
@@ -63,3 +63,38 @@
method: 'get',
});
};
+
+// 历史巡检任务列表
+export const getBeforeJob = (data) => {
+ return request({
+ url: 'drone-device-core/wayline/waylineJobInfo/beforeJob',
+ method: 'post',
+ data
+ });
+};
+// 当前巡检任务列表
+export const getTodayJob = (data) => {
+ return request({
+ url: 'drone-device-core/wayline/waylineJobInfo/todayJob',
+ method: 'post',
+ data
+ });
+};
+
+// 巡检任务详情 柱状图
+export const jobNumBar = (data) => {
+ return request({
+ url: 'drone-device-core/wayline/waylineJobInfo/jobNumBar',
+ method: 'post',
+ data
+ });
+};
+// 巡检任务详情 饼图
+export const industryJobNumPieChart = (data) => {
+ return request({
+ url: '/drone-device-core/wayline/waylineJobInfo/industryJobNumPieChart',
+ method: 'post',
+ data
+ });
+};
+
diff --git a/src/api/home/machineNest.js b/src/api/home/machineNest.js
index 39179a7..e6cbba7 100644
--- a/src/api/home/machineNest.js
+++ b/src/api/home/machineNest.js
@@ -20,3 +20,11 @@
params,
});
};
+// 机巢数据
+export const getFlightStatistics = (dockSn) => {
+ return request({
+ url: `drone-device-core/manage/api/v1/devices/getFlightStatistics?dockSn=${dockSn}`,
+ method: 'get',
+ params: {},
+ });
+};
diff --git a/src/page/login/index.vue b/src/page/login/index.vue
index 88b429a..7e0f0a8 100644
--- a/src/page/login/index.vue
+++ b/src/page/login/index.vue
@@ -1,5 +1,5 @@
<template>
- <div class="login-index" @keyup.enter="handleLogin">
+ <div class="login-container" @keyup.enter="handleLogin">
<div class="login-header">
<div class="title">中图智飞低空智能感知网平台</div>
</div>
@@ -131,127 +131,127 @@
</script>
<style lang="scss" scoped>
-.login-index {
- position: relative;
- width: 100%;
- height: 100%;
- background: url('@/assets/images/login/bg.png') no-repeat center / 100% 100%;
- .login-header {
- background: url('@/assets/images/login/big-title.png') no-repeat center / 100% 100%;
- width: 100%;
- height: 102px;
- position: relative;
- .title {
- position: absolute;
- left: 637px;
- top: 22px;
- width: 646px;
- height: 58px;
- font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
- font-weight: 400;
- font-size: 54px;
- line-height: 58px;
- // text-shadow: 0px 2px 6px #0C3D79;
- text-align: center;
- font-style: normal;
- text-transform: none;
- color: #fff;
- // background: linear-gradient(90deg, #FFFFFF 0%, #B2D5FF 100%);
- }
- }
- .login-left-title {
- position: absolute;
- left: 147px;
- top: 263px;
- width: 926px;
- height: 42px;
- font-family: Source Han Sans CN, Source Han Sans CN;
- font-weight: bold;
- font-size: 28px;
- line-height: 33px;
- letter-spacing: 30px;
- // text-shadow: 0px 4px 6px rgba(0,0,0,0.72);
- color: #fff;
- text-align: center;
- font-style: normal;
- text-transform: none;
- // background: linear-gradient(90.00000000000004deg, #FFFFFF 0%, #E3FEFF 63%, #88BAFF 100%);
- }
- .login-left {
- position: absolute;
- top: 334px;
- left: 147px;
- width: 858px;
- height: 540px;
- background: url('@/assets/images/login/left-logo.png') no-repeat center / 100% 100%;
- }
+// .login-index {
+// position: relative;
+// width: 100%;
+// height: 100%;
+// background: url('@/assets/images/login/bg.png') no-repeat center / 100% 100%;
+// .login-header {
+// background: url('@/assets/images/login/big-title.png') no-repeat center / 100% 100%;
+// width: 100%;
+// height: 102px;
+// position: relative;
+// .title {
+// position: absolute;
+// left: 637px;
+// top: 22px;
+// width: 646px;
+// height: 58px;
+// font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
+// font-weight: 400;
+// font-size: 54px;
+// line-height: 58px;
+// // text-shadow: 0px 2px 6px #0C3D79;
+// text-align: center;
+// font-style: normal;
+// text-transform: none;
+// color: #fff;
+// // background: linear-gradient(90deg, #FFFFFF 0%, #B2D5FF 100%);
+// }
+// }
+// .login-left-title {
+// position: absolute;
+// left: 147px;
+// top: 263px;
+// width: 926px;
+// height: 42px;
+// font-family: Source Han Sans CN, Source Han Sans CN;
+// font-weight: bold;
+// font-size: 28px;
+// line-height: 33px;
+// letter-spacing: 30px;
+// // text-shadow: 0px 4px 6px rgba(0,0,0,0.72);
+// color: #fff;
+// text-align: center;
+// font-style: normal;
+// text-transform: none;
+// // background: linear-gradient(90.00000000000004deg, #FFFFFF 0%, #E3FEFF 63%, #88BAFF 100%);
+// }
+// .login-left {
+// position: absolute;
+// top: 334px;
+// left: 147px;
+// width: 858px;
+// height: 540px;
+// background: url('@/assets/images/login/left-logo.png') no-repeat center / 100% 100%;
+// }
- .login-right {
- position: absolute;
- top: 305px;
- right: 291px;
- width: 488px;
- height: 508px;
- background: url('@/assets/images/login/right-login-info.png') no-repeat center / 100% 100%;
- .user-login {
- position: absolute;
- top: 72px;
- left: 180px;
- width: 118px;
- height: 26px;
- font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
- font-weight: 400;
- font-size: 32px;
- // color: #D1E0F9;
- color: #fff;
- line-height: 26px;
- text-align: center;
- }
- .username {
- position: absolute;
- top: 127px;
- left: 46px;
- width: 394px;
- height: 72px;
- background: url('../assets/images/login/username.png') no-repeat center / 100% 100%;
- // :deep(.el-form-item) {
- // width: 120px;
- // }
- }
- .password {
- position: absolute;
- top: 208px;
- left: 46px;
- width: 394px;
- height: 72px;
- background: url('../assets/images/login/password.png') no-repeat center / 100% 100%;
- }
- .forgot-password {
- position: absolute;
- width: 64px;
- height: 24px;
- top: 289px;
- right: 58px;
- font-family: Source Han Sans CN, Source Han Sans CN;
- font-weight: 500;
- font-size: 16px;
- color: #D1E0F9;
- line-height: 19px;
- }
- .login-click {
- position: absolute;
- bottom: 106px;
- left: 44px;
- width: 391px;
- height: 61px;
- background: url('../assets/images/login/login-btn.png') no-repeat center / 100% 100%;
- font-family: Source Han Sans CN, Source Han Sans CN;
- font-weight: 500;
- font-size: 24px;
- line-height: 50px;
- text-align: center;
- color: #fff;
- }
- }
-}
+// .login-right {
+// position: absolute;
+// top: 305px;
+// right: 291px;
+// width: 488px;
+// height: 508px;
+// background: url('@/assets/images/login/right-login-info.png') no-repeat center / 100% 100%;
+// .user-login {
+// position: absolute;
+// top: 72px;
+// left: 180px;
+// width: 118px;
+// height: 26px;
+// font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
+// font-weight: 400;
+// font-size: 32px;
+// // color: #D1E0F9;
+// color: #fff;
+// line-height: 26px;
+// text-align: center;
+// }
+// .username {
+// position: absolute;
+// top: 127px;
+// left: 46px;
+// width: 394px;
+// height: 72px;
+// background: url('../assets/images/login/username.png') no-repeat center / 100% 100%;
+// // :deep(.el-form-item) {
+// // width: 120px;
+// // }
+// }
+// .password {
+// position: absolute;
+// top: 208px;
+// left: 46px;
+// width: 394px;
+// height: 72px;
+// background: url('../assets/images/login/password.png') no-repeat center / 100% 100%;
+// }
+// .forgot-password {
+// position: absolute;
+// width: 64px;
+// height: 24px;
+// top: 289px;
+// right: 58px;
+// font-family: Source Han Sans CN, Source Han Sans CN;
+// font-weight: 500;
+// font-size: 16px;
+// color: #D1E0F9;
+// line-height: 19px;
+// }
+// .login-click {
+// position: absolute;
+// bottom: 106px;
+// left: 44px;
+// width: 391px;
+// height: 61px;
+// background: url('../assets/images/login/login-btn.png') no-repeat center / 100% 100%;
+// font-family: Source Han Sans CN, Source Han Sans CN;
+// font-weight: 500;
+// font-size: 24px;
+// line-height: 50px;
+// text-align: center;
+// color: #fff;
+// }
+// }
+// }
</style>
diff --git a/src/styles/login.scss b/src/styles/login.scss
index b80ed14..f46ceeb 100644
--- a/src/styles/login.scss
+++ b/src/styles/login.scss
@@ -51,13 +51,6 @@
top: 334px;
border: 1px solid red;
left: 147px;
- // img {
- // width: 858px;
- // height: 540px;
- // border: 1px solid yellow;
- // }
- // width: 858px;
- // background: url('../assets/images/login/left-logo.png') no-repeat center / 100% 100%;
}
.login-right-new {
diff --git a/src/views/Home/components/HomeLeft/OverviewNext.vue b/src/views/Home/components/HomeLeft/OverviewNext.vue
index 1f8be47..2e9e4da 100644
--- a/src/views/Home/components/HomeLeft/OverviewNext.vue
+++ b/src/views/Home/components/HomeLeft/OverviewNext.vue
@@ -62,9 +62,9 @@
let total = ref(0);
// 机巢统计
let listNum = ref([
- { name: '执行中', value: 89, color: '#FFA768' },
- { name: '在线', value: 100, color: '#8EFFAC' },
- { name: '离线', value: 66, color: '#FFFFFF' },
+ { name: '空闲中', value: 89, color: '#FFA768' },
+ { name: '作业中', value: 100, color: '#8EFFAC' },
+ { name: '离线中', value: 66, color: '#FFFFFF' },
// { name: '异常', value: 10, color: '#FF8E8E' },
]);
// 获取机巢列表
diff --git a/src/views/SignMachineNest/components/MachineLeft/InspectionRaskDetails.vue b/src/views/SignMachineNest/components/MachineLeft/InspectionRaskDetails.vue
index 62c2d11..9a379e6 100644
--- a/src/views/SignMachineNest/components/MachineLeft/InspectionRaskDetails.vue
+++ b/src/views/SignMachineNest/components/MachineLeft/InspectionRaskDetails.vue
@@ -13,6 +13,7 @@
import { pxToRem } from '@/utils/rem';
import CommonTitle from '@/components/CommonTitle.vue';
import CommonDateTime from '@/components/CommonDateTime.vue';
+import { jobNumBar, industryJobNumPieChart } from '@/api/home/index.js'
const chartRef = ref(null);
const pieRef = ref(null);
@@ -163,6 +164,10 @@
pieChart.resize();
});
});
+
+onMounted(() => {
+ getMachineData();
+});
</script>
<style lang="scss" scoped>
diff --git a/src/views/SignMachineNest/components/MachineLeft/MachineData.vue b/src/views/SignMachineNest/components/MachineLeft/MachineData.vue
index f6be978..c70bbaa 100644
--- a/src/views/SignMachineNest/components/MachineLeft/MachineData.vue
+++ b/src/views/SignMachineNest/components/MachineLeft/MachineData.vue
@@ -13,6 +13,7 @@
</template>
<script setup>
+import { getFlightStatistics } from '@/api/home/machineNest.js'
import { pxToRem } from '@/utils/rem';
import CommonTitle from '@/components/CommonTitle.vue';
import rwcs from '@/assets/images/signMachineNest/machineLeft/rwcs.png';
@@ -27,10 +28,28 @@
{ imgurl: sjs, num: 1314, text: '事件数(件)' },
{ imgurl: jscb, num: 1314, text: '节省成本(万元)' },
{ imgurl: rwcg, num: 1314, text: '任务成果(个)' },
- { imgurl: fxlc, num: 1314, text: '飞行里程' },
+ { imgurl: fxlc, num: 1314, text: '飞行里程(公里)' },
{ imgurl: fxsc, num: 1314, text: '飞行时长' },
]);
+// 获取机巢统计数据
+const getMachineData = () => {
+ let dockSn = ref('4TADKCM0010016');
+ getFlightStatistics(dockSn.value).then(res => {
+ if (res.data.code !== 0) return;
+ const result = res.data.data;
+ statisticsList.value[0].num = result.fly_count || 0;
+ statisticsList.value[1].num = result.event_count || 0;
+ statisticsList.value[2].num = result.min_count || 0;
+ statisticsList.value[3].num = result.achievement_count || 0;
+ statisticsList.value[4].num = result.flight_mileage || 0;
+ statisticsList.value[5].num = result.hour_count || 0;
+ })
+};
+
+onMounted(() => {
+ getMachineData();
+});
</script>
<style lang="scss" scoped>
@@ -63,7 +82,7 @@
}
.num-text {
.num {
- width: 72px;
+ width: 120px;
height: 24px;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
font-weight: 400;
diff --git a/src/views/SignMachineNest/components/MachineRight/InspectionRaskList.vue b/src/views/SignMachineNest/components/MachineRight/InspectionRaskList.vue
index f54d2df..f7b3303 100644
--- a/src/views/SignMachineNest/components/MachineRight/InspectionRaskList.vue
+++ b/src/views/SignMachineNest/components/MachineRight/InspectionRaskList.vue
@@ -11,21 +11,27 @@
<div class="search-box">
<el-input v-model="searchText" placeholder="请输入搜索内容" class="input-with-select">
<template #append>
- <el-button :icon="Search" />
+ <el-button :icon="Search" @click="searchNickName"/>
</template>
</el-input>
</div>
</div>
- <div class="table-list">
+ <div class="table-list" v-if="tableList.length > 0"
+ infinite-scroll-distance="6"
+ v-infinite-scroll="loadMore"
+ :infinite-scroll-disabled="busy"
+ infinite-scroll-immediate="true">>
<div class="item" v-for="(item,index) in tableList">
<div class="left">
<div class="left-t">
- <span>{{ index+1 }}.</span>{{ item.title }}
- <span class="status" :class="item.status==='执行中'?'active':''">{{ item.status }}</span>
+ <span>{{ index+1 }}.</span>{{ item.name }}
+ <span class="status" :class="item.status===2?'active':''">
+ {{ getStatusText(item.status) }}
+ </span>
</div>
<div class="left-b">
- <img src="@/assets/images/signMachineNest/machineRight/date.png" alt="" />{{ item.time }}
- <img src="@/assets/images/signMachineNest/machineRight/name.png" alt="" />{{ item.name }}
+ <img src="@/assets/images/signMachineNest/machineRight/date.png" alt="" />{{ item.begin_time }}
+ <img src="@/assets/images/signMachineNest/machineRight/name.png" alt="" />{{ item.creator_name || '' }}
</div>
</div>
<div class="right">
@@ -33,6 +39,11 @@
</div>
</div>
</div>
+ <el-empty class="custom-empty" v-else>
+ <template #description>
+ <span class="custom-text">暂无数据</span>
+ </template>
+ </el-empty>
</div>
</div>
</template>
@@ -40,32 +51,92 @@
<script setup>
import { Search } from '@element-plus/icons-vue';
import CommonTitle from '@/components/CommonTitle.vue';
+import { getBeforeJob, getTodayJob } from '@/api/home/index.js'
+
+const isMore = ref(true);
+// 控制加载状态
+const busy = ref(false);
let searchText = ref('')
-const tableList = ref([
- {
- title: '园区巡查-20250313001',
- status: '待执行',
- time: '2025.3.13 19:56',
- name: '陈瑶',
- },
- {
- title: '园区巡查-20250313002',
- status: '执行中',
- time: '2025.3.13 19:56',
- name: '陈瑶',
- },
- {
- title: '园区巡查-20250313003',
- status: '已完成',
- time: '2025.3.13 19:56',
- name: '陈瑶',
- },
-]);
+const tableList = ref([]);
+
+// 分页
+const pageParams = ref({
+ current: 1,
+ size: 5,
+ total: 0
+});
+
+// 当前任务和历史任务切换
let tabIndex = ref(1);
const tabClick = (value) => {
tabIndex.value = value;
+ clearData();
};
+
+// 状态文字判断
+const getStatusText = (status) => {
+ switch (status) {
+ case 1:
+ return '待执行';
+ case 2:
+ return '执行中';
+ case 3:
+ return '完成';
+ case 4:
+ return '取消';
+ case 5:
+ return '失败';
+ default:
+ return '未知';
+ }
+};
+
+// 获取历史巡检任务列表
+const getJobList = async () => {
+ const params = {
+ area_code: '',
+ device_sn: '',
+ job_name: searchText.value,
+ current: pageParams.value.current,
+ size: pageParams.value.size,
+ }
+ let result = null;
+ if (tabIndex.value === 1) {
+ result = await getTodayJob(params)
+ } else {
+ result = await getBeforeJob(params)
+ }
+ if (result.data.code !== 0) return;
+ if (result.data.data.records.length === 0) return (isMore.value = false);
+ pageParams.value.current += 1;
+ tableList.value = [...tableList.value, ...result.data.data.records];
+ busy.value = false;
+}
+
+// 清除数据
+const clearData = () => {
+ tableList.value = [];
+ pageParams.value.current = 1;
+ isMore.value = true;
+ getJobList();
+};
+
+// 加载更多数据
+const loadMore = async () => {
+ busy.value = true;
+ if (!isMore.value) return;
+ getJobList();
+};
+
+// 搜索数据
+const searchNickName = () => {
+ clearData();
+};
+
+onMounted(() => {
+ getJobList();
+});
</script>
<style lang="scss" scoped>
@@ -131,6 +202,13 @@
.table-list {
width: 358px;
height: 202px;
+ overflow: auto;
+ &::-webkit-scrollbar {
+ width: 0;
+ display: none;
+ }
+ -ms-overflow-style: none; /* IE and Edge */
+ scrollbar-width: none; /* Firefox */
.item {
width: 100%;
height: 72px;
@@ -157,6 +235,7 @@
border-radius: 4px 4px 4px 4px;
border: 1px solid #4CA6FF;
color: #4CA6FF;
+ margin-left: 10px;
}
.active {
border: 1px solid #04F0D1;
@@ -184,5 +263,14 @@
}
}
}
+ .custom-empty {
+ color: #fff;
+ margin: 16px 0;
+ padding: 0;
+ :deep(.el-empty__image) {
+ width: 100px;
+ height: 100px;
+ }
+ }
}
</style>
\ No newline at end of file
--
Gitblit v1.9.3