From 7635213630830c4cbb9ff6ada69ba9b5c8a35d42 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Thu, 03 Apr 2025 11:05:34 +0800
Subject: [PATCH] feat: 地图居中点调整

---
 src/views/SignMachineNest/components/MachineRight/InspectionRaskList.vue |  253 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 250 insertions(+), 3 deletions(-)

diff --git a/src/views/SignMachineNest/components/MachineRight/InspectionRaskList.vue b/src/views/SignMachineNest/components/MachineRight/InspectionRaskList.vue
index 109326e..f7b3303 100644
--- a/src/views/SignMachineNest/components/MachineRight/InspectionRaskList.vue
+++ b/src/views/SignMachineNest/components/MachineRight/InspectionRaskList.vue
@@ -2,12 +2,141 @@
 <template>
   <CommonTitle title="巡检任务列表" />
   <div :style="{ marginLeft: pxToRem(14) }">
-    <div class="inspection-rask-list"></div>
+    <div class="inspection-rask-list">
+      <div class="tab-search">
+        <div class="tab-btn">
+          <div :class="tabIndex===1?'active':''" @click="tabClick(1)">当前任务</div>
+          <div :class="tabIndex===2?'active':''" @click="tabClick(2)">历史任务</div>
+        </div>
+        <div class="search-box">
+          <el-input v-model="searchText" placeholder="请输入搜索内容" class="input-with-select">
+            <template #append>
+              <el-button :icon="Search" @click="searchNickName"/>
+            </template>
+          </el-input>
+        </div>
+      </div>
+      <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.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.begin_time }}
+              <img src="@/assets/images/signMachineNest/machineRight/name.png" alt="" />{{ item.creator_name || '' }}
+            </div>
+          </div>
+          <div class="right">
+            <img src="@/assets/images/signMachineNest/machineRight/return.png" alt="">
+          </div>
+        </div>
+      </div>
+      <el-empty class="custom-empty" v-else>
+        <template #description>
+          <span class="custom-text">暂无数据</span>
+        </template>
+      </el-empty>
+    </div>
   </div>
 </template>
 
 <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([]);
+
+// 分页
+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>
@@ -22,8 +151,126 @@
     );
     opacity: 0.85;
     margin: 2px 0 13 0;
-    display: flex;
-    justify-content: space-between;
     padding: 11px 27px 0;
+    .tab-search {
+      width: 358px;
+      height: 76px;
+      margin-bottom: 12px;
+      .tab-btn {
+        display: flex;
+        justify-content: center;
+        margin-bottom: 16px;
+        div {
+          width: 104px;
+          height: 32px;
+          background: #0E2042;
+          border: 1px solid #8EA3D1;
+          font-family: Source Han Sans CN, Source Han Sans CN;
+          font-weight: 400;
+          font-size: 16px;
+          color: #8EA3D1;
+          line-height: 32px;
+          text-align: center;
+          cursor: pointer;
+        }
+        .active {
+          width: 104px;
+          height: 32px;
+          background: linear-gradient( 180deg, rgba(0,82,248,0.58) 0%, rgba(103,209,251,0.8) 100%);
+          color: #fff;
+          border: 1px solid rgba(103,209,251,0.8);
+        }
+      }
+      .search-box {
+        :deep(.el-input__wrapper) {
+          background-color: rgba(0, 112, 255, 0.1);
+          background: rgba(0, 15, 34, 0.5);
+          box-shadow: 0 0 0 1px #0070ff inset;
+        }
+
+        :deep(.el-input-group__append) {
+          background: rgba(0, 112, 255, 0.38);
+          .el-button {
+            background-color: transparent;
+            border: 1px solid #0070ff;
+            border-left: none;
+            color: #fff;
+          }
+        }
+      }
+    }
+    .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;
+        padding: 12px 16px;
+        margin-bottom: 8px;
+        font-family: Source Han Sans CN, Source Han Sans CN;
+        font-weight: 500;
+        font-size: 14px;
+        color: #fff;
+        display: flex;
+        justify-content: space-between;
+        .left {
+          .left-t {
+            height: 24px;
+            font-size: 16px;
+            margin-bottom: 4px;
+            .status {
+              text-align: center;
+              font-size: 12px;
+              display: inline-block;
+              width: 48px;
+              height: 20px;
+              background: rgba(76,166,255,0.08);
+              border-radius: 4px 4px 4px 4px;
+              border: 1px solid #4CA6FF;
+              color: #4CA6FF;
+              margin-left: 10px;
+            }
+            .active {
+              border: 1px solid #04F0D1;
+              color: #04F0D1;
+            }
+          }
+          .left-b {
+            height: 21px;
+            line-height: 21px;
+            img {
+              width: 16px;
+              height: 16px;
+              margin-right: 2px;
+              &:last-child {
+                margin-left: 42px;
+              }
+            }
+          }
+        }
+        .right {
+          img {
+            width: 46px;
+            height: 46px
+          }
+        }
+      }
+    }
+    .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