⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 untuserrightset.pas

📁 是分布式粮库程序,是采用Delphi实现的
💻 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 + -