修复bug
This commit is contained in:
@@ -81,11 +81,6 @@ struct External_Resource_Row {
|
||||
std::size_t row_count{};
|
||||
std::string state;
|
||||
};
|
||||
struct Backend_Config_Row {
|
||||
std::string section;
|
||||
std::string path;
|
||||
std::string value;
|
||||
};
|
||||
}
|
||||
namespace adminive {
|
||||
template <>
|
||||
@@ -110,23 +105,6 @@ struct Type_View_Descriptor<ecap::adminive_config::External_Resource_Row> {
|
||||
}
|
||||
};
|
||||
template <>
|
||||
struct Type_Descriptor<ecap::adminive_config::Backend_Config_Row> {
|
||||
static auto get() {
|
||||
using T = ecap::adminive_config::Backend_Config_Row;
|
||||
return object<T>("backend_config", "后端完整配置",
|
||||
ADMINIVE_FIELD_LABEL(T, section, "配置分区"),
|
||||
ADMINIVE_FIELD_LABEL(T, path, "配置项"),
|
||||
ADMINIVE_FIELD_LABEL(T, value, "当前值"));
|
||||
}
|
||||
};
|
||||
template <>
|
||||
struct Type_View_Descriptor<ecap::adminive_config::Backend_Config_Row> {
|
||||
static Table_View table() {
|
||||
using T = ecap::adminive_config::Backend_Config_Row;
|
||||
return table_view<T>(column<&T::section>("配置分区").filter(), column<&T::path>("配置项").search(), column<&T::value>("当前值")).titled("后端完整配置(只读)");
|
||||
}
|
||||
};
|
||||
template <>
|
||||
struct Type_Descriptor<ecap::adminive_config::Data_Source_Row> {
|
||||
static auto get() {
|
||||
using T = ecap::adminive_config::Data_Source_Row;
|
||||
@@ -722,33 +700,8 @@ Json external_resource_amis_schema() {
|
||||
columns.push_back(Json{{"type", "operation"}, {"label", "操作"}, {"buttons", Json::array({refresh_button, download_button, upload_button, clear_button})}});
|
||||
return schema;
|
||||
}
|
||||
void append_backend_config_rows(const Json& value, const std::string& section, const std::string& path, std::vector<Backend_Config_Row>& rows) {
|
||||
if(value.is_object() && !value.empty()) {
|
||||
for(auto it = value.begin(); it != value.end(); ++it)
|
||||
append_backend_config_rows(it.value(), section.empty() ? it.key() : section, path.empty() ? it.key() : path + "." + it.key(), rows);
|
||||
return;
|
||||
}
|
||||
if(value.is_array() && !value.empty()) {
|
||||
for(std::size_t i = 0; i < value.size(); ++i)
|
||||
append_backend_config_rows(value[i], section, path + "[" + std::to_string(i) + "]", rows);
|
||||
return;
|
||||
}
|
||||
rows.push_back({section, path, value.is_string() ? value.get<std::string>() : value.dump()});
|
||||
}
|
||||
std::vector<Backend_Config_Row> backend_config_rows(Global* global) {
|
||||
const auto config = Json::parse(global->toJson().to_json_string());
|
||||
std::vector<Backend_Config_Row> rows;
|
||||
append_backend_config_rows(config, {}, {}, rows);
|
||||
return rows;
|
||||
}
|
||||
Json backend_config_amis_schema() {
|
||||
auto schema = adminive::to_amis_table_schema<Json, Backend_Config_Row>("/api/adminive/config/backend_config", adminive::describe_table_view<Backend_Config_Row>());
|
||||
auto& crud = schema["body"][0];
|
||||
crud["headerToolbar"] = Json::array({Json{{"type", "columns-toggler"}, {"draggable", true}}, "reload"});
|
||||
auto& columns = crud["columns"];
|
||||
if(!columns.empty())
|
||||
columns.erase(columns.end() - 1);
|
||||
return schema;
|
||||
Json backend_config_schema() {
|
||||
return Json{{"title", "后端完整配置(只读)"}, {"data_api", "/api/adminive/config/backend_config"}};
|
||||
}
|
||||
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"}}});
|
||||
@@ -864,17 +817,8 @@ public:
|
||||
private:
|
||||
void bind_backend_config(drogon::HttpAppFramework& app) {
|
||||
const auto get = adminive::make_drogon_constraints(drogon::Get, {});
|
||||
app.registerHandler(backend_config_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, Backend_Config_Row>())));
|
||||
}, get);
|
||||
app.registerHandler(backend_config_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, Backend_Config_Row>(adminive::describe_table_view<Backend_Config_Row>()))));
|
||||
}, get);
|
||||
app.registerHandler(backend_config_path + "/amis", [](const drogon::HttpRequestPtr&, std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
|
||||
callback(adminive::make_drogon_response(adminive::make_http_success<Json>(backend_config_amis_schema())));
|
||||
}, get);
|
||||
app.registerHandler(backend_config_path, [this](const drogon::HttpRequestPtr& request, std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
|
||||
callback(adminive::make_drogon_response(list_response<Backend_Config_Row>(backend_config_path, backend_config_rows(global_), read_collection_query(request))));
|
||||
app.registerHandler(backend_config_path, [this](const drogon::HttpRequestPtr&, std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
|
||||
callback(adminive::make_drogon_response(adminive::make_http_success<Json>(Json::parse(global_->toJson().to_json_string()))));
|
||||
}, get);
|
||||
}
|
||||
void bind_external_resources(drogon::HttpAppFramework& app) {
|
||||
@@ -1200,7 +1144,7 @@ private:
|
||||
{"external_resources", "amis_schema", external_resources_path + "/descriptor", external_resources_path + "/view", external_resources_path, external_resources_path + "/amis"},
|
||||
{"archive_operations", "ecap_archive_operations", {}, {}, {}, {}},
|
||||
{"cesium_models", "ecap_cesium_models", {}, {}, "/map/models", {}},
|
||||
{"backend_config", "amis_schema", backend_config_path + "/descriptor", backend_config_path + "/view", backend_config_path, backend_config_path + "/amis"},
|
||||
{"backend_config", "ecap_backend_config", {}, {}, backend_config_path, {}},
|
||||
{"system_actions", "amis_schema", {}, {}, {}, {}}
|
||||
};
|
||||
const std::map<std::string, Json> schemas = {
|
||||
@@ -1215,7 +1159,7 @@ private:
|
||||
{"external_resources", external_resource_amis_schema()},
|
||||
{"archive_operations", archive_operations_schema()},
|
||||
{"cesium_models", cesium_models_schema(global_)},
|
||||
{"backend_config", backend_config_amis_schema()},
|
||||
{"backend_config", backend_config_schema()},
|
||||
{"system_actions", system_actions_schema()}
|
||||
};
|
||||
return adminive::to_composition_manifest_json<Json>(view, contracts, schemas);
|
||||
|
||||
Reference in New Issue
Block a user