⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rygl.pas

📁 一个不错的源程序DELPHI开发的,功能比较好的客户管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    sql.clear;
    sql.add('select ID from t_d_menuset ');
    sql.add(' where FORM_CODE=:FORM_CODE');
    ParamByName('FORM_CODE').Asstring:=FORM_CODE;
    open;
    result:=Fields[0].AsInteger;
  end;
end;

procedure TFormRygl.InsertFun(TreeView:TTreeView;FunLeaf:string;Form_Code:string);
var FormLeaf:string;
    i,Menu_ID:integer;
    newNode:TTreeNode;
begin
  with QueryTmp2 do
  begin
    close;
    sql.clear;
    sql.add('select FORM_CODE||'':''||FORM_NAME,FORM_CODE ');
    sql.add('  from T_D_FormSet');
    sql.add(' where (FORM_CODE=:Code)');
    ParamBYName('CODE').ASString:=Form_Code;
    open;
    FormLeaf:=Fields[0].AsString;
    Menu_ID:=getMenu_ID(Fields[1].AsString);
  end;{with}
  for i:=0 to TreeView.Items.Count-1 do
  begin  //已经有窗体结点时  直接插入功能结点
    if TreeView.Items[i].text=FormLeaf then
    begin
      newNode:=TreeView.Items.AddChild(TreeView.Items[i],FunLeaf);
      newNode.ImageIndex:=4;
      newNode.SelectedIndex:=5;
      exit;
    end;{if}
  end;{for}
  for i:=0 to TreeView.Items.Count-1 do
  begin  //没有窗体结点时  先插入窗体结点,再插入功能结点
    if copy(TreeView.Items[i].text,1,pos('.',TreeView.Items[i].text))=IntToStr(Menu_ID)+'.' then
    begin
      newNode:=TreeView.Items.AddChild(TreeView.Items[i],FormLeaf);
      newNode.ImageIndex:=2;
      newNode.SelectedIndex:=3;
      newNode:=TreeView.Items.AddChild(newNode,FunLeaf);
      newNode.ImageIndex:=4;
      newNode.SelectedIndex:=5;
      exit;
    end;{if}
  end;{for}
end;

procedure TFormRygl.InsertTreeViewFun(TreeView:TTreeView;GH:string);
begin//插入有权限的窗体、功能
  with QueryTmp1 do
  begin
    close;
    sql.clear;
    if GH<>'' then
    begin
      sql.add('select to_Char(a.FUN_ID)||''*''||a.FUN_NAME,a.Form_Code');
      sql.add('  from t_d_funset a,t_d_fungrant b');
      sql.add(' where (a.FUN_ID=b.Fun_ID)');
      sql.add('   and (b.WK_NO=:GH)');
      sql.add(' order by a.FUN_ID');
      ParamByName('GH').AsString:=GH;
    end
    else
    begin
      sql.add('select to_Char(FUN_ID)||''*''||FUN_NAME,Form_Code');
      sql.add('  from t_d_funset');
      sql.add(' order by FUN_ID');
    end;
    open;
    while not eof do
    begin
      InsertFun(TreeView,Fields[0].AsString,Fields[1].AsString);
      next;
    end;{while}
  end;
end;

procedure TFormRygl.InitTreeView_QX(TreeView:TTreeView;GH:string);
begin//可分配的权限树
  TreeView.Items.Clear;
  InsertTreeViewMenu(TreeView,GH); //插入有权限的菜单
  InsertTreeViewFun(TreeView,GH);  //插入有权限的窗体、功能
end;

procedure TFormRygl.locateTree(TreeView:TTreeView;Node:TTreeNode);
var i:integer;
    TmpNode1,TmpNode2:TTreeNode;
begin//定位叶子
  for i:=0 To TreeView.Items.Count-1 do
  begin
    TmpNode1:=TreeView.Items[i];
    TmpNode2:=Node;
    while (TmpNode1.Text=TmpNode2.Text) do
    begin
      TmpNode1:=TmpNode1.Parent;
      TmpNode2:=TmpNode2.Parent;
      if (TmpNode1=nil)or(TmpNode2=nil) then break;
    end;
    if (TmpNode1=nil)and(TmpNode2=nil) then
    begin
      TreeView.Selected:=TreeView.Items[i];
      exit;
    end;{if}
  end;{for}
