init
This commit is contained in:
@@ -0,0 +1,533 @@
|
||||
<?=$this->extend('templates/front_example.php');?>
|
||||
|
||||
<?=$this->section('content');?>
|
||||
<div class="sub-contents-wrap container-user-management">
|
||||
<div class="modal fade" id="modalUpdate" tabindex="-1" aria-labelledby="ModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered modal">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">사용자 수정</h5>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="frm">
|
||||
<input type="hidden" name="id" id="hidden_id">
|
||||
<div class="form-group">
|
||||
<label for="username">이름</label>
|
||||
<input type="text" name="username" id="username" class="form-control">
|
||||
<span id="username_error" class="text-danger"></span>
|
||||
</div>
|
||||
<?php if(auth()->user()->inGroup('superadmin', 'admin', 'developer')){?>
|
||||
<div class="form-group">
|
||||
<label for="group">권한</label>
|
||||
<select name="group" class="form-control" multiple="multiple" id="userGroup">
|
||||
<option value="superadmin">최고관리자</option>
|
||||
<option value="admin">관리자</option>
|
||||
<option value="developer">개발자</option>
|
||||
<option value="agency">광고대행사</option>
|
||||
<option value="advertiser">광고주</option>
|
||||
<option value="user">사용자</option>
|
||||
<option value="guest">게스트</option>
|
||||
</select>
|
||||
<span id="groups_error" class="text-danger"></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="permission">세부 권한</label>
|
||||
<select name="permission" class="form-control" multiple="multiple" id="userPermission">
|
||||
<option value="admin.access">관리자만 가능한 페이지 접근 가능</option>
|
||||
<option value="admin.settings">관리자만 가능한 설정 접근 가능</option>
|
||||
<option value="users.create">회원 생성</option>
|
||||
<option value="users.edit">회원 수정</option>
|
||||
<option value="users.delete">회원 삭제</option>
|
||||
<option value="agency.access">대행사 목록 페이지</option>
|
||||
<option value="agency.advertisers">대행사 하위 광고주 관리</option>
|
||||
<option value="agency.create">대행사 생성</option>
|
||||
<option value="agency.edit">대행사 수정</option>
|
||||
<option value="agency.delete">대행사 삭제</option>
|
||||
<option value="advertiser.access">광고주 목록 페이지</option>
|
||||
<option value="advertiser.create">광고주 생성</option>
|
||||
<option value="advertiser.edit">광고주 수정</option>
|
||||
<option value="advertiser.delete">광고주 삭제</option>
|
||||
</select>
|
||||
<span id="permission_error" class="text-danger"></span>
|
||||
</div>
|
||||
<?php }?>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary" id="userUpdateBtn">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="modalView" tabindex="-1" aria-labelledby="ModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered modal">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header justify-content-start">
|
||||
<h5 class="modal-title"><i class="bi bi-person-fill"></i>사용자</h5>
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">이름</th>
|
||||
<th>소속</th>
|
||||
<th>권한</th>
|
||||
<th>가입일</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><span id="viewName"></span></td></td>
|
||||
<td><span id="viewCompany"></span></td>
|
||||
<td><span id="viewGroup"></span></td>
|
||||
<td><span id="viewDate"></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<?php if(auth()->user()->inGroup('superadmin', 'admin', 'developer')){
|
||||
echo '<a href="/users/belong" class="btn btn-primary" id="userBelong">소속 수정</a>';
|
||||
}?>
|
||||
<button type="button" class="btn btn-primary" id="userUpdateModal">수정</button>
|
||||
<button type="button" class="btn btn-danger" id="userDelete">삭제</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="title-area">
|
||||
<h2 class="page-title">사용자 관리</h2>
|
||||
</div>
|
||||
|
||||
<div class="search-wrap">
|
||||
<form class="search d-flex justify-content-center">
|
||||
<div class="term d-flex align-items-center">
|
||||
<input type="text" class="form-control" id="fromDate" name="fromDate" placeholder="날짜 선택" readonly="readonly">
|
||||
|
||||
<button type="button"><i class="bi bi-calendar2-week"></i></button>
|
||||
<span> ~ </span>
|
||||
|
||||
<input type="text" class="form-control" id="toDate" name="toDate" placeholder="날짜 선택" readonly="readonly">
|
||||
<button type="button"><i class="bi bi-calendar2-week"></i></button>
|
||||
</div>
|
||||
<div class="input">
|
||||
<input type="text" class="form-control" id="search" name="search" placeholder="검색어를 입력하세요">
|
||||
<button class="btn-primary" type="submit">조회</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="row d-flex justify-content-between align-items-center filter-btn-wrap">
|
||||
<!-- <dl class="col">
|
||||
<dt>
|
||||
<select name="sort" id="sort" class="form-control text-center">
|
||||
<option value="정렬">정렬</option>
|
||||
<option value="recent">최근순</option>
|
||||
<option value="old">오래된 순</option>
|
||||
</select>
|
||||
</dt>
|
||||
</dl> -->
|
||||
|
||||
<!-- <dl class="col">
|
||||
<dt>
|
||||
<select name="pageLimit" id="pageLimit" class="form-control text-center">
|
||||
<option value="게시물수">게시물수</option>
|
||||
<option value="10">10개</option>
|
||||
<option value="50">50개</option>
|
||||
<option value="100">100개</option>
|
||||
</select>
|
||||
</dt>
|
||||
</dl> -->
|
||||
<div class="btn-wrap">
|
||||
<button type="button" class="btn btn-danger"><input type="radio" name="sort" vlaue="recent">최근순</button>
|
||||
<button type="button" class="btn btn-danger"><input type="radio" name="sort" vlaue="old">오래된 순</button>
|
||||
<button type="button" class="btn btn-danger"><input type="radio" name="pageLimit" vlaue="10">10개</button>
|
||||
<button type="button" class="btn btn-danger"><input type="radio" name="pageLimit" vlaue="50">50개</button>
|
||||
<button type="button" class="btn btn-danger"><input type="radio" name="pageLimit" vlaue="100">100개</button>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col">
|
||||
<button id="DataResetBtn" class="btn btn-reset">초기화</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section client-list">
|
||||
<h3 class="content-title"><i class="bi bi-chevron-up"></i>검색결과:<span id="allCount"></span></h3>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="table-wrap">
|
||||
<div class="table-content">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover table-default" id="user">
|
||||
<colgroup>
|
||||
<col style="width:10%">
|
||||
<col style="width:*">
|
||||
<col style="width:*">
|
||||
<col style="width:*">
|
||||
</colgroup>
|
||||
<thead class="table-dark">
|
||||
<tr>
|
||||
<th scope="col">번호</th>
|
||||
<th scope="col">이름</th>
|
||||
<th scope="col">권한</th>
|
||||
<th scope="col">가입일</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row pagination-container m-4">
|
||||
<ul class="pagination justify-content-center"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<?=$this->endSection();?>
|
||||
|
||||
<?=$this->section('script');?>
|
||||
<script>
|
||||
$('input[name="sort"]').bind('click', function(){
|
||||
console.log($('input[name="sort"]').val());
|
||||
});
|
||||
|
||||
|
||||
var alertMessage = "<?php echo session('message'); ?>";
|
||||
if(alertMessage) {
|
||||
alert(alertMessage);
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
getUserList();
|
||||
function getUserList(page, limit, search, sort, startDate, endDate){
|
||||
data = {
|
||||
'page': page ? page : 1,
|
||||
'limit': limit ? limit : 10,
|
||||
'search': search ? search : '',
|
||||
'sort': sort ? sort : 'recent',
|
||||
'startDate': startDate ? startDate : '',
|
||||
'endDate': endDate ? endDate : '',
|
||||
}
|
||||
console.log(data);
|
||||
$.ajax({
|
||||
type: "get",
|
||||
url: "<?=base_url()?>/users",
|
||||
data: data,
|
||||
dataType: "json",
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
success: function(xhr){
|
||||
setTable(xhr);
|
||||
setPaging(xhr);
|
||||
setAllCount(xhr);
|
||||
setDate(xhr);
|
||||
},
|
||||
error: function(error, status, msg){
|
||||
alert("상태코드 " + status + "에러메시지" + msg );
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setPaging(xhr){
|
||||
if(xhr.pager.pageCount == 0){
|
||||
xhr.pager.pageCount = 1;
|
||||
}
|
||||
$('.pagination').twbsPagination('destroy');
|
||||
$('.pagination').twbsPagination({
|
||||
totalPages: xhr.pager.pageCount, // 총 페이지 번호 수
|
||||
visiblePages: 5, // 하단에서 한번에 보여지는 페이지 번호 수
|
||||
startPage : xhr.pager.currentPage, // 시작시 표시되는 현재 페이지
|
||||
initiateStartPageClick: false, // 플러그인이 시작시 페이지 버튼 클릭 여부 (default : true)
|
||||
first : "첫 페이지", // 페이지네이션 버튼중 처음으로 돌아가는 버튼에 쓰여 있는 텍스트
|
||||
prev : "이전 페이지", // 이전 페이지 버튼에 쓰여있는 텍스트
|
||||
next : "다음 페이지", // 다음 페이지 버튼에 쓰여있는 텍스트
|
||||
last : "마지막 페이지", // 페이지네이션 버튼중 마지막으로 가는 버튼에 쓰여있는 텍스트
|
||||
nextClass : "page-item next", // 이전 페이지 CSS class
|
||||
prevClass : "page-item prev", // 다음 페이지 CSS class
|
||||
lastClass : "page-item last", // 마지막 페이지 CSS calss
|
||||
firstClass : "page-item first", // 첫 페이지 CSS class
|
||||
pageClass : "page-item", // 페이지 버튼의 CSS class
|
||||
activeClass : "active", // 클릭된 페이지 버튼의 CSS class
|
||||
disabledClass : "disabled", // 클릭 안된 페이지 버튼의 CSS class
|
||||
anchorClass : "page-link", //버튼 안의 앵커에 대한 CSS class
|
||||
|
||||
onPageClick: function (event, page) {
|
||||
console.log(xhr.pager.limit);
|
||||
getUserList(page, xhr.pager.limit, xhr.pager.search, xhr.pager.sort, xhr.pager.startDate, xhr.pager.endDate)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setTable(xhr){
|
||||
$('#user tbody').empty();
|
||||
console.log(xhr);
|
||||
|
||||
$.each(xhr.result, function(index, item){
|
||||
index++
|
||||
item.groups = item.groups.map(function(group) {
|
||||
group = group.replace('superadmin', '최고관리자');
|
||||
group = group.replace('admin', '관리자');
|
||||
group = group.replace('developer', '개발자');
|
||||
group = group.replace('user', '사용자');
|
||||
group = group.replace('agency', '광고대행사');
|
||||
group = group.replace('advertiser', '광고주');
|
||||
group = group.replace('guest', '게스트');
|
||||
return group;
|
||||
});
|
||||
$('<tr id="userView" data-id="'+item.id+'">').append('<td>'+item.id+'</td>')
|
||||
.append('<td>'+item.username+'</td>')
|
||||
.append('<td>'+item.groups+'</td>')
|
||||
.append('<td>'+item.created_at.date.substr(0, 16)+'</td>')
|
||||
.appendTo('#user');
|
||||
});
|
||||
}
|
||||
|
||||
function setAllCount(xhr){
|
||||
console.log(xhr.pager.total);
|
||||
if(xhr.pager.total == 0){
|
||||
$total = 0;
|
||||
}else{
|
||||
$total = xhr.pager.total;
|
||||
}
|
||||
$('#allCount').text("총 "+$total+"개");
|
||||
}
|
||||
|
||||
function setDate(xhr){
|
||||
if($('#fromDate, #toDate').length){
|
||||
var currentDate = moment().format("YYYY-MM-DD");
|
||||
$('#fromDate, #toDate').daterangepicker({
|
||||
locale: {
|
||||
"format": 'YYYY-MM-DD', // 일시 노출 포맷
|
||||
"applyLabel": "확인", // 확인 버튼 텍스트
|
||||
"cancelLabel": "취소", // 취소 버튼 텍스트
|
||||
"daysOfWeek": ["일", "월", "화", "수", "목", "금", "토"],
|
||||
"monthNames": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"]
|
||||
},
|
||||
"alwaysShowCalendars": true, // 시간 노출 여부
|
||||
showDropdowns: true, // 년월 수동 설정 여부
|
||||
autoApply: true, // 확인/취소 버튼 사용여부
|
||||
maxDate: new Date(),
|
||||
autoUpdateInput: false,
|
||||
ranges: {
|
||||
'오늘': [moment(), moment()],
|
||||
'어제': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
|
||||
'지난 일주일': [moment().subtract(6, 'days'), moment()],
|
||||
'지난 한달': [moment().subtract(29, 'days'), moment()],
|
||||
'이번달': [moment().startOf('month'), moment().endOf('month')],
|
||||
}
|
||||
}, function(start, end, label) {
|
||||
// console.log("New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')");
|
||||
// Lets update the fields manually this event fires on selection of range
|
||||
startDate = start.format('YYYY-MM-DD'); // selected start
|
||||
endDate = end.format('YYYY-MM-DD'); // selected end
|
||||
|
||||
$checkinInput = $('#fromDate');
|
||||
$checkoutInput = $('#toDate');
|
||||
|
||||
// Updating Fields with selected dates
|
||||
$checkinInput.val(startDate);
|
||||
$checkoutInput.val(endDate);
|
||||
|
||||
// Setting the Selection of dates on calender on CHECKOUT FIELD (To get this it must be binded by Ids not Calss)
|
||||
var checkOutPicker = $checkoutInput.data('daterangepicker');
|
||||
checkOutPicker.setStartDate(startDate);
|
||||
checkOutPicker.setEndDate(endDate);
|
||||
|
||||
// Setting the Selection of dates on calender on CHECKIN FIELD (To get this it must be binded by Ids not Calss)
|
||||
var checkInPicker = $checkinInput.data('daterangepicker');
|
||||
checkInPicker.setStartDate($checkinInput.val(startDate));
|
||||
checkInPicker.setEndDate(endDate);
|
||||
|
||||
getUserList(1, $('#pageLimit').val(), $('#search').val(), $('#sort').val(), startDate, endDate);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//페이지 게시글 갯수
|
||||
$('body').on('change', '#pageLimit', function(){
|
||||
getUserList(
|
||||
1,
|
||||
$(this).val(),
|
||||
$('#search').val(),
|
||||
$('#sort').val(),
|
||||
$('#fromDate').val(),
|
||||
$('#toDate').val(),
|
||||
console.log(`이것은`, $('#sort').val())
|
||||
);
|
||||
})
|
||||
|
||||
//검색
|
||||
$('body').on('keyup', '#search', function(){
|
||||
getUserList(
|
||||
1,
|
||||
$('#pageLimit').val(),
|
||||
$(this).val(),
|
||||
$('#sort').val(),
|
||||
$('#fromDate').val(),
|
||||
$('#toDate').val(),
|
||||
);
|
||||
})
|
||||
|
||||
//분류
|
||||
$('body').on('change', '#sort', function(){
|
||||
getUserList(
|
||||
1,
|
||||
$('#pageLimit').val(),
|
||||
$('#search').val(),
|
||||
$(this).val(),
|
||||
$('#fromDate').val(),
|
||||
$('#toDate').val(),
|
||||
);
|
||||
})
|
||||
|
||||
$('#dateRange').on('cancel.daterangepicker', function (ev, picker) {
|
||||
$(this).val('');
|
||||
getUserList(1, $('#pageLimit').val(), $('#search').val(), $('#sort').val());
|
||||
});
|
||||
|
||||
//유저보기
|
||||
$('body').on('click', '#userView', function(){
|
||||
let id = $(this).attr('data-id');
|
||||
$.ajax({
|
||||
type: "get",
|
||||
url: "<?=base_url()?>/users/"+id,
|
||||
dataType: "json",
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
success: function(data){
|
||||
data.result.groups = data.result.groups.map(function(group) {
|
||||
group = group.replace('superadmin', '최고관리자');
|
||||
group = group.replace('admin', '관리자');
|
||||
group = group.replace('developer', '개발자');
|
||||
group = group.replace('user', '사용자');
|
||||
group = group.replace('agency', '광고대행사');
|
||||
group = group.replace('advertiser', '광고주');
|
||||
group = group.replace('guest', '게스트');
|
||||
return group;
|
||||
});
|
||||
$('#modalView .modal-body #viewName').html(data.result.username);
|
||||
$('#modalView .modal-body #viewCompany').html(data.result.companyType+" "+data.result.companyName);
|
||||
$('#modalView .modal-body #viewGroup').html(data.result.groups.join(","));
|
||||
$('#modalView .modal-body #viewDate').html(data.result.created_at.substr(0, 16));
|
||||
$('#modalView #userBelong').attr('href', '/user/belong/'+data.result.id);
|
||||
$('#modalView #userUpdateModal').attr('data-id', data.result.id);
|
||||
$('#modalView #userDelete').attr('data-id', data.result.id);
|
||||
var myModal = new bootstrap.Modal(document.getElementById('modalView'))
|
||||
myModal.show()
|
||||
},
|
||||
error: function(error, status, msg){
|
||||
alert("상태코드 " + status + "에러메시지" + msg );
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
//유저 수정
|
||||
$('body').on('click', '#userUpdateModal', function(){
|
||||
$('#modalView').modal('hide');
|
||||
|
||||
let id = $(this).attr('data-id');
|
||||
$.ajax({
|
||||
type: "get",
|
||||
url: "<?=base_url()?>/users/"+id,
|
||||
dataType: "json",
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
success: function(data){
|
||||
console.log(data.result.groups);
|
||||
$('#userGroup').val('');
|
||||
$('#modalUpdate #username').val(data.result.username);
|
||||
for (let i = 0; i < data.result.groups.length; i++) {
|
||||
$('#userGroup option[value="' + data.result.groups[i] + '"]').prop('selected', true);
|
||||
}
|
||||
for (let i = 0; i < data.result.permission.length; i++) {
|
||||
$('#userPermission option[value="' + data.result.permission[i] + '"]').prop('selected', true);
|
||||
}
|
||||
$('#modalUpdate #hidden_id').val(data.result.id);
|
||||
$('#modalUpdate #frm span').text('');
|
||||
var myModal = new bootstrap.Modal(document.getElementById('modalUpdate'))
|
||||
myModal.show()
|
||||
},
|
||||
error: function(error, status, msg){
|
||||
alert("상태코드 " + status + "에러메시지" + msg );
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
//글수정
|
||||
$('body').on('click', '#userUpdateBtn', function(){
|
||||
let id = $("#modalUpdate input:hidden[name=id]").val();
|
||||
data = {
|
||||
username: $('#modalUpdate input:text[name=username]').val(),
|
||||
groups: $('#modalUpdate #userGroup').val(),
|
||||
permission: $('#modalUpdate #userPermission').val()
|
||||
};
|
||||
console.log(data);
|
||||
$.ajax({
|
||||
type: "put",
|
||||
url: "<?=base_url()?>/users/"+id,
|
||||
data: data,
|
||||
dataType: "json",
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
headers:{'X-Requested-With':'XMLHttpRequest'},
|
||||
success: function(response){
|
||||
$('#modalUpdate').modal('hide');
|
||||
$('#modalUpdate').find('input').val('');
|
||||
$('#modalUpdate #frm span').text('');
|
||||
getUserList();
|
||||
},
|
||||
error: function(error){
|
||||
var errorText = error.responseJSON.messages;
|
||||
$.each(errorText, function(key, val){
|
||||
$("#modalUpdate #" + key + "_error").text(val);
|
||||
})
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
//글삭제
|
||||
$('body').on('click', '#userDelete', function(){
|
||||
let id = $(this).attr('data-id');
|
||||
if(confirm('정말 삭제하시겠습니까?')){
|
||||
$.ajax({
|
||||
type: "delete",
|
||||
url: "<?=base_url()?>/users/"+id,
|
||||
dataType: "json",
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
success: function(data){
|
||||
$('#modalView').modal('hide');
|
||||
getUserList();
|
||||
},
|
||||
error: function(error, status, msg){
|
||||
alert("상태코드 " + status + "에러메시지" + msg );
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
$('body').on('keyup', '#username', function(){
|
||||
$(this).siblings('span').text("");
|
||||
});
|
||||
|
||||
$('body').on('change', '#userGroup', function(){
|
||||
$(this).siblings('span').text("");
|
||||
});
|
||||
//reset 버튼
|
||||
$('body').on('click', '#DataResetBtn', function(){
|
||||
$('#sort option:first').prop('selected',true);
|
||||
$('#pageLimit option:first').prop('selected',true);
|
||||
$('#fromDate').val('');
|
||||
$('#toDate').val('');
|
||||
$('#search').val('');
|
||||
getUserList();
|
||||
})
|
||||
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
<?=$this->endSection();?>
|
||||
Reference in New Issue
Block a user