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

📄 ustadetail.pas

📁 人事档案管理
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit uStadetail;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TeEngine, Series, TeeProcs, Chart, Buttons, ToolWin, ComCtrls,
  StdCtrls, DBCtrls, Grids, DBGridEh, jpeg, DBCtrlsEh, Mask, ExtCtrls, DB,
  ADODB, DateUtils, ExtDlgs;

type
  TOperType = (otEdit, otAdd, otView);
  TStatType = (stDep, stSex, stLevel, stCap, stAge, stYear, stMonth);

  TfraStaDetail = class(TFrame)
    pcSta: TPageControl;
    tsStainfo: TTabSheet;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label23: TLabel;
    Label22: TLabel;
    Label24: TLabel;
    Label46: TLabel;
    pnlimg: TPanel;
    imgi: TImage;
    btnEditi: TButton;
    btnDeli: TButton;
    deStano: TDBEdit;
    deName: TDBEdit;
    edtProvi: TDBEdit;
    edtCardno: TDBEdit;
    edtRecno: TDBEdit;
    edtSlevel: TDBEdit;
    edtPcode: TDBEdit;
    edtAddress: TDBEdit;
    dcbLevel: TDBComboBox;
    dcbMarried: TDBComboBox;
    edtDes: TDBEdit;
    dcbDep: TDBComboBox;
    deInDate: TDBDateTimeEditEh;
    deBarstart: TDBDateTimeEditEh;
    deBarend: TDBDateTimeEditEh;
    dcbSpecial: TDBComboBox;
    edtBarYear: TDBEdit;
    dcbSex: TDBComboBox;
    deBirth: TDBDateTimeEditEh;
    cboPoli: TDBComboBox;
    dcbFolk: TDBComboBox;
    dcbSort: TDBComboBox;
    dcbCap: TDBComboBox;
    tsExper: TTabSheet;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    imgexper: TImage;
    Label48: TLabel;
    deDuty: TDBEdit;
    deCom: TDBEdit;
    deSDate: TDBDateTimeEditEh;
    deEdate: TDBDateTimeEditEh;
    deDep: TDBEdit;
    dgExper: TDBGridEh;
    deLeftr: TDBEdit;
    tsFami: TTabSheet;
    imghome: TImage;
    Label30: TLabel;
    Label31: TLabel;
    Label32: TLabel;
    Label33: TLabel;
    Label34: TLabel;
    dbeName: TDBEdit;
    dbeCom: TDBEdit;
    dbeTel: TDBEdit;
    dbFami: TDBComboBox;
    dgFami: TDBGridEh;
    dmDesf: TDBMemo;
    tsAP: TTabSheet;
    Label35: TLabel;
    Label36: TLabel;
    Label37: TLabel;
    Label38: TLabel;
    Label39: TLabel;
    Image1: TImage;
    deTopic: TDBEdit;
    dbSort: TDBComboBox;
    dmDes: TDBMemo;
    dbDep: TDBComboBox;
    deDate: TDBDateTimeEditEh;
    dgAP: TDBGridEh;
    tsTrain: TTabSheet;
    Label40: TLabel;
    Label41: TLabel;
    Label42: TLabel;
    Label43: TLabel;
    Label44: TLabel;
    imgtrain: TImage;
    Label45: TLabel;
    deCourse: TDBEdit;
    deTrcom: TDBEdit;
    deDLimit: TDBEdit;
    deCerti: TDBEdit;
    dteSDate: TDBDateTimeEditEh;
    dteEDate: TDBDateTimeEditEh;
    dgTrain: TDBGridEh;
    tsStat: TTabSheet;
    cbStatTop: TCoolBar;
    Label47: TLabel;
    sbDep: TSpeedButton;
    sbSex: TSpeedButton;
    sbElevel: TSpeedButton;
    sbAge: TSpeedButton;
    sbYear: TSpeedButton;
    sbMonth: TSpeedButton;
    sbSaveAs: TSpeedButton;
    sbCap: TSpeedButton;
    dgStat: TDBGridEh;
    chrStaInfo: TChart;
    Series1: TPieSeries;
    aqStaDetail: TADOQuery;
    dsStat: TDataSource;
    spdChart: TSavePictureDialog;
    odImg: TOpenDialog;
    Label50: TLabel;
    deTel: TDBEdit;
    Label51: TLabel;
    deMobile: TDBEdit;
    Label52: TLabel;
    dcbDutyState: TDBComboBox;
    Label53: TLabel;
    deDutyDate: TDBDateTimeEditEh;
    Label54: TLabel;
    deStaDate: TDBDateTimeEditEh;
    Label55: TLabel;
    deLeftDate: TDBDateTimeEditEh;
    Label56: TLabel;
    deMail: TDBEdit;
    Label57: TLabel;
    deSchool: TDBEdit;
    Label58: TLabel;
    deGraDate: TDBEdit;
    Label59: TLabel;
    deBirthf: TDBEdit;
    Label60: TLabel;
    dcbPolif: TDBComboBox;
    dcbBody: TDBComboBox;
    procedure btnEditiClick(Sender: TObject);
    procedure btnDeliClick(Sender: TObject);
    procedure pcStaChange(Sender: TObject);
    procedure sbDepClick(Sender: TObject);
    procedure sbSexClick(Sender: TObject);
    procedure sbElevelClick(Sender: TObject);
    procedure sbAgeClick(Sender: TObject);
    procedure sbCapClick(Sender: TObject);
    procedure sbYearClick(Sender: TObject);
    procedure sbMonthClick(Sender: TObject);
    procedure sbSaveAsClick(Sender: TObject);
  private
    { Private declarations }
    FID: Integer;
    procedure BeforeShow;
    procedure AfterShow(AIndex: Integer = 0);
    procedure SetID(AValue: Integer = 0);
    procedure AddStatData(AStatType: TStatType = stDep);
  public
    { Public declarations }
    sWhr: string;
    procedure SetState(AIndex: Integer; ViewState: Boolean); overload;
    procedure SetState(AIndex: Integer; AOperType: TOperType); overload;
  published
    procedure FillData;
    procedure Append;
    procedure Edit;
    procedure UpdateData;
    function Delete: Boolean;
    procedure Cancel;
    procedure Print(AIds: string);
    
    property ID: Integer read FID write SetID;
  end;

