MainFrm.pas 23 KB

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