Commit 49dd4d00 authored by alicewang's avatar alicewang

Merge branch 'master' into alice

# Conflicts:
#	Merchant Token Vault Management/backstage/wwwroot/css/style.css
parents a2d14cf6 e1cd39b5
......@@ -14,7 +14,7 @@ using System.Net.Http;
namespace backstage.Controllers
{
//[Authorize]
public class HomeController : Controller
......@@ -39,23 +39,31 @@ namespace backstage.Controllers
public async Task<IActionResult> Index()
{
ResultModel result = new ResultModel();
return View();
}
public IActionResult Error()
{
return View();
}
public IActionResult AccessDenied()
{
TempData["IsSuccess"] = false;
TempData["msg"] = "您沒有訪問此頁面的權限。";
return RedirectToAction("Index");
}
}
......
......@@ -18,6 +18,7 @@ namespace backstage.Models.Users
public string pwd { get; set; }
//新增使用者用
public string password { get; set; }
public string newPassword { get; set; }
public List<emaildata> email { get; set; }
public int locked { get; set; }
......
......@@ -39,7 +39,8 @@ namespace backstage
services.AddControllersWithViews();
services.AddAuthorization();
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie("Cookies", option =>
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie("Cookies", option =>
{
option.Cookie.HttpOnly = true;
......@@ -47,11 +48,26 @@ namespace backstage
option.LogoutPath = new PathString("/User/Logout");
option.Cookie.Name = "backstage";
option.Cookie.SameSite = SameSiteMode.Strict;
option.Events = new CookieAuthenticationEvents
{
OnRedirectToAccessDenied = context =>
{
context.Response.Redirect("/Home/AccessDenied"); // 將使用者重新導向到 Home/AccessDenied
return Task.CompletedTask;
}
};
////�n�J���Įɶ�
});
services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly", policy =>
{
// 設定需要 "Admin" 角色的策略
policy.RequireRole("Admin");
});
});
// �N Session �s�b ASP.NET Core �O���餤
services.AddDistributedMemoryCache();
services.AddHttpContextAccessor();
......
......@@ -9,69 +9,49 @@
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="page-header">
<h3 class="page-title">數據統計</h3>
</div>
@*<div class="row">
<div class="col-lg-6 grid-margin stretch-card">
<div class="row">
<div class="col-lg-4 col-md-6 grid-margin stretch-card dashboard-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">代辦事項</h4>
<div class="add-items d-flex">
<input id="new_task" type="text" class="form-control todo-list-input" placeholder="要做什麼呢?">
<button class="add btn btn-primary font-weight-bold todo-list-add-btn white-nowrap" id="add-task">新增</button>
<h4 class="card-title">Token Vault Entry 總數量</h4>
<div class="card-content text-center">
<img src="images/admin-vault.svg" class="img-fuild">
<p class="number text-center">200</p>
</div>
<div class="list-wrapper scrollbar">
<ul class="d-flex flex-column-reverse todo-list todo-list-custom">
</div>
</div>
</div>
</ul>
<div class="col-lg-4 col-md-6 grid-margin stretch-card dashboard-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">本月新增 Token Vualt Entry 數量</h4>
<div class="card-content text-center">
<img src="/images/admin-vault-add.svg" class="img-fuild">
<p class="number text-center">10</p>
</div>
</div>
</div>
</div>
<div class="col-lg-6 grid-margin stretch-card">
<div class="col-lg-4 col-md-6 grid-margin stretch-card dashboard-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">購買項目到期提醒(前後一個月)</h4>
<div class="table-scroll scrollbar">
<table class="table table-hover">
<thead>
<tr>
<th>到期日</th>
<th>項目</th>
<th>聯絡人</th>
<th>聯絡手機</th>
<th>登記姓名</th>
</tr>
</thead>
<tbody>
@if (ViewBag.ToBeExpired != null)
{
@foreach (var i in ViewBag.ToBeExpired)
{
<tr>
<td><label class="text-danger">@i.DueDate</label></td>
<td>@i.ItemName</td>
<td>@i.CustomerName</td>
<td>@i.CustomerPhone</td>
<td>@i.Name</td>
</tr>
}
}
</tbody>
</table>
<h4 class="card-title">本月修改 Token Vualt Entry 數量</h4>
<div class="card-content text-center">
<img src="/images/admin-vault-edit.svg" class="img-fuild">
<p class="number text-center">7</p>
</div>
</div>
</div>
</div>
</div>*@
</div>
......@@ -79,43 +59,12 @@
<script src="~/js/Home.js"></script>
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
var msg = '@TempData["msg"]';
var IsSuccess = '@TempData["IsSuccess"]';
console.log(IsSuccess + msg);
if (msg != '') {
showAlert(IsSuccess, msg);
}
@*$(function () {
let eventsArr = [];
let eventsTable = document.getElementById("eventsTable");
let trElems = eventsTable.getElementsByTagName("tr")
for (let tr of trElems) {
let tdElems = tr.getElementsByTagName("td");
let eventObj = {
id: tdElems[0].innerText,
title: tdElems[1].innerText,
start: tdElems[2].innerText,
};
eventsArr.push(eventObj);
}
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
locale: 'zh-cn',
initialView: 'dayGridMonth',
headerToolbar: {
left: 'prevYear prev,next nextYear today',
center: 'title',
right: 'dayGridMonth timeGridWeek timeGridDay'
},
buttonText: {
today: '今天',
month: '月',
week: '周',
day: '日',
},
events: eventsArr
});
calendar.render();
})*@
</script>
}
\ No newline at end of file
......@@ -75,15 +75,15 @@
</div>
</a>
<div class="dropdown-menu navbar-dropdown" aria-labelledby="profileDropdown">
<a class="dropdown-item" asp-controller="User" asp-action="ChangePassword">
<a class="dropdown-item" asp-controller="User" asp-action="ChangePassword" asp-route-username="@Context.User.Claims.FirstOrDefault(m => m.Type == "username").Value" asp-route-returnUrl="@Context.Request.Path">
<i class="mdi mdi-lock-open mr-2"></i>更改密碼
</a>
<a class="dropdown-item" asp-controller="User" asp-action="Register">
@*<a class="dropdown-item" asp-controller="User" asp-action="Register">
<i class="mdi mdi-account-plus mr-2"></i>註冊管理員
</a>
<a class="dropdown-item" asp-controller="UserManage" asp-action="GetUserManage">
</a>*@
@*<a class="dropdown-item" asp-controller="UserManage" asp-action="GetUserManage">
<i class="mdi mdi-account-details mr-2"></i>帳號管理
</a>
</a>*@
<div class="dropdown-divider"></div>
<a class="dropdown-item" asp-controller="User" asp-action="Logout">
<i class="mdi mdi-logout mr-2 text-danger"></i>登出
......
......@@ -13,7 +13,7 @@
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
<div class="col-12 grid-margin stretch-card">
......
......@@ -13,7 +13,7 @@
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
<div class="col-12 grid-margin stretch-card">
......
......@@ -13,7 +13,7 @@
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
<div class="col-12 grid-margin stretch-card">
......
......@@ -2,7 +2,10 @@
@{
ViewData["Title"] = "TokenVault列表管理";
}
@{
bool isAdmin = User.IsInRole("admin");
string disabledClass = isAdmin ? "" : "disabled";
}
<div class="page-header">
<h3 class="page-title">TokenVault列表管理</h3>
......@@ -11,7 +14,7 @@
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
......@@ -23,7 +26,7 @@
<div class="col-md-12">
<ul class="breadcrumb breadcrumb_memberGo">
<li class="breadcrumb-item active">資料代碼保險庫</li>
</ul>
</div>
</div>
......@@ -38,7 +41,7 @@
</select>
</div>
<div class="col-md-auto">
<a type="button" class="btn btn-info float-right mb-2" asp-action="CreateTokenVault">Create</a>
<a type="button" class="btn btn-info float-right mb-2 @disabledClass" asp-action="CreateTokenVault">Create</a>
</div>
</div>
<div class="row">
......@@ -149,7 +152,7 @@
$('#selectDepartmentList').change(function () {
var selectedValue = $(this).val(); // 獲取選擇的值
loadData(selectedValue);
});
// 定義 AJAX 請求函式,將選單值傳遞至後端並填入 tbody
......
......@@ -2,7 +2,10 @@
@{
ViewData["Title"] = "Fields列表管理";
}
@{
bool isAdmin = User.IsInRole("admin");
string disabledClass = isAdmin ? "" : "disabled";
}
@section header{
<script>
//欄位檢查
......@@ -39,7 +42,7 @@
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
......@@ -75,7 +78,7 @@
</div>
</div>
<div style="float: right;">
<a type="button" class="btn btn-info float-right mb-2" data-toggle="modal" data-target="#myModal">Create</a>
<a type="button" class="btn btn-info float-right mb-2 @disabledClass" data-toggle="modal" data-target="#myModal">Create</a>
</div>
</div>
<div>
......@@ -129,8 +132,8 @@
</div>
</div>
<!-- MODAL -->
<!-- MODAL -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
......
......@@ -2,7 +2,10 @@
@{
ViewData["Title"] = "欄位Users列表管理";
}
@{
bool isAdmin = User.IsInRole("admin");
string disabledClass = isAdmin ? "" : "disabled";
}
<div class="page-header">
<h3 class="page-title">欄位Users列表管理</h3>
......@@ -11,7 +14,7 @@
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
......@@ -31,7 +34,7 @@
<div>
<a type="button" class="btn btn-info float-right mb-2" data-toggle="modal" data-target="#myModal">Add User</a>
<a type="button" class="btn btn-info float-right mb-2 @disabledClass" data-toggle="modal" data-target="#myModal">Add User</a>
<div class="rank-table">
<div class="table-responsive">
<table class="table table-striped expense-color">
......@@ -54,33 +57,35 @@
{
@foreach (var i in Model)
{
<tr id="@i.id" class="expense-color">
<td>@i.id</td>
<td>@i.name</td>
<td>@i.username</td>
<td>@i.masksText</td>
<td>
@if (i.allow_decrypt == 1)
{<span>&#x2714;</span>}
</td>
<td>
@if (i.allow_new == 1)
{<span>&#x2714;</span>}
</td>
<td>
@if (i.allow_update == 1)
{<span>&#x2714;</span>}
</td>
<td>@if (i.allow_del == 1)
{<span>&#x2714;</span>}</td>
<td>@i.default_mask_id</td>
<td>
<a href="tokenVault_fields_users.html" class="btn btnPermission btn-sm">移除使用者</a>
</td>
</tr>
}
<tr id="@i.id" class="expense-color">
<td>@i.id</td>
<td>@i.name</td>
<td>@i.username</td>
<td>@i.masksText</td>
<td>
@if (i.allow_decrypt == 1)
{<span>&#x2714;</span>}
</td>
<td>
@if (i.allow_new == 1)
{<span>&#x2714;</span>}
</td>
<td>
@if (i.allow_update == 1)
{<span>&#x2714;</span>}
</td>
<td>
@if (i.allow_del == 1)
{<span>&#x2714;</span>}
</td>
<td>@i.default_mask_id</td>
<td>
<a href="tokenVault_fields_users.html" class="btn btnPermission btn-sm">移除使用者</a>
</td>
</tr>
}
}
</tbody>
......@@ -110,12 +115,12 @@
</div>
<div class="modal-body">
<select id="selectUser" class="form-control" asp-items="ViewBag.users">
<!-- 其他用户选项 -->
</select>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="confirmBtn" data-dismiss="modal">確認</button>
<button type="button" class="btn btn-primary" id="confirmBtn" data-dismiss="modal">確認</button>
</div>
</div>
</div>
......
@model backstage.Models.Users.User
@{
ViewData["Title"] = "更改密碼";
}
@{
bool isAdmin = User.IsInRole("Admin");
string displayStyle = isAdmin ? "" : "display:none;";
}
<!-- partial -->
<div class="page-header">
<h3 class="page-title">更改密碼</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
<div class="col-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">更改密碼</h4>
<form class="forms-sample" method="post" asp-action="ChangePassword" asp-route-returnUrl="@ViewBag.returnUrl" autocomplete="off">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
<input hidden asp-for="username" />
<p class="form-title card-description">帳號資訊</p>
<div class="row" style="@displayStyle">
<div class="col-md-4 form-group required">
<label asp-for="uid" class="col-form-label" for=""></label>
<input asp-for="uid" type="text" class="form-control" disabled>
</div>
<div class="col-md-4 form-group required">
<label asp-for="name" class="col-form-label" for=""></label>
<input asp-for="name" type="text" class="form-control" disabled>
</div>
<div class="col-md-4 form-group required">
<label asp-for="username" class="col-form-label" for=""></label>
<input asp-for="username" type="text" class="form-control" disabled>
</div>
</div>
<p class="form-title card-description">修改密碼</p>
<div class="row">
<div class="col-md-4 form-group required">
<label asp-for="password" class="col-form-label" for="">目前密碼</label>
<input asp-for="password" type="password" class="form-control">
</div>
</div>
<div class="row">
<div class="col-md-4 form-group required">
<label asp-for="newPassword" class="col-form-label">新密碼</label>
<input asp-for="newPassword" type="password" class="form-control" id="newPWD">
</div>
</div>
<div class="row">
<div class="col-md-4 form-group required">
<label class="col-form-label">確認新密碼</label>
<input class="form-control" type="password" id="confirmPWD">
<span id="passwordMatchError" class="text-danger" style="display: none;">兩次輸入的密碼不一致</span>
</div>
</div>
<button type="submit" class="btn btn-primary mr-2">送出</button>
<a type="button" class="btn btn-light" asp-action="Index" , asp-controller="Home">取消</a>
</form>
</div>
</div>
</div>
</div>
@section Scripts{
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
$(document).ready(function () {
var msg = '@TempData["msg"]';
var IsSuccess = '@TempData["IsSuccess"]';
console.log(IsSuccess + msg);
if (msg != '') {
showAlert(IsSuccess, msg);
}
$(".forms-sample").submit(function (event) {
event.preventDefault();
$('input').removeAttr('disabled');
this.submit();
});
$('#confirmPWD').keyup(function () {
var newPassword = $('#newPWD').val();
var confirmPassword = $(this).val();
if (newPassword !== confirmPassword) {
$('#passwordMatchError').show();
} else {
$('#passwordMatchError').hide();
}
});
})
</script>
}
......@@ -13,7 +13,7 @@
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
<div class="col-12 grid-margin stretch-card">
......
......@@ -13,7 +13,7 @@
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
<div class="col-12 grid-margin stretch-card">
......
......@@ -13,7 +13,7 @@
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
<div class="col-12 grid-margin stretch-card">
......
......@@ -13,7 +13,7 @@
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
<div class="col-12 grid-margin stretch-card">
......@@ -44,44 +44,67 @@
</div>
<div class="col-md-4 form-group ">
<label asp-for="username" class="col-form-label" for="username"></label>
<input asp-for="username" class="form-control" id="username">
<input asp-for="username" class="form-control" id="username" disabled>
<span asp-validation-for="username" class="text-danger"></span>
</div>
</div>
<div class="row">
@if (Model.email!=null)
@if (Model.email.Count > 0)
@if (Model.email != null)
{
for (int i = 0; i < Model.email.Count; i++)
{
@foreach (var item in Model.email)
{
<div class="col-md-2 form-group">
<label asp-for="@item.type" class="col-form-label" for="item.type">type</label>
<input value="@item.type" class="form-control" />
<span asp-validation-for="@item.type" class="text-danger"></span>
<label asp-for="@Model.email[i].type" class="col-form-label" for="emailType">類型</label>
<input name="email[@i].type" value="@Model.email[i].type" class="form-control" />
<span asp-validation-for="@Model.email[i].type" class="text-danger"></span>
</div>
<div class="col-md-6 form-group">
<label asp-for="@item.email" class="col-form-label" for="item.email">email</label>
<input value="@item.email" class="form-control" />
<span asp-validation-for="@item.email" class="text-danger"></span>
<label asp-for="@Model.email[i].email" class="col-form-label" for="emailAddress">電子郵件</label>
<input name="email[@i].email" value="@Model.email[i].email" class="form-control" />
<span asp-validation-for="@Model.email[i].email" class="text-danger"></span>
</div>
}
}
}
</div>
@*<div class="row">
<div class="col-md-4 form-group ">
<label asp-for="password" class="col-form-label" for=""></label>
<input asp-for="password" type="text" class="form-control" id="">
<span asp-validation-for="password" class="text-danger"></span>
<!--<div class="row" id="">
<div class="col-md-2 form-group">
<label class="col-form-label" >新增類型</label>-->
@*<input name="email[@(Model.email != null ? Model.email.Count : 0)].type" class="form-control" />*@
<!--<input class="form-control" />
</div>
<div class="col-md-6 form-group">
<label class="col-form-label">新增電子郵件</label>-->
@*<input name="email[@(Model.email != null ? Model.email.Count : 0)].email" class="form-control" />*@
<!--<input class="form-control"/>
</div>
</div>-->
<p class="form-title card-description">修改密碼</p>
<div class="row">
</div>*@
<div class="col-md-4 form-group required">
<label asp-for="password" class="col-form-label" for="">目前密碼</label>
<input asp-for="password" type="password" class="form-control">
</div>
</div>
<div class="row">
<div class="col-md-4 form-group required">
<label asp-for="newPassword" class="col-form-label">新密碼</label>
<input asp-for="newPassword" type="password" class="form-control" id="newPWD">
</div>
</div>
<div class="row">
<div class="col-md-4 form-group required">
<label class="col-form-label">確認新密碼</label>
<input class="form-control" type="password" id="confirmPWD">
<span id="passwordMatchError" class="text-danger" style="display: none;">兩次輸入的密碼不一致</span>
</div>
</div>
......@@ -105,15 +128,24 @@
if (msg != '') {
showAlert(IsSuccess, msg);
}
$(".forms-sample").submit(function (event) {
event.preventDefault();
$('input').removeAttr('disabled');
this.submit();
});
})
</script>
......
@model backstage.Models.Users.DepartmentsResponse
@{
bool isAdmin = User.IsInRole("Admin");
string disabledClass = isAdmin ? "" : "disabled";
}
<div class="page-header">
<h3 class="page-title">Department List</h3>
......@@ -7,13 +11,13 @@
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
<div class="col-lg-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<a type="button" class="btn btn-info float-right mb-2" asp-action="CreateDepartment">Create</a>
<a type="button" class="btn btn-info float-right mb-2 @disabledClass" asp-action="CreateDepartment">Create</a>
@*列表*@
<div class="">
......@@ -23,8 +27,8 @@
<th>merchant_id</th>
<th>name</th>
@*<th>address</th>
<th>country_id</th>
<th>postcode</th>*@
<th>country_id</th>
<th>postcode</th>*@
<th>phone</th>
@*<th>fax</th>*@
@*<th>vatid</th>*@
......@@ -36,8 +40,8 @@
<th>user_natid_verify</th>
<th>enabled_transaction</th>*@
@*<th>merchant_type</th>
<th>merchant_level</th>
<th>tts</th>*@
<th>merchant_level</th>
<th>tts</th>*@
</tr>
......@@ -53,21 +57,21 @@
<td>@i.merchant_id</td>
<td>@i.name</td>
@*<td>@i.address</td>
<td>@i.country_id</td>
<td>@i.postcode</td>*@
<td>@i.country_id</td>
<td>@i.postcode</td>*@
<td>@i.phone</td>
@*<td>@i.fax</td>*@
@*<td>@i.vatid</td>
<td>@i.enabled</td>*@
<td>@i.enabled</td>*@
<td>@i.creation_date</td>
@*<td>@i.vatid_verify</td>
<td>@i.deposit_book_verify</td>
<td>@i.user_natid_verify</td>
<td>@i.enabled_transaction</td>*@
@*<td>@i.merchant_type</td>
<td>@i.merchant_level</td>
<td>@i.tts</td>*@
<td>@i.merchant_level</td>
<td>@i.tts</td>*@
@*<td class="text-right">
<a class="btn btn-primary" asp-action="EditEventItem" asp-route-id="@i.Id"><i class="mdi mdi-grease-pencil"></i>編輯</a>
......@@ -92,7 +96,7 @@
@section Scripts{
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
var msg = '@TempData["msg"]';
var IsSuccess = '@TempData["IsSuccess"]';
console.log(IsSuccess + msg);
......
@model backstage.Models.Users.UserResponse
@{
bool isAdmin = User.IsInRole("admin");
string disabledClass = isAdmin ? "" : "disabled";
}
<div class="page-header">
<h3 class="page-title">User List</h3>
<input id="msg" hidden value="@TempData["msg"]" />
......@@ -7,7 +10,7 @@
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
......@@ -15,7 +18,7 @@
<div class="card">
<div class="card-body">
<div id="adminStatus" style="float: left;">User count:@ViewBag.userCount / Admin count:@ViewBag.adminCount </div>
<a type="button" class="btn btn-info float-right mb-2" asp-action="CreateUser">Create</a>
<a type="button" class="btn btn-info float-right mb-2 @disabledClass" asp-action="CreateUser">Create</a>
@*列表*@
<div class="">
......@@ -32,11 +35,11 @@
<th>enabled</th>
<th>Admin</th>
@*<th>birthdate</th>
<th>marital_status</th>
<th>gender</th>
<th>education</th>
<th>natid</th>
<th>lang</th>*@
<th>marital_status</th>
<th>gender</th>
<th>education</th>
<th>natid</th>
<th>lang</th>*@
</tr>
......@@ -48,41 +51,41 @@
@foreach (var i in Model.Users)
{
<tr data-user-id="@i.uid">
<td class="userRow">@i.uid</td>
<td class="userRow">@i.name</td>
@*<td>@i.name_en</td>*@
<td class="userRow">@i.username</td>
@if (i.email != null)
@if (i.email.Count > 0)
{
<td>@i.email[0].email</td>
}
else
{
<td></td>
}
@*<td>@i.locked</td>*@
<td>@i.creation_date</td>
<td> <input type="checkbox" class="toggleButton" @(i.enabled==1 ? "checked" : "") disabled></td>
<td> <input type="checkbox" data-uid="@i.uid" class="toggleButton isAdmin" @(i.isAdmin ? "checked" : "")></td>
@*@if (i.isAdmin)
{ <td>是</td>}
else { <td></td>}*@
@*<td>@i.birthdate</td>
<td>@i.marital_status</td>
<td>@i.gender</td>
<td>@i.education</td>
<td>@i.natid</td>
<td>@i.lang</td>*@
@*<td class="text-right">
<a class="btn btn-primary" asp-action="EditEventItem" asp-route-id="@i.Id"><i class="mdi mdi-grease-pencil"></i>編輯</a>
<button class="btn btn-inverse-danger" id="eventItem-delete-btn" data-id="@i.Id" data-name="@i.Title"><i class="mdi mdi-delete-forever"></i>刪除</button>
</td>*@
</tr>
<tr data-user-id="@i.uid">
<td class="userRow">@i.uid</td>
<td class="userRow">@i.name</td>
@*<td>@i.name_en</td>*@
<td class="userRow">@i.username</td>
@if (i.email != null)
@if (i.email.Count > 0)
{
<td>@i.email[0].email</td>
}
else
{
<td></td>
}
@*<td>@i.locked</td>*@
<td>@i.creation_date</td>
<td> <input type="checkbox" data-uid="@i.uid" class="toggleButton isEnable" @(i.enabled == 1 ? "checked" : "")></td>
<td> <input type="checkbox" data-uid="@i.uid" class="toggleButton isAdmin" @(i.isAdmin ? "checked" : "")></td>
@*@if (i.isAdmin)
{ <td>是</td>}
else { <td></td>}*@
@*<td>@i.birthdate</td>
<td>@i.marital_status</td>
<td>@i.gender</td>
<td>@i.education</td>
<td>@i.natid</td>
<td>@i.lang</td>*@
@*<td class="text-right">
<a class="btn btn-primary" asp-action="EditEventItem" asp-route-id="@i.Id"><i class="mdi mdi-grease-pencil"></i>編輯</a>
<button class="btn btn-inverse-danger" id="eventItem-delete-btn" data-id="@i.Id" data-name="@i.Title"><i class="mdi mdi-delete-forever"></i>刪除</button>
</td>*@
</tr>
}
}
......@@ -100,12 +103,12 @@
@section Scripts{
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
var msg = '@TempData["msg"]';
var msg = '@TempData["msg"]';
var IsSuccess = '@TempData["IsSuccess"]';
console.log(IsSuccess + msg);
if (msg != '') {
showAlert(IsSuccess, msg);
}
}
$('.userRow').each(function () {
var uid = $(this).find('td:first-child').text(); // 獲取行中的 UID 值
......@@ -124,7 +127,7 @@
size: 'small',
onSwitchChange: function (event, state) {
var uid = $(this).data('uid');
var isAdmin = $(this).is(':checked');
var isAdmin = $(this).is(':checked')?1:0;
// 使用 AJAX 發送請求,處理狀態變更事件
$.ajax({
......@@ -134,6 +137,35 @@
success: function (response) {
// 在成功回調中處理回應
console.log(response);
showAlert(response.isSuccess, response.message)
},
error: function (error) {
// 在錯誤回調中處理錯誤
console.log(error);
}
});
}
});
$('.isEnable').bootstrapSwitch({
onText: 'ON',
offText: 'OFF',
onColor: 'success',
offColor: 'danger',
size: 'small',
onSwitchChange: function (event, state) {
var uid = $(this).data('uid');
var enabled = $(this).is(':checked') ? 1 : 0;;
// 使用 AJAX 發送請求,處理狀態變更事件
$.ajax({
url: '/User/UserEnableAjax',
type: 'POST',
data: { uid: uid, enabled: enabled },
success: function (response) {
// 在成功回調中處理回應
console.log(response);
showAlert(response.isSuccess,response.message)
},
error: function (error) {
// 在錯誤回調中處理錯誤
......
......@@ -110,7 +110,16 @@
<script src="~/lib/jquery-ui/jquery-ui.min.js"></script>
<!--END jquery ui datepicker-->
<script src="~/js/jquery.ba-dotimeout.js"></script>
<script src="~/lib/jquery.ba-dotimeout.js"></script>
</body>
</html>
<script>
var msg = '@TempData["msg"]';
var IsSuccess = '@TempData["IsSuccess"]';
console.log(IsSuccess + msg);
if (msg != '') {
showAlert(IsSuccess, msg);
}
</script>
\ No newline at end of file
......@@ -19275,12 +19275,25 @@ tbody {
}
.floating-msg {
position: fixed;
top: 80px;
right: 20px;
z-index: 9999;
background-color: transparent;
padding: 10px;
border: 0;
}
.dashboard-card .card-title {
margin-bottom: 40px;
}
/*版本號樣式*/
.versionNo {
color: #f2f2f2;
font-size: 0.825rem;
padding: 20px 16px 10px 16px
.dashboard-card .card-content img {
max-width: 160px;
}
.dashboard-card .card-content .number {
font-size: 5rem;
color: #35A9E1;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment