MainFrm.pas 29 KB

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