Files
hamkadr/src/JobsMedical.Web/Pages/Jobs/Details.cshtml
T
soroush.asadi eae38373b9
CI/CD / CI · dotnet build (push) Failing after 1m40s
CI/CD / Deploy · hamkadr (push) Has been skipped
Admin suite: monitoring dashboard, user management/ban, broadcast, reports, SMS test
- /Admin/Overview: platform monitoring stats (users by role, facilities, listings, applies, push subs, queue, reports, bans)
- /Admin/Users: search/filter + ban/unban (User.IsBanned + reason); banned users blocked at login
- /Admin/Broadcast: send announcement (in-app + web push) to all / staff / employers via NotificationService
- Reports: report button on shift/job detail → /report endpoint → /Admin/Reports (resolve/dismiss)
- Settings: 'send test SMS' button; admin cross-nav links; SMS API config already in place
- migration AdminBanReports; verified overview/users/broadcast/report persist

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 13:19:20 +03:30

114 lines
5.8 KiB
Plaintext

@page "{id:int}"
@model JobsMedical.Web.Pages.Jobs.DetailsModel
@{
var j = Model.Job!;
var f = j.Facility!;
ViewData["Title"] = j.Title;
ViewData["Description"] = $"{j.Title} در {f.Name}، {f.City?.Name}. موقعیت استخدامی برای {j.Role?.Name}.";
string empLabel = j.EmploymentType switch
{
EmploymentType.FullTime => "تمام‌وقت",
EmploymentType.PartTime => "پاره‌وقت",
EmploymentType.Contract => "قراردادی",
_ => "طرح",
};
string salary;
if (j.SalaryMin is null && j.SalaryMax is null) salary = "توافقی";
else if (j.SalaryMin == j.SalaryMax) salary = JalaliDate.Toman(j.SalaryMin) + " ماهانه";
else salary = $"از {JalaliDate.ToPersianDigits((j.SalaryMin ?? 0).ToString("#,0"))} تا {JalaliDate.Toman(j.SalaryMax)} ماهانه";
}
<div class="page-head">
<div class="container">
<div class="row" style="display:flex; gap:10px; align-items:center;">
<span class="badge badge-job">@empLabel</span>
@if (j.Role is not null) { <span class="badge badge-type">@j.Role.Name</span> }
@if (f.IsVerified) { <span class="badge badge-verified">✓ مرکز تأیید شده</span> }
</div>
<h1 style="margin-top:8px;">@j.Title</h1>
<p class="muted">🏥 @f.Name — 📍 @f.City?.Name@(f.District is not null ? "، " + f.District.Name : "")</p>
</div>
</div>
<div class="container section">
<div class="detail-grid">
<div>
@if (Model.ShowContact)
{
<div class="alert alert-success">
✓ تمایل شما ثبت شد. برای پیگیری استخدام با مرکز تماس بگیرید:
<strong>@(f.Phone ?? "شماره ثبت نشده")</strong>
@if (!string.IsNullOrEmpty(f.BaleId)) { <text> — بله: @f.BaleId</text> }
</div>
}
@if (Model.Saved)
{
<div class="alert alert-success">✓ این موقعیت ذخیره شد.</div>
}
<div class="card card-pad">
<h3 style="margin-top:0;">مشخصات موقعیت</h3>
<div class="info-row"><span class="k">نوع همکاری</span><span class="v">@empLabel</span></div>
<div class="info-row"><span class="k">نقش</span><span class="v">@j.Role?.Name</span></div>
@if (j.GenderRequirement != Gender.Any)
{
<div class="info-row"><span class="k">جنسیت</span><span class="v">@JalaliDate.GenderLabel(j.GenderRequirement)</span></div>
}
<div class="info-row"><span class="k">حقوق ماهانه</span><span class="v" style="color:var(--primary-dark)">@salary</span></div>
</div>
@if (!string.IsNullOrEmpty(j.Description))
{
<div class="card card-pad" style="margin-top:16px;">
<h3 style="margin-top:0;">شرح موقعیت</h3>
<p class="muted" style="margin:0;">@j.Description</p>
</div>
}
@if (!string.IsNullOrEmpty(j.Requirements))
{
<div class="card card-pad" style="margin-top:16px;">
<h3 style="margin-top:0;">شرایط احراز</h3>
<p class="muted" style="margin:0;">@j.Requirements</p>
</div>
}
</div>
<aside>
<div class="card card-pad">
<div class="pay" style="font-size:19px; margin-bottom:6px; color:var(--primary-dark); font-weight:800;">@salary</div>
<p class="muted" style="font-size:13px; margin-top:0;">@empLabel</p>
<form method="post">
<button type="submit" asp-page-handler="Interest" asp-route-id="@j.Id"
class="btn btn-accent btn-block btn-lg">اعلام تمایل و مشاهده راه ارتباطی</button>
</form>
<div style="display:flex; gap:8px; margin-top:8px;">
<form method="post" style="flex:1;">
<button type="submit" asp-page-handler="Save" asp-route-id="@j.Id" class="btn btn-outline btn-block">♡ ذخیره</button>
</form>
<form method="post" style="flex:1;">
<button type="submit" asp-page-handler="Dismiss" asp-route-id="@j.Id" class="btn btn-outline btn-block">✕ علاقه‌مند نیستم</button>
</form>
</div>
@if (Model.Reported)
{
<p class="muted" style="font-size:12px; margin:8px 0 0;">✓ گزارش شما ثبت شد. متشکریم.</p>
}
else
{
<details style="margin-top:10px;">
<summary class="muted" style="font-size:12px; cursor:pointer;">گزارش تخلف یا اطلاعات نادرست</summary>
<form method="post" action="/report" style="margin-top:8px;">
<input type="hidden" name="targetType" value="Job" />
<input type="hidden" name="targetId" value="@j.Id" />
<input type="hidden" name="label" value="@j.Title" />
<input type="hidden" name="returnUrl" value="/Jobs/Details/@j.Id" />
<textarea name="reason" rows="2" placeholder="دلیل گزارش..." required></textarea>
<button type="submit" class="btn btn-outline btn-block" style="margin-top:6px;">ارسال گزارش</button>
</form>
</details>
}
</div>
</aside>
</div>
</div>