yanghao před 6 dny
rodič
revize
4bce2c8dbd

+ 1 - 1
.env.local

@@ -4,7 +4,7 @@ NODE_ENV=development
 VITE_DEV=true
 
 # 请求路径  http://192.168.188.149:48080  https://iot.deepoil.cc
-VITE_BASE_URL='http://192.168.188.149:48080'
+VITE_BASE_URL='https://iot.deepoil.cc'
 
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
 VITE_UPLOAD_TYPE=server

+ 1 - 0
package.json

@@ -33,6 +33,7 @@
     "@fullcalendar/interaction": "^6.1.17",
     "@fullcalendar/vue3": "^6.1.17",
     "@iconify/iconify": "^3.1.1",
+    "@kjgl77/datav-vue3": "^1.7.4",
     "@microsoft/fetch-event-source": "^2.0.1",
     "@types/echarts": "^5.0.0",
     "@videojs-player/vue": "^1.0.0",

+ 53 - 0
pnpm-lock.yaml

@@ -32,6 +32,9 @@ importers:
       '@iconify/iconify':
         specifier: ^3.1.1
         version: 3.1.1
+      '@kjgl77/datav-vue3':
+        specifier: ^1.7.4
+        version: 1.7.4(vue@3.5.12(typescript@5.3.3))
       '@microsoft/fetch-event-source':
         specifier: ^2.0.1
         version: 2.0.1
@@ -1385,6 +1388,21 @@ packages:
     resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
 
+  '@jiaminghi/bezier-curve@0.0.9':
+    resolution: {integrity: sha512-u9xJPOEl6Dri2E9FfmJoGxYQY7vYJkURNX04Vj64tdi535tPrpkuf9Sm0lNr3QTKdHQh0DdNRsaa62FLQNQEEw==}
+
+  '@jiaminghi/c-render@0.4.3':
+    resolution: {integrity: sha512-FJfzj5hGj7MLqqqI2D7vEzHKbQ1Ynnn7PJKgzsjXaZpJzTqs2Yw5OSeZnm6l7Qj7jyPAP53lFvEQNH4o4j6s+Q==}
+
+  '@jiaminghi/charts@0.2.18':
+    resolution: {integrity: sha512-K+HXaOOeWG9OOY1VG6M4mBreeeIAPhb9X+khG651AbnwEwL6G2UtcAQ8GWCq6GzhczcLwwhIhuaHqRygwHC0sA==}
+
+  '@jiaminghi/color@1.1.3':
+    resolution: {integrity: sha512-ZY3hdorgODk4OSTbxyXBPxAxHPIVf9rPlKJyK1C1db46a50J0reFKpAvfZG8zMG3lvM60IR7Qawgcu4ZDO3+Hg==}
+
+  '@jiaminghi/transition@1.1.11':
+    resolution: {integrity: sha512-owBggipoHMikDHHDW5Gc7RZYlVuvxHADiU4bxfjBVkHDAmmck+fCkm46n2JzC3j33hWvP9nSCAeh37t6stgWeg==}
+
   '@jridgewell/gen-mapping@0.3.5':
     resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
     engines: {node: '>=6.0.0'}
@@ -1406,6 +1424,9 @@ packages:
   '@jridgewell/trace-mapping@0.3.25':
     resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
 
+  '@kjgl77/datav-vue3@1.7.4':
+    resolution: {integrity: sha512-zYVTVKkklUxwtiNKS1qPBilm4rTW+WItfp0zVpaRAI8wgXkLSPbDR9xPq2+UcU/Jft7/DVdMfBp709E2ResuPQ==}
+
   '@lezer/common@1.3.0':
     resolution: {integrity: sha512-L9X8uHCYU310o99L3/MpJKYxPzXPOS7S0NmBaM7UO/x2Kb2WbmMLSkfvdr1KxRIFYOpbY0Jhn7CfLSUDzL8arQ==}
 
@@ -6565,6 +6586,28 @@ snapshots:
     dependencies:
       '@sinclair/typebox': 0.27.8
 
+  '@jiaminghi/bezier-curve@0.0.9':
+    dependencies:
+      '@babel/runtime': 7.26.0
+
+  '@jiaminghi/c-render@0.4.3':
+    dependencies:
+      '@babel/runtime': 7.26.0
+      '@jiaminghi/bezier-curve': 0.0.9
+      '@jiaminghi/color': 1.1.3
+      '@jiaminghi/transition': 1.1.11
+
+  '@jiaminghi/charts@0.2.18':
+    dependencies:
+      '@babel/runtime': 7.26.0
+      '@jiaminghi/c-render': 0.4.3
+
+  '@jiaminghi/color@1.1.3': {}
+
+  '@jiaminghi/transition@1.1.11':
+    dependencies:
+      '@babel/runtime': 7.26.0
+
   '@jridgewell/gen-mapping@0.3.5':
     dependencies:
       '@jridgewell/set-array': 1.2.1
@@ -6587,6 +6630,16 @@ snapshots:
       '@jridgewell/resolve-uri': 3.1.2
       '@jridgewell/sourcemap-codec': 1.5.0
 
+  '@kjgl77/datav-vue3@1.7.4(vue@3.5.12(typescript@5.3.3))':
+    dependencies:
+      '@jiaminghi/c-render': 0.4.3
+      '@jiaminghi/charts': 0.2.18
+      '@jiaminghi/color': 1.1.3
+      '@vueuse/core': 10.11.1(vue@3.5.12(typescript@5.3.3))
+    transitivePeerDependencies:
+      - '@vue/composition-api'
+      - vue
+
   '@lezer/common@1.3.0': {}
 
   '@lezer/highlight@1.2.3':

binární
src/assets/imgs/kanban.png


binární
src/assets/model/industrial equipment 3d model.glb


+ 4 - 0
src/main.ts

@@ -42,6 +42,8 @@ import Logger from '@/utils/Logger'
 
 import VueDOMPurifyHTML from 'vue-dompurify-html' // 解决v-html 的安全隐患
 
+import DataVVue3 from '@kjgl77/datav-vue3'
+
 // 创建实例
 const setupAll = async () => {
   const app = createApp(App)
@@ -64,6 +66,8 @@ const setupAll = async () => {
 
   await router.isReady()
 
+  app.use(DataVVue3)
+
   app.use(VueDOMPurifyHTML)
 
   app.mount('#app')

+ 40 - 0
src/views/pms/device/completeKanban/data-row.vue

@@ -0,0 +1,40 @@
+<template>
+  <div
+    style="border-bottom: 0.5px solid rgba(255, 255, 255, 0.1); border-radius: 5px"
+    :class="[
+      'flex items-center justify-between border-b border-cyan-500/20 hover:bg-cyan-500/10 transition-colors px-2 -mx-2 rounded',
+      compact ? 'py-1' : 'py-2'
+    ]"
+  >
+    <span class="text-cyan-200">{{ label }}</span>
+    <div class="flex items-center gap-2">
+      <span class="font-mono text-white font-bold">{{ value }}</span>
+      <button
+        v-if="button"
+        style="border-radius: 5px"
+        :class="[
+          'px-3 py-1 rounded text-white text-sm transition-all',
+          buttonColor === 'green'
+            ? 'bg-green-600 hover:bg-green-500 shadow-[0_0_10px_rgba(22,163,74,0.5)]'
+            : 'bg-red-600 hover:bg-red-500 shadow-[0_0_10px_rgba(220,38,38,0.5)]'
+        ]"
+      >
+        {{ button }}
+      </button>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+interface Props {
+  label: string
+  value: string
+  button?: string
+  buttonColor?: 'green' | 'red'
+  compact?: boolean
+}
+
+withDefaults(defineProps<Props>(), {
+  compact: false
+})
+</script>

+ 351 - 0
src/views/pms/device/completeKanban/index.vue

@@ -0,0 +1,351 @@
+<template>
+  <div
+    class="min-h-screen bg-gradient-to-br from-slate-950 via-blue-950 to-slate-900 text-cyan-100 p-6 relative overflow-hidden"
+  >
+    <!-- Animated background grid -->
+    <div class="absolute inset-0 opacity-20">
+      <div class="absolute inset-0 grid-pattern"></div>
+    </div>
+
+    <!-- Scanning line effect -->
+    <div class="absolute inset-0 pointer-events-none">
+      <div class="scan-line"></div>
+    </div>
+
+    <!-- Header -->
+    <div class="relative z-10 mb-6">
+      <div class="flex items-center justify-between border-b-2 border-cyan-500/30 pb-4">
+        <div class="flex items-center gap-8 text-sm">
+          <div
+            style="border: 0.5px solid #085b77"
+            v-for="(item, i) in leftNavItems"
+            :key="i"
+            class="px-4 py-2 bg-cyan-500/10 border border-[#085b77] skew-x-[-12deg] hover:bg-cyan-500/20 transition-all cursor-pointer"
+          >
+            <span class="inline-block skew-x-[12deg]">{{ item }}</span>
+          </div>
+        </div>
+        <h1 class="text-2xl font-bold text-center flex-1 text-cyan-300 tracking-wider">
+          PSA3000万70MPa制氮装置监控系统
+        </h1>
+
+        <div class="flex items-center gap-8 text-sm">
+          <div
+            v-for="(item, i) in rightNavItems"
+            :key="i"
+            style="border: 0.5px solid #085b77"
+            class="px-4 py-2 bg-cyan-500/10 border border-cyan-500/30 skew-x-[-12deg] hover:bg-cyan-500/20 transition-all cursor-pointer"
+          >
+            <span class="inline-block skew-x-[12deg]">{{ item }}</span>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <!-- <div class="flex justify-center mt--8 mb-4 ml-26">
+      <dv-decoration5 :dur="2" style="width: 600px; height: 40px" />
+    </div> -->
+
+    <!-- Main content -->
+    <div class="relative z-10 grid grid-cols-12 gap-4">
+      <!-- Left panels -->
+      <div class="col-span-3 space-y-4">
+        <!-- PSA核心参数 -->
+        <div class="panel">
+          <div class="flex justify-between items-center panel-title">
+            <h4>PSA核心参数</h4>
+            <dv-decoration3 style="width: 120px; height: 30px" />
+          </div>
+
+          <div class="space-y-3">
+            <!-- <DataRow label="氧气纯度" value="99.66 %" button="启停按钮" button-color="green" /> -->
+            <DataRow label="氧气压力" value="0.54 MPa" />
+            <DataRow label="氧气瞬时流量" value="3002.10 Nm³" />
+            <DataRow label="氧气累计流量" value="219.6217 万Nm³" />
+            <div class="flex items-center justify-between mt-4">
+              <span class="text-cyan-200">运行状态</span>
+              <div class="status-indicator status-active"></div>
+            </div>
+          </div>
+        </div>
+
+        <!-- 空气处理参数 -->
+        <div class="panel">
+          <div class="flex justify-between items-center panel-title">
+            <h4>空气处理参数</h4>
+            <dv-decoration3 style="width: 120px; height: 30px" />
+          </div>
+          <div class="space-y-3">
+            <!-- <DataRow label="出口温度" value="6.7 ℃" button="启停按钮" button-color="green" /> -->
+            <DataRow label="出口压力" value="0.6 MPa" />
+            <div class="flex items-center justify-between mt-4">
+              <span class="text-cyan-200">冷干机运行状态</span>
+              <div class="status-indicator status-inactive"></div>
+            </div>
+
+            <div class="flex items-center justify-between mt-4">
+              <span class="text-cyan-200">风机运行状态</span>
+              <div class="status-indicator status-active"></div>
+            </div>
+          </div>
+        </div>
+
+        <!-- 1800中压机参数 -->
+        <div class="panel">
+          <div class="flex justify-between items-center panel-title">
+            <h4>1800中压机参数</h4>
+            <dv-decoration3 style="width: 120px; height: 30px" />
+          </div>
+
+          <div class="space-y-3">
+            <!-- <DataRow label="排气压力" value="3.47 MPa" button="启停按钮" button-color="green" /> -->
+            <DataRow label="排气温度" value="107.0 ℃" />
+            <DataRow label="总用电能" value="247406.4 kWh" />
+            <div class="flex items-center justify-between mt-4">
+              <span class="text-cyan-200">运行状态</span>
+              <div class="status-indicator status-active"></div>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <!-- Center - 3D View and Compressor Data -->
+      <div class="col-span-6 space-y-4">
+        <!-- 3D Factory View -->
+        <div class="panel relative overflow-hidden">
+          <div class="relative h-[400px]">
+            <img
+              src="@/assets/imgs/kanban.png"
+              alt="Factory 3D View"
+              class="w-full h-full object-cover"
+            />
+            <div class="absolute inset-0 bg-gradient-to-t from-slate-900/80 to-transparent"></div>
+            <div class="scan-line-fast"></div>
+          </div>
+        </div>
+
+        <!-- 1050空压机参数 -->
+        <div class="panel">
+          <div class="mb-2">
+            <dv-decoration7>
+              <h3 class="text-cyan-300 text-lg font-bold px-1"> 1050空压机参数 </h3>
+            </dv-decoration7>
+          </div>
+          <!-- <h3 class="panel-title">1050空压机参数</h3> -->
+          <div class="grid grid-cols-5 gap-4">
+            <div v-for="(unit, i) in compressorUnits" :key="i" class="space-y-2 text-center">
+              <div class="text-cyan-300 font-bold mb-2">{{ unit.name }}</div>
+              <div class="text-sm">
+                <div class="text-cyan-200">排气压力</div>
+                <div class="text-white font-mono">{{ unit.pressure }}</div>
+              </div>
+              <div class="text-sm">
+                <div class="text-cyan-200">排气温度</div>
+                <div class="text-white font-mono">{{ unit.temp }}</div>
+              </div>
+              <div class="text-sm">
+                <div class="text-cyan-200">总用电能</div>
+                <div class="text-white font-mono text-xs">{{ unit.energy }}</div>
+              </div>
+              <div
+                :class="[
+                  'w-8 h-8 mx-auto rounded-full animate-pulse',
+                  unit.status === 'active' ? 'status-active' : 'status-inactive'
+                ]"
+              ></div>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <!-- Right panel -->
+      <div class="col-span-3">
+        <div class="panel h-full">
+          <div class="flex items-center justify-between mb-4 border-b border-cyan-500/30 pb-2">
+            <h3 class="text-cyan-300 text-lg font-bold">液驱压缩机参数</h3>
+            <dv-decoration8 :reverse="true" style="width: 130px; height: 30px" />
+          </div>
+          <div class="space-y-2 text-sm overflow-y-auto overflow-x-hidden">
+            <DataRow label="入口压力" value="3.30 MPa" :compact="true" />
+            <DataRow label="一级入口压力" value="3.32 MPa" :compact="true" />
+            <DataRow label="A级一级出口温度" value="104.5 ℃" :compact="true" />
+            <DataRow label="A级一级冷却后温度" value="16.6 ℃" :compact="true" />
+            <DataRow label="A级二级入口压力" value="8.40 MPa" :compact="true" />
+            <DataRow label="A级二级出口温度" value="134.3 ℃" :compact="true" />
+            <DataRow label="A级二级冷却后温度" value="27.6 ℃" :compact="true" />
+            <DataRow label="A级三级入口压力" value="22.57 MPa" :compact="true" />
+            <DataRow label="B级一级出口温度" value="109.6 ℃" :compact="true" />
+            <DataRow label="B级一级冷却后温度" value="16.5 ℃" :compact="true" />
+            <DataRow label="B级二级入口压力" value="8.23 MPa" :compact="true" />
+            <DataRow label="B级二级出口温度" value="130.0 ℃" :compact="true" />
+            <DataRow label="B级二级冷却后温度" value="21.5 ℃" :compact="true" />
+            <DataRow label="B级三级入口压力" value="22.46 MPa" :compact="true" />
+            <DataRow label="三级出口温度" value="83.6 ℃" :compact="true" />
+            <DataRow label="总出口温度" value="26.1 ℃" :compact="true" />
+            <DataRow label="总出口压力" value="40.82 MPa" :compact="true" />
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import DataRow from './data-row.vue'
+const leftNavItems = ['箱变', '1050空压机', 'PSA数据', '空气处理镜']
+const rightNavItems = ['主界面', '液驱及中压', '报警监控']
+
+const compressorUnits = [
+  {
+    name: '空压机1',
+    pressure: '0.68 MPa',
+    temp: '77.0 ℃',
+    energy: '124361.6 kWh',
+    status: 'active'
+  },
+  {
+    name: '空压机2',
+    pressure: '0.69 MPa',
+    temp: '78.0 ℃',
+    energy: '136750.4 kWh',
+    status: 'active'
+  },
+  {
+    name: '空压机3',
+    pressure: '0.69 MPa',
+    temp: '77.0 ℃',
+    energy: '134804.8 kWh',
+    status: 'active'
+  },
+  {
+    name: '空压机4',
+    pressure: '0.67 MPa',
+    temp: '84.0 ℃',
+    energy: '133656.0 kWh',
+    status: 'active'
+  },
+  {
+    name: '空压机5',
+    pressure: '0.00 MPa',
+    temp: '0.0 ℃',
+    energy: '12456.0 kWh',
+    status: 'inactive'
+  }
+]
+</script>
+
+<style scoped>
+@keyframes scan {
+  0% {
+    top: 0;
+  }
+  100% {
+    top: 100%;
+  }
+}
+
+@keyframes gridMove {
+  0% {
+    transform: translate(0, 0);
+  }
+  100% {
+    transform: translate(50px, 50px);
+  }
+}
+
+.grid-pattern {
+  background-image: linear-gradient(rgba(6, 182, 212, 0.3) 1px, transparent 1px),
+    linear-gradient(90deg, rgba(6, 182, 212, 0.3) 1px, transparent 1px);
+  background-size: 50px 50px;
+  animation: gridMove 20s linear infinite;
+}
+
+.scan-line {
+  position: absolute;
+  width: 100%;
+  height: 2px;
+  background: linear-gradient(to right, transparent, rgb(6, 182, 212), transparent);
+  opacity: 0.3;
+  animation: scan 4s linear infinite;
+}
+
+.scan-line-fast {
+  position: absolute;
+  width: 100%;
+  height: 4px;
+  background: linear-gradient(to right, transparent, rgba(6, 182, 212, 0.6), transparent);
+  animation: scan 3s linear infinite;
+}
+
+.panel {
+  background: linear-gradient(to bottom right, rgba(15, 23, 42, 0.8), rgba(30, 58, 138, 0.5));
+  backdrop-filter: blur(4px);
+  border: 2px solid rgba(6, 182, 212, 0.4);
+  padding: 1rem;
+  border-radius: 0.5rem;
+  box-shadow: 0 0 20px rgba(6, 182, 212, 0.3);
+  transition: all 0.3s;
+}
+
+.panel:hover {
+  box-shadow: 0 0 30px rgba(6, 182, 212, 0.5);
+}
+
+.panel-title {
+  color: rgb(103, 232, 249);
+  font-size: 1.125rem;
+  margin-bottom: 1rem;
+  font-weight: bold;
+  border-bottom: 1px solid rgba(6, 182, 212, 0.3);
+  padding-bottom: 0.5rem;
+}
+
+.status-indicator {
+  width: 2rem;
+  height: 2rem;
+  border-radius: 50%;
+  animation: pulse 1.5s ease-in-out infinite;
+}
+
+.status-active {
+  background: rgb(34, 197, 94);
+  box-shadow: 0 0 15px rgba(34, 197, 94, 0.8);
+}
+
+.status-inactive {
+  background: rgb(239, 68, 68);
+  box-shadow: 0 0 15px rgba(239, 68, 68, 0.8);
+}
+
+.btn {
+  padding: 0.25rem 0.75rem;
+  border-radius: 0.25rem;
+  color: white;
+  transition: all 0.3s;
+  border: none;
+  cursor: pointer;
+  font-weight: 500;
+}
+
+.btn-green {
+  background: rgb(22, 163, 74);
+  box-shadow: 0 0 10px rgba(22, 163, 74, 0.5);
+}
+
+.btn-green:hover {
+  background: rgb(34, 197, 94);
+  box-shadow: 0 0 20px rgba(22, 163, 74, 0.8);
+  transform: translateY(-1px);
+}
+
+.btn-red {
+  background: rgb(220, 38, 38);
+  box-shadow: 0 0 10px rgba(220, 38, 38, 0.5);
+}
+
+.btn-red:hover {
+  background: rgb(239, 68, 68);
+  box-shadow: 0 0 20px rgba(220, 38, 38, 0.8);
+  transform: translateY(-1px);
+}
+</style>

