简历预览优化

master
xiaochanghai 6 months ago
parent 6c7b9e9f52
commit 39ab0df637
  1. 24
      Tiobon.Core.Api/Controllers/Ghrh/Ghrh_ResumeTemplatePreviewController.cs
  2. 13
      Tiobon.Core.Api/Program.cs
  3. 645
      Tiobon.Core.Api/Views/Ghrh_ResumeTemplatePreview/Index.cshtml
  4. 107
      Tiobon.Core.Api/wwwroot/css/resume.css
  5. 11
      Tiobon.Core.Services/Ghrh/Ghrh_ResumeServices.cs
  6. 2
      Tiobon.Core.Services/Tiobon.Core.Services.csproj

@ -2,6 +2,7 @@
using SqlSugar; using SqlSugar;
using System.Dynamic; using System.Dynamic;
using Tiobon.Core.Common.DB.Dapper.Extensions; using Tiobon.Core.Common.DB.Dapper.Extensions;
using Tiobon.Core.Common.Extensions;
using Tiobon.Core.Model.ViewModels.Extend; using Tiobon.Core.Model.ViewModels.Extend;
namespace Tiobon.Core.Api.Controllers; namespace Tiobon.Core.Api.Controllers;
@ -218,12 +219,17 @@ END";
if (o.field == "RegisteredType") o.field = "RegisteredTypeLabel"; if (o.field == "RegisteredType") o.field = "RegisteredTypeLabel";
if (o.field == "EduDegree") o.field = "EduDegreeLabel"; if (o.field == "EduDegree") o.field = "EduDegreeLabel";
if (o.field == "ApplyStatus") o.field = "ApplyStatusLabel"; if (o.field == "ApplyStatus") o.field = "ApplyStatusLabel";
if (o.field == "Channel")
{
o.field = "ChannelLabel";
}
}); });
x.children = x.children.Where(o => o.field != "EduDegreeLabel" x.children = x.children.Where(o => o.field != "EduDegree"
&& o.field != "GenderLabel" && o.field != "Gende"
&& o.field != "StaffName" && o.field != "StaffName"
&& o.field != "ApplyStatusLabel" && o.field != "ApplyStatus"
&& o.field != "Channel"
&& o.field != "WorkYears" && o.field != "WorkYears"
&& o.field != "WorkYears" && o.field != "WorkYears"
&& o.field != "Age").ToList(); && o.field != "Age").ToList();
@ -292,11 +298,21 @@ END";
columnNames.Add("RegisteredTypeLabel"); columnNames.Add("RegisteredTypeLabel");
columnNames.Add("EduDegreeLabel"); columnNames.Add("EduDegreeLabel");
columnNames.Add("ApplyStatusLabel"); columnNames.Add("ApplyStatusLabel");
columnNames.Add("ChannelLabel");
columnNames.ForEach(x => columnNames.ForEach(x =>
{ {
var value = entity.GetPropertyValue(x); var value = entity.GetPropertyValue(x);
dicts.Add(x, value); if (x == "RemarkSz")
{
if (value.ToString().IsNotEmptyOrNull())
value = "<div>" + value.ToString().Replace("\n", "</br>") + "</div>";
dicts.Add(x, value);
}
else
dicts.Add(x, value);
}); });
ViewBag.BaseDic = dicts; ViewBag.BaseDic = dicts;
ViewBag.entity = entity; ViewBag.entity = entity;
#endregion #endregion

