MainFrm.pas 24 KB

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