MainFrm.pas 25 KB

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