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

📄 unit_power.pas

📁 用delphi开发的美容院管理系统
💻 PAS
字号:
unit unit_power;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, Buttons, ExtCtrls;

type
  Tfrm_power = class(TForm)
    Label1: TLabel;
    sg1: TStringGrid;
    lbl_UserId: TLabel;
    lbl_UserName: TLabel;
    sbtn_PowerUp: TSpeedButton;
    sbtn_PowerDown: TSpeedButton;
    Label2: TLabel;
    cb_BrowseEnable: TCheckBox;
    cb_EditEnable: TCheckBox;
    cb_PrintEnable: TCheckBox;
    Panel1: TPanel;
    sbtn_sure: TSpeedButton;
    sbtn_close: TSpeedButton;
    sbtn_UserUp: TSpeedButton;
    sbtn_UserDown: TSpeedButton;
    procedure sbtn_closeClick(Sender: TObject);
    procedure sg1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure sbtn_PowerUpClick(Sender: TObject);
    procedure sbtn_PowerDownClick(Sender: TObject);
    procedure sbtn_sureClick(Sender: TObject);
    procedure sbtn_UserUpClick(Sender: TObject);
    procedure sbtn_UserDownClick(Sender: TObject);
    procedure cb_EditEnableMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure cb_BrowseEnableMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure cb_PrintEnableMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    PowerArray,UserPowerArray:array of array of string;
    procedure GetUserPower;
    function SaveInfo:boolean;
    { Private declarations }
  public
    TempString:TStringGrid;
    procedure ref;
    { Public declarations }
  end;

var
  frm_power: Tfrm_power;

implementation
  uses unit_DataModule,unit_TotalPublic,PublicFunOrPro;
{$R *.dfm}

procedure Tfrm_power.ref;
var
  i:integer;
  CanSelect:boolean;
begin
  sg1.Cells[0,0]:='权限项';
  with dmod.qrydata do
  begin
    close;
    sql.Text := 'select * from PowerTable order by PowerName';
    open;

    SetLength(PowerArray,RecordCount,4);
    SetLength(UserPowerArray,RecordCount,4);
    i:=0;
    while not eof do
    begin
      PowerArray[i,0]:= FieldByName('PowerName').AsString;
      UserPowerArray[i,0] := PowerArray[i,0];
      if FieldByName('EditEnable').AsBoolean then
        PowerArray[i,1] := '1'
      else
        PowerArray[i,1] := '0';

      if FieldByName('BrowseEnable').AsBoolean then
        PowerArray[i,2] := '1'
      else
        PowerArray[i,2] := '0';

      if FieldByName('PrintEnable').AsBoolean then
        PowerArray[i,3] := '1'
      else
        PowerArray[i,3] := '0';
      sg1.Cells[0,i+1]:=PowerArray[i,0];
      inc(i);
      next;
    end;
  end;
  if i<>0 then sg1.RowCount := i+2;
  GetUserPower;
  CanSelect:=true;
  sg1SelectCell(sg1,0,1,CanSelect);
  sbtn_sure.Enabled := GetPower(SysUserId,'权限管理','修改权');
end;

function Tfrm_power.SaveInfo:boolean;
var
  i:integer;
begin
  result := true;
  try
    dmod.Database.StartTransaction;
    with dmod.qrydata do
    begin
      close;
      sql.text := 'delete from UserPower where UserId=:UserId';
      ParamByName('UserId').asstring := TempString.cells[0,TempString.row];
      ExecSQL;

      for i:= 1 to sg1.rowcount - 2 do
      begin
        close;
        sql.text := 'insert into UserPower '+
                    '(UserId,PowerName,PowerString)'+
                    ' values '+
                    '(:UserId,:PowerName,:PowerString)';
        ParamByName('UserId').asstring := TempString.cells[0,TempString.row];
        ParamByName('PowerName').asstring := sg1.Cells[0,i];
        ParamByName('PowerString').asstring := UserPowerArray[i-1,1]+
                                               UserPowerArray[i-1,2]+
                                               UserPowerArray[i-1,3];
        ExecSQL;
      end;
    end;
  finally
    try
      dmod.Database.Commit;
    except
      dmod.Database.Rollback;
      MessageBox(handle,'数据保存失败,请重试!','信息',mb_ok+mb_iconinformation);
      result := false;
    end;
  end;  
end;

procedure Tfrm_power.GetUserPower;
var
  i:integer;
  TempStr:string;
  MySelect:boolean;
begin
  MySelect:=true;
  lbl_UserId.Caption := '用户帐号:'+TempString.Cells[0,TempString.Row];
  lbl_UserName.Caption := '用户名:'+TempString.Cells[1,TempString.Row];
  for i:= 0 to high(UserPowerArray) do
  begin
    UserPowerArray[i,1]:='0';
    UserPowerArray[i,2]:='0';
    UserPowerArray[i,3]:='0';
  end;
  for i:=0 to high(PowerArray) do
  with dmod.qrydata do
  begin
    close;
    sql.Text := 'select PowerString from UserPower where UserId=:UserId and '+
                'PowerName=:PowerName';
    ParamByName('UserId').AsString := TempString.Cells[0,TempString.row];
    ParamByName('PowerName').AsString := PowerArray[i,0];
    open;

    if not eof then
    begin
      TempStr := FieldByName('PowerString').AsString;
      UserPowerArray[i,1] := copy(TempStr,1,1);
      UserPowerArray[i,2] := copy(TempStr,2,1);
      UserPowerArray[i,3] := copy(TempStr,3,1);
    end;
  end;
  sg1SelectCell(nil,0,1,MySelect);
end;
 
procedure Tfrm_power.sbtn_closeClick(Sender: TObject);
begin
  close;
end;

procedure Tfrm_power.sg1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
var
  i:integer;
begin
  cb_EditEnable.State := cbUnChecked;
  cb_BrowseEnable.State := cbUnChecked;
  cb_PrintEnable.State := cbUnChecked;
  if ARow=sg1.RowCount - 1 then exit;
  if sg1.Cells[0,ARow-1]<>'' then
  begin
  
    cb_EditEnable.Enabled := PowerArray[ARow-1,1]='1';
    cb_BrowseEnable.Enabled := PowerArray[ARow-1,2]='1';
    cb_PrintEnable.Enabled := PowerArray[ARow-1,3]='1';


    if cb_EditEnable.Enabled then
    if UserPowerArray[ARow-1,1] = '1' then
      cb_EditEnable.State := cbChecked;

    if cb_BrowseEnable.Enabled then
    if UserPowerArray[ARow-1,2] = '1' then
      cb_BrowseEnable.State := cbChecked;

    if cb_PrintEnable.Enabled then
    if UserPowerArray[ARow-1,3] = '1' then
      cb_PrintEnable.State := cbChecked;

    if (PowerArray[ARow-1,0]='用户管理') or (PowerArray[ARow-1,0]='权限管理') then
    if TempString.Cells[0,TempString.Row]='superuser' then
    begin
      cb_EditEnable.Enabled := false;
      cb_BrowseEnable.Enabled := false;
      cb_PrintEnable.Enabled := false;
    end;
  end;
end;

procedure Tfrm_power.sbtn_PowerUpClick(Sender: TObject);
var
  MyResult:integer;
begin
  if sg1.RowCount = 2 then exit;
  if sg1.Row = 1 then
  begin
    MyResult:=MessageBox(handle,'已经到达第一个权限项,您要选择最后一个权限项吗?','询问',mb_yesno+mb_iconquestion);
    if MyResult=IdYes then sg1.Row := sg1.RowCount - 2;
  end else sg1.Row := sg1.Row - 1;
end;

procedure Tfrm_power.sbtn_PowerDownClick(Sender: TObject);
var
  MyResult:integer;
begin
  if sg1.RowCount = 2 then exit;
  if sg1.Row = sg1.RowCount -2 then
  begin
    MyResult:=MessageBox(handle,'已经到达最后一个权限项,您要选择第一个权限项?','询问',mb_yesno+mb_iconquestion);
    if MyResult=IdYes then sg1.Row := 1;
  end else sg1.Row := sg1.Row + 1;
end;

procedure Tfrm_power.sbtn_sureClick(Sender: TObject);
begin
  if SaveInfo then close;
end;

procedure Tfrm_power.sbtn_UserUpClick(Sender: TObject);
var
  MyResult:integer;
begin
  SaveInfo;
  if TempString.Row = 1 then
  begin
    MyResult:=MessageBox(handle,'已经到达第一个用户,您要选择最后一个用户吗?','询问',mb_yesno+mb_iconquestion);
    if MyResult=IdYes then TempString.Row := TempString.RowCount - 2;
  end else TempString.Row := TempString.Row - 1;
  sg1.Row := 1;
  GetUserPower;
end;

procedure Tfrm_power.sbtn_UserDownClick(Sender: TObject);
var
  MyResult:integer;
begin
  SaveInfo;
  if TempString.Row = TempString.RowCount - 2 then
  begin
    MyResult:=MessageBox(handle,'已经到达最后一个用户,您要选择第一个用户吗?','询问',mb_yesno+mb_iconquestion);
    if MyResult=IdYes then TempString.Row := 1;
  end else TempString.Row := TempString.Row + 1;
  sg1.Row := 1; 
  GetUserPower;
end;

procedure Tfrm_power.cb_EditEnableMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if cb_EditEnable.State=cbChecked then
    UserPowerArray[sg1.Row-1,1] := '1'
  else
    UserPowerArray[sg1.Row-1,1] := '0';
end;

procedure Tfrm_power.cb_BrowseEnableMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if cb_BrowseEnable.State =cbChecked then
    UserPowerArray[sg1.Row-1,2] := '1'
  else
    UserPowerArray[sg1.Row-1,2] := '0';
end;

procedure Tfrm_power.cb_PrintEnableMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if cb_PrintEnable.State = cbChecked then
    UserPowerArray[sg1.Row-1,3] := '1'
  else
    UserPowerArray[sg1.Row-1,3] := '0';  
end;

end.

⌨️ 快捷键说明

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