MainFrm.pas 25 KB

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