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

📄 usergroup.cpp

📁 速达开源ERP系统
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "UserGroup.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "fpanel"
#pragma link "RecBaseForm"
#pragma link "SDEdit"
#pragma resource "*.dfm"
#define ParaCode "10101"  //分类码各层字符长度参数代码头
TfrmUserGroup *frmUserGroup;

//---------------------------------------------------------------------------
extern AnsiString SDTrim(AnsiString TrimString);

//---------------------------------------------------------------------------
AnsiString __fastcall TfrmUserGroup::GetFieldValue(int FieldIndex)
{
    WideString S;
    S = ReadFieldValue(comServer,FieldIndex);
    return(S);
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::ClearControl(bool BringToNext)
{
    if(BringToNext)
        return;
    lblUpperCode->Caption="";
    seUserGroupItem->Text = "";
    seUserGroupName->Text = "";
    seUserGroupDesc->Text = "";
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::GetDataFromComObject()
{
    AnsiString strLevel;
    strLevel=GetFieldValue(fiUserGroupLevel);
    if (TierLen[strLevel.ToInt()] <= 0)
     seUserGroupItem->MaxLength=18;
    else
     seUserGroupItem->MaxLength=TierLen[strLevel.ToInt()];
    lblUpperCode->Caption  =  GetFieldValue(fiUserGroupUpperCode);
    seUserGroupItem->Text  =  GetFieldValue(fiUserGroupItem);
    seUserGroupName->Text  =  GetFieldValue(fiUserGroupName);
    seUserGroupDesc->Text  =  GetFieldValue(fiUserGroupDesc);
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::SendDataToComObject()
{
    AnsiString strLevel;
    AnsiString strErr,strTemp;
    if(CurrentState == caAddDetail)
     strLevel=IntToStr(tvUserGroup->Selected->Level+1);
    if(CurrentState == caEditDetail)
     strLevel=IntToStr(tvUserGroup->Selected->Level);
    if (TierLen[strLevel.ToInt()] <= 0)
    {
     throw Exception("本级编码长度参数无效!");
    }
    strTemp=Trim(seUserGroupItem->Text);
    if (strTemp.Length() != TierLen[strLevel.ToInt()])
    {
     strErr="本级编码长度必须为"+AnsiString(TierLen[strLevel.ToInt()]);
     throw Exception(strErr.c_str());
    }
    WriteFieldValue(comServer,fiUserGroupUpperCode,lblUpperCode->Caption);
    WriteFieldValue(comServer,fiUserGroupItem,strTemp);  // UserGroupItem
    WriteFieldValue(comServer,fiUserGroupName,seUserGroupName->Text);  // UserGroupName
    WriteFieldValue(comServer,fiUserGroupLevel,strLevel);  // UserGroupName
    WriteFieldValue(comServer,fiUserGroupDesc,seUserGroupDesc->Text);  // UserGroupDesc
}

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

void __fastcall TfrmUserGroup::WaitUserInput()
{
    if(CurrentState == caEditDetail && tvUserGroup->Selected->HasChildren)
    {
     seUserGroupItem->Enabled=false;
     seUserGroupName->SetFocus();
    }
    else
     seUserGroupItem->SetFocus();
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::RefreshGridData(int mAction)
{
    AnsiString  tempText;
    if (mAction == 0)
    {
        if(tvUserGroup->Selected)
        {
            tempText = "(" + GetFieldValue(fiUserGroupCode) + ")" + GetFieldValue(fiUserGroupName);
            tvUserGroup->Items->AddChild(tvUserGroup->Selected,tempText);
            tvUserGroup->Selected->Expanded = true;
        }
    }
    else if(mAction == 1)
    {
        if(tvUserGroup->Selected->HasChildren)
        {   //如果有子节点,则刷新一次.
            comServer->Query();
            FillGridWithData();
        }
        else
        {
            tvUserGroup->Selected->Text = "(" + GetFieldValue(fiUserGroupCode) + ")"
                + GetFieldValue(fiUserGroupName);
        }
    }
    else if(mAction == 2)
    {
        tvUserGroup->Items->Delete(tvUserGroup->Selected);
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::FillGridWithData()
{
     AnsiString  tempText;
     TTreeNode* TempNode[7];
     int mLevel;

     TreeFresh=true; //更新分类码树,不执行Change事件
     tvUserGroup->Items->Clear();
     TreeFresh=false;
     TempNode[0]=tvUserGroup->Items->Add(NULL,"所有的用户组");

     comServer->MoveFirst();
     while (comServer->Eof == 0)
     {
        if(GetFieldValue(fiUserGroupCode)=="001")//不显示系统管理员组
        {
         comServer->MoveNext();
         continue;
        } 
        mLevel  =   StrToInt(GetFieldValue(fiUserGroupLevel));
        if( (mLevel <= 0) || (mLevel > 18))
        {
            ::MessageBox(Handle,"用户组层级的级别必须在1和18之间","错误",MB_OK|MB_ICONSTOP);
            comServer->MoveNext();
            continue;
        }

        tempText = "(" + GetFieldValue(fiUserGroupCode) + ")" + GetFieldValue(fiUserGroupName);
        TempNode[mLevel] = tvUserGroup->Items->AddChild(TempNode[mLevel-1],tempText);
        comServer->MoveNext();
     }
     //展开所有的节点。
     if (tvUserGroup->Items->Count > 0)
     {
        tvUserGroup->FullExpand();
        comServer->MoveFirst();
        GetDataFromComObject();
     }
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::InitEditControl()
{
    ClientGroup->AddComponent(2,false,false,true, FloatPanel1,FloatPanel1->Name);
    ClientGroup->AddComponent(2,true,true,false,Panel1,Panel1->Name);
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::TreeViewLocation()
{
    AnsiString s,c;
    s = GetFieldValue(fiUserGroupCode);
    for(int i = 1 ; i < tvUserGroup->Items->Count ; i ++)
    {
        c = tvUserGroup->Items->Item[i]->Text;    //取关键字
        c = c.SubString(2,c.AnsiPos(")")-2);
        if(s == c)
        {
            tvUserGroup->Selected = tvUserGroup->Items->Item[i];
            break;
        }
    }
}
//---------------------------------------------------------------------------

__fastcall TfrmUserGroup::TfrmUserGroup(TComponent* Owner)
       : TRecBaseForm(Owner,euSdUserGroup,"")
{
 InitTierLen();
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::FormShow(TObject *Sender)
{
    FillGridWithData();
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::tvUserGroupChange(TObject *Sender,
      TTreeNode *Node)
{
    AnsiString s;
    if (TreeFresh)
        return;
    if(Node == tvUserGroup->Items->Item[0])
    {
        return;
    }
    s = Node->Text;
    s = s.SubString(2,s.AnsiPos(")")-2);
    comServer->LocateByKey(WideString(s));
    if (comServer->Eof == 0)
    {
        GetDataFromComObject();
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::FormClose(TObject *Sender,
      TCloseAction &Action)
{
    TRecBaseForm::FormClose(Sender,Action);
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::muAddDetailClick(TObject *Sender)
{
    AnsiString  s;
    TRecBaseForm::muAddDetailClick(Sender);
    if(tvUserGroup->Selected == NULL)
     return;
    int tempLevel = tvUserGroup->Selected->Level;
    if(tempLevel == 0)
    {
       s = "";
       lblUpperCode->Caption="";
    }
    else
    {
        s = tvUserGroup->Selected->Text;
        s = s.SubString(2,s.AnsiPos(")")-2);
        lblUpperCode->Caption = s;
    }
    if (TierLen[tempLevel+1] <= 0)
     seUserGroupItem->MaxLength=18;
    else
     seUserGroupItem->MaxLength=TierLen[tempLevel+1];
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::muEditDetailClick(TObject *Sender)
{
    AnsiString  s;
    if(tvUserGroup->Selected == NULL)
     return;
    if(tvUserGroup->Selected->Level == 0)
    {
     return;
    }
    TRecBaseForm::muEditDetailClick(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::muDeleteDetailClick(TObject *Sender)
{
    if(tvUserGroup->Selected == NULL)
     return;
    if(tvUserGroup->Selected->Level == 0)
    {
        return;
    }

    if(tvUserGroup->Selected->HasChildren)
    {
     ::MessageBox(Handle,"该用户组下包含有子用户组,\n操作被禁止。",
                      "错误", MB_OK|MB_ICONSTOP);
     return;
    }
    TComResultSet *pResultSet=NewResultSet();
    AnsiString strSQL,s;
    s = tvUserGroup->Selected->Text;
    s = s.SubString(2,s.AnsiPos(")")-2);
    strSQL=" select UserCode from sdUser where UserGroup='"+s+"'";
    try
    {
      pResultSet->Open(strSQL,"");
      pResultSet->MoveFirst();
      if(pResultSet->RecordCount > 0)
      {
        ::MessageBox(Handle,"该用户组中包含用户,\n操作被禁止。",
                      "错误", MB_OK|MB_ICONSTOP);
        pResultSet->Close();
        return;
      }
      pResultSet->Close();
      TRecBaseForm::muDeleteDetailClick(Sender);
      if (tvUserGroup->Items->Count == 1)
      {
        ClearControl(false);
      }
    }
    __finally
    {
      delete pResultSet;
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::muFirstClick(TObject *Sender)
{
    TRecBaseForm::muFirstClick(Sender);
    TreeViewLocation();
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::muPreviousClick(TObject *Sender)
{
    TRecBaseForm::muPreviousClick(Sender);
    TreeViewLocation();
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::muNextClick(TObject *Sender)
{
    TRecBaseForm::muNextClick(Sender);
    TreeViewLocation();
}
//---------------------------------------------------------------------------

void __fastcall TfrmUserGroup::muLastClick(TObject *Sender)
{
    TRecBaseForm::muLastClick(Sender);
    TreeViewLocation();
}
//---------------------------------------------------------------------------
int __fastcall TfrmUserGroup::GetTierLen(int tiernum)
{
 if ((tiernum>0)&&(tiernum<19)) //层数从1-18为有效
  return TierLen[tiernum];
 else
  return 0;
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::InitTierLen()
{
  TComResultSet *pResultSet=NewResultSet();
  AnsiString strSQL,strItem,strValue;
  strSQL=" select parameteritem,parametervalue from sdparameter ";
  strSQL=strSQL+" where parametertype = 2 and parametercode like '"+ParaCode+"%'";
  try
  {
    pResultSet->Close();
    pResultSet->Open(WideString(strSQL),WideString(""));
    //clear the TierLen Array
    for(int i=0;i<10;i++)
      TierLen[i]=0;
    pResultSet->MoveFirst();
    while(!pResultSet->Eof)
    {
      strItem=pResultSet->FieldByName("parameteritem");
      strValue=pResultSet->FieldByName("parametervalue");
      if ((strItem.ToIntDef(0) != 0)&&(strValue.ToIntDef(0) != 0))
        if ((strItem.ToInt()>0) && (strItem.ToInt()<20))
          TierLen[strItem.ToInt()]=strValue.ToInt();
      pResultSet->MoveNext();
    }
  }
  __finally
  {
    delete pResultSet;
  }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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