updata:智控台页面添加语言切换,支持中英繁。

This commit is contained in:
rainv123
2025-09-11 17:10:50 +08:00
parent a9b0775469
commit 98a1483032
41 changed files with 3800 additions and 1061 deletions
+46 -45
View File
@@ -3,11 +3,11 @@
<HeaderBar />
<div class="operation-bar">
<h2 class="page-title">固件管理</h2>
<h2 class="page-title">{{ $t('otaManagement.firmwareManagement') }}</h2>
<div class="right-operations">
<el-input placeholder="请输入固件名称查询" v-model="searchName" class="search-input"
<el-input :placeholder="$t('otaManagement.searchPlaceholder')" v-model="searchName" class="search-input"
@keyup.enter.native="handleSearch" clearable />
<el-button class="btn-search" @click="handleSearch">搜索</el-button>
<el-button class="btn-search" @click="handleSearch">{{ $t('otaManagement.search') }}</el-button>
</div>
</div>
@@ -16,44 +16,44 @@
<div class="content-area">
<el-card class="params-card" shadow="never">
<el-table ref="paramsTable" :data="paramsList" class="transparent-table" v-loading="loading"
element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading"
element-loading-text="Loading" element-loading-spinner="el-icon-loading"
element-loading-background="rgba(255, 255, 255, 0.7)"
:header-cell-class-name="headerCellClassName">
<el-table-column label="选择" align="center" width="120">
<el-table-column :label="$t('modelConfig.select')" align="center" width="120">
<template slot-scope="scope">
<el-checkbox v-model="scope.row.selected"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="固件名称" prop="firmwareName" align="center"></el-table-column>
<el-table-column label="固件类型" prop="type" align="center">
<el-table-column :label="$t('otaManagement.firmwareName')" prop="firmwareName" align="center"></el-table-column>
<el-table-column :label="$t('otaManagement.firmwareType')" prop="type" align="center">
<template slot-scope="scope">
{{ getFirmwareTypeName(scope.row.type) }}
</template>
</el-table-column>
<el-table-column label="版本号" prop="version" align="center"></el-table-column>
<el-table-column label="文件大小" prop="size" align="center">
<el-table-column :label="$t('otaManagement.version')" prop="version" align="center"></el-table-column>
<el-table-column :label="$t('otaManagement.fileSize')" prop="size" align="center">
<template slot-scope="scope">
{{ formatFileSize(scope.row.size) }}
</template>
</el-table-column>
<el-table-column label="备注" prop="remark" align="center"
<el-table-column :label="$t('otaManagement.remark')" prop="remark" align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="创建时间" prop="createDate" align="center">
<el-table-column :label="$t('otaManagement.createTime')" prop="createDate" align="center">
<template slot-scope="scope">
{{ formatDate(scope.row.createDate) }}
</template>
</el-table-column>
<el-table-column label="更新时间" prop="updateDate" align="center">
<el-table-column :label="$t('otaManagement.updateTime')" prop="updateDate" align="center">
<template slot-scope="scope">
{{ formatDate(scope.row.updateDate) }}
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<el-table-column :label="$t('otaManagement.action')" align="center">
<template slot-scope="scope">
<el-button size="mini" type="text"
@click="downloadFirmware(scope.row)">下载</el-button>
<el-button size="mini" type="text" @click="editParam(scope.row)">编辑</el-button>
<el-button size="mini" type="text" @click="deleteParam(scope.row)">删除</el-button>
@click="downloadFirmware(scope.row)">{{ $t('otaManagement.download') }}</el-button>
<el-button size="mini" type="text" @click="editParam(scope.row)">{{ $t('otaManagement.edit') }}</el-button>
<el-button size="mini" type="text" @click="deleteParam(scope.row)">{{ $t('otaManagement.delete') }}</el-button>
</template>
</el-table-column>
</el-table>
@@ -61,33 +61,33 @@
<div class="table_bottom">
<div class="ctrl_btn">
<el-button size="mini" type="primary" class="select-all-btn" @click="handleSelectAll">
{{ isAllSelected ? '取消全选' : '全选' }}
{{ isAllSelected ? $t('otaManagement.deselectAll') : $t('otaManagement.selectAll') }}
</el-button>
<el-button size="mini" type="success" @click="showAddDialog"
style="background: #5bc98c;border: None;">新增</el-button>
style="background: #5bc98c;border: None;">{{ $t('otaManagement.addNew') }}</el-button>
<el-button size="mini" type="danger" icon="el-icon-delete"
@click="deleteSelectedParams">删除</el-button>
@click="deleteSelectedParams">{{ $t('otaManagement.delete') }}</el-button>
</div>
<div class="custom-pagination">
<el-select v-model="pageSize" @change="handlePageSizeChange" class="page-size-select">
<el-option v-for="item in pageSizeOptions" :key="item" :label="`${item}条/页`"
<el-option v-for="item in pageSizeOptions" :key="item" :label="$t('otaManagement.itemsPerPage', { items: item })"
:value="item">
</el-option>
</el-select>
<button class="pagination-btn" :disabled="currentPage === 1" @click="goFirst">
首页
{{ $t('otaManagement.firstPage') }}
</button>
<button class="pagination-btn" :disabled="currentPage === 1" @click="goPrev">
上一页
{{ $t('otaManagement.prevPage') }}
</button>
<button v-for="page in visiblePages" :key="page" class="pagination-btn"
:class="{ active: page === currentPage }" @click="goToPage(page)">
{{ page }}
</button>
<button class="pagination-btn" :disabled="currentPage === pageCount" @click="goNext">
下一页
{{ $t('otaManagement.nextPage') }}
</button>
<span class="total-text">{{ total }}条记录</span>
<span class="total-text">{{ $t('otaManagement.totalRecords', { total }) }}</span>
</div>
</div>
</el-card>
@@ -97,7 +97,7 @@
<!-- 新增/编辑固件对话框 -->
<firmware-dialog :title="dialogTitle" :visible.sync="dialogVisible" :form="firmwareForm"
:firmware-types="firmwareTypes" @submit="handleSubmit" @cancel="dialogVisible = false" />
:firmware-types="firmwareTypes" @submit="handleSubmit" @cancel="dialogVisible = false" />
<el-footer>
<version-footer />
</el-footer>
@@ -110,6 +110,7 @@ import FirmwareDialog from "@/components/FirmwareDialog.vue";
import HeaderBar from "@/components/HeaderBar.vue";
import VersionFooter from "@/components/VersionFooter.vue";
import { formatDate, formatFileSize } from "@/utils/format";
import i18n from '@/i18n';
export default {
components: { HeaderBar, FirmwareDialog, VersionFooter },
@@ -193,7 +194,7 @@ export default {
this.paramsList = [];
this.total = 0;
this.$message.error({
message: res?.data?.msg || '获取固件列表失败',
message: res?.data?.msg || this.$t('otaManagement.getFirmwareListFailed'),
showClose: true
});
}
@@ -210,7 +211,7 @@ export default {
});
},
showAddDialog() {
this.dialogTitle = "新增固件";
this.dialogTitle = this.$t('otaManagement.addFirmware');
// 完全重置表单数据
this.firmwareForm = {
id: null,
@@ -230,7 +231,7 @@ export default {
this.dialogVisible = true;
},
editParam(row) {
this.dialogTitle = "编辑固件";
this.dialogTitle = this.$t('otaManagement.editFirmware');
this.firmwareForm = { ...row };
this.dialogVisible = true;
},
@@ -241,14 +242,14 @@ export default {
res = res.data;
if (res.code === 0) {
this.$message.success({
message: "修改成功",
message: this.$t('otaManagement.updateSuccess'),
showClose: true
});
this.dialogVisible = false;
this.fetchFirmwareList();
} else {
this.$message.error({
message: res.msg || "修改失败",
message: res.msg || this.$t('otaManagement.updateFailed'),
showClose: true
});
}
@@ -259,14 +260,14 @@ export default {
res = res.data;
if (res.code === 0) {
this.$message.success({
message: "新增成功",
message: this.$t('otaManagement.addSuccess'),
showClose: true
});
this.dialogVisible = false;
this.fetchFirmwareList();
} else {
this.$message.error({
message: res.msg || "新增失败",
message: res.msg || this.$t('otaManagement.addFailed'),
showClose: true
});
}
@@ -278,7 +279,7 @@ export default {
const selectedRows = this.firmwareList.filter(row => row.selected);
if (selectedRows.length === 0) {
this.$message.warning({
message: "请先选择需要删除的固件",
message: this.$t('otaManagement.selectFirmwareFirst'),
showClose: true
});
return;
@@ -291,23 +292,23 @@ export default {
if (Array.isArray(row) && row.length === 0) {
this.$message.warning({
message: "请先选择需要删除的参数",
message: this.$t('otaManagement.selectFirmwareFirst'),
showClose: true
});
return;
}
const paramCount = params.length;
this.$confirm(`确定要删除选中的${paramCount}个固件吗?`, '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
this.$confirm(this.$t('otaManagement.confirmBatchDelete', { paramCount }), 'Warning', {
confirmButtonText: 'OK',
cancelButtonText: 'Cancel',
type: 'warning',
distinguishCancelAndClose: true
}).then(() => {
const ids = params.map(param => param.id);
if (ids.some(id => !id)) {
this.$message.error({
message: '存在无效的参数ID',
message: this.$t('otaManagement.invalidFirmwareId'),
showClose: true
});
return;
@@ -317,13 +318,13 @@ export default {
res = res.data;
if (res.code === 0) {
this.$message.success({
message: `成功删除${paramCount}个固件`,
message: this.$t('otaManagement.batchDeleteSuccess', { paramCount }),
showClose: true
});
this.fetchFirmwareList();
} else {
this.$message.error({
message: res.msg || '删除失败,请重试',
message: res.msg || this.$t('otaManagement.deleteFailed'),
showClose: true
});
}
@@ -332,13 +333,13 @@ export default {
if (action === 'cancel') {
this.$message({
type: 'info',
message: '已取消删除操作',
message: this.$t('otaManagement.operationCancelled'),
duration: 1000
});
} else {
this.$message({
type: 'info',
message: '操作已关闭',
message: this.$t('otaManagement.operationClosed'),
duration: 1000
});
}
@@ -372,7 +373,7 @@ export default {
},
downloadFirmware(firmware) {
if (!firmware || !firmware.id) {
this.$message.error('固件信息不完整');
this.$message.error(this.$t('otaManagement.incompleteFirmwareInfo'));
return;
}
// 先获取下载链接
@@ -382,7 +383,7 @@ export default {
const baseUrl = process.env.VUE_APP_API_BASE_URL || '';
window.open(`${window.location.origin}${baseUrl}/otaMag/download/${uuid}`);
} else {
this.$message.error('获取下载链接失败');
this.$message.error(this.$t('otaManagement.getDownloadUrlFailed'));
}
});
},
@@ -394,7 +395,7 @@ export default {
this.firmwareTypes = res.data
} catch (error) {
console.error('获取固件类型失败:', error)
this.$message.error(error.message || '获取固件类型失败')
this.$message.error(error.message || this.$t('otaManagement.getFirmwareTypesFailed'))
}
},
getFirmwareTypeName(type) {