#include "sysconfig.h" #include <QGraphicsDropShadowEffect> #include <QHBoxLayout> #include <QLineEdit> #include <QPlainTextEdit> #include <QResizeEvent> #include <QToolBar> #include <tbaseutil/tdataresponse.h> #include <tbaseutil/tdataparse.h> #include <tbaseutil/ttheme.h> #include <tdatabaseutil/tsqlconnectionpoolv2.h> #include <tdatabaseutil/tsqlqueryv2.h> #include <tdatabaseutil/tsqlselectorv2.h> #include <topcore/topclasssqlthread.h> #include <topcore/topcore.h> #include <toputil/t.h> #include <twidget/tmessagebar.h> #include <twidget/tmessagebox.h> #include <twidget/ttableview.h> #include <twidget/ttableviewdialog.h> #include <twidget/tuiloader.h> #include "sysconfigthread.h" SysConfig::SysConfig(const QString &iModuleNameStr, const QVariantMap iUrlPars, QWidget *iParent) : TopClassAbs(iParent) { this->setLicenseKey("sys_common"); this->initModule(iModuleNameStr, iUrlPars); QWidget *centerWgt = new QWidget(this); this->setCentralWidget(centerWgt); QVBoxLayout *centerLayout = new QVBoxLayout(centerWgt); centerLayout->setMargin(0); centerLayout->setSpacing(0); if (QToolBar *toolbar = qobject_cast<QToolBar *>(uim()->getWidget("MAIN_TOOLBAR"))) { centerLayout->addWidget(toolbar, 0); } mBodyLayout = new QHBoxLayout(); centerLayout->addLayout(mBodyLayout, 1); mBodyLayout->setMargin(TTHEME_DP(16)); mBodyLayout->setSpacing(0); mUiLoader = new TUiLoader(this); mUiLoader->setScriptEngine(APP->scriptEngine()); mUiLoader->setSelf(this); mUiLoader->setMaximumWidth(TTHEME_DP(config("maximum_size.width", 800).toInt())); mUiLoader->setProperty("SS_BG", "PANEL"); mUiLoader->setProperty("SS_BORDER", 1); mBodyLayout->addStretch(1); mBodyLayout->addWidget(mUiLoader, 99999); mBodyLayout->addStretch(1); mUiLoader->setUiStr(ui("config-infov2").toString()); connect(mUiLoader, SIGNAL(dataChanged()), this, SLOT(setDataModified())); //恢复窗体尺寸及布局; restoreSizeState(); //当URL传入包含UID时, 在initModule()中会自动赋值给UID; //在界面初始化完成后执行uidChangeEvent, 填充界面数据; uidChangeEvent(this->uid()); //刷新Action状态; refreshActionState(); } SysConfig::~SysConfig() { saveSizeState(); } void SysConfig::reload() { QString uidStr = lastUid().isEmpty() ? uid() : lastUid(); setUid(uidStr, true); } void SysConfig::copy() { setLastUid(this->uid()); setUid(0, false); QVariantMap data; data.insert("id", ""); data.insert("path", ""); data.insert("name", ""); setData(data); setTitle(ttr("New Config")); setDataModified(true); } void SysConfig::create() { setLastUid(this->uid()); setUid(0, true); //新建时可通过配置设置默认值 setData(config("default_value").toMap()); setDataModified(true); } void SysConfig::clearData() { mUiLoader->loadValues(QVariantMap(), true); } void SysConfig::setData(const QVariantMap &iDataMap) { mUiLoader->loadValues(iDataMap, false); if (iDataMap.contains("name")) { setTitle(ttr("Config - %1").arg(iDataMap.value("name").toString())); } } QVariantMap SysConfig::getData() const { QVariantMap dataMap = mUiLoader->getAllValues().toVariant().toMap(); dataMap.insert("id", this->uid()); QVariantMap actionData; if (uid() == "0" || uid().isEmpty() || uid() == "") { actionData.insert("create_time", APP->getNow()); } else { actionData.insert("update_time", APP->getNow()); } dataMap.insert("action_data", actionData); return dataMap; } void SysConfig::saveData() { // 有效性验证 QVariantList errLst = mUiLoader->validateAll("COMMIT", true, "ERROR"); if (!errLst.isEmpty()) { QStringList errStrLst; for (QVariant err : errLst) { errStrLst.append(err.toMap().value("text").toString()); } alertError(ttr("Saving data failed!"), errStrLst.join("\n")); return; } t::saving(this); QVariant data = doThreadWork(new SysConfigThread(this), "SAVE_DATA", getData()); unloading(); TDataResponse dataRes(data.toMap()); if (dataRes.hasError()) { alertError(ttr("Save data failed!"),dataRes.errText()); } else { setUid(dataRes.data().toInt()); emit dataSaved(this->uid()); alertOk(ttr("Save data success!")); } } void SysConfig::uidChangeEvent(const QString &iUidStr) { if (iUidStr.toInt() == 0) { setTitle(ttr("New Config")); clearData(); } else { t::loading(this); TSqlSelectorV2 selector; selector.setTable("pub_conf"); selector.setField("*"); QVariantMap formatMap; formatMap["tags"] = "array"; selector.setFieldFormat(formatMap); selector.setWhere("id",iUidStr.toInt()); QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_SELECT_MAP, QVariant::fromValue(selector)); TDataResponse dataRes(data.toMap()); if (dataRes.hasError()) { alertError(ttr("Load data failed!"), dataRes.errText()); } else { QVariantMap dataMap = dataRes.data().toMap(); clearData(); setData(dataMap); unloading(); } } setDataModified(false); } void SysConfig::resizeEvent(QResizeEvent *iEvent) { QSize size = iEvent->size(); if (size.width() > this->perfectSize().width()) { mBodyLayout->setMargin(TTHEME_DP(16)); mUiLoader->setProperty("SS_BORDER", 1); mUiLoader->setStyleSheet(".Q{}"); } else { mBodyLayout->setMargin(0); mUiLoader->setProperty("SS_BORDER", 0); mUiLoader->setStyleSheet(".Q{}"); } }