📄 rygl.pas
字号:
sql.clear;
sql.add('select ID from t_d_menuset ');
sql.add(' where FORM_CODE=:FORM_CODE');
ParamByName('FORM_CODE').Asstring:=FORM_CODE;
open;
result:=Fields[0].AsInteger;
end;
end;
procedure TFormRygl.InsertFun(TreeView:TTreeView;FunLeaf:string;Form_Code:string);
var FormLeaf:string;
i,Menu_ID:integer;
newNode:TTreeNode;
begin
with QueryTmp2 do
begin
close;
sql.clear;
sql.add('select FORM_CODE||'':''||FORM_NAME,FORM_CODE ');
sql.add(' from T_D_FormSet');
sql.add(' where (FORM_CODE=:Code)');
ParamBYName('CODE').ASString:=Form_Code;
open;
FormLeaf:=Fields[0].AsString;
Menu_ID:=getMenu_ID(Fields[1].AsString);
end;{with}
for i:=0 to TreeView.Items.Count-1 do
begin //已经有窗体结点时 直接插入功能结点
if TreeView.Items[i].text=FormLeaf then
begin
newNode:=TreeView.Items.AddChild(TreeView.Items[i],FunLeaf);
newNode.ImageIndex:=4;
newNode.SelectedIndex:=5;
exit;
end;{if}
end;{for}
for i:=0 to TreeView.Items.Count-1 do
begin //没有窗体结点时 先插入窗体结点,再插入功能结点
if copy(TreeView.Items[i].text,1,pos('.',TreeView.Items[i].text))=IntToStr(Menu_ID)+'.' then
begin
newNode:=TreeView.Items.AddChild(TreeView.Items[i],FormLeaf);
newNode.ImageIndex:=2;
newNode.SelectedIndex:=3;
newNode:=TreeView.Items.AddChild(newNode,FunLeaf);
newNode.ImageIndex:=4;
newNode.SelectedIndex:=5;
exit;
end;{if}
end;{for}
end;
procedure TFormRygl.InsertTreeViewFun(TreeView:TTreeView;GH:string);
begin//插入有权限的窗体、功能
with QueryTmp1 do
begin
close;
sql.clear;
if GH<>'' then
begin
sql.add('select to_Char(a.FUN_ID)||''*''||a.FUN_NAME,a.Form_Code');
sql.add(' from t_d_funset a,t_d_fungrant b');
sql.add(' where (a.FUN_ID=b.Fun_ID)');
sql.add(' and (b.WK_NO=:GH)');
sql.add(' order by a.FUN_ID');
ParamByName('GH').AsString:=GH;
end
else
begin
sql.add('select to_Char(FUN_ID)||''*''||FUN_NAME,Form_Code');
sql.add(' from t_d_funset');
sql.add(' order by FUN_ID');
end;
open;
while not eof do
begin
InsertFun(TreeView,Fields[0].AsString,Fields[1].AsString);
next;
end;{while}
end;
end;
procedure TFormRygl.InitTreeView_QX(TreeView:TTreeView;GH:string);
begin//可分配的权限树
TreeView.Items.Clear;
InsertTreeViewMenu(TreeView,GH); //插入有权限的菜单
InsertTreeViewFun(TreeView,GH); //插入有权限的窗体、功能
end;
procedure TFormRygl.locateTree(TreeView:TTreeView;Node:TTreeNode);
var i:integer;
TmpNode1,TmpNode2:TTreeNode;
begin//定位叶子
for i:=0 To TreeView.Items.Count-1 do
begin
TmpNode1:=TreeView.Items[i];
TmpNode2:=Node;
while (TmpNode1.Text=TmpNode2.Text) do
begin
TmpNode1:=TmpNode1.Parent;
TmpNode2:=TmpNode2.Parent;
if (TmpNode1=nil)or(TmpNode2=nil) then break;
end;
if (TmpNode1=nil)and(TmpNode2=nil) then
begin
TreeView.Selected:=TreeView.Items[i];
exit;
end;{if}
end;{for}
end;
procedure TFormRygl.TreeView1DragDrop(Sender, Source: TObject; X,Y: Integer);
var HT2:TTreeNode;
GH:string;
begin
//****如果不是给人员加权限就不要让他拖动了吧********
if TreeViewRy.Selected =nil then exit;
if TreeViewRy.Selected.Level <>3 then
begin
MessageDlg('请选择人员!',mtConfirmation, [mbYes], 0);
exit;
end;
//***************************************************
if Source<>TreeView2 then Exit;
HT2:=TreeView2.Selected;
if (HT2=nil) then Exit;
HT2:=TreeView_2.Items[HT2.AbsoluteIndex];
dgfather_InsertSetAccess(HT2);
dgChild_InsertSetAccess(HT2);
GH:=pchar(TreeViewRy.Selected.data);
TreeView_1.Items.Clear;
TreeView1.Items.Clear;
InitTreeView_QX(TreeView_1,GH); //权限树
TreeView1.Items:=TreeView_1.Items;
ClearXH(TreeView1);
locateTree(TreeView1,TreeView2.Selected); //定位叶子
end;
procedure TFormRygl.TreeView1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := Source is TTreeView;
end;
procedure TFormRygl.TreeView2DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := Source is TTreeView;
end;
procedure TFormRygl.DeleteAccessmenu(GH:string;ID:Integer);
begin
try
Dm_Main.Databasedh.StartTransaction;
with QueryTmp1 do
begin
close;
sql.clear;
sql.add('delete t_d_menugrant');
sql.add(' where (WK_NO=:GH)');
sql.add(' and (ID=: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.Delete_Set_Access_Fun(GH:string;ID:integer);
begin
try
Dm_Main.Databasedh.StartTransaction;
with QueryTmp1 do
begin
close;
sql.clear;
sql.add('delete t_d_fungrant');
sql.add(' where WK_NO=:Gh');
sql.add(' and Fun_Id=:Fun_Id');
ParamByName('GH').AsString:=GH;
ParamByName('Fun_Id').AsInteger:=ID;
ExecSql;
end;
Dm_Main.Databasedh.Commit;
except
Dm_Main.Databasedh.Rollback;
Application.MessageBox('系统在执行过程中发生错误!','提示',MB_ICONINFORMATION);
exit;
end;
end;
procedure TFormRygl.dgChild_DeleteAccess(HT1:TTreeNode);
var T_Node:TTreeNode;
QX_ID:Integer;
begin//递归删除权限
T_Node:=HT1.getFirstChild;
while T_Node<>nil do
begin
dgChild_DeleteAccess(T_Node);
T_Node:=HT1.GetNextChild(T_Node);
end;{while}
if pos(':',HT1.text)<>0 then exit;
if pos('.',HT1.text)<>0 then
begin
QX_ID:=StrToInt(copy(HT1.text,1,pos('.',HT1.text)-1));
DeleteAccessmenu(Pchar(TreeViewRy.Selected.data),QX_ID);
end
else
begin
QX_ID:=StrToInt(copy(HT1.text,1,pos('*',HT1.text)-1));
Delete_Set_Access_Fun(Pchar(TreeViewRy.Selected.data),QX_ID);
end;
end;
procedure TFormRygl.TreeView2DragDrop(Sender, Source: TObject; X, Y: Integer);
var HT1:TTreeNode;
begin
//****如果不是给人员加权限就不要让他拖动了吧********
if TreeViewRy.Selected =nil then exit;
if TreeViewRy.Selected.Level <>3 then
begin
MessageDlg('请选择人员!',mtConfirmation, [mbYes], 0);
exit;
end;
//***************************************************
if Source<>TreeView1 then Exit;
HT1:=TreeView1.Selected;
if HT1=nil then Exit;
HT1:=TreeView_1.Items[HT1.AbsoluteIndex];
dgChild_DeleteAccess(HT1);
locateTree(TreeView2,TreeView1.Selected); //定位叶子
HT1.Delete;
TreeView1.Selected.Delete;
end;
procedure TFormRygl.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := CaFree;
end;
procedure TFormRygl.FreeNode(treeview: TTreeview);
var
i:integer;
pnode:pchar;
begin
FOR i:=0 to TreeView.Items.Count - 1 do
begin
if TreeView.Items[i].Data<>nil then
begin
pnode:=pchar(TreeView.Items[i].Data);
FreeMem(pnode);
end;
end;
end;
function TFormRygl.InsertTreeNode(treeview:TTreeview;SNode:TTreeNode;pLabel,
pData: string): TTreeNode;
var lNode:TTreeNode;
lData:pchar;
lChildNode:TTreeNode;
begin
//--------------------------------------------------------
//如果标签长度>255只取255
if length(pLabel) >255 then pLabel :=copy(pLabel,0,255);
//如果节点指针不为''
if pData <> '' then
begin
GetMem(lData,length(pData)+1);
move(pData[1],lData^,length(pData)+1);
end
else lData:=nil;
lNode:=TreeView.Items.AddChildObject(SNode,pLabel,lData);
//lNode.Selected:=True;
result:=lNode;
end;
//树展开时临时地加上该城市下局向的用户
procedure TFormRygl.TreeExpand(Treeview: TTreeview; SNode: TTreeNode);
var
lTreeNode,NewRyNode,NewJXNode:TTreeNode;
str1,str2,str3,str4 :string;
begin
//如果是临时结点就删除
lTreeNode :=SNode.getFirstChild;
if lTreeNode=nil then exit;
if lTreeNode.Text<>'TEMP' then exit;
if lTreeNode.Text='TEMP' then
lTreeNode.Delete;
//t_d_county县
case SNode.Level of
0:begin
with QueryTmp1 do
begin
close;
QueryTmp1.sql.text :='select OFF_NO_HOME,CITYNO,HOME_NAME from T_D_COUNTY where CITYNO='+#39+pchar(SNode.Data)+#39;
open;
first;
while not Eof do
begin
str1 :=Fields[0].AsString;
str2 :=Fields[1].AsString;
str3 :=Fields[2].AsString;
//先把第一层建出来
NewJXNode:=
InsertTreeNode(TreeViewRy,SNode,str3,str1+'#'+str2);
//TreeViewRy.Items.Add(nil,Fields[0].AsString+':'+Fields[1].AsString);
NewJXNode.ImageIndex := 0;
NewJXNode.SelectedIndex := 1;
//***************判断该县下有没关系室有没有,如果速度慢去掉*****************
//QueryTmp2.close;
//QueryTmp2.sql.text :='select count(ROOMID) from T_D_ROOM '+
//' where CITYNO='+#39+str2+#39+' and OFF_NO_HOME='+#39+str1+#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;
end;
1:begin //加关系室
with QueryTmp1 do
begin
close;
QueryTmp1.sql.text :=
'select ROOMID,OFF_NO_HOME,CITYNO,ROOM_NAME from T_D_ROOM where CITYNO='
+#39+p_cityno+#39+' and OFF_NO_HOME='+#39+p_jxdm+#39;
open;
first;
while not Eof do
begin
str1 :=Fields[0].AsString;
str2 :=Fields[1].AsString;
str3 :=Fields[2].AsString;
str4 :=Fields[3].AsString;
//先把第一层建出来
NewJXNode:=
InsertTreeNode(TreeViewRy,SNode,str4,str2+'#'+str3+'#'+str1);
//TreeViewRy.Items.Add(nil,Fields[0].AsString+':'+Fields[1].AsString);
NewJXNode.ImageIndex := 0;
NewJXNode.SelectedIndex := 1;
//***************判断该县下有没关系室有没有,如果速度慢去掉*****************
//QueryTmp2.close;
//QueryTmp2.sql.text :='select count(WK_NO) from T_F_MANAGER '+
//' where CITYNO='+#39+str3+#39+' and OFF_NO_HOME='+#39+str2+#39
//+' and RoomId='+#39+str1+#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;
end;
2:begin
//加用户
with QueryTmp2 do
begin
close;
sql.clear;
sql.add('select WK_NO,NAME,STAT from T_F_MANAGER');
sql.add(' where Off_No_Home=:p1 and CITYNO=:p2 and RoomId=:p3 order by WK_NO,STAT');
ParamByName('p1').Asstring :=P_jxdm;
ParamByName('p2').Asstring :=P_cityno;
ParamByName('p3').Asstring :=P_room;
open;
first;
while not Eof do
begin
str1 :=Fields[0].AsString;
str2 :=Fields[1].AsString;
NewRyNode :=InsertTreeNode(TreeViewRy,SNode,str1+':'+str2,str1);
if FieldByName('STAT').AsString='0' then
begin
NewRyNode.ImageIndex := 6;
NewRyNode.SelectedIndex := 7;
end
else
begin //linlong 2003.03.15
NewRyNode.ImageIndex := 8;
NewRyNode.SelectedIndex := 8;
end;
Next;
end;{while}
end;{with}
end;
end;//end case
end;
procedure TFormRygl.TreeViewRyExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
var
str :string;
begin
if P_Refresh then exit;
case Node.Level of
0:
begin
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.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;
end;
TreeExpand(TreeViewRy,Node);
end;
procedure TFormRygl.FormDestroy(Sender: TObject);
begin
P_Refresh :=false;
FreeNode(TreeViewRy);
end;
procedure TFormRygl.BitBtnCloseClick(Sender: TObject);
begin
close;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -