MainFrm.pas 24 KB

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