From 7a0470e331a978ee206cd8fcf3dfd5642f14eb83 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 17 三月 2026 09:23:44 +0800
Subject: [PATCH] #

---
 src/main/webapp/views/devicePingLog/devicePingLog.html |  120 ++++++++++++++++++++++++++++++------------------------------
 1 files changed, 60 insertions(+), 60 deletions(-)

diff --git a/src/main/webapp/views/devicePingLog/devicePingLog.html b/src/main/webapp/views/devicePingLog/devicePingLog.html
index 6e8b7aa..09fdb60 100644
--- a/src/main/webapp/views/devicePingLog/devicePingLog.html
+++ b/src/main/webapp/views/devicePingLog/devicePingLog.html
@@ -275,106 +275,106 @@
 <body>
 <div id="app" v-cloak class="page-shell">
   <div class="page-head">
-    <div class="page-title">璁惧缃戠粶鍒嗘瀽</div>
-    <div class="page-meta">鍖呭ぇ灏� {{ formatPacketSize(samplingConfig.packetSize) }}锛寋{ samplingConfigText }}</div>
+    <div class="page-title">{{ i18n('devicePingLog.title', '璁惧缃戠粶鍒嗘瀽') }}</div>
+    <div class="page-meta">{{ i18n('devicePingLog.pageMeta', '鍖呭ぇ灏� {0}锛寋1}', [formatPacketSize(samplingConfig.packetSize), samplingConfigText]) }}</div>
   </div>
 
   <section class="summary-grid">
     <div class="summary-card">
-      <div class="summary-label">璁惧鎬绘暟</div>
-      <div class="summary-value">{{ overviewSummary.totalDevices }}</div>
-      <div class="summary-sub">宸查厤缃� IP 鐨勮澶�</div>
+      <div class="summary-label">{{ i18n('devicePingLog.summary.totalDevices', '璁惧鎬绘暟') }}</div>
+      <div class="summary-value">{{ formatNumber(overviewSummary.totalDevices) }}</div>
+      <div class="summary-sub">{{ i18n('devicePingLog.summary.totalDevicesHint', '宸查厤缃� IP 鐨勮澶�') }}</div>
     </div>
     <div class="summary-card">
-      <div class="summary-label">姝e父</div>
-      <div class="summary-value">{{ overviewSummary.okDevices }}</div>
-      <div class="summary-sub">鏈�杩戞牱鏈姸鎬� OK</div>
+      <div class="summary-label">{{ i18n('devicePingLog.summary.ok', '姝e父') }}</div>
+      <div class="summary-value">{{ formatNumber(overviewSummary.okDevices) }}</div>
+      <div class="summary-sub">{{ i18n('devicePingLog.summary.okHint', '鏈�杩戞牱鏈姸鎬� OK') }}</div>
     </div>
     <div class="summary-card">
-      <div class="summary-label">娉㈠姩</div>
-      <div class="summary-value">{{ overviewSummary.unstableDevices }}</div>
-      <div class="summary-sub">閮ㄥ垎鎺㈡祴鎴愬姛</div>
+      <div class="summary-label">{{ i18n('devicePingLog.summary.unstable', '娉㈠姩') }}</div>
+      <div class="summary-value">{{ formatNumber(overviewSummary.unstableDevices) }}</div>
+      <div class="summary-sub">{{ i18n('devicePingLog.summary.unstableHint', '閮ㄥ垎鎺㈡祴鎴愬姛') }}</div>
     </div>
     <div class="summary-card">
-      <div class="summary-label">瓒呮椂/寮傚父</div>
-      <div class="summary-value">{{ overviewSummary.offlineDevices }}</div>
-      <div class="summary-sub">鏈�杩戞牱鏈笉鍙揪</div>
+      <div class="summary-label">{{ i18n('devicePingLog.summary.offline', '瓒呮椂/寮傚父') }}</div>
+      <div class="summary-value">{{ formatNumber(overviewSummary.offlineDevices) }}</div>
+      <div class="summary-sub">{{ i18n('devicePingLog.summary.offlineHint', '鏈�杩戞牱鏈笉鍙揪') }}</div>
     </div>
     <div class="summary-card">
-      <div class="summary-label">鏆傛棤鏁版嵁</div>
-      <div class="summary-value">{{ overviewSummary.noDataDevices }}</div>
-      <div class="summary-sub">杩樻病鏈夎惤鐩樻牱鏈�</div>
+      <div class="summary-label">{{ i18n('devicePingLog.summary.noData', '鏆傛棤鏁版嵁') }}</div>
+      <div class="summary-value">{{ formatNumber(overviewSummary.noDataDevices) }}</div>
+      <div class="summary-sub">{{ i18n('devicePingLog.summary.noDataHint', '杩樻病鏈夎惤鐩樻牱鏈�') }}</div>
     </div>
     <div class="summary-card">
