MainFrm.pas 28 KB

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