MainFrm.pas 24 KB

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