MainFrm.pas 29 KB

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