📄 right.cpp
字号:
//Name :ResetTreeImage
//Function :重置树中各节点的图标为缺省值
//input : 要重置的Tree
//output : 无
//Return : 无
//-----------------------------------------------------
void __fastcall TfrmRight::ResetTreeImage(TTreeView *tv)
{
for(int i=0;i<tv->Items->Count;i++)
{
tv->Items->Item[i]->StateIndex=-1;
tv->Items->Item[i]->SelectedIndex=-1;
//初始化图标置空
}
tv->Repaint();
}
//---------------------------------------------------
//Name : InitUsrRight
//Function : 根据选择的用户来在权限树上显示该用户对各模块具有的权限
//input : UserNode 要初始化的用户或用户组结点
//output : 无
//Return : 无
//-----------------------------------------------------
void __fastcall TfrmRight::InitUserRight(TTreeNode *UserNode)
{
AnsiString sRightModuleCode,sCon,sUserCode,sSQL;
int iRightLevel;
TTreeNode * RootNode;
TComResultSet *pResultSet=NewResultSet();
//初始化权限数
RootNode=tvRight->Items->Item[0];
RootNode->Expand(false);
sUserCode=GetCodeFromNode(UserNode->Text);//获得用户代码
//选出该用户或用户组具有的所有的功能模块权限
if (UserNode->Level == 1)
sCon=" RightUnitType = 2 and "; //用户组
else
sCon=" RightUnitType = 1 and "; //用户
sCon=sCon+" RightUnitCode='"+sUserCode+"'";
sSQL="Select * From sdRight where "+sCon;
try
{
pResultSet->Close();
pResultSet->Open(sSQL,"");
pResultSet->MoveFirst();
while(!pResultSet->Eof)
{
sRightModuleCode=pResultSet->FieldByName("RightModuleCode");//功能模块代码
iRightLevel=StrToInt(pResultSet->FieldByName("RightLevel")); //对该功能模块具有的权限
if (iRightLevel==0) //权限为空
{
pResultSet->MoveNext();
continue;
}
InitModuleRight(sRightModuleCode,iRightLevel); //设置该模块的权限
pResultSet->MoveNext();
} //end while
// pResultSet->MoveFirst();
tvRight->Repaint();
}
__finally
{
delete pResultSet;
}
}
//---------------------------------------------------
//Name : InitModuleRight
//Function : 显示用户对指定功能模块所具有的权限
//input : ModuleNode 功能模块代码 iRl有设置的权限码
//output : 无
//Return : 无
//-----------------------------------------------------
void __fastcall TfrmRight::InitModuleRight(AnsiString sModuleCodeText,int iRl)
{
TTreeNode *Node;
for (int i=0;i<tvRight->Items->Count;i++)
{
Node=tvRight->Items->Item[i];
if (GetCodeFromNode(Node->Text)==sModuleCodeText)
//初始化该功能模块的权限
{
if (!Node->IsVisible)
Node->MakeVisible();
SetNodeState(Node,iRl);
UpdateChild(Node);
UpdateParent(Node);
}
} //end for
}
//---------------------------------------------------
//Name :ResetModuleRight
//Function :将指定模块接点下的权限全部置为未授权状态
//input : ModuleNode 功能模块接点
//output : 无
//Return :
//-----------------------------------------------------
void __fastcall TfrmRight::ResetModuleRight(TTreeNode *ModuleNode)
{
for(int i=0;i<ModuleNode->Count;i++)
{
SetNodeState(ModuleNode->Item[i],-1);
}
}
//---------------------------------------------------------------------------//////////////////////
void __fastcall TfrmRight::FormShow(TObject *Sender)
{
InitPara();
ReadUserGroupToTree(tvUserInfo);
ReadUserToTree(tvUserInfo);
ReadModuleRightToTree(tvRight);
ResetTreeImage(tvRight);
RefreshRight=true;
}
//---------------------------------------------------------------------------//////////////////////
//初试化弹出式菜单 //
//////////////////////
void __fastcall TfrmRight::InitPopup(TTreeNode *SelectNode)
{
if (SelectNode == NULL) return;
switch(SelectNode->StateIndex)
{
case -1:
N10->Checked=true;N5->Checked=true;
break;
case 1:
N1->Checked=true;N8->Checked=true;
break;
case 2:
N2->Checked=true;N9->Checked=true;
break;
case 3:
N6->Checked=true;N11->Checked=true;
break;
default:
N7->Checked=true;N12->Checked=true;
}
}
/////////////////////////////
//点击弹出式菜单,设置权限 //
/////////////////////////////
//---------------------------------------------------------------------------
void __fastcall TfrmRight::AfterPopup(TObject *Sender)
{
TMenuItem * myItem;
if ((tvUserInfo->Selected == NULL) ||(tvUserInfo->Selected->Level == 0))
{ return;}
myItem=(TMenuItem*)Sender;
if (!myItem->Checked)
myItem->Checked=!myItem->Checked;
if (ItemImageIndex[myItem->MenuIndex] != tvRight->Selected->StateIndex)
{
if (!RightChanged)
RightChanged=true; //用户权限已改变
SetNodeState(tvRight->Selected,
ItemRightLevel[myItem->MenuIndex]);
UpdateChild(tvRight->Selected);
UpdateParent(tvRight->Selected);
tvRight->Repaint();
}
}
//////////////////////////////////////////////
//将当前节点下的所有子节点权限与当前节点一致//
//////////////////////////////////////////////
//---------------------------------------------------------------------------
void __fastcall TfrmRight::UpdateChild(TTreeNode *SelectNode)
{
if (SelectNode->Count <= 0)
return ;
else
{
for(int i=0;i<SelectNode->Count;i++)
if (SelectNode->Item[i]->StateIndex != SelectNode->StateIndex)
{
SetNodeState(SelectNode->Item[i],
ItemRightLevel[IndexToItem(SelectNode->StateIndex)]);
UpdateChild(SelectNode->Item[i]);
}
}
}
//////////////////////////////////////////////
//更新当前节点上的所有父节点权限//
//////////////////////////////////////////////
//---------------------------------------------------------------------------
void __fastcall TfrmRight::UpdateParent(TTreeNode *SelectNode)
{
TTreeNode *tempnode;
tempnode=SelectNode->Parent;
while (tempnode != NULL)
{
if ((tempnode->StateIndex != SelectNode->StateIndex)&&
(tempnode->StateIndex != -1))
{
SetNodeState(tempnode,0);
}
tempnode=tempnode->Parent;
}
}
//////////////////////////////////
//图标数组、权限类别数组副赋初值//
//////////////////////////////////
//---------------------------------------------------------------------------
void __fastcall TfrmRight::InitPara()
{
ItemImageIndex[0]=-1;ItemRightLevel[0]=0; //〈空〉
ItemImageIndex[1]=1;ItemRightLevel[1]=1; //只读
ItemImageIndex[2]=2;ItemRightLevel[2]=2; //打印
ItemImageIndex[3]=3;ItemRightLevel[3]=3; //可写
ItemImageIndex[4]=4;ItemRightLevel[4]=4; //审核
RightChanged=false;
SaveChanged=false;
RefreshRight=false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::tvUserInfoChange(TObject *Sender,
TTreeNode *Node)
{
//只有选中的是用户或用户组才初始化权限
if ((tvUserInfo->Selected==NULL)||(tvUserInfo->Selected->Level==0)
||(RefreshRight==false)) return;
ResetTreeImage(tvRight); //将权限树全部重置
InitUserRight(tvUserInfo->Selected); //显示该用户或用户组具有的权限
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::tvUserInfoChanging(TObject *Sender,
TTreeNode *Node, bool &AllowChange)
{
if ((Node==NULL)||(Node->Level==0)||(RefreshRight==false)) return;
if ((RightChanged) &&
(Application->MessageBox("是否保存所做的修改?",
"系统提示", MB_OKCANCEL) == IDOK))
{
SaveRight(tvUserInfo->Selected); //保存权限的修改
RightChanged=false;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::PopupMenu1Popup(TObject *Sender)
{
InitPopup(tvRight->Selected);
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::tbSaveClick(TObject *Sender)
{
if ((tvUserInfo->Selected==NULL)||(tvUserInfo->Selected->Level==0)) return;
if (RightChanged)
{
SaveRight(tvUserInfo->Selected); //保存权限的修改
RightChanged=false;
}
tbSetRight->Enabled=true;
tbSave->Enabled=false;
tbCancel->Enabled=false;
mnuperm->Enabled=false;
tvRight->PopupMenu=NULL;
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::tbControlClick(TObject *Sender)
{
g_ClientComm->App->MainForm->BringToFront();
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::FormClose(TObject *Sender, TCloseAction &Action)
{
if ((tvUserInfo->Selected!=NULL)&&(tvUserInfo->Selected->Level!=0))
if ((RightChanged) &&
(Application->MessageBox("是否保存所做的修改?",
"系统提示", MB_OKCANCEL) == IDOK))
{
SaveRight(tvUserInfo->Selected); //保存权限的修改
RightChanged=false;
}
g_ClientComm->DelMsgForm(this->Name);
Action=caFree;
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::tbExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::tbSetRightClick(TObject *Sender)
{
tvRight->PopupMenu=PopupMenu1;
tbSetRight->Enabled=false;
tbSave->Enabled=true;
tbCancel->Enabled=true;
mnuperm->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::tbCancelClick(TObject *Sender)
{
if ((tvUserInfo->Selected!=NULL)&&(tvUserInfo->Selected->Level!=0)
&&RightChanged)
{
ResetTreeImage(tvRight); //将权限树全部重置
InitUserRight(tvUserInfo->Selected); //显示该用户或用户组具有的权限
RightChanged=false;
}
tvRight->PopupMenu=NULL;
tbSetRight->Enabled=true;
tbCancel->Enabled=false;
tbSave->Enabled=false;
mnuperm->Enabled=false;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -