user.cpp

来自「速达开源ERP系统」· C++ 代码 · 共 461 行

CPP
461
字号
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "User.h"                 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "RecBaseForm"
#pragma link "SDGrid"
#pragma link "fpanel"
#pragma link "SDEdit"
#pragma link "DateEdit"
#pragma link "SDComboBox"
#pragma link "DateEdit"
#pragma link "SDComboBox"
#pragma resource "*.dfm"
TfrmUser *frmUser;
AnsiString oldusercode;

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

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

void __fastcall TfrmUser::ClearControl(bool BringToNext)
{
    // BringToNext为真时,不清空
    if(BringToNext)
        return;

    seUserCode->Text        =   "";
    seUserName->Text        =   "";
    seUserDesc->Text        =   "";
    seUserUsergroupCode->Text=  "";
    seUserPassword->Text    =   "";
    seAffirmPassword->Text  =   "";
    scUserDept->ItemIndex   =   -1;
    cbUserLanguage->ItemIndex=  0;
    deUserExpireDate->Text  =   "";
    scUserRestrict->ItemIndex=  0;
    cbUserNetFlag->ItemIndex=   0;
    seUserNetAddress->Visible=false;
    seUserNetAddress->Text  =   "";
    seUserStime->Text  =   "";
    seUserEtime->Text  =   "";
}

void __fastcall TfrmUser::GetDataFromComObject()
{
    AnsiString s;
    seUserCode->Text        =   GetFieldValue(fiUserCode);
    seUserName->Text        =   GetFieldValue(fiUserName);
    seUserDesc->Text        =   GetFieldValue(fiUserDesc);
    seUserUsergroupCode->Text   =   GetFieldValue(fiUserGroup);
    s  =  GetFieldValue(fiUserPassword);
    if (s != "")
     s=EncAndDec(GetFieldValue(fiUserPassword),false);//Decrypt
    seUserPassword->Text    =   s;
    seAffirmPassword->Text  =   s;
    s=GetFieldValue(fiUserDept);
    scUserDept->LocateKey(s);
    scUserDept->Text        =   scUserDept->ItemData[0];
    cbUserLanguage->ItemIndex=  StrToInt(GetFieldValue(fiUserLanguage))-1;
    deUserExpireDate->Text  =   GetFieldValue(fiUserExpireDate);
    scUserRestrict->ItemIndex=  StrToInt(GetFieldValue(fiUserRestrict))-1;
    cbUserNetFlag->ItemIndex =  StrToInt(GetFieldValue(fiUserNetFlag));
    if (cbUserNetFlag->ItemIndex != 1)
      seUserNetAddress->Visible=false;
    else
      seUserNetAddress->Visible=true;
    seUserNetAddress->Text  =   GetFieldValue(fiUserNetAddress);
    seUserStime->Text  =   GetFieldValue(fiUserStime);
    seUserEtime->Text  =   GetFieldValue(fiUserEtime);
}

void __fastcall TfrmUser::SendDataToComObject()
{
    AnsiString s;
    if(seUserPassword->Text != seAffirmPassword->Text)
    {
     throw Exception("用户密码和确认密码不一致");
    }
    WriteFieldValue(comServer,fiUserCode,WideString(seUserCode->Text));
    WriteFieldValue(comServer,fiUserName,WideString(seUserName->Text));
    WriteFieldValue(comServer,fiUserDesc,WideString(seUserDesc->Text));
    s   =   seUserUsergroupCode->Text.Trim();
    WriteFieldValue(comServer,fiUserGroup,WideString(s));
    s   =   EncAndDec(seUserPassword->Text); //Encrypt
//    s   =   EncAndDec("safecl"); //Encrypt
    WriteFieldValue(comServer,fiUserPassword,WideString(s));
    WriteFieldValue(comServer,fiUserDept,WideString(scUserDept->ItemData[1]));
    WriteFieldValue(comServer,fiUserLanguage,WideString(IntToStr(cbUserLanguage->ItemIndex+1)));
    WriteFieldValue(comServer,fiUserExpireDate,WideString(deUserExpireDate->Text));
    WriteFieldValue(comServer,fiUserRestrict,WideString(IntToStr(scUserRestrict->ItemIndex+1)));
    WriteFieldValue(comServer,fiUserNetFlag,WideString(IntToStr(cbUserNetFlag->ItemIndex)));
    WriteFieldValue(comServer,fiUserNetAddress,WideString(seUserNetAddress->Text));
    WriteFieldValue(comServer,fiUserStime,WideString(seUserStime->Text));
    WriteFieldValue(comServer,fiUserEtime,WideString(seUserEtime->Text));
}

void __fastcall TfrmUser::WaitUserInput()
{
    seUserCode->SetFocus();
}

AnsiString __fastcall TfrmUser::GetDataToGrid()
{

    AnsiString  s;

    s   =   "\t" + GetFieldValue(fiUserCode)    +
            "\t" + GetFieldValue(fiUserName)    +
            "\t" + GetFieldValue(fiUserDesc);

    return(s);
}

