Commit 7593bd4c authored by Jason's avatar Jason

edit user

parent a8162890
...@@ -16,6 +16,7 @@ using backstage.Helpers; ...@@ -16,6 +16,7 @@ using backstage.Helpers;
using backstage.Models; using backstage.Models;
using backstage.Models.Users; using backstage.Models.Users;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using System.Linq;
namespace backstage.Controllers namespace backstage.Controllers
{ {
...@@ -65,7 +66,7 @@ namespace backstage.Controllers ...@@ -65,7 +66,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入 // 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated) if (!User.Identity.IsAuthenticated)
{ {
return RedirectToAction("Login","User"); return RedirectToAction("Login", "User");
} }
...@@ -129,7 +130,7 @@ namespace backstage.Controllers ...@@ -129,7 +130,7 @@ namespace backstage.Controllers
{ {
if (v.uid == 1) if (v.uid == 1)
v.isAdmin = true; v.isAdmin = true;
if (a.uid == v.uid) if (a.uid == v.uid && a.enabled == 1)
v.isAdmin = true; v.isAdmin = true;
} }
...@@ -152,7 +153,7 @@ namespace backstage.Controllers ...@@ -152,7 +153,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入 // 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated) if (!User.Identity.IsAuthenticated)
{ {
return RedirectToAction("Login","User"); return RedirectToAction("Login", "User");
} }
...@@ -169,9 +170,9 @@ namespace backstage.Controllers ...@@ -169,9 +170,9 @@ namespace backstage.Controllers
{ "uid",uid.ToString()} { "uid",uid.ToString()}
}; };
int maxRetries = types.Length; // 最大重試次數 int maxRetries = types.Length; // 最大重試次數
int currentRetry = 0; // 目前重試次數 int currentRetry = 0; // 目前重試次數
...@@ -193,13 +194,13 @@ namespace backstage.Controllers ...@@ -193,13 +194,13 @@ namespace backstage.Controllers
var user = new User(); var user = new User();
user.name = GetUserResponse.user.name; user.name = GetUserResponse.user.name;
user.username = GetUserResponse.user.username; user.username = GetUserResponse.user.username;
if(GetUserResponse.email!=null) if (GetUserResponse.email != null)
user.email = GetUserResponse.email; user.email = GetUserResponse.email;
// 使用 JSON 解析工具將 JSON 字串轉換為物件 // 使用 JSON 解析工具將 JSON 字串轉換為物件
//var jsonObject = JsonConvert.DeserializeObject<Dictionary<string, string>>(apiResult.Data.ToString()); //var jsonObject = JsonConvert.DeserializeObject<Dictionary<string, string>>(apiResult.Data.ToString());
//user.created_date = DateTime.Parse(jsonObject["created_date"]); //user.created_date = DateTime.Parse(jsonObject["created_date"]);
return View(user); return View(user);
} }
...@@ -243,7 +244,7 @@ namespace backstage.Controllers ...@@ -243,7 +244,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入 // 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated) if (!User.Identity.IsAuthenticated)
{ {
return RedirectToAction("Login","User"); return RedirectToAction("Login", "User");
} }
if (string.IsNullOrEmpty(user.password)) if (string.IsNullOrEmpty(user.password))
...@@ -288,6 +289,122 @@ namespace backstage.Controllers ...@@ -288,6 +289,122 @@ namespace backstage.Controllers
} }
[HttpPost]
public async Task<IActionResult> GetUser(User user)
{
// 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated)
{
return RedirectToAction("Login", "User");
}
// 取得使用者的 "token" Claim 值
string token = User.FindFirstValue("token");
#region user/list
var url = _config["IP"] + "/user/list";
var httpMethod = HttpMethod.Post;
var types = new[] { "all" };
var types_data = new { inc = types };
var parameters = new Dictionary<string, string>
{
{ "token", token },
{ "types", JsonConvert.SerializeObject(types_data)},
{ "email","1"},
{ "phone","1"}
//{ "types", "{\"inc\":[\"all\"]}"}
};
var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
var UserResponse = JsonConvert.DeserializeObject<UserResponse>(apiResult.Data.ToString());
if (UserResponse.userCount > 0)
{
var existUser = UserResponse.Users.Where(u => u.uid == user.uid).FirstOrDefault();
if (existUser == null)
{
return RedirectToAction("ListUsers");
}
//檢查name
if (string.IsNullOrEmpty(user.name))
{
ModelState.AddModelError("name", "name必填");
}
var existName = UserResponse.Users.Where(u => u.name == user.name).FirstOrDefault();
if (existName != null)
{
if(existName.uid!=user.uid)
ModelState.AddModelError("name", "name重複");
}
//檢查username
if (string.IsNullOrEmpty(user.username))
{
ModelState.AddModelError("username", "username必填");
}
var existUserName = UserResponse.Users.Where(u => u.username == user.username).FirstOrDefault();
if (existUserName != null)
{
if (existUserName.uid != user.uid)
ModelState.AddModelError("username", "username重複");
}
if (!ModelState.IsValid)
{
return View(user);
}
existUser.name = user.name;
existUser.username = user.username;
//檢查通過
url = _config["IP"] + "/user/mod";
parameters = new Dictionary<string, string>
{
{ "token", token },
{ "data", JsonConvert.SerializeObject(user)}
//{ "types", "{\"inc\":[\"all\"]}"}
};
apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
TempData["IsSuccess"] = true;
TempData["msg"] = "編輯成功";
return RedirectToAction("ListUsers");
}
TempData["IsSuccess"] = false;
TempData["msg"] = "user_id不存在";
return View(existUser);
}
}
//查無使用者
TempData["IsSuccess"] = false;
TempData["msg"] = "查無使用者";
return RedirectToAction("ListUsers");
#endregion
}
[HttpGet] [HttpGet]
public async Task<IActionResult> ListDepartments() public async Task<IActionResult> ListDepartments()
{ {
...@@ -296,7 +413,7 @@ namespace backstage.Controllers ...@@ -296,7 +413,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入 // 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated) if (!User.Identity.IsAuthenticated)
{ {
return RedirectToAction("Login","User"); return RedirectToAction("Login", "User");
} }
...@@ -336,7 +453,7 @@ namespace backstage.Controllers ...@@ -336,7 +453,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入 // 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated) if (!User.Identity.IsAuthenticated)
{ {
return RedirectToAction("Login","User"); return RedirectToAction("Login", "User");
} }
...@@ -391,7 +508,7 @@ namespace backstage.Controllers ...@@ -391,7 +508,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入 // 確認使用者是否已經登入
if (!User.Identity.IsAuthenticated) if (!User.Identity.IsAuthenticated)
{ {
return RedirectToAction("Login","User"); return RedirectToAction("Login", "User");
} }
if (string.IsNullOrEmpty(department.name)) if (string.IsNullOrEmpty(department.name))
...@@ -548,8 +665,15 @@ namespace backstage.Controllers ...@@ -548,8 +665,15 @@ namespace backstage.Controllers
} }
/// <summary>
/// enable做兩件事情,user加入admin,並且enable=true,
/// disable做一件事情就是enable=false
/// </summary>
/// <param name="uid"></param>
/// <param name="isAdmin"></param>
/// <returns></returns>
[HttpPost] [HttpPost]
public async Task<ResultModel> AdminAddAjax(int uid) public async Task<ResultModel> AdminAddAjax(int uid, bool isAdmin)
{ {
var result = new ResultModel(); var result = new ResultModel();
...@@ -559,60 +683,136 @@ namespace backstage.Controllers ...@@ -559,60 +683,136 @@ namespace backstage.Controllers
result.IsSuccess = false; result.IsSuccess = false;
result.Message = "未登入"; result.Message = "未登入";
return result; return result;
}
}
// 取得使用者的 "token" Claim 值 // 取得使用者的 "token" Claim 值
string token = User.FindFirstValue("token"); string token = User.FindFirstValue("token");
var url = _config["IP"] + "/admin/add"; var url = _config["IP"] + "/admin/add";
var httpMethod = HttpMethod.Post; var httpMethod = HttpMethod.Post;
var userData=new [] { var userData = new[] {
new { new {
uid=uid, uid=uid,
desc="", desc="",
roles = new[] { 1 }, roles = new[] { 1 },
enabled=1 enabled=1
} }
}; };
//檢查是否在admin/list
var existAdmin = new User();
#region admin/list
url = _config["IP"] + "/admin/list";
httpMethod = HttpMethod.Post;
var types = new[] { "admin" };
var types_data = new { inc = types };
var parameters = new Dictionary<string, string> var parameters = new Dictionary<string, string>
{ {
{ "token", token}, { "token", token },
{ "user",JsonConvert.SerializeObject( userData)} { "types", JsonConvert.SerializeObject(types_data)},
{ "email","1"},
{ "phone","1"}
//{ "types", "{\"inc\":[\"all\"]}"}
}; };
var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
var adminResponse = new UserResponse();
if (apiResult.IsSuccess) if (apiResult.IsSuccess)
{ {
var Response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString()); adminResponse = JsonConvert.DeserializeObject<UserResponse>(apiResult.Data.ToString());
existAdmin = adminResponse.Users.Where(u => u.uid == uid).FirstOrDefault();
if (Response.r == 0) }
#endregion
//加入admin list
if (existAdmin == null)
{
if (isAdmin == true)
{ {
result.IsSuccess = true; parameters = new Dictionary<string, string>
result.Message ="權限調整成功"; {
return result; { "token", token},
{ "user",JsonConvert.SerializeObject( userData)}
};
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;
}
} }
else else
{ {
result.IsSuccess = false; result.IsSuccess = false;
result.Message = Response.m.ToString(); result.Message = "非admin";
return result; return result;
} }
} }
else else
{ {
result.IsSuccess = false; url = _config["IP"] + "/admin/mod";
result.Message = apiResult.Message; httpMethod = HttpMethod.Post;
return result; existAdmin.enabled = isAdmin ? 1 : 0;
parameters = new Dictionary<string, string>
{
{ "token", token },
{ "data", JsonConvert.SerializeObject(existAdmin)}
};
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;
}
} }
} }
...@@ -631,19 +831,5 @@ namespace backstage.Controllers ...@@ -631,19 +831,5 @@ namespace backstage.Controllers
} }
public async Task<IActionResult> List()
{
//TempData["IsSuccess"] = result.IsSuccess;
//TempData["msg"] = result.Message;
//return View(viewModel);
throw new NotImplementedException();
}
public async Task<ResultModel> Delete(int id)
{
throw new NotImplementedException();
}
} }
} }
\ No newline at end of file
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<input id="msg" hidden value="@TempData["msg"]" /> <input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null) @if (TempData["isSuccess"] != null)
{ {
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" /> <input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
} }
<div id="msgDiv"></div> <div id="msgDiv"></div>
</div> </div>
...@@ -21,15 +21,15 @@ ...@@ -21,15 +21,15 @@
<div class="card-body"> <div class="card-body">
<h4 class="card-title">編輯使用者</h4> <h4 class="card-title">編輯使用者</h4>
<form class="forms-sample" method="post" asp-action="CreateUser" autocomplete="off"> <form class="forms-sample" method="post" asp-action="GetUser" autocomplete="off">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div> <div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
<p class="form-title card-description">基本資料</p> <p class="form-title card-description">基本資料</p>
<div class="row"> <div class="row">
<div class="col-md-4 form-group required"> <div class="col-md-4 form-group required">
<label asp-for="uid" class="col-form-label" for=""></label> <label asp-for="uid" class="col-form-label" for=""></label>
<input asp-for="uid" type="text" class="form-control" id="" disabled> <input asp-for="uid" type="text" class="form-control" disabled>
</div> </div>
<div class="col-md-4 form-group required"> <div class="col-md-4 form-group ">
<label asp-for="created_date" class="col-form-label" for="creation_date"></label> <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> <input asp-for="created_date" class="form-control" id="creation_date" disabled>
...@@ -37,12 +37,12 @@ ...@@ -37,12 +37,12 @@
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4 form-group required"> <div class="col-md-4 form-group ">
<label asp-for="name" class="col-form-label" for=""></label> <label asp-for="name" class="col-form-label" for=""></label>
<input asp-for="name" type="text" class="form-control" id=""> <input asp-for="name" type="text" class="form-control" id="">
<span asp-validation-for="name" class="text-danger"></span> <span asp-validation-for="name" class="text-danger"></span>
</div> </div>
<div class="col-md-4 form-group required"> <div class="col-md-4 form-group ">
<label asp-for="username" class="col-form-label" for="username"></label> <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">
<span asp-validation-for="username" class="text-danger"></span> <span asp-validation-for="username" class="text-danger"></span>
...@@ -52,34 +52,34 @@ ...@@ -52,34 +52,34 @@
<div class="row"> <div class="row">
@if (Model.email!=null) @if (Model.email!=null)
@if (Model.email.Count > 0) @if (Model.email.Count > 0)
{ {
@foreach (var item in Model.email) @foreach (var item in Model.email)
{ {
<div class="col-md-2 form-group"> <div class="col-md-2 form-group">
<label asp-for="@item.type" class="col-form-label" for="item.type">type</label> <label asp-for="@item.type" class="col-form-label" for="item.type">type</label>
<input value="@item.type" class="form-control" /> <input value="@item.type" class="form-control" />
<span asp-validation-for="@item.type" class="text-danger"></span> <span asp-validation-for="@item.type" class="text-danger"></span>
</div> </div>
<div class="col-md-6 form-group"> <div class="col-md-6 form-group">
<label asp-for="@item.email" class="col-form-label" for="item.email">email</label> <label asp-for="@item.email" class="col-form-label" for="item.email">email</label>
<input value="@item.email" class="form-control" /> <input value="@item.email" class="form-control" />
<span asp-validation-for="@item.email" class="text-danger"></span> <span asp-validation-for="@item.email" class="text-danger"></span>
</div> </div>
} }
} }
</div> </div>
<div class="row"> @*<div class="row">
<div class="col-md-4 form-group required"> <div class="col-md-4 form-group ">
<label asp-for="password" class="col-form-label" for=""></label> <label asp-for="password" class="col-form-label" for=""></label>
<input asp-for="password" type="text" class="form-control" id=""> <input asp-for="password" type="text" class="form-control" id="">
<span asp-validation-for="password" class="text-danger"></span> <span asp-validation-for="password" class="text-danger"></span>
</div> </div>
</div> </div>*@
...@@ -97,14 +97,23 @@ ...@@ -97,14 +97,23 @@
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf"> <script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
$(document).ready(function () {
var msg = '@TempData["msg"]'; var msg = '@TempData["msg"]';
var IsSuccess = '@TempData["IsSuccess"]'; var IsSuccess = '@TempData["IsSuccess"]';
console.log(IsSuccess + msg); console.log(IsSuccess + msg);
if (msg != '') { if (msg != '') {
showAlert(IsSuccess, msg); showAlert(IsSuccess, msg);
} }
$(".forms-sample").submit(function (event) {
event.preventDefault();
$('input').removeAttr('disabled');
this.submit();
});
})
</script> </script>
......
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
<td>@i.created_date</td> <td>@i.created_date</td>
<td> <input type="checkbox" class="toggleButton" @(i.enabled==1 ? "checked" : "") disabled></td> <td> <input type="checkbox" class="toggleButton" @(i.enabled==1 ? "checked" : "") disabled></td>
<td> <input type="checkbox" class="toggleButton" @(i.isAdmin ? "checked" : "")></td> <td> <input type="checkbox" data-uid="@i.uid" class="toggleButton isAdmin" @(i.isAdmin ? "checked" : "")></td>
@*@if (i.isAdmin) @*@if (i.isAdmin)
{ <td>是</td>} { <td>是</td>}
else { <td></td>}*@ else { <td></td>}*@
...@@ -107,30 +107,30 @@ ...@@ -107,30 +107,30 @@
showAlert(IsSuccess, msg); showAlert(IsSuccess, msg);
} }
$('table tbody tr').each(function () { $('.userRow').each(function () {
var uid = $(this).find('td:first-child').text(); // 獲取行中的 UID 值 var uid = $(this).find('td:first-child').text(); // 獲取行中的 UID 值
console.log('uid=' + uid) console.log('uid=' + uid)
if (uid === '1') { if (uid === '1') {
$(this).find('.toggleButton').prop('disabled', true); // 將切換按鈕設為禁用 $(this).find('.isAdmin').prop('disabled', true); // 將切換按鈕設為禁用
return false; // 停止迴圈 return false; // 停止迴圈
} }
}); });
$('.toggleButton').bootstrapSwitch({ $('.isAdmin').bootstrapSwitch({
onText: 'ON', onText: 'ON',
offText: 'OFF', offText: 'OFF',
onColor: 'success', onColor: 'success',
offColor: 'danger', offColor: 'danger',
size: 'small', size: 'small',
onSwitchChange: function (event, state) { onSwitchChange: function (event, state) {
var userId = $(this).data('userId'); var uid = $(this).data('uid');
var isAdmin = $(this).data('admin'); var isAdmin = $(this).is(':checked');
// 使用 AJAX 發送請求,處理狀態變更事件 // 使用 AJAX 發送請求,處理狀態變更事件
$.ajax({ $.ajax({
url: '/YourController/Toggle', url: '/User/AdminAddAjax',
type: 'POST', type: 'POST',
data: { userId: userId, isAdmin: isAdmin, state: state }, data: { uid: uid, isAdmin: isAdmin },
success: function (response) { success: function (response) {
// 在成功回調中處理回應 // 在成功回調中處理回應
console.log(response); console.log(response);
......
...@@ -19270,6 +19270,6 @@ tbody { ...@@ -19270,6 +19270,6 @@ tbody {
height: 26px !important; height: 26px !important;
} }
.departmentRow { .departmentRow, .userRow {
cursor: pointer; cursor: pointer;
} }
\ No newline at end of file
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