updates
parent
76419969f2
commit
6615c2a4be
|
|
@ -25,6 +25,84 @@ namespace QuotationMaker.Controllers
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Route("addNewGroup")]
|
||||||
|
public ActionResult AddNewGroup(IFormCollection obj) {
|
||||||
|
groupListResult ret = new groupListResult();
|
||||||
|
|
||||||
|
authToken token = new authToken(this._httpContextAccessor);
|
||||||
|
if (token.user_isLogin == false)
|
||||||
|
{
|
||||||
|
HttpContext.Response.Cookies.Delete("token_key");
|
||||||
|
ret.ret = "no";
|
||||||
|
ret.err_code = "99999";
|
||||||
|
ret.message = "非登入狀態!";
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (token.user_perm != "system")
|
||||||
|
{
|
||||||
|
ret.ret = "no";
|
||||||
|
ret.err_code = "90001";
|
||||||
|
ret.message = "此帳號無此api使用權限!";
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
string dept_uid = obj["dept_uid"].ToString();
|
||||||
|
string group_name = obj["group_name"].ToString();
|
||||||
|
string users_json_str = obj["users_json"].ToString();
|
||||||
|
string group_uid = GlobalClass.CreateRandomCode(10);
|
||||||
|
|
||||||
|
group newGroup = new group();
|
||||||
|
newGroup.group_uid = group_uid;
|
||||||
|
newGroup.group_name = group_name;
|
||||||
|
newGroup.dept_uid = dept_uid;
|
||||||
|
|
||||||
|
|
||||||
|
dynamic usersJsonObj;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
usersJsonObj = JsonConvert.DeserializeObject(users_json_str);
|
||||||
|
conn.Insert(newGroup);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
ret.ret = "no";
|
||||||
|
ret.err_code = "0003";
|
||||||
|
ret.message = "使用者列表資料錯誤 users json error," + ex.Message;
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
string nowrite_msg = "";
|
||||||
|
|
||||||
|
foreach (dynamic item in usersJsonObj) {
|
||||||
|
string user_uid = item.user_uid;
|
||||||
|
string user_name = item.user_name;
|
||||||
|
groupUser chk_user = conn.QueryFirstOrDefault<groupUser>("select * from groupUser where user_uid = @user_uid", new { user_uid = user_uid});
|
||||||
|
|
||||||
|
if (chk_user == null)
|
||||||
|
{
|
||||||
|
groupUser newGU = new groupUser();
|
||||||
|
newGU.group_uid = group_uid;
|
||||||
|
newGU.user_uid = user_uid;
|
||||||
|
newGU.groupUser_uid = GlobalClass.CreateRandomCode(16);
|
||||||
|
|
||||||
|
conn.Insert<groupUser>(newGU);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
nowrite_msg += user_name + " 此用戶已經是其他群組的成員,故此員取消加入!\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret.groups.Add(new groupDetail(newGroup));
|
||||||
|
|
||||||
|
ret.message = nowrite_msg;
|
||||||
|
|
||||||
|
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
[Route("noGroupUserList")]
|
[Route("noGroupUserList")]
|
||||||
public ActionResult NoGroupUserList(IFormCollection obj) {
|
public ActionResult NoGroupUserList(IFormCollection obj) {
|
||||||
userListResult ret = new userListResult();
|
userListResult ret = new userListResult();
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ public class DbTableClass
|
||||||
public DateTime groupUser_createdate { get; set; } = DateTime.Now;
|
public DateTime groupUser_createdate { get; set; } = DateTime.Now;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Table("group")]
|
[Table("[group]")]
|
||||||
public class group
|
public class group
|
||||||
{
|
{
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@ public class resultClass
|
||||||
public List<depts> depts = new List<depts>();
|
public List<depts> depts = new List<depts>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class groupListResult
|
public class groupListResult
|
||||||
{
|
{
|
||||||
public string ret = "no";
|
public string ret = "no";
|
||||||
|
|
@ -30,8 +32,19 @@ public class resultClass
|
||||||
|
|
||||||
public groupDetail() { }
|
public groupDetail() { }
|
||||||
|
|
||||||
public groupDetail(group group) {
|
public groupDetail(group objData) {
|
||||||
users = conn.Query<user>("select B.* from groupUser A, users B where A.user_uid = B.user_uid and A.group_uid = @group_uid", new {group_uid = group.group_uid}).ToList();
|
Type projectType = objData.GetType();
|
||||||
|
|
||||||
|
foreach (var prop in projectType.GetProperties())
|
||||||
|
{
|
||||||
|
string propName = prop.Name;
|
||||||
|
var valueProperty = projectType.GetProperty(propName);
|
||||||
|
object propValue = valueProperty.GetValue(objData, null);
|
||||||
|
|
||||||
|
this.GetType().GetProperty(propName).SetValue(this, propValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
users = conn.Query<user>("select B.* from groupUser A, users B where A.user_uid = B.user_uid and A.group_uid = @group_uid", new {group_uid = objData.group_uid}).ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@
|
||||||
<button class="btn btn-sm btn-secondary">Edit</button> <button class="btn btn-sm btn-secondary"><i class="far fa-trash-alt"></i></button>
|
<button class="btn btn-sm btn-secondary">Edit</button> <button class="btn btn-sm btn-secondary"><i class="far fa-trash-alt"></i></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="nestable01" class="dd" data-toggle="nestable" data-group="1" data-max-depth="0">
|
<div id="nestable01" class="dd" data-toggle="sortable" data-group="1" data-max-depth="0">
|
||||||
<!-- .dd-list -->
|
<!-- .dd-list -->
|
||||||
<ol class="dd-list">
|
<ol class="dd-list">
|
||||||
<li class="dd-item dd-nodrag" data-id="1">
|
<li class="dd-item dd-nodrag" data-id="1">
|
||||||
|
|
@ -108,7 +108,7 @@
|
||||||
</div><!-- /.modal-header -->
|
</div><!-- /.modal-header -->
|
||||||
<!-- .modal-body -->
|
<!-- .modal-body -->
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<input type="hidden" id="method" />
|
<input type="hidden" id="group_method" />
|
||||||
<input type="hidden" id="group_uid" />
|
<input type="hidden" id="group_uid" />
|
||||||
<input type="hidden" id="dept_uid" />
|
<input type="hidden" id="dept_uid" />
|
||||||
<!-- .form-group -->
|
<!-- .form-group -->
|
||||||
|
|
@ -124,27 +124,10 @@
|
||||||
<!-- .card -->
|
<!-- .card -->
|
||||||
<div class="card card-fluid">
|
<div class="card card-fluid">
|
||||||
<div class="card-header border-bottom-0"> 成員 </div><!-- .nestable -->
|
<div class="card-header border-bottom-0"> 成員 </div><!-- .nestable -->
|
||||||
<div id="nestableMember" class="dd" data-toggle="nestable" data-group="1" data-max-depth="0">
|
<div id="nestableMember" class="dd" data-toggle="sortable" data-group-uid="ccc" data-max-depth="1">
|
||||||
<!-- .dd-list -->
|
<!-- .dd-list -->
|
||||||
<ol class="dd-list">
|
<ol class="dd-list">
|
||||||
<li class="dd-item dd-nodrag" data-id="1" data-user-uid="123" >
|
|
||||||
<div class="dd-handle">
|
|
||||||
<span class="dd-nodrag drag-indicator"></span>
|
|
||||||
<div> user1 </div>
|
|
||||||
<div class="dd-nodrag btn-group ml-auto">
|
|
||||||
<button class="btn btn-sm btn-secondary"><i class="far fa-trash-alt"></i></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="dd-item dd-nodrag" data-id="1" data-user-uid="456">
|
|
||||||
<div class="dd-handle">
|
|
||||||
<span class="dd-nodrag drag-indicator"></span>
|
|
||||||
<div> user2 </div>
|
|
||||||
<div class="dd-nodrag btn-group ml-auto">
|
|
||||||
<button class="btn btn-sm btn-secondary"><i class="far fa-trash-alt"></i></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ol><!-- /.dd-list -->
|
</ol><!-- /.dd-list -->
|
||||||
</div><!-- /.nestable -->
|
</div><!-- /.nestable -->
|
||||||
<!-- .card-footer -->
|
<!-- .card-footer -->
|
||||||
|
|
@ -157,7 +140,7 @@
|
||||||
</div><!-- /.modal-body -->
|
</div><!-- /.modal-body -->
|
||||||
<!-- .modal-footer -->
|
<!-- .modal-footer -->
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" id="optionItemDialogSaveBtn" class="btn btn-primary">Save</button> <button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
<button type="button" id="groupDialogSaveBtn" class="btn btn-primary">Save</button> <button type="button" class="btn btn-light" data-dismiss="modal">Close</button>
|
||||||
</div><!-- /.modal-footer -->
|
</div><!-- /.modal-footer -->
|
||||||
</div><!-- /.modal-content -->
|
</div><!-- /.modal-content -->
|
||||||
</div><!-- /.modal-dialog -->
|
</div><!-- /.modal-dialog -->
|
||||||
|
|
@ -181,9 +164,9 @@
|
||||||
</div><!-- /.modal-header -->
|
</div><!-- /.modal-header -->
|
||||||
<!-- .modal-body -->
|
<!-- .modal-body -->
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<input type="hidden" id="method" />
|
<input type="hidden" id="client_method" />
|
||||||
<input type="hidden" id="group_uid" />
|
<input type="hidden" id="client_group_uid" />
|
||||||
<input type="hidden" id="dept_uid" />
|
<input type="hidden" id="client_dept_uid" />
|
||||||
|
|
||||||
<!-- grid row -->
|
<!-- grid row -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,92 @@
|
||||||
|
|
||||||
|
var tmpNestableObj;
|
||||||
|
var tmpNestableItem;
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
deptList();
|
deptList();
|
||||||
|
|
||||||
$('#memberAddSaveBtn').on('click', function () {
|
$('#memberAddSaveBtn').on('click', function () {
|
||||||
var userArray = [];
|
var userArray = [];
|
||||||
|
var html = '';
|
||||||
$.each($('input[type=checkbox][name="memberChkList[]"]:checked'), function () {
|
$.each($('input[type=checkbox][name="memberChkList[]"]:checked'), function () {
|
||||||
var item = {
|
var item = {
|
||||||
user_uid: $(this).val(),
|
user_uid: $(this).val(),
|
||||||
user_name: $(this).parent().find('span').eq(0).text().trim()
|
user_name: $(this).parent().find('span').eq(0).text().trim()
|
||||||
}
|
}
|
||||||
userArray.push(item);
|
userArray.push(item);
|
||||||
|
html += optionItemHtml(item);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#nestableMember .dd-list').append(html);
|
||||||
|
|
||||||
|
$('#memberModal').modal('toggle');
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#groupNewModal').on('click', function () {
|
$('#groupNewModal').on('click', function () {
|
||||||
|
$('#group_method').val('add');
|
||||||
|
$('#dept_uid').val($('#dept_select').val());
|
||||||
|
$('#nestableMember .dd-list').children().remove();
|
||||||
|
//$('#nestableMember').nestable();
|
||||||
$('#groupModal').modal('toggle');
|
$('#groupModal').modal('toggle');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#groupDialogSaveBtn').on('click', function () {
|
||||||
|
var method = $('#group_method').val();
|
||||||
|
var group_uid = $('#group_uid').val();
|
||||||
|
var dept_uid = $('#dept_uid').val();
|
||||||
|
var group_name = $('#group_name').val();
|
||||||
|
var userArray = [];
|
||||||
|
|
||||||
|
if (group_name == '') {
|
||||||
|
alert('請輸入群組名稱!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.each($('#nestableMember .dd-list li'), function () {
|
||||||
|
var tmp_uid = $(this).attr('data-user-uid');
|
||||||
|
var tmp_name = $(this).find("[data-name='option_name']").text();
|
||||||
|
var item = {
|
||||||
|
user_uid: tmp_uid,
|
||||||
|
user_name: tmp_name
|
||||||
|
}
|
||||||
|
userArray.push(item);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (userArray.length == 0) {
|
||||||
|
alert('群組內至少需要一名成員!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var users_json = JSON.stringify(userArray);
|
||||||
|
|
||||||
|
var formData = {
|
||||||
|
dept_uid: dept_uid,
|
||||||
|
group_name: group_name,
|
||||||
|
users_json: users_json
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: "/AuthApi/addNewGroup",
|
||||||
|
type: "post",
|
||||||
|
data: formData,
|
||||||
|
success: function (data, textStatus, jqXHR) {
|
||||||
|
if (data.ret == "yes") {
|
||||||
|
|
||||||
|
|
||||||
|
$('#groupModal').modal('toggle');
|
||||||
|
} else {
|
||||||
|
alert(data.message);
|
||||||
|
|
||||||
|
if (data.err_code == "99999") {
|
||||||
|
location.href = "/Root/Login";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
alert('網路或伺服器發生錯誤,請稍後重試!');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function newMemberClick(dept_uid) {
|
function newMemberClick(dept_uid) {
|
||||||
|
|
@ -138,4 +204,31 @@ function deptList() {
|
||||||
alert('網路或伺服器發生錯誤,請稍後重試!');
|
alert('網路或伺服器發生錯誤,請稍後重試!');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function optionItemHtml(item) {
|
||||||
|
var html = '';
|
||||||
|
html += '<li class="dd-item dd-nodrag" data-id="1" data-user-uid="'+ item.user_uid +'">';
|
||||||
|
html += ' <div class="dd-handle">';
|
||||||
|
html += ' <span class="dd-nodrag drag-indicator"></span>';
|
||||||
|
html += ' <div data-name="option_name"> ' + item.user_name + ' </div>';
|
||||||
|
html += ' <div class="dd-nodrag btn-group ml-auto">';
|
||||||
|
html += ' <button type="button" class="btn btn-sm btn-secondary" onclick="delMemberBtnClick(this);"><i class="far fa-trash-alt"></i></button>';
|
||||||
|
html += ' </div>';
|
||||||
|
html += ' </div>';
|
||||||
|
html += '</li > ';
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
|
||||||
|
function delMemberBtnClick(obj) {
|
||||||
|
if (confirm('再次確認要移除此成員?')) {
|
||||||
|
tmpNestableItem = $(obj).parent().parent().find("[data-name='option_name']");
|
||||||
|
var optionItem_name = $(obj).parent().parent().find("[data-name='option_name']").text();
|
||||||
|
var user_uid = $(obj).parent().parent().parent().attr("data-user-uid");
|
||||||
|
|
||||||
|
if ($('#client_method').val() == 'add') {
|
||||||
|
tmpNestableItem.parent().parent().remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue