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

📄 pfm_rightset.pas

📁 POS收银系统
💻 PAS
字号:
unit pfm_rightset;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, StdCtrls, ComCtrls, ImgList, Grids, DBGrids, Db, DBTables,
  ExtCtrls, Buttons;

type
  Tfm_rightset = class(TForm)
    DataSource1: TDataSource;
    Query1: TQuery;
    Splitter1: TSplitter;
    GroupBox1: TGroupBox;
    Panel1: TPanel;
    TVUser: TTreeView;
    BBtnUser: TBitBtn;
    BBtnsave: TBitBtn;
    Panel2: TPanel;
    btnAll12: TButton;
    btnAll21: TButton;
    TV1: TTreeView;
    TV2: TTreeView;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnAll12Click(Sender: TObject);
    procedure btnAll21Click(Sender: TObject);
    procedure TV2DblClick(Sender: TObject);
    procedure TV1DblClick(Sender: TObject);
    procedure BBtnUserClick(Sender: TObject);
    procedure TVUserChange(Sender: TObject; Node: TTreeNode);
    procedure BBtnsaveClick(Sender: TObject);
  private
    { Private declarations }

    procedure TVtranfer(tvfrom:ttreeview;tvdest:ttreeview;jibie:integer);
     procedure GetUser();
  public
    { Public declarations }
  end;

var
  fm_rightset: Tfm_rightset;

implementation

uses pfm_main, pfm_userpass;

{$R *.DFM}
var
Rightmodified:boolean;
useridlist:tstringlist;

procedure Tfm_rightset.FormCreate(Sender: TObject);
var
mainmenu:TMainMenu;
//menuitem:TMenuItem;
i,j:integer;
tvnode1:TTreeNode;
begin
        useridlist:=tstringlist.create;
        mainmenu:=main.mainmenu1;
        for i:=0 to mainmenu.items.count-1 do
        begin
            tvnode1:=TV1.items.add(nil,mainmenu.items[i].Caption);
            TV2.items.add(nil,mainmenu.items[i].Caption);
            for j:=0 to mainmenu.items.items[i].count-1 do
            begin
                if mainmenu.items.items[i].items[j].caption<>'-' then
                begin
                    tv1.Items.AddChild(tvnode1,mainmenu.items.items[i].items[j].caption);
                end;
            end;
        end;
        Getuser;
end;

procedure Tfm_rightset.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
if Rightmodified=true then
begin
    if application.MessageBox(pchar('要先保存修改的设置吗?'),pchar('注意'),MB_YESNO)=IDYES then
    begin
        bbtnsave.Click;
    end;
end;
    useridlist.Free;
    action:=cafree;
end;

procedure Tfm_rightset.btnAll12Click(Sender: TObject);
begin
     TVtranfer(tv1,tv2,0);
end;
procedure Tfm_rightset.TVtranfer(tvfrom:ttreeview;tvdest:ttreeview;jibie:integer);
var

tv1node,tvdestnode:ttreenode;
begin

    Rightmodified:=true;
    //如果选择的是第一级
    if tvfrom.Selected.Level=1 then
    begin
        //先获得第一个
        tvdestnode:=tvdest.TopItem;
        while tvdestnode<>nil do
        begin

            if tvdestnode.text=tvfrom.Selected.Parent.text then
            begin
                tvdest.Items.AddChild(tvdestnode,tvfrom.Selected.Text);
                break;
            end;
            tvdestnode:=tvdestnode.GetNext();
        end;
        tvfrom.Selected.Delete;

    end;
    //如果选择的是第0级
    if (tvfrom.Selected.Level=0) and (jibie=0) then
    begin
        //先获得第一个
        tvdestnode:=tvdest.TopItem;
        while tvdestnode<>nil do
        begin
            if tvdestnode.text=tvfrom.Selected.text then
            begin
                tv1node:=tvfrom.Selected.getFirstChild;
                while tv1node<>nil do
                begin
                    tvdest.Items.AddChild(tvdestnode,tv1node.Text);
                    tv1node:=tvfrom.Selected.GetNextChild(tv1node);
                end;
                tvfrom.Selected.DeleteChildren;

                break;
            end;
            tvdestnode:=tvdestnode.GetNext();
        end;
    end;


end;
procedure Tfm_rightset.btnAll21Click(Sender: TObject);
begin
    TVtranfer(tv2,tv1,0);
end;

procedure Tfm_rightset.TV2DblClick(Sender: TObject);
begin
    TVtranfer(tv2,tv1,1);
end;

procedure Tfm_rightset.TV1DblClick(Sender: TObject);
begin
    TVtranfer(tv1,tv2,1);
