#pragma once #include #include #include #include "repo/RepoTypes.hpp" namespace geopro::data::dto { // 工作空间数组(joined/list 的 data["value"])→ 模型。isCurTenant==1 → isCurrent。 std::vector parseWorkspaces(const QJsonArray& arr); // 项目分页(queryByUser 的 data 对象 {hasNextPage, projectList})→ 模型。 struct ProjectPage { std::vector projects; bool hasNextPage = false; }; ProjectPage parseProjects(const QJsonObject& data); // my/profile/queryProject 的 data["value"] 数组 → 模型(与 parseProjects 同字段映射)。 std::vector parseProjectList(const QJsonArray& arr); // my/profile/project/page 的整个 data 对象 → ProjectListPage(rows + total)。 ProjectListPage parseProjectPage(const QJsonObject& data); // project/type/list 的 data["value"] 数组 → 项目类型列表。 std::vector parseProjectTypes(const QJsonArray& arr); // 结构扁平节点数组(queryProjectStruct 的 data["projectStructList"])→ 模型。 std::vector parseStructNodes(const QJsonArray& arr); // data/page / file/page 的 data["list"] 数组 → DsRow(数据行无 file;文件行含 file{name,size,url})。 std::vector parseDsRows(const QJsonArray& arr); // data/page 或 file/page 的整个 data 对象 → DsPage(rows + total)。 DsPage parseDsPage(const QJsonObject& data); // 扁平 StructNode 按 parentId 建树。叶子(无子节点)=TM。处理:项目直挂 TM、孤儿 parentId、空表。 struct StructTreeNode { StructNode node; bool isTm = false; std::vector children; }; std::vector buildStructTree(const std::vector& flat); } // namespace geopro::data::dto