📄 rygl.pas
字号:
unit rygl;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBTables, DBCtrls, StdCtrls, Mask, Db, ImgList, ComCtrls, Buttons,
ExtCtrls, Menus, Grids, DBGrids, TFlatButtonUnit, TFlatComboBoxUnit;
type
TFormRygl = class(TForm)
QueryTmp1: TQuery;
QueryTmp2: TQuery;
TreeViewRy: TTreeView;
Splitter1: TSplitter;
Panel1: TPanel;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
QueryTmp3: TQuery;
ImageList1: TImageList;
Querytem4: TQuery;
Query_City: TQuery;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
TreeView_1: TTreeView;
TreeView1: TTreeView;
Splitter2: TSplitter;
Panel5: TPanel;
Panel6: TPanel;
TreeView_2: TTreeView;
TreeView2: TTreeView;
BitBtnClose: TFlatButton;
procedure FormShow(Sender: TObject);
procedure TreeViewRyChange(Sender: TObject; Node: TTreeNode);
procedure DBGrid1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
procedure Edit6KeyPress(Sender: TObject; var Key: Char);
procedure Edit4KeyPress(Sender: TObject; var Key: Char);
procedure N1Click(Sender: TObject);
procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure TreeView2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure TreeView2DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure TreeViewRyExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
procedure FormDestroy(Sender: TObject);
procedure BitBtnCloseClick(Sender: TObject);
private
{ Private declarations }
//是否重建树的标志
P_Refresh :boolean;
//建树的第一层
procedure InitTreeViewRY;
//删除人员所有权限
procedure DeleteAllQX(GH:string);
procedure InsertAccessMenu(GH:string;ID:integer);
procedure Insert_Set_Access_Fun(GH:string; FUN_ID:integer);
procedure insert_init_QX;
procedure clearXH(Tree:TTreeView);
procedure dgfather_InsertSetAccess(HT2:TTreeNode);
procedure dgChild_InsertSetAccess(HT2:TTreeNode);
procedure InitTreeView_QX(TreeView:TTreeView;GH:string);
procedure InsertTreeViewMenu(TreeView:TTreeView;GH:string);
procedure InsertTreeViewFun(TreeView:TTreeView;GH:string);
procedure InsertFun(TreeView:TTreeView;FunLeaf:string;Form_Code:string);
procedure locateTree(TreeView:TTreeView;Node:TTreeNode);
procedure dgChild_DeleteAccess(HT1:TTreeNode);
procedure DeleteAccessmenu(GH:string;ID:Integer);
procedure Delete_Set_Access_Fun(GH:string;ID:integer);
Function getMenu_ID(FORM_CODE:string):Integer;
//*********************曾庆顺********************************
//释放节点
procedure FreeNode(treeview :TTreeview);
//插入节点
//不展开树
Function InsertTreeNode(treeview :TTreeview;SNode:TTreeNode;
pLabel:string;pData:string):TTreeNode;
//树展开时临时地加上该城市下局向的用户
ProceDure TreeExpand(Treeview :TTreeview;SNode:TTreeNode);
//***********************************************************
public
{ Public declarations }
P_jxdm,P_cityno,P_room :string;
TmpNode:TTreeNode;
end;
var
FormRygl: TFormRygl;
implementation
uses Main,unit_public, dmmain;
{$R *.DFM}
procedure TFormRygl.FormShow(Sender: TObject);
begin
P_Refresh :=true;
TreeViewRy.Items.clear;
InitTreeViewRY; //初始化人员树
if JBDM=0
then InitTreeView_QX(TreeView_2,'') //可分配的权限树
else InitTreeView_QX(TreeView_2,GH); //可分配的权限树
TreeView2.Items:=TreeView_2.Items;
clearXH(TreeView2);
P_Refresh :=false;
end;
procedure TFormRygl.clearXH(Tree:TTreeView);
var i,m,n:integer;
begin//清除叶子上的序号
for i:=0 to Tree.Items.Count-1 do
begin
m:=Pos('.',Tree.Items[i].Text)+Pos(':',Tree.Items[i].Text)+Pos('*',Tree.Items[i].Text)+1;
n:=length(Tree.Items[i].Text);
Tree.Items[i].Text:=copy(Tree.Items[i].Text,m,n);
end;{for}
end;
procedure TFormRygl.InitTreeViewRy;
var
NewJXNode: TTreeNode;
ljx,lcityno :string;
begin
//加市
with QueryTmp1 do
begin
close;//局向
sql.clear;
//sql.add('select OFF_NO_HOME,COUNTYNAME from T_D_COUNTY');
sql.add('select CITYNO,CITYNAME from T_D_CITY');
open;
first;
while not Eof do
begin
ljx :=Fields[0].AsString;
lcityno :=Fields[1].AsString;
//先把第一层建出来
NewJXNode:=
InsertTreeNode(TreeViewRy,nil,lcityno,ljx);
//TreeViewRy.Items.Add(nil,Fields[0].AsString+':'+Fields[1].AsString);
NewJXNode.ImageIndex := 0;
NewJXNode.SelectedIndex := 1;
//***************判断该市下有没县有没有,如果速度慢去掉*****************
//QueryTmp2.close;
//QueryTmp2.sql.text :='select count(OFF_NO_HOME) from T_D_COUNTY where CITYNO='+#39+ljx+#39;
//QueryTmp2.open;
//if QueryTmp2.fields[0].asinteger >0 then
//begin
//加入临时结点来强行加上+号
InsertTreeNode(TreeViewRy,NewJXNode,'TEMP'
,'TEMP');
//end;
//************************************************************
//这样建树肯定不行的,一次行建树了,慢!
{
if (jbdm=0)or(jx=QueryTmp1.Fields[0].AsInteger) then
InitJxry(NewJxNode,QueryTmp1.Fields[0].AsInteger);//增加单个局向内的人员 }
Next;
end;{while}
end;
//TreeViewRY.Selected := TreeViewRY.Items[0];
end;
procedure TFormRygl.TreeViewRyChange(Sender: TObject; Node: TTreeNode);
var
str :string;
begin
if Node = nil then exit;
TreeView_1.Items.Clear;
TreeView1.Items.Clear;
case Node.Level of
0:
begin
//Label7.Caption:=' 局 向 :'+Node.Text;
//P_Jxdm:=StrToint(copy(Node.Text,1,pos(':',Node.Text)-1));
//ClearRyEdit;
//SetRyEnable;
end;
1:begin
//得到城市编码和局向编码h和关系室
str :=Pchar(Node.data);
p_jxdm :=copy(str,1,pos('#',str)-1);
p_cityno :=copy(str,pos('#',str)+1,length(str)-pos('#',str));
end;
2:begin
//得到城市编码和局向编码h和关系室
str :=Pchar(Node.data);
p_jxdm :=copy(str,1,pos('#',str)-1);
str :=copy(str,pos('#',str)+1,length(str)-pos('#',str));
p_cityno :=copy(str,1,pos('#',str)-1);
P_room :=copy(str,pos('#',str)+1,length(str)-pos('#',str));
end;
3:
begin
//得到城市编码和局向编码h和关系室
str :=Pchar(Node.Parent.data);
p_jxdm :=copy(str,1,pos('#',str)-1);
str :=copy(str,pos('#',str)+1,length(str)-pos('#',str));
p_cityno :=copy(str,1,pos('#',str)-1);
P_room :=copy(str,pos('#',str)+1,length(str)-pos('#',str));
//
InitTreeView_QX(TreeView_1,Pchar(Node.data)); //权限树
TreeView1.Items:=TreeView_1.Items;
ClearXH(TreeView1);
end;
end;
end;
procedure TFormRygl.insert_init_QX;
begin//设置初始权限
with QueryTmp2 do
begin
close;
sql.clear;
sql.add('select INITID,OBJECT');
sql.add(' from t_d_init');
sql.add(' where (LEVEL_SEQ=:nJBDM)');
ParamByName('nJBDM').AsInteger:=100;
open;
end;{with}
while not QueryTmp2.eof do
begin
if QueryTmp2.fields[1].AsString='菜单' then
insertaccessmenu(pchar(TreeViewRy.Selected.data),QueryTmp2.fields[0].AsInteger);
if QueryTmp2.fields[1].AsString='功能' then
Insert_Set_Access_Fun(pchar(TreeViewRy.Selected.data),QueryTmp2.fields[0].AsInteger);
QueryTmp2.next;
end;{while}
end;
procedure TFormRygl.insertaccessmenu(GH:string;ID:integer);
begin
with QueryTmp1 do
begin
close;
sql.clear;
sql.add('select count(*)');
sql.add(' from t_d_menugrant');
sql.add(' where (WK_NO=:sTmp1)');
sql.add(' and (ID=:nTmp2)');
ParamByName('sTmp1').AsString:=GH;
ParamByName('nTmp2').AsInteger:=ID;
open;
if Fields[0].AsInteger>=1 then exit;
end;
try
Dm_Main.Databasedh.StartTransaction;
with QueryTmp1 do
begin
close;
sql.clear;
sql.add('insert into t_d_menugrant');
sql.add(' (WK_NO,GRANTCODE,ID)');
sql.add('values (:GH,SEQ_GRANTCODE.nextval,:ID)');
ParamByName('GH').AsString:=GH;
ParamByName('ID').AsInteger:=ID;
execsql;
end;
Dm_Main.Databasedh.Commit;
except
Dm_Main.Databasedh.Rollback;
Application.MessageBox('系统在执行过程中发生错误!','提示',MB_ICONINFORMATION);
exit;
end;
end;
procedure TFormRygl.Insert_Set_Access_Fun(GH:string; FUN_ID:integer);
begin
with QueryTmp1 do
begin
close;
sql.clear;
sql.add('select count(*) from t_d_fungrant');
sql.add(' where (WK_NO=:GH)');
sql.add(' and (FUN_ID=:FUN_ID)');
ParamByName('GH').AsString:=GH;
ParamByName('FUN_ID').AsInteger:=FUN_ID;
open;
if Fields[0].AsInteger>0 then exit;
end;
try
Dm_Main.Databasedh.StartTransaction;
with QueryTmp1 do
begin
close;
sql.clear;
sql.add('insert into t_d_fungrant');
sql.add(' (WK_NO,ID,FUN_ID)');
sql.add('values (:GH,SEQ_FUNGRANTID.nextval,:FUN_ID)');
ParamByName('GH').AsString:=GH;
ParamByName('FUN_ID').AsInteger:=FUN_ID;
execsql;
end;
Dm_Main.Databasedh.Commit;
except
Dm_Main.Databasedh.Rollback;
Application.MessageBox('系统在执行过程中发生错误!','提示',MB_ICONINFORMATION);
exit;
end;
end;
procedure TFormRygl.DBGrid1DragOver(Sender, Source: TObject;
X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := Source is TDBGrid;
end;
procedure TFormRygl.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9',#8,#13]) then
key:=#0;
end;
procedure TFormRygl.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9',#8,#13,#189]) then
key:=#0;
end;
procedure TFormRygl.DeleteAllQX(GH:string);
begin//删除这一工号的所有权限
with QueryTmp1 do
begin //删除功能
close;
sql.clear;
sql.add('delete t_d_menugrant');
sql.add(' where (WK_NO=:Gh)');
ParamByName('Gh').ASString:=GH;
execsql;
end;
with QueryTmp1 do
begin //删除功能
close;
sql.clear;
sql.add('delete t_d_fungrant');
sql.add(' where (WK_NO=:Gh)');
ParamByName('Gh').ASString:=GH;
execsql;
end;
end;
procedure TFormRygl.N1Click(Sender: TObject);
begin
if JBDM<>0 then
begin
Application.MessageBox('对不起,只有系统管理员才可做这项操作!','错误',MB_OK);
exit;
end;
if TreeViewRy.Selected.Level=0 then
begin
Application.MessageBox('对不起,请选择人员!','错误',MB_OK);
exit;
end;
DeleteAllQX(copy(TreeViewRy.Selected.text,1,pos(':',TreeViewRy.Selected.text)-1));
insert_init_QX;
TreeViewRyChange(Sender,TreeViewRy.Selected);//刷新
end;
procedure TFormRygl.dgfather_InsertSetAccess(HT2:TTreeNode);
var HTTmp:TTreeNode;
QX_ID:Integer;
begin//递归插入权限设置
HTTmp:=HT2.Parent;
if HTTmp<>nil then dgfather_InsertSetAccess(HTTmp);
if pos(':',HT2.text)<>0 then exit;
if pos('.',HT2.text)<>0 then
begin
QX_ID:=StrToInt(copy(HT2.text,1,pos('.',HT2.text)-1));
insertaccessmenu(pchar(TreeViewRy.Selected.data),QX_ID);
end
else
begin
QX_ID:=StrToInt(copy(HT2.text,1,pos('*',HT2.text)-1));
Insert_Set_Access_Fun(pchar(TreeViewRy.Selected.data),QX_ID);
end;
end;
procedure TFormRygl.dgChild_InsertSetAccess(HT2:TTreeNode);
var HTTmp:TTreeNode;
QX_ID:Integer;
begin//递归孩子
if pos(':',HT2.text)=0 then
begin
if pos('.',HT2.text)<>0 then
begin
QX_ID:=StrToInt(copy(HT2.text,1,pos('.',HT2.text)-1));
insertaccessmenu(pchar(TreeViewRy.Selected.data),QX_ID);
end
else
begin
QX_ID:=StrToInt(copy(HT2.text,1,pos('*',HT2.text)-1));
Insert_Set_Access_Fun(pchar(TreeViewRy.Selected.data),QX_ID);
end;
end;
HTTmp:=HT2.getFirstChild;
while HTTmp<>nil do
begin
dgChild_InsertSetAccess(HTTmp);
HTTmp:=HT2.GetNextChild(HTTmp);
end;{while}
end;
procedure TFormRygl.InsertTreeViewMenu(TreeView:TTreeView;GH:string);
var Node:TTreeNode;
i:integer;
begin//插入有权限的菜单
with QueryTmp1 do
begin
close;
sql.clear;
if gh<>'' then
begin
sql.add('select to_Char(a.ID)||''.''||a.Menu_Name,a.UP_MENU_NO ');
sql.add(' from t_d_menuset a,t_d_menugrant b');
sql.add(' where (a.ID=b.ID)');
sql.add(' and (b.WK_NO=:GH)');
sql.add(' order by a.ID');
ParamByName('GH').AsString:=GH;
end
else
begin
sql.add('select to_Char(ID)||''.''||Menu_Name,UP_MENU_NO ');
sql.add(' from t_d_menuset');
sql.add(' order by ID');
end;
open;
while not eof do
begin
Node:=Nil;
for i:=0 to TreeView.Items.Count-1 do
begin
if copy(TreeView.Items[i].Text,1,Pos('.',TreeView.Items[i].Text))=Fields[1].ASString+'.' then
begin
Node:=TreeView.Items[i];
break;
end;{if}
end;{for}
Node:=TreeView.Items.AddChild(Node,Fields[0].AsString);
Node.ImageIndex:=0;
Node.SelectedIndex:=1;
next;
end;{while}
end;
end;
Function TFormRygl.getMenu_ID(FORM_CODE:string):Integer;
begin
with QueryTmp3 do
begin
close;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -