MainFrm.pas 25 KB

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