feat(ota): 新增OTA远程升级功能
- 创建OTA版本管理表结构,支持版本名称、构建号、APK文件等信息存储 - 实现后台OTA版本管理界面,包含新增、编辑、删除和发布功能 - 开发API接口用于设备版本检查和更新包下载 - 实现版本发布逻辑,自动归档旧版本并计算APK文件哈希值 - 添加强制更新、目标设备白名单和最低版本限制功能 - 集成文件上传和选择组件,支持APK文件管理 - 实现版本状态管理(草稿、已发布、已归档)和权限控制
This commit is contained in:
93
public/assets/js/backend/ota/version.js
Normal file
93
public/assets/js/backend/ota/version.js
Normal file
@@ -0,0 +1,93 @@
|
||||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
index_url: 'ota/version/index' + location.search,
|
||||
add_url: 'ota/version/add',
|
||||
edit_url: 'ota/version/edit',
|
||||
del_url: 'ota/version/del',
|
||||
multi_url: 'ota/version/multi',
|
||||
import_url: 'ota/version/import',
|
||||
publish_url: 'ota/version/publish',
|
||||
table: 'ota_version',
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
fixedColumns: true,
|
||||
fixedRightNumber: 1,
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id'), sortable: true},
|
||||
{field: 'version_name', title: '版本名称', operate: 'LIKE'},
|
||||
{field: 'version_code', title: '版本号', operate: false},
|
||||
{field: 'apk_file', title: 'APK文件', operate: false, formatter: Table.api.formatter.file},
|
||||
{field: 'file_size', title: '文件大小', operate: false, formatter: function (value) {
|
||||
if (!value || value === 0) return '-';
|
||||
var mb = (value / 1024 / 1024).toFixed(1);
|
||||
return mb + ' MB';
|
||||
}},
|
||||
{field: 'sha256', title: 'SHA-256', operate: false, formatter: function (value) {
|
||||
if (!value) return '-';
|
||||
return '<code title="' + value + '">' + value.substring(0, 16) + '...</code>';
|
||||
}},
|
||||
{field: 'is_force_update', title: '强制更新', searchList: {"0":"否","1":"是"}, formatter: Table.api.formatter.toggle},
|
||||
{field: 'status', title: '状态', searchList: {"draft": __('Draft'), "published": __('Published'), "archived": __('Archived')}, formatter: Table.api.formatter.status},
|
||||
{field: 'target_devices', title: '目标设备', operate: false, visible: false},
|
||||
{field: 'min_version', title: '最低版本', operate: 'LIKE', visible: false},
|
||||
{field: 'creator_id', title: __('Creator_id'), visible: false},
|
||||
{field: 'createtime', title: '创建时间', operate: 'RANGE', addclass: 'datetimerange', autocomplete: false, formatter: Table.api.formatter.datetime},
|
||||
{field: 'updatetime', title: '更新时间', operate: 'RANGE', addclass: 'datetimerange', autocomplete: false, formatter: Table.api.formatter.datetime, visible: false},
|
||||
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: function (value, row, index) {
|
||||
var buttons = [];
|
||||
|
||||
// 发布按钮:仅草稿和已归档版本可发布
|
||||
if (row.status === 'draft' || row.status === 'archived') {
|
||||
buttons.push({
|
||||
name: 'publish',
|
||||
text: '发布',
|
||||
title: '发布此版本',
|
||||
classname: 'btn btn-xs btn-success btn-ajax',
|
||||
url: 'ota/version/publish?ids=' + row.id,
|
||||
confirm: '确认发布此版本?发布后其他已发布版本将自动归档。',
|
||||
success: function () {
|
||||
table.bootstrapTable('refresh');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 默认操作按钮
|
||||
var defaultButtons = Table.api.formatter.operate(value, row, index);
|
||||
return buttons.join(' ') + ' ' + defaultButtons;
|
||||
}}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
},
|
||||
add: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
edit: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
api: {
|
||||
bindevent: function () {
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
}
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
});
|
||||
Reference in New Issue
Block a user