MainFrm.pas 24 KB

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