Commit 61ba5f15 authored by Qiu Chuntao's avatar Qiu Chuntao

Optimization and modification

parent 7e12663a
Pipeline #11802 failed with stage
in 1 minute and 3 seconds
#include "custommoduleplugin.h"
#include "sysusermgt/sysusermgt.h"
//#include "sysmainwindow/msysmainwindow.h"
QStringList TopSysPlugin::getClassList()
{
return QStringList()<< QStringLiteral("Musermgt");
return QStringList()<< QStringLiteral("SysUserMgt");
}
TopClassAbs *TopSysPlugin::newClass(const QString &iClassName,
const QString &iModuleName,
const QVariantMap &iUrlPars)
{
if (iClassName == QStringLiteral("Musermgt")) {
return new Musermgt(iModuleName, iUrlPars, nullptr);
if (iClassName == QStringLiteral("SysUserMgt")) {
return new SysUserMgt(iModuleName, iUrlPars, nullptr);
}
return nullptr;
}
......@@ -30,9 +30,9 @@
#include <tbaseutil/tdataparse.h>
Musermgt::Musermgt(const QString &iModuleNameStr,
const QVariantMap &iUrlPars,
QWidget *iParent):
SysUserMgt::SysUserMgt(const QString &iModuleNameStr,
const QVariantMap &iUrlPars,
QWidget *iParent):
TopClassAbs(iParent)
{
initModule(iModuleNameStr, iUrlPars);
......@@ -66,13 +66,13 @@ Musermgt::Musermgt(const QString &iModuleNameStr,
QTimer::singleShot(0, this, SLOT(refresh()));
}
Musermgt::~Musermgt()
SysUserMgt::~SysUserMgt()
{
this->saveSizeState();
this->saveObjectState(mTableView);
}
void Musermgt::setData(const QVariantMap &iDataMap)
void SysUserMgt::setData(const QVariantMap &iDataMap)
{
DetailView->loadValues(iDataMap, false);
......@@ -82,17 +82,17 @@ void Musermgt::setData(const QVariantMap &iDataMap)
}
void Musermgt::reload()
void SysUserMgt::reload()
{
setDetailUid(mLastDetailUid.isEmpty() ? mDetailUid : mLastDetailUid, true);
}
bool Musermgt::DetailModified() const
bool SysUserMgt::DetailModified() const
{
return IsDetailchange;
}
void Musermgt::setIsDetailModified(bool iIsDetailModified)
void SysUserMgt::setIsDetailModified(bool iIsDetailModified)
{
if (IsDetailchange == iIsDetailModified) {
return;
......@@ -101,17 +101,17 @@ void Musermgt::setIsDetailModified(bool iIsDetailModified)
emit isDetailModifiedChanged(iIsDetailModified);
}
QVariantList Musermgt::selectedItems()
QVariantList SysUserMgt::selectedItems()
{
return mSelectedItems;
}
QString Musermgt::detailUid() const
QString SysUserMgt::detailUid() const
{
return mDetailUid;
}
void Musermgt::setDetailUid(const QString &iUid, bool iForceRefresh)
void SysUserMgt::setDetailUid(const QString &iUid, bool iForceRefresh)
{
if (iForceRefresh || mDetailUid != iUid) {
mDetailUid = iUid;
......@@ -119,15 +119,16 @@ void Musermgt::setDetailUid(const QString &iUid, bool iForceRefresh)
}
}
void Musermgt::newItem()
void SysUserMgt::newItem()
{
mLastDetailUid = mDetailUid;
setDetailUid(QString());
setIsDetailModified(true);
}
//新增用户
void Musermgt::saveItem()
/*保存详细信息表里的数据信息*/
void SysUserMgt::saveItem()
{
//验证有效性
QVariantList errLst = DetailView->validateAll("COMMIT", true, "ERROR");
......@@ -157,10 +158,10 @@ void Musermgt::saveItem()
i.next();
saveData.insert(i.key(), i.value()); //向saveData里插入各项数据的键和值
}
}
}
QVariantMap defaultValueMap;
QVariantMap resultmap;
defaultValueMap = defaultValueMap.unite(config("default_value").toMap());
defaultValueMap = defaultValueMap.unite(config("default_value").toMap()); //去module里拿默认的的信息
QString password = defaultValueMap.value("password").toString();
resultmap = TDataParse::mergeVariantMap(saveData, defaultValueMap);
resultmap.insert("password", TDataParse::getVariantMd5(password));
......@@ -188,8 +189,8 @@ void Musermgt::saveItem()
alertOk(ttr("Data saved"));
}
//删除用户
void Musermgt::removeUser(const QVariantList &iItems)
/*删除用户*/
void SysUserMgt::removeUser(const QVariantList &iItems)
{
if (mTableConf.dbDelFlagKey.isEmpty()) {
TSqlDeleterV2 deleter;
......@@ -223,12 +224,12 @@ void Musermgt::removeUser(const QVariantList &iItems)
}
}
void Musermgt::onPageChanged()
void SysUserMgt::onPageChanged()
{
refresh(false);
}
void Musermgt::onSelectionChanged()
void SysUserMgt::onSelectionChanged()
{
mSelectedItems = mTableView->selectedPrimaryKeys();
QString curId;
......@@ -244,18 +245,18 @@ void Musermgt::onSelectionChanged()
refreshActionState();
}
void Musermgt::onDetailSaved(const QVariant &iUidStr)
void SysUserMgt::onDetailSaved(const QVariant &iUidStr)
{
this->refresh(false);
mTableView->selectRow(iUidStr);
}
void Musermgt::onDetailDataChanged()
void SysUserMgt::onDetailDataChanged()
{
setIsDetailModified(true);
}
void Musermgt::onDetailChanged(bool iIsDetailModified)
void SysUserMgt::onDetailChanged(bool iIsDetailModified)
{
mTableView->setEnabled(!iIsDetailModified);
if (iIsDetailModified) {
......@@ -266,16 +267,16 @@ void Musermgt::onDetailChanged(bool iIsDetailModified)
refreshActionState();
}
//刷新表格
void Musermgt::refresh(bool iResetPage)
/*刷新表格*/
void SysUserMgt::refresh(bool iResetPage)
{
TSqlSelectorV2 selector;
if (!mTableConf.dbSql.isEmpty()) {
selector.setTable(QString("(1% TEMP_TABLE)").arg(mTableConf.dbSql));
selector.setTable(mTableConf.dbSql);
} else if (!mTableConf.dbTableName.isEmpty()) {
selector.setTable(mTableConf.dbTableName);
} else {
alertError(ttr("dbSql or dbtablename isempty!"));
alertError(ttr("dbSql and dbtablename isempty!"));
return; //dbSql和dbTableName为空则返回不做处理
}
selector.setField(mTableConf.queryFields);
......@@ -287,7 +288,7 @@ void Musermgt::refresh(bool iResetPage)
if (!mTableConf.dbDelFlagKey.isEmpty()) {
selector.addWhere(QString("%1 = 0 OR %1 IS NULL").arg(mTableConf.dbDelFlagKey));
}
if(!mTableConf.dbFilter.isEmpty()) {
if (!mTableConf.dbFilter.isEmpty()) {
selector.addWhere(mTableConf.dbFilter);
}
t::loading(this);
......@@ -311,11 +312,10 @@ void Musermgt::refresh(bool iResetPage)
setDetailUid(QString());
alertOk(ttr("Data loaded"));
}
return;
}
//刷新详细表单
void Musermgt::refreshDetail(const QString &iUid)
/*刷新详细表单*/
void SysUserMgt::refreshDetail(const QString &iUid)
{
if (iUid.isEmpty()) {
DetailView->loadValues(QVariantMap(), true);
......@@ -346,8 +346,8 @@ void Musermgt::refreshDetail(const QString &iUid)
setIsDetailModified(false);
}
//初始化界面
void Musermgt::initTableView()
/*初始化界面*/
void SysUserMgt::initTableView()
{
mBodySplitter = new TSplitter(this);
mBodySplitter->setObjectName("mBodySplitter");
......@@ -399,7 +399,6 @@ void Musermgt::initTableView()
connect(mPageTool, SIGNAL(pageChanged(int,int)), this, SLOT(onPageChanged()));
}
}
QWidget *detailWgt = new QWidget(this);
QVBoxLayout *detailLayout = new QVBoxLayout(detailWgt);
detailLayout->setSpacing(0);
......@@ -409,11 +408,7 @@ void Musermgt::initTableView()
detailLayout->addWidget(toolbar, 0);
}
DetailView = new TUiLoader(this);
DetailView->setObjectName("__detail__");
const QStringList typePlugins = config("uiloader_plugins").toStringList();
if (typePlugins.size() > 0) {
TopClassHelper::setUiLoaderPluginCallback(DetailView,this,typePlugins);
}
connect(DetailView, SIGNAL(dataChanged()), this, SLOT(onDetailDataChanged()));
DetailView->setProperty("SS_BG", "PANEL");
DetailView->setSelf(this);
......@@ -429,132 +424,3 @@ void Musermgt::initTableView()
detailWgt->setVisible(false);
}
}
Musermgt::NaviType Musermgt::str2NaviType(const QString &iType)
{
const QString type = iType.toUpper();
if (type == "UILOADER") {
return NaviType::UiLoader;
} else if (type == "ADVANCEDQUERY") {
return NaviType::AdvancedQuery;
} else if (type == "NAVIFILTER") {
return NaviType::NaviFilter;
} else if (type == "CATEGORYTREEVIEWANDADVANCEDQUERY") {
return NaviType::CategoryTreeViewAndAdvancedQuery;
} else if (type == "NONE") {
return NaviType::None;
} else {
return NaviType::CategoryTreeView;
}
}
QVariantList Musermgt::parseCategoryConfig()
{
QVariantList categoryLst;
QVariantList categoryConfig = config("navi.categories").toList();
QString format = config("navi.format", "filter_by_enum").toString();
if (format.compare("filter_by_enum") == 0) {
for(const QVariant &item: categoryConfig) {
QVariantMap itemMap = item.toMap();
QString itemName = itemMap.value("name").toString();
QVariantList childrenLst = itemMap.value("children").toList();
QString enumCfg = itemMap.value("enum_children").toString();
QStringList enumCheckedLst = itemMap.value("enum_checked").toStringList();
QStringList enumInvisibleLst = itemMap.value("enum_invisible").toStringList();
if (itemMap.contains("visible")) {
itemMap.insert("VISIBLE", itemMap.take("visible"));
}
if (itemMap.contains("expand")) {
itemMap.insert("EXPAND", itemMap.take("expand"));
}
TSqlWhereCompsiteV2 childWhere;
childWhere.setLogic(TSqlWhereCompsiteV2::Logic_Or);
QVariantList type = TOPENM->enumList(enumCfg)->toComboList();
for (const QVariant &item: type) {
QVariantMap enumMap = item.toMap();
QString enumName = enumMap.value("name").toString();
QVariantMap childMap;
childMap.insert("name",enumName);
childMap.insert("text",ttr(enumMap.value("text").toString()));
childMap.insert("icon",enumMap.value("icon"));
childMap.insert("data", itemName);
if(enumCheckedLst.contains(enumName)) {
childMap.insert("checked",1);
} else {
childMap.insert("checked",0);
}
if (enumInvisibleLst.contains(enumName)) {
childMap.insert("VISIBLE", 0);
} else {
childMap.insert("VISIBLE",1);
}
childrenLst.append(childMap);
}
int checkedChildLen = 0;
for (QVariant &item : childrenLst) {
QVariantMap itemMap = item.toMap();
QString name = itemMap.value("name").toString();
if(itemMap.value("checked").toInt() == 1) {
childWhere.append(itemName, name);
checkedChildLen++;
}
item = itemMap;
}
if (checkedChildLen == childrenLst.length()) {
itemMap.insert("checked", 1);
} else {
itemMap.insert("checked", 0);
}
//mCategoryWhere.append(childWhere);
itemMap.remove("children");
itemMap.remove("enum_children");
itemMap.remove("enum_checked");
itemMap.remove("enum_invisible");
itemMap.insert("text",ttr(itemMap.value("text").toString()));
itemMap.insert("CHILDREN",childrenLst);
categoryLst.append(itemMap);
}
} else if (format.compare("filter_by_sql_where") == 0) {
return categoryConfig;
}
return categoryLst;
}
QVariantMap Musermgt::getDefaultQueryDataFromCfgMap()
{
QVariantMap conditionMap = config("advance").toMap().value("condition").toMap();
QVariantList valueList = conditionMap.value("value").toList();
for (QVariant &var: valueList) {
QVariantMap m = var.toMap();
m.insert("title", ttr(m.value("title").toString()));
var = m;
}
conditionMap.insert("value", valueList);
return conditionMap;
}
void Musermgt::initAdvanceCfgMap()
{
mAdvancedQueryCfgMap = config("advance").toMap();
QVariantList queryItems = mAdvancedQueryCfgMap.value("advanced_items").toList();
QVariantList newQueryItems;
for (QVariant var : queryItems) {
QVariantMap m = var.toMap();
// 翻译title
m.insert("title", ttr(m.value("title").toString()));
// 转换枚举
QVariantList optionList;
QRegExp regExp("enum(.*)");
if ((m.value("optionList").type() == QVariant::String) && (regExp.indexIn(m.value("optionList").toString()) != -1)) {
if (regExp.capturedTexts().count() > 1) {
optionList = TOPENM->enumList(regExp.capturedTexts().value(1).remove("(").remove(")"))->toComboList();
m.insert("optionList", optionList);
}
}
newQueryItems << m;
}
mAdvancedQueryCfgMap.insert("advanced_items", newQueryItems);
}
#ifndef MUSERMGT
#define MUSERMGT
#ifndef SYSUSERMGT
#define SYSUSERMGT
#include <topcore/topclassabs.h>
#include <tdatabaseutil/tsqlselectorv2.h>
......@@ -12,22 +12,14 @@ class TSearchEntry;
class TPageTool;
class TSplitter;
class Musermgt : public TopClassAbs
class SysUserMgt : public TopClassAbs
{
Q_OBJECT
public:
explicit Musermgt(const QString &iModuleNameStr = QString(""),
const QVariantMap &iUrlPars = QVariantMap(),
QWidget *iParent = nullptr);
enum class NaviType {
None,
CategoryTreeView,
UiLoader,
AdvancedQuery,
NaviFilter,
CategoryTreeViewAndAdvancedQuery
};
~Musermgt();
explicit SysUserMgt(const QString &iModuleNameStr = QString(""),
const QVariantMap &iUrlPars = QVariantMap(),
QWidget *iParent = nullptr);
~SysUserMgt();
public slots:
void refresh(bool iResetPageBol = true); //刷新表格信息
void refreshDetail(const QString &iUid); //刷新右侧详细信息
......@@ -53,12 +45,7 @@ signals:
void detailSaved(const QVariant &iUid); //当详细表单数据保存时发送
void selectionChanged(); //左侧表单选中条目变化时发送该信号
private:
void initAdvanceCfgMap();
void initTableView(); //初始化界面
Musermgt::NaviType str2NaviType(const QString &iType);
QVariantList parseCategoryConfig();
QVariantMap getDefaultQueryDataFromCfgMap();
private:
TSplitter *mBodySplitter = nullptr;
TSplitter *mBodyWidget = nullptr;
......@@ -69,12 +56,9 @@ private:
QWidget *mBodyWgt = nullptr;
QString mLastDetailUid;
QString mDetailUid;
NaviType mNaviType = NaviType::CategoryTreeView;
QWidget *mNaviView = nullptr;
QVariantMap mAdvancedQueryCfgMap;
bool IsDetailchange = false;
TopClassTableConf mTableConf;
QVariantList mSelectedItems;
};
#endif //MUSERMGT
#endif //SYSUSERMGT
# 模块标题
sys_title: "Module Menu"
sys_title_en: ""
sys_title_zhcn: "模块菜单"
sys_title: "User Management Module"
sys_title_en: "User Management Module"
sys_title_zhcn: "用户管理模块"
sys_title_zhtw: ""
# 模块图标(普通图标在font awesome中找 http://fontawesome.io/icons/)
......@@ -63,7 +63,7 @@ desktop: {
"title_en": "Custom module",
"title_zhcn": "自定义模块",
"title_zhtw": "自定义模块",
"url_address": "Custom_module"
"url_address": "user management-custom_module"
},
{
"route_type": "module",
......@@ -72,7 +72,7 @@ desktop: {
"title_en": "Module configuration module",
"title_zhcn": "模板配置模块",
"title_zhtw": "模板配置模块",
"url_address": "Module_configuration_module"
"url_address": "user management-module_configuration_module"
},
]
},
......
......@@ -61,9 +61,9 @@
name: "attr_data.age",
type: "IntLineEdit",
title: self.ttr("Age"),
validate: function (obj, val, title, moment, self) {
if (!val.match(new RegExp('^[0-9_]+$'))) {
return [title + self.ttr(" can only contain [0-9]!"), 'Error'];
validate:function(obj, val, title, moment, self){
if (isNaN(val)) {
return [title + self.ttr(" can only contain [0-9]!"), 'Error'];
} else if (parseInt(val) >= 100 || parseInt(val) <= 0) {
return [title + self.ttr("Are you sure you are a hundred years old?"), 'Error'];
}
......
# 模块标题
sys_title: "Custom module"
sys_title_en: "Custom module"
sys_title_zhcn: "自定义模块"
sys_title: "User management-Custom module"
sys_title_en: "User management-Custom module"
sys_title_zhcn: "用户管理-自定义模块"
sys_title_zhtw: ""
# 模块图标
sys_icon: "wpforms"
# 模块对应的插件DLL名称
sys_plugin: "topikm6-custommodule-plugin"
# 模块对应的类名
sys_class: "Musermgt"
sys_class: "SysUserMgt"
# 许可证验证键
sys_license_key: ""
# 打开模块的权限
......@@ -28,8 +28,7 @@ default_value : {
# 主表格
view {
# 数据项, 默认包含表头中配置的数据项
data_keys: ["id","username","fullname","status",
"attr_data"]
data_keys: ["id", "username", "fullname", "status", "attr_data"]
# 主键
primary_key: "id"
# 水平表头
......@@ -54,8 +53,8 @@ view {
"search": "string"
},
{
"name": "status",
"display": "status",
"name": "Status",
"display": "Status",
"displayRole": "$status.text",
"size": 100,
"format": "enum(tpm-machine-maintenance-plan-status)"
......@@ -78,8 +77,9 @@ view {
sort_by: "id DESC"
# 数据集
data_set {
# 数据库表名
db_table_name: "sys_user"
db_filter: ""
# 数据库表名
db_table_name: "sys_user"
db_filter: ""
db_sql: ""
}
}
try {
this.reload();
this.reloadItem();
} catch(e) {
print(e);
}
......@@ -18,5 +18,5 @@ STYLE: "button_style=icon"
LANG: "JavaScript"
STATUS: "Release"
VERSION: "1"
STATEHOOK: "return this.DetailModified() ? 'hide' : 'enable';"
STATEHOOK: "return this.isDetailModified() ? 'hide' : 'enable';"
---ACTION---*/
\ No newline at end of file
......@@ -61,10 +61,10 @@
name: "attr_data.age",
type: "IntLineEdit",
title: self.ttr("Age"),
validate: function (obj, val, title, moment, self) {
if (!val.match(new RegExp('^[0-9_]+$'))) {
return [title + self.ttr(" can only contain [0-9]!"), 'Error'];
} else if (parseInt(val) >= 100 || parseInt(val) <= 0) {
validate:function(obj, val, title, moment, self){
if (isNaN(val)) {
return [title + self.ttr(" can only contain [0-9]!"), 'Error'];
} else if ((parseInt(val) >= 100) || (parseInt(val) <= 0)) {
return [title + self.ttr("Are you sure you are a hundred years old?"), 'Error'];
}
},
......
# 模块标题
sys_title: "Module configuration module"
sys_title_en: "Module configuration module"
sys_title_zhcn: "模板配置模块"
sys_title: "User management-Module configuration module"
sys_title_en: "User management-Module configuration module"
sys_title_zhcn: "用户管理-模板配置模块"
sys_title_zhtw: ""
# 模块图标
sys_icon: "wpforms"
......@@ -27,13 +27,12 @@ navi: {
}
default_value : {
password: "123456"
password: "123456",
}
# 主表格
view {
# 数据项, 默认包含表头中配置的数据项
data_keys: ["id","username","fullname","status",
"attr_data"]
data_keys: ["id", "username", "fullname", "status", "attr_data"]
# 主键
primary_key: "id"
# 水平表头
......@@ -58,8 +57,8 @@ view {
"search": "string"
},
{
"name": "status",
"display": "status",
"name": "Status",
"display": "Status",
"displayRole": "$status.text",
"size": 100,
"format": "enum(tpm-machine-maintenance-plan-status)"
......@@ -85,5 +84,6 @@ view {
# 数据库表名
db_table_name: "sys_user"
db_filter: ""
db_sql: ""
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment