1
0
Fork 0
master
嘉祥 詹 2024-07-28 00:58:36 +08:00
parent 76419969f2
commit 6615c2a4be
5 changed files with 199 additions and 32 deletions

View File

@ -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")]
public ActionResult NoGroupUserList(IFormCollection obj) {
userListResult ret = new userListResult();

View File

@ -44,7 +44,7 @@ public class DbTableClass
public DateTime groupUser_createdate { get; set; } = DateTime.Now;
}
[Table("group")]
[Table("[group]")]
public class group
{
[JsonIgnore]

View File

@ -12,6 +12,8 @@ public class resultClass
public List<depts> depts = new List<depts>();
}
public class groupListResult
{
public string ret = "no";
@ -30,8 +32,19 @@ public class resultClass
public groupDetail() { }
public groupDetail(group group) {
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();
public groupDetail(group objData) {
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();
}
}

View File

@ -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>
</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 -->
<ol class="dd-list">
<li class="dd-item dd-nodrag" data-id="1">
@ -108,7 +108,7 @@
</div><!-- /.modal-header -->
<!-- .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="dept_uid" />
<!-- .form-group -->
@ -124,27 +124,10 @@
<!-- .card -->
<div class="card card-fluid">
<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 -->
<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 -->
</div><!-- /.nestable -->
<!-- .card-footer -->
@ -157,7 +140,7 @@
</div><!-- /.modal-body -->
<!-- .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-content -->
</div><!-- /.modal-dialog -->
@ -181,9 +164,9 @@
</div><!-- /.modal-header -->
<!-- .modal-body -->
<div class="modal-body">
<input type="hidden" id="method" />
<input type="hidden" id="group_uid" />
<input type="hidden" id="dept_uid" />
<input type="hidden" id="client_method" />
<input type="hidden" id="client_group_uid" />
<input type="hidden" id="client_dept_uid" />
<!-- grid row -->
<div class="row">

View File

@ -1,26 +1,92 @@

var tmpNestableObj;
var tmpNestableItem;
$(document).ready(function () {
deptList();
$('#memberAddSaveBtn').on('click', function () {
var userArray = [];
var html = '';
$.each($('input[type=checkbox][name="memberChkList[]"]:checked'), function () {
var item = {
user_uid: $(this).val(),
user_name: $(this).parent().find('span').eq(0).text().trim()
}
userArray.push(item);
html += optionItemHtml(item);
});
$('#nestableMember .dd-list').append(html);
$('#memberModal').modal('toggle');
});
$('#groupNewModal').on('click', function () {
$('#group_method').val('add');
$('#dept_uid').val($('#dept_select').val());
$('#nestableMember .dd-list').children().remove();
//$('#nestableMember').nestable();
$('#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) {
@ -139,3 +205,30 @@ function deptList() {
}
});
}
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();
}
}
}