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

📄 right.cpp

📁 邮 电 公 司 erp源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Right.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmRight *frmRight;
int ItemImageIndex[5]; //权限操作项所对应的图标索引号
int ItemRightLevel[5]; //权限操作项所对应的权限代码
bool RightChanged; //当前用户的权限是否已做了修改
bool SaveChanged;  //是否保存所做的修改
bool RefreshRight;  //是否刷新权限树


//---------------------------------------------------------------------------
__fastcall TfrmRight::TfrmRight(TComponent* Owner)
        : TForm(Owner)
{
      tbSave->Enabled=false;
      tbCancel->Enabled=false;
      mnuperm->Enabled=false;

}
//---------------------------------------------------------------------------
inline AnsiString __fastcall TfrmRight::GetCodeFromNode(AnsiString sNodeText)
{
         int i;
         i=sNodeText.Pos(")");
         return sNodeText.SubString(2,i-2);

}

//---------------------------------------------------------------
void __fastcall TfrmRight::SaveRight(TTreeNode *Node)
{
  TComResultSet *pResultSet=NewResultSet();
  AnsiString strRightUnitCode;
  int intRightUnitType;
  AnsiString strRightModuleCode;
  int intRightLevel;
  AnsiString strSQL;
  AnsiString strWhere;
  AnsiString strValue;
  AnsiString tempstr1;
  AnsiString tempstr2;
  TTreeNode* RootNode;
  TTreeNode* tempnode1;
  TTreeNode* tempnode2;
  try
  {
    if ((Node != NULL) && (Node > 0))
    {
      strRightUnitCode=GetCodeFromNode(Node->Text);
      if (Node->Level == 1)
        intRightUnitType=2;  //用户组
      else
        intRightUnitType=1;  //单用户
    }
    else
      return;
    //清除原有的权限记录
    strWhere=" Where RightUnitCode='"+strRightUnitCode+"' and ";
    strWhere=strWhere+"RightUnitType="+IntToStr(intRightUnitType);
    strSQL=" Delete from sdRight "+strWhere;
    pResultSet->Close();
    pResultSet->Execute(strSQL);
    //新增权限记录
    tempstr1=" values ('"+strRightUnitCode+"',"+IntToStr(intRightUnitType)+",";
    tempstr2="Insert into sdRight(RightUnitCode,RightUnitType,RightModuleCode,RightLevel)";
    RootNode=tvRight->Items->Item[0];
    for(int i=0;i<RootNode->Count;i++)
    {
      if (RootNode->Item[i]->StateIndex != -1)
      {
        strRightModuleCode=GetCodeFromNode(RootNode->Item[i]->Text);
        intRightLevel=ItemRightLevel[IndexToItem(RootNode->Item[i]->StateIndex)];
        strValue=tempstr1+"'"+strRightModuleCode+"',"+IntToStr(intRightLevel)+")";
        strSQL=tempstr2+strValue;
        //插入权限记录
        pResultSet->Close();
        pResultSet->Execute(strSQL);
      }
      else
      {
        tempnode1=RootNode->Item[i];
        for(int j=0;j<tempnode1->Count;j++)
        {
          if (tempnode1->Item[j]->StateIndex != -1)
          {
            strRightModuleCode=GetCodeFromNode(tempnode1->Item[j]->Text);
            intRightLevel=ItemRightLevel[IndexToItem(tempnode1->Item[j]->StateIndex)];
            strValue=tempstr1+"'"+strRightModuleCode+"',"+IntToStr(intRightLevel)+")";
            strSQL=tempstr2+strValue;
            //插入权限记录
            pResultSet->Close();
            pResultSet->Open(WideString(strSQL),WideString(""));
          }
          else
          {
            tempnode2=tempnode1->Item[j];
            for(int k=0;k<tempnode2->Count;k++)
            {
              if (tempnode2->Item[k]->StateIndex != -1)
              {
                strRightModuleCode=GetCodeFromNode(tempnode2->Item[k]->Text);
                intRightLevel=ItemRightLevel[IndexToItem(tempnode2->Item[k]->StateIndex)];
                strValue=tempstr1+"'"+strRightModuleCode+"',"+IntToStr(intRightLevel)+")";
                strSQL=tempstr2+strValue;
                //插入权限记录
                pResultSet->Close();
                pResultSet->Execute(strSQL);
              }
            }
          }
        }
      }
    }
  }
  __finally
  {
    delete pResultSet;
  }
}
//---------------------------------------------------------------
//Name       :ReadUserGroupToTree
//Function   :从用户组表中读取数据到树
//input      : tv 存放用户组的树
//output     : 无
//Return     : 无
//-----------------------------------------------------
void __fastcall TfrmRight::ReadUserGroupToTree(TTreeView *tv)
{
  TComResultSet *pResultSet=NewResultSet();
  TTreeNode *RootNode;
  TTreeNode *tempnode;
  AnsiString sTempText;
  tv->Items->Clear();
  RootNode=tv->Items->Add(NULL,"用户信息");
  RootNode->ImageIndex=-1;
  RootNode->SelectedIndex=-1;
  try
  {
    //从用户组表中读取用户组信息
    pResultSet->Close();
    pResultSet->Open("SELECT * FROM sdUserGroup where usergroupcode<> '001' order by usergroupcode","");
    pResultSet->MoveFirst();
    tv->Items->BeginUpdate();
    while (pResultSet->Eof==0)
    {
          sTempText =   "("
                    +   pResultSet->FieldByName("UserGroupCode")
                    +   ")"
                    +   pResultSet->FieldByName("UserGroupName");
          tempnode=tv->Items->AddChild(RootNode,sTempText);
          tempnode->ImageIndex=0;
          tempnode->SelectedIndex=0;
          pResultSet->MoveNext();

     }      //end while
    tv->Items->EndUpdate();
    RootNode->Expand(false);
  }
  __finally
  {
    delete pResultSet;
  }
}

