Commit 7f5a708b authored by Cindy Ye's avatar Cindy Ye

create sys_user_mgt_v3

parent 5c8abad9
try {
this.reload();
} catch(e) {
print(e);
}
/*---ACTION---
ICON: "times"
LABEL: "Cancel"
LABEL_ZHCN: "取消"
LABEL_ZHTW: "取消"
ACCEL: ""
TOOLTIP: "Cancel Edit"
TOOLTIP_ZHCN: "取消编辑"
TOOLTIP_ZHTW: "刷新編輯"
CHECKED: ""
GROUP: ""
STYLE: "button_style=both"
LANG: "JavaScript"
STATUS: "Release"
VERSION: "1"
STATEHOOK: "return (this.isDataModified() ) ? 'enable' : 'hide';"
---ACTION---*/
\ No newline at end of file
try {
this.copyItem();
} catch (e) {
print(e);
}
/*---ACTION---
ICON: "copy"
LABEL: "Copy"
LABEL_ZHCN: "复制"
LABEL_ZHTW: "複製"
ACCEL: ""
TOOLTIP: "Copy selected item"
TOOLTIP_ZHCN: "复制选中条目"
TOOLTIP_ZHTW: "複製選中條目"
PERMISSION: "sys-user-edit"
CHECKED: ""
GROUP: ""
STYLE: "button_style=icon"
LANG: "JavaScript"
STATUS: "Release"
VERSION: "1"
STATEHOOK: "return (this.isDataModified() || this.uid() == 0) ? 'hide' : 'enable';"
---ACTION---*/
\ No newline at end of file
try {
var ans = TMessageBox.question(this, this.ttr("Do you want to delete the selected item?"), '',
this.ttr('Delete'),
[this.ttr('Delete') + ':Yes:Yes:Error', this.ttr('Cancel') + ':Cancel:Cancel:Normal']);
if (ans != 'Yes') {
return;
}
this.deleteItems(this.selectedItems());
} catch (e) {
print(e);
}
/*---ACTION---
ICON: "times-circle"
LABEL: "Delete"
LABEL_ZHCN: "刪除"
LABEL_ZHTW: "刪除"
ACCEL: "Delete"
TOOLTIP: "Delete"
TOOLTIP_ZHCN: "删除"
TOOLTIP_ZHTW: "刪除"
PERMISSION: "sys-user-delete"
CHECKED: ""
GROUP: ""
STYLE: "size=small button_style=both"
LANG: "JavaScript"
STATUS: "Release"
VERSION: "1"
STATEHOOK: "if(this.selectedItems().length > 0 && !this.isDetailModified()){return 'enable'}else{return 'disable'}"
---ACTION---*/
\ No newline at end of file
try {
this.newItem();
} catch (e) {
print(e);
}
/*---ACTION---
ICON: "plus"
LABEL: "New"
LABEL_ZHCN: "新建"
LABEL_ZHTW: "新建"
ACCEL: "Ctrl+N"
TOOLTIP: "Add new item"
TOOLTIP_ZHCN: "新建条目"
TOOLTIP_ZHTW: "新建條目"
PERMISSION: "sys-user-create"
CHECKED: ""
GROUP: ""
STYLE: "button_style=both"
LANG: "JavaScript"
STATUS: "Release"
VERSION: "1"
STATEHOOK: "if(this.canModify()){return 'enable'}else{return 'disable'}"
---ACTION---*/
\ No newline at end of file
try {
this.refresh(false);
} catch (e) {
print(e);
}
/*---ACTION---
ICON: "refresh"
LABEL: "Refresh"
LABEL_ZHCN: "刷新"
LABEL_ZHTW: "刷新"
ACCEL: "F5"
TOOLTIP: "Reload data from database"
TOOLTIP_ZHCN: "重载数据库数据"
TOOLTIP_ZHTW: "重載數據庫數據"
CHECKED: ""
GROUP: ""
STYLE: "size=small button_style=icon"
LANG: "JavaScript"
STATUS: "Release"
VERSION: "1"
STATEHOOK: ""
---ACTION---*/
\ No newline at end of file
try {
this.reloadItem();
} catch(e) {
print(e);
}
/*---ACTION---
ICON: "refresh"
LABEL: "Refresh"
LABEL_ZHCN: "刷新"
LABEL_ZHTW: "刷新"
ACCEL: ""
TOOLTIP: "Reload data from database"
TOOLTIP_ZHCN: "重新从数据库加载数据"
TOOLTIP_ZHTW: "重新從數據庫加載數據"
CHECKED: ""
GROUP: ""
STYLE: "button_style=icon"
LANG: "JavaScript"
STATUS: "Release"
VERSION: "1"
STATEHOOK: "return this.isDetailModified() ? 'hide' : 'enable';"
---ACTION---*/
\ No newline at end of file
try {
this.saveItem();
/*var query = new TSqlQueryV2(T_SQLCNT_POOL.getSqlDatabase());
var uiLoader = this.uiLoader();
var errLst = uiLoader.validateAll("COMMIT", true, "ERROR");
if (errLst.length > 0) {
var errStrLst = [];
_.forEach(errLst, function (err) {
errStrLst.push(_.toString(err["text"]));
}, this);
this.alertError(this.ttr("Save Failed"), errStrLst.join("\n"));
return;
}
var allData = uiLoader.getAllValues(true);
var dataMap = {};
_.forEach(allData, function (v, k) {
if (_.startsWith(k, "table(slave).")) {
_.set(dataMap, k.replace("table(slave).", ""), v);
}
})
if (_.isEmpty(_.toString(dataMap["id"]))) {
// 插入数据
delete dataMap["id"];
} else {
// 更新数据
}
var plan_detail = allData["plan_detail"];
var planDetailIds = _.reduce(plan_detail, function (prev, curr) {
if (curr.CRUD != 'create' && !_.isEmpty(_.toString(curr.id))) {
prev.push(curr.id);
}
return prev;
}, [])
var planDetailGroup = _.groupBy(plan_detail, "CRUD");
query.begin();
sqlSelector =new TSqlSelectorV2 ;
sqlSelector.setTable("sys_user");
sqlSelector.setFiled("COUNT(*)");
sqlSelector.addWhere("username",allData.value("username"));
sqlSelector.addWhere("id", allData.value(id), "!=");
var count = sqlQuery.selectCount(sqlSelector);
if (count > 0) {
throw window.alert(username already exists);
}
if (query.lastError().isValid()) {
throw query.lastError().text();
}
if (!_.isEmpty(planDetailIds)) {
var deleter = new TSqlDeleterV2;
deleter.setTable("tpm_machine_maintance_plan_detail");
deleter.setWhere(_.format("id not in ('{0}')", planDetailIds.join("','")));
deleter.addWhere("plan_id", id);
query.deleteRow(deleter);
if (query.lastError().isValid()) {
throw query.lastError().text();
}
}
_.forEach(planDetailGroup, function (v, k) {
var dataLst = _.reduce(v, function (prev, curr) {
curr["plan_id"] = id;
prev.push(curr);
return prev;
}, []);
if (/create/i.test(k)) {
query.batchInsert("tpm_machine_maintance_plan_detail", ["plan_id", "item", "method", "spec_value", "max_value", "min_value", "auto_judge_policy"], dataLst);
if (query.lastError().isValid()) {
throw query.lastError().text();
}
} else if (/update/i.test(k)) {
var sql = "update tpm_machine_maintance_plan_detail set item = :item, method = :method, spec_value = :spec_value, \
max_value = :max_value, min_value= :min_value, auto_judge_policy = :auto_judge_policy where id = :id";
query.batchSql(sql, dataLst);
if (query.lastError().isValid()) {
throw query.lastError().text();
}
}
})
query.commit();
this.setIsDetailModified(false);
this.refreshSlave();*/
} catch (e) {
// query.rollback();
print(e)
}
/*---ACTION---
ICON: "save"
LABEL: "Save"
LABEL_ZHCN: "保存"
LABEL_ZHTW: "保存"
ACCEL: "Ctrl+S"
TOOLTIP: "Save data to database"
TOOLTIP_ZHCN: "保存数据至数据库"
TOOLTIP_ZHTW: "保存數據至數據庫"
PERMISSION: "sys-user-edit"
CHECKED: ""
GROUP: ""
STYLE: " button_style=both"
LANG: "JavaScript"
STATUS: "Release"
VERSION: "1"
STATEHOOK: "return (this.isDetailModified() ) ? 'enable' : 'disable';"
---ACTION---*/
\ No newline at end of file
function func(self) {
return [
{
name: 'tablewidgt',
type: 'TabWidget',
property: {stylesheet:"QTabWidget{background-color:red}"},
pack: { stretch: 1 },
perfict_width:800,
child: [
{
name: 'userinfo_page',
type: 'VBoxLayout',
pack: { label: self.ttr("User Information") },
child: [
{
type: 'FormGridLayout',
child: [
{
name: 'id',
type: 'LineEdit',
pack: {label: self.ttr('ID') } ,
property: { enabled: false },
state: function(obj) {
return "Hide";
}
},
{
name: 'username',
type: 'LineEdit',
pack: { label: self.ttr('Login Name') },
validate: function (obj, val, title, moment, self) {
if (val.trim() == '') {
return [title + self.ttr(" can not be null"), 'Error'];
} else if (!val.match(new RegExp('^[A-Za-z0-9_]+$'))) {
return [title + self.ttr(" can only contain [A-Za-z0-9]!"), 'Error'];
}
},
},
{
name: 'password',
type: 'LineEdit',
pack: { label: self.ttr('Password') },
property: { echo_mode: 'Password' },
state: function(obj,self) {
return 'Hide';
}
},
{
name: 'fullname',
type: 'LineEdit',
pack: { label: self.ttr('Full Name') },
property: {},
validate: 'NOTNULL'
},
{
name: 'staffid',
type: 'LineEdit',
pack: { label: self.ttr('Staff ID') },
property: {},
},
// {
// name: 'contcat_id',
// type: 'LineEdit',
// property: { enabled: false },
// state: function(obj,self) {
// return 'Hide';
// }
// },
// {
// name: 'mail',
// type: 'LineEdit',
// pack: { label: self.ttr('Mail') },
// property: {},
// validate: function (obj, val, title, moment) {
// if (val != '') {
// var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
// if (!filter.test(val)) {
// return [self.ttr("invalid mail format"), 'ERROR']
// }
// }
// },
// },
{
name: 'attr_data.remark',
type: 'PlainTextEdit',
pack: { label: self.ttr('Remark') },
property: {
max_row_count: 2
}
},
{
name: 'status',
type: 'ComboBox',
pack: { label: self.ttr('Status') },
property: { item_list: TOPENM.enumList("sys-user-status").toComboList() },
title: self.ttr('Status'),
validate: function (obj, val, title, moment, self) {
if (val.trim() == '') {
return [title + self.ttr(" can not be null"), 'Error'];
}
}
},
{
name: 'attr_data.password_validity_control',
type: 'CheckBox',
title: self.ttr('Password Validity Control'),
property: {},
pack: { label: self.ttr('Password Validity Control') },
callback: function (obj, checked, self) {
if (checked) {
this.setState("attr_data.validity_period", "show");
} else {
this.setState("attr_data.validity_period", "hide");
}
},
setter: function (obj, value, self) {
if (value === 1 || value == true || value === 'on' || value === 'yes') {
obj.setIntValue(1);
this.setState("attr_data.validity_period", "show");
} else {
obj.setIntValue(0);
this.setState("attr_data.validity_period", "hide");
}
},
state: function (obj, self) {
if (APP.hasRight("sys-user-password-validity-control")) {
return 'Show';
} else {
return 'Hide';
}
}
},
{
name: 'attr_data.validity_period',
type: 'IntLineEdit',
pack: { label: self.ttr('Validity Period') },
property: { min_value: 0 },
state: function (obj, self) {
if (APP.hasRight("sys-user-password-validity-control") &&
this.getValue('attr_data.password_validity_control') == 1) {
return 'Show';
} else {
return 'Hide';
}
},
child: [
{
name: "validity_period_unit",
type: "Label",
property: {
text: " " + self.ttr('Month') + " ",
alignment: "HCenter|VCenter",
fixed_height: 26,
stylesheet: "background-color: white;border-left: 1px solid lightgray;"
}
}
]
},
{
name: 'product_category',
type: 'MultiComboBox',
title: self.ttr('Product Category'),
property: { item_list: TOPENM.enumList("sys-product-category").toComboList(), name_format: 'A,B' },
pack: { label: self.ttr('Product Category') },
getter : function(obj, self)
{
return obj.getData("current_names");
},
setter: function(obj,value,self){
obj.setData("current_names", value);
},
state: function(obj, self) {
return 'hide';
}
},
{
type: "Stretch"
}
]
}
]
}
]
},
];
}
\ No newline at end of file
"Cancel": {en: "Cancel",zhcn: "取消",zhtw: "取消"}
"can not be null": {en: " can not be null",zhcn: "不能为空",zhtw: "不能為空"}
"can only contain [A-Za-z0-9]!": {en: " can only contain [a-z0-9]!",zhcn: "只能包含数字和小写字母!",zhtw: "只能包含數據和小寫字母!"}
"Data loaded": {en: "Data loaded", zhcn: "数据已加载", zhtw: "數據已加載"}
"Data saved": {en: "Data saved", zhcn: "数据已保存", zhtw: "數據已保存"}
"Copy": {en: "Copy",zhcn: "复制",zhtw: "複製"}
"Delete data failed!": {en: "Delete data failed!",zhcn: "数据删除失败!",zhtw: "數據刪除失敗!"}
"Delete": {en: "Delete",zhcn: "删除",zhtw: "刪除"}
"Data deleted": {en: "Data deleted", zhcn: "数据已删除", zhtw: "數據已刪除"}
"Error": {en: "Error",zhcn: "错误",zhtw: "錯誤"}
"Filter": {en: "Filter",zhcn: "过滤器",zhtw: "過濾器"}
"Full Name": {en: "Full Name",zhcn: "全名",zhtw: "全名"}
"Hide Navigation": {en: "Hide Navigation",zhcn: "关闭导航栏",zhtw: "關閉導航欄"}
"Hide": {en: "Hide",zhcn: "关闭",zhtw: "關閉"}
"invalid mail format": {en: "invalid mail format",zhcn:"无效的电子邮件格式",zhtw:"無效的電子郵件格式"}
"Icon": {en: "Icon",zhcn: "图标",zhtw: "圖標"}
"ID": {en: "ID",zhcn: "编号",zhtw: "編號"}
"Load data failed!": {en: "Load data failed!",zhcn: "数据载入失败!",zhtw: "數據載入失敗!"}
"Login Name": {en: "Login Name",zhcn: "登录名",zhtw: "登錄名"}
"Month": {en: "Month",zhcn: "月",zhtw: "月"}
"Mail": {en: "Mail",zhcn: "邮箱",zhtw: "郵箱"}
"Moved to recycle bin": {en: "Moved to recycle bin", zhcn: "移动到回收站", zhtw: "移動到回收站"}
"new": {en: "new",zhcn: "新建",zhtw: "新建"}
"New": {en: "New",zhcn: "新建",zhtw: "新建"}
"Navigation": {en: "Navigation",zhcn: "导航栏",zhtw: "導航欄"}
"NOTNULL": {en: "NOTNULL",zhcn:"不能为空",zhtw: "不能為空"}
"Ok": {en: "Ok",zhcn: "确认",zhtw: "確認"}
"Password Validity Control": {en: "Password Validity Control",zhcn: "密码有效期管控",zhtw: "密碼有效期管控"}
"Password": {en: "Password",zhcn: "密码",zhtw: "密碼"}
"Product Category": {en: "Product Category",zhcn: "产品分类",zhtw: "產品分類"}
"Remark": {en: "Remark",zhcn: "备注",zhtw: "備註"}
"Reset": {en: "Reset",zhcn: "重置",zhtw: "重置"}
"refresh": {en: "refresh",zhcn: "刷新",zhtw: "刷新"}
"Save data failed!": {en: "Save data failed!",zhcn: "数据保存失败!",zhtw: "數據保存失敗!"}
"Staff ID": {en: "Staff ID",zhcn: "工号",zhtw: "工號"}
"Show Navigation": {en: "Show Navigation",zhcn: "打开导航栏",zhtw: "打開導航欄"}
"Status": {en: "Status",zhcn: "状态",zhtw: "狀態"}
"Show": {en: "Show",zhcn: "打开",zhtw: "打開"}
"Save": {en: "Save",zhcn: "保存",zhtw: "保存"}
"This feature is not yet supported.": {en: "This feature is not yet supported.",zhcn: "目前还不支持此特性",zhtw: "目前還不支持此特性"}
"username": {en: "username",zhcn: "用户名",zhtw: "用戶名"}
"User Information": {en: "User Information",zhcn: "用户信息",zhtw: "用戶信息"}
"Validity Period": {en: "Validity Period",zhcn: "有效期",zhtw: "有效期"}
\ No newline at end of file
# 模块标题
sys_title: "User Management"
sys_title_en: "User Management"
sys_title_zhcn: "用户管理"
sys_title_zhtw: "用戶管理"
# 模块图标(普通图标在font awesome中找 http://fontawesome.io/icons/)
sys_icon: "user-o"
# 模块对应的插件DLL名称
sys_plugin:"toptemplateclassplugin"
# 模块对应的类名
sys_class: "TopTemplateClass4"
# 许可证验证键
sys_license_key: ""
# 打开模块的权限
sys_open_right: "sys-user-read"
# 语言包,默认包含自己模块的语言包
sys_lang_list: []
# 当关闭窗口时,如果提示是否保存,保存调用的action
sys_save_action: "save"
# 该模块用到的枚举列表
sys_enum_list: ["sys-user-status","sys-product-category"]
# 该模块用到的除了Action之外的权限列表
sys_permission_list: []
# 产品类型,此选项用于当多个产品共用一个数据库时,只想看到自已产品的用户;
# * 表示匹配所有产品
product_category: []
navi: {
__type__: "UiLoader"
is_expanded: "true"
min_width: 150,
max_width: 300,
format: "filte_by_enum"
}
view: {
data_keys: [
"id",
"username",
"fullname",
"staffid",
# "mail",
"contcat_id",
"remark",
"status",
"department_id"
]
primary_key: "id"
horizontal_header: [
{
"name": "username",
"display": "Login Name",
"displayRole": "$username",
"dataType": "string",
"resizeMode": "Interactive",
"search": "string"
},
{
"name": "fullname",
"display": "Full Name",
"displayRole": "$fullname",
"dataType": "string",
"resizeMode": "Interactive",
"search": "string"
},
{
"name": "staffid",
"display": "Staff ID",
"displayRole": "$staffid",
"dataType": "string",
"resizeMode": "Interactive",
"search": "string"
},
# {
# "name": "mail",
# "display": "Mail",
# "displayRole": "$mail",
# "dataType": "string",
# "resizeMode": "Interactive",
# "size": "200"
# },
{
"name": "status",
"display": "Status",
"displayRole": "$status.text",
"resizeMode": "Interactive",
"decorationRole": "$status.icon",
"format": "enum(sys-user-status)"
},
{
"name": "remark",
"display": "Remark",
"displayRole": "$remark",
"resizeMode": "Interactive",
},
]
# 默认排序列
sort_by: "id DESC"
# 数据集
data_set {
# 数据库表名
db_table_name: "sys_user",
#db_sql: "select U.id, U.username, U.staffid, C.mail, U.remark, U.status, U.contcat_id, U.fullname, U.department_id, U.product_category from sys_user AS U LEFT JOIN pub_contacts AS C ON U.contcat_id = C.id"
# 删除标记
# 若为空表示做物理删除
db_del_flag_key: ""
}
# 过滤项
db_filter {
}
}
\ No newline at end of file
function func(self) {
return {
type: 'FormGridLayout',
child: [
{
name: 'username',
type: 'LineEdit',
pack: { label: self.ttr("Login Name") },
property: {
user_data: { field_name: "username", operator: "like" }
}
},
{
name: 'fullname',
type: 'LineEdit',
pack: { label: self.ttr("Full Name") },
property: {
searchable: false,
user_data: { field_name: "fullname", operator: 'LIKE' }
}
},
{
name: 'staffid',
type: 'LineEdit',
pack: { label: self.ttr("Staff ID") },
property: {
user_data: { field_name: "staffid", operator: "like" }
}
},
{
name: 'status',
type: 'ComboBox',
pack: { label: self.ttr("Status") },
property: {
searchable: true,
item_list: TOPENM.enumList("sys-user-status").toComboList(),
user_data: { field_name: "status" }
}
}
]
};
}
# 表格的右键菜单
"TABLEVIEW_POPUP": [
{"type":"menuitem","action":"new"},
{"type":"separator"},
{"type":"menuitem","action":"delete"},
{"type":"separator"},
{"type":"menuitem","action":"refresh"},
]
# 工具栏
"MAIN_TOOLBAR": [
{"type":"toolitem","action":"new"},
{"type":"stretcher"},
{"type":"toolitem","action":"refresh"},
{"type":"searchentry","name":"SEARCH_ENTRY"}
]
# 底部工具栏
"BOTTOM_TOOLBAR" : [
{"type":"stretcher"},
{"type":"pagetool","name":"PAGE_TOOL"}
]
#用户信息工具栏
"DETAIL_TOOLBAR": [
{"type":"toolitem","action":"save"},
{"type":"stretcher"},
{"type":"toolitem","action":"copy"},
{"type":"toolitem","action":"cancel"},
{"type":"toolitem","action":"refresh"}
]
\ No newline at end of file
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