Преглед изворни кода

标准清单,导出json数据

MaiXinRong пре 5 година
родитељ
комит
da19dad12a

+ 5 - 6
DataModules/BillsCompileDm.pas

@@ -1292,12 +1292,11 @@ var
 
   function GetNodeData(ANode: TBillsIDTreeNode; AOrder: Integer; AFullPath: string): string;
   const
-    sBillsJson = '"id": %d, "pid": %d, "order": %d, "full_path": "%s", "level": %d, "isleaf" : %d, ' +
-                 '"code": "%s", "b_code": "%s", "name": "%s", "unit": "%s", ' +
-                 '%s';
+    sBillsJson = '"id": %d, "pid": %d, "order": %d, "full_path": "%s", "level": %d, "is_leaf" : %d, ' +
+                 '"code": "%s", "b_code": "%s", "name": "%s", "unit": "%s"';
   begin
     Result := Format(sBillsJson, [ANode.Rec.ID.AsInteger, ANode.Rec.ParentID.AsInteger, AOrder, AFullPath, ANode.Level, Integer(not ANode.HasChildren),
-         ANode.Rec.Code.AsString, ANode.Rec.B_Code.AsString, ANode.Rec.Name.AsString, ANode.Rec.Units.AsString, '"tender_id": 2']);
+         ANode.Rec.Code.AsString, ANode.Rec.B_Code.AsString, ANode.Rec.Name.AsString, ANode.Rec.Units.AsString]);
   end;
 
   procedure ExportNode(ANode: TsdIDTreeNode; AOrder: Integer; AParentPath: string);
@@ -1324,9 +1323,9 @@ var
 begin
   sgs := TStringList.Create;
   try
-    sgs.Add('var BillsData = [');
+    sgs.Add('[');
     ExportNode(FBillsCompileTree.FirstNode, 1, '');
-    sgs.Strings[sgs.Count - 1] := sgs.Strings[sgs.Count - 1] + '];';
+    sgs.Strings[sgs.Count - 1] := sgs.Strings[sgs.Count - 1] + ']';
     sgs.SaveToFile(AFileName);
   finally
     sgs.Free;

+ 1 - 0
DataModules/StandardBillsDm.dfm

@@ -10,6 +10,7 @@ object StandardBillsData: TStandardBillsData
   end
   object sddStdBills: TsdDataSet
     Active = False
+    Filtered = False
     Provider = sdpStdBills
     Left = 216
     Top = 72

+ 51 - 0
DataModules/StandardBillsDm.pas

@@ -24,6 +24,8 @@ type
     procedure Open(AConnection: TADOConnection);
     procedure CalcCacheData(ANode:TsdIDTreeNode; AOrder: Integer; AParentPath: String);
 
+    procedure RecursiveExportBillsJson(const AFileName: string);
+
     property BillsTree: TsdIDTree read FBillsTree;
   end;
 
@@ -98,4 +100,53 @@ begin
   sddStdBills.AddIndex('sddBCode', 'B_Code');
 end;
 
+procedure TStandardBillsData.RecursiveExportBillsJson(
+  const AFileName: string);
+var
+  sgs: TStrings;
+
+  function GetNodeData(ANode: TsdIDTreeNode; AOrder: Integer; AFullPath: string): string;
+  const
+    sBillsJson = '"id": %d, "pid": %d, "order": %d, "full_path": "%s", "level": %d, "is_leaf" : %d, ' +
+                 '"code": "%s", "b_code": "%s", "name": "%s", "unit": "%s"';
+  begin
+    Result := Format(sBillsJson, [ANode.ID, ANode.Rec.ValueByName('ParentID').AsInteger, AOrder, AFullPath,
+         ANode.Rec.ValueByName('BillsLevel').AsInteger, Integer(not ANode.HasChildren),
+         ANode.Rec.ValueByName('Code').AsString, ANode.Rec.ValueByName('B_Code').AsString,
+         ANode.Rec.ValueByName('Name').AsString, ANode.Rec.ValueByName('Unit').AsString]);
+  end;
+
+  procedure ExportNode(ANode: TsdIDTreeNode; AOrder: Integer; AParentPath: string);
+  var
+    sNodePath: string;
+  begin
+    if not Assigned(ANode) then Exit;
+
+    if AParentPath = '' then
+      sNodePath := IntToStr(ANode.ID)
+    else
+      sNodePath := AParentPath + '.' + IntToStr(ANode.ID);
+
+    sgs.Strings[sgs.Count - 1] := sgs.Strings[sgs.Count - 1] + '{';
+    sgs.Add(Format('  %s', [AnsiToUtf8(GetNodeData(ANode, AOrder, sNodePath))]));
+    sgs.Add('}');
+    if Assigned(ANode.NextNode) then
+      sgs.Strings[sgs.Count - 1] := sgs.Strings[sgs.Count - 1] + ',';
+
+    ExportNode(ANode.FirstChild, 1, sNodePath);
+    ExportNode(ANode.NextSibling, AOrder + 1, AParentPath);
+  end;
+
+begin
+  sgs := TStringList.Create;
+  try
+    sgs.Add('[');
+    ExportNode(FBillsTree.FirstNode, 1, '');
+    sgs.Strings[sgs.Count - 1] := sgs.Strings[sgs.Count - 1] + ']';
+    sgs.SaveToFile(AFileName);
+  finally
+    sgs.Free;
+  end;
+end;
+
 end.

+ 6 - 0
Forms/MainFrm.dfm

@@ -1278,6 +1278,12 @@ object MainForm: TMainForm
       Action = actnImportSubTenderGatherGclExcel
       Category = 2
     end
+    object dxbtnExportStdJson: TdxBarButton
+      Caption = #23548#20986#26631#20934#28165#21333'json'#25968#25454
+      Category = 2
+      Hint = #23548#20986#26631#20934#28165#21333'json'#25968#25454
+      Visible = ivAlways
+    end
   end
   object Images: TImageList
     DrawingStyle = dsTransparent

+ 1 - 0
Forms/MainFrm.pas

@@ -191,6 +191,7 @@ type
     actnImportSubTenderGatherGcl: TAction;
     actnImportSubTenderGatherGclExcel: TAction;
     dxbtnImportSubTenderGatherExcel: TdxBarButton;
+    dxbtnExportStdJson: TdxBarButton;
     procedure FormCreate(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
     procedure jtsProjectsChange(Sender: TObject; NewTab: Integer;

+ 10 - 1
Frames/StandardBillsFme.dfm

@@ -142,11 +142,20 @@ object StandardBillsFrame: TStandardBillsFrame
       Caption = #28155#21152#28165#21333
       OnExecute = actnInsertBillsFromLibExecute
     end
+    object actnExportStdJson: TAction
+      Caption = #23548#20986#26631#20934#28165#21333'JSON'#25968#25454
+      OnExecute = actnExportStdJsonExecute
+    end
   end
   object dxpmStandardBills: TdxBarPopupMenu
     BarManager = MainForm.dxBarManager
-    ItemLinks = <>
+    ItemLinks = <
+      item
+        Item = MainForm.dxbtnExportStdJson
+        Visible = True
+      end>
     UseOwnFont = False
+    OnPopup = dxpmStandardBillsPopup
     Left = 184
     Top = 80
   end

+ 17 - 1
Frames/StandardBillsFme.pas

@@ -22,10 +22,13 @@ type
     actnInsertBillsFromLib: TAction;
     stdBills: TsdGridTreeDBA;
     odLib: TOpenDialog;
+    actnExportStdJson: TAction;
     procedure actnInsertBillsFromLibExecute(Sender: TObject);
     procedure zgBillsMouseDown(Sender: TObject; Button: TMouseButton;
       Shift: TShiftState; X, Y: Integer);
     procedure spbtnLibsClick(Sender: TObject);
+    procedure dxpmStandardBillsPopup(Sender: TObject);
+    procedure actnExportStdJsonExecute(Sender: TObject);
   private
     FStandardLibs: TStandardLibs;
     FBillsType: TBillsType;
@@ -45,7 +48,7 @@ type
 implementation
 
 uses
-  SupportUnit, Globals, ConditionalDefines, UtilMethods;
+  SupportUnit, Globals, ConditionalDefines, UtilMethods, MainFrm;
 
 {$R *.dfm}
 
@@ -179,4 +182,17 @@ begin
   end;
 end;
 
+procedure TStandardBillsFrame.dxpmStandardBillsPopup(Sender: TObject);
+begin
+  SetDxBtnAction(actnExportStdJson, MainForm.dxbtnExportStdJson);
+end;
+
+procedure TStandardBillsFrame.actnExportStdJsonExecute(Sender: TObject);
+var
+  sFileName: string;
+begin
+  if SaveFile(sFileName, '.json') then
+    StandardLib.StandardBillsData.RecursiveExportBillsJson(sFileName);
+end;
+
 end.