-      <div class="summary-label">鏁翠綋骞冲潎寤惰繜</div>
+      <div class="summary-label">{{ i18n('devicePingLog.summary.avgLatency', '鏁翠綋骞冲潎寤惰繜') }}</div>
       <div class="summary-value">{{ formatLatency(overviewSummary.avgLatencyMs) }}</div>
-      <div class="summary-sub">宄板�� {{ formatLatency(overviewSummary.maxLatencyMs) }}</div>
+      <div class="summary-sub">{{ i18n('devicePingLog.summary.peakLatency', '宄板�� {0}', [formatLatency(overviewSummary.maxLatencyMs)]) }}</div>
     </div>
   </section>
 
   <section class="panel">
     <div class="panel-head">
-      <div class="panel-title">璁惧鎬昏</div>
-      <el-button size="small" :loading="overviewLoading" @click="loadOverview">鍒锋柊</el-button>
+      <div class="panel-title">{{ i18n('devicePingLog.overviewTitle', '璁惧鎬昏') }}</div>
+      <el-button size="small" :loading="overviewLoading" @click="loadOverview">{{ i18n('devicePingLog.refresh', '鍒锋柊') }}</el-button>
     </div>
     <div class="panel-body">
       <div class="toolbar">
         <el-form :inline="true" size="small" :model="overviewFilters" style="margin-bottom: -18px;">
-          <el-form-item label="璁惧绫诲瀷">
+          <el-form-item :label="i18n('devicePingLog.filter.deviceType', '璁惧绫诲瀷')">
             <el-select v-model="overviewFilters.deviceType" clearable style="width: 120px;">
-              <el-option label="鍏ㄩ儴" value=""></el-option>
+              <el-option :label="i18n('devicePingLog.filter.all', '鍏ㄩ儴')" value=""></el-option>
               <el-option label="Crn" value="Crn"></el-option>
               <el-option label="DualCrn" value="DualCrn"></el-option>
               <el-option label="Devp" value="Devp"></el-option>
               <el-option label="Rgv" value="Rgv"></el-option>
             </el-select>
           </el-form-item>
-          <el-form-item label="鍏抽敭瀛�">
-            <el-input v-model.trim="overviewFilters.keyword" clearable style="width: 220px;" placeholder="璁惧鍙� / IP"></el-input>
+          <el-form-item :label="i18n('devicePingLog.filter.keyword', '鍏抽敭瀛�')">
+            <el-input v-model.trim="overviewFilters.keyword" clearable style="width: 220px;" :placeholder="i18n('devicePingLog.filter.keywordPlaceholder', '璁惧鍙� / IP')"></el-input>
           </el-form-item>
         </el-form>
         <div class="toolbar-right">
-          <span class="page-meta">鎬昏璁惧 {{ filteredOverviewRows.length }} 鍙�</span>
+          <span class="page-meta">{{ i18n('devicePingLog.overviewCount', '鎬昏璁惧 {0} 鍙�', [formatNumber(filteredOverviewRows.length)]) }}</span>
         </div>
       </div>
 
       <el-table :data="filteredOverviewRows" border stripe size="mini" v-loading="overviewLoading" style="width: 100%;">
-        <el-table-column label="璁惧" min-width="170">
+        <el-table-column :label="i18n('devicePingLog.column.device', '璁惧')" min-width="170">
           <template slot-scope="scope">
             {{ scope.row.deviceType }}-{{ scope.row.deviceNo }}
           </template>
         </el-table-column>
         <el-table-column prop="ip" label="IP" min-width="150"></el-table-column>
