MainFrm.pas 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840
  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. DealBillsExcelImport,
  11. // Controls & Delphi Default ... (Almost By Add Controls)
  12. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  13. Dialogs, cxGraphics, JimPages, ComCtrls, dxStatusBar, cxControls, JimTabs,
  14. dxBar, ImgList, UtilMethods, ZjDbaActns, ActnList, XPStyleActnCtrls, ActnMan,
  15. dxBarExtItems, sdDB, ExtCtrls, jpeg, StdCtrls, CslLabel, pngimage;
  16. type
  17. TMainForm = class(TForm)
  18. dxBarManager: TdxBarManager;
  19. Images: TImageList;
  20. dxsiFile: TdxBarSubItem;
  21. jtsProjects: TJimTabSet;
  22. dxStatusBar: TdxStatusBar;
  23. dxStatusBarContainer2: TdxStatusBarContainerControl;
  24. ProgressBar: TProgressBar;
  25. jpsMain: TJimPages;
  26. jpsMainProjectsManager: TJimPage;
  27. jpsMainProjects: TJimPage;
  28. jpsProjects: TJimPages;
  29. dxsiEdit: TdxBarSubItem;
  30. dxsiHelp: TdxBarSubItem;
  31. dxbtnCopy: TdxBarButton;
  32. dxbtnPaste: TdxBarButton;
  33. dxbtnCut: TdxBarButton;
  34. dxbtnInsert: TdxBarButton;
  35. dxbtnDelete: TdxBarButton;
  36. dxbtnUpMove: TdxBarButton;
  37. dxbtnDownMove: TdxBarButton;
  38. dxbtnUpLevel: TdxBarButton;
  39. dxbtnDownLevel: TdxBarButton;
  40. dxbtnAuthorizeDog: TdxBarButton;
  41. dxbtnAbout: TdxBarButton;
  42. dxbtnNewProject: TdxBarButton;
  43. dxbtnOpenProject: TdxBarButton;
  44. dxbtnDeleteProject: TdxBarButton;
  45. ActionManager1: TActionManager;
  46. ZjDbaInsert: TZjDbaInsert;
  47. ZjDbaDelete: TZjDbaDelete;
  48. ZjDbaUpMove: TZjDbaUpMove;
  49. ZjDbaDownMove: TZjDbaDownMove;
  50. ZjTreeDbaUpLevel: TZjTreeDbaUpLevel;
  51. ZjTreeDbaDownLevel: TZjTreeDbaDownLevel;
  52. ZjGridCopy: TZjGridCopy;
  53. ZjGridPaste: TZjGridPaste;
  54. ZjGridCut: TZjGridCut;
  55. ZjGridRemapedPaste: TZjGridRemapedPaste;
  56. dxpmTabSet: TdxBarPopupMenu;
  57. dxbtnCloseProject: TdxBarButton;
  58. actnCloseProject: TAction;
  59. dxbtnNewPhase: TdxBarButton;
  60. dxbtnCalculateLedger: TdxBarButton;
  61. actnNewPhase: TAction;
  62. dxbtnProjectProperties: TdxBarButton;
  63. actnProjectProperties: TAction;
  64. dxbtnSaveProject: TdxBarButton;
  65. actnSaveProject: TAction;
  66. dxbtnRemapedPaste: TdxBarButton;
  67. dxbtnImportExcel: TdxBarButton;
  68. actnImportExcel: TAction;
  69. dxbtnNewAudit: TdxBarButton;
  70. dxbtnCopyBillsBlock: TdxBarButton;
  71. actnNewAudit: TAction;
  72. dxbtnFinalAudit: TdxBarButton;
  73. dxbtnSubmitProject: TdxBarButton;
  74. dxbtnReceiveProject: TdxBarButton;
  75. dxbtnReplyProject: TdxBarButton;
  76. dxbtnAcceptProject: TdxBarButton;
  77. dxbtnCalculateAll: TdxBarButton;
  78. dxbtnNewSubProject: TdxBarButton;
  79. dxbtnNewTender: TdxBarButton;
  80. dxbtnOptions: TdxBarButton;
  81. actnOptions: TAction;
  82. dxbtnCalculatePhasePay: TdxBarButton;
  83. actnSubmit: TAction;
  84. actnReply: TAction;
  85. dxbtnSubmit: TdxBarButton;
  86. dxbtnReply: TdxBarButton;
  87. dxbtnFirstLevel: TdxBarButton;
  88. dxbtnSecondLevel: TdxBarButton;
  89. dxbtnThirdLevel: TdxBarButton;
  90. dxbtnFourthLevel: TdxBarButton;
  91. dxbtnFifthLevel: TdxBarButton;
  92. dxbtnAllLevel: TdxBarButton;
  93. dxbtnAllXmj: TdxBarButton;
  94. dxbtnExportGridToExcel: TdxBarButton;
  95. dxbtnRefresh: TdxBarButton;
  96. dxbtnUnlockInfo: TdxBarButton;
  97. actnUnlockInfo: TAction;
  98. dxUser: TdxBarSubItem;
  99. pnlUser: TPanel;
  100. lblAccount: TLabel;
  101. lblCompany: TLabel;
  102. lblRole: TLabel;
  103. dxLoginCloud: TdxBarButton;
  104. dxManageAccount: TdxBarButton;
  105. pnl1: TPanel;
  106. imgUserImage: TImage;
  107. lblMail: TLabel;
  108. dxUserContainer: TdxBarControlContainerItem;
  109. dxbtnBatchAddChild: TdxBarButton;
  110. dxbtnBatchAddNext: TdxBarButton;
  111. dxbtnReorderChildrenCode: TdxBarButton;
  112. dxbtnImportBillsPrice: TdxBarButton;
  113. dxsiImportExcel: TdxBarSubItem;
  114. dxbtnImportDealBills: TdxBarButton;
  115. actnImportBillsPrice: TAction;
  116. actnImportDealBills: TAction;
  117. dxbtnBatchReplaceBillsInfo: TdxBarButton;
  118. tAutoSave: TTimer;
  119. dxsiExportExcel: TdxBarSubItem;
  120. dxbtnExportExcel: TdxBarButton;
  121. actnExportExcel: TAction;
  122. dxbtnCurPhase: TdxBarButton;
  123. dxSync: TdxBarButton;
  124. dxbtnBatchWritePos_Reason: TdxBarButton;
  125. dxbtnExportCloudTenderFile: TdxBarButton;
  126. actnExportCloudTenderFile: TAction;
  127. dxtbnImportCloudTenderFile: TdxBarButton;
  128. actnImportCloudTenderFile: TAction;
  129. dxbtnCheckAndClear: TdxBarButton;
  130. dxbtnModifyDealBills: TdxBarButton;
  131. dxbtnLocateBills: TdxBarButton;
  132. dxbtnOpenBackupFolder: TdxBarButton;
  133. dxbtnSetBookmark: TdxBarButton;
  134. dxbtnExportFxBillsExcel: TdxBarButton;
  135. actnExportFxBillsExcel: TAction;
  136. dxseBatchInsert: TdxBarSpinEdit;
  137. actnBatchInsert: TAction;
  138. dxbtnRename: TdxBarButton;
  139. dxbtnImportGclBillsToXmj: TdxBarButton;
  140. dxbtnChangeDealBillsMode: TdxBarButton;
  141. dxsiExpandTo: TdxBarSubItem;
  142. dxbtnLocateBookmark: TdxBarButton;
  143. dxbtnImportPlaneFxBillsToXmj: TdxBarButton;
  144. dxbtnAllPeg: TdxBarButton;
  145. dxsiData: TdxBarSubItem;
  146. dxbtnTenderPartition: TdxBarButton;
  147. dxbtnSetDealPayPlan: TdxBarButton;
  148. dxbtnAddDetailGLs: TdxBarButton;
  149. dxbtnCopyDetailGls: TdxBarButton;
  150. dxbtnApplyToSameBills: TdxBarButton;
  151. dxbtnCalculatePriceMargin: TdxBarButton;
  152. dxbtnFxZJJL: TdxBarButton;
  153. dxbtnGclZJJL: TdxBarButton;
  154. dxbtnInsertCol: TdxBarButton;
  155. dxbtnHidden: TdxBarButton;
  156. dxbtnCancelHidden: TdxBarButton;
  157. procedure FormCreate(Sender: TObject);
  158. procedure FormDestroy(Sender: TObject);
  159. procedure jtsProjectsChange(Sender: TObject; NewTab: Integer;
  160. var AllowChange: Boolean);
  161. procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  162. procedure jtsProjectsMouseDown(Sender: TObject; Button: TMouseButton;
  163. Shift: TShiftState; X, Y: Integer);
  164. procedure actnCloseProjectExecute(Sender: TObject);
  165. procedure actnCloseProjectUpdate(Sender: TObject);
  166. procedure actnNewPhaseExecute(Sender: TObject);
  167. procedure actnProjectPropertiesUpdate(Sender: TObject);
  168. procedure actnProjectPropertiesExecute(Sender: TObject);
  169. procedure actnSaveProjectExecute(Sender: TObject);
  170. procedure actnNewAuditExecute(Sender: TObject);
  171. procedure actnNewPhaseUpdate(Sender: TObject);
  172. procedure actnOptionsExecute(Sender: TObject);
  173. procedure actnImportExcelExecute(Sender: TObject);
  174. procedure actnReplyExecute(Sender: TObject);
  175. procedure actnSubmitExecute(Sender: TObject);
  176. procedure dxBarManagerShowToolbarsPopup(Sender: TdxBarManager;
  177. PopupItemLinks: TdxBarItemLinks);
  178. procedure actnSubmitUpdate(Sender: TObject);
  179. procedure actnImportExcelUpdate(Sender: TObject);
  180. procedure actnUnlockInfoUpdate(Sender: TObject);
  181. procedure actnUnlockInfoExecute(Sender: TObject);
  182. procedure dxbtnAboutClick(Sender: TObject);
  183. procedure dxLoginCloudClick(Sender: TObject);
  184. procedure dxManageAccountClick(Sender: TObject);
  185. procedure dxbtnAuthorizeDogClick(Sender: TObject);
  186. procedure actnImportBillsPriceExecute(Sender: TObject);
  187. procedure actnImportDealBillsExecute(Sender: TObject);
  188. procedure tAutoSaveTimer(Sender: TObject);
  189. procedure actnExportExcelExecute(Sender: TObject);
  190. procedure dxSyncClick(Sender: TObject);
  191. procedure actnExportCloudTenderFileExecute(Sender: TObject);
  192. procedure actnExportCloudTenderFileUpdate(Sender: TObject);
  193. procedure actnImportCloudTenderFileExecute(Sender: TObject);
  194. procedure actnImportCloudTenderFileUpdate(Sender: TObject);
  195. procedure actnExportFxBillsExcelExecute(Sender: TObject);
  196. procedure dxseBatchInsertKeyDown(Sender: TObject; var Key: Word;
  197. Shift: TShiftState);
  198. procedure actnReplyUpdate(Sender: TObject);
  199. procedure dxbtnTenderPartitionClick(Sender: TObject);
  200. private
  201. FProjectManagerFrame: TProjectManagerFrame;
  202. FProjectFrames: TList;
  203. procedure UpdateProgressBar(APosition: Integer);
  204. procedure UpdateProgressHint(const AHint: string);
  205. function CreateProjectView(ARec: TsdDataRecord): TProjectFrame;
  206. procedure LocateProjectView(AIndex: Integer);
  207. procedure DeleteProjectView(AIndex: Integer);
  208. procedure ResetProcessView(AIndex: Integer);
  209. procedure ChangeLeftSideGlobalView(AIndex: Integer);
  210. function GetCurProjectFrame: TProjectFrame;
  211. procedure ResetAutoSave;
  212. public
  213. procedure UpdateProgress(APos: Integer; const AHint: string);
  214. procedure LocateProject(AProjectID: Integer);
  215. function HasOpened(AProjectID: Integer): Boolean;
  216. function OpenProject(ARec: TsdDataRecord): TProjectFrame;
  217. property CurProjectFrame: TProjectFrame read GetCurProjectFrame;
  218. property ProjectManagerFrame: TProjectManagerFrame read FProjectManagerFrame;
  219. end;
  220. var
  221. MainForm: TMainForm;
  222. implementation
  223. uses
  224. ProjectProperty, ConstUnit, PHPWebDm, Math, ShellAPI,
  225. FindUserFrm, ImportExcelHintFrm, ConfigDoc, ExportExcel,
  226. ProjectCommands, BillsCompileDm, tpMainFrm;
  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: TBillsEdtExcelImport;
  490. bWithLevelCode, bWithoutGclBills: Boolean;
  491. begin
  492. if HintAndImportTypeSelect(bWithLevelCode, bWithoutGclBills) then
  493. begin
  494. if SelectFile(sFileName, '.xls') then
  495. begin
  496. Importor := TBillsEdtExcelImport.Create(CurProjectFrame.ProjectData);
  497. try
  498. Importor.WithLevelCode := bWithLevelCode;
  499. Importor.WithoutGclBills := bWithoutGclBills;
  500. Importor.ImportFile(sFileName);
  501. finally
  502. Importor.Free;
  503. end;
  504. end;
  505. end;
  506. end;
  507. procedure TMainForm.ResetProcessView(AIndex: Integer);
  508. begin
  509. dxBarManager.Bars[2].Visible := AIndex > 0;
  510. if G_IsCloud then
  511. dxBarManager.Bars[2].Visible := False;
  512. end;
  513. procedure TMainForm.actnReplyExecute(Sender: TObject); // 批复
  514. begin
  515. if not CurProjectFrame.CheckCanReport then Exit;
  516. Screen.Cursor := crHourGlass;
  517. try
  518. CurProjectFrame.ProjectData.Save;
  519. {$O-}
  520. // 失败后重复一次
  521. if not CurProjectFrame.ProjectData.ReplyProject then
  522. begin
  523. if not CurProjectFrame.ProjectData.ReplyProject then
  524. ErrorMessage('批复项目失败!');
  525. end;
  526. {$O+}
  527. finally
  528. Screen.Cursor := crDefault;
  529. end;
  530. end;
  531. procedure TMainForm.actnSubmitExecute(Sender: TObject); // 上报
  532. begin
  533. if not CurProjectFrame.CheckCanReport then Exit;
  534. Screen.Cursor := crHourGlass;
  535. try
  536. CurProjectFrame.ProjectData.Save;
  537. {$O-}
  538. // 失败后重复一次
  539. if not CurProjectFrame.ProjectData.SubmitProject then
  540. begin
  541. if not CurProjectFrame.ProjectData.SubmitProject then
  542. ErrorMessage('上报项目失败!');
  543. end;
  544. {$O+}
  545. finally
  546. Screen.Cursor := crDefault;
  547. end;
  548. end;
  549. procedure TMainForm.dxBarManagerShowToolbarsPopup(Sender: TdxBarManager;
  550. PopupItemLinks: TdxBarItemLinks);
  551. begin
  552. // 取消菜单栏右键菜单
  553. PopupItemLinks.Clear;
  554. end;
  555. procedure TMainForm.actnSubmitUpdate(Sender: TObject);
  556. begin
  557. with CurProjectFrame.ProjectData do
  558. TAction(Sender).Enabled := (ProjProperties.PhaseCount > 0) and
  559. ((ProjProperties.AuditStatus >= 0) and (ProjProperties.AuditStatus < iMaxStageCount-1));
  560. end;
  561. procedure TMainForm.actnImportExcelUpdate(Sender: TObject);
  562. begin
  563. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  564. if TAction(Sender).Enabled then
  565. with CurProjectFrame.ProjectData do
  566. TAction(Sender).Enabled := TAction(Sender).Enabled and (PhaseIndex < 1);
  567. end;
  568. procedure TMainForm.actnUnlockInfoUpdate(Sender: TObject);
  569. begin
  570. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  571. end;
  572. procedure TMainForm.actnUnlockInfoExecute(Sender: TObject);
  573. begin
  574. CurProjectFrame.UnLockData;
  575. end;
  576. procedure TMainForm.dxbtnAboutClick(Sender: TObject);
  577. begin
  578. ShowAboutForm;
  579. end;
  580. procedure TMainForm.dxLoginCloudClick(Sender: TObject);
  581. begin
  582. ShellExecute(Application.Handle, nil, PChar(PHPWeb.LoginCloudURL), nil, nil, SW_SHOWNORMAL);
  583. end;
  584. procedure TMainForm.dxManageAccountClick(Sender: TObject);
  585. begin
  586. ShellExecute(Application.Handle, nil, PChar(PHPWeb.PassportURL), nil, nil, SW_SHOWNORMAL);
  587. end;
  588. procedure TMainForm.dxbtnAuthorizeDogClick(Sender: TObject);
  589. begin
  590. Authorize;
  591. end;
  592. procedure TMainForm.actnImportBillsPriceExecute(Sender: TObject);
  593. var
  594. sFileName: string;
  595. Importor: TBillsPriceExcelImport;
  596. begin
  597. if SelectFile(sFileName, '.xls') then
  598. begin
  599. Importor := TBillsPriceExcelImport.Create(CurProjectFrame.ProjectData);
  600. try
  601. Importor.ImportFile(sFileName);
  602. finally
  603. Importor.Free;
  604. end;
  605. end;
  606. end;
  607. procedure TMainForm.actnImportDealBillsExecute(Sender: TObject);
  608. var
  609. sFileName: string;
  610. Importor: TDealBillsExcelImport;
  611. begin
  612. if SelectFile(sFileName, '.xls') then
  613. begin
  614. Importor := TDealBillsExcelImport.Create(CurProjectFrame.ProjectData);
  615. try
  616. Importor.ImportFile(sFileName);
  617. finally
  618. Importor.Free;
  619. end;
  620. end;
  621. end;
  622. procedure TMainForm.tAutoSaveTimer(Sender: TObject);
  623. begin
  624. Screen.Cursor := crHourGlass;
  625. try
  626. OpenProjectManager.SaveAll;
  627. finally
  628. screen.Cursor := crDefault;
  629. end;
  630. end;
  631. procedure TMainForm.ResetAutoSave;
  632. begin
  633. with SupportManager.ConfigInfo do
  634. begin
  635. tAutoSave.Interval := AutoSaveInterval * 60 * 1000;
  636. tAutoSave.Enabled := AutoSave;
  637. end;
  638. end;
  639. procedure TMainForm.actnExportExcelExecute(Sender: TObject);
  640. var
  641. sFileName: string;
  642. Exportor: TIDTreeExcelExportor;
  643. begin
  644. if SaveFile(sFileName, '.xls') then
  645. begin
  646. Exportor := TIDTreeExcelExportor.Create;
  647. try
  648. if SupportManager.ConfigInfo.ExcelWithMis then
  649. Exportor.DefineCol(@ciLedgerWithMis, Length(ciLedgerWithMis))
  650. else
  651. Exportor.DefineCol(@ciLedger, Length(ciLedger));
  652. Exportor.HasLevelCode := True;
  653. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  654. finally
  655. Exportor.Free;
  656. end;
  657. end;
  658. end;
  659. procedure TMainForm.dxSyncClick(Sender: TObject);
  660. begin
  661. Screen.Cursor := crHourGlass;
  662. try
  663. FProjectManagerFrame.DoBatchReceiveAllOnline;
  664. finally
  665. Screen.Cursor := crDefault;
  666. end;
  667. end;
  668. procedure TMainForm.actnExportCloudTenderFileExecute(Sender: TObject);
  669. var
  670. sFileName: string;
  671. Exportor: TTenderExport;
  672. Rec: TsdDataRecord;
  673. begin
  674. // 导出前先保存
  675. CurProjectFrame.ProjectData.Save;
  676. // 导出云版专用
  677. sFileName := SupportManager.ConfigInfo.OutputPath + CurProjectFrame.ProjectData.ProjectName + '.ctf';
  678. if SaveFile(sFileName, '.ctf') then
  679. begin
  680. if FileExists(sFileName) and not QuestMessage(Format('存在同名文件“%s”,是否替换?', [ExtractFileName(sFileName)])) then
  681. Exit;
  682. Screen.Cursor := crHourGlass;
  683. try
  684. Rec := ProjectManagerFrame.Rec(CurProjectFrame.ProjectData.ProjectID);
  685. Exportor := TTenderExport.Create(Rec, sFileName);
  686. try
  687. Exportor.Execute;
  688. finally
  689. Exportor.Free;
  690. end;
  691. finally
  692. Screen.Cursor := crDefault;
  693. end;
  694. end;
  695. end;
  696. procedure TMainForm.actnExportCloudTenderFileUpdate(Sender: TObject);
  697. begin
  698. // 仅打开的项目可以导出云版专用格式,且该项目没有进行计量
  699. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  700. if TAction(Sender).Enabled then
  701. TAction(Sender).Enabled := CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0;
  702. end;
  703. procedure TMainForm.actnImportCloudTenderFileExecute(Sender: TObject);
  704. var
  705. sFileName: string;
  706. begin
  707. if SelectFile(sFileName, '.ctf') then
  708. begin
  709. CurProjectFrame.ProjectData.ImportCloudTenderFile(sFileName);
  710. CurProjectFrame.RefreshColumnDisplay;
  711. end;
  712. end;
  713. procedure TMainForm.actnImportCloudTenderFileUpdate(Sender: TObject);
  714. begin
  715. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  716. if TAction(Sender).Enabled then
  717. TAction(Sender).Enabled := CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0;
  718. end;
  719. procedure TMainForm.actnExportFxBillsExcelExecute(Sender: TObject);
  720. var
  721. sFileName: string;
  722. Exportor: TIDTreeExcelExportor;
  723. begin
  724. if SaveFile(sFileName, '.xls') then
  725. begin
  726. Exportor := TIDTreeExcelExportor.Create;
  727. try
  728. if SupportManager.ConfigInfo.ExcelWithMis then
  729. Exportor.DefineCol(@ciFxBillsWithMis, Length(ciFxBillsWithMis))
  730. else
  731. Exportor.DefineCol(@ciFxBills, Length(ciFxBills));
  732. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  733. finally
  734. Exportor.Free;
  735. end;
  736. end;
  737. end;
  738. procedure TMainForm.dxseBatchInsertKeyDown(Sender: TObject; var Key: Word;
  739. Shift: TShiftState);
  740. var
  741. i: Integer;
  742. begin
  743. if Key = 13 then
  744. begin
  745. for i := 1 to dxseBatchInsert.IntValue do
  746. ZjDbaInsert.ExecuteTarget(CurProjectFrame.BillsCompileFrame.zgBillsCompile);
  747. end;
  748. end;
  749. procedure TMainForm.actnReplyUpdate(Sender: TObject);
  750. begin
  751. with CurProjectFrame.ProjectData do
  752. TAction(Sender).Enabled := (ProjProperties.PhaseCount > 0);
  753. end;
  754. procedure TMainForm.dxbtnTenderPartitionClick(Sender: TObject);
  755. begin
  756. PartTendersModel;
  757. end;
  758. end.