167 lines
7.3 KiB
Plaintext
167 lines
7.3 KiB
Plaintext
@using CandidateReviewDataModels.Models
|
|
@using Microsoft.AspNetCore.Mvc.TagHelpers
|
|
@using CandidateReviewContracts.ViewModels
|
|
@model ResumeViewModel
|
|
|
|
@{
|
|
ViewData["Title"] = "Резюме";
|
|
bool userRole = APIClient.User?.Role == CandidateReviewDataModels.Enums.RoleEnum.Сотрудник || APIClient.User.Role == CandidateReviewDataModels.Enums.RoleEnum.Администратор;
|
|
}
|
|
|
|
<div class="container mt-5">
|
|
<div class="d-flex justify-content-between mb-4">
|
|
<div class="card-header">
|
|
<h2>@Model.Title</h2>
|
|
<img src="@(Model.PhotoFilePath ?? "https://cdn-icons-png.flaticon.com/512/18/18601.png")"
|
|
style="max-width: 150px; max-height: 150px; object-fit: cover; "
|
|
class="card-img-top img-fluid rounded-circle mx-auto d-block"
|
|
alt="Аватар пользователя" />
|
|
<input type="hidden" name="id" value="@Model?.Id" />
|
|
</div>
|
|
<button class="btn btn-secondary" onclick="window.history.back();">Назад</button>
|
|
</div>
|
|
|
|
<div class="card shadow-sm mb-4">
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<dl class="row">
|
|
<dt class="col-sm-4">Вакансия:</dt>
|
|
<dd class="col-sm-8 text-muted">@Model.VacancyName</dd>
|
|
|
|
<dt class="col-sm-4">Навыки:</dt>
|
|
<dd class="col-sm-8 text-muted">@Model.Skills</dd>
|
|
|
|
<dt class="col-sm-4">Статус:</dt>
|
|
<dd class="col-sm-8 text-muted">@Model.Status</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<dl class="row">
|
|
<dt class="col-sm-4">Опыт работы:</dt>
|
|
<dd class="col-sm-8 text-muted">@Model.Experience</dd>
|
|
|
|
<dt class="col-sm-4">Образование:</dt>
|
|
<dd class="col-sm-8 text-muted">@Model.Education</dd>
|
|
|
|
<dt class="col-sm-4">Описание:</dt>
|
|
<dd class="col-sm-8 text-muted">@Html.Raw(Model.Description)</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
|
|
@if (Model.Status == CandidateReviewDataModels.Enums.ResumeStatusEnum.Черновик)
|
|
{
|
|
<div class="mt-4 text-end">
|
|
<a asp-action="EditResume" asp-controller="Resume" class="btn btn-primary">Отправить на оценку</a>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
|
|
@if (userRole)
|
|
{
|
|
<h2 class="mb-4">Оценка резюме</h2>
|
|
|
|
<form method="post" asp-controller="Assessment" asp-action="AddAssessment">
|
|
<div class="row" id="criteriaList">
|
|
@if (ViewBag.Criterions != null)
|
|
{
|
|
<input type="hidden" name="ResumeId" value="@Model?.Id" />
|
|
@foreach (var criterion in ViewBag.Criterions)
|
|
{
|
|
var previousAssessment = Model.PreviousAssessments?.FirstOrDefault(a => a.Id == criterion.Id);
|
|
var isSelected = previousAssessment?.Id == criterion.Id ? "selected" : string.Empty;
|
|
|
|
<div class="row mb-3">
|
|
<div class="col-md-6">
|
|
<select name="criterionIds[]" class="form-control" required>
|
|
<option value="" disabled selected>Выберите критерий</option>
|
|
<option value="@criterion.Id" isSelected>@criterion.Name</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<input type="number" class="form-control" name="criteriaValues[]" min="1" max="5"
|
|
value="@previousAssessment?.AssessmentCriterions?.FirstOrDefault().Value" required />
|
|
</div>
|
|
</div>
|
|
}
|
|
}
|
|
else
|
|
{
|
|
<p>Нет доступных критериев.</p>
|
|
}
|
|
</div>
|
|
|
|
<div class="row mb-3">
|
|
<div class="col-md-12">
|
|
<label for="comment" class="form-label">Комментарий</label>
|
|
<textarea id="comment" name="comment" class="form-control" rows="4" placeholder="Оставьте ваш комментарий..."></textarea>
|
|
</div>
|
|
</div>
|
|
|
|
<button type="button" class="btn btn-primary mt-3" id="addCriterionBtn">Оценить по другому критерию</button>
|
|
|
|
<button type="submit" class="btn btn-success mt-3">Сохранить</button>
|
|
</form>
|
|
|
|
<div class="mt-4">
|
|
<a asp-action="ManageCriterions" asp-controller="Criterion" class="btn btn-outline-secondary">Управление критериями</a>
|
|
</div>
|
|
}
|
|
</div>
|
|
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
var criterions = @Html.Raw(Json.Serialize(ViewBag.Criterions));
|
|
|
|
document.getElementById('addCriterionBtn').addEventListener('click', function () {
|
|
var criteriaList = document.getElementById('criteriaList');
|
|
var newRow = document.createElement('div');
|
|
newRow.classList.add('row', 'mb-3');
|
|
|
|
// Создаем выпадающий список для критерия
|
|
var criterionSelect = document.createElement('div');
|
|
criterionSelect.classList.add('col-md-6');
|
|
var select = document.createElement('select');
|
|
select.classList.add('form-control');
|
|
select.name = 'criterionIds[]';
|
|
select.required = true;
|
|
|
|
var defaultOption = document.createElement('option');
|
|
defaultOption.value = "";
|
|
defaultOption.textContent = "Выберите критерий";
|
|
select.appendChild(defaultOption);
|
|
|
|
criterions.forEach(function (criterion) {
|
|
var option = document.createElement('option');
|
|
option.value = criterion.id;
|
|
option.textContent = criterion.name;
|
|
select.appendChild(option);
|
|
});
|
|
|
|
criterionSelect.appendChild(select);
|
|
|
|
// Создаем поле ввода для оценки
|
|
var valueInput = document.createElement('div');
|
|
valueInput.classList.add('col-md-6');
|
|
var input = document.createElement('input');
|
|
input.type = 'number';
|
|
input.classList.add('form-control');
|
|
input.name = 'criteriaValues[]';
|
|
input.min = 1;
|
|
input.max = 5;
|
|
input.required = true; // Обязательное поле
|
|
|
|
valueInput.appendChild(input);
|
|
|
|
// Добавляем созданные элементы в новый ряд
|
|
newRow.appendChild(criterionSelect);
|
|
newRow.appendChild(valueInput);
|
|
|
|
// Добавляем новый ряд в список критериев
|
|
criteriaList.appendChild(newRow);
|
|
});
|
|
});
|
|
</script>
|