MainFrm.pas 23 KB

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