| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 | 
							- {*******************************************************************************
 
-   单元名称:  OrderCheckerFme.pas
 
-   单元说明:  动态添加审核人。
 
-   作者时间:  Chenshilong, 2014-07-11
 
- *******************************************************************************}
 
- unit OrderCheckerFme;
 
- interface
 
- uses
 
-   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 
-   Dialogs, ExtCtrls, StdCtrls, pngimage, CslButton, cxHint;
 
- type
 
-   TCheckerFrameType = (cftChecker, cftOwner, cftAdd);
 
-   TCheckStatus = (csNotBegin, csChecking, csFinished, csNotPass);  // 末审核,审核中,审核完成,审核不通过
 
- const
 
-   CheckStatusNames: array[TCheckStatus] of string = ('未审核', '审核中', '审核通过', '审核不通过');
 
-   CheckStatusColors: array[TCheckStatus] of TColor = ($00B7B7B7, $000099FF, $000E9D00, clRed);
 
- type
 
-   TOrderCheckerFrame = class(TFrame)
 
-     pnlChecker: TPanel;
 
-     shpImage: TShape;
 
-     imgOrderCheckerPic: TImage;
 
-     lblOrderCheckerName: TLabel;
 
-     lblOrderCheckerRole: TLabel;
 
-     lblOrderCheckerCompany: TLabel;
 
-     shpBotom: TShape;
 
-     lblOrderCheckerNum: TLabel;
 
-     lblOrderStatus: TLabel;
 
-     lblLast: TLabel;
 
-     lblAdd: TLabel;
 
-     lblAddHint: TLabel;
 
-     shpAdd: TShape;
 
-     imgChecking: TImage;
 
-     imgNotBegin: TImage;
 
-     imgFinish: TImage;
 
-     imgNotPass: TImage;
 
-     btnDelete: TCslButton;
 
-     lblOrderCheckerMemo: TLabel;
 
-     procedure shpAddMouseDown(Sender: TObject; Button: TMouseButton;
 
-       Shift: TShiftState; X, Y: Integer);
 
-     procedure btnDeleteClick(Sender: TObject);
 
-   private
 
-     FUserID: Integer;
 
-     FOrder: Integer;
 
-     FUserName: string;
 
-     FOwner: TObject;
 
-     FCheckerFrameType: TCheckerFrameType;
 
-     FCheckStatus: TCheckStatus;
 
-     FUserRole: string;
 
-     FCheckerMemo: string;
 
-     procedure SetOrder(const Value: Integer);
 
-     procedure SetCheckStatus(const Value: TCheckStatus);
 
-     procedure SetCheckerMemo(const Value: string);
 
-     procedure SetCheckeTime(const Value: string);
 
-     procedure RightAlign(ALabel: TLabel);
 
-     { Private declarations }
 
-   public
 
-     { Public declarations }
 
-     procedure Init(AType: TCheckerFrameType; AID: Integer; AName, ARole,
 
-     ACompany, AImagePath, ACheckerMemo: string; ACheckStatus: TCheckStatus);
 
-     function IsMe(AID: Integer; AName: string): string;
 
-     function IsChecking: Boolean;
 
-     function IsFinished: Boolean;
 
-     property Owner: TObject read FOwner write FOwner;
 
-     property UserID: Integer read FUserID write FUserID;
 
-     property UserName: string read FUserName write FUserName;
 
-     property UserRole: string read FUserRole write FUserRole;
 
-     property Order: Integer read FOrder write SetOrder;
 
-     property CheckerFrameType: TCheckerFrameType read FCheckerFrameType write FCheckerFrameType;   // 审核人类型
 
-     property CheckStatus: TCheckStatus read FCheckStatus write SetCheckStatus;     // 审核状态
 
-     property CheckerMemo: string read FCheckerMemo write SetCheckerMemo;           // 审核意见
 
- <<<<<<< HEAD
 
-     property CheckeTime: string read FCheckeTime write SetCheckeTime;
 
-     property CheckeOnLine: Integer read FCheckeOnLine write FCheckeOnLine;  // 0 线下审批(默认);1 线上审批。
 
- =======
 
- >>>>>>> 3.1.5
 
-   end;
 
- implementation
 
- uses FindUserFrm, CheckerFme, PHPWebDm, ProjectData, ProjectFme,
 
-   UtilMethods;
 
- {$R *.dfm}
 
- { TOrderCheckerFrame }
 
- procedure TOrderCheckerFrame.Init(AType: TCheckerFrameType; AID: Integer;
 
-   AName, ARole, ACompany, AImagePath, ACheckerMemo: string; ACheckStatus: TCheckStatus);
 
- var bAdd, bOwner: Boolean;
 
- begin
 
-   bAdd := AType = cftAdd;
 
-   shpAdd.Visible := bAdd;
 
-   lblAdd.Visible := bAdd;
 
-   lblAddHint.Visible := bAdd;
 
-   lblOrderCheckerName.Visible := not bAdd;
 
-   lblOrderCheckerRole.Visible := not bAdd;
 
-   lblOrderCheckerCompany.Visible := not bAdd;
 
-   shpImage.Visible := not bAdd;
 
-   lblOrderCheckerMemo.Visible := not bAdd;
 
-   bOwner := AType = cftOwner;
 
-   lblLast.Visible := bOwner;
 
-   lblOrderCheckerNum.Visible := not bOwner;
 
-   CheckerFrameType := AType;
 
-   CheckStatus := ACheckStatus;
 
- <<<<<<< HEAD
 
-   lblOrderStatus.Visible := not bAdd;
 
-   if lblOrderStatus.Visible then
 
-     RightAlign(lblOrderStatus);
 
-   lblOrderCheckerTime.Visible := (not bAdd) and (CheckStatus in [csFinished, csNotPass]);
 
-   if lblOrderCheckerTime.Visible then
 
-     RightAlign(lblOrderCheckerTime);
 
- =======
 
- >>>>>>> 3.1.5
 
-   case AType of
 
-     cftChecker, cftOwner:
 
-     begin
 
-       UserID := AID;
 
-       UserName := IsMe(AID, AName);
 
-       UserRole := ARole;
 
-       lblOrderCheckerName.Caption := UserName;
 
-       lblOrderCheckerRole.Caption := ARole;
 
-       lblOrderCheckerCompany.Caption := ACompany;
 
- <<<<<<< HEAD
 
-       if CheckStatus in [csFinished, csNotPass] then
 
-       begin
 
-         CheckeOnLine := ACheckeOnLine;
 
-         if ACheckeOnLine = 0 then
 
-           sOnLine := '线下审核'
 
-         else if ACheckeOnLine = 1 then
 
-           sOnLine := '线上审核';
 
-         CheckeTime := Format('[%s][%s]', [ACheckeTime, sOnLine]);
 
-       end;
 
- =======
 
- >>>>>>> 3.1.5
 
-       CheckerMemo := RecoverCharsFromJson(ACheckerMemo);
 
-       if FileExists(AImagePath) then
 
-         imgOrderCheckerPic.Picture.LoadFromFile(AImagePath)
 
-       else
 
-         imgOrderCheckerPic.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'DefaultImage.jpg');
 
-     end;
 
-     cftAdd:
 
-     begin
 
-       UserID := -1;
 
-       UserName := '';
 
-       UserRole := '';
 
-     end;
 
-   end;
 
- end;
 
- function TOrderCheckerFrame.IsChecking: Boolean;
 
- begin
 
-   Result := CheckStatus = csChecking;
 
- end;
 
- function TOrderCheckerFrame.IsFinished: Boolean;
 
- begin
 
-   Result := CheckStatus = csFinished;
 
- end;
 
- function TOrderCheckerFrame.IsMe(AID: Integer; AName: string): string;
 
- begin
 
-   if AID = PHPWeb.UserID then
 
-     Result := AName + '(我)'
 
-   else
 
-     Result := AName;
 
- end;
 
- // 审核状态:状态名称、颜色(状态名称、终审、编号)、图像边框
 
- procedure TOrderCheckerFrame.SetCheckStatus(const Value: TCheckStatus);
 
- var vColor: TColor;
 
- begin
 
-   FCheckStatus := Value;
 
-   lblOrderStatus.Caption := CheckStatusNames[Value];
 
-   RightAlign(lblOrderStatus);
 
-   vColor := CheckStatusColors[Value];
 
-   lblOrderCheckerNum.Font.Color := vColor;
 
-   lblOrderStatus.Font.Color := vColor;
 
-   lblLast.Font.Color := vColor;
 
-   lblOrderCheckerMemo.Font.Color := vColor;
 
- //  cxHintStyleController1.HintStyle.Color := clWindow;        气泡Hint,很帅,但是有Bug,频繁操作时会出错,废弃不用,可惜!
 
