ProjectFme.pas 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661
  1. unit ProjectFme;
  2. interface
  3. uses
  4. BillsCompileFme, BillsMeasureFme, PhaseCompareFme, DealPaymentFme,
  5. BillsGatherFme, ZJJLFme, BGLFme, ReportsFrm, SearchFme, BookmarkFme,
  6. ProjectData, UtilMethods, Globals, mEncryptEditions, DealBillsFme,
  7. PriceMarginFme, OtherMeasureFme,
  8. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  9. Dialogs, ImgList, XPMenu, Buttons, ComCtrls, ToolWin, ExtCtrls, JimPages,
  10. StdCtrls, JimCombos, dxsbar, ActnList, dxBar, OrderCheckerFme, CheckerFme,
  11. CslButton, UpFileManageFrame, UpFileManageUnit;
  12. type
  13. TProjectFrame = class(TFrame)
  14. xpm: TXPMenu;
  15. ilstExpend: TImageList;
  16. pnlViewControl: TPanel;
  17. pnlView: TPanel;
  18. pnlToolBar: TPanel;
  19. tbToolsButton: TToolBar;
  20. tobtnStandardBills: TToolButton;
  21. tobtnDealPayment: TToolButton;
  22. tobtnSearch: TToolButton;
  23. sbtnExpend: TSpeedButton;
  24. tbXmjBills: TToolBar;
  25. tbExpand: TToolButton;
  26. tbSeparator: TToolButton;
  27. sprAssistant: TSplitter;
  28. jpsAssistant: TJimPages;
  29. jpsAssistantDealPayment: TJimPage;
  30. jpsAssistantSearch: TJimPage;
  31. dxsbViewControl: TdxSideBar;
  32. dxsbsViewControl: TdxSideBarStore;
  33. xbiBillsCompile: TdxStoredSideItem;
  34. jpsAssistantStandardBills: TJimPage;
  35. jpsMain: TJimPages;
  36. jpsMainBillsMeasure: TJimPage;
  37. xbiBillsGather: TdxStoredSideItem;
  38. jpsMainBillsGather: TJimPage;
  39. ilstLarge: TImageList;
  40. ilstSmall: TImageList;
  41. xbiStageCompare: TdxStoredSideItem;
  42. xbiCompleteDegree: TdxStoredSideItem;
  43. xbiReport: TdxStoredSideItem;
  44. jpsMainStageCompare: TJimPage;
  45. tobtnZJJL: TToolButton;
  46. tobtnBGL: TToolButton;
  47. jpsAssistantZJJL: TJimPage;
  48. jpsAssistantBGL: TJimPage;
  49. dxpmExpandBills: TdxBarPopupMenu;
  50. alProject: TActionList;
  51. actnFirstLevel: TAction;
  52. actnSecondLevel: TAction;
  53. actnThirdLevel: TAction;
  54. actnFourthLevel: TAction;
  55. actnFifthLevel: TAction;
  56. actnAllLevel: TAction;
  57. actnAllXmj: TAction;
  58. xbiBillsMeasure: TdxStoredSideItem;
  59. jpsMainBillsCompile: TJimPage;
  60. pnlPhaseSelect: TPanel;
  61. jcbAudit: TJimComboBox;
  62. jcbPhase: TJimComboBox;
  63. tobtnShowChecker: TToolButton;
  64. jpsAssistantChecker: TJimPage;
  65. btnSubmit: TCslButton;
  66. btnPass: TCslButton;
  67. btnNotPass: TCslButton;
  68. pnlNewPhase: TPanel;
  69. btnNewPhase: TCslButton;
  70. pnlProjectCheckStatus: TPanel;
  71. actnCurPhase: TAction;
  72. tobtnBookmark: TToolButton;
  73. jpsAssistantBookmark: TJimPage;
  74. jpsAssistantUpFile: TJimPage;
  75. tobtnUpFile: TToolButton;
  76. jpsAssistantDealBills: TJimPage;
  77. tobtnDealBills: TToolButton;
  78. actnAllPeg: TAction;
  79. jpsMainPriceMargin: TJimPage;
  80. xbiPriceMargin: TdxStoredSideItem;
  81. dxsbsViewControlItem8: TdxStoredSideItem;
  82. jpsMainOtherMeasure: TJimPage;
  83. procedure tobtnStandardBillsClick(Sender: TObject);
  84. procedure jcbPhaseChanged(Sender: TObject);
  85. procedure sbtnExpendClick(Sender: TObject);
  86. procedure jcbAuditChanged(Sender: TObject);
  87. procedure dxsbViewControlItemClick(Sender: TObject;
  88. Item: TdxSideBarItem);
  89. procedure dxpmExpandBillsPopup(Sender: TObject);
  90. procedure actnFirstLevelExecute(Sender: TObject);
  91. procedure tbExpandClick(Sender: TObject);
  92. procedure actnAllXmjExecute(Sender: TObject);
  93. procedure btnSubmitClick(Sender: TObject);
  94. procedure btnPassClick(Sender: TObject);
  95. procedure btnNotPassClick(Sender: TObject);
  96. procedure btnNewPhaseClick(Sender: TObject);
  97. procedure actnCurPhaseExecute(Sender: TObject);
  98. procedure tobtnUpFileClick(Sender: TObject);
  99. procedure jpsAssistantActivePageChanged(Sender: TObject);
  100. procedure actnAllPegExecute(Sender: TObject);
  101. private
  102. FProjectData: TProjectData;
  103. FBillsCompileFrame: TBillsCompileFrame;
  104. FBillsMeasureFrame: TBillsMeasureFrame;
  105. FBillsGatherFrame: TBillsGatherFrame;
  106. FPriceMarginFrame: TPriceMarginFrame;
  107. FPhaseCompareFrame: TPhaseCompareFrame;
  108. FOtherMeasureFrame: TOtherMeasureFrame;
  109. FCheckerFrame: TCheckerFrame;
  110. FDealPaymentFrame: TDealPaymentFrame;
  111. FZJJLFrame: TZJJLFrame;
  112. FBGLFrame: TBGLFrame;
  113. FSearchFrame: TSearchFrame;
  114. FBookmarkFrame: TBookmarkFrame;
  115. FUpFileManageView: TUpFileManageView;
  116. FDealBillsFrame: TDealBillsFrame;
  117. procedure CreateBillsFrame;
  118. procedure CreateDealPaymentFrame;
  119. procedure CreateBillsGatherFrame;
  120. procedure CreatePriceMarginFrame;
  121. procedure CreateCheckerFrame;
  122. procedure CreateUpFile;
  123. procedure CreateFrames;
  124. procedure InitialForVersions;
  125. procedure OpenCompare;
  126. procedure CloseCompare;
  127. // 刷新各界面只读、显示等
  128. procedure RefreshProjectState;
  129. // Change Main View
  130. procedure BeforeChangeView(APageIndex: Integer);
  131. procedure AfterChangeView(APageIndex: Integer);
  132. procedure ChangeView(APageIndex: Integer);
  133. procedure AdjustFramesDisplay;
  134. procedure SaveLog(AStr: string);
  135. procedure ExpandNodeTo(ALevel: Integer);
  136. procedure ExpandAllXmj;
  137. procedure ExpandCurPhase;
  138. procedure SetAssistantViewVisible(AVisible: Boolean);
  139. procedure SetImageOfsbtnExpend(AExpend: Boolean);
  140. procedure ControlAssistantButtonsDown(ATag: Integer);
  141. procedure ExpandBookmarkFrame(AExpandFrame: Boolean);
  142. procedure UpToWeb(ACheckPassed: Boolean);
  143. function CheckersHint: string;
  144. procedure SetUpFileManageView(const Value: TUpFileManageView);
  145. procedure CheckUpFile;
  146. procedure ShowPhaseHint;
  147. public
  148. constructor Create(AProjectData: TProjectData);
  149. destructor Destroy; override;
  150. procedure ResetAssistantView;
  151. procedure GeneratePhaseChooseList;
  152. procedure GenerateStageChooseList;
  153. function CreateNewPhase: Boolean;
  154. procedure CreateNewAudit;
  155. procedure RefreshColumnDisplay;
  156. function CheckCanReport: Boolean;
  157. procedure UnLockData;
  158. procedure ReLockData;
  159. function IsUped: Boolean;
  160. procedure ButtonControl_UpToWeb;
  161. procedure ButtonControl_NewPhase;
  162. procedure RepairAudits;
  163. function CheckFileAndCloudChekerList: Boolean;
  164. procedure LocateMeasureBills(AID: Integer);
  165. property ProjectData: TProjectData read FProjectData;
  166. property BillsCompileFrame: TBillsCompileFrame read FBillsCompileFrame;
  167. property BillsMeasureFrame: TBillsMeasureFrame read FBillsMeasureFrame;
  168. property BillsGatherFrame: TBillsGatherFrame read FBillsGatherFrame;
  169. property PriceMarginFrame: TPriceMarginFrame read FPriceMarginFrame;
  170. property OtherMeasureFrame: TOtherMeasureFrame read FOtherMeasureFrame;
  171. property CheckerFrame: TCheckerFrame read FCheckerFrame;
  172. property UpFileManageView: TUpFileManageView read FUpFileManageView write SetUpFileManageView;
  173. property DealPaymentFrame: TDealPaymentFrame read FDealPaymentFrame;
  174. property ZJJLFrame: TZJJLFrame read FZJJLFrame;
  175. property BGLFrame: TBGLFrame read FBGLFrame;
  176. property SearchFrame: TSearchFrame read FSearchFrame;
  177. property BookmarkFrame: TBookmarkFrame read FBookmarkFrame;
  178. property DealBillsFrame: TDealBillsFrame read FDealBillsFrame;
  179. end;
  180. implementation
  181. uses
  182. PhaseData, BGLDm, MainFrm, ZhAPI, SearchDm, PHPWebDm, ActiveX,
  183. ConstUnit, MD5Unit, sdIDTree, sdDB, mProgressFrm, ConditionalDefines,
  184. ProjectCommands, ProjectProperty, CheckerMemoFrm, BillsMeasureDm,
  185. ProgressHintFrm, mProgressProFrm, ReportManagerFrm,
  186. ScFileArchiverConsts;
  187. {$R *.dfm}
  188. { TProjectFrame }
  189. procedure TProjectFrame.AdjustFramesDisplay;
  190. begin
  191. jpsAssistant.Width := 395;
  192. SetAssistantViewVisible(False);
  193. end;
  194. procedure TProjectFrame.ControlAssistantButtonsDown(ATag: Integer);
  195. begin
  196. tobtnStandardBills.Down := ATag = tobtnStandardBills.Tag;
  197. tobtnDealPayment.Down := ATag = tobtnDealPayment.Tag;
  198. tobtnSearch.Down := ATag = tobtnSearch.Tag;
  199. tobtnZJJL.Down := ATag = tobtnZJJL.Tag;
  200. tobtnBGL.Down := ATag = tobtnBGL.Tag;
  201. tobtnShowChecker.Down := ATag = tobtnShowChecker.Tag;
  202. tobtnUpFile.Down := ATag = tobtnUpFile.Tag;
  203. tobtnBookmark.Down := ATag = tobtnBookmark.Tag;
  204. end;
  205. constructor TProjectFrame.Create(AProjectData: TProjectData);
  206. begin
  207. inherited Create(nil);
  208. FProjectData := AProjectData;
  209. ResetAssistantView;
  210. AdjustFramesDisplay;
  211. CreateFrames;
  212. RefreshProjectState;
  213. GeneratePhaseChooseList;
  214. GenerateStageChooseList;
  215. dxsbViewControl.SelectedItem := dxsbViewControl.ActiveGroup.Items.Items[0];
  216. InitialForVersions;
  217. CreateUpFile;
  218. if G_IsCloud then
  219. begin
  220. pnlProjectCheckStatus.Visible := True;
  221. // 0号台帐无审核人,网络读取会出错。所以只有在有计量的情况下才创建审核人
  222. if (ProjectData.PhaseIndex > 0) then
  223. begin
  224. tobtnShowChecker.Visible := True;
  225. CreateCheckerFrame;
  226. end;
  227. ButtonControl_NewPhase;
  228. ButtonControl_UpToWeb;
  229. RepairAudits;
  230. if FProjectData.IsGuest then
  231. tobtnUpFile.Visible := False;
  232. end;
  233. end;
  234. destructor TProjectFrame.Destroy;
  235. begin
  236. FBookmarkFrame.Free;
  237. FZJJLFrame.Free;
  238. FOtherMeasureFrame.Free;
  239. FBillsGatherFrame.Free;
  240. FDealPaymentFrame.Free;
  241. FBillsCompileFrame.Free;
  242. FBillsMeasureFrame.Free;
  243. FUpFileManageView.Free;
  244. SupportManager.ClearAssistantViewParent;
  245. inherited;
  246. end;
  247. procedure TProjectFrame.ResetAssistantView;
  248. begin
  249. AlignControl(SupportManager.StandardLibsFrame, jpsAssistantStandardBills, alClient);
  250. end;
  251. procedure TProjectFrame.SetAssistantViewVisible(AVisible: Boolean);
  252. begin
  253. jpsAssistant.Visible := AVisible;
  254. sprAssistant.Visible := AVisible;
  255. end;
  256. procedure TProjectFrame.SetImageOfsbtnExpend(AExpend: Boolean);
  257. begin
  258. sbtnExpend.Glyph := nil;
  259. ilstExpend.GetBitmap(Integer(AExpend), sbtnExpend.Glyph);
  260. end;
  261. procedure TProjectFrame.tobtnStandardBillsClick(Sender: TObject);
  262. begin
  263. with TToolButton(Sender) do
  264. begin
  265. if Down then
  266. begin
  267. jpsAssistant.ActivePageIndex := Tag;
  268. sbtnExpend.Tag := Tag;
  269. ControlAssistantButtonsDown(Tag);
  270. jpsMain.ActivePage.Tag := Tag;
  271. end;
  272. SetAssistantViewVisible(Down);
  273. SetImageOfsbtnExpend(Down);
  274. end;
  275. end;
  276. procedure TProjectFrame.GeneratePhaseChooseList;
  277. var
  278. iIndex: Integer;
  279. begin
  280. jcbPhase.Items.Clear;
  281. for iIndex := 1 to FProjectData.ProjProperties.PhaseCount do
  282. jcbPhase.Items.Add(Format(' 第 %d 期数据', [iIndex]));
  283. jcbPhase.ItemIndex := jcbPhase.Items.Count - 1;
  284. jcbPhase.Enabled := jcbPhase.Items.Count > 0;
  285. tobtnZJJL.Enabled := jcbPhase.Enabled;
  286. tobtnBGL.Enabled := jcbPhase.Enabled;
  287. end;
  288. procedure TProjectFrame.jcbPhaseChanged(Sender: TObject);
  289. begin
  290. if ProjectData.PhaseIndex = jcbPhase.ItemIndex + 1 then Exit;
  291. FProjectData.PhaseIndex := jcbPhase.ItemIndex + 1;
  292. GenerateStageChooseList;
  293. RefreshProjectState;
  294. if Assigned(FZJJLFrame) then
  295. begin
  296. FZJJLFrame.DataReadOnly := FProjectData.PhaseData.StageDataReadOnly;
  297. FZJJLFrame.ResetFrameLink(FProjectData.PhaseData.ZJJLData);
  298. end;
  299. if G_IsCloud then
  300. begin
  301. if Assigned(FCheckerFrame) then
  302. begin
  303. FCheckerFrame.Init;
  304. RepairAudits;
  305. end;
  306. ButtonControl_UpToWeb;
  307. UpFileManageView.RefreshViews;
  308. end;
  309. end;
  310. function TProjectFrame.CreateNewPhase: Boolean;
  311. var
  312. iBef: Integer;
  313. vArr: array of string;
  314. begin
  315. Result := False;
  316. if QuestMessage('请检查合同支付的初始值,新增一期计量将锁定当前全部的清单数据,是否继续?') then
  317. begin
  318. // 网络版创建第二期、第三期等跟第一期有所不同:
  319. // 创建前,先发送信号给服务器,服务器自动根据第一期生成第二期的审核人列表。
  320. // 有了这个列表程序才能正常接下来的业务。
  321. if G_IsCloud then
  322. begin
  323. iBef := FProjectData.ProjProperties.PhaseCount;
  324. if iBef >= 1 then
  325. begin
  326. vArr := VarArrayOf(['msg']);
  327. if PHPWeb.Search(PHPWeb.MeasureURL + 'phaseno/userlist/create',
  328. ['tenderid', 'phaseno'], [IntToStr(FProjectData.WebID),
  329. IntToStr(iBef + 1)], vArr) <> 1 then
  330. begin
  331. Application.MessageBox(Pchar('云端自动创建本期审批人列表出错,请重新尝试!'), '警告', MB_OK + MB_ICONWARNING);
  332. Exit;
  333. end;
  334. end;
  335. end;
  336. FProjectData.CreateNewPhase;
  337. tobtnDealPayment.Enabled := True;
  338. tobtnZJJL.Enabled := True;
  339. tobtnBGL.Enabled := True;
  340. jcbPhase.Enabled := True;
  341. jcbAudit.Enabled := True;
  342. jcbPhase.Items.Add(Format(' 第 %d 期数据', [jcbPhase.Items.Count + 1]));
  343. jcbPhase.ItemIndex := jcbPhase.Items.Count - 1;
  344. FProjectData.CopyPreData;
  345. RefreshProjectState;
  346. if G_IsCloud then
  347. begin
  348. if Assigned(CheckerFrame) then
  349. CheckerFrame.Free;
  350. CreateCheckerFrame;
  351. tobtnShowChecker.Visible := True;
  352. tobtnShowChecker.Enabled := True;
  353. ButtonControl_NewPhase;
  354. ButtonControl_UpToWeb;
  355. end;
  356. Result := True;
  357. end;
  358. end;
  359. procedure TProjectFrame.sbtnExpendClick(Sender: TObject);
  360. var
  361. bExpend: Boolean;
  362. begin
  363. bExpend := not jpsAssistant.Visible;
  364. jpsAssistant.ActivePageIndex := TSpeedButton(Sender).Tag;
  365. SetAssistantViewVisible(bExpend);
  366. SetImageOfsbtnExpend(bExpend);
  367. if bExpend then
  368. begin
  369. ControlAssistantButtonsDown(jpsAssistant.ActivePageIndex);
  370. jpsMain.ActivePage.Tag := jpsAssistant.ActivePageIndex;
  371. end
  372. else
  373. begin
  374. ControlAssistantButtonsDown(-1);
  375. jpsMain.ActivePage.Tag := -1;
  376. end;
  377. if G_IsCloud then
  378. CheckUpFile;
  379. end;
  380. procedure TProjectFrame.CreateNewAudit;
  381. begin
  382. FProjectData.PhaseData.CreateNewAuditData;
  383. jcbAudit.Items.Add(Format(' %d 审', [FProjectData.PhaseData.StageCount - 1]));
  384. if jcbAudit.ItemIndex <> jcbAudit.Items.Count - 1 then
  385. jcbAudit.ItemIndex := jcbAudit.Items.Count - 1
  386. else
  387. FProjectData.ResetPhaseDataLink;
  388. end;
  389. procedure TProjectFrame.GenerateStageChooseList;
  390. var
  391. iIndex: Integer;
  392. begin
  393. jcbAudit.Items.Clear;
  394. if not FProjectData.PhaseData.Active then Exit;
  395. for iIndex := 0 to FProjectData.PhaseData.AuditCount do
  396. begin
  397. if iIndex = 0 then
  398. jcbAudit.Items.Add(' 原报')
  399. else
  400. jcbAudit.Items.Add(Format(' %d 审', [iIndex]));
  401. end;
  402. if jcbAudit.ItemIndex <> jcbAudit.Items.Count - 1 then
  403. jcbAudit.ItemIndex := jcbAudit.Items.Count - 1
  404. else
  405. FProjectData.ResetPhaseDataLink;
  406. jcbAudit.Enabled := jcbAudit.Items.Count > 0;
  407. end;
  408. procedure TProjectFrame.jcbAuditChanged(Sender: TObject);
  409. begin
  410. if FProjectData.PhaseData.StageIndex = jcbAudit.ItemIndex then Exit;
  411. FProjectData.StageIndex := jcbAudit.ItemIndex;
  412. RefreshProjectState;
  413. end;
  414. procedure TProjectFrame.dxsbViewControlItemClick(Sender: TObject;
  415. Item: TdxSideBarItem);
  416. procedure BeforeChangeView;
  417. begin
  418. if G_IsCloud then
  419. begin
  420. tobtnShowChecker.Visible := ProjectData.PhaseIndex > 0;
  421. tobtnShowChecker.Enabled := (Item.Tag = xbiBillsMeasure.Tag);
  422. ButtonControl_NewPhase;
  423. if Item.Tag = xbiBillsCompile.Tag then
  424. begin
  425. if tobtnShowChecker.Down then
  426. begin
  427. tobtnShowChecker.Down := False;
  428. tobtnShowChecker.Click;
  429. tobtnStandardBills.Down := True;
  430. tobtnStandardBills.Click;
  431. tobtnStandardBills.Down := False;
  432. tobtnStandardBills.Click;
  433. end;
  434. end;
  435. end;
  436. // 记录台账分解、计量台账等的右侧展开情况
  437. if jpsAssistant.Visible then
  438. jpsMain.ActivePage.Tag := jpsAssistant.ActivePageIndex
  439. else
  440. jpsMain.ActivePage.Tag := -1;
  441. end;
  442. procedure AfterChangeView;
  443. begin
  444. // 仅计量台账界面可以选择计量期
  445. pnlPhaseSelect.Visible := Item.Tag = xbiBillsMeasure.Tag;
  446. // 台账分解、计量台账、审核比较 可使用"显示至"功能
  447. tbExpand.Visible := (Item.Tag = xbiBillsCompile.Tag)
  448. or (Item.Tag = xbiBillsMeasure.Tag)
  449. or (Item.Tag = xbiStageCompare.Tag);
  450. // 右侧按钮是否显示
  451. tbToolsButton.Visible := (Item.Tag = xbiBillsCompile.Tag)
  452. or (Item.Tag = xbiBillsMeasure.Tag);
  453. tobtnBGL.Visible := Item.Tag = xbiBillsMeasure.Tag;
  454. tobtnZJJL.Visible := Item.Tag = xbiBillsMeasure.Tag;
  455. // 控制整个按钮工具栏显示,
  456. pnlToolBar.Visible := pnlPhaseSelect.Visible or tbExpand.Visible or tbToolsButton.Visible;
  457. // 根据当前View控制右侧按钮是否按下,右侧工具窗是否弹开
  458. jpsAssistant.ActivePageIndex := jpsMain.ActivePage.Tag;
  459. sbtnExpend.Tag := jpsMain.ActivePage.Tag;
  460. ControlAssistantButtonsDown(jpsMain.ActivePage.Tag);
  461. SetAssistantViewVisible(jpsMain.ActivePage.Tag <> -1);
  462. SetImageOfsbtnExpend(jpsMain.ActivePage.Tag <> -1);
  463. // 0号台账与计量台账的书签不同
  464. if Item.Tag = xbiBillsCompile.Tag then
  465. FBookmarkFrame.BMType := bmtCompile
  466. else if Item.Tag = xbiBillsMeasure.Tag then
  467. FBookmarkFrame.BMType := bmtMeasure;
  468. // 0号台账与计量台账的查找定位不同
  469. if Item.Tag = xbiBillsCompile.Tag then
  470. FSearchFrame.LocateType := ltCompile
  471. else if Item.Tag = xbiBillsMeasure.Tag then
  472. FSearchFrame.LocateType := ltMeasure;
  473. // 切换至清单汇总,须重新汇总
  474. if Item.Tag = xbiBillsGather.Tag then
  475. BillsGatherFrame.RefreshBills;
  476. // 切换至材料调差,须重新汇总展示调差清单
  477. if Item.Tag = xbiPriceMargin.Tag then
  478. PriceMarginFrame.RefreshBills;
  479. if G_IsCloud then
  480. begin
  481. if (Item.Tag = xbiBillsCompile.Tag) or (Item.Tag = xbiBillsMeasure.Tag) then
  482. CheckUpFile;
  483. tobtnUpFile.Visible := (Item.Tag = xbiBillsMeasure.Tag) and (not ProjectData.IsGuest);
  484. if (tobtnUpFile.Visible = False) and (jpsAssistant.ActivePage = jpsAssistantUpFile) then
  485. jpsAssistant.ActivePage := jpsAssistantStandardBills;
  486. end;
  487. end;
  488. (*
  489. procedure ChangeView;
  490. begin
  491. BeforeChangeView;
  492. case Item.Tag of
  493. 0, 2: jpsMain.ActivePageIndex := Item.Tag;
  494. 1, 3, 5: if CheckMeasureEdition then jpsMain.ActivePageIndex := Item.Tag;
  495. end;
  496. AfterChangeView;
  497. end;
  498. *)
  499. procedure ClearOldReports(AReportsPath: string);
  500. var
  501. SRec: TSearchRec;
  502. iRetval, iPos: Integer;
  503. vHead7: TScFile7Head;
  504. sProp, sFile, sPath: string;
  505. vFS: TFileStream;
  506. begin
  507. iRetval := FindFirst(AReportsPath + '*.srt', faAnyFile, sRec);
  508. try
  509. while iRetval = 0 do
  510. begin
  511. if (SRec.Attr and faDirectory) = 0 then
  512. begin
  513. sFile := AReportsPath + SRec.Name;
  514. vFS := TFileStream.Create(sFile, fmOpenRead);
  515. try
  516. vFS.Read(vHead7, SizeOf(vHead7));
  517. finally
  518. vFS.Free;
  519. end;
  520. SetString(sProp, vHead7.ReportProperties, 256);
  521. iPos := Pos('报表ID=', sProp);
  522. if iPos <= 0 then
  523. DeleteFile(PChar(sFile));
  524. end;
  525. iRetval := FindNext(SRec);
  526. end;
  527. finally
  528. SysUtils.FindClose(SRec);
  529. end;
  530. end;
  531. procedure DisplayReports;
  532. var vRMForm: TReportManagerForm;
  533. sPath: string;
  534. begin
  535. if G_IsCloud then
  536. begin
  537. sPath := ExtractFilePath(ParamStr(0)) + 'ReportTemplates\';
  538. ClearOldReports(sPath);
  539. if FileCount(sPath, '.srt') = 0 then
  540. begin
  541. Screen.Cursor := crHourGlass;
  542. vRMForm := TReportManagerForm.Create(nil);
  543. try
  544. vRMForm.ShowModal;
  545. finally
  546. vRMForm.Free;
  547. Screen.Cursor := crDefault;
  548. end;
  549. end;
  550. end;
  551. // 准备数据
  552. if Item.Tag = xbiReport.Tag then
  553. FProjectData.CopyPhaseData;
  554. // 显示报表界面
  555. DisplayReportsForm(FProjectData);
  556. dxsbViewControl.SelectedItem := dxsbViewControl.ActiveGroup.Items[jpsMain.ActivePageIndex];
  557. end;
  558. procedure DisplayCompare;
  559. begin
  560. if FProjectData.ProjProperties.PhaseCount = 0 then
  561. begin
  562. ErrorMessage('当前项目未开始计量,暂无审批比较数据!');
  563. dxsbViewControl.SelectedItem := dxsbViewControl.ActiveGroup.Items[jpsMain.ActivePageIndex];
  564. Abort;
  565. end;
  566. ShowProgressHint('正在准备审批比较数据,请稍候...');
  567. Screen.Cursor := crHourGlass;
  568. try
  569. BeforeChangeView;
  570. if CheckMeasureEdition then
  571. begin
  572. OpenCompare;
  573. jpsMain.ActivePageIndex := Item.Tag;
  574. end;
  575. AfterChangeView;
  576. finally
  577. Screen.Cursor := crDefault;
  578. CloseProgressHint;
  579. end;
  580. end;
  581. procedure DisplayPriceMargin;
  582. var
  583. vPM_Node: TsdIDTreeNode;
  584. begin
  585. vPM_Node := FProjectData.BillsCompileData.BillsCompileTree.FindNode(iPriceMarginID);
  586. {if not Assigned(vPM_Node) then
  587. begin
  588. ErrorMessage('台账中无预定义价差节点,不可使用价差功能。');
  589. dxsbViewControl.SelectedItem := dxsbViewControl.ActiveGroup.Items[jpsMain.ActivePageIndex];
  590. Abort;
  591. end
  592. else }if ProjectData.ProjProperties.PhaseCount = 0 then
  593. begin
  594. TipMessage('未计量前不可进行材料调差。');
  595. dxsbViewControl.SelectedItem := dxsbViewControl.ActiveGroup.Items[jpsMain.ActivePageIndex];
  596. Abort;
  597. end;
  598. ChangeView(Item.Tag);
  599. end;
  600. var
  601. bCloseCompare: Boolean;
  602. begin
  603. if Item.Tag = jpsMain.ActivePageIndex then Exit;
  604. bCloseCompare := (Item.Tag in [0..3, 5]) and (jpsMain.ActivePageIndex = 4);
  605. case Item.Tag of
  606. 0..2, 5: ChangeView(Item.Tag);
  607. 3: DisplayPriceMargin;
  608. 4: DisplayCompare;
  609. 6: DisplayReports;
  610. end;
  611. if bCloseCompare then
  612. CloseCompare;
  613. end;
  614. procedure TProjectFrame.CreateBillsFrame;
  615. begin
  616. FBillsCompileFrame := TBillsCompileFrame.Create(Self, FProjectData.BillsCompileData);
  617. FBillsCompileFrame.ShowDesignQuantity := FProjectData.ProjProperties.ShowDesignQuantity;
  618. FBillsCompileFrame.ShowAlias := FProjectData.ProjProperties.ShowAlias;
  619. FBillsCompileFrame.OnAfterSetBookmark := ExpandBookmarkFrame;
  620. AlignControl(FBillsCompileFrame, jpsMainBillsCompile, alClient);
  621. UpdateSysProgress(65, '正在解析数据');
  622. FBillsMeasureFrame := TBillsMeasureFrame.Create(Self, FProjectData.BillsMeasureData);
  623. FBillsMeasureFrame.OnAfterSetBookmark := ExpandBookmarkFrame;
  624. FBillsMeasureFrame.ShowPriceChange := FProjectData.ProjProperties.ShowPriceChange;
  625. FBillsMeasureFrame.ShowBGLCode := FProjectData.ProjProperties.ShowBGLCode;
  626. FBillsMeasureFrame.ShowDesignQuantity := FProjectData.ProjProperties.ShowDesignQuantity;
  627. FBillsMeasureFrame.ShowAlias := FProjectData.ProjProperties.ShowAlias;
  628. AlignControl(FBillsMeasureFrame, jpsMainBillsMeasure, alClient);
  629. end;
  630. procedure TProjectFrame.CreateDealPaymentFrame;
  631. begin
  632. FDealPaymentFrame := TDealPaymentFrame.Create(Self, FProjectData.DealPaymentData);
  633. AlignControl(FDealPaymentFrame, jpsAssistantDealPayment, alClient);
  634. end;
  635. procedure TProjectFrame.CreateBillsGatherFrame;
  636. begin
  637. FBillsGatherFrame := TBillsGatherFrame.Create(Self, FProjectData.BillsGatherData);
  638. AlignControl(FBillsGatherFrame, jpsMainBillsGather, alClient);
  639. FBillsGatherFrame.ShowPriceChange := FProjectData.ProjProperties.ShowPriceChange;
  640. FBillsGatherFrame.ShowPhaseData := FProjectData.ProjProperties.PhaseCount > 0;
  641. FBillsGatherFrame.OnLocateMeasureBills := LocateMeasureBills;
  642. end;
  643. procedure TProjectFrame.dxpmExpandBillsPopup(Sender: TObject);
  644. begin
  645. dxpmExpandBills.ItemLinks.Items[8].Visible := _IsDebugView;
  646. dxpmExpandBills.ItemLinks.Items[7].Visible := jpsMain.ActivePageIndex in [0, 1, 4];
  647. dxpmExpandBills.ItemLinks.Items[6].Visible := jpsMain.ActivePageIndex in [1, 4];
  648. SetDxBtnAction(actnFirstLevel, MainForm.dxbtnFirstLevel);
  649. SetDxBtnAction(actnSecondLevel, MainForm.dxbtnSecondLevel);
  650. SetDxBtnAction(actnThirdLevel, MainForm.dxbtnThirdLevel);
  651. SetDxBtnAction(actnFourthLevel, MainForm.dxbtnFourthLevel);
  652. SetDxBtnAction(actnFifthLevel, MainForm.dxbtnFifthLevel);
  653. SetDxBtnAction(actnAllLevel, MainForm.dxbtnAllLevel);
  654. SetDxBtnAction(actnCurPhase, MainForm.dxbtnCurPhase);
  655. SetDxBtnAction(actnAllXmj, MainForm.dxbtnAllXmj);
  656. SetDxBtnAction(actnAllPeg, MainForm.dxbtnAllPeg);
  657. end;
  658. procedure TProjectFrame.actnFirstLevelExecute(Sender: TObject);
  659. begin
  660. ExpandNodeTo(TAction(Sender).Tag);
  661. end;
  662. procedure TProjectFrame.tbExpandClick(Sender: TObject);
  663. var
  664. P: TPoint;
  665. begin
  666. P := pnlToolBar.ClientToScreen(Point(tbExpand.Left, tbExpand.Top + tbExpand.Height));
  667. dxpmExpandBills.Popup(P.X, P.Y);
  668. end;
  669. procedure TProjectFrame.actnAllXmjExecute(Sender: TObject);
  670. begin
  671. ExpandAllXmj;
  672. end;
  673. procedure TProjectFrame.ExpandNodeTo(ALevel: Integer);
  674. begin
  675. Screen.Cursor := crHourGlass;
  676. case ALevel of
  677. 0..4: UpdateSysProgress(0, Format('正在显示至第%d层', [ALevel + 1]));
  678. else UpdateSysProgress(0, '正在显示至最底层');
  679. end;
  680. try
  681. case jpsMain.ActivePageIndex of
  682. 0: FBillsCompileFrame.ExpandNodeTo(ALevel);
  683. 1: FBillsMeasureFrame.ExpandNodeTo(ALevel);
  684. 4: FPhaseCompareFrame.ExpandNodeTo(ALevel);
  685. end;
  686. finally
  687. UpdateSysProgress(0, '就绪');
  688. Screen.Cursor := crDefault;
  689. end;
  690. end;
  691. procedure TProjectFrame.ExpandAllXmj;
  692. begin
  693. Screen.Cursor := crHourGlass;
  694. UpdateSysProgress(0, '正在显示至项目节');
  695. try
  696. case jpsMain.ActivePageIndex of
  697. 0: FBillsCompileFrame.ExpandXmjNode;
  698. 1: FBillsMeasureFrame.ExpandXmjNode;
  699. 4: FPhaseCompareFrame.ExpandXmjNode;
  700. end;
  701. finally
  702. UpdateSysProgress(0, '就绪');
  703. Screen.Cursor := crDefault;
  704. end;
  705. end;
  706. procedure TProjectFrame.UnLockData;
  707. procedure DoUnLockData;
  708. begin
  709. FProjectData.CanUnlockInfo := True;
  710. FBillsCompileFrame.stdBillsCompile.Column('LockedInfo').ReadOnly := False;
  711. //FProjectData.BillsData.UnLockedBaseData;
  712. end;
  713. begin
  714. if FProjectData.CheckPassword then
  715. DoUnLockData;
  716. end;
  717. procedure TProjectFrame.CreateCheckerFrame;
  718. begin
  719. FCheckerFrame := TCheckerFrame.Create(Self);
  720. FCheckerFrame.Owner := Self;
  721. FCheckerFrame.ProjectData := FProjectData;
  722. AlignControl(FCheckerFrame, jpsAssistantChecker, alClient);
  723. FCheckerFrame.Init;
  724. end;
  725. procedure TProjectFrame.btnSubmitClick(Sender: TObject);
  726. begin
  727. if not CheckCanReport then Exit;
  728. Screen.Cursor := crHourGlass;
  729. try
  730. UpToWeb(True);
  731. finally
  732. Screen.Cursor := crDefault;
  733. end;
  734. end;
  735. procedure TProjectFrame.btnPassClick(Sender: TObject);
  736. begin
  737. btnSubmitClick(Sender);
  738. end;
  739. function TProjectFrame.IsUped: Boolean; // 是否上传过
  740. begin
  741. Result := False;
  742. // 只有0号台帐那肯定没上传过
  743. if ProjectData.PhaseIndex = 0 then Exit;
  744. // 当前期是旧期
  745. if ProjectData.IsHistoryPhase then
  746. Result := True
  747. // 当前显示的期是最新期,分两种情况判断,如果第一审核人已有状态,则上传过了
  748. else
  749. begin
  750. // 当用户点击新增一期计量后,会调用该方法,此时,有一期数据,却为上传过
  751. if not Assigned(CheckerFrame) then
  752. Result := False
  753. else if not CheckerFrame.HasChecker then
  754. Result := False
  755. else if CheckerFrame.FirstChecker.CheckStatus = csNotBegin then
  756. Result := False
  757. else
  758. Result := True;
  759. end;
  760. end;
  761. procedure TProjectFrame.ButtonControl_UpToWeb;
  762. begin
  763. if ProjectData.CurUserIsAuthor then
  764. begin
  765. btnSubmit.Visible := True;
  766. // 有计量(非0号台账状态),且当前计量期尚未上报过
  767. btnSubmit.Enabled := (ProjectData.PhaseIndex > 0) and (not IsUped);
  768. btnPass.Visible := False;
  769. btnNotPass.Visible := btnPass.Visible;
  770. btnSubmit.Left := jcbAudit.Left + jcbAudit.Width + 5;
  771. end
  772. else if ProjectData.CurUserIsOwner or ProjectData.CurUserIsChecker then
  773. begin
  774. btnSubmit.Visible := False;
  775. btnPass.Visible := True;
  776. btnNotPass.Visible := btnPass.Visible;
  777. // 在本期我是审核人,切换到历史期有可能我没参与。 所以当CheckerFrame.Me为空时,有可能我是编制人,有可能历史期我没参与。
  778. // 历史期,管你那么多,直接按钮不见。
  779. if ProjectData.PhaseIndex < ProjectData.ProjProperties.PhaseCount then
  780. btnPass.Enabled := False
  781. else
  782. begin
  783. if CheckerFrame.Me <> nil then
  784. btnPass.Enabled := CheckerFrame.Me.IsChecking
  785. else // 游客,关注人身份
  786. btnPass.Enabled := False;
  787. end;
  788. btnNotPass.Enabled := btnPass.Enabled;
  789. btnPass.Left := jcbAudit.Left + jcbAudit.Width + 5;
  790. btnNotPass.Left := btnPass.Left + btnPass.Width + 1;
  791. end;
  792. ShowPhaseHint;
  793. if Assigned(FCheckerFrame) then
  794. FCheckerFrame.RepairDelete(btnSubmit.Visible and btnSubmit.Enabled);
  795. end;
  796. procedure TProjectFrame.UpToWeb(ACheckPassed: Boolean);
  797. var sURL, sAppFile, sJsonFile_Bills, sJsonFile_Common, sAppFile_UnLock,
  798. sZipFile, sResult, sMD5_JL, sPassedHint1, sPassedHint2,
  799. sNoPassedHint1, sNoPassedHint2, sCheckerMemo: string;
  800. vA, vArr: array of string;
  801. vRec: TsdDataRecord;
  802. bSubmit: Boolean;
  803. vExportor: TTenderExport;
  804. vCF: TCheckerMemoForm;
  805. bNeedFreeEarlier: Boolean;
  806. // 1 审核; 2 批复。
  807. function SaveAndExport(AType: Integer): Boolean;
  808. function InnerSubmit(AType: Integer): Boolean;
  809. begin
  810. if AType = 1 then
  811. Result := ProjectData.SubmitProject(sAppFile)
  812. else if AType = 2 then
  813. Result := ProjectData.ReplyProject(sAppFile);
  814. end;
  815. begin
  816. Result := False;
  817. ProgressProCreate(100, '本地数据文件上传到云端');
  818. ProgressProRun('保存本地数据...', 0);
  819. ProjectData.SaveAndCheck;
  820. ProgressProRun('保存本地数据。OK', 10, pmtEdit);
  821. ProgressProRun('导出并检验文件...', 0);
  822. if not InnerSubmit(AType) then
  823. if not InnerSubmit(AType) then
  824. begin
  825. bNeedFreeEarlier := True;
  826. Application.MessageBox('Sorry!本地文件连续2次导出检验失败!如果重试后仍不能解决该问题,请联系纵横客服。', '提示', MB_OK + MB_ICONWARNING);
  827. Exit;
  828. end;
  829. Result := True;
  830. ProgressProRun('导出并检验文件。OK', 10, pmtEdit);
  831. end;
  832. begin
  833. bSubmit := False;
  834. bNeedFreeEarlier := False;
  835. sAppFile := PHPWeb.UserPath + 'ProjectFile.rmf';
  836. // 只有编制人才真正需要该文件存在
  837. // sAppFile_UnLock := PHPWeb.UserPath + 'ProjectFile_UnLock';
  838. sPassedHint1 :=
  839. '【审批通过】后,计量数据将自动交付给下一审批人进行审批,操作后将不可更改,是否通过审批?';
  840. sPassedHint2 :=
  841. '(终审)审批通过后本期计量审批将标记为审批完成,操作后将不可更改,是否通过审批?';
  842. sNoPassedHint1 :=
  843. '【审批不通过】后,本次审批将结束,后续的审批人也将不会审批本次计量,' +
  844. '本期数据也将直接打回给上报人进行重新计量报审。' + #10#13 +
  845. '点击【确定】进入操作确认。';
  846. sNoPassedHint2 := PHPWeb.RealName +
  847. ',请确认本期计量审批不通过。' + #10#13 + '点击【确定】本期计量审批' +
  848. '不通过,计量将不可再更改。';
  849. vCF := TCheckerMemoForm.Create(nil);
  850. try
  851. if ProjectData.CurUserIsAuthor then
  852. begin
  853. bSubmit := True;
  854. if not CheckerFrame.HasNormalChecker then
  855. begin
  856. Application.MessageBox('上报审批前请先配置审批人!', '提示', MB_OK + MB_ICONWARNING);
  857. tobtnShowChecker.Down := True;
  858. tobtnShowChecker.Click;
  859. Exit;
  860. end;
  861. // 保存一次缓存数据,以保证提示信息能读取正确的值
  862. ProjectData.SaveLastestPhaseMainData;
  863. if Application.MessageBox(PChar(CheckersHint), '询问', MB_YESNO + MB_ICONQUESTION) = ID_No then
  864. Exit;
  865. if not SaveAndExport(1) then Exit;
  866. end
  867. else if ProjectData.CurUserIsChecker then
  868. begin
  869. if ACheckPassed then
  870. begin
  871. vCF.Init(sPassedHint1, 1);
  872. if vCF.ShowModal = mrCancel then
  873. Exit
  874. else
  875. sCheckerMemo := vCF.Memo;
  876. end
  877. else
  878. begin
  879. vCF.Init(sNoPassedHint1, 0);
  880. if vCF.ShowModal = mrCancel then
  881. Exit
  882. else
  883. sCheckerMemo := vCF.Memo;
  884. if Application.MessageBox(PChar(sNoPassedHint2), '询问', MB_OKCANCEL + MB_ICONQUESTION) = ID_CANCEL then
  885. Exit;
  886. end;
  887. if not SaveAndExport(1) then Exit;
  888. end
  889. else if ProjectData.CurUserIsOwner then
  890. begin
  891. if ACheckPassed then
  892. begin
  893. vCF.Init(sPassedHint2, 1);
  894. if vCF.ShowModal = mrCancel then
  895. Exit
  896. else
  897. sCheckerMemo := vCF.Memo;
  898. end
  899. else
  900. begin
  901. vCF.Init(sNoPassedHint1, 0);
  902. if vCF.ShowModal = mrCancel then
  903. Exit
  904. else
  905. sCheckerMemo := vCF.Memo;
  906. if not QuestMessage(sNoPassedHint2) then
  907. Exit;
  908. end;
  909. if not SaveAndExport(2) then Exit;
  910. end;
  911. finally
  912. vCF.Free;
  913. if bNeedFreeEarlier then
  914. ProgressProFree;
  915. end;
  916. try
  917. ProgressProRun('生成汇总数据...', 0);
  918. sJsonFile_Bills := ExtractFilePath(sAppFile) + 'JsonFile_Bills.json';
  919. sJsonFile_Common := ExtractFilePath(sAppFile) + 'JsonFile_Common.json';
  920. sMD5_JL := MD5_File(sAppFile);
  921. // 上传清单,每期都传,可覆盖旧的。
  922. ProjectData.ExportJson_Bills(sJsonFile_Bills);
  923. ProjectData.ExportJson_Common(sJsonFile_Common);
  924. ProgressProRun('生成汇总数据。OK', 10, pmtEdit);
  925. ProgressProRun('生成并检验up数据包文件...', 0);
  926. sZipFile := PHPWeb.zip([sAppFile, sJsonFile_Bills, sJsonFile_Common]);
  927. if not PHPWeb.CheckZip(sZipFile, 3) then
  928. begin
  929. WarningMessage('up数据包无法正确解压检验,请重试!如果重试后仍不能解决该问题,请联系纵横客服。', ProgressProHandle);
  930. Exit;
  931. end;
  932. ProgressProRun('校验数据包。OK', 10, pmtEdit);
  933. try
  934. ProgressProRun('上传数据包到云端...(温馨提示:请不要乱点哦,Windows容易死机)', 0);
  935. if PHPWeb.UpDataFile(PHPWeb.UserID, ProjectData.WebID, ProjectData.PhaseIndex,
  936. sZipFile, sMD5_JL, bSubmit, sResult, ACheckPassed, sCheckerMemo) then
  937. begin
  938. DeleteFile(sAppFile);
  939. ProgressProRun('上传数据包到云端。OK', 100, pmtEdit, pptSet);
  940. if ProjectData.CurUserIsChecker then
  941. ProjectData.Checkers.FindByID(PHPWeb.UserID).Memo := sCheckerMemo;
  942. if ProjectData.PhaseIndex = 0 then // 0号台账,现已废弃
  943. begin
  944. MainForm.ProjectManagerFrame.ShowProjectInfoTop(0);
  945. end
  946. else
  947. Begin
  948. vRec := MainForm.ProjectManagerFrame.Rec(ProjectData.ProjectID);
  949. vRec.BeginUpdate;
  950. vRec.ValueByName('WebMD5').AsString := sMD5_JL;
  951. vRec.EndUpdate;
  952. MainForm.ProjectManagerFrame.ShowProjectInfoTop;
  953. if ProjectData.CurUserIsAuthor then
  954. begin
  955. CheckerFrame.FirstChecker.CheckStatus := csChecking;
  956. CheckerFrame.AddFrame.Visible := False;
  957. end
  958. else
  959. begin
  960. if ACheckPassed then
  961. begin
  962. CheckerFrame.Me.CheckStatus := csFinished;
  963. if ProjectData.CurUserIsChecker then
  964. CheckerFrame.NextChecker.CheckStatus := csChecking;
  965. end
  966. else
  967. CheckerFrame.Me.CheckStatus := csNotPass;
  968. CheckerFrame.Me.CheckerMemo := sCheckerMemo;
  969. CheckerFrame.Me.CheckedTime := Format('[%s][线下审批]',[DateToStr(Date)]);
  970. end;
  971. end;
  972. btnSubmit.Enabled := False;
  973. FCheckerFrame.RepairDelete(False);
  974. btnPass.Enabled := False;
  975. btnNotPass.Enabled := btnPass.Enabled;
  976. ShowPhaseHint;
  977. ProgressProHide;
  978. TipMessage('^_^ 恭喜!数据已成功上传到云端服务器。', ProgressProHandle);
  979. end
  980. else
  981. begin
  982. ProgressProHide;
  983. WarningMessage('数据无法上传:' + sResult, ProgressProHandle);
  984. if Pos('审批完毕', sResult) > 0 then
  985. begin
  986. btnSubmit.Enabled := False;
  987. btnPass.Enabled := False;
  988. btnNotPass.Enabled := btnPass.Enabled;
  989. end;
  990. end;
  991. except
  992. ProgressProHide;
  993. WarningMessage('与服务器断开连接,请稍后重试。' + sResult, ProgressProHandle);
  994. end;
  995. finally
  996. ProgressProFree;
  997. end;
  998. end;
  999. procedure TProjectFrame.btnNotPassClick(Sender: TObject);
  1000. begin
  1001. Screen.Cursor := crHourGlass;
  1002. try
  1003. UpToWeb(False);
  1004. finally
  1005. Screen.Cursor := crDefault;
  1006. end;
  1007. end;
  1008. function TProjectFrame.CheckersHint: string;
  1009. var vSL: TStringList;
  1010. i: Integer;
  1011. sChecker, sChar: string;
  1012. Rec: TsdDataRecord;
  1013. begin
  1014. vSL := TStringList.Create;
  1015. try
  1016. CheckerFrame.CheckerNameList(vSL);
  1017. for i := 0 to vSL.Count - 1 do
  1018. begin
  1019. if i = 0 then
  1020. sChar := ''
  1021. else
  1022. sChar := ' > ';
  1023. sChecker := sChecker + sChar + vSL[i];
  1024. end;
  1025. while Length(sChecker) < 38 do // 保证提示框的大小达到最佳效果
  1026. sChecker := sChecker + ' ';
  1027. Rec := ProjectData.MainListData.GetPhaseMainRecord(FProjectData.PhaseIndex);
  1028. Result := Format('本期计量:%m元。%s审批流程:%s%s上报后将不可更改,确定要上报吗?',
  1029. [Rec.ValueByName('GatherTotalPrice').AsFloat, #10#13#10#13, sChecker, #10#13#10#13]);
  1030. finally
  1031. vSL.Free;
  1032. end;
  1033. end;
  1034. procedure TProjectFrame.btnNewPhaseClick(Sender: TObject);
  1035. begin
  1036. if not CreateNewPhase then Exit;
  1037. dxsbViewControl.SelectedItem := dxsbViewControl.Groups[0].Items[1];
  1038. dxsbViewControl.OnItemClick(Sender, dxsbViewControl.Groups[0].Items[1]);
  1039. end;
  1040. procedure TProjectFrame.ButtonControl_NewPhase;
  1041. var b1, b2, b3: Boolean;
  1042. begin
  1043. // “新建一期计量”按钮的显示隐藏
  1044. // 计量界面,且是原报才显示
  1045. b1 := (dxsbViewControl.SelectedItem.Index = 0) and ProjectData.CurUserIsAuthor;
  1046. // ①尚无审核人列表 ②当前期已审核完成
  1047. b2 := (not Assigned(CheckerFrame)) or (Assigned(CheckerFrame) and CheckerFrame.OwnerFrame.IsFinished);
  1048. // 当前查看的是最新期。查看历史期不显示。
  1049. b3 := (FProjectData.ProjProperties.PhaseCount = FProjectData.PhaseIndex);
  1050. pnlNewPhase.Visible := b1 and b2 and b3;
  1051. end;
  1052. procedure TProjectFrame.actnCurPhaseExecute(Sender: TObject);
  1053. begin
  1054. ExpandCurPhase;
  1055. end;
  1056. procedure TProjectFrame.RepairAudits;
  1057. var i, iSel: Integer;
  1058. UserArr: array of string;
  1059. sURL: string;
  1060. begin
  1061. jcbAudit.ItemHeight := 20;
  1062. jcbAudit.Font.Name := '微软雅黑';
  1063. jcbAudit.Font.Size := 10;
  1064. jcbAudit.DropDownBox.Height := jcbAudit.Items.Count * jcbAudit.ItemHeight + 35;
  1065. iSel := jcbAudit.ItemIndex;
  1066. for i := 0 to jcbAudit.Items.Count - 1 do
  1067. begin
  1068. if i = 0 then
  1069. begin
  1070. // 原报:编制人。没有跟审核人一个表,另外查询。个人觉得这里设计得不好。
  1071. // 打开软件时自动扫描,杰哥那头返回不了编制人的项目,也是这个原因。
  1072. // 说服不了特工,先这样吧。
  1073. sURL := Format('%suser/get/%d/info', [PHPWeb.MeasureURL, FProjectData.WebAuthorID]);
  1074. UserArr := VarArrayOf(['avatar', 'name', 'jobs', 'company']);
  1075. if PHPWeb.Search(sURL, [], [], UserArr) = 1 then
  1076. jcbAudit.Items[i] := jcbAudit.Items[i] + ' ' + UserArr[1] + '-' + UserArr[2];
  1077. end
  1078. else
  1079. begin
  1080. // 某种漏洞的操作下,文件中记载的审核人数和审核人列表中的审核人数不一致,
  1081. // 匹配时会溢出。这里要加判断。
  1082. if i > CheckerFrame.List.Count then Break;
  1083. if TOrderCheckerFrame(CheckerFrame.List[i - 1]) = FCheckerFrame.OwnerFrame then
  1084. begin
  1085. jcbAudit.Items[i] := ' 终审 ' +
  1086. TOrderCheckerFrame(CheckerFrame.List[i - 1]).UserName + '-' +
  1087. TOrderCheckerFrame(CheckerFrame.List[i - 1]).UserRole
  1088. end
  1089. else
  1090. begin
  1091. jcbAudit.Items[i] := jcbAudit.Items[i] + ' ' +
  1092. TOrderCheckerFrame(CheckerFrame.List[i - 1]).UserName + '-' +
  1093. TOrderCheckerFrame(CheckerFrame.List[i - 1]).UserRole;
  1094. end;
  1095. end;
  1096. end;
  1097. jcbAudit.ItemIndex := iSel;
  1098. end;
  1099. procedure TProjectFrame.CreateFrames;
  1100. begin
  1101. UpdateSysProgress(10, '正在解析数据');
  1102. CreateBillsFrame;
  1103. UpdateSysProgress(130, '正在解析数据');
  1104. CreateDealPaymentFrame;
  1105. UpdateSysProgress(135, '正在解析数据');
  1106. CreateBillsGatherFrame;
  1107. UpdateSysProgress(140, '正在解析数据');
  1108. CreatePriceMarginFrame;
  1109. UpdateSysProgress(145, '正在解析数据');
  1110. FOtherMeasureFrame := TOtherMeasureFrame.Create(FProjectData);
  1111. AlignControl(FOtherMeasureFrame, jpsMainOtherMeasure, alClient);
  1112. UpdateSysProgress(150, '正在解析数据');
  1113. FZJJLFrame := TZJJLFrame.Create(Self, FProjectData.PhaseData.ZJJLData);
  1114. FZJJLFrame.DataReadOnly := FProjectData.PhaseData.StageDataReadOnly;
  1115. AlignControl(FZJJLFrame, jpsAssistantZJJL, alClient);
  1116. UpdateSysProgress(160, '正在解析数据');
  1117. FBGLFrame := TBGLFrame.Create(Self, FProjectData.BGLData);
  1118. AlignControl(FBGLFrame, jpsAssistantBGL, alClient);
  1119. UpdateSysProgress(170, '正在解析数据');
  1120. FSearchFrame := TSearchFrame.Create(Self, FProjectData.SearchData);
  1121. AlignControl(FSearchFrame, jpsAssistantSearch, alClient);
  1122. UpdateSysProgress(180, '正在解析数据');
  1123. FBookmarkFrame := TBookmarkFrame.Create(Self, FProjectData);
  1124. AlignControl(FBookmarkFrame, jpsAssistantBookmark, alClient);
  1125. UpdateSysProgress(190, '正在解析数据');
  1126. FDealBillsFrame := TDealBillsFrame.Create(Self, FProjectData.DealBillsData);
  1127. AlignControl(FDealBillsFrame, jpsAssistantDealBills, alClient);
  1128. UpdateSysProgress(200, '就绪');
  1129. end;
  1130. procedure TProjectFrame.InitialForVersions;
  1131. begin
  1132. if _ModuleType = mtCompile then
  1133. begin
  1134. // 去掉审核比较
  1135. dxsbViewControl.Groups.Items[0].Items.Delete(3);
  1136. // 去掉计量台账
  1137. dxsbViewControl.Groups.Items[0].Items.Delete(1);
  1138. end;
  1139. end;
  1140. procedure TProjectFrame.ExpandBookmarkFrame(AExpandFrame: Boolean);
  1141. begin
  1142. // 展开书签
  1143. if AExpandFrame then
  1144. begin
  1145. jpsAssistant.ActivePageIndex := tobtnBookmark.Tag;
  1146. sbtnExpend.Tag := tobtnBookmark.Tag;
  1147. ControlAssistantButtonsDown(tobtnBookmark.Tag);
  1148. jpsMain.ActivePage.Tag := tobtnBookmark.Tag;
  1149. SetAssistantViewVisible(True);
  1150. SetImageOfsbtnExpend(True);
  1151. end;
  1152. // 刷新书签批注
  1153. FBookmarkFrame.RefreshMarkMemo;
  1154. end;
  1155. {
  1156. 在意外情况下,文件中记录的审核人与云端记录的审核人不一致,文件中的审核表有时
  1157. 被多创建,有时少创建。这时不允许继续操作,需强制关闭:
  1158. 1、如果第x个人为审核中,则:
  1159. ①当前登录用户,如果非工作中,无论编制人、审核人还是业主,审核表个数应为x。
  1160. ②当前登录用户,如果工作中,必是审核人或业主,审核表个数应为x + 1。
  1161. 2、如果找不到审核中,找到了第x个人为审核不通过,则:
  1162. ①当前登录用户为编制人:
  1163. a.重新开始:审核表个数应为1。
  1164. b.仅查看不通过项目:审核表个数应为x + 1。
  1165. ②当前登录用户为审核人或业主:一定是非工作中(编制人工作中),审核表个数应为x + 1。
  1166. 3、如果找不到审核中,也找不到审核不通过,如果最后一个人是审核完成,则:
  1167. ①当前登录用户为编制人,此时编制人尚末开始新的一期,下拉还是上一期的,审核表个数亦为x+1。
  1168. ②当前登录用户为审核人或业主,审核表个数为x+1。
  1169. 4、如果找不到审核中,也找不到审核不通过,如果第一个人是末审核,则:
  1170. ①当前登录用户为编制人,审核表个数应为1。 }
  1171. function TProjectFrame.CheckFileAndCloudChekerList: Boolean;
  1172. var iNo, iC: Integer;
  1173. begin
  1174. Result := False;
  1175. iC := jcbAudit.Items.Count;
  1176. if not Assigned(FCheckerFrame) then // 0号台帐阶段还没有审核人业务
  1177. begin
  1178. Result := True;
  1179. Exit;
  1180. end;
  1181. iNo := FCheckerFrame.CheckNo(csChecking);
  1182. if iNo <> -1 then // 审核中
  1183. begin
  1184. // FCheckerFrame.Me = nil :编制 (这里体现出编制人不在审核人列表中极不合理!)
  1185. if (FCheckerFrame.Me <> nil) and FCheckerFrame.Me.IsChecking then
  1186. Result := (iC = iNo + 1)
  1187. else
  1188. Result := (iC = iNo);
  1189. end
  1190. else // 三种情况:①原报阶段,一个状态都没有 ②审核完成 ③审核不通过
  1191. begin
  1192. iNo := FCheckerFrame.CheckNo(csNotPass);
  1193. if iNo <> -1 then // 情况③,审核不通过
  1194. begin
  1195. if ProjectData.CurUserIsAuthor then
  1196. Result := ((iC = 1) or (iC = iNo + 1))
  1197. // else if FCheckerFrame.InCheckerList(PHPWeb.UserID) then // 这个条件会漏掉关注人
  1198. else
  1199. Result := (iC = iNo + 1);
  1200. end
  1201. else
  1202. begin
  1203. // 情况②,审核完成
  1204. if FCheckerFrame.LastChecker.CheckStatus = csFinished then // 最后一个人是审核完成
  1205. Result := (iC = FCheckerFrame.List.Count + 1)
  1206. else
  1207. // 情况①,原报阶段,一个状态都没有
  1208. begin
  1209. if ProjectData.CurUserIsAuthor then // 如果是原报,则只有一张表
  1210. Result := (iC = 1)
  1211. else
  1212. // 其它人时,原报尚末上传,表的数量是上一期的。
  1213. // 如果是打回,上一期的数量也是不固定的(中途打回)。反正这里只看不改,不限制。
  1214. Result := True;
  1215. end;
  1216. end;
  1217. end;
  1218. end;
  1219. procedure TProjectFrame.tobtnUpFileClick(Sender: TObject);
  1220. begin
  1221. with TToolButton(Sender) do
  1222. begin
  1223. if Down then
  1224. begin
  1225. jpsAssistant.ActivePageIndex := Tag;
  1226. sbtnExpend.Tag := Tag;
  1227. ControlAssistantButtonsDown(Tag);
  1228. jpsMain.ActivePage.Tag := Tag;
  1229. end;
  1230. SetAssistantViewVisible(Down);
  1231. SetImageOfsbtnExpend(Down);
  1232. end;
  1233. CheckUpFile;
  1234. end;
  1235. procedure TProjectFrame.CreateUpFile;
  1236. begin
  1237. FUpFileManageView := TUpFileManageView.Create(nil);
  1238. FUpFileManageView.Owner := Self;
  1239. FUpFileManageView.ProjectData := FProjectData;
  1240. FUpFileManageView.Datas := FProjectData.AttachmentData;
  1241. FUpFileManageView.Parent := jpsAssistantUpFile;
  1242. FUpFileManageView.Align := alClient;
  1243. end;
  1244. procedure TProjectFrame.SetUpFileManageView(
  1245. const Value: TUpFileManageView);
  1246. begin
  1247. FUpFileManageView := Value;
  1248. end;
  1249. procedure TProjectFrame.jpsAssistantActivePageChanged(Sender: TObject);
  1250. begin
  1251. if G_IsCloud then
  1252. CheckUpFile;
  1253. end;
  1254. procedure TProjectFrame.CheckUpFile;
  1255. var vRec: TsdDataRecord;
  1256. begin
  1257. if jpsAssistant.Visible and (jpsAssistant.ActivePage = jpsAssistantUpFile) then
  1258. begin
  1259. if jpsMain.ActivePage = jpsMainBillsCompile then
  1260. begin
  1261. vRec := FBillsCompileFrame.BillsCompileData.sdvBillsCompile.Current;
  1262. if vRec = nil then
  1263. vRec := FBillsCompileFrame.stdBillsCompile.IDTree.Items[0].Rec;
  1264. end
  1265. else if jpsMain.ActivePage = jpsMainBillsMeasure then
  1266. begin
  1267. vRec := FBillsMeasureFrame.BillsMeasureData.sdvBillsMeasure.Current;
  1268. if vRec = nil then
  1269. vRec := FBillsMeasureFrame.stdBillsMeasure.IDTree.Items[0].Rec;
  1270. end;
  1271. FUpFileManageView.DoOnBillChange(vRec);
  1272. end;
  1273. end;
  1274. procedure TProjectFrame.SaveLog(AStr: string);
  1275. var
  1276. sFileName: string;
  1277. F: TextFile;
  1278. begin
  1279. sFileName := GetAppFilePath + 'TimeLog.txt';
  1280. AssignFile(F, sFileName);
  1281. if FileExists(sFileName) then
  1282. Append(F)
  1283. else
  1284. Rewrite(F);
  1285. Writeln(F, AStr);
  1286. CloseFile(F);
  1287. end;
  1288. procedure TProjectFrame.ReLockData;
  1289. begin
  1290. FProjectData.CanUnlockInfo := False;
  1291. FBillsCompileFrame.stdBillsCompile.Column('LockedInfo').ReadOnly := True;
  1292. end;
  1293. procedure TProjectFrame.CloseCompare;
  1294. begin
  1295. FPhaseCompareFrame.Free;
  1296. FProjectData.PhaseCompareData.Close;
  1297. FProjectData.PhaseData.StageCompareData.Close;
  1298. end;
  1299. procedure TProjectFrame.OpenCompare;
  1300. begin
  1301. FProjectData.PhaseData.Save;
  1302. FProjectData.PhaseData.StageCompareData.Open;
  1303. FProjectData.PhaseCompareData.Open;
  1304. FPhaseCompareFrame := TPhaseCompareFrame.Create(Self, FProjectData.PhaseCompareData);
  1305. AlignControl(FPhaseCompareFrame, jpsMainStageCompare, alClient);
  1306. end;
  1307. procedure TProjectFrame.RefreshColumnDisplay;
  1308. begin
  1309. BillsCompileFrame.ShowDesignQuantity := FProjectData.ProjProperties.ShowDesignQuantity;
  1310. BillsCompileFrame.ShowAlias := FProjectData.ProjProperties.ShowAlias;
  1311. BillsMeasureFrame.ShowPriceChange := FProjectData.ProjProperties.ShowPriceChange;
  1312. BillsMeasureFrame.ShowBGLCode := FProjectData.ProjProperties.ShowBGLCode;
  1313. BillsMeasureFrame.ShowDesignQuantity := FProjectData.ProjProperties.ShowDesignQuantity;
  1314. BillsMeasureFrame.ShowAlias := FProjectData.ProjProperties.ShowAlias;
  1315. BillsGatherFrame.ShowPriceChange := FProjectData.ProjProperties.ShowPriceChange;
  1316. end;
  1317. procedure TProjectFrame.RefreshProjectState;
  1318. begin
  1319. FBillsCompileFrame.RefreshPhase_Stage;
  1320. FBillsMeasureFrame.RefreshPhase_Stage;
  1321. FDealPaymentFrame.RefreshPhase_Stage;
  1322. FPriceMarginFrame.ResetViewControl;
  1323. FOtherMeasureFrame.ResetViewControl;
  1324. end;
  1325. procedure TProjectFrame.ExpandCurPhase;
  1326. begin
  1327. Screen.Cursor := crHourGlass;
  1328. UpdateSysProgress(0, '正在显示至项目节');
  1329. try
  1330. case jpsMain.ActivePageIndex of
  1331. 1: FBillsMeasureFrame.ExpandCurPhase;
  1332. 4: FPhaseCompareFrame.ExpandCurPhase;
  1333. end;
  1334. finally
  1335. UpdateSysProgress(0, '就绪');
  1336. Screen.Cursor := crDefault;
  1337. end;
  1338. end;
  1339. function TProjectFrame.CheckCanReport: Boolean;
  1340. begin
  1341. Result := QuestMessageYesNo('请确定已生成中间计量数据?');
  1342. // 使用控件点击进行定位,重新定义方法太复杂
  1343. if not Result then
  1344. begin
  1345. // 先定位至计量台账界面
  1346. dxsbViewControl.SelectedItem := dxsbViewControl.ActiveGroup.Items[1];
  1347. dxsbViewControlItemClick(dxsbViewControl, dxsbViewControl.ActiveGroup.Items[1]);
  1348. // 再定位至中间计量界面
  1349. tobtnZJJL.Down := True;
  1350. tobtnZJJL.Click;
  1351. end;
  1352. end;
  1353. procedure TProjectFrame.actnAllPegExecute(Sender: TObject);
  1354. begin
  1355. Screen.Cursor := crHourGlass;
  1356. UpdateSysProgress(0, '正在显示至桩号(项目节)');
  1357. try
  1358. case jpsMain.ActivePageIndex of
  1359. 0: FBillsCompileFrame.ExpandPegXmjNode;
  1360. end;
  1361. finally
  1362. UpdateSysProgress(0, '就绪');
  1363. Screen.Cursor := crDefault;
  1364. end;
  1365. end;
  1366. procedure TProjectFrame.CreatePriceMarginFrame;
  1367. begin
  1368. FPriceMarginFrame := TPriceMarginFrame.Create(FProjectData);
  1369. AlignControl(FPriceMarginFrame, jpsMainPriceMargin, alClient);
  1370. end;
  1371. procedure TProjectFrame.ShowPhaseHint;
  1372. begin
  1373. pnlProjectCheckStatus.Caption := '';
  1374. if Assigned(CheckerFrame) then
  1375. begin
  1376. if CheckerFrame.FirstChecker.CheckStatus = csNotBegin then
  1377. begin
  1378. // 对于原报,要区分新建项目和打回重新开始两种情况。前者不能显示。
  1379. // 为了区分需要去服务器查询,势必影响速度。简单点,原报干脆不显示。
  1380. if not FProjectData.CurUserIsAuthor then
  1381. begin
  1382. pnlProjectCheckStatus.Caption := '本期重新开始';
  1383. pnlProjectCheckStatus.Font.Color := clRed;
  1384. end;
  1385. end
  1386. else if CheckerFrame.OwnerFrame.CheckStatus = csFinished then
  1387. begin
  1388. pnlProjectCheckStatus.Caption := '本期已完成';
  1389. pnlProjectCheckStatus.Font.Color := clGreen;
  1390. end;
  1391. end;
  1392. pnlProjectCheckStatus.Update;
  1393. end;
  1394. procedure TProjectFrame.LocateMeasureBills(AID: Integer);
  1395. var
  1396. vNode: TsdIDTreeNode;
  1397. begin
  1398. dxsbViewControl.SelectedItem := dxsbViewControl.Groups[0].Items[xbiBillsMeasure.Tag];
  1399. ChangeView(xbiBillsMeasure.Tag);
  1400. with FProjectData.BillsMeasureData do
  1401. begin
  1402. vNode := BillsMeasureTree.FindNode(AID);
  1403. if Assigned(vNode) then
  1404. sdvBillsMeasure.LocateInControl(vNode.Rec);
  1405. end;
  1406. end;
  1407. procedure TProjectFrame.ChangeView(APageIndex: Integer);
  1408. begin
  1409. BeforeChangeView(APageIndex);
  1410. case APageIndex of
  1411. 0, 2: jpsMain.ActivePageIndex := APageIndex;
  1412. 1, 3, 5: if CheckMeasureEdition then jpsMain.ActivePageIndex := APageIndex;
  1413. end;
  1414. AfterChangeView(APageIndex);
  1415. end;
  1416. procedure TProjectFrame.AfterChangeView(APageIndex: Integer);
  1417. begin
  1418. // 仅计量台账界面可以选择计量期
  1419. pnlPhaseSelect.Visible := APageIndex = xbiBillsMeasure.Tag;
  1420. // 台账分解、计量台账、审核比较 可使用"显示至"功能
  1421. tbExpand.Visible := (APageIndex = xbiBillsCompile.Tag)
  1422. or (APageIndex = xbiBillsMeasure.Tag)
  1423. or (APageIndex = xbiStageCompare.Tag);
  1424. // 右侧按钮是否显示
  1425. tbToolsButton.Visible := (APageIndex = xbiBillsCompile.Tag)
  1426. or (APageIndex = xbiBillsMeasure.Tag);
  1427. tobtnBGL.Visible := APageIndex = xbiBillsMeasure.Tag;
  1428. tobtnZJJL.Visible := APageIndex = xbiBillsMeasure.Tag;
  1429. // 控制整个按钮工具栏显示,
  1430. pnlToolBar.Visible := pnlPhaseSelect.Visible or tbExpand.Visible or tbToolsButton.Visible;
  1431. // 根据当前View控制右侧按钮是否按下,右侧工具窗是否弹开
  1432. jpsAssistant.ActivePageIndex := jpsMain.ActivePage.Tag;
  1433. sbtnExpend.Tag := jpsMain.ActivePage.Tag;
  1434. ControlAssistantButtonsDown(jpsMain.ActivePage.Tag);
  1435. SetAssistantViewVisible(jpsMain.ActivePage.Tag <> -1);
  1436. SetImageOfsbtnExpend(jpsMain.ActivePage.Tag <> -1);
  1437. // 0号台账与计量台账的书签不同
  1438. if APageIndex = xbiBillsCompile.Tag then
  1439. FBookmarkFrame.BMType := bmtCompile
  1440. else if APageIndex = xbiBillsMeasure.Tag then
  1441. FBookmarkFrame.BMType := bmtMeasure;
  1442. // 0号台账与计量台账的查找定位不同
  1443. if APageIndex = xbiBillsCompile.Tag then
  1444. FSearchFrame.LocateType := ltCompile
  1445. else if APageIndex = xbiBillsMeasure.Tag then
  1446. FSearchFrame.LocateType := ltMeasure;
  1447. // 切换至清单汇总,须重新汇总
  1448. if APageIndex = xbiBillsGather.Tag then
  1449. BillsGatherFrame.RefreshBills;
  1450. // 切换至材料调差,须重新汇总展示调差清单
  1451. if APageIndex = xbiPriceMargin.Tag then
  1452. PriceMarginFrame.RefreshBills;
  1453. if G_IsCloud then
  1454. begin
  1455. if (APageIndex = xbiBillsCompile.Tag) or (APageIndex = xbiBillsMeasure.Tag) then
  1456. CheckUpFile;
  1457. tobtnUpFile.Visible := (APageIndex = xbiBillsMeasure.Tag) and (not ProjectData.IsGuest);
  1458. if (tobtnUpFile.Visible = False) and (jpsAssistant.ActivePage = jpsAssistantUpFile) then
  1459. jpsAssistant.ActivePage := jpsAssistantStandardBills;
  1460. end;
  1461. end;
  1462. procedure TProjectFrame.BeforeChangeView(APageIndex: Integer);
  1463. begin
  1464. if G_IsCloud then
  1465. begin
  1466. tobtnShowChecker.Visible := ProjectData.PhaseIndex > 0;
  1467. tobtnShowChecker.Enabled := (APageIndex = xbiBillsMeasure.Tag);
  1468. ButtonControl_NewPhase;
  1469. if APageIndex = xbiBillsCompile.Tag then
  1470. begin
  1471. if tobtnShowChecker.Down then
  1472. begin
  1473. tobtnShowChecker.Down := False;
  1474. tobtnShowChecker.Click;
  1475. tobtnStandardBills.Down := True;
  1476. tobtnStandardBills.Click;
  1477. tobtnStandardBills.Down := False;
  1478. tobtnStandardBills.Click;
  1479. end;
  1480. end;
  1481. end;
  1482. // 记录台账分解、计量台账等的右侧展开情况
  1483. if jpsAssistant.Visible then
  1484. jpsMain.ActivePage.Tag := jpsAssistant.ActivePageIndex
  1485. else
  1486. jpsMain.ActivePage.Tag := -1;
  1487. end;
  1488. end.