MainFrm.pas 25 KB

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