📄 untuserrightset.~pas
字号:
unit UntUserRightSet;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, DBTables, DB, ComCtrls, ExtCtrls, StdCtrls, Buttons;
type
TfrmUserRightSet = class(TForm)
pnlTree: TPanel;
TreeView1: TTreeView;
tblEmp: TTable;
tblDpt: TTable;
qryDptEmp: TQuery;
imgPhoto1: TImageList;
pnlLeft: TPanel;
tvRight: TTreeView;
imlUser: TImageList;
bbtnOk: TBitBtn;
bbtnCancel: TBitBtn;
bbtnExit: TBitBtn;
tblDptUNIT_ID: TIntegerField;
tblDptUNIT_NAME: TStringField;
tblDptUNIT_ADDRESS: TStringField;
tblDptUNIT_PHONE: TStringField;
tblDptUNIT_MANAGER: TStringField;
tblDptCOM_FLAG: TIntegerField;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure TreeView1Click(Sender: TObject);
procedure bbtnExitClick(Sender: TObject);
procedure bbtnCancelClick(Sender: TObject);
procedure bbtnOkClick(Sender: TObject);
procedure tvRightDblClick(Sender: TObject);
private
{ Private declarations }
TempQuery,TempQuery2:Tquery;
procedure CreateUserTree;
procedure CreateAllRightTree(User_ID:integer);
public
{ Public declarations }
gQuery:TQuery;
end;
var
frmUserRightSet: TfrmUserRightSet;
implementation
uses untPub;
{$R *.dfm}
procedure TfrmUserRightSet.CreateAllRightTree(User_ID:integer);
var
TreeNode,TempNode1,TempNode2: TTreeNode;
sTempCode:string;
begin
Try
tvRight.Items.Clear;
With gQuery Do
begin
SQl.Clear;
Unprepare;
SQL.Add('select * from Ent_sys_Rights where substring(PermCode,3,2)=''00'' order by PermCode');
Prepare;
Active:= True;
//加入用户组结点
TreeNode:= tvRight.Items.AddFirst(nil,'所有权限');
TreeNode.ImageIndex:= 6;
TreeNode.SelectedIndex:= 6;
TreeNode.StateIndex:=6;
first;
While Not Eof Do
begin
TempNode1:= tvright.Items.AddChild(TreeNode,FieldbyName('PermName').AsString);
TempNode1.ImageIndex:= 8;
TempNode1.SelectedIndex:= 8;
TempNode1.StateIndex:=strtoint(FieldbyName('PermCode').AsString);
sTempCode:=copy(FieldbyName('PermCode').AsString,1,2);
With TempQuery Do
begin
SQL.Clear;
SQL.Add('select * from Ent_sys_Rights where substring(PermCode,1,2)='''+sTempCode+''' and substring(PermCode,3,2)<>''00'' order by PermCode');
Prepare;
Active:= True;
First;
While Not Eof Do
Begin
TempNode2:= tvRight.Items.AddChild(TempNode1,Fieldbyname('PermName').Asstring);
TempQuery2.SQL.Clear;
TempQuery2.SQL.Add('select * from Ent_Sys_UserRights where PermCode='''+TempQuery.FieldbyName('PermCode').AsString
+''' and USER_CODE='+inttostr(User_ID));
TempQuery2.Prepare;
TempQuery2.Active:= True;
if TempQuery2.IsEmpty then
begin
TempNode2.ImageIndex:= 13;
TempNode2.SelectedIndex:= 13;
end
else
begin
TempNode2.ImageIndex:= 14;
TempNode2.SelectedIndex:= 14;
end;
TempNode2.StateIndex:=strtoint(FieldbyName('PermCode').AsString);
sTempCode:=copy(FieldbyName('PermCode').AsString,1,2);
//加入用户结点
Next;
End;
Active:= False;
end;
TempNode1.Expanded:=true;
next;
end;
Active:= False;
end;
TreeNode := tvRight.Items.GetFirstNode;
if Treenode <> nil then
Treenode.expanded := true;
Except
//MsgBox('无法在树型控件中显示数据库中的数据!','显示',MB_ICONINFORMATION);
end;
end;
procedure TfrmUserRightSet.CreateUserTree;
var
node, newnode,TempNode: TTreeNode;
begin
//建立一个根结点,并且从表中选取可做根结点的记录,最后改变结点的属性
Node := TreeView1.Items.GetFirstNode;
//根据上级部门的值确定最上面的一级部门
// tblDpt.Filter := 'upDptID=0';
// tblDpt.Filtered := true;
try
// tblDpt.Active := true;
// tblDpt.first;
// while not tblDpt.Eof do
// begin
NewNode := TreeView1.Items.AddChild(Node, '杭州粮食局');//tblDpt.FieldByname('DptName').asstring);
//利用StateIndex保存部门的DptId
// NewNode.StateIndex := tblDpt.FieldByName('DptId').Asinteger;
NewNode.SelectedIndex := 10;
NewNode.ImageIndex := 10;
//tblDpt.Next;
// end;
except
on E: Exception do
begin
ErrorHandler(E, 'TfrmDptEmp.createtreeview');
Application.MessageBox('打开部门数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
end;
end;
//下面逐个加入下一级部门或员工的结点
Node := TreeView1.Items.GetFirstNode;
// while (node <> nil) do // and (node.SelectedIndex=0) do
//begin
//if (node.SelectedIndex mod 10) = 0 then
// begin
//tblDpt.Filter := 'upDptID=' + intToStr(Node.StateIndex);
//tblDpt.Filtered := true;
try
tblDpt.Active := true;
tblDpt.first;
while not tblDpt.eof do
begin
NewNode := TreeView1.Items.AddChild(Node, tblDpt.FieldByname('UNIT_NAME').asstring);
// 根据选择部门结点的stateindex来查找该结点所对应的部门表中的记录
NewNode.StateIndex := tblDpt.FieldByName('UNIT_ID').Asinteger;
NewNode.SelectedIndex := 0;
NewNode.ImageIndex := 1;
tblEmp.Filter := 'UNIT_ID=' + intToStr(NewNode.StateIndex);
tblEmp.Filtered := true;
tblEmp.Active := true;
tblEmp.first;
while not tblEmp.eof do
begin
TempNode := TreeView1.Items.AddChild(NewNode, tblEmp.FieldByname('NAME').asstring);
// 根据选择员工结点的stateindex来查找该结点所对应的员工表中的记录
TempNode.StateIndex := tblEmp.FieldByname('USER_CODE').asinteger;
TempNode.SelectedIndex := 3;
TempNode.ImageIndex := 2;
tblEmp.Next;
end;
tblDpt.Next;
end;
except
on E: Exception do
begin
ErrorHandler(E, 'TfrmDptEmp.createtreeview');
Application.MessageBox('打开部门或人员数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
exit;
end;
end;
Node := TreeView1.Items.GetFirstNode;
if node <> nil then
node.expanded := true;
end;
procedure TfrmUserRightSet.FormCreate(Sender: TObject);
begin
//imgPhoto1.Insert(10, _bmpUnitLogoS, nil); //加入用户图标
//imgPhoto1.Insert(11, _bmpUnitLogoS, nil); //加入用户图标
try
gQuery:= TQuery.Create(nil);
gQuery.DatabaseName:='LYDB';
TempQuery:=TQuery.create(nil);
TempQuery.DatabaseName:= 'LYDB';
TempQuery2:=TQuery.create(nil);
TempQuery2.DatabaseName:= 'LYDB';
except
On E: Exception Do
begin
// MessageBox(pchar('连接数据库有误'),pchar('连接错误'),MB_ICONINFORMATION);
end;
end;
end;
procedure TfrmUserRightSet.FormShow(Sender: TObject);
begin
try
tblDpt.Active := true;
tblEmp.Active := true;
except
on E: Exception do
begin
ErrorHandler(E, 'TfrmDptEmp.createtreeview');
Application.MessageBox('打开部门或人员数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
end;
end;
CreateUserTree;
end;
procedure TfrmUserRightSet.TreeView1Click(Sender: TObject);
begin
if TreeView1.Selected.SelectedIndex=3 then
CreateAllRightTree(TreeView1.Selected.StateIndex)
else
tvRight.Items.Clear;
end;
procedure TfrmUserRightSet.bbtnExitClick(Sender: TObject);
begin
close;
end;
procedure TfrmUserRightSet.bbtnCancelClick(Sender: TObject);
begin
if TreeView1.Selected.SelectedIndex=3 then
CreateAllRightTree(TreeView1.Selected.StateIndex)
else
tvRight.Items.Clear;
end;
procedure TfrmUserRightSet.bbtnOkClick(Sender: TObject);
var
TreeNode,NextNode:TtreeNode;
sTemp,sPermCode:string;
sUserID:string;
begin
//sUserID:='0000'+inttostr(TreeView1.Selected.StateIndex);
// sUserID:=copy(sUserID,length(sUserID)-3,4);
With gQuery Do
begin
SQl.Clear;
Unprepare;
SQL.Add('delete Ent_sys_UserRights where USER_CODE='
+inttostr(TreeView1.Selected.StateIndex));
Prepare;
ExecSQL;
end;
TreeNode := tvRight.Items.GetFirstNode;
while( Treenode <> nil) do
begin
if (TreeNode.Level=2) and (TreeNode.SelectedIndex=14) then
begin
sTemp:='00'+inttostr(TreeNode.stateindex);
sPermCode:=copy(sTemp,Length(sTemp)-8+1,8);
With gQuery Do
begin
SQl.Clear;
Unprepare;
SQL.Add('insert Ent_sys_UserRights(USER_CODE,PermCode) values ('
+inttostr(TreeView1.Selected.StateIndex)+','''+sPermCode+''') ');
Prepare;
ExecSQL;
end;
end;
TreeNode:=Treenode.GetNext;
end;
end;
procedure TfrmUserRightSet.tvRightDblClick(Sender: TObject);
begin
if tvright.Selected<>nil then
begin
if tvRight.Selected.Level=2 then
begin
if TvRight.Selected.ImageIndex=13 then
begin
TvRight.Selected.ImageIndex:= 14;
TvRight.Selected.SelectedIndex:= 14;
end
else
begin
TvRight.Selected.ImageIndex:= 13;
TvRight.Selected.SelectedIndex:= 13;
end;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -