From 6d2f26e4c867c1cfba4ebe86d4162edb01da80a0 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期三, 31 十二月 2025 14:32:07 +0800
Subject: [PATCH] 代码调整8

---
 src/views/environmentAccess/vehicleInformationCollection/index.vue |  574 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 571 insertions(+), 3 deletions(-)

diff --git a/src/views/environmentAccess/vehicleInformationCollection/index.vue b/src/views/environmentAccess/vehicleInformationCollection/index.vue
index 40dc0c9..5669bfa 100644
--- a/src/views/environmentAccess/vehicleInformationCollection/index.vue
+++ b/src/views/environmentAccess/vehicleInformationCollection/index.vue
@@ -1,9 +1,577 @@
 <template>
-  <div></div>
+  <div class="app-container">
+    <el-form :model="filters" :inline="true">
+      <el-form-item label="杞︾墝鍙风爜">
+        <el-input
+          v-model="filters.plateNumber"
+          style="width: 240px"
+          placeholder="璇疯緭鍏ヨ溅鐗屽彿鐮�"
+          clearable
+          :prefix-icon="Search"
+          @change="getTableData"
+        />
+      </el-form-item>
+      <el-form-item label="杞﹁締绫诲瀷">
+        <el-select
+          v-model="filters.vehicleType"
+          style="width: 240px"
+          placeholder="璇烽�夋嫨杞﹁締绫诲瀷"
+          clearable
+          @change="getTableData"
+        >
+          <el-option label="灏忓瀷杞�" value="0"></el-option>
+          <el-option label="涓瀷杞�" value="1"></el-option>
+          <el-option label="澶у瀷杞�" value="2"></el-option>
+          <el-option label="鐗圭杞�" value="3"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="杩涘嚭鏂瑰悜">
+        <el-select
+          v-model="filters.direction"
+          style="width: 240px"
+          placeholder="璇烽�夋嫨杩涘嚭鏂瑰悜"
+          clearable
+          @change="getTableData"
+        >
+          <el-option label="杩�" value="0"></el-option>
+          <el-option label="鍑�" value="1"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="杩涘嚭鏃堕棿">
+        <el-date-picker
+          v-model="filters.timeRange"
+          type="daterange"
+          start-placeholder="寮�濮嬫椂闂�"
+          end-placeholder="缁撴潫鏃堕棿"
+          value-format="YYYY-MM-DD HH:mm:ss"
+          format="YYYY-MM-DD HH:mm"
+          clearable
+          @change="changeTimeRange"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="getTableData">鎼滅储</el-button>
+        <el-button @click="resetFilters">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <div class="vehicle-stats">
+      <div class="stat-card">
+        <div class="stat-title">浠婃棩杩涜溅鏁�</div>
+        <div class="stat-value in">{{ todayInCount }}</div>
+      </div>
+      <div class="stat-card">
+        <div class="stat-title">浠婃棩鍑鸿溅鏁�</div>
+        <div class="stat-value out">{{ todayOutCount }}</div>
+      </div>
+      <div class="stat-card">
+        <div class="stat-title">褰撳墠鍦ㄥ満杞﹁締</div>
+        <div class="stat-value present">{{ presentCount }}</div>
+      </div>
+      <div class="stat-card">
+        <div class="stat-title">浠婃棩鎬绘祦閲�</div>
+        <div class="stat-value total">{{ todayTotalCount }}</div>
+      </div>
+    </div>
+
+    <div class="table_list">
+      <PIMTable
+        rowKey="id"
+        :column="columns"
+        :tableData="dataList"
+        :page="{
+          current: pagination.currentPage,
+          size: pagination.pageSize,
+          total: pagination.total,
+        }"
+        @pagination="changePage"
+      >
+      </PIMTable>
+    </div>
+
+    <!-- 杞﹁締璇︽儏寮圭獥 -->
+    <el-dialog
+      v-model="detailVisible"
+      :title="`杞﹁締璇︽儏 - ${selectedVehicle.plateNumber}`"
+      width="700px"
+    >
+      <div v-if="selectedVehicle" class="vehicle-detail">
+        <div class="detail-section">
+          <h3>鍩烘湰淇℃伅</h3>
+          <el-descriptions :column="2" border>
+            <el-descriptions-item label="杞︾墝鍙风爜">{{
+              selectedVehicle.plateNumber
+            }}</el-descriptions-item>
+            <el-descriptions-item label="杞﹁締绫诲瀷">{{
+              typeMap[selectedVehicle.vehicleType]
+            }}</el-descriptions-item>
+            <el-descriptions-item label="杞﹁締棰滆壊">{{
+              selectedVehicle.color
+            }}</el-descriptions-item>
+            <el-descriptions-item label="杩涘嚭鏂瑰悜">{{
+              selectedVehicle.direction === "0" ? "杩�" : "鍑�"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="杩涘嚭鏃堕棿">{{
+              selectedVehicle.timestamp
+            }}</el-descriptions-item>
+            <el-descriptions-item label="閫氶亾鍚嶇О">{{
+              selectedVehicle.channelName
+            }}</el-descriptions-item>
+            <el-descriptions-item label="璇嗗埆鏂瑰紡">{{
+              selectedVehicle.identifyMethod
+            }}</el-descriptions-item>
+            <el-descriptions-item label="杞﹁締鐘舵��">{{
+              statusMap[selectedVehicle.status]
+            }}</el-descriptions-item>
+          </el-descriptions>
+        </div>
+
+        <div class="detail-section">
+          <h3>杞﹁締鍥剧墖</h3>
+          <div class="vehicle-images">
+            <div class="image-item">
+              <div class="image-title">姝i潰鍥剧墖</div>
+              <el-image
+                :src="selectedVehicle.frontImage"
+                fit="cover"
+                style="width: 100%; height: 200px"
+                :preview-src-list="[
+                  selectedVehicle.frontImage,
+                  selectedVehicle.sideImage,
+                ]"
+              ></el-image>
+            </div>
+            <div class="image-item">
+              <div class="image-title">渚ч潰鍥剧墖</div>
+              <el-image
+                :src="selectedVehicle.sideImage"
+                fit="cover"
+                style="width: 100%; height: 200px"
+                :preview-src-list="[
+                  selectedVehicle.sideImage,
+                  selectedVehicle.frontImage,
+                ]"
+              ></el-image>
+            </div>
+          </div>
+        </div>
+      </div>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="detailVisible = false">鍏抽棴</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
 </template>
