📄 right.cpp
字号:
//---------------------------------------------------------------------------
#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 + -