MainFrm.pas 29 KB

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