MainFrm.pas 24 KB

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