#include "CloudDataDlg.h" #include #include "ApiClient.h" #include #include "geometryutils.h" static QString joinUrl(const QString &base, const QString &path) { if (path.startsWith("http://") || path.startsWith("https://")) return path; QString b = base; QString p = path; if (b.endsWith('/')) b.chop(1); if (p.startsWith('/')) p.remove(0, 1); if (b.isEmpty()) return p; return b + '/' + p; } CloudDataDlg::CloudDataDlg(QWidget *parent) : QDialog(parent), ui(new Ui::CloudDataDlg) { ui->setupUi(this); ApiClient::getInstance()->setBaseUrl("http://10.235.142.76:8090"); //setWindowTitle(QString::fromLocal8Bit("边框线形设置")); connect(ui->btnAccess,SIGNAL(clicked()),this,SLOT(onEnter())); ui->btn_back->setVisible(false); ui->treeWidget->setColumnCount(1); //设置列数 ui->treeWidget->setHeaderHidden(true); // 隐藏表头 ui->treeWidget->setDragEnabled(false); ui->treeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &CloudDataDlg::onItemDoubleClicked); } CloudDataDlg::~CloudDataDlg() { } void CloudDataDlg::initTreeProjects(QJsonObject jObj) { ui->btn_back->setVisible(false); ui->treeWidget->clear();//清理数据 if (jObj.value("myProjects").isArray()) { QJsonArray jarr = jObj.value("myProjects").toArray(); if (jarr.count() <= 0) return; QTreeWidgetItem *item = new QTreeWidgetItem(); item->setText(0, "我的项目"); item->setData(0, Qt::UserRole, "my_root"); // 存储额外数据,如ID //item->setData(0, Qt::UserRole + 1, evaluationInfo.guid); // 存储额外数据,如ID // QIcon icon; icon.addPixmap(QPixmap(GetImagePath() + "project.png"), QIcon::Selected); icon.addPixmap(QPixmap(GetImagePath() + "project.png"), QIcon::Normal); item->setIcon(0, icon); // 这是一个根节点 ui->treeWidget->addTopLevelItem(item); for (int i = 0; i < jarr.count(); i++) { if (!jarr[i].isObject()) continue; QJsonObject obj = jarr[i].toObject(); QTreeWidgetItem *itemIndex = new QTreeWidgetItem(); itemIndex->setText(0, obj["projectName"].toString()); itemIndex->setData(0, Qt::UserRole, "project"); // 存储额外数据,如ID itemIndex->setData(0, Qt::UserRole+1, obj["projectId"].toString()); // 存储额外数据,如ID // QIcon icon_wellfolder; icon_wellfolder.addPixmap(QPixmap(GetImagePath() + "closeproject.png"), QIcon::Selected); icon_wellfolder.addPixmap(QPixmap(GetImagePath() + "closeproject.png"), QIcon::Normal); itemIndex->setIcon(0, icon_wellfolder); item->addChild(itemIndex);//添加一级子节点 } ui->treeWidget->expandItem(item); } if (jObj.value("shareProjects").isArray()) { QJsonArray jarr = jObj.value("shareProjects").toArray(); QTreeWidgetItem *item = new QTreeWidgetItem(); item->setText(0, "与我共享项目"); item->setData(0, Qt::UserRole, "my_share_root"); // 存储额外数据,如ID //item->setData(0, Qt::UserRole + 1, evaluationInfo.guid); // 存储额外数据,如ID // QIcon icon; icon.addPixmap(QPixmap(GetImagePath() + "project.png"), QIcon::Selected); icon.addPixmap(QPixmap(GetImagePath() + "project.png"), QIcon::Normal); item->setIcon(0, icon); // 这是一个根节点 ui->treeWidget->addTopLevelItem(item); for (int i = 0; i < jarr.count(); i++) { if (!jarr[i].isObject()) continue; QJsonObject obj = jarr[i].toObject(); QTreeWidgetItem *itemIndex = new QTreeWidgetItem(); itemIndex->setText(0, obj["projectName"].toString()); itemIndex->setData(0, Qt::UserRole, "project"); // 存储额外数据,如ID itemIndex->setData(0, Qt::UserRole+1, obj["projectId"].toString()); // 存储额外数据,如ID // QIcon icon_wellfolder; icon_wellfolder.addPixmap(QPixmap(GetImagePath() + "closeproject.png"), QIcon::Selected); icon_wellfolder.addPixmap(QPixmap(GetImagePath() + "closeproject.png"), QIcon::Normal); itemIndex->setIcon(0, icon_wellfolder); item->addChild(itemIndex);//添加一级子节点 } ui->treeWidget->expandItem(item); } //展开树图 //ui->treeWidget->expandItem(parent); //itemIndex->setExpanded(true); } void CloudDataDlg::initTreeWells(QJsonObject jObj) { ui->btn_back->setVisible(true); ui->label_pro->setText(jObj["projectName"].toString()); ui->treeWidget->clear();//清理数据 if (jObj.value("wells").isArray()) { QTreeWidgetItem *item = new QTreeWidgetItem(); item->setText(0, "井组"); item->setData(0, Qt::UserRole, "root"); // 存储额外数据,如ID item->setData(0, Qt::UserRole+1, jObj["projectId"].toString()); // 存储额外数据,如ID // QIcon icon; icon.addPixmap(QPixmap(GetImagePath() + "wellfolder.png"), QIcon::Selected); icon.addPixmap(QPixmap(GetImagePath() + "wellfolder.png"), QIcon::Normal); item->setIcon(0, icon); // 这是一个根节点 ui->treeWidget->addTopLevelItem(item); QJsonArray jarr = jObj.value("wells").toArray(); for (int i = 0; i < jarr.count(); i++) { if (!jarr[i].isObject()) continue; QJsonObject obj = jarr[i].toObject(); // 井 QTreeWidgetItem *itemJing = new QTreeWidgetItem(); itemJing->setText(0, obj["wellName"].toString()); itemJing->setData(0, Qt::UserRole + 1, obj["wellId"].toString()); // 存储额外数据,项目名 // QIcon icon; icon.addPixmap(QPixmap(GetImagePath() + "well.png"), QIcon::Selected); icon.addPixmap(QPixmap(GetImagePath() + "well.png"), QIcon::Normal); itemJing->setIcon(0, icon); // item->addChild(itemJing);//添加一级子节点 QJsonArray staArr = obj["stages"].toArray(); if (staArr.count()<=0) continue; QJsonObject staObj = staArr[0].toObject(); // QString staid = staObj["stageId"].toString(); // QString staname = staObj["stageName"].toString(); QJsonArray dataCat = staObj["dataCategories"].toArray(); if (dataCat.count() <= 0) continue; QTreeWidgetItem *itemJingCi = new QTreeWidgetItem(); itemJingCi->setText(0, staObj["stageName"].toString()); itemJingCi->setData(0, Qt::UserRole + 1, staObj["stageId"].toString()); // 存储额外数据,项目名 // QIcon iconci; iconci.addPixmap(QPixmap(GetImagePath() + "icon/WellRound.png"), QIcon::Selected); iconci.addPixmap(QPixmap(GetImagePath() + "icon/WellRound.png"), QIcon::Normal); itemJingCi->setIcon(0, iconci); itemJing->addChild(itemJingCi);//添加一级子节点 for (int k =0;k < dataCat.count(); k++) { QJsonObject catObj = dataCat[k].toObject(); // QString s1 = catObj["categoryId"].toString(); // QString s2 = catObj["categoryName"].toString(); // QString s3 = catObj["dataType"].toString(); bool b = initTreeData(itemJingCi, staObj, catObj, "curve", "icon/AddLog.png", "icon/Log.png"); if (b) continue; initTreeData(itemJingCi, staObj, catObj, "array", "icon/tdt.png", "icon/tdt.png"); } } ui->treeWidget->expandItem(item); } } bool CloudDataDlg::initTreeData(QTreeWidgetItem* itemJingCi, QJsonObject& jObjCi, QJsonObject catObj, QString strDataType, QString strIcon1, QString strIcon2) { bool bret = false; if (catObj["dataType"].toString() == strDataType) { QJsonArray sitem = catObj["items"].toArray(); // 曲线数量 int nCurveItem = sitem.count(); if (nCurveItem > 0) { //曲线 QTreeWidgetItem *itemCurve = new QTreeWidgetItem(); itemCurve->setText(0, "curve" == strDataType? "曲线":"波列数据"); itemCurve->setData(0, Qt::UserRole, strDataType); // 存储额外数据,如ID QIcon iconCurve; iconCurve.addPixmap(QPixmap(GetImagePath() + strIcon1), QIcon::Selected); iconCurve.addPixmap(QPixmap(GetImagePath() + strIcon1), QIcon::Normal); itemCurve->setIcon(0, iconCurve); itemJingCi->addChild(itemCurve); for (int m = 0; m < sitem.count(); m++) { QJsonObject tmpItem = sitem[m].toObject(); QString sName = ""; QString sTypeObj = ""; if ("curve" == strDataType) { sTypeObj = "curveObject"; sName = tmpItem["curveName"].toString(); } else if ("array" == strDataType) { sTypeObj = "waveObject"; sName = tmpItem["arrayName"].toString(); } QTreeWidgetItem *itemCurveLog = new QTreeWidgetItem(); itemCurveLog->setText(0, sName); itemCurveLog->setData(0, Qt::UserRole, sTypeObj); // 存储额外数据,如ID itemCurveLog->setData(0, Qt::UserRole + 1, tmpItem["metadataId"].toString()); // 存储额外数据,井次文件路径 // QIcon iconLog; iconLog.addPixmap(QPixmap(GetImagePath() + strIcon1), QIcon::Selected); iconLog.addPixmap(QPixmap(GetImagePath() + strIcon2), QIcon::Normal); itemCurveLog->setIcon(0, iconLog); itemCurve->addChild(itemCurveLog); } } bret = true; } return bret; } void CloudDataDlg::getList() { QString sapi = "/core/project/list"; ApiClient::getInstance()->get(sapi, [this](const QJsonObject& response) { this->initTreeProjects(response); }, [](const QString& error) { qDebug() << "Failed to allocate hours:" << error; // 可以添加错误提示 }); } void CloudDataDlg::getWells(QString projectId) { QString sapi = "/core/project/tree?projectId=" + projectId; ApiClient::getInstance()->get(sapi, [this](const QJsonObject& response) { this->initTreeWells(response); }, [](const QString& error) { qDebug() << "Failed to allocate hours:" << error; // 可以添加错误提示 }); } void CloudDataDlg::on_btn_back_clicked() { this->getList(); } void CloudDataDlg::on_btn_import_clicked() { QMap> mapSelect; foreach(QTreeWidgetItem *pItem, ui->treeWidget->selectedItems()) { QTreeWidgetItem *parentItem = pItem->parent()->parent(); // 上两层目录是井次 if (parentItem) { QString strType = pItem->data(0, Qt::UserRole).toString(); QString strId = pItem->data(0, Qt::UserRole + 1).toString(); QString strName = pItem->text(0); qDebug() << "选择:" << strType << "," << strId << "," << strName; if (mapSelect.contains(strType)) { mapSelect[strType].push_back(strId); } else { QVector v; v << strId; mapSelect.insert(strType, v); } } } } void CloudDataDlg::onItemDoubleClicked(QTreeWidgetItem* item, int index) { QString strTag = item->data(0, Qt::UserRole).toString(); if ("project" == strTag) { QString strProId = item->data(0, Qt::UserRole+1).toString(); this->getWells(strProId); } } void CloudDataDlg::OnSelectLineStyleChanged(int style,int lineWidth) { } void CloudDataDlg::onEnter() { ApiClient::getInstance()->login("Test1", "Test123456", [this](const QJsonObject& response) { this->getList(); }, [](const QString& error) { qDebug() << "Failed to allocate hours:" << error; // 可以添加错误提示 }); } void CloudDataDlg::paintEvent(QPaintEvent *pevt) { QDialog::paintEvent(pevt); }