MainFrm.pas 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871
  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. procedure FormCreate(Sender: TObject);
  166. procedure FormDestroy(Sender: TObject);
  167. procedure jtsProjectsChange(Sender: TObject; NewTab: Integer;
  168. var AllowChange: Boolean);
  169. procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  170. procedure jtsProjectsMouseDown(Sender: TObject; Button: TMouseButton;
  171. Shift: TShiftState; X, Y: Integer);
  172. procedure actnCloseProjectExecute(Sender: TObject);
  173. procedure actnCloseProjectUpdate(Sender: TObject);
  174. procedure actnNewPhaseExecute(Sender: TObject);
  175. procedure actnProjectPropertiesUpdate(Sender: TObject);
  176. procedure actnProjectPropertiesExecute(Sender: TObject);
  177. procedure actnSaveProjectExecute(Sender: TObject);
  178. procedure actnNewAuditExecute(Sender: TObject);
  179. procedure actnNewPhaseUpdate(Sender: TObject);
  180. procedure actnOptionsExecute(Sender: TObject);
  181. procedure actnImportExcelExecute(Sender: TObject);
  182. procedure actnReplyExecute(Sender: TObject);
  183. procedure actnSubmitExecute(Sender: TObject);
  184. procedure dxBarManagerShowToolbarsPopup(Sender: TdxBarManager;
  185. PopupItemLinks: TdxBarItemLinks);
  186. procedure actnSubmitUpdate(Sender: TObject);
  187. procedure actnImportExcelUpdate(Sender: TObject);
  188. procedure actnUnlockInfoUpdate(Sender: TObject);
  189. procedure actnUnlockInfoExecute(Sender: TObject);
  190. procedure dxbtnAboutClick(Sender: TObject);
  191. procedure dxLoginCloudClick(Sender: TObject);
  192. procedure dxManageAccountClick(Sender: TObject);
  193. procedure dxbtnAuthorizeDogClick(Sender: TObject);
  194. procedure actnImportBillsPriceExecute(Sender: TObject);
  195. procedure actnImportDealBillsExecute(Sender: TObject);
  196. procedure tAutoSaveTimer(Sender: TObject);
  197. procedure actnExportExcelExecute(Sender: TObject);
  198. procedure dxSyncClick(Sender: TObject);
  199. procedure actnExportCloudTenderFileExecute(Sender: TObject);
  200. procedure actnExportCloudTenderFileUpdate(Sender: TObject);
  201. procedure actnImportCloudTenderFileExecute(Sender: TObject);
  202. procedure actnImportCloudTenderFileUpdate(Sender: TObject);
  203. procedure actnExportFxBillsExcelExecute(Sender: TObject);
  204. procedure dxseBatchInsertKeyDown(Sender: TObject; var Key: Word;
  205. Shift: TShiftState);
  206. procedure actnReplyUpdate(Sender: TObject);
  207. procedure dxbtnTenderPartitionClick(Sender: TObject);
  208. procedure actnImportDmfExecute(Sender: TObject);
  209. procedure dxbtnHelpCenterClick(Sender: TObject);
  210. private
  211. FProjectManagerFrame: TProjectManagerFrame;
  212. FProjectFrames: TList;
  213. procedure UpdateProgressBar(APosition: Integer);
  214. procedure UpdateProgressHint(const AHint: string);
  215. function CreateProjectView(ARec: TsdDataRecord): TProjectFrame;
  216. procedure LocateProjectView(AIndex: Integer);
  217. procedure DeleteProjectView(AIndex: Integer);
  218. procedure ResetProcessView(AIndex: Integer);
  219. procedure ChangeLeftSideGlobalView(AIndex: Integer);
  220. function GetCurProjectFrame: TProjectFrame;
  221. procedure OnError(ASender: TObject; AE: Exception);
  222. procedure ResetAutoSave;
  223. public
  224. procedure UpdateProgress(APos: Integer; const AHint: string);
  225. procedure LocateProject(AProjectID: Integer);
  226. function HasOpened(AProjectID: Integer): Boolean;
  227. function OpenProject(ARec: TsdDataRecord): TProjectFrame;
  228. property CurProjectFrame: TProjectFrame read GetCurProjectFrame;
  229. property ProjectManagerFrame: TProjectManagerFrame read FProjectManagerFrame;
  230. end;
  231. var
  232. MainForm: TMainForm;
  233. implementation
  234. uses
  235. ProjectProperty, ConstUnit, PHPWebDm, Math, ShellAPI,
  236. FindUserFrm, ImportExcelHintFrm, ConfigDoc, ExportExcel,
  237. ProjectCommands, BillsCompileDm, tpMainFrm,
  238. DealBillsExcelImport, ExcelImport_Bills, DetailExcelImport;
  239. {$R *.dfm}
  240. {$R MeasureIcons.RES}
  241. procedure TMainForm.FormCreate(Sender: TObject);
  242. procedure CreateProjectManagerFrame;
  243. begin
  244. FProjectManagerFrame := TProjectManagerFrame.Create(nil);
  245. AlignControl(FProjectManagerFrame, jpsMainProjectsManager, alClient);
  246. end;
  247. procedure SetHintFont;
  248. begin
  249. if G_IsCloud then
  250. begin
  251. Screen.HintFont.Size := 11;
  252. Screen.HintFont.Name := 'Microsoft YaHei';
  253. end
  254. else
  255. begin
  256. Screen.HintFont.Name := 'SmartSimSun';
  257. Screen.HintFont.Size := 9;
  258. end;
  259. end;
  260. function GetSoftName: string;
  261. begin
  262. if _ModuleType = mtCompile then
  263. Result := '纵横公路工程0号台账软件'
  264. else if _ModuleType = mtAll then
  265. Result := '纵横公路工程结算决算计量一体化软件';
  266. end;
  267. function GetVersionName: string;
  268. begin
  269. Result := '';
  270. if _IsGuangDong then
  271. Result := Result + '广东';
  272. if _ModuleType = mtAll then
  273. begin
  274. if _IsDebugView then
  275. Result := 'Debug'
  276. else if G_IsTest then
  277. Result := '测试'
  278. else if G_IsCloud then
  279. Result := Result + '云'
  280. else if _IsEncrypt then
  281. Result := Result + '专业'
  282. else
  283. Result := Result + '学习';
  284. end;
  285. if Result <> '' then
  286. Result := Result + '版';
  287. end;
  288. procedure InitialForVersions;
  289. var
  290. sPic: string;
  291. begin
  292. if G_IsCloud then
  293. begin
  294. dxbtnNewProject.Visible := ivNever;
  295. dxbtnNewSubProject.Visible := ivNever;
  296. dxbtnReceiveProject.Visible := ivNever;
  297. dxbtnNewPhase.Visible := ivNever;
  298. dxUser.Visible := ivAlways;
  299. dxUser.Caption := PHPWeb.RealName;
  300. lblAccount.Caption := PHPWeb.RealName;
  301. lblMail.Caption := Format('(%s)', [PHPWeb.Account]);
  302. if Trim(PHPWeb.Company) <> '' then
  303. lblCompany.Caption := PHPWeb.Company
  304. else
  305. lblCompany.Caption := '我的单位';
  306. if Trim(PHPWeb.Role) <> '' then
  307. lblRole.Caption := PHPWeb.Role
  308. else
  309. lblRole.Caption := '我的职称';
  310. // 每次登录都下载到本地,再从本地读入显示。以保证图片实时更新。
  311. sPic := PHPWeb.UserPath + '0_' + IntToStr(PHPWeb.UserID) + '.jpg';
  312. if PHPWeb.DownFile(PHPWeb.UserImageURL, sPic) then
  313. if FileExists(sPic) then
  314. imgUserImage.Picture.LoadFromFile(sPic);
  315. end
  316. else
  317. begin
  318. dxUser.Visible := ivNever;
  319. dxbtnReceiveProject.Visible := ivAlways;
  320. end;
  321. MainForm.Caption := GetSoftName + GetVersionName;
  322. end;
  323. begin
  324. CreateProjectManagerFrame;
  325. FProjectFrames := TList.Create;
  326. InitialForVersions;
  327. SetHintFont;
  328. ResetAutoSave;
  329. end;
  330. procedure TMainForm.UpdateProgress(APos: Integer; const AHint: string);
  331. begin
  332. UpdateProgressBar(APos);
  333. UpdateProgressHint(AHint);
  334. Application.ProcessMessages;
  335. end;
  336. procedure TMainForm.UpdateProgressBar(APosition: Integer);
  337. begin
  338. if APosition < ProgressBar.Max then
  339. ProgressBar.Position := APosition
  340. else
  341. ProgressBar.Position := ProgressBar.Min;
  342. end;
  343. procedure TMainForm.UpdateProgressHint(const AHint: string);
  344. begin
  345. dxStatusBar.Panels[0].Text := AHint;
  346. end;
  347. procedure TMainForm.FormDestroy(Sender: TObject);
  348. begin
  349. ClearObjects(FProjectFrames);
  350. FProjectFrames.Free;
  351. FProjectManagerFrame.Free;
  352. end;
  353. function TMainForm.OpenProject(ARec: TsdDataRecord): TProjectFrame;
  354. begin
  355. if not HasOpened(ARec.ValueByName('ID').AsInteger) then
  356. Result := CreateProjectView(ARec)
  357. else
  358. begin
  359. LocateProject(ARec.ValueByName('ID').AsInteger);
  360. Result := CurProjectFrame;
  361. end;
  362. end;
  363. function TMainForm.HasOpened(AProjectID: Integer): Boolean;
  364. begin
  365. Result := OpenProjectManager.ProjectIndex(AProjectID) <> -1;
  366. end;
  367. procedure TMainForm.LocateProject(AProjectID: Integer);
  368. begin
  369. jtsProjects.TabIndex := OpenProjectManager.ProjectIndex(AProjectID) + 1;
  370. if jpsMain.ActivePage <> jpsMainProjects then
  371. jpsMain.ActivePage := jpsMainProjects;
  372. end;
  373. function TMainForm.CreateProjectView(ARec: TsdDataRecord): TProjectFrame;
  374. function CreateNewProjectPage: TJimPage;
  375. begin
  376. Result := TJimPage.Create(jpsProjects);
  377. Result.Pages := jpsProjects;
  378. jpsProjects.ActivePage := Result;
  379. end;
  380. function CreateNewProjectTab(const ATabName: string; APage: TJimPage): Integer;
  381. begin
  382. Result := jtsProjects.Tabs.AddObject(ATabName, APage);
  383. jtsProjects.TabIndex := Result;
  384. end;
  385. function CreateProjectFrame(AProjectData: TProjectData; APage: TJimPage): TProjectFrame;
  386. var
  387. ProjectFrame: TProjectFrame;
  388. begin
  389. ProjectFrame := TProjectFrame.Create(AProjectData);
  390. FProjectFrames.Add(ProjectFrame);
  391. ProjectFrame.Parent := APage;
  392. ProjectFrame.Align := alClient;
  393. Result := ProjectFrame;
  394. end;
  395. var
  396. jimPage: TJimPage;
  397. begin
  398. jpsMain.ActivePage := jpsMainProjects;
  399. jimPage := CreateNewProjectPage;
  400. CreateNewProjectTab(ARec.ValueByName('Name').AsString, jimPage);
  401. Result := CreateProjectFrame(OpenProjectManager.Open(ARec), jimPage);
  402. ProjectManager.AddOpenTenderBackup(ARec.ValueByName('ID').AsInteger);
  403. end;
  404. procedure TMainForm.jtsProjectsChange(Sender: TObject; NewTab: Integer;
  405. var AllowChange: Boolean);
  406. begin
  407. LocateProjectView(NewTab - 1);
  408. ResetProcessView(NewTab);
  409. end;
  410. procedure TMainForm.LocateProjectView(AIndex: Integer);
  411. begin
  412. if AIndex >= 0 then
  413. begin
  414. jpsMain.ActivePage := jpsMainProjects;
  415. jpsProjects.ActivePage := TJimPage(jtsProjects.Tabs.Objects[AIndex + 1]);
  416. OpenProjectManager.CurProjectIndex := AIndex;
  417. ChangeLeftSideGlobalView(AIndex);
  418. end
  419. else
  420. jpsMain.ActivePage := jpsMainProjectsManager;
  421. end;
  422. procedure TMainForm.ChangeLeftSideGlobalView(AIndex: Integer);
  423. begin
  424. if (AIndex >= 0) and (AIndex < FProjectFrames.Count) then
  425. TProjectFrame(FProjectFrames[AIndex]).ResetAssistantView;
  426. end;
  427. procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  428. begin
  429. try
  430. OpenProjectManager.SaveAll;
  431. except
  432. end;
  433. end;
  434. procedure TMainForm.jtsProjectsMouseDown(Sender: TObject;
  435. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  436. begin
  437. if (Button = mbRight) and (jtsProjects.TabIndex > 0) then
  438. dxpmTabSet.PopupFromCursorPos;
  439. end;
  440. procedure TMainForm.actnCloseProjectExecute(Sender: TObject);
  441. begin
  442. OpenProjectManager.CurProjectData.SaveAndCheck;
  443. DeleteProjectView(jtsProjects.TabIndex - 1);
  444. LocateProjectView(jtsProjects.TabIndex - 1);
  445. ResetProcessView(jtsProjects.TabIndex);
  446. end;
  447. procedure TMainForm.actnCloseProjectUpdate(Sender: TObject);
  448. begin
  449. TAction(Sender).Enabled := jtsProjects.Tabs.Count > 1;
  450. end;
  451. procedure TMainForm.DeleteProjectView(AIndex: Integer);
  452. begin
  453. TProjectFrame(FProjectFrames[AIndex]).Free;
  454. FProjectFrames.Delete(AIndex);
  455. OpenProjectManager.Delete(AIndex);
  456. jpsProjects.Pages.Delete(AIndex);
  457. jtsProjects.Tabs.Delete(AIndex + 1);
  458. end;
  459. procedure TMainForm.actnNewPhaseExecute(Sender: TObject);
  460. begin
  461. TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1]).CreateNewPhase;
  462. end;
  463. procedure TMainForm.actnProjectPropertiesUpdate(Sender: TObject);
  464. begin
  465. TAction(Sender).Enabled := jtsProjects.TabIndex > 0;
  466. end;
  467. procedure TMainForm.actnProjectPropertiesExecute(Sender: TObject);
  468. begin
  469. ModifyProjectProperties(TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1]));
  470. end;
  471. procedure TMainForm.actnSaveProjectExecute(Sender: TObject);
  472. begin
  473. OpenProjectManager.CurProjectData.SaveAndCheck;
  474. end;
  475. procedure TMainForm.actnNewAuditExecute(Sender: TObject);
  476. begin
  477. TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1]).CreateNewAudit;
  478. end;
  479. procedure TMainForm.actnNewPhaseUpdate(Sender: TObject);
  480. begin
  481. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  482. if TAction(Sender).Enabled then
  483. with CurProjectFrame.ProjectData do
  484. TAction(Sender).Enabled := TAction(Sender).Enabled and (ProjProperties.AuditStatus = -1);
  485. end;
  486. function TMainForm.GetCurProjectFrame: TProjectFrame;
  487. begin
  488. if jtsProjects.TabIndex > 0 then
  489. Result := TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1])
  490. else
  491. Result := nil;
  492. end;
  493. procedure TMainForm.actnOptionsExecute(Sender: TObject);
  494. begin
  495. ModifiedOptions;
  496. ResetAutoSave;
  497. end;
  498. procedure TMainForm.actnImportExcelExecute(Sender: TObject);
  499. var
  500. sFileName: string;
  501. Importor: Tdei_CustomBills;
  502. bWithLevelCode, bWithoutGclBills: Boolean;
  503. begin
  504. if HintAndImportTypeSelect(bWithLevelCode, bWithoutGclBills) then
  505. begin
  506. if SelectExcelFile(sFileName) then
  507. begin
  508. Importor := Tdei_CustomBills.Create(CurProjectFrame.ProjectData);
  509. try
  510. Importor.ImportFile(sFileName, bWithLevelCode, bWithoutGclBills);
  511. finally
  512. Importor.Free;
  513. end;
  514. end;
  515. end;
  516. end;
  517. procedure TMainForm.ResetProcessView(AIndex: Integer);
  518. begin
  519. dxBarManager.Bars[2].Visible := AIndex > 0;
  520. if G_IsCloud then
  521. dxBarManager.Bars[2].Visible := False;
  522. end;
  523. procedure TMainForm.actnReplyExecute(Sender: TObject); // 批复
  524. begin
  525. if not CurProjectFrame.CheckCanReport then Exit;
  526. Screen.Cursor := crHourGlass;
  527. try
  528. CurProjectFrame.ProjectData.SaveAndCheck;
  529. {$O-}
  530. // 失败后重复一次
  531. if not CurProjectFrame.ProjectData.ReplyProject then
  532. begin
  533. if not CurProjectFrame.ProjectData.ReplyProject then
  534. ErrorMessage('批复项目失败!');
  535. end;
  536. {$O+}
  537. finally
  538. Screen.Cursor := crDefault;
  539. end;
  540. end;
  541. procedure TMainForm.actnSubmitExecute(Sender: TObject); // 上报
  542. begin
  543. if not CurProjectFrame.CheckCanReport then Exit;
  544. Screen.Cursor := crHourGlass;
  545. try
  546. CurProjectFrame.ProjectData.SaveAndCheck;
  547. {$O-}
  548. // 失败后重复一次
  549. if not CurProjectFrame.ProjectData.SubmitProject then
  550. begin
  551. if not CurProjectFrame.ProjectData.SubmitProject then
  552. ErrorMessage('上报项目失败!');
  553. end;
  554. {$O+}
  555. finally
  556. Screen.Cursor := crDefault;
  557. end;
  558. end;
  559. procedure TMainForm.dxBarManagerShowToolbarsPopup(Sender: TdxBarManager;
  560. PopupItemLinks: TdxBarItemLinks);
  561. begin
  562. // 取消菜单栏右键菜单
  563. PopupItemLinks.Clear;
  564. end;
  565. procedure TMainForm.actnSubmitUpdate(Sender: TObject);
  566. begin
  567. with CurProjectFrame.ProjectData do
  568. TAction(Sender).Enabled := (ProjProperties.PhaseCount > 0) and
  569. ((ProjProperties.AuditStatus >= 0) and (ProjProperties.AuditStatus < iMaxStageCount-1));
  570. end;
  571. procedure TMainForm.actnImportExcelUpdate(Sender: TObject);
  572. begin
  573. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  574. if TAction(Sender).Enabled then
  575. with CurProjectFrame.ProjectData do
  576. TAction(Sender).Enabled := TAction(Sender).Enabled and (PhaseIndex < 1);
  577. end;
  578. procedure TMainForm.actnUnlockInfoUpdate(Sender: TObject);
  579. begin
  580. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  581. end;
  582. procedure TMainForm.actnUnlockInfoExecute(Sender: TObject);
  583. begin
  584. CurProjectFrame.UnLockData;
  585. end;
  586. procedure TMainForm.dxbtnAboutClick(Sender: TObject);
  587. begin
  588. ShowAboutForm;
  589. end;
  590. procedure TMainForm.dxLoginCloudClick(Sender: TObject);
  591. begin
  592. ShellExecute(Application.Handle, nil, PChar(PHPWeb.LoginCloudURL), nil, nil, SW_SHOWNORMAL);
  593. end;
  594. procedure TMainForm.dxManageAccountClick(Sender: TObject);
  595. begin
  596. ShellExecute(Application.Handle, nil, PChar(PHPWeb.PassportURL), nil, nil, SW_SHOWNORMAL);
  597. end;
  598. procedure TMainForm.dxbtnAuthorizeDogClick(Sender: TObject);
  599. begin
  600. Authorize;
  601. end;
  602. procedure TMainForm.actnImportBillsPriceExecute(Sender: TObject);
  603. var
  604. sFileName: string;
  605. Importor: TBillsPriceExcelImport;
  606. begin
  607. if SelectExcelFile(sFileName) then
  608. begin
  609. Importor := TBillsPriceExcelImport.Create(CurProjectFrame.ProjectData);
  610. try
  611. Importor.ImportFile(sFileName);
  612. finally
  613. Importor.Free;
  614. end;
  615. end;
  616. end;
  617. procedure TMainForm.actnImportDealBillsExecute(Sender: TObject);
  618. var
  619. sFileName: string;
  620. Importor: TDealBillsExcelImport;
  621. begin
  622. if SelectExcelFile(sFileName) then
  623. begin
  624. Importor := TDealBillsExcelImport.Create(CurProjectFrame.ProjectData);
  625. try
  626. Importor.ImportFile(sFileName);
  627. finally
  628. Importor.Free;
  629. end;
  630. end;
  631. end;
  632. procedure TMainForm.tAutoSaveTimer(Sender: TObject);
  633. begin
  634. Screen.Cursor := crHourGlass;
  635. try
  636. OpenProjectManager.SaveAll;
  637. finally
  638. screen.Cursor := crDefault;
  639. end;
  640. end;
  641. procedure TMainForm.ResetAutoSave;
  642. begin
  643. with SupportManager.ConfigInfo do
  644. begin
  645. tAutoSave.Interval := AutoSaveInterval * 60 * 1000;
  646. tAutoSave.Enabled := AutoSave;
  647. end;
  648. end;
  649. procedure TMainForm.actnExportExcelExecute(Sender: TObject);
  650. var
  651. sFileName: string;
  652. Exportor: TIDTreeExcelExportor;
  653. begin
  654. if SaveExcelFile(sFileName) then
  655. begin
  656. Exportor := TIDTreeExcelExportor.Create;
  657. try
  658. if SupportManager.ConfigInfo.ExcelWithMis then
  659. Exportor.DefineCol(@ciLedgerWithMis, Length(ciLedgerWithMis))
  660. else
  661. Exportor.DefineCol(@ciLedger, Length(ciLedger));
  662. Exportor.HasLevelCode := True;
  663. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  664. finally
  665. Exportor.Free;
  666. end;
  667. end;
  668. end;
  669. procedure TMainForm.dxSyncClick(Sender: TObject);
  670. begin
  671. Screen.Cursor := crHourGlass;
  672. try
  673. FProjectManagerFrame.DoBatchReceiveAllOnline;
  674. finally
  675. Screen.Cursor := crDefault;
  676. end;
  677. end;
  678. procedure TMainForm.actnExportCloudTenderFileExecute(Sender: TObject);
  679. var
  680. sFileName: string;
  681. Exportor: TTenderExport;
  682. Rec: TsdDataRecord;
  683. begin
  684. // 导出前先保存
  685. CurProjectFrame.ProjectData.SaveAndCheck;
  686. // 导出云版专用
  687. sFileName := SupportManager.ConfigInfo.OutputPath + CurProjectFrame.ProjectData.ProjectName + '.ctf';
  688. if SaveFile(sFileName, '.ctf') then
  689. begin
  690. if FileExists(sFileName) and not QuestMessage(Format('存在同名文件“%s”,是否替换?', [ExtractFileName(sFileName)])) then
  691. Exit;
  692. Screen.Cursor := crHourGlass;
  693. try
  694. Rec := ProjectManagerFrame.Rec(CurProjectFrame.ProjectData.ProjectID);
  695. Exportor := TTenderExport.Create(Rec, sFileName);
  696. try
  697. Exportor.Execute;
  698. finally
  699. Exportor.Free;
  700. end;
  701. finally
  702. Screen.Cursor := crDefault;
  703. end;
  704. end;
  705. end;
  706. procedure TMainForm.actnExportCloudTenderFileUpdate(Sender: TObject);
  707. begin
  708. // 仅打开的项目可以导出云版专用格式,且该项目没有进行计量
  709. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  710. if TAction(Sender).Enabled then
  711. TAction(Sender).Enabled := CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0;
  712. end;
  713. procedure TMainForm.actnImportCloudTenderFileExecute(Sender: TObject);
  714. var
  715. sFileName: string;
  716. begin
  717. if SelectFile(sFileName, '.ctf') then
  718. begin
  719. CurProjectFrame.ProjectData.ImportCloudTenderFile(sFileName);
  720. CurProjectFrame.RefreshColumnDisplay;
  721. end;
  722. end;
  723. procedure TMainForm.actnImportCloudTenderFileUpdate(Sender: TObject);
  724. begin
  725. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  726. if TAction(Sender).Enabled then
  727. TAction(Sender).Enabled := CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0;
  728. end;
  729. procedure TMainForm.actnExportFxBillsExcelExecute(Sender: TObject);
  730. var
  731. sFileName: string;
  732. Exportor: TIDTreeExcelExportor;
  733. begin
  734. if SaveExcelFile(sFileName) then
  735. begin
  736. Exportor := TIDTreeExcelExportor.Create;
  737. try
  738. if SupportManager.ConfigInfo.ExcelWithMis then
  739. Exportor.DefineCol(@ciFxBillsWithMis, Length(ciFxBillsWithMis))
  740. else
  741. Exportor.DefineCol(@ciFxBills, Length(ciFxBills));
  742. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  743. finally
  744. Exportor.Free;
  745. end;
  746. end;
  747. end;
  748. procedure TMainForm.dxseBatchInsertKeyDown(Sender: TObject; var Key: Word;
  749. Shift: TShiftState);
  750. var
  751. i: Integer;
  752. begin
  753. if Key = 13 then
  754. begin
  755. for i := 1 to dxseBatchInsert.IntValue do
  756. ZjDbaInsert.ExecuteTarget(CurProjectFrame.BillsCompileFrame.zgBillsCompile);
  757. end;
  758. end;
  759. procedure TMainForm.actnReplyUpdate(Sender: TObject);
  760. begin
  761. with CurProjectFrame.ProjectData do
  762. TAction(Sender).Enabled := (ProjProperties.PhaseCount > 0);
  763. end;
  764. procedure TMainForm.dxbtnTenderPartitionClick(Sender: TObject);
  765. begin
  766. PartTendersModel;
  767. end;
  768. procedure TMainForm.actnImportDmfExecute(Sender: TObject);
  769. var
  770. sFileName: string;
  771. begin
  772. if SelectFile(sFileName, '.dmf') then
  773. CurProjectFrame.ProjectData.ImportDmfFile(sFileName);
  774. end;
  775. procedure TMainForm.dxbtnHelpCenterClick(Sender: TObject);
  776. const
  777. sHelpUrl = 'http://help.smartcost.com.cn/hc/';
  778. begin
  779. ShellExecute(Application.Handle, nil, PChar(sHelpUrl), nil, nil, SW_SHOWNORMAL);
  780. end;
  781. procedure TMainForm.OnError(ASender: TObject; AE: Exception);
  782. begin
  783. MeasureLog.AppendLogTo(AE.Message);
  784. end;
  785. end.