void __fastcall TfrmUser::RefreshGridData(int mAction)
{
    AnsiString str;
    TTreeNode *tempnode;
    str="("+seUserCode->Text+")"+seUserName->Text;
    // 新增
    if (mAction ==  0)
    {
     //定位新增用户所属组的节点
     tempnode=LocateNode(seUserUsergroupCode->Text,2);
     if (tempnode != NULL)
      AddNodeToTree(tempnode,str,1);
    }
    // 修改
    else
     if(mAction ==  1)
     {
      //定位修改的用户节点
      tempnode=LocateNode(oldusercode,1);
      if (tempnode != NULL)
       tempnode->Text=str;
     }
     // 删除
     else
      if(mAction ==  2)
      {
       //定位删除的用户节点
       tempnode=LocateNode(seUserCode->Text,1);
       if (tempnode != NULL)
         tempnode->Delete();
      }
}

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

//---------------------------------------------------------------
//Name       :ReadUserToTree
//Function   :从用户表中读取数据到树
//input      : tv 存放用户组的树
//output     : 无
//Return     : 无
//-----------------------------------------------------
void __fastcall TfrmUser::ReadUserToTree(TTreeView *tv)
{
    TComResultSet *pResultSet  =   NewResultSet();
    TTreeNode *UserGroupNode,*tempnode;
    AnsiString sUserText;
    AnsiString sCode;
    bool firstusernode=true;
    tv->Items->BeginUpdate();
    try
    {
       pResultSet->Open("SELECT * FROM sdUser order by usergroup","");
       pResultSet->MoveFirst();
       while (pResultSet->Eof==0)
       {
        sCode=pResultSet->FieldByName("UserGroup"); //用户表中的用户组代码
        UserGroupNode=LocateNode(sCode,2);
        if (UserGroupNode != NULL)
        {
          sUserText=  "("
                   +   pResultSet->FieldByName("UserCode")
                   +   ")"
                   +   pResultSet->FieldByName("UserName");
         tempnode=tv->Items->AddChild(UserGroupNode,sUserText);//增加属于该组的用户
         tempnode->ImageIndex=1;
         tempnode->SelectedIndex=1;
         if (firstusernode)
         {
           tv->Selected=tempnode;
           tvUserChange(NULL,tempnode);//显示第一个用户节点
           firstusernode=false;
         }
        }    //end if
        pResultSet->MoveNext();
       } //end while
       tv->Items->EndUpdate();
    }
    __finally
    {
      delete pResultSet;
    }

}
//-----------------------------------------------------
//Name       :AddNodeToTree
//Function   :在用户树中增加一个节点
//input      : Node是新增节点的父节点,str是新增节点的内容,nodetype是节点类型
//output     : 无
//Return     : 无
//-----------------------------------------------------
void __fastcall TfrmUser::AddNodeToTree(TTreeNode *Node,AnsiString str,int notetype)
{
  TTreeNode *tempnode;
  tempnode=tvUser->Items->AddChild(Node,str);//增加用户
  if (notetype == 2)
  { //用户组
   tempnode->ImageIndex=0;
   tempnode->SelectedIndex=0;
  }
  else
  { //用户
   tempnode->ImageIndex=1;
   tempnode->SelectedIndex=1;
  }
  tvUser->Repaint();
}
//-----------------------------------------------------
//Name       :LocateNode
//Function   :定位指定类型和代码的节点
//input      : code是查找节点的代码,nodetype是节点类型
//output     : 无
//Return     : 定位的节点指针
//-----------------------------------------------------
TTreeNode * __fastcall TfrmUser::LocateNode(AnsiString code,int nodetype)
{
  TTreeNode *tempnode;
  for(int i=0;i<tvUser->Items->Count;i++)
  {
   tempnode=tvUser->Items->Item[i];
   if ((nodetype==1)&&(tempnode->ImageIndex==1))
    if (GetCodeFromNode(tempnode->Text)==code)
      return(tempnode);
   if ((nodetype==2)&&(tempnode->ImageIndex==0))
    if (GetCodeFromNode(tempnode->Text)==code)
      return(tempnode);
  }
  return(NULL);
}
//-----------------------------------------------------
void __fastcall TfrmUser::FillTreeWithData()
{
    AnsiString  tmpText;
    TTreeNode* TempNode[10];
    int mLevel;
    TComResultSet *rsUserGroup  =   NewResultSet();

    tvUser->Items->Clear();
    TempNode[0]=tvUser->Items->Add(NULL,"全部用户组");
    TempNode[0]->ImageIndex=-1;
    TempNode[0]->SelectedIndex=-1;
    try
    {
      rsUserGroup->Open("select UsergroupCode,UsergroupName,UsergroupLevel from sdUsergroup where UsergroupCode <> '001' order by UsergroupCode","");
      rsUserGroup->MoveFirst();
      while( rsUserGroup->Eof == 0 )
      {
        mLevel  =   rsUserGroup->FieldByName("UsergroupLevel").ToInt();

        if( (mLevel <=  0)  ||  (mLevel >  7) )
        {
            ::MessageBox(Handle,"用户组级别出错","错误",MB_OK|MB_ICONSTOP);
            rsUserGroup->MoveNext();
            continue;
        }

        tmpText =   "("
                    +   rsUserGroup->FieldByName("UsergroupCode")
                    +   ")"
                    +   rsUserGroup->FieldByName("UsergroupName");
        TempNode[mLevel]    =   tvUser->Items->AddChild(TempNode[mLevel-1],tmpText);
        TempNode[mLevel]->ImageIndex=0;
        TempNode[mLevel]->SelectedIndex=0;
        rsUserGroup->MoveNext();
     }
     rsUserGroup->Close();
     TempNode[0]->Expand(false);
    }
    __finally
    {
      delete rsUserGroup;
    }

}


