Kaynağa Gözat

feat: iot管理-首页概览支持多语言

vera_min 2 ay önce
ebeveyn
işleme
357824e967
3 değiştirilmiş dosya ile 55 ekleme ve 13 silme
  1. 1 1
      package.json
  2. 16 1
      src/i18n/index.ts
  3. 38 11
      src/views/iot/iotmanager/dashboard.vue

+ 1 - 1
package.json

@@ -5,7 +5,7 @@
   "author": "lyt_20201208",
   "license": "MIT",
   "scripts": {
-    "dev": "npm run plugin:check && npm run writeEnv:dev && vite --force",
+    "dev": "npm run writeEnv:dev && vite --force",
     "plugin:check": "ls ./public/plugin/topo && npm run plugin:has || npm run plugin:not",
     "plugin:has": "echo '\\033[31m 插件更新中,更新后自动运行 \\033[0m' && npm run plugin:pull",
     "plugin:not": "echo '\\033[31m 插件不存在,需要拉取 拉取后会自动运行 \\033[0m' && npm run plugin:clone",

+ 16 - 1
src/i18n/index.ts

@@ -1,3 +1,11 @@
+/*
+ * @Author: vera_min vera_min@163.com
+ * @Date: 2025-08-02 12:21:54
+ * @LastEditors: vera_min vera_min@163.com
+ * @LastEditTime: 2025-08-05 12:44:51
+ * @FilePath: /sagoo-admin-ui/src/i18n/index.ts
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
 import { createI18n } from 'vue-i18n';
 import zhcnLocale from 'element-plus/lib/locale/lang/zh-cn';
 import enLocale from 'element-plus/lib/locale/lang/en';
@@ -15,6 +23,10 @@ import pagesFormI18nZhcn from '/@/i18n/pages/formI18n/zh-cn';
 import pagesFormI18nEn from '/@/i18n/pages/formI18n/en';
 import pagesFormI18nZhtw from '/@/i18n/pages/formI18n/zh-tw';
 
+import pagesIotmanagerZhcn from '/@/i18n/pages/iotmanager/zh-cn';
+import pagesIotmanagerEn from '/@/i18n/pages/iotmanager/en';
+import pagesIotmanagerZhtw from '/@/i18n/pages/iotmanager/zh-tw';
+
 // 定义语言国际化内容
 /**
  * 说明:
@@ -28,7 +40,8 @@ const messages = {
 			...nextZhcn,
 			...pagesLoginZhcn,
 			...pagesFormI18nZhcn,
-		},
+			...pagesIotmanagerZhcn
+		}
 	},
 	[enLocale.name]: {
 		...enLocale,
@@ -36,6 +49,7 @@ const messages = {
 			...nextEn,
 			...pagesLoginEn,
 			...pagesFormI18nEn,
+			...pagesIotmanagerEn
 		},
 	},
 	[zhtwLocale.name]: {
@@ -44,6 +58,7 @@ const messages = {
 			...nextZhtw,
 			...pagesLoginZhtw,
 			...pagesFormI18nZhtw,
+			...pagesIotmanagerZhtw
 		},
 	},
 };

+ 38 - 11
src/views/iot/iotmanager/dashboard.vue

@@ -7,7 +7,7 @@
 						<img :src="'/imgs/' + v.icoimg" class="icoimg" />
 						<div class="card-right">
 							<span class="font30">{{ v.allnum }}</span>
-							<div class="label">{{ v.num3 }}</div>
+							<div class="label">{{ $t('message.dashboard.'+v.num3) }}</div>
 						</div>
 					</div>
 					<div class="divider"></div>
@@ -15,14 +15,14 @@
 						<div class="flex" style="gap: 10px">
 							<img src="/@/assets/ok.svg" v-if="k < 2" alt="" class="icon" />
 							<img src="/@/assets/date.svg" v-else alt="" class="icon" />
-							<span class="info" :style="{ color: v.title1_bgcolor }">{{ v.title1 }}</span>
+							<span class="info" :style="{ color: v.title1_bgcolor }">{{ $t('message.dashboard.'+v.title1) }}</span>
 							<div class="num">{{ v.num1 }}</div>
 						</div>
 						<div class="split"></div>
 						<div class="flex" style="gap: 10px">
 							<img src="/@/assets/stop.svg" v-if="k < 2" alt="" class="icon" />
 							<img src="/@/assets/today.svg" v-else alt="" class="icon" />
-							<span class="info" :style="{ color: v.title2_bgcolor }">{{ v.title2 }}</span>
+							<span class="info" :style="{ color: v.title2_bgcolor }">{{ $t('message.dashboard.'+v.title2) }}</span>
 							<div class="num">{{ v.num2 }}</div>
 						</div>
 					</div>
@@ -31,11 +31,11 @@
 		</el-row>
 		<div class="chart-wrapper">
 			<div class="chart-item" style="flex: 2">
-				<div class="chart-title">设备消息</div>
+				<div class="chart-title">{{ t('message.dashboard.设备消息') }}</div>
 				<VueUiXy :dataset="dataset" :config="config" />
 			</div>
 			<div class="chart-item">
-				<div class="chart-title">预警类型</div>
+				<div class="chart-title">{{ t('message.dashboard.warningType') }}</div>
 				<VueUiDonut :dataset="pieDataset" :config="pieConfig" />
 			</div>
 		</div>
@@ -53,6 +53,11 @@ import api from '/@/api/datahub'
 import dayjs from 'dayjs'
 import AlarmList from '/@/views/iot/alarm/list/index.vue'
 import { useThemeChange } from '/@/hooks/useCommon'
+import { store } from '/@/store/index';
+
+import { useI18n } from 'vue-i18n'
+
+const { t } = useI18n()
 
 // 页面是显示状态
 let isActice = true
@@ -62,7 +67,7 @@ let isActice = true
 // 获取默认图形配置数据
 const chartData = getLineData({
 	xAxis: [],
-	legend: ['消息量', '预警量'],
+	legend: [t('message.dashboard.messageCount'), t('message.dashboard.warningCount')],
 	datas: [[], []],
 })
 
@@ -101,7 +106,7 @@ watch(
 	(list) => {
 		if (!list.length) return
 		list.forEach((item: any) => {
-			alarmTypeMap[item.value] = item.label
+			alarmTypeMap[item.value] = t('message.dashboard.'+item.label)
 		})
 
 		// 预警类型需要类型返回后才能请求
@@ -112,6 +117,24 @@ watch(
 	}
 )
 
+watch(() => store.state.themeConfig.themeConfig.globalI18n, (globalI18n) => {
+	if(globalI18n) {
+		// 更新圖表數據的圖例
+		dataset.value[0].name = t('message.dashboard.messageCount')
+		dataset.value[1].name = t('message.dashboard.warningCount')
+		// 更新餅圖數據 - 重新生成圖例標籤
+		if (pieDataset.value && pieDataset.value.length > 0) {
+			// 更新 alarmTypeMap 中的翻譯
+			alarm_type.value.forEach((item: any) => {
+					alarmTypeMap[item.value] = t('message.dashboard.'+item.label)
+			})
+			
+			// 重新調用API獲取最新數據並重新渲染
+			getDeviceAlarmLevelCount()
+		}
+	}
+});
+
 const editDicRef = ref()
 const detailRef = ref()
 const router = useRouter()
@@ -133,6 +156,7 @@ const state = reactive({
 			allnum: 0,
 			num1: 0,
 			num2: 0,
+			// num3: t('message.dashboard.product'),
 			num3: '产品',
 			num4: 'icon-zidingyibuju',
 			color1: '#6690F9',
@@ -148,6 +172,7 @@ const state = reactive({
 			allnum: 0,
 			num1: 0,
 			num2: 0,
+			// num3: t('message.dashboard.onlineDevice'),
 			num3: '在线设备',
 			num4: 'icon-putong',
 			color1: '#FF6462',
@@ -163,14 +188,15 @@ const state = reactive({
 			allnum: 0,
 			num1: 0,
 			num2: 0,
+			// num3: t('message.dashboard.deviceMessage'),
 			num3: '设备消息',
 			num4: 'icon-shidu',
 			color1: '#6690F9',
 			color2: '--el-color-success-lighter',
 			color3: '--el-color-success',
 			icoimg: 'dashboard-icon3.svg',
-			title1: '本月',
-			title2: '今日',
+			title1: "本月",
+			title2: "今日",
 			title1_bgcolor: '#4285F4',
 			title2_bgcolor: '#FFBB73',
 		},
@@ -178,7 +204,8 @@ const state = reactive({
 			allnum: 0,
 			num1: 0,
 			num2: 0,
-			num3: '设备告警',
+			// num3: t('message.dashboard.deviceWarning'),
+			num3: '设备警告',
 			num4: 'icon-zaosheng',
 			color1: '#6690F9',
 			color2: '--el-color-warning-lighter',
@@ -246,7 +273,7 @@ function getDeviceDataCount() {
 
 			const chartData = getLineData({
 				xAxis: month,
-				legend: ['消息量', '预警量'],
+				legend: [t('message.dashboard.messageCount'), t('message.dashboard.warningCount')],
 				datas: [list1, list2],
 			})