implementation

uses ustainfo, uglobal, udata, uprint;

{$R *.dfm}

{ TfraStaDetail }

procedure TfraStaDetail.FillData;
  procedure FillDBComboBox(ADataSet: TADOQuery; ADBComboBox: TDBComboBox);
  begin
    ADBComboBox.Items.Clear;
    while not ADataSet.Eof do
    begin
      ADBComboBox.Items.Add(ADataSet.FieldByName('sname').AsString);
      ADataSet.Next;
    end;
  end;

var
  aqFillData: TADOQuery;
begin
  if not dmPer.aqDept.Active then dmPer.OpenDept;
  aqFillData := TADOQuery.Create(Self);
  aqFillData.Clone(dmPer.aqDept, ltReadOnly);
  dcbDep.Clear;
  dbDep.Clear;
  while not aqFillData.Eof do
  begin
    dcbDep.Items.add(aqFillData.FieldByName('dep').AsString);
    dbDep.Items.add(aqFillData.FieldByName('dep').AsString);
    aqFillData.Next;
  end;

  dmPer.OpenQuery(aqFillData, 'select sname, iflag from oinfo');
  FilterData(aqFillData, 'iflag = 1');
  FillDBComboBox(aqFillData, dcbSort);

  FilterData(aqFillData, 'iflag = 2');
  FillDBComboBox(aqFillData, dcbCap);

  FilterData(aqFillData, 'iflag = 3');
  FillDBComboBox(aqFillData, dcbFolk);

  FilterData(aqFillData, 'iflag = 4');
  FillDBComboBox(aqFillData, dcbLevel);

  FilterData(aqFillData, 'iflag = 5');
  FillDBComboBox(aqFillData, dcbSpecial);
end;

procedure TfraStaDetail.SetID(AValue: Integer);
begin
  if (AValue = 0) or (FID = AValue) or (pcSta.ActivePageIndex = 5) then Exit;
  FID := AValue;
  pcStaChange(pcSta);
  if pcSta.ActivePageIndex = 0 then
  begin
    aqStaDetail.Locate('id', IntToStr(ID), []);
    if FileExists(App.Path + 'images\' + aqStaDetail.FieldByName('image').AsString) then
      imgi.Picture.LoadFromFile(App.Path + 'images\' + aqStaDetail.FieldByName('image').AsString)
    else imgi.Picture.LoadFromFile(App.Path + 'images\imgd.jpg');
  end
  else FilterData(aqStaDetail, 'sid=' + IntToStr(ID));
end;

procedure TfraStaDetail.SetState(AIndex: Integer; ViewState: Boolean);
var
  i: Integer;
  tsCur: TTabSheet;
begin
  tsCur := pcSta.Pages[AIndex];
  if ViewState then
  begin
    for i := 0 to tsCur.ControlCount - 1 do
      if tsCur.Controls[i] is TDBEdit then
      begin
        TDBEdit(tsCur.Controls[i]).ReadOnly := True;
        TDBEdit(tsCur.Controls[i]).Color := ViewColor;
      end
      else if tsCur.Controls[i] is TDBComboBox then
      begin
        TDBComboBox(tsCur.Controls[i]).ReadOnly := True;
        TDBComboBox(tsCur.Controls[i]).Color := ViewColor;
      end
      else if tsCur.Controls[i] is TDBDateTimeEditEh then
      begin
        TDBDateTimeEditEh(tsCur.Controls[i]).ReadOnly := True;
        TDBDateTimeEditEh(tsCur.Controls[i]).Color := ViewColor;
      end
      else if tsCur.Controls[i] is TDBMemo then
      begin
        TDBMemo(tsCur.Controls[i]).ReadOnly := True;
        TDBMemo(tsCur.Controls[i]).Color := ViewColor;
      end;
  end
  else
    for i := 0 to tsCur.ControlCount - 1 do
      if tsCur.Controls[i] is TDBEdit then
      begin
        TDBEdit(tsCur.Controls[i]).ReadOnly := False;
        TDBEdit(tsCur.Controls[i]).Color := clWindow;
      end
      else if tsCur.Controls[i] is TDBComboBox then
      begin
        TDBComboBox(tsCur.Controls[i]).ReadOnly := False;
        TDBComboBox(tsCur.Controls[i]).Color := clWindow;
      end
      else if tsCur.Controls[i] is TDBDateTimeEditEh then
      begin
        TDBDateTimeEditEh(tsCur.Controls[i]).ReadOnly := False;
        TDBDateTimeEditEh(tsCur.Controls[i]).Color := clWindow;
      end
      else if tsCur.Controls[i] is TDBMemo then
      begin
        TDBMemo(tsCur.Controls[i]).ReadOnly := False;
        TDBMemo(tsCur.Controls[i]).Color := clWindow;
      end;

  case AIndex of
    0:
    begin
      if ViewState then
      begin
        btnEditi.Enabled := True;
        btnDeli.Enabled := True;
      end
      else
      begin
        if aqStaDetail.State = dsInsert then
        begin
          deStano.SetFocus;
          deBirth.Value := IncYear(Date, -20);
          deInDate.Value := Date;
          deBarstart.Value := Date;
          deBarend.Value := IncYear(Date, 1);
        end
        else
        begin
          deStano.ReadOnly := True;
          deStano.Color := ViewColor;
          deName.SetFocus;
        end;
      end;
    end;
    1:
    begin
      dgExper.Enabled := ViewState;
      if not ViewState and (aqStaDetail.State = dsInsert) then
      begin
        deSDate.Value := IncYear(Date, -1);
        deEdate.Value := Date;
      end;
    end;
    2:
    begin
      dgFami.Enabled := ViewState;
      if not ViewState then
      begin
        dgFami.Enabled := False;
        dbeName.SetFocus
      end;
    end;
    3:
    begin
      dgap.Enabled := ViewState;
      if not ViewState then
      begin
        dbSort.SetFocus;
        if aqStaDetail.State = dsInsert then
          deDate.Value := Date;
      end;
    end;
    4:
    begin
      dgTrain.Enabled := ViewState;
      if not ViewState then
      begin
        deCourse.SetFocus;
        if aqStaDetail.State = dsInsert then
        begin
          dteSDate.Value := IncYear(Date, -1);
          dteEDate.Value := IncYear(Date, -1);
        end;
      end;
    end;
  end;
end;

procedure TfraStaDetail.SetState(AIndex: Integer; AOperType: TOperType);
begin
  case AOperType of
    otAdd, otEdit:
      SetState(AIndex, False);
    otView:
    begin
      SetState(AIndex, True);
      if aqStaDetail.State in [dsEdit, dsInsert] then aqStaDetail.CancelBatch;
    end;
  end;
end;

procedure TfraStaDetail.btnDeliClick(Sender: TObject);
var
  aqImg: TADOQuery;
begin
  if MessageBox(Handle, '真的要删除此员工照片吗?', '提示', mb_IconQuestion + mb_YesNo) = idYes then
  begin
    aqImg := TADOQuery.Create(Self);
    dmPer.OpenQuery(aqImg, 'select image from stainfo where id=' + IntToStr(ID));
    if FileExists(App.Path + 'images\' + aqImg.Fieldbyname('image').AsString) then
    begin
      DeleteFile(App.Path + 'images\' + aqImg.Fieldbyname('image').AsString);
      imgi.Picture.LoadFromFile(App.Path + 'images\imgd.jpg');
    end
    else MessageBox(Handle, '没有此员工照片!', '提示', mb_IconInformation + mb_Ok);
    aqImg.Free;
  end;
end;

procedure TfraStaDetail.Append;
begin
  if pcSta.ActivePageIndex = 5 then pcSta.ActivePageIndex := 0;
  aqStaDetail.Append;
  SetState(pcSta.ActivePageIndex, otAdd);
end;

function TfraStaDetail.Delete: Boolean;
begin
  Result := False;
  if pcSta.ActivePageIndex = 5 then pcSta.ActivePageIndex := 0;
  if not aqStaDetail.Active then Exit;
  try
    if pcSta.ActivePageIndex = 0 then
    begin
      if MessageBox(handle, '真的要删除此员工记录么?', '提示', mb_IconQuestion + mb_YesNo) = idYes then
      begin
        if FileExists(App.Path + 'images\' + aqStaDetail.Fieldbyname('image').AsString) then
          DeleteFile(App.Path + 'images\' + aqStaDetail.Fieldbyname('image').AsString);
        aqStaDetail.Delete;
        aqStaDetail.UpdateBatch();
        Result := True;
      end
    end
    else if MessageBox(Handle, '真的要删除此记录么?', '提示', mb_IconQuestion + mb_YesNo) = idYes then
    begin
      aqStaDetail.Delete;
      aqStaDetail.UpdateBatch();
    end;
  except
    on E: Exception do
    begin
      MessageBox(Handle, PAnsiChar('删除失败,信息为:' + E.Message), '提示', mb_Ok + mb_IconInformation);
      if pcSta.ActivePageIndex = 0 then Result := False;
    end;
   end;
end;

procedure TfraStaDetail.Edit;
begin
  if pcSta.ActivePageIndex = 5 then pcSta.ActivePageIndex := 0;
  aqStaDetail.Edit;
  SetState(pcSta.ActivePageIndex, otEdit);
end;

⌨️ 快捷键说明

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