void __fastcall TfrmUser::InitEditControl()
{
    ClientGroup->AddComponent(2,true,true,false,Panel1,Panel1->Name);
    ClientGroup->AddComponent(2,false,false,true,FloatPanel1,FloatPanel1->Name);
    ClientGroup->AddComponent(2,true,true,true, seUserUsergroupCode,seUserUsergroupCode->Name);
    FillComboBox(scUserDept,"select '('+DeptCode+')'+DeptName memo,DeptCode from sdDept where DeptEnd=1","memo","DeptCode");

}


__fastcall TfrmUser::TfrmUser(TComponent* Owner)
    : TRecBaseForm(Owner,euSdUser,"")
{

}
//---------------------------------------------------------------------------

void __fastcall TfrmUser::FormShow(TObject *Sender)
{
    ClearControl(false);
    FillTreeWithData();
    ReadUserToTree(tvUser);
}
//---------------------------------------------------------------------------
void __fastcall TfrmUser::tvUserChange(TObject *Sender, TTreeNode *Node)
{
    AnsiString  strcode;
    if ((Node == NULL)||(Node->ImageIndex != 1)) return;
    strcode=GetCodeFromNode(Node->Text);
    comServer->LocateByKey(WideString(strcode));
    if (!comServer->Eof)
    {
       GetDataFromComObject();
    }


}
//---------------------------------------------------------------------------

void __fastcall TfrmUser::muAddDetailClick(TObject *Sender)
{
    if(tvUser->Selected == NULL)
     return;
    if(tvUser->Selected->ImageIndex != 0)
    {
     ::MessageBox(Handle,"请选定要加入的用户组","系统提示", MB_OK|MB_ICONINFORMATION);
     return;
    }
    TRecBaseForm::muAddDetailClick(Sender);
    seUserUsergroupCode->Text=GetCodeFromNode(tvUser->Selected->Text);
}
//---------------------------------------------------------------------------

void __fastcall TfrmUser::cbUserNetFlagChange(TObject *Sender)
{
    if (cbUserNetFlag->ItemIndex != 1)
      seUserNetAddress->Visible=false;
    else
      seUserNetAddress->Visible=true;


}
//---------------------------------------------------------------------------

void __fastcall TfrmUser::muEditDetailClick(TObject *Sender)
{
 if(tvUser->Selected == NULL)
  return;
 if(tvUser->Selected->ImageIndex == 0)
 {
  ::MessageBox(Handle,"不能修改用户组,操作被禁止!","错误", MB_OK|MB_ICONSTOP);
  return;
 }
 TRecBaseForm::muEditDetailClick(Sender);
 //保存修改前的用户代码
 oldusercode=GetFieldValue(fiUserCode);

}
//---------------------------------------------------------------------------

void __fastcall TfrmUser::muSaveClick(TObject *Sender)
{
    TRecBaseForm::muSaveClick(Sender);
    Panel1->Enabled=true;

}
//---------------------------------------------------------------------------

void __fastcall TfrmUser::muCancelClick(TObject *Sender)
{
    TRecBaseForm::muCancelClick(Sender);
    Panel1->Enabled=true;

}
//---------------------------------------------------------------------------

void __fastcall TfrmUser::muDeleteDetailClick(TObject *Sender)
{
 if(tvUser->Selected == NULL)
  return;
 if(tvUser->Selected->ImageIndex == 0)
 {
  ::MessageBox(Handle,"不能删除用户组,操作被禁止!","错误", MB_OK|MB_ICONSTOP);
  return;
 }
 TRecBaseForm::muDeleteDetailClick(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TfrmUser::TreeViewLocation()
{
    AnsiString s,c;
    s = GetFieldValue(fiUserCode);
    for(int i = 1 ; i < tvUser->Items->Count ; i ++)
    {
        c = tvUser->Items->Item[i]->Text;    //取关键字
        c = c.SubString(2,c.AnsiPos(")")-2);
        if(s == c)
        {
            tvUser->Selected = tvUser->Items->Item[i];
            break;
        }
    }
}
//---------------------------------------------------------------------------

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

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

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

void __fastcall TfrmUser::muLastClick(TObject *Sender)
{
    TRecBaseForm::muLastClick(Sender);
    TreeViewLocation();
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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