浏览代码

1、审核人变动带来的状态判断、按钮显隐不可靠等问题。
2、审核意见\r\n不稳定问题。
3、审核意见%、回车问题。

CSL 9 年之前
父节点
当前提交
caf96ec6f3
共有 3 个文件被更改,包括 19 次插入16 次删除
  1. 3 3
      DataModules/PHPWebDm.pas
  2. 7 4
      Frames/ProjectFme.pas
  3. 9 9
      Units/UtilMethods.pas

+ 3 - 3
DataModules/PHPWebDm.pas

@@ -288,13 +288,13 @@ begin
         IdDataStream.AddFormField('userid', IntToStr(AUserID));
         IdDataStream.AddFormField('tenderid', IntToStr(ATenderID));
         IdDataStream.AddFormField('phaseno', IntToStr(APhaseNo));
-        IdDataStream.AddFormField('CheckerMemo', ACheckerMemo);
+        IdDataStream.AddFormField('CheckerMemo', ReplaceCharsForJson(ACheckerMemo));
       end;
     end
     else  // ÉóºË²»Í¨¹ý
     begin
       sURL := Format('%suser/set/%d/%d/%d/checkno', [FMeasureURL, AUserID, ATenderID, APhaseNo]);
-      IdDataStream.AddFormField('CheckerMemo', ACheckerMemo);
+      IdDataStream.AddFormField('CheckerMemo', ReplaceCharsForJson(ACheckerMemo));
     end;
 
     IdDataStream.AddFormField('upfile', AFile);
@@ -603,7 +603,7 @@ begin
     sURL := Format('%stender/attachment/%d/%d/upload', [FMeasureURL, AWebID, AUperID]);
     vMPFDS.AddFormField('itemid', IntToStr(ABillID));
     vMPFDS.AddFormField('Category', ACategory);
-    vMPFDS.AddFormField('Memo', AMemo);
+    vMPFDS.AddFormField('Memo', ReplaceCharsForJson(AMemo));
     vMPFDS.AddFormField('PhaseName', APhaseName);
     vMPFDS.AddFile('upitem', AFile, 'text/plain');
     vMPFDS.Position := 0;

+ 7 - 4
Frames/ProjectFme.pas

@@ -743,8 +743,13 @@ begin
     btnSubmit.Visible := False;
     btnPass.Visible := True;
     btnNotPass.Visible := btnPass.Visible;
-    // 当前计量期轮到自已审核(自已正在审核时一定未提交过)
-    btnPass.Enabled := CheckerFrame.Me.IsChecking;
+    // 在本期我是审核人,切换到历史期有可能我没参与。 所以当CheckerFrame.Me为空时,有可能我是编制人,有可能历史期我没参与。
+    // 历史期,管你那么多,直接按钮不见。
+    if ProjectData.PhaseIndex < ProjectData.ProjProperties.PhaseCount then
+      btnPass.Enabled := False
+    else
+      btnPass.Enabled := CheckerFrame.Me.IsChecking;    
+
     btnNotPass.Enabled := btnPass.Enabled;
     btnPass.Left := jcbAudit.Left + jcbAudit.Width + 5;
     btnNotPass.Left := btnPass.Left + btnPass.Width + 1;
@@ -873,8 +878,6 @@ begin
     vCF.Free;
   end;
 
-  sCheckerMemo := ReplaceJsonChar(sCheckerMemo);
-
   try
     RefreshProgress('创建文件包');
     sJsonFile_Bills := ExtractFilePath(sAppFile) + 'JsonFile_Bills.json';

+ 9 - 9
Units/UtilMethods.pas

@@ -95,7 +95,7 @@ type
   function ExtractFileNameWithoutExt(const AFileName: string): string;
   function ShortText(AText: string; AWidth: Integer): string;                     // 文本缩略显示
   function CustomWidthText(AText: string; AWidth: Integer): string;
-  function ReplaceJsonChar(AText: string): string;                                  // 替换Json文本中的特殊字符
+  function ReplaceCharsForJson(AText: string): string;                                  // 替换Json文本中的特殊字符
   function RecoverCharsFromJson(AText: string): string;                             // 下载得到的Json文本恢复成用户需要的文本
   procedure FindFiles(APath, AExtName: string; AFileList: TStrings);
   function DeleteFolder(const FolderStr: string): Boolean;
@@ -902,10 +902,10 @@ begin
   end;
 end;
 
-function ReplaceJsonChar(AText: string): string;
+function ReplaceCharsForJson(AText: string): string;
 const
-  BefChar: array [0..6] of Char = ('{', '}', ',', ':', '"', '[', ']');
-  AftChar: array [0..6] of string = ('{', '}', ',', ':', '"', '【', '】');
+  BefChar: array [0..7] of Char = ('{', '}', ',', ':', '"', '[', ']', '%');
+  AftChar: array [0..7] of string = ('{', '}', ',', ':', '"', '【', '】', '♂');
 var I: Integer;
 begin
   AText := Trim(AText);
@@ -923,8 +923,8 @@ end;
 
 function RecoverCharsFromJson(AText: string): string;
 const
-  BefChar: array [0..0] of string = ('♂');
-  AftChar: array [0..0] of Char = ('%');
+  BefStr: array [0..1] of string = ('♂', '\r\n');
+  AftStr: array [0..1] of string = ('%', '');
 var I: Integer;
 begin
   AText := Trim(AText);
@@ -932,10 +932,10 @@ begin
 
   if AText = '' then Exit;
 
-  for I := low(BefChar) to High(BefChar) do
+  for I := low(BefStr) to High(BefStr) do
   begin
-    if Pos(BefChar[I], AText) > 0 then
-      AText := StringReplace(AText, BefChar[I], AftChar[I], [rfReplaceAll]);
+    if Pos(BefStr[I], AText) > 0 then
+      AText := StringReplace(AText, BefStr[I], AftStr[I], [rfReplaceAll]);
   end;
   Result := AText;
 end;