projectdialog.cpp 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. #include "projectdialog.h"
  2. #include <QPushButton>
  3. #include "ui_projectdialog.h"
  4. ProjectDialog::ProjectDialog(QWidget *parent) : QDialog(parent), ui(new Ui::ProjectDialog) {
  5. ui->setupUi(this);
  6. connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &ProjectDialog::validateAndSaveProject);
  7. connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &ProjectDialog::clearFormData);
  8. }
  9. void ProjectDialog::SetComboBoxBlast(const QJsonArray &bapoYuanArray) {
  10. blasterArray = bapoYuanArray;
  11. ui->comboBoxBlast->clear();
  12. fillComboBox(ui->comboBoxBlast, bapoYuanArray);
  13. ui->comboBoxBlast->setCurrentIndex(-1);
  14. }
  15. void ProjectDialog::SetComboBoxOperator(const QJsonArray &anQuanYuanArray) {
  16. operatorArray = anQuanYuanArray;
  17. ui->comboBoxOperator->clear();
  18. fillComboBox(ui->comboBoxOperator, anQuanYuanArray);
  19. ui->comboBoxOperator->setCurrentIndex(-1);
  20. }
  21. void ProjectDialog::on_comboBoxOperator_currentIndexChanged(int index) {
  22. if (index >= 0 && index < operatorArray.size()) {
  23. operatorId = operatorArray[index].toObject()["identity"].toString();
  24. }
  25. }
  26. void ProjectDialog::on_comboBoxBlast_currentIndexChanged(int index) {
  27. if (index >= 0 && index < blasterArray.size()) {
  28. blasterId = blasterArray[index].toObject()["identity"].toString();
  29. }
  30. }
  31. void ProjectDialog::fillComboBox(QComboBox *comboBox, const QJsonArray &jsonArray) {
  32. for (const QJsonValue &value : jsonArray) {
  33. if (value.isObject()) {
  34. QJsonObject obj = value.toObject();
  35. if (obj.contains("nickName")) {
  36. QString name = obj["nickName"].toString();
  37. comboBox->addItem(name);
  38. }
  39. }
  40. }
  41. }
  42. void ProjectDialog::SetL1AddressOptions(const QJsonArray &Options) {
  43. parentOptions = Options;
  44. ui->comboBoxAddr->clear();
  45. for (const QJsonValue &option : Options) {
  46. ui->comboBoxAddr->addItem(option.toObject()["name"].toString(), option.toObject()["uuid"].toString());
  47. }
  48. ui->comboBoxAddr->setCurrentIndex(-1);
  49. }
  50. void ProjectDialog::updateL2AddressOptions() {
  51. ui->comboBoxAddr_2->clear();
  52. for (const QJsonValue &child : L2AddressOptions) {
  53. ui->comboBoxAddr_2->addItem(child.toObject()["name"].toString(), child.toObject()["uuid"].toString());
  54. }
  55. ui->comboBoxAddr_2->setCurrentIndex(-1);
  56. }
  57. void ProjectDialog::updateL3AddressOptions() {
  58. ui->comboBoxAddr_3->clear();
  59. for (const QJsonValue &child : L3AddressOptions) {
  60. ui->comboBoxAddr_3->addItem(child.toObject()["name"].toString(), child.toObject()["uuid"].toString());
  61. }
  62. ui->comboBoxAddr_3->setCurrentIndex(-1);
  63. }
  64. void ProjectDialog::setChildOptions(const QJsonArray &newDataOptions) { dataOptions = newDataOptions; }
  65. void ProjectDialog::extractNames(const QJsonArray &array, QStringList &names) {
  66. for (const auto &item : array) {
  67. if (item.isObject()) {
  68. QJsonObject obj = item.toObject();
  69. if (obj.contains("name")) {
  70. names.append(obj["name"].toString());
  71. }
  72. if (obj.contains("children") && obj["children"].isArray()) {
  73. extractNames(obj["children"].toArray(), names);
  74. }
  75. }
  76. }
  77. }
  78. void ProjectDialog::clearFormData() {
  79. QList<QLineEdit *> lineEdits = findChildren<QLineEdit *>();
  80. for (QLineEdit *lineEdit : lineEdits) {
  81. lineEdit->clear();
  82. }
  83. QList<QComboBox *> comboBoxes = findChildren<QComboBox *>();
  84. for (QComboBox *comboBox : comboBoxes) {
  85. comboBox->setCurrentIndex(-1);
  86. }
  87. // for if view the data, will hide the accept button
  88. ui->buttonBox->button(QDialogButtonBox::Ok)->setVisible(true);
  89. }
  90. void ProjectDialog::on_comboBoxAddr_currentIndexChanged(int index) {
  91. if (index >= 0 && index < parentOptions.size()) {
  92. L2AddressOptions = parentOptions[index].toObject()["children"].toArray();
  93. updateL2AddressOptions();
  94. }
  95. }
  96. void ProjectDialog::on_comboBoxAddr_2_currentIndexChanged(int index) {
  97. if (index >= 0 && index < L2AddressOptions.size()) {
  98. QJsonArray subOptions = L2AddressOptions[index].toObject()["children"].toArray();
  99. L3AddressOptions = subOptions;
  100. updateL3AddressOptions();
  101. }
  102. }
  103. void ProjectDialog::validateAndSaveProject() {
  104. QString detNum = ui->editDetNum->text().trimmed();
  105. QString blastCount = ui->editRegCount->text().trimmed();
  106. QString projectName = ui->editName->text().trimmed();
  107. QString blastName = ui->comboBoxBlast->currentText().trimmed();
  108. QString operatorName = ui->comboBoxOperator->currentText().trimmed();
  109. QString l1AddressUuid = ui->comboBoxAddr->currentData().toString().trimmed();
  110. QString l2AddressUuid = ui->comboBoxAddr_2->currentData().toString().trimmed();
  111. QString l3AddressUuid = ui->comboBoxAddr_3->currentData().toString().trimmed();
  112. QString l1AddressName = ui->comboBoxAddr->currentText().trimmed();
  113. QString l2AddressName = ui->comboBoxAddr_2->currentText().trimmed();
  114. QString l3AddressName = ui->comboBoxAddr_3->currentText().trimmed();
  115. QString xmbh = ui->editXMBH->text().trimmed();
  116. QString htid = ui->editHTID->text().trimmed();
  117. if (detNum.isEmpty() || !ui->editDetNum->hasAcceptableInput()) {
  118. QMessageBox::warning(nullptr, "输入错误", "请输入0-10000的数字!");
  119. return;
  120. }
  121. // 创建一个 QMap 集合,存储数据
  122. QMap<QString, QString> data;
  123. data["detNum"] = detNum;
  124. data["name"] = projectName;
  125. data["xmbh"] = xmbh;
  126. data["htid"] = htid;
  127. data["operatorName"] = operatorName;
  128. data["blasterName"] = blastName;
  129. // 选择level最低的uui:w
  130. QString addressUuid = l1AddressUuid;
  131. if (l3AddressUuid != "") {
  132. addressUuid = l3AddressUuid;
  133. } else if (l2AddressUuid != "") {
  134. addressUuid = l2AddressUuid;
  135. } else if (l1AddressUuid != "") {
  136. addressUuid = l1AddressUuid;
  137. } else {
  138. QMessageBox::warning(nullptr, "输入错误", "请选择地址!");
  139. return;
  140. }
  141. data["addressPath"] = l1AddressName + "/" + l2AddressName + "/" + l3AddressName;
  142. data["addressUuid"] = addressUuid;
  143. data["blasterIdentity"] = blasterId;
  144. data["operatorIdentity"] = operatorId;
  145. data["blastCount"] = blastCount;
  146. if (operationStatus == 0) {
  147. emit validateDetNum(data);
  148. } else if (operationStatus == 1) {
  149. emit validateDetNumUpdate(data);
  150. }
  151. clearFormData(); // 清除表单数据
  152. // this->accept();
  153. }
  154. int ProjectDialog::getOperationStatus() const { return operationStatus; }
  155. void ProjectDialog::setOperationStatus(int newOperationStatus) { operationStatus = newOperationStatus; }
  156. void ProjectDialog::setFormData(const HProject &Project) {
  157. try {
  158. clearFormData(); // 清除表单数据
  159. // hide the accept button
  160. ui->buttonBox->button(QDialogButtonBox::Ok)->setVisible(false);
  161. ui->editName->setText(Project.getName());
  162. ui->editDetNum->setText(Project.getDetSum());
  163. ui->editHTID->setText(Project.getHtid());
  164. ui->editXMBH->setText(Project.getXmbh());
  165. ui->editRegCount->setText(Project.getBlastCount());
  166. ui->level4Address->setText(Project.getLevel4Address());
  167. int indexBlast = ui->comboBoxBlast->findText(Project.getBlasterName());
  168. if (indexBlast != -1) {
  169. ui->comboBoxBlast->setCurrentIndex(indexBlast);
  170. } else {
  171. qDebug() << "indexBlast 未找到选项 " << indexBlast << "。";
  172. }
  173. int indexOper = ui->comboBoxOperator->findText(Project.getOperatorName());
  174. if (indexOper != -1) {
  175. ui->comboBoxOperator->setCurrentIndex(indexOper);
  176. } else {
  177. qDebug() << "operator 未找到选项 " << Project.getOperatorName() << "。";
  178. }
  179. QStringList addressParts = Project.getAddressPath().split("/");
  180. int numAddresses = addressParts.size();
  181. QVector<QString> addressVariables;
  182. for (int i = 0; i < numAddresses; ++i) {
  183. QString part = addressParts[i];
  184. addressVariables.append(part);
  185. }
  186. // 查找目标文本对应的索引
  187. int indexAddr = ui->comboBoxAddr->findText(addressVariables[0]);
  188. if (indexAddr != -1) {
  189. // 如果找到了对应的索引,设置为当前索引
  190. ui->comboBoxAddr->setCurrentIndex(indexAddr);
  191. qDebug() << "已将选项 " << addressVariables[0] << " 设置为当前显示的选项。";
  192. } else {
  193. // 如果没找到,输出提示信息
  194. qDebug() << "未找到选项 " << addressVariables[0];
  195. }
  196. if (addressVariables.size() >= 2) {
  197. int indexAddr_2 = ui->comboBoxAddr_2->findText(addressVariables[1]);
  198. if (indexAddr_2 != -1) {
  199. // 如果找到了对应的索引,设置为当前索引
  200. ui->comboBoxAddr_2->setCurrentIndex(indexAddr_2);
  201. qDebug() << "已将选项 " << addressVariables[1] << " 设置为当前显示的选项。";
  202. } else {
  203. // 如果没找到,输出提示信息
  204. qDebug() << "未找到选项 " << addressVariables[1];
  205. }
  206. }
  207. if (addressVariables.size() >= 3) {
  208. int indexAddr_3 = ui->comboBoxAddr_3->findText(addressVariables[2]);
  209. if (indexAddr_3 != -1) {
  210. // 如果找到了对应的索引,设置为当前索引
  211. ui->comboBoxAddr_3->setCurrentIndex(indexAddr_3);
  212. qDebug() << "已将选项 " << addressVariables[2] << " 设置为当前显示的选项。";
  213. } else {
  214. // 如果没找到,输出提示信息
  215. qDebug() << "未找到选项 " << addressVariables[2];
  216. }
  217. }
  218. } catch (const std::exception &e) {
  219. qDebug() << "发生异常: " << e.what();
  220. } catch (...) {
  221. qDebug() << "发生未知异常";
  222. }
  223. }
  224. ProjectDialog::~ProjectDialog() { delete ui; }