MainFrm.pas 24 KB

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