-        <el-table-column label="鐘舵��" width="110" align="center">
+        <el-table-column :label="i18n('devicePingLog.column.status', '鐘舵��')" width="110" align="center">
           <template slot-scope="scope">
             <span class="status-chip" :class="statusClass(scope.row.status)">{{ scope.row.statusText }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="鎴愬姛鐜�" width="90" align="right">
+        <el-table-column :label="i18n('devicePingLog.column.successRate', '鎴愬姛鐜�')" width="90" align="right">
           <template slot-scope="scope">
             {{ formatPercent(scope.row.successRate) }}
           </template>
         </el-table-column>
-        <el-table-column label="骞冲潎" width="90" align="right">
+        <el-table-column :label="i18n('devicePingLog.column.avg', '骞冲潎')" width="90" align="right">
           <template slot-scope="scope">
             {{ formatLatency(scope.row.avgLatencyMs) }}
           </template>
         </el-table-column>
-        <el-table-column label="鏈�灏�" width="90" align="right">
+        <el-table-column :label="i18n('devicePingLog.column.min', '鏈�灏�')" width="90" align="right">
           <template slot-scope="scope">
             {{ formatLatency(scope.row.minLatencyMs) }}
           </template>
         </el-table-column>
-        <el-table-column label="鏈�澶�" width="90" align="right">
+        <el-table-column :label="i18n('devicePingLog.column.max', '鏈�澶�')" width="90" align="right">
           <template slot-scope="scope">
             {{ formatLatency(scope.row.maxLatencyMs) }}
           </template>
         </el-table-column>
-        <el-table-column prop="latestTimeLabel" label="鏇存柊鏃堕棿" width="170"></el-table-column>
-        <el-table-column prop="message" label="璇存槑" min-width="200" show-overflow-tooltip></el-table-column>
-        <el-table-column label="鎿嶄綔" width="110" align="center" fixed="right">
+        <el-table-column prop="latestTimeLabel" :label="i18n('devicePingLog.column.updateTime', '鏇存柊鏃堕棿')" width="170"></el-table-column>
+        <el-table-column prop="message" :label="i18n('devicePingLog.column.message', '璇存槑')" min-width="200" show-overflow-tooltip></el-table-column>
+        <el-table-column :label="i18n('devicePingLog.column.action', '鎿嶄綔')" width="110" align="center" fixed="right">
           <template slot-scope="scope">
-            <el-button size="mini" type="primary" plain @click="openDetail(scope.row)">鏌ョ湅璇︽儏</el-button>
+            <el-button size="mini" type="primary" plain @click="openDetail(scope.row)">{{ i18n('devicePingLog.viewDetail', '鏌ョ湅璇︽儏') }}</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -383,37 +383,37 @@
 
   <section class="panel">
     <div class="panel-head">
-      <div class="panel-title">璁惧璇︽儏</div>
+      <div class="panel-title">{{ i18n('devicePingLog.detailTitle', '璁惧璇︽儏') }}</div>
     </div>
     <div class="panel-body">
-      <div v-if="!currentDevice" class="empty-shell">浠庝笂鏂硅澶囨�昏閫夋嫨涓�鍙拌澶囨煡鐪嬬绾ф槑缁�</div>
+      <div v-if="!currentDevice" class="empty-shell">{{ i18n('devicePingLog.detailEmpty', '浠庝笂鏂硅澶囨�昏閫夋嫨涓�鍙拌澶囨煡鐪嬬绾ф槑缁�') }}</div>
       <div v-else class="detail-shell">
         <div class="detail-toolbar">
           <div class="detail-selected">{{ currentDevice.label }}</div>
           <div class="toolbar-right">
             <el-form :inline="true" size="small" :model="detailFilters" style="margin-bottom: -18px;">
-              <el-form-item label="鏃堕棿鑼冨洿">
+              <el-form-item :label="i18n('devicePingLog.filter.timeRange', '鏃堕棿鑼冨洿')">
                 <el-date-picker
                   v-model="detailFilters.range"
                   type="datetimerange"
                   unlink-panels
-                  range-separator="鑷�"
-                  start-placeholder="寮�濮�"
-                  end-placeholder="缁撴潫"
+                  :range-separator="i18n('devicePingLog.filter.rangeSeparator', '鑷�')"
+                  :start-placeholder="i18n('devicePingLog.filter.start', '寮�濮�')"
+                  :end-placeholder="i18n('devicePingLog.filter.end', '缁撴潫')"
                   style="width: 360px;">
                 </el-date-picker>
               </el-form-item>
               <el-form-item>
-                <el-button @click="setQuickRange(30)">30 鍒嗛挓</el-button>
+                <el-button @click="setQuickRange(30)">{{ i18n('devicePingLog.quickRange.30m', '30 鍒嗛挓') }}</el-button>
               </el-form-item>
               <el-form-item>
-                <el-button @click="setQuickRange(60)">1 灏忔椂</el-button>
+                <el-button @click="setQuickRange(60)">{{ i18n('devicePingLog.quickRange.1h', '1 灏忔椂') }}</el-button>
               </el-form-item>
               <el-form-item>
-                <el-button @click="setQuickRange(360)">6 灏忔椂</el-button>
+                <el-button @click="setQuickRange(360)">{{ i18n('devicePingLog.quickRange.6h', '6 灏忔椂') }}</el-button>
               </el-form-item>
               <el-form-item>
-                <el-button type="primary" :loading="detailLoading" @click="queryTrend">鏌ヨ</el-button>
+                <el-button type="primary" :loading="detailLoading" @click="queryTrend">{{ i18n('devicePingLog.query', '鏌ヨ') }}</el-button>
               </el-form-item>
             </el-form>
           </div>
@@ -421,49 +421,49 @@
 
         <div class="detail-summary-grid">
           <div class="detail-card">
-            <div class="detail-card-label">鐘舵��</div>
+            <div class="detail-card-label">{{ i18n('devicePingLog.detail.status', '鐘舵��') }}</div>
             <div class="detail-card-value">{{ detailSummary.latestStatus || '--' }}</div>
           </div>
           <div class="detail-card">
-            <div class="detail-card-label">鍖呭ぇ灏�</div>
+            <div class="detail-card-label">{{ i18n('devicePingLog.detail.packetSize', '鍖呭ぇ灏�') }}</div>
             <div class="detail-card-value">{{ formatPacketSize(detailSummary.packetSize) }}</div>
           </div>
           <div class="detail-card">
-            <div class="detail-card-label">鎴愬姛鐜�</div>
+            <div class="detail-card-label">{{ i18n('devicePingLog.detail.successRate', '鎴愬姛鐜�') }}</div>
             <div class="detail-card-value">{{ formatPercent(detailSummary.successRate) }}</div>
           </div>
           <div class="detail-card">
-            <div class="detail-card-label">骞冲潎</div>
+            <div class="detail-card-label">{{ i18n('devicePingLog.detail.avg', '骞冲潎') }}</div>
             <div class="detail-card-value">{{ formatLatency(detailSummary.avgLatencyMs) }}</div>
           </div>
           <div class="detail-card">
-            <div class="detail-card-label">鏈�灏�</div>
+            <div class="detail-card-label">{{ i18n('devicePingLog.detail.min', '鏈�灏�') }}</div>
             <div class="detail-card-value">{{ formatLatency(detailSummary.minLatencyMs) }}</div>
           </div>
           <div class="detail-card">
-            <div class="detail-card-label">鏈�澶�</div>
+            <div class="detail-card-label">{{ i18n('devicePingLog.detail.max', '鏈�澶�') }}</div>
             <div class="detail-card-value">{{ formatLatency(detailSummary.maxLatencyMs) }}</div>
           </div>
         </div>
 
         <div class="chart-grid">
           <div class="chart-card">
-            <div class="chart-title">寤惰繜</div>
-            <div v-if="!series.length && !detailLoading" class="empty-shell">褰撳墠鑼冨洿鏆傛棤绉掔骇鏍锋湰</div>
+            <div class="chart-title">{{ i18n('devicePingLog.chart.latencyTitle', '寤惰繜') }}</div>
+            <div v-if="!series.length && !detailLoading" class="empty-shell">{{ i18n('devicePingLog.chart.empty', '褰撳墠鑼冨洿鏆傛棤绉掔骇鏍锋湰') }}</div>
             <div v-show="series.length || detailLoading" ref="latencyChart" class="chart-box"></div>
           </div>
           <div class="chart-card">
-            <div class="chart-title">鎴愬姛鐜� / 澶辫触娆℃暟</div>
-            <div v-if="!series.length && !detailLoading" class="empty-shell">褰撳墠鑼冨洿鏆傛棤绉掔骇鏍锋湰</div>
+            <div class="chart-title">{{ i18n('devicePingLog.chart.availabilityTitle', '鎴愬姛鐜� / 澶辫触娆℃暟') }}</div>
+            <div v-if="!series.length && !detailLoading" class="empty-shell">{{ i18n('devicePingLog.chart.empty', '褰撳墠鑼冨洿鏆傛棤绉掔骇鏍锋湰') }}</div>
             <div v-show="series.length || detailLoading" ref="availabilityChart" class="chart-box"></div>
           </div>
         </div>
 
         <el-table :data="alerts" border stripe size="mini" style="width: 100%;">
-          <el-table-column prop="timeLabel" label="鏃堕棿" width="180"></el-table-column>
-          <el-table-column prop="status" label="鐘舵��" width="110"></el-table-column>
+          <el-table-column prop="timeLabel" :label="i18n('devicePingLog.alertColumn.time', '鏃堕棿')" width="180"></el-table-column>
+          <el-table-column prop="status" :label="i18n('devicePingLog.alertColumn.status', '鐘舵��')" width="110"></el-table-column>
           <el-table-column prop="ip" label="IP" width="150"></el-table-column>
-          <el-table-column prop="message" label="璇存槑" min-width="240" show-overflow-tooltip></el-table-column>
+          <el-table-column prop="message" :label="i18n('devicePingLog.alertColumn.message', '璇存槑')" min-width="240" show-overflow-tooltip></el-table-column>
         </el-table>
       </div>
     </div>
@@ -475,6 +475,6 @@
 <script type="text/javascript" src="../../static/vue/js/vue.min.js"></script>
 <script type="text/javascript" src="../../static/vue/element/element.js"></script>
 <script type="text/javascript" src="../../static/js/echarts/echarts.min.js"></script>
-<script type="text/javascript" src="../../static/js/devicePingLog/devicePingLog.js?v=20260316_device_ping_packet_size_detail" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/devicePingLog/devicePingLog.js?v=20260317_device_ping_i18n" charset="utf-8"></script>
 </body>
 </html>

--
Gitblit v1.9.1