MainFrm.pas 25 KB

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