Commit c15c8832 authored by alicewang's avatar alicewang

Merge branch 'master' into alice

# Conflicts:
#	Merchant Token Vault Management/backstage/Views/Shared/_Layout.cshtml
parents 6d15e9f8 316ed58b
......@@ -1828,21 +1828,29 @@ namespace backstage.Controllers
string outputHtml = "";
string permission;
string Fields;
switch (_currentLanguage)
string backup;
string restitute;
switch (_currentLanguage)
{
case "en":
permission = "Permission";
Fields = "Fields";
break;
backup = "Backup";
restitute = "Restitute";
break;
case "zh":
permission = "權限";
Fields = "欄位";
break;
backup = "備份";
restitute = "還原";
break;
default:
permission = "權限";
Fields = "欄位";
break;
backup = "備份";
restitute = "還原";
break;
}
foreach (var vault in sortedData)
......@@ -1874,14 +1882,17 @@ namespace backstage.Controllers
<td>{enabletext}</td>
<td>
<button class=""btn btnPermission btn-sm permissionBtn"" data-Merchant_id=""{merchantId}"" data-vault_id=""{vault.vault_id}"">{permission}</button>
<button class=""btn btn-sm btnPermission fieldsBtn"" data-Merchant_id=""{merchantId}"" data-vault_id=""{vault.vault_id}"" >{Fields}</button>
<button class=""btn btnPermission btn-sm fieldsBtn"" data-Merchant_id=""{merchantId}"" data-vault_id=""{vault.vault_id}"" >{Fields}</button>
</td>
<td>{vault.tokenCount}</td>
<td>{vault.userCount}</td>
</tr>";
outputHtml += htmlCode;
}
outputHtml += htmlCode;
/*<button class=""btn btnPermission btn-sm backupBtn"" data-toggle=""modal"" data-target=""#backup-modal"" data-Merchant_id=""{merchantId}"" data-vault_id=""{vault.vault_id}"" data-vault_name=""{vault.name}"">{backup}</button>
<button class=""btn btnPermission btn-sm restituteBtn"" data-Merchant_id=""{merchantId}"" data-vault_id=""{vault.vault_id}"" >{restitute}</button>*/
}
return Content(outputHtml);
}
......@@ -1994,7 +2005,8 @@ namespace backstage.Controllers
{
if (TokenVaultResponse.info.Count > 0)
{
return View(TokenVaultResponse.info[0]);
TokenVaultResponse.info[0].merchant_id = merchantid;
return View(TokenVaultResponse.info[0]);
}
else
{
......@@ -2008,7 +2020,165 @@ namespace backstage.Controllers
return View();
}
[Authorize(Policy = "AdminOnly")]
[Authorize(Policy = "AdminOnly")]
[HttpPost("/TokenVault/Edit/{id}")]
public async Task<IActionResult> Edit(int id, TokenVault tokenVault)
{
string msg = string.Empty;
// 取得使用者的 "token" Claim 值
string token = User.FindFirstValue("token");
//get此部門的全部vault api
var url = _config["IP"] + "/v2/vault/get";
var httpMethod = HttpMethod.Post;
var parameters = new Dictionary<string, string>
{
{ "Merchant_id", tokenVault.merchant_id.ToString()},
};
var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
var tokenVaultResponse = JsonConvert.DeserializeObject<TokenVaultResponse>(apiResult.Data.ToString());
if (tokenVaultResponse.info != null)
{
var existVault = tokenVaultResponse.info.Where(x => x.vault_id == id).FirstOrDefault();
if (existVault != null)
{
if (string.IsNullOrEmpty(tokenVault.name))
{
switch (_currentLanguage)
{
case "en":
msg = " can't be empty.";
break;
case "zh":
msg = "不得空白";
break;
default:
msg = "不得空白";
break;
}
ModelState.AddModelError("name", msg);
}
else
{
var nameRepeat = tokenVaultResponse.info.Where(x => x.vault_id != id && x.name == tokenVault.name).FirstOrDefault();
if(nameRepeat != null)
{
switch (_currentLanguage)
{
case "en":
msg = " can't be repeated.";
break;
case "zh":
msg = "不得重複";
break;
default:
msg = "不得重複";
break;
}
ModelState.AddModelError("name", msg);
}
}
if (string.IsNullOrEmpty(tokenVault.desc))
{
switch (_currentLanguage)
{
case "en":
msg = " can't be empty.";
break;
case "zh":
msg = "不得空白";
break;
default:
msg = "不得空白";
break;
}
ModelState.AddModelError("desc", msg);
}
if (!ModelState.IsValid)
{
return View(tokenVault);
}
//修改vault
existVault.name = tokenVault.name;
existVault.desc = tokenVault.desc;
existVault.merchant_id = tokenVault.merchant_id;
url = _config["IP"] + "/v2/vault";
var editDataJson = new
{
name = existVault.name,
desc = existVault.desc,
type = existVault.type,
enabled =existVault.enabled
};
parameters = new Dictionary<string, string>
{
{ "token", token },
{ "info", "INFO" },
{ "id", existVault.vault_id.ToString() },
{ "Merchant_id", existVault.merchant_id.ToString() },
{ "data", JsonConvert.SerializeObject(editDataJson)}
};
apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
var response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString());
if (response.r == 0)
{
switch (_currentLanguage)
{
case "en":
msg = "Edit success.";
break;
case "zh":
msg = "編輯成功";
break;
default:
msg = "編輯成功";
break;
}
TempData["IsSuccess"] = true;
TempData["msg"] = msg;
return RedirectToAction("List");
}
}
}
}
}
switch (_currentLanguage)
{
case "en":
msg = "Edit fail.";
break;
case "zh":
msg = "編輯失敗";
break;
default:
msg = "編輯失敗";
break;
}
TempData["IsSuccess"] = false;
TempData["msg"] = msg;
return RedirectToAction("List");
}
[Authorize(Policy = "AdminOnly")]
[HttpPost]
public async Task<IActionResult> CreateTokenVault(TokenVaultForCreate tokenVault)
{
......@@ -2090,11 +2260,10 @@ namespace backstage.Controllers
url = _config["IP"] + "/tsp/merchant/vault/add";
parameters = new Dictionary<string, string>
{
{ "token", token },
{ "data",JsonConvert.SerializeObject(tokenVault)}
};
{
{ "token", token },
{ "data",JsonConvert.SerializeObject(tokenVault)}
};
apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
......
......@@ -133,7 +133,7 @@
<value>狀態</value>
</data>
<data name="merchant_id" xml:space="preserve">
<value>編號</value>
<value>部門編號</value>
</data>
<data name="Modify Token Vault" xml:space="preserve">
<value>修改Token Vault</value>
......
......@@ -185,9 +185,9 @@
<div class="container-fluid page-body-wrapper">
<!-- partial:./partials/_sidebar.html -->
<nav class="sidebar sidebar-offcanvas" id="sidebar">
@*<div class="versionNo">
@Localizer["version"]: v2.2
</div>*@
<div class="versionNo">
@Localizer["version"]: v2.3
</div>
<ul class="nav ">
<li class="nav-item">
<a class="nav-link" data-toggle="collapse" href="#Member" aria-expanded="false" aria-controls="Member">
......
......@@ -23,14 +23,17 @@
<div class="card-body">
<h4 class="card-title">@Localizer["Modify Token Vault"]</h4>
<form class="forms-sample" method="post" asp-action="CreateDepartment" autocomplete="off">
<form class="forms-sample" method="post" asp-action="Edit" autocomplete="off">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
<p class="form-title card-description">@Localizer["Basic"]</p>
<div class="row">
<div class="col-md-6 form-group required">
<div class="col-md-4 form-group required">
<label asp-for="merchant_id" class="col-form-label" for="">@Localizer["merchant_id"]</label>
<select id="selectDepartmentList" class="form-control" asp-items="ViewBag.DepartmentsList" asp-for="merchant_id">
</select>
<!--<select id="selectDepartmentList" class="form-control" asp-items="ViewBag.DepartmentsList" asp-for="merchant_id">
</select>-->
<input asp-for="merchant_id" type="text" class="form-control" disabled>
<input asp-for="merchant_id" type="text" class="form-control" hidden>
</div>
<div class="col-md-4 form-group required">
......@@ -59,12 +62,14 @@
<div class="col-md-4 form-group required">
<label asp-for="type" class="col-form-label" for="">@Localizer["type"]</label>
<input asp-for="type" type="text" class="form-control" id="" disabled>
<input asp-for="type" type="text" class="form-control" id="" hidden>
<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="">@Localizer["enabled"]</label>
<input asp-for="enabled" type="text" class="form-control" id="" disabled>
<input asp-for="enabled" type="text" class="form-control" id="" hidden>
<span asp-validation-for="enabled" class="text-danger"></span>
</div>
</div>
......@@ -74,12 +79,14 @@
<div class="col-md-4 form-group required">
<label asp-for="tokenCount" class="col-form-label" for="">@Localizer["tokenCount"]</label>
<input asp-for="tokenCount" type="text" class="form-control" id="" disabled>
<input asp-for="tokenCount" type="text" class="form-control" id="" hidden>
</div>
<div class="col-md-4 form-group required">
<label asp-for="userCount" class="col-form-label" for="">@Localizer["userCount"]</label>
<input asp-for="userCount" type="text" class="form-control" id="" disabled>
<input asp-for="userCount" type="text" class="form-control" id="" hidden>
</div>
</div>
......
......@@ -103,6 +103,41 @@
</div>
</div>
<!-- START MODAL -->
<div class="modal fade modal-full" id="backup-modal" role="dialog" tabindex="-1" style="padding-right: 17px;" aria-modal="true">
<div class="modal-dialog modalforMemberGo">
<!-- Modal content-->
<div class="modal-content">
<!--START of div "modal-header"-->
<div class="modal-header">
<h3 class="modal-title">
Backup
</h3>
</div>
<!--END of div "modal-header"-->
<!--START of div "modal-body"-->
<div class="modal-body" style="padding-top:35px; padding-bottom: 35px">
<form>
<p class="modal-body-title">下載備份檔到本機</p>
<p>下載備份檔到本機</p>
<div class="SubmitBlock SubmitBlock_sm">
<button type="button" id="backupConfirm" class="btn btn-mainblue-solid" style=""> @Localizer["Confirm"]</button>
<button type="button" class="btn btn-mainblue-hollow" data-dismiss="modal" style=""> @Localizer["Cancel"]</button>
</div>
</form>
</div>
<!--END of div "modal-body"-->
<!--START of div "modal-footer"-->
<div class="modal-footer modalforMemberGo"></div>
<!--END of div "modal-footer"-->
</div>
</div>
</div>
<!-- END of Modal-->
@section Scripts{
......@@ -200,6 +235,41 @@
});
//備份按鈕
/*$(document).on('click', '.backupBtn', function () {
var vaultid = $(this).data('vault_id');
var merchantid = $(this).data('merchant_id');
console.log('vaultid=' + vaultid);
window.location.href = '/tokenvault/Permission/' + "?vault_id=" + vaultid + "&merchant_id=" + merchantid;
});*/
//備份Modal被觸發時執行
$('#backup-modal').on('show.bs.modal', function (e) {
//show.bs.modal = BS內建,觸發時執行
let btn = $(e.relatedTarget);//抓取觸發按鈕的資料
let mId = btn.data('Merchant_id');
let vId = btn.data('vault_id');
let vName = btn.data('vault_name');
let modal = $(this);//要修改的modal就是現在開啟的這個modal
modal.find('.modal-body-title').text(vId + "_" + vName);
modal.find('#backupConfirm').data('Merchant_id', mId);
modal.find('#backupConfirm').data('vault_id', vId);
});
$('#backupConfirm').on('click', function () {
console.log("backupConfirm");
});
//還原按鈕
$(document).on('click', '.restituteBtn', function () {
var vaultid = $(this).data('vault_id');
var merchantid = $(this).data('merchant_id');
console.log('vaultid=' + vaultid);
window.location.href = '/tokenvault/Permission/' + "?vault_id=" + vaultid + "&merchant_id=" + merchantid;
});
})
......
......@@ -180,6 +180,7 @@
<div class="form-group">
<div class="dropdown bootstrap-select selecter form-control ">
<select id="user_selectpicker" title="@Localizer["Please select user(Single option)."]" class="selectpicker selecter form-control selectpicker-tokenization" asp-items="ViewBag.users" tabindex="null">
<option disabled>@Localizer["Please select user(Single option)."]</option>
</select>
</div>
......@@ -191,6 +192,7 @@
<div class="form-group">
<div class="dropdown bootstrap-select show-tick selecter form-control ">
<select name="allow_masks" id="select_mask" multiple="" title="@Localizer["Please select mask(multiple options)."]" class="mask_selectpicker selectpicker selecter form-control selectpicker-tokenization" tabindex="null" asp-items="ViewBag.masks">
<option disabled>@Localizer["Please select mask(multiple options)."]</option>
</select>
</div>
</div>
......@@ -201,6 +203,7 @@
<div class="form-group">
<div class="dropdown bootstrap-select selecter form-control ">
<select name="default_mask_id" id="default_mask" title="@Localizer["Please select default mask(Single option)."]" class=" default_mask_selectpicker selectpicker selecter form-control selectpicker-tokenization" tabindex="null" asp-items="ViewBag.masks">
<option disabled>@Localizer["Please select default mask(Single option)."]</option>
</select>
</div>
</div>
......
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