-<script>
 
+<script setup>
+import { ref, reactive, computed, onMounted } from "vue";
+import { Search } from "@element-plus/icons-vue";
+import dayjs from "dayjs";
+
+// 瀹氫箟鍋囨暟鎹�
+const mockVehicles = [
+  {
+    id: 1,
+    plateNumber: "浜珹12345",
+    vehicleType: "0",
+    color: "鐧借壊",
+    direction: "0",
+    timestamp: "2025-12-31 08:15:30",
+    channelName: "涓滈棬閫氶亾",
+    identifyMethod: "杞︾墝璇嗗埆",
+    status: "0",
+    frontImage: "https://picsum.photos/id/1024/800/600",
+    sideImage: "https://picsum.photos/id/1025/800/600",
+    duration: "00:00:00",
+    present: true,
+  },
+  {
+    id: 2,
+    plateNumber: "娌狟67890",
+    vehicleType: "1",
+    color: "榛戣壊",
+    direction: "1",
+    timestamp: "2025-12-31 08:10:20",
+    channelName: "瑗块棬閫氶亾",
+    identifyMethod: "杞︾墝璇嗗埆",
+    status: "1",
+    frontImage: "https://picsum.photos/id/1026/800/600",
+    sideImage: "https://picsum.photos/id/1027/800/600",
+    duration: "01:25:30",
+    present: false,
+  },
+  {
+    id: 3,
+    plateNumber: "绮54321",
+    vehicleType: "0",
+    color: "绾㈣壊",
+    direction: "0",
+    timestamp: "2025-12-31 08:05:15",
+    channelName: "鍗楅棬閫氶亾",
+    identifyMethod: "IC鍗¤瘑鍒�",
+    status: "0",
+    frontImage: "https://picsum.photos/id/1028/800/600",
+    sideImage: "https://picsum.photos/id/1029/800/600",
+    duration: "00:05:45",
+    present: true,
+  },
+  {
+    id: 4,
+    plateNumber: "宸滵98765",
+    vehicleType: "2",
+    color: "钃濊壊",
+    direction: "0",
+    timestamp: "2025-12-31 08:00:00",
+    channelName: "鍖楅棬閫氶亾",
+    identifyMethod: "杞︾墝璇嗗埆",
+    status: "0",
+    frontImage: "https://picsum.photos/id/1030/800/600",
+    sideImage: "https://picsum.photos/id/1031/800/600",
+    duration: "00:10:30",
+    present: true,
+  },
+  {
+    id: 5,
+    plateNumber: "鑻廍13579",
+    vehicleType: "0",
+    color: "閾惰壊",
+    direction: "1",
+    timestamp: "2025-12-31 07:55:45",
+    channelName: "涓滈棬閫氶亾",
+    identifyMethod: "杞︾墝璇嗗埆",
+    status: "1",
+    frontImage: "https://picsum.photos/id/1032/800/600",
+    sideImage: "https://picsum.photos/id/1033/800/600",
+    duration: "02:30:15",
+    present: false,
+  },
+  {
+    id: 6,
+    plateNumber: "娴橣24680",
+    vehicleType: "3",
+    color: "榛勮壊",
+    direction: "0",
+    timestamp: "2025-12-31 07:50:30",
+    channelName: "鍗楅棬閫氶亾",
+    identifyMethod: "浜哄伐鐧昏",
+    status: "0",
+    frontImage: "https://picsum.photos/id/1034/800/600",
+    sideImage: "https://picsum.photos/id/1035/800/600",
+    duration: "00:15:30",
+    present: true,
+  },
+  {
+    id: 7,
+    plateNumber: "椴丟97531",
+    vehicleType: "1",
+    color: "缁胯壊",
+    direction: "1",
+    timestamp: "2025-12-31 07:45:15",
+    channelName: "瑗块棬閫氶亾",
+    identifyMethod: "杞︾墝璇嗗埆",
+    status: "1",
+    frontImage: "https://picsum.photos/id/1036/800/600",
+    sideImage: "https://picsum.photos/id/1037/800/600",
+    duration: "01:45:30",
+    present: false,
+  },
+  {
+    id: 8,
+    plateNumber: "璞獺86420",
+    vehicleType: "0",
+    color: "鐏拌壊",
+    direction: "0",
+    timestamp: "2025-12-31 07:40:00",
+    channelName: "鍖楅棬閫氶亾",
+    identifyMethod: "IC鍗¤瘑鍒�",
+    status: "0",
+    frontImage: "https://picsum.photos/id/1038/800/600",
+    sideImage: "https://picsum.photos/id/1039/800/600",
+    duration: "00:20:15",
+    present: true,
+  },
+];
+
+// 鍝嶅簲寮忔暟鎹�
+const filters = reactive({
+  plateNumber: "",
+  vehicleType: "",
+  direction: "",
+  timeRange: [],
+});
+
+const dataList = ref([]);
+const pagination = reactive({
+  currentPage: 1,
+  pageSize: 10,
+  total: 0,
+});
+
+const detailVisible = ref(false);
+const selectedVehicle = ref({});
+
+// 鏃堕棿鑼冨洿
+const timeRange = reactive({
+  startTime: "",
+  endTime: "",
+});
+
+// 鐘舵�佹槧灏�
+const statusMap = {
+  '0': '<el-tag type="success">姝e父</el-tag>',
+  '1': '<el-tag type="info">宸茬寮�</el-tag>',
+  '2': '<el-tag type="warning">寮傚父</el-tag>',
+};
+
+// 绫诲瀷鏄犲皠
+const typeMap = {
+  0: "灏忓瀷杞�",
+  1: "涓瀷杞�",
+  2: "澶у瀷杞�",
+  3: "鐗圭杞�",
+};
+
+// 缁熻鏁版嵁
+const todayInCount = computed(() => {
+  const today = dayjs().format("YYYY-MM-DD");
+  return mockVehicles.filter((vehicle) => {
+    return vehicle.direction === "0" && vehicle.timestamp.startsWith(today);
+  }).length;
+});
+
+const todayOutCount = computed(() => {
+  const today = dayjs().format("YYYY-MM-DD");
+  return mockVehicles.filter((vehicle) => {
+    return vehicle.direction === "1" && vehicle.timestamp.startsWith(today);
+  }).length;
+});
+
+const presentCount = computed(() => {
+  return mockVehicles.filter((vehicle) => vehicle.present).length;
+});
+
+const todayTotalCount = computed(() => {
+  const today = dayjs().format("YYYY-MM-DD");
+  return mockVehicles.filter((vehicle) => {
+    return vehicle.timestamp.startsWith(today);
+  }).length;
+});
+
+// 琛ㄦ牸鍒楅厤缃�
+const columns = [
+  {
+    label: "杞︾墝鍙风爜",
+    align: "center",
+    prop: "plateNumber",
+  },
+  {
+    label: "杞﹁締绫诲瀷",
+    align: "center",
+    prop: "vehicleType",
+    formatter: (row) => {
+      return typeMap[row.vehicleType];
+    },
+  },
+  {
+    label: "杞﹁締棰滆壊",
+    align: "center",
+    prop: "color",
+  },
+  {
+    label: "杩涘嚭鏂瑰悜",
+    align: "center",
+    prop: "direction",
+    formatter: (row) => {
+      return row.direction === "0" ? '<el-tag type="success">杩�</el-tag>' : '<el-tag type="info">鍑�</el-tag>';
+    },
+  },
+  {
+    label: "杩涘嚭鏃堕棿",
+    align: "center",
+    prop: "timestamp",
+  },
+  {
+    label: "閫氶亾鍚嶇О",
+    align: "center",
+    prop: "channelName",
+  },
+  {
+    label: "璇嗗埆鏂瑰紡",
+    align: "center",
+    prop: "identifyMethod",
+  },
+  {
+    label: "杞﹁締鐘舵��",
+    align: "center",
+    prop: "status",
+    formatter: (row) => {
+      return statusMap[row.status];
+    },
+  },
+  {
+    dataType: "action",
+    label: "鎿嶄綔",
+    align: "center",
+    fixed: "right",
+    width: 140,
+    operation: [
+      {
+        name: "鏌ョ湅璇︽儏",
+        type: "text",
+        clickFun: (row) => {
+          viewDetail(row);
+        },
+      },
+    ],
+  },
+];
+
+// 杩囨护鍚庣殑鏁版嵁
+const filteredData = computed(() => {
+  return mockVehicles.filter((item) => {
+    const plateMatch =
+      !filters.plateNumber || item.plateNumber.includes(filters.plateNumber);
+    const typeMatch =
+      !filters.vehicleType || item.vehicleType === filters.vehicleType;
+    const directionMatch =
+      !filters.direction || item.direction === filters.direction;
+    const timeMatch =
+      !timeRange.startTime ||
+      (item.timestamp >= timeRange.startTime &&
+        item.timestamp <= timeRange.endTime);
+    return plateMatch && typeMatch && directionMatch && timeMatch;
+  });
+});
+
+// 鑾峰彇琛ㄦ牸鏁版嵁
+const getTableData = () => {
+  pagination.total = filteredData.value.length;
+  const start = (pagination.currentPage - 1) * pagination.pageSize;
+  const end = start + pagination.pageSize;
+  dataList.value = filteredData.value.slice(start, end);
+};
+
+// 閲嶇疆杩囨护鍣�
+const resetFilters = () => {
+  filters.plateNumber = "";
+  filters.vehicleType = "";
+  filters.direction = "";
+  filters.timeRange = [];
+  timeRange.startTime = "";
+  timeRange.endTime = "";
+  pagination.currentPage = 1;
+  getTableData();
+};
+
+// 鍒嗛〉鍙樺寲
+const changePage = ({ page, limit }) => {
+  pagination.currentPage = page;
+  pagination.pageSize = limit;
+  getTableData();
+};
+
+// 鏃堕棿鑼冨洿鍙樺寲
+const changeTimeRange = (value) => {
+  if (value && value.length === 2) {
+    timeRange.startTime = value[0];
+    timeRange.endTime = value[1];
+  } else {
+    timeRange.startTime = "";
+    timeRange.endTime = "";
+  }
+  getTableData();
+};
+
+// 鏌ョ湅杞﹁締璇︽儏
+const viewDetail = (row) => {
+  selectedVehicle.value = row;
+  detailVisible.value = true;
+};
+
+// 鍒濆鍖栨暟鎹�
+onMounted(() => {
+  getTableData();
+});
 </script>
