#include "sysuserv1.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "sysuserv1thread.h" SysUserV1::SysUserV1(const QString &iModuleNameStr,const QVariantMap iUrlPars,QWidget *iparent) : TopClassAbs(iparent) { this->setLicenseKey("sys_common"); this->initModule(iModuleNameStr,iUrlPars); //产品相关 大致明白意思没有具体了解为什么这样做 QVariant prodCfg = iUrlPars.value("product_category"); if (prodCfg.type() == QVariant::List || prodCfg.type() == QVariant::StringList) { for (QVariant row : prodCfg.toList()) { mProductCategoryLst.append(row.toString()); } } else if (!prodCfg.toString().isEmpty()) { mProductCategoryLst.append(prodCfg.toString()); } if (mProductCategoryLst.isEmpty()) { mProductCategoryLst.append(APP->productCategory()); } //初始化布局 initCenterUi(); //初始化窗口尺寸 restoreSizeState(); //初始化id uidChangeEvent(this->uid()); //刷新当前模块Action状态; refreshActionState(); } SysUserV1::~SysUserV1() { this->saveSizeState(); } //ui窗体设置 void SysUserV1::initCenterUi() { //主窗口 QWidget *centerWidget = new QWidget(this); this->setCentralWidget(centerWidget); //主布局:1,toolbar 2,mbodylayout QVBoxLayout *centerLayout = new QVBoxLayout(centerWidget); centerLayout->setMargin(0); centerLayout->setSpacing(0); if(QToolBar *toolbar = qobject_cast(uim()->getWidget("MAIN_TOOLBAR"))){ centerLayout->addWidget(toolbar,0); } //局部布局 mBodyLayout = new QHBoxLayout(); mBodyLayout->setMargin(TTHEME_DP(16)); mBodyLayout->setSpacing(0); centerLayout->addLayout(mBodyLayout, 1); //TUILoader配置 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); mUiLoader->setUiStr(ui("user-info").toString()); mBodyLayout->addWidget(mUiLoader,0); } void SysUserV1::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{}"); } } //uid变化模块 void SysUserV1::uidChangeEvent(const QString &iUidStr){ //uid无值为初始0 if(iUidStr.toInt() == 0){ clearData(); }else{ //uid带值为选中id值 t::loading(this); QVariant data = doThreadWork(new SysUserV1Thread(this), "LOAD_DATA", QVariant(this->uid())); unloading(); TDataResponse dataRes(data.toMap()); if(dataRes.hasError()){ alertError(ttr("load data failed!"), dataRes.errText()); }else{ clearData(); //问题:dataRes已经是data.tomap为什么还要取dataRes.data().toMap? //猜测:这里应该是对应存储功能中getData分割.字段的相反功能 带.字段载入 QVariantMap dataMap = dataRes.data().toMap(); QVariantMap attrData = dataMap.value("attr_data").toMap(); for(QString key : attrData.keys()){ dataMap.insert("attr_data." + key, attrData.value(key)); } setData(dataMap); alertOk(ttr("Data loaded")); } } //设置状态栏调节:可 mUiLoader->setState("status", "enable"); //设置数据处于修改:否 setDataModified(false); } void SysUserV1::clearData(){ //载入 构造map 清空原数据 mUiLoader->loadValues(QVariantMap(), true); } void SysUserV1::setData(const QVariantMap &iDataMap){ //载入 形参map 不清原数据 须接收未显示字段 比如product_category mUiLoader->loadValues(iDataMap, false); //问题:原代码此处会设置setTitie 为什么需要设置? } //衔接mgt->newitem模块 void SysUserV1::create(){ setLastUid(this->uid()); //问题: true对应false设置效果不明 setUid(0, true); mUiLoader->setState("status", "disable"); QVariantMap defaultValueMap; defaultValueMap.insert("product_category", mProductCategoryLst); //意义不明未深究 defaultValueMap = defaultValueMap.unite(config("default_value").toMap()); // setData(defaultValueMap); //设置数据处于修改 默认true setDataModified(); } //取消模块 同时触发mgt-detailchanged 页面变化 void SysUserV1::reload(){ QString uidStr = lastUid().isEmpty() ? uid() : lastUid(); setUid(uidStr, true); } //保存模块 void SysUserV1::saveData(){ //写报错不熟练 //获取提交错误 QVariantList errList = mUiLoader->validateAll("COMMIT", true, "ERROR"); if(!errList.isEmpty()){ QStringList errStrList; for(QVariant err : errList){ errStrList.append(err.toMap().value("text").toString()); } alertError(ttr("Saving data failed!"), errStrList.join("\n")); return; } t::saving(this); QVariantMap saveData = getData(); //问题 意义不明? if(isHookExists("handleSaveData")){ saveData = callHooksQuick("handleSaveData", QVariantList() << saveData).toVariant().toMap(); } // QVariant data = doThreadWork(new SysUserV1Thread(this), "SAVE_DATA", saveData); //问题 unloading总是搭配doThreadwork使用? unloading(); TDataResponse dataRes(data.toMap()); //获取保存错误 if(dataRes.hasError()){ alertError(ttr("Save data failed!"),dataRes.errText()); }else{ setUid(dataRes.data().toInt()); emit dataSaved(this->uid()); APP->notify("sys-user-save"); alertOk(ttr("Data Saved")); } } QVariantMap SysUserV1::getData() const{ QVariantMap dataMap = mUiLoader->getAllValues(true).toVariant().toMap(); QStringList keys = dataMap.keys(); for(QString key : keys){ if(key.contains(".")){ QString keyfirst = key.split('.').first(); QString keylast = key.split('.').last(); QVariantMap map = dataMap.value(keyfirst,QVariantMap()).toMap(); map.insert(keylast, dataMap.value(key)); dataMap.insert(keyfirst, map); dataMap.remove(key); } } //问题:新建时 为什么要这样做 //猜测:该字段不存在ui页面,mUiLoader->getAllValues无法获取,因此需要手动添加 if (this->uid().toInt() == 0) { QVariantMap attrData = dataMap.value("attr_data").toMap(); attrData.insert("effective_date", APP->getServerToday()); dataMap.insert("attr_data", attrData); } if (dataMap.value("product_category").toStringList().isEmpty()) { dataMap.insert("product_category", mProductCategoryLst); } //mUiLoader->getAllValues无法获取id值 手动添加 dataMap.insert("id", this->uid()); return dataMap; }