MainFrm.pas 25 KB

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