+ 1 - 1
src/views/pms/stat/rdkb.vue

@@ -1458,7 +1458,7 @@ const projectDataRowClick = (row, column, event) => {
 const domesticData = ref<any[]>([
   {
     index: 1,
-    dept: '公',
+    dept: '公',
     count: 13,
     orig_value: 1506.88,
     net_value: 559.95,

+ 72 - 2
src/views/report-statistics/fault_report/index.vue

@@ -125,7 +125,7 @@
         <el-col :span="4">
           <div class="bg-[#fff] p-2 py-4 rounded-lg">
             <el-form ref="queryFormRef" :model="queryParams">
-              <el-form-item label="上报时间" prop="createTime">
+              <!-- <el-form-item label="上报时间" prop="createTime">
                 <el-date-picker
                   v-model="queryParams.createTime"
                   value-format="YYYY-MM-DD HH:mm:ss"
@@ -135,7 +135,7 @@
                   :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
                   class="!w-220px"
                 />
-              </el-form-item>
+              </el-form-item> -->
 
               <el-form-item>
                 <el-button @click="handleQuery"
@@ -156,6 +156,16 @@
         </el-col>
       </el-row>
 
+      <el-row :gutter="20">
+        <el-col :span="24">
+          <el-radio-group v-model="dateType" size="default" fill="#409eff">
+            <el-radio-button label="年" value="year" />
+            <el-radio-button label="月" value="month" />
+            <el-radio-button label="日" value="day" />
+          </el-radio-group>
+        </el-col>
+      </el-row>
+
       <!-- 列表 -->
       <ContentWrap style="border: 0; margin-top: 10px">
         <el-table
@@ -258,6 +268,7 @@
 
 <script setup lang="ts">
 import { IotInspectOrderApi, IotInspectOrderVO } from '@/api/pms/inspect/order'
+import { watch } from 'vue'
 
 import { DICT_TYPE } from '@/utils/dict'
 import DeptTree from '@/views/system/user/DeptTree.vue'
@@ -381,6 +392,65 @@ onMounted(() => {
   }
   getList()
 })
+
+let dateType = ref('year')
+watch(
+  dateType,
+  () => {
+    const now = new Date()
+    let startTime: Date
+    let endTime: Date
+
+    switch (dateType.value) {
+      case 'year':
+        // 当年:1月1日 00:00:00 到 12月31日 23:59:59
+        startTime = new Date(now.getFullYear(), 0, 1, 0, 0, 0, 0)
+        endTime = new Date(now.getFullYear(), 11, 31, 23, 59, 59, 999)
+        break
+
+      case 'month':
+        // 当月:月初 00:00:00 到 月末 23:59:59
+        startTime = new Date(now.getFullYear(), now.getMonth(), 1, 0, 0, 0, 0)
+        // 下个月的第0天就是当月的最后一天
+        endTime = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59, 999)
+        break
+
+      case 'day':
+        // 当日:当天 00:00:00 到 23:59:59
+        const year = now.getFullYear()
+        const month = now.getMonth()
+        const date = now.getDate()
+        startTime = new Date(year, month, date, 0, 0, 0, 0)
+        endTime = new Date(year, month, date, 23, 59, 59, 999)
+        break
+
+      default:
+        startTime = new Date(now.getFullYear(), 0, 1, 0, 0, 0, 0)
+        endTime = new Date(now.getFullYear(), 11, 31, 23, 59, 59, 999)
+    }
+
+    // 使用本地时间格式化函数,避免时区转换问题
+    const formatLocalDateTime = (date: Date): string => {
+      const year = date.getFullYear()
+      const month = String(date.getMonth() + 1).padStart(2, '0')
+      const day = String(date.getDate()).padStart(2, '0')
+      const hours = String(date.getHours()).padStart(2, '0')
+      const minutes = String(date.getMinutes()).padStart(2, '0')
+      const seconds = String(date.getSeconds()).padStart(2, '0')
+
+      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
+    }
+    // 设置查询参数 - 使用本地时间格式化
+    queryParams.createTime = [formatLocalDateTime(startTime), formatLocalDateTime(endTime)]
+
+    const currentStatus = Object.keys(statusList.value).find((key) => statusList.value[key])
+    queryParams.pageNo = 1
+    getList(currentStatus || 'all', false) // 不重置状态
+  },
+  {
+    immediate: true
+  }
+)
 </script>
 <style scoped>
 /* 添加异常行高亮样式 */