Commit a8162890 authored by Jason's avatar Jason

目前做到user admin切換按鈕Ajax未完成

parent caf7a545
......@@ -65,7 +65,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated)
{
return RedirectToAction("Login");
return RedirectToAction("Login","User");
}
......@@ -152,7 +152,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated)
{
return RedirectToAction("Login");
return RedirectToAction("Login","User");
}
......@@ -243,7 +243,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated)
{
return RedirectToAction("Login");
return RedirectToAction("Login","User");
}
if (string.IsNullOrEmpty(user.password))
......@@ -296,7 +296,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated)
{
return RedirectToAction("Login");
return RedirectToAction("Login","User");
}
......@@ -336,7 +336,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated)
{
return RedirectToAction("Login");
return RedirectToAction("Login","User");
}
......@@ -391,7 +391,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated)
{
return RedirectToAction("Login");
return RedirectToAction("Login","User");
}
if (string.IsNullOrEmpty(department.name))
......@@ -548,6 +548,77 @@ namespace backstage.Controllers
}
[HttpPost]
public async Task<ResultModel> AdminAddAjax(int uid)
{
var result = new ResultModel();
// 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated)
{
result.IsSuccess = false;
result.Message = "未登入";
return result;
}
// 取得使用者的 "token" Claim 值
string token = User.FindFirstValue("token");
var url = _config["IP"] + "/admin/add";
var httpMethod = HttpMethod.Post;
var userData=new [] {
new {
uid=uid,
desc="",
roles = new[] { 1 },
enabled=1
}
};
var parameters = new Dictionary<string, string>
{
{ "token", token},
{ "user",JsonConvert.SerializeObject( userData)}
};
var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
var Response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString());
if (Response.r == 0)
{
result.IsSuccess = true;
result.Message ="權限調整成功";
return result;
}
else
{
result.IsSuccess = false;
result.Message = Response.m.ToString();
return result;
}
}
else
{
result.IsSuccess = false;
result.Message = apiResult.Message;
return result;
}
}
[HttpGet]
public async Task<IActionResult> Logout()
{
......
......@@ -77,7 +77,7 @@ namespace backstage.Helpers
content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
request.Content.Headers.ContentLength = contentLength.Length;
request.Headers.Host = host;
//request.Headers.Host = host;
// 執行 API 呼叫
var response = await client.SendAsync(request);
......
......@@ -27,11 +27,11 @@ namespace backstage.Models.TokenVault
public class TokenVaultForCreate
{
public int type { get; set; }
public int type { get; set; } = 1;
public int merchant_id { get; set; }
public string name { get; set; }
public string url { get; set; }
public string url { get; set; } = "";
public string description { get; set; }
......@@ -54,6 +54,18 @@ namespace backstage.Models.TokenVault
public int Enabled { get; set; }
public string key_id { get; set; }
public List<User> users { get; set; }
public List<Mask> masks { get; set; }
}
public class FieldForCreate
{
public int merchant_id { get; set; }
public int vault_id { get; set; }
public string name { get; set; }
public string desc { get; set; }
public string format_exp { get; set; }
public int enabled { get; set; }
}
public class FieldsResponse
......@@ -61,8 +73,20 @@ namespace backstage.Models.TokenVault
public int r { get; set; }
public string m { get; set; }
public string flags { get; set; }
public List<string> failInfo { get; set; }
//public int count { get; set; }
public List<Field> fields { get; set; }
}
public class Mask
{
public int id { get; set; }
public int type { get; set; }//0:資料遮罩 *號 , 1:資料亂碼 相同格式 數字或文字替換
public int is_unique { get; set; }
public string setting { get; set; }
}
}
......@@ -120,5 +120,15 @@ public class emaildata
public string flags { get; set; }
}
public class Response
{
//user/list response
public int r { get; set; }
public Object m { get; set; }
public string flags { get; set; }
}
}
......@@ -32,7 +32,7 @@
<link href="~/css/myStylecss.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-switch/dist/css/bootstrap3/bootstrap-switch.min.css">
<link href="~/css/tokenizationPlatform.css" rel="stylesheet" />
@RenderSection("header", required: false)
</head>
......@@ -41,7 +41,7 @@
<nav class="navbar default-layout-navbar col-lg-12 col-12 p-0 fixed-top d-flex flex-row">
<div class="text-center navbar-brand-wrapper d-flex align-items-center justify-content-center">
<a class="navbar-brand brand-logo" asp-controller="Home" asp-action="Index"><img src="~/images/logo.png" alt="logo" /></a>
<a class="navbar-brand brand-logo" asp-controller="Home" asp-action="Index"><img src="~/images/LOGO_nsecured.svg" alt="logo" /></a>
@*<a class="navbar-brand brand-logo-mini" asp-controller="Home" asp-action="Index"><img src="~/images/logo-mini.svg" alt="logo" /></a>*@
</div>
<div class="navbar-menu-wrapper d-flex align-items-stretch">
......@@ -55,10 +55,10 @@
{
<a class="nav-link dropdown-toggle" id="profileDropdown" href="#" data-toggle="dropdown" aria-expanded="false">
<div class="nav-profile-img">
<img src="~/images/faces/man.svg" alt="image">
<span class="availability-status online"></span>
</div>
<!--<div class="nav-profile-img">-->
@*<img src="~/images/faces/man.svg" alt="image">*@
<!--<span class="availability-status online"></span>
</div>-->
<div class="nav-profile-text">
<p class="mb-1 text-black">@Context.User.Claims.FirstOrDefault(m => m.Type == "username").Value</p>
</div>
......@@ -88,15 +88,77 @@
</li>
<!--<li>
<div class="row align-items-center">
<div class="col-auto pdR3 noneUnderMD">
<label class="text-black mgB0" for="department">部門:</label>
</div>
<div class="col-auto pdL0 pdR300 mgR20">
<select class="custom-select0 form-control form-control-sm" id="department">
<option value="0" selected="">台景達金融科技</option>
<option value="1">部門1</option>
<option value="2">部門2</option>
<option value="3">部門3</option>
</select>
</div>-->
<!-- <div class="col-auto pdL0">
<div class="nav-item nav-departmentSetting dropdown">
<a class="nav-link dropdown-toggle mgL3" id="departmentSetting" href="#" data-toggle="dropdown" aria-expanded="false">
<div class="nav-profile-img0">
<span class="mb-1 text-black">部門管理</span>
</div>
</a>
<div class="dropdown-menu navbar-dropdown" aria-labelledby="departmentSetting">
<a class="dropdown-item" href="">
<i class="mdi mdi-account-settings mr-2"></i>新增部門
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="">
<i class="mdi mdi-lock-open mr-2"></i>部門清單
</a>
</div>
</div>
</div> -->
<!--</div>
</li>-->
<li class="nav-item dropdown">
<a class="nav-link count-indicator dropdown-toggle" id="languageDropdown" href="#" title="語言" data-toggle="dropdown" aria-expanded="false">
<i class="mdi mdi-earth"></i>
</a>
<div class="dropdown-menu dropdown-menu-right navbar-dropdown preview-list" aria-labelledby="languageDropdown">
<a class="dropdown-item preview-item">
<div class="preview-thumbnail">
<div class="preview-icon languageIcon">
<img src="/images/icon-lan-en-80.jpg">
</div>
</div>
<div class="preview-item-content d-flex align-items-start flex-column justify-content-center">
<h6 class="preview-subject font-weight-normal mb-1">English</h6>
</div>
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item preview-item">
<div class="preview-thumbnail">
<div class="preview-icon languageIcon">
<img src="/images/icon-lan-cn-80.jpg">
</div>
</div>
<div class="preview-item-content d-flex align-items-start flex-column justify-content-center">
<h6 class="preview-subject font-weight-normal mb-1">中文</h6>
</div>
</a>
</div>
</li>
<li class="nav-item d-none d-lg-block full-screen-link">
<a class="nav-link">
<i class="mdi mdi-fullscreen" id="fullscreen-button"></i>
</a>
</li>
@*<li class="nav-item d-none d-lg-block full-screen-link">
<a class="nav-link">
<i class="mdi mdi-fullscreen" id="fullscreen-button"></i>
</a>
</li>*@
</ul>
<button class="navbar-toggler navbar-toggler-right d-lg-none align-self-center" type="button" data-toggle="offcanvas">
<span class="mdi mdi-menu"></span>
......
@model backstage.Models.TokenVault.Field
@{
ViewData["Title"] = "新增欄位";
}
<!-- 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 id="msgDiv"></div>
</div>
<div class="row">
<div class="col-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
@*路徑列*@
<div class="col-md-12">
<ul class="breadcrumb breadcrumb_memberGo">
<li class="breadcrumb-item active"><a asp-action="List" asp-route-merchantId="@ViewBag.Merchant_id">資料代碼保險庫</a></li>
<li class="breadcrumb-item active"><a asp-action="ListFields" asp-route-merchant_id="@ViewBag.Merchant_id" asp-route-vault_id="@ViewBag.vault_id">欄位資料</a></li>
<li class="breadcrumb-item ">新增欄位</li>
</ul>
</div>
</div>
<form class="forms-sample" method="post" asp-action="CreateDepartment" autocomplete="off">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
<p class="form-title card-description">基本資料</p>
<div class="row">
<div class="col-md-6 form-group required">
<label asp-for="name" class="col-form-label" for=""></label>
<input asp-for="name" type="text" class="form-control" >
</div>
<div class="col-md-4 form-group required">
<label asp-for="desc" class="col-form-label" for=""></label>
<input asp-for="desc" type="text" class="form-control" >
</div>
</div>
<div class="row">
<div class="col-md-4 form-group required">
<label asp-for="format_exp" class="col-form-label" for=""></label>
<input asp-for="format_exp" type="text" class="form-control" id="">
<span asp-validation-for="format_exp" class="text-danger"></span>
</div>
<div class="col-md-4 form-group required">
<label asp-for="Enabled" class="col-form-label" for=""></label>
<input asp-for="Enabled" type="text" class="form-control" id="">
<span asp-validation-for="Enabled" class="text-danger"></span>
</div>
</div>
<button type="submit" class="btn btn-primary mr-2">送出</button>
<a type="button" class="btn btn-light" asp-action="ListFields">返回列表</a>
</form>
</div>
</div>
</div>
</div>
@section Scripts{
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
var msg = '@TempData["msg"]';
var IsSuccess = '@TempData["IsSuccess"]';
console.log(IsSuccess + msg);
if (msg != '') {
showAlert(IsSuccess, msg);
}
</script>
}
......@@ -21,13 +21,13 @@
<div class="card-body">
<h4 class="card-title">新增TokenVault</h4>
<form class="forms-sample" method="post" asp-action="CreateDepartment" autocomplete="off">
<form class="forms-sample" method="post" asp-action="CreateTokenVault" autocomplete="off">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
<p class="form-title card-description">基本資料</p>
<div class="row">
<div class="col-md-6 form-group required">
<select id="selectDepartmentList" class="form-control" asp-items="ViewBag.DepartmentsList">
<select id="selectDepartmentList" class="form-control" asp-for="merchant_id" asp-items="ViewBag.DepartmentsList">
<option value="">選擇部門</option>
</select>
......@@ -54,7 +54,7 @@
<button type="submit" class="btn btn-primary mr-2">新增</button>
<a type="button" class="btn btn-light" asp-action="ListDepartments">返回列表</a>
<a type="button" class="btn btn-light" asp-action="List">返回列表</a>
</form>
</div>
</div>
......
......@@ -3,7 +3,35 @@
ViewData["Title"] = "Fields列表管理";
}
@section header{
<script>
//欄位檢查
function validateForm() {
var nameInput = document.getElementsByName("name")[0];
var nameValue = nameInput.value.trim();
var nameRegex = /^[a-zA-Z0-9_]+$/;
var nameErrorDiv = document.getElementById("nameError");
var submitButton = document.querySelector("button[type='submit']");
if (nameValue === "") {
nameErrorDiv.textContent = "名稱不能為空";
submitButton.disabled = true; // 禁用提交按鈕
return false; // 阻止表單提交
} else if (!nameRegex.test(nameValue)) {
nameErrorDiv.textContent = "名稱只能包含英文字母、數字和底線";
submitButton.disabled = true; // 禁用提交按鈕
return false; // 阻止表單提交
} else {
nameErrorDiv.textContent = "";
submitButton.disabled = false; // 啟用提交按鈕
return true; // 允許表單提交
}
}
</script>
}}
<div class="page-header">
<h3 class="page-title">Fields列表管理列表管理</h3>
<input id="msg" hidden value="@TempData["msg"]" />
......@@ -13,6 +41,7 @@
}
<div id="msgDiv"></div>
</div>
<div class="row">
<div class="col-lg-12 grid-margin stretch-card">
......@@ -29,6 +58,26 @@
</div>
</div>
<div style="display: flex; justify-content: space-between;">
<div style="float: left; width: 50%;">
<div class="table-responsive">
<table class="table table-striped table-hover0 table-bordered0" id="memberGoTbl_dataDetail">
<tbody>
<tr>
<th>保險庫</th>
<td class="item">ID</td>
<td class="content">@ViewBag.VaultInfo.vault_id</td>
<td class="item">名稱</td>
<td class="content">@ViewBag.VaultInfo.name</td>
</tr>
</tbody>
</table>
</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>
</div>
</div>
<div>
<div class="rank-table">
<div class="table-responsive">
......@@ -59,7 +108,7 @@
<td>
<!-- <button class="btn btnPermission btn-sm" data-toggle="modal" data-target="#permission">資料遮罩</button> -->
<a href="tokenVault_fields_masks.html" class="btn btnPermission btn-sm">資料遮罩</a>
<a class="btn btnPermission btn-sm masksBtn">資料遮罩</a>
<a class="btn btnPermission btn-sm usersBtn">使用者</a>
</td>
</tr>
......@@ -80,7 +129,46 @@
</div>
</div>
<!-- MODAL -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<form class="forms-sample" method="post" asp-action="CreateField" autocomplete="off">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
<h4 class="modal-title">基本資料</h4>
<div class="modal-body">
<div class="form-group">
<input name="merchant_id" value=@ViewBag.Merchant_id hidden />
<input name="vault_id" value=@ViewBag.vault_id hidden />
</div>
<div class="form-group required">
<label class="control-label">name</label>
<input name="name" type="text" class="form-control" oninput="validateForm()">
<div id="nameError" class="text-danger"></div>
</div>
<div class="form-group required">
<label class="control-label">desc</label>
<input name="desc" type="text" class="form-control">
</div>
<div class="form-group required">
<label class="control-label">format_exp</label>
<input name="format_exp" type="text" class="form-control">
</div>
<div class="form-group required">
<label class="control-label">Enabled</label>
<input name="enabled" type="checkbox" class="form-check-input" checked>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary" id="createFieldBtn" disabled>送出</button>
<button type="button" class="btn btn-light" data-dismiss="modal">取消</button>
</div>
</form>
</div>
</div>
</div>
......@@ -96,14 +184,42 @@
}
//user按鈕
$(document).on('click', '.usersBtn', function () {
var merchant_id = parseInt('@ViewBag.Merchant_id');
var vault_id = parseInt('@ViewBag.vault_id');
var field_id = parseInt($(this).closest('tr').attr('id'));
//user按鈕
$(document).on('click', '.usersBtn', function () {
var merchant_id = parseInt('@ViewBag.Merchant_id');
var vault_id = parseInt('@ViewBag.vault_id');
var field_id = parseInt($(this).closest('tr').attr('id'));
window.location.href = '/tokenvault/ListUsers/' + "?vault_id=" + vault_id + "&Merchant_id=" + merchant_id+"&field_id="+field_id;
});
//mask按鈕
$(document).on('click', '.masksBtn', function () {
var merchant_id = parseInt('@ViewBag.Merchant_id');
var vault_id = parseInt('@ViewBag.vault_id');
var field_id = parseInt($(this).closest('tr').attr('id'));
window.location.href = '/tokenvault/ListMasks/' + "?vault_id=" + vault_id + "&Merchant_id=" + merchant_id+"&field_id="+field_id;
});
////Modal按鈕
//$("#createFieldBtn").on("click", function () {
// // 確認按鈕被點擊時的處理程式碼
// // 在這裡呼叫您的 API
// $('form').submit(function (e) {
// e.preventDefault(); // 防止表單自動提交
// $.post('/TokenVault/CreateField', $('form').serialize()).done(function (data) {
// console.log(data);
window.location.href = '/tokenvault/ListUsers/' + "?vault_id=" + vault_id + "&Merchant_id=" + merchant_id+"&field_id="+field_id;
});
// })
// });
//});
})
......
@model List<backstage.Models.TokenVault.Mask>
@{
ViewData["Title"] = "Mask列表管理";
}
<div class="page-header">
<h3 class="page-title">Mask列表管理</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
</div>
<div class="row">
<div class="col-lg-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<div class="row">
@*路徑列*@
<div class="col-md-12">
<ul class="breadcrumb breadcrumb_memberGo">
<li class="breadcrumb-item active"><a asp-action="List" asp-route-merchantId="@ViewBag.Merchant_id">資料代碼保險庫</a></li>
<li class="breadcrumb-item active"><a asp-action="ListFields" asp-route-merchant_id="@ViewBag.Merchant_id" asp-route-vault_id="@ViewBag.vault_id">欄位資料</a></li>
<li class="breadcrumb-item ">資料遮罩</li>
</ul>
</div>
</div>
<table class="table table-striped table-hover0 table-bordered0" id="memberGoTbl_dataDetail">
<!-- <thead>
<tr>
<th colspan="9" >欄位資料列表</th>
</tr>
</thead> -->
<tbody>
<tr>
<th>保險庫</th>
<td class="item">ID</td>
<td class="content">@ViewBag.vault_id</td>
<td class="item">名稱</td>
<td class="content">@ViewBag.VaultName</td>
</tr>
<tr>
<th>欄位</th>
<td class="item">ID</td>
<td class="content">@ViewBag.field_id</td>
<td class="item">名稱</td>
<td class="content">@ViewBag.FieldName</td>
</tr>
</tbody>
</table>
<div style="float: right;">
<a type="button" class="btn btn-info float-right mb-2" data-toggle="modal" data-target="#myModal">Create</a>
</div>
<div class="table-responsive">
<table class="table table-striped table-hover0 table-bordered" id="memberGoTbl_masksList">
<thead>
<tr>
<th colspan="9">資料遮罩列表</th>
</tr>
</thead>
<tbody>
<tr>
<th style=" border-left: solid 1px #d9d9d9;">ID</th>
<th>種類</th>
<th>唯一值</th>
<th style=" border-right: solid 1px #d9d9d9;">設定</th>
</tr>
@if (Model.Count > 0)
{
@foreach (var m in Model)
{
<tr>
<td class="item">@m.id</td>
<td class="content">@m.type</td>
<td class="item">@m.is_unique</td>
<td class="content">@m.setting</td>
</tr>
}
}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<!-- MODAL -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<form class="forms-sample" method="post" asp-action="CreateField" autocomplete="off">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
<h4 class="modal-title">基本資料</h4>
<div class="modal-body">
<div class="form-group">
<input name="merchant_id" value=@ViewBag.Merchant_id hidden />
<input name="vault_id" value=@ViewBag.vault_id hidden />
</div>
<div class="form-group required">
<label class="control-label">種類</label>
<input name="type" type="text" class="form-control" oninput="validateForm()">
<div id="typeError" class="text-danger"></div>
</div>
<div class="form-group required">
<label class="control-label">唯一直</label>
<input name="is_unique" type="text" class="form-control">
</div>
<div class="form-group required">
<label class="control-label">設定</label>
<input name="setting" type="checkbox" class="form-check-input" checked>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary" id="createFieldBtn" disabled>送出</button>
<button type="button" class="btn btn-light" data-dismiss="modal">取消</button>
</div>
</form>
</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);
}
//user按鈕
$(document).on('click', '.usersBtn', function () {
var merchant_id = parseInt('@ViewBag.Merchant_id');
var vault_id = parseInt('@ViewBag.vault_id');
var field_id = parseInt($(this).closest('tr').attr('id'));
window.location.href = '/tokenvault/ListUsers/' + "?vault_id=" + vault_id + "&Merchant_id=" + merchant_id+"&field_id="+field_id;
});
})
</script>
}
\ No newline at end of file
......@@ -31,7 +31,7 @@
<div>
<a type="button" class="btn btn-info float-right mb-2" data-toggle="modal" data-target="#myModal">加入使用者</a>
<a type="button" class="btn btn-info float-right mb-2" 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,21 +54,32 @@
{
@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>@i.allow_decrypt</td>
<td>@i.allow_new</td>
<td>@i.allow_update</td>
<td>@i.allow_del</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>
}
}
......@@ -87,7 +98,7 @@
</div>
</div>
<!-- 模态框 -->
<!-- MODAL -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
......@@ -98,13 +109,13 @@
</button>
</div>
<div class="modal-body">
<select class="form-control" asp-items="ViewBag.users">
<select id="selectUser" class="form-control" asp-items="ViewBag.users">
<!-- 其他用户选项 -->
</select>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">確認</button>
<button type="button" class="btn btn-primary" id="confirmBtn" data-dismiss="modal">確認</button>
</div>
</div>
</div>
......@@ -122,13 +133,33 @@
}
$("#confirmBtn").on("click", function () {
// 確認按鈕被點擊時的處理程式碼
// 在這裡呼叫您的 API
var merchant_id = parseInt('@ViewBag.Merchant_id');
var vault_id = parseInt('@ViewBag.vault_id');
var field_id = parseInt('@ViewBag.field_id');
var selectedUser = parseInt($("#selectUser").val()); // 替換為您實際使用的選取元素的 ID
$.ajax({
url: "/TokenVault/Addusers",
method: "POST",
contentType: "application/json",
data: JSON.stringify({ Merchant_id: merchant_id, vault_id: vault_id, field_id: field_id, user_id: selectedUser}),
success: function (response) {
// API 呼叫成功的處理程式碼
},
error: function (xhr, status, error) {
// API 呼叫失敗的處理程式碼
}
});
});
})
})
</script>
}
\ No newline at end of file
......@@ -20,7 +20,7 @@
<div class="card">
<div class="card-body">
<h4 class="card-title">編輯部門</h4>
<a type="button" class="btn btn-info float-right mb-2" data-toggle="modal" data-target="#myModal">加入使用者</a>
<div>
<form class="forms-sample" method="post" asp-action="CreateDepartment" autocomplete="off">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
......
@model backstage.Models.Users.DepartmentsResponse
<div class="page-header">
<h3 class="page-title">部門列表管理</h3>
<h3 class="page-title">Department List</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
......@@ -13,11 +13,11 @@
<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">新增部門</a>
<a type="button" class="btn btn-info float-right mb-2" asp-action="CreateDepartment">Create</a>
@*列表*@
<div class="">
<table class="table table-striped">
<table class="table table-striped ">
<thead>
<tr>
<th>merchant_id</th>
......
@model backstage.Models.Users.UserResponse
<div class="page-header">
<h3 class="page-title">使用者列表管理</h3>
<h3 class="page-title">User List</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
......@@ -14,8 +14,8 @@
<div class="col-lg-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<div id="adminStatus" style="float: left;">User數量:@ViewBag.userCount / Admin 數量:@ViewBag.adminCount </div>
<a type="button" class="btn btn-info float-right mb-2" asp-action="CreateUser">新增使用者</a>
<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>
@*列表*@
<div class="">
......@@ -30,7 +30,7 @@
@*<th>locked</th>*@
<th>creation_date</th>
<th>enabled</th>
<th>管理員</th>
<th>Admin</th>
@*<th>birthdate</th>
<th>marital_status</th>
<th>gender</th>
......@@ -53,7 +53,7 @@
<td>@i.name</td>
@*<td>@i.name_en</td>*@
<td>@i.username</td>
@if (i.email!=null)
@if (i.email != null)
@if (i.email.Count > 0)
{
<td>@i.email[0].email</td>
......@@ -65,7 +65,8 @@
@*<td>@i.locked</td>*@
<td>@i.created_date</td>
<td>@i.enabled</td>
<td> <input type="checkbox" class="toggleButton" @(i.enabled==1 ? "checked" : "") disabled></td>
<td> <input type="checkbox" class="toggleButton" @(i.isAdmin ? "checked" : "")></td>
@*@if (i.isAdmin)
{ <td>是</td>}
......
......@@ -42,9 +42,9 @@
<div class="col-lg-4 mx-auto">
<div class="auth-form-light text-left p-5">
<div class="brand-logo">
@*<img src="~/images/logo.svg">*@
<img src="~/images/LOGO_nsecured.svg">
</div>
<h4 class="text-center">TokenVault管理後台</h4>
<h4 class="text-center">Tokenization Manager</h4>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
......@@ -56,16 +56,16 @@
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<input class="form-control form-control-lg" asp-for="username" placeholder="帳號" />
<input class="form-control form-control-lg" asp-for="username" placeholder="username" />
<span asp-validation-for="username" class="text-danger"></span>
</div>
<div class="form-group">
<input class="form-control form-control-lg" type="password" asp-for="pwd" placeholder="密碼" />
<input class="form-control form-control-lg" type="password" asp-for="pwd" placeholder="password" />
<span asp-validation-for="pwd" class="text-danger"></span>
</div>
<div class="mt-3">
<button type="submit" class="btn btn-block btn-gradient-primary btn-lg font-weight-medium">登入</button>
<button type="submit" class="btn btn-block btn-gradient-primary btn-lg font-weight-medium">Login</button>
</div>
@*<div class="my-2 d-flex justify-content-between align-items-center">
<div class="form-check">
......@@ -79,7 +79,7 @@
<button type="button" class="btn btn-block btn-facebook">
<i class="mdi mdi-facebook mr-2"></i>使用facebook登入</button>
</div>*@
<div class="text-center mt-4 font-weight-light">沒有帳號?<a asp-action="Register" class="text-primary">建立</a></div>
@*<div class="text-center mt-4 font-weight-light">沒有帳號?<a asp-action="Register" class="text-primary">建立</a></div>*@
</form>
</div>
......
......@@ -19265,3 +19265,11 @@ tbody {
overflow: hidden;
}
.languageIcon img {
width: 26px !important;
height: 26px !important;
}
.departmentRow {
cursor: pointer;
}
\ No newline at end of file
<svg width="132" height="56" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fill-rule="evenodd">
<path fill="#35A9E1" d="m15.34 30.66.66-3.403L8.924 20H5.105L2 37h3.833l2.473-13.57z"/>
<path fill="#35A9E1" d="M22 20h-3.56l-2.306 13.57-6.558-7.203L9 29.796 15.545 37h3.573zM25.57 32.64c.11.36.32.679.605.916.295.253.643.431 1.017.519.419.118.851.175 1.286.173.336-.003.672-.03 1.004-.08.36-.05.711-.152 1.042-.306.335-.142.638-.355.888-.625.26-.276.43-.63.489-1.01a1.36 1.36 0 0 0-.232-1.076 2.566 2.566 0 0 0-.952-.678 8.09 8.09 0 0 0-1.415-.478c-.54-.133-1.081-.293-1.622-.452-.55-.154-1.09-.34-1.62-.558a4.454 4.454 0 0 1-1.352-.864 3.068 3.068 0 0 1-.849-1.33 3.836 3.836 0 0 1-.077-1.9c.126-.78.43-1.519.888-2.153a6.149 6.149 0 0 1 1.595-1.528 7.016 7.016 0 0 1 2.059-.917A8.146 8.146 0 0 1 30.485 20a9.358 9.358 0 0 1 2.33.28c.673.172 1.304.49 1.852.93.515.42.902.982 1.12 1.621a4.9 4.9 0 0 1 .115 2.406h-3.345a2.723 2.723 0 0 0-.09-1.17 1.619 1.619 0 0 0-.54-.757 2.5 2.5 0 0 0-.901-.386 6.21 6.21 0 0 0-1.158-.186 3.73 3.73 0 0 0-.85.093c-.286.052-.562.16-.81.319a2.46 2.46 0 0 0-.67.558 1.853 1.853 0 0 0-.36.877 1.478 1.478 0 0 0 0 .771c.14.243.352.435.605.545.435.211.887.38 1.351.505l2.278.638c.396.084.786.19 1.17.32.51.173.989.434 1.416.77.473.364.854.844 1.106 1.395.295.723.354 1.526.168 2.286a5.42 5.42 0 0 1-.772 2.074 5.698 5.698 0 0 1-1.519 1.648 7.1 7.1 0 0 1-2.238 1.076 9.837 9.837 0 0 1-2.895.386 9.353 9.353 0 0 1-2.47-.32 5.28 5.28 0 0 1-1.982-1.036 4.107 4.107 0 0 1-1.184-1.807 5.203 5.203 0 0 1-.09-2.592h3.358c-.083.465-.052.945.09 1.395M52 20l-.531 2.957h-8.575l-.61 3.427h7.87l-.49 2.735h-7.872l-.69 3.924h8.748L49.319 36H37l2.814-16zM63.225 24.68a3.038 3.038 0 0 0-.645-.893 2.873 2.873 0 0 0-.995-.613 3.376 3.376 0 0 0-1.237-.214 4.8 4.8 0 0 0-2.152.467 5.101 5.101 0 0 0-1.613 1.253 7.123 7.123 0 0 0-1.09 1.8 9.996 9.996 0 0 0-.605 2.08c-.12.658-.16 1.33-.12 2 .014.6.146 1.194.39 1.745.258.514.66.944 1.156 1.24.609.332 1.296.494 1.99.467a4.058 4.058 0 0 0 2.77-1 5.842 5.842 0 0 0 1.613-2.666h3.497a9.5 9.5 0 0 1-1.197 2.76 8.957 8.957 0 0 1-1.896 2.106 8.369 8.369 0 0 1-2.447 1.333c-.927.308-1.9.462-2.878.453a7.835 7.835 0 0 1-3.281-.64 5.692 5.692 0 0 1-2.219-1.8 6.495 6.495 0 0 1-1.116-2.666 9.241 9.241 0 0 1 0-3.32c.253-1.2.698-2.352 1.318-3.412a10.45 10.45 0 0 1 2.07-2.666 9.092 9.092 0 0 1 2.878-1.827 8.94 8.94 0 0 1 3.51-.666 7.886 7.886 0 0 1 2.501.386 5.487 5.487 0 0 1 1.963 1.134c.56.505.988 1.135 1.25 1.84.3.8.414 1.655.337 2.506H63.48c.008-.41-.08-.816-.256-1.187M79.385 35.344a8.793 8.793 0 0 1-5.383 1.63 6.447 6.447 0 0 1-4.884-1.617c-1.036-1.086-1.346-2.715-.955-5.024L69.966 20h3.62l-1.804 10.333a7.417 7.417 0 0 0-.12 1.358c-.008.403.09.801.282 1.154.207.357.516.641.888.815.538.234 1.123.34 1.709.312a3.902 3.902 0 0 0 2.825-.869 4.933 4.933 0 0 0 1.211-2.715l1.803-10.334H84l-1.803 10.334a7.66 7.66 0 0 1-2.812 4.956M92.252 27.235a3.18 3.18 0 0 0 1.984-.536c.546-.445.887-1.08.95-1.766a1.815 1.815 0 0 0-.312-1.701 2.487 2.487 0 0 0-1.794-.523h-4.076l-.813 4.5 4.061.026zm2.634-7.234a5.204 5.204 0 0 1 1.944.34c.523.213.99.54 1.359.955.342.41.59.888.718 1.4a4.006 4.006 0 0 1 0 1.713 5.3 5.3 0 0 1-1.058 2.447 4.903 4.903 0 0 1-2.296 1.57c.38.102.731.29 1.02.549.245.252.435.55.556.876.126.359.194.734.204 1.112a9.09 9.09 0 0 1 0 1.217c0 .249 0 .55-.124.89-.12.34-.08.693-.107 1.06-.027.34-.027.68 0 1.02.019.282.098.558.23.81h-3.68a5.671 5.671 0 0 1 0-1.818c.081-.693.135-1.373.161-2.014a2.649 2.649 0 0 0-.447-1.832 2.414 2.414 0 0 0-1.876-.588h-3.693L86.6 36H83l2.922-16h8.964zM115 20l-.519 2.957h-8.575l-.61 3.427h7.858l-.464 2.735h-7.886l-.702 3.924h8.748L112.317 36H100l2.866-16zM121.2 33.04a4.84 4.84 0 0 0 1.575-.3 4.04 4.04 0 0 0 1.442-.809 5.62 5.62 0 0 0 1.205-1.473 7.12 7.12 0 0 0 .728-2.243c.14-.717.195-1.449.159-2.178a3.577 3.577 0 0 0-.49-1.655 2.64 2.64 0 0 0-1.243-1.07 5.355 5.355 0 0 0-2.144-.365h-2.542L118.09 33l3.11.04zM123.847 20c.964-.01 1.92.158 2.82.496.813.3 1.53.808 2.077 1.473.562.719.939 1.56 1.1 2.452.208 1.147.208 2.32 0 3.468a12.309 12.309 0 0 1-1.033 3.208 8.839 8.839 0 0 1-1.827 2.607 8.282 8.282 0 0 1-2.647 1.682 8.703 8.703 0 0 1-3.335.613H114L116.86 20h6.987z"/>
<path d="M0 0h132v56H0z"/>
</g>
</svg>
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