MainFrm.pas 27 KB

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