MainFrm.pas 24 KB

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