MainFrm.pas 23 KB

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