Commit 48556b95 authored by Jason's avatar Jason

Merge branch 'master' of https://gitlab.taipay.com.tw/jasonwai/tokenvaultmanagement

# Conflicts:
#	Merchant Token Vault Management/backstage/Views/Key/ListKeys.cshtml
parents a831d6ab 0754f3d0
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using backstage.Helpers;
using backstage.Models.Keys;
using System.Net.Http;
using System.Security.Claims;
using TokenVault_management.Models;
using backstage.Models;
using Microsoft.Extensions.Localization;
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Http;
namespace backstage.Controllers
{
[Authorize]
public class KeyController : Controller
{
private readonly IConfiguration _config;
private readonly ICallApi _callApi;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IStringLocalizer<UserController> _localizer;
private readonly string _currentLanguage;
/// <summary>
/// 讀取組態用
/// </summary>
public KeyController(IConfiguration config, ICallApi callApi, IHttpContextAccessor httpContextAccessor, IStringLocalizer<UserController> localizer)
{
_config = config;
_callApi = callApi;
_httpContextAccessor = httpContextAccessor;
_localizer = localizer;
var requestCultureFeature = _httpContextAccessor.HttpContext.Features.Get<IRequestCultureFeature>();
var currentCulture = requestCultureFeature.RequestCulture.Culture;
_currentLanguage = currentCulture.TwoLetterISOLanguageName;
}
[Authorize(Policy = "AdminOnly")]
public async Task<IActionResult> ListKeys()
{
var ListKeysResponse = new ListKeysResponse();
#region key/list
var url = _config["IP"] + "/security/key/list";
var httpMethod = HttpMethod.Post;
var parameters = new Dictionary<string, string>
{
};
var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
try
{
ListKeysResponse = JsonConvert.DeserializeObject<ListKeysResponse>(apiResult.Data.ToString());
if (ListKeysResponse.r == 0)
{
return View(ListKeysResponse.d);
}
else
{
TempData["IsSuccess"] = false;
TempData["msg"] = ListKeysResponse.m;
return View();
}
}
catch (Exception e)
{
TempData["IsSuccess"] = false;
TempData["msg"] = e.Message + e.InnerException?.Message;
return View();
}
}
TempData["IsSuccess"] = false;
TempData["msg"] = apiResult.Message;
return View();
#endregion
}
/// <summary>
/// ajax
/// </summary>
/// <returns></returns>
[Authorize(Policy = "AdminOnly")]
[HttpPost]
public async Task<ResultModel> CreateKey(int keyId)
{
var result = new ResultModel();
string msg;
#region key/list
var url = _config["IP"] + "/security/key/generate";
var httpMethod = HttpMethod.Post;
var parameters = new Dictionary<string, string>
{
};
var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
try
{
var Response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString());
if (Response.r == 0)
{
switch (_currentLanguage)
{
case "en":
msg = "Create key success.";
break;
case "zh":
msg = "新增鑰匙成功";
break;
default:
msg = "新增鑰匙成功";
break;
}
result.IsSuccess = true;
result.Message = msg;
return result;
}
else
{
result.IsSuccess = false;
result.Message = Response.m.ToString();
return result;
}
}
catch (Exception e)
{
result.IsSuccess = false;
result.Message = e.Message + e.InnerException?.Message;
return result;
}
}
result.IsSuccess = false;
result.Message = apiResult.Message;
return result;
#endregion
}
/// <summary>
/// ajax
/// </summary>
/// <returns></returns>
[Authorize(Policy = "AdminOnly")]
[HttpPost]
public async Task<ResultModel> DeleteKey(int keyId)
{
var result = new ResultModel();
string msg;
#region key/list
var url = _config["IP"] + "/security/key";
var httpMethod = HttpMethod.Delete;
var parameters = new Dictionary<string, string>
{
{ "id",keyId.ToString()},
};
var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
try
{
var Response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString());
if (Response.r == 0)
{
switch (_currentLanguage)
{
case "en":
msg = "Delete key success.";
break;
case "zh":
msg = "鑰匙刪除成功";
break;
default:
msg = "鑰匙刪除成功";
break;
}
result.IsSuccess = true;
result.Message = msg;
return result;
}
else
{
result.IsSuccess = false;
result.Message = Response.m.ToString();
return result;
}
}
catch (Exception e)
{
result.IsSuccess = false;
result.Message = e.Message + e.InnerException?.Message;
return result;
}
}
result.IsSuccess = false;
result.Message = apiResult.Message;
return result;
#endregion
}
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using backstage.Helpers;
using backstage.Models.Keys;
using System.Net.Http;
using System.Security.Claims;
namespace backstage.Controllers
{
[Authorize]
public class KeyController : Controller
{
private readonly IConfiguration _config;
private readonly ICallApi _callApi;
/// <summary>
/// 讀取組態用
/// </summary>
public KeyController(IConfiguration config, ICallApi callApi)
{
_config = config;
_callApi = callApi;
}
[Authorize(Policy = "AdminOnly")]
public async Task<IActionResult> ListKeys()
{
var ListKeysResponse = new ListKeysResponse();
#region key/list
var url = _config["IP"] + "/security/key/list";
var httpMethod = HttpMethod.Post;
var parameters = new Dictionary<string, string>
{
};
var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
try
{
ListKeysResponse = JsonConvert.DeserializeObject<ListKeysResponse>(apiResult.Data.ToString());
if (ListKeysResponse.r == 0)
{
return View(ListKeysResponse.d);
}
else
{
TempData["IsSuccess"] = false;
TempData["msg"] = ListKeysResponse.m;
return View();
}
}
catch (Exception e)
{
TempData["IsSuccess"] = false;
TempData["msg"] = e.Message+e.InnerException?.Message;
return View();
}
}
TempData["IsSuccess"] = false;
TempData["msg"] = apiResult.Message;
return View();
#endregion
}
}
}
\ No newline at end of file
......@@ -53,13 +53,14 @@ namespace backstage.Controllers
}
[Authorize(Policy = "AdminOnly")]
[HttpGet]
public async Task<IActionResult> List(int merchantId)
{
var TokenVaultResponse = new TokenVaultResponse();
string msg = string.Empty;
ViewBag.Merchant_id = merchantId;
logger.Info("merchantId="+ merchantId);
#region 取得部門列表
var DepartmentsResponse = new DepartmentsResponse();
......@@ -99,6 +100,55 @@ namespace backstage.Controllers
}
[Authorize(Policy = "AdminOnly")]
[HttpGet]
public async Task<IActionResult> Permission(int merchantId)
{
// var TokenVaultResponse = new TokenVaultResponse();
// string msg = string.Empty;
// ViewBag.Merchant_id = merchantId;
// logger.Info("merchantId=" + merchantId);
// #region 取得部門列表
// var DepartmentsResponse = new DepartmentsResponse();
// var url = _config["IP"] + "/merchant/list";
// var httpMethod = HttpMethod.Post;
// // 取得使用者的 "token" Claim 值
// string token = User.FindFirstValue("token");
// var parameters = new Dictionary<string, string>
// {
// { "token", token }
// };
// var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
// if (apiResult.IsSuccess)
// {
// DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString());
// if (DepartmentsResponse.r == 0)
// {
// ViewBag.DepartmentsList = (from o in DepartmentsResponse.merchants
// select new SelectListItem
// {
// Value = o.merchant_id.ToString(),
// Text = o.merchant_id + "_" + o.name
// }).ToList();
// }
// }
// #endregion
return View();
}
[Authorize(Policy = "AdminOnly")]
[HttpGet]
public async Task<IActionResult> ListFields([FromQuery] int Merchant_id, int vault_id)
{
......@@ -168,7 +218,7 @@ namespace backstage.Controllers
}
return View();
}
[Authorize(Policy = "AdminOnly")]
[HttpGet]
public async Task<IActionResult> ListUsers(int Merchant_id, int vault_id, int field_id)
{
......@@ -179,7 +229,7 @@ namespace backstage.Controllers
ViewBag.vault_id = vault_id;
ViewBag.field_id = field_id;
var url = _config["IP"] + "/v2/vault/get";
var httpMethod = HttpMethod.Post;
// 取得使用者的 "token" Claim 值
......@@ -774,298 +824,60 @@ namespace backstage.Controllers
string token = User.FindFirstValue("token");
//檢查user_id是否存在
var url = _config["IP"] + "/user/list";
var url = _config["IP"] + "/v2/vault";
var httpMethod = HttpMethod.Post;
var types = new[] { "all" };
var types_data = new { inc = types };
var data = new[]{ new {
action="DEL",
id=user_id,
field_id
} };
var parameters = new Dictionary<string, string>
{
{ "token", token },
{ "types", JsonConvert.SerializeObject(types_data)},
{ "email","1"},
{ "phone","1"}
{ "id", vault_id.ToString() },
{ "data", JsonConvert.SerializeObject(data)},
{ "info","USERS"},
{ "Merchant_id",Merchant_id.ToString()}
};
var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
var UserResponse = JsonConvert.DeserializeObject<UserResponse>(apiResult.Data.ToString());
if (UserResponse.userCount > 0)
var Response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString());
if (Response.r == 0)
{
var existUser = UserResponse.Users.Where(u => u.uid == user_id).FirstOrDefault();
if (existUser == null)
{
switch (_currentLanguage)
{
case "en":
msg = "User_id is not exist.";
break;
case "zh":
msg = "user_id不存在";
break;
default:
msg = "user_id不存在";
break;
}
result.IsSuccess = false;
result.Message = msg;
return result;
}
}
else
{
switch (_currentLanguage)
{
case "en":
msg = "User_id is not exist.";
msg = "Remove user success.";
break;
case "zh":
msg = "user_id不存在";
msg = "移除使用者成功";
break;
default:
msg = "user_id不存在";
msg = "移除使用者成功";
break;
}
result.IsSuccess = false;
result.IsSuccess = true;
result.Message = msg;
return result;
}
}
else
{
switch (_currentLanguage)
{
case "en":
msg = "Check field_id failed.";
break;
case "zh":
msg = "檢查field_id失敗";
break;
default:
msg = "檢查field_id失敗";
break;
}
result.IsSuccess = false;
result.Message = msg;
return result;
}
//檢查merchant_id是否存在
url = _config["IP"] + "/merchant/list";
httpMethod = HttpMethod.Post;
parameters = new Dictionary<string, string>
{
{ "token", token },
};
apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
var DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString());
if (DepartmentsResponse.count > 0)
{
var existDepartment = DepartmentsResponse.merchants.Where(m => m.merchant_id == Merchant_id).FirstOrDefault();
if (existDepartment == null)
{
switch (_currentLanguage)
{
case "en":
msg = "Merchant_id is not exist.";
break;
case "zh":
msg = "merchant_id不存在";
break;
default:
msg = "merchant_id不存在";
break;
}
result.IsSuccess = false;
result.Message = msg;
return result;
}
}
else
{
result.IsSuccess = false;
result.Message = "merchant_id不存在";
return result;
}
}
else
{
switch (_currentLanguage)
{
case "en":
msg = "User_id is not exist.";
break;
case "zh":
msg = "檢查merchant_id失敗";
break;
default:
msg = "檢查merchant_id失敗";
break;
}
result.IsSuccess = false;
result.Message = msg;
return result;
}
//檢查field_id是否存在
url = _config["IP"] + "/v2/vault/get";
httpMethod = HttpMethod.Post;
parameters = new Dictionary<string, string>
{
{ "Merchant_id", Merchant_id.ToString() },
{ "id", vault_id.ToString() },
{ "info", "FIELDS" },
};
apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
var FieldsResponse = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString());
if (FieldsResponse.fields.Count > 0)
{
var existField = FieldsResponse.fields.Where(m => m.id == field_id).FirstOrDefault();
if (existField == null)
{
result.IsSuccess = false;
result.Message = "field_id不存在";
}
}
else
{
result.IsSuccess = false;
result.Message = "field_id不存在";
}
}
else
{
result.IsSuccess = false;
result.Message = "檢查field_id失敗";
return result;
}
//加入部門
url = _config["IP"] + "/merchant/adduser";
httpMethod = HttpMethod.Post;
var data = new[]
{
new {
userId = user_id.ToString(),
merchantId = Merchant_id.ToString()
}
};
parameters = new Dictionary<string, string>
{
{ "token", token},
{ "data", JsonConvert.SerializeObject(data)}
//{ "data", """userId"":""1"",""merchantId"":""1""")
};
apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (!apiResult.IsSuccess)
{
var departmentResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString());
if (departmentResponse.r != 0)
{
result.IsSuccess = false;
result.Message = "加入部門失敗" + apiResult.Data.ToString();
result.Message = Response.m.ToString();
return result;
}
}
//加入vault
var TokenVaultResponse = new TokenVaultResponse();
url = _config["IP"] + "/merchant/vault/access";
httpMethod = HttpMethod.Post;
parameters = new Dictionary<string, string>
{
{ "token", token},
{ "vault_id", vault_id.ToString()},
{ "access_code", "31"},
{ "merchant_id", Merchant_id.ToString()},
{ "user_id", user_id.ToString()},
};
apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (!apiResult.IsSuccess)
{
result.IsSuccess = false;
result.Message = "加入vault失敗";
return result;
}
//加入欄位
var FieldsResponse2 = new FieldsResponse();
url = _config["IP"] + "/v2/vault";
httpMethod = HttpMethod.Post;
var addUserToField_data = new[]
{
new
{
action = "ADD",
id = user_id,
field_id = field_id,
allow_decrypt = "1",
allow_new = "1",
allow_update = "1",
allow_del = "1",
default_mask_id = "1"
}
};
parameters = new Dictionary<string, string>
{
{ "id", vault_id.ToString()},
{ "info", "USERS"},
{ "Merchant_id", Merchant_id.ToString()},
{ "data", JsonConvert.SerializeObject(addUserToField_data)},
};
apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
FieldsResponse2 = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString());
if (FieldsResponse2.failInfo != null)
{
result.IsSuccess = false;
result.Message = "加入Fields失敗" + FieldsResponse2.m;
return result;
}
else
{
result.IsSuccess = true;
result.Message = "加入Fields成功";
return result;
}
}
else
{
result.IsSuccess = false;
result.Message = "加入Fields失敗" + apiResult.Data.ToString();
result.Message = apiResult.Message;
return result;
}
......@@ -1273,14 +1085,15 @@ namespace backstage.Controllers
}
}
//新增MASK ajax
//新增or編輯 MASK ajax
[Authorize(Policy = "AdminOnly")]
[HttpPost]
public async Task<ResultModel> CreateMask(IFormCollection form)
{
var result = new ResultModel();
string msg;
//判斷非null就是編輯 反之新增
var mask_id = form.ContainsKey("mask_id") && int.TryParse(form["mask_id"], out int id) ? id : (int?)null;
try
{
......@@ -1288,9 +1101,22 @@ namespace backstage.Controllers
if (string.IsNullOrEmpty(form["name"]))
{
switch (_currentLanguage)
{
case "en":
msg = "Name is empty.";
break;
case "zh":
msg = "名稱不能為空";
break;
default:
msg = "名稱不能為空";
break;
}
result.IsSuccess = false;
result.Message = "名稱不能為空";
result.Message = msg;
return result;
}
......@@ -1306,18 +1132,28 @@ namespace backstage.Controllers
size_end = GetValidIntegerValue(form["size_end"]),
};
string action = "ADD";
if (mask_id != null)
{
action = "MOD";
}
var fieldData = new[]
{
new
{
action = "ADD",
action = action,
field_id=Convert.ToInt32(form["field_id"]),
name=form["name"].ToString(),
type = Convert.ToInt32(form["type"]),
setting = System.Text.Json.JsonSerializer.Serialize(setting)
setting = System.Text.Json.JsonSerializer.Serialize(setting),
//編輯功能 mask_id要帶上
id = mask_id
}
};
}
};
string namstext = form["name"];
var parameters = new Dictionary<string, string>
......@@ -1336,8 +1172,45 @@ namespace backstage.Controllers
{
if (Response.failInfo == null)
{
result.IsSuccess = true;
result.Message = "Create success";
if (mask_id == null)
{
switch (_currentLanguage)
{
case "en":
msg = "Create mask success.";
break;
case "zh":
msg = "新增遮罩成功";
break;
default:
msg = "新增遮罩成功";
break;
}
result.IsSuccess = true;
result.Message = msg;
}
else
{
switch (_currentLanguage)
{
case "en":
msg = "Revise mask success.";
break;
case "zh":
msg = "編輯遮罩成功";
break;
default:
msg = "編輯遮罩成功";
break;
}
result.IsSuccess = true;
result.Message = msg;
}
return result;
}
......@@ -1357,6 +1230,11 @@ namespace backstage.Controllers
}
else {
result.IsSuccess = false;
result.Message = apiResult.Message;
return result;
}
}
catch (Exception e)
......@@ -1368,9 +1246,7 @@ namespace backstage.Controllers
}
result.IsSuccess = false;
result.Message = "Create fail.";
return result;
//return View();
}
......@@ -1378,99 +1254,77 @@ namespace backstage.Controllers
//刪除MASK ajax
[Authorize(Policy = "AdminOnly")]
[HttpPost]
public async Task<ResultModel> DeleteMask(IFormCollection form)
public async Task<ResultModel> DeleteMask(int merchant_id, int vault_id, int mask_id)
{
var result = new ResultModel();
try
{
var url = _config["IP"] + "/v2/vault";
if (string.IsNullOrEmpty(form["name"]))
{
result.IsSuccess = false;
result.Message = "名稱不能為空";
return result;
}
var httpMethod = HttpMethod.Post;
// 取得使用者的 "token" Claim 值
string token = User.FindFirstValue("token");
var setting = new
{
mask = Convert.ToInt32(form["mask"]),
size_init = Convert.ToInt32(form["size_init"]),
size_end = Convert.ToInt32(form["size_end"])
};
var fieldData = new[]
{
new
{
action = "MOD",
id=Convert.ToInt32(form["mask_id"]),
name=form["name"].ToString(),
type = Convert.ToInt32(form["type"]),
setting = System.Text.Json.JsonSerializer.Serialize(setting)
string msg;
#region key/list
var url = _config["IP"] + "/v2/vault";
var httpMethod = HttpMethod.Post;
var data = new[]{
new {
action="DEL",
id=mask_id
}
};
string namstext = form["name"];
var parameters = new Dictionary<string, string>
{
{ "Merchant_id",form["merchant_id"] },
{ "info","MASKS"},
{ "id", form["vault_id"]},
{ "data",JsonConvert.SerializeObject(fieldData)}
};
var parameters = new Dictionary<string, string>
{
{ "id",vault_id.ToString()},
{ "Merchant_id",merchant_id.ToString()},
{ "info","MASKS"},
{ "data",JsonConvert.SerializeObject(data)}
};
};
var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
var apiResult = await _callApi.CallAPI(url, parameters, httpMethod);
if (apiResult.IsSuccess)
{
try
{
var Response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString());
if (Response.r == 0)
if (Response.failInfo == null)
{
if (Response.failInfo == null)
switch (_currentLanguage)
{
result.IsSuccess = true;
result.Message = "Create success";
return result;
}
case "en":
msg = "Delete mask success.";
break;
case "zh":
msg = "遮罩刪除成功";
break;
default:
msg = "遮罩刪除成功";
break;
result.IsSuccess = false;
result.Message = System.Text.RegularExpressions.Regex.Unescape(string.Join(", ", Response.failInfo));
}
result.IsSuccess = true;
result.Message = msg;
return result;
}
else
{
result.IsSuccess = false;
result.Message = Response.m.ToString();
result.IsSuccess = false;
result.Message = System.Text.RegularExpressions.Regex.Unescape(string.Join(", ", Response.failInfo));
return result;
}
}
catch (Exception e)
{
result.IsSuccess = false;
result.Message = e.Message + e.InnerException?.Message;
return result;
}
}
catch (Exception e)
{
result.IsSuccess = false;
result.Message = apiResult.Message;
return result;
#endregion
result.IsSuccess = false;
result.Message = e.Message + e.InnerException?.Message;
return result;
}
result.IsSuccess = false;
result.Message = "Create fail.";
return result;
}
......@@ -1694,7 +1548,7 @@ namespace backstage.Controllers
msg = "啟用";
break;
}
enabletext = msg;
enabletext = msg;
}
string htmlCode = @$"<tr class=""expense-color"">
......@@ -1705,8 +1559,8 @@ namespace backstage.Controllers
<td>{vault.created}</td>
<td>{enabletext}</td>
<td>
<button class=""btn btnPermission btn-sm"" data-toggle=""modal"" data-target=""#permission"">{permission}</button>
<button class=""btn btnPermission btn-sm fieldsBtn"" data-Merchant_id=""{merchantId}"" data-vault_id=""{vault.vault_id}"" >{Fields}</button>
<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>
</td>
<td>{vault.tokenCount}</td>
<td>{vault.userCount}</td>
......@@ -1892,7 +1746,7 @@ namespace backstage.Controllers
msg = "不能為空";
break;
}
ModelState.AddModelError("name", msg);
ModelState.AddModelError("name", msg);
}
if (tokenVault.merchant_id == 0)
{
......
......@@ -13,6 +13,7 @@ namespace backstage.Models.Keys
public DateTime lastUpdate { get; set; }
public int active { get; set; }
public string expiration { get; set; }
public string[] img { get; set; }
}
public class ListKeysResponse
......
......@@ -117,17 +117,14 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Number of data" xml:space="preserve">
<value>資料數量</value>
</data>
<data name="Number of data modifications this month" xml:space="preserve">
<value>本月資料修改數量</value>
<data name="Modify the number of Token Vault Entry this month" xml:space="preserve">
<value>本月修改代碼化保險庫入口數量</value>
</data>
<data name="Number of departments" xml:space="preserve">
<value>部門數量</value>
</data>
<data name="Number of new data this month" xml:space="preserve">
<value>本月新資料數量</value>
<data name="Number of new Token Vault Entry added this month" xml:space="preserve">
<value>本月新增代碼化保險庫入口數量</value>
</data>
<data name="Number of Token Vaults" xml:space="preserve">
<value>Token Vault數量</value>
......@@ -135,4 +132,7 @@
<data name="Statistic" xml:space="preserve">
<value>數據統計</value>
</data>
<data name="Total number of Token Vault Entry" xml:space="preserve">
<value>代碼化保險庫入口總數量</value>
</data>
</root>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Add User" xml:space="preserve">
<value>新增使用者</value>
</data>
<data name="Allow decryption" xml:space="preserve">
<value>允許解密</value>
</data>
<data name="Allow delete" xml:space="preserve">
<value>允許刪除</value>
</data>
<data name="Allow to add" xml:space="preserve">
<value>允許新增</value>
</data>
<data name="Allow update" xml:space="preserve">
<value>允許更新</value>
</data>
<data name="Choose department" xml:space="preserve">
<value>選擇部門</value>
</data>
<data name="Confirm" xml:space="preserve">
<value>確認</value>
</data>
<data name="Create" xml:space="preserve">
<value>新增欄位</value>
</data>
<data name="Create Department" xml:space="preserve">
<value>新增部門</value>
</data>
<data name="Create key" xml:space="preserve">
<value>新增鑰匙</value>
</data>
<data name="Creation Date" xml:space="preserve">
<value>建立日期</value>
</data>
<data name="Data Mask" xml:space="preserve">
<value>遮罩</value>
</data>
<data name="Data Token Vault" xml:space="preserve">
<value>資料代碼保險庫</value>
</data>
<data name="Default Mask ID" xml:space="preserve">
<value>預設遮罩ID</value>
</data>
<data name="Delete" xml:space="preserve">
<value>刪除</value>
</data>
<data name="Delete key" xml:space="preserve">
<value>刪除鑰匙</value>
</data>
<data name="Description" xml:space="preserve">
<value>描述</value>
</data>
<data name="Enable" xml:space="preserve">
<value>啟用</value>
</data>
<data name="Encryption" xml:space="preserve">
<value>加密</value>
</data>
<data name="Expiration" xml:space="preserve">
<value>到期日期</value>
</data>
<data name="Field List Management" xml:space="preserve">
<value>欄位列表管理</value>
</data>
<data name="Format" xml:space="preserve">
<value>格式</value>
</data>
<data name="Keys List" xml:space="preserve">
<value>鑰匙列表</value>
</data>
<data name="Last Update" xml:space="preserve">
<value>建立日期</value>
</data>
<data name="Manage" xml:space="preserve">
<value>管理</value>
</data>
<data name="Mask" xml:space="preserve">
<value>遮罩</value>
</data>
<data name="Name" xml:space="preserve">
<value>名稱</value>
</data>
<data name="Number of codes" xml:space="preserve">
<value>代碼數量</value>
</data>
<data name="Number of users" xml:space="preserve">
<value>使用者數量</value>
</data>
<data name="Remove User" xml:space="preserve">
<value>移除使用者</value>
</data>
<data name="Revise" xml:space="preserve">
<value>修改</value>
</data>
<data name="Select user" xml:space="preserve">
<value>新增用戶</value>
</data>
<data name="Serial number" xml:space="preserve">
<value>編號</value>
</data>
<data name="Set up" xml:space="preserve">
<value>設定</value>
</data>
<data name="Status" xml:space="preserve">
<value>狀態</value>
</data>
<data name="Token Vault List" xml:space="preserve">
<value>代碼化保險庫列管理</value>
</data>
<data name="Tpye" xml:space="preserve">
<value>種類</value>
</data>
<data name="Username" xml:space="preserve">
<value>用戶名</value>
</data>
<data name="Users" xml:space="preserve">
<value>使用者</value>
</data>
<data name="Vault" xml:space="preserve">
<value>保險庫</value>
</data>
</root>
\ No newline at end of file
......@@ -117,37 +117,43 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AddToken Vault" xml:space="preserve">
<value>新增代碼庫</value>
</data>
<data name="Choose department" xml:space="preserve">
<value>選擇部門</value>
</data>
<data name="Create Department" xml:space="preserve">
<value>新增部門</value>
</data>
<data name="Creation Date" xml:space="preserve">
<value>建立日期</value>
</data>
<data name="Data Token Vault" xml:space="preserve">
<value>資料代碼保險庫</value>
</data>
<data name="Description" xml:space="preserve">
<value>描述</value>
</data>
<data name="Management" xml:space="preserve">
<data name="Manage" xml:space="preserve">
<value>管理</value>
</data>
<data name="Name" xml:space="preserve">
<value>名稱</value>
</data>
<data name="Number of data" xml:space="preserve">
<value>資料數量</value>
<data name="Number of codes" xml:space="preserve">
<value>代碼數量</value>
</data>
<data name="Number of users" xml:space="preserve">
<value>使用者數量</value>
</data>
<data name="Serial number" xml:space="preserve">
<value>編號</value>
</data>
<data name="Status" xml:space="preserve">
<value>狀態</value>
</data>
<data name="Token Vault List" xml:space="preserve">
<value>Token Vault列表管理</value>
<value>代碼化保險庫列管理</value>
</data>
<data name="Tpyes" xml:space="preserve">
<data name="Tpye" xml:space="preserve">
<value>種類</value>
</data>
</root>
\ No newline at end of file
......@@ -120,34 +120,40 @@
<data name="Choose department" xml:space="preserve">
<value>選擇部門</value>
</data>
<data name="Create Department" xml:space="preserve">
<value>新增部門</value>
<data name="Create Token Vault" xml:space="preserve">
<value>新增代碼庫</value>
</data>
<data name="Creation Date" xml:space="preserve">
<value>建立日期</value>
</data>
<data name="Data Token Vault" xml:space="preserve">
<value>資料代碼保險庫</value>
</data>
<data name="Description" xml:space="preserve">
<value>描述</value>
</data>
<data name="Management" xml:space="preserve">
<data name="Manage" xml:space="preserve">
<value>管理</value>
</data>
<data name="Name" xml:space="preserve">
<value>名稱</value>
</data>
<data name="Number of data" xml:space="preserve">
<value>資料數量</value>
<data name="Number of codes" xml:space="preserve">
<value>代碼數量</value>
</data>
<data name="Number of users" xml:space="preserve">
<value>使用者數量</value>
</data>
<data name="Serial number" xml:space="preserve">
<value>編號</value>
</data>
<data name="Status" xml:space="preserve">
<value>狀態</value>
</data>
<data name="Token Vault List" xml:space="preserve">
<value>Token Vault列表管理</value>
<value>代碼化保險庫列管理</value>
</data>
<data name="Tpyes" xml:space="preserve">
<data name="Tpye" xml:space="preserve">
<value>種類</value>
</data>
</root>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Choose department" xml:space="preserve">
<value>選擇部門</value>
</data>
<data name="Create" xml:space="preserve">
<value>新增欄位</value>
</data>
<data name="Create Department" xml:space="preserve">
<value>新增部門</value>
</data>
<data name="Creation Date" xml:space="preserve">
<value>建立日期</value>
</data>
<data name="Data Mask" xml:space="preserve">
<value>遮罩</value>
</data>
<data name="Data Token Vault" xml:space="preserve">
<value>資料代碼保險庫</value>
</data>
<data name="Delete" xml:space="preserve">
<value>刪除</value>
</data>
<data name="Description" xml:space="preserve">
<value>描述</value>
</data>
<data name="Enable" xml:space="preserve">
<value>啟用</value>
</data>
<data name="Field List Management" xml:space="preserve">
<value>欄位列表管理</value>
</data>
<data name="Format" xml:space="preserve">
<value>格式</value>
</data>
<data name="Manage" xml:space="preserve">
<value>管理</value>
</data>
<data name="Name" xml:space="preserve">
<value>名稱</value>
</data>
<data name="Number of codes" xml:space="preserve">
<value>代碼數量</value>
</data>
<data name="Number of users" xml:space="preserve">
<value>使用者數量</value>
</data>
<data name="Revise" xml:space="preserve">
<value>修改</value>
</data>
<data name="Serial number" xml:space="preserve">
<value>編號</value>
</data>
<data name="Set up" xml:space="preserve">
<value>設定</value>
</data>
<data name="Status" xml:space="preserve">
<value>狀態</value>
</data>
<data name="Token Vault List" xml:space="preserve">
<value>代碼化保險庫列管理</value>
</data>
<data name="Tpye" xml:space="preserve">
<value>種類</value>
</data>
<data name="Users" xml:space="preserve">
<value>使用者</value>
</data>
<data name="Vault" xml:space="preserve">
<value>保險庫</value>
</data>
</root>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Add mask" xml:space="preserve">
<value>新增遮罩</value>
</data>
<data name="Add User" xml:space="preserve">
<value>新增使用者</value>
</data>
<data name="Allow decryption" xml:space="preserve">
<value>允許解密</value>
</data>
<data name="Allow delete" xml:space="preserve">
<value>允許刪除</value>
</data>
<data name="Allow to add" xml:space="preserve">
<value>允許新增</value>
</data>
<data name="Allow update" xml:space="preserve">
<value>允許更新</value>
</data>
<data name="Are you sure you want to delete the mask?" xml:space="preserve">
<value>是否確定要刪除遮罩?</value>
</data>
<data name="Choose department" xml:space="preserve">
<value>選擇部門</value>
</data>
<data name="Confirm" xml:space="preserve">
<value>確認</value>
</data>
<data name="Create" xml:space="preserve">
<value>新增欄位</value>
</data>
<data name="Create Department" xml:space="preserve">
<value>新增部門</value>
</data>
<data name="Creation Date" xml:space="preserve">
<value>建立日期</value>
</data>
<data name="Data Mask" xml:space="preserve">
<value>遮罩</value>
</data>
<data name="Data mask list" xml:space="preserve">
<value>資料遮罩列表</value>
</data>
<data name="Data Token Vault" xml:space="preserve">
<value>資料代碼保險庫</value>
</data>
<data name="Default Mask ID" xml:space="preserve">
<value>預設遮罩ID</value>
</data>
<data name="Delete" xml:space="preserve">
<value>刪除</value>
</data>
<data name="Delete mask" xml:space="preserve">
<value>刪除遮罩</value>
</data>
<data name="Description" xml:space="preserve">
<value>描述</value>
</data>
<data name="Enable" xml:space="preserve">
<value>啟用</value>
</data>
<data name="Field" xml:space="preserve">
<value>欄位</value>
</data>
<data name="Field List Management" xml:space="preserve">
<value>欄位列表管理</value>
</data>
<data name="Format" xml:space="preserve">
<value>格式</value>
</data>
<data name="Is it a unique value" xml:space="preserve">
<value>是否為唯一值</value>
</data>
<data name="Manage" xml:space="preserve">
<value>管理</value>
</data>
<data name="Mask" xml:space="preserve">
<value>遮罩</value>
</data>
<data name="Name" xml:space="preserve">
<value>名稱</value>
</data>
<data name="No" xml:space="preserve">
<value></value>
</data>
<data name="Number of codes" xml:space="preserve">
<value>代碼數量</value>
</data>
<data name="Number of users" xml:space="preserve">
<value>使用者數量</value>
</data>
<data name="Please choose a mask (single choice)" xml:space="preserve">
<value>請選擇遮罩(單選)</value>
</data>
<data name="Please select the mask type (single choice)" xml:space="preserve">
<value>請選擇遮罩種類(單選)</value>
</data>
<data name="Remove User" xml:space="preserve">
<value>移除使用者</value>
</data>
<data name="Revise" xml:space="preserve">
<value>修改</value>
</data>
<data name="Select user" xml:space="preserve">
<value>新增用戶</value>
</data>
<data name="Send out" xml:space="preserve">
<value>送出</value>
</data>
<data name="Serial number" xml:space="preserve">
<value>編號</value>
</data>
<data name="Set up" xml:space="preserve">
<value>設定</value>
</data>
<data name="Status" xml:space="preserve">
<value>狀態</value>
</data>
<data name="Token Vault List" xml:space="preserve">
<value>代碼化保險庫列管理</value>
</data>
<data name="Tpye" xml:space="preserve">
<value>種類</value>
</data>
<data name="Type" xml:space="preserve">
<value>種類</value>
</data>
<data name="Username" xml:space="preserve">
<value>用戶名</value>
</data>
<data name="Users" xml:space="preserve">
<value>使用者</value>
</data>
<data name="Vault" xml:space="preserve">
<value>保險庫</value>
</data>
<data name="Yes" xml:space="preserve">
<value></value>
</data>
</root>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Add User" xml:space="preserve">
<value>新增使用者</value>
</data>
<data name="Allow decryption" xml:space="preserve">
<value>允許解密</value>
</data>
<data name="Allow delete" xml:space="preserve">
<value>允許刪除</value>
</data>
<data name="Allow to add" xml:space="preserve">
<value>允許新增</value>
</data>
<data name="Allow update" xml:space="preserve">
<value>允許更新</value>
</data>
<data name="Choose department" xml:space="preserve">
<value>選擇部門</value>
</data>
<data name="Confirm" xml:space="preserve">
<value>確認</value>
</data>
<data name="Create" xml:space="preserve">
<value>新增欄位</value>
</data>
<data name="Create Department" xml:space="preserve">
<value>新增部門</value>
</data>
<data name="Creation Date" xml:space="preserve">
<value>建立日期</value>
</data>
<data name="Data Mask" xml:space="preserve">
<value>遮罩</value>
</data>
<data name="Data Token Vault" xml:space="preserve">
<value>資料代碼保險庫</value>
</data>
<data name="Default Mask ID" xml:space="preserve">
<value>預設遮罩ID</value>
</data>
<data name="Delete" xml:space="preserve">
<value>刪除</value>
</data>
<data name="Description" xml:space="preserve">
<value>描述</value>
</data>
<data name="Enable" xml:space="preserve">
<value>啟用</value>
</data>
<data name="Field List Management" xml:space="preserve">
<value>欄位列表管理</value>
</data>
<data name="Format" xml:space="preserve">
<value>格式</value>
</data>
<data name="Manage" xml:space="preserve">
<value>管理</value>
</data>
<data name="Mask" xml:space="preserve">
<value>遮罩</value>
</data>
<data name="Name" xml:space="preserve">
<value>名稱</value>
</data>
<data name="Number of codes" xml:space="preserve">
<value>代碼數量</value>
</data>
<data name="Number of users" xml:space="preserve">
<value>使用者數量</value>
</data>
<data name="Remove User" xml:space="preserve">
<value>移除使用者</value>
</data>
<data name="Revise" xml:space="preserve">
<value>修改</value>
</data>
<data name="Select user" xml:space="preserve">
<value>新增用戶</value>
</data>
<data name="Serial number" xml:space="preserve">
<value>編號</value>
</data>
<data name="Set up" xml:space="preserve">
<value>設定</value>
</data>
<data name="Status" xml:space="preserve">
<value>狀態</value>
</data>
<data name="Token Vault List" xml:space="preserve">
<value>代碼化保險庫列管理</value>
</data>
<data name="Tpye" xml:space="preserve">
<value>種類</value>
</data>
<data name="Username" xml:space="preserve">
<value>用戶名</value>
</data>
<data name="Users" xml:space="preserve">
<value>使用者</value>
</data>
<data name="Vault" xml:space="preserve">
<value>保險庫</value>
</data>
</root>
\ No newline at end of file
......@@ -126,25 +126,25 @@
<data name="Create Department" xml:space="preserve">
<value>新增部門</value>
</data>
<data name="creation_date" xml:space="preserve">
<data name="Creation Date" xml:space="preserve">
<value>建立日期</value>
</data>
<data name="Department ID" xml:space="preserve">
<value>部門ID</value>
</data>
<data name="Department List" xml:space="preserve">
<value>部門列表</value>
</data>
<data name="merchant_id" xml:space="preserve">
<value>部門ID</value>
</data>
<data name="name" xml:space="preserve">
<data name="Name" xml:space="preserve">
<value>名稱</value>
</data>
<data name="phone" xml:space="preserve">
<data name="Phone" xml:space="preserve">
<value>電話</value>
</data>
<data name="submit" xml:space="preserve">
<data name="Submit" xml:space="preserve">
<value>送出</value>
</data>
<data name="username" xml:space="preserve">
<data name="Username" xml:space="preserve">
<value>使用者名稱</value>
</data>
</root>
\ No newline at end of file
......@@ -123,22 +123,22 @@
<data name="Create" xml:space="preserve">
<value>新增部門</value>
</data>
<data name="creation_date" xml:space="preserve">
<data name="Creation Date" xml:space="preserve">
<value>建立日期</value>
</data>
<data name="Department ID" xml:space="preserve">
<value>部門ID</value>
</data>
<data name="Department List" xml:space="preserve">
<value>部門列表</value>
</data>
<data name="merchant_id" xml:space="preserve">
<value>部門ID</value>
</data>
<data name="name" xml:space="preserve">
<data name="Name" xml:space="preserve">
<value>名稱</value>
</data>
<data name="phone" xml:space="preserve">
<data name="Phone" xml:space="preserve">
<value>電話</value>
</data>
<data name="username" xml:space="preserve">
<data name="Username" xml:space="preserve">
<value>使用者名稱</value>
</data>
</root>
\ No newline at end of file
......@@ -124,13 +124,13 @@
<value>Admin數量</value>
</data>
<data name="Create" xml:space="preserve">
<value>新增</value>
<value>新增使用者</value>
</data>
<data name="creation_date" xml:space="preserve">
<value>建立日期</value>
</data>
<data name="Email" xml:space="preserve">
<value>電子郵件</value>
<value>電子信箱</value>
</data>
<data name="enabled" xml:space="preserve">
<value>啟用</value>
......
......@@ -44,7 +44,7 @@
<div class="col-lg-4 col-md-6 grid-margin stretch-card dashboard-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">Token Vault Entry <br>@Localizer["Number of data"]</h4>
<h4 class="card-title">Token Vault Entry <br>@Localizer["Total number of Token Vault Entry"]</h4>
<div class="card-content text-center">
<img src="~/images/admin-vault-data.svg" class="img-fuild">
<p class="number text-center">200</p>
......@@ -56,7 +56,7 @@
<div class="col-lg-4 col-md-6 grid-margin stretch-card dashboard-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">Token Vualt Entry<br />@Localizer["Number of new data this month"]</h4>
<h4 class="card-title">Token Vualt Entry<br />@Localizer["Number of new Token Vault Entry added this month"]</h4>
<div class="card-content text-center">
<img src="~/images/admin-vault-add.svg" class="img-fuild">
<p class="number text-center">10</p>
......@@ -68,7 +68,7 @@
<div class="col-lg-4 col-md-6 grid-margin stretch-card dashboard-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">Token Vualt Entry<br />@Localizer["Number of data modifications this month"]</h4>
<h4 class="card-title">Token Vualt Entry<br />@Localizer["Modify the number of Token Vault Entry this month"]</h4>
<div class="card-content text-center">
<img src="~/images/admin-vault-edit.svg" class="img-fuild">
<p class="number text-center">7</p>
......
@model backstage.Models.Keys.Key
@{
ViewData["Title"] = "Create field";
}
<!-- partial -->
<div class="page-header">
<h3 class="page-title">Ceate field</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
<div class="col-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
@*路徑列*@
<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">Token Vault</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">Fields data</a></li>
<li class="breadcrumb-item ">Create field</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">Basic</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">Submit</button>
<a type="button" class="btn btn-light" asp-action="ListFields">Back to 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>
}
......@@ -13,11 +13,12 @@
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<style>
</style>
}
<div class="page-header">
<h3 class="page-title">Keys List</h3>
<h3 class="page-title">@Localizer["Keys List"]</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
......@@ -36,24 +37,26 @@
<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">Keys List</li>
<li class="breadcrumb-item active">@Localizer["Keys List"]</li>
</ul>
</div>
</div>
<a type="button" class="btn btn-info float-right mb-2 @disabledClass" asp-action="CreateKey">@Localizer["Create"]</a>
<a type="button" class="btn btn-info float-right mb-2 @disabledClass" id="CreateKey">@Localizer["Create key"]</a>
<div class="table-responsive">
<!--交易紀錄列表 table-->
<table class="table table-striped">
<thead>
<tr>
<th style=" border-left: solid 0.1px #d9d9d9;">ID</th>
<th>Name</th>
<th>Encryption</th>
<th>Last Update</th>
<th>Status</th>
<th>Expiration</th>
<th>Modify</th>
<th style=" border-right: solid 0.1px #d9d9d9;">Delete</th>
<th style=" border-left: solid 0.1px #d9d9d9;">@Localizer["Serial number"]</th>
<th>@Localizer["Name"]</th>
<th>@Localizer["Encryption"]</th>
<th>@Localizer["Last Update"]</th>
<th>@Localizer["Status"]</th>
<th>@Localizer["Expiration"]</th>
<th>@Localizer["Revise"]</th>
<th style=" border-right: solid 0.1px #d9d9d9;">@Localizer["Delete"]</th>
</tr>
</thead>
......@@ -72,13 +75,23 @@
<td>@(k.active==1?"In use":"")</td>
<td>@k.expiration</td>
<td>
<a data-toggle="modal" data-target="#editProject" title="Modify">
<i class="fa-solid fa-pen-to-square"></i>
<a class="reviseKeyBtn" data-keyId="@k.id" data-toggle="modal" data-target="#editProject" title="Revise">
<i class="fa-solid fa-pen-to-square"></i>
</a>
</a>
</td>
<td>
<a data-toggle="modal" data-target="#deleteProject" title="Delete">
<i class="fa-solid fa-trash-can"></i>
<a class="deleteKeyBtn" data-keyId="@k.id" data-toggle="modal" data-target="#deleteProject" title="Delete">
<i class="fa-solid fa-trash-can"></i>
</a>
</a>
</td>
</tr>
......@@ -100,6 +113,7 @@
</div>
</div>
<!-- MODAL -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
......@@ -123,6 +137,254 @@
</div>
</div>
<div class="modal fade " id="deleteProject" role="dialog" tabindex="-1" aria-modal="true">
<div class="modal-dialog modal-md modalforMemberGo">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<h4>
@Localizer["Delete key"]
</h4>
</div> <!--END of div "modal-header"-->
<div class="modal-body" style="padding-top:35px; padding-bottom: 35px">
<form>
<p>
@Localizer["Confirm"]?
</p>
<div class="SubmitBlock SubmitBlock_sm button-container">
<button id="confirmBtn" class="btn btn-mainblue-solid same-size-button">@Localizer["Submit"]</button>
<button type="button" class="btn btn-mainblue-hollow same-size-button" data-dismiss="modal">@Localizer["Cancel"]</button>
</div>
</form>
</div> <!--END of div "modal-body"-->
<div class="modal-footer">
<!--
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
-->
</div> <!--END of div "modal-footer"-->
</div><!-- END of Modal content-->
</div><!-- END of div "modal-dialog modal-lg" -->
</div>
<!--權限 Popup Form-->
<!-- Modal -->
<div class="modal fade" id="permission" role="dialog" tabindex="-1">
<div class="modal-dialog modal-xl modalforMemberGo">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title">
<i class="fa fa-tags" aria-hidden="true"></i> 權限管理
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div> <!--END of div "modal-header"-->
<div class="modal-body" style="padding-top:35px;">
<div>
<div class="newBlock newPerm">
<button type="button" class="btn btn-mainblue-solid" data-toggle="collapse" data-target="#newPermission"><img src="images/memberGo/permission/userRights-4-white-100.png">新增使用者及權限</button>
</div> <!--end fo newBlock-->
<div id="newPermission" class="collapse">
<div class="row">
<div class="col-md-5">
<div class="form-group">
<select title="請選擇使用者" class="selectpicker selecter form-control selectpicker-tokenization">
<option>test A</option>
<option>test B</option>
<option>test C</option>z
<option>test D</option>
</select>
</div>
</div>
<div class="col-md-5">
<div class="form-group">
<select multiple title="請選擇權限(複選)" class="selectpicker selecter form-control selectpicker-tokenization">
<option>Read</option>
<option>Write</option>
<option>Update</option>
<option>Delete</option>
<option>Enable &amp; Disable</option>
</select>
</div>
</div>
<div class="col-md-2">
<div class="form-group">
<button class="btn btn-primary newPermConfirmBtn">新增</button>
</div>
</div>
</div>
<hr>
</div> <!--end of "newPermission"-->
</div>
<div class="table-responsive permissionTableDiv">
<table class="table table-striped table-hover" id="memberGoTbl_permission">
<tbody>
<tr>
<th style=" border-left: solid 1px #d9d9d9;">編號</th>
<th>使用者</th>
<th>權限</th>
<th>啟動</th>
<th>建立日</th>
<th>修改日</th>
<th style=" border-right: solid 1px #d9d9d9;">操作</th>
</tr>
<tr>
<td>01</td>
<td>test1</td>
<td>
<div>
<select multiple title="請選擇權限(複選)" class="selectpicker selecter selectpicker-tokenization">
<option>Read</option>
<option>Write</option>
<option>Update</option>
<option>Delete</option>
<option>Enable &amp; Disable</option>
</select>
</div>
</td>
<td>
<input type="checkbox" checked>
</td>
<td>2018-11-09 15:14:43</td>
<td>2018-11-09 15:14:43</td>
<td>
<button class="btn btn-primary btn-sm" title="儲存">儲存</button>
</td>
</tr>
<tr>
<td>02</td>
<td>test2</td>
<td>
<div>
<select multiple title="請選擇權限(複選)" class="selectpicker selectpicker-tokenization">
<option>Read</option>
<option>Write</option>
<option>Update</option>
<option>Delete</option>
<option>Enable &amp; Disable</option>
</select>
</div>
</td>
<td>
<input type="checkbox" checked>
</td>
<td>2018-11-09 15:14:43</td>
<td>2018-11-09 15:14:43</td>
<td>
<button class="btn btn-primary btn-sm" title="儲存">儲存</button>
</td>
</tr>
<tr>
<td>03</td>
<td>test3</td>
<td>
<div>
<select multiple title="請選擇權限(複選)" class="selectpicker selectpicker-tokenization">
<option>Read</option>
<option>Write</option>
<option>Update</option>
<option>Delete</option>
<option>Enable &amp; Disable</option>
</select>
</div>
</td>
<td>
<input type="checkbox" checked>
</td>
<td>2018-11-09 15:14:43</td>
<td>2018-11-09 15:14:43</td>
<td>
<button class="btn btn-primary btn-sm" title="儲存">儲存</button>
</td>
</tr>
<tr>
<td>04</td>
<td>test4</td>
<td>
<div>
<select title="請選擇權限(複選)" class="selectpicker selectpicker-tokenization" multiple>
<option>Read</option>
<option>Write</option>
<option>Update</option>
<option>Delete</option>
<option>Enable &amp; Disable</option>
</select>
</div>
</td>
<td>
<input type="checkbox" checked>
</td>
<td>2018-11-09 15:14:43</td>
<td>2018-11-09 15:14:43</td>
<td>
<button class="btn btn-primary btn-sm" title="儲存">儲存</button>
</td>
</tr>
<tr>
<td>05</td>
<td>test5</td>
<td>
<div>
<select title="請選擇權限(複選)" class="selectpicker selectpicker-tokenization" multiple>
<option>Read</option>
<option>Write</option>
<option>Update</option>
<option>Delete</option>
<option>Enable &amp; Disable</option>
</select>
</div>
</td>
<td>
<input type="checkbox" checked>
</td>
<td>2018-11-09 15:14:43</td>
<td>2018-11-09 15:14:43</td>
<td>
<button class="btn btn-primary btn-sm" title="儲存">儲存</button>
</td>
</tr>
</tbody>
<!-- <tfoot>
<tr>
<td colspan="7" class="permissionList">
<button type="button" class="btn btn-mainblue-hollow" data-dismiss="modal">關閉</button>
</td>
</tr>
</tfoot> -->
</table>
</div>
<!-- <div class="text-center">
<button type="button" class="btn btn-default" data-dismiss="modal">關閉</button>
</div> -->
</div><!--END of div "modal-body"-->
<div class="modal-footer modalforMemberGo">
</div>
</div><!-- END of Modal content-->
</div><!-- END of div "modal-dialog modal-lg" -->
</div><!-- END of Modal-->
<!--END of 權限 Popup Form-->
@section Scripts{
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
......@@ -141,24 +403,66 @@
tooltipClass: "custom-tooltip-width"
});
$("#confirmBtn").on("click", function () {
var selectKeyId;
$('.deleteKeyBtn').click(function (e) {
selectKeyId = parseInt( $(this).data('keyid'));
console.log('selectKeyId=' + selectKeyId);
});
$("#confirmBtn").on("click", function (e) {
// 確認按鈕被點擊時的處理程式碼
// 在這裡呼叫您的 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
e.preventDefault(); // 防止點擊後刷新頁面(如果該鏈接是 <a> 標籤)
var data = {
keyId: selectKeyId
};
console.log('data.keyId=' + data.keyId);
$.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}),
url: "/Key/DeleteKey",
type: 'POST', // 或 'GET',根據實際需求
data: data,
success: function (response) {
// API 呼叫成功的處理程式碼
showAlert(response.isSuccess, response.message)
if (response.isSuccess) {
setTimeout(function () {
location.reload();
}, 2000);
}
},
error: function (xhr, status, error) {
// API 呼叫失敗的處理程式碼
showAlert(false, error.responseText)
}
});
});
//新增鑰匙
$("#CreateKey").on("click", function (e) {
$.ajax({
url: "/Key/CreateKey",
type: 'POST', // 或 'GET',根據實際需求
success: function (response) {
// API 呼叫成功的處理程式碼
showAlert(response.isSuccess, response.message)
if (response.isSuccess) {
setTimeout(function () {
location.reload();
}, 2000);
}
},
error: function (xhr, status, error) {
// API 呼叫失敗的處理程式碼
showAlert(false, error.responseText)
}
});
});
......
......@@ -141,7 +141,7 @@
<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" asp-action="ChangeLanguage" asp-controller="Home" asp-route-lang="en" asp-route-returnUrl="@Context.Request.Path.Value">
<a class="dropdown-item preview-item" asp-action="ChangeLanguage" asp-controller="Home" asp-route-lang="en"asp-route-returnUrl="@($"{Context.Request.Path.Value}{Context.Request.QueryString}")">
<div class="preview-thumbnail">
<div class="preview-icon languageIcon">
<img src="/images/icon-lan-en-80.jpg">
......@@ -152,7 +152,7 @@
</div>
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item preview-item" asp-action="ChangeLanguage" asp-controller="Home" asp-route-lang="zh" asp-route-returnUrl="@Context.Request.Path.Value">
<a class="dropdown-item preview-item" asp-action="ChangeLanguage" asp-controller="Home" asp-route-lang="zh" asp-route-returnUrl="@($"{Context.Request.Path.Value}{Context.Request.QueryString}")">
<div class="preview-thumbnail">
<div class="preview-icon languageIcon">
......
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@model backstage.Models.TokenVault.Field
@{
ViewData["Title"] = @Localizer["Create field"];
}
<!-- partial -->
<div class="page-header">
<h3 class="page-title">Ceate field</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
<div class="col-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
@*路徑列*@
<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">@Localizer["Token Vault"]</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">@Localizer["Fields data"]</a></li>
<li class="breadcrumb-item ">Create field</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">Basic</p>
<div class="row">
<div class="col-md-6 form-group required">
<label asp-for="name" class="col-form-label" for="">@Localizer["Name"]</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="">@Localizer["Description"]</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="">@Localizer["Format"]</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="">@Localizer["Enable"]</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">@Localizer["Send out"]</button>
<a type="button" class="btn btn-light" asp-action="ListFields">@Localizer["Back to 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>
}
@model backstage.Models.TokenVault.TokenVaultForCreate
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@model backstage.Models.TokenVault.TokenVaultForCreate
@{
ViewData["Title"] = "新增TokenVault";
ViewData["Title"] = @Localizer["Add Token Vault"];
}
<!-- partial -->
<div class="page-header">
<h3 class="page-title">新增TokenVault</h3>
<h3 class="page-title">@Localizer["Add Token Vault"]</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div class="floating-msg" id="msgDiv"></div>
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
<div class="col-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">新增TokenVault</h4>
<h4 class="card-title">@Localizer["Add Token Vault"]</h4>
<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">Basic</p>
<div class="row">
<div class="col-md-6 form-group required">
<select id="selectDepartmentList" class="form-control" asp-for="merchant_id" asp-items="ViewBag.DepartmentsList">
<option value="">Choose department</option>
</select>
</div>
</div>
<div class="row">
......@@ -44,11 +46,11 @@
<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="">
<input asp-for="description" type="text" class="form-control" id="">
<span asp-validation-for="description" class="text-danger"></span>
</div>
</div>
......
......@@ -14,7 +14,7 @@
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div class="floating-msg" id="msgDiv"></div>
</div>
......@@ -43,7 +43,7 @@
</select>
</div>
<div class="col-md-auto">
<a type="button" class="btn btn-info float-right mb-2 @disabledClass" asp-action="CreateTokenVault"> @Localizer["Create Department"]</a>
<a type="button" class="btn btn-info float-right mb-2 @disabledClass" asp-action="CreateTokenVault"> @Localizer["Create Token Vault"]</a>
</div>
</div>
<div class="row">
......@@ -58,14 +58,14 @@
<table class="table table-striped ">
<thead>
<tr class="">
<th>Id</th>
<th>@Localizer["Serial number"]</th>
<th> @Localizer["Name"]</th>
<th> @Localizer["Description"]</th>
<th> @Localizer["Tpyes"]</th>
<th> @Localizer["Tpye"]</th>
<th> @Localizer["Creation Date"]</th>
<th> @Localizer["Status"]</th>
<th> @Localizer["Management"]</th>
<th> @Localizer["Number of data"]</th>
<th> @Localizer["Manage"]</th>
<th> @Localizer["Number of codes"]</th>
<th> @Localizer["Number of users"]</th>
</tr>
......@@ -104,6 +104,7 @@
</div>
@section Scripts{
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
......@@ -117,26 +118,21 @@
// 在頁面載入時檢查 localStorage 是否有選單值
var selectedOption = localStorage.getItem('selectedOption');
console.log('selectedOption=' + 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) {
selectedOption = $('#selectDepartmentList').val();
console.log('selectedOption=' + selectedOption);
if (selectedOption != 0) {
// 使用 AJAX 傳遞選擇的值
$.ajax({
url: '/TokenVault/ListTokenVaultAjax', // 替換為適當的控制器方法路徑
type: 'POST', // 或 'GET',根據實際需求
data: { merchantId: selectedValue },
data: { merchantId: selectedOption },
success: function (response) {
$('#tbody').empty();
$('#tbody').append(response);
......@@ -151,13 +147,16 @@
}
// 當選擇下拉選單時觸發事件
$('#selectDepartmentList').change(function () {
var selectedValue = $(this).val(); // 獲取選擇的值
loadData(selectedValue);
var selectedOption = parseInt($(this).val()); // 獲取選擇的值
localStorage.setItem('selectedOption', selectedOption);
loadData(selectedOption);
console.log('localStorage.setItem=' + selectedOption)
});
// 定義 AJAX 請求函式,將選單值傳遞至後端並填入 tbody
function loadData(selectedOption) {
console.log('loadData,selectedOption=' + selectedOption);
// 使用 AJAX 傳遞選擇的值
$.ajax({
url: '/TokenVault/ListTokenVaultAjax', // 替換為適當的控制器方法路徑
......@@ -167,7 +166,7 @@
$('#tbody').empty();
$('#tbody').append(response);
// 在成功取得回應後的處理邏輯
//console.log(response);
console.log(response);
},
error: function (xhr, status, error) {
// 在發生錯誤時的處理邏輯
......@@ -192,6 +191,15 @@
});
//權限按鈕
$(document).on('click', '.permissionBtn', 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;
});
})
......
@model backstage.Models.TokenVault.FieldsResponse
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@model backstage.Models.TokenVault.FieldsResponse
@{
ViewData["Title"] = "Fields列表管理";
ViewData["Title"] = @Localizer["Field List Management"];
}
@{
bool isAdmin = User.IsInRole("Admin");
......@@ -34,9 +36,14 @@
}
}
</script>
<style>
.label-space {
margin-right: 30px; /* 根据需要调整间距大小 */
}
</style>
}}
<div class="page-header">
<h3 class="page-title">Fields列表管理列表管理</h3>
<h3 class="page-title">@Localizer["Field List Management"]</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
......@@ -50,27 +57,32 @@
<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">Token Vault</a></li>
<li class="breadcrumb-item ">Fields Data</li>
<li class="breadcrumb-item active">
<a asp-action="List" asp-route-merchantId="@ViewBag.Merchant_id">
@Localizer["Token Vault List"]
</a>
</li>
<li class="breadcrumb-item ">@Localizer["Field List Management"]</li>
</ul>
</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>Token Vault</th>
<td class="item">ID</td>
<th>@Localizer["Token Vault"]</th>
<td class="item">@Localizer["Serial number"]</td>
<td class="content">@ViewBag.VaultInfo.vault_id</td>
<td class="item">Name</td>
<td class="item">@Localizer["Name"]</td>
<td class="content">@ViewBag.VaultInfo.name</td>
</tr>
</tbody>
......@@ -78,21 +90,21 @@
</div>
</div>
<div style="float: right;">
<a type="button" class="btn btn-info float-right mb-2 @disabledClass" data-toggle="modal" data-target="#myModal">Create</a>
<a type="button" class="btn btn-info float-right mb-2 @disabledClass" data-toggle="modal" data-target="#myModal">@Localizer["Create"]</a>
</div>
</div>
<div>
<div class="rank-table">
<div class="table-responsive">
<table class="table table-striped expense-color">
<table class="table table-striped ">
<thead>
<tr class="expense-color">
<th>ID</th>
<th>Name</th>
<th>Descryption</th>
<th>Format</th>
<th>Enable</th>
<th>Management</th>
<tr class="">
<th>@Localizer["Serial number"]</th>
<th>@Localizer["Name"]</th>
<th>@Localizer["Description"]</th>
<th>@Localizer["Format"]</th>
<th>@Localizer["Enable"]</th>
<th>@Localizer["Manage"]</th>
</tr>
</thead>
......@@ -101,7 +113,7 @@
{
@foreach (var i in Model.fields)
{
<tr id="@i.id" class="expense-color">
<tr id="@i.id" class="">
<td>@i.id</td>
<td>@i.name</td>
<td>@i.desc</td>
......@@ -111,8 +123,8 @@
<td>
<!-- <button class="btn btnPermission btn-sm" data-toggle="modal" data-target="#permission">資料遮罩</button> -->
<a class="btn btnPermission btn-sm masksBtn">Data Mask</a>
<a class="btn btnPermission btn-sm usersBtn">Users </a>
<a class="btn btnPermission btn-sm masksBtn">@Localizer["Data Mask"]</a>
<a class="btn btnPermission btn-sm usersBtn">@Localizer["Users"] </a>
</td>
</tr>
}
......@@ -139,34 +151,35 @@
<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>
<label class="control-label">@Localizer["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>
<label class="control-label">@Localizer["Description"]</label>
<input name="desc" type="text" class="form-control">
</div>
<div class="form-group required">
<label class="control-label">format_exp</label>
<label class="control-label">@Localizer["Format"]</label>
<input name="format_exp" type="text" class="form-control">
</div>
<div class="form-group required">
<label class="control-label">Enabled</label>
<label class="form-check-label label-space">@Localizer["Enable"]</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>
<button type="submit" class="btn btn-primary" id="createFieldBtn" disabled>@Localizer["Submit"]</button>
<button type="button" class="btn btn-light" data-dismiss="modal">@Localizer["Cancel"]</button>
</div>
</form>
</div>
......
@model List<backstage.Models.TokenVault.Mask>
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@model List<backstage.Models.TokenVault.Mask>
@{
ViewData["Title"] = "Mask列表管理";
ViewData["Title"] = @Localizer["Token Vault List"];
}
@{
bool isAdmin = User.IsInRole("Admin");
string disabledClass = isAdmin ? "" : "disabled";
}
@section header
{
<style>
.hidden {
display: none;
}
</style>
}
<div class="page-header">
<h3 class="page-title">Mask列表管理</h3>
<h3 class="page-title"> @Localizer["Mask list management"]</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
......@@ -25,9 +36,9 @@
@*路徑列*@
<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>
<li class="breadcrumb-item active"><a asp-action="List" asp-route-merchantId="@ViewBag.Merchant_id"> @Localizer["Token Vault List"]</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">@Localizer["Field List Management"]</a></li>
<li class="breadcrumb-item ">@Localizer["Data mask"]</li>
</ul>
</div>
</div>
......@@ -40,17 +51,17 @@
</thead> -->
<tbody>
<tr>
<th>保險庫</th>
<td class="item">ID</td>
<th>@Localizer["Vault"]</th>
<td class="item">@Localizer["Serial number"]</td>
<td class="content">@ViewBag.vault_id</td>
<td class="item">名稱</td>
<td class="item">@Localizer["Name"]</td>
<td class="content">@ViewBag.VaultName</td>
</tr>
<tr>
<th>欄位</th>
<td class="item">ID</td>
<th>@Localizer["Field"]</th>
<td class="item">@Localizer["Serial number"]</td>
<td class="content">@ViewBag.field_id</td>
<td class="item">名稱</td>
<td class="item">@Localizer["Name"]</td>
<td class="content">@ViewBag.FieldName</td>
</tr>
......@@ -60,27 +71,27 @@
</table>
<div class="newBlock">
@*<button type="button" class="btn btn-mainblue-hollow" onclick="window.location.href='tokenVault_fields.html'"><img src="images/memberGo/apiKey/back_o_icons8-undo-90.png">返回</button>*@
<button id="NewMaskBtn" type="button" class="btn btn-mainblue-solid @disabledClass" data-toggle="modal" data-target="#new-field-mask"><img src="~/images/memberGo/add.png">新增遮罩</button>
<button id="NewMaskBtn" type="button" class="btn btn-mainblue-solid @disabledClass" data-toggle="modal" data-target="#new-field-mask"><img src="~/images/memberGo/add.png">@Localizer["Add mask"]</button>
</div>
<div class="table-responsive">
<table class="table table-striped table-hover0 table-bordered" id="memberGoTbl_masksList">
<thead>
<tr>
<th colspan="9">資料遮罩列表</th>
<th colspan="9">@Localizer["Data mask list"]</th>
</tr>
</thead>
<tbody>
<tr>
<th style=" border-left: solid 1px #d9d9d9;">ID</th>
<th>名稱</th>
<th>種類</th>
<th>遮罩</th>
<th>唯一值</th>
<th>設定</th>
<th>修改</th>
<th style=" border-right: solid 0.1px #d9d9d9;">刪除</th>
<th>@Localizer["Name"]</th>
<th>@Localizer["Type"]</th>
<th>@Localizer["Mask"]</th>
<th>@Localizer["Is it a unique value"]</th>
<th>@Localizer["Set up"]</th>
<th>@Localizer["Revise"]</th>
<th style=" border-right: solid 0.1px #d9d9d9;">@Localizer["Delete"]</th>
</tr>
@if (Model.Count > 0)
......@@ -93,7 +104,8 @@
<td class="mask_name">@m.name</td>
<td class="content">@m.type</td>
<td class="content">@m.mask</td>
<td class="item">@(m.is_unique==1?"是":"否")</td>
<td class="item">@Localizer[(m.is_unique == 1 ? "Yes" : "No")]</td>
<td class="content">@m.setting</td>
<td>
<a class="editMaskBtn" data-toggle="modal" data-target="#edit-field-mask" title="修改">
......@@ -135,8 +147,8 @@
<!--
<button type="button" class="close" data-dismiss="modal">&times;</button>
-->
<h3 class="modal-title" >
新增遮罩
<h3 class="modal-title">
@Localizer["Add mask"]
</h3>
</div> <!--END of div "modal-header"-->
......@@ -152,32 +164,16 @@
</div>
<div class="form-group">
<label class="control-labe required" for="name">名稱:</label>
<label class="control-labe required" for="name"> @Localizer["Name"]:</label>
<div class="">
<input type="text" name="name" class="form-control form-control-sm0" required>
</div>
</div>
<div class="form-group">
<label class="control-labe" for="">是否為唯一值:</label>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="is_unique" id="uniqueY" value="1" checked>
<label class="form-check-label" for="uniqueY">
</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="is_unique" id="uniqueN" value="0">
<label class="form-check-label" for="uniqueN">
</label>
</div>
</div>
<div class="form-group">
<label class="control-labe" for="userName">種類:</label>
<label class="control-labe" for="userName"> @Localizer["Type"]:</label>
<div class="form-group">
<select title="請選遮罩種類(單選)" name="type" id="maskType" class="selectpicker selecter form-control selectpicker-tokenization" onchange="showMaskSettingsAdv()">
<select title=" @Localizer["Please select the mask type (single choice)"]" name="type" id="maskType" class="selectpicker selecter form-control selectpicker-tokenization" onchange="showMaskSettingsAdv()">
<option class="bs-title-option" value=""></option>
<option value="0">0</option>
<option value="1">1</option>
......@@ -185,46 +181,46 @@
</div>
</div>
<div class="maskSettings" id="maskSettingsAdvID">
<div class="maskSettings hidden" id="maskSettingsAdvID">
<hr>
<div class="maskSettingsTitle">設定:</div>
<div class="maskSettingsTitle"> @Localizer["Set up"]</div>
<div class="maskSettingForm">
<div class="form-group">
<label class="control-labe" for="userName">mask:</label>
<label class="control-labe">mask:</label>
<div class="form-group">
<select id="mask" title="請選擇mask(單選)" name="mask" class="selectpicker selecter form-control selectpicker-tokenization">
<select id="mask" title=" @Localizer["Please choose a mask (single choice)"]" name="mask" class="selectpicker selecter form-control selectpicker-tokenization">
<option class="bs-title-option" value=""></option>
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-labe required" for="userName">size init:</label>
<div class="">
<input type="number" name="size_init" class="form-control form-control-sm0" required>
<input type="number" name="size_init" id="size_init" class="form-control form-control-sm0" required>
</div>
</div>
<div class="form-group">
<label class="control-labe required" for="userName">size end:</label>
<label class="control-labe required">size end:</label>
<div class="">
<input type="number" name="size_end" class="form-control form-control-sm0" required>
<input type="number" name="size_end" id="size_end" class="form-control form-control-sm0" required>
</div>
</div>
<div class="form-group">
<label class="control-labe required" for="userName">to skip:</label>
<label class="control-labe required">to skip:</label>
<div class="">
<input type="text" name="toskip" class="form-control form-control-sm0" required>
<input type="text" name="toskip" id="toskip" class="form-control form-control-sm0" required>
</div>
</div>
</div>
</div>
<div class="SubmitBlock">
<button id="createMaskBtn" type="button" class="btn btn-mainblue-solid btnSubmit">送出</button>
<button type="button" class="btn btn-mainblue-hollow btnReset" data-dismiss="modal">取消</button>
<button id="createMaskBtn" type="button" class="btn btn-mainblue-solid btnSubmit"> @Localizer["Send out"]</button>
<button type="button" class="btn btn-mainblue-hollow btnReset" data-dismiss="modal"> @Localizer["Cancel"]</button>
</div>
</form>
</div> <!--END of div "modal-body"-->
......@@ -251,7 +247,7 @@
<div class="modal-header">
<h4>
刪除遮罩
@Localizer["Delete mask"]
</h4>
</div> <!--END of div "modal-header"-->
......@@ -259,12 +255,12 @@
<form>
<p>
是否確定要刪除遮罩?
@Localizer["Are you sure you want to delete the mask?"]
</p>
<div class="SubmitBlock SubmitBlock_sm">
<button type="button" id="delMaskConfirmBtn" class="btn btn-mainblue-solid" style="margin-right: 10px; width: 80px">確定</button>
<button type="button" class="btn btn-mainblue-hollow" data-dismiss="modal" style="margin-right: 10px; width: 80px">取消</button>
<button type="button" id="delMaskConfirmBtn" class="btn btn-mainblue-solid" style="margin-right: 10px; width: 80px"> @Localizer["Confirm"]</button>
<button type="button" class="btn btn-mainblue-hollow" data-dismiss="modal" style="margin-right: 10px; width: 80px"> @Localizer["Cancel"]</button>
</div>
</form>
......@@ -294,19 +290,24 @@
showAlert(IsSuccess, msg);
}
// 页面加载完成后,隐藏 maskSettingsAdvID
document.getElementById("maskSettingsAdvID").classList.remove("show");
//新增mask
$("#NewMaskBtn").click(function (event) {
console.log('NewMaskBtn')
$('#new-field-mask .modal-title').text('新增遮罩');
$('#new-field-mask input:not([name="mask_id"], [name="merchant_id"], [name="field_id"], [name="vault_id"])').val('');
$("#maskType").selectpicker("val", "");
$("#mask").selectpicker("val", "");
document.getElementById("maskSettingsAdvID").classList.remove("show");
})
//送出新mask
$("#createMaskBtn").click(function (event) {
$.ajax({
url: '/TokenVault/CreateMask',
type: 'POST',
......@@ -353,35 +354,28 @@
var type = $("#memberGoTbl_masksList tr").filter(function () {
return $(this).find("td:first-child").text().trim() === selectMaskId;
}).find("td:nth-child(3)").text();
console.log("type=" + type);
$("#new-field-mask select[name='type'] option").filter(function () {
return $(this).val() === type;
}).prop("selected", true);
$('#new-field-mask').modal();
//$.ajax({
// url: '/TokenVault/EditMask',
// type: 'POST',
// data: $('#createMaskForm').serialize(),
// success: function (data) {
// //console.log(data);
// showAlert(data.isSuccess, data.message);
// if (data.isSuccess) {
// $('#new-field-mask').modal('hide');
// setTimeout(function () {
// location.reload();
// }, 2000);
// }
// },
// error: function (xhr, status, error) {
// console.log(xhr.responseText);
// showAlert(false, "發生錯誤");
// }
//});
$("#maskType").selectpicker();
$("#maskType").selectpicker("val", type);
})
showMaskSettingsAdv();
var tdData = $("#memberGoTbl_masksList tr").filter(function () {
return $(this).find("td:first-child").text().trim() === selectMaskId;
}).find("td:nth-child(6)").text();
var tdObject = JSON.parse(tdData);
console.log(tdObject);
$("#size_init").val(tdObject.size_init);
$("#size_end").val(tdObject.size_end);
$("#toSkip").val(""); // 这里的值可以根据需要进行设定
$('#new-field-mask').modal();
})
//刪除mask
var selectMaskId = 0;
$('.delMaskBtn').click(function () {
......
@model List<backstage.Models.Users.User>
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@model List<backstage.Models.Users.User>
@{
ViewData["Title"] = "欄位Users列表管理";
}
......@@ -10,7 +12,7 @@
@section header{
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
}
......@@ -28,35 +30,35 @@
<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>
<li class="breadcrumb-item active"><a asp-action="List" asp-route-merchantId="@ViewBag.Merchant_id">@Localizer["Token Vault List"]</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">@Localizer["Field List Management"]</a></li>
<li class="breadcrumb-item active">@Localizer["Users"]</li>
</ul>
</div>
</div>
<div>
<a type="button" class="btn btn-info float-right mb-2 @disabledClass" data-toggle="modal" data-target="#myModal">Add User</a>
<a type="button" class="btn btn-info float-right mb-2 @disabledClass" data-toggle="modal" data-target="#myModal">@Localizer["Add User"]</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>
<th>@Localizer["Serial number"]</th>
<th>@Localizer["Name"]</th>
<th>@Localizer["Username"]</th>
<th>@Localizer["Mask"]</th>
<th>@Localizer["Allow decryption"]</th>
<th>@Localizer["Allow to add"]</th>
<th>@Localizer["Allow update"]</th>
<th>@Localizer["Allow delete"]</th>
<th>@Localizer["Default Mask ID"]</th>
<th>@Localizer["Manage"]</th>
</tr>
</thead>
<tbody id="tbody">
......@@ -64,36 +66,36 @@
{
@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 class="custom-tooltip" data-tooltip="@i.masksSettingText">@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 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 class="custom-tooltip" data-tooltip="@i.masksSettingText">@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 data-id="@i.id" class="btn btnPermission btn-sm" data-toggle="modal" data-target="#delete-field-user">@Localizer["Remove User"]</a>
</td>
</tr>
}
}
......@@ -117,7 +119,7 @@
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="myModalLabel">選擇使用者</h5>
<h5 class="modal-title" id="myModalLabel">@Localizer["Select user"]</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
......@@ -129,11 +131,53 @@
</select>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="confirmBtn" data-dismiss="modal">確認</button>
<button type="button" class="btn btn-primary" id="confirmBtn" data-dismiss="modal">@Localizer["Confirm"]</button>
</div>
</div>
</div>
</div>
<!--移除user Form-->
<!-- Modal -->
<div class="modal fade " id="delete-field-user" tabindex="-1" style=" padding-right: 17px;" aria-modal="true" role="dialog">
<div class="modal-dialog modal-sm modalforMemberGo">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<h4>
@Localizer["Remove user"]
</h4>
</div> <!--END of div "modal-header"-->
<div class="modal-body" style="padding-top:35px; padding-bottom: 35px">
<form>
<p>
@Localizer["Are you sure you want to remove this user?"]
</p>
<div class="SubmitBlock SubmitBlock_sm">
<button type="button" id="delUserConfirmBtn" class="btn btn-mainblue-solid" style="margin-right: 10px; width: 80px"> @Localizer["Confirm"]</button>
<button type="button" class="btn btn-mainblue-hollow" data-dismiss="modal" style="margin-right: 10px; width: 80px"> @Localizer["Cancel"]</button>
</div>
</form>
</div> <!--END of div "modal-body"-->
<div class="modal-footer">
<!--
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
-->
</div> <!--END of div "modal-footer"-->
</div><!-- END of Modal content-->
</div><!-- END of div "modal-dialog modal-lg" -->
</div>
@section Scripts{
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
......@@ -169,7 +213,7 @@
success: function (response) {
showAlert(response.isSuccess, response.message);
if (response.isSuccess) {
setTimeout(function () {
location.reload();
}, 2000);
......@@ -185,6 +229,54 @@
//移除user
var selectUserId = 0;
$('.btnPermission').click(function () {
selectUserId = $(this).data('id');
console.log('selectUserId=' + selectUserId);
})
$('#delUserConfirmBtn').click(function () {
var data = {
Merchant_id: parseInt('@ViewBag.merchant_id'),
vault_id: parseInt('@ViewBag.vault_id'),
field_id: parseInt('@ViewBag.field_id'),
user_id: selectUserId
};
$.ajax({
url: '/TokenVault/DelUsers',
type: 'POST',
data: JSON.stringify(data),
contentType: "application/json",
success: function (data) {
//console.log(data);
showAlert(data.isSuccess, data.message);
if (data.isSuccess) {
$('#delete-field-user').modal('hide');
setTimeout(function () {
location.reload();
}, 2000);
}
},
error: function (xhr, status, error) {
console.log(xhr.responseText);
showAlert(false, "發生錯誤");
}
});
})
})
......
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@model backstage.Models.TokenVault.FieldsResponse
@{
ViewData["Title"] = @Localizer["Field List Management"];
}
@{
bool isAdmin = User.IsInRole("Admin");
string disabledClass = isAdmin ? "" : "disabled";
}
@section header{
}}
<div class="page-header">
<h3 class="page-title">@Localizer["Permission Management"]</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div class="floating-msg" id="msgDiv"></div>
</div>
<div class="row">
<div class="col-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">
@Localizer["Token Vault List"]
</a>
</li>
<li class="breadcrumb-item ">@Localizer["Permission Management"]</li>
</ul>
</div>
</div>
<div>
<div class="newBlock newPerm">
<button type="button" class="btn btn-mainblue-solid" data-toggle="collapse" data-target="#newPermission"><img src="~/images/memberGo/permission/userRights-4-white-100.png">新增使用者及權限</button>
</div> <!--end fo newBlock-->
<div id="newPermission" class="collapse">
<div class="row">
<div class="col-md-5">
<div class="form-group">
<select title="請選擇使用者" class="selectpicker selecter form-control selectpicker-tokenization">
<option>test A</option>
<option>test B</option>
<option>test C</option>z
<option>test D</option>
</select>
</div>
</div>
<div class="col-md-5">
<div class="form-group">
<select multiple title="請選擇權限(複選)" class="selectpicker selecter form-control selectpicker-tokenization">
<option>Read</option>
<option>Write</option>
<option>Update</option>
<option>Delete</option>
<option>Enable &amp; Disable</option>
</select>
</div>
</div>
<div class="col-md-2">
<div class="form-group">
<button class="btn btn-primary newPermConfirmBtn">新增</button>
</div>
</div>
</div>
<hr>
</div> <!--end of "newPermission"-->
</div>
<div class="table-responsive permissionTableDiv">
<table class="table table-striped table-hover" id="memberGoTbl_permission">
<tbody>
<tr>
<th style=" border-left: solid 1px #d9d9d9;">編號</th>
<th>使用者</th>
<th>權限</th>
<th>啟動</th>
<th>建立日</th>
<th>修改日</th>
<th style=" border-right: solid 1px #d9d9d9;">操作</th>
</tr>
<tr>
<td>01</td>
<td>test1</td>
<td>
<div>
<select multiple title="請選擇權限(複選)" class="selectpicker selecter selectpicker-tokenization">
<option>Read</option>
<option>Write</option>
<option>Update</option>
<option>Delete</option>
<option>Enable &amp; Disable</option>
</select>
</div>
</td>
<td>
<input type="checkbox" checked>
</td>
<td>2018-11-09 15:14:43</td>
<td>2018-11-09 15:14:43</td>
<td>
<button class="btn btn-primary btn-sm" title="儲存">儲存</button>
</td>
</tr>
<tr>
<td>02</td>
<td>test2</td>
<td>
<div>
<select multiple title="請選擇權限(複選)" class="selectpicker selectpicker-tokenization">
<option>Read</option>
<option>Write</option>
<option>Update</option>
<option>Delete</option>
<option>Enable &amp; Disable</option>
</select>
</div>
</td>
<td>
<input type="checkbox" checked>
</td>
<td>2018-11-09 15:14:43</td>
<td>2018-11-09 15:14:43</td>
<td>
<button class="btn btn-primary btn-sm" title="儲存">儲存</button>
</td>
</tr>
<tr>
<td>03</td>
<td>test3</td>
<td>
<div>
<select multiple title="請選擇權限(複選)" class="selectpicker selectpicker-tokenization">
<option>Read</option>
<option>Write</option>
<option>Update</option>
<option>Delete</option>
<option>Enable &amp; Disable</option>
</select>
</div>
</td>
<td>
<input type="checkbox" checked>
</td>
<td>2018-11-09 15:14:43</td>
<td>2018-11-09 15:14:43</td>
<td>
<button class="btn btn-primary btn-sm" title="儲存">儲存</button>
</td>
</tr>
<tr>
<td>04</td>
<td>test4</td>
<td>
<div>
<select title="請選擇權限(複選)" class="selectpicker selectpicker-tokenization" multiple>
<option>Read</option>
<option>Write</option>
<option>Update</option>
<option>Delete</option>
<option>Enable &amp; Disable</option>
</select>
</div>
</td>
<td>
<input type="checkbox" checked>
</td>
<td>2018-11-09 15:14:43</td>
<td>2018-11-09 15:14:43</td>
<td>
<button class="btn btn-primary btn-sm" title="儲存">儲存</button>
</td>
</tr>
<tr>
<td>05</td>
<td>test5</td>
<td>
<div>
<select title="請選擇權限(複選)" class="selectpicker selectpicker-tokenization" multiple>
<option>Read</option>
<option>Write</option>
<option>Update</option>
<option>Delete</option>
<option>Enable &amp; Disable</option>
</select>
</div>
</td>
<td>
<input type="checkbox" checked>
</td>
<td>2018-11-09 15:14:43</td>
<td>2018-11-09 15:14:43</td>
<td>
<button class="btn btn-primary btn-sm" title="儲存">儲存</button>
</td>
</tr>
</tbody>
<!-- <tfoot>
<tr>
<td colspan="7" class="permissionList">
<button type="button" class="btn btn-mainblue-hollow" data-dismiss="modal">關閉</button>
</td>
</tr>
</tfoot> -->
</table>
</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;
});
//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);
// })
// });
//});
})
</script>
}
\ No newline at end of file
......@@ -21,19 +21,19 @@
<div class="col-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<h4 class="card-title"> @Localizer["Create Department"]</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">@Localizer["Basic"]</p>
<div class="row">
<div class="col-md-4 form-group required">
<label asp-for="name" class="col-form-label" for="">@Localizer["name"]</label>
<label asp-for="name" class="col-form-label" for="">@Localizer["Name"]</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">@Localizer["phone"]</label>
<label asp-for="phone" class="col-form-label" for="phone">@Localizer["Phone"]</label>
<input asp-for="phone" class="form-control" id="phone">
<span asp-validation-for="phone" class="text-danger"></span>
</div>
......
......@@ -26,17 +26,17 @@
<table class="table table-striped ">
<thead>
<tr>
<th>@Localizer["merchant_id"]</th>
<th>@Localizer["name"]</th>
<th>@Localizer["Department ID"]</th>
<th>@Localizer["Name"]</th>
@*<th>address</th>
<th>country_id</th>
<th>postcode</th>*@
<th>@Localizer["phone"]</th>
<th>@Localizer["Phone"]</th>
@*<th>fax</th>*@
@*<th>vatid</th>*@
@*<th>enabled</th>*@
<th>@Localizer["creation_date"]</th>
<th>@Localizer["Creation Date"]</th>
@*<th>vatid_verify</th>
<th>deposit_book_verify</th>
<th>user_natid_verify</th>
......
......@@ -24,7 +24,7 @@
@*列表*@
<div class="">
<table class="table table-striped">
<table class="table table-striped" style="display: none;">
<thead>
<tr>
<th>uid</th>
......@@ -127,6 +127,11 @@
onColor: 'success',
offColor: 'danger',
size: 'small',
onInit: function () {
// 初始化完成時的操作
// 例如顯示表格等
$('table').show();
},
onSwitchChange: function (event, state) {
var uid = $(this).data('uid');
var isAdmin = $(this).is(':checked')?1:0;
......@@ -155,6 +160,11 @@
onColor: 'success',
offColor: 'danger',
size: 'small',
onInit: function () {
// 初始化完成時的操作
// 例如顯示表格等
$('table').show();
},
onSwitchChange: function (event, state) {
var uid = $(this).data('uid');
var enabled = $(this).is(':checked') ? 1 : 0;;
......
......@@ -19338,4 +19338,7 @@ tbody {
}
.custom-tooltip {
cursor: pointer !important;
}
\ No newline at end of file
}
.deleteKeyBtn, .reviseKeyBtn, .fa-pen-to-square, .fa-trash-can {
cursor: pointer;
}
<svg id="圖層_1" data-name="圖層 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 132 27.2"><defs><style>.cls-1{fill:#35a9e1;fill-rule:evenodd;}.cls-2{fill:none;}</style></defs><path class="cls-1" d="M15.34,16.26l.66-3.4L8.92,5.6H5.11L2,22.6H5.83L8.31,9Z"/><path class="cls-1" d="M22,5.6H18.44L16.13,19.17,9.58,12,9,15.4l6.55,7.2h3.57Zm3.57,12.64a2,2,0,0,0,.6.92,2.54,2.54,0,0,0,1,.52,5.07,5.07,0,0,0,1.29.17,6.74,6.74,0,0,0,1-.08,3.47,3.47,0,0,0,1-.31,2.51,2.51,0,0,0,.89-.62,1.92,1.92,0,0,0,.49-1,1.38,1.38,0,0,0-.23-1.08,2.56,2.56,0,0,0-1-.68,7.88,7.88,0,0,0-1.42-.47c-.54-.14-1.08-.3-1.62-.46a15.44,15.44,0,0,1-1.62-.55,4.47,4.47,0,0,1-1.35-.87,3,3,0,0,1-.85-1.33,3.83,3.83,0,0,1-.08-1.9,5,5,0,0,1,.89-2.15,6.42,6.42,0,0,1,1.59-1.53,7.47,7.47,0,0,1,2.06-.92,8.34,8.34,0,0,1,2.17-.29,9.71,9.71,0,0,1,2.33.28,4.9,4.9,0,0,1,1.85.93,3.62,3.62,0,0,1,1.12,1.62,5,5,0,0,1,.11,2.41H32.56a2.89,2.89,0,0,0-.09-1.17,1.66,1.66,0,0,0-.54-.76,2.49,2.49,0,0,0-.9-.39,6.51,6.51,0,0,0-1.16-.18,4,4,0,0,0-.85.09,2.18,2.18,0,0,0-.81.32,2.25,2.25,0,0,0-.67.56,1.76,1.76,0,0,0-.36.88,1.44,1.44,0,0,0,0,.77,1.31,1.31,0,0,0,.6.54,8.49,8.49,0,0,0,1.35.51l2.28.63a11.19,11.19,0,0,1,1.17.32,5.15,5.15,0,0,1,1.42.77,3.77,3.77,0,0,1,1.1,1.4,3.67,3.67,0,0,1,.17,2.29,5.36,5.36,0,0,1-.77,2.07A5.83,5.83,0,0,1,33,21.14a7.12,7.12,0,0,1-2.24,1.07,9.42,9.42,0,0,1-2.89.39,9.3,9.3,0,0,1-2.47-.32,5.17,5.17,0,0,1-2-1,4.13,4.13,0,0,1-1.19-1.8,5.21,5.21,0,0,1-.09-2.6h3.36a3,3,0,0,0,.09,1.4M52,5.6l-.53,3H42.89L42.28,12h7.87l-.49,2.74H41.79l-.69,3.92h8.75l-.53,3H37l2.81-16Zm11.22,4.68a2.81,2.81,0,0,0-.64-.89,3,3,0,0,0-1-.62,3.42,3.42,0,0,0-1.23-.21A4.82,4.82,0,0,0,58.2,9a5.07,5.07,0,0,0-1.62,1.25,7.33,7.33,0,0,0-1.09,1.8,10.09,10.09,0,0,0-.6,2.08,8.38,8.38,0,0,0-.12,2,4.37,4.37,0,0,0,.39,1.74,3,3,0,0,0,1.15,1.24,3.75,3.75,0,0,0,2,.47,4,4,0,0,0,2.77-1A5.87,5.87,0,0,0,62.69,16h3.49A9.65,9.65,0,0,1,65,18.71a9,9,0,0,1-1.9,2.1,8.1,8.1,0,0,1-2.45,1.33,8.76,8.76,0,0,1-2.87.46A8,8,0,0,1,54.49,22a5.57,5.57,0,0,1-2.22-1.8,6.57,6.57,0,0,1-1.12-2.67,9.26,9.26,0,0,1,0-3.32,11.34,11.34,0,0,1,1.32-3.41,10.52,10.52,0,0,1,2.07-2.67,9,9,0,0,1,2.88-1.82,8.77,8.77,0,0,1,3.51-.67,7.6,7.6,0,0,1,2.5.39,5.43,5.43,0,0,1,2,1.13A4.71,4.71,0,0,1,66.64,9,5.8,5.8,0,0,1,67,11.47h-3.5a2.58,2.58,0,0,0-.26-1.19M79.39,20.94A8.8,8.8,0,0,1,74,22.57,6.41,6.41,0,0,1,69.12,21c-1-1.09-1.35-2.72-1-5L70,5.6h3.62L71.78,15.93a7.81,7.81,0,0,0-.12,1.36,2.37,2.37,0,0,0,.28,1.16,2,2,0,0,0,.89.81,3.88,3.88,0,0,0,1.71.31,3.93,3.93,0,0,0,2.83-.87A5,5,0,0,0,78.58,16l1.8-10.34H84L82.2,16a7.69,7.69,0,0,1-2.81,5m12.86-8.1a3.28,3.28,0,0,0,2-.54,2.65,2.65,0,0,0,1-1.77,1.81,1.81,0,0,0-.32-1.7,2.45,2.45,0,0,0-1.79-.52H89l-.81,4.5ZM94.89,5.6a5.16,5.16,0,0,1,1.94.34,3.63,3.63,0,0,1,1.36,1,3.53,3.53,0,0,1,.72,1.4,4.11,4.11,0,0,1,0,1.71,5.44,5.44,0,0,1-1.06,2.45A5,5,0,0,1,95.55,14a2.57,2.57,0,0,1,1,.54,2.49,2.49,0,0,1,.56.88,3.51,3.51,0,0,1,.2,1.11,8.28,8.28,0,0,1,0,1.22,2.52,2.52,0,0,1-.12.89,4.1,4.1,0,0,0-.11,1.06,8.68,8.68,0,0,0,0,1,2.09,2.09,0,0,0,.23.81H93.65a5.56,5.56,0,0,1,0-1.82c.08-.69.14-1.37.16-2a2.68,2.68,0,0,0-.44-1.83,2.4,2.4,0,0,0-1.88-.59H87.8L86.6,21.6H83l2.92-16ZM115,5.6l-.52,3h-8.57L105.3,12h7.85l-.46,2.74H104.8l-.7,3.92h8.75l-.53,3H100l2.87-16Zm6.2,13a4.66,4.66,0,0,0,1.57-.3,4,4,0,0,0,1.45-.81,5.65,5.65,0,0,0,1.2-1.47,7.1,7.1,0,0,0,.73-2.24,9.39,9.39,0,0,0,.16-2.18,3.72,3.72,0,0,0-.49-1.66,2.69,2.69,0,0,0-1.24-1.07,5.29,5.29,0,0,0-2.15-.36h-2.54l-1.8,10.05Zm2.65-13a7.77,7.77,0,0,1,2.82.5,4.78,4.78,0,0,1,2.07,1.47,5.5,5.5,0,0,1,1.1,2.45,9.64,9.64,0,0,1,0,3.47,12.16,12.16,0,0,1-1,3.21A8.75,8.75,0,0,1,127,19.3,8.16,8.16,0,0,1,124.34,21a8.68,8.68,0,0,1-3.34.61h-7l2.86-16Z"/><path class="cls-2" d="M0-14.4H132v56H0Z"/></svg>
\ No newline at end of file
<svg id="圖層_1" data-name="圖層 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 309 33.48"><defs><style>.cls-1,.cls-3{fill:#35a9e1;}.cls-1{fill-rule:evenodd;}.cls-2{fill:none;}.cls-3{font-size:19px;font-family:SourceHanSansTC-Medium-B5pc-H, Source Han Sans TC;}</style></defs><path class="cls-1" d="M23.43,21.07l.92-4.72L14.52,6.28H9.23L4.92,29.87h5.31L13.67,11Z"/><path class="cls-1" d="M32.67,6.28H27.73l-3.2,18.83-9.09-9.95-.81,4.72,9.09,10h5Zm5,17.54a2.79,2.79,0,0,0,.83,1.28,3.62,3.62,0,0,0,1.39.72,7.14,7.14,0,0,0,1.79.23A9.3,9.3,0,0,0,43,25.94a4.81,4.81,0,0,0,1.38-.43,3.42,3.42,0,0,0,1.24-.86,2.68,2.68,0,0,0,.68-1.39A1.92,1.92,0,0,0,46,21.77a3.49,3.49,0,0,0-1.39-.95,10.34,10.34,0,0,0-2-.65c-.75-.2-1.5-.42-2.25-.64a22.89,22.89,0,0,1-2.25-.76,6.39,6.39,0,0,1-1.87-1.21,4.18,4.18,0,0,1-1.18-1.85A5.21,5.21,0,0,1,35,13.08a6.86,6.86,0,0,1,1.24-3A8.87,8.87,0,0,1,38.43,8a10.36,10.36,0,0,1,2.86-1.28,11.73,11.73,0,0,1,3-.4,13.61,13.61,0,0,1,3.24.39A6.74,6.74,0,0,1,50.1,8a5,5,0,0,1,1.56,2.25,7,7,0,0,1,.15,3.34H47.33a4,4,0,0,0-.13-1.62,2.2,2.2,0,0,0-.75-1,3.35,3.35,0,0,0-1.25-.55,9.48,9.48,0,0,0-1.61-.25,5.92,5.92,0,0,0-1.18.13,3,3,0,0,0-1.12.44,3.17,3.17,0,0,0-.93.78,2.48,2.48,0,0,0-.5,1.22,2,2,0,0,0,0,1.07,1.83,1.83,0,0,0,.83.75,12.52,12.52,0,0,0,1.88.71l3.16.87a14.93,14.93,0,0,1,1.62.45,7.41,7.41,0,0,1,2,1.06,5.27,5.27,0,0,1,1.52,1.95,5.07,5.07,0,0,1,.24,3.17A7.45,7.45,0,0,1,50,25.57a8,8,0,0,1-2.08,2.27,9.81,9.81,0,0,1-3.11,1.49,12.94,12.94,0,0,1-4,.54,12.81,12.81,0,0,1-3.43-.44A7.24,7.24,0,0,1,34.62,28,5.71,5.71,0,0,1,33,25.54a7.24,7.24,0,0,1-.12-3.61H37.5a4.11,4.11,0,0,0,.13,1.94M74.31,6.28l-.74,4.16H61.66l-.84,4.72H71.74L71.06,19H60.14l-1,5.44H71.32l-.73,4.17H53.49l3.9-22.21Zm15.57,6.49A4.17,4.17,0,0,0,89,11.54a4,4,0,0,0-1.39-.86,4.73,4.73,0,0,0-1.71-.29,6.67,6.67,0,0,0-3,.61,7.17,7.17,0,0,0-2.25,1.73,10.29,10.29,0,0,0-1.51,2.5,13.84,13.84,0,0,0-.83,2.89,11.17,11.17,0,0,0-.17,2.77,6.14,6.14,0,0,0,.54,2.42A4.21,4.21,0,0,0,80.29,25a5.23,5.23,0,0,0,2.77.65,5.56,5.56,0,0,0,3.85-1.39,8.23,8.23,0,0,0,2.23-3.58H94a13.53,13.53,0,0,1-1.63,3.76,12.44,12.44,0,0,1-2.64,2.92,11.33,11.33,0,0,1-3.4,1.84,12.24,12.24,0,0,1-4,.64A11.17,11.17,0,0,1,77.76,29a7.66,7.66,0,0,1-3.08-2.5,9,9,0,0,1-1.55-3.71,12.7,12.7,0,0,1,0-4.6A15.81,15.81,0,0,1,75,13.49a14.54,14.54,0,0,1,2.87-3.7,12.51,12.51,0,0,1,4-2.53,12.31,12.31,0,0,1,4.87-.93,10.76,10.76,0,0,1,3.47.54,7.63,7.63,0,0,1,2.77,1.57A6.46,6.46,0,0,1,94.62,11a7.83,7.83,0,0,1,.5,3.42H90.26a3.52,3.52,0,0,0-.36-1.65m22.42,14.8a12.28,12.28,0,0,1-7.48,2.26,8.89,8.89,0,0,1-6.78-2.18c-1.38-1.51-1.87-3.78-1.38-6.94L99.29,6.28h5l-2.55,14.33a11,11,0,0,0-.17,1.89,3.22,3.22,0,0,0,.39,1.61,2.72,2.72,0,0,0,1.23,1.12,5.25,5.25,0,0,0,2.38.43,5.41,5.41,0,0,0,3.92-1.2,6.92,6.92,0,0,0,1.68-3.75l2.5-14.35h5l-2.49,14.35a10.71,10.71,0,0,1-3.9,6.94m17.84-11.24a4.55,4.55,0,0,0,2.78-.75,3.7,3.7,0,0,0,1.39-2.46,2.52,2.52,0,0,0-.45-2.36,3.41,3.41,0,0,0-2.48-.72h-5.75l-1.12,6.25Zm3.67-10.13a7.07,7.07,0,0,1,2.69.47,5,5,0,0,1,1.89,1.39,5.06,5.06,0,0,1,1,1.94,5.91,5.91,0,0,1,0,2.37,7.48,7.48,0,0,1-1.48,3.4,6.84,6.84,0,0,1-3.19,2.08,3.61,3.61,0,0,1,1.39.75,3.53,3.53,0,0,1,.78,1.23,5,5,0,0,1,.28,1.54,11.92,11.92,0,0,1,0,1.69,3.63,3.63,0,0,1-.17,1.23,5.28,5.28,0,0,0-.15,1.48,10.59,10.59,0,0,0,0,1.38,2.78,2.78,0,0,0,.32,1.13h-5.08a7.67,7.67,0,0,1,0-2.53c.11-1,.19-1.9.22-2.77a3.73,3.73,0,0,0-.61-2.54,3.28,3.28,0,0,0-2.61-.82H124l-1.67,8.78h-5l4-22.2Zm27.9,0L161,10.44H149.12l-.85,4.72h10.9l-.64,3.8H147.58l-1,5.44h12.14L158,28.57h-17.1l4-22.21Zm8.61,18a6.3,6.3,0,0,0,2.18-.42,5.53,5.53,0,0,0,2-1.12,7.82,7.82,0,0,0,1.67-2,10,10,0,0,0,1-3.11,13.37,13.37,0,0,0,.22-3,5,5,0,0,0-.68-2.3A3.7,3.7,0,0,0,175,10.82a7.09,7.09,0,0,0-3-.5h-3.53L166,24.26Zm3.68-18a10.68,10.68,0,0,1,3.91.69,6.68,6.68,0,0,1,2.87,2,7.67,7.67,0,0,1,1.53,3.4,13.46,13.46,0,0,1,0,4.82,16.56,16.56,0,0,1-1.39,4.45,12.2,12.2,0,0,1-2.55,3.61,11.4,11.4,0,0,1-3.69,2.36,12.27,12.27,0,0,1-4.64.85h-9.71l4-22.21Z"/><path class="cls-2" d="M2.14-21.48H185.33V56.24H2.14Z"/><text class="cls-3" transform="translate(191.01 25.42)">資料保護平台</text></svg>
\ No newline at end of file
......@@ -139,23 +139,23 @@ function showBankTypeAdv(){
}
}
function showMaskSettingsAdv(){
function showMaskSettingsAdv() {
var oSel = document.getElementById("maskType");
console.log('testtttttt')
var oValue = oSel.options[oSel.selectedIndex].value;
if(oValue == 0){
document.getElementById("maskSettingsAdvID").classList.toggle("show");
}
else{
document.getElementById("maskSettingsAdvID").classList.remove("show");
var maskSettingsAdvID = document.getElementById("maskSettingsAdvID");
if (oValue == 0 && !maskSettingsAdvID.classList.contains("show")) {
maskSettingsAdvID.classList.add("show");
} else if (oValue != 0 && maskSettingsAdvID.classList.contains("show")) {
maskSettingsAdvID.classList.remove("show");
}
}
///////copy to clipboard/////
// function myFunction() {
......
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