📄 uuserattr.pas
字号:
unit uUserAttr;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzTabs, RzButton, StdCtrls, RzLabel, Grids, DBGridEh,
cxControls, cxContainer, cxEdit, cxTextEdit, cxMemo, ExtCtrls, RzPanel,
cxMaskEdit, cxDropDownEdit, cxCalendar, cxRadioGroup, cxCheckBox,
XP_IpEdit, ComCtrls, RzTreeVw, fcTreeView,
untUser, DB, DBClient, ImgList, cxLookupEdit, cxDBLookupEdit,
cxDBLookupComboBox, ActiveX;
type
TfrmUserAttr = class(TForm)
RzPageControl1: TRzPageControl;
TabSheet1: TRzTabSheet;
TabSheet2: TRzTabSheet;
RzButton1: TRzButton;
RzButton2: TRzButton;
lab_Title: TRzLabel;
RzLabel1: TRzLabel;
TabSheet3: TRzTabSheet;
TabSheet4: TRzTabSheet;
Bevel1: TBevel;
lab_Name: TRzLabel;
RzLabel2: TRzLabel;
lab_LoginName: TRzLabel;
RzLabel4: TRzLabel;
lab_LoginType: TRzLabel;
RzLabel6: TRzLabel;
lab_UseStat: TRzLabel;
RzLabel8: TRzLabel;
lab_LimitDate: TRzLabel;
RzLabel10: TRzLabel;
lab_CreateDate: TRzLabel;
RzLabel12: TRzLabel;
lab_BeginDate: TRzLabel;
RzLabel14: TRzLabel;
lab_LastDate: TRzLabel;
RzLabel16: TRzLabel;
lab_UseSysNum: TRzLabel;
RzLabel18: TRzLabel;
lab_ManageSysNum: TRzLabel;
RzGroupBox1: TRzGroupBox;
RzLabel3: TRzLabel;
cxTextEdit1: TcxTextEdit;
RzLabel5: TRzLabel;
cxTextEdit2: TcxTextEdit;
RzLabel7: TRzLabel;
cxMemo1: TcxMemo;
RzGroupBox2: TRzGroupBox;
RzGroupBox3: TRzGroupBox;
RzLabel9: TRzLabel;
cxTextEdit3: TcxTextEdit;
RzLabel11: TRzLabel;
cxTextEdit4: TcxTextEdit;
RzButton3: TRzButton;
RzButton4: TRzButton;
Panel1: TPanel;
cxRadioButton1: TcxRadioButton;
cxRadioButton2: TcxRadioButton;
cxRadioButton3: TcxRadioButton;
cxRadioButton4: TcxRadioButton;
cxDateEdit1: TcxDateEdit;
Bevel2: TBevel;
RzGroupBox4: TRzGroupBox;
cxTextEdit5: TcxTextEdit;
cxRadioButton5: TcxRadioButton;
cxRadioButton6: TcxRadioButton;
cxRadioButton7: TcxRadioButton;
cxCheckBox1: TcxCheckBox;
cxTextEdit6: TcxTextEdit;
XP_IpEdit1: TXP_IpEdit;
RzButton5: TRzButton;
RzButton6: TRzButton;
TabSheet5: TRzTabSheet;
RzGroupBox5: TRzGroupBox;
cxRadioButton8: TcxRadioButton;
cxRadioButton9: TcxRadioButton;
RzButton7: TRzButton;
TV_Sub: TfcTreeView;
RzLabel13: TRzLabel;
RzLabel15: TRzLabel;
TV_SubRight: TfcTreeView;
cds_SubSys: TClientDataSet;
cds_SubMod: TClientDataSet;
ImageList1: TImageList;
cxLookupComboBox1: TcxLookupComboBox;
cds_Sd: TClientDataSet;
cds_SdV01: TStringField;
cds_SdV02: TStringField;
ds_SD: TDataSource;
cds_Card: TClientDataSet;
procedure RzButton2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure cxRadioButton1Click(Sender: TObject);
procedure cxRadioButton2Click(Sender: TObject);
procedure RzButton7Click(Sender: TObject);
procedure cxLookupComboBox1PropertiesChange(Sender: TObject);
procedure cxRadioButton9Click(Sender: TObject);
procedure cxRadioButton8Click(Sender: TObject);
procedure TV_SubRightToggleCheckbox(TreeView: TfcCustomTreeView;
Node: TfcTreeNode);
procedure TV_SubRightMouseDown(TreeView: TfcCustomTreeView;
Node: TfcTreeNode; Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
procedure TV_SubRightMouseUp(TreeView: TfcCustomTreeView;
Node: TfcTreeNode; Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
procedure RzButton1Click(Sender: TObject);
procedure cxTextEdit2Exit(Sender: TObject);
procedure cxTextEdit3Exit(Sender: TObject);
procedure RzPageControl1Click(Sender: TObject);
procedure cxRadioButton6Click(Sender: TObject);
procedure cxRadioButton7Click(Sender: TObject);
procedure cxRadioButton3Click(Sender: TObject);
procedure cxRadioButton4Click(Sender: TObject);
procedure RzButton4Click(Sender: TObject);
procedure RzButton3Click(Sender: TObject);
procedure cxRadioButton5Click(Sender: TObject);
procedure RzButton5Click(Sender: TObject);
procedure RzButton6Click(Sender: TObject);
procedure XP_IpEdit1Exit(Sender: TObject);
private
{ Private declarations }
// TV_SubRightToggleCheckbox 勾选事件可以由 鼠标点选 和 设置节点的 Node.Checked引起
// 设置Clicked 变量是为了表明 ToggleCheckbox 是因为鼠标而触发,节点的 Node.Checked
// 被置之不理
Clicked: boolean;
//动态IP控件数组
EditAry: array of TXP_IpEdit;
//动态生成IP编辑控件
procedure NewIpEdit;
//初始化数据
procedure InitData;
//初始化权限树
procedure InitTree;
//设置权限组下拉列表框
procedure FillCombobox;
//根据 登陆方式的变化 设置控件的状态
procedure ChangeLoginStat;
//根据子系统ID取得子系统节点,不限定哪个树控件,现有2个树控件
function GetSysNode(TV: TfcTreeView; const SysId: string): TfcTreeNode;
//根据子系统ID和模块ID,取得子系统模块节点
function GetRightNode(const SysId, ModId: string): TfcTreeNode;
//根据子系统ID取得子系统管理员节点
function GetSysAdminNode(const SysId: string): TfcTreeNode;
//设置子系统管理员权限树
procedure SetSysAdminTree;
//根据独立权限表设置用户的权限
procedure SetRightTreeFromUser(const UserId: string);
//根据组权限设置用户权限
procedure SetRightTreeFromUserGrp(const GrpId: string);
//清除子系统模块权限树勾选标记
procedure ClearRightTreeChecked;
//由权限树设置用户的权限
procedure SetUserRightFromTree(const UserId: string);
//设置子系统管理员的权限
procedure SetAdminRight(const UserId: string);
// 将用户添加到组
procedure SetUserToGrp(const UserId, GrpId: string);
public
{ Public declarations }
CurUser: TUser;
end;
//使用线程 初始化 用户数据
TInitThread = class(TThread)
protected
procedure Execute; override;
end;
var
frmUserAttr: TfrmUserAttr;
implementation
uses untDM, uRightGrp, untPublic, uChangePwd, uUserLog, uChangePwdCard,
untCustomReport;
{$R *.dfm}
procedure TfrmUserAttr.RzButton2Click(Sender: TObject);
begin
ModalResult := mrCancel;
close;
end;
procedure TfrmUserAttr.FormCreate(Sender: TObject);
begin
lab_Name.Caption := '';
lab_LoginName.Caption := '';
lab_LoginType.Caption := '';
lab_UseStat.Caption := '';
lab_LimitDate.Caption := '';
lab_CreateDate.Caption := '';
lab_BeginDate.Caption := '';
lab_LastDate.Caption := '';
lab_UseSysNum.Caption := '';
lab_ManageSysNum.Caption := '';
Clicked := false;
setlength(EditAry, 1);
EditAry[0] := XP_IpEdit1;
RzPageControl1.ActivePageIndex := 0;
end;
procedure TfrmUserAttr.FormShow(Sender: TObject);
var
i: smallint;
begin
if CurUser.IsNew then
begin
RzButton3.Enabled := false;
RzButton4.Enabled := false;
end;
TInitThread.Create(False);
if CurUser.IpCount >= 1 then
begin
XP_IpEdit1.IP := CurUser.IpAry[0];
for i := 1 to CurUser.IpCount - 1 do
begin
NewIpEdit;
EditAry[i].IP := CurUser.IpAry[i];
end;
end;
end;
procedure TfrmUserAttr.cxRadioButton1Click(Sender: TObject);
begin
cxRadioButton3.Enabled := true;
cxRadioButton4.Enabled := true;
cxDateEdit1.Enabled := true;
CurUser.V08 := 1;
lab_UseStat.Caption := CurUser.V33;
end;
procedure TfrmUserAttr.cxRadioButton2Click(Sender: TObject);
begin
cxRadioButton3.Enabled := false;
cxRadioButton4.Enabled := false;
cxDateEdit1.Enabled := false;
CurUser.V08 := 0;
lab_UseStat.Caption := CurUser.V33;
end;
{ TInitThread }
procedure TInitThread.Execute;
begin
inherited;
FreeOnTerminate := true;
CoInitialize(nil);
frmUserAttr.FillCombobox;
frmUserAttr.InitTree;
frmUserAttr.InitData;
frmUserAttr.SetSysAdminTree;
CoUninitialize;
end;
procedure TfrmUserAttr.InitData;
begin
//从用户对象信息设置 用户信息摘要
lab_Name.Caption := CurUser.V03;
lab_LoginName.Caption := CurUser.V02;
lab_LoginType.Caption := CurUser.V35;
lab_UseStat.Caption := CurUser.V33;
lab_LimitDate.Caption := CurUser.V34;
lab_CreateDate.Caption := CurUser.V05;
lab_BeginDate.Caption := CurUser.V06;
lab_LastDate.Caption := CurUser.V07;
lab_UseSysNum.Caption := inttostr(CurUser.V18);
lab_ManageSysNum.Caption := inttostr(CurUser.V19);
//设置单位信息
cxTextEdit1.Text := CurUser.V11;
//设置用户姓名
cxTextEdit2.Text := CurUser.V03;
//设置备注
cxMemo1.Text := CurUser.V20;
//设置登陆名
cxTextEdit3.Text := CurUser.V02;
//设置密码
cxTextEdit4.Text := CurUser.V04;
//开通状态: 1 为开通,0 为关闭
if CurUser.V08 = 1 then
begin
//开通状态下
cxRadioButton1.Checked := true;
cxRadioButton3.Enabled := true;
cxRadioButton4.Enabled := true;
cxDateEdit1.Enabled := true;
//开通期限类别: 1永久,0 截止到一日期
if CurUser.V09 = 1 then
cxRadioButton3.Checked := true
else
begin
cxRadioButton4.Checked := true;
cxDateEdit1.EditText := CurUser.V10;
end;
end
else
begin
//关闭状态
cxRadioButton2.Checked := true;
cxRadioButton3.Checked := false;
cxRadioButton4.Checked := false;
cxRadioButton3.Enabled := false;
cxRadioButton4.Enabled := false;
cxDateEdit1.Enabled := false;
cxDateEdit1.EditText := '';
end;
// 登陆方式
case CurUser.V12 of
0: cxRadioButton5.Checked := true;
1: cxRadioButton6.Checked := true;
2: cxRadioButton7.Checked := true;
end;
//根据登陆方式改变相关控件状态
ChangeLoginStat;
//如果用户有口令卡,则设置口令卡控件
if CurUser.PCard <> nil then
cxTextEdit5.Text := CurUser.PCard.V01;
//IP网址绑定
if CurUser.V13 = 1 then
cxCheckBox1.Checked := true
else
cxCheckBox1.Checked := false;
// 权限设置方式:1 独立设置,0 同组权限
if CurUser.V16 = 1 then
begin
//独立设置
cxRadioButton9.Checked := true;
//如果用户不是新用户(新用户编号在存盘前为空),则设置用户的独立权限
if not CurUser.IsNew then
SetRightTreeFromUser(CurUser.V01);
end
else
begin
cxRadioButton8.Checked := true;
//如果用户不是新用户(新用户编号在存盘前为空),则根据组权限设置用户权限
if not CurUser.IsNew then
begin
cxLookupComboBox1.EditValue := CurUser.V17;
SetRightTreeFromUserGrp(CurUser.V17);
end;
end;
end;
procedure TfrmUserAttr.InitTree;
var
Node: TfcTreeNode;
begin
with cds_SubSys do
begin
if Active then
Active := false;
XMLData := DM.FreeQuery('select * from T_005 order by V01');
Active := true;
end;
with cds_SubMod do
begin
if Active then
Active := false;
XMLData := DM.FreeQuery('select * from T_005_L order by V01,V02');
Active := true;
end;
//初始化权限树
with cds_SubSys do
begin
first;
while not eof do
begin
//生成子系统权限树中子系统节点
Node := TV_Sub.Items.AddChild(nil, trim(fieldbyname('V02').AsString));
Node.StringData := trim(fieldbyname('V01').AsString);
Node.ImageIndex := 0;
//生成管理员权限树中子系统节点
Node := TV_SubRight.Items.AddChild(nil,
trim(fieldbyname('V02').AsString));
Node.StringData := trim(fieldbyname('V01').AsString);
Node.StringData2 := trim(fieldbyname('V02').AsString);
Node.ImageIndex := 0;
//生成管理员权限树中子系统管理员节点
Node := TV_SubRight.Items.AddChild(Node, '子系统管理员');
Node.StringData := trim(fieldbyname('V01').AsString);
Node.CheckboxType := tvctCheckbox;
Node.ImageIndex := -1;
next;
end;
end;
TV_SubRight.FullExpand;
//生成子系统权限树的子系统模块节点
with cds_SubMod do
begin
first;
while not eof do
begin
Node := TV_Sub.Items.AddChild(
GetSysNode(TV_Sub, trim(fieldbyname('V01').AsString)),
trim(fieldbyname('V03').AsString));
Node.StringData := trim(fieldbyname('V02').AsString);
Node.StringData2 := trim(fieldbyname('V01').AsString);
Node.CheckboxType := tvctCheckbox;
Node.ImageIndex := -1;
next;
end;
end;
TV_Sub.FullExpand;
end;
function TfrmUserAttr.GetSysNode(TV: TfcTreeView; const SysId: string):
TfcTreeNode;
var
i: integer;
begin
result := nil;
for i := 0 to TV.Items.Count - 1 do
begin
if TV.Items[i].Level = 0 then
if TV.Items[i].StringData = SysId then
begin
result := TV.Items[i];
break;
end;
end;
end;
procedure TfrmUserAttr.FillCombobox;
begin
if cds_Sd.Active then
cds_Sd.Close;
cds_Sd.XMLData := DM.FreeQuery('select V01,V02 from T_004 order by V01');
cds_Sd.Active := true;
end;
procedure TfrmUserAttr.RzButton7Click(Sender: TObject);
var
V01: string;
begin
if trim(cxLookupComboBox1.Text) = '' then
V01 := ''
else
V01 := trim(cxLookupComboBox1.EditValue);
frmRightGrp := TfrmRightGrp.Create(nil);
frmRightGrp.ShowModal;
frmRightGrp.Free;
FillCombobox;
cxLookupComboBox1.EditValue := V01;
end;
procedure TfrmUserAttr.SetRightTreeFromUser(const UserId: string);
var
Node: TfcTreeNode;
cSqlStr: string;
begin
cSqlStr := 'select * from T_004_L2 where V01=' + QuotedStr(UserId) +
' 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;
procedure TfrmUserAttr.SetRightTreeFromUserGrp(const GrpId: string);
var
Node: TfcTreeNode;
cSqlStr: string;
begin
if trim(GrpId) = '' then
exit;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -