MainFrm.pas 26 KB

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