end;

procedure TFormRygl.TreeView1DragDrop(Sender, Source: TObject; X,Y: Integer);
var HT2:TTreeNode;
    GH:string;
begin
  //****如果不是给人员加权限就不要让他拖动了吧********
  if TreeViewRy.Selected =nil then exit;
  if TreeViewRy.Selected.Level <>3 then
  begin
    MessageDlg('请选择人员!',mtConfirmation, [mbYes], 0);
    exit;
  end;
  //***************************************************
  if Source<>TreeView2 then Exit;
  HT2:=TreeView2.Selected;
  if (HT2=nil) then Exit;
  HT2:=TreeView_2.Items[HT2.AbsoluteIndex];
  dgfather_InsertSetAccess(HT2);
  dgChild_InsertSetAccess(HT2);
  GH:=pchar(TreeViewRy.Selected.data);
  TreeView_1.Items.Clear;
  TreeView1.Items.Clear;
  InitTreeView_QX(TreeView_1,GH);  //权限树
  TreeView1.Items:=TreeView_1.Items;
  ClearXH(TreeView1);
  locateTree(TreeView1,TreeView2.Selected);  //定位叶子
end;

procedure TFormRygl.TreeView1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TTreeView;
end;

procedure TFormRygl.TreeView2DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TTreeView;
end;

procedure TFormRygl.DeleteAccessmenu(GH:string;ID:Integer);
begin
  try
    Dm_Main.Databasedh.StartTransaction;
    with QueryTmp1 do
    begin
      close;
      sql.clear;
      sql.add('delete t_d_menugrant');
      sql.add(' where (WK_NO=:GH)');
      sql.add('   and (ID=:ID)');
      ParamByName('GH').AsString:=GH;
      ParamByName('ID').AsInteger:=ID;
      execsql;
    end;
    Dm_Main.Databasedh.Commit;
  except
    Dm_Main.Databasedh.Rollback;
    Application.MessageBox('系统在执行过程中发生错误!','提示',MB_ICONINFORMATION);
    exit;
  end;
end;

procedure TFormRygl.Delete_Set_Access_Fun(GH:string;ID:integer);
begin
  try
    Dm_Main.Databasedh.StartTransaction;
    with QueryTmp1 do
    begin
      close;
      sql.clear;
      sql.add('delete t_d_fungrant');
      sql.add(' where WK_NO=:Gh');
      sql.add('   and Fun_Id=:Fun_Id');
      ParamByName('GH').AsString:=GH;
      ParamByName('Fun_Id').AsInteger:=ID;
      ExecSql;
    end;
    Dm_Main.Databasedh.Commit;
  except
    Dm_Main.Databasedh.Rollback;
    Application.MessageBox('系统在执行过程中发生错误!','提示',MB_ICONINFORMATION);
    exit;
  end;
end;

procedure TFormRygl.dgChild_DeleteAccess(HT1:TTreeNode);
var T_Node:TTreeNode;
    QX_ID:Integer;
begin//递归删除权限
  T_Node:=HT1.getFirstChild;
  while T_Node<>nil do
  begin
    dgChild_DeleteAccess(T_Node);
    T_Node:=HT1.GetNextChild(T_Node);
  end;{while}
  if pos(':',HT1.text)<>0 then exit;
  if pos('.',HT1.text)<>0 then
  begin
    QX_ID:=StrToInt(copy(HT1.text,1,pos('.',HT1.text)-1));
    DeleteAccessmenu(Pchar(TreeViewRy.Selected.data),QX_ID);
  end
  else
  begin
    QX_ID:=StrToInt(copy(HT1.text,1,pos('*',HT1.text)-1));
    Delete_Set_Access_Fun(Pchar(TreeViewRy.Selected.data),QX_ID);
  end;
end;

procedure TFormRygl.TreeView2DragDrop(Sender, Source: TObject; X, Y: Integer);
var HT1:TTreeNode;
begin
  //****如果不是给人员加权限就不要让他拖动了吧********
  if TreeViewRy.Selected =nil then exit;
  if TreeViewRy.Selected.Level <>3 then
  begin
    MessageDlg('请选择人员!',mtConfirmation, [mbYes], 0);
    exit;
  end;
  //***************************************************
  if Source<>TreeView1 then Exit;
  HT1:=TreeView1.Selected;
  if HT1=nil then Exit;
  HT1:=TreeView_1.Items[HT1.AbsoluteIndex];
  dgChild_DeleteAccess(HT1);
  locateTree(TreeView2,TreeView1.Selected);  //定位叶子
  HT1.Delete;
  TreeView1.Selected.Delete;
end;

procedure TFormRygl.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := CaFree;
end;

procedure TFormRygl.FreeNode(treeview: TTreeview);
var
  i:integer;
  pnode:pchar;
begin
  FOR i:=0 to TreeView.Items.Count - 1 do
  begin
     if TreeView.Items[i].Data<>nil then
     begin
       pnode:=pchar(TreeView.Items[i].Data);
       FreeMem(pnode);
     end;
  end;
end;


function TFormRygl.InsertTreeNode(treeview:TTreeview;SNode:TTreeNode;pLabel,
  pData: string): TTreeNode;
var lNode:TTreeNode;
    lData:pchar;
    lChildNode:TTreeNode;
begin
  //--------------------------------------------------------
   //如果标签长度>255只取255
   if length(pLabel) >255 then pLabel :=copy(pLabel,0,255);
   //如果节点指针不为''
   if pData <> '' then
   begin
      GetMem(lData,length(pData)+1);
      move(pData[1],lData^,length(pData)+1);
   end
   else lData:=nil;
   lNode:=TreeView.Items.AddChildObject(SNode,pLabel,lData);
   //lNode.Selected:=True;
   result:=lNode;
end;
//树展开时临时地加上该城市下局向的用户
procedure TFormRygl.TreeExpand(Treeview: TTreeview; SNode: TTreeNode);
var
  lTreeNode,NewRyNode,NewJXNode:TTreeNode;
  str1,str2,str3,str4 :string;
begin
  //如果是临时结点就删除
  lTreeNode :=SNode.getFirstChild;
  if lTreeNode=nil then exit;
  if lTreeNode.Text<>'TEMP' then exit;
  if lTreeNode.Text='TEMP' then
  lTreeNode.Delete;
  //t_d_county县
  case SNode.Level of
  0:begin
      with QueryTmp1 do
      begin
        close;
        QueryTmp1.sql.text :='select OFF_NO_HOME,CITYNO,HOME_NAME from T_D_COUNTY where CITYNO='+#39+pchar(SNode.Data)+#39;
        open;
        first;
        while not Eof do
        begin
          str1 :=Fields[0].AsString;
          str2 :=Fields[1].AsString;
          str3 :=Fields[2].AsString;
          //先把第一层建出来
          NewJXNode:=
          InsertTreeNode(TreeViewRy,SNode,str3,str1+'#'+str2);
          //TreeViewRy.Items.Add(nil,Fields[0].AsString+':'+Fields[1].AsString);
          NewJXNode.ImageIndex := 0;
          NewJXNode.SelectedIndex := 1;
          //***************判断该县下有没关系室有没有,如果速度慢去掉*****************
          //QueryTmp2.close;
          //QueryTmp2.sql.text :='select count(ROOMID) from T_D_ROOM '+
          //' where CITYNO='+#39+str2+#39+' and OFF_NO_HOME='+#39+str1+#39;
          //QueryTmp2.open;
          //if QueryTmp2.fields[0].asinteger >0 then
          //begin
            //加入临时结点来强行加上+号
            InsertTreeNode(TreeViewRy,NewJXNode,'TEMP'
                ,'TEMP');
          //end;
          //************************************************************
          //这样建树肯定不行的,一次行建树了,慢!
          {
          if (jbdm=0)or(jx=QueryTmp1.Fields[0].AsInteger) then
            InitJxry(NewJxNode,QueryTmp1.Fields[0].AsInteger);//增加单个局向内的人员  }
          Next;
        end;{while}
      end;
    end;
  1:begin //加关系室
      with QueryTmp1 do
      begin
        close;
        QueryTmp1.sql.text :=
        'select ROOMID,OFF_NO_HOME,CITYNO,ROOM_NAME from T_D_ROOM where CITYNO='
        +#39+p_cityno+#39+' and OFF_NO_HOME='+#39+p_jxdm+#39;
        open;
        first;
        while not Eof do
        begin
          str1 :=Fields[0].AsString;
          str2 :=Fields[1].AsString;
          str3 :=Fields[2].AsString;
          str4 :=Fields[3].AsString;
          //先把第一层建出来
          NewJXNode:=
          InsertTreeNode(TreeViewRy,SNode,str4,str2+'#'+str3+'#'+str1);
          //TreeViewRy.Items.Add(nil,Fields[0].AsString+':'+Fields[1].AsString);
          NewJXNode.ImageIndex := 0;
          NewJXNode.SelectedIndex := 1;
          //***************判断该县下有没关系室有没有,如果速度慢去掉*****************
          //QueryTmp2.close;
          //QueryTmp2.sql.text :='select count(WK_NO) from T_F_MANAGER '+
          //' where CITYNO='+#39+str3+#39+' and OFF_NO_HOME='+#39+str2+#39
          //+' and RoomId='+#39+str1+#39;
          //QueryTmp2.open;
          //if QueryTmp2.fields[0].asinteger >0 then
          //begin
            //加入临时结点来强行加上+号
            InsertTreeNode(TreeViewRy,NewJXNode,'TEMP'
                ,'TEMP');
          //end;
          //************************************************************
          //这样建树肯定不行的,一次行建树了,慢!
          {
          if (jbdm=0)or(jx=QueryTmp1.Fields[0].AsInteger) then
            InitJxry(NewJxNode,QueryTmp1.Fields[0].AsInteger);//增加单个局向内的人员  }
          Next;
        end;{while}
      end;
    end;
  2:begin
      //加用户
      with QueryTmp2 do
      begin
        close;
        sql.clear;
        sql.add('select WK_NO,NAME,STAT from T_F_MANAGER');
        sql.add(' where Off_No_Home=:p1 and CITYNO=:p2 and RoomId=:p3 order by WK_NO,STAT');
        ParamByName('p1').Asstring :=P_jxdm;
        ParamByName('p2').Asstring :=P_cityno;
        ParamByName('p3').Asstring :=P_room;
        open;
        first;
        while not Eof do
        begin
           str1 :=Fields[0].AsString;
           str2 :=Fields[1].AsString;
           NewRyNode :=InsertTreeNode(TreeViewRy,SNode,str1+':'+str2,str1);
           if FieldByName('STAT').AsString='0' then
            begin
              NewRyNode.ImageIndex := 6;
              NewRyNode.SelectedIndex := 7;
            end
           else
            begin   //linlong 2003.03.15
              NewRyNode.ImageIndex := 8;
              NewRyNode.SelectedIndex := 8;
            end;
          Next;
        end;{while}
      end;{with}
    end;
  end;//end case
end;

procedure TFormRygl.TreeViewRyExpanding(Sender: TObject; Node: TTreeNode;
  var AllowExpansion: Boolean);
var
  str :string;
begin
  if P_Refresh then exit;
  case Node.Level of
    0:
    begin
    end;
    1:begin
        //得到城市编码和局向编码h和关系室
        str :=Pchar(Node.data);
        p_jxdm :=copy(str,1,pos('#',str)-1);
        p_cityno :=copy(str,pos('#',str)+1,length(str)-pos('#',str));
      end;
    2:begin
        //得到城市编码和局向编码h和关系室
        str :=Pchar(Node.data);
        p_jxdm :=copy(str,1,pos('#',str)-1);
        str :=copy(str,pos('#',str)+1,length(str)-pos('#',str));
        p_cityno :=copy(str,1,pos('#',str)-1);
        P_room :=copy(str,pos('#',str)+1,length(str)-pos('#',str));
      end;
    3:
    begin
      //得到城市编码和局向编码h和关系室
      str :=Pchar(Node.data);
      p_jxdm :=copy(str,1,pos('#',str)-1);
      str :=copy(str,pos('#',str)+1,length(str)-pos('#',str));
      p_cityno :=copy(str,1,pos('#',str)-1);
      P_room :=copy(str,pos('#',str)+1,length(str)-pos('#',str));
    end;
  end;
  TreeExpand(TreeViewRy,Node);
end;

procedure TFormRygl.FormDestroy(Sender: TObject);
begin
  P_Refresh :=false;
  FreeNode(TreeViewRy);
end;

procedure TFormRygl.BitBtnCloseClick(Sender: TObject);
begin
  close;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -