MainFrm.pas 30 KB

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