MainFrm.pas 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875
  1. unit MainFrm;
  2. interface
  3. uses
  4. // Uses Units Please Try This Category
  5. // View
  6. ProjectManagerFme, ProjectFme, ProjectPropertiesFrm, OptionFrm, AboutFrm,
  7. AuthFrm,
  8. // Model & Data & Data Control ...
  9. ProjectData, SupportUnit, Globals, ZhAPI, ExcelImport, ConditionalDefines,
  10. // Controls & Delphi Default ... (Almost By Add Controls)
  11. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  12. Dialogs, cxGraphics, JimPages, ComCtrls, dxStatusBar, cxControls, JimTabs,
  13. dxBar, ImgList, UtilMethods, ZjDbaActns, ActnList, XPStyleActnCtrls, ActnMan,
  14. dxBarExtItems, sdDB, ExtCtrls, jpeg, StdCtrls, CslLabel, pngimage;
  15. type
  16. TMainForm = class(TForm)
  17. dxBarManager: TdxBarManager;
  18. Images: TImageList;
  19. dxsiFile: TdxBarSubItem;
  20. jtsProjects: TJimTabSet;
  21. dxStatusBar: TdxStatusBar;
  22. dxStatusBarContainer2: TdxStatusBarContainerControl;
  23. ProgressBar: TProgressBar;
  24. jpsMain: TJimPages;
  25. jpsMainProjectsManager: TJimPage;
  26. jpsMainProjects: TJimPage;
  27. jpsProjects: TJimPages;
  28. dxsiEdit: TdxBarSubItem;
  29. dxsiHelp: TdxBarSubItem;
  30. dxbtnCopy: TdxBarButton;
  31. dxbtnPaste: TdxBarButton;
  32. dxbtnCut: TdxBarButton;
  33. dxbtnInsert: TdxBarButton;
  34. dxbtnDelete: TdxBarButton;
  35. dxbtnUpMove: TdxBarButton;
  36. dxbtnDownMove: TdxBarButton;
  37. dxbtnUpLevel: TdxBarButton;
  38. dxbtnDownLevel: TdxBarButton;
  39. dxbtnAuthorizeDog: TdxBarButton;
  40. dxbtnAbout: TdxBarButton;
  41. dxbtnNewProject: TdxBarButton;
  42. dxbtnOpenProject: TdxBarButton;
  43. dxbtnDeleteProject: TdxBarButton;
  44. ActionManager1: TActionManager;
  45. ZjDbaInsert: TZjDbaInsert;
  46. ZjDbaDelete: TZjDbaDelete;
  47. ZjDbaUpMove: TZjDbaUpMove;
  48. ZjDbaDownMove: TZjDbaDownMove;
  49. ZjTreeDbaUpLevel: TZjTreeDbaUpLevel;
  50. ZjTreeDbaDownLevel: TZjTreeDbaDownLevel;
  51. ZjGridCopy: TZjGridCopy;
  52. ZjGridPaste: TZjGridPaste;
  53. ZjGridCut: TZjGridCut;
  54. ZjGridRemapedPaste: TZjGridRemapedPaste;
  55. dxpmTabSet: TdxBarPopupMenu;
  56. dxbtnCloseProject: TdxBarButton;
  57. actnCloseProject: TAction;
  58. dxbtnNewPhase: TdxBarButton;
  59. dxbtnCalculateLedger: TdxBarButton;
  60. actnNewPhase: TAction;
  61. dxbtnProjectProperties: TdxBarButton;
  62. actnProjectProperties: TAction;
  63. dxbtnSaveProject: TdxBarButton;
  64. actnSaveProject: TAction;
  65. dxbtnRemapedPaste: TdxBarButton;
  66. dxbtnImportExcel: TdxBarButton;
  67. actnImportExcel: TAction;
  68. dxbtnNewAudit: TdxBarButton;
  69. dxbtnCopyBillsBlock: TdxBarButton;
  70. actnNewAudit: TAction;
  71. dxbtnFinalAudit: TdxBarButton;
  72. dxbtnSubmitProject: TdxBarButton;
  73. dxbtnReceiveProject: TdxBarButton;
  74. dxbtnReplyProject: TdxBarButton;
  75. dxbtnAcceptProject: TdxBarButton;
  76. dxbtnCalculateAll: TdxBarButton;
  77. dxbtnNewSubProject: TdxBarButton;
  78. dxbtnNewTender: TdxBarButton;
  79. dxbtnOptions: TdxBarButton;
  80. actnOptions: TAction;
  81. dxbtnCalculatePhasePay: TdxBarButton;
  82. actnSubmit: TAction;
  83. actnReply: TAction;
  84. dxbtnSubmit: TdxBarButton;
  85. dxbtnReply: TdxBarButton;
  86. dxbtnFirstLevel: TdxBarButton;
  87. dxbtnSecondLevel: TdxBarButton;
  88. dxbtnThirdLevel: TdxBarButton;
  89. dxbtnFourthLevel: TdxBarButton;
  90. dxbtnFifthLevel: TdxBarButton;
  91. dxbtnAllLevel: TdxBarButton;
  92. dxbtnAllXmj: TdxBarButton;
  93. dxbtnExportGridToExcel: TdxBarButton;
  94. dxbtnRefresh: TdxBarButton;
  95. dxbtnUnlockInfo: TdxBarButton;
  96. actnUnlockInfo: TAction;
  97. dxUser: TdxBarSubItem;
  98. pnlUser: TPanel;
  99. lblAccount: TLabel;
  100. lblCompany: TLabel;
  101. lblRole: TLabel;
  102. dxLoginCloud: TdxBarButton;
  103. dxManageAccount: TdxBarButton;
  104. pnl1: TPanel;
  105. imgUserImage: TImage;
  106. lblMail: TLabel;
  107. dxUserContainer: TdxBarControlContainerItem;
  108. dxbtnBatchAddChild: TdxBarButton;
  109. dxbtnBatchAddNext: TdxBarButton;
  110. dxbtnReorderChildrenCode: TdxBarButton;
  111. dxbtnImportBillsPrice: TdxBarButton;
  112. dxsiImportExcel: TdxBarSubItem;
  113. dxbtnImportDealBills: TdxBarButton;
  114. actnImportBillsPrice: TAction;
  115. actnImportDealBills: TAction;
  116. dxbtnBatchReplaceBillsInfo: TdxBarButton;
  117. tAutoSave: TTimer;
  118. dxsiExportExcel: TdxBarSubItem;
  119. dxbtnExportExcel: TdxBarButton;
  120. actnExportExcel: TAction;
  121. dxbtnCurPhase: TdxBarButton;
  122. dxSync: TdxBarButton;
  123. dxbtnBatchWritePos_Reason: TdxBarButton;
  124. dxbtnExportCloudTenderFile: TdxBarButton;
  125. actnExportCloudTenderFile: TAction;
  126. dxtbnImportCloudTenderFile: TdxBarButton;
  127. actnImportCloudTenderFile: TAction;
  128. dxbtnCheckAndClear: TdxBarButton;
  129. dxbtnModifyDealBills: TdxBarButton;
  130. dxbtnLocateBills: TdxBarButton;
  131. dxbtnOpenBackupFolder: TdxBarButton;
  132. dxbtnSetBookmark: TdxBarButton;
  133. dxbtnExportFxBillsExcel: TdxBarButton;
  134. actnExportFxBillsExcel: TAction;
  135. dxseBatchInsert: TdxBarSpinEdit;
  136. actnBatchInsert: TAction;
  137. dxbtnRename: TdxBarButton;
  138. dxbtnImportGclBillsToXmj: TdxBarButton;
  139. dxbtnChangeDealBillsMode: TdxBarButton;
  140. dxsiExpandTo: TdxBarSubItem;
  141. dxbtnLocateBookmark: TdxBarButton;
  142. dxbtnImportPlaneFxBillsToXmj: TdxBarButton;
  143. dxbtnAllPeg: TdxBarButton;
  144. dxsiData: TdxBarSubItem;
  145. dxbtnTenderPartition: TdxBarButton;
  146. dxbtnSetDealPayPlan: TdxBarButton;
  147. dxbtnAddDetailGLs: TdxBarButton;
  148. dxbtnCopyDetailGls: TdxBarButton;
  149. dxbtnApplyToSameBills: TdxBarButton;
  150. dxbtnCalculatePriceMargin: TdxBarButton;
  151. dxbtnFxZJJL: TdxBarButton;
  152. dxbtnGclZJJL: TdxBarButton;
  153. dxbtnInsertCol: TdxBarButton;
  154. dxbtnHidden: TdxBarButton;
  155. dxbtnCancelHidden: TdxBarButton;
  156. dxbtnImportDmf: TdxBarButton;
  157. actnImportDmf: TAction;
  158. dxbtnCanCalc: TdxBarButton;
  159. dxbtnWithoutCalcCurPay: TdxBarButton;
  160. dxbtnSignOnline: TdxBarButton;
  161. dxbtnExportTpExcel: TdxBarButton;
  162. dxbtnHelpCenter: TdxBarButton;
  163. dxbtnLocateMeasureBills: TdxBarButton;
  164. dxbtnGuest: TdxBarButton;
  165. dxbtnLocateZJJL: TdxBarButton;
  166. dxbtnEpure: TdxBarButton;
  167. dxbtnLocateCompileBills: TdxBarButton;
  168. procedure FormCreate(Sender: TObject);
  169. procedure FormDestroy(Sender: TObject);
  170. procedure jtsProjectsChange(Sender: TObject; NewTab: Integer;
  171. var AllowChange: Boolean);
  172. procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  173. procedure jtsProjectsMouseDown(Sender: TObject; Button: TMouseButton;
  174. Shift: TShiftState; X, Y: Integer);
  175. procedure actnCloseProjectExecute(Sender: TObject);
  176. procedure actnCloseProjectUpdate(Sender: TObject);
  177. procedure actnNewPhaseExecute(Sender: TObject);
  178. procedure actnProjectPropertiesUpdate(Sender: TObject);
  179. procedure actnProjectPropertiesExecute(Sender: TObject);
  180. procedure actnSaveProjectExecute(Sender: TObject);
  181. procedure actnNewAuditExecute(Sender: TObject);
  182. procedure actnNewPhaseUpdate(Sender: TObject);
  183. procedure actnOptionsExecute(Sender: TObject);
  184. procedure actnImportExcelExecute(Sender: TObject);
  185. procedure actnReplyExecute(Sender: TObject);
  186. procedure actnSubmitExecute(Sender: TObject);
  187. procedure dxBarManagerShowToolbarsPopup(Sender: TdxBarManager;
  188. PopupItemLinks: TdxBarItemLinks);
  189. procedure actnSubmitUpdate(Sender: TObject);
  190. procedure actnImportExcelUpdate(Sender: TObject);
  191. procedure actnUnlockInfoUpdate(Sender: TObject);
  192. procedure actnUnlockInfoExecute(Sender: TObject);
  193. procedure dxbtnAboutClick(Sender: TObject);
  194. procedure dxLoginCloudClick(Sender: TObject);
  195. procedure dxManageAccountClick(Sender: TObject);
  196. procedure dxbtnAuthorizeDogClick(Sender: TObject);
  197. procedure actnImportBillsPriceExecute(Sender: TObject);
  198. procedure actnImportDealBillsExecute(Sender: TObject);
  199. procedure tAutoSaveTimer(Sender: TObject);
  200. procedure actnExportExcelExecute(Sender: TObject);
  201. procedure dxSyncClick(Sender: TObject);
  202. procedure actnExportCloudTenderFileExecute(Sender: TObject);
  203. procedure actnExportCloudTenderFileUpdate(Sender: TObject);
  204. procedure actnImportCloudTenderFileExecute(Sender: TObject);
  205. procedure actnImportCloudTenderFileUpdate(Sender: TObject);
  206. procedure actnExportFxBillsExcelExecute(Sender: TObject);
  207. procedure dxseBatchInsertKeyDown(Sender: TObject; var Key: Word;
  208. Shift: TShiftState);
  209. procedure actnReplyUpdate(Sender: TObject);
  210. procedure dxbtnTenderPartitionClick(Sender: TObject);
  211. procedure actnImportDmfExecute(Sender: TObject);
  212. procedure dxbtnHelpCenterClick(Sender: TObject);
  213. private
  214. FProjectManagerFrame: TProjectManagerFrame;
  215. FProjectFrames: TList;
  216. procedure UpdateProgressBar(APosition: Integer);
  217. procedure UpdateProgressHint(const AHint: string);
  218. function CreateProjectView(ARec: TsdDataRecord): TProjectFrame;
  219. procedure LocateProjectView(AIndex: Integer);
  220. procedure DeleteProjectView(AIndex: Integer);
  221. procedure ResetProcessView(AIndex: Integer);
  222. procedure ChangeLeftSideGlobalView(AIndex: Integer);
  223. function GetCurProjectFrame: TProjectFrame;
  224. procedure OnError(ASender: TObject; AE: Exception);
  225. procedure ResetAutoSave;
  226. public
  227. procedure UpdateProgress(APos: Integer; const AHint: string);
  228. procedure LocateProject(AProjectID: Integer);
  229. function HasOpened(AProjectID: Integer): Boolean;
  230. function OpenProject(ARec: TsdDataRecord): TProjectFrame;
  231. property CurProjectFrame: TProjectFrame read GetCurProjectFrame;
  232. property ProjectManagerFrame: TProjectManagerFrame read FProjectManagerFrame;
  233. end;
  234. var
  235. MainForm: TMainForm;
  236. implementation
  237. uses
  238. ProjectProperty, ConstUnit, PHPWebDm, Math, ShellAPI,
  239. FindUserFrm, ImportExcelHintFrm, ConfigDoc, ExportExcel,
  240. ProjectCommands, BillsCompileDm, tpMainFrm,
  241. DealBillsExcelImport, ExcelImport_Bills, DetailExcelImport;
  242. {$R *.dfm}
  243. {$R MeasureIcons.RES}
  244. procedure TMainForm.FormCreate(Sender: TObject);
  245. procedure CreateProjectManagerFrame;
  246. begin
  247. FProjectManagerFrame := TProjectManagerFrame.Create(nil);
  248. AlignControl(FProjectManagerFrame, jpsMainProjectsManager, alClient);
  249. end;
  250. procedure SetHintFont;
  251. begin
  252. if G_IsCloud then
  253. begin
  254. Screen.HintFont.Size := 11;
  255. Screen.HintFont.Name := 'Microsoft YaHei';
  256. end
  257. else
  258. begin
  259. Screen.HintFont.Name := 'SmartSimSun';
  260. Screen.HintFont.Size := 9;
  261. end;
  262. end;
  263. function GetSoftName: string;
  264. begin
  265. if _ModuleType = mtCompile then
  266. Result := '纵横公路工程0号台账软件'
  267. else if _ModuleType = mtAll then
  268. Result := '纵横公路工程结算决算计量一体化软件';
  269. end;
  270. function GetVersionName: string;
  271. begin
  272. Result := '';
  273. if _IsGuangDong then
  274. Result := Result + '广东';
  275. if _ModuleType = mtAll then
  276. begin
  277. if _IsDebugView then
  278. Result := 'Debug'
  279. else if G_IsTest then
  280. Result := '测试'
  281. else if G_IsCloud then
  282. Result := Result + '云'
  283. else if _IsEncrypt then
  284. Result := Result + '专业'
  285. else
  286. Result := Result + '学习';
  287. end;
  288. if Result <> '' then
  289. Result := Result + '版';
  290. end;
  291. procedure InitialForVersions;
  292. var
  293. sPic: string;
  294. begin
  295. if G_IsCloud then
  296. begin
  297. dxbtnNewProject.Visible := ivNever;
  298. dxbtnNewSubProject.Visible := ivNever;
  299. dxbtnReceiveProject.Visible := ivNever;
  300. dxbtnNewPhase.Visible := ivNever;
  301. dxUser.Visible := ivAlways;
  302. dxUser.Caption := PHPWeb.RealName;
  303. lblAccount.Caption := PHPWeb.RealName;
  304. lblMail.Caption := Format('(%s)', [PHPWeb.Account]);
  305. if Trim(PHPWeb.Company) <> '' then
  306. lblCompany.Caption := PHPWeb.Company
  307. else
  308. lblCompany.Caption := '我的单位';
  309. if Trim(PHPWeb.Role) <> '' then
  310. lblRole.Caption := PHPWeb.Role
  311. else
  312. lblRole.Caption := '我的职称';
  313. // 每次登录都下载到本地,再从本地读入显示。以保证图片实时更新。
  314. sPic := PHPWeb.UserPath + '0_' + IntToStr(PHPWeb.UserID) + '.jpg';
  315. if PHPWeb.DownFile(PHPWeb.UserImageURL, sPic) then
  316. if FileExists(sPic) then
  317. imgUserImage.Picture.LoadFromFile(sPic);
  318. end
  319. else
  320. begin
  321. dxUser.Visible := ivNever;
  322. dxbtnReceiveProject.Visible := ivAlways;
  323. end;
  324. MainForm.Caption := GetSoftName + GetVersionName;
  325. end;
  326. begin
  327. CreateProjectManagerFrame;
  328. FProjectFrames := TList.Create;
  329. InitialForVersions;
  330. SetHintFont;
  331. ResetAutoSave;
  332. end;
  333. procedure TMainForm.UpdateProgress(APos: Integer; const AHint: string);
  334. begin
  335. UpdateProgressBar(APos);
  336. UpdateProgressHint(AHint);
  337. Application.ProcessMessages;
  338. end;
  339. procedure TMainForm.UpdateProgressBar(APosition: Integer);
  340. begin
  341. if APosition < ProgressBar.Max then
  342. ProgressBar.Position := APosition
  343. else
  344. ProgressBar.Position := ProgressBar.Min;
  345. end;
  346. procedure TMainForm.UpdateProgressHint(const AHint: string);
  347. begin
  348. dxStatusBar.Panels[0].Text := AHint;
  349. end;
  350. procedure TMainForm.FormDestroy(Sender: TObject);
  351. begin
  352. ClearObjects(FProjectFrames);
  353. FProjectFrames.Free;
  354. FProjectManagerFrame.Free;
  355. end;
  356. function TMainForm.OpenProject(ARec: TsdDataRecord): TProjectFrame;
  357. begin
  358. if not HasOpened(ARec.ValueByName('ID').AsInteger) then
  359. Result := CreateProjectView(ARec)
  360. else
  361. begin
  362. LocateProject(ARec.ValueByName('ID').AsInteger);
  363. Result := CurProjectFrame;
  364. end;
  365. end;
  366. function TMainForm.HasOpened(AProjectID: Integer): Boolean;
  367. begin
  368. Result := OpenProjectManager.ProjectIndex(AProjectID) <> -1;
  369. end;
  370. procedure TMainForm.LocateProject(AProjectID: Integer);
  371. begin
  372. jtsProjects.TabIndex := OpenProjectManager.ProjectIndex(AProjectID) + 1;
  373. if jpsMain.ActivePage <> jpsMainProjects then
  374. jpsMain.ActivePage := jpsMainProjects;
  375. end;
  376. function TMainForm.CreateProjectView(ARec: TsdDataRecord): TProjectFrame;
  377. function CreateNewProjectPage: TJimPage;
  378. begin
  379. Result := TJimPage.Create(jpsProjects);
  380. Result.Pages := jpsProjects;
  381. jpsProjects.ActivePage := Result;
  382. end;
  383. function CreateNewProjectTab(const ATabName: string; APage: TJimPage): Integer;
  384. begin
  385. Result := jtsProjects.Tabs.AddObject(ATabName, APage);
  386. jtsProjects.TabIndex := Result;
  387. end;
  388. function CreateProjectFrame(AProjectData: TProjectData; APage: TJimPage): TProjectFrame;
  389. var
  390. ProjectFrame: TProjectFrame;
  391. begin
  392. AProjectData.IsGuest := FProjectManagerFrame.IsGuest;
  393. ProjectFrame := TProjectFrame.Create(AProjectData);
  394. FProjectFrames.Add(ProjectFrame);
  395. ProjectFrame.Parent := APage;
  396. ProjectFrame.Align := alClient;
  397. Result := ProjectFrame;
  398. end;
  399. var
  400. jimPage: TJimPage;
  401. begin
  402. jpsMain.ActivePage := jpsMainProjects;
  403. jimPage := CreateNewProjectPage;
  404. CreateNewProjectTab(ARec.ValueByName('Name').AsString, jimPage);
  405. Result := CreateProjectFrame(OpenProjectManager.Open(ARec), jimPage);
  406. ProjectManager.AddOpenTenderBackup(ARec.ValueByName('ID').AsInteger);
  407. end;
  408. procedure TMainForm.jtsProjectsChange(Sender: TObject; NewTab: Integer;
  409. var AllowChange: Boolean);
  410. begin
  411. LocateProjectView(NewTab - 1);
  412. ResetProcessView(NewTab);
  413. end;
  414. procedure TMainForm.LocateProjectView(AIndex: Integer);
  415. begin
  416. if AIndex >= 0 then
  417. begin
  418. jpsMain.ActivePage := jpsMainProjects;
  419. jpsProjects.ActivePage := TJimPage(jtsProjects.Tabs.Objects[AIndex + 1]);
  420. OpenProjectManager.CurProjectIndex := AIndex;
  421. ChangeLeftSideGlobalView(AIndex);
  422. end
  423. else
  424. jpsMain.ActivePage := jpsMainProjectsManager;
  425. end;
  426. procedure TMainForm.ChangeLeftSideGlobalView(AIndex: Integer);
  427. begin
  428. if (AIndex >= 0) and (AIndex < FProjectFrames.Count) then
  429. TProjectFrame(FProjectFrames[AIndex]).ResetAssistantView;
  430. end;
  431. procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  432. begin
  433. try
  434. OpenProjectManager.SaveAll;
  435. except
  436. end;
  437. end;
  438. procedure TMainForm.jtsProjectsMouseDown(Sender: TObject;
  439. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  440. begin
  441. if (Button = mbRight) and (jtsProjects.TabIndex > 0) then
  442. dxpmTabSet.PopupFromCursorPos;
  443. end;
  444. procedure TMainForm.actnCloseProjectExecute(Sender: TObject);
  445. begin
  446. OpenProjectManager.CurProjectData.SaveAndCheck;
  447. DeleteProjectView(jtsProjects.TabIndex - 1);
  448. LocateProjectView(jtsProjects.TabIndex - 1);
  449. ResetProcessView(jtsProjects.TabIndex);
  450. end;
  451. procedure TMainForm.actnCloseProjectUpdate(Sender: TObject);
  452. begin
  453. TAction(Sender).Enabled := jtsProjects.Tabs.Count > 1;
  454. end;
  455. procedure TMainForm.DeleteProjectView(AIndex: Integer);
  456. begin
  457. TProjectFrame(FProjectFrames[AIndex]).Free;
  458. FProjectFrames.Delete(AIndex);
  459. OpenProjectManager.Delete(AIndex);
  460. jpsProjects.Pages.Delete(AIndex);
  461. jtsProjects.Tabs.Delete(AIndex + 1);
  462. end;
  463. procedure TMainForm.actnNewPhaseExecute(Sender: TObject);
  464. begin
  465. TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1]).CreateNewPhase;
  466. end;
  467. procedure TMainForm.actnProjectPropertiesUpdate(Sender: TObject);
  468. begin
  469. TAction(Sender).Enabled := jtsProjects.TabIndex > 0;
  470. end;
  471. procedure TMainForm.actnProjectPropertiesExecute(Sender: TObject);
  472. begin
  473. ModifyProjectProperties(TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1]));
  474. end;
  475. procedure TMainForm.actnSaveProjectExecute(Sender: TObject);
  476. begin
  477. OpenProjectManager.CurProjectData.SaveAndCheck;
  478. end;
  479. procedure TMainForm.actnNewAuditExecute(Sender: TObject);
  480. begin
  481. TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1]).CreateNewAudit;
  482. end;
  483. procedure TMainForm.actnNewPhaseUpdate(Sender: TObject);
  484. begin
  485. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  486. if TAction(Sender).Enabled then
  487. with CurProjectFrame.ProjectData do
  488. TAction(Sender).Enabled := TAction(Sender).Enabled and (ProjProperties.AuditStatus = -1);
  489. end;
  490. function TMainForm.GetCurProjectFrame: TProjectFrame;
  491. begin
  492. if jtsProjects.TabIndex > 0 then
  493. Result := TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1])
  494. else
  495. Result := nil;
  496. end;
  497. procedure TMainForm.actnOptionsExecute(Sender: TObject);
  498. begin
  499. ModifiedOptions;
  500. ResetAutoSave;
  501. end;
  502. procedure TMainForm.actnImportExcelExecute(Sender: TObject);
  503. var
  504. sFileName: string;
  505. Importor: Tdei_CustomBills;
  506. bWithLevelCode, bWithoutGclBills: Boolean;
  507. begin
  508. if HintAndImportTypeSelect(bWithLevelCode, bWithoutGclBills) then
  509. begin
  510. if SelectExcelFile(sFileName) then
  511. begin
  512. Importor := Tdei_CustomBills.Create(CurProjectFrame.ProjectData);
  513. try
  514. Importor.ImportFile(sFileName, bWithLevelCode, bWithoutGclBills);
  515. finally
  516. Importor.Free;
  517. end;
  518. end;
  519. end;
  520. end;
  521. procedure TMainForm.ResetProcessView(AIndex: Integer);
  522. begin
  523. dxBarManager.Bars[2].Visible := AIndex > 0;
  524. if G_IsCloud then
  525. dxBarManager.Bars[2].Visible := False;
  526. end;
  527. procedure TMainForm.actnReplyExecute(Sender: TObject); // 批复
  528. begin
  529. if not CurProjectFrame.CheckCanReport then Exit;
  530. Screen.Cursor := crHourGlass;
  531. try
  532. CurProjectFrame.ProjectData.SaveAndCheck;
  533. {$O-}
  534. // 失败后重复一次
  535. if not CurProjectFrame.ProjectData.ReplyProject then
  536. begin
  537. if not CurProjectFrame.ProjectData.ReplyProject then
  538. ErrorMessage('批复项目失败!');
  539. end;
  540. {$O+}
  541. finally
  542. Screen.Cursor := crDefault;
  543. end;
  544. end;
  545. procedure TMainForm.actnSubmitExecute(Sender: TObject); // 上报
  546. begin
  547. if not CurProjectFrame.CheckCanReport then Exit;
  548. Screen.Cursor := crHourGlass;
  549. try
  550. CurProjectFrame.ProjectData.SaveAndCheck;
  551. {$O-}
  552. // 失败后重复一次
  553. if not CurProjectFrame.ProjectData.SubmitProject then
  554. begin
  555. if not CurProjectFrame.ProjectData.SubmitProject then
  556. ErrorMessage('上报项目失败!');
  557. end;
  558. {$O+}
  559. finally
  560. Screen.Cursor := crDefault;
  561. end;
  562. end;
  563. procedure TMainForm.dxBarManagerShowToolbarsPopup(Sender: TdxBarManager;
  564. PopupItemLinks: TdxBarItemLinks);
  565. begin
  566. // 取消菜单栏右键菜单
  567. PopupItemLinks.Clear;
  568. end;
  569. procedure TMainForm.actnSubmitUpdate(Sender: TObject);
  570. begin
  571. with CurProjectFrame.ProjectData do
  572. TAction(Sender).Enabled := (ProjProperties.PhaseCount > 0) and
  573. ((ProjProperties.AuditStatus >= 0) and (ProjProperties.AuditStatus < iMaxStageCount-1));
  574. end;
  575. procedure TMainForm.actnImportExcelUpdate(Sender: TObject);
  576. begin
  577. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  578. if TAction(Sender).Enabled then
  579. with CurProjectFrame.ProjectData do
  580. TAction(Sender).Enabled := TAction(Sender).Enabled and (PhaseIndex < 1);
  581. end;
  582. procedure TMainForm.actnUnlockInfoUpdate(Sender: TObject);
  583. begin
  584. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  585. end;
  586. procedure TMainForm.actnUnlockInfoExecute(Sender: TObject);
  587. begin
  588. CurProjectFrame.UnLockData;
  589. end;
  590. procedure TMainForm.dxbtnAboutClick(Sender: TObject);
  591. begin
  592. ShowAboutForm;
  593. end;
  594. procedure TMainForm.dxLoginCloudClick(Sender: TObject);
  595. begin
  596. ShellExecute(Application.Handle, nil, PChar(PHPWeb.LoginCloudURL), nil, nil, SW_SHOWNORMAL);
  597. end;
  598. procedure TMainForm.dxManageAccountClick(Sender: TObject);
  599. begin
  600. ShellExecute(Application.Handle, nil, PChar(PHPWeb.PassportURL), nil, nil, SW_SHOWNORMAL);
  601. end;
  602. procedure TMainForm.dxbtnAuthorizeDogClick(Sender: TObject);
  603. begin
  604. Authorize;
  605. end;
  606. procedure TMainForm.actnImportBillsPriceExecute(Sender: TObject);
  607. var
  608. sFileName: string;
  609. Importor: TBillsPriceExcelImport;
  610. begin
  611. if SelectExcelFile(sFileName) then
  612. begin
  613. Importor := TBillsPriceExcelImport.Create(CurProjectFrame.ProjectData);
  614. try
  615. Importor.ImportFile(sFileName);
  616. finally
  617. Importor.Free;
  618. end;
  619. end;
  620. end;
  621. procedure TMainForm.actnImportDealBillsExecute(Sender: TObject);
  622. var
  623. sFileName: string;
  624. Importor: TDealBillsExcelImport;
  625. begin
  626. if SelectExcelFile(sFileName) then
  627. begin
  628. Importor := TDealBillsExcelImport.Create(CurProjectFrame.ProjectData);
  629. try
  630. Importor.ImportFile(sFileName);
  631. finally
  632. Importor.Free;
  633. end;
  634. end;
  635. end;
  636. procedure TMainForm.tAutoSaveTimer(Sender: TObject);
  637. begin
  638. Screen.Cursor := crHourGlass;
  639. try
  640. OpenProjectManager.SaveAll;
  641. finally
  642. screen.Cursor := crDefault;
  643. end;
  644. end;
  645. procedure TMainForm.ResetAutoSave;
  646. begin
  647. with SupportManager.ConfigInfo do
  648. begin
  649. tAutoSave.Interval := AutoSaveInterval * 60 * 1000;
  650. tAutoSave.Enabled := AutoSave;
  651. end;
  652. end;
  653. procedure TMainForm.actnExportExcelExecute(Sender: TObject);
  654. var
  655. sFileName: string;
  656. Exportor: TIDTreeExcelExportor;
  657. begin
  658. if SaveExcelFile(sFileName) then
  659. begin
  660. Exportor := TIDTreeExcelExportor.Create;
  661. try
  662. if SupportManager.ConfigInfo.ExcelWithMis then
  663. Exportor.DefineCol(@ciLedgerWithMis, Length(ciLedgerWithMis))
  664. else
  665. Exportor.DefineCol(@ciLedger, Length(ciLedger));
  666. Exportor.HasLevelCode := True;
  667. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  668. finally
  669. Exportor.Free;
  670. end;
  671. end;
  672. end;
  673. procedure TMainForm.dxSyncClick(Sender: TObject);
  674. begin
  675. Screen.Cursor := crHourGlass;
  676. try
  677. FProjectManagerFrame.DoBatchReceiveAllOnline;
  678. finally
  679. Screen.Cursor := crDefault;
  680. end;
  681. end;
  682. procedure TMainForm.actnExportCloudTenderFileExecute(Sender: TObject);
  683. var
  684. sFileName: string;
  685. Exportor: TTenderExport;
  686. Rec: TsdDataRecord;
  687. begin
  688. // 导出前先保存
  689. CurProjectFrame.ProjectData.SaveAndCheck;
  690. // 导出云版专用
  691. sFileName := SupportManager.ConfigInfo.OutputPath + CurProjectFrame.ProjectData.ProjectName + '.ctf';
  692. if SaveFile(sFileName, '.ctf') then
  693. begin
  694. if FileExists(sFileName) and not QuestMessage(Format('存在同名文件“%s”,是否替换?', [ExtractFileName(sFileName)])) then
  695. Exit;
  696. Screen.Cursor := crHourGlass;
  697. try
  698. Rec := ProjectManagerFrame.Rec(CurProjectFrame.ProjectData.ProjectID);
  699. Exportor := TTenderExport.Create(Rec, sFileName);
  700. try
  701. Exportor.Execute;
  702. finally
  703. Exportor.Free;
  704. end;
  705. finally
  706. Screen.Cursor := crDefault;
  707. end;
  708. end;
  709. end;
  710. procedure TMainForm.actnExportCloudTenderFileUpdate(Sender: TObject);
  711. begin
  712. // 仅打开的项目可以导出云版专用格式,且该项目没有进行计量
  713. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  714. if TAction(Sender).Enabled then
  715. TAction(Sender).Enabled := CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0;
  716. end;
  717. procedure TMainForm.actnImportCloudTenderFileExecute(Sender: TObject);
  718. var
  719. sFileName: string;
  720. begin
  721. if SelectFile(sFileName, '.ctf') then
  722. begin
  723. CurProjectFrame.ProjectData.ImportCloudTenderFile(sFileName);
  724. CurProjectFrame.RefreshColumnDisplay;
  725. end;
  726. end;
  727. procedure TMainForm.actnImportCloudTenderFileUpdate(Sender: TObject);
  728. begin
  729. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  730. if TAction(Sender).Enabled then
  731. TAction(Sender).Enabled := CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0;
  732. end;
  733. procedure TMainForm.actnExportFxBillsExcelExecute(Sender: TObject);
  734. var
  735. sFileName: string;
  736. Exportor: TIDTreeExcelExportor;
  737. begin
  738. if SaveExcelFile(sFileName) then
  739. begin
  740. Exportor := TIDTreeExcelExportor.Create;
  741. try
  742. if SupportManager.ConfigInfo.ExcelWithMis then
  743. Exportor.DefineCol(@ciFxBillsWithMis, Length(ciFxBillsWithMis))
  744. else
  745. Exportor.DefineCol(@ciFxBills, Length(ciFxBills));
  746. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  747. finally
  748. Exportor.Free;
  749. end;
  750. end;
  751. end;
  752. procedure TMainForm.dxseBatchInsertKeyDown(Sender: TObject; var Key: Word;
  753. Shift: TShiftState);
  754. var
  755. i: Integer;
  756. begin
  757. if Key = 13 then
  758. begin
  759. for i := 1 to dxseBatchInsert.IntValue do
  760. ZjDbaInsert.ExecuteTarget(CurProjectFrame.BillsCompileFrame.zgBillsCompile);
  761. end;
  762. end;
  763. procedure TMainForm.actnReplyUpdate(Sender: TObject);
  764. begin
  765. with CurProjectFrame.ProjectData do
  766. TAction(Sender).Enabled := (ProjProperties.PhaseCount > 0);
  767. end;
  768. procedure TMainForm.dxbtnTenderPartitionClick(Sender: TObject);
  769. begin
  770. PartTendersModel;
  771. end;
  772. procedure TMainForm.actnImportDmfExecute(Sender: TObject);
  773. var
  774. sFileName: string;
  775. begin
  776. if SelectFile(sFileName, '.dmf') then
  777. CurProjectFrame.ProjectData.ImportDmfFile(sFileName);
  778. end;
  779. procedure TMainForm.dxbtnHelpCenterClick(Sender: TObject);
  780. const
  781. sHelpUrl = 'http://help.smartcost.com.cn/hc/';
  782. begin
  783. ShellExecute(Application.Handle, nil, PChar(sHelpUrl), nil, nil, SW_SHOWNORMAL);
  784. end;
  785. procedure TMainForm.OnError(ASender: TObject; AE: Exception);
  786. begin
  787. MeasureLog.AppendLogTo(AE.Message);
  788. end;
  789. end.