시스템관리 - 권한관리, 고객관리 - 청약고객관리/회원관리 추가

This commit is contained in:
kimre
2022-06-09 21:36:05 +09:00
parent b832e1a0be
commit 940707deaa
113 changed files with 9134 additions and 2100 deletions

View File

@@ -1,273 +0,0 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">관리자/유치채널 관리</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right" v-model="grid.params.searchType1" @keyup.enter="search">
<option value="">전체</option>
<option v-for="(option, i) in authType" v-bind:value="option.autCd" v-bind:key="i">
{{ option.autNm }}
</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="" v-model="grid.params.searchType2" @keyup.enter="search">
<option value="" selected>전체</option>
<option v-for="(option, i) in statType" v-bind:value="option.code" v-bind:key="i">
{{ option.codeNm }}
</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력" v-model="grid.params.searchText1" @keyup.enter="search"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력" v-model="grid.params.searchText2" @keyup.enter="search"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>{{ totalItems }}</span></div>
<div class="button_group">
<button type="button" class="button blue admin add" @click="adminRegPopOpen();">관리자 등록</button>
<button type="button" class="button blue channel add" @click="adminReg2PopOpen();">유치채널 등록</button>
<button type="button" class="button white delete del" @click="deleteRow();">삭제</button>
</div>
</div>
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="grid.url"
:pagePerRows="grid.pagePerRows"
:initialRequest="grid.initialRequest"
:pagination="grid.pagination"
:isCheckbox="grid.isCheckbox"
:columns="grid.columns"
:noDataStr="grid.noDataStr"
:addCls="grid.addCls"
:header="grid.headder"
></custom-grid>
</div>
<admin-reg-pop ref="adminRegModal"> </admin-reg-pop>
<!-- <admin-reg2-pop ref="adminReg2Modal"> </admin-reg2-pop> -->
<admin-detail-pop ref="adminDetailModal"> </admin-detail-pop>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
import AdminRegPop from '../components/AdminRegPop';
//import AdminReg2Pop from '../components/AdminReg2Pop';
import AdminDetailPop from '../components/AdminDetailPop';
import api from '@/service/api.js';
import sysMgtApi from "../service/sysMgtApi.js";
class CustomATagRenderer {
constructor(props) {
this.props = props;
const el = document.createElement('a');
el.href = 'javascript:void(0);';
el.className = 'btn_text';
el.innerText= String(props.colValue)
this.el = el;
}
getElement() {
return this.el;
}
addEvent(selEl) {
selEl.addEventListener("click", () => {
const { callback } = this.props["cgrido" + this.props.colName].options;
callback(this.props);
});
}
}
export default {
name: 'adminList',
data() {
return {
row: {},
authType: [],
statType: [],
cate2Code: "",
totalItems: 0,
// 테이블 리스트 데이터
perPageCnt: 20,
grid: {
url: '/api/v1/bo/sysMgt/adminList',
pagePerRows: 20,
pagination: true,
isCheckbox: true, // true:첫번째 컬럼 앞에 체크박스 생성 / false:체크박스 제거
initialRequest: false,
addCls: 'box_OFvis',
columns: [
{ name: 'no', header: 'No', align: 'center', width: 60},
{ name: 'auth', header: '권한', align: 'center', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130, renderer: {
type: CustomATagRenderer
, options: {
callback: this.detailPop,
}
}
},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130, cls: 'td_line'},
{ name: 'regDt', header: '등록일', align: 'center', width: 130}
],
noDataStr: '검색 결과가 없습니다.',
params: {
searchType1: '',
searchType2: '',
searchText1: '',
searchText2: ''
},
excelHeader: []
}
};
},
components: {
customGrid: customGrid,
// SystemPopup,
AdminRegPop,
//AdminReg2Pop,
AdminDetailPop
},
created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
this.setCodeData();
//let cont = document.querySelector(".wrap");
//cont.classList.add("main_wrap");
},
destroyed() {
},
mounted() {
let page = 1;
// 페이지 정보 및 검색 조건
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
console.log('getCondition : '+getCondition);
// store에 저장된 페이지 정보 및 검색 조건을 불러오기
let isKeep = false;
if (getCondition) {
this.grid.pagePerRows = getCondition.perPage;
this.grid.params = getCondition.params;
page = getCondition.page;
isKeep = true;
}
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log('this.perPageCnt'+this.perPageCnt);
//console.log(this.grid.params);
this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData();
},
detailPop(props) {
// this.getMainSlot().popupView(4);
// this.setDtlPpPrm(props);
this.$refs.adminDetailModal.adminDetailModalOpen(props);
},
ModalOpen: function(target){
//this.$refs.systemModal.ModalOpen(target);
},
adminRegPopOpen: function(){
this.$refs.adminRegModal.ModalOpen(1);
},
adminReg2PopOpen: function(){
this.$refs.adminRegModal.ModalOpen(2);
//this.$refs.adminReg2Modal.adminReg2ModalOpen();//
},
doValidate(){ //로우데이터 삭제하도록 수정
console.log("totalItems >> " + this.totalItems);
if(this.totalItems == 0){
alert('검색 결과가 없습니다.');
return false;
}
var chkList = this.$refs.table.checkedElementDatas();
if(chkList.length == 0){
alert('체크박스에 체크를 해주세요.');
return false;
}
// for(var i = 0; i < chkList.length; i++){
// alert(chkList[i].adminId);
// }
const param = chkList.map((row)=>({adminId:row.adminId}));
this.row.list = param;
console.log(this.row);
return true;
},
sendStoreData: function() {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: this.grid.params
});
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
//console.log("getCondition : "+ getCondition.perPage);
},
setCodeData() {
// 상태 옵션 셋팅.
api.commCode({'grpCd' : 'ADM_STTUS_CD'}).then(response => {
this.statType = response.data.data.list;
});
api.commAuth().then(response => {
this.authType = response.data.data.list;
});
},
async deleteRow(){
if(this.doValidate() && window.confirm('삭제 하시겠습니까?')){
try {
let response = await sysMgtApi.deleteAdmin(this.row);
const result = response.data;
if (result != null && result.retCode == "0000") {
alert('삭제 하였습니다.');
// grid.reloadData();
this.$refs.table.reloadData();
return;
}
alert("실패 하였습니다.");
} catch(err) {
alert("실패 하였습니다.");
}
}
},
},
beforeRouteLeave(to, from, next) {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP._currentPage);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: this.grid.params
});
// 라우트 하기전 실행
next();
}
};
</script>

View File

@@ -1,107 +0,0 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">권한 관리</h3>
<p class="breadcrumb">시스템관리 &gt; 권한 관리</p>
</div>
<div class="info">
<div class="count"> <span>4</span></div>
<div class="button_group">
<button type="button" class="button blue add" onclick="location.href='system_right_add.html';">권한 추가</button>
</div>
</div>
<div class="table">
<table>
<colgroup>
<col width="10%"/>
<col width="20%"/>
<col width="20%"/>
<col width="15%"/>
<col width="20%"/>
<col width="15%"/>
</colgroup>
<thead>
<tr>
<th>NO</th>
<th>코드</th>
<th>권한명</th>
<th>상태</th>
<th>등록일</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>4</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey" onclick="location.href='system_right_modify.html';">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
<tr>
<td>3</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
<tr>
<td>2</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
<tr>
<td>1</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'authList',
data() {
return {
};
},
components: {
},
destroyed() {
},
mounted() {
},
methods: {
}
};
</script>

View File

@@ -57,14 +57,10 @@
<tr>
<th class="center">상태</th>
<td>
<input type="radio" name="state" value="01" id="popup_radio1"
v-model="stat"
:checked="stat == '1'">
<label for="popup_radio1">사용</label>
<input type="radio" name="state" value="02" id="popup_radio2"
v-model="stat"
:checked="stat == '02'">
<label for="popup_radio2">정지</label>
<input type="radio" name="state" value="01" id="detail_popup_radio1" v-model="stat">
<label for="detail_popup_radio1">사용</label>
<input type="radio" name="state" value="02" id="detail_popup_radio2" v-model="stat">
<label for="detail_popup_radio2">정지</label>
</td>
</tr>
</tbody>
@@ -105,7 +101,7 @@ export default {
mdn:'',
email:'',
auth:'',
stat: '',
stat: "",
userNm:"",
userPwd1:"",
userPwd2:"",
@@ -120,6 +116,7 @@ export default {
created(){
//this.formReset();
this.setAuthData();
this.formReset();
},
methods :{
doPwdValidate(){
@@ -194,7 +191,7 @@ export default {
},
// 모달 끄기
adminDetailModalClose(){
this.formReset();
//this.formReset();
var dimmed = document.getElementsByClassName('modal21');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
@@ -225,7 +222,9 @@ export default {
});
},
formReset(){
this.$refs.adminDetailForm.reset();
var type= this.insertType;
Object.assign(this.$data, this.$options.data());
this.insertType = type;
},
}
}

View File

@@ -16,7 +16,7 @@
<th>마당 ID</th>
<td class="input_search">
<input type="text" placeholder="아이디 입력" v-model.trim="madangId" ref="madangId">
<button type="button" class="button grey" >조회</button>
<button type="button" class="button grey" @click="searchMadangId()">조회</button>
</td>
</tr>
<tr>
@@ -74,6 +74,9 @@
<button class="btn-pcolor" @click="doInsert">저장</button>
</div>
</div>
<search-id-popup ref="searchIdPopModal"> </search-id-popup>
</div>
</div>
</template>
@@ -82,7 +85,9 @@
import api from '@/service/api';
import sysMgtApi from "../service/sysMgtApi.js";
import { utils_mixin, chkPattern2 } from '../service/mixins';
import SearchIdPopup from '../components/SearchIdPopup.vue';
import lodash from "lodash";
// searchIdPopModal
export default {
name: "adminRegPop",
@@ -107,7 +112,12 @@ export default {
userPwd1:"",
userPwd2:"",
code:"",
idCheck: false,
props: {},
}
},
components: {
SearchIdPopup,
},
model: {
prop: 'sendData',
@@ -115,8 +125,9 @@ export default {
},
props: ['sendData'],
created(){
this.formReset();
//this.formReset();
this.setAuthData();
this.formReset();
},
methods :{
doPwdValidate(){
@@ -153,6 +164,11 @@ export default {
return true;
},
doValidate(){
if(!this.idCheck){
alert("유효한 마당ID가 아닙니다.");
this.$refs.madangId.focus();
return false;
}
if(!this.doPwdValidate()){
return false;
}
@@ -205,8 +221,81 @@ export default {
this.row.stat=this.stat;
return true;
},
// 마당ID 조회
async searchMadangId(){
if(!this.madangId){
alert('마당ID를 입력해주세요');
this.$refs.madangId.focus();
return false;
}
var params = {
"madangId": this.madangId
}
console.log(this.madangId);
try {
const response = await sysMgtApi.selectSearchMadangId(params);
const result = response.data;
console.log(result);
if (result != null && result.retCode == "0000") {
this.madangId = result.data.madangId;
this.userNm = result.data.name;
this.email = result.data.email;
this.mdn = result.data.mdn;
// 마당ID조회 성공 팝업노출
this.searchIdPop();
//console.log(this.userNm);
this.idCheck = true;
this.$refs._pwd1.focus();
}else if(result.retCode == '1004'){
//alert('마당ID 정보가 없습니다.');
this.searchIdFailPop();
this.idCheck = false;
this.$refs.madangId.focus();
return false;
}else {
//alert('마당ID 조회에 실패하였습니다.');
this.searchIdFailPop();
this.idCheck = false;
this.$refs.madangId.focus();
return false;
}
} catch(err) {
//alert("실패 하였습니다.");
this.searchIdFailPop();
this.idCheck = false;
this.$refs.madangId.focus();
return false;
}
},
searchIdPop(){
//alert('마당ID 조회 성공 팝업이동 ->');
var params = {
"madangId": this.madangId,
"userNm": this.userNm,
"email": this.email,
"mdn": this.mdn
}
this.$refs.searchIdPopModal.searchIdPop(params);
},
searchIdFailPop(){
//alert('마당ID 조회 실패 팝업이동 ->');
this.$refs.searchIdPopModal.searchIdFailPop();
},
resetRegPop(){
this.formReset();
this.$refs.madangId.focus();
},
// 모달 띄우기
ModalOpen(insertType){
this.formReset();
this.insertType=insertType;
var dimmed = document.getElementsByClassName('dimmed');
dimmed[0].style.display = 'block';
@@ -217,7 +306,6 @@ export default {
},
// 모달 끄기
ModalClose(){
this.formReset();
var dimmed = document.getElementsByClassName('dimmed');
dimmed[0].style.display = 'none';
var wrap = document.getElementsByClassName('popup-wrap');
@@ -252,7 +340,9 @@ export default {
});
},
formReset(){
this.$refs.adminRegForm.reset();
var type= this.insertType;
Object.assign(this.$data, this.$options.data());
this.insertType = type;
},
}
}

View File

@@ -0,0 +1,164 @@
<template>
<div>
<!-- s: 팝업 -->
<div class="dimmed modal17" @click="searchIdFailModalClose();"></div>
<div class="popup-wrap modal17">
<!-- 시스템관리 팝업 -->
<!-- ID 조회 -->
<div class="popup modal17">
<div class="pop-head">
<h3 class="pop-tit">ID 조회</h3>
</div>
<div class="pop-cont">
<p>입력하신 마당ID를 조회할 없습니다</p>
</div>
<div class="pop-btn1">
<button class="btn-pcolor" @click="searchIdFailModalClose();">확인</button>
</div>
</div>
</div>
<div class="dimmed modal18" @click="searchIdModalCancelClose();"></div>
<div class="popup-wrap modal18">
<!-- 관리자 ID 조회 -->
<div class="popup modal18">
<div class="pop-head">
<h3 class="pop-tit">관리자 ID 조회</h3>
</div>
<div class="pop-cont">
<p>선택하신 정보가 아래와 같습니다.</p>
<p>관리자 정보를 입력하시겠습니까?</p>
</div>
<ul class="pop-cont-detail">
<li>마당ID : {{madangId}}</li>
<li>이름 : {{name}}</li>
<li>휴대폰번호 : {{mdn}}</li>
<li>이메일 : {{email}}</li>
</ul>
<div class="pop-btn2">
<!-- this.ModalOpen('modal20'); -->
<button class="btn-default" @click="searchIdModalCancelClose();">취소</button>
<button class="btn-pcolor" @click="searchIdModalOkClose();">확인</button>
</div>
</div>
<!-- 시스템관리 팝업 -->
</div>
<!-- e: 팝업 -->
</div>
</template>
<script>
//import api from '@/service/api';
import sysMgtApi from '../service/sysMgtApi';
export default {
data(){
return{
authType: [],
madangId:'',
adminPw:'',
name:'',
mdn:'',
email:'',
auth:'',
stat: ''
}
},
methods :{
// 모달 띄우기(성공모달)
searchIdModalOpen(target){
console.log("SearchIdModalOpen");
var dimmed = document.getElementsByClassName('dimmed modal18');
var wrap = document.getElementsByClassName('popup-wrap modal18');
var obj = document.getElementsByClassName(target);
dimmed[0].style.display = 'block';
wrap[0].style.display = 'block';
obj[0].style.display = 'block';
},
// 성공 모달 끄기(ok)
searchIdModalOkClose(){
var dimmed = document.getElementsByClassName('modal18');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}
},
// 성공 모달 끄기(cancel)
searchIdModalCancelClose(){
var dimmed = document.getElementsByClassName('modal18');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}
this.$parent.resetRegPop();
},
// 모달 띄우기(실패모달)
searchIdFailModalOpen(target){
console.log("SearchIdFailModalOpen");
var dimmed = document.getElementsByClassName('dimmed modal17');
var wrap = document.getElementsByClassName('popup-wrap modal17');
var obj = document.getElementsByClassName(target);
dimmed[0].style.display = 'block';
wrap[0].style.display = 'block';
obj[0].style.display = 'block';
},
// 실패 모달 끄기
searchIdFailModalClose(){
var dimmed = document.getElementsByClassName('modal17');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}
this.$parent.resetRegPop();
},
searchIdPop(params){
var userName = params.userNm;
this.madangId = params.madangId ;
this.name = params.userNm;
this.email = params.email;
this.mdn = params.mdn;
//alert( userName + ': 조회 성공');
var dimmed = document.getElementsByClassName('modal18');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'block';
}
//this.searchIdModalModalOpen('modal18');
},
searchIdFailPop(){
//alert( '조회 실패');
var dimmed = document.getElementsByClassName('modal17');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'block';
}
},
//메뉴바
testClick(){
const menuList = document.querySelectorAll('.main_menu .is-sub');
for(const menu of menuList){
menu.addEventListener('click', (e)=> {
if(e.target.classList.contains('menu_target') || e.target.classList.contains('menu_btn')){
const menuListCheck = e.target.parentNode;
if(menuListCheck.classList.contains('is-current')){
menuListCheck.classList.remove('is-current');
} else {
for(const other of menuList){
other.classList.remove('is-current');
}
menuListCheck.classList.add('is-current');
}
}
})
}
}
}
}
</script>
<style>
.popup-btn-wrap {width: 500px; margin: auto; padding: 100px 0;}
.popup-btn-wrap button {width: 100%; margin-bottom: 10px; height: 50px; border-radius: 5px; box-shadow: none; border: 1px solid #000; }
.popup-btn-wrap button:hover {background: #000; color: #fff;}
</style>

View File

@@ -1,5 +1,7 @@
import AustList from '../views/AuthList'
import AdminList from '../views/AdminList'
import AuthAdd from '../views/AuthAdd'
import AuthModify from '../views/AuthModify'
export default [
{
@@ -13,6 +15,19 @@ export default [
component: AdminList,
name: 'adminList',
meta: { public: true }
},
{
path: '/sysMgt/authAdd',
component: AuthAdd,
name: 'authAdd',
meta: { public: true }
},
{
path: '/sysMgt/authModify',
component: AuthModify,
name: 'authModify',
props: true,
meta: { public: true }
}
]

View File

@@ -1,5 +1,23 @@
import httpClient from '@/common/http-client';
// 공통 코드.
const getCommCode = (params) => {
return httpClient.post('/api/v1/bo/comm/getCode', params, { withCredentials: false });
}
// 관리자정보 상세조회
const selectAdminDetail = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/adminDetail', params, { withCredentials: false});
}
//마당아이디 조회
const selectSearchMadangId = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/madangId', params, {withCredentials: false});
}
//권한 상세 조회
const selectAuthDetail = (params) => {
return httpClient.params('/api/v1/bo/sysMgt/authDetail', params, {withCredentials: false});
}
// HUBEZ_BO_API_4003 - 관리자 등록.
const insertAdmin = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/insertAdmin', params, { withCredentials: false });
@@ -20,9 +38,44 @@ const adminDetail = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/adminDetail', params, { withCredentials: false });
}
// HUBEZ_BO_API_4007 - 권한 목록 조회.
const authList = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/authList', params, { withCredentials: false });
}
// HUBEZ_BO_API_4008 - 권한 삭제.
const deleteAuth = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/deleteAuth', params, { withCredentials: false });
}
// HUBEZ_BO_API_4009 - 권한 상세 조회.
const authDetail = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/authDetail', params, { withCredentials: false });
}
// HUBEZ_BO_API_4010 - 권한 추가.
const insertAuth = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/insertAuth', params, { withCredentials: false });
}
// HUBEZ_BO_API_4011 - 권한 수정.
const updateAuth = (params) => {
return httpClient.post('/api/v1/bo/sysMgt/updateAuth', params, { withCredentials: false });
}
export default {
insertAdmin,
updateAdmin,
deleteAdmin,
adminDetail
adminDetail,
selectAdminDetail,
getCommCode,
selectSearchMadangId,
selectAuthDetail,
authList,
deleteAuth,
authDetail,
insertAuth,
updateAuth,
}

View File

@@ -119,14 +119,14 @@ export default {
columns: [
{ name: 'no', header: 'No', align: 'center', width: 60},
{ name: 'auth', header: '권한', align: 'center', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130, renderer: {
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130, renderer: {
type: CustomATagRenderer
, options: {
callback: this.detailPop,
}
}
},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130, cls: 'td_line'},
{ name: 'regDt', header: '등록일', align: 'center', width: 130}
],
@@ -146,7 +146,7 @@ export default {
// SystemPopup,
AdminRegPop,
//AdminReg2Pop,
AdminDetailPop
AdminDetailPop,
},
created(){
this.$store.commit("login/isLogin", true);

View File

@@ -0,0 +1,304 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">권한 관리</h3>
<p class="breadcrumb">시스템관리 &gt; 권한 관리</p>
</div>
<div class="info">
<div class="title">권한 추가</div>
</div>
<div class="table table_form">
<form autocomplete="off">
<table>
<tbody>
<tr class="tr_input w30">
<th>권한명</th>
<td colspan="5"><input type="text" v-model.trim="authNm" ref="_authNm"></td>
</tr>
<tr class="tr_input w75">
<th>권한 코드</th>
<td colspan="2"><input type="text" v-model.trim="authCd" ref="_authCd"></td>
<th class="center">상태</th>
<td class="td_radio" colspan="2">
<input type="radio" name="state" value="01" id="right_radio1" v-model="stat" checked>
<label for="right_radio1">사용</label>
<input type="radio" name="state" value="02" id="right_radio2" v-model="stat">
<label for="right_radio2">정지</label>
</td>
</tr>
<tr class="tr_input w100">
<th>권한 설명</th>
<td colspan="5"><input type="text" v-model="authDesc"></td>
</tr>
<tr class="tr_checkbox">
<td class="check" rowspan="2">
<p>메뉴 권한 체크</p>
<input type="checkbox" id="right_check0" v-model="checkedAuthMenuAll">
<div class="label_group">
<label for="right_check0"></label>
<label for="right_check0">전체 체크</label>
</div>
</td>
<td class="check">
<p>고객관리</p>
<input type="checkbox" id="right_check1" value="2001" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check1"></label>
<label for="right_check1">청약고객관리</label>
</div>
</td>
<td class="check">
<p>유치현황관리</p>
<input type="checkbox" id="right_check2" value="2002" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check2"></label>
<label for="right_check2">유치채널 현황</label>
</div>
<input type="checkbox" id="right_check3" value="2003" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check3"></label>
<label for="right_check3">유치관리자 현황</label>
</div>
</td>
<td class="check">
<p>서비스관리</p>
<input type="checkbox" id="right_check4" value="2004" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check4"></label>
<label for="right_check4">080수신거부 인증코드 조회</label>
</div>
</td>
<td class="check">
<p>정산</p>
<input type="checkbox" id="right_check5" value="2005" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check5"></label>
<label for="right_check5">정산이력</label>
</div>
</td>
<td class="check">
<p>채널관리</p>
<input type="checkbox" id="right_check6" value="2006" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check6"></label>
<label for="right_check6">알림톡 템플릿 관리</label>
</div>
</td>
</tr>
<tr>
<td class="check">
<p>발신번호관리</p>
<input type="checkbox" id="right_check7" value="2007" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check7"></label>
<label for="right_check7">발신프로필 관리</label>
</div>
<input type="checkbox" id="right_check8" value="2008" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check8"></label>
<label for="right_check8">문자 발신번호 관리</label>
</div>
<input type="checkbox" id="right_check9" value="2009" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check9"></label>
<label for="right_check9">발신번호 승인</label>
</div>
</td>
<td class="check">
<p>모니터링</p>
<input type="checkbox" id="right_check10" value="2010" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check10"></label>
<label for="right_check10">발송내역</label>
</div>
<input type="checkbox" id="right_check11" value="2011" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check11"></label>
<label for="right_check11">실시간발송현황</label>
</div>
</td>
<td class="check">
<p>리스크관리</p>
<input type="checkbox" id="right_check12" value="2012" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check12"></label>
<label for="right_check12">발신번호 차단</label>
</div>
<input type="checkbox" id="right_check13" value="2013" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check13"></label>
<label for="right_check13">080수신번호 차단</label>
</div>
<input type="checkbox" id="right_check14" value="2014" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check14"></label>
<label for="right_check14">메시지 차단</label>
</div>
<input type="checkbox" id="right_check15" value="2015" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check15"></label>
<label for="right_check15">차단 내역</label>
</div>
</td>
<td class="check">
<p>발송통계</p>
<input type="checkbox" id="right_check16" value="2016" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check16"></label>
<label for="right_check16">날짜별 통계</label>
</div>
<input type="checkbox" id="right_check17" value="2017" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check17"></label>
<label for="right_check17">사업자별 통계</label>
</div>
</td>
<td class="check">
<p>시스템 관리</p>
<input type="checkbox" id="right_check18" value="2018" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check18"></label>
<label for="right_check18">관리자/유치채널 관리</label>
</div>
<input type="checkbox" id="right_check19" value="2019" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check19"></label>
<label for="right_check19">권한 관리</label>
</div>
</td>
</tr>
</tbody>
</table>
</form>
</div>
<div class="pop-btn2">
<button class="btn-default" type="button" @click="authAddCancel()">취소</button>
<button class="btn-pcolor" type="button" @click="authAddSave()">저장</button>
</div>
</div>
</div>
</template>
<script>
import sysMgtApi from "../service/sysMgtApi.js";
import { utils_mixin, chkPattern2 } from '../service/mixins';
export default {
name: 'authAdd',
mixins: [utils_mixin, chkPattern2],
data() {
return {
row: {},
authType: [],
authNm: "",
authCd: "",
authDesc: "",
stat: "01", // 등록화면 상태 Default 값 지정(사용:01)
defaultAuthMenu:["2001","2002","2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019"],
checkedAuthMenu:[],
};
},
components: {
},
created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
//this.setCodeData();
},
destroyed() {
},
mounted() {
},
methods: {
doValidate(){
// 필수 등록정보 체크
if(this.isNull(this.authNm)){
alert("권한명을 입력해 주세요");
this.$refs._authNm.focus();
return false;
}
if(this.isNull(this.authCd)){
alert('권한 코드를 입력해주세요.');
this.$refs._authCd.focus();
return false;
}
if(this.isNull(this.stat)){
alert('상태를 체크해주세요.');
return false;
}
if(this.checkedAuthMenu.length == 0){
alert('메뉴 권한 체크를 해주세요.');
return false;
}
return true;
},
authAddCancel() {
// 권한리스트 페이지로 이동
this.$router.push({ name: 'authList'});
},
async authAddSave(){
if(this.doValidate() && window.confirm('저장 하시겠습니까?')){
var reqAuthMenuArr = this.checkedAuthMenu;
var listArr = [];
var dataMap = {};
for(var i = 0; i< reqAuthMenuArr.length; i++){
dataMap = {};
dataMap.menuNo = reqAuthMenuArr[i];
listArr.push(dataMap);
}
this.row.authCd = this.authCd;
this.row.authNm = this.authNm;
this.row.authDesc = this.authDesc;
this.row.stat = this.stat;
this.row.list = listArr;
console.log(this.row);
try {
let response = await sysMgtApi.insertAuth(this.row);
const result = response.data;
if (result != null && result.retCode == "0000") {
alert('저장 하였습니다.');
// 권한리스트 페이지 이동
this.$router.push({ name: 'authList'});
} else if(result.retCode == "4017"){
alert("권한코드가 이미 존재합니다.");
this.$refs._authCd.focus();
} else {
alert("실패 하였습니다.");
}
} catch(err) {
alert("실패 하였습니다.");
}
}
},
},
computed: {
// 체크박스 전체선택 기능
checkedAuthMenuAll : {
get: function () {
return this.defaultAuthMenu.length === this.checkedAuthMenu.length;
},
set: function (e) {
this.checkedAuthMenu = e ? this.defaultAuthMenu : [];
}
}
}
};
</script>

View File

@@ -6,9 +6,9 @@
<p class="breadcrumb">시스템관리 &gt; 권한 관리</p>
</div>
<div class="info">
<div class="count"> <span>4</span></div>
<div class="count"> <span>{{totalCnt}}</span></div>
<div class="button_group">
<button type="button" class="button blue add" onclick="location.href='system_right_add.html';">권한 추가</button>
<button type="button" class="button blue add" @click="insertAuth()">권한 추가</button>
</div>
</div>
<div class="table">
@@ -32,6 +32,18 @@
</tr>
</thead>
<tbody>
<tr v-for="(option, i) in list" v-bind:key="i">
<td>{{ option.no }}</td>
<td>{{ option.authCd }}</td>
<td>{{ option.authNm }}</td>
<td>{{ option.authStat }}</td>
<td>{{ option.regDt }}</td>
<td class="two_btn_group">
<button type="button" class="button grey" @click="updateAuth(option.authCd)">수정</button>
<button type="button" class="button white delete" @click="deleteAuth(option.authCd)">삭제</button>
</td>
</tr>
<!--
<tr>
<td>4</td>
<td>Admin_01</td>
@@ -43,39 +55,7 @@
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
<tr>
<td>3</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
<tr>
<td>2</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
<tr>
<td>1</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
-->
</tbody>
</table>
</div>
@@ -84,15 +64,23 @@
</template>
<script>
import sysMgtApi from "../service/sysMgtApi.js";
export default {
name: 'authList',
data() {
return {
row: {},
list:[],
totalCnt: '',
};
},
components: {
components: {
},
created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
this.getAuthList();
},
destroyed() {
@@ -101,7 +89,50 @@ export default {
},
methods: {
async getAuthList(){
console.log('getAuthList Start');
//this.row.serviceId = serviceId;
try {
const response = await sysMgtApi.authList(this.row);
const result = response.data;
console.log(result);
if (result != null && result.retCode == "0000") {
this.list = result.data.list;
this.totalCnt = result.data.list.length;
} else {
alert("조회정보가 없습니다.");
}
} catch(err) {
alert("실패 하였습니다.");
}
},
insertAuth(){
//console.log("권한추가 페이지 이동");
this.$router.push({ name: 'authAdd'});
},
updateAuth(target){
//console.log("수정페이지로 이동:"+target);
this.$router.push({ name: 'authModify', params: { targetAuthCd: target }});
},
async deleteAuth(target){
//console.log("삭제처리:"+target);
this.row.authCd = target;
if(window.confirm('삭제 하시겠습니까?')){
try {
let response = await sysMgtApi.deleteAuth(this.row);
const result = response.data;
if (result != null && result.retCode == "0000") {
alert('삭제 하였습니다.');
this.getAuthList();
return;
} else {
alert("실패 하였습니다.");
}
} catch(err) {
alert("실패 하였습니다.");
}
}
},
}
};
</script>

View File

@@ -0,0 +1,338 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">권한 관리</h3>
<p class="breadcrumb">시스템관리 &gt; 권한 관리</p>
</div>
<div class="info">
<div class="title">권한 수정</div>
</div>
<div class="table table_form">
<form autocomplete="off">
<table>
<tbody>
<tr class="tr_input w30">
<th>권한명</th>
<td colspan="5"><input type="text" v-model.trim="authNm" ref="_authNm"></td>
</tr>
<tr class="tr_input w75">
<th>권한 코드</th>
<td colspan="2"><input type="text" v-model.trim="authCd" ref="_authCd" disabled></td>
<th class="center">상태</th>
<td class="td_radio" colspan="2">
<input type="radio" name="state" value="01" id="right_radio1" v-model="stat" checked>
<label for="right_radio1">사용</label>
<input type="radio" name="state" value="02" id="right_radio2" v-model="stat">
<label for="right_radio2">정지</label>
</td>
</tr>
<tr class="tr_input w100">
<th>권한 설명</th>
<td colspan="5"><input type="text" v-model="authDesc"></td>
</tr>
<tr class="tr_checkbox">
<td class="check" rowspan="2">
<p>메뉴 권한 체크</p>
<input type="checkbox" id="right_check0" v-model="checkedAuthMenuAll">
<div class="label_group">
<label for="right_check0"></label>
<label for="right_check0">전체 체크</label>
</div>
</td>
<td class="check">
<p>고객관리</p>
<input type="checkbox" id="right_check1" value="2001" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check1"></label>
<label for="right_check1">청약고객관리</label>
</div>
</td>
<td class="check">
<p>유치현황관리</p>
<input type="checkbox" id="right_check2" value="2002" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check2"></label>
<label for="right_check2">유치채널 현황</label>
</div>
<input type="checkbox" id="right_check3" value="2003" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check3"></label>
<label for="right_check3">유치관리자 현황</label>
</div>
</td>
<td class="check">
<p>서비스관리</p>
<input type="checkbox" id="right_check4" value="2004" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check4"></label>
<label for="right_check4">080수신거부 인증코드 조회</label>
</div>
</td>
<td class="check">
<p>정산</p>
<input type="checkbox" id="right_check5" value="2005" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check5"></label>
<label for="right_check5">정산이력</label>
</div>
</td>
<td class="check">
<p>채널관리</p>
<input type="checkbox" id="right_check6" value="2006" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check6"></label>
<label for="right_check6">알림톡 템플릿 관리</label>
</div>
</td>
</tr>
<tr>
<td class="check">
<p>발신번호관리</p>
<input type="checkbox" id="right_check7" value="2007" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check7"></label>
<label for="right_check7">발신프로필 관리</label>
</div>
<input type="checkbox" id="right_check8" value="2008" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check8"></label>
<label for="right_check8">문자 발신번호 관리</label>
</div>
<input type="checkbox" id="right_check9" value="2009" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check9"></label>
<label for="right_check9">발신번호 승인</label>
</div>
</td>
<td class="check">
<p>모니터링</p>
<input type="checkbox" id="right_check10" value="2010" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check10"></label>
<label for="right_check10">발송내역</label>
</div>
<input type="checkbox" id="right_check11" value="2011" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check11"></label>
<label for="right_check11">실시간발송현황</label>
</div>
</td>
<td class="check">
<p>리스크관리</p>
<input type="checkbox" id="right_check12" value="2012" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check12"></label>
<label for="right_check12">발신번호 차단</label>
</div>
<input type="checkbox" id="right_check13" value="2013" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check13"></label>
<label for="right_check13">080수신번호 차단</label>
</div>
<input type="checkbox" id="right_check14" value="2014" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check14"></label>
<label for="right_check14">메시지 차단</label>
</div>
<input type="checkbox" id="right_check15" value="2015" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check15"></label>
<label for="right_check15">차단 내역</label>
</div>
</td>
<td class="check">
<p>발송통계</p>
<input type="checkbox" id="right_check16" value="2016" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check16"></label>
<label for="right_check16">날짜별 통계</label>
</div>
<input type="checkbox" id="right_check17" value="2017" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check17"></label>
<label for="right_check17">사업자별 통계</label>
</div>
</td>
<td class="check">
<p>시스템 관리</p>
<input type="checkbox" id="right_check18" value="2018" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check18"></label>
<label for="right_check18">관리자/유치채널 관리</label>
</div>
<input type="checkbox" id="right_check19" value="2019" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check19"></label>
<label for="right_check19">권한 관리</label>
</div>
</td>
</tr>
</tbody>
</table>
</form>
</div>
<div class="pop-btn2">
<button class="btn-default" type="button" @click="authModifyCancel()">취소</button>
<button class="btn-pcolor" type="button" @click="authModifySave()">저장</button>
</div>
</div>
</div>
</template>
<script>
import sysMgtApi from "../service/sysMgtApi.js";
import { utils_mixin, chkPattern2 } from '../service/mixins';
export default {
name: 'authModify',
mixins: [utils_mixin, chkPattern2],
data() {
return {
row: {},
authType: [],
authNm: "",
authCd: "",
authDesc: "",
stat: "",
defaultAuthMenu:["2001","2002","2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019"],
checkedAuthMenu:[],
};
},
props: {
targetAuthCd : {
type: String,
default: "",
}
},
components: {
},
created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
//this.setCodeData();
this.authDetail();
},
destroyed() {
},
mounted() {
},
methods: {
doValidate(){
// 필수 등록정보 체크
if(this.isNull(this.authNm)){
alert("권한명을 입력해 주세요");
this.$refs._authNm.focus();
return false;
}
if(this.isNull(this.authCd)){
alert('권한 코드를 입력해주세요.');
this.$refs._authCd.focus();
return false;
}
if(this.isNull(this.stat)){
alert('상태를 체크해주세요.');
return false;
}
if(this.checkedAuthMenu.length == 0){
alert('메뉴 권한 체크를 해주세요.');
return false;
}
return true;
},
authModifyCancel() {
// 권한리스트 페이지로 이동
this.$router.push({ name: 'authList'});
},
async authDetail(){
//console.log(this.$route.params.targetAuthCd);
this.row.authCd = this.$route.params.targetAuthCd;
try {
const response = await sysMgtApi.authDetail(this.row);
const result = response.data;
console.log(result);
if (result != null && result.retCode == "0000") {
this.authCd = result.data.authCd;
this.authNm = result.data.authNm;
this.authDesc = result.data.authDesc;
this.stat = result.data.authStat;
// 메뉴리스트 처리
var dataList = result.data.list;
var rsArr = [];
for(var i=0; i< dataList.length; i++){
if(dataList[i].upperMenuNo != null || dataList[i].upperMenuNo != ""){
this.checkedAuthMenu.push(dataList[i].menuNo);
}
}
} else {
alert("실패 하였습니다.");
}
} catch(err) {
alert("처리 실패 하였습니다.");
}
},
async authModifySave(){
if(this.doValidate() && window.confirm('저장 하시겠습니까?')){
var reqAuthMenuArr = this.checkedAuthMenu;
var listArr = [];
var dataMap = {};
for(var i = 0; i< reqAuthMenuArr.length; i++){
dataMap = {};
dataMap.menuNo = reqAuthMenuArr[i];
listArr.push(dataMap);
}
this.row.authCd = this.authCd;
this.row.authNm = this.authNm;
this.row.authDesc = this.authDesc;
this.row.stat = this.stat;
this.row.list = listArr;
console.log(this.row);
try {
let response = await sysMgtApi.updateAuth(this.row);
const result = response.data;
if (result != null && result.retCode == "0000") {
alert('저장 하였습니다.');
// 권한리스트 페이지 이동
this.$router.push({ name: 'authList'});
} else {
alert("실패 하였습니다.");
}
} catch(err) {
alert("실패 하였습니다.");
}
}
},
},
computed: {
// 체크박스 전체선택 기능
checkedAuthMenuAll : {
get: function () {
return this.defaultAuthMenu.length === this.checkedAuthMenu.length;
},
set: function (e) {
this.checkedAuthMenu = e ? this.defaultAuthMenu : [];
}
}
}
};
</script>