Bläddra i källkod

feat: 设备管理-设备:新增修改支持多语言

vera_min 1 månad sedan
förälder
incheckning
073ebc7a64

+ 36 - 6
src/i18n/pages/iotmanagerI18n/en.ts

@@ -119,7 +119,9 @@ export default {
 			editEventDefinition: "Edit Event Definition",
 			addEventDefinition: "Add Event Definition",
 			editTagDefinition: "Edit Tag Definition",
-			addTagDefinition: "Add Tag Definition"
+			addTagDefinition: "Add Tag Definition",
+			editDevice: "Edit Device",
+			addDevice: "Add Device"
 		},
 		tableI18nColumn: {
 			categoryName: "Category Name",
@@ -146,7 +148,9 @@ export default {
 			deleteCategoryMessage: "This operation will permanently delete the category: '{name}', continue?",
 			deleteProductMessage: "This operation will permanently delete the product: '{name}', continue?",
 			deleteMessage: "This operation will permanently delete the data, continue?",
-			selectMessage: "Please select the data to delete."
+			selectMessage: "Please select the data to delete.",
+			editSuccess: "Edited Successfully",
+			addSuccess: "Added Successfully"
 		},
 		tableI18nAction: {
 			addCategory: "Add Category",
@@ -207,7 +211,19 @@ export default {
 			contactAdmin: "Please contact administrator",
 			productBind: "Associated Product",
 			deptIds: "Affiliated Organization",
-			deviceTag: "Device Tag"
+			deviceTag: "Device Tag",
+			deviceKey: "Device Key",
+			deviceName: "Device Name",
+			deviceLng: "Device Lng",
+			tagSetting: "Tag Setting",
+			firmwareVersion: "Firmware Version",
+			remark: "Remark",
+			deviceDescription: "Device Description",
+			deviceImage: "Device Image",
+			certificateImage: "Certificate Image",
+			tagKeyName: "Tag Key",
+			tagName1: "Tag Name",
+			tagValue: "Tag Value"
 		},
 		formI18nPlaceholder: {
 			keyword: "Enter name or identifier",
@@ -256,7 +272,17 @@ export default {
 			inputParameter: "Please enter parameters",
 			productBind: "Select product",
 			deptIds: "Select affiliated organization",
-			deviceTag: "Enter tag"
+			deviceTag: "Enter tag",
+			deviceKey: "Enter device key",
+			deviceName: "Enter device name",
+			productBind1: "Select product",
+			deviceLng: "Select device coordinate",
+			firmwareVersion: "Enter firmware version",
+			enterContent: "Enter content",
+			deviceDescription: "Enter Device Description",
+			tagKeyName: "Enter tag key name",
+			tagName1: "Enter tag name",
+			tagValue: "Enter tag value"
 		},
 		formI18nOption: {
 			device: "Device",
@@ -281,7 +307,8 @@ export default {
 			batchDisable: "Batch Disable",
 			importDevice: "Import Device",
 			exportDevice: "Export Device",
-			batchCheckStatus: "Batch Check Status"
+			batchCheckStatus: "Batch Check Status",
+			addTag: "Add Tag"
 		},
 		rules: {
 			productName: "Product name cannot be empty",
@@ -319,7 +346,10 @@ export default {
 			tagKeyValidator: "Tag name cannot contain spaces",
 			tagKey: "Tag identifier cannot be empty",
 			tagAccessMode: "Please select access mode",
-			tagType: "Please select data type"
+			tagType: "Please select data type",
+			deviceName: "Device name cannot be empty",
+			deviceKeyMin5: "Device key must be at least 5 characters",
+			productIsNotEmpty: "Product cannot be empty"
 		}
 	},
 	// 级联管理

+ 36 - 6
src/i18n/pages/iotmanagerI18n/zh-cn.ts

@@ -119,7 +119,9 @@ export default {
 			editEventDefinition: "编辑事件定义",
 			addEventDefinition: "新增事件定义",
 			editTagDefinition: "编辑标签定义",
-			addTagDefinition: "新增标签定义"
+			addTagDefinition: "新增标签定义",
+			editDevice: "编辑设备",
+			addDevice: "新增设备"
 		},
 		tableI18nColumn: {
 			categoryName: "分类名称",
@@ -146,7 +148,9 @@ export default {
 			deleteCategoryMessage: "此操作将永久删除分类:'{name}', 是否继续?",
 			deleteProductMessage: "此操作将永久删除产品:'{name}',是否继续?",
 			deleteMessage: "此操作将永久删除该数据,是否继续?",
-			selectMessage: "请选择要删除的数据。"
+			selectMessage: "请选择要删除的数据。",
+			editSuccess: "编辑成功",
+			addSuccess: "新增成功"
 		},
 		tableI18nAction: {
 			addCategory: "新增分类",
@@ -207,7 +211,19 @@ export default {
 			contactAdmin: "请联系管理员",
 			productBind: "所属产品",
 			deptIds: "所属组织",
-			deviceTag: "设备标签"
+			deviceTag: "设备标签",
+			deviceKey: "设备标识",
+			deviceName: "设备名称",
+			deviceLng: "设备坐标",
+			tagSetting: "标签设置",
+			firmwareVersion: "固件版本号",
+			remark: "备注",
+			deviceDescription: "设备说明",
+			deviceImage: "设备图片",
+			certificateImage: "证书图片",
+			tagKeyName: "标签键名",
+			tagName1: "标签名称",
+			tagValue: "标签值"
 		},
 		formI18nPlaceholder: {
 			keyword: "输入名称或标识",
@@ -256,7 +272,17 @@ export default {
 			inputParameter: "请输入参数",
 			productBind: "选择产品",
 			deptIds: "请选择所属组织",
-			deviceTag: "请输入标签"
+			deviceTag: "请输入标签",
+			deviceKey: "请输入设备标识",
+			deviceName: "请输入设备名称",
+			productBind1: "请选择所属产品",
+			deviceLng: "选择设备坐标",
+			firmwareVersion: "请输入固件版本号",
+			enterContent: "请输入内容",
+			deviceDescription: "请输入设备说明",
+			tagKeyName: "请输入标签键名",
+			tagName1: "请输入标签名称",
+			tagValue: "请输入标签值"
 		},
 		formI18nOption: {
 			device: "设备",
@@ -281,7 +307,8 @@ export default {
 			batchDisable: "批量禁用",
 			importDevice: "导入设备",
 			exportDevice: "导出设备",
-			batchCheckStatus: "批量检测状态"
+			batchCheckStatus: "批量检测状态",
+			addTag: "添加标签"
 		},
 		rules: {
 			productName: "产品名称不能为空",
@@ -319,7 +346,10 @@ export default {
 			tagKeyValidator: "标签定义名称不能包含空格",
 			tagKey: "标签定义标识不能为空",
 			tagAccessMode: "请选择是否只读",
-			tagType: "请选择数据类型"
+			tagType: "请选择数据类型",
+			deviceName: "设备名称不能为空",
+			deviceKeyMin5: "设备标识最少五个字符",
+			productIsNotEmpty: "所属产品不能为空"
 		}
 	},
 	// 级联管理

+ 39 - 7
src/i18n/pages/iotmanagerI18n/zh-tw.ts

@@ -103,7 +103,9 @@ export default {
 			importModel: "導入物模型",
 			exportModel: "導出物模型",
 			deviceAccess: "設備接入",
-			dataParsing: "資料解析"
+			dataParsing: "資料解析",
+			operationSuccess: "操作成功",
+			modelImportSuccess: "物模型導入成功"
 		},
 		dialogI18n: {
 			addPro: "新增產品",
@@ -117,7 +119,9 @@ export default {
 			editEventDefinition: "編輯事件定義",
 			addEventDefinition: "新增事件定義",
 			editTagDefinition: "編輯標籤定義",
-			addTagDefinition: "新增標籤定義"
+			addTagDefinition: "新增標籤定義",
+			editDevice: "編輯設備",
+			addDevice: "新增設備"
 		},
 		tableI18nColumn: {
 			categoryName: "分類名稱",
@@ -144,7 +148,9 @@ export default {
 			deleteCategoryMessage: "此操作將永久刪除分類:'{name}', 是否繼續?",
 			deleteProductMessage: "此操作將永久刪除產品:'{name}',是否繼續?",
 			deleteMessage: "此操作將永久删除該數據,是否繼續?",
-			selectMessage: "請選擇要删除的數據。"
+			selectMessage: "請選擇要删除的數據。",
+			editSuccess: "編輯成功",
+			addSuccess: "新增成功"
 		},
 		tableI18nAction: {
 			addCategory: "新增分類",
@@ -205,7 +211,19 @@ export default {
 			contactAdmin: "請聯繫管理員",
 			productBind: "所屬產品",
 			deptIds: "所屬組織",
-			deviceTag: "設備標籤"
+			deviceTag: "設備標籤",
+			deviceKey: "設備標識",
+			deviceName: "設備名稱",
+			deviceLng: "設備座標",
+			tagSetting: "標籤設定",
+			firmwareVersion: "固件版本號",
+			remark: "備註",
+			deviceDescription: "設備說明",
+			deviceImage: "設備圖片",
+			certificateImage: "證書圖片",
+			tagKeyName: "標籤鍵名",
+			tagName1: "標籤名稱",
+			tagValue: "標籤值"
 		},
 		formI18nPlaceholder: {
 			keyword: "輸入名稱或標識",
@@ -254,7 +272,17 @@ export default {
 			inputParameter: "請輸入參數",
 			productBind: "選擇產品",
 			deptIds: "請選擇所属組織",
-			deviceTag: "請輸入標籤"
+			deviceTag: "請輸入標籤",
+			deviceKey: "請輸入設備標識",
+			deviceName: "請輸入設備名稱",
+			productBind1: "請選擇所属產品",
+			deviceLng: "選擇設備座標",
+			firmwareVersion: "請輸入固件版本號",
+			enterContent: "請輸入內容",
+			deviceDescription: "請輸入設備說明",
+			tagKeyName: "請輸入標籤鍵名",
+			tagName1: "請輸入標籤名稱",
+			tagValue: "請輸入標籤值"
 		},
 		formI18nOption: {
 			device: "設備",
@@ -279,7 +307,8 @@ export default {
 			batchDisable: "批量禁用",
 			importDevice: "导入设备",
 			exportDevice: "导出设备",
-			batchCheckStatus: "批量檢查狀態"
+			batchCheckStatus: "批量檢查狀態",
+			addTag: "添加標籤"
 		},
 		rules: {
 			productName: "產品名稱不能為空",
@@ -317,7 +346,10 @@ export default {
 			tagKeyValidator: "標籤定義名稱不能包含空格",
 			tagKey: "標籤定義標識不能為空",
 			tagAccessMode: "請選擇是否只讀",
-			tagType: "請選擇資料類型"
+			tagType: "請選擇資料類型",
+			deviceName: "設備名稱不能為空",
+			deviceKeyMin5: "設備標識最少五個字元",
+			productIsNotEmpty: "所屬產品不能為空"
 		}
 	},
 	// 级联管理

+ 88 - 48
src/views/iot/device/instance/component/edit.vue

@@ -1,85 +1,116 @@
 <template>
   <div class="system-edit-dic-container">
-    <el-dialog :title="(ruleForm.id !== 0 ? '修改' : '添加') + '设备'" v-model="isShowDialog" width="769px">
-      <el-form v-loading="loading" :model="ruleForm" ref="formRef" :rules="rules" label-width="110px">
-        <el-form-item label="设备标识" prop="key">
-          <el-input v-model="ruleForm.key" placeholder="请输入设备标识" :disabled="ruleForm.id" />
+    <!-- 编辑设备/新增设备 -->
+    <el-dialog :title="ruleForm.id !== 0 ? $t('message.device.dialogI18n.editDevice') : $t('message.device.dialogI18n.addDevice')" v-model="isShowDialog" width="769px">
+      <el-form v-loading="loading" :model="ruleForm" ref="formRef" :rules="rules" :label-width="currentLocale === 'en' ? '145px' : '110px'">
+        <!-- 设备标识 -->
+        <el-form-item :label="$t('message.device.formI18nLabel.deviceKey')" prop="key">
+          <!-- 请输入设备标识 -->
+          <el-input v-model="ruleForm.key" :placeholder="$t('message.device.formI18nPlaceholder.deviceKey')" :disabled="ruleForm.id" />
         </el-form-item>
-        <el-form-item label="设备名称" prop="name">
-          <el-input v-model="ruleForm.name" placeholder="请输入设备名称" />
+        <!-- 设备名称 -->
+        <el-form-item :label="$t('message.device.formI18nLabel.deviceName')" prop="name">
+          <!-- 请输入设备名称 -->
+          <el-input v-model="ruleForm.name" :placeholder="$t('message.device.formI18nPlaceholder.deviceName')" />
         </el-form-item>
-        <el-form-item label="所属产品" prop="productKey">
-          <el-select v-model="ruleForm.productKey" @change="productKeyChange" :disabled="ruleForm.id" placeholder="请选择所属产品" class="w100">
+        <!-- 所属产品 -->
+        <el-form-item :label="$t('message.device.formI18nLabel.productBind')" prop="productKey">
+          <!-- 请选择所属产品 -->
+          <el-select v-model="ruleForm.productKey" @change="productKeyChange" :disabled="ruleForm.id" :placeholder="$t('message.device.formI18nPlaceholder.productBind1')" class="w100">
             <el-option v-for="item in productData" :key="item.id" :label="item.name" :value="item.key" />
           </el-select>
         </el-form-item>
-        <el-form-item label="设备坐标" prop="lng">
-          <el-input :value="ruleForm.lng ? (ruleForm.lng + ' , ' + ruleForm.lat) : ''" placeholder="选择设备坐标" @click="selectMap(ruleForm)" read-only />
+        <!-- 设备坐标 -->
+        <el-form-item :label="$t('message.device.formI18nLabel.deviceLng')" prop="lng">
+          <!-- 选择设备坐标 -->
+          <el-input :value="ruleForm.lng ? (ruleForm.lng + ' , ' + ruleForm.lat) : ''" :placeholder="$t('message.device.formI18nPlaceholder.deviceLng')" @click="selectMap(ruleForm)" read-only />
         </el-form-item>
 
-        <el-form-item label="标签设置" prop="lng">
+        <!-- 标签设置 -->
+        <el-form-item :label="$t('message.device.formI18nLabel.tagSetting')" prop="lng">
           <div class="tags-wrapper">
-            <el-button type="primary" size="small" @click="toAddTag">添加标签</el-button>
+            <!-- 添加标签 -->
+            <el-button type="primary" size="small" @click="toAddTag">{{ $t('message.device.formI18nButton.addTag') }}</el-button>
             <div class="tags">
               <div class="tag flex" v-for="tag, i in ruleForm.tags" :key="tag.key">
                   <div class="capsule mr-3">
                   <div class="label">{{ tag.name }}</div>
                   <div class="value">{{ tag.value }}</div>
                 </div>
-                <el-button type="warning" size="small" @click="toUpdateTag(tag)">修改</el-button>
-                <el-button type="danger" size="small" @click="delTagRow(i)">删除</el-button>
+                <!-- 编辑 -->
+                <el-button type="warning" size="small" @click="toUpdateTag(tag)">{{ $t('message.formI18nButton.edit') }}</el-button>
+                <!-- 删除 -->
+                <el-button type="danger" size="small" @click="delTagRow(i)">{{ $t('message.formI18nButton.delete') }}</el-button>
               </div>
             </div>
           </div>
         </el-form-item>
         <template v-if="ruleForm.authType === 1 || ruleForm.authType === 2">
-          <el-form-item label="认证方式" prop="">
+          <!-- 认证方式 -->
+          <el-form-item :label="$t('message.device.formI18nLabel.authType')" prop="">
             <el-radio-group v-model="ruleForm.authType">
               <el-radio :label="1">Basic</el-radio>
               <el-radio :label="2">AccessToken</el-radio>
             </el-radio-group>
           </el-form-item>
           <template v-if="ruleForm.authType === 1">
-            <el-form-item label="用户名" prop="authUser">
-              <el-input v-model="ruleForm.authUser" placeholder="请输入用户名" />
+            <!-- 用户名 -->
+            <el-form-item :label="$t('message.device.formI18nLabel.authUser')" prop="authUser">
+              <!-- 请输入用户名 -->
+              <el-input v-model="ruleForm.authUser" :placeholder="$t('message.device.formI18nPlaceholder.authUser')" />
             </el-form-item>
-            <el-form-item label="密码" prop="authPasswd">
-              <el-input type="password" v-model="ruleForm.authPasswd" placeholder="请输入密码" />
+            <!-- 密码 -->
+            <el-form-item :label="$t('message.device.formI18nLabel.authPasswd')" prop="authPasswd">
+              <!-- 请输入密码 -->
+              <el-input type="password" v-model="ruleForm.authPasswd" :placeholder="$t('message.device.formI18nPlaceholder.authPasswd')" />
             </el-form-item>
           </template>
           <template v-else>
             <el-form-item label="Aceess Token" prop="accessToken">
-              <el-input v-model="ruleForm.accessToken" placeholder="请输入Aceess Token" />
+              <!-- 请输入Aceess Token -->
+              <el-input v-model="ruleForm.accessToken" :placeholder="$t('message.device.formI18nPlaceholder.accessToken')" />
             </el-form-item>
           </template>
         </template>
         <template v-else-if="ruleForm.authType === 3">
-          <el-form-item label="认证证书" prop="certificateId">
-            <el-select v-model="ruleForm.certificateId" placeholder="请选择证书">
+          <!-- 认证证书 -->
+          <el-form-item :label="$t('message.device.formI18nLabel.certificateId')" prop="certificateId">
+            <!-- 请选择认证证书 -->
+            <el-select v-model="ruleForm.certificateId" :placeholder="$t('message.device.formI18nPlaceholder.certificateId')">
               <el-option v-for="cert in certList" :key="cert.id" :label="cert.name" :value="cert.id"> </el-option>
             </el-select>
           </el-form-item>
         </template>
-        <el-form-item label="固件版本号" prop="version">
-          <el-input v-model="ruleForm.version" placeholder="请输入固件版本号" />
+        <!-- 固件版本号 -->
+        <el-form-item  :label="$t('message.device.formI18nLabel.firmwareVersion')" prop="version">
+          <!-- 请输入固件版本号 -->
+          <el-input v-model="ruleForm.version" :placeholder="$t('message.device.formI18nPlaceholder.firmwareVersion')" />
         </el-form-item>
-        <el-form-item label="备注" prop="desc">
-          <el-input v-model="ruleForm.desc" type="textarea" placeholder="请输入内容"></el-input>
+        <!-- 备注 -->
+        <el-form-item :label="$t('message.device.formI18nLabel.remark')" prop="desc">
+          <!-- 请输入备注 -->
+          <el-input v-model="ruleForm.desc" type="textarea" :placeholder="$t('message.device.formI18nPlaceholder.enterContent')"></el-input>
         </el-form-item>
-        <el-form-item label="设备说明">
-          <el-input v-model="intro" type="textarea" placeholder="请输入设备说明"></el-input>
+        <!-- 设备说明 -->
+        <el-form-item :label="$t('message.device.formI18nLabel.deviceDescription')">
+          <!-- 请输入设备说明 -->
+          <el-input v-model="intro" type="textarea" :placeholder="$t('message.device.formI18nPlaceholder.deviceDescription')"></el-input>
         </el-form-item>
-        <el-form-item label="设备图片">
+        <!-- 设备图片 -->
+        <el-form-item :label="$t('message.device.formI18nLabel.deviceImage')">
           <upload-vue :imgs="phone" key="phone" @set-imgs="setImgsPhone" :limit="deviceImgLimit"></upload-vue>
         </el-form-item>
-        <el-form-item label="证书图片">
+        <!-- 证书图片 -->
+        <el-form-item :label="$t('message.device.formI18nLabel.certificateImage')">
           <upload-vue :imgs="certificate" key="certificate" @set-imgs="setImgsCertificate" :limit="certificateLimit"></upload-vue>
         </el-form-item>
       </el-form>
       <template #footer>
         <span class="dialog-footer">
-          <el-button @click="onCancel">取 消</el-button>
-          <el-button type="primary" @click="onSubmit">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
+          <!-- 取消 -->
+          <el-button @click="onCancel">{{ $t('message.tableI18nAction.cancel') }}</el-button>
+          <!-- 编辑/新增 -->
+          <el-button type="primary" @click="onSubmit">{{ ruleForm.id !== 0 ? $t('message.tableI18nAction.edit') : $t('message.tableI18nAction.add') }}</el-button>
         </span>
       </template>
     </el-dialog>
@@ -89,7 +120,7 @@
 </template>
 
 <script lang="ts">
-import { reactive, toRefs, defineComponent, ref, unref } from 'vue';
+import { reactive, toRefs, defineComponent, ref, unref, computed } from 'vue';
 import api from '/@/api/device';
 import apiSystem from '/@/api/system';
 import { ElMessage, UploadProps } from "element-plus";
@@ -97,6 +128,8 @@ import tagVue from './tag.vue';
 import Map from './map.vue';
 import UploadVue from '/@/components/upload/index.vue';
 import certApi from '/@/api/certificateManagement';
+import { useI18n } from "vue-i18n";
+
 
 interface RuleFormState {
   id: number;
@@ -141,7 +174,7 @@ interface DicState {
   product: any;
   isShowDialog: boolean;
   ruleForm: RuleFormState;
-  rules: {};
+  // rules: {};
   deviceImgLimit: number;
   certificateLimit: number;
   phone: string[];
@@ -167,6 +200,20 @@ export default defineComponent({
     const loading = ref(false);
     const mapRef = ref();
     const certList = ref<any[]>([])
+    const { t, locale } = useI18n();
+    const currentLocale = computed(() => locale.value);
+    const rules = computed(() => ({
+      // 设备名称不能为空
+      name: [
+        { required: true, message: t('message.device.rules.deviceName'), trigger: "change" }
+      ],
+      // 设备标识最少五个字符
+      key: [
+        { required: true, message: t('message.device.rules.deviceKeyMin5'), trigger: "change", min: 5 }
+      ],
+      // 所属产品不能为空
+      productKey: [{ required: true, message: t('message.device.rules.productIsNotEmpty'), trigger: 'change' }],
+    }))
     const state = reactive<DicState>({
       isShowDialog: false,
       product: {},
@@ -174,15 +221,6 @@ export default defineComponent({
       ruleForm: {
         ...form
       },
-      rules: {
-        name: [
-          { required: true, message: "设备名称不能为空", trigger: "change" }
-        ],
-        key: [
-          { required: true, message: "设备标识最少五个字符", trigger: "change", min: 5 }
-        ],
-        productKey: [{ required: true, message: '所属产品不能为空', trigger: 'change' }],
-      },
       deviceImgLimit: 0,
       certificateLimit: 0,
       phone: [],
@@ -262,7 +300,7 @@ export default defineComponent({
       formWrap.validate((valid: boolean) => {
         if (valid) {
           if (state.ruleForm.id !== 0) {
-            //修
+            //修
             const params = {
               ...state.ruleForm,
               extensionInfo: JSON.stringify({
@@ -272,22 +310,22 @@ export default defineComponent({
               })
             }
             api.instance.edit(params).then(() => {
-              ElMessage.success('设备类型修改成功');
+              ElMessage.success(t('message.tableI18nConfirm.editSuccess'));
               closeDialog(); // 关闭弹窗
               emit('typeList')
             })
           } else {
-            //添加
+            //新增
             const params = {
               ...state.ruleForm,
               extensionInfo: JSON.stringify({
                 "phone": state.phone,
                 "certificate": state.certificate,
-                "intro": state.intro
+                "intro": state.intro  
               })
             }
             api.instance.add(params).then(() => {
-              ElMessage.success('设备类型添加成功');
+              ElMessage.success(t('message.tableI18nConfirm.addSuccess'));
               closeDialog(); // 关闭弹窗
               emit('typeList')
             })
@@ -328,6 +366,8 @@ export default defineComponent({
     }
 
     return {
+      currentLocale,
+      rules,
       loading,
       certList,
       productKeyChange,

+ 34 - 19
src/views/iot/device/instance/component/tag.vue

@@ -1,31 +1,45 @@
 <template>
-  <el-dialog title="标签设置" v-model="isShowDialog" width="500px">
+  <!-- 标签设置 -->
+  <el-dialog :title="$t('message.device.formI18nLabel.tagSetting')" v-model="isShowDialog" width="500px">
     <el-form :model="ruleForm" ref="formRef" :rules="rules" label-width="110px">
-      <el-form-item label="标签键名" prop="key">
-        <el-input v-model="ruleForm.key" placeholder="请输入标签键名" :disabled="isEdit" />
+      <!-- 标签键名 -->
+      <el-form-item :label="$t('message.device.formI18nLabel.tagKeyName')" prop="key">
+        <!-- 请输入标签键名 -->
+        <el-input v-model="ruleForm.key" :placeholder="$t('message.device.formI18nPlaceholder.tagKeyName')" :disabled="isEdit" />
       </el-form-item>
 
-      <el-form-item label="标签名称" prop="name">
-        <el-input v-model="ruleForm.name" placeholder="请输入标签名称" />
+      <!-- 标签名称 -->
+      <el-form-item :label="$t('message.device.formI18nLabel.tagName1')" prop="name">
+        <!-- 请输入标签名称 -->
+        <el-input v-model="ruleForm.name" :placeholder="$t('message.device.formI18nPlaceholder.tagName1')" />
       </el-form-item>
 
-      <el-form-item label="标签值" prop="value">
-        <el-input v-model="ruleForm.value" placeholder="请输入标签值" />
+      <!-- 标签值 -->
+      <el-form-item :label="$t('message.device.formI18nLabel.tagValue')" prop="value">
+        <!-- 请输入标签值 -->
+        <el-input v-model="ruleForm.value" :placeholder="$t('message.device.formI18nPlaceholder.tagValue')" />
       </el-form-item>
     </el-form>
     <template #footer>
-      <el-button @click="isShowDialog = false">取 消</el-button>
-      <el-button type="primary" v-if="isEdit" @click="onEdit">修 改</el-button>
-      <el-button type="primary" v-else @click="onSubmit">添 加</el-button>
+      <!-- 取消 -->
+      <el-button @click="isShowDialog = false">{{ $t('message.tableI18nAction.cancel') }}</el-button>
+      <!-- 编辑 -->
+      <el-button type="primary" v-if="isEdit" @click="onEdit">{{ $t('message.tableI18nAction.edit') }}</el-button>
+      <!-- 新增 -->
+      <el-button type="primary" v-else @click="onSubmit">{{ $t('message.tableI18nAction.add') }}</el-button>
     </template>
   </el-dialog>
 </template>
 
 <script lang="ts" setup>
-import { reactive, ref, getCurrentInstance } from 'vue';
+import { reactive, ref, getCurrentInstance, computed } from 'vue';
+import { useI18n } from 'vue-i18n';
 
+const { locale, t } = useI18n();
+const currentLocale = computed(() => locale.value); 
 const { proxy } = getCurrentInstance() as any
 
+
 interface Tag {
   key: string;
   name: string;
@@ -48,11 +62,14 @@ const ruleForm = reactive<Tag>({
   ...form
 })
 
-const rules = {
-  key: [{ required: true, message: "请输入标签键名", trigger: "change" }],
-  name: [{ required: true, message: "请输入标签名称", trigger: "change" }],
-  value: [{ required: true, message: '请输入标签值', trigger: 'change' }],
-}
+const rules = computed(() => ({
+  // 请输入标签键名
+  key: [{ required: true, message: t('message.device.formI18nPlaceholder.tagKeyName'), trigger: "change" }],
+  // 请输入标签名称
+  name: [{ required: true, message: t('message.device.formI18nPlaceholder.tagName1'), trigger: "change" }],
+  // 请输入标签值
+  value: [{ required: true, message: t('message.device.formI18nPlaceholder.tagValue'), trigger: 'change' }],
+}))
 
 function addRow() {
   isEdit.value = false
@@ -92,6 +109,4 @@ defineExpose({
   editRow
 })
 
-</script>
-
-<style lang="scss" scoped></style>
+</script>