right.cpp
来自「一个以前收集的基于C/S架构的ERP客户端源代码」· C++ 代码 · 共 349 行
CPP
349 行
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Right.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "StdBaseForm"
#pragma link "SDGrid"
#pragma resource "*.dfm"
TfrmRight *frmRight;
//---------------------------------------------------------------------------
__fastcall TfrmRight::TfrmRight(TComponent* Owner, HWND chWnd, AnsiString MidCode,AnsiString WhereStr)
: TStdBaseForm(Owner,chWnd,MidCode,WhereStr)
{
comServer->Query();
FillUserTreeView();
FillModule();
l_ModuleLevel=0;
l_UserLevel=0;
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::FillUserTreeView()
{
TTreeNode *RootNode,*NewNode;
AnsiString str;
str="select syscode=UsergroupCode,sysname=UsergroupName,usercode='',username='',treelevel=1";
str+="from sdUserGroup union select syscode=UserGroup,sysname='',usercode=UserCode,username=UserName";
str+=",treelevel=2 from sduser order by syscode,treelevel,usercode";
Query->Close();
Query->Open(str,"");
Query->MoveFirst();
tvUser->Items->Clear();
RootNode=tvUser->Items->Add(NULL,"用户树");
while(!Query->Eof)
{
if(Query->FieldByName("treelevel")==1)
NewNode=tvUser->Items->AddChild(RootNode,"["+AnsiString(Query->FieldByName("syscode"))+"]"+AnsiString(Query->FieldByName("sysname")));
else
tvUser->Items->AddChild(NewNode,"["+AnsiString(Query->FieldByName("usercode"))+"]"+AnsiString(Query->FieldByName("username")));
Query->MoveNext();
}
RootNode->Selected=true;
tvUser->Items->Item[0]->Expand(false);
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::FillModule()
{
TTreeNode *NewNode[7];
AnsiString str;
int level;
str="select ModuleCode,ModuleCaption,ModuleLevel from sdModule where modulestop=1 order by moduleCode";
Query->Close();
Query->Open(str,"");
Query->MoveFirst();
tvModule->Items->Clear();
NewNode[0]=tvModule->Items->Add(NULL,"功能树");
while(!Query->Eof)
{
str="["+AnsiString(Query->FieldByName("ModuleCode"))+"]"+AnsiString(Query->FieldByName("ModuleCaption"));
level=StrToInt(Query->FieldByName("ModuleLevel"));
NewNode[level]=tvModule->Items->AddChild(NewNode[level-1],str);
Query->MoveNext();
}
NewNode[0]->Selected=true;
tvModule->Focused();
tvModule->Items->Item[0]->Expand(false);
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::bbCancelClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::bbSaveClick(TObject *Sender)
{
if(l_ModuleLevel==0||l_UserLevel==0)
throw Exception("不能对根节点操作.");
try{
Screen->Cursor=crHourGlass;
SaveRight();
}
__finally
{
Screen->Cursor=crDefault;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::tvUserChange(TObject *Sender, TTreeNode *Node)
{
l_UserLevel=Node->Level;
l_User=Node->Text.SubString(2,Node->Text.AnsiPos("]")-2);
FillRight();
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::tvModuleChange(TObject *Sender, TTreeNode *Node)
{
l_ModuleLevel=Node->Level;
l_Module=Node->Text.SubString(2,Node->Text.AnsiPos("]")-2);
FillRight();
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::FillRight()
{
if(l_ModuleLevel==0||l_UserLevel==0)
return;
AnsiString str,KeyStr;
sgRight->RowCount=1;
str="select Modulecode,ModuleCaption from sdModule where modulestop=1 and ModuleCode like '"+l_Module+"%' order by moduleCode";
Query->Close();
Query->Open(str,"");
Query->MoveFirst();
while(!Query->Eof)
{
str=AnsiString(Query->FieldByName("ModuleCaption"))+"\t";
if(comServer->RecordCount>0)
{
KeyStr=l_User+"\t"+AnsiString(Query->FieldByName("Modulecode"))+"\t";
if(!comServer->LocateByKey(KeyStr))
{
if(AnsiString(GetHeadValue("RightRange"))=="1")
str+="\tY";
else
str+="\t";
if(AnsiString(GetHeadValue("RightRange"))=="2")
str+="\tY";
else
str+="\t";
if(AnsiString(GetHeadValue("RightRange"))=="3")
str+="\tY";
else
str+="\t";
if(AnsiString(GetHeadValue("RightAdd"))=="1")
str+="\tY";
else
str+="\t";
if(AnsiString(GetHeadValue("RightEdit"))=="1")
str+="\tY";
else
str+="\t";
if(AnsiString(GetHeadValue("RightDelete"))=="1")
str+="\tY";
else
str+="\t";
if(AnsiString(GetHeadValue("RightCheck"))=="1")
str+="\tY";
else
str+="\t";
if(AnsiString(GetHeadValue("RightUnCheck"))=="1")
str+="\tY";
else
str+="\t";
if(AnsiString(GetHeadValue("RightClose"))=="1")
str+="\tY";
else
str+="\t";
if(AnsiString(GetHeadValue("RightUnClose"))=="1")
str+="\tY";
else
str+="\t";
if(AnsiString(GetHeadValue("RightPrint"))=="1")
str+="\tY";
else
str+="\t";
str+="\t"+AnsiString(Query->FieldByName("ModuleCode"));
}
else
str+="\t\t\t\t\t\t\t\t\t\t\t\t"+AnsiString(Query->FieldByName("ModuleCode"));
}
else
str+="\t\t\t\t\t\t\t\t\t\t\t\t"+AnsiString(Query->FieldByName("ModuleCode"));
sgRight->AddItem(str);
Query->MoveNext();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::SaveRight()
{
AnsiString sql;
int l_Range=0;
sql="delete sdright where RightModuleCode like '"+l_Module+"%' and RightUserCode ='"+l_User+"'";
try
{
TComResultSet *pResultSet=new TComResultSet(Handle,g_ClientHandle);
pResultSet->Close();
pResultSet->Execute(sql);
delete pResultSet;
for(int i=1;i<sgRight->RowCount;i++)
{
l_Range=0;
if(sgRight->Cells[2][i]=="Y")
l_Range=1;
else if (sgRight->Cells[3][i]=="Y")
l_Range=2;
else if (sgRight->Cells[4][i]=="Y")
l_Range=3;
if(l_Range!=0)
{
comServer->AddNew();
SetFieldValue("RightUserCode",l_User);
SetFieldValue("RightModuleCode",sgRight->Cells[13][i]);
SetFieldValue("RightLevel",l_UserLevel);
SetFieldValue("RightRange",l_Range);
SetFieldValue("RightAdd",(sgRight->Cells[5][i]=="Y"?"1":"0"));
SetFieldValue("RightEdit",(sgRight->Cells[6][i]=="Y"?"1":"0"));
SetFieldValue("RightDelete",(sgRight->Cells[7][i]=="Y"?"1":"0"));
SetFieldValue("RightCheck",(sgRight->Cells[8][i]=="Y"?"1":"0"));
SetFieldValue("RightUnCheck",(sgRight->Cells[9][i]=="Y"?"1":"0"));
SetFieldValue("RightClose",(sgRight->Cells[10][i]=="Y"?"1":"0"));
SetFieldValue("RightUnClose",(sgRight->Cells[11][i]=="Y"?"1":"0"));
SetFieldValue("RightPrint",(sgRight->Cells[12][i]=="Y"?"1":"0"));
comServer->Post();
}
}
}
catch(...)
{
throw Exception("保存失败.");
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::sbAllClick(TObject *Sender)
{
for(int i=1;i<sgRight->RowCount;i++)
sgRight->Cells[1][i]="Y";
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::sbClearClick(TObject *Sender)
{
for(int i=1;i<sgRight->RowCount;i++)
sgRight->Cells[1][i]="";
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::sbOtherClick(TObject *Sender)
{
for(int i=1;i<sgRight->RowCount;i++)
{
if(sgRight->Cells[1][i]=="Y")
sgRight->Cells[1][i]="";
else
sgRight->Cells[1][i]="Y";
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::sgRightDblClick(TObject *Sender)
{
if(sgRight->Col>4)
{
if(sgRight->Cells[sgRight->Col][sgRight->Row]=="Y")
sgRight->Cells[sgRight->Col][sgRight->Row]="";
else
sgRight->Cells[sgRight->Col][sgRight->Row]="Y";
}
if(sgRight->Col>0&&sgRight->Col<5)
{
if(sgRight->Cells[sgRight->Col][sgRight->Row]=="Y")
sgRight->Cells[sgRight->Col][sgRight->Row]="";
else
{
sgRight->Cells[sgRight->Col][sgRight->Row]="Y";
if(sgRight->Col==2)
{
sgRight->Cells[3][sgRight->Row]="";
sgRight->Cells[4][sgRight->Row]="";
} else if(sgRight->Col==3)
{
sgRight->Cells[2][sgRight->Row]="";
sgRight->Cells[4][sgRight->Row]="";
}else
{
sgRight->Cells[2][sgRight->Row]="";
sgRight->Cells[3][sgRight->Row]="";
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::ckAddClick(TObject *Sender)
{
for(int i=1;i<sgRight->RowCount;i++)
{
if(sgRight->Cells[1][i]=="Y")
{
if(((TCheckBox*)Sender)->Checked)
{
sgRight->Cells[((TCheckBox*)Sender)->Tag][i]="Y";
if(((TCheckBox*)Sender)->Tag==2)
{
sgRight->Cells[3][i]="";
sgRight->Cells[4][i]="";
ckGroup->Checked=false;
ckAll->Checked=false;
}else if(((TCheckBox*)Sender)->Tag==3)
{
sgRight->Cells[2][i]="";
sgRight->Cells[4][i]="";
ckUser->Checked=false;
ckAll->Checked=false;
}else if(((TCheckBox*)Sender)->Tag==4)
{
sgRight->Cells[2][i]="";
sgRight->Cells[3][i]="";
ckUser->Checked=false;
ckGroup->Checked=false;
}
}
else
sgRight->Cells[((TCheckBox*)Sender)->Tag][i]="";
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmRight::ckAllSelectClick(TObject *Sender)
{
if(ckAllSelect->Checked)
{
ckAdd->Checked=true;
ckUpdate->Checked=true;
ckDelete->Checked=true;
ckCheck->Checked=true;
ckPrint->Checked=true;
ckUnCheck->Checked=true;
ckClose->Checked=true;
ckUnClose->Checked=true;
}
else
{
ckAdd->Checked=false;
ckUpdate->Checked=false;
ckDelete->Checked=false;
ckCheck->Checked=false;
ckPrint->Checked=false;
ckUnCheck->Checked=false;
ckClose->Checked=false;
ckUnClose->Checked=false;
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?