-<style>
 
+<style lang="scss" scoped>
+.table_list {
+  margin-top: unset;
+}
+
+.vehicle-stats {
+  display: flex;
+  gap: 20px;
+  margin-bottom: 20px;
+
+  .stat-card {
+    flex: 1;
+    background: #fff;
+    padding: 20px;
+    border-radius: 8px;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+    text-align: center;
+
+    .stat-title {
+      font-size: 14px;
+      color: #606266;
+      margin-bottom: 10px;
+    }
+
+    .stat-value {
+      font-size: 32px;
+      font-weight: bold;
+
+      &.in {
+        color: #67c23a;
+      }
+
+      &.out {
+        color: #409eff;
+      }
+
+      &.present {
+        color: #e6a23c;
+      }
+
+      &.total {
+        color: #909399;
+      }
+    }
+  }
+}
+
+.vehicle-detail {
+  .detail-section {
+    margin-bottom: 20px;
+
+    h3 {
+      font-size: 16px;
+      font-weight: bold;
+      margin-bottom: 10px;
+      color: #303133;
+    }
+  }
+
+  .vehicle-images {
+    display: grid;
+    grid-template-columns: repeat(2, 1fr);
+    gap: 15px;
+
+    .image-item {
+      background: #f5f7fa;
+      padding: 15px;
+      border-radius: 8px;
+
+      .image-title {
+        font-size: 14px;
+        color: #606266;
+        margin-bottom: 10px;
+        text-align: center;
+      }
+    }
+  }
+}
 </style>

--
Gitblit v1.9.3