@ -1,6 +1,4 @@
using System.IdentityModel.Tokens.Jwt; using Autofac;
using System.Reflection;
using Autofac;
using Autofac.Extensions.DependencyInjection; using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.AspNetCore.Server.Kestrel.Core;
@ -9,9 +7,11 @@ using Microsoft.IdentityModel.Logging;
using Newtonsoft.Json.Converters; using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization; using Newtonsoft.Json.Serialization;
using Serilog; using Serilog;
using Tiobon.Core.Common.DB.Dapper.Extensions; using System.IdentityModel.Tokens.Jwt;
using System.Reflection;
using Tiobon.Core; using Tiobon.Core;
using Tiobon.Core.Common.Core; using Tiobon.Core.Common.Core;
using Tiobon.Core.Common.DB.Dapper.Extensions;
using Tiobon.Core.Extensions; using Tiobon.Core.Extensions;
using Tiobon.Core.Extensions.Apollo; using Tiobon.Core.Extensions.Apollo;
using Tiobon.Core.Extensions.Middlewares; using Tiobon.Core.Extensions.Middlewares;
@ -19,9 +19,8 @@ using Tiobon.Core.Extensions.ServiceExtensions;
using Tiobon.Core.Filter; using Tiobon.Core.Filter;
using Tiobon.Core.Hubs; using Tiobon.Core.Hubs;
using Tiobon.Core.Serilog.Utility; using Tiobon.Core.Serilog.Utility;
using DinkToPdf.Contracts; using WkHtmlToPdfDotNet;
using DinkToPdf; using WkHtmlToPdfDotNet.Contracts;
using Microsoft.Extensions.FileProviders;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);

@ -16,7 +16,112 @@
bool displaySignatureArea = ViewBag.DisplaySignatureArea; bool displaySignatureArea = ViewBag.DisplaySignatureArea;
} }
<link rel="stylesheet" href="@ViewBag.CssUrl"> <link rel="stylesheet" href="@ViewBag.CssUrl">
<style>
body {
color: #000000d9;
font-size: 14px;
font-family: Noto Sans SC, PingFang SC, tahoma, arial, Hiragino Sans GB, Hiragino Sans GB W3, Microsoft Yahei, STHeitiSC-Light, Helvetica-Light, sans-serif !important;
page-break-before: always;
}
.ghr-preview-staff-info .pageContainer {
background-color: #fff;
overflow-y: auto;
overflow: hidden;
padding: 10px;
}
.pageContainer .a4page.displayMode {
margin: 20px auto;
display: flex;
flex-wrap: wrap;
}
.ghr-preview-staff-resume-title {
height: 26px;
line-height: 26px;
font-size: 18px;
color: #242424;
margin: 10px 0;
border-left: 2px solid #ff9300;
padding-left: 15px;
width: 100%
}
.page-break-inside {
page-break-inside: avoid;
}
.grid-container {
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: center;
-webkit-box-pack: center;
margin: 5px 0;
min-height: 25px;
line-height: 25px;
}
.grid-item {
-webkit-box-flex: 1;
flex: 1;
width: 50%;
}
.grid-item .label {
vertical-align: top;
width: 150px;
/* -webkit-box-flex: 1; */
text-align: right;
display: inline-block;
}
.grid-item .value {
/* -webkit-box-flex: 1; */
display: inline-block;
}
.staffPhoto {
width: 100px;
height: 100px;
display: inline-block;
vertical-align: top;
position: relative;
padding: 10px;
}
.staffPhoto img {
width: 100%;
height: 100%;
-o-object-fit: contain;
object-fit: contain;
}
.staffBaseInfo {
height: 100px;
display: inline-block;
vertical-align: top;
padding-left: 25px;
}
.staffName {
font-size: 20px;
margin-top: 10px;
}
.staffEName {
font-size: 16px;
color: #5d5d5d;
}
.staffHumanResourcesMsg {
font-size: 16px;
color: #5d5d5d;
margin-top: 15px;
}
</style>
<div class="ghr-preview-staff-info"> <div class="ghr-preview-staff-info">
<div class="pageContainer"> <div class="pageContainer">
@ -26,84 +131,195 @@
{ {
if (item.tabKey == "Photo") if (item.tabKey == "Photo")
{ {
<div class="a4page displayMode page-break-inside" id="pageIndex-0"> <div class="grid-container">
<div class="ghr-preview-staff-base-info" id="info"> <div class="grid-item staffPhoto">
<div class="staffPhoto"> @if (!string.IsNullOrEmpty(entity.PhotoUrl))
@if (!string.IsNullOrEmpty(entity.PhotoUrl)) {
{ <img src="@frontUrl@entity.PhotoUrl" alt="">
<img src="@frontUrl@entity.PhotoUrl" alt=""> }
} </div>
</div> <div class="grid-item">
<div class="staffBaseInfo"> <div class="staffName">@(entity.StaffName)&nbsp;</div>
<div class="staffName">@(entity.StaffName)&nbsp;</div> <div class="staffEName">@(entity.ApplyStatusLabel)&nbsp;</div>
<div class="staffEName">@(entity.ApplyStatusLabel)&nbsp;</div> <div class="staffHumanResourcesMsg">经验:@(entity.WorkYears)年工作经验&nbsp; <span><span>|</span><span>年龄:@(entity.Age)</span> &nbsp; </span><span><span>|</span><span>学历: @(entity.EduDegreeLabel)</span> &nbsp; </span></div>
<div class="staffHumanResourcesMsg">经验:@(entity.WorkYears)年工作经验&nbsp; <span><span>|</span><span>年龄:@(entity.Age)</span> &nbsp; </span><span><span>|</span><span>学历: @(entity.EduDegreeLabel)</span> &nbsp; </span></div>
</div>
</div> </div>
</div> </div>
} }
else if (item.tabKey == "Base") else if (item.tabKey == "Base")
{ {
<div class="a4page displayMode page-break-inside" id="pageIndex-0"> <div>
<div class="ghr-preview-staff-resume-title" id="Base" style="float:left;"> <div class="ghr-preview-staff-resume-title" id="@item.tabKey">
@item.tabName @item.tabName
</div> </div>
@if (item.children != null && item.children.Any()) @if (item.children != null && item.children.Any())
@foreach (var children in item.children) {
for (int i = 0; i < item.children.Count; i = i + 2)
{ {
<div class="ghr-preview-staff-resume-block-item" id="Base-0-StaffName" style="float:left;width:@(children.label=="备注"?"100%": "50%")"> if (item.children[i].field == "RemarkSz" || ((i + 1) < item.children.Count && item.children[i + 1].field == "RemarkSz"))
<div class="label">@(children.label):</div> {
<div class="itemValue"> <div class="grid-container page-break-inside">
@{ <div class="grid-item ">
if (BaseDic.ContainsKey(children.field)) <div class="label">@(item.children[i].label):</div>
@if (item.children[i].field == "Birthday" || item.children[i].field == "GraduateDate" || item.children[i].field == "Indate")
{
<div class="value">
@DateTimeHelper.ConvertToDayString(BaseDic[item.children[i].field])
</div>
}
else
{ {
if (children.field == "Birthday" || children.field == "GraduateDate" || children.field == "Indate") <div class="value">@Html.Raw(BaseDic[item.children[i].field])</div>
@DateTimeHelper.ConvertToDayString(BaseDic[children.field]) }
</div>
</div>
<div class="grid-container page-break-inside">
@if ((i + 1) < item.children.Count)
{
<div class="grid-item">
<div class="label">@(item.children[i + 1].label):</div>
@if (item.children[i + 1].field == "Birthday" || item.children[i + 1].field == "GraduateDate" || item.children[i + 1].field == "Indate")
{
<div class="value">
@DateTimeHelper.ConvertToDayString(BaseDic[item.children[i + 1].field])
</div>
}
else else
@BaseDic[children.field] {
<div class="value">@Html.Raw(BaseDic[item.children[i + 1].field])</div>
}
</div>
}
</div>
}
else
{
<div class="grid-container page-break-inside">
<div class="grid-item ">
<div class="label">@(item.children[i].label):</div>
@if (item.children[i].field == "Birthday" || item.children[i].field == "GraduateDate" || item.children[i].field == "Indate")
{
<div class="value">
@DateTimeHelper.ConvertToDayString(BaseDic[item.children[i].field])
</div>
} }
else
{
<div class="value">@BaseDic[item.children[i].field]</div>
}
</div>
@if ((i + 1) < item.children.Count)
{
<div class="grid-item">
<div class="label">@(item.children[i + 1].label):</div>
@if (item.children[i + 1].field == "Birthday" || item.children[i + 1].field == "GraduateDate" || item.children[i + 1].field == "Indate")
{
<div class="value">
@DateTimeHelper.ConvertToDayString(BaseDic[item.children[i + 1].field])
</div>
}
else
{
<div class="value">@BaseDic[item.children[i + 1].field]</div>
}
</div>
} }
</div> </div>
</div> }
} }
</div> }
</div>
} }
else if (item.tabKey == "Family") else if (item.tabKey == "Family")
{ {
@if (FamilyDic.Count > 0) @if (FamilyDic.Count > 0)
{ {
<div class="a4page displayMode page-break-inside" id="pageIndex-0"> <div>
@if (FamilyDic.Count > 0) <div class="ghr-preview-staff-resume-title" id="@item.tabKey">
{ @item.tabName
<div class="ghr-preview-staff-resume-title" id="Base" style="float:left;"> </div>
@item.tabName @for (var j = 0; j < FamilyDic.Count; j++)
</div>
}
@for (var i = 0; i < FamilyDic.Count; i++)
{ {
@if (i > 0) @if (j > 0)
{ {
<div style="margin-top:20px;width:100%;float: left;"></div> <div style="margin-top:20px"></div>
} }
@if (item.children != null && item.children.Any()) @if (item.children != null && item.children.Any())
{ {
@foreach (var children in item.children) for (int i = 0; i < item.children.Count; i = i + 2)
{ {
<div class="ghr-preview-staff-resume-block-item" id="Base-0-StaffName" style="float:left;width:@(children.label=="备注"?"100%": "50%")"> if (item.children[i].label == "备注" || ((i + 1) < item.children.Count && item.children[i + 1].label == "备注"))
<div class="label">@(children.label):</div> {
<div class="itemValue"> <div class="grid-container page-break-inside">
@{ <div class="grid-item ">
if (FamilyDic[i].ContainsKey(children.field)) <div class="label">@(item.children[i].label):</div>
@if (item.children[i].field == "Birth")
{ {
if (children.field == "Birth") <div class="value">
@DateTimeHelper.ConvertToDayString(FamilyDic[i][children.field]) @DateTimeHelper.ConvertToDayString(FamilyDic[j][item.children[i].field])
</div>
}
else
{
<div class="value">@FamilyDic[j][item.children[i].field]</div>
}
</div>
</div>
<div class="grid-container page-break-inside">
@if ((i + 1) < item.children.Count)
{
<div class="grid-item">
<div class="label">@(item.children[i + 1].label):</div>
@if (item.children[i + 1].field == "Birth")
{
<div class="value">
@DateTimeHelper.ConvertToDayString(FamilyDic[j][item.children[i + 1].field])
</div>
}
else else
@FamilyDic[i][children.field] {
<div class="value">@FamilyDic[j][item.children[i + 1].field]</div>
}
</div>
}
</div>
}
else
{
<div class="grid-container page-break-inside">
<div class="grid-item ">
<div class="label">@(item.children[i].label):</div>
@if (item.children[i].field == "Birth")
{
<div class="value">
@DateTimeHelper.ConvertToDayString(FamilyDic[j][item.children[i].field])
</div>
}
else
{
<div class="value">@FamilyDic[j][item.children[i].field]</div>
} }
</div>
@if ((i + 1) < item.children.Count)
{
<div class="grid-item">
<div class="label">@(item.children[i + 1].label):</div>
@if (item.children[i + 1].field == "Birth")
{
<div class="value">
@DateTimeHelper.ConvertToDayString(FamilyDic[j][item.children[i + 1].field])
</div>
}
else
{
<div class="value">@FamilyDic[j][item.children[i + 1].field]</div>
}
</div>
} }
</div> </div>
</div> }
} }
} }
} }
@ -112,153 +328,283 @@
} }
else if (item.tabKey == "Education") else if (item.tabKey == "Education")
{ {
<div class="a4page displayMode page-break-inside" id="pageIndex-0"> @if (EducationDic.Count > 0)
@{ {
if (EducationDic.Count > 0) <div>
{
<div class="ghr-preview-staff-resume-title" id="Base" style="float:left;"> <div class="ghr-preview-staff-resume-title" id="@item.tabKey">
@item.tabName @item.tabName
</div> </div>
} @for (var j = 0; j < EducationDic.Count; j++)
for (var i = 0; i < EducationDic.Count; i++)
{ {
if (i > 0) @if (j > 0)
{ {
<div style="margin-top:20px;width:100%;float: left;"></div> <div style="margin-top:20px"></div>
} }
if (item.children != null && item.children.Any()) @if (item.children != null && item.children.Any())
foreach (var children in item.children) {
for (int i = 0; i < item.children.Count; i = i + 2)
{ {
<div class="ghr-preview-staff-resume-block-item" id="Base-0-StaffName" style="float:left;width:@(children.label=="备注"?"100%": "50%")"> if (item.children[i].label == "备注" || ((i + 1) < item.children.Count && item.children[i + 1].label == "备注"))
<div class="label">@(children.label):</div> {
<div class="itemValue"> <div class="grid-container page-break-inside">
@{ <div class="grid-item ">
if (EducationDic[i].ContainsKey(children.field)) <div class="label">@(item.children[i].label):</div>
@if (item.children[i].field == "Birth")
{ {
@EducationDic[i][children.field] <div class="value">
@DateTimeHelper.ConvertToDayString(EducationDic[j][item.children[i].field])
</div>
} }
else
{
<div class="value">@EducationDic[j][item.children[i].field]</div>
}
</div>
</div>
<div class="grid-container page-break-inside">
@if ((i + 1) < item.children.Count)
{
<div class="grid-item">
<div class="label">@(item.children[i + 1].label):</div>
@if (item.children[i + 1].field == "Birth")
{
<div class="value">
@DateTimeHelper.ConvertToDayString(EducationDic[j][item.children[i + 1].field])
</div>
}
else
{
<div class="value">@EducationDic[j][item.children[i + 1].field]</div>
}
</div>
} }
</div> </div>
</div> }
else
{
<div class="grid-container page-break-inside">
<div class="grid-item ">
<div class="label">@(item.children[i].label):</div>
@if (item.children[i].field == "Birth")
{
<div class="value">
@DateTimeHelper.ConvertToDayString(EducationDic[j][item.children[i].field])
</div>
}
else
{
<div class="value">@EducationDic[j][item.children[i].field]</div>
}
</div>
@if ((i + 1) < item.children.Count)
{
<div class="grid-item">
<div class="label">@(item.children[i + 1].label):</div>
@if (item.children[i + 1].field == "Birth")
{
<div class="value">
@DateTimeHelper.ConvertToDayString(EducationDic[j][item.children[i + 1].field])
</div>
}
else
{
<div class="value">@EducationDic[j][item.children[i + 1].field]</div>
}
</div>
}
</div>
}
} }
}
} }
} </div>
</div> }
} }
else if (item.tabKey == "WorkExp") else if (item.tabKey == "WorkExp")
{ {
<div class="a4page displayMode page-break-inside" id="pageIndex-0"> @if (WorkExpDic.Count > 0)
@{ {
if (WorkExpDic.Count > 0) <div>
{ <div class="ghr-preview-staff-resume-title" id="@item.tabKey">
<div class="ghr-preview-staff-resume-title" id="Base" style="float:left;"> @item.tabName
@item.tabName </div>
</div> @for (var j = 0; j < WorkExpDic.Count; j++)
}
for (var i = 0; i < WorkExpDic.Count; i++)
{ {
if (i > 0) @if (j > 0)
{ {
<div style="margin-top:20px;width:100%;float: left;"></div> <div style="margin-top:20px"></div>
} }
if (item.children != null && item.children.Any()) @if (item.children != null && item.children.Any())
foreach (var children in item.children) {
for (int i = 0; i < item.children.Count; i = i + 2)
{ {
<div class="ghr-preview-staff-resume-block-item" id="Base-0-StaffName" style="float:left;width:@(children.label=="备注"?"100%": "50%")"> if (item.children[i].label == "备注" || ((i + 1) < item.children.Count && item.children[i + 1].label == "备注"))
<div class="label">@(children.label):</div> {
<div class="itemValue"> <div class="grid-container page-break-inside">
@{ <div class="grid-item ">
if (WorkExpDic[i].ContainsKey(children.field)) <div class="label">@(item.children[i].label):</div>
{ <div class="value">@WorkExpDic[j][item.children[i].field]</div>
@WorkExpDic[i][children.field] </div>
} </div>
@if ((i + 1) < item.children.Count)
{
<div class="grid-container page-break-inside">
<div class="grid-item">
<div class="label">@(item.children[i + 1].label):</div>
<div class="value">@WorkExpDic[j][item.children[i + 1].field]</div>
</div>
</div>
}
}
else
{
<div class="grid-container page-break-inside">
<div class="grid-item ">
<div class="label">@(item.children[i].label):</div>
<div class="value">@WorkExpDic[j][item.children[i].field]</div>
</div>
@if ((i + 1) < item.children.Count)
{
<div class="grid-item">
<div class="label">@(item.children[i + 1].label):</div>
<div class="value">@WorkExpDic[j][item.children[i + 1].field]</div>
</div>
} }
</div> </div>
</div> }
} }
}
} }
} </div>
</div> }
} }
else if (item.tabKey == "Licence") else if (item.tabKey == "Licence")
{ {
<div class="a4page displayMode page-break-inside" id="pageIndex-0"> @if (LicenceDic.Count > 0)
@{ {
if (LicenceDic.Count > 0) <div>
{ <div class="ghr-preview-staff-resume-title" id="@item.tabKey">
<div class="ghr-preview-staff-resume-title" id="Base" style="float:left;"> @item.tabName
@item.tabName </div>
</div> @for (var j = 0; j < LicenceDic.Count; j++)
}
for (var i = 0; i < LicenceDic.Count; i++)
{ {
if (i > 0) @if (j > 0)
{ {
<div style="margin-top:20px;width:100%;float: left;"></div> <div style="margin-top:20px"></div>
} }
if (item.children != null && item.children.Any()) @if (item.children != null && item.children.Any())
foreach (var children in item.children) {
for (int i = 0; i < item.children.Count; i = i + 2)
{ {
<div class="ghr-preview-staff-resume-block-item" id="Base-0-StaffName" style="float:left;width:@(children.label=="备注"?"100%": "50%")"> if (item.children[i].label == "备注" || ((i + 1) < item.children.Count && item.children[i + 1].label == "备注"))
<div class="label">@(children.label):</div> {
<div class="itemValue"> <div class="grid-container page-break-inside">
@{ <div class="grid-item ">
if (LicenceDic[i].ContainsKey(children.field)) <div class="label">@(item.children[i].label):</div>
{ <div class="value">@LicenceDic[j][item.children[i].field]</div>
@LicenceDic[i][children.field] </div>
} </div>
@if ((i + 1) < item.children.Count)
{
<div class="grid-container page-break-inside">
<div class="grid-item">
<div class="label">@(item.children[i + 1].label):</div>
<div class="value">@LicenceDic[j][item.children[i + 1].field]</div>
</div>
</div>
}
}
else
{
<div class="grid-container page-break-inside">
<div class="grid-item ">
<div class="label">@(item.children[i].label):</div>
<div class="value">@LicenceDic[j][item.children[i].field]</div>
</div>
@if ((i + 1) < item.children.Count)
{
<div class="grid-item">
<div class="label">@(item.children[i + 1].label):</div>
<div class="value">@LicenceDic[j][item.children[i + 1].field]</div>
</div>
} }
</div> </div>
</div> }
} }
}
} }
} </div>
</div> }
} }
else if (item.tabKey == "Training") else if (item.tabKey == "Training")
{ {
<div class="a4page displayMode page-break-inside" id="pageIndex-0"> @if (TrainingDic.Count > 0)
@{ {
if (TrainingDic.Count > 0) <div>
{ <div class="ghr-preview-staff-resume-title" id="@item.tabKey">
<div class="ghr-preview-staff-resume-title" id="Base" style="float:left;"> @item.tabName
@item.tabName </div>
</div> @for (var j = 0; j < TrainingDic.Count; j++)
}
for (var i = 0; i < TrainingDic.Count; i++)
{ {
if (i > 0) @if (j > 0)
{ {
<div style="margin-top:20px;width:100%;float: left;"></div> <div style="margin-top:20px"></div>
} }
if (item.children != null && item.children.Any()) @if (item.children != null && item.children.Any())
foreach (var children in item.children) {
for (int i = 0; i < item.children.Count; i = i + 2)
{ {
<div class="ghr-preview-staff-resume-block-item" id="Base-0-StaffName" style="float:left;width:@(children.label=="培训说明"?"100%": "50%")"> if (item.children[i].label == "培训说明" || ((i + 1) < item.children.Count && item.children[i + 1].label == "培训说明"))
<div class="label">@(children.label):</div> {
<div class="itemValue"> <div class="grid-container page-break-inside">
@{ <div class="grid-item ">
if (TrainingDic[i].ContainsKey(children.field)) <div class="label">@(item.children[i].label):</div>
{ <div class="value">@TrainingDic[j][item.children[i].field]</div>
@TrainingDic[i][children.field] </div>
} </div>
<div class="grid-container page-break-inside">
@if ((i + 1) < item.children.Count)
{
<div class="grid-item">
<div class="label">@(item.children[i + 1].label):</div>
<div class="value">@TrainingDic[j][item.children[i + 1].field]</div>
</div>
} }
</div> </div>
</div> }
else
{
<div class="grid-container page-break-inside">
<div class="grid-item ">
<div class="label">@(item.children[i].label):</div>
<div class="value">@TrainingDic[j][item.children[i].field]</div>
</div>
@if ((i + 1) < item.children.Count)
{
<div class="grid-item">
<div class="label">@(item.children[i + 1].label):</div>
<div class="value">@TrainingDic[j][item.children[i + 1].field]</div>
</div>
}
</div>
}
} }
}
} }
} </div>
</div> }
} }
else if (item.tabKey == "Statement") else if (item.tabKey == "Statement")
{ {
<div class="a4page displayMode page-break-inside" id="pageIndex-0">
<div>
@{ @{
var ii = 0; var ii = 0;
if (item.children != null && item.children.Any()) if (item.children != null && item.children.Any())
{ {
<div class="ghr-preview-staff-resume-title" id="Base" style="float:left;"> <div class="ghr-preview-staff-resume-title" id="@item.tabKey">
@item.tabName @item.tabName
</div> </div>
} }
@ -266,13 +612,8 @@
if (item.children != null && item.children.Any()) if (item.children != null && item.children.Any())
foreach (var children in item.children) foreach (var children in item.children)
{ {
<div class="grid-container page-break-inside">
// if (ii > 0) <div class="grid-item ">
// {
// <div style="margin-top:5px;width:100%;float:left;"></div>
// }
<div class="ghr-preview-staff-resume-block-item" id="Base-0-StaffName" style="display: flex;width:80%">
<div class="itemValue" style="float: left;width: 75%;">
<p style="margin: 0;padding: 5px;"> <p style="margin: 0;padding: 5px;">
@(ii + 1).&nbsp;@(children.placeholder): @{ @(ii + 1).&nbsp;@(children.placeholder): @{
ii++; ii++;
@ -287,11 +628,9 @@
} }
</p> </p>
</div> </div>
<div class="label" style="float: left;width: 25%;">
</div>
</div> </div>
} }
<div class="ghr-preview-staff-resume-block-item" style="display: flex;width:90%;padding-left: 10px;"> <div class=" page-break-inside">
<p> <p>
@Html.Raw(ViewBag.StatementRemark) @Html.Raw(ViewBag.StatementRemark)
</p> </p>

@ -1,109 +1,2 @@
 
body {
color: #000000d9;
font-size: 14px;
font-family: Noto Sans SC, PingFang SC, tahoma, arial, Hiragino Sans GB, Hiragino Sans GB W3, Microsoft Yahei, STHeitiSC-Light, Helvetica-Light, sans-serif !important;
page-break-before: always;
}
.ghr-preview-staff-info .pageContainer {
background-color: #fff;
overflow-y: auto;
}
.ghr-preview-staff-info .pageContainer .a4page {
width: 794px;
/* padding: 40px; */
box-sizing: border-box;
/* page-break-after: always; */
}
.pageContainer .a4page.displayMode {
margin: 20px auto;
/* border: 1px #d3d3d3 solid;
box-shadow: 0 0 5px #0000001a; */
/* display: flex; */
flex-wrap: wrap;
}
.ghr-preview-staff-base-info .staffPhoto {
width: 100px;
height: 100px;
display: inline-block;
vertical-align: top;
position: relative;
}
.ghr-preview-staff-base-info .staffPhoto img {
width: 100%;
height: 100%;
-o-object-fit: contain;
object-fit: contain;
}
.ghr-preview-staff-base-info .staffBaseInfo {
height: 100px;
display: inline-block;
vertical-align: top;
padding-left: 25px;
}
.ghr-preview-staff-base-info .staffBaseInfo .staffName {
font-size: 20px;
margin-top: 10px;
}
.ghr-preview-staff-base-info .staffBaseInfo .staffEName {
font-size: 16px;
color: #5d5d5d;
}
.ghr-preview-staff-base-info .staffBaseInfo .staffHumanResourcesMsg {
font-size: 16px;
color: #5d5d5d;
margin-top: 15px;
}
.ghr-preview-staff-resume-title {
height: 26px;
line-height: 26px;
font-size: 18px;
color: #242424;
margin: 10px 0;
border-left: 2px solid #ff9300;
padding-left: 15px;
width: 100%
}
.ghr-preview-staff-resume-block-item {
width: 50%;
display: inline-block;
vertical-align: top;
min-height: 25px;
word-break: break-all;
line-height: 25px;
margin: 5px 0;
flex-flow: row wrap;
}
.ghr-preview-staff-resume-block-item .label {
width: 150px;
display: inline-block;
vertical-align: top;
height: 25px;
line-height: 25px;
text-align: right;
}
.ghr-preview-staff-resume-block-item .itemValue {
display: inline-block;
vertical-align: top;
min-height: 25px;
line-height: 25px;
}
.page-break-inside {
page-break-inside: avoid;
}

@ -1,9 +1,9 @@
using DinkToPdf; using Microsoft.AspNetCore.Hosting;
using DinkToPdf.Contracts;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using System.IO.Compression; using System.IO.Compression;
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using static Tiobon.Core.Model.Consts; using static Tiobon.Core.Model.Consts;
namespace Tiobon.Core.Services; namespace Tiobon.Core.Services;
@ -3071,6 +3071,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
#endregion #endregion
#region 简历下载 #region 简历下载
public async Task<ServiceResult<string>> Download(List<long> ids) public async Task<ServiceResult<string>> Download(List<long> ids)
{ {
string frontUrl = AppSettings.app(["Startup", "FrontUrl"]); string frontUrl = AppSettings.app(["Startup", "FrontUrl"]);
@ -3103,15 +3104,15 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
GlobalSettings = globalSettings, GlobalSettings = globalSettings,
Objects = { objectSettings } Objects = { objectSettings }
}; };
string pathHeader = "wwwroot/files/pdf_files";
var fileName = entity.StaffName + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";
var fileBytes = _converter.Convert(pdf); var fileBytes = _converter.Convert(pdf);
string pathHeader = "wwwroot/files/pdf_files";
if (!Directory.Exists(pathHeader)) if (!Directory.Exists(pathHeader))
Directory.CreateDirectory(pathHeader); Directory.CreateDirectory(pathHeader);
var ms = new MemoryStream(fileBytes); var ms = new MemoryStream(fileBytes);
var file = new FormFile(ms, 0, ms.Length, Path.GetFileNameWithoutExtension(pathHeader), Path.GetFileName(pathHeader)); var file = new FormFile(ms, 0, ms.Length, Path.GetFileNameWithoutExtension(pathHeader), Path.GetFileName(pathHeader));
var fileName = entity.StaffName + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";
await using (var fs = System.IO.File.Create(pathHeader + "/" + fileName)) await using (var fs = System.IO.File.Create(pathHeader + "/" + fileName))
{ {
await file.CopyToAsync(fs); await file.CopyToAsync(fs);

@ -22,7 +22,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="AgileObjects.AgileMapper" Version="1.8.1" /> <PackageReference Include="AgileObjects.AgileMapper" Version="1.8.1" />
<PackageReference Include="Haukcode.DinkToPdf" Version="1.1.2" /> <PackageReference Include="Haukcode.WkHtmlToPdfDotNet" Version="1.5.95" />
</ItemGroup> </ItemGroup>

Loading…
Cancel
Save