新增车辆表及OTA权限与逻辑优化
新增车辆任务与报警表,完善实体与DbContext配置。细化OTA权限校验,增强回传会话IP安全。优化OTA上传与设置面板,调度器支持重启恢复。报警采集逻辑支持历史分段。
This commit is contained in:
@@ -13,6 +13,10 @@ const http: AxiosInstance = axios.create({
|
||||
})
|
||||
|
||||
http.interceptors.request.use((config: InternalAxiosRequestConfig) => {
|
||||
// FormData 必须由浏览器自动带 multipart boundary;清掉默认 application/json。
|
||||
if (typeof FormData !== 'undefined' && config.data instanceof FormData) {
|
||||
config.headers.delete('Content-Type')
|
||||
}
|
||||
// 双轨:优先用 localStorage 里的 token(过渡期 fallback),Cookie 会自动带;
|
||||
// 后端首先看 Authorization: Bearer,没有再看 Cookie,两路任一通过即可。
|
||||
const token = localStorage.getItem('simple.auth.token')
|
||||
|
||||
@@ -47,7 +47,6 @@ export async function uploadOtaPackage(file: File): Promise<OtaPackageInfo> {
|
||||
const form = new FormData()
|
||||
form.append('file', file)
|
||||
const { data } = await http.post<OtaPackageInfo>('/ota/packages/upload', form, {
|
||||
headers: { 'Content-Type': 'multipart/form-data' },
|
||||
timeout: 300000
|
||||
})
|
||||
return data
|
||||
@@ -116,7 +115,6 @@ export async function pushOtaCustomFile(opts: {
|
||||
form.append('restartOps', JSON.stringify(opts.restartOps.length ? opts.restartOps : [-1]))
|
||||
for (const f of opts.files) form.append('files', f)
|
||||
const { data } = await http.post<OtaJob>('/ota/custom-file', form, {
|
||||
headers: { 'Content-Type': 'multipart/form-data' },
|
||||
timeout: 300000
|
||||
})
|
||||
return data
|
||||
|
||||
@@ -148,7 +148,7 @@ const auth = useAuthStore()
|
||||
const canWrite = computed(() => {
|
||||
if (auth.scope === 'Platform') return true
|
||||
const ops = auth.effectivePermissions?.allowedOps ?? []
|
||||
return ops.includes('*') || ops.some((o) => o === 'ops.ota' || o.startsWith('ops.ota.'))
|
||||
return ops.includes('*') || ops.some((o) => o === 'ops.ota' || o === 'ops.ota.write' || o.startsWith('ops.ota.'))
|
||||
})
|
||||
|
||||
// Tab 与 URL ?tab= 同步,支持深链接(旧 /config/vehicle、/config/fleet 已下线,统一进车辆运维)。
|
||||
|
||||
@@ -21,18 +21,10 @@
|
||||
<el-form-item label="超限策略">
|
||||
<el-radio-group v-model="form.overThreshold">
|
||||
<el-radio value="skip">跳过该车</el-radio>
|
||||
<el-radio value="confirm">仍允许(需确认)</el-radio>
|
||||
<el-radio value="confirm">仍允许下发</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<h4>备份</h4>
|
||||
<el-form-item label="周期 (分钟)">
|
||||
<el-input-number v-model="form.backupPeriodMinutes" :min="0" :max="10080" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备份可执行文件">
|
||||
<el-switch v-model="form.backupExe" />
|
||||
</el-form-item>
|
||||
|
||||
<h4>展示</h4>
|
||||
<el-form-item label="目标版本名称">
|
||||
<el-input v-model="form.newVersionName" placeholder="可选显示名" />
|
||||
|
||||
Reference in New Issue
Block a user