MainFrm.pas 23 KB

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