MainFrm.pas 26 KB

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