MainFrm.pas 25 KB

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