Add project files.

This commit is contained in:
2025-07-23 18:54:59 +03:30
parent 429fe73799
commit a0852dd7d8
3356 changed files with 1632271 additions and 0 deletions

311
Views/Panel/User.cshtml Normal file
View File

@ -0,0 +1,311 @@
@using boilerplate.Models
@model User
@{
var User = Session["User"] as User;
if (Model == null || User == null) { return; }
ViewBag.Title = Model.User_Id == 0 ? "کاربر جدید" : Model.User_Name + " " + Model.User_Family;
Layout = "~/Views/_PanelSideBar.cshtml";
Functions functions = new Functions();
}
<form autocomplete="off">
<div class="row">
<div class="col-md-8 form-group">
<div class="row">
<div class="col-12 form-group">
<div class="card card-custom">
<div class="card-body">
<div class="form-group row align-items-center">
<div class="col-md-2">
<label for="txtName">نام:</label>
</div>
<div class="col-md-10">
<input class="form-control" id="txtName" placeholder="نام ..." value="@Model.User_Name" />
</div>
</div>
<div class="form-group row align-items-center">
<div class="col-md-2">
<label for="txtFamily">نام خانوادگی:</label>
</div>
<div class="col-md-10">
<input class="form-control" id="txtFamily" placeholder="نام خانوادگی ..." value="@Model.User_Family" />
</div>
</div>
<div class="form-group row align-items-center">
<div class="col-md-2">
<label for="txtPhone">شماره موبایل:</label>
</div>
<div class="col-md-10">
<input class="form-control" id="txtPhone" placeholder="شماره موبایل ..." value="@Model.User_Phone" />
</div>
</div>
<div class="form-group row align-items-center">
<div class="col-md-2">
<label for="txtPassword">رمز عبور:</label>
</div>
<div class="col-md-10">
<input class="form-control" id="txtPassword" placeholder="رمز عبور ..." />
</div>
</div>
<div class="form-group row align-items-center">
<div class="col-md-2">
<label for="ddlRole">نوع کاربر:</label>
</div>
<div class="col-md-10">
<select class="form-control" id="ddlRole">
<option value="Admin" @(Model.User_Role == "Admin" ? "selected" : "")>مدیر</option>
<option value="User" @(Model.User_Role == "User" ? "selected" : "")>کاربر</option>
</select>
</div>
</div>
<div class="form-group row align-items-center">
<div class="col-md-2">
<label for="fuImage">تصویر:</label>
</div>
<div class="col-md-8">
<input class="form-control" id="fuImage" type="file" accept="image/*" />
</div>
<div class="col-md-2">
<a href="~/Media/User/@Model.User_Image" target="_blank">
<div class="symbol symbol-100 border">
<img src="~/Media/User/@Model.User_Image" id="fuPreview" style="object-fit: cover;">
</div>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-4 form-group">
<div class="row">
<div class="col-12 form-group">
<div class="card card-custom">
<div class="card-header bg-secondary-o-100">
<div class="card-title">
<label>انتشار</label>
</div>
</div>
<div class="card-body align-items-center">
<div class="row align-items-center">
<div class="col">
<label for="chkStatus">فعال:</label>
</div>
<div class="col">
<span class="switch switch-outline switch-icon switch-sm switch-success">
<label>
<input type="checkbox" id="chkActive" @(Model.User_Status == 1 ? "checked" : "")>
<span></span>
</label>
</span>
</div>
</div>
</div>
<div class="card-footer">
<div class="row">
@if (Model.User_Id != 0)
{
if (User.User_Id != Model.User_Id && functions.HasAccess(User.User_Access, "ManageDeleteUser"))
{
<div class="col text-center">
<a class="btn btn-danger btn-shadow btn-sm w-100 btns" onclick="Delete()">حذف</a>
</div>
}
}
<div class="col text-center">
<a class="btn btn-success btn-shadow btns @(Model.User_Id != 0 ? $"btn-sm {(User.User_Id == Model.User_Id ? "" : "w-100")}" : "")" onclick="Save()" id="btnSave">@(Model.User_Id == 0 ? "انتشار" : "ذخیره")</a>
</div>
</div>
</div>
</div>
</div>
<div class="col-12 form-group" id="CategoryBlock">
<div class="card card-custom">
<div class="card-header bg-secondary-o-100">
<div class="card-title">
<label>دسترسی ها</label>
</div>
<div class="card-toolbar">
<a class="btn btn-sm btn-icon btn-primary mx-1" onclick="$(`input[name='chkAccess']`).prop('checked', false)" data-toggle="tooltip" title="عدم علامت همه">
<i class="fa fa-minus"></i>
</a>
<a class="btn btn-sm btn-icon btn-primary mx-1" onclick="$(`input[name='chkAccess']`).prop('checked', true)" data-toggle="tooltip" title="علامت زدن همه">
<i class="fa fa-check"></i>
</a>
</div>
</div>
<div class="card-body align-items-center">
<div class="max-h-250px overflow-auto">
<div class="checkbox-list mb-3">
<label class="checkbox">
<input type="checkbox" value="ManageDashboard" name="chkAccess">
<span></span>
آمار داشبورد
</label>
</div>
<div class="checkbox-list mb-3">
<label class="checkbox">
<input type="checkbox" value="ManageUser" name="chkAccess">
<span></span>
مدیریت کاربران
</label>
</div>
<div class="checkbox-list mb-3">
<label class="checkbox">
<input type="checkbox" value="ManageDeleteUser" name="chkAccess">
<span></span>
مدیریت حذف کاربران
</label>
</div>
<div class="checkbox-list mb-3">
<label class="checkbox">
<input type="checkbox" value="ManageSetting" name="chkAccess">
<span></span>
تنظیمات
</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
@section Script {
<script>
const Id = @Model.User_Id;
$("#UserList").addClass("menu-item-open");
if (Id == 0) { $("#UserMenu").addClass("menu-item-active"); }
const UserAccess = "@Model.User_Access";
if (UserAccess == "All") {
$(`input[name="chkAccess"]`).prop("checked", true);
}
else {
UserAccess.split(',').forEach(item => { $(`input[name="chkAccess"][value="${item}"]`).prop("checked", true); });
}
$(window).bind('keydown', function (event) {
if (event.ctrlKey || event.metaKey) {
switch (String.fromCharCode(event.which).toLowerCase()) {
case 's':
event.preventDefault();
$("#btnSave").click();
break;
}
}
});
$("#fuImage").on("change", function () {
if (this.files.length) {
try {
let Image = this.files[0];
if (Image.type.includes("image/")) {
var reader = new FileReader();
reader.onload = function () {
$("#fuPreview").attr("src", reader.result);
};
reader.readAsDataURL(Image);
}
else {
$(this).val(null);
toastr.error('فایل انتخاب شده پشتیبانی نمی شود !');
}
} catch (e) { }
}
});
function Save() {
let Phone = $("#txtPhone").val().trim();
if (Phone.length) {
let Access = "";
if ($('input[name="chkAccess"]').length == $('input[name="chkAccess"]:checked').length) {
Access = "All";
}
else if ($('input[name="chkAccess"]:checked').length) {
$('input[name="chkAccess"]:checked').each(function () {
if (Access) {
Access += `,${this.value}`;
}
else {
Access = this.value;
}
});
}
$("#btnSave").css("opacity", 0.5);
$("#btnSave").attr("onclick", "");
let model = {
Auth: { UserId: UserId, Token: Token },
Id: Id,
Name: $("#txtName").val().trim(),
Family: $("#txtFamily").val().trim(),
Phone: Phone,
Password: $("#txtPassword").val().trim(),
Role: $("#ddlRole").val(),
Status: $("#chkActive").prop("checked") ? 1 : 2,
Access: Access
};
let formData = new FormData();
formData.append("Model", JSON.stringify(model));
formData.append("Image", $("#fuImage")[0].files[0]);
let ajax = new XMLHttpRequest();
ajax.addEventListener("load", function (event) {
$("#btnSave").css("opacity", 1);
let data = JSON.parse(event.target.responseText);
if (data.Status == "Success") {
toastr.success("ذخیره سازی با موفقیت انجام شد");
setTimeout(function () {
location.href = `../Panel/User/${data.Result}`;
}, 1500);
} else {
$("#btnSave").attr("onclick", "Save()");
console.log(data);
toastr.warning("خطا هنگام ذخیره سازی اطلاعات");
}
}, false);
ajax.addEventListener("error", function () {
$("#btnSave").css("opacity", 1);
$("#btnSave").attr("onclick", "Save()");
toastr.error("خطا هنگام برقراری ارتباط با سرور");
}, false);
ajax.open("POST", "../api/User/Manage");
ajax.send(formData);
}
else {
toastr.warning("شماره موبایل را وارد کنید");
}
}
function Delete() {
Swal.fire({
title: "آیا از انجام این عملیات مطمئن هستید ؟",
text: "این عملیات قابل برگشت نمی باشد !!!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
cancelButtonText: 'خیر',
confirmButtonText: 'بله'
}).then((result) => {
if (result.value) {
$.post("../api/User/Delete", { Id: Id, UserId: UserId, Token: Token }).done(function (data) {
if (data.Status == "Success") {
$(".btns").remove();
toastr.success("حذف با موفقیت انجام شد");
setTimeout(function () {
location.href = "../Panel/Users";
}, 1500);
} else {
toastr.warning("خطا هنگام برقراری ارتباط با سرور");
}
}).fail(function () {
toastr.error("خطا هنگام برقراری ارتباط با سرور");
});
}
});
}
</script>
}