Commit caf7a545 authored by Jason's avatar Jason

正在寫部門加入使用者

parent ee729155
using System;
using backstage.Models.Users;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
......@@ -10,8 +11,10 @@ namespace backstage.Models.TokenVault
{
public int vault_id { get; set; }
public int merchant_id { get; set; }
public string name { get; set; }
public string url { get; set; }
public string desc { get; set; }
public int type { get; set; }
public int enabled { get; set; }
......@@ -20,6 +23,18 @@ namespace backstage.Models.TokenVault
public int userCount { get; set; }
}
public class TokenVaultForCreate
{
public int type { get; set; }
public int merchant_id { get; set; }
public string name { get; set; }
public string url { get; set; }
public string description { get; set; }
}
public class TokenVaultResponse
{
......@@ -29,4 +44,25 @@ namespace backstage.Models.TokenVault
//public int count { get; set; }
public List<TokenVault> info { get; set; }
}
public class Field
{
public int 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 string key_id { get; set; }
public List<User> users { get; set; }
}
public class FieldsResponse
{
public int r { get; set; }
public string m { get; set; }
public string flags { get; set; }
//public int count { get; set; }
public List<Field> fields { get; set; }
}
}
......@@ -11,7 +11,6 @@ namespace backstage.Models.Users
//public int Id { get; set; }
public int merchant_id { get; set; }
public string address { get; set; }
public string country_id { get; set; }
public string postcode { get; set; }
......@@ -33,13 +32,37 @@ namespace backstage.Models.Users
public int tts { get; set; }
}
public class DepartmentForCreate
{
//新增後設為 merchant admin 的 user ID
public int main_uid { get; set; } = 1;
public string address { get; set; } = "null";
public string countryid { get; set; } = "Taiwan";
public string postcode { get; set; } = "null";
public string phone { get; set; } = "null";
public string fax { get; set; }
public string VATID_verify { get; set; }
public string name { get; set; }
public string name_en { get; set; } = "null";
public int enabled { get; set; }
public string merchant_type { get; set; }
public string merchant_level { get; set; }
public int tts { get; set; }
}
public class DepartmentsResponse
{
public int r { get; set; }
public string m { get; set; }
public int uid { get; set; }
public object m { get; set; }
public string flags { get; set; }
public int count { get; set; }
public Department merchant { get; set; }
public List<Department> merchants { get; set; }
}
}
......@@ -8,34 +8,67 @@ namespace backstage.Models.Users
{
public class User
{
public int id { get; set; }
public int uid { get; set; }
public string name { get; set; }
public string name_en { get; set; }
public string username { get; set; }
//登入用
public string pwd { get; set; }
//新增使用者用
public string password { get; set; }
public List<emaildata> email { get; set; }
public int locked { get; set; }
public DateTime creation_date { get; set; }
public int enabled { get; set; }
public DateTime created_date { get; set; }
public int enabled { get; set; } = 1;
public DateTime birthdate { get; set; }
public string marital_status { get; set; }
public string gender { get; set; }
public string education { get; set; }
public string natid { get; set; }
public string lang { get; set; }
public string lang { get; set; } = "zhg";
//判斷是否為admin
public bool isAdmin { get; set; } = false;
//=========Fields=========
public List<int> masks{get;set;}
public string masksText { get; set; }
public int allow_decrypt { get; set; }
public int allow_new { get; set; }
public int allow_update { get; set; }
public int allow_del { get; set; }
public int default_mask_id { get; set; }
}
public class Mask
{
public int id { get; set; }
public string mask { get; set; }
public string type { get; set; }
}
public class emaildata
{
public int id { get; set; }
public string email { get; set; }
public string type { get; set; }
}
public class phonedata
{
public int id { get; set; }
public string phone { get; set; }
public string type { get; set; }
//[NotMapped]
//public string newPassword { get; set; }
//[NotMapped]
//public string ConfirmNewPassword { get; set; }
//public byte[] PasswordHash { get; set; }
//public byte[] PasswordSalt { get; set; }
//public int role { get; set; }
}
public class UserLogin
{
......@@ -48,16 +81,44 @@ namespace backstage.Models.Users
public string flags { get; set; }
}
public class GetUserResponse
{
//user/list response
public int r { get; set; }
public string m { get; set; }
public User user { get; set; }
public List<emaildata> email { get; set; }
}
public class UserResponse
{
//user/list response
public int r { get; set; }
public string m { get; set; }
public int userCount { get; set; }
public List<User> Users{ get; set; }
public List<User> Users { get; set; }
public User user { get; set; }
////User/add response
//public string uid { get; set; }
//public string code_time { get; set; }
//public List<Object> verifyEmail { get; set; }
//public string flags { get; set; }
}
public class UserAddResponse
{
//user/list response
public int r { get; set; }
public Object m { get; set; }
//User/add response
public string uid { get; set; }
public string code_time { get; set; }
public List<Object> verifyEmail { get; set; }
public string flags { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace backstage.Models.Users
{
public class UserForChangePassword:IValidatableObject
{
public string Username { get; set; }
[Required]
public string pwd { get; set; }
[Required]
public string NewPassword { get; set; }
[Required]
public string ConfirmNewPassword { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (NewPassword != ConfirmNewPassword)
{
yield return new ValidationResult("兩次密碼輸入不相符", new string[] { "ConfirmNewPassword" });
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace backstage.Models.Users
{
public class UserForRegister : IValidatableObject
{
[Required]
[EmailAddress]
public string Username { get; set; }
[Required]
[StringLength(50, MinimumLength = 6, ErrorMessage = "請輸入6~50位字元當作密碼")]
public string pwd { get; set; }
[Required]
public string ConfirmPassword { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (pwd != ConfirmPassword)
{
yield return new ValidationResult("兩次密碼輸入不相符", new string[] { "ConfirmPassword" });
}
}
}
}
......@@ -31,6 +31,8 @@
<link href="~/lib/datetimepicker/css/bootstrap-datetimepicker.css" rel="stylesheet" />
<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">
@RenderSection("header", required: false)
</head>
......@@ -88,7 +90,7 @@
</li>
<li class="nav-item d-none d-lg-block full-screen-link">
<a class="nav-link">
......@@ -109,38 +111,30 @@
<ul class="nav ">
<li class="nav-item">
<a class="nav-link" data-toggle="collapse" href="#Member" aria-expanded="false" aria-controls="Member">
<span class="menu-title">帳號管理</span>
<span class="menu-title">Users</span>
<i class="menu-arrow"></i>
<i class="mdi mdi-account-multiple menu-icon"></i>
</a>
<div class="collapse" id="Member">
<ul class="nav flex-column sub-menu">
<li class="nav-item"> <a class="nav-link" asp-controller="User" asp-action="ListUsers">使用者列表</a></li>
<li class="nav-item"> <a class="nav-link" asp-controller="User" asp-action="ListDepartments">部門列表</a></li>
<li class="nav-item"> <a class="nav-link" asp-controller="User" asp-action="CreateUser">新增使用者</a></li>
<li class="nav-item"> <a class="nav-link" asp-controller="User" asp-action="ListUsers">User List</a></li>
<li class="nav-item"> <a class="nav-link" asp-controller="User" asp-action="ListDepartments">Department List</a></li>
@*<li class="nav-item"> <a class="nav-link" asp-controller="Member" asp-action="GetMember">信徒資料</a></li>*@
</ul>
</div>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="collapse" href="#Income" aria-expanded="false">
<span class="menu-title">Token Vault管理</span>
<i class="menu-arrow"></i>
<a class="nav-link" href="@Url.Action("List", "TokenVault")">
<span class="menu-title">Token Vault</span>
<i class="mdi mdi-database menu-icon"></i>
</a>
<div class="collapse" id="Income">
<ul class="nav flex-column sub-menu">
<li class="nav-item"> <a class="nav-link" asp-controller="TokenVault" asp-action="ListTokenVault">Token Vault列表</a></li>
<li class="nav-item"> <a class="nav-link" asp-controller="" asp-action="">新增Token Vault</a></li>
<li class="nav-item"> <a class="nav-link" asp-controller="" asp-action="">Token Entry</a></li>
@*<li class="nav-item"> <a class="nav-link" asp-controller="FinancialRecordIncome" asp-action="GetIncome">收入紀錄管理</a></li>*@
</ul>
</div>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="collapse" href="#FinancialRecordExpenses" aria-expanded="false" aria-controls="FinancialRecordExpenses">
<span class="menu-title">Key Management</span>
<span class="menu-title">Keys</span>
<i class="menu-arrow"></i>
<i class="mdi mdi-bank menu-icon"></i>
</a>
......@@ -151,11 +145,11 @@
</ul>
</div>
</li>
</ul>
</nav><!-- partial -->
<div class="main-panel">
<div class="content-wrapper">
......@@ -176,6 +170,7 @@
@*<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>*@
<script src="~/lib/bootstrap-4.5.0-dist/js/bootstrap.js"></script>
<script src="~/js/functions.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap-switch@3.3.4/dist/js/bootstrap-switch.min.js"></script>
<!-- plugins:js -->
@*<script src="~/vendors/js/vendor.bundle.base.js"></script>*@
......
@model backstage.Models.TokenVault.TokenVaultForCreate
@{
ViewData["Title"] = "新增TokenVault";
}
<!-- partial -->
<div class="page-header">
<h3 class="page-title">新增TokenVault</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">
<h4 class="card-title">新增TokenVault</h4>
<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">
<select id="selectDepartmentList" class="form-control" asp-items="ViewBag.DepartmentsList">
<option value="">選擇部門</option>
</select>
</div>
</div>
<div class="row">
<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" id="">
<span asp-validation-for="name" class="text-danger"></span>
</div>
<div class="col-md-4 form-group required">
<label asp-for="description" class="col-form-label" for=""></label>
<input asp-for="description" type="text" class="form-control" id="">
<span asp-validation-for="description" 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="ListDepartments">返回列表</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>
}
@model backstage.Models.TokenVault.TokenVault
@{
ViewData["Title"] = "編輯TokenVault";
}
<!-- partial -->
<div class="page-header">
<h3 class="page-title">編輯TokenVault</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">
<h4 class="card-title">編輯TokenVault</h4>
<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="merchant_id" class="col-form-label" for=""></label>
<select id="selectDepartmentList" class="form-control" asp-items="ViewBag.DepartmentsList" asp-for="merchant_id">
</select>
</div>
<div class="col-md-4 form-group required">
<label asp-for="created" class="col-form-label" for=""></label>
<input asp-for="created" type="text" class="form-control" disabled>
</div>
</div>
<div class="row">
<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" id="">
<span asp-validation-for="name" class="text-danger"></span>
</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" id="">
<span asp-validation-for="desc" class="text-danger"></span>
</div>
</div>
<div class="row">
<div class="col-md-4 form-group required">
<label asp-for="type" class="col-form-label" for=""></label>
<input asp-for="type" type="text" class="form-control" id="" disabled>
<span asp-validation-for="type" 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="" disabled>
<span asp-validation-for="enabled" class="text-danger"></span>
</div>
</div>
<div class="row">
<div class="col-md-4 form-group required">
<label asp-for="tokenCount" class="col-form-label" for=""></label>
<input asp-for="tokenCount" type="text" class="form-control" id="" disabled>
</div>
<div class="col-md-4 form-group required">
<label asp-for="userCount" class="col-form-label" for=""></label>
<input asp-for="userCount" type="text" class="form-control" id="" disabled>
</div>
</div>
<button type="submit" class="btn btn-primary mr-2">編輯</button>
<a type="button" class="btn btn-light" asp-action="List">返回列表</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>
}
......@@ -3,6 +3,7 @@
ViewData["Title"] = "TokenVault列表管理";
}
<div class="page-header">
<h3 class="page-title">TokenVault列表管理</h3>
<input id="msg" hidden value="@TempData["msg"]" />
......@@ -17,46 +18,56 @@
<div class="col-lg-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<form method="get" asp-action="List">
<h4 class="card-title">TokenVault列表管理</h4>
<div class="row justify-content-center">
<div class="col-12 col-md-10 no-padding rank-space">
<div class="row justify-content-center">
<div class="row">
<div class="col-md-12">
<ul class="breadcrumb breadcrumb_memberGo">
<li class="breadcrumb-item active">資料代碼保險庫</li>
</ul>
</div>
</div>
<div class="row justify-content-center">
<div class="col-12 col-md-10 no-padding rank-space">
<select id="selectDepartmentList"class="form-control col-10 col-md form-control margin-right margin-top" asp-items="ViewBag.DepartmentsList">
<div class="row justify-content-between">
<div class="col-md-auto">
<select id="selectDepartmentList" class="form-control margin-right margin-top" asp-items="ViewBag.DepartmentsList">
<option value="">選擇部門</option>
</select>
</div>
<div class="row">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
<div class="col-md-auto">
<a type="button" class="btn btn-info float-right mb-2" asp-action="CreateTokenVault">Create</a>
</div>
</div>
<div class="row">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div>
<div class="rank-table">
<div class="table-responsive">
<table class="table table-striped expense-color">
<thead>
<tr class="expense-color">
<th>vault_id</th>
<th>name</th>
<th>desc</th>
<th>type</th>
<th>created</th>
<th>tokenCount</th>
<th>userCount</th>
@*<th class="tblColEllipsis">備註</th>*@
<th></th>
</tr>
</thead>
<tbody id="tbody">
@*@if (Model.info.Count>0)
</div>
<div>
<div class="rank-table">
<div class="table-responsive">
<table class="table table-striped expense-color">
<thead>
<tr class="expense-color">
<th>編號</th>
<th>名稱</th>
<th>敘述</th>
<th>種類</th>
<th>建立日期</th>
<th>狀態</th>
<th>管理</th>
<th>代碼數量</th>
<th>使用者數量</th>
@*<th class="tblColEllipsis">備註</th>*@
<th></th>
</tr>
</thead>
<tbody id="tbody">
@*@if (Model.info.Count>0)
{
@foreach (var i in Model.info)
{
......@@ -68,19 +79,18 @@
<td>@i.created</td>
<td>@i.tokenCount</td>
<td>@i.userCount</td>
</tr>
}
}*@
</tbody>
</table>
</div>
</tbody>
</table>
</div>
</div>
</form>
</div>
</div>
......@@ -91,7 +101,7 @@
@section Scripts{
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
$('document').ready(function () {
var msg = '@TempData["msg"]';
......@@ -101,28 +111,85 @@
showAlert(IsSuccess, msg);
}
// 在頁面載入時檢查 localStorage 是否有選單值
var selectedOption = localStorage.getItem('selectedOption');
if (selectedOption) {
// 觸發 AJAX 請求並填入資料
loadData(selectedOption);
$('#selectDepartmentList').val(selectedOption);
}
// 在選單變更時保存選擇的值至 localStorage
$('#selectDepartmentList').change(function () {
var selectedOption = $(this).val();
localStorage.setItem('selectedOption', selectedOption);
});
var selectedValue = $('#selectDepartmentList').val();
console.log('selectedValue=' + selectedValue);
if (selectedValue != 0) {
// 使用 AJAX 傳遞選擇的值
$.ajax({
url: '/TokenVault/ListTokenVaultAjax', // 替換為適當的控制器方法路徑
type: 'POST', // 或 'GET',根據實際需求
data: { merchantId: selectedValue },
success: function (response) {
$('#tbody').empty();
$('#tbody').append(response);
// 在成功取得回應後的處理邏輯
//console.log(response);
},
error: function (xhr, status, error) {
// 在發生錯誤時的處理邏輯
console.error(error);
}
});
}
// 當選擇下拉選單時觸發事件
$('#selectDepartmentList').change(function () {
var selectedValue = $(this).val(); // 獲取選擇的值
loadData(selectedValue);
});
// 定義 AJAX 請求函式,將選單值傳遞至後端並填入 tbody
function loadData(selectedOption) {
// 使用 AJAX 傳遞選擇的值
$.ajax({
url: '/TokenVault/ListTokenVaultAjax', // 替換為適當的控制器方法路徑
type: 'POST', // 或 'GET',根據實際需求
data: { merchantId: selectedValue },
data: { merchantId: selectedOption },
success: function (response) {
$('#tbody').empty();
$('#tbody').append(response);
// 在成功取得回應後的處理邏輯
console.log(response);
//console.log(response);
},
error: function (xhr, status, error) {
// 在發生錯誤時的處理邏輯
console.error(error);
}
});
}
//vault編輯按鈕
$(document).on('click', '.tokenVaultRow', function () {
var vaultid = $(this).data('vaultid');
var merchantid = $(this).data('merchantid');
console.log('vaultid=' + vaultid);
window.location.href = '/tokenvault/Edit/' + vaultid + "?merchantid=" + merchantid;
});
//欄位按鈕
$(document).on('click', '.fieldsBtn', function () {
var vaultid = $(this).data('vault_id');
var merchantid = $(this).data('merchant_id');
console.log('vaultid=' + vaultid);
window.location.href = '/tokenvault/ListFields/' + "?vault_id=" + vaultid + "&Merchant_id=" + merchantid;
});
})
......
@model backstage.Models.TokenVault.FieldsResponse
@{
ViewData["Title"] = "Fields列表管理";
}
<div class="page-header">
<h3 class="page-title">Fields列表管理列表管理</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 ">欄位資料</li>
</ul>
</div>
</div>
<div>
<div class="rank-table">
<div class="table-responsive">
<table class="table table-striped expense-color">
<thead>
<tr class="expense-color">
<th>編號</th>
<th>名稱</th>
<th>敘述</th>
<th>格式</th>
<th>啟用</th>
<th>管理</th>
</tr>
</thead>
<tbody id="tbody">
@if (Model.fields.Count > 0)
{
@foreach (var i in Model.fields)
{
<tr id="@i.id" class="expense-color">
<td>@i.id</td>
<td>@i.name</td>
<td>@i.desc</td>
<td>@i.format_exp</td>
<td>@i.Enabled</td>
@*<td>@i.key_id</td>*@
<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 usersBtn">使用者</a>
</td>
</tr>
}
}
</tbody>
</table>
</div>
</div>
</div>
</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);
}
//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
@model List<backstage.Models.Users.User>
@{
ViewData["Title"] = "欄位Users列表管理";
}
<div class="page-header">
<h3 class="page-title">欄位Users列表管理</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 active">使用者</li>
</ul>
</div>
</div>
<div>
<a type="button" class="btn btn-info float-right mb-2" data-toggle="modal" data-target="#myModal">加入使用者</a>
<div class="rank-table">
<div class="table-responsive">
<table class="table table-striped expense-color">
<thead>
<tr class="expense-color">
<th>編號</th>
<th>名稱</th>
<th>username</th>
<th>遮罩</th>
<th>允許解密</th>
<th>允許新增</th>
<th>允許更新</th>
<th>允許刪除</th>
<th>預設遮罩ID</th>
<th>管理</th>
</tr>
</thead>
<tbody id="tbody">
@if (Model.Count > 0)
{
@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>
}
}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 模态框 -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="myModalLabel">選擇使用者</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<select class="form-control" asp-items="ViewBag.users">
<!-- 其他用户选项 -->
</select>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">確認</button>
</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);
}
})
</script>
}
\ No newline at end of file
@model backstage.Models.Users.DepartmentForCreate
@{
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">
<h4 class="card-title">新增部門</h4>
<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-4 form-group required">
<label asp-for="name" class="col-form-label" for=""></label>
<input asp-for="name" type="text" class="form-control" id="">
<span asp-validation-for="name" class="text-danger"></span>
</div>
<div class="col-md-4 form-group ">
<label asp-for="phone" class="col-form-label" for="phone"></label>
<input asp-for="phone" class="form-control" id="phone">
<span asp-validation-for="phone" 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="ListDepartments">返回列表</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>
}
@model backstage.Models.Users.User
@{
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">
<h4 class="card-title">新增使用者</h4>
<form class="forms-sample" method="post" asp-action="CreateUser" 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-4 form-group required">
<label asp-for="name" class="col-form-label" for=""></label>
<input asp-for="name" type="text" class="form-control" id="">
<span asp-validation-for="name" class="text-danger"></span>
</div>
<div class="col-md-4 form-group required">
<label asp-for="username" class="col-form-label" for="username"></label>
<input asp-for="username" class="form-control" id="username">
<span asp-validation-for="username" class="text-danger"></span>
</div>
</div>
<div class="row">
<div class="col-md-6 form-group">
<label asp-for="email" class="col-form-label" for="email">email</label>
<input asp-for="email" class="form-control" id="email">
<span asp-validation-for="email" class="text-danger"></span>
</div>
</div>
<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="text" class="form-control" id="">
<span asp-validation-for="password" 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="ListUsers">返回列表</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>
}
@model backstage.Models.Users.Department
@{
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">
<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>
<p class="form-title card-description">基本資料</p>
<div class="row">
<div class="col-md-4 form-group required">
<label asp-for="merchant_id" class="col-form-label" for=""></label>
<input asp-for="merchant_id" type="text" class="form-control" id="" disabled>
</div>
<div class="col-md-4 form-group ">
<label asp-for="creation_date" class="col-form-label" for="creation_date"></label>
<input asp-for="creation_date" class="form-control" id="creation_date" disabled>
</div>
</div>
<div class="row">
<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" id="">
<span asp-validation-for="name" class="text-danger"></span>
</div>
<div class="col-md-4 form-group ">
<label asp-for="phone" class="col-form-label" for="phone"></label>
<input asp-for="phone" class="form-control" id="phone">
<span asp-validation-for="phone" 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="ListDepartments">返回列表</a>
</form>
</div>
</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>
}
@model backstage.Models.Users.User
@{
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">
<h4 class="card-title">編輯使用者</h4>
<form class="forms-sample" method="post" asp-action="CreateUser" 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-4 form-group required">
<label asp-for="uid" class="col-form-label" for=""></label>
<input asp-for="uid" type="text" class="form-control" id="" disabled>
</div>
<div class="col-md-4 form-group required">
<label asp-for="created_date" class="col-form-label" for="creation_date"></label>
<input asp-for="created_date" class="form-control" id="creation_date" disabled>
</div>
</div>
<div class="row">
<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" id="">
<span asp-validation-for="name" class="text-danger"></span>
</div>
<div class="col-md-4 form-group required">
<label asp-for="username" class="col-form-label" for="username"></label>
<input asp-for="username" class="form-control" id="username">
<span asp-validation-for="username" class="text-danger"></span>
</div>
</div>
<div class="row">
@if (Model.email!=null)
@if (Model.email.Count > 0)
{
@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>
</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>
</div>
}
}
</div>
<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="text" class="form-control" id="">
<span asp-validation-for="password" 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="ListUsers">返回列表</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>
}
......@@ -13,6 +13,7 @@
<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>
@*列表*@
<div class="">
......@@ -20,22 +21,23 @@
<thead>
<tr>
<th>merchant_id</th>
<th>address</th>
<th>name</th>
@*<th>address</th>
<th>country_id</th>
<th>postcode</th>
<th>postcode</th>*@
<th>phone</th>
@*<th>fax</th>*@
<th>vatid</th>
<th>name</th>
<th>enabled</th>
@*<th>vatid</th>*@
@*<th>enabled</th>*@
<th>creation_date</th>
@*<th>vatid_verify</th>
<th>deposit_book_verify</th>
<th>user_natid_verify</th>
<th>enabled_transaction</th>*@
<th>merchant_type</th>
<th>deposit_book_verify</th>
<th>user_natid_verify</th>
<th>enabled_transaction</th>*@
@*<th>merchant_type</th>
<th>merchant_level</th>
<th>tts</th>
<th>tts</th>*@
</tr>
......@@ -47,30 +49,31 @@
@foreach (var i in Model.merchants)
{
<tr id="@i.merchant_id">
<td>@i.merchant_id</td>
<td>@i.address</td>
<td>@i.country_id</td>
<td>@i.postcode</td>
<td>@i.phone</td>
@*<td>@i.fax</td>*@
<td>@i.vatid</td>
<td>@i.name</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 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 class="departmentRow" data-merchantId="@i.merchant_id">
<td>@i.merchant_id</td>
<td>@i.name</td>
@*<td>@i.address</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.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 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>
}
}
......@@ -84,4 +87,26 @@
</div>
</div>
</div>
\ No newline at end of file
</div>
@section Scripts{
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
var msg = '@TempData["msg"]';
var IsSuccess = '@TempData["IsSuccess"]';
console.log(IsSuccess + msg);
if (msg != '') {
showAlert(IsSuccess, msg);
}
$('.departmentRow').click(function () {
var merchantId = $(this).data('merchantid');
window.location.href = '/User/GetDepartment/' + merchantId; // 根據你的路由設定和控制器來導航到部門詳細資料頁面
});
</script>
}
......@@ -9,10 +9,13 @@
}
<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 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 class="">
......@@ -21,17 +24,19 @@
<tr>
<th>uid</th>
<th>name</th>
<th>name_en</th>
@*<th>name_en</th>*@
<th>username</th>
<th>locked</th>
<th>email</th>
@*<th>locked</th>*@
<th>creation_date</th>
<th>enabled</th>
<th>birthdate</th>
<th>marital_status</th>
<th>gender</th>
<th>education</th>
<th>natid</th>
<th>lang</th>
<th>管理員</th>
@*<th>birthdate</th>
<th>marital_status</th>
<th>gender</th>
<th>education</th>
<th>natid</th>
<th>lang</th>*@
</tr>
......@@ -43,20 +48,34 @@
@foreach (var i in Model.Users)
{
<tr id="@i.uid">
<tr class="userRow" data-user-id="@i.uid">
<td>@i.uid</td>
<td>@i.name</td>
<td>@i.name_en</td>
@*<td>@i.name_en</td>*@
<td>@i.username</td>
<td>@i.locked</td>
<td>@i.creation_date</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.created_date</td>
<td>@i.enabled</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> <input type="checkbox" class="toggleButton" @(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>
......@@ -76,4 +95,59 @@
</div>
</div>
</div>
\ No newline at end of file
</div>
@section Scripts{
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
var msg = '@TempData["msg"]';
var IsSuccess = '@TempData["IsSuccess"]';
console.log(IsSuccess + msg);
if (msg != '') {
showAlert(IsSuccess, msg);
}
$('table tbody tr').each(function () {
var uid = $(this).find('td:first-child').text(); // 獲取行中的 UID 值
console.log('uid=' + uid)
if (uid === '1') {
$(this).find('.toggleButton').prop('disabled', true); // 將切換按鈕設為禁用
return false; // 停止迴圈
}
});
$('.toggleButton').bootstrapSwitch({
onText: 'ON',
offText: 'OFF',
onColor: 'success',
offColor: 'danger',
size: 'small',
onSwitchChange: function (event, state) {
var userId = $(this).data('userId');
var isAdmin = $(this).data('admin');
// 使用 AJAX 發送請求,處理狀態變更事件
$.ajax({
url: '/YourController/Toggle',
type: 'POST',
data: { userId: userId, isAdmin: isAdmin, state: state },
success: function (response) {
// 在成功回調中處理回應
console.log(response);
},
error: function (error) {
// 在錯誤回調中處理錯誤
console.log(error);
}
});
}
});
$('.userRow').click(function () {
var userId = $(this).data('user-id');
window.location.href = '/User/GetUser/' + userId; // 根據你的路由設定和控制器來導航到使用者詳細資料頁面
});
</script>
}
\ No newline at end of file
@model backstage.Models.Users.UserForRegister
@{
ViewData["Title"] = "Register";
}
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>@ViewData["Title"]</title>
<!-- End Required meta tags -->
<!-- plugins:css -->
<link rel="stylesheet" href="~/vendors/mdi/css/materialdesignicons.min.css">
<link rel="stylesheet" href="~/vendors/css/vendor.bundle.base.css">
<!-- endinject -->
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
@*<link rel="stylesheet" href="~/css/site.css" />*@
<!-- Layout styles -->
<link rel="stylesheet" href="~/css/style.css">
<!-- End layout styles -->
<link rel="shortcut icon" href="~/images/favicon.png" />
</head>
<body>
<input id="msg" hidden value="@TempData["msg"]" />
<div class="container-scroller">
<div class="container-fluid page-body-wrapper full-page-wrapper">
<div class="content-wrapper d-flex align-items-center auth">
<div class="row flex-grow">
<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">
</div>
<h4 class="text-center">濟福寺景德祠</h4>
<!-- <h6 class="font-weight-light">基本資料</h6> -->
<form class="pt-3" method="post" asp-action="register" asp-route-ReturnUrl="/User/Login">
<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="e-mail" />
<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="密碼" />
<span asp-validation-for="pwd" class="text-danger"></span>
</div>
<div class="form-group">
<input class="form-control form-control-lg" type="password" asp-for="ConfirmPassword" placeholder="確認密碼" />
<span asp-validation-for="ConfirmPassword" 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>
</div>
@*<a asp-action="Login" class="text-center mt-4 font-weight-light">返回登入</a>*@
<div class="text-center mt-4 font-weight-light"><a asp-action="Login" class="text-primary">返回登入</a></div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- content-wrapper ends -->
@*<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>*@
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
<!-- plugins:js -->
<script src="~/vendors/js/vendor.bundle.base.js"></script>
<!-- endinject -->
<!-- Plugin js for this page -->
<!-- End plugin js for this page -->
<!-- inject:js -->
<script src="~/js/off-canvas.js"></script>
<script src="~/js/hoverable-collapse.js"></script>
<script src="~/js/misc.js"></script>
<!-- endinject -->
<!-- Custom js for this page -->
<script src="~/js/file-upload.js"></script>
<!-- End custom js for this page -->
<script src="~/js/jquery.ba-dotimeout.js"></script>
<script src="~/js/User.js"></script>
</body>
</html>
......@@ -17,4 +17,47 @@
width: 100%;
border: 0;
background: url(/images/xian.png) center bottom no-repeat;
}
.btn.btnPermission {
display: inline-block;
padding: 3px 8px;
color: #ffffff !important;
background-color: #818181;
border: none;
-webkit-transition-duration: 0.2s;
transition-duration: 0.2s;
cursor: pointer;
}
.tokenVaultRow {
cursor: pointer;
}
.breadcrumb_memberGo {
background-color: #fff !important;
/*margin-top: 20px !important;*/
/* margin-bottom: 50px !important; */
padding-left: 0px !important;
padding-right: 0px !important;
padding-top: 0px !important;
font-size: 0.875rem;
}
.breadcrumb {
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
padding: 0.75rem 1rem;
margin-bottom: 1rem;
list-style: none;
background-color: #e9ecef;
border: 0rem !important;
}
.breadcrumb-item.active {
color: #6c757d;
}
.breadcrumb-item + .breadcrumb-item {
padding-left: 0.5rem;
}
\ No newline at end of file
......@@ -47,3 +47,7 @@ function showAlert(status, msg) {
$('form').submit();
})
$('#cancelBtn').click(function () {
$('input').val('');
})
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