end;
procedure Tfm_rightset.GetUser();
var
tvnode:ttreenode;
begin
    tvuser.Items.Clear;
    tv1.Items.clear;
    tv2.items.clear;
    tvnode:=tvuser.Items.Add(nil,'全部用户');
         query1.close;
        query1.sql.clear;
        query1.sql.add('select * from t_user');
        query1.open;
        while not query1.eof do
        begin
            TvUser.Items.Addchild(tvnode,query1.fieldbyname('username').asstring);
            useridlist.add(query1.fieldbyname('username').asstring+'='+query1.fieldbyname('userid').asstring);
            query1.Next;
        end;

    query1.close;
end;
procedure Tfm_rightset.BBtnUserClick(Sender: TObject);
begin
    Application.CreateForm(Tfm_userpass, fm_userpass);
    fm_userpass.showmodal;
    fm_userpass.free;
    getuser;
end;

procedure Tfm_rightset.TVUserChange(Sender: TObject; Node: TTreeNode);
var
mainmenu:TMainMenu;
//menuitem:TMenuItem;
i,j:integer;
tv1node,tv2node,tv1child:TTreeNode;
mCap,rightname:string;
begin
if Rightmodified=true then
begin
    if application.MessageBox(pchar('要先保存修改的设置吗?'),pchar('注意'),MB_YESNO)=IDYES then
    begin
        bbtnsave.Click;
    end;
end;
if tvuser.Selected.Level=1 then
begin
    Groupbox1.Caption:='【'+tvuser.Selected.Text+'】使用权限设置';   
    mainmenu:=main.mainmenu1;
    tv1.Items.Clear;
    tv2.Items.Clear;
    for i:=0 to mainmenu.items.count-1 do
    begin
    //加入菜单大类
        tv1node:=TV1.items.add(nil,mainmenu.items[i].Caption);
        TV2.items.add(nil,mainmenu.items[i].Caption);
        for j:=0 to mainmenu.items.items[i].count-1 do
        begin
            if mainmenu.items.items[i].items[j].caption<>'-' then
            begin
                tv1.Items.AddChild(tv1node,mainmenu.items.items[i].items[j].caption);
            end;
        end;
    end;

    query1.active:=false;
    query1.SQL.clear;
    query1.sql.Add('select t_userright.* from t_userright,t_user where t_user.userid=t_userright.userid  and t_user.username='''+tvuser.selected.text+'''');
    query1.active:=true;

    while not query1.Eof do
    begin
        rightname:=query1.fieldbyname('rightname').asstring;
        //先获得子项所在的父菜单名
        mCap:='';
        for i:=0 to mainmenu.items.count-1 do
        begin

            for j:=0 to mainmenu.items.items[i].count-1 do
            begin
                if mainmenu.items.items[i].items[j].caption=rightname then
                begin
                    mcap:=mainmenu.items[i].Caption;
                    break;
                end;
            end;
            if mCap<>'' then
            begin
                    break;
            end;
        end;
        if mCap='' then
        begin
            query1.Next;
            continue;
        end;
        //先查找左边的级别用户的权限
        //先获得第一个
        tv1node:=tv1.TopItem;
        while tv1node<>nil do
        begin
            if tv1node.text=mCap then
            begin

            //先获得第一个
            tv2node:=tv2.TopItem;
            while tv2node<>nil do
            begin
                if tv2node.text=mCap then
                begin
                    tv2.Items.AddChild(tv2node,rightname);
                    break;
                end;
                tv2node:=tv2node.GetNext();
            end;
            tv1child:=tv1node.getFirstChild;
            while tv1child<>nil do
            begin
                if tv1child.text=rightname then
                begin
                    tv1.Items.Delete(tv1child);
                    break;
                end;
                tv1child:=tv1node.GetNextChild(tv1child); 
            end;
            break;

            end;
            tv1node:=tv1node.GetNext();
        end;
        query1.Next;
    end;
    query1.Active:=false;
end;

end;

procedure Tfm_rightset.BBtnsaveClick(Sender: TObject);
var
userid:string;
tv2node,tv2childnode:ttreenode;
begin
if tvuser.Selected.Level=1 then
begin
    Rightmodified:=false;
    userid:=useridlist.values[tvuser.selected.text];
    Rightmodified:=false;
    query1.Active:=false;
    query1.SQL.clear;
    query1.sql.add('delete from t_userright where userid='''+userid+''';');
    query1.ExecSQL;
    query1.sql.clear;
    tv2node:=tv2.TopItem;
    while  tv2node<>nil do
    begin
        tv2childnode:=tv2node.getFirstChild();
        while tv2childnode<>nil do
        begin
            query1.sql.Add('insert into t_userright(rightname,canuse,userid) values('''+
            tv2childnode.text+''',''1'','''+userid+''');');
            tv2childnode:=tv2node.GetNextChild(tv2childnode);
        end;
        tv2node:=tv2node.GetNext; 
    end;
    query1.ExecSQL;
end;
end;

end.

⌨️ 快捷键说明

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