MainFrm.pas 28 KB

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