feat(ota): 支持按版本号+版本名+灰度状态检查与分组显示
- 后端新增检查版本是否存在时对版本名称做匹配,避免重复版本名称 - 更新时同步考虑版本名称,防止名称冲突 - 前端实现同型号+版本号+灰度多条记录折叠显示,支持展开查看子记录 - 调整表格列宽及样式,确保树形结构显示正常且细节优化 - 增加分组行视觉区分,弱化折叠子行背景 - 重置展开状态,确保刷新数据后树形结构收起
This commit is contained in:
@@ -215,7 +215,7 @@ router.post('/api/ota/', async (req: Request, res: Response) => {
|
||||
const data = parsed.data;
|
||||
logger.info(`Creating OTA: verCode=${data.verCode}, verName=${data.verName}, model=${data.model}`);
|
||||
|
||||
// 检查版本号是否已存在
|
||||
// 检查版本号+版本名称是否已存在
|
||||
const [existing] = await db
|
||||
.select()
|
||||
.from(otas)
|
||||
@@ -223,11 +223,12 @@ router.post('/api/ota/', async (req: Request, res: Response) => {
|
||||
eq(otas.verCode, data.verCode),
|
||||
eq(otas.model, data.model!),
|
||||
eq(otas.beta, data.beta ?? 0),
|
||||
eq(otas.verName, data.verName),
|
||||
))
|
||||
.limit(1);
|
||||
if (existing) {
|
||||
logger.warn(`OTA version already exists: verCode=${data.verCode}, model=${data.model}, beta=${data.beta ?? 0}`);
|
||||
res.json(ApiResponse.error('该版本已存在(相同版本+灰度状态)'));
|
||||
logger.warn(`OTA version already exists: verCode=${data.verCode}, verName=${data.verName}, model=${data.model}, beta=${data.beta ?? 0}`);
|
||||
res.json(ApiResponse.error('该版本已存在(相同版本+名称+灰度状态)'));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -279,20 +280,21 @@ router.put('/api/ota/:ota_id', async (req: Request, res: Response) => {
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果更新版本号或灰度状态,检查是否冲突
|
||||
// 如果更新版本号、名称或灰度状态,检查是否冲突
|
||||
const newVerCode = data.verCode !== undefined && data.verCode !== null ? data.verCode : dbOta.verCode;
|
||||
const newModel = data.model !== undefined && data.model !== null ? data.model : dbOta.model;
|
||||
const newBeta = data.beta !== undefined && data.beta !== null ? data.beta : dbOta.beta;
|
||||
const newVerName = data.verName !== undefined && data.verName !== null ? data.verName : dbOta.verName;
|
||||
|
||||
if (newVerCode !== dbOta.verCode || newModel !== dbOta.model || newBeta !== dbOta.beta) {
|
||||
if (newVerCode !== dbOta.verCode || newModel !== dbOta.model || newBeta !== dbOta.beta || newVerName !== dbOta.verName) {
|
||||
const [existing] = await db
|
||||
.select()
|
||||
.from(otas)
|
||||
.where(and(eq(otas.verCode, newVerCode), eq(otas.model, newModel!), eq(otas.beta, newBeta)))
|
||||
.where(and(eq(otas.verCode, newVerCode), eq(otas.model, newModel!), eq(otas.beta, newBeta), eq(otas.verName, newVerName)))
|
||||
.limit(1);
|
||||
if (existing) {
|
||||
logger.warn(`OTA version already exists: verCode=${newVerCode}, model=${newModel}, beta=${newBeta}`);
|
||||
res.json(ApiResponse.error('该版本已存在(相同版本+灰度状态)'));
|
||||
logger.warn(`OTA version already exists: verCode=${newVerCode}, verName=${newVerName}, model=${newModel}, beta=${newBeta}`);
|
||||
res.json(ApiResponse.error('该版本已存在(相同版本+名称+灰度状态)'));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user