MainFrm.pas 26 KB

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