MainFrm.pas 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796
  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. CurProjectFrame.ProjectData.ReplyProject;
  498. {$O+}
  499. finally
  500. Screen.Cursor := crDefault;
  501. end;
  502. end;
  503. procedure TMainForm.actnSubmitExecute(Sender: TObject); // 上报
  504. begin
  505. if not CurProjectFrame.CheckCanReport then Exit;
  506. Screen.Cursor := crHourGlass;
  507. try
  508. CurProjectFrame.ProjectData.Save;
  509. {$O-}
  510. CurProjectFrame.ProjectData.SubmitProject;
  511. {$O+}
  512. finally
  513. Screen.Cursor := crDefault;
  514. end;
  515. end;
  516. procedure TMainForm.dxBarManagerShowToolbarsPopup(Sender: TdxBarManager;
  517. PopupItemLinks: TdxBarItemLinks);
  518. begin
  519. // 取消菜单栏右键菜单
  520. PopupItemLinks.Clear;
  521. end;
  522. procedure TMainForm.actnSubmitUpdate(Sender: TObject);
  523. begin
  524. with CurProjectFrame.ProjectData do
  525. TAction(Sender).Enabled := (ProjProperties.PhaseCount > 0) and
  526. ((ProjProperties.AuditStatus >= 0) and (ProjProperties.AuditStatus < iMaxStageCount-1));
  527. end;
  528. procedure TMainForm.actnImportExcelUpdate(Sender: TObject);
  529. begin
  530. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  531. if TAction(Sender).Enabled then
  532. with CurProjectFrame.ProjectData do
  533. TAction(Sender).Enabled := TAction(Sender).Enabled and (PhaseIndex < 1);
  534. end;
  535. procedure TMainForm.actnUnlockInfoUpdate(Sender: TObject);
  536. begin
  537. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  538. end;
  539. procedure TMainForm.actnUnlockInfoExecute(Sender: TObject);
  540. begin
  541. CurProjectFrame.UnLockData;
  542. end;
  543. procedure TMainForm.dxbtnAboutClick(Sender: TObject);
  544. begin
  545. ShowAboutForm;
  546. end;
  547. procedure TMainForm.dxLoginCloudClick(Sender: TObject);
  548. begin
  549. ShellExecute(Application.Handle, nil, PChar(PHPWeb.LoginCloudURL), nil, nil, SW_SHOWNORMAL);
  550. end;
  551. procedure TMainForm.dxManageAccountClick(Sender: TObject);
  552. begin
  553. ShellExecute(Application.Handle, nil, PChar(PHPWeb.PassportURL), nil, nil, SW_SHOWNORMAL);
  554. end;
  555. procedure TMainForm.dxbtnAuthorizeDogClick(Sender: TObject);
  556. begin
  557. Authorize;
  558. end;
  559. procedure TMainForm.actnImportBillsPriceExecute(Sender: TObject);
  560. var
  561. sFileName: string;
  562. Importor: TBillsPriceExcelImport;
  563. begin
  564. if SelectFile(sFileName, '.xls') then
  565. begin
  566. Importor := TBillsPriceExcelImport.Create(CurProjectFrame.ProjectData);
  567. try
  568. Importor.ImportFile(sFileName);
  569. finally
  570. Importor.Free;
  571. end;
  572. end;
  573. end;
  574. procedure TMainForm.actnImportDealBillsExecute(Sender: TObject);
  575. var
  576. sFileName: string;
  577. Importor: TDealBillsExcelImport;
  578. begin
  579. if SelectFile(sFileName, '.xls') then
  580. begin
  581. Importor := TDealBillsExcelImport.Create(CurProjectFrame.ProjectData);
  582. try
  583. Importor.ImportFile(sFileName);
  584. finally
  585. Importor.Free;
  586. end;
  587. end;
  588. end;
  589. procedure TMainForm.tAutoSaveTimer(Sender: TObject);
  590. begin
  591. Screen.Cursor := crHourGlass;
  592. try
  593. OpenProjectManager.SaveAll;
  594. finally
  595. screen.Cursor := crDefault;
  596. end;
  597. end;
  598. procedure TMainForm.ResetAutoSave;
  599. begin
  600. with SupportManager.ConfigInfo do
  601. begin
  602. tAutoSave.Interval := AutoSaveInterval * 60 * 1000;
  603. tAutoSave.Enabled := AutoSave;
  604. end;
  605. end;
  606. procedure TMainForm.actnExportExcelExecute(Sender: TObject);
  607. var
  608. sFileName: string;
  609. Exportor: TIDTreeExcelExportor;
  610. begin
  611. if SaveFile(sFileName, '.xls') then
  612. begin
  613. Exportor := TIDTreeExcelExportor.Create;
  614. try
  615. Exportor.DefineCol(@ciLedger, Length(ciLedger));
  616. Exportor.HasLevelCode := True;
  617. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  618. finally
  619. Exportor.Free;
  620. end;
  621. end;
  622. end;
  623. procedure TMainForm.dxSyncClick(Sender: TObject);
  624. begin
  625. Screen.Cursor := crHourGlass;
  626. try
  627. FProjectManagerFrame.DoBatchReceiveAllOnline;
  628. finally
  629. Screen.Cursor := crDefault;
  630. end;
  631. end;
  632. procedure TMainForm.actnExportCloudTenderFileExecute(Sender: TObject);
  633. var
  634. sFileName: string;
  635. Exportor: TTenderExport;
  636. Rec: TsdDataRecord;
  637. begin
  638. // 导出前先保存
  639. CurProjectFrame.ProjectData.Save;
  640. // 导出云版专用
  641. sFileName := SupportManager.ConfigInfo.OutputPath + CurProjectFrame.ProjectData.ProjectName;
  642. if SaveFile(sFileName, '.ctf') then
  643. begin
  644. if FileExists(sFileName) and not QuestMessage(Format('存在同名文件“%s”,是否替换?', [ExtractFileName(sFileName)])) then
  645. Exit;
  646. Screen.Cursor := crHourGlass;
  647. try
  648. Rec := ProjectManagerFrame.Rec(CurProjectFrame.ProjectData.ProjectID);
  649. Exportor := TTenderExport.Create(Rec, sFileName);
  650. try
  651. Exportor.Execute;
  652. finally
  653. Exportor.Free;
  654. end;
  655. finally
  656. Screen.Cursor := crDefault;
  657. end;
  658. end;
  659. end;
  660. procedure TMainForm.actnExportCloudTenderFileUpdate(Sender: TObject);
  661. begin
  662. // 仅打开的项目可以导出云版专用格式,且该项目没有进行计量
  663. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  664. if TAction(Sender).Enabled then
  665. TAction(Sender).Enabled := CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0;
  666. end;
  667. procedure TMainForm.actnImportCloudTenderFileExecute(Sender: TObject);
  668. var
  669. sFileName: string;
  670. begin
  671. if SelectFile(sFileName, '.ctf') then
  672. begin
  673. CurProjectFrame.ProjectData.ImportCloudTenderFile(sFileName);
  674. CurProjectFrame.RefreshColumnDisplay;
  675. end;
  676. end;
  677. procedure TMainForm.actnImportCloudTenderFileUpdate(Sender: TObject);
  678. begin
  679. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  680. if TAction(Sender).Enabled then
  681. TAction(Sender).Enabled := CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0;
  682. end;
  683. procedure TMainForm.actnExportFxBillsExcelExecute(Sender: TObject);
  684. var
  685. sFileName: string;
  686. Exportor: TIDTreeExcelExportor;
  687. begin
  688. if SaveFile(sFileName, '.xls') then
  689. begin
  690. Exportor := TIDTreeExcelExportor.Create;
  691. try
  692. Exportor.DefineCol(@ciFxBills, Length(ciFxBills));
  693. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  694. finally
  695. Exportor.Free;
  696. end;
  697. end;
  698. end;
  699. procedure TMainForm.dxseBatchInsertKeyDown(Sender: TObject; var Key: Word;
  700. Shift: TShiftState);
  701. var
  702. i: Integer;
  703. begin
  704. if Key = 13 then
  705. begin
  706. for i := 1 to dxseBatchInsert.IntValue do
  707. ZjDbaInsert.ExecuteTarget(CurProjectFrame.BillsCompileFrame.zgBillsCompile);
  708. end;
  709. end;
  710. procedure TMainForm.actnReplyUpdate(Sender: TObject);
  711. begin
  712. with CurProjectFrame.ProjectData do
  713. TAction(Sender).Enabled := (ProjProperties.PhaseCount > 0);
  714. end;
  715. end.