|  | @@ -25,25 +25,14 @@ type
 | 
	
		
			
				|  |  |    private
 | 
	
		
			
				|  |  |      FProjectData: TObject;
 | 
	
		
			
				|  |  |      FCount: Integer;
 | 
	
		
			
				|  |  | -    FOwner: TObject;
 | 
	
		
			
				|  |  |      FOwnerFrame: TOrderCheckerFrame;
 | 
	
		
			
				|  |  |      FAddFrame: TOrderCheckerFrame;
 | 
	
		
			
				|  |  | -    FList: TObjectList;          // Add窗也进FList
 | 
	
		
			
				|  |  | +    FList: TList;          // Add窗也进FList
 | 
	
		
			
				|  |  |      FCurPos: Integer;
 | 
	
		
			
				|  |  | -    procedure SetProjectData(const Value: TObject);
 | 
	
		
			
				|  |  | -    procedure SetOwner(const Value: TObject);
 | 
	
		
			
				|  |  | -    { Private declarations }
 | 
	
		
			
				|  |  |    public
 | 
	
		
			
				|  |  | -    { Public declarations }
 | 
	
		
			
				|  |  | -    property ProjectData: TObject read FProjectData write SetProjectData;
 | 
	
		
			
				|  |  | -    property Owner: TObject read FOwner write SetOwner;
 | 
	
		
			
				|  |  | -    property OwnerFrame: TOrderCheckerFrame read FOwnerFrame write FOwnerFrame;  // 这个特指终审人的Frame
 | 
	
		
			
				|  |  | -    property AddFrame: TOrderCheckerFrame read FAddFrame write FAddFrame;        // 这个特指新增人的Frame
 | 
	
		
			
				|  |  | -    property List: TObjectList read FList;
 | 
	
		
			
				|  |  | -    property CurPos: Integer read FCurPos write FCurPos;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    constructor Create(AOwner: TComponent); override;
 | 
	
		
			
				|  |  | +    constructor Create(AParent: TComponent; AProject: TObject);
 | 
	
		
			
				|  |  |      destructor Destroy; override;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      procedure Init;
 | 
	
		
			
				|  |  |      // 审核人的名字、职位、公司、图像
 | 
	
		
			
				|  |  |      procedure AddNewChecker(AType: TCheckerFrameType; AID: Integer; AName,
 | 
	
	
		
			
				|  | @@ -61,12 +50,18 @@ type
 | 
	
		
			
				|  |  |      function Me: TOrderCheckerFrame;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      function CheckNo(ACheckStatus: TCheckStatus): Integer;                // 返回指定的审核状态是列表中的第几个人
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    property ProjectData: TObject read FProjectData;
 | 
	
		
			
				|  |  | +    property OwnerFrame: TOrderCheckerFrame read FOwnerFrame write FOwnerFrame;  // 这个特指终审人的Frame
 | 
	
		
			
				|  |  | +    property AddFrame: TOrderCheckerFrame read FAddFrame write FAddFrame;        // 这个特指新增人的Frame
 | 
	
		
			
				|  |  | +    property List: TList read FList;
 | 
	
		
			
				|  |  | +    property CurPos: Integer read FCurPos write FCurPos;
 | 
	
		
			
				|  |  |    end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  implementation
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -uses FindUserFrm, PHPWebDm, ProjectData, CslJson, ConstUnit, ProjectFme;
 | 
	
		
			
				|  |  | +uses FindUserFrm, PHPWebDm, ProjectData, CslJson, ConstUnit, ProjectFme, superobject, ZhAPI;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  {$R *.dfm}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -76,7 +71,6 @@ procedure TCheckerFrame.AddNewChecker(AType: TCheckerFrameType; AID: Integer;
 | 
	
		
			
				|  |  |  var vChecker: TOrderCheckerFrame;
 | 
	
		
			
				|  |  |  begin
 | 
	
		
			
				|  |  |    vChecker := TOrderCheckerFrame.Create(Self);
 | 
	
		
			
				|  |  | -  vChecker.Owner := Self;
 | 
	
		
			
				|  |  |    vChecker.Init(AType, AID, AName, ARole, ACompany, AImagePath, ACheckerMemo, ACheckStatus, ACheckeTime, ACheckeOnLine);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    sbChecker.Height := sbChecker.Height + vChecker.Height;
 | 
	
	
		
			
				|  | @@ -125,14 +119,57 @@ begin
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  procedure TCheckerFrame.Init;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  procedure AddChecker(AChecker: ISuperObject; AProj: TProjectData);
 | 
	
		
			
				|  |  | +  var
 | 
	
		
			
				|  |  | +    sID, sPicPath: String; 
 | 
	
		
			
				|  |  | +    vStatus: TCheckStatus; 
 | 
	
		
			
				|  |  | +    bOwner, bOwnerFinish: Boolean;
 | 
	
		
			
				|  |  | +    iIndex: Integer;
 | 
	
		
			
				|  |  | +  begin
 | 
	
		
			
				|  |  | +    sID := AChecker.S['uid'];
 | 
	
		
			
				|  |  | +    sPicPath := PHPWeb.UserPath + '1_' + sID + '.jpg';
 | 
	
		
			
				|  |  | +    PHPWeb.DownFile(AChecker.S['avatar'], sPicPath);
 | 
	
		
			
				|  |  | +    vStatus :=  TCheckStatus(AChecker.I['mastatus'] - 1);  // Json返回1、2、3、4
 | 
	
		
			
				|  |  | +    bOwner := StrToInt(sID) = TProjectData(ProjectData).WebOwnerID;
 | 
	
		
			
				|  |  | +    if bOwner then   // 添加业主
 | 
	
		
			
				|  |  | +    begin
 | 
	
		
			
				|  |  | +      if TProjectData(ProjectData).CurUserIsAuthor then
 | 
	
		
			
				|  |  | +      begin
 | 
	
		
			
				|  |  | +       {如果是编制人,添加业主前先添加Add框。
 | 
	
		
			
				|  |  | +       数据库中,编制人没有审核人这样的状态。只有跟随标段的两种状态:
 | 
	
		
			
				|  |  | +       ①有标段(顺便记录了编制人,标段是编制人创建的) ②没有标段。
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +       为什么不通过是否有标段来判断当前是否显示“添加新的审核人”呢?
 | 
	
		
			
				|  |  | +       因为无法得知当前项目是数据库中已存在的最新一期还是仅存于本地尚末入库
 | 
	
		
			
				|  |  | +       的最新一期。改由添加的位置给出提示}
 | 
	
		
			
				|  |  | +       if (TProjectData(ProjectData).PhaseIndex > 0) and (not TProjectFrame(Owner).IsUped) then
 | 
	
		
			
				|  |  | +         AddNewChecker(cftAdd, -1, '', '', '', '', '', csNotBegin, '', -1);
 | 
	
		
			
				|  |  | +      end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      AddNewChecker(cftOwner, StrToInt(sID),
 | 
	
		
			
				|  |  | +        AChecker.S['name'], AChecker.S['jobs'], AChecker.S['company'], sPicPath,
 | 
	
		
			
				|  |  | +        AChecker.S['CheckerMemo'], vStatus, AChecker.S['audittime'], AChecker.I['onlineaudit']);
 | 
	
		
			
				|  |  | +    end
 | 
	
		
			
				|  |  | +    else
 | 
	
		
			
				|  |  | +      AddNewChecker(cftChecker, StrToInt(sID),
 | 
	
		
			
				|  |  | +        AChecker.S['name'], AChecker.S['jobs'], AChecker.S['company'], sPicPath,
 | 
	
		
			
				|  |  | +        AChecker.S['CheckerMemo'], vStatus, AChecker.S['audittime'], AChecker.I['onlineaudit']);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    iIndex := AProj.Checkers.Add(StrToInt(sID), AChecker.S['name'],
 | 
	
		
			
				|  |  | +      AChecker.S['jobs'], AChecker.S['CheckerMemo'], AChecker.S['audittime']);
 | 
	
		
			
				|  |  | +    if vStatus in [csFinished, csNotPass] then
 | 
	
		
			
				|  |  | +      AProj.Checkers.LastChecker := AProj.Checkers.Item[iIndex]
 | 
	
		
			
				|  |  | +    else
 | 
	
		
			
				|  |  | +      AProj.Checkers.LastChecker := nil;
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  var
 | 
	
		
			
				|  |  | -  i, iIndex: Integer;
 | 
	
		
			
				|  |  | -  vA: TOVArr;
 | 
	
		
			
				|  |  | -  sURL, sPicPath, sID, sErrors: string;
 | 
	
		
			
				|  |  | +  i, iCount: Integer;
 | 
	
		
			
				|  |  | +  sURL, sPicPath, sID, sErrors, sResult: string;
 | 
	
		
			
				|  |  |    vProj: TProjectData;
 | 
	
		
			
				|  |  |    bOwner, bOwnerFinish: Boolean;
 | 
	
		
			
				|  |  | -  vStatus: TCheckStatus;
 | 
	
		
			
				|  |  | -  vCM: TChecker;
 | 
	
		
			
				|  |  | +  vJ: ISuperObject;
 | 
	
		
			
				|  |  |  begin
 | 
	
		
			
				|  |  |    FList.Clear;
 | 
	
		
			
				|  |  |    OwnerFrame := nil;
 | 
	
	
		
			
				|  | @@ -142,7 +179,7 @@ begin
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    vProj := TProjectData(FProjectData);
 | 
	
		
			
				|  |  |    vProj.Checkers.Clear;
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    // 这里,这里搞死爹...编制人第一期上报后,关掉项目,重新打开这个项目,第一次,
 | 
	
		
			
				|  |  |    // 我说的是第一次——一定读取不了审核人列表,但第二次、以后每次都正常。你知道
 | 
	
		
			
				|  |  |    // 读取不了这个列表的后果有多严重吗?网络版的每个角落都依赖于审核人的角色,所
 | 
	
	
		
			
				|  | @@ -153,45 +190,18 @@ begin
 | 
	
		
			
				|  |  |    // 计量支付网络版研发团队定性为PHP业界的灵异事件。如果哪天你用科学解释了它,请
 | 
	
		
			
				|  |  |    // 一定要告诉我个中缘由。chenshilong, 2014-07-21
 | 
	
		
			
				|  |  |    sURL := Format('%suser/get/all/%d/%d/measure', [PHPWeb.MeasureURL, vProj.WebID, vProj.PhaseIndex]);
 | 
	
		
			
				|  |  | -  if PHPWeb.Search(sURL, [''], [''], vA) = 1 then
 | 
	
		
			
				|  |  | +  if PHPWeb.UrlGet(sURL, nil, sResult) = 1 then
 | 
	
		
			
				|  |  |    begin
 | 
	
		
			
				|  |  | -    for i := Low(vA) to High(vA) do
 | 
	
		
			
				|  |  | -    begin
 | 
	
		
			
				|  |  | -      sID := vA[i, 4];
 | 
	
		
			
				|  |  | -      sPicPath := PHPWeb.UserPath + '1_' + sID + '.jpg';
 | 
	
		
			
				|  |  | -      PHPWeb.DownFile(vA[i, 5], sPicPath);
 | 
	
		
			
				|  |  | -      vStatus :=  TCheckStatus(StrToInt(vA[i, 3])-1);  // Json返回1、2、3、4
 | 
	
		
			
				|  |  | -      bOwner := StrToInt(sID) = TProjectData(ProjectData).WebOwnerID;
 | 
	
		
			
				|  |  | -      if bOwner then   // 添加业主
 | 
	
		
			
				|  |  | -      begin
 | 
	
		
			
				|  |  | -        if TProjectData(ProjectData).CurUserIsAuthor then
 | 
	
		
			
				|  |  | -        begin
 | 
	
		
			
				|  |  | -         {如果是编制人,添加业主前先添加Add框。
 | 
	
		
			
				|  |  | -         数据库中,编制人没有审核人这样的状态。只有跟随标段的两种状态:
 | 
	
		
			
				|  |  | -         ①有标段(顺便记录了编制人,标段是编制人创建的) ②没有标段。
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -         为什么不通过是否有标段来判断当前是否显示“添加新的审核人”呢?
 | 
	
		
			
				|  |  | -         因为无法得知当前项目是数据库中已存在的最新一期还是仅存于本地尚末入库
 | 
	
		
			
				|  |  | -         的最新一期。改由添加的位置给出提示}
 | 
	
		
			
				|  |  | -         if (TProjectData(ProjectData).PhaseIndex > 0) and (not TProjectFrame(Owner).IsUped) then
 | 
	
		
			
				|  |  | -           AddNewChecker(cftAdd, -1, '', '', '', '', '', csNotBegin, '', -1);
 | 
	
		
			
				|  |  | -        end;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        AddNewChecker(cftOwner, StrToInt(sID),
 | 
	
		
			
				|  |  | -          vA[i, 0], vA[i, 2], vA[i, 1], sPicPath, vA[i, 6], vStatus, vA[i, 8], StrToInt(vA[i, 7]));
 | 
	
		
			
				|  |  | -      end
 | 
	
		
			
				|  |  | -      else
 | 
	
		
			
				|  |  | -        AddNewChecker(cftChecker, StrToInt(vA[i, 4]),
 | 
	
		
			
				|  |  | -          vA[i, 0], vA[i, 2], vA[i, 1], sPicPath, vA[i, 6], vStatus, vA[i, 8], StrToInt(vA[i, 7]));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      vCM := TChecker.Create;
 | 
	
		
			
				|  |  | -      iIndex := vProj.Checkers.Add(StrToInt(vA[i, 4]), vA[i, 0], vA[i, 2], vA[i, 6], vA[i, 8]);
 | 
	
		
			
				|  |  | -      if vStatus in [csFinished, csNotPass] then
 | 
	
		
			
				|  |  | -        vProj.Checkers.LastChecker := vProj.Checkers.Item[iIndex]
 | 
	
		
			
				|  |  | -      else
 | 
	
		
			
				|  |  | -        vProj.Checkers.LastChecker := nil;
 | 
	
		
			
				|  |  | +    vJ := SO(sResult);
 | 
	
		
			
				|  |  | +    try
 | 
	
		
			
				|  |  | +      if not Assigned(vJ.AsArray) then Exit;
 | 
	
		
			
				|  |  | +      iCount := vJ.AsArray.Length;
 | 
	
		
			
				|  |  | +      for i := 0 to iCount - 1 do
 | 
	
		
			
				|  |  | +        AddChecker(vJ.AsArray.O[i], vProj);
 | 
	
		
			
				|  |  | +      RepairOrder;
 | 
	
		
			
				|  |  | +    finally
 | 
	
		
			
				|  |  | +      vJ := nil;
 | 
	
		
			
				|  |  |      end;
 | 
	
		
			
				|  |  | -    RepairOrder;
 | 
	
		
			
				|  |  |    end
 | 
	
		
			
				|  |  |    else
 | 
	
		
			
				|  |  |    begin
 | 
	
	
		
			
				|  | @@ -202,11 +212,6 @@ begin
 | 
	
		
			
				|  |  |    end;
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -procedure TCheckerFrame.SetProjectData(const Value: TObject);
 | 
	
		
			
				|  |  | -begin
 | 
	
		
			
				|  |  | -  FProjectData := Value;
 | 
	
		
			
				|  |  | -end;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  function TCheckerFrame.InCheckerList(ACheckerID: Integer): Boolean;
 | 
	
		
			
				|  |  |  var i: Integer;
 | 
	
		
			
				|  |  |  begin
 | 
	
	
		
			
				|  | @@ -234,12 +239,6 @@ begin
 | 
	
		
			
				|  |  |    end;
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -procedure TCheckerFrame.SetOwner(const Value: TObject);
 | 
	
		
			
				|  |  | -begin
 | 
	
		
			
				|  |  | -  FOwner := Value;
 | 
	
		
			
				|  |  | -end;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  procedure TCheckerFrame.RepairOrder;
 | 
	
		
			
				|  |  |  var i: Integer;
 | 
	
		
			
				|  |  |  begin
 | 
	
	
		
			
				|  | @@ -261,14 +260,16 @@ begin
 | 
	
		
			
				|  |  |    end;
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -constructor TCheckerFrame.Create(AOwner: TComponent);
 | 
	
		
			
				|  |  | +constructor TCheckerFrame.Create(AParent: TComponent; AProject: TObject);
 | 
	
		
			
				|  |  |  begin
 | 
	
		
			
				|  |  | -  inherited;
 | 
	
		
			
				|  |  | -  FList := TObjectList.Create;
 | 
	
		
			
				|  |  | +  inherited Create(AParent);
 | 
	
		
			
				|  |  | +  FProjectData := AProject;
 | 
	
		
			
				|  |  | +  FList := TList.Create;
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  destructor TCheckerFrame.Destroy;
 | 
	
		
			
				|  |  |  begin
 | 
	
		
			
				|  |  | +  ClearObjects(FList);
 | 
	
		
			
				|  |  |    FList.Free;
 | 
	
		
			
				|  |  |    inherited;
 | 
	
		
			
				|  |  |  end;
 |