//---------------------------------------------------------------
//Name       :ReadUserToTree
//Function   :从用户表中读取数据到树
//input      : tv 存放用户组的树
//output     : 无
//Return     : 无
//-----------------------------------------------------
void __fastcall TfrmRight::ReadUserToTree(TTreeView *tv)
{
    TComResultSet *pResultSet=NewResultSet();
    TTreeNode *UserGroupNode,*RootNode,*tempnode;
    AnsiString sUserText;
    AnsiString sNodeCode,sCode;
    RootNode=tv->Items->GetFirstNode(); //获得根接点
    UserGroupNode=RootNode->getFirstChild(); //获得第一个用户组接点
     //从用户表中读取用户信息
    try
    {
       pResultSet->Close();
       pResultSet->Open("SELECT * FROM sdUser","");
       tv->Items->BeginUpdate();
       while (UserGroupNode!=NULL)
       {
             pResultSet->MoveFirst();
             while (pResultSet->Eof==0)
             {
                   sNodeCode=GetCodeFromNode(UserGroupNode->Text);
                   sCode=pResultSet->FieldByName("UserGroup"); //用户表中的用户组代码
                   if (sNodeCode==sCode)
                     {
                       sUserText=  "("
                              +   pResultSet->FieldByName("UserCode")
                              +   ")"
                              +   pResultSet->FieldByName("UserName");

                       tempnode=tv->Items->AddChild(UserGroupNode,sUserText);//增加属于该组的用户
                       tempnode->ImageIndex=1;
                       tempnode->SelectedIndex=1;
                     }    //end if
                    pResultSet->MoveNext();

             } //end while
          UserGroupNode=UserGroupNode->getNextSibling(); //获得下一个组接点
      }  //end while
      tv->Items->EndUpdate();
    }
    __finally
    {
      delete pResultSet;
    }
}
//---------------------------------------------------
//Name       :ReadModuleRightToTree
//Function   :读取各功能模块及具有的权限到Tree
//input      : tv 要读取的树
//output     : 无
//Return     : 无
//-----------------------------------------------------
void __fastcall  TfrmRight::ReadModuleRightToTree(TTreeView *tv)
{
    AnsiString  tmpText;
    TTreeNode* TempNode[10];
    int mLevel;
    TComResultSet *pResultSet=NewResultSet();

    tv->Items->Clear();
    TempNode[0]=tv->Items->Add(NULL,"系统权限");
    //从模块表中读取数据
    try
    {
      pResultSet->Close();
      pResultSet->Open("SELECT * FROM sdModule ORDER BY ModuleCode","");
      pResultSet->MoveFirst();
      while (pResultSet->Eof  ==  0)
      {
        mLevel  =   StrToInt(pResultSet->FieldByName("ModuleLevel"));
        if( (mLevel <=  0)  ||  (mLevel >  3) )
        {
            ::MessageBox(Handle,"模块级别出错","错误",MB_OK|MB_ICONSTOP);
            pResultSet->MoveNext();
            continue;
        }
        if(pResultSet->FieldByName("ModuleCode")=="")
        {
            continue;
        }
        tmpText =   "("
                    +   pResultSet->FieldByName("ModuleCode") //功能模块代码
                    +   ")"
                    +   pResultSet->FieldByName("ModuleCaption");//模块名
        TempNode[mLevel]    =   tv->Items->AddChild(TempNode[mLevel-1],tmpText);
        pResultSet->MoveNext();
      }
      tv->Items->Item[0]->Expand(false);
    }
    __finally
    {
      delete pResultSet;
    }
}
//---------------------------------------------------
//Name       :LevelToItem
//Function   :获取指定权限类别的数组下标
//input      : rl为权限类别
//output     : 无
//Return     :ItemRightLevel数组的下标
//-----------------------------------------------------
int __fastcall TfrmRight::LevelToItem(int rl)
{
 int i;
 for (i=0;i<5;i++)
 {
  if (ItemRightLevel[i] == rl)
   break;
 }
 return(i);
}
//---------------------------------------------------
//Name       :IndexToItem
//Function   :获取指定图标索引的数组下标
//input      : ii为图标索引
//output     : 无
//Return     :ItemImageIndex数组的下标
//-----------------------------------------------------
int __fastcall TfrmRight::IndexToItem(int ii)
{
 int i;
 for (i=0;i<5;i++)
 {
  if (ItemImageIndex[i] == ii)
   break;
 }
 return(i);
}
//------------------------------------------------------------------------
//Name       : SetNodeState
//Function   : 设置指定节点的权限图标
//input      : Node 要设置的节点 rl权限类别
//output     : 无
//Return     : 无
//-----------------------------------------------------------------------
void __fastcall TfrmRight::SetNodeState(TTreeNode *Node,int rl)
{
     //获得接点在Tree中绝对位置
     Node->StateIndex=ItemImageIndex[LevelToItem(rl)];
     Node->SelectedIndex=ItemImageIndex[LevelToItem(rl)];
}

//--------------------------------------------------------------------------

⌨️ 快捷键说明

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