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

📄 rgtrolefunction.pas

📁 一个不错的源程序DELPHI开发的,功能比较好的客户管理系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:
      //这样建树肯定不行的,一次行建树了,慢!
      {
      if (jbdm=0)or(jx=QueryTmp1.Fields[0].AsInteger) then
        InitJxry(NewJxNode,QueryTmp1.Fields[0].AsInteger);//增加单个局向内的人员  }
      Next;
    end;{while}
  end;
  //TreeViewRY.Selected := TreeViewRY.Items[0];
end;

function TRgtFrmRoleFunction.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 TRgtFrmRoleFunction.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(TreeView,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(TreeView,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(TreeView,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(TreeView,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(TreeView,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 TRgtFrmRoleFunction.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 TRgtFrmRoleFunction.FormDestroy(Sender: TObject);
begin
  P_Refresh :=false;
  FreeNode(TreeViewRy);
end;

procedure TRgtFrmRoleFunction.Query2AfterScroll(DataSet: TDataSet);
var
  str,V_FORMNAME,V_CONTROLNAME :string;
  i :integer;
begin
  if P_edit1 then exit;
  str :=Query2.FieldByName('FUNCID').AsString;
  P_FUNCID1 :=str;
  i :=pos('.',str);
  V_FORMNAME :=copy(str,1,i-1);
  V_CONTROLNAME :=copy(str,i+1,length(str));
  //
  Query_Tmp.close;
  Query_Tmp.sql.text :='select FORMCAPTION,CONTROLCAPTION from SYSFORMCTRLLIST'
  +' where FORMNAME='+#39+V_FORMNAME+#39
  +' and CONTROLNAME='+#39+V_CONTROLNAME+#39;
  Query_Tmp.open;
  edit3.text :=Query_Tmp.FieldByName('FORMCAPTION').AsString;
  edit4.Text :=Query_Tmp.FieldByName('CONTROLCAPTION').AsString;

  edit5.text :=Query2.FieldByName('FUNCNAME').AsString;
  P_FUNCSERIALID1 :=Query2.FieldByName('FUNCSERIALID').AsString;
  edit2.text :=Query2.FieldByName('SERIAL').AsString;
  P_CurrentCode1 :=EdtFuncSerialIdEditing.text;
  Edit6.text :='';
  if uppercase(query2.fieldbyname('CONTROLTYPE').asstring) ='INVISIBLE' then
  Edit6.text :='看不见';
  if uppercase(query2.fieldbyname('CONTROLTYPE').asstring) ='DISABLED' then
  Edit6.text :='不可编辑';

  BitBtn1.Enabled :=false;
  if not (Query2.bof and Query2.Eof) then
  begin
    BitBtnAlter.Enabled :=true;
    BitBtnDel.Enabled :=true;
    BitBtnSave.Enabled :=false;
  end
  else
    begin
      BitBtnAlter.Enabled :=false;
      BitBtnDel.Enabled :=false;
      BitBtnSave.Enabled :=false;
    end;
end;

procedure TRgtFrmRoleFunction.TreeViewRyChange(Sender: TObject;
  Node: TTreeNode);
begin
  if TreeViewRy.Selected=nil then exit;
  if TreeViewRy.Selected.Level<3 then exit;
  query2.close;
  query2.sql.text :=
  'select a.*,b.controltype from PRIVUSERFUNC a,PRIVFUNCTION b '
  +' where a.funcid=b.funcid(+) and USERLOGINID='
                     +#39+copy(TreeViewRy.Selected.Text,1,pos(':',TreeViewRy.Selected.Text) -1)+#39;
  query2.Open;
  if query2.Bof and query2.eof then
  begin
    Query2AfterScroll(nil);
  end;
end;

procedure TRgtFrmRoleFunction.BitBtn1Click(Sender: TObject);
var
  FormCtrlSelect :TRgtSelectFormFunctionSelect;
  str,V_FORMNAME,V_CONTROLNAME :string;
  i   :integer;
begin
  FormCtrlSelect :=nil;
  Try
    FormCtrlSelect:=TRgtSelectFormFunctionSelect.create(self);
    FormCtrlSelect.ShowModal;
    edit5.Text  :=FormCtrlSelect.P_FUNCNAME;
    Edit6.text  :='';
    if FormCtrlSelect.P_CONTROLTYPE='INVISIBLE' then
    Edit6.text  :='看不见';

    If FormCtrlSelect.P_CONTROLTYPE='DISABLED' then
    Edit6.text  :='不可编辑';
    
    str :=FormCtrlSelect.P_FUNCID;
    P_FUNCID1 :=str;
    i :=pos('.',str);
    V_FORMNAME :=copy(str,1,i-1);
    V_CONTROLNAME :=copy(str,i+1,length(str));
    Query_Tmp.close;
    Query_Tmp.sql.text :='select FORMCAPTION,CONTROLCAPTION from SYSFORMCTRLLIST'
    +' where FORMNAME='+#39+V_FORMNAME+#39
    +' and CONTROLNAME='+#39+V_CONTROLNAME+#39;
    Query_Tmp.open;
    edit3.text :=Query_Tmp.FieldByName('FORMCAPTION').AsString;
    edit4.Text :=Query_Tmp.FieldByName('CONTROLCAPTION').AsString;

    P_FUNCSERIALID1     :=FormCtrlSelect.P_FUNCSERIALID;
  Finally
    FormCtrlSelect.Free;
  end;
end;

procedure TRgtFrmRoleFunction.Query2CalcFields(DataSet: TDataSet);
begin
  if uppercase(query2.fieldbyname('CONTROLTYPE').asstring) ='INVISIBLE' then
  query2.fieldbyname('TYPE').asstring :='看不见'
  else
  if uppercase(query2.fieldbyname('CONTROLTYPE').asstring) ='DISABLED' then
  query2.fieldbyname('TYPE').asstring :='不可编辑';

  if uppercase(query2.fieldbyname('FLAG').asstring) ='0' then
  query2.fieldbyname('flagname').asstring :='角色功能'
  else
  if uppercase(query2.fieldbyname('FLAG').asstring) ='1' then
  query2.fieldbyname('flagname').asstring :='用户功能';
end;

end.

⌨️ 快捷键说明

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