- //  cxHintStyleController1.HintStyle.Font.Color := vColor;
 
-   imgNotBegin.Visible := False;
 
-   imgChecking.Visible := False;
 
-   imgFinish.Visible := False;
 
-   imgNotPass.Visible := False;
 
-   if FCheckerFrameType <> cftAdd then
 
-   begin
 
-     case Value of
 
-       csNotBegin:
 
-         imgNotBegin.Visible := True;
 
-       csChecking:
 
-         imgChecking.Visible := True;
 
-       csFinished:
 
-         imgFinish.Visible := True;
 
-       csNotPass:
 
-         imgNotPass.Visible := True;
 
-     end;
 
-   end;
 
- end;
 
- procedure TOrderCheckerFrame.SetOrder(const Value: Integer);
 
- begin
 
-   FOrder := Value;
 
-   lblOrderCheckerNum.Caption := IntToStr(FOrder);
 
-   lblOrderCheckerNum.Update;
 
- end;
 
- procedure TOrderCheckerFrame.shpAddMouseDown(Sender: TObject;
 
-   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 
- var
 
-   FindUserForm: TFindUserForm;
 
- begin
 
-   if Button = mbLeft then
 
-   begin
 
-     FindUserForm := TFindUserForm.Create(nil);
 
-     FindUserForm.ProjectData := TCheckerFrame(Owner).ProjectData;
 
-     FindUserForm.Owner := Self;
 
-     try
 
-       FindUserForm.ShowModal;
 
-     finally
 
-       FindUserForm.Free;
 
-     end;
 
-   end;
 
- end;
 
- procedure TOrderCheckerFrame.btnDeleteClick(Sender: TObject);
 
- var sURL: string;
 
-   vProj: TProjectData;
 
-   vArr: array of string;
 
- begin
 
-   if Application.MessageBox('确定要删除该审核人吗?', '询问', MB_YESNO + MB_ICONQUESTION) = ID_No then
 
-     Exit;
 
-   vProj := TProjectData(TCheckerFrame(Owner).ProjectData);
 
-   sURL := Format('%suser/del/%d/%d/%d/audit', [PHPWeb.MeasureURL, Self.UserID,
 
-     vProj.WebID, vProj.PhaseIndex]);
 
-   vArr := VarArrayOf(['msg']);
 
-   case PHPWeb.Search(sURL, [], [], vArr) of
 
-     1:
 
-     begin
 
-       // 这里直接调用Init方法会出问题,因为事件还没影响完就被释放了,运行出错。
 
-       // 问题的根源在于触发事件的位置来自控件的内部(即使这里调用外部的方法来
 
-       // 搞定它也不行),CS常规的设计方法是外部来控制它,而不是由自身来控制。
 
-       // 这算是BS设计跟CS设计差异的一个体现吧。
 
-       TCheckerFrame(Owner).tRefreshCheckers.Enabled := True;
 
-     end;
 
-     0:
 
-     begin
 
-       Application.MessageBox(PChar(PHPWeb.PageError('无法删除审核人' + '[' + vArr[0] + ']')),
 
-         '警告', MB_OK + MB_ICONWARNING);
 
-       Exit;
 
-     end;
 
-     -1:
 
-     begin
 
-       Application.MessageBox(PChar(PHPWeb.NetError('无法删除审核人')),
 
-         '警告', MB_OK + MB_ICONWARNING);
 
-     end;
 
-   end;
 
- end;
 
- procedure TOrderCheckerFrame.SetCheckerMemo(const Value: string);
 
- begin
 
-   FCheckerMemo := Value;
 
-   lblOrderCheckerMemo.Caption := ShortText(FCheckerMemo, 250);
 
-   lblOrderCheckerMemo.Hint := CustomWidthText(FCheckerMemo, 300);
 
-   lblOrderCheckerMemo.Update;
 
- end;
 
- procedure TOrderCheckerFrame.SetCheckeTime(const Value: string);
 
- begin
 
-   FCheckeTime := Value;
 
-   lblOrderCheckerTime.Caption := Value;
 
-   lblOrderCheckerTime.Visible := (CheckStatus in [csFinished, csNotPass]);
 
-   RightAlign(lblOrderCheckerTime);
 
- end;
 
- procedure TOrderCheckerFrame.RightAlign(ALabel: TLabel);
 
- begin
 
-   ALabel.Left := btnDelete.Left + btnDelete.Width - ALabel.Width;
 
- end;
 
- end.
 
 
  |