修复bug

This commit is contained in:
2026-08-09 17:07:05 +08:00
parent a80199ef36
commit 83c6410466
5 changed files with 116 additions and 17 deletions
+72 -3
View File
@@ -754,15 +754,84 @@ Json archive_operations_schema() {
const auto formats = Json::array({Json{{"label", "ZIP (.zip)"}, {"value", "zip"}, {"format", "zip"}, {"filter", ""}, {"extension", "zip"}}, Json{{"label", "TAR (.tar)"}, {"value", "tar"}, {"format", "pax"}, {"filter", ""}, {"extension", "tar"}}, Json{{"label", "TAR.GZ (.tar.gz)"}, {"value", "tar.gz"}, {"format", "pax"}, {"filter", "gzip"}, {"extension", "tar.gz"}}, Json{{"label", "TAR.XZ (.tar.xz)"}, {"value", "tar.xz"}, {"format", "pax"}, {"filter", "xz"}, {"extension", "tar.xz"}}, Json{{"label", "TAR.ZST (.tar.zst)"}, {"value", "tar.zst"}, {"format", "pax"}, {"filter", "zstd"}, {"extension", "tar.zst"}}, Json{{"label", "TAR.BZ2 (.tar.bz2)"}, {"value", "tar.bz2"}, {"format", "pax"}, {"filter", "bzip2"}, {"extension", "tar.bz2"}}, Json{{"label", "TAR.LZ4 (.tar.lz4)"}, {"value", "tar.lz4"}, {"format", "pax"}, {"filter", "lz4"}, {"extension", "tar.lz4"}}, Json{{"label", "7Z (.7z)"}, {"value", "7z"}, {"format", "7zip"}, {"filter", ""}, {"extension", "7z"}}});
return Json{{"title", "导入导出"}, {"formats", std::move(formats)}, {"exports", Json::array({Json{{"name", "版本"}, {"api", "/api/export_version"}, {"allow_version_selection", true}}, Json{{"name", "日志"}, {"api", "/api/export_logs"}, {"allow_version_selection", false}}})}, {"import_api", "/api/import_version"}, {"import_accept", ".tar.zstd,.tar.zst,.tar.gz,.tgz,.tar.xz,.txz,.tar.bz2,.tbz2,.tar.lz4,.zip,.7z,.rar,.tar,.cpio,.iso,.xar"}};
}
Json data_source_descriptor() {
auto descriptor = adminive::to_descriptor_json<Json, Data_Source_Row>();
const auto tile_view_descriptor = adminive::to_descriptor_json<Json, Map_Tile_View_Config>();
const auto map_view_descriptor = adminive::to_descriptor_json<Json, Map_View_Config>();
const auto graphics_descriptor = adminive::to_descriptor_json<Json, Cesium_Graphics_Config_Data>();
descriptor["sidebar"] = Json{
{"title", "数据源配置"},
{"common", Json{{"fields", Json::array({"update_form_gps", "base_station_has_valid_position", "keep_mode", "ignore_msg_time"})}}},
{"position", Json{{"fields", Json::array({"lat", "lon", "alt"})}}},
{"display", Json{
{"map2d", Json{
{"title", "2D显示配置"},
{"object_path", "map_display.map2d"},
{"fields", Json::array({"aircraft_show", "base_station_show", "show_icao", "show_call_sign", "show_fly_status", "aircraft_pixel_size", "base_station_pixel_size", "track_point_pixel_size", "color", "track_point_color", "base_station_color"})}
}},
{"map3d", Json{
{"title", "3D显示配置"},
{"object_path", "map_display.map3d"},
{"fields", Json::array({"aircraft_show", "base_station_show", "constant_screen_size", "show_icao", "show_call_sign", "show_fly_status", "aircraft_scale", "base_station_scale", "track_point_pixel_size", "color", "track_point_color", "base_station_color"})}
}}
}},
{"rules", Json::array({
Json{{"field", "base_station_has_valid_position"}, {"disabled_when", Json{{"field", "update_form_gps"}, {"equals", true}}}},
Json{{"field", "lat"}, {"disabled_when", Json{{"field", "update_form_gps"}, {"equals", true}}}},
Json{{"field", "lon"}, {"disabled_when", Json{{"field", "update_form_gps"}, {"equals", true}}}},
Json{{"field", "alt"}, {"disabled_when", Json{{"field", "update_form_gps"}, {"equals", true}}}}
})},
{"tiles", Json{
{"title", "瓦片显示"},
{"fields", Json::array({"tile_display_maximum_level"})},
{"descriptor_fields", tile_view_descriptor.at("fields")}
}},
{"view3d", Json{
{"graphics", Json{
{"title", "辅助显示"},
{"fields", Json::array({"surface_navigation_reference_visible", "view_axes_visible"})},
{"descriptor_fields", graphics_descriptor.at("fields")}
}},
{"map_view", Json{
{"title", "定位视图"},
{"fields", Json::array({"base_station_fly_to_height_offset_meters"})},
{"descriptor_fields", map_view_descriptor.at("fields")}
}}
}}
};
return descriptor;
}
Json cesium_models_schema(Global* global) {
Json aircraft_types = Json::array();
global->map_model_config.read([&](const auto& config) {
for(const auto& [key, value] : config.aircraft_models) {
static_cast<void>(value);
aircraft_types.push_back(key);
auto label = key;
for(std::uint8_t raw = 1; raw <= 21; ++raw) {
const auto type = static_cast<SSR::Vortex_Type>(raw);
if(SSR::Vortex_Type_to_key(type) == key) {
label = SSR::Vortex_Type_to_label(type);
break;
}
}
aircraft_types.push_back(Json{{"key", key}, {"label", label}});
}
});
return Json{{"title", "Cesium 模型设置"}, {"data_api", "/map/models"}, {"upload_accept", ".glb"}, {"aircraft_types", std::move(aircraft_types)}};
const auto item_descriptor = adminive::to_descriptor_json<Json, Map_Model_Item_Config>();
return Json{
{"title", "Cesium 模型设置"},
{"data_api", "/map/models"},
{"upload_accept", ".glb"},
{"item_descriptor", item_descriptor},
{"groups", Json::array({
Json{{"title", "默认飞机模型"}, {"path", "aircraft_model"}, {"upload", Json{{"model_type", "aircraft"}, {"label", "上传飞机模型"}, {"success_message", "默认飞机模型已更新"}}}},
Json{{"title", "基站模型"}, {"path", "base_station_model"}, {"upload", Json{{"model_type", "base_station"}, {"label", "上传基站模型"}, {"success_message", "基站模型已更新"}}}},
Json{{"title", "设备模型"}, {"path", "device_model"}, {"upload", Json{{"model_type", "device"}, {"label", "上传设备模型"}, {"success_message", "设备模型已更新"}}}}
})},
{"collections", Json::array({
Json{{"title", "按涡流/目标类型选择飞机模型"}, {"path", "aircraft_models"}, {"upload_model_type", "aircraft_type"}, {"upload_label", "上传 GLB"}, {"upload_success_message", "分类飞机模型已更新"}, {"items", std::move(aircraft_types)}}
})}
};
}
Json system_actions_schema() {
return Json{{"type", "panel"}, {"title", "设备操作"}, {"body", Json::array({Json{{"type", "button"}, {"label", "重启 FPGA 设备"}, {"level", "primary"}, {"actionType", "ajax"}, {"confirmText", "确定重启 FPGA 设备?"}, {"api", Json{{"method", "post"}, {"url", "/api/restart_device"}}}}})}};
@@ -830,7 +899,7 @@ private:
const auto patch = adminive::make_drogon_constraints(drogon::Patch, {});
const auto remove = adminive::make_drogon_constraints(drogon::Delete, {});
app.registerHandler(data_sources_path + "/descriptor", [](const drogon::HttpRequestPtr&, std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
callback(adminive::make_drogon_response(adminive::make_http_success<Json>(adminive::to_descriptor_json<Json, Data_Source_Row>())));
callback(adminive::make_drogon_response(adminive::make_http_success<Json>(data_source_descriptor())));
}, get);
app.registerHandler(data_sources_path + "/view", [](const drogon::HttpRequestPtr&, std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
callback(adminive::make_drogon_response(adminive::make_http_success<Json>(adminive::to_view_json<Json, Data_Source_Row>(adminive::describe_table_view<Data_Source_Row>()))));