MainFrm.pas 25 KB

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