MainFrm.pas 25 KB

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