MainFrm.pas 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855
  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. AProjectData.IsGuest := FProjectManagerFrame.IsGuest;
  387. FProjectFrames.Add(ProjectFrame);
  388. ProjectFrame.Parent := APage;
  389. ProjectFrame.Align := alClient;
  390. Result := ProjectFrame;
  391. end;
  392. var
  393. jimPage: TJimPage;
  394. begin
  395. jpsMain.ActivePage := jpsMainProjects;
  396. jimPage := CreateNewProjectPage;
  397. CreateNewProjectTab(ARec.ValueByName('Name').AsString, jimPage);
  398. Result := CreateProjectFrame(OpenProjectManager.Open(ARec), jimPage);
  399. ProjectManager.AddOpenTenderBackup(ARec.ValueByName('ID').AsInteger);
  400. end;
  401. procedure TMainForm.jtsProjectsChange(Sender: TObject; NewTab: Integer;
  402. var AllowChange: Boolean);
  403. begin
  404. LocateProjectView(NewTab - 1);
  405. ResetProcessView(NewTab);
  406. end;
  407. procedure TMainForm.LocateProjectView(AIndex: Integer);
  408. begin
  409. if AIndex >= 0 then
  410. begin
  411. jpsMain.ActivePage := jpsMainProjects;
  412. jpsProjects.ActivePage := TJimPage(jtsProjects.Tabs.Objects[AIndex + 1]);
  413. OpenProjectManager.CurProjectIndex := AIndex;
  414. ChangeLeftSideGlobalView(AIndex);
  415. end
  416. else
  417. jpsMain.ActivePage := jpsMainProjectsManager;
  418. end;
  419. procedure TMainForm.ChangeLeftSideGlobalView(AIndex: Integer);
  420. begin
  421. if (AIndex >= 0) and (AIndex < FProjectFrames.Count) then
  422. TProjectFrame(FProjectFrames[AIndex]).ResetAssistantView;
  423. end;
  424. procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  425. begin
  426. try
  427. OpenProjectManager.SaveAll;
  428. except
  429. end;
  430. end;
  431. procedure TMainForm.jtsProjectsMouseDown(Sender: TObject;
  432. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  433. begin
  434. if (Button = mbRight) and (jtsProjects.TabIndex > 0) then
  435. dxpmTabSet.PopupFromCursorPos;
  436. end;
  437. procedure TMainForm.actnCloseProjectExecute(Sender: TObject);
  438. begin
  439. OpenProjectManager.CurProjectData.SaveAndCheck;
  440. DeleteProjectView(jtsProjects.TabIndex - 1);
  441. LocateProjectView(jtsProjects.TabIndex - 1);
  442. ResetProcessView(jtsProjects.TabIndex);
  443. end;
  444. procedure TMainForm.actnCloseProjectUpdate(Sender: TObject);
  445. begin
  446. TAction(Sender).Enabled := jtsProjects.Tabs.Count > 1;
  447. end;
  448. procedure TMainForm.DeleteProjectView(AIndex: Integer);
  449. begin
  450. TProjectFrame(FProjectFrames[AIndex]).Free;
  451. FProjectFrames.Delete(AIndex);
  452. OpenProjectManager.Delete(AIndex);
  453. jpsProjects.Pages.Delete(AIndex);
  454. jtsProjects.Tabs.Delete(AIndex + 1);
  455. end;
  456. procedure TMainForm.actnNewPhaseExecute(Sender: TObject);
  457. begin
  458. TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1]).CreateNewPhase;
  459. end;
  460. procedure TMainForm.actnProjectPropertiesUpdate(Sender: TObject);
  461. begin
  462. TAction(Sender).Enabled := jtsProjects.TabIndex > 0;
  463. end;
  464. procedure TMainForm.actnProjectPropertiesExecute(Sender: TObject);
  465. begin
  466. ModifyProjectProperties(TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1]));
  467. end;
  468. procedure TMainForm.actnSaveProjectExecute(Sender: TObject);
  469. begin
  470. OpenProjectManager.CurProjectData.SaveAndCheck;
  471. end;
  472. procedure TMainForm.actnNewAuditExecute(Sender: TObject);
  473. begin
  474. TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1]).CreateNewAudit;
  475. end;
  476. procedure TMainForm.actnNewPhaseUpdate(Sender: TObject);
  477. begin
  478. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  479. if TAction(Sender).Enabled then
  480. with CurProjectFrame.ProjectData do
  481. TAction(Sender).Enabled := TAction(Sender).Enabled and (ProjProperties.AuditStatus = -1);
  482. end;
  483. function TMainForm.GetCurProjectFrame: TProjectFrame;
  484. begin
  485. if jtsProjects.TabIndex > 0 then
  486. Result := TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1])
  487. else
  488. Result := nil;
  489. end;
  490. procedure TMainForm.actnOptionsExecute(Sender: TObject);
  491. begin
  492. ModifiedOptions;
  493. ResetAutoSave;
  494. end;
  495. procedure TMainForm.actnImportExcelExecute(Sender: TObject);
  496. var
  497. sFileName: string;
  498. Importor: Tdei_CustomBills;
  499. bWithLevelCode, bWithoutGclBills: Boolean;
  500. begin
  501. if HintAndImportTypeSelect(bWithLevelCode, bWithoutGclBills) then
  502. begin
  503. if SelectFile(sFileName, '.xls') then
  504. begin
  505. Importor := Tdei_CustomBills.Create(CurProjectFrame.ProjectData);
  506. try
  507. Importor.ImportFile(sFileName, bWithLevelCode, bWithoutGclBills);
  508. finally
  509. Importor.Free;
  510. end;
  511. end;
  512. end;
  513. end;
  514. procedure TMainForm.ResetProcessView(AIndex: Integer);
  515. begin
  516. dxBarManager.Bars[2].Visible := AIndex > 0;
  517. if G_IsCloud then
  518. dxBarManager.Bars[2].Visible := False;
  519. end;
  520. procedure TMainForm.actnReplyExecute(Sender: TObject); // 批复
  521. begin
  522. if not CurProjectFrame.CheckCanReport then Exit;
  523. Screen.Cursor := crHourGlass;
  524. try
  525. CurProjectFrame.ProjectData.SaveAndCheck;
  526. {$O-}
  527. // 失败后重复一次
  528. if not CurProjectFrame.ProjectData.ReplyProject then
  529. begin
  530. if not CurProjectFrame.ProjectData.ReplyProject then
  531. ErrorMessage('批复项目失败!');
  532. end;
  533. {$O+}
  534. finally
  535. Screen.Cursor := crDefault;
  536. end;
  537. end;
  538. procedure TMainForm.actnSubmitExecute(Sender: TObject); // 上报
  539. begin
  540. if not CurProjectFrame.CheckCanReport then Exit;
  541. Screen.Cursor := crHourGlass;
  542. try
  543. CurProjectFrame.ProjectData.SaveAndCheck;
  544. {$O-}
  545. // 失败后重复一次
  546. if not CurProjectFrame.ProjectData.SubmitProject then
  547. begin
  548. if not CurProjectFrame.ProjectData.SubmitProject then
  549. ErrorMessage('上报项目失败!');
  550. end;
  551. {$O+}
  552. finally
  553. Screen.Cursor := crDefault;
  554. end;
  555. end;
  556. procedure TMainForm.dxBarManagerShowToolbarsPopup(Sender: TdxBarManager;
  557. PopupItemLinks: TdxBarItemLinks);
  558. begin
  559. // 取消菜单栏右键菜单
  560. PopupItemLinks.Clear;
  561. end;
  562. procedure TMainForm.actnSubmitUpdate(Sender: TObject);
  563. begin
  564. with CurProjectFrame.ProjectData do
  565. TAction(Sender).Enabled := (ProjProperties.PhaseCount > 0) and
  566. ((ProjProperties.AuditStatus >= 0) and (ProjProperties.AuditStatus < iMaxStageCount-1));
  567. end;
  568. procedure TMainForm.actnImportExcelUpdate(Sender: TObject);
  569. begin
  570. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  571. if TAction(Sender).Enabled then
  572. with CurProjectFrame.ProjectData do
  573. TAction(Sender).Enabled := TAction(Sender).Enabled and (PhaseIndex < 1);
  574. end;
  575. procedure TMainForm.actnUnlockInfoUpdate(Sender: TObject);
  576. begin
  577. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  578. end;
  579. procedure TMainForm.actnUnlockInfoExecute(Sender: TObject);
  580. begin
  581. CurProjectFrame.UnLockData;
  582. end;
  583. procedure TMainForm.dxbtnAboutClick(Sender: TObject);
  584. begin
  585. ShowAboutForm;
  586. end;
  587. procedure TMainForm.dxLoginCloudClick(Sender: TObject);
  588. begin
  589. ShellExecute(Application.Handle, nil, PChar(PHPWeb.LoginCloudURL), nil, nil, SW_SHOWNORMAL);
  590. end;
  591. procedure TMainForm.dxManageAccountClick(Sender: TObject);
  592. begin
  593. ShellExecute(Application.Handle, nil, PChar(PHPWeb.PassportURL), nil, nil, SW_SHOWNORMAL);
  594. end;
  595. procedure TMainForm.dxbtnAuthorizeDogClick(Sender: TObject);
  596. begin
  597. Authorize;
  598. end;
  599. procedure TMainForm.actnImportBillsPriceExecute(Sender: TObject);
  600. var
  601. sFileName: string;
  602. Importor: TBillsPriceExcelImport;
  603. begin
  604. if SelectFile(sFileName, '.xls') then
  605. begin
  606. Importor := TBillsPriceExcelImport.Create(CurProjectFrame.ProjectData);
  607. try
  608. Importor.ImportFile(sFileName);
  609. finally
  610. Importor.Free;
  611. end;
  612. end;
  613. end;
  614. procedure TMainForm.actnImportDealBillsExecute(Sender: TObject);
  615. var
  616. sFileName: string;
  617. Importor: TDealBillsExcelImport;
  618. begin
  619. if SelectFile(sFileName, '.xls') then
  620. begin
  621. Importor := TDealBillsExcelImport.Create(CurProjectFrame.ProjectData);
  622. try
  623. Importor.ImportFile(sFileName);
  624. finally
  625. Importor.Free;
  626. end;
  627. end;
  628. end;
  629. procedure TMainForm.tAutoSaveTimer(Sender: TObject);
  630. begin
  631. Screen.Cursor := crHourGlass;
  632. try
  633. OpenProjectManager.SaveAll;
  634. finally
  635. screen.Cursor := crDefault;
  636. end;
  637. end;
  638. procedure TMainForm.ResetAutoSave;
  639. begin
  640. with SupportManager.ConfigInfo do
  641. begin
  642. tAutoSave.Interval := AutoSaveInterval * 60 * 1000;
  643. tAutoSave.Enabled := AutoSave;
  644. end;
  645. end;
  646. procedure TMainForm.actnExportExcelExecute(Sender: TObject);
  647. var
  648. sFileName: string;
  649. Exportor: TIDTreeExcelExportor;
  650. begin
  651. if SaveFile(sFileName, '.xls') then
  652. begin
  653. Exportor := TIDTreeExcelExportor.Create;
  654. try
  655. if SupportManager.ConfigInfo.ExcelWithMis then
  656. Exportor.DefineCol(@ciLedgerWithMis, Length(ciLedgerWithMis))
  657. else
  658. Exportor.DefineCol(@ciLedger, Length(ciLedger));
  659. Exportor.HasLevelCode := True;
  660. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  661. finally
  662. Exportor.Free;
  663. end;
  664. end;
  665. end;
  666. procedure TMainForm.dxSyncClick(Sender: TObject);
  667. begin
  668. Screen.Cursor := crHourGlass;
  669. try
  670. FProjectManagerFrame.DoBatchReceiveAllOnline;
  671. finally
  672. Screen.Cursor := crDefault;
  673. end;
  674. end;
  675. procedure TMainForm.actnExportCloudTenderFileExecute(Sender: TObject);
  676. var
  677. sFileName: string;
  678. Exportor: TTenderExport;
  679. Rec: TsdDataRecord;
  680. begin
  681. // 导出前先保存
  682. CurProjectFrame.ProjectData.SaveAndCheck;
  683. // 导出云版专用
  684. sFileName := SupportManager.ConfigInfo.OutputPath + CurProjectFrame.ProjectData.ProjectName + '.ctf';
  685. if SaveFile(sFileName, '.ctf') then
  686. begin
  687. if FileExists(sFileName) and not QuestMessage(Format('存在同名文件“%s”,是否替换?', [ExtractFileName(sFileName)])) then
  688. Exit;
  689. Screen.Cursor := crHourGlass;
  690. try
  691. Rec := ProjectManagerFrame.Rec(CurProjectFrame.ProjectData.ProjectID);
  692. Exportor := TTenderExport.Create(Rec, sFileName);
  693. try
  694. Exportor.Execute;
  695. finally
  696. Exportor.Free;
  697. end;
  698. finally
  699. Screen.Cursor := crDefault;
  700. end;
  701. end;
  702. end;
  703. procedure TMainForm.actnExportCloudTenderFileUpdate(Sender: TObject);
  704. begin
  705. // 仅打开的项目可以导出云版专用格式,且该项目没有进行计量
  706. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  707. if TAction(Sender).Enabled then
  708. TAction(Sender).Enabled := CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0;
  709. end;
  710. procedure TMainForm.actnImportCloudTenderFileExecute(Sender: TObject);
  711. var
  712. sFileName: string;
  713. begin
  714. if SelectFile(sFileName, '.ctf') then
  715. begin
  716. CurProjectFrame.ProjectData.ImportCloudTenderFile(sFileName);
  717. CurProjectFrame.RefreshColumnDisplay;
  718. end;
  719. end;
  720. procedure TMainForm.actnImportCloudTenderFileUpdate(Sender: TObject);
  721. begin
  722. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  723. if TAction(Sender).Enabled then
  724. TAction(Sender).Enabled := CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0;
  725. end;
  726. procedure TMainForm.actnExportFxBillsExcelExecute(Sender: TObject);
  727. var
  728. sFileName: string;
  729. Exportor: TIDTreeExcelExportor;
  730. begin
  731. if SaveFile(sFileName, '.xls') then
  732. begin
  733. Exportor := TIDTreeExcelExportor.Create;
  734. try
  735. if SupportManager.ConfigInfo.ExcelWithMis then
  736. Exportor.DefineCol(@ciFxBillsWithMis, Length(ciFxBillsWithMis))
  737. else
  738. Exportor.DefineCol(@ciFxBills, Length(ciFxBills));
  739. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  740. finally
  741. Exportor.Free;
  742. end;
  743. end;
  744. end;
  745. procedure TMainForm.dxseBatchInsertKeyDown(Sender: TObject; var Key: Word;
  746. Shift: TShiftState);
  747. var
  748. i: Integer;
  749. begin
  750. if Key = 13 then
  751. begin
  752. for i := 1 to dxseBatchInsert.IntValue do
  753. ZjDbaInsert.ExecuteTarget(CurProjectFrame.BillsCompileFrame.zgBillsCompile);
  754. end;
  755. end;
  756. procedure TMainForm.actnReplyUpdate(Sender: TObject);
  757. begin
  758. with CurProjectFrame.ProjectData do
  759. TAction(Sender).Enabled := (ProjProperties.PhaseCount > 0);
  760. end;
  761. procedure TMainForm.dxbtnTenderPartitionClick(Sender: TObject);
  762. begin
  763. PartTendersModel;
  764. end;
  765. procedure TMainForm.actnImportDmfExecute(Sender: TObject);
  766. var
  767. sFileName: string;
  768. begin
  769. if SelectFile(sFileName, '.dmf') then
  770. CurProjectFrame.ProjectData.ImportDmfFile(sFileName);
  771. end;
  772. end.