MainFrm.pas 25 KB

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