Add OTA package upload functionality and UI enhancements

- Introduced a new endpoint for uploading OTA packages in backend/routes/ota.py.
- Implemented file handling and MD5 checksum calculation for OTA packages.
- Updated frontend API to support OTA package uploads with a new uploadOtaPackage function.
- Enhanced the OTA management UI to include file upload options and improved layout.
- Updated requirements.txt to include boto3 for S3 interactions.
- Made various UI adjustments for better user experience and consistency.
This commit is contained in:
yangy
2026-05-15 17:34:54 +08:00
parent 661b85ce62
commit 1a6c96da8c
9 changed files with 511 additions and 132 deletions
+18 -17
View File
@@ -9,7 +9,7 @@
<el-container class="lux-shell-body">
<el-aside width="220px" class="sidebar-glass">
<div class="sidebar-logo">
<h2>耳机管理平台</h2>
<h2>Luxsin CMS</h2>
</div>
<el-menu
class="lux-menu"
@@ -48,16 +48,23 @@
<el-container class="lux-right-col">
<el-header class="lux-header">
<div class="lux-header-title">耳机品牌与型号管理系统</div>
<div class="header-right">
<el-button type="primary" size="small" class="logout-btn" @click="handleLogout">
退出登录
</el-button>
</div>
<el-button
circle
type="primary"
class="lux-header-power-btn"
title="退出登录"
aria-label="退出登录"
@click="handleLogout"
>
<el-icon :size="18"><SwitchButton /></el-icon>
</el-button>
</el-header>
<el-main class="lux-main">
<router-view />
</el-main>
<el-footer class="lux-footer" height="auto">
<span class="lux-footer-copy">&copy;Powered By EafonYang</span>
</el-footer>
</el-container>
</el-container>
</div>
@@ -67,7 +74,7 @@
import { computed } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import { Headset, Collection, List, Upload, Document } from '@element-plus/icons-vue'
import { Headset, Collection, List, Upload, Document, SwitchButton } from '@element-plus/icons-vue'
import { clearToken } from '@/utils/auth'
const route = useRoute()
@@ -85,14 +92,8 @@ const handleLogout = () => {
.lux-right-col {
flex: 1;
min-width: 0;
}
.header-right {
flex-shrink: 0;
}
.logout-btn {
color: #ffffff !important;
font-weight: 600;
min-height: 0;
display: flex;
flex-direction: column;
}
</style>