📄 uuserattr.pas
字号:
cSqlStr := 'select * from T_004_L where V01=' + QuotedStr(GrpId) +
' order by V02,V03';
with cds_SubMod do
begin
if Active then
Active := false;
XMLData := DM.FreeQuery(cSqlStr);
Active := true;
end;
with cds_SubMod do
begin
first;
while not eof do
begin
Node := GetRightNode(trim(fieldbyname('V02').AsString),
trim(fieldbyname('V03').AsString));
if Node <> nil then
Node.Checked := true;
next;
end;
end;
end;
function TfrmUserAttr.GetRightNode(const SysId, ModId: string): TfcTreeNode;
var
i: integer;
begin
result := nil;
for i := 0 to TV_Sub.Items.Count - 1 do
begin
//模块ID level 为 1
if TV_Sub.Items[i].Level = 1 then
if (TV_Sub.Items[i].StringData = ModId) and
(TV_Sub.Items[i].StringData2 = SysId) then
begin
result := TV_Sub.Items[i];
break;
end;
end;
end;
procedure TfrmUserAttr.cxLookupComboBox1PropertiesChange(Sender: TObject);
var
V01: string;
begin
if trim(cxLookupComboBox1.Text) = '' then
V01 := ''
else
V01 := trim(cxLookupComboBox1.EditValue);
ClearRightTreeChecked;
SetRightTreeFromUserGrp(V01);
end;
procedure TfrmUserAttr.cxRadioButton9Click(Sender: TObject);
begin
TV_Sub.ReadOnly := false;
cxLookupComboBox1.Enabled := false;
RzButton7.Enabled := false;
ClearRightTreeChecked;
if not CurUser.IsNew then
SetRightTreeFromUser(CurUser.V01);
end;
procedure TfrmUserAttr.ClearRightTreeChecked;
var
i: integer;
begin
for i := 0 to TV_Sub.Items.Count - 1 do
begin
if TV_Sub.Items[i].Level = 1 then
TV_Sub.Items[i].Checked := false;
end;
end;
procedure TfrmUserAttr.cxRadioButton8Click(Sender: TObject);
var
V01: string;
begin
TV_Sub.ReadOnly := true;
cxLookupComboBox1.Enabled := true;
RzButton7.Enabled := true;
if trim(cxLookupComboBox1.Text) = '' then
V01 := ''
else
V01 := trim(cxLookupComboBox1.EditValue);
ClearRightTreeChecked;
SetRightTreeFromUserGrp(V01);
end;
procedure TfrmUserAttr.SetUserRightFromTree(const UserId: string);
var
i: integer;
begin
DM.UserRightDel(UserId);
for i := 0 to TV_Sub.Items.Count - 1 do
begin
if (TV_Sub.Items[i].Level = 1) and TV_Sub.Items[i].Checked then
DM.UserRightAdd(UserId, TV_Sub.Items[i].StringData2,
TV_Sub.Items[i].StringData);
end;
end;
function TfrmUserAttr.GetSysAdminNode(const SysId: string): TfcTreeNode;
var
i: integer;
begin
result := nil;
for i := 0 to TV_SubRight.Items.Count - 1 do
begin
if TV_SubRight.Items[i].Level = 1 then
if TV_SubRight.Items[i].StringData = SysId then
begin
result := TV_SubRight.Items[i];
break;
end;
end;
end;
procedure TfrmUserAttr.SetSysAdminTree;
var
Node: TfcTreeNode;
cSqlStr: string;
begin
cSqlStr := 'select a.V01,a.V02,b.V03 from T_005_L2 a, T_001 b' +
' where a.V02 *= b.V01' +
' order by a.V01';
with cds_SubMod do
begin
if Active then
Active := false;
XMLData := DM.FreeQuery(cSqlStr);
Active := true;
end;
with cds_SubMod do
begin
first;
while not eof do
begin
Node := GetSysAdminNode(trim(fieldbyname('V01').AsString));
if (Node <> nil) and (trim(fieldbyname('V02').AsString) <> '') then
begin
Node.Text := Node.Text + '(' + trim(fieldbyname('V03').AsString) + ')';
Node.StringData2 := trim(fieldbyname('V02').AsString);
Node.Checked := true;
end;
next;
end;
end;
end;
procedure TfrmUserAttr.TV_SubRightToggleCheckbox(
TreeView: TfcCustomTreeView; Node: TfcTreeNode);
begin
// TV_SubRightToggleCheckbox 勾选事件可以由 鼠标点选 和 设置节点的 Node.Checked引起
// 设置Clicked 变量是为了表明 ToggleCheckbox 是因为鼠标而触发,节点的 Node.Checked
// 被置之不理
if Clicked then
begin
Clicked := false;
if Node.Checked then
begin
if trim(Node.StringData2) = '' then
begin
Node.StringData2 := CurUser.V01;
Node.Text := '子系统管理员(' + CurUser.V03 + ')';
end
else
Node.Checked := false;
end
else
begin
if trim(Node.StringData2) = CurUser.V01 then
begin
Node.StringData2 := '';
Node.Text := '子系统管理员';
end
else
Node.Checked := true;
end;
end;
end;
procedure TfrmUserAttr.TV_SubRightMouseDown(TreeView: TfcCustomTreeView;
Node: TfcTreeNode; Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
Clicked := true;
end;
procedure TfrmUserAttr.TV_SubRightMouseUp(TreeView: TfcCustomTreeView;
Node: TfcTreeNode; Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
Clicked := false;
end;
procedure TfrmUserAttr.RzButton1Click(Sender: TObject);
var
i: smallint;
begin
ModalResult := mrCancel;
CurUser.V11 := trim(cxTextEdit1.Text);
CurUser.V03 := trim(cxTextEdit2.Text);
if CurUser.V03 = '' then
begin
TPublicFunc.ShowWarningMsg('用户姓名不能为空,请录入!');
cxTextEdit2.SetFocus;
exit;
end;
CurUser.V20 := trim(cxMemo1.Text);
CurUser.V02 := trim(cxTextEdit3.Text);
if CurUser.V02 = '' then
begin
TPublicFunc.ShowWarningMsg('用户登录名不能为空,请录入!');
cxTextEdit3.SetFocus;
exit;
end;
CurUser.V04 := trim(cxTextEdit4.Text);
if cxRadioButton1.Checked then
CurUser.V08 := 1
else
CurUser.V08 := 0;
if cxRadioButton3.Checked then
begin
CurUser.V09 := 1;
CurUser.V10 := '';
end
else
begin
CurUser.V09 := 0;
CurUser.V10 := cxDateEdit1.EditText;
end;
if cxRadioButton7.Checked then
CurUser.V12 := 2
else if cxRadioButton6.Checked then
CurUser.V12 := 1
else
CurUser.V12 := 0;
if cxCheckBox1.Checked then
CurUser.V13 := 1
else
CurUser.V13 := 0;
if cxRadioButton9.Checked then
begin
CurUser.V16 := 1;
end
else
begin
CurUser.V16 := 0;
CurUser.V17 := cxLookupComboBox1.EditValue;
end;
//将用户信息通过CurUser.SaveToDB进行存盘,成功返回 true, 失败返回 false
if CurUser.SaveToDB then
begin
//如果用户为新增用户,则还要将用户添加到 用户组
if CurUser.IsNew then
begin
if trim(CurUser.V31) <> '' then
SetUserToGrp(trim(CurUser.V01), trim(CurUser.V31));
end;
if cxRadioButton9.Checked then
begin
// 如果用户权限为独立设置 则 设置用户权限
SetUserRightFromTree(CurUser.V01);
// 另 设置用户权限更改后的 统计信息 p_004L2_Chg
DM.UserRightChg(CurUser.V01);
end
else
begin
//如果为组权限,则修改组权限
if trim(cxLookupComboBox1.Text) <> '' then
DM.GrpRightChg(trim(cxLookupComboBox1.EditValue));
end;
//先将用户邦定的IP地址清除,再重新添加到数据库
DM.UserIPDel(trim(CurUser.V01));
for i := 0 to length(EditAry) - 1 do
begin
if trim(EditAry[i].IP) <> '' then
DM.UserIPAdd(trim(CurUser.V01), trim(EditAry[i].IP));
end;
//设置用户的管理员权限,过程里判断是否勾选
SetAdminRight(CurUser.V01);
ModalResult := mrOk;
end
else
TPublicFunc.ShowWarningMsg('请检查登录名是否重复!');
end;
procedure TfrmUserAttr.cxTextEdit2Exit(Sender: TObject);
begin
if trim(cxTextEdit2.Text) = '' then
TPublicFunc.ShowWarningMsg('用户姓名不能为空,请录入!')
else
begin
CurUser.V03 := trim(cxTextEdit2.Text);
lab_Name.Caption := CurUser.V03;
end;
end;
procedure TfrmUserAttr.cxTextEdit3Exit(Sender: TObject);
begin
if trim(cxTextEdit3.Text) = '' then
TPublicFunc.ShowWarningMsg('用户登录名不能为空,请录入!')
else
begin
CurUser.V02 := trim(cxTextEdit3.Text);
lab_LoginName.Caption := CurUser.V03;
end;
end;
procedure TfrmUserAttr.SetAdminRight(const UserId: string);
var
i: integer;
begin
for i := 0 to TV_SubRight.Items.Count - 1 do
begin
if (TV_SubRight.Items[i].Level = 1) then
begin
if TV_SubRight.Items[i].Checked then
begin
if (trim(TV_SubRight.Items[i].StringData2) = 'NEW') or
(trim(TV_SubRight.Items[i].StringData2) = UserId) then
DM.SubRightChg(TV_SubRight.Items[i].StringData, UserId, '');
end
else
DM.SubRightChg(TV_SubRight.Items[i].StringData, '', '');
end;
end;
end;
procedure TfrmUserAttr.SetUserToGrp(const UserId, GrpId: string);
begin
DM.UserToGrp(GrpId, UserId);
end;
procedure TfrmUserAttr.RzPageControl1Click(Sender: TObject);
begin
CurUser.V12 := 0;
lab_LoginType.Caption := CurUser.V35;
end;
procedure TfrmUserAttr.cxRadioButton6Click(Sender: TObject);
begin
CurUser.V12 := 1;
lab_LoginType.Caption := CurUser.V35;
ChangeLoginStat;
end;
procedure TfrmUserAttr.cxRadioButton7Click(Sender: TObject);
begin
CurUser.V12 := 2;
lab_LoginType.Caption := CurUser.V35;
ChangeLoginStat;
end;
procedure TfrmUserAttr.cxRadioButton3Click(Sender: TObject);
begin
CurUser.V09 := 1;
lab_LimitDate.Caption := CurUser.V34;
end;
procedure TfrmUserAttr.cxRadioButton4Click(Sender: TObject);
begin
CurUser.V09 := 0;
lab_LimitDate.Caption := CurUser.V34;
end;
procedure TfrmUserAttr.RzButton4Click(Sender: TObject);
begin
frmChangePwd := TfrmChangePwd.Create(nil);
frmChangePwd.UserId := CurUser.V01;
frmChangePwd.lab_Name.Caption := CurUser.V03;
frmChangePwd.lab_LoginName.Caption := CurUser.V02;
if frmChangePwd.ShowModal = mrOK then
cxTextEdit4.Text := frmChangePwd.Pwd;
frmChangePwd.Free;
end;
procedure TfrmUserAttr.RzButton3Click(Sender: TObject);
begin
frmUserLog := TfrmUserLog.Create(nil);
frmUserLog.iMod := 1;
frmUserLog.UserId := CurUser.V01;
frmUserLog.cxTextEdit1.Text := CurUser.V03;
frmUserLog.ShowModal;
frmUserLog.Free;
end;
procedure TfrmUserAttr.ChangeLoginStat;
begin
if cxRadioButton5.Checked then
begin
//用户名+密码
cxTextEdit5.Enabled := false;
cxTextEdit6.Enabled := false;
RzButton5.Enabled := false;
RzButton6.Enabled := false;
end
else if cxRadioButton6.Checked then
begin
//用户名 + 口令卡密码
cxTextEdit5.Enabled := true;
cxTextEdit6.Enabled := false;
RzButton5.Enabled := true;
RzButton6.Enabled := true;
end
else if cxRadioButton7.Checked then
begin
//用户名 + 密码 + U卡
cxTextEdit5.Enabled := false;
cxTextEdit6.Enabled := true;
RzButton5.Enabled := true;
RzButton6.Enabled := false;
end;
end;
procedure TfrmUserAttr.cxRadioButton5Click(Sender: TObject);
begin
ChangeLoginStat;
end;
procedure TfrmUserAttr.RzButton5Click(Sender: TObject);
begin
if cxRadioButton6.Checked then
begin
frmChangePwdCard := TfrmChangePwdCard.Create(nil);
frmChangePwdCard.iMod := 0;
if frmChangePwdCard.ShowModal = mrOK then
begin
if CurUser.ChangeCard(frmChangePwdCard.NewId) then
cxTextEdit5.Text := frmChangePwdCard.NewId;
end;
frmChangePwdCard.Free;
end;
end;
procedure TfrmUserAttr.RzButton6Click(Sender: TObject);
var
CardId: string;
begin
CardId := trim(cxTextEdit5.Text);
if CardId <> '' then
begin
if cds_Card.Active then
cds_Card.Active := false;
cds_Card.XMLData := DM.FreeQuery('Q_Card ' + Quotedstr(CardId));
cds_Card.Active := true;
frmCustomReport := TfrmCustomReport.Create(nil);
frmCustomReport.AddDataSetX('Card', cds_Card.XMLData, '', -1, '');
frmCustomReport.ReportFileName := '口令卡打印报表.rmf';
frmCustomReport.ShowModal;
frmCustomReport.Free;
end;
end;
procedure TfrmUserAttr.XP_IpEdit1Exit(Sender: TObject);
begin
if not cxCheckBox1.Checked then
exit;
if trim((Sender as TXP_IpEdit).IP) = '' then
exit;
NewIpEdit;
end;
procedure TfrmUserAttr.NewIpEdit;
var
i: smallint;
begin
//IP控件数限制为6个
if length(EditAry) < 6 then
begin
//如果所有现存IP控件有未设置的,则不允许生成新控件
for i := 0 to length(EditAry) - 1 do
begin
if trim(EditAry[i].IP) = '' then
exit;
end;
//生成IP控件,保存为数组元素
i := length(EditAry);
setlength(EditAry, i + 1);
EditAry[i] := TXP_IpEdit.Create(self);
EditAry[i].Parent := RzGroupBox4;
with EditAry[i] do
begin
Left := 171;
Top := 112 + 25 * i;
Width := 150;
Height := 21;
ParentFont := False;
Font.Charset := GB2312_CHARSET;
Font.Color := clBlack;
Font.Height := -12;
Font.Name := '宋体';
Font.Style := [];
Color := clWhite;
TabOrder := 6 + i;
//为新生成IP控件设置退出方法
OnExit := XP_IpEdit1Exit;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -