培训计划页面优化

master
xiaochanghai 3 months ago
parent 2c7b586a9a
commit 8eed8cae95
  1. 5471
      Model/Tiobon.Web.pdm
  2. 70
      Tiobon.Core.Api/Tiobon.Core.Model.xml
  3. 48
      Tiobon.Core.Model/Base/Ghre/Ghre_Plan.Dto.Base.cs
  4. 45
      Tiobon.Core.Model/Models/Ghre/Ghre_Plan.cs
  5. 17
      Tiobon.Core.Model/View/Ghre/Ghre_Plan.Dto.View.cs
  6. 91
      Tiobon.Core.Services/CommonServices.cs
  7. 104
      Tiobon.Core.Services/Ghre/Ghre_PlanServices.cs
  8. 70
      Tiobon.Core/Tiobon.Core.Model.xml

File diff suppressed because it is too large Load Diff

@ -5675,6 +5675,11 @@
课程ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.CourseName">
<summary>
课程
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.StaffIds">
<summary>
培训对象
@ -5690,11 +5695,41 @@
合计预算
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.InOrOut">
<summary>
内外训
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.Month">
<summary>
计划实施月份
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.TrainNum">
<summary>
需求人数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.TrainDays">
<summary>
培训天数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.StatusQuo">
<summary>
现状
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.DesiredResult">
<summary>
培训预期效果
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.Leader">
<summary>
指导者
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.Status">
<summary>
状态
@ -21531,6 +21566,11 @@
课程ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.CourseName">
<summary>
课程
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.StaffIds">
<summary>
培训对象
@ -21546,11 +21586,41 @@
合计预算
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.InOrOut">
<summary>
内外训
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.Month">
<summary>
计划实施月份
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.TrainNum">
<summary>
需求人数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.TrainDays">
<summary>
培训天数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.StatusQuo">
<summary>
现状
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.DesiredResult">
<summary>
培训预期效果
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.Leader">
<summary>
指导者
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.Status">
<summary>
状态

@ -6,7 +6,7 @@
*
* Ver
*
*V0.01 2025/3/3 13:13:42 SimonHsiao
*V0.01 2025/3/26 10:17:03 SimonHsiao
*
* Copyright(c) 2025 Tiobon Corporation. All Rights Reserved.
*
@ -44,6 +44,12 @@ public class Ghre_PlanBase
/// </summary>
public long? CourseId { get; set; }
/// <summary>
/// 课程
/// </summary>
[Display(Name = "CourseName"), Description("课程"), MaxLength(64, ErrorMessage = "课程 不能超过 64 个字符")]
public string CourseName { get; set; }
/// <summary>
/// 培训对象
/// </summary>
@ -61,12 +67,47 @@ public class Ghre_PlanBase
[Display(Name = "TotalBudget"), Description("合计预算"), Column(TypeName = "decimal(20,2)")]
public decimal? TotalBudget { get; set; }
/// <summary>
/// 内外训
/// </summary>
[Display(Name = "InOrOut"), Description("内外训"), MaxLength(32, ErrorMessage = "内外训 不能超过 32 个字符")]
public string InOrOut { get; set; }
/// <summary>
/// 计划实施月份
/// </summary>
[Display(Name = "Month"), Description("计划实施月份"), MaxLength(32, ErrorMessage = "计划实施月份 不能超过 32 个字符")]
[Display(Name = "Month"), Description("计划实施月份"), MaxLength(2000, ErrorMessage = "计划实施月份 不能超过 2000 个字符")]
public string Month { get; set; }
/// <summary>
/// 需求人数
/// </summary>
public int? TrainNum { get; set; }
/// <summary>
/// 培训天数
/// </summary>
[Display(Name = "TrainDays"), Description("培训天数"), Column(TypeName = "decimal(20,2)")]
public decimal? TrainDays { get; set; }
/// <summary>
/// 现状
/// </summary>
[Display(Name = "StatusQuo"), Description("现状"), MaxLength(2000, ErrorMessage = "现状 不能超过 2000 个字符")]
public string StatusQuo { get; set; }
/// <summary>
/// 培训预期效果
/// </summary>
[Display(Name = "DesiredResult"), Description("培训预期效果"), MaxLength(2000, ErrorMessage = "培训预期效果 不能超过 2000 个字符")]
public string DesiredResult { get; set; }
/// <summary>
/// 指导者
/// </summary>
[Display(Name = "Leader"), Description("指导者"), MaxLength(64, ErrorMessage = "指导者 不能超过 64 个字符")]
public string Leader { get; set; }
/// <summary>
/// 状态
/// </summary>
@ -186,5 +227,6 @@ public class Ghre_PlanBase
/// </summary>
public int? ReverseI2 { get; set; }
public List<int> StaffIdList { get; set; }
public List<int> StaffId { get; set; }
public List<string> Months { get; set; } = new List<string>();
}

@ -6,7 +6,7 @@
*
* Ver
*
*V0.01 2025/3/3 13:13:42 SimonHsiao
*V0.01 2025/3/26 10:17:03 SimonHsiao
*
* Copyright(c) 2025 Tiobon Corporation. All Rights Reserved.
*
@ -45,6 +45,12 @@ public class Ghre_Plan : BasePoco
/// </summary>
public long? CourseId { get; set; }
/// <summary>
/// 课程
/// </summary>
[Display(Name = "CourseName"), Description("课程"), MaxLength(64, ErrorMessage = "课程 不能超过 64 个字符")]
public string CourseName { get; set; }
/// <summary>
/// 培训对象
/// </summary>
@ -62,12 +68,47 @@ public class Ghre_Plan : BasePoco
[Display(Name = "TotalBudget"), Description("合计预算"), Column(TypeName = "decimal(20,2)")]
public decimal? TotalBudget { get; set; }
/// <summary>
/// 内外训
/// </summary>
[Display(Name = "InOrOut"), Description("内外训"), MaxLength(32, ErrorMessage = "内外训 不能超过 32 个字符")]
public string InOrOut { get; set; }
/// <summary>
/// 计划实施月份
/// </summary>
[Display(Name = "Month"), Description("计划实施月份"), MaxLength(32, ErrorMessage = "计划实施月份 不能超过 32 个字符")]
[Display(Name = "Month"), Description("计划实施月份"), MaxLength(2000, ErrorMessage = "计划实施月份 不能超过 2000 个字符")]
public string Month { get; set; }
/// <summary>
/// 需求人数
/// </summary>
public int? TrainNum { get; set; }
/// <summary>
/// 培训天数
/// </summary>
[Display(Name = "TrainDays"), Description("培训天数"), Column(TypeName = "decimal(20,2)")]
public decimal? TrainDays { get; set; }
/// <summary>
/// 现状
/// </summary>
[Display(Name = "StatusQuo"), Description("现状"), MaxLength(2000, ErrorMessage = "现状 不能超过 2000 个字符")]
public string StatusQuo { get; set; }
/// <summary>
/// 培训预期效果
/// </summary>
[Display(Name = "DesiredResult"), Description("培训预期效果"), MaxLength(2000, ErrorMessage = "培训预期效果 不能超过 2000 个字符")]
public string DesiredResult { get; set; }
/// <summary>
/// 指导者
/// </summary>
[Display(Name = "Leader"), Description("指导者"), MaxLength(64, ErrorMessage = "指导者 不能超过 64 个字符")]
public string Leader { get; set; }
/// <summary>
/// 状态
/// </summary>

@ -36,5 +36,20 @@ public class Ghre_PlanDto : Ghre_Plan
public string DeptName { get; set; }
public string SchoolName { get; set; }
public List<int> StaffIdList { get; set; }
public List<int> StaffId { get; set; }
public List<string> Months { get; set; } = new List<string>();
public decimal? TotalDays { get; set; } = 0;
public string M1 { get; set; }
public string M2 { get; set; }
public string M3 { get; set; }
public string M4 { get; set; }
public string M5 { get; set; }
public string M6 { get; set; }
public string M7 { get; set; }
public string M8 { get; set; }
public string M9 { get; set; }
public string M10 { get; set; }
public string M11 { get; set; }
public string M12 { get; set; }
}

@ -2073,49 +2073,54 @@ public partial class CommonServices : BaseServices<RootEntityTkey<int>>, ICommon
});
break;
//case "F_TrainPlan_Temporary":
// sql = $@"SELECT A.RoleId, B.RoleNo, B.RoleName
// FROM Ghrs_UserRole A LEFT JOIN Ghrs_Role B ON A.RoleId = B.RoleId
// WHERE A.UserID = {App.User.ID}
// AND A.IsEnable = 1
// AND B.IsEnable = 1
// AND B.RoleNo = 'F_TrainPlanTransferToConfirmed'";
// toolbarRoles = DbAccess.QueryList<ToolbarRole>(sql);
// if (toolbarRoles != null && toolbarRoles.Any())
// {
// index = result.JM_PageControlT1.Toolbar.FindIndex(x => x.fnKey == "NewYN");
// result.JM_PageControlT1.Toolbar.Insert(index + 1, new Toolbar()
// {
// display = true,
// fnKey = "TBD5YN",
// fnTitle = await QueryLangValue("F_ManReqMaintenTemporary_TransferToConfirmed", param.langId, "转入待确认"),
// fnType = "table",
// icon = "ghr-icon-user-wait",
// position = "left"
// });
// }
// break;
//case "F_TrainPlan_WaitConfirm":
// result.JM_PageControlT1.Toolbar.Insert(0, new Toolbar()
// {
// display = true,
// fnKey = "TBD7YN",
// fnTitle = await QueryLangValue("F_Training_Demand_ToConfirm_Reject", param.langId, "拒绝"),
// fnType = "table",
// icon = "ess-icon-reject",
// position = "left"
// });
// result.JM_PageControlT1.Toolbar.Insert(0, new Toolbar()
// {
// display = true,
// fnKey = "TBD6YN",
// fnTitle = await QueryLangValue("F_Training_Demand_ToConfirm_Agree", param.langId, "同意"),
// fnType = "table",
// icon = "ess-icon-approval",
// position = "left"
// });
// break;
case "F_TrainPlan_Wait":
case "F_TrainPlan_Active":
case "F_TrainPlan_Disable":
case "F_TrainPlan_Temporary":
sql = $@"SELECT A.RoleId, B.RoleNo, B.RoleName
FROM Ghrs_UserRole A LEFT JOIN Ghrs_Role B ON A.RoleId = B.RoleId
WHERE A.UserID = {App.User.ID}
AND A.IsEnable = 1
AND B.IsEnable = 1
AND B.RoleNo = 'F_TrainPlanTransferToConfirmed'";
toolbarRoles = DbAccess.QueryList<ToolbarRole>(sql);
if (toolbarRoles != null && toolbarRoles.Any())
{
index = result.JM_PageControlT1.Toolbar.FindIndex(x => x.fnKey == "NewYN");
result.JM_PageControlT1.Toolbar.Insert(index + 1, new Toolbar()
{
display = true,
fnKey = "TBD5YN",
fnTitle = await QueryLangValue("F_ManReqMaintenTemporary_TransferToConfirmed", param.langId, "转入待确认"),
fnType = "table",
icon = "ghr-icon-user-wait",
position = "left"
});
}
break;
case "F_TrainPlan_WaitConfirm":
result.JM_PageControlT1.Toolbar.Insert(0, new Toolbar()
{
display = true,
fnKey = "TBD7YN",
fnTitle = await QueryLangValue("F_Training_Demand_ToConfirm_Reject", param.langId, "拒绝"),
fnType = "table",
icon = "ess-icon-reject",
position = "left"
});
result.JM_PageControlT1.Toolbar.Insert(0, new Toolbar()
{
display = true,
fnKey = "TBD6YN",
fnTitle = await QueryLangValue("F_Training_Demand_ToConfirm_Agree", param.langId, "同意"),
fnType = "table",
icon = "ess-icon-approval",
position = "left"
});
break;
case "F_UshioTrainPlan_Wait":
case "F_UshioTrainPlan_Active":
case "F_UshioTrainPlan_Disable":
@ -2184,7 +2189,7 @@ public partial class CommonServices : BaseServices<RootEntityTkey<int>>, ICommon
}
result.JM_TableColumnT1.TableColumn = result.JM_TableColumnT1.TableColumn.OrderBy(x => x.SortNo).ToList();
if (param.menuName == "F_UshioTrainPlan_WaitConfirm")
if (param.menuName == "F_UshioTrainPlan_WaitConfirm" || param.menuName == "F_TrainPlan_WaitConfirm")
{
result.JM_PageControlT1.Toolbar.Insert(0, new Toolbar()
@ -2206,7 +2211,7 @@ public partial class CommonServices : BaseServices<RootEntityTkey<int>>, ICommon
position = "left"
});
}
else if (param.menuName == "F_UshioTrainPlan_Temporary")
else if (param.menuName == "F_UshioTrainPlan_Temporary" || param.menuName == "F_TrainPlan_Temporary")
{
sql = $@"SELECT A.RoleId, B.RoleNo, B.RoleName
FROM Ghrs_UserRole A LEFT JOIN Ghrs_Role B ON A.RoleId = B.RoleId

@ -8,16 +8,32 @@ namespace Tiobon.Core.Services;
public class Ghre_PlanServices : BaseServices<Ghre_Plan, Ghre_PlanDto, InsertGhre_PlanInput, EditGhre_PlanInput>, IGhre_PlanServices
{
private readonly IBaseRepository<Ghre_Plan> _dal;
public Ghre_PlanServices(ICaching caching, IBaseRepository<Ghre_Plan> dal)
private readonly ICommonServices _commonServices;
public Ghre_PlanServices(ICaching caching, IBaseRepository<Ghre_Plan> dal, ICommonServices commonServices)
{
this._dal = dal;
base.BaseDal = dal;
base._caching = caching;
_commonServices = commonServices;
}
public override async Task<ServicePageResult<Ghre_PlanDto>> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true)
{
var result = await base.QueryFilterPage(filter, condition, IsEnable);
int? year = null;
if (filter.jsonParam != null)
foreach (JProperty jProperty in filter.jsonParam.Properties())
{
var name = jProperty.Name;
var value = jProperty.Value.ToString();
if (name == "Year")
{
var jsonParam = JsonHelper.JsonToObj<JsonParam>(value);
year = jsonParam.columnValue.ObjToInt();
}
}
var DT_TableDataT1 = result.result.DT_TableDataT1;
var deptIds = DT_TableDataT1.Select(x => x.DeptId).Distinct().ToList();
@ -29,7 +45,26 @@ public class Ghre_PlanServices : BaseServices<Ghre_Plan, Ghre_PlanDto, InsertGhr
if (DT_TableDataT1[i].StaffIds.IsNotEmptyOrNull())
staffIds.AddRange(JsonHelper.JsonToObj<List<int>>(DT_TableDataT1[i].StaffIds));
DT_TableDataT1[i].TrainCategory = await GetParaLabel("TrainingCategory", DT_TableDataT1[i].TrainCategory);
DT_TableDataT1[i].Month = await GetParaLabel("MonthSelect", DT_TableDataT1[i].Month);
if (DT_TableDataT1[i].Month.IsNotEmptyOrNull())
DT_TableDataT1[i].Months = JsonHelper.JsonToObj<List<string>>(DT_TableDataT1[i].Month);
//DT_TableDataT1[i].Month = await GetParaLabel("MonthSelect", DT_TableDataT1[i].Month);
if (DT_TableDataT1[i].Months.Any())
DT_TableDataT1[i].Months.ForEach(x =>
{
if (x.ObjToInt() == 1) DT_TableDataT1[i].M1 = "✔";
else if (x.ObjToInt() == 2) DT_TableDataT1[i].M2 = "✔";
else if (x.ObjToInt() == 3) DT_TableDataT1[i].M3 = "✔";
else if (x.ObjToInt() == 4) DT_TableDataT1[i].M4 = "✔";
else if (x.ObjToInt() == 5) DT_TableDataT1[i].M5 = "✔";
else if (x.ObjToInt() == 6) DT_TableDataT1[i].M6 = "✔";
else if (x.ObjToInt() == 7) DT_TableDataT1[i].M7 = "✔";
else if (x.ObjToInt() == 8) DT_TableDataT1[i].M8 = "✔";
else if (x.ObjToInt() == 9) DT_TableDataT1[i].M9 = "✔";
else if (x.ObjToInt() == 10) DT_TableDataT1[i].M10 = "✔";
else if (x.ObjToInt() == 11) DT_TableDataT1[i].M11 = "✔";
else if (x.ObjToInt() == 12) DT_TableDataT1[i].M12 = "✔";
});
}
staffIds = staffIds.Distinct().ToList();
var staffs = await Db.Queryable<Ghra_Staff>().Where(x => staffIds.Contains(x.StaffID)).ToListAsync();
@ -47,10 +82,39 @@ public class Ghre_PlanServices : BaseServices<Ghre_Plan, Ghre_PlanDto, InsertGhr
DT_TableDataT1[i].StaffNames = string.Join("、", staffs.Where(x => staffIds1.Contains(x.StaffID)).Select(x => x.StaffName));
}
if (DT_TableDataT1[i].CourseId.IsNotEmptyOrNull() && DT_TableDataT1[i].CourseName.IsNullOrEmpty())
DT_TableDataT1[i].CourseName = courses.Where(x => x.Id == DT_TableDataT1[i].CourseId).Select(x => x.CourseName).FirstOrDefault();
if (DT_TableDataT1[i].DeptId.IsNotEmptyOrNull())
DT_TableDataT1[i].DeptName = depts.Where(x => x.DeptID == DT_TableDataT1[i].DeptId).Select(x => x.DeptName).FirstOrDefault();
if (DT_TableDataT1[i].SchoolId.IsNotEmptyOrNull())
DT_TableDataT1[i].SchoolName = schools.Where(x => x.Id == DT_TableDataT1[i].SchoolId).Select(x => x.SchoolName).FirstOrDefault();
}
ModuleParam param = new ModuleParam()
{
langId = filter.langId,
menuName = filter.menuName
};
var module = await _commonServices.GetModuleInfoAsync(param);
result.result.JM_TableColumnT1 = module.Data.JM_TableColumnT1;
var yearField = module.Data.JM_TableColumnT1.TableColumn.Where(x => x.field == "Year").SingleOrDefault();
if (year != yearField?.searchColumnDefaultValue.ObjToInt())
{
result.result.JM_TableColumnT1.TableColumn?.ForEach(x =>
{
if (x.GroupName == "计划年月")
{
int month = x.field.Replace("M", null).Replace("_F", null).ObjToInt();
x.label = year + "-" + (month < 10 ? "0" + month : month);
if (month == 12)
year++;
}
});
}
return result;
}
@ -58,8 +122,12 @@ public class Ghre_PlanServices : BaseServices<Ghre_Plan, Ghre_PlanDto, InsertGhr
public override async Task<long> Add(InsertGhre_PlanInput entity)
{
if (entity.StaffIdList != null)
entity.StaffIds = JsonHelper.ObjToJson(entity.StaffIdList);
if (entity.StaffId != null)
entity.StaffIds = JsonHelper.ObjToJson(entity.StaffId.OrderBy(n => n).ToList());
if (entity.StaffId.IsNotEmptyOrNull() && entity.StaffId.Count > 0)
entity.TrainNum = entity.StaffId.Count;
if (entity.Months != null)
entity.Month = JsonHelper.ObjToJson(entity.Months.OrderBy(n => n).ToList());
var result = await base.Add(entity);
return result;
@ -67,8 +135,13 @@ public class Ghre_PlanServices : BaseServices<Ghre_Plan, Ghre_PlanDto, InsertGhr
public override async Task<bool> Update(long Id, EditGhre_PlanInput editModel)
{
if (editModel.StaffIdList != null)
editModel.StaffIds = JsonHelper.ObjToJson(editModel.StaffIdList);
if (editModel.StaffId != null)
editModel.StaffIds = JsonHelper.ObjToJson(editModel.StaffId);
if (editModel.StaffId.IsNotEmptyOrNull() && editModel.StaffId.Count > 0)
editModel.TrainNum = editModel.StaffId.Count;
if (editModel.Months != null)
editModel.Month = JsonHelper.ObjToJson(editModel.Months.OrderBy(n => n).ToList());
var result = await base.Update(Id, editModel, null, ["Status"]);
return result;
@ -77,19 +150,22 @@ public class Ghre_PlanServices : BaseServices<Ghre_Plan, Ghre_PlanDto, InsertGhr
public override async Task<ServiceFormResult<Ghre_PlanDto>> QueryForm(QueryForm body)
{
var result = await base.QueryForm(body);
string StaffIds = result.result.DT_TableDataT1[0].StaffIds;
string Month = result.result.DT_TableDataT1[0].Month;
if (!string.IsNullOrWhiteSpace(StaffIds))
result.result.DT_TableDataT1[0].StaffIdList = JsonConvert.DeserializeObject<List<int>>(StaffIds);
return result;
result.result.DT_TableDataT1[0].StaffId = JsonConvert.DeserializeObject<List<int>>(StaffIds);
if (!string.IsNullOrWhiteSpace(Month))
result.result.DT_TableDataT1[0].Months = JsonConvert.DeserializeObject<List<string>>(Month);
if (result.result.DT_TableDataT1[0].TrainNum != null && result.result.DT_TableDataT1[0].TrainDays != null)
result.result.DT_TableDataT1[0].TotalDays = result.result.DT_TableDataT1[0].TrainNum * result.result.DT_TableDataT1[0].TrainDays;
return result;
}
public async Task<ServiceResult<long>> InsertByStatus(InsertGhre_PlanInput insertModel, string status)
{
if (insertModel.StaffIdList != null)
insertModel.StaffIds = JsonHelper.ObjToJson(insertModel.StaffIdList);
if (insertModel.StaffId != null)
insertModel.StaffIds = JsonHelper.ObjToJson(insertModel.StaffId);
var data = ServiceResult<long>.OprateSuccess("新增成功", 0);
insertModel.Status = status;
var id = await Add(insertModel);

@ -5675,6 +5675,11 @@
课程ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.CourseName">
<summary>
课程
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.StaffIds">
<summary>
培训对象
@ -5690,11 +5695,41 @@
合计预算
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.InOrOut">
<summary>
内外训
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.Month">
<summary>
计划实施月份
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.TrainNum">
<summary>
需求人数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.TrainDays">
<summary>
培训天数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.StatusQuo">
<summary>
现状
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.DesiredResult">
<summary>
培训预期效果
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.Leader">
<summary>
指导者
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_PlanBase.Status">
<summary>
状态
@ -21531,6 +21566,11 @@
课程ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.CourseName">
<summary>
课程
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.StaffIds">
<summary>
培训对象
@ -21546,11 +21586,41 @@
合计预算
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.InOrOut">
<summary>
内外训
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.Month">
<summary>
计划实施月份
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.TrainNum">
<summary>
需求人数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.TrainDays">
<summary>
培训天数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.StatusQuo">
<summary>
现状
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.DesiredResult">
<summary>
培训预期效果
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.Leader">
<summary>
指导者
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Plan.Status">
<summary>
状态

Loading…
Cancel
Save