MainFrm.pas 24 KB

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