MainFrm.pas 24 KB

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