Procházet zdrojové kódy

Sign Online: read Enable from cloud

MaiXinRong před 8 roky
rodič
revize
0a3fe6e183

+ 47 - 1
DataModules/PHPWebDm.pas

@@ -115,7 +115,8 @@ type
     function UploadFiles(AUrl: string; AInFields, AInValues: array of string;
       AUpFileFields, AUpFileNames: array of string; var ErrorMessage: string): Boolean;
 
-    function UrlGet(AUrl: string; APostParam: TStrings; var AResult: TStrings): Integer;
+    function UrlGet(AUrl: string; APostParam: TStrings; var AResult: string): Integer; overload;
+    function UrlGet(AUrl: string; APostParam: TStrings; var AResult: TStrings): Integer; overload;
 
     property Account: string read FAccount write SetAccount;
     property UserID: Integer read FUserID write SetUserID;
@@ -908,6 +909,51 @@ begin
   end;
 end;
 
+function TPHPWeb.UrlGet(AUrl: string; APostParam: TStrings;
+  var AResult: string): Integer;
+var
+  i: Integer;
+  ssResponse: TStringStream;
+  vJson: TCslJson;
+  vIdHTTP: TIdHTTP;
+begin
+  Result := -1;
+  AResult := '';
+  ssResponse := TStringStream.Create('');
+  vIdHTTP := TIdHTTP.Create(nil);
+  try
+    vIdHTTP.Post(AUrl, APostParam, ssResponse);
+    if (Pos('200 OK', vIdHTTP.ResponseText) <> 0) then
+    begin
+      // Analyse Result Json
+      vJson := TCslJson.Create;
+      try
+        vJson.Text := Utf8ToAnsi(ssResponse.DataString);
+        if SameText(vJson.Value['status'], 'true') then
+        begin
+          AResult := vJson.Value['info'];
+          Result := 1;
+        end
+        else if SameText(vJson.Value['status'], 'false') then
+        begin
+          AResult := vJson.Value['msg'];
+          Result := 0;
+        end
+        else
+        begin
+          AResult := '²éѯÊý¾Ý³ö´í, ÇëÖØÊÔ';
+          Result := 0;
+        end;
+      finally
+        vJson.Free;
+      end;
+    end;
+  finally
+    vIdHTTP.Free;
+    ssResponse.Free;
+  end;
+end;
+
 initialization
 
 finalization

+ 1 - 0
Frames/ProjectManagerFme.dfm

@@ -524,6 +524,7 @@ object ProjectManagerFrame: TProjectManagerFrame
       end
       item
         BeginGroup = True
+        Item = MainForm.dxbtnSignOnline
         Visible = True
       end
       item

+ 26 - 2
Frames/ProjectManagerFme.pas

@@ -130,6 +130,8 @@ type
     FCurPos: Integer;                         // 用来控制审核人的添加位置
     FCheckerList: TObjectList;
 
+    FSignOnlineSwitch: Integer;
+
     function ReceiveFile(const AFileName: string; AIsReback: Boolean = False): Boolean;
     function ImportFile(const AFileName: string; AFileMD5: string = ''): Boolean;
     procedure ConnectButtonWithAction;
@@ -158,6 +160,8 @@ type
     function FileDownAndReceive(ADownURL: string; AReceiveKind: Integer): Boolean;
     // 线上审批的起止人
     procedure OnLineChecker(AAr: TOVArr; var ABegin, AEnd: Integer; var AOnLineEndIsOwner: Boolean);
+
+    procedure LoadSignOnlineSwitch;
   public
     constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;
@@ -212,6 +216,8 @@ begin
     Application.HintPause := 200;
     Application.HintHidePause := 60000;
 
+    LoadSignOnlineSwitch;
+
     tobtnImport.Visible := False;
     stdProjects.TreeOptions := stdProjects.TreeOptions - [aoAllowUpLevel, aoAllowDownLevel];
     stdProjects.Options := stdProjects.Options - [aoAllowUpMove, aoAllowDownMove];
@@ -1867,7 +1873,10 @@ procedure TProjectManagerFrame.actnSignOnlineExecute(Sender: TObject);
 var
   iPhase: Integer;
 begin
-  if SelectOnlineSignPhase(iPhase, stdProjects.IDTree.Selected.Rec) then
+  LoadSignOnlineSwitch;
+  if (FSignOnlineSwitch = 0) then
+    WarningMessage('云端未开启在线签署功能。')
+  else if SelectOnlineSignPhase(iPhase, stdProjects.IDTree.Selected.Rec) then
     SignOnline(stdProjects.IDTree.Selected, iPhase);
 end;
 
@@ -1885,9 +1894,24 @@ procedure TProjectManagerFrame.actnSignOnlineUpdate(Sender: TObject);
 
 begin
   TAction(Sender).Visible := _IsCloud;
-  TAction(Sender).Enabled := Assigned(stdProjects.IDTree.Selected) and
+  TAction(Sender).Enabled := (FSignOnlineSwitch = 1) and
+       Assigned(stdProjects.IDTree.Selected) and
       (stdProjects.IDTree.Selected.Rec.ValueByName('Type').AsInteger = 1) and
       HasCompletePhase(stdProjects.IDTree.Selected.Rec);
 end;
 
+procedure TProjectManagerFrame.LoadSignOnlineSwitch;
+var
+  iResult: Integer;
+  sResult: string;
+begin
+  FSignOnlineSwitch := 0;
+  iResult := PHPWeb.UrlGet(PhPWeb.MeasureURL + 'sign/switch', nil, sResult);
+  case iResult of
+    1: FSignOnlineSwitch := StrToIntDef(sResult, 0);
+    0: WarningMessage('网络错误:' + sResult);
+    -1: WarningMessage('网络错误:无法连接到云端');
+  end;
+end;
+
 end.

+ 1 - 1
Units/ReportManager.pas

@@ -770,7 +770,7 @@ begin
     56: Result := FrmWeiWuZjjlGatherData.AssignData(AProjectData); // 맵據關嶠 -- 데깃뙈、셕좆連마삠悧깊
   end;
   // For Inner Test
-  //ShowTestForm(Result);
+  ShowTestForm(Result);
 end;
 
 function TMemoryReportManager.GetSqlResultDataSet(const ASql: string;