📄 ustainfo.pas
字号:
end;
procedure TfrmStainfo.GetStaffs(const ADeptNode: TTreeNode; IsRoot: Boolean);
var
sSql, sDepIds: string;
procedure GetDepIds(const ANode: TTreeNode);
var
i: Integer;
begin
sDepIds := sDepIds + ',' + IntToStr(Integer(ANode.Data));
for i := 0 to ANode.Count - 1 do
if (ANode.Item[i].getFirstChild <> nil) or not ANode.Item[i].HasChildren then
GetDepIds(ANode.Item[i]);
end;
begin
sSql := 'select stainfo.id, stano, sname, sex, birth, tel, dept.dep, [level], ' +
'provi from stainfo left join dept on stainfo.depid=dept.id';
if not IsRoot then
begin
GetDepIds(ADeptNode);
sDepIds := Copy(sDepIds, Pos(',', sDepIds) + 1, Length(sDepIds) - Pos(',', sDepIds));
sSql := sSql + ' where depid in('+sDepIds+') ' + sWhr;
end;
dmPer.OpenQuery(aqStaInfo, sSql);
if aqStaInfo.RecordCount = 0 then Exit;
dgStaInfo.DataSource := dsStaInfo;
end;
procedure TfrmStainfo.tvPerChange(Sender: TObject; Node: TTreeNode);
var
sDep: string;
begin
if Node.IsFirstNode then
begin
gbPer.Caption := Node.Text;
if rbDisplay.Checked then GetStaffs(Node, True);
end
else if (not Node.IsFirstNode) and (Node.ImageIndex <> 2) then
begin
if rbDisplay.Checked then GetStaffs(Node, False);
sDep := Node.Text;
while Node.Parent.Level <> 0 do
begin
Node := Node.Parent;
sDep := Node.Text + '-->' + sDep;
end;
gbPer.Caption := '部门:' + sDep;
end
else if Node.ImageIndex = 2 then
begin
fraStaDetail.ID := Integer(PNodeData(Node.Data)^.Id);
sDep := Node.Text;
while Node.Parent.Level <> 0 do
begin
Node := Node.Parent;
sDep := Node.Text + '-->' + sDep;
end;
gbPer.Caption := '员工:' + sDep;
end;
end;
procedure TfrmStainfo.tvPerClick(Sender: TObject);
begin
if fraStaDetail.pcSta.ActivePageIndex = 5 then fraStaDetail.tsStainfo.Show;
end;
//******************************
procedure TfrmStainfo.tvPerMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
function GetStaInfo(AId, ADept: string): string;
var
aqGetInfo: TADOQuery;
sInfo: string;
begin
if AId = '' then Exit;
aqGetInfo := TADOQuery.Create(nil);
dmPer.OpenQuery(aqGetInfo, 'select sname, stano, sex, dutystate from stainfo where id=' + AId);
if not aqGetInfo.Eof then
begin
sInfo := sInfo + '姓名:' + aqGetInfo.Fields[0].AsString + #13;
sInfo := sInfo + '工号:' + aqGetInfo.Fields[1].AsString + #13;
sInfo := sInfo + '性别:' + aqGetInfo.Fields[2].AsString + #13;
sInfo := sInfo + '部门:' + ADept + #13;
sInfo := sInfo + '状态:' + aqGetInfo.Fields[3].AsString;
end;
Result := sInfo;
aqGetInfo.Free;
end;
var
tnSta: TTreeNode;
sId: Integer;
begin
tnSta := tvPer.GetNodeAt(X, Y);
if (tnSta <> nil) and (tnSta.ImageIndex = 2) then
begin
if tnSta.Data = nil then Exit;
sId := PNodeData(tnSta.Data)^.Id;
tvPer.Hint := GetStaInfo(IntToStr(sId), tnSta.Parent.Text);
if nIndex <> tnSta.AbsoluteIndex then
begin
nIndex := tnSta.AbsoluteIndex;
Application.Activatehint(Point(X, Y));
end;
end
else tvPer.Hint := '';
end;
procedure TfrmStainfo.GetBrithStaff(IsMonth: Boolean);
var
aqBirth: TADOQuery;
begin
aqBirth := TADOQuery.Create(Self);
if IsMonth then
begin
dmPer.OpenQuery(aqBirth, 'select stano, sname from stainfo where datepart(''m'', birth) = '
+ QuotedStr(IntToStr(MonthOf(Date()))) + ' order by sname');
meoBirth.Lines.Append('本月生日的员工['+ IntToStr(aqBirth.RecordCount) +']');
if not aqBirth.Eof then
begin
meoBirth.Lines.Append('他们是:');
while not aqBirth.Eof do
begin
meoBirth.Lines.Append(aqBirth.fieldByName('sname').AsString + '[' + aqBirth.fieldByName('stano').AsString + ']');
aqBirth.Next;
end;
end;
end
else
begin
meoBirth.Lines.Append(#13);
dmPer.OpenQuery(aqBirth, 'select stano, sname from stainfo where datepart(''m'', birth) = '
+ QuotedStr(IntToStr(MonthOf(Date()))) + ' and datepart(''d'', birth) = ' + QuotedStr(IntToStr(DayOf(Date()))) + ' order by sname');
meoBirth.Lines.Append('今天生日的员工[' + IntToStr(aqBirth.RecordCount) + ']');
if not aqBirth.Eof then
begin
meoBirth.Lines.Append('他们是:');
while not aqBirth.Eof do
begin
meoBirth.Lines.Append(aqBirth.fieldByName('sname').AsString + '[' + aqBirth.fieldByName('stano').AsString + ']');
aqBirth.Next;
end;
end;
end;
aqBirth.Free;
end;
procedure TfrmStainfo.rbDetailClick(Sender: TObject);
begin
tvPer.BringToFront;
if aqStaInfo.RecordCount <> 0 then FindStaffs(aqStaInfo.FieldByName('id').AsString);
meoBirth.BringToFront;
fraStaDetail.BringToFront;
end;
procedure TfrmStainfo.rbDisplayClick(Sender: TObject);
var
i, iDepId: Integer;
begin
tvPerv.BringToFront;
meoBirth.BringToFront;
iDepId := 0;
if tvPer.Selected.Data <> nil then
begin
if tvPer.Selected.ImageIndex <> 2 then
iDepID := Integer(tvPer.Selected.Data)
else iDepID := Integer(tvPer.Selected.Parent.Data)
end;
for i := 0 to tvPerv.Items.Count - 1 do
if (iDepId <> 0) and (Integer(tvPerv.Items[i].Data) = iDepId) then
begin
tvPerv.Items[i].Selected := True;
tvPerv.OnChange(tvPerv, tvPerv.Items[i]);
Break;
end;
dgStaInfo.BringToFront;
end;
procedure TfrmStainfo.FindStaffs(const AStaID: string);
var
i: Integer;
begin
if AStaID = '' then Exit;
for i := 0 to tvPer.Items.Count - 1 do
if (tvPer.Items[i].ImageIndex = 2) and (PNodeData(tvPer.Items[i].Data).Id = StrToInt(AStaID)) then
begin
tvPer.Items[i].Selected := True;
Exit;
end;
end;
procedure TfrmStainfo.dgStaInfoDblClick(Sender: TObject);
var
sId: string;
begin
sId := aqStaInfo.FieldByName('id').AsString;
rbDetail.Checked := True;
FindStaffs(sId);
tvPerChange(tvPer, tvPer.Selected);
end;
{Acttion start here}
procedure TfrmStainfo.actEditExecute(Sender: TObject);
begin
if rbDisplay.Checked then dgStaInfoDblClick(Sender);
fraStaDetail.Edit;
SetActState(asEdit);
end;
procedure TfrmStainfo.actAddExecute(Sender: TObject);
begin
if tvPer.Items.Count = 1 then
begin
MessageBox(Handle, '请先添加部门!', '提示', mb_IconInformation + mb_Ok);
Exit;
end;
if rbDisplay.Checked then rbDetail.Checked;
fraStaDetail.Append;
SetActState(asAppend);
end;
procedure TfrmStainfo.actOkExecute(Sender: TObject);
procedure FindTree(AStaNo: string);
var
i: Integer;
begin
for i := 0 to tvPer.Items.Count - 1 do
begin
if (tvPer.Items[i].Data <> nil) and (tvPer.Items[i].ImageIndex = 2) then
if PNodeData(tvPer.Items[i].Data)^.No = AStaNo then
begin
tvPer.Items[i].Selected := True;
Break;
end;
end;
end;
var
StaNo: string;
begin
StaNo := fraStaDetail.deStano.Text;
fraStaDetail.UpdateData;
SetActState(asView);
if fraStaDetail.pcSta.ActivePageIndex = 0 then
begin
LoadTree(tvPer);
FindTree(StaNo);
end;
end;
procedure TfrmStainfo.actSearchExecute(Sender: TObject);
begin
frmPer.actInquExecute(Sender);
end;
procedure TfrmStainfo.actPriorExecute(Sender: TObject);
begin
if rbDetail.Checked then
begin
if tvPer.Selected.AbsoluteIndex > 0 then
begin
tvPer.Selected := tvPer.Selected.GetPrev;
if (tvPer.Selected.Data <> nil) and (tvPer.Selected.ImageIndex = 2) then
tvPer.SetFocus
else actPriorExecute(Sender);
end;
end
else if not aqStaInfo.Bof then aqStaInfo.Prior;
end;
procedure TfrmStainfo.actNextExecute(Sender: TObject);
begin
if rbDetail.Checked then
begin
if tvPer.Selected.AbsoluteIndex < tvPer.Items.Count - 1 then
begin
tvPer.Selected := tvPer.Selected.GetNext;
if (tvper.Selected.Data <> nil) and (tvPer.Selected.ImageIndex = 2) then
tvPer.SetFocus
else actNextExecute(Sender);
end;
end
else if not aqStaInfo.Eof then aqStaInfo.Next;
end;
procedure TfrmStainfo.actDelExecute(Sender: TObject);
var
i, Index: Integer;
begin
Index := tvPer.Selected.AbsoluteIndex - 1;
if rbDisplay.Checked then
begin
if MessageBox(handle, '真的要删除此员工记录么?', '提示', mb_IconQuestion + mb_YesNo) = idYes then
begin
Log.Write('删除员工记录[' + fraStaDetail.deName.Text + ']');
aqStaInfo.Delete;
LoadTree(tvPer);
end;
end
else if fraStaDetail.pcSta.ActivePageIndex < 5 then
begin
if fraStaDetail.pcSta.ActivePageIndex = 0 then
begin
Log.Write('删除员工记录[' + fraStaDetail.deName.Text + ']');
if fraStaDetail.Delete then
begin
LoadTree(tvPer);
for i := 0 to tvPer.Items.Count - 1 do
if tvPer.Items[i].AbsoluteIndex = Index then
tvPer.Selected := tvPer.Items[i];
if tvPer.Selected.ImageIndex <> 2 then actPriorExecute(Sender);
end;
end
else fraStaDetail.Delete;
end;
end;
procedure TfrmStainfo.actCancelExecute(Sender: TObject);
begin
fraStaDetail.Cancel;
tvPer.OnChange(tvPer, tvPer.Selected);
SetActState(asView);
end;
procedure TfrmStainfo.actPrintExecute(Sender: TObject);
function GetStaIDs: string;
var
sIds: string;
function GetNodeIds(ANode: TTreeNode): string;
var
i: Integer;
begin
if (ANode.Data <> nil) and (ANode.ImageIndex = 2) then
sIds := sIds + ', ' + IntToStr(PNodeData(ANode.Data)^.Id);
for i := 0 to ANode.Count - 1 do
if (ANode.Item[i].getFirstChild <> nil) or not ANode.Item[i].HasChildren then
GetNodeIds(ANode.Item[i]);
Result := sIds;
end;
begin
Result := '';
sIds := '';
if rbDetail.Checked then
Result := GetNodeIds(tvPer.Selected)
else
begin
aqStaInfo.First;
while not aqStaInfo.Eof do
begin
Result := Result + ', ' + aqStaInfo.FieldByName('id').AsString;
aqStaInfo.Next;
end;
aqStaInfo.First;
end;
end;
begin
fraStaDetail.Print(GetStaIDs)
end;
procedure TfrmStainfo.actExitExecute(Sender: TObject);
begin
Close();
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -