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

📄 frm_right.pas

📁 是一个用delphi设计的考勤系统
💻 PAS
字号:
{
***************************************************************
*  说明:权限管理                                        *
*  时间:2003/02/20                                        *
*  作者:杨泉清                                               *
***************************************************************
}
unit frm_Right;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ModalForm, ComCtrls, Menus, StdCtrls, ExtCtrls, YLabelButton,
  ChangeImage, Buttons, ADODB, DB, ImgList;

type
  TRightSet = class(TMyModalForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    Image1: TImage;
    Label4: TLabel;
    Label5: TLabel;
    Label1: TLabel;
    Lv_User: TListView;
    ChangeImg1: TChangeImg;
    LabelB1: TLabelB;
    ChangeImg2: TChangeImg;
    LabelB3: TLabelB;
    ChangeImg3: TChangeImg;
    LabelB4: TLabelB;
    Tv_Group: TTreeView;
    Label2: TLabel;
    GroupBox2: TGroupBox;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    ChangeImg4: TChangeImg;
    LabelB2: TLabelB;
    ChangeImg5: TChangeImg;
    LabelB5: TLabelB;
    ChangeImg14: TChangeImg;
    LabelB15: TLabelB;
    Label3: TLabel;
    Label11: TLabel;
    GroupBox5: TGroupBox;
    Label12: TLabel;
    Label13: TLabel;
    GroupBox1: TGroupBox;
    GroupBox3: TGroupBox;
    LbGroup: TListBox;
    Tv_Right: TTreeView;
    Label14: TLabel;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N14: TMenuItem;
    N15: TMenuItem;
    N16: TMenuItem;
    PopupMenu2: TPopupMenu;
    N3: TMenuItem;
    N4: TMenuItem;
    N6: TMenuItem;
    N5: TMenuItem;
    N18: TMenuItem;
    ImageList1: TImageList;
    PopupMenu3: TPopupMenu;
    N7: TMenuItem;
    N8: TMenuItem;
    ADOUser: TADOTable;
    ADODelUser: TADOStoredProc;
    ADODelGroup: TADOStoredProc;
    procedure ChangeImg1Click(Sender: TObject);
    procedure ChangeImg3Click(Sender: TObject);
    procedure ChangeImg2Click(Sender: TObject);
    procedure Lv_UserDblClick(Sender: TObject);
    procedure ChangeImg4Click(Sender: TObject);
    procedure TabSheet2Show(Sender: TObject);
    procedure TabSheet1Show(Sender: TObject);
    procedure ChangeImg5Click(Sender: TObject);
    procedure ChangeImg14Click(Sender: TObject);
    procedure TabSheet3Show(Sender: TObject);
    procedure Tv_RightClick(Sender: TObject);
    procedure Tv_RightDblClick(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N15Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure LbGroupClick(Sender: TObject);
  private
    { Private declarations }
    procedure ShowUserList;
    procedure ShowGroup;
    procedure AddUsr(tvname: TtreeView; GroupName: string; UsrName: string);
    procedure Change_Right(tvnode: Ttreenode; ImageIndex: integer); //改变权限
    procedure GetRight(Name: string; bz: string);
  public
    { Public declarations }
  end;

var
  RightSet: TRightSet;

implementation
Uses
   Uglobal,DM_DataModal,Frm_AddUser,Frm_AddGroup,UGeneralFunc
   ,Frm_UserInfo,Frm_AddUserToGroup;
{$R *.dfm}

procedure TRightset.ShowUserList;
var
   ListItem:TListItem;
begin
  inherited;
  lv_user.Clear ;
  if AdoUser.Active then
     AdoUser.Active :=false;
  AdoUser.Active :=true;
  if AdoUser.RecordCount <1 then exit;
  AdoUser.First ;
  While not AdoUser.Eof do
  begin
     ListItem:=lv_user.Items.Add ;
     ListItem.Caption :=AdoUser.FieldByName('usrname').Value;
     ListItem.SubItems.Add(AdoUser.FieldByName('GroupName').Value);
     AdoUser.Next ;
  end;
end;

procedure TRightSet.ShowGroup;
var
  TreeNodeTmp: TtreeNode;
  TempQry:TAdoQuery;
begin
  inherited;
  TempQry:=TAdoQuery.Create(nil);
  TempQry.Connection :=WindData.AdoConn ;
  TV_Group.Items.Clear;
  TV_Group.Items.AddChild(nil, '组用户');
  TV_Group.Items[0].ImageIndex := 3;
  TV_Group.Items[0].SelectedIndex := 3;
  with TempQry do
  begin
     sql.Clear;
     sql.Add('select * from Usr_GroupInfo');
     open;
  end;
  while not TempQry.Eof do
  begin
    TreeNodeTmp := TV_Group.Items.AddChild(TV_Group.Items[0], TempQry.fieldbyname('GroupName').value);
    //TreeNodeTmp := TV_Group.Items.AddChild(nil, TempQry.fieldbyname('GroupName').value);
    TreeNodeTmp.ImageIndex := 3;
    TreeNodeTmp.SelectedIndex := 3;
    TempQry.Next;
  end;
  with TempQry do
  begin
     sql.Clear;
     sql.Add('select * from Usr_Info');
     open;
  end;
  while not TempQry.Eof do
  begin
    if (length(TempQry.FieldByName('GroupName').Value) > 0) then
       AddUsr(tv_Group, TempQry.fieldbyname('GroupName').value, TempQry.fieldbyname('UsrName').value);
    TempQry.Next;
  end;
end;

procedure TRightSet.AddUsr(tvname: TtreeView; GroupName: string; UsrName: string);
var
  tmp: Ttreenode;
  tvnode_parent: tTreeNode;
  i: integer;
begin
   try
      tvnode_parent := tvname.Items[0];
   except
      exit;
   end;
   for i := 0 to tvnode_parent.Count - 1 do
   begin
      if tvnode_parent.Item[i].Text = GroupName then
      begin
         tvnode_parent := tvnode_parent.Item[i];
         tmp := tvname.Items.AddChild(tvnode_parent, UsrName);
         tmp.ImageIndex := 4;
         tmp.SelectedIndex := 4;
         break;
      end;
   end;
end;

procedure TRightSet.ChangeImg1Click(Sender: TObject);
begin
  inherited;
  GsUserName:='';
  AddUser:=TAddUser.Create(Application);
  if AddUser.ShowModal <>2 then
     ShowUserList;
end;

procedure TRightSet.ChangeImg3Click(Sender: TObject);
var
   msg:string;
   ListItem:TListItem;
begin
  inherited;
  if lv_user.SelCount<1 then  exit;
  msg:= '请确认要删除该用户' ;
  if showmsg(msg,0,2) then;
  begin
     ListItem:=Lv_user.Selected ;
     With ADODelUser do
     begin
        parameters.ParamByName('@optmode').Value :=2;
        parameters.ParamByName('@UsrName').Value :=ListItem.Caption ;
        Try
           Execproc;
        Except
           msg:='删除用户失败!';
           showmsg(msg,1,2);
        end;
        ListItem.Delete ;
     end;
  end;

end;

procedure TRightSet.ChangeImg2Click(Sender: TObject);
begin
  inherited;
  if not assigned(UserInfo) then
     UserInfo:=TUserInfo.Create(Application);
  UserInfo.Show ;
end;

procedure TRightSet.Lv_UserDblClick(Sender: TObject);
var
   ListItem:TListItem;
begin
  inherited;
  GsUserName:='';
  if Lv_user.SelCount <1 then exit;
  ListItem:=Lv_user.Selected ;
  GsUserName:=ListItem.Caption ;
  AddUser:=TAddUser.Create(Application);
  if AddUser.ShowModal <>2 then
     ShowUserList ;
end;

procedure TRightSet.ChangeImg4Click(Sender: TObject);
begin
  inherited;
  AddGroup:=TAddGroup.Create(Application);
  if AddGroup.ShowModal <>2 then
     ShowGroup;
end;

procedure TRightSet.TabSheet2Show(Sender: TObject);
begin
  inherited;
  ShowGroup;
end;

procedure TRightSet.TabSheet1Show(Sender: TObject);
begin
  inherited;
  ShowUserList;
end;

procedure TRightSet.ChangeImg5Click(Sender: TObject);
var
   msg:string;
   TempQry:TAdoQuery;
begin
  inherited;
  TempQry:=TAdoQuery.Create(nil);
  TempQry.Connection :=WindData.AdoConn ;
  if Tv_group.Selected.Text ='' then exit;
  msg:='请确认要删除该组!';
  if showmsg(msg,0,2) then
  begin
     With TempQry do
     begin
        sql.Clear ;
        sql.Add('select * from Usr_info where GroupName  like '''+Tv_group.Selected.Text+'''') ;
        open;
     end;
     if TempQry.RecordCount >0 then
     begin
        msg:='请先删除该组下的成员!';
        showmsg(msg,1,0);
     end;
     with  AdoDelGroup do
     begin
        parameters.ParamByName('@optmode').Value :=2;
        parameters.ParamByName('@GroupName').Value :=Tv_group.Selected.Text ;
        try
           Execproc;
        Except
           msg:='删除组操作失败!';
           showmsg(msg,1,2);
        end;
        ShowGroup;
     end;
  end;
end;

procedure TRightSet.ChangeImg14Click(Sender: TObject);
begin
  inherited;
  AddUserToGroup:=TAddUserToGroup.Create(Application);
  if AddUserToGroup.ShowModal <> 2 then
     ShowGroup;
end;

procedure TRightSet.TabSheet3Show(Sender: TObject);
var
   TempQry:TAdoQuery;
begin
  inherited;
  TempQry:=TAdoQuery.Create(nil);
  TempQry.Connection :=WindData.AdoConn ;
  with TempQry do
  begin
     sql.Clear ;
     sql.Add('select * from Usr_GroupInfo');
     open;
  end;
  lbgroup.Clear ;
  while not TempQry.Eof do
  begin
     lbgroup.Items.Add(TempQry.FieldbyName('Name').value);
     TempQry.Next ;
  end;
  if  Lbgroup.ItemIndex<0 then exit;
  lbgroup.ItemIndex :=0;
  GetRight(Lbgroup.Items.Strings[Lbgroup.ItemIndex], '组');
end;

procedure TRightSet.GetRight(Name: string; bz: string);
var
  Num: integer; //每级菜单的位数
  TvNodeTmp: Ttreenode;
  str_RightNum: string; //权限号
  i, j: integer;
  str_sql: string;
  TempQry,GroupQry:TAdoQuery;
begin
  num:=2;
  TempQry:=TAdoQuery.Create(nil);
  TempQry.Connection :=WindData.AdoConn ;
  GroupQry:=TAdoQuery.Create(nil);
  GroupQry.Connection :=WindData.AdoConn ;
  with TempQry do
  begin
     sql.Clear ;
     sql.Add('select * from Usr_rightinfo order by RightNum');
     open;
  end;
  tv_right.Items.Clear;
  tv_right.Items.AddChild(nil, '权限');
  tv_right.Items[0].ImageIndex := 3;
  tv_right.Items[0].SelectedIndex := 3;
  while not TempQry.Eof do
  begin
     str_RightNum := trim(TempQry.fieldbyname('RightNum').value);
     TvNodeTmp := tv_right.Items[0];
     for i := 0 to ((length(str_rightNum) div Num) - 2) do
     begin
        j := strtoint(copy(str_rightNum, i * 2 + 1, 2));
        TvNodeTmp := TvNodeTmp.Item[j - 1];
     end;
     TvNodeTmp := tv_Right.Items.AddChild(TvNodeTmp, TempQry.fieldbyname('RightMemo').value);
     str_sql := 'select * from Usr_Right where GroupName=''' + Name + '''';
     str_sql := str_sql + ' and RightNum=''' + str_RightNum + '''';
     with groupqry do
     begin
        sql.Clear ;
        sql.Add(str_sql);
        open;
     end;
     if groupqry.RecordCount = 0 then
     begin
        TvNodeTmp.ImageIndex := 1;
        TvNodeTmp.SelectedIndex := 1;
     end
     else   begin
        TvNodeTmp.ImageIndex := 0;
        TvNodeTmp.SelectedIndex := 0;
     end;
     TempQry.Next;
  end;
end;

procedure TRightSet.change_Right(tvnode: Ttreenode; ImageIndex: integer); //改变权限
var //imageindex为0表示赋予权限,为1表示拒绝权限
  i: integer;
  StrTmp: string;
  Str: string;
  str_sql: string;
  TTreeNodeTmp: ttreenode;
  TempQry:TAdoQuery;
begin
   TempQry :=TAdoQuery.Create(nil);
   TempQry.Connection :=WindData.AdoConn ;
   TvNode.ImageIndex := ImageIndex;
   TvNode.SelectedIndex := ImageIndex;
   str := ''; //的到权限号
   TTreeNodeTmp := tvnode;
   while TTreeNodeTmp.Parent <> nil do
   begin
      StrTmp := inttostr(TTreeNodeTmp.index + 1);
      if length(strTmp) = 1 then strtmp := '0' + strtmp;
      str := strtmp + str;
      TTreeNodeTmp := TTreeNodeTmp.Parent;
   end;
   if imageindex = 0 then //赋予权限
   begin
      str_sql := 'insert into Usr_right(GroupName,RightNum,bz) values(''';
      str_sql := str_sql + Lbgroup.Items.Strings[Lbgroup.ItemIndex] + ''',''';
      str_sql := str_sql + str + ''',';
      str_sql := str_sql + '''组'')';
      with TempQry do
      begin
         sql.Clear ;
         sql.Add(str_sql);
         ExecSql;
      end;
   end
   else if imageindex = 1 then //拒绝权限
   begin
      str_sql := 'delete from  Usr_right where GroupName=''';
      str_sql := str_sql + Lbgroup.Items.Strings[Lbgroup.ItemIndex] + ''' and bz=''';
      str_sql := str_sql + '组''';
      str_sql := str_sql + ' and RightNum=''' + str + '''';
      with TempQry do
      begin
         try
           sql.Clear ;
           sql.add(str_sql);
           ExecSQL;
         except
         end;
      end;
   end;
   for i := 0 to tvnode.Count - 1 do change_Right(tvnode.Item[i], imageIndex); //子节点
end;
procedure TRightSet.Tv_rightClick(Sender: TObject);
begin
  inherited;
  if tv_right.Items.Count = 0 then exit;
  if tv_right.Selected.ImageIndex = 0 then //赋予权限变灰
  begin
    n7.Enabled := false;
    n8.Enabled := true;
  end
  else
    if tv_right.Selected.ImageIndex = 1 then //赋予权限变灰
    begin
      n7.Enabled := true;
      n8.Enabled := false;
    end
    else
    begin
      n7.Enabled := false;
      n8.Enabled := false;
    end;
end;



procedure TRightSet.Tv_RightDblClick(Sender: TObject);
var
   msg:string;
begin
  inherited;
  if tv_right.Items.Count = 0 then exit;
  msg:= '请确认是否改变权限!' ;
  if not showmsg(msg,0,1) then exit;
  if tv_right.Selected.ImageIndex = 0 then
    change_Right(tv_right.Selected, 1)
  else
    if tv_right.Selected.ImageIndex = 1 then
      change_Right(tv_right.Selected, 0);
  if tv_right.Selected.ImageIndex = 0 then //赋予权限变灰
  begin
    n7.Enabled := false;
    n8.Enabled := true;
  end
  else
    if tv_right.Selected.ImageIndex = 1 then //赋予权限变灰
    begin
      n7.Enabled := true;
      n8.Enabled := false;
    end
    else
    begin
      n7.Enabled := false;
      n8.Enabled := false;
    end;
end;

procedure TRightSet.N7Click(Sender: TObject);
begin
  inherited;
  Tv_RightDblClick(Sender);
end;

procedure TRightSet.N8Click(Sender: TObject);
begin
  inherited;
  Tv_RightDblClick(Sender);
end;

procedure TRightSet.N1Click(Sender: TObject);
begin
  inherited;
  ChangeImg1Click(Sender);
end;

procedure TRightSet.N2Click(Sender: TObject);
begin
  inherited;
  ChangeImg3Click(Sender);
end;

procedure TRightSet.N15Click(Sender: TObject);
begin
  inherited;
  ChangeImg2Click(Sender);
end;

procedure TRightSet.N3Click(Sender: TObject);
begin
  inherited;
  ChangeImg4Click(Sender);
end;

procedure TRightSet.N4Click(Sender: TObject);
begin
  inherited;
  ChangeImg5Click(Sender);
end;

procedure TRightSet.N5Click(Sender: TObject);
begin
  inherited;
  ChangeImg14Click(Sender);
end;

procedure TRightSet.LbGroupClick(Sender: TObject);
begin
  inherited;
  GetRight(Lbgroup.Items.Strings[Lbgroup.ItemIndex], '组');
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -