2026-06-03 01:43:55 +03:30
@page "{id:int}"
@model JobsMedical.Web.Pages.Admin.ReviewModel
@{
ViewData["Title"] = "بررسی و انتشار آگهی";
var r = Model.Raw!;
}
<div class="page-head">
<div class="container"><h1>بررسی و انتشار آگهی</h1><p class="muted">منبع: @r.SourceChannel</p></div>
</div>
<div class="container section">
2026-06-08 07:09:18 +03:30
@if (Model.Error is not null)
{
<div class="alert alert-error" style="margin-bottom:16px;">⚠ @Model.Error</div>
}
2026-06-03 01:43:55 +03:30
<div class="detail-grid">
<div>
<div class="card card-pad">
<h3 style="margin-top:0;">متن خام</h3>
<p style="white-space:pre-wrap; margin:0;">@r.RawText</p>
</div>
@if (Model.Parsed is not null)
{
<div class="card card-pad" style="margin-top:16px;">
<h3 style="margin-top:0;">🤖 تشخیص خودکار (پارسر)</h3>
<div class="rec-reasons">
@foreach (var note in Model.Parsed.Notes)
{
<span class="rec-reason">• @note</span>
}
@if (Model.Parsed.CityName is not null) { <span class="rec-reason">• شهر: @Model.Parsed.CityName</span> }
@if (Model.Parsed.DistrictName is not null) { <span class="rec-reason">• محله: @Model.Parsed.DistrictName</span> }
@if (Model.Parsed.Phone is not null) { <span class="rec-reason">• تلفن: @Model.Parsed.Phone</span> }
</div>
<p class="muted" style="font-size:12px; margin-bottom:0;">اینها فقط پیشنهاد هستند؛ قبل از انتشار بررسی و اصلاح کن.</p>
</div>
}
</div>
<aside>
<form method="post" class="card card-pad">
<div class="filter-group">
<label>نوع آگهی</label>
<select name="Kind" id="kindSelect">
<option value="0" selected="@(Model.Kind == JobsMedical.Web.Models.ListingKind.Shift)">شیفت</option>
<option value="1" selected="@(Model.Kind == JobsMedical.Web.Models.ListingKind.Job)">استخدام</option>
2026-06-08 08:01:12 +03:30
<option value="2" selected="@(Model.Kind == JobsMedical.Web.Models.ListingKind.Talent)">آماده به کار (معرفی نیرو)</option>
2026-06-03 01:43:55 +03:30
</select>
</div>
2026-06-08 08:01:12 +03:30
<div class="filter-group" id="facilityGroup">
2026-06-03 01:43:55 +03:30
<label>مرکز درمانی</label>
<select name="FacilityId">
2026-06-08 07:14:48 +03:30
<option value="0" selected="@(Model.FacilityId == 0)">— انتخاب نشده —</option>
2026-06-03 01:43:55 +03:30
@foreach (var f in Model.Facilities)
{
2026-06-08 07:14:48 +03:30
<option value="@f.Id" selected="@(Model.FacilityId == f.Id)">@f.Name — @f.City?.Name</option>
2026-06-03 01:43:55 +03:30
}
</select>
2026-06-08 07:09:18 +03:30
<input type="text" name="NewFacilityName" placeholder="یا نام مرکز جدید را وارد کن…" style="margin-top:6px;" />
<p class="muted" style="font-size:11px; margin:4px 0 0;">اگر مرکز در فهرست نیست، نامش را اینجا بنویس تا بهصورت «تأییدنشده» ساخته شود.</p>
2026-06-03 01:43:55 +03:30
</div>
<div class="filter-group">
2026-06-08 22:03:09 +03:30
<label>نقشها (میتوانی چند مورد انتخاب کنی)</label>
<div class="role-checks">
2026-06-03 01:43:55 +03:30
@foreach (var role in Model.Roles)
{
2026-06-08 22:03:09 +03:30
<label class="role-check">
<input type="checkbox" name="RoleIds" value="@role.Id" checked="@(Model.RoleIds.Contains(role.Id))" />
<span>@role.Name</span>
</label>
2026-06-03 01:43:55 +03:30
}
2026-06-08 22:03:09 +03:30
</div>
<p class="muted" style="font-size:11px; margin:4px 0 0;">برای آگهی چندتخصصی (مثل «پرستار سالمند و کودک») همهی نقشها را تیک بزن — برای هر نقش یک آگهی جدا ساخته میشود.</p>
2026-06-03 01:43:55 +03:30
</div>
2026-06-04 00:19:32 +03:30
<div class="filter-group">
<label>جنسیت مورد نیاز</label>
<select name="GenderRequirement">
<option value="0" selected="@(Model.GenderRequirement == JobsMedical.Web.Models.Gender.Any)">فرقی نمیکند</option>
<option value="1" selected="@(Model.GenderRequirement == JobsMedical.Web.Models.Gender.Male)">آقا</option>
<option value="2" selected="@(Model.GenderRequirement == JobsMedical.Web.Models.Gender.Female)">خانم</option>
</select>
</div>
2026-06-03 01:43:55 +03:30
<div id="shiftFields">
<div class="filter-group">
<label>تاریخ شیفت (میلادی)</label>
<input type="date" name="ShiftDate" value="@Model.ShiftDate.ToString("yyyy-MM-dd")" dir="ltr" />
</div>
<div class="filter-group">
<label>نوع شیفت</label>
<select name="ShiftType">
<option value="0" selected="@(Model.ShiftType == JobsMedical.Web.Models.ShiftType.Day)">صبح</option>
<option value="1" selected="@(Model.ShiftType == JobsMedical.Web.Models.ShiftType.Evening)">عصر</option>
<option value="2" selected="@(Model.ShiftType == JobsMedical.Web.Models.ShiftType.Night)">شب</option>
<option value="3" selected="@(Model.ShiftType == JobsMedical.Web.Models.ShiftType.OnCall)">آنکال</option>
</select>
</div>
<div class="filter-group" style="display:flex; gap:8px;">
<div style="flex:1;"><label>شروع</label><input type="time" name="StartTime" value="@Model.StartTime.ToString("HH:mm")" dir="ltr" /></div>
<div style="flex:1;"><label>پایان</label><input type="time" name="EndTime" value="@Model.EndTime.ToString("HH:mm")" dir="ltr" /></div>
</div>
2026-06-03 06:26:54 +03:30
<div class="filter-group" style="display:flex; gap:8px;">
<div style="flex:1;"><label>مبلغ مقطوع (تومان)</label><input type="number" name="PayAmount" value="@Model.PayAmount" dir="ltr" /></div>
<div style="flex:1;"><label>یا سهم درآمد (٪)</label><input type="number" name="SharePercent" value="@Model.SharePercent" min="1" max="100" dir="ltr" /></div>
2026-06-03 01:43:55 +03:30
</div>
</div>
<div id="jobFields" style="display:none;">
<div class="filter-group">
<label>عنوان موقعیت</label>
<input type="text" name="Title" value="@Model.Title" />
</div>
<div class="filter-group">
<label>نوع همکاری</label>
<select name="EmploymentType">
<option value="0" selected="@(Model.EmploymentType == JobsMedical.Web.Models.EmploymentType.FullTime)">تماموقت</option>
<option value="1" selected="@(Model.EmploymentType == JobsMedical.Web.Models.EmploymentType.PartTime)">پارهوقت</option>
<option value="2" selected="@(Model.EmploymentType == JobsMedical.Web.Models.EmploymentType.Contract)">قراردادی</option>
<option value="3" selected="@(Model.EmploymentType == JobsMedical.Web.Models.EmploymentType.Plan)">طرح</option>
</select>
</div>
<div class="filter-group" style="display:flex; gap:8px;">
<div style="flex:1;"><label>حقوق از</label><input type="number" name="SalaryMin" value="@Model.SalaryMin" dir="ltr" /></div>
<div style="flex:1;"><label>تا</label><input type="number" name="SalaryMax" value="@Model.SalaryMax" dir="ltr" /></div>
</div>
</div>
2026-06-08 08:01:12 +03:30
<div id="talentFields" style="display:none;">
<div class="filter-group">
<label>نام فرد (اختیاری)</label>
<input type="text" name="PersonName" value="@Model.PersonName" placeholder="مثلاً دکتر سپیده علیزاده" />
</div>
<div class="filter-group">
<label>شهر</label>
<select name="TalentCityId">
@foreach (var c in Model.Cities)
{
<option value="@c.Id" selected="@(Model.TalentCityId == c.Id)">@c.Name</option>
}
</select>
</div>
<div class="filter-group" style="display:flex; gap:8px;">
<div style="flex:1;"><label>سابقه (سال)</label><input type="number" name="YearsExperience" value="@Model.YearsExperience" min="0" max="60" dir="ltr" /></div>
<div style="flex:1;"><label>محدوده کاری</label><input type="text" name="AreaNote" value="@Model.AreaNote" placeholder="مثلاً فقط منطقه ۱ " /></div>
</div>
<div class="filter-group">
<label>شماره تماس</label>
<input type="text" name="Phone" value="@Model.Phone" placeholder="۰۹۱۲…" dir="ltr" />
</div>
<div class="filter-group">
<label style="display:flex; align-items:center; gap:8px; font-weight:600;">
<input type="checkbox" name="IsLicensed" value="true" style="width:auto;" checked="@Model.IsLicensed" /> پروانهدار
</label>
</div>
<div class="filter-group" style="display:flex; gap:8px;">
<div style="flex:1;"><label>دستمزد مدنظر (تومان)</label><input type="number" name="PayAmount" value="@Model.PayAmount" dir="ltr" /></div>
<div style="flex:1;"><label>یا سهم درآمد (٪)</label><input type="number" name="SharePercent" value="@Model.SharePercent" min="1" max="100" dir="ltr" /></div>
</div>
<p class="muted" style="font-size:11px; margin:4px 0 0;">برای «آماده به کار» نیازی به مرکز نیست؛ شماره تماس مهمترین فیلد است.</p>
</div>
2026-06-03 01:43:55 +03:30
<div class="filter-group">
<label style="display:flex; align-items:center; gap:8px; font-weight:600;">
<input type="checkbox" name="Negotiable" value="true" style="width:auto;" checked="@Model.Negotiable" /> توافقی
</label>
</div>
<div class="filter-group">
<label>توضیحات</label>
<textarea name="Description" rows="3">@Model.Description</textarea>
</div>
<button type="submit" asp-page-handler="Publish" asp-route-id="@r.Id" class="btn btn-accent btn-block btn-lg">انتشار</button>
<button type="submit" asp-page-handler="Discard" asp-route-id="@r.Id" class="btn btn-outline btn-block" style="margin-top:8px;">رد و حذف از صف</button>
</form>
</aside>
</div>
</div>
@section Scripts {
<script>
var kind = document.getElementById('kindSelect');
2026-06-08 08:01:12 +03:30
var facilityGroup = document.getElementById('facilityGroup');
// Show one section and DISABLE the hidden ones so duplicate-named inputs
// (PayAmount/SharePercent appear in both shift and talent) aren't submitted.
function setSection(el, on) {
if (!el) return;
el.style.display = on ? 'block' : 'none';
el.querySelectorAll('input,select,textarea').forEach(function (i) { i.disabled = !on; });
}
2026-06-03 01:43:55 +03:30
function toggleKind() {
2026-06-08 08:01:12 +03:30
var v = kind.value;
setSection(document.getElementById('shiftFields'), v === '0');
setSection(document.getElementById('jobFields'), v === '1');
setSection(document.getElementById('talentFields'), v === '2');
setSection(facilityGroup, v !== '2'); // facility only for shift/job
2026-06-03 01:43:55 +03:30
}
kind.addEventListener('change', toggleKind);
toggleKind();
</script>
}