--- src/main/java/itn/let/mjo/addr/web/AddrController.java
+++ src/main/java/itn/let/mjo/addr/web/AddrController.java
... | ... | @@ -402,6 +402,14 @@ |
| 402 | 402 |
return "/web/addr/AddrListAjax"; |
| 403 | 403 |
} |
| 404 | 404 |
|
| 405 |
+ |
|
| 406 |
+ |
|
| 407 |
+ @RequestMapping("/web/mjon/addr/addrListforExcelAjax.do")
|
|
| 408 |
+ public String AddrListforExcel(HttpServletRequest request, ModelMap model, |
|
| 409 |
+ @ModelAttribute("searchVO") AddrVO addrVO) throws Exception {
|
|
| 410 |
+ |
|
| 411 |
+ return "/web/addr/addrListforExcel"; |
|
| 412 |
+ } |
|
| 405 | 413 |
/** |
| 406 | 414 |
* 사용자 주소록 중복 리스트 Ajax |
| 407 | 415 |
* @param request |
+++ src/main/java/itn/let/mjo/addr/web/AddrRestController.java
... | ... | @@ -0,0 +1,117 @@ |
| 1 | +package itn.let.mjo.addr.web; | |
| 2 | + | |
| 3 | +import java.time.LocalDateTime; | |
| 4 | +import java.util.ArrayList; | |
| 5 | +import java.util.List; | |
| 6 | + | |
| 7 | +import javax.annotation.Resource; | |
| 8 | + | |
| 9 | +import org.springframework.http.HttpStatus; | |
| 10 | +import org.springframework.http.ResponseEntity; | |
| 11 | +import org.springframework.ui.ModelMap; | |
| 12 | +import org.springframework.web.bind.annotation.ModelAttribute; | |
| 13 | +import org.springframework.web.bind.annotation.RequestBody; | |
| 14 | +import org.springframework.web.bind.annotation.RequestMapping; | |
| 15 | +import org.springframework.web.bind.annotation.RestController; | |
| 16 | +import org.springframework.web.servlet.ModelAndView; | |
| 17 | +import org.springframework.web.servlet.mvc.support.RedirectAttributes; | |
| 18 | + | |
| 19 | +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; | |
| 20 | +import itn.com.cmm.EgovMessageSource; | |
| 21 | +import itn.com.cmm.LoginVO; | |
| 22 | +import itn.com.utl.fcc.service.EgovStringUtil; | |
| 23 | +import itn.let.fax.admin.service.FaxStatVO; | |
| 24 | +import itn.let.mail.service.StatusResponse; | |
| 25 | +import itn.let.mjo.addr.service.AddrGroupService; | |
| 26 | +import itn.let.mjo.addr.service.AddrGroupVO; | |
| 27 | +import itn.let.mjo.addr.service.AddrService; | |
| 28 | +import itn.let.mjo.addr.service.AddrVO; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * 주소록 관한 controller 클래스를 정의한다. | |
| 32 | + * @author ITN | |
| 33 | + * @since 2021.04.08 | |
| 34 | + * @version 1.0 | |
| 35 | + * @see | |
| 36 | + * | |
| 37 | + * <pre> | |
| 38 | + * << 개정이력(Modification Information) >> | |
| 39 | + * | |
| 40 | + * 수정일 수정자 수정내용 | |
| 41 | + * ------- -------- --------------------------- | |
| 42 | + * 2021.04.08 ITN 최초 생성 | |
| 43 | + * | |
| 44 | + * </pre> | |
| 45 | + */ | |
| 46 | +@RestController | |
| 47 | +public class AddrRestController { | |
| 48 | + | |
| 49 | + | |
| 50 | + @Resource (name = "AddrService") | |
| 51 | + private AddrService addrService; | |
| 52 | + | |
| 53 | + @Resource (name = "AddrGroupService") | |
| 54 | + private AddrGroupService addrGroupService; | |
| 55 | + | |
| 56 | + /** EgovMessageSource */ | |
| 57 | + @Resource(name="egovMessageSource") | |
| 58 | + EgovMessageSource egovMessageSource; | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + /** | |
| 63 | + * 주소록 대량등록 저장 | |
| 64 | + * @param searchVO | |
| 65 | + * @param model | |
| 66 | + * @return "/web/mjon/addr/addrMassInsertByTempAjax.do" | |
| 67 | + * @throws Exception | |
| 68 | + */ | |
| 69 | + @RequestMapping(value= {"/web/mjon/addr/addrMassInsertByTempAjax_advc.do"}) | |
| 70 | + public ResponseEntity<StatusResponse> addrMassInsertByTempAjax(@RequestBody List<AddrVO> addrListVO, | |
| 71 | + RedirectAttributes redirectAttributes, | |
| 72 | + ModelMap model) throws Exception{ | |
| 73 | + | |
| 74 | + | |
| 75 | + System.out.println("??"); | |
| 76 | + System.out.println("?? " + addrListVO.get(0).toString()); | |
| 77 | + | |
| 78 | + return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", LocalDateTime.now())); | |
| 79 | + } | |
| 80 | + | |
| 81 | + /* 바이트 자르기 | |
| 82 | + UTF-8일 경우 | |
| 83 | + subStringBytes("블라블라블라라", 10, 3); | |
| 84 | + EUC-KR일 경우 | |
| 85 | + subStringBytes("블라블라블라라", 10, 2); | |
| 86 | + */ | |
| 87 | + public String subStringBytes(String str, int byteLength, int sizePerLetter) { | |
| 88 | + int retLength = 0; | |
| 89 | + int tempSize = 0; | |
| 90 | + int asc; | |
| 91 | + if (str == null || "".equals(str) || "null".equals(str)) { | |
| 92 | + str = ""; | |
| 93 | + } | |
| 94 | + | |
| 95 | + int length = str.length(); | |
| 96 | + | |
| 97 | + for (int i = 1; i <= length; i++) { | |
| 98 | + asc = (int) str.charAt(i - 1); | |
| 99 | + if (asc > 127) { | |
| 100 | + if (byteLength >= tempSize + sizePerLetter) { | |
| 101 | + tempSize += sizePerLetter; | |
| 102 | + retLength++; | |
| 103 | + } | |
| 104 | + } else { | |
| 105 | + if (byteLength > tempSize) { | |
| 106 | + tempSize++; | |
| 107 | + retLength++; | |
| 108 | + } | |
| 109 | + } | |
| 110 | + } | |
| 111 | + | |
| 112 | + return str.substring(0, retLength); | |
| 113 | + } | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | +}(No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp
... | ... | @@ -6,37 +6,29 @@ |
| 6 | 6 |
|
| 7 | 7 |
<script type="text/javascript" src="<c:url value='/publish/js/content.js'/>"></script> |
| 8 | 8 |
<script type="text/javascript" src="https://oss.sheetjs.com/sheetjs/xlsx.full.min.js"></script> |
| 9 |
+<script type="text/javascript" src="<c:url value='/js/web/addr/init.js'/>"></script> |
|
| 10 |
+<script type="text/javascript" src="<c:url value='/js/web/addr/event.js'/>"></script> |
|
| 11 |
+<script type="text/javascript" src="<c:url value='/js/web/addr/utils.js'/>"></script> |
|
| 12 |
+ |
|
| 9 | 13 |
|
| 10 | 14 |
<script type="text/javascript"> |
| 11 |
-var tableErrorData = []; |
|
| 12 |
-var tableErrorCheckData = []; |
|
| 13 |
-var addrMassDupliSaveList = null; |
|
| 14 |
- |
|
| 15 |
-var gArrRestartIndex = 0; //배열 재시작카운드 |
|
| 16 |
-var gNameList = []; //치환문자 이름 |
|
| 17 |
-var gPhoneList = []; //받는사람 |
|
| 18 |
-var gInfo1List = []; //치환문자1 |
|
| 19 |
-var gInfo2List = []; //치환문자2 |
|
| 20 |
-var gInfo3List = []; //치환문자3 |
|
| 21 |
-var gInfo4List = []; //치환문자4 |
|
| 22 |
-var gMemoList = []; //메모 |
|
| 23 | 15 |
|
| 24 | 16 |
$(document).ready(function(){
|
| 25 | 17 |
listAddrGrp(); |
| 26 | 18 |
addrLoadAjax(); |
| 27 | 19 |
|
| 28 | 20 |
// 주소록 대량등록 |
| 29 |
- addrMassTab(1); |
|
| 21 |
+// addrMassTab(1); |
|
| 30 | 22 |
|
| 31 | 23 |
// 중복 휴대폰번호 버튼 노출여부 |
| 32 |
- $("#btnAddrMassDupli").hide();
|
|
| 33 |
- $("#btnAddrMassSaveDupli").hide();
|
|
| 34 | 24 |
}); |
| 35 | 25 |
|
| 26 |
+// 메인 화면 좌측메뉴 최신화 |
|
| 36 | 27 |
function listAddrGrp(){
|
| 37 | 28 |
var sendData = $(document.searchAddrGrpForm).serializeArray() ; |
| 38 | 29 |
$("#adr1_left").load("/web/addr/selectAddrGroupListAjax.do", sendData ,function(response, status, xhr){});
|
| 39 | 30 |
} |
| 31 |
+ |
|
| 40 | 32 |
|
| 41 | 33 |
function addrGroupLoadAjax(){
|
| 42 | 34 |
$("#addrRegistSelect").load("/web/addr/selectAddrGroupAjax.do", function(response, status, xhr){});
|
... | ... | @@ -188,296 +180,29 @@ |
| 188 | 180 |
//############################################################################################# |
| 189 | 181 |
//Tabulator |
| 190 | 182 |
//############################################################################################# |
| 191 |
-var tableR = null; //우측 주소록 불러오기 Tabulator 변수 |
|
| 192 |
- |
|
| 193 |
-/* 파일등록 */ |
|
| 194 |
-var _fileIdx = 0; |
|
| 195 |
-var _fileForm2 = new Array(); |
|
| 196 |
-var fileExt = ""; // 첨부파일 확장자 |
|
| 197 |
-var excelAddr = []; //엑셀 불러오기에서 내용 저장하는 배열 변수 |
|
| 198 | 183 |
|
| 199 | 184 |
$(document).ready(function(){
|
| 200 |
- //Tabulator AJAX Data Loading |
|
| 201 |
- tableR = new Tabulator(".callList_box", {
|
|
| 202 |
- height:"255px", |
|
| 203 |
- width:"100%", |
|
| 204 |
- layout:"fitColumns", |
|
| 205 |
- //data:tabledata, |
|
| 206 |
- //autoColumns:true, |
|
| 207 |
- headerHozAlign:"center", |
|
| 208 |
- validationMode:"highlight", |
|
| 209 |
- clipboard:false, |
|
| 210 |
- clipboardCopySelector:"table", |
|
| 211 |
- clipboardPasteAction:"insert", // insert, update, replace |
|
| 212 |
- placeholder:"복사(Ctrl+C)한 내용을 여기에 붙여넣기(Ctrl+V) 해주세요.", //fit columns to width of table (optional) |
|
| 213 |
- columns:[ //Define Table Columns |
|
| 214 |
- {formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){
|
|
| 215 |
- cell.getRow().toggleSelect(); |
|
| 216 |
- } |
|
| 217 |
- }, |
|
| 218 |
- {title:"이름", hozAlign:"center", field:"name", editor:"input", width:140, validator:["maxLength:12", "string"]},
|
|
| 219 |
- {title:"휴대폰", hozAlign:"center", field:"phone", editor:"input", width:145, validator:["required","minLength:10", "maxLength:13"]},
|
|
| 220 |
- {title:"[*1*]", hozAlign:"center", field:"info1", editor:"input", width:100, validator:["maxLength:100", "string"]},
|
|
| 221 |
- {title:"[*2*]", hozAlign:"center", field:"info2", editor:"input", width:100, validator:["maxLength:100", "string"]},
|
|
| 222 |
- {title:"[*3*]", hozAlign:"center", field:"info3", editor:"input", width:100, validator:["maxLength:100", "string"]},
|
|
| 223 |
- {title:"[*4*]", hozAlign:"center", field:"info4", editor:"input", width:100, validator:["maxLength:100", "string"]},
|
|
| 224 |
- {title:"메모", hozAlign:"center", field:"memo", editor:"input", width:119, validator:["maxLength:100", "string"]}
|
|
| 225 |
- ], |
|
| 226 |
- validationFailed:function(cell, value, parameters){ // 유효성 체크 함수
|
|
| 227 |
- var valid = cell.isValid(); |
|
| 228 |
- if(!valid){
|
|
| 229 |
- alert("양식에 맞지 않는 정보가 입력되었습니다.");
|
|
| 230 |
- |
|
| 231 |
- //해당 셀 데이터 삭제 |
|
| 232 |
- cell.setValue("");
|
|
| 233 |
- } |
|
| 234 |
- return value % parameters.phone; |
|
| 235 |
- }, |
|
| 236 |
- }); |
|
| 185 |
+ |
|
| 186 |
+ |
|
| 237 | 187 |
|
| 238 | 188 |
//받는 사람 리스트 영역에 클립보드 데이터 가져와보기 |
| 239 |
- $('.callList_box').on('paste', function (e) {
|
|
| 240 |
- var element = e.originalEvent.clipboardData.getData('text'); // 클립보드에 복사한 데이터 가져오기
|
|
| 241 |
- var elmSplit= []; |
|
| 242 |
- elmSplit = element.split("\n");
|
|
| 243 |
- var elmLen = elmSplit.length; |
|
| 244 |
- if(elmLen < 0){
|
|
| 245 |
- alert("붙여넣을 연락처를 복사해주세요.");
|
|
| 246 |
- return false; |
|
| 247 |
- }else{
|
|
| 248 |
- if (elmLen > 20001) {
|
|
| 249 |
- alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
|
| 250 |
- return false; |
|
| 251 |
- } |
|
| 252 |
- |
|
| 253 |
- tableErrorData.length = 0; // 오류 번호 배열 초기화 |
|
| 189 |
+ // 붙여넣기 기능 |
|
| 190 |
+ |
|
| 191 |
+ |
|
| 254 | 192 |
|
| 255 |
- var splitData = []; |
|
| 256 |
- var realPhone = []; |
|
| 257 |
- for(var i=0; i < elmLen; i++){
|
|
| 258 |
- var splitStr = elmSplit[i]; |
|
| 259 |
- var tabData = splitStr.split("\t"); //탭 구분으로 데이터 분할
|
|
| 260 |
- var comData = splitStr.split(","); //콤마 구분으로 데이터 분할
|
|
| 261 |
- if(tabData.length >= 2){
|
|
| 262 |
- splitData = tabData; |
|
| 263 |
- }else{
|
|
| 264 |
- splitData = comData; |
|
| 265 |
- } |
|
| 266 |
- |
|
| 267 |
- if(splitData.length == 0){// 데이터가 없는경우
|
|
| 268 |
- alert("탭으로 구분하여 데이터를 복사해 주세요.");
|
|
| 269 |
- return false; |
|
| 270 |
- }else if(splitData.length == 1){// 데이터가 탭으로 구분이 없는 경우
|
|
| 271 |
- for(var j=0; j < splitData.length; j++){
|
|
| 272 |
- if(checkHpNum(splitData[j].trim())){//핸드폰 양식이 맞는지 확인
|
|
| 273 |
- //배열 끝에 데이터 추가해 주기 |
|
| 274 |
- realPhone.push({name: "", phone: removeDash(splitData[j].trim())});
|
|
| 275 |
- } |
|
| 276 |
- else {
|
|
| 277 |
- if (splitData[j].trim() != '' && splitData[j].trim() != null && splitData[j].trim() != undefined) {
|
|
| 278 |
- tableErrorData.push(splitData[j].trim()); |
|
| 279 |
- } |
|
| 280 |
- } |
|
| 281 |
- } |
|
| 282 |
- }else{//데이터가 탭으로 구분되어 이름, 연락처로 구분된 경우
|
|
| 283 |
- var name; //이름 |
|
| 284 |
- var phone; //핸드폰번호 |
|
| 285 |
- var info1; |
|
| 286 |
- var info2; |
|
| 287 |
- var info3; |
|
| 288 |
- var info4; |
|
| 289 |
- var memo; //메모 |
|
| 290 |
- var isPhoneValid = false; |
|
| 291 |
- for(var j=0; j < splitData.length; j++){
|
|
| 292 |
- if(j == 0){
|
|
| 293 |
- name = splitData[j].trim(); |
|
| 294 |
- } |
|
| 295 |
- if(j == 1){
|
|
| 296 |
- if(checkHpNum(splitData[j].trim())){//핸드폰 양식이 맞는지 확인
|
|
| 297 |
- phone = removeDash(splitData[j].trim()); |
|
| 298 |
- isPhoneValid = true; |
|
| 299 |
- } |
|
| 300 |
- else {
|
|
| 301 |
- if (splitData[j].trim() != '' && splitData[j].trim() != null && splitData[j].trim() != undefined) {
|
|
| 302 |
- tableErrorData.push(splitData[j].trim()); |
|
| 303 |
- } |
|
| 304 |
- } |
|
| 305 |
- } |
|
| 306 |
- |
|
| 307 |
- if(j == 2){
|
|
| 308 |
- info1 = splitData[j].trim(); |
|
| 309 |
- } |
|
| 310 |
- if(j == 3){
|
|
| 311 |
- info2 = splitData[j].trim(); |
|
| 312 |
- } |
|
| 313 |
- if(j == 4){
|
|
| 314 |
- info3 = splitData[j].trim(); |
|
| 315 |
- } |
|
| 316 |
- if(j == 5){
|
|
| 317 |
- info4 = splitData[j].trim(); |
|
| 318 |
- } |
|
| 319 |
- |
|
| 320 |
- if(j == 6){ //메모
|
|
| 321 |
- memo = splitData[j].trim(); |
|
| 322 |
- } |
|
| 323 |
- } |
|
| 324 |
- |
|
| 325 |
- if (isPhoneValid == true) {
|
|
| 326 |
- //배열 끝에 데이터 추가해 주기 |
|
| 327 |
- realPhone.push({name: name, phone: phone, info1 : info1, info2 : info2, info3 : info3, info4 : info4, memo : memo });
|
|
| 328 |
- } |
|
| 329 |
- }//else end |
|
| 330 |
- } |
|
| 331 |
- |
|
| 332 |
- var recTableData = tableR.getRows(); // 받는사람 리스트의 전체 목록을 저장 |
|
| 333 |
- var tableData = []; |
|
| 334 |
- |
|
| 335 |
- //기존 받는사람 리스트를 배열에 미리 담아둔다. |
|
| 336 |
- if(recTableData.length > 0){
|
|
| 337 |
- for(var j=0; j < recTableData.length; j++){
|
|
| 338 |
- tableData.push({name: recTableData[j].getData().name, phone: removeDash(recTableData[j].getData().phone.trim()), info1: recTableData[j].getData().info1, info2: recTableData[j].getData().info2, info3: recTableData[j].getData().info3, info4: recTableData[j].getData().info4, memo: recTableData[j].getData().memo});
|
|
| 339 |
- } |
|
| 340 |
- } |
|
| 341 |
- |
|
| 342 |
- if(realPhone.length > 0){
|
|
| 343 |
- for(var j=0; j < realPhone.length; j++){
|
|
| 344 |
- tableData.push({name: realPhone[j].name, phone: removeDash(realPhone[j].phone.trim()), info1: realPhone[j].info1, info2: realPhone[j].info2, info3: realPhone[j].info3, info4: realPhone[j].info4, memo: realPhone[j].memo});
|
|
| 345 |
- } |
|
| 346 |
- } |
|
| 347 |
- |
|
| 348 |
- //tableData.push(realPhone); |
|
| 349 |
- |
|
| 350 |
- //중복 연락처 1개만 남기고 삭제하기 |
|
| 351 |
- var removeDuplPhone = dupliPhoneData(tableData); |
|
| 352 |
- |
|
| 353 |
- //수신자 리스트에 전화번호 추가해주기 |
|
| 354 |
- //tableR.addData(removeDuplPhone); |
|
| 355 |
- tableR.setData(removeDuplPhone); |
|
| 356 |
- |
|
| 357 |
- totRows = tableR.getRows().length; |
|
| 358 |
- updateTotCnt(totRows); //전체 데이터 갯수 구하기 |
|
| 359 |
- |
|
| 360 |
- if (tableErrorData.length > 0) {
|
|
| 361 |
- alert("올바르지 않은 휴대폰 번호가 "+ tableErrorData.length +" 건 있습니다.");
|
|
| 362 |
- //for(var x=0; x < tableErrorData.length; x++){
|
|
| 363 |
- // alert(tableErrorData[x]); |
|
| 364 |
- //} |
|
| 365 |
- } |
|
| 366 |
- } |
|
| 367 |
- }); |
|
| 368 |
- |
|
| 369 |
- //tableR.setData(tabledata); |
|
| 370 |
- |
|
| 371 |
- //받는사람 번호 버튼 클릭시 Tabulator에 데이터 넣어주기 |
|
| 372 |
- $('.addCallToF').click(function(){
|
|
| 373 |
- var recTableData = tableR.getRows(); // 받는사람 리스트의 전체 목록을 저장 |
|
| 374 |
- var tableData = []; |
|
| 375 |
- |
|
| 376 |
- //빈 Row 한줄을 상단에 먼저 추가해준다. |
|
| 377 |
- tableData.push({phone: ""});
|
|
| 378 |
- |
|
| 379 |
- //기존 받는사람 리스트를 배열에 미리 담아둔다. |
|
| 380 |
- if(recTableData.length > 0){
|
|
| 381 |
- for(var j=0; j < recTableData.length; j++){
|
|
| 382 |
- tableData.push({name: recTableData[j].getData().name, phone: removeDash(recTableData[j].getData().phone.trim()), info1: recTableData[j].getData().info1, info2: recTableData[j].getData().info2, info3: recTableData[j].getData().info3, info4: recTableData[j].getData().info4, memo: recTableData[j].getData().memo});
|
|
| 383 |
- } |
|
| 384 |
- } |
|
| 385 |
- |
|
| 386 |
- //연락처 추가해 주기 |
|
| 387 |
- //addPhoneInfo(tabledata); |
|
| 388 |
- |
|
| 389 |
- tableR.setData(tableData); |
|
| 390 |
- |
|
| 391 |
- //전체 데이터 갯수 구하기 |
|
| 392 |
- totRows = tableR.getRows().length; |
|
| 393 |
- updateTotCnt(totRows); |
|
| 394 |
- }); |
|
| 193 |
+// // 필드 선택 이벤트 핸들러 |
|
| 194 |
+// $("#column-selector").on("change", function() {
|
|
| 195 |
+// let selectedField = $(this).val(); |
|
| 196 |
+// let newValue = prompt("새 값을 입력하세요:");
|
|
| 197 |
+// if (newValue !== null) {
|
|
| 198 |
+// updateTableField(selectedField, newValue); |
|
| 199 |
+// } |
|
| 200 |
+// }); |
|
| 395 | 201 |
|
| 396 | 202 |
|
| 397 |
- //받는사람 전체삭제 버튼 처리 |
|
| 398 |
- $('.all_del').click(function(){
|
|
| 399 |
- var data = tableR.getRows(); |
|
| 400 |
- if(data == null || data == ""){
|
|
| 401 |
- alert("받는사람을 추가해 주세요.");
|
|
| 402 |
- return false; |
|
| 403 |
- }else{
|
|
| 404 |
- tableR.clearData(); |
|
| 405 |
- $("#rowTotCnt").text(0); //총건수 수정
|
|
| 406 |
- $("#rowDupCnt").text(0); //중복건수 수정
|
|
| 407 |
- dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 |
|
| 408 |
- } |
|
| 409 |
- |
|
| 410 |
- }); |
|
| 411 | 203 |
|
| 412 | 204 |
|
| 413 |
- // 받는사람 선택삭제 버튼 처리해주기 |
|
| 414 |
- $('.select_del').click(function(){
|
|
| 415 |
- $("#rowDupCnt").text(0); //중복건수 수정
|
|
| 416 |
- dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 |
|
| 417 |
- |
|
| 418 |
- if(tableR == null || tableR == ""){
|
|
| 419 |
- alert("받는사람을 추가해 주세요.");
|
|
| 420 |
- return false; |
|
| 421 |
- } |
|
| 422 |
- |
|
| 423 |
- var selectedData = tableR.getSelectedRows(); |
|
| 424 |
- |
|
| 425 |
- if(selectedData == "" || selectedData == null){
|
|
| 426 |
- alert("받는 사람을 선택해 주세요.");
|
|
| 427 |
- return false; |
|
| 428 |
- }else{ // 선택한 Row 데이터 삭제하기
|
|
| 429 |
- for(var i=0; i < selectedData.length; i++){
|
|
| 430 |
- selectedData[i].delete(); |
|
| 431 |
- } |
|
| 432 |
- } |
|
| 433 |
- |
|
| 434 |
- totRows = tableR.getRows().length; |
|
| 435 |
- |
|
| 436 |
- updateTotCnt(totRows); |
|
| 437 |
- }); |
|
| 438 |
- |
|
| 439 |
- //받는사람 오류번호 삭제 처리해주기 |
|
| 440 |
- $('.chkVali_del').click(function(){
|
|
| 441 |
- //기존 연락처 모두 불러오기 |
|
| 442 |
- var data = tableR.getRows(); |
|
| 443 |
- var tableData = []; |
|
| 444 |
- var totLen = tableR.getRows().length; |
|
| 445 |
- var errCnt = 0; |
|
| 446 |
- |
|
| 447 |
- if(totLen > 0){
|
|
| 448 |
- if(confirm("올바르지 않은 연락처 정보를 삭제 하시겠습니까?")){
|
|
| 449 |
- for(var i=0; i < totLen; i++){
|
|
| 450 |
- var phone = data[i].getData().phone; |
|
| 451 |
- var valiCheck = checkHpNum(phone); |
|
| 452 |
- if(valiCheck){
|
|
| 453 |
- tableData.push({name: data[i].getData().name.trim(), phone: data[i].getData().phone.trim(), info1:data[i].getData().info1, info2:data[i].getData().info2, info3:data[i].getData().info3, info4:data[i].getData().info4, memo:data[i].getData().memo});
|
|
| 454 |
- }else{
|
|
| 455 |
- errCnt++; |
|
| 456 |
- } |
|
| 457 |
- } |
|
| 458 |
- |
|
| 459 |
- var removeDuplData = dupliPhoneData(tableData); |
|
| 460 |
- |
|
| 461 |
- tableR.setData(removeDuplData); |
|
| 462 |
- |
|
| 463 |
- //총 받는사람 수 계산 |
|
| 464 |
- totRows = tableR.getRows().length; |
|
| 465 |
- updateTotCnt(totRows); |
|
| 466 |
- |
|
| 467 |
- if(errCnt > 0){
|
|
| 468 |
- alert(errCnt + " 건의 연락처를 삭제하였습니다."); |
|
| 469 |
- return false; |
|
| 470 |
- }else{
|
|
| 471 |
- alert("오류가 있는 연락처가 없습니다.");
|
|
| 472 |
- } |
|
| 473 |
- } |
|
| 474 |
- }else{
|
|
| 475 |
- alert("연락처 정보를 입력해 주세요.");
|
|
| 476 |
- return false; |
|
| 477 |
- } |
|
| 478 |
- }); |
|
| 479 |
- |
|
| 480 |
- |
|
| 205 |
+ |
|
| 481 | 206 |
// 오류검사 항목 중복제거 |
| 482 | 207 |
function SetTableErrorDupliCheck(sVal) {
|
| 483 | 208 |
var isDuplicate = false; |
... | ... | @@ -525,325 +250,11 @@ |
| 525 | 250 |
} |
| 526 | 251 |
} |
| 527 | 252 |
|
| 528 |
- $('.check_validity').click(function(){
|
|
| 529 |
- tableErrorCheckData.length = 0; // 오류 번호 배열 초기화 |
|
| 530 |
- |
|
| 531 |
- var data = tableR.getRows(); |
|
| 532 |
- var invalid = tableR.getInvalidCells(); //오류 데이터 체크 |
|
| 533 |
- var dataLen = tableR.getRows().length; //연락처 데이터 갯수 |
|
| 534 |
- var totLen = invalid.length; //오류 데이터 갯수 |
|
| 535 |
- var errMsg = ""; //최종 alert에 표시할 메시지 저장 변수 |
|
| 536 |
- |
|
| 537 |
- if(dataLen > 0) { //연락처 정보가 있으면 수행
|
|
| 538 |
- if(totLen > 0) { //내용에 오류가 있으면 수행
|
|
| 539 |
- //오류 데이터 값 저장 |
|
| 540 |
- for(var i=0; i < totLen; i++) {
|
|
| 541 |
- var cellValue = invalid[i].getValue(); |
|
| 542 |
- SetTableErrorDupliCheck(cellValue); |
|
| 543 |
- } |
|
| 544 |
- |
|
| 545 |
- for(var i=0; i < dataLen; i++){
|
|
| 546 |
- // 휴대폰번호 체크 |
|
| 547 |
- var phone = data[i].getData().phone; |
|
| 548 |
- var valiCheck = checkHpNum(phone); |
|
| 549 |
- if(!valiCheck){
|
|
| 550 |
- SetTableErrorDupliCheck(phone); |
|
| 551 |
- } |
|
| 552 |
- } |
|
| 553 |
- } |
|
| 554 |
- else {
|
|
| 555 |
- for(var i=0; i < dataLen; i++){
|
|
| 556 |
- // 휴대폰번호 체크 |
|
| 557 |
- var phone = data[i].getData().phone; |
|
| 558 |
- var valiCheck = checkHpNum(phone); |
|
| 559 |
- if(!valiCheck){
|
|
| 560 |
- SetTableErrorDupliCheck(phone); |
|
| 561 |
- } |
|
| 562 |
- } |
|
| 563 |
- } |
|
| 564 |
- } |
|
| 565 |
- else {
|
|
| 566 |
- alert("연락처를 입력해 주세요.");
|
|
| 567 |
- return false; |
|
| 568 |
- } |
|
| 569 |
- |
|
| 570 |
- if (tableErrorCheckData.length > 0) {
|
|
| 571 |
- for (var i = 0; i < tableErrorCheckData.length; i++) |
|
| 572 |
- {
|
|
| 573 |
- errMsg += tableErrorCheckData[i]; |
|
| 574 |
- if ((tableErrorCheckData.length - 1) > i) {
|
|
| 575 |
- errMsg += ", "; |
|
| 576 |
- } |
|
| 577 |
- } |
|
| 578 |
- alert(errMsg + "의 내용에 오류가 있습니다."); |
|
| 579 |
- } |
|
| 580 |
- else {
|
|
| 581 |
- alert("오류 데이터가 없습니다.");
|
|
| 582 |
- } |
|
| 583 |
- |
|
| 584 |
- return false; |
|
| 585 |
- }); |
|
| 586 | 253 |
|
| 587 | 254 |
|
| 588 |
- $('.addExcelDw').click(function(){
|
|
| 589 |
- var data = tableR.getRows(); |
|
| 590 |
- if(data.length > 0){
|
|
| 591 |
- tableR.download("xlsx", "recieveAddr.xlsx", {sheetName:"recieveAddr"});
|
|
| 592 |
- }else{
|
|
| 593 |
- alert("입력된 연락처 정보가 없습니다.");
|
|
| 594 |
- return false; |
|
| 595 |
- } |
|
| 596 |
- }); |
|
| 597 |
- |
|
| 598 |
- //받는사람 중복 삭제 |
|
| 599 |
- $('.duple_del').click(function(){
|
|
| 600 |
- //기존 연락처 모두 불러오기 |
|
| 601 |
- var data = tableR.getRows(); |
|
| 602 |
- var tableData = []; |
|
| 603 |
- var dpCnt = 0; |
|
| 604 |
- var totLen = tableR.getRows().length; |
|
| 605 |
- |
|
| 606 |
- for(var i=0; i < totLen; i++){
|
|
| 607 |
- tableData.push({name: data[i].getData().name.trim(), phone: data[i].getData().phone.trim()});
|
|
| 608 |
- } |
|
| 609 |
- |
|
| 610 |
- var removeDuplData = dupliPhoneData(tableData); |
|
| 611 |
- tableR.setData(removeDuplData); |
|
| 612 |
- |
|
| 613 |
- //총 받는사람 수 계산 |
|
| 614 |
- totRows = tableR.getRows().length; |
|
| 615 |
- updateTotCnt(totRows); |
|
| 616 |
- }); |
|
| 617 |
- |
|
| 618 | 255 |
|
| 619 | 256 |
}); |
| 620 | 257 |
|
| 621 |
- |
|
| 622 |
-//전체 데이터 갯수 구하는 함수 |
|
| 623 |
-function updateTotCnt(data){
|
|
| 624 |
- var rowTotCnt = data; |
|
| 625 |
- $("#rowTotCnt").text(rowTotCnt);
|
|
| 626 |
-} |
|
| 627 |
- |
|
| 628 |
-function addPhoneInfo(data){
|
|
| 629 |
- if(data == null){
|
|
| 630 |
- alert("연락처 정보가 없습니다.");
|
|
| 631 |
- return; |
|
| 632 |
- }else{
|
|
| 633 |
- var idx = 0; |
|
| 634 |
- var newData = data;//중복 연락처는 하나만 남기고 모두 제거 |
|
| 635 |
- |
|
| 636 |
- var recTableData = tableR.getRows(); // 받는사람 리스트의 전체 목록을 저장 |
|
| 637 |
- var tableData = []; |
|
| 638 |
- |
|
| 639 |
- //기존 받는사람 리스트를 배열에 미리 담아둔다. |
|
| 640 |
- if(recTableData.length > 0){
|
|
| 641 |
- for(var j=0; j < recTableData.length; j++){
|
|
| 642 |
- tableData.push({name: recTableData[j].getData().name, phone: removeDash(recTableData[j].getData().phone.trim()), info1: recTableData[j].getData().info1, info2: recTableData[j].getData().info2, info3: recTableData[j].getData().info3, info4: recTableData[j].getData().info4, memo: recTableData[j].getData().memo});
|
|
| 643 |
- } |
|
| 644 |
- } |
|
| 645 |
- |
|
| 646 |
- //받는사람 리스트를 담아둔 배열에 신규 추가 데이터를 추가해 준다. |
|
| 647 |
- for(var i=0; i < newData.length; i++){
|
|
| 648 |
- tableData.push({name: newData[i].name.trim(), phone: removeDash(newData[i].phone.trim()), info1: newData[i].info1, info2: newData[i].info2, info3: newData[i].info3, info4: newData[i].info4, memo: newData[i].memo});
|
|
| 649 |
- } |
|
| 650 |
- |
|
| 651 |
- var temp = tableData.length; |
|
| 652 |
- |
|
| 653 |
- //기존 수신 리스트를 지워준 후 신규 전체 리스트를 추가해준다. |
|
| 654 |
- tableR.clearData(); //기존 받는사람 목록을 삭제. |
|
| 655 |
- tableR.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기 |
|
| 656 |
- _fileForm2 = []; //form file data 초기화 |
|
| 657 |
- _fileIdx = 0; //form file idx 초기화 |
|
| 658 |
- |
|
| 659 |
- totRows = tableR.getRows().length; |
|
| 660 |
- updateTotCnt(totRows); //전체 데이터 갯수 구하기 |
|
| 661 |
- } |
|
| 662 |
-} |
|
| 663 |
- |
|
| 664 |
-/* 파일사이즈 가져오기 */ |
|
| 665 |
-function getStrFileSize(filesize){
|
|
| 666 |
- var sizeStr=""; |
|
| 667 |
- var sizeKB = filesize/1024; |
|
| 668 |
- if(parseInt(sizeKB) > 1024){
|
|
| 669 |
- var sizeMB = sizeKB/1024; |
|
| 670 |
- sizeStr = sizeMB.toFixed(2)+" MB"; |
|
| 671 |
- }else{
|
|
| 672 |
- sizeStr = sizeKB.toFixed(2)+" KB"; |
|
| 673 |
- } |
|
| 674 |
- return sizeStr; |
|
| 675 |
-} |
|
| 676 |
- |
|
| 677 |
-//############################################################################################# |
|
| 678 |
-//파일업로드 드래그앤 드롭 |
|
| 679 |
-//############################################################################################# |
|
| 680 |
-var objDragAndDrop = $(".upload_area");
|
|
| 681 |
-$(document).on("dragenter",".upload_area",function(e){
|
|
| 682 |
- e.stopPropagation(); |
|
| 683 |
- e.preventDefault(); |
|
| 684 |
- //$(this).css('border', '2px solid #0B85A1');
|
|
| 685 |
-}); |
|
| 686 |
-$(document).on("dragover",".upload_area",function(e){
|
|
| 687 |
- e.stopPropagation(); |
|
| 688 |
- e.preventDefault(); |
|
| 689 |
-}); |
|
| 690 |
-$(document).on("drop",".upload_area",function(e){
|
|
| 691 |
- //$(this).css('border', '2px dotted #0B85A1');
|
|
| 692 |
- e.preventDefault(); |
|
| 693 |
- var files = e.originalEvent.dataTransfer.files; |
|
| 694 |
- handleFileUpload(files,objDragAndDrop); //파일업로드 |
|
| 695 |
-}); |
|
| 696 |
- |
|
| 697 |
-$(document).on('dragenter', function (e){
|
|
| 698 |
- e.stopPropagation(); |
|
| 699 |
- e.preventDefault(); |
|
| 700 |
-}); |
|
| 701 |
-$(document).on('dragover', function (e){
|
|
| 702 |
-e.stopPropagation(); |
|
| 703 |
-e.preventDefault(); |
|
| 704 |
-//objDragAndDrop.css('border', '2px dotted #0B85A1');
|
|
| 705 |
-}); |
|
| 706 |
-$(document).on('drop', function (e){
|
|
| 707 |
- e.stopPropagation(); |
|
| 708 |
- e.preventDefault(); |
|
| 709 |
-}); |
|
| 710 |
-//파일 드래그앤드롭 종료 |
|
| 711 |
- |
|
| 712 |
-function handleFileUpload(files,obj) //업로드 function |
|
| 713 |
-{
|
|
| 714 |
- _fileForm2 = []; //form file data 초기화 |
|
| 715 |
- |
|
| 716 |
- var limitsize = 50*1024*1024; //파일 제한 체크(50개, 50MB) |
|
| 717 |
- var limitcount = 1;//$("input[name=limitcount]").val()*1 ;
|
|
| 718 |
- var fileNece = true; //첨부파일필수 |
|
| 719 |
- |
|
| 720 |
- |
|
| 721 |
- if($('#fileNece').length > 0){
|
|
| 722 |
- if('N'==$('#fileNece').val()){
|
|
| 723 |
- fileNece = false; |
|
| 724 |
- } |
|
| 725 |
- } |
|
| 726 |
- |
|
| 727 |
- //엑셀 및 TXT 파일만 업로드 할수 있도록 체크하기 |
|
| 728 |
- var fileNm = files[0].name; |
|
| 729 |
- fileExt = fileNm.split('.').pop().toLowerCase();
|
|
| 730 |
- |
|
| 731 |
- // IE11 대응 |
|
| 732 |
- if (fileExt != "") {
|
|
| 733 |
- if($.inArray(fileExt, ['txt','xls','xlsx']) == -1) {
|
|
| 734 |
- alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
|
| 735 |
- return; |
|
| 736 |
- } |
|
| 737 |
- |
|
| 738 |
- for (var i = 0; i < files.length; i++) |
|
| 739 |
- {
|
|
| 740 |
- var fd = new FormData(); |
|
| 741 |
- fd.append('file', files[i]);
|
|
| 742 |
- var tmpObj = new Object(); |
|
| 743 |
- tmpObj.name = "file_" + _fileIdx; |
|
| 744 |
- tmpObj.fileObj = files[i]; |
|
| 745 |
- |
|
| 746 |
- _fileForm2.push(tmpObj); |
|
| 747 |
- sendFileToServer(fd, obj, files[i], _fileIdx); |
|
| 748 |
- _fileIdx++; |
|
| 749 |
- |
|
| 750 |
- var totalfileSize = 0; |
|
| 751 |
- $('.totalfileCount').text($('.item_file_size').length) ;
|
|
| 752 |
- $('.item_file_size').each(function(){
|
|
| 753 |
- totalfileSize += $(this).val()*1 ; |
|
| 754 |
- }); |
|
| 755 |
- $('.totalfileSize').text(getStrFileSize(totalfileSize)) ;
|
|
| 756 |
- } |
|
| 757 |
- } |
|
| 758 |
-} |
|
| 759 |
- |
|
| 760 |
-//드래그앤 드롭 엑셀 및 텍스트 파일 서버 전송 함수 |
|
| 761 |
-function sendFileToServer(formData, obj , fileObj, _fileIdx) |
|
| 762 |
-{
|
|
| 763 |
- var msg; |
|
| 764 |
- msg = "해당 첨부파일을 수정하시겠습니까?"; |
|
| 765 |
- var data = new FormData(document.msgForm); |
|
| 766 |
- _fileForm2.forEach(function(obj, idx) {
|
|
| 767 |
- if (obj) data.append("file0", obj.fileObj);
|
|
| 768 |
- }); |
|
| 769 |
- |
|
| 770 |
- var url = ""; |
|
| 771 |
- |
|
| 772 |
- // IE11 대응 |
|
| 773 |
- if (fileExt != "") {
|
|
| 774 |
- if(fileExt == "xls" || fileExt == "xlsx"){
|
|
| 775 |
- url = "/web/mjon/addr/sendExelFilePhoneNumAjax.do"; |
|
| 776 |
- }else if(fileExt == "txt"){
|
|
| 777 |
- url = "/web/mjon/addr/sendTxtFilePhoneNumAjax.do"; |
|
| 778 |
- }else{
|
|
| 779 |
- alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
|
| 780 |
- return; |
|
| 781 |
- } |
|
| 782 |
- |
|
| 783 |
- //엑셀 데이터 변수에 자료가 있으면 지워준다. |
|
| 784 |
- if(excelAddr.length > 0){
|
|
| 785 |
- excelAddr = []; |
|
| 786 |
- } |
|
| 787 |
- |
|
| 788 |
- $.ajax({
|
|
| 789 |
- type: "POST", |
|
| 790 |
- enctype: 'multipart/form-data', |
|
| 791 |
- url: url, |
|
| 792 |
- data: data, |
|
| 793 |
- dataType:'json', |
|
| 794 |
- async: true, |
|
| 795 |
- processData: false, |
|
| 796 |
- contentType: false, |
|
| 797 |
- cache: false, |
|
| 798 |
- //timeout: 600000, |
|
| 799 |
- success: function (returnData, status) {
|
|
| 800 |
- if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
| 801 |
- if(returnData.success){
|
|
| 802 |
- var data = returnData.data; |
|
| 803 |
- var message = returnData.message; |
|
| 804 |
- |
|
| 805 |
- if (message == "20000") {
|
|
| 806 |
- alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
|
| 807 |
- } |
|
| 808 |
- else {
|
|
| 809 |
- if(data != null){
|
|
| 810 |
- var arr = []; // 넘어온 데이터를 받은 배열 변수 |
|
| 811 |
- $.each(data, function(i, item){
|
|
| 812 |
- arr.push({name: item.name, phone: item.phone, info1: item.info1, info2: item.info2, info3: item.info3, info4: item.info4, memo: item.memo});
|
|
| 813 |
- }); |
|
| 814 |
- |
|
| 815 |
- addPhoneInfo(arr); // 연락처를 처리해줄 함수 호출 |
|
| 816 |
- } |
|
| 817 |
- |
|
| 818 |
- //메세지가 있는 경우 알려주기 |
|
| 819 |
- if(message != '' && message != null) {
|
|
| 820 |
- alert(returnData.message); |
|
| 821 |
- } |
|
| 822 |
- } |
|
| 823 |
- |
|
| 824 |
- }else{
|
|
| 825 |
- alert(returnData.message); |
|
| 826 |
- } |
|
| 827 |
- } else if(status== 'fail'){
|
|
| 828 |
- alert("저장에 실패하였습니다. !!");
|
|
| 829 |
- } |
|
| 830 |
- }, |
|
| 831 |
- error: function (e) {
|
|
| 832 |
- alert("저장에 실패하였습니다.");
|
|
| 833 |
- console.log("ERROR : ", e);
|
|
| 834 |
- }, |
|
| 835 |
- beforeSend : function(xmlHttpRequest) {
|
|
| 836 |
- //로딩창 show |
|
| 837 |
- $('.loading_layer').addClass('active');
|
|
| 838 |
- }, |
|
| 839 |
- complete : function(xhr, textStatus) {
|
|
| 840 |
- //로딩창 hide |
|
| 841 |
- $('.loading_layer').removeClass('active');
|
|
| 842 |
- } |
|
| 843 |
- }); |
|
| 844 |
- } |
|
| 845 |
- |
|
| 846 |
-} |
|
| 847 | 258 |
|
| 848 | 259 |
|
| 849 | 260 |
//############################################################################################# |
... | ... | @@ -910,33 +321,40 @@ |
| 910 | 321 |
|
| 911 | 322 |
//저장 |
| 912 | 323 |
function SetAddrMassSave(){
|
| 913 |
- gArrRestartIndex = 0; //배열 재시작카운드 |
|
| 914 |
- gNameList = []; //치환문자 이름 |
|
| 915 |
- gPhoneList = []; //받는사람 |
|
| 916 |
- gInfo1List = []; //치환문자1 |
|
| 917 |
- gInfo2List = []; //치환문자2 |
|
| 918 |
- gInfo3List = []; //치환문자3 |
|
| 919 |
- gInfo4List = []; //치환문자4 |
|
| 920 |
- gMemoList = []; //메모 |
|
| 324 |
+// gArrRestartIndex = 0; //배열 재시작카운드 |
|
| 325 |
+// gNameList = []; //치환문자 이름 |
|
| 326 |
+// gPhoneList = []; //받는사람 |
|
| 327 |
+// gInfo1List = []; //치환문자1 |
|
| 328 |
+// gInfo2List = []; //치환문자2 |
|
| 329 |
+// gInfo3List = []; //치환문자3 |
|
| 330 |
+// gInfo4List = []; //치환문자4 |
|
| 331 |
+// gMemoList = []; //메모 |
|
| 921 | 332 |
|
| 922 |
- var selectedData = tableR.getRows(); |
|
| 923 |
- if (selectedData == "" || selectedData == null) {
|
|
| 333 |
+ var $objTabul = fn_utils_getTabulator(); |
|
| 334 |
+ |
|
| 335 |
+ if($objTabul.getData().length < 1){
|
|
| 924 | 336 |
alert("한 개 이상의 연락처를 입력하세요");
|
| 925 | 337 |
return false; |
| 926 | 338 |
} |
| 927 |
- else if (selectedData.length > 20000) {
|
|
| 928 |
- alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
|
| 929 |
- return false; |
|
| 930 |
- } |
|
| 339 |
+// else if (selectedData.length > 20000) {
|
|
| 340 |
+// alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
|
| 341 |
+// return false; |
|
| 342 |
+// } |
|
| 931 | 343 |
|
| 932 | 344 |
var selectMassVal = $("#addrGrpIdInfo option:selected").val();
|
| 933 | 345 |
|
| 934 | 346 |
var loginVO = '${LoginVO}';
|
| 935 |
- if(loginVO == "" || loginVO == null){
|
|
| 347 |
+// if(loginVO == "" || loginVO == null){
|
|
| 348 |
+ if(fn_utils_isEmpty(loginVO)){
|
|
| 936 | 349 |
alert("로그인 후 이용이 가능합니다.");
|
| 937 | 350 |
return false; |
| 938 | 351 |
} |
| 939 |
- else if ($("#addrGrpIdInfo option:selected").val() == "NEW" && ($("#addrGrpNm").val() == "" || $("#addrGrpNm").val() == null || $("#addrGrpNm").val() == undefined)) {
|
|
| 352 |
+ else if ($("#addrGrpIdInfo option:selected").val() == "NEW"
|
|
| 353 |
+ && ($("#addrGrpNm").val() == ""
|
|
| 354 |
+ || $("#addrGrpNm").val() == null
|
|
| 355 |
+ || $("#addrGrpNm").val() == undefined)
|
|
| 356 |
+ ) |
|
| 357 |
+ {
|
|
| 940 | 358 |
alert("저장할 그룹을 선택하거나 새 그룹명을 입력해주세요.");
|
| 941 | 359 |
return false; |
| 942 | 360 |
} |
... | ... | @@ -952,15 +370,40 @@ |
| 952 | 370 |
|
| 953 | 371 |
var commaSelectedData = numberWithCommas(selectedData.length); |
| 954 | 372 |
var confirmMsg = "저장하시겠습니까?\n이름 20byte, [*1*]~[*4*] 40byte, 메모 250byte 초과 글자는 절사됩니다."; |
| 955 |
- if (selectedData.length >= 10000) {
|
|
| 956 |
- confirmMsg = "저장하시겠습니까?\n이름 20byte, [*1*]~[*4*] 40byte, 메모 250byte 초과 글자는 절사됩니다.\n1만건 이상 등록시 약 30초정도 소요됩니다.\n잠시만 기다려주세요."; |
|
| 957 |
- } |
|
| 373 |
+// if (selectedData.length >= 10000) {
|
|
| 374 |
+// confirmMsg = "저장하시겠습니까?\n이름 20byte, [*1*]~[*4*] 40byte, 메모 250byte 초과 글자는 절사됩니다.\n1만건 이상 등록시 약 30초정도 소요됩니다.\n잠시만 기다려주세요."; |
|
| 375 |
+// } |
|
| 958 | 376 |
if (confirm(confirmMsg)) {
|
| 959 | 377 |
//로딩창 show |
| 960 | 378 |
$('.loading_layer').addClass('active');
|
| 961 | 379 |
|
| 962 |
- setTimeout(setSenderList, 1000); |
|
| 380 |
+ setTimeout(setSenderList_advc, 1000); |
|
| 963 | 381 |
} |
| 382 |
+} |
|
| 383 |
+ |
|
| 384 |
+function setSenderList_advc(){
|
|
| 385 |
+ |
|
| 386 |
+ var $objTabul = fn_utils_getTabulator(); |
|
| 387 |
+ var dataToSend = $objTabul.getData(); |
|
| 388 |
+ |
|
| 389 |
+ $.ajax({
|
|
| 390 |
+ type: "POST", |
|
| 391 |
+ url: "/web/mjon/addr/addrMassInsertByTempAjax_advc.do", |
|
| 392 |
+ data: JSON.stringify(dataToSend), |
|
| 393 |
+ dataType: 'json', |
|
| 394 |
+ contentType: 'application/json', |
|
| 395 |
+ async: true, |
|
| 396 |
+ success: function (data) {
|
|
| 397 |
+ console.log('data : ', data);
|
|
| 398 |
+// alert(data.object.message); |
|
| 399 |
+// if (data.object.result == 'success') {
|
|
| 400 |
+// location.reload(); |
|
| 401 |
+// } |
|
| 402 |
+ }, |
|
| 403 |
+ error: function (e) {
|
|
| 404 |
+ alert("ERROR : " + JSON.stringify(e));
|
|
| 405 |
+ } |
|
| 406 |
+ }); |
|
| 964 | 407 |
} |
| 965 | 408 |
|
| 966 | 409 |
function setSenderList() {
|
... | ... | @@ -1058,7 +501,7 @@ |
| 1058 | 501 |
//console.log("gPhoneList.length : " + gPhoneList.length);
|
| 1059 | 502 |
//console.log("selectedData.length : " + selectedData.length);
|
| 1060 | 503 |
|
| 1061 |
- SetAddrMassSave_Step2(); |
|
| 504 |
+ SetAddrMassSave_Step2(); |
|
| 1062 | 505 |
} |
| 1063 | 506 |
} |
| 1064 | 507 |
|
... | ... | @@ -1079,18 +522,18 @@ |
| 1079 | 522 |
url = "/web/mjon/addr/addrMassInsertByTempAjax.do"; |
| 1080 | 523 |
|
| 1081 | 524 |
$.ajax({
|
| 1082 |
- type: "POST", |
|
| 1083 |
- url: url, |
|
| 1084 |
- data: data, |
|
| 1085 |
- dataType:'json', |
|
| 1086 |
- async: true, |
|
| 1087 |
- processData: false, |
|
| 1088 |
- contentType: false, |
|
| 1089 |
- cache: false, |
|
| 1090 |
- success: function (returnData) {
|
|
| 1091 |
- //로딩창 hide |
|
| 1092 |
- $('.loading_layer').removeClass('active');
|
|
| 1093 |
- |
|
| 525 |
+ type: "POST", |
|
| 526 |
+ url: url, |
|
| 527 |
+ data: data, |
|
| 528 |
+ dataType:'json', |
|
| 529 |
+ async: true, |
|
| 530 |
+ processData: false, |
|
| 531 |
+ contentType: false, |
|
| 532 |
+ cache: false, |
|
| 533 |
+ success: function (returnData) {
|
|
| 534 |
+ //로딩창 hide |
|
| 535 |
+ $('.loading_layer').removeClass('active');
|
|
| 536 |
+ |
|
| 1094 | 537 |
if (returnData.isSuccess) {
|
| 1095 | 538 |
alert("저장에 성공했습니다.\n저장 : " + returnData.resultCnt + "건, 중복 : " + returnData.dupliCnt + "건, 휴대폰번호 오류 : " + returnData.errPhoneCnt + "건");
|
| 1096 | 539 |
|
... | ... | @@ -1121,22 +564,22 @@ |
| 1121 | 564 |
alert("오류 알림 : " + returnData.msg);
|
| 1122 | 565 |
} |
| 1123 | 566 |
}, |
| 1124 |
- error: function (e) {
|
|
| 1125 |
- //로딩창 hide |
|
| 1126 |
- $('.loading_layer').removeClass('active');
|
|
| 1127 |
- |
|
| 1128 |
- alert("저장에 실패하였습니다.");
|
|
| 1129 |
- alert("ERROR : " + JSON.stringify(e));
|
|
| 1130 |
- }, |
|
| 567 |
+ error: function (e) {
|
|
| 568 |
+ //로딩창 hide |
|
| 569 |
+ $('.loading_layer').removeClass('active');
|
|
| 570 |
+ |
|
| 571 |
+ alert("저장에 실패하였습니다.");
|
|
| 572 |
+ alert("ERROR : " + JSON.stringify(e));
|
|
| 573 |
+ }, |
|
| 1131 | 574 |
beforeSend : function(xmlHttpRequest) {
|
| 1132 |
- //로딩창 show |
|
| 1133 |
- $('.loading_layer').addClass('active');
|
|
| 575 |
+ //로딩창 show |
|
| 576 |
+ $('.loading_layer').addClass('active');
|
|
| 1134 | 577 |
}, |
| 1135 |
- complete : function(xhr, textStatus) {
|
|
| 1136 |
- //로딩창 hide |
|
| 1137 |
- $('.loading_layer').removeClass('active');
|
|
| 578 |
+ complete : function(xhr, textStatus) {
|
|
| 579 |
+ //로딩창 hide |
|
| 580 |
+ $('.loading_layer').removeClass('active');
|
|
| 1138 | 581 |
} |
| 1139 |
- }); |
|
| 582 |
+ }); |
|
| 1140 | 583 |
} |
| 1141 | 584 |
|
| 1142 | 585 |
//주소록그룹 콤보박스 유지 |
... | ... | @@ -1162,33 +605,34 @@ |
| 1162 | 605 |
} |
| 1163 | 606 |
} |
| 1164 | 607 |
|
| 1165 |
- |
|
| 608 |
+// 주소 대량등록 버튼 클릭 |
|
| 609 |
+// AddrListAjax.jsp에서 호출 |
|
| 1166 | 610 |
$(document).on('click', '#btnAddrMassRegCall', function() {
|
| 1167 | 611 |
getAddrGroupList(); |
| 1168 | 612 |
}); |
| 1169 | 613 |
|
| 1170 | 614 |
// 주소록 그룹정보 불러오기 |
| 1171 | 615 |
function getAddrGroupList() {
|
| 1172 |
- $.ajax({
|
|
| 1173 |
- type : "POST", |
|
| 1174 |
- async : false, |
|
| 1175 |
- url : "/web/mjon/addr/addrGroupListAjax.do", |
|
| 1176 |
- data : {},
|
|
| 1177 |
- dataType:'json', |
|
| 1178 |
- success : function(data) {
|
|
| 616 |
+ $.ajax({
|
|
| 617 |
+ type : "POST", |
|
| 618 |
+ async : false, |
|
| 619 |
+ url : "/web/mjon/addr/addrGroupListAjax.do", |
|
| 620 |
+ data : {},
|
|
| 621 |
+ dataType:'json', |
|
| 622 |
+ success : function(data) {
|
|
| 1179 | 623 |
//alert(JSON.stringify(data.addrGroupList)); |
| 1180 | 624 |
|
| 1181 | 625 |
// Show Html |
| 1182 | 626 |
getAddrGroupListShow(data.addrGroupList); |
| 1183 |
- }, |
|
| 1184 |
- error : function(xhr, status, error) {
|
|
| 1185 |
- alert(error); |
|
| 1186 |
- return false; |
|
| 1187 |
- } |
|
| 1188 |
- }); |
|
| 627 |
+ }, |
|
| 628 |
+ error : function(xhr, status, error) {
|
|
| 629 |
+ alert(error); |
|
| 630 |
+ return false; |
|
| 631 |
+ } |
|
| 632 |
+ }); |
|
| 1189 | 633 |
} |
| 1190 | 634 |
|
| 1191 |
-// Show Html |
|
| 635 |
+// 그룹데이터 노출 |
|
| 1192 | 636 |
function getAddrGroupListShow(jsonList) {
|
| 1193 | 637 |
var sHtml = ""; |
| 1194 | 638 |
sHtml += "<option value='NEW'>그룹추가</option>"; |
... | ... | @@ -1197,7 +641,7 @@ |
| 1197 | 641 |
for (var j = 0; j < jsonList.length; j++) {
|
| 1198 | 642 |
sHtml += " <option value='" + $.trim(jsonList[j].addrGrpId) + "' />" + $.trim(jsonList[j].addrGrpNm) + "</option>"; |
| 1199 | 643 |
} |
| 1200 |
- |
|
| 644 |
+ |
|
| 1201 | 645 |
$("#addrGrpIdInfo").html(sHtml);
|
| 1202 | 646 |
} |
| 1203 | 647 |
|
... | ... | @@ -1211,116 +655,15 @@ |
| 1211 | 655 |
//파일 불러오기 |
| 1212 | 656 |
//############################################################################################# |
| 1213 | 657 |
|
| 1214 |
-//엑섹불러오기 버튼 클릭시 파일 첨부 실행 |
|
| 1215 |
-$(document).on('click', '.c3', function() {
|
|
| 1216 |
- $("#excelFile").click();
|
|
| 1217 |
-}); |
|
| 1218 |
- |
|
| 1219 |
-//seetJs 엑셀 파일 불러오기 |
|
| 1220 |
-function excelExport(event){
|
|
| 1221 |
- var data = new FormData(document.excelForm); |
|
| 1222 |
- data.append("file0", $('#excelFile').prop('files')[0]);
|
|
| 1223 |
- |
|
| 1224 |
- var fileValue = $("#excelFile").val().split("\\");
|
|
| 1225 |
- var fileName = fileValue[fileValue.length-1]; |
|
| 1226 |
- |
|
| 1227 |
- var fileExt = fileName.split('.').pop().toLowerCase();
|
|
| 1228 |
- |
|
| 1229 |
- // IE11 대응 |
|
| 1230 |
- if (fileExt != "") {
|
|
| 1231 |
- if($.inArray(fileExt, ['txt','xls','xlsx']) == -1) {
|
|
| 1232 |
- alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
|
| 1233 |
- return false; |
|
| 1234 |
- } |
|
| 1235 |
- |
|
| 1236 |
- var url = ""; |
|
| 1237 |
- |
|
| 1238 |
- if(fileExt == "xls" || fileExt == "xlsx"){
|
|
| 1239 |
- url = "/web/mjon/addr/sendExelFilePhoneNumAjax.do"; |
|
| 1240 |
- }else if(fileExt == "txt"){
|
|
| 1241 |
- url = "/web/mjon/addr/sendTxtFilePhoneNumAjax.do"; |
|
| 1242 |
- }else{
|
|
| 1243 |
- alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
|
| 1244 |
- return; |
|
| 1245 |
- } |
|
| 1246 |
- |
|
| 1247 |
- //엑셀 데이터 변수에 자료가 있으면 지워준다. |
|
| 1248 |
- if(excelAddr.length > 0){
|
|
| 1249 |
- excelAddr = []; |
|
| 1250 |
- } |
|
| 1251 |
- |
|
| 1252 |
- $.ajax({
|
|
| 1253 |
- type: "POST", |
|
| 1254 |
- enctype: 'multipart/form-data', |
|
| 1255 |
- url: url, |
|
| 1256 |
- data: data, |
|
| 1257 |
- dataType:'json', |
|
| 1258 |
- async: true, |
|
| 1259 |
- processData: false, |
|
| 1260 |
- contentType: false, |
|
| 1261 |
- cache: false, |
|
| 1262 |
- //timeout: 600000, |
|
| 1263 |
- success: function (returnData, status) {
|
|
| 1264 |
- if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
| 1265 |
- if(returnData.success){
|
|
| 1266 |
- var data = returnData.data; |
|
| 1267 |
- var message = returnData.message; |
|
| 1268 |
- |
|
| 1269 |
- if (message == "20000") {
|
|
| 1270 |
- alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
|
| 1271 |
- } |
|
| 1272 |
- else {
|
|
| 1273 |
- if(data != null){
|
|
| 1274 |
- var arr = []; // 넘어온 데이터를 받은 배열 변수 |
|
| 1275 |
- $.each(data, function(i, item){
|
|
| 1276 |
- arr.push({name: item.name, phone: item.phone, info1: item.info1, info2: item.info2, info3: item.info3, info4: item.info4, memo: item.memo});
|
|
| 1277 |
- }); |
|
| 1278 |
- |
|
| 1279 |
- addPhoneInfo(arr); // 연락처를 처리해줄 함수 호출 |
|
| 1280 |
- |
|
| 1281 |
- //메세지가 있는 경우 알려주기 |
|
| 1282 |
- if(message != '' && message != null) {
|
|
| 1283 |
- alert(returnData.message); |
|
| 1284 |
- } |
|
| 1285 |
- } |
|
| 1286 |
- } |
|
| 1287 |
- }else{
|
|
| 1288 |
- alert(returnData.message); |
|
| 1289 |
- } |
|
| 1290 |
- } else if(status== 'fail'){
|
|
| 1291 |
- alert("저장에 실패하였습니다. !!");
|
|
| 1292 |
- } |
|
| 1293 |
- }, |
|
| 1294 |
- error: function (e) {
|
|
| 1295 |
- alert("저장에 실패하였습니다.");
|
|
| 1296 |
- console.log("ERROR : ", e);
|
|
| 1297 |
- } |
|
| 1298 |
- , |
|
| 1299 |
- beforeSend : function(xmlHttpRequest) {
|
|
| 1300 |
- //로딩창 show |
|
| 1301 |
- $('.loading_layer').addClass('active');
|
|
| 1302 |
- }, |
|
| 1303 |
- complete : function(xhr, textStatus) {
|
|
| 1304 |
- //로딩창 hide |
|
| 1305 |
- $('.loading_layer').removeClass('active');
|
|
| 1306 |
- } |
|
| 1307 |
- }); |
|
| 1308 |
- |
|
| 1309 |
- $("#excelFile").val("");
|
|
| 1310 |
- $("#excelNm").val(fileName);
|
|
| 1311 |
- } |
|
| 1312 |
- |
|
| 1313 |
-} |
|
| 1314 |
- |
|
| 1315 | 658 |
//체크박스 전체선택/해제 |
| 1316 | 659 |
$(document).on("click", "#chkAll", function(e) {
|
| 1317 |
- var isChecked = $(this).is(":checked");
|
|
| 1318 |
- $("input[name=addrCheck]:checkbox").prop("checked", isChecked);
|
|
| 660 |
+ var isChecked = $(this).is(":checked");
|
|
| 661 |
+ $("input[name=addrCheck]:checkbox").prop("checked", isChecked);
|
|
| 1319 | 662 |
}); |
| 1320 | 663 |
|
| 1321 | 664 |
$(document).on("click", "#duplicationChkAll", function(e) {
|
| 1322 |
- var isChecked = $(this).is(":checked");
|
|
| 1323 |
- $("input[name=addrCheck]:checkbox").prop("checked", isChecked);
|
|
| 665 |
+ var isChecked = $(this).is(":checked");
|
|
| 666 |
+ $("input[name=addrCheck]:checkbox").prop("checked", isChecked);
|
|
| 1324 | 667 |
}); |
| 1325 | 668 |
|
| 1326 | 669 |
//팝업 텍스트 더보기 클릭 시 펼쳐지고 숨겨짐 |
... | ... | @@ -1344,31 +687,6 @@ |
| 1344 | 687 |
window.open("about:blank", 'infoPop', 'width=790, height=430, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
|
| 1345 | 688 |
document.popForm.target = "infoPop"; |
| 1346 | 689 |
document.popForm.submit(); |
| 1347 |
-} |
|
| 1348 |
- |
|
| 1349 |
-// 주소록 대량등록 |
|
| 1350 |
-function addrMassTab(tabIdx) {
|
|
| 1351 |
- if (tabIdx == 2) {
|
|
| 1352 |
- // 붙여넣기 |
|
| 1353 |
- $(".upload_area").hide();
|
|
| 1354 |
- $(".excel_btn2").hide();
|
|
| 1355 |
- $(".req_area").show();
|
|
| 1356 |
- } |
|
| 1357 |
- else {
|
|
| 1358 |
- $(".upload_area").show();
|
|
| 1359 |
- $(".excel_btn2").show();
|
|
| 1360 |
- $(".req_area").hide();
|
|
| 1361 |
- } |
|
| 1362 |
-} |
|
| 1363 |
- |
|
| 1364 |
- |
|
| 1365 |
-function linkPage2(pageNo){
|
|
| 1366 |
- var searchForm = document.searchAddrDupliForm; |
|
| 1367 |
- searchForm.pageIndex.value = pageNo; |
|
| 1368 |
- searchForm.pageUnit.value = 10; |
|
| 1369 |
- |
|
| 1370 |
- var sendData = $(document.searchAddrDupliForm).serializeArray(); |
|
| 1371 |
- $("#duplication_layer").load("/web/mjon/addr/selectAddrDupliAjax.do", sendData, function(response, status, xhr){});
|
|
| 1372 | 690 |
} |
| 1373 | 691 |
|
| 1374 | 692 |
// 중복 연락처 |
... | ... | @@ -1423,6 +741,14 @@ |
| 1423 | 741 |
$("#addrMassSaveDupli_layer").html(sHtml);
|
| 1424 | 742 |
} |
| 1425 | 743 |
|
| 744 |
+ |
|
| 745 |
+// function fn_tabToggle('1')
|
|
| 746 |
+function fn_tabToggle(tabNum){
|
|
| 747 |
+ var tabId = '#tab'+tabNum; |
|
| 748 |
+ $('.tab_c').hide();
|
|
| 749 |
+ $(tabId).show(); |
|
| 750 |
+} |
|
| 751 |
+ |
|
| 1426 | 752 |
</script> |
| 1427 | 753 |
|
| 1428 | 754 |
<div class="loading_layer"> |
... | ... | @@ -1431,147 +757,58 @@ |
| 1431 | 757 |
<div class="text">Loading</div> |
| 1432 | 758 |
</div> |
| 1433 | 759 |
</div> |
| 760 |
+ |
|
| 761 |
+<div id="adrPopup_tab1"> |
|
| 762 |
+ |
|
| 1434 | 763 |
<!-- 수신거부 대량등록 data-tooltip:adr_popup01 --> |
| 1435 |
-<form id="addrMassForm" name="addrMassForm" method="post"> |
|
| 1436 |
- <input type="hidden" id="phoneList" name="phoneList" value=""/> |
|
| 1437 |
- <input type="hidden" id="nameList" name="nameList" value=""/> |
|
| 1438 |
- <input type="hidden" id="info1List" name="info1List" value=""/> |
|
| 1439 |
- <input type="hidden" id="info2List" name="info2List" value=""/> |
|
| 1440 |
- <input type="hidden" id="info3List" name="info3List" value=""/> |
|
| 1441 |
- <input type="hidden" id="info4List" name="info4List" value=""/> |
|
| 1442 |
- <input type="hidden" id="memoList" name="memoList" value=""/> |
|
| 1443 |
- <input type="hidden" id="addrGrpId" name="addrGrpId" value=""/> |
|
| 1444 |
- <div class="tooltip-wrap" id="addrMassLoad"> |
|
| 1445 |
- <div class="popup-com adr_layer adr_popup01" tabindex="0" data-tooltip-con="adr_popup01" data-focus="adr_popup01" data-focus-prev="adr_popup01-close" style="width: 1000px;"> |
|
| 1446 |
- <div class="popup_heading"> |
|
| 1447 |
- <p>주소록 대량등록</p> |
|
| 1448 |
- <button type="button" class="tooltip-close" data-focus="adr_popup01-close" onclick="setAddrMassClose();"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> |
|
| 1449 |
- </div> |
|
| 1450 |
- <div class="layer_in" style="padding: 25px 30px;"> |
|
| 1451 |
- <div class="list_tab_wrap2"> |
|
| 1452 |
- <!-- tab button --> |
|
| 1453 |
- <ul class="list_tab"> |
|
| 1454 |
- <li class="tab active"><button type="button" onclick="popupTab(this,'1'); addrMassTab('1');">엑셀입력</button></li>
|
|
| 1455 |
- <li class="tab"><button type="button" onclick="popupTab(this,'2'); addrMassTab('2');">붙여넣기</button></li>
|
|
| 1456 |
- </ul><!--// tab button --> |
|
| 1457 |
- </div> |
|
| 1458 |
- <!-- 엑셀입력 --> |
|
| 1459 |
- <div class="popCont current pop_more_cont" id="popCont_1"> |
|
| 1460 |
- <div class="titBox"> |
|
| 1461 |
- <p>- 엑셀(EXCEL) 파일로 주소록을 한 번에 최대 2만건까지 등록하여 간편하게 발송 및 관리하실 수 있습니다.</p> |
|
| 1462 |
- <p>- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 작성하셔야 합니다.</p> |
|
| 1463 |
- <p> ※ 주소록 관리 메뉴에서 다운로드 받으신 엑셀 파일 또한 업로드 양식에 맞추어 작성하셔야 하며, </p> |
|
| 1464 |
- <p> 주소록에 이미 등록된 휴대폰 번호는 업데이트 되지 않으므로 기존 주소록에서 해당 휴대폰 번호를 삭제한 후 재등록해 주시기 바랍니다.</p> |
|
| 1465 |
- <p>- 쉼표(,), 구분선(|), 역슬래시(\, ₩), 작은따옴표('), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.</p>
|
|
| 1466 |
- <p>- 휴대폰 번호는 필수입력 항목입니다.</p> |
|
| 1467 |
- <p>- 전화번호 형태는 010-1234-5678 또는 01012345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.</p> |
|
| 1468 |
- <p>- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.</p> |
|
| 1469 |
- <p>- 이름 20byte, [*1*]~[*4*] 40byte, 메모 250byte까지 입력 가능합니다.</p> |
|
| 1470 |
- <p>- 첨부가능 파일 : xlsx, xls(최대용량 3MB)</p> |
|
| 1471 |
- <p>- ‘오류 검사’를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다.</p> |
|
| 1472 |
- <p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p> |
|
| 1473 |
- <button type="button" class="excel_btn" onclick="location.href='/download/addr/주소록_대량등록.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button> |
|
| 1474 |
- </div> |
|
| 1475 |
- <div class="pop_more_wrap"> |
|
| 1476 |
- <button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button> |
|
| 1477 |
- </div> |
|
| 1478 |
- </div><!--// 엑셀입력 --> |
|
| 1479 |
- |
|
| 1480 |
- <!-- 붙여넣기 --> |
|
| 1481 |
- <div class="popCont pop_more_cont" id="popCont_2"> |
|
| 1482 |
- <div class="titBox"> |
|
| 1483 |
- <p>- 텍스트(txt) 파일로 작성된 주소록을 등록하실 수 있습니다.</p> |
|
| 1484 |
- <p>- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 붙여 넣으셔야 합니다.</p> |
|
| 1485 |
- <p>- 입력 내용은 (Tab) 또는 (,) 구분하여 입력하여야 합니다.</p> |
|
| 1486 |
- <p>- 한 줄(열)에 주소 한 건만 입력 가능합니다.</p> |
|
| 1487 |
- <p>- 전화번호 형태는 010-1234-5678 또는 01012345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.</p> |
|
| 1488 |
- <p> (예) 홍길동,010-1234-5678 또는 홍길동,01012345678</p> |
|
| 1489 |
- <p>- 한번에 많은 양의 데이터를 입력하시려면 ‘주소록 복사(Ctrl+c) + 붙여넣기(Ctrl+v)’ 또는 ‘엑셀입력’을 이용하세요.</p> |
|
| 1490 |
- <p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p> |
|
| 1491 |
- <button type="button" class="txt_btn" onclick="location.href='/download/addr/주소록_대량등록.zip'"><i></i>TXT샘플 다운로드</button> |
|
| 1492 |
- </div> |
|
| 1493 |
- <div class="pop_more_wrap"> |
|
| 1494 |
- <button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button> |
|
| 1495 |
- </div> |
|
| 1496 |
- </div><!--// 붙여넣기 --> |
|
| 1497 |
- |
|
| 1498 |
- <!-- 공통 --> |
|
| 1499 |
- <div> |
|
| 1500 |
- <table class="layer_tType1"> |
|
| 1501 |
- <caption>엑셀입력 표</caption> |
|
| 1502 |
- <colgroup> |
|
| 1503 |
- <col style="width: 95px"> |
|
| 1504 |
- <col style="width: auto"> |
|
| 1505 |
- </colgroup> |
|
| 1506 |
- <tbody> |
|
| 1507 |
- <tr> |
|
| 1508 |
- <th>그룹 선택</th> |
|
| 1509 |
- <td> |
|
| 1510 |
- <label for="" class="label">그룹 선택</label> |
|
| 1511 |
- <select id="addrGrpIdInfo" name="addrGrpIdInfo"> |
|
| 1512 |
- </select> |
|
| 1513 |
- <label for="" class="label">그룹명 입력</label> |
|
| 1514 |
- <input type="text" id="addrGrpNm" name="addrGrpNm" placeholder="새 그룹명을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'"class="inputLight" style="width: 300px;"> |
|
| 1515 |
- |
|
| 1516 |
- <input type="file" id="excelFile" accept=".xls, .xlsx, .txt" onchange="excelExport(event); return false;" style="display:none"/> |
|
| 1517 |
- <button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button> |
|
| 1518 |
- </td> |
|
| 1519 |
- </tr> |
|
| 1520 |
- </tbody> |
|
| 1521 |
- </table> |
|
| 1522 |
- </div> |
|
| 1523 |
- <div class="file_add upload_area"> |
|
| 1524 |
- <p><img src="/publish/images/content/file_add.png" alt="파일 붙여넣기">마우스로 엑셀, TXT파일을 여기에 끌어다 놓으세요</p> |
|
| 1525 |
- </div> |
|
| 1526 |
- <div class="excel_middle2"> |
|
| 1527 |
- <p> |
|
| 1528 |
- 총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건 |
|
| 1529 |
- |
|
| 1530 |
- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" onclick="GetAddrMassDupli()" id="btnAddrMassDupli">중복번호</button> |
|
| 1531 |
- |
|
| 1532 |
- <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> |
|
| 1533 |
- </p> |
|
| 1534 |
- <button type="button" class="btnType btnType6 addCallToF">번호추가</button> |
|
| 1535 |
- </div> |
|
| 1536 |
- <div class="drag_drop_wrap callList_box"> |
|
| 1537 |
- <img src="/publish/images/content/excel.jpg" style="width: 100%;"> |
|
| 1538 |
- </div> |
|
| 1539 |
- <div class="excel_middle"> |
|
| 1540 |
- <div class="select_btnWrap clearfix"> |
|
| 1541 |
- <div> |
|
| 1542 |
- <button type="button" class="all_del"><i class="remove_img"></i>전체삭제</button> |
|
| 1543 |
- <button type="button" class="select_del"><i class="remove_img"></i>선택삭제</button> |
|
| 1544 |
- <button type="button" class="chkVali_del"><i class="remove_img"></i>오류번호삭제</button> |
|
| 1545 |
- <button type="button" class="check_validity">오류 검사 <i></i></button> |
|
| 1546 |
- <div class="error_hover_cont send_hover_cont addr_hover_cont"> |
|
| 1547 |
- <p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p> |
|
| 1548 |
- <span>(예시) 010-1234-0001(O) / 010-123-0001(X)</span> |
|
| 1549 |
- </div> |
|
| 1550 |
- </div> |
|
| 1551 |
- |
|
| 764 |
+ <form id="addrMassForm" name="addrMassForm" method="post"> |
|
| 765 |
+ <input type="hidden" id="phoneList" name="phoneList" value=""/> |
|
| 766 |
+ <input type="hidden" id="nameList" name="nameList" value=""/> |
|
| 767 |
+ <input type="hidden" id="info1List" name="info1List" value=""/> |
|
| 768 |
+ <input type="hidden" id="info2List" name="info2List" value=""/> |
|
| 769 |
+ <input type="hidden" id="info3List" name="info3List" value=""/> |
|
| 770 |
+ <input type="hidden" id="info4List" name="info4List" value=""/> |
|
| 771 |
+ <input type="hidden" id="memoList" name="memoList" value=""/> |
|
| 772 |
+ <input type="hidden" id="addrGrpId" name="addrGrpId" value=""/> |
|
| 773 |
+ <div class="tooltip-wrap" id="addrMassLoad"> |
|
| 774 |
+ <div class="popup-com adr_layer adr_popup01" tabindex="0" data-tooltip-con="adr_popup01" data-focus="adr_popup01" data-focus-prev="adr_popup01-close" style="width: 1000px;"> |
|
| 775 |
+ <div class="popup_heading"> |
|
| 776 |
+ <p>주소록 대량등록</p> |
|
| 777 |
+ <button type="button" class="tooltip-close" data-focus="adr_popup01-close" onclick="setAddrMassClose();"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> |
|
| 778 |
+ </div> |
|
| 779 |
+ <div class="layer_in" style="padding: 25px 30px;"> |
|
| 780 |
+ <div class="list_tab_wrap2"> |
|
| 781 |
+ <!-- tab button --> |
|
| 782 |
+ <ul class="list_tab" id="tbTabl"> |
|
| 783 |
+ <li class="tab active" data-tabul="tableExcel"><button type="button" onclick="popupTab(this,'1'); fn_tabToggle('1');">엑셀입력</button></li>
|
|
| 784 |
+ <li class="tab" data-tabul="tableClip"><button type="button" onclick="popupTab(this,'2'); fn_tabToggle('2');">붙여넣기</button></li>
|
|
| 785 |
+ <li class="tab" data-tabul="tableSelf"><button type="button" onclick="popupTab(this,'3'); fn_tabToggle('3');">붙여넣기</button></li>
|
|
| 786 |
+ </ul><!--// tab button --> |
|
| 787 |
+ </div> |
|
| 788 |
+ |
|
| 789 |
+ |
|
| 790 |
+ <div id="tab1" class="tab_c"> |
|
| 791 |
+ <%@include file="/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp" %> |
|
| 1552 | 792 |
</div> |
| 1553 |
- </div><!--// 공통 --> |
|
| 1554 |
- |
|
| 1555 |
- <!-- 붙여놓기 설명 --> |
|
| 1556 |
- <div class="req_area"> |
|
| 1557 |
- <div class="text_box"> |
|
| 1558 |
- - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> |
|
| 1559 |
- - 휴대폰 번호는 필수입력 항목입니다.<br> |
|
| 1560 |
- - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> |
|
| 1561 |
- - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> |
|
| 1562 |
- - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. |
|
| 793 |
+ <div id="tab2" class="tab_c" style="display: none;"> |
|
| 794 |
+ <%@include file="/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp" %> |
|
| 1563 | 795 |
</div> |
| 1564 |
- </div> |
|
| 1565 |
- |
|
| 1566 |
- |
|
| 1567 |
- </div> |
|
| 1568 |
- <div class="popup_btn_wrap2" style="margin: 0 auto 30px auto;"> |
|
| 1569 |
- <button type="button" id="btnAddrMassReg">등록</button> |
|
| 1570 |
- <button type="button" id="btnAddrMassClose" class="tooltip-close" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button> |
|
| 1571 |
- </div> |
|
| 796 |
+<!-- <div id="tab3" class="tab_c" style="display: none;"> --> |
|
| 797 |
+ <div id="tab3" class="tab_c" style="display: none;"> |
|
| 798 |
+ <%@include file="/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp" %> |
|
| 799 |
+ </div> |
|
| 800 |
+ |
|
| 801 |
+ <div class="popup_btn_wrap2" style="margin: 0 auto 30px auto;"> |
|
| 802 |
+ <button type="button" id="btnAddrMassReg">등록</button> |
|
| 803 |
+ <button type="button" id="btnAddrMassClose" class="tooltip-close" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button> |
|
| 804 |
+ </div> |
|
| 805 |
+ |
|
| 806 |
+ </div> |
|
| 807 |
+ </div> |
|
| 1572 | 808 |
</div> |
| 1573 |
- </div> |
|
| 1574 |
-</form> |
|
| 809 |
+ </form> |
|
| 810 |
+ |
|
| 811 |
+</div> |
|
| 1575 | 812 |
<!--// 주소록 대량등록 팝업 --> |
| 1576 | 813 |
|
| 1577 | 814 |
<div class="inner"> |
... | ... | @@ -1589,7 +826,7 @@ |
| 1589 | 826 |
<div class="adr_cont current" id="tab5_1"> |
| 1590 | 827 |
<div class="heading"> |
| 1591 | 828 |
<h2>주소록 관리</h2> |
| 1592 |
- <button type="button" class="button info" onclick="infoPop('selectAddrList');">사용안내</button>
|
|
| 829 |
+ <button type="button" class="button info" onclick="infoPop('selectAddrList');">사용안내</button>
|
|
| 1593 | 830 |
</div> |
| 1594 | 831 |
<%--<div class="titBox"> |
| 1595 | 832 |
<p>- 연락처를 그룹별로 분류하여 간편하고 편리하게 관리할 수 있습니다(최대 100,000개까지 등록 가능)</p> |
... | ... | @@ -1614,6 +851,11 @@ |
| 1614 | 851 |
</div><!--// 주소록 관리 - 주소록 관리 --> |
| 1615 | 852 |
</div><!--// send top --> |
| 1616 | 853 |
|
| 854 |
+ |
|
| 855 |
+ |
|
| 856 |
+<!--=================================================================== --> |
|
| 857 |
+ |
|
| 858 |
+ |
|
| 1617 | 859 |
<form name="popForm" id="popForm" method="post"> |
| 1618 | 860 |
<input type="hidden" name="pageType" id="pageType" value=""/> |
| 1619 | 861 |
</form> |
--- src/main/webapp/WEB-INF/jsp/web/addr/AddrList_advcBackup_20240717.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/AddrList_advcBack_20240723.jsp
... | ... | @@ -203,7 +203,9 @@ |
| 203 | 203 |
width:"100%", |
| 204 | 204 |
layout:"fitColumns", |
| 205 | 205 |
//data:tabledata, |
| 206 |
- //autoColumns:true, |
|
| 206 |
+// autoColumns:true, |
|
| 207 |
+ autoColumns:false, |
|
| 208 |
+ |
|
| 207 | 209 |
headerHozAlign:"center", |
| 208 | 210 |
validationMode:"highlight", |
| 209 | 211 |
clipboard:false, |
... | ... | @@ -215,13 +217,20 @@ |
| 215 | 217 |
cell.getRow().toggleSelect(); |
| 216 | 218 |
} |
| 217 | 219 |
}, |
| 218 |
- {title:"이름", hozAlign:"center", field:"name", editor:"input", width:140, validator:["maxLength:12", "string"]},
|
|
| 220 |
+ {title:"A", hozAlign:"center", headerHozAlign: "center", field:"A", editor:"input", width:125, validator:["maxLength:100", "string"]},
|
|
| 221 |
+ {title:"B", hozAlign:"center", headerHozAlign: "center", field:"B", editor:"input", width:125, validator:["maxLength:100", "string"]},
|
|
| 222 |
+ {title:"C", hozAlign:"center", headerHozAlign: "center", field:"C", editor:"input", width:125, validator:["maxLength:100", "string"]},
|
|
| 223 |
+ {title:"D", hozAlign:"center", headerHozAlign: "center", field:"D", editor:"input", width:125, validator:["maxLength:100", "string"]},
|
|
| 224 |
+ {title:"E", hozAlign:"center", headerHozAlign: "center", field:"E", editor:"input", width:125, validator:["maxLength:100", "string"]},
|
|
| 225 |
+ {title:"F", hozAlign:"center", headerHozAlign: "center", field:"F", editor:"input", width:125, validator:["maxLength:100", "string"]},
|
|
| 226 |
+ {title:"G", hozAlign:"center", headerHozAlign: "center", field:"G", editor:"input", width:125, validator:["maxLength:100", "string"]}
|
|
| 227 |
+/* {title:"이름", hozAlign:"center", field:"name", editor:"input", width:140, validator:["maxLength:12", "string"]},
|
|
| 219 | 228 |
{title:"휴대폰", hozAlign:"center", field:"phone", editor:"input", width:145, validator:["required","minLength:10", "maxLength:13"]},
|
| 220 | 229 |
{title:"[*1*]", hozAlign:"center", field:"info1", editor:"input", width:100, validator:["maxLength:100", "string"]},
|
| 221 | 230 |
{title:"[*2*]", hozAlign:"center", field:"info2", editor:"input", width:100, validator:["maxLength:100", "string"]},
|
| 222 | 231 |
{title:"[*3*]", hozAlign:"center", field:"info3", editor:"input", width:100, validator:["maxLength:100", "string"]},
|
| 223 | 232 |
{title:"[*4*]", hozAlign:"center", field:"info4", editor:"input", width:100, validator:["maxLength:100", "string"]},
|
| 224 |
- {title:"메모", hozAlign:"center", field:"memo", editor:"input", width:119, validator:["maxLength:100", "string"]}
|
|
| 233 |
+ {title:"메모", hozAlign:"center", field:"memo", editor:"input", width:119, validator:["maxLength:100", "string"]} */
|
|
| 225 | 234 |
], |
| 226 | 235 |
validationFailed:function(cell, value, parameters){ // 유효성 체크 함수
|
| 227 | 236 |
var valid = cell.isValid(); |
... | ... | @@ -235,138 +244,139 @@ |
| 235 | 244 |
}, |
| 236 | 245 |
}); |
| 237 | 246 |
|
| 247 |
+ $(".field-selector").on("change", function() {
|
|
| 248 |
+ |
|
| 249 |
+ |
|
| 250 |
+ var selectedFields = []; |
|
| 251 |
+ var isDuplicate = false; |
|
| 252 |
+ $(".field-selector").each(function() {
|
|
| 253 |
+ var selectedField = $(this).val(); |
|
| 254 |
+ if (selectedField) {
|
|
| 255 |
+ if (selectedFields.includes(selectedField)) {
|
|
| 256 |
+ alert("중복된 필드를 선택할 수 없습니다.");
|
|
| 257 |
+ $(this).val(""); // 중복 필드를 선택한 경우 빈 값으로 초기화
|
|
| 258 |
+ isDuplicate = true; |
|
| 259 |
+ return false; // 반복문 종료 |
|
| 260 |
+ } |
|
| 261 |
+ selectedFields.push(selectedField); |
|
| 262 |
+ } |
|
| 263 |
+ }); |
|
| 264 |
+ console.log('!! : ', $(this).val() == 'phone');
|
|
| 265 |
+ updateTableFields(); |
|
| 266 |
+ |
|
| 267 |
+ if($(this).val() == 'phone'){
|
|
| 268 |
+ fn_phoneDupl(); |
|
| 269 |
+ } |
|
| 270 |
+ }); |
|
| 271 |
+ // 파일 선택 버튼 클릭 이벤트 |
|
| 272 |
+ $("#file-load-trigger").on("click", function() {
|
|
| 273 |
+ $("#excelFile").click();
|
|
| 274 |
+ }); |
|
| 275 |
+ |
|
| 276 |
+ // 파일 입력 이벤트 |
|
| 277 |
+ $("#excelFile").on("change", function(event) {
|
|
| 278 |
+ excelFileChange(event.target.files[0]); |
|
| 279 |
+ }); |
|
| 280 |
+ |
|
| 281 |
+ |
|
| 282 |
+ |
|
| 238 | 283 |
//받는 사람 리스트 영역에 클립보드 데이터 가져와보기 |
| 284 |
+ // 붙여넣기 기능 |
|
| 239 | 285 |
$('.callList_box').on('paste', function (e) {
|
| 240 | 286 |
var element = e.originalEvent.clipboardData.getData('text'); // 클립보드에 복사한 데이터 가져오기
|
| 241 | 287 |
var elmSplit= []; |
| 242 | 288 |
elmSplit = element.split("\n");
|
| 243 | 289 |
var elmLen = elmSplit.length; |
| 290 |
+ console.log('elmSplit : ', elmSplit);
|
|
| 244 | 291 |
if(elmLen < 0){
|
| 245 | 292 |
alert("붙여넣을 연락처를 복사해주세요.");
|
| 246 | 293 |
return false; |
| 247 |
- }else{
|
|
| 248 |
- if (elmLen > 20001) {
|
|
| 249 |
- alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
|
| 250 |
- return false; |
|
| 251 |
- } |
|
| 252 |
- |
|
| 253 |
- tableErrorData.length = 0; // 오류 번호 배열 초기화 |
|
| 294 |
+ } |
|
| 295 |
+ if (elmLen > 20001) {
|
|
| 296 |
+ alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
|
| 297 |
+ return false; |
|
| 298 |
+ } |
|
| 299 |
+ |
|
| 300 |
+ tableErrorData.length = 0; // 오류 번호 배열 초기화 |
|
| 254 | 301 |
|
| 255 |
- var splitData = []; |
|
| 256 |
- var realPhone = []; |
|
| 257 |
- for(var i=0; i < elmLen; i++){
|
|
| 258 |
- var splitStr = elmSplit[i]; |
|
| 259 |
- var tabData = splitStr.split("\t"); //탭 구분으로 데이터 분할
|
|
| 260 |
- var comData = splitStr.split(","); //콤마 구분으로 데이터 분할
|
|
| 261 |
- if(tabData.length >= 2){
|
|
| 262 |
- splitData = tabData; |
|
| 263 |
- }else{
|
|
| 264 |
- splitData = comData; |
|
| 265 |
- } |
|
| 302 |
+ var splitData = []; |
|
| 303 |
+ var realPhone = []; |
|
| 304 |
+ |
|
| 305 |
+ for(var i=0; i < elmLen; i++){
|
|
| 306 |
+ var splitStr = elmSplit[i]; |
|
| 307 |
+ var tabData = splitStr.split("\t"); //탭 구분으로 데이터 분할
|
|
| 308 |
+ var comData = splitStr.split(","); //콤마 구분으로 데이터 분할
|
|
| 309 |
+ if(tabData.length >= 2){
|
|
| 310 |
+ splitData = tabData; |
|
| 311 |
+ }else{
|
|
| 312 |
+ splitData = comData; |
|
| 313 |
+ } |
|
| 266 | 314 |
|
| 267 |
- if(splitData.length == 0){// 데이터가 없는경우
|
|
| 268 |
- alert("탭으로 구분하여 데이터를 복사해 주세요.");
|
|
| 269 |
- return false; |
|
| 270 |
- }else if(splitData.length == 1){// 데이터가 탭으로 구분이 없는 경우
|
|
| 271 |
- for(var j=0; j < splitData.length; j++){
|
|
| 272 |
- if(checkHpNum(splitData[j].trim())){//핸드폰 양식이 맞는지 확인
|
|
| 273 |
- //배열 끝에 데이터 추가해 주기 |
|
| 274 |
- realPhone.push({name: "", phone: removeDash(splitData[j].trim())});
|
|
| 275 |
- } |
|
| 276 |
- else {
|
|
| 277 |
- if (splitData[j].trim() != '' && splitData[j].trim() != null && splitData[j].trim() != undefined) {
|
|
| 278 |
- tableErrorData.push(splitData[j].trim()); |
|
| 279 |
- } |
|
| 280 |
- } |
|
| 281 |
- } |
|
| 282 |
- }else{//데이터가 탭으로 구분되어 이름, 연락처로 구분된 경우
|
|
| 283 |
- var name; //이름 |
|
| 284 |
- var phone; //핸드폰번호 |
|
| 285 |
- var info1; |
|
| 286 |
- var info2; |
|
| 287 |
- var info3; |
|
| 288 |
- var info4; |
|
| 289 |
- var memo; //메모 |
|
| 290 |
- var isPhoneValid = false; |
|
| 291 |
- for(var j=0; j < splitData.length; j++){
|
|
| 292 |
- if(j == 0){
|
|
| 293 |
- name = splitData[j].trim(); |
|
| 294 |
- } |
|
| 295 |
- if(j == 1){
|
|
| 296 |
- if(checkHpNum(splitData[j].trim())){//핸드폰 양식이 맞는지 확인
|
|
| 297 |
- phone = removeDash(splitData[j].trim()); |
|
| 298 |
- isPhoneValid = true; |
|
| 299 |
- } |
|
| 300 |
- else {
|
|
| 301 |
- if (splitData[j].trim() != '' && splitData[j].trim() != null && splitData[j].trim() != undefined) {
|
|
| 302 |
- tableErrorData.push(splitData[j].trim()); |
|
| 303 |
- } |
|
| 304 |
- } |
|
| 305 |
- } |
|
| 306 |
- |
|
| 307 |
- if(j == 2){
|
|
| 308 |
- info1 = splitData[j].trim(); |
|
| 309 |
- } |
|
| 310 |
- if(j == 3){
|
|
| 311 |
- info2 = splitData[j].trim(); |
|
| 312 |
- } |
|
| 313 |
- if(j == 4){
|
|
| 314 |
- info3 = splitData[j].trim(); |
|
| 315 |
- } |
|
| 316 |
- if(j == 5){
|
|
| 317 |
- info4 = splitData[j].trim(); |
|
| 318 |
- } |
|
| 319 |
- |
|
| 320 |
- if(j == 6){ //메모
|
|
| 321 |
- memo = splitData[j].trim(); |
|
| 322 |
- } |
|
| 323 |
- } |
|
| 324 |
- |
|
| 325 |
- if (isPhoneValid == true) {
|
|
| 326 |
- //배열 끝에 데이터 추가해 주기 |
|
| 327 |
- realPhone.push({name: name, phone: phone, info1 : info1, info2 : info2, info3 : info3, info4 : info4, memo : memo });
|
|
| 328 |
- } |
|
| 329 |
- }//else end |
|
| 315 |
+ if(splitData.length == 0){// 데이터가 없는경우
|
|
| 316 |
+ alert("탭으로 구분하여 데이터를 복사해 주세요.");
|
|
| 317 |
+ return false; |
|
| 330 | 318 |
} |
| 331 | 319 |
|
| 332 |
- var recTableData = tableR.getRows(); // 받는사람 리스트의 전체 목록을 저장 |
|
| 333 |
- var tableData = []; |
|
| 334 | 320 |
|
| 335 |
- //기존 받는사람 리스트를 배열에 미리 담아둔다. |
|
| 336 |
- if(recTableData.length > 0){
|
|
| 337 |
- for(var j=0; j < recTableData.length; j++){
|
|
| 338 |
- tableData.push({name: recTableData[j].getData().name, phone: removeDash(recTableData[j].getData().phone.trim()), info1: recTableData[j].getData().info1, info2: recTableData[j].getData().info2, info3: recTableData[j].getData().info3, info4: recTableData[j].getData().info4, memo: recTableData[j].getData().memo});
|
|
| 339 |
- } |
|
| 340 |
- } |
|
| 341 |
- |
|
| 342 |
- if(realPhone.length > 0){
|
|
| 343 |
- for(var j=0; j < realPhone.length; j++){
|
|
| 344 |
- tableData.push({name: realPhone[j].name, phone: removeDash(realPhone[j].phone.trim()), info1: realPhone[j].info1, info2: realPhone[j].info2, info3: realPhone[j].info3, info4: realPhone[j].info4, memo: realPhone[j].memo});
|
|
| 345 |
- } |
|
| 346 |
- } |
|
| 347 |
- |
|
| 348 |
- //tableData.push(realPhone); |
|
| 321 |
+ if(splitData.length == 1){
|
|
| 322 |
+ realPhone.push({A: splitData[0].trim()});
|
|
| 323 |
+ }else{
|
|
| 349 | 324 |
|
| 350 |
- //중복 연락처 1개만 남기고 삭제하기 |
|
| 351 |
- var removeDuplPhone = dupliPhoneData(tableData); |
|
| 352 |
- |
|
| 353 |
- //수신자 리스트에 전화번호 추가해주기 |
|
| 354 |
- //tableR.addData(removeDuplPhone); |
|
| 355 |
- tableR.setData(removeDuplPhone); |
|
| 325 |
+ let keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; |
|
| 326 |
+ let data = {};
|
|
| 327 |
+ |
|
| 328 |
+ splitData.forEach((item, index) => {
|
|
| 329 |
+ data[keys[index]] = item.trim(); |
|
| 330 |
+ }); |
|
| 331 |
+ |
|
| 332 |
+ realPhone.push(data); |
|
| 333 |
+ }//else end |
|
| 334 |
+ } |
|
| 335 |
+ console.log('realPhone : ', realPhone);
|
|
| 336 |
+ var recTableData = tableR.getRows(); // 받는사람 리스트의 전체 목록을 저장 |
|
| 337 |
+ var tableData = []; |
|
| 338 |
+ |
|
| 339 |
+ //기존 받는사람 리스트를 배열에 미리 담아둔다. |
|
| 340 |
+ if (recTableData.length > 0) {
|
|
| 341 |
+ recTableData.forEach(item => {
|
|
| 342 |
+ tableData.push(createDataObject(item.getData())); |
|
| 343 |
+ }); |
|
| 344 |
+ } |
|
| 356 | 345 |
|
| 357 |
- totRows = tableR.getRows().length; |
|
| 358 |
- updateTotCnt(totRows); //전체 데이터 갯수 구하기 |
|
| 346 |
+ if (realPhone.length > 0) {
|
|
| 347 |
+ realPhone.forEach(item => {
|
|
| 348 |
+ tableData.push(createDataObject(item)); |
|
| 349 |
+ }); |
|
| 350 |
+ } |
|
| 359 | 351 |
|
| 360 |
- if (tableErrorData.length > 0) {
|
|
| 361 |
- alert("올바르지 않은 휴대폰 번호가 "+ tableErrorData.length +" 건 있습니다.");
|
|
| 362 |
- //for(var x=0; x < tableErrorData.length; x++){
|
|
| 363 |
- // alert(tableErrorData[x]); |
|
| 364 |
- //} |
|
| 365 |
- } |
|
| 352 |
+ //tableData.push(realPhone); |
|
| 353 |
+ |
|
| 354 |
+ //중복 연락처 1개만 남기고 삭제하기 |
|
| 355 |
+ // 20240719 개선작업은 폰위치가 따로없어 중복제거를 못함 |
|
| 356 |
+// var removeDuplPhone = dupliPhoneData(tableData); |
|
| 357 |
+ var removeDuplPhone = tableData; |
|
| 358 |
+ |
|
| 359 |
+ //수신자 리스트에 전화번호 추가해주기 |
|
| 360 |
+ //tableR.addData(removeDuplPhone); |
|
| 361 |
+ tableR.setData(removeDuplPhone); |
|
| 362 |
+ |
|
| 363 |
+ totRows = tableR.getRows().length; |
|
| 364 |
+ updateTotCnt(totRows); //전체 데이터 갯수 구하기 |
|
| 365 |
+ |
|
| 366 |
+ if (tableErrorData.length > 0) {
|
|
| 367 |
+ alert("데이터를 확인해 주세요.");
|
|
| 368 |
+ // alert("올바르지 않은 휴대폰 번호가 "+ tableErrorData.length +" 건 있습니다.");
|
|
| 369 |
+ //for(var x=0; x < tableErrorData.length; x++){
|
|
| 370 |
+ // alert(tableErrorData[x]); |
|
| 371 |
+ //} |
|
| 366 | 372 |
} |
| 367 | 373 |
}); |
| 368 | 374 |
|
| 375 |
+ |
|
| 369 | 376 |
//tableR.setData(tabledata); |
| 377 |
+ |
|
| 378 |
+ |
|
| 379 |
+ |
|
| 370 | 380 |
|
| 371 | 381 |
//받는사람 번호 버튼 클릭시 Tabulator에 데이터 넣어주기 |
| 372 | 382 |
$('.addCallToF').click(function(){
|
... | ... | @@ -447,6 +457,8 @@ |
| 447 | 457 |
if(totLen > 0){
|
| 448 | 458 |
if(confirm("올바르지 않은 연락처 정보를 삭제 하시겠습니까?")){
|
| 449 | 459 |
for(var i=0; i < totLen; i++){
|
| 460 |
+ |
|
| 461 |
+ |
|
| 450 | 462 |
var phone = data[i].getData().phone; |
| 451 | 463 |
var valiCheck = checkHpNum(phone); |
| 452 | 464 |
if(valiCheck){
|
... | ... | @@ -476,8 +488,84 @@ |
| 476 | 488 |
return false; |
| 477 | 489 |
} |
| 478 | 490 |
}); |
| 491 |
+ |
|
| 492 |
+ |
|
| 493 |
+ // 필드 선택 이벤트 핸들러 |
|
| 494 |
+ $("#column-selector").on("change", function() {
|
|
| 495 |
+ let selectedField = $(this).val(); |
|
| 496 |
+ let newValue = prompt("새 값을 입력하세요:");
|
|
| 497 |
+ if (newValue !== null) {
|
|
| 498 |
+ updateTableField(selectedField, newValue); |
|
| 499 |
+ } |
|
| 500 |
+ }); |
|
| 501 |
+ |
|
| 502 |
+ function updateTableFields() {
|
|
| 503 |
+ var currentData = tableR.getData(); |
|
| 504 |
+ var columns = [ |
|
| 505 |
+ {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
|
| 506 |
+ cell.getRow().toggleSelect(); |
|
| 507 |
+ }} |
|
| 508 |
+ ]; |
|
| 509 |
+ |
|
| 510 |
+ var fieldMapping = []; |
|
| 511 |
+ $(".field-selector").each(function(index) {
|
|
| 512 |
+ var selectedField = $(this).val(); |
|
| 513 |
+ // ASCII 문자 코드 사용 - 65=A, 66=B ... |
|
| 514 |
+ var field = String.fromCharCode(65 + index); |
|
| 515 |
+ if (selectedField) {
|
|
| 516 |
+ columns.push({title: field, field: selectedField, hozAlign: "center", headerHozAlign: "center", editor: "input", width: 125, validator: ["maxLength:100", "string"]});
|
|
| 517 |
+ fieldMapping.push(selectedField); |
|
| 518 |
+ } else {
|
|
| 519 |
+ columns.push({title: field, field: field, hozAlign: "center", headerHozAlign: "center", editor: "input", width: 125, validator: ["maxLength:100", "string"]});
|
|
| 520 |
+ fieldMapping.push(field); |
|
| 521 |
+ } |
|
| 522 |
+ }); |
|
| 523 |
+ |
|
| 524 |
+ var updatedData = currentData.map(row => {
|
|
| 525 |
+ var newRow = {};
|
|
| 526 |
+ fieldMapping.forEach((field, index) => {
|
|
| 527 |
+ newRow[field] = row[Object.keys(row)[index]] || ""; |
|
| 528 |
+ }); |
|
| 529 |
+ return newRow; |
|
| 530 |
+ }); |
|
| 531 |
+ |
|
| 532 |
+ tableR.setColumns(columns); |
|
| 533 |
+ tableR.setData(updatedData); |
|
| 534 |
+ } |
|
| 479 | 535 |
|
| 480 | 536 |
|
| 537 |
+ |
|
| 538 |
+ |
|
| 539 |
+ function fn_phoneDupl(){
|
|
| 540 |
+ |
|
| 541 |
+ var phoneFields = tableR.getData().map(row => row.phone); |
|
| 542 |
+ |
|
| 543 |
+// if (phoneFields.length === 0) {
|
|
| 544 |
+// alert("타이틀을 선택해 주세요");
|
|
| 545 |
+// return; |
|
| 546 |
+// } |
|
| 547 |
+ |
|
| 548 |
+ var uniquePhones = new Set(); |
|
| 549 |
+ var duplicatePhones = []; |
|
| 550 |
+ |
|
| 551 |
+ phoneFields.forEach(phone => {
|
|
| 552 |
+ if (uniquePhones.has(phone)) {
|
|
| 553 |
+ duplicatePhones.push(phone); |
|
| 554 |
+ } else {
|
|
| 555 |
+ uniquePhones.add(phone); |
|
| 556 |
+ } |
|
| 557 |
+ }); |
|
| 558 |
+ |
|
| 559 |
+ $('#rowDupCnt').text(duplicatePhones.length);
|
|
| 560 |
+ if (duplicatePhones.length > 0) {
|
|
| 561 |
+ alert("중복된 phone 필드 값이 있습니다: " + duplicatePhones.join(", "));
|
|
| 562 |
+ } else {
|
|
| 563 |
+ alert("중복된 phone 필드 값이 없습니다.");
|
|
| 564 |
+ } |
|
| 565 |
+ } |
|
| 566 |
+ |
|
| 567 |
+ |
|
| 568 |
+ |
|
| 481 | 569 |
// 오류검사 항목 중복제거 |
| 482 | 570 |
function SetTableErrorDupliCheck(sVal) {
|
| 483 | 571 |
var isDuplicate = false; |
... | ... | @@ -626,33 +714,43 @@ |
| 626 | 714 |
} |
| 627 | 715 |
|
| 628 | 716 |
function addPhoneInfo(data){
|
| 717 |
+ console.log('data : ', data);
|
|
| 629 | 718 |
if(data == null){
|
| 630 | 719 |
alert("연락처 정보가 없습니다.");
|
| 631 | 720 |
return; |
| 632 | 721 |
}else{
|
| 633 | 722 |
var idx = 0; |
| 634 |
- var newData = data;//중복 연락처는 하나만 남기고 모두 제거 |
|
| 723 |
+ var newData = data; |
|
| 635 | 724 |
|
| 636 | 725 |
var recTableData = tableR.getRows(); // 받는사람 리스트의 전체 목록을 저장 |
| 637 | 726 |
var tableData = []; |
| 638 | 727 |
|
| 639 | 728 |
//기존 받는사람 리스트를 배열에 미리 담아둔다. |
| 640 | 729 |
if(recTableData.length > 0){
|
| 641 |
- for(var j=0; j < recTableData.length; j++){
|
|
| 642 |
- tableData.push({name: recTableData[j].getData().name, phone: removeDash(recTableData[j].getData().phone.trim()), info1: recTableData[j].getData().info1, info2: recTableData[j].getData().info2, info3: recTableData[j].getData().info3, info4: recTableData[j].getData().info4, memo: recTableData[j].getData().memo});
|
|
| 643 |
- } |
|
| 730 |
+// for(var j=0; j < recTableData.length; j++){
|
|
| 731 |
+// tableData.push({name: recTableData[j].getData().name, phone: removeDash(recTableData[j].getData().phone.trim()), info1: recTableData[j].getData().info1, info2: recTableData[j].getData().info2, info3: recTableData[j].getData().info3, info4: recTableData[j].getData().info4, memo: recTableData[j].getData().memo});
|
|
| 732 |
+// } |
|
| 733 |
+ |
|
| 734 |
+ recTableData.forEach(item => {
|
|
| 735 |
+ tableData.push(createDataObject(item.getData())); |
|
| 736 |
+ }); |
|
| 737 |
+ |
|
| 644 | 738 |
} |
| 645 | 739 |
|
| 646 | 740 |
//받는사람 리스트를 담아둔 배열에 신규 추가 데이터를 추가해 준다. |
| 647 |
- for(var i=0; i < newData.length; i++){
|
|
| 648 |
- tableData.push({name: newData[i].name.trim(), phone: removeDash(newData[i].phone.trim()), info1: newData[i].info1, info2: newData[i].info2, info3: newData[i].info3, info4: newData[i].info4, memo: newData[i].memo});
|
|
| 649 |
- } |
|
| 741 |
+// for(var i=0; i < newData.length; i++){
|
|
| 742 |
+// tableData.push({name: newData[i].name.trim(), phone: removeDash(newData[i].phone.trim()), info1: newData[i].info1, info2: newData[i].info2, info3: newData[i].info3, info4: newData[i].info4, memo: newData[i].memo});
|
|
| 743 |
+// } |
|
| 744 |
+ newData.forEach(item => {
|
|
| 745 |
+ tableData.push(createDataObject(item)); |
|
| 746 |
+ }); |
|
| 650 | 747 |
|
| 651 | 748 |
var temp = tableData.length; |
| 652 | 749 |
|
| 653 | 750 |
//기존 수신 리스트를 지워준 후 신규 전체 리스트를 추가해준다. |
| 654 | 751 |
tableR.clearData(); //기존 받는사람 목록을 삭제. |
| 655 |
- tableR.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기 |
|
| 752 |
+// tableR.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기 |
|
| 753 |
+ tableR.addData(tableData); // 받는사람 목록에 주소 정보 입력하기 |
|
| 656 | 754 |
_fileForm2 = []; //form file data 초기화 |
| 657 | 755 |
_fileIdx = 0; //form file idx 초기화 |
| 658 | 756 |
|
... | ... | @@ -661,18 +759,30 @@ |
| 661 | 759 |
} |
| 662 | 760 |
} |
| 663 | 761 |
|
| 664 |
-/* 파일사이즈 가져오기 */ |
|
| 665 |
-function getStrFileSize(filesize){
|
|
| 666 |
- var sizeStr=""; |
|
| 667 |
- var sizeKB = filesize/1024; |
|
| 668 |
- if(parseInt(sizeKB) > 1024){
|
|
| 669 |
- var sizeMB = sizeKB/1024; |
|
| 670 |
- sizeStr = sizeMB.toFixed(2)+" MB"; |
|
| 671 |
- }else{
|
|
| 672 |
- sizeStr = sizeKB.toFixed(2)+" KB"; |
|
| 673 |
- } |
|
| 674 |
- return sizeStr; |
|
| 762 |
+// 데이터 객체를 생성하는 함수 |
|
| 763 |
+function createDataObject(data) {
|
|
| 764 |
+ return {
|
|
| 765 |
+ A: data.A, |
|
| 766 |
+ B: data.B, |
|
| 767 |
+ C: data.C, |
|
| 768 |
+ D: data.D, |
|
| 769 |
+ E: data.E, |
|
| 770 |
+ F: data.F, |
|
| 771 |
+ G: data.G |
|
| 772 |
+ }; |
|
| 675 | 773 |
} |
| 774 |
+/* 파일사이즈 가져오기 */ |
|
| 775 |
+// function getStrFileSize(filesize){
|
|
| 776 |
+// var sizeStr=""; |
|
| 777 |
+// var sizeKB = filesize/1024; |
|
| 778 |
+// if(parseInt(sizeKB) > 1024){
|
|
| 779 |
+// var sizeMB = sizeKB/1024; |
|
| 780 |
+// sizeStr = sizeMB.toFixed(2)+" MB"; |
|
| 781 |
+// }else{
|
|
| 782 |
+// sizeStr = sizeKB.toFixed(2)+" KB"; |
|
| 783 |
+// } |
|
| 784 |
+// return sizeStr; |
|
| 785 |
+// } |
|
| 676 | 786 |
|
| 677 | 787 |
//############################################################################################# |
| 678 | 788 |
//파일업로드 드래그앤 드롭 |
... | ... | @@ -691,7 +801,8 @@ |
| 691 | 801 |
//$(this).css('border', '2px dotted #0B85A1');
|
| 692 | 802 |
e.preventDefault(); |
| 693 | 803 |
var files = e.originalEvent.dataTransfer.files; |
| 694 |
- handleFileUpload(files,objDragAndDrop); //파일업로드 |
|
| 804 |
+// handleFileUpload(files,objDragAndDrop); //파일업로드 |
|
| 805 |
+ excelFileChange(files[0]); |
|
| 695 | 806 |
}); |
| 696 | 807 |
|
| 697 | 808 |
$(document).on('dragenter', function (e){
|
... | ... | @@ -709,141 +820,197 @@ |
| 709 | 820 |
}); |
| 710 | 821 |
//파일 드래그앤드롭 종료 |
| 711 | 822 |
|
| 712 |
-function handleFileUpload(files,obj) //업로드 function |
|
| 713 |
-{
|
|
| 714 |
- _fileForm2 = []; //form file data 초기화 |
|
| 715 |
- |
|
| 716 |
- var limitsize = 50*1024*1024; //파일 제한 체크(50개, 50MB) |
|
| 717 |
- var limitcount = 1;//$("input[name=limitcount]").val()*1 ;
|
|
| 718 |
- var fileNece = true; //첨부파일필수 |
|
| 719 |
- |
|
| 720 |
- |
|
| 721 |
- if($('#fileNece').length > 0){
|
|
| 722 |
- if('N'==$('#fileNece').val()){
|
|
| 723 |
- fileNece = false; |
|
| 724 |
- } |
|
| 725 |
- } |
|
| 726 |
- |
|
| 727 |
- //엑셀 및 TXT 파일만 업로드 할수 있도록 체크하기 |
|
| 728 |
- var fileNm = files[0].name; |
|
| 729 |
- fileExt = fileNm.split('.').pop().toLowerCase();
|
|
| 730 | 823 |
|
| 731 |
- // IE11 대응 |
|
| 732 |
- if (fileExt != "") {
|
|
| 733 |
- if($.inArray(fileExt, ['txt','xls','xlsx']) == -1) {
|
|
| 734 |
- alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
|
| 735 |
- return; |
|
| 736 |
- } |
|
| 824 |
+ function excelFileChange(file){
|
|
| 825 |
+ |
|
| 826 |
+// var file = event.target.files[0]; |
|
| 827 |
+ if (file) {
|
|
| 828 |
+ var reader = new FileReader(); |
|
| 829 |
+ reader.onload = function(e) {
|
|
| 830 |
+ var data = new Uint8Array(e.target.result); |
|
| 831 |
+ var workbook = XLSX.read(data, {type: 'array'});
|
|
| 832 |
+ var firstSheet = workbook.Sheets[workbook.SheetNames[0]]; |
|
| 833 |
+ var jsonData = XLSX.utils.sheet_to_json(firstSheet, {header: 1});
|
|
| 834 |
+ processExcelData(jsonData); |
|
| 835 |
+ }; |
|
| 836 |
+ reader.readAsArrayBuffer(file); |
|
| 837 |
+ } |
|
| 838 |
+ } |
|
| 839 |
+ |
|
| 840 |
+ // 엑셀 데이터 처리 함수 |
|
| 841 |
+ function processExcelData(data) {
|
|
| 842 |
+ console.log('>>???');
|
|
| 843 |
+ var keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; |
|
| 844 |
+ var tableData = []; |
|
| 845 |
+ |
|
| 846 |
+ // 3번째 행부터 입력 |
|
| 847 |
+ // 1,2행은 예시와 타이틀이라 입력안함 |
|
| 848 |
+ data.slice(2).forEach(row => {
|
|
| 849 |
+ var rowData = {};
|
|
| 850 |
+ keys.forEach((key, index) => {
|
|
| 851 |
+ rowData[key] = row[index] ? row[index].trim() : ""; // 각 컬럼에 대해 기본값을 설정 |
|
| 852 |
+ }); |
|
| 853 |
+ tableData.push(rowData); |
|
| 854 |
+ }); |
|
| 855 |
+ |
|
| 856 |
+ |
|
| 857 |
+ tableR.setColumns([ // 열 정의를 다시 설정 |
|
| 858 |
+ {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
|
| 859 |
+ cell.getRow().toggleSelect(); |
|
| 860 |
+ }}, |
|
| 861 |
+ {title: "A", hozAlign: "center", headerHozAlign: "center", field: "A", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 862 |
+ {title: "B", hozAlign: "center", headerHozAlign: "center", field: "B", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 863 |
+ {title: "C", hozAlign: "center", headerHozAlign: "center", field: "C", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 864 |
+ {title: "D", hozAlign: "center", headerHozAlign: "center", field: "D", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 865 |
+ {title: "E", hozAlign: "center", headerHozAlign: "center", field: "E", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 866 |
+ {title: "F", hozAlign: "center", headerHozAlign: "center", field: "F", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 867 |
+ {title: "G", hozAlign: "center", headerHozAlign: "center", field: "G", editor: "input", width: 125, validator: ["maxLength:100", "string"]}
|
|
| 868 |
+ ]); |
|
| 869 |
+ |
|
| 870 |
+ tableR.setData(tableData).then(() => {
|
|
| 871 |
+ // rowTotCnt 업데이트 |
|
| 872 |
+ document.getElementById("rowTotCnt").innerText = tableData.length;
|
|
| 873 |
+ }); |
|
| 874 |
+ } |
|
| 875 |
+ |
|
| 876 |
+ |
|
| 877 |
+ |
|
| 878 |
+ |
|
| 879 |
+// function handleFileUpload(files,obj) //업로드 function |
|
| 880 |
+// {
|
|
| 881 |
+// _fileForm2 = []; //form file data 초기화 |
|
| 882 |
+ |
|
| 883 |
+// var limitsize = 50*1024*1024; //파일 제한 체크(50개, 50MB) |
|
| 884 |
+// var limitcount = 1;//$("input[name=limitcount]").val()*1 ;
|
|
| 885 |
+// var fileNece = true; //첨부파일필수 |
|
| 886 |
+ |
|
| 887 |
+ |
|
| 888 |
+// if($('#fileNece').length > 0){
|
|
| 889 |
+// if('N'==$('#fileNece').val()){
|
|
| 890 |
+// fileNece = false; |
|
| 891 |
+// } |
|
| 892 |
+// } |
|
| 893 |
+ |
|
| 894 |
+// //엑셀 및 TXT 파일만 업로드 할수 있도록 체크하기 |
|
| 895 |
+// var fileNm = files[0].name; |
|
| 896 |
+// fileExt = fileNm.split('.').pop().toLowerCase();
|
|
| 897 |
+ |
|
| 898 |
+// // IE11 대응 |
|
| 899 |
+// if (fileExt != "") {
|
|
| 900 |
+// if($.inArray(fileExt, ['txt','xls','xlsx']) == -1) {
|
|
| 901 |
+// alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
|
| 902 |
+// return; |
|
| 903 |
+// } |
|
| 737 | 904 |
|
| 738 |
- for (var i = 0; i < files.length; i++) |
|
| 739 |
- {
|
|
| 740 |
- var fd = new FormData(); |
|
| 741 |
- fd.append('file', files[i]);
|
|
| 742 |
- var tmpObj = new Object(); |
|
| 743 |
- tmpObj.name = "file_" + _fileIdx; |
|
| 744 |
- tmpObj.fileObj = files[i]; |
|
| 905 |
+// for (var i = 0; i < files.length; i++) |
|
| 906 |
+// {
|
|
| 907 |
+// var fd = new FormData(); |
|
| 908 |
+// fd.append('file', files[i]);
|
|
| 909 |
+// var tmpObj = new Object(); |
|
| 910 |
+// tmpObj.name = "file_" + _fileIdx; |
|
| 911 |
+// tmpObj.fileObj = files[i]; |
|
| 745 | 912 |
|
| 746 |
- _fileForm2.push(tmpObj); |
|
| 747 |
- sendFileToServer(fd, obj, files[i], _fileIdx); |
|
| 748 |
- _fileIdx++; |
|
| 913 |
+// _fileForm2.push(tmpObj); |
|
| 914 |
+// sendFileToServer(fd, obj, files[i], _fileIdx); |
|
| 915 |
+// _fileIdx++; |
|
| 749 | 916 |
|
| 750 |
- var totalfileSize = 0; |
|
| 751 |
- $('.totalfileCount').text($('.item_file_size').length) ;
|
|
| 752 |
- $('.item_file_size').each(function(){
|
|
| 753 |
- totalfileSize += $(this).val()*1 ; |
|
| 754 |
- }); |
|
| 755 |
- $('.totalfileSize').text(getStrFileSize(totalfileSize)) ;
|
|
| 756 |
- } |
|
| 757 |
- } |
|
| 758 |
-} |
|
| 917 |
+// var totalfileSize = 0; |
|
| 918 |
+// $('.totalfileCount').text($('.item_file_size').length) ;
|
|
| 919 |
+// $('.item_file_size').each(function(){
|
|
| 920 |
+// totalfileSize += $(this).val()*1 ; |
|
| 921 |
+// }); |
|
| 922 |
+// $('.totalfileSize').text(getStrFileSize(totalfileSize)) ;
|
|
| 923 |
+// } |
|
| 924 |
+// } |
|
| 925 |
+// } |
|
| 759 | 926 |
|
| 760 | 927 |
//드래그앤 드롭 엑셀 및 텍스트 파일 서버 전송 함수 |
| 761 |
-function sendFileToServer(formData, obj , fileObj, _fileIdx) |
|
| 762 |
-{
|
|
| 763 |
- var msg; |
|
| 764 |
- msg = "해당 첨부파일을 수정하시겠습니까?"; |
|
| 765 |
- var data = new FormData(document.msgForm); |
|
| 766 |
- _fileForm2.forEach(function(obj, idx) {
|
|
| 767 |
- if (obj) data.append("file0", obj.fileObj);
|
|
| 768 |
- }); |
|
| 928 |
+// function sendFileToServer(formData, obj , fileObj, _fileIdx) |
|
| 929 |
+// {
|
|
| 930 |
+// var msg; |
|
| 931 |
+// msg = "해당 첨부파일을 수정하시겠습니까?"; |
|
| 932 |
+// var data = new FormData(document.msgForm); |
|
| 933 |
+// _fileForm2.forEach(function(obj, idx) {
|
|
| 934 |
+// if (obj) data.append("file0", obj.fileObj);
|
|
| 935 |
+// }); |
|
| 769 | 936 |
|
| 770 |
- var url = ""; |
|
| 937 |
+// var url = ""; |
|
| 771 | 938 |
|
| 772 |
- // IE11 대응 |
|
| 773 |
- if (fileExt != "") {
|
|
| 774 |
- if(fileExt == "xls" || fileExt == "xlsx"){
|
|
| 775 |
- url = "/web/mjon/addr/sendExelFilePhoneNumAjax.do"; |
|
| 776 |
- }else if(fileExt == "txt"){
|
|
| 777 |
- url = "/web/mjon/addr/sendTxtFilePhoneNumAjax.do"; |
|
| 778 |
- }else{
|
|
| 779 |
- alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
|
| 780 |
- return; |
|
| 781 |
- } |
|
| 939 |
+// // IE11 대응 |
|
| 940 |
+// if (fileExt != "") {
|
|
| 941 |
+// if(fileExt == "xls" || fileExt == "xlsx"){
|
|
| 942 |
+// url = "/web/mjon/addr/sendExelFilePhoneNumAjax.do"; |
|
| 943 |
+// }else if(fileExt == "txt"){
|
|
| 944 |
+// url = "/web/mjon/addr/sendTxtFilePhoneNumAjax.do"; |
|
| 945 |
+// }else{
|
|
| 946 |
+// alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
|
| 947 |
+// return; |
|
| 948 |
+// } |
|
| 782 | 949 |
|
| 783 |
- //엑셀 데이터 변수에 자료가 있으면 지워준다. |
|
| 784 |
- if(excelAddr.length > 0){
|
|
| 785 |
- excelAddr = []; |
|
| 786 |
- } |
|
| 950 |
+// //엑셀 데이터 변수에 자료가 있으면 지워준다. |
|
| 951 |
+// if(excelAddr.length > 0){
|
|
| 952 |
+// excelAddr = []; |
|
| 953 |
+// } |
|
| 787 | 954 |
|
| 788 |
- $.ajax({
|
|
| 789 |
- type: "POST", |
|
| 790 |
- enctype: 'multipart/form-data', |
|
| 791 |
- url: url, |
|
| 792 |
- data: data, |
|
| 793 |
- dataType:'json', |
|
| 794 |
- async: true, |
|
| 795 |
- processData: false, |
|
| 796 |
- contentType: false, |
|
| 797 |
- cache: false, |
|
| 798 |
- //timeout: 600000, |
|
| 799 |
- success: function (returnData, status) {
|
|
| 800 |
- if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
| 801 |
- if(returnData.success){
|
|
| 802 |
- var data = returnData.data; |
|
| 803 |
- var message = returnData.message; |
|
| 955 |
+// $.ajax({
|
|
| 956 |
+// type: "POST", |
|
| 957 |
+// enctype: 'multipart/form-data', |
|
| 958 |
+// url: url, |
|
| 959 |
+// data: data, |
|
| 960 |
+// dataType:'json', |
|
| 961 |
+// async: true, |
|
| 962 |
+// processData: false, |
|
| 963 |
+// contentType: false, |
|
| 964 |
+// cache: false, |
|
| 965 |
+// //timeout: 600000, |
|
| 966 |
+// success: function (returnData, status) {
|
|
| 967 |
+// if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
| 968 |
+// if(returnData.success){
|
|
| 969 |
+// var data = returnData.data; |
|
| 970 |
+// var message = returnData.message; |
|
| 804 | 971 |
|
| 805 |
- if (message == "20000") {
|
|
| 806 |
- alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
|
| 807 |
- } |
|
| 808 |
- else {
|
|
| 809 |
- if(data != null){
|
|
| 810 |
- var arr = []; // 넘어온 데이터를 받은 배열 변수 |
|
| 811 |
- $.each(data, function(i, item){
|
|
| 812 |
- arr.push({name: item.name, phone: item.phone, info1: item.info1, info2: item.info2, info3: item.info3, info4: item.info4, memo: item.memo});
|
|
| 813 |
- }); |
|
| 972 |
+// if (message == "20000") {
|
|
| 973 |
+// alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
|
| 974 |
+// } |
|
| 975 |
+// else {
|
|
| 976 |
+// if(data != null){
|
|
| 977 |
+// var arr = []; // 넘어온 데이터를 받은 배열 변수 |
|
| 978 |
+// $.each(data, function(i, item){
|
|
| 979 |
+// arr.push({name: item.name, phone: item.phone, info1: item.info1, info2: item.info2, info3: item.info3, info4: item.info4, memo: item.memo});
|
|
| 980 |
+// }); |
|
| 814 | 981 |
|
| 815 |
- addPhoneInfo(arr); // 연락처를 처리해줄 함수 호출 |
|
| 816 |
- } |
|
| 982 |
+// addPhoneInfo(arr); // 연락처를 처리해줄 함수 호출 |
|
| 983 |
+// } |
|
| 817 | 984 |
|
| 818 |
- //메세지가 있는 경우 알려주기 |
|
| 819 |
- if(message != '' && message != null) {
|
|
| 820 |
- alert(returnData.message); |
|
| 821 |
- } |
|
| 822 |
- } |
|
| 985 |
+// //메세지가 있는 경우 알려주기 |
|
| 986 |
+// if(message != '' && message != null) {
|
|
| 987 |
+// alert(returnData.message); |
|
| 988 |
+// } |
|
| 989 |
+// } |
|
| 823 | 990 |
|
| 824 |
- }else{
|
|
| 825 |
- alert(returnData.message); |
|
| 826 |
- } |
|
| 827 |
- } else if(status== 'fail'){
|
|
| 828 |
- alert("저장에 실패하였습니다. !!");
|
|
| 829 |
- } |
|
| 830 |
- }, |
|
| 831 |
- error: function (e) {
|
|
| 832 |
- alert("저장에 실패하였습니다.");
|
|
| 833 |
- console.log("ERROR : ", e);
|
|
| 834 |
- }, |
|
| 835 |
- beforeSend : function(xmlHttpRequest) {
|
|
| 836 |
- //로딩창 show |
|
| 837 |
- $('.loading_layer').addClass('active');
|
|
| 838 |
- }, |
|
| 839 |
- complete : function(xhr, textStatus) {
|
|
| 840 |
- //로딩창 hide |
|
| 841 |
- $('.loading_layer').removeClass('active');
|
|
| 842 |
- } |
|
| 843 |
- }); |
|
| 844 |
- } |
|
| 991 |
+// }else{
|
|
| 992 |
+// alert(returnData.message); |
|
| 993 |
+// } |
|
| 994 |
+// } else if(status== 'fail'){
|
|
| 995 |
+// alert("저장에 실패하였습니다. !!");
|
|
| 996 |
+// } |
|
| 997 |
+// }, |
|
| 998 |
+// error: function (e) {
|
|
| 999 |
+// alert("저장에 실패하였습니다.");
|
|
| 1000 |
+// console.log("ERROR : ", e);
|
|
| 1001 |
+// }, |
|
| 1002 |
+// beforeSend : function(xmlHttpRequest) {
|
|
| 1003 |
+// //로딩창 show |
|
| 1004 |
+// $('.loading_layer').addClass('active');
|
|
| 1005 |
+// }, |
|
| 1006 |
+// complete : function(xhr, textStatus) {
|
|
| 1007 |
+// //로딩창 hide |
|
| 1008 |
+// $('.loading_layer').removeClass('active');
|
|
| 1009 |
+// } |
|
| 1010 |
+// }); |
|
| 1011 |
+// } |
|
| 845 | 1012 |
|
| 846 |
-} |
|
| 1013 |
+// } |
|
| 847 | 1014 |
|
| 848 | 1015 |
|
| 849 | 1016 |
//############################################################################################# |
... | ... | @@ -949,7 +1116,8 @@ |
| 949 | 1116 |
return false; |
| 950 | 1117 |
} |
| 951 | 1118 |
} |
| 952 |
- |
|
| 1119 |
+ console.log('selectedData : ', selectedData);
|
|
| 1120 |
+ console.log('selectedData.length : ', selectedData.length);
|
|
| 953 | 1121 |
var commaSelectedData = numberWithCommas(selectedData.length); |
| 954 | 1122 |
var confirmMsg = "저장하시겠습니까?\n이름 20byte, [*1*]~[*4*] 40byte, 메모 250byte 초과 글자는 절사됩니다."; |
| 955 | 1123 |
if (selectedData.length >= 10000) {
|
... | ... | @@ -1217,100 +1385,105 @@ |
| 1217 | 1385 |
}); |
| 1218 | 1386 |
|
| 1219 | 1387 |
//seetJs 엑셀 파일 불러오기 |
| 1220 |
-function excelExport(event){
|
|
| 1221 |
- var data = new FormData(document.excelForm); |
|
| 1222 |
- data.append("file0", $('#excelFile').prop('files')[0]);
|
|
| 1388 |
+// function excelExport(event){
|
|
| 1389 |
+// var data = new FormData(document.excelForm); |
|
| 1390 |
+// data.append("file0", $('#excelFile').prop('files')[0]);
|
|
| 1223 | 1391 |
|
| 1224 |
- var fileValue = $("#excelFile").val().split("\\");
|
|
| 1225 |
- var fileName = fileValue[fileValue.length-1]; |
|
| 1392 |
+// var fileValue = $("#excelFile").val().split("\\");
|
|
| 1393 |
+// var fileName = fileValue[fileValue.length-1]; |
|
| 1226 | 1394 |
|
| 1227 |
- var fileExt = fileName.split('.').pop().toLowerCase();
|
|
| 1395 |
+// var fileExt = fileName.split('.').pop().toLowerCase();
|
|
| 1228 | 1396 |
|
| 1229 |
- // IE11 대응 |
|
| 1230 |
- if (fileExt != "") {
|
|
| 1231 |
- if($.inArray(fileExt, ['txt','xls','xlsx']) == -1) {
|
|
| 1232 |
- alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
|
| 1233 |
- return false; |
|
| 1234 |
- } |
|
| 1397 |
+// // IE11 대응 |
|
| 1398 |
+// if (fileExt != "") {
|
|
| 1399 |
+// if($.inArray(fileExt, ['txt','xls','xlsx']) == -1) {
|
|
| 1400 |
+// alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
|
| 1401 |
+// return false; |
|
| 1402 |
+// } |
|
| 1235 | 1403 |
|
| 1236 |
- var url = ""; |
|
| 1404 |
+// var url = ""; |
|
| 1237 | 1405 |
|
| 1238 |
- if(fileExt == "xls" || fileExt == "xlsx"){
|
|
| 1239 |
- url = "/web/mjon/addr/sendExelFilePhoneNumAjax.do"; |
|
| 1240 |
- }else if(fileExt == "txt"){
|
|
| 1241 |
- url = "/web/mjon/addr/sendTxtFilePhoneNumAjax.do"; |
|
| 1242 |
- }else{
|
|
| 1243 |
- alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
|
| 1244 |
- return; |
|
| 1245 |
- } |
|
| 1406 |
+// if(fileExt == "xls" || fileExt == "xlsx"){
|
|
| 1407 |
+// url = "/web/mjon/addr/sendExelFilePhoneNumAjax.do"; |
|
| 1408 |
+// }else if(fileExt == "txt"){
|
|
| 1409 |
+// url = "/web/mjon/addr/sendTxtFilePhoneNumAjax.do"; |
|
| 1410 |
+// }else{
|
|
| 1411 |
+// alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
|
| 1412 |
+// return; |
|
| 1413 |
+// } |
|
| 1246 | 1414 |
|
| 1247 |
- //엑셀 데이터 변수에 자료가 있으면 지워준다. |
|
| 1248 |
- if(excelAddr.length > 0){
|
|
| 1249 |
- excelAddr = []; |
|
| 1250 |
- } |
|
| 1415 |
+// //엑셀 데이터 변수에 자료가 있으면 지워준다. |
|
| 1416 |
+// if(excelAddr.length > 0){
|
|
| 1417 |
+// excelAddr = []; |
|
| 1418 |
+// } |
|
| 1251 | 1419 |
|
| 1252 |
- $.ajax({
|
|
| 1253 |
- type: "POST", |
|
| 1254 |
- enctype: 'multipart/form-data', |
|
| 1255 |
- url: url, |
|
| 1256 |
- data: data, |
|
| 1257 |
- dataType:'json', |
|
| 1258 |
- async: true, |
|
| 1259 |
- processData: false, |
|
| 1260 |
- contentType: false, |
|
| 1261 |
- cache: false, |
|
| 1262 |
- //timeout: 600000, |
|
| 1263 |
- success: function (returnData, status) {
|
|
| 1264 |
- if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
| 1265 |
- if(returnData.success){
|
|
| 1266 |
- var data = returnData.data; |
|
| 1267 |
- var message = returnData.message; |
|
| 1420 |
+// $.ajax({
|
|
| 1421 |
+// type: "POST", |
|
| 1422 |
+// enctype: 'multipart/form-data', |
|
| 1423 |
+// url: url, |
|
| 1424 |
+// data: data, |
|
| 1425 |
+// dataType:'json', |
|
| 1426 |
+// async: true, |
|
| 1427 |
+// processData: false, |
|
| 1428 |
+// contentType: false, |
|
| 1429 |
+// cache: false, |
|
| 1430 |
+// //timeout: 600000, |
|
| 1431 |
+// success: function (returnData, status) {
|
|
| 1432 |
+// if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
| 1433 |
+// if(returnData.success){
|
|
| 1434 |
+// var data = returnData.data; |
|
| 1435 |
+// var message = returnData.message; |
|
| 1268 | 1436 |
|
| 1269 |
- if (message == "20000") {
|
|
| 1270 |
- alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
|
| 1271 |
- } |
|
| 1272 |
- else {
|
|
| 1273 |
- if(data != null){
|
|
| 1274 |
- var arr = []; // 넘어온 데이터를 받은 배열 변수 |
|
| 1275 |
- $.each(data, function(i, item){
|
|
| 1276 |
- arr.push({name: item.name, phone: item.phone, info1: item.info1, info2: item.info2, info3: item.info3, info4: item.info4, memo: item.memo});
|
|
| 1277 |
- }); |
|
| 1437 |
+// if (message == "20000") {
|
|
| 1438 |
+// alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
|
| 1439 |
+// } |
|
| 1440 |
+// else {
|
|
| 1441 |
+// if(data != null){
|
|
| 1442 |
+// var arr = []; // 넘어온 데이터를 받은 배열 변수 |
|
| 1443 |
+// // $.each(data, function(i, item){
|
|
| 1444 |
+// // arr.push({name: item.name, phone: item.phone, info1: item.info1, info2: item.info2, info3: item.info3, info4: item.info4, memo: item.memo});
|
|
| 1445 |
+// // }); |
|
| 1446 |
+ |
|
| 1447 |
+// data.forEach(item => {
|
|
| 1448 |
+// arr.push(createDataObject(item)); |
|
| 1449 |
+// }); |
|
| 1450 |
+// console.log('arr : ', arr);
|
|
| 1278 | 1451 |
|
| 1279 |
- addPhoneInfo(arr); // 연락처를 처리해줄 함수 호출 |
|
| 1452 |
+// addPhoneInfo(arr); // 연락처를 처리해줄 함수 호출 |
|
| 1280 | 1453 |
|
| 1281 |
- //메세지가 있는 경우 알려주기 |
|
| 1282 |
- if(message != '' && message != null) {
|
|
| 1283 |
- alert(returnData.message); |
|
| 1284 |
- } |
|
| 1285 |
- } |
|
| 1286 |
- } |
|
| 1287 |
- }else{
|
|
| 1288 |
- alert(returnData.message); |
|
| 1289 |
- } |
|
| 1290 |
- } else if(status== 'fail'){
|
|
| 1291 |
- alert("저장에 실패하였습니다. !!");
|
|
| 1292 |
- } |
|
| 1293 |
- }, |
|
| 1294 |
- error: function (e) {
|
|
| 1295 |
- alert("저장에 실패하였습니다.");
|
|
| 1296 |
- console.log("ERROR : ", e);
|
|
| 1297 |
- } |
|
| 1298 |
- , |
|
| 1299 |
- beforeSend : function(xmlHttpRequest) {
|
|
| 1300 |
- //로딩창 show |
|
| 1301 |
- $('.loading_layer').addClass('active');
|
|
| 1302 |
- }, |
|
| 1303 |
- complete : function(xhr, textStatus) {
|
|
| 1304 |
- //로딩창 hide |
|
| 1305 |
- $('.loading_layer').removeClass('active');
|
|
| 1306 |
- } |
|
| 1307 |
- }); |
|
| 1454 |
+// //메세지가 있는 경우 알려주기 |
|
| 1455 |
+// if(message != '' && message != null) {
|
|
| 1456 |
+// alert(returnData.message); |
|
| 1457 |
+// } |
|
| 1458 |
+// } |
|
| 1459 |
+// } |
|
| 1460 |
+// }else{
|
|
| 1461 |
+// alert(returnData.message); |
|
| 1462 |
+// } |
|
| 1463 |
+// } else if(status== 'fail'){
|
|
| 1464 |
+// alert("저장에 실패하였습니다. !!");
|
|
| 1465 |
+// } |
|
| 1466 |
+// }, |
|
| 1467 |
+// error: function (e) {
|
|
| 1468 |
+// alert("저장에 실패하였습니다.");
|
|
| 1469 |
+// console.log("ERROR : ", e);
|
|
| 1470 |
+// } |
|
| 1471 |
+// , |
|
| 1472 |
+// beforeSend : function(xmlHttpRequest) {
|
|
| 1473 |
+// //로딩창 show |
|
| 1474 |
+// $('.loading_layer').addClass('active');
|
|
| 1475 |
+// }, |
|
| 1476 |
+// complete : function(xhr, textStatus) {
|
|
| 1477 |
+// //로딩창 hide |
|
| 1478 |
+// $('.loading_layer').removeClass('active');
|
|
| 1479 |
+// } |
|
| 1480 |
+// }); |
|
| 1308 | 1481 |
|
| 1309 |
- $("#excelFile").val("");
|
|
| 1310 |
- $("#excelNm").val(fileName);
|
|
| 1311 |
- } |
|
| 1482 |
+// $("#excelFile").val("");
|
|
| 1483 |
+// $("#excelNm").val(fileName);
|
|
| 1484 |
+// } |
|
| 1312 | 1485 |
|
| 1313 |
-} |
|
| 1486 |
+// } |
|
| 1314 | 1487 |
|
| 1315 | 1488 |
//체크박스 전체선택/해제 |
| 1316 | 1489 |
$(document).on("click", "#chkAll", function(e) {
|
... | ... | @@ -1513,7 +1686,9 @@ |
| 1513 | 1686 |
<label for="" class="label">그룹명 입력</label> |
| 1514 | 1687 |
<input type="text" id="addrGrpNm" name="addrGrpNm" placeholder="새 그룹명을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'"class="inputLight" style="width: 300px;"> |
| 1515 | 1688 |
|
| 1516 |
- <input type="file" id="excelFile" accept=".xls, .xlsx, .txt" onchange="excelExport(event); return false;" style="display:none"/> |
|
| 1689 |
+<!-- <input type="file" id="excelFile" accept=".xls, .xlsx, .txt" onchange="excelExport(event); return false;" style="display:none"/> --> |
|
| 1690 |
+ <input type="file" id="excelFile" accept=".xls, .xlsx, .txt" style="display:none"/> |
|
| 1691 |
+ <button type="button" id="file-load-trigger">Choose File</button> |
|
| 1517 | 1692 |
<button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button> |
| 1518 | 1693 |
</td> |
| 1519 | 1694 |
</tr> |
... | ... | @@ -1533,6 +1708,108 @@ |
| 1533 | 1708 |
</p> |
| 1534 | 1709 |
<button type="button" class="btnType btnType6 addCallToF">번호추가</button> |
| 1535 | 1710 |
</div> |
| 1711 |
+ |
|
| 1712 |
+ |
|
| 1713 |
+ |
|
| 1714 |
+ |
|
| 1715 |
+ <div class="adr_excel" style="margin-top: 13px;"> |
|
| 1716 |
+ <!-- thead --> |
|
| 1717 |
+ <div class="adr_hd select_adr_hd"> |
|
| 1718 |
+ <div></div> |
|
| 1719 |
+ <div style="width: 125px;"> |
|
| 1720 |
+ <label for="" class="label"></label> |
|
| 1721 |
+ <select class="field-selector"> |
|
| 1722 |
+ <option value="">선택하기</option> |
|
| 1723 |
+ <option value="name">이름</option> |
|
| 1724 |
+ <option value="phone">휴대폰</option> |
|
| 1725 |
+ <option value="info1">[*1*]</option> |
|
| 1726 |
+ <option value="info2">[*2*]</option> |
|
| 1727 |
+ <option value="info3">[*3*]</option> |
|
| 1728 |
+ <option value="info4">[*4*]</option> |
|
| 1729 |
+ <option value="memo">메모</option> |
|
| 1730 |
+ </select> |
|
| 1731 |
+ </div> |
|
| 1732 |
+ <div style="width: 125px;"> |
|
| 1733 |
+ <label for="" class="label"></label> |
|
| 1734 |
+ <select class="field-selector"> |
|
| 1735 |
+ <option value="">선택하기</option> |
|
| 1736 |
+ <option value="name">이름</option> |
|
| 1737 |
+ <option value="phone">휴대폰</option> |
|
| 1738 |
+ <option value="info1">[*1*]</option> |
|
| 1739 |
+ <option value="info2">[*2*]</option> |
|
| 1740 |
+ <option value="info3">[*3*]</option> |
|
| 1741 |
+ <option value="info4">[*4*]</option> |
|
| 1742 |
+ <option value="memo">메모</option> |
|
| 1743 |
+ </select> |
|
| 1744 |
+ </div> |
|
| 1745 |
+ <div style="width: 125px;"> |
|
| 1746 |
+ <label for="" class="label"></label> |
|
| 1747 |
+ <select class="field-selector"> |
|
| 1748 |
+ <option value="">선택하기</option> |
|
| 1749 |
+ <option value="name">이름</option> |
|
| 1750 |
+ <option value="phone">휴대폰</option> |
|
| 1751 |
+ <option value="info1">[*1*]</option> |
|
| 1752 |
+ <option value="info2">[*2*]</option> |
|
| 1753 |
+ <option value="info3">[*3*]</option> |
|
| 1754 |
+ <option value="info4">[*4*]</option> |
|
| 1755 |
+ <option value="memo">메모</option> |
|
| 1756 |
+ </select> |
|
| 1757 |
+ </div> |
|
| 1758 |
+ <div style="width: 125px;"> |
|
| 1759 |
+ <label for="" class="label"></label> |
|
| 1760 |
+ <select class="field-selector"> |
|
| 1761 |
+ <option value="">선택하기</option> |
|
| 1762 |
+ <option value="name">이름</option> |
|
| 1763 |
+ <option value="phone">휴대폰</option> |
|
| 1764 |
+ <option value="info1">[*1*]</option> |
|
| 1765 |
+ <option value="info2">[*2*]</option> |
|
| 1766 |
+ <option value="info3">[*3*]</option> |
|
| 1767 |
+ <option value="info4">[*4*]</option> |
|
| 1768 |
+ <option value="memo">메모</option> |
|
| 1769 |
+ </select> |
|
| 1770 |
+ </div> |
|
| 1771 |
+ <div style="width: 125px;"> |
|
| 1772 |
+ <label for="" class="label"></label> |
|
| 1773 |
+ <select class="field-selector"> |
|
| 1774 |
+ <option value="">선택하기</option> |
|
| 1775 |
+ <option value="name">이름</option> |
|
| 1776 |
+ <option value="phone">휴대폰</option> |
|
| 1777 |
+ <option value="info1">[*1*]</option> |
|
| 1778 |
+ <option value="info2">[*2*]</option> |
|
| 1779 |
+ <option value="info3">[*3*]</option> |
|
| 1780 |
+ <option value="info4">[*4*]</option> |
|
| 1781 |
+ <option value="memo">메모</option> |
|
| 1782 |
+ </select> |
|
| 1783 |
+ </div> |
|
| 1784 |
+ <div style="width: 125px;"> |
|
| 1785 |
+ <label for="" class="label"></label> |
|
| 1786 |
+ <select class="field-selector"> |
|
| 1787 |
+ <option value="">선택하기</option> |
|
| 1788 |
+ <option value="name">이름</option> |
|
| 1789 |
+ <option value="phone">휴대폰</option> |
|
| 1790 |
+ <option value="info1">[*1*]</option> |
|
| 1791 |
+ <option value="info2">[*2*]</option> |
|
| 1792 |
+ <option value="info3">[*3*]</option> |
|
| 1793 |
+ <option value="info4">[*4*]</option> |
|
| 1794 |
+ <option value="memo">메모</option> |
|
| 1795 |
+ </select> |
|
| 1796 |
+ </div> |
|
| 1797 |
+ <div style="width: 125px;"> |
|
| 1798 |
+ <label for="" class="label"></label> |
|
| 1799 |
+ <select class="field-selector"> |
|
| 1800 |
+ <option value="">선택하기</option> |
|
| 1801 |
+ <option value="name">이름</option> |
|
| 1802 |
+ <option value="phone">휴대폰</option> |
|
| 1803 |
+ <option value="info1">[*1*]</option> |
|
| 1804 |
+ <option value="info2">[*2*]</option> |
|
| 1805 |
+ <option value="info3">[*3*]</option> |
|
| 1806 |
+ <option value="info4">[*4*]</option> |
|
| 1807 |
+ <option value="memo">메모</option> |
|
| 1808 |
+ </select> |
|
| 1809 |
+ </div> |
|
| 1810 |
+ </div> |
|
| 1811 |
+ </div> |
|
| 1812 |
+ |
|
| 1536 | 1813 |
<div class="drag_drop_wrap callList_box"> |
| 1537 | 1814 |
<img src="/publish/images/content/excel.jpg" style="width: 100%;"> |
| 1538 | 1815 |
</div> |
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp
... | ... | @@ -0,0 +1,668 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> | |
| 5 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 6 | + | |
| 7 | +<script type="text/javascript" src="<c:url value='/publish/js/content.js'/>"></script> | |
| 8 | + | |
| 9 | +<script type="text/javascript"> | |
| 10 | +$(document).ready(function(){ | |
| 11 | + | |
| 12 | + // 중복 휴대폰번호 버튼 노출여부 | |
| 13 | +// $("#btnAddrMassDupli").hide(); | |
| 14 | +// $("#btnAddrMassSaveDupli").hide(); | |
| 15 | +}); | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | +function addrGroupLoadAjax(){ | |
| 21 | + $("#addrRegistSelect").load("/web/addr/selectAddrGroupAjax.do", function(response, status, xhr){}); | |
| 22 | + $("#funcAddrGroupSelect").load("/web/addr/selectAddrGroupAjax.do", function(response, status, xhr){}); | |
| 23 | +} | |
| 24 | + | |
| 25 | + | |
| 26 | +function insertAddrGroupAjax() { | |
| 27 | + var form = document.addrGrpInsertForm; | |
| 28 | + if(form.addrGrpNm.value == "") { | |
| 29 | + alert("주소록 그룹명을 입력해주세요."); | |
| 30 | + return; | |
| 31 | + } | |
| 32 | + if(!confirm("주소록 그룹을 추가하시겠습니까?")) { | |
| 33 | + return; | |
| 34 | + } | |
| 35 | + var data = new FormData(form); | |
| 36 | + | |
| 37 | + $.ajax({ | |
| 38 | + cache : false, | |
| 39 | + url : "<c:url value='/web/addr/insertAddrGroupAjax.do' />", | |
| 40 | + type : 'POST', | |
| 41 | + data : data, | |
| 42 | + dataType:'json', | |
| 43 | + processData: false, | |
| 44 | + contentType: false, | |
| 45 | + success : function(returnData, status){ | |
| 46 | + if(status == "success") { | |
| 47 | + if("fail"==returnData.result){ | |
| 48 | + alert(returnData.message); | |
| 49 | + return; | |
| 50 | + } else if("dupl"==returnData.result) { | |
| 51 | + alert("중복된 그룹명입니다."); | |
| 52 | + return; | |
| 53 | + } | |
| 54 | + alert("등록되었습니다."); | |
| 55 | + listAddrGrp(); | |
| 56 | + addrGroupLoadAjax(); | |
| 57 | + | |
| 58 | + }else{ alert("ERROR!");return;} | |
| 59 | + }, | |
| 60 | + error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); } | |
| 61 | + }); | |
| 62 | + | |
| 63 | +} | |
| 64 | + | |
| 65 | +function insertAddrAjax() { | |
| 66 | + var selectVal = $("#addrRegistSelect option:selected").val(); | |
| 67 | + //alert(selectVal); | |
| 68 | + | |
| 69 | + var form = document.addrInsertForm; | |
| 70 | + /* | |
| 71 | + //필수값 아니어서 뺐음 | |
| 72 | + if(form.addrNm.value == "") { | |
| 73 | + alert("주소록 이름을 입력하세요"); | |
| 74 | + return; | |
| 75 | + } | |
| 76 | + */ | |
| 77 | + if(form.addrPhoneNo.value == "") { | |
| 78 | + alert("주소록 번호를 입력하세요"); | |
| 79 | + return; | |
| 80 | + } | |
| 81 | + //if(!confirm("주소록을 추가하시겠습니까?")) { | |
| 82 | + // return; | |
| 83 | + //} | |
| 84 | + | |
| 85 | + if(!checkHpNum(form.addrPhoneNo.value)){//휴대폰 유효성 검사 | |
| 86 | + if(!checkNorPhoneNum(form.addrPhoneNo.value)){//일반전화 유효성 검사 | |
| 87 | + | |
| 88 | + alert("잘못된 휴대폰번호 또는 일반전화 번호 입니다."); | |
| 89 | + return false; | |
| 90 | + | |
| 91 | + } | |
| 92 | + | |
| 93 | + } | |
| 94 | + | |
| 95 | + var data = new FormData(form); | |
| 96 | + | |
| 97 | + $.ajax({ | |
| 98 | + cache : false, | |
| 99 | + url : "<c:url value='/web/mjon/addr/insertAddrAjax.do' />", | |
| 100 | + type : 'POST', | |
| 101 | + data : data, | |
| 102 | + dataType:'json', | |
| 103 | + processData: false, | |
| 104 | + contentType: false, | |
| 105 | + success : function(returnData, status){ | |
| 106 | + if(status == "success") { | |
| 107 | + if("fail"==returnData.result){ | |
| 108 | + alert(returnData.message); | |
| 109 | + return; | |
| 110 | + } else if("dupl"==returnData.result){ | |
| 111 | + alert("해당 그룹에 중복된 번호가 있습니다."); | |
| 112 | + return; | |
| 113 | + } | |
| 114 | + //alert("저장 되었습니다."); | |
| 115 | + | |
| 116 | + listAddrGrp(); | |
| 117 | + addrGroupLoadAjax(); | |
| 118 | + addrLoadAjax(); | |
| 119 | + | |
| 120 | + // 주소록그룹 콤보박스 유지 | |
| 121 | + setTimeout(setSelectSetting, 500, selectVal); | |
| 122 | + | |
| 123 | + }else{ alert("ERROR!");return;} | |
| 124 | + }, | |
| 125 | + error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); } | |
| 126 | + }); | |
| 127 | + | |
| 128 | +} | |
| 129 | + | |
| 130 | +// 주소록그룹 콤보박스 유지 | |
| 131 | +function setSelectSetting(selectVal) { | |
| 132 | + $("#addrRegistSelect").val(selectVal).prop("selected", true); | |
| 133 | +} | |
| 134 | + | |
| 135 | +function linkPage(pageNo){ | |
| 136 | + if ($('#searchKeywordAddr').val() != "" && $('#searchKeywordAddr').val() != null && $('#searchKeywordAddr').val() != undefined) { | |
| 137 | + // 문자전송 검색용 | |
| 138 | + $("#msgStartKeyword").val(""); | |
| 139 | + } | |
| 140 | + | |
| 141 | + var searchForm = document.searchAddrForm; | |
| 142 | + searchForm.pageIndex.value = pageNo; | |
| 143 | + searchForm.pageUnit.value = $('#pageUnit').val(); | |
| 144 | + searchForm.searchCondition.value = $('#searchConditionAddr').val(); | |
| 145 | + searchForm.searchKeyword.value = $('#searchKeywordAddr').val(); | |
| 146 | + searchForm.startKeyword.value = $("#msgStartKeyword").val(); | |
| 147 | + | |
| 148 | + var sendData = $(document.searchAddrForm).serializeArray(); | |
| 149 | + $("#adr1_right").load("/web/mjon/addr/selectAddrAjax.do", sendData, function(response, status, xhr){tableAllChk();}); | |
| 150 | + addrGroupLoadAjax(); | |
| 151 | +} | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | +//############################################################################################# | |
| 156 | +//Tabulator | |
| 157 | +//############################################################################################# | |
| 158 | + | |
| 159 | +$(document).ready(function(){ | |
| 160 | + //Tabulator AJAX Data Loading | |
| 161 | + | |
| 162 | + // 파일 선택 버튼 클릭 이벤트 | |
| 163 | + $("#file-load-trigger").on("click", function() { | |
| 164 | + $("#excelFile").click(); | |
| 165 | + }); | |
| 166 | + | |
| 167 | + // 파일 입력 이벤트 | |
| 168 | + $("#excelFile").on("change", function(event) { | |
| 169 | + excelFileChange(event.target.files[0]); | |
| 170 | + }); | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + //받는사람 전체삭제 버튼 처리 | |
| 175 | + $('.all_del').click(function(){ | |
| 176 | + var data = $tableClip.getRows(); | |
| 177 | + if(data == null || data == ""){ | |
| 178 | + alert("받는사람을 추가해 주세요."); | |
| 179 | + return false; | |
| 180 | + }else{ | |
| 181 | + $tableClip.clearData(); | |
| 182 | + $("#rowTotCnt").text(0); //총건수 수정 | |
| 183 | + $("#rowDupCnt").text(0); //중복건수 수정 | |
| 184 | + dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 | |
| 185 | + } | |
| 186 | + | |
| 187 | + }); | |
| 188 | + | |
| 189 | + | |
| 190 | + // 받는사람 선택삭제 버튼 처리해주기 | |
| 191 | + $('.select_del').click(function(){ | |
| 192 | + $("#rowDupCnt").text(0); //중복건수 수정 | |
| 193 | + dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 | |
| 194 | + | |
| 195 | + if($tableClip == null || $tableClip == ""){ | |
| 196 | + alert("받는사람을 추가해 주세요."); | |
| 197 | + return false; | |
| 198 | + } | |
| 199 | + | |
| 200 | + var selectedData = $tableClip.getSelectedRows(); | |
| 201 | + | |
| 202 | + if(selectedData == "" || selectedData == null){ | |
| 203 | + alert("받는 사람을 선택해 주세요."); | |
| 204 | + return false; | |
| 205 | + }else{ // 선택한 Row 데이터 삭제하기 | |
| 206 | + for(var i=0; i < selectedData.length; i++){ | |
| 207 | + selectedData[i].delete(); | |
| 208 | + } | |
| 209 | + } | |
| 210 | + | |
| 211 | + totRows = $tableClip.getRows().length; | |
| 212 | + | |
| 213 | + updateTotCnt(totRows); | |
| 214 | + }); | |
| 215 | + | |
| 216 | + //받는사람 오류번호 삭제 처리해주기 | |
| 217 | + $('.chkVali_del').click(function(){ | |
| 218 | + //기존 연락처 모두 불러오기 | |
| 219 | + var data = $tableClip.getRows(); | |
| 220 | + var tableData = []; | |
| 221 | + var totLen = $tableClip.getRows().length; | |
| 222 | + var errCnt = 0; | |
| 223 | + | |
| 224 | + if(totLen > 0){ | |
| 225 | + if(confirm("올바르지 않은 연락처 정보를 삭제 하시겠습니까?")){ | |
| 226 | + for(var i=0; i < totLen; i++){ | |
| 227 | + | |
| 228 | + | |
| 229 | + var phone = data[i].getData().phone; | |
| 230 | + var valiCheck = checkHpNum(phone); | |
| 231 | + if(valiCheck){ | |
| 232 | + tableData.push({name: data[i].getData().name.trim(), phone: data[i].getData().phone.trim(), info1:data[i].getData().info1, info2:data[i].getData().info2, info3:data[i].getData().info3, info4:data[i].getData().info4, memo:data[i].getData().memo}); | |
| 233 | + }else{ | |
| 234 | + errCnt++; | |
| 235 | + } | |
| 236 | + } | |
| 237 | + | |
| 238 | + var removeDuplData = dupliPhoneData(tableData); | |
| 239 | + | |
| 240 | + $tableClip.setData(removeDuplData); | |
| 241 | + | |
| 242 | + //총 받는사람 수 계산 | |
| 243 | + totRows = $tableClip.getRows().length; | |
| 244 | + updateTotCnt(totRows); | |
| 245 | + | |
| 246 | + if(errCnt > 0){ | |
| 247 | + alert(errCnt + " 건의 연락처를 삭제하였습니다."); | |
| 248 | + return false; | |
| 249 | + }else{ | |
| 250 | + alert("오류가 있는 연락처가 없습니다."); | |
| 251 | + } | |
| 252 | + } | |
| 253 | + }else{ | |
| 254 | + alert("연락처 정보를 입력해 주세요."); | |
| 255 | + return false; | |
| 256 | + } | |
| 257 | + }); | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + // 오류검사 항목 중복제거 | |
| 264 | + function SetTableErrorDupliCheck(sVal) { | |
| 265 | + var isDuplicate = false; | |
| 266 | + if (tableErrorCheckData.length == 0) { | |
| 267 | + tableErrorCheckData.push(sVal); | |
| 268 | + } | |
| 269 | + else { | |
| 270 | + for (var i = 0; i < tableErrorCheckData.length; i++) | |
| 271 | + { | |
| 272 | + if (tableErrorCheckData[i] == sVal) { | |
| 273 | + isDuplicate = true; | |
| 274 | + } | |
| 275 | + } | |
| 276 | + | |
| 277 | + if (isDuplicate) { | |
| 278 | + return; | |
| 279 | + } | |
| 280 | + else { | |
| 281 | + tableErrorCheckData.push(sVal); | |
| 282 | + } | |
| 283 | + } | |
| 284 | + } | |
| 285 | + | |
| 286 | + | |
| 287 | + // 오류검사 항목 중복제거 | |
| 288 | + function SetTableErrorDupliCheck(sVal) { | |
| 289 | + var isDuplicate = false; | |
| 290 | + if (tableErrorCheckData.length == 0) { | |
| 291 | + tableErrorCheckData.push(sVal); | |
| 292 | + } | |
| 293 | + else { | |
| 294 | + for (var i = 0; i < tableErrorCheckData.length; i++) | |
| 295 | + { | |
| 296 | + if (tableErrorCheckData[i] == sVal) { | |
| 297 | + isDuplicate = true; | |
| 298 | + } | |
| 299 | + } | |
| 300 | + | |
| 301 | + if (isDuplicate) { | |
| 302 | + return; | |
| 303 | + } | |
| 304 | + else { | |
| 305 | + tableErrorCheckData.push(sVal); | |
| 306 | + } | |
| 307 | + } | |
| 308 | + } | |
| 309 | + | |
| 310 | + $('.check_validity').click(function(){ | |
| 311 | + tableErrorCheckData.length = 0; // 오류 번호 배열 초기화 | |
| 312 | + | |
| 313 | + var data = $tableClip.getRows(); | |
| 314 | + var invalid = $tableClip.getInvalidCells(); //오류 데이터 체크 | |
| 315 | + var dataLen = $tableClip.getRows().length; //연락처 데이터 갯수 | |
| 316 | + var totLen = invalid.length; //오류 데이터 갯수 | |
| 317 | + var errMsg = ""; //최종 alert에 표시할 메시지 저장 변수 | |
| 318 | + | |
| 319 | + if(dataLen > 0) { //연락처 정보가 있으면 수행 | |
| 320 | + if(totLen > 0) { //내용에 오류가 있으면 수행 | |
| 321 | + //오류 데이터 값 저장 | |
| 322 | + for(var i=0; i < totLen; i++) { | |
| 323 | + var cellValue = invalid[i].getValue(); | |
| 324 | + SetTableErrorDupliCheck(cellValue); | |
| 325 | + } | |
| 326 | + | |
| 327 | + for(var i=0; i < dataLen; i++){ | |
| 328 | + // 휴대폰번호 체크 | |
| 329 | + var phone = data[i].getData().phone; | |
| 330 | + var valiCheck = checkHpNum(phone); | |
| 331 | + if(!valiCheck){ | |
| 332 | + SetTableErrorDupliCheck(phone); | |
| 333 | + } | |
| 334 | + } | |
| 335 | + } | |
| 336 | + else { | |
| 337 | + for(var i=0; i < dataLen; i++){ | |
| 338 | + // 휴대폰번호 체크 | |
| 339 | + var phone = data[i].getData().phone; | |
| 340 | + var valiCheck = checkHpNum(phone); | |
| 341 | + if(!valiCheck){ | |
| 342 | + SetTableErrorDupliCheck(phone); | |
| 343 | + } | |
| 344 | + } | |
| 345 | + } | |
| 346 | + } | |
| 347 | + else { | |
| 348 | + alert("연락처를 입력해 주세요."); | |
| 349 | + return false; | |
| 350 | + } | |
| 351 | + | |
| 352 | + if (tableErrorCheckData.length > 0) { | |
| 353 | + for (var i = 0; i < tableErrorCheckData.length; i++) | |
| 354 | + { | |
| 355 | + errMsg += tableErrorCheckData[i]; | |
| 356 | + if ((tableErrorCheckData.length - 1) > i) { | |
| 357 | + errMsg += ", "; | |
| 358 | + } | |
| 359 | + } | |
| 360 | + alert(errMsg + "의 내용에 오류가 있습니다."); | |
| 361 | + } | |
| 362 | + else { | |
| 363 | + alert("오류 데이터가 없습니다."); | |
| 364 | + } | |
| 365 | + | |
| 366 | + return false; | |
| 367 | + }); | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + //받는사람 중복 삭제 | |
| 372 | + $('.duple_del').click(function(){ | |
| 373 | + //기존 연락처 모두 불러오기 | |
| 374 | + var data = $tableClip.getRows(); | |
| 375 | + var tableData = []; | |
| 376 | + var dpCnt = 0; | |
| 377 | + var totLen = $tableClip.getRows().length; | |
| 378 | + | |
| 379 | + for(var i=0; i < totLen; i++){ | |
| 380 | + tableData.push({name: data[i].getData().name.trim(), phone: data[i].getData().phone.trim()}); | |
| 381 | + } | |
| 382 | + | |
| 383 | + var removeDuplData = dupliPhoneData(tableData); | |
| 384 | + $tableClip.setData(removeDuplData); | |
| 385 | + | |
| 386 | + //총 받는사람 수 계산 | |
| 387 | + totRows = $tableClip.getRows().length; | |
| 388 | + updateTotCnt(totRows); | |
| 389 | + }); | |
| 390 | + | |
| 391 | + | |
| 392 | +}); | |
| 393 | + | |
| 394 | + | |
| 395 | +// Show Html | |
| 396 | +function getAddrGroupListShow(jsonList) { | |
| 397 | + var sHtml = ""; | |
| 398 | + sHtml += "<option value='NEW'>그룹추가</option>"; | |
| 399 | + sHtml += "<option value='0'>그룹미지정</option>"; | |
| 400 | + sHtml += "<option value='bookmark'>자주보내는 번호</option>"; | |
| 401 | + for (var j = 0; j < jsonList.length; j++) { | |
| 402 | + sHtml += " <option value='" + $.trim(jsonList[j].addrGrpId) + "' />" + $.trim(jsonList[j].addrGrpNm) + "</option>"; | |
| 403 | + } | |
| 404 | + | |
| 405 | + $("#addrGrpIdInfo").html(sHtml); | |
| 406 | +} | |
| 407 | + | |
| 408 | +$(document).on('change', '#addrGrpIdInfo', function() { | |
| 409 | + if ($("#addrGrpIdInfo option:selected").val() != "NEW") { | |
| 410 | + $("#addrGrpNm").val(""); // 새그룹명 Clear; | |
| 411 | + } | |
| 412 | +}); | |
| 413 | + | |
| 414 | +//############################################################################################# | |
| 415 | +//파일 불러오기 | |
| 416 | +//############################################################################################# | |
| 417 | + | |
| 418 | + | |
| 419 | +//체크박스 전체선택/해제 | |
| 420 | +$(document).on("click", "#chkAll", function(e) { | |
| 421 | + var isChecked = $(this).is(":checked"); | |
| 422 | + $("input[name=addrCheck]:checkbox").prop("checked", isChecked); | |
| 423 | +}); | |
| 424 | + | |
| 425 | +$(document).on("click", "#duplicationChkAll", function(e) { | |
| 426 | + var isChecked = $(this).is(":checked"); | |
| 427 | + $("input[name=addrCheck]:checkbox").prop("checked", isChecked); | |
| 428 | +}); | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | +// 중복 연락처 | |
| 433 | +function GetAddrMassDupli() { | |
| 434 | + var sHtml = ""; | |
| 435 | + sHtml += "<div class='' style='overflow-x:auto; height:350px;'>"; | |
| 436 | + sHtml += "<table class='tType4'>"; | |
| 437 | + sHtml += " <colgroup>"; | |
| 438 | + sHtml += " <col style='width:auto' />"; | |
| 439 | + sHtml += " </colgroup>"; | |
| 440 | + sHtml += " <thead>"; | |
| 441 | + sHtml += " <tr>"; | |
| 442 | + sHtml += " <th>중복 휴대폰번호 (" + numberWithCommas(dupliPhoneDataRealList.length) + "개)</th>"; | |
| 443 | + sHtml += " </tr>"; | |
| 444 | + sHtml += " </thead>"; | |
| 445 | + sHtml += " <tbody>"; | |
| 446 | + for (var i = 0; i < dupliPhoneDataRealList.length; i++) { | |
| 447 | + sHtml += " <tr>"; | |
| 448 | + sHtml += " <td>" + dupliPhoneDataRealList[i] + "</td>"; | |
| 449 | + sHtml += " </tr>"; | |
| 450 | + } | |
| 451 | + sHtml += " </tbody>"; | |
| 452 | + sHtml += " </table>"; | |
| 453 | + sHtml += " </div>"; | |
| 454 | + | |
| 455 | + $("#addrMassDupli_layer").html(sHtml); | |
| 456 | +} | |
| 457 | + | |
| 458 | +//중복 연락처 => 저장시 | |
| 459 | +function GetAddrMassSaveDupli() { | |
| 460 | + var sHtml = ""; | |
| 461 | + sHtml += "<div class='' style='overflow-x:auto; height:350px;'>"; | |
| 462 | + sHtml += "<table class='tType4'>"; | |
| 463 | + sHtml += " <colgroup>"; | |
| 464 | + sHtml += " <col style='width:auto' />"; | |
| 465 | + sHtml += " </colgroup>"; | |
| 466 | + sHtml += " <thead>"; | |
| 467 | + sHtml += " <tr>"; | |
| 468 | +// sHtml += " <th>중복 휴대폰번호 (" + numberWithCommas(addrMassDupliSaveList.length) + "개)</th>"; | |
| 469 | + sHtml += " <th>중복 휴대폰번호 (10개)</th>"; | |
| 470 | + sHtml += " </tr>"; | |
| 471 | + sHtml += " </thead>"; | |
| 472 | + sHtml += " <tbody>"; | |
| 473 | + for (var i = 0; i < addrMassDupliSaveList.length; i++) { | |
| 474 | + sHtml += " <tr>"; | |
| 475 | + sHtml += " <td>" + addrMassDupliSaveList[i].addrPhoneNo + "</td>"; | |
| 476 | + sHtml += " </tr>"; | |
| 477 | + } | |
| 478 | + sHtml += " </tbody>"; | |
| 479 | + sHtml += " </table>"; | |
| 480 | + sHtml += " </div>"; | |
| 481 | + | |
| 482 | + $("#addrMassSaveDupli_layer").html(sHtml); | |
| 483 | +} | |
| 484 | + | |
| 485 | +</script> | |
| 486 | + | |
| 487 | + <!-- 붙여넣기 --> | |
| 488 | + <div class="popCont pop_more_cont" id="popCont_2"> | |
| 489 | + <div class="titBox"> | |
| 490 | + <p>- 텍스트(txt) 파일로 작성된 주소록을 등록하실 수 있습니다.</p> | |
| 491 | + <p>- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 붙여 넣으셔야 합니다.</p> | |
| 492 | + <p>- 입력 내용은 (Tab) 또는 (,) 구분하여 입력하여야 합니다.</p> | |
| 493 | + <p>- 한 줄(열)에 주소 한 건만 입력 가능합니다.</p> | |
| 494 | + <p>- 전화번호 형태는 010-1234-5678 또는 01012345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.</p> | |
| 495 | + <p> (예) 홍길동,010-1234-5678 또는 홍길동,01012345678</p> | |
| 496 | + <p>- 한번에 많은 양의 데이터를 입력하시려면 ‘주소록 복사(Ctrl+c) + 붙여넣기(Ctrl+v)’ 또는 ‘엑셀입력’을 이용하세요.</p> | |
| 497 | + <p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p> | |
| 498 | + <button type="button" class="txt_btn" onclick="location.href='/download/addr/주소록_대량등록.zip'"><i></i>TXT샘플 다운로드</button> | |
| 499 | + </div> | |
| 500 | + <div class="pop_more_wrap"> | |
| 501 | + <button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button> | |
| 502 | + </div> | |
| 503 | + </div><!--// 붙여넣기 --> | |
| 504 | + | |
| 505 | + <!-- 공통 --> | |
| 506 | + <div> | |
| 507 | + <table class="layer_tType1"> | |
| 508 | + <caption>엑셀입력 표</caption> | |
| 509 | + <colgroup> | |
| 510 | + <col style="width: 95px"> | |
| 511 | + <col style="width: auto"> | |
| 512 | + </colgroup> | |
| 513 | + <tbody> | |
| 514 | + <tr> | |
| 515 | + <th>그룹 선택</th> | |
| 516 | + <td> | |
| 517 | + <label for="" class="label">그룹 선택</label> | |
| 518 | + <select id="addrGrpIdInfo" name="addrGrpIdInfo"> | |
| 519 | + </select> | |
| 520 | + <label for="" class="label">그룹명 입력</label> | |
| 521 | + <input type="text" id="addrGrpNm" name="addrGrpNm" placeholder="새 그룹명을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'"class="inputLight" style="width: 300px;"> | |
| 522 | + | |
| 523 | + </td> | |
| 524 | + </tr> | |
| 525 | + </tbody> | |
| 526 | + </table> | |
| 527 | + </div> | |
| 528 | + <div class="excel_middle2"> | |
| 529 | + <p> | |
| 530 | + 총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건 | |
| 531 | +<!-- --> | |
| 532 | +<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" onclick="GetAddrMassDupli()" id="btnAddrMassDupli">중복번호</button> --> | |
| 533 | +<!-- --> | |
| 534 | +<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> --> | |
| 535 | + </p> | |
| 536 | +<!-- <button type="button" class="btnType btnType6 addCallToF">번호추가</button> --> | |
| 537 | + </div> | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + <div class="adr_excel" style="margin-top: 13px;"> | |
| 543 | + <!-- thead --> | |
| 544 | + <div class="adr_hd select_adr_hd" data-group="tableClip"> | |
| 545 | + <div></div> | |
| 546 | + <div style="width: 125px;"> | |
| 547 | + <label for="" class="label"></label> | |
| 548 | + <select class="field-selector"> | |
| 549 | + <option value="">선택하기</option> | |
| 550 | + <option value="addrNm">이름</option> | |
| 551 | + <option value="addrPhoneNo">휴대폰</option> | |
| 552 | + <option value="addrInfo1">[*1*]</option> | |
| 553 | + <option value="addrInfo2">[*2*]</option> | |
| 554 | + <option value="addrInfo3">[*3*]</option> | |
| 555 | + <option value="addrInfo4">[*4*]</option> | |
| 556 | + <option value="addrComment">메모</option> | |
| 557 | + </select> | |
| 558 | + </div> | |
| 559 | + <div style="width: 125px;"> | |
| 560 | + <label for="" class="label"></label> | |
| 561 | + <select class="field-selector"> | |
| 562 | + <option value="">선택하기</option> | |
| 563 | + <option value="addrNm">이름</option> | |
| 564 | + <option value="addrPhoneNo">휴대폰</option> | |
| 565 | + <option value="addrInfo1">[*1*]</option> | |
| 566 | + <option value="addrInfo2">[*2*]</option> | |
| 567 | + <option value="addrInfo3">[*3*]</option> | |
| 568 | + <option value="addrInfo4">[*4*]</option> | |
| 569 | + <option value="addrComment">메모</option> | |
| 570 | + </select> | |
| 571 | + </div> | |
| 572 | + <div style="width: 125px;"> | |
| 573 | + <label for="" class="label"></label> | |
| 574 | + <select class="field-selector"> | |
| 575 | + <option value="">선택하기</option> | |
| 576 | + <option value="addrNm">이름</option> | |
| 577 | + <option value="addrPhoneNo">휴대폰</option> | |
| 578 | + <option value="addrInfo1">[*1*]</option> | |
| 579 | + <option value="addrInfo2">[*2*]</option> | |
| 580 | + <option value="addrInfo3">[*3*]</option> | |
| 581 | + <option value="addrInfo4">[*4*]</option> | |
| 582 | + <option value="addrComment">메모</option> | |
| 583 | + </select> | |
| 584 | + </div> | |
| 585 | + <div style="width: 125px;"> | |
| 586 | + <label for="" class="label"></label> | |
| 587 | + <select class="field-selector"> | |
| 588 | + <option value="">선택하기</option> | |
| 589 | + <option value="addrNm">이름</option> | |
| 590 | + <option value="addrPhoneNo">휴대폰</option> | |
| 591 | + <option value="addrInfo1">[*1*]</option> | |
| 592 | + <option value="addrInfo2">[*2*]</option> | |
| 593 | + <option value="addrInfo3">[*3*]</option> | |
| 594 | + <option value="addrInfo4">[*4*]</option> | |
| 595 | + <option value="addrComment">메모</option> | |
| 596 | + </select> | |
| 597 | + </div> | |
| 598 | + <div style="width: 125px;"> | |
| 599 | + <label for="" class="label"></label> | |
| 600 | + <select class="field-selector"> | |
| 601 | + <option value="">선택하기</option> | |
| 602 | + <option value="addrNm">이름</option> | |
| 603 | + <option value="addrPhoneNo">휴대폰</option> | |
| 604 | + <option value="addrInfo1">[*1*]</option> | |
| 605 | + <option value="addrInfo2">[*2*]</option> | |
| 606 | + <option value="addrInfo3">[*3*]</option> | |
| 607 | + <option value="addrInfo4">[*4*]</option> | |
| 608 | + <option value="addrComment">메모</option> | |
| 609 | + </select> | |
| 610 | + </div> | |
| 611 | + <div style="width: 125px;"> | |
| 612 | + <label for="" class="label"></label> | |
| 613 | + <select class="field-selector"> | |
| 614 | + <option value="">선택하기</option> | |
| 615 | + <option value="addrNm">이름</option> | |
| 616 | + <option value="addrPhoneNo">휴대폰</option> | |
| 617 | + <option value="addrInfo1">[*1*]</option> | |
| 618 | + <option value="addrInfo2">[*2*]</option> | |
| 619 | + <option value="addrInfo3">[*3*]</option> | |
| 620 | + <option value="addrInfo4">[*4*]</option> | |
| 621 | + <option value="addrComment">메모</option> | |
| 622 | + </select> | |
| 623 | + </div> | |
| 624 | + <div style="width: 125px;"> | |
| 625 | + <label for="" class="label"></label> | |
| 626 | + <select class="field-selector"> | |
| 627 | + <option value="">선택하기</option> | |
| 628 | + <option value="addrNm">이름</option> | |
| 629 | + <option value="addrPhoneNo">휴대폰</option> | |
| 630 | + <option value="addrInfo1">[*1*]</option> | |
| 631 | + <option value="addrInfo2">[*2*]</option> | |
| 632 | + <option value="addrInfo3">[*3*]</option> | |
| 633 | + <option value="addrInfo4">[*4*]</option> | |
| 634 | + <option value="addrComment">메모</option> | |
| 635 | + </select> | |
| 636 | + </div> | |
| 637 | + </div> | |
| 638 | + </div> | |
| 639 | + | |
| 640 | + <div class="drag_drop_wrap callList_box" id="tabulator_clip"> | |
| 641 | + <img src="/publish/images/content/excel.jpg" style="width: 100%;"> | |
| 642 | + </div> | |
| 643 | + <div class="excel_middle"> | |
| 644 | + <div class="select_btnWrap clearfix"> | |
| 645 | + <div> | |
| 646 | + <button type="button" class="all_del"><i class="remove_img"></i>전체삭제</button> | |
| 647 | + <button type="button" class="select_del"><i class="remove_img"></i>선택삭제</button> | |
| 648 | + <button type="button" class="chkVali_del"><i class="remove_img"></i>오류번호삭제</button> | |
| 649 | + <button type="button" class="check_validity">오류 검사 <i></i></button> | |
| 650 | + <div class="error_hover_cont send_hover_cont addr_hover_cont"> | |
| 651 | + <p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p> | |
| 652 | + <span>(예시) 010-1234-0001(O) / 010-123-0001(X)</span> | |
| 653 | + </div> | |
| 654 | + </div> | |
| 655 | + | |
| 656 | + </div> | |
| 657 | + </div><!--// 공통 --> | |
| 658 | + | |
| 659 | + <!-- 붙여놓기 설명 --> | |
| 660 | + <div class="req_area"> | |
| 661 | + <div class="text_box"> | |
| 662 | + - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> | |
| 663 | + - 휴대폰 번호는 필수입력 항목입니다.<br> | |
| 664 | + - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> | |
| 665 | + - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> | |
| 666 | + - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. | |
| 667 | + </div> | |
| 668 | + </div> |
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
... | ... | @@ -0,0 +1,955 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> | |
| 5 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 6 | + | |
| 7 | +<script type="text/javascript" src="<c:url value='/publish/js/content.js'/>"></script> | |
| 8 | + | |
| 9 | +<script type="text/javascript"> | |
| 10 | + | |
| 11 | +$(document).ready(function(){ | |
| 12 | + | |
| 13 | + // 중복 휴대폰번호 버튼 노출여부 | |
| 14 | +// $("#btnAddrMassDupli").hide(); | |
| 15 | +// $("#btnAddrMassSaveDupli").hide(); | |
| 16 | +}); | |
| 17 | + | |
| 18 | + | |
| 19 | +function addrGroupLoadAjax(){ | |
| 20 | + $("#addrRegistSelect").load("/web/addr/selectAddrGroupAjax.do", function(response, status, xhr){}); | |
| 21 | + $("#funcAddrGroupSelect").load("/web/addr/selectAddrGroupAjax.do", function(response, status, xhr){}); | |
| 22 | +} | |
| 23 | + | |
| 24 | + | |
| 25 | +function insertAddrGroupAjax() { | |
| 26 | + var form = document.addrGrpInsertForm; | |
| 27 | + if(form.addrGrpNm.value == "") { | |
| 28 | + alert("주소록 그룹명을 입력해주세요."); | |
| 29 | + return; | |
| 30 | + } | |
| 31 | + if(!confirm("주소록 그룹을 추가하시겠습니까?")) { | |
| 32 | + return; | |
| 33 | + } | |
| 34 | + var data = new FormData(form); | |
| 35 | + | |
| 36 | + $.ajax({ | |
| 37 | + cache : false, | |
| 38 | + url : "<c:url value='/web/addr/insertAddrGroupAjax.do' />", | |
| 39 | + type : 'POST', | |
| 40 | + data : data, | |
| 41 | + dataType:'json', | |
| 42 | + processData: false, | |
| 43 | + contentType: false, | |
| 44 | + success : function(returnData, status){ | |
| 45 | + if(status == "success") { | |
| 46 | + if("fail"==returnData.result){ | |
| 47 | + alert(returnData.message); | |
| 48 | + return; | |
| 49 | + } else if("dupl"==returnData.result) { | |
| 50 | + alert("중복된 그룹명입니다."); | |
| 51 | + return; | |
| 52 | + } | |
| 53 | + alert("등록되었습니다."); | |
| 54 | + listAddrGrp(); | |
| 55 | + addrGroupLoadAjax(); | |
| 56 | + | |
| 57 | + }else{ alert("ERROR!");return;} | |
| 58 | + }, | |
| 59 | + error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); } | |
| 60 | + }); | |
| 61 | + | |
| 62 | +} | |
| 63 | + | |
| 64 | +function insertAddrAjax() { | |
| 65 | + var selectVal = $("#addrRegistSelect option:selected").val(); | |
| 66 | + //alert(selectVal); | |
| 67 | + | |
| 68 | + var form = document.addrInsertForm; | |
| 69 | + /* | |
| 70 | + //필수값 아니어서 뺐음 | |
| 71 | + if(form.addrNm.value == "") { | |
| 72 | + alert("주소록 이름을 입력하세요"); | |
| 73 | + return; | |
| 74 | + } | |
| 75 | + */ | |
| 76 | + if(form.addrPhoneNo.value == "") { | |
| 77 | + alert("주소록 번호를 입력하세요"); | |
| 78 | + return; | |
| 79 | + } | |
| 80 | + //if(!confirm("주소록을 추가하시겠습니까?")) { | |
| 81 | + // return; | |
| 82 | + //} | |
| 83 | + | |
| 84 | + if(!checkHpNum(form.addrPhoneNo.value)){//휴대폰 유효성 검사 | |
| 85 | + if(!checkNorPhoneNum(form.addrPhoneNo.value)){//일반전화 유효성 검사 | |
| 86 | + | |
| 87 | + alert("잘못된 휴대폰번호 또는 일반전화 번호 입니다."); | |
| 88 | + return false; | |
| 89 | + | |
| 90 | + } | |
| 91 | + | |
| 92 | + } | |
| 93 | + | |
| 94 | + var data = new FormData(form); | |
| 95 | + | |
| 96 | + $.ajax({ | |
| 97 | + cache : false, | |
| 98 | + url : "<c:url value='/web/mjon/addr/insertAddrAjax.do' />", | |
| 99 | + type : 'POST', | |
| 100 | + data : data, | |
| 101 | + dataType:'json', | |
| 102 | + processData: false, | |
| 103 | + contentType: false, | |
| 104 | + success : function(returnData, status){ | |
| 105 | + if(status == "success") { | |
| 106 | + if("fail"==returnData.result){ | |
| 107 | + alert(returnData.message); | |
| 108 | + return; | |
| 109 | + } else if("dupl"==returnData.result){ | |
| 110 | + alert("해당 그룹에 중복된 번호가 있습니다."); | |
| 111 | + return; | |
| 112 | + } | |
| 113 | + //alert("저장 되었습니다."); | |
| 114 | + | |
| 115 | + listAddrGrp(); | |
| 116 | + addrGroupLoadAjax(); | |
| 117 | + addrLoadAjax(); | |
| 118 | + | |
| 119 | + // 주소록그룹 콤보박스 유지 | |
| 120 | + setTimeout(setSelectSetting, 500, selectVal); | |
| 121 | + | |
| 122 | + }else{ alert("ERROR!");return;} | |
| 123 | + }, | |
| 124 | + error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); } | |
| 125 | + }); | |
| 126 | + | |
| 127 | +} | |
| 128 | + | |
| 129 | +// 주소록그룹 콤보박스 유지 | |
| 130 | +function setSelectSetting(selectVal) { | |
| 131 | + $("#addrRegistSelect").val(selectVal).prop("selected", true); | |
| 132 | +} | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | +//############################################################################################# | |
| 138 | +//Tabulator | |
| 139 | +//############################################################################################# | |
| 140 | + | |
| 141 | +$(document).ready(function(){ | |
| 142 | + // 파일 선택 버튼 클릭 이벤트 | |
| 143 | + $("#file-load-trigger").on("click", function() { | |
| 144 | + $("#excelFile").click(); | |
| 145 | + }); | |
| 146 | + | |
| 147 | + // 파일 입력 이벤트 | |
| 148 | + $("#excelFile").on("change", function(event) { | |
| 149 | + excelFileChange(event.target.files[0]); | |
| 150 | + }); | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + //받는 사람 리스트 영역에 클립보드 데이터 가져와보기 | |
| 155 | + // 붙여넣기 기능 | |
| 156 | + /* $('.callList_box').on('paste', function (e) { | |
| 157 | + var element = e.originalEvent.clipboardData.getData('text'); // 클립보드에 복사한 데이터 가져오기 | |
| 158 | + var elmSplit= []; | |
| 159 | + elmSplit = element.split("\n"); | |
| 160 | + var elmLen = elmSplit.length; | |
| 161 | + console.log('elmSplit : ', elmSplit); | |
| 162 | + if(elmLen < 0){ | |
| 163 | + alert("붙여넣을 연락처를 복사해주세요."); | |
| 164 | + return false; | |
| 165 | + } | |
| 166 | + if (elmLen > 20001) { | |
| 167 | + alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."); | |
| 168 | + return false; | |
| 169 | + } | |
| 170 | + | |
| 171 | + tableErrorData.length = 0; // 오류 번호 배열 초기화 | |
| 172 | + | |
| 173 | + var splitData = []; | |
| 174 | + var realPhone = []; | |
| 175 | + | |
| 176 | + for(var i=0; i < elmLen; i++){ | |
| 177 | + var splitStr = elmSplit[i]; | |
| 178 | + var tabData = splitStr.split("\t"); //탭 구분으로 데이터 분할 | |
| 179 | + var comData = splitStr.split(","); //콤마 구분으로 데이터 분할 | |
| 180 | + if(tabData.length >= 2){ | |
| 181 | + splitData = tabData; | |
| 182 | + }else{ | |
| 183 | + splitData = comData; | |
| 184 | + } | |
| 185 | + | |
| 186 | + if(splitData.length == 0){// 데이터가 없는경우 | |
| 187 | + alert("탭으로 구분하여 데이터를 복사해 주세요."); | |
| 188 | + return false; | |
| 189 | + } | |
| 190 | + | |
| 191 | + | |
| 192 | + if(splitData.length == 1){ | |
| 193 | + realPhone.push({A: splitData[0].trim()}); | |
| 194 | + }else{ | |
| 195 | + | |
| 196 | + let keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; | |
| 197 | + let data = {}; | |
| 198 | + | |
| 199 | + splitData.forEach((item, index) => { | |
| 200 | + data[keys[index]] = item.trim(); | |
| 201 | + }); | |
| 202 | + | |
| 203 | + realPhone.push(data); | |
| 204 | + }//else end | |
| 205 | + } | |
| 206 | + console.log('realPhone : ', realPhone); | |
| 207 | + var recTableData = $tableExcel.getRows(); // 받는사람 리스트의 전체 목록을 저장 | |
| 208 | + var tableData = []; | |
| 209 | + | |
| 210 | + //기존 받는사람 리스트를 배열에 미리 담아둔다. | |
| 211 | + if (recTableData.length > 0) { | |
| 212 | + recTableData.forEach(item => { | |
| 213 | + tableData.push(createDataObject(item.getData())); | |
| 214 | + }); | |
| 215 | + } | |
| 216 | + | |
| 217 | + if (realPhone.length > 0) { | |
| 218 | + realPhone.forEach(item => { | |
| 219 | + tableData.push(createDataObject(item)); | |
| 220 | + }); | |
| 221 | + } | |
| 222 | + | |
| 223 | + //tableData.push(realPhone); | |
| 224 | + | |
| 225 | + //중복 연락처 1개만 남기고 삭제하기 | |
| 226 | + // 20240719 개선작업은 폰위치가 따로없어 중복제거를 못함 | |
| 227 | +// var removeDuplPhone = dupliPhoneData(tableData); | |
| 228 | + var removeDuplPhone = tableData; | |
| 229 | + | |
| 230 | + //수신자 리스트에 전화번호 추가해주기 | |
| 231 | + //$tableExcel.addData(removeDuplPhone); | |
| 232 | + $tableExcel.setData(removeDuplPhone); | |
| 233 | + | |
| 234 | + totRows = $tableExcel.getRows().length; | |
| 235 | + updateTotCnt(totRows); //전체 데이터 갯수 구하기 | |
| 236 | + | |
| 237 | + if (tableErrorData.length > 0) { | |
| 238 | + alert("데이터를 확인해 주세요."); | |
| 239 | + // alert("올바르지 않은 휴대폰 번호가 "+ tableErrorData.length +" 건 있습니다."); | |
| 240 | + //for(var x=0; x < tableErrorData.length; x++){ | |
| 241 | + // alert(tableErrorData[x]); | |
| 242 | + //} | |
| 243 | + } | |
| 244 | + }); | |
| 245 | + */ | |
| 246 | + | |
| 247 | + //$tableExcel.setData(tabledata); | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + //받는사람 전체삭제 버튼 처리 | |
| 253 | + $('.all_del').click(function(){ | |
| 254 | + var data = $tableExcel.getRows(); | |
| 255 | + if(data == null || data == ""){ | |
| 256 | + alert("받는사람을 추가해 주세요."); | |
| 257 | + return false; | |
| 258 | + }else{ | |
| 259 | + $tableExcel.clearData(); | |
| 260 | + $("#rowTotCnt").text(0); //총건수 수정 | |
| 261 | + $("#rowDupCnt").text(0); //중복건수 수정 | |
| 262 | + dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 | |
| 263 | + } | |
| 264 | + | |
| 265 | + }); | |
| 266 | + | |
| 267 | + | |
| 268 | + // 받는사람 선택삭제 버튼 처리해주기 | |
| 269 | + $('.select_del').click(function(){ | |
| 270 | + $("#rowDupCnt").text(0); //중복건수 수정 | |
| 271 | + dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 | |
| 272 | + | |
| 273 | + if($tableExcel == null || $tableExcel == ""){ | |
| 274 | + alert("받는사람을 추가해 주세요."); | |
| 275 | + return false; | |
| 276 | + } | |
| 277 | + | |
| 278 | + var selectedData = $tableExcel.getSelectedRows(); | |
| 279 | + | |
| 280 | + if(selectedData == "" || selectedData == null){ | |
| 281 | + alert("받는 사람을 선택해 주세요."); | |
| 282 | + return false; | |
| 283 | + }else{ // 선택한 Row 데이터 삭제하기 | |
| 284 | + for(var i=0; i < selectedData.length; i++){ | |
| 285 | + selectedData[i].delete(); | |
| 286 | + } | |
| 287 | + } | |
| 288 | + | |
| 289 | + totRows = $tableExcel.getRows().length; | |
| 290 | + | |
| 291 | + updateTotCnt(totRows); | |
| 292 | + }); | |
| 293 | + | |
| 294 | + //받는사람 오류번호 삭제 처리해주기 | |
| 295 | + $('.chkVali_del').click(function(){ | |
| 296 | + //기존 연락처 모두 불러오기 | |
| 297 | + var data = $tableExcel.getRows(); | |
| 298 | + var tableData = []; | |
| 299 | + var totLen = $tableExcel.getRows().length; | |
| 300 | + var errCnt = 0; | |
| 301 | + | |
| 302 | + if(totLen > 0){ | |
| 303 | + if(confirm("올바르지 않은 연락처 정보를 삭제 하시겠습니까?")){ | |
| 304 | + for(var i=0; i < totLen; i++){ | |
| 305 | + | |
| 306 | + | |
| 307 | + var phone = data[i].getData().phone; | |
| 308 | + var valiCheck = checkHpNum(phone); | |
| 309 | + if(valiCheck){ | |
| 310 | + tableData.push({name: data[i].getData().name.trim(), phone: data[i].getData().phone.trim(), info1:data[i].getData().info1, info2:data[i].getData().info2, info3:data[i].getData().info3, info4:data[i].getData().info4, memo:data[i].getData().memo}); | |
| 311 | + }else{ | |
| 312 | + errCnt++; | |
| 313 | + } | |
| 314 | + } | |
| 315 | + | |
| 316 | + var removeDuplData = dupliPhoneData(tableData); | |
| 317 | + | |
| 318 | + $tableExcel.setData(removeDuplData); | |
| 319 | + | |
| 320 | + //총 받는사람 수 계산 | |
| 321 | + totRows = $tableExcel.getRows().length; | |
| 322 | + updateTotCnt(totRows); | |
| 323 | + | |
| 324 | + if(errCnt > 0){ | |
| 325 | + alert(errCnt + " 건의 연락처를 삭제하였습니다."); | |
| 326 | + return false; | |
| 327 | + }else{ | |
| 328 | + alert("오류가 있는 연락처가 없습니다."); | |
| 329 | + } | |
| 330 | + } | |
| 331 | + }else{ | |
| 332 | + alert("연락처 정보를 입력해 주세요."); | |
| 333 | + return false; | |
| 334 | + } | |
| 335 | + }); | |
| 336 | + | |
| 337 | + | |
| 338 | + // 필드 선택 이벤트 핸들러 | |
| 339 | + $("#column-selector").on("change", function() { | |
| 340 | + let selectedField = $(this).val(); | |
| 341 | + let newValue = prompt("새 값을 입력하세요:"); | |
| 342 | + if (newValue !== null) { | |
| 343 | + updateTableField(selectedField, newValue); | |
| 344 | + } | |
| 345 | + }); | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + // 오류검사 항목 중복제거 | |
| 354 | + function SetTableErrorDupliCheck(sVal) { | |
| 355 | + var isDuplicate = false; | |
| 356 | + if (tableErrorCheckData.length == 0) { | |
| 357 | + tableErrorCheckData.push(sVal); | |
| 358 | + } | |
| 359 | + else { | |
| 360 | + for (var i = 0; i < tableErrorCheckData.length; i++) | |
| 361 | + { | |
| 362 | + if (tableErrorCheckData[i] == sVal) { | |
| 363 | + isDuplicate = true; | |
| 364 | + } | |
| 365 | + } | |
| 366 | + | |
| 367 | + if (isDuplicate) { | |
| 368 | + return; | |
| 369 | + } | |
| 370 | + else { | |
| 371 | + tableErrorCheckData.push(sVal); | |
| 372 | + } | |
| 373 | + } | |
| 374 | + } | |
| 375 | + | |
| 376 | + | |
| 377 | + // 오류검사 항목 중복제거 | |
| 378 | + function SetTableErrorDupliCheck(sVal) { | |
| 379 | + var isDuplicate = false; | |
| 380 | + if (tableErrorCheckData.length == 0) { | |
| 381 | + tableErrorCheckData.push(sVal); | |
| 382 | + } | |
| 383 | + else { | |
| 384 | + for (var i = 0; i < tableErrorCheckData.length; i++) | |
| 385 | + { | |
| 386 | + if (tableErrorCheckData[i] == sVal) { | |
| 387 | + isDuplicate = true; | |
| 388 | + } | |
| 389 | + } | |
| 390 | + | |
| 391 | + if (isDuplicate) { | |
| 392 | + return; | |
| 393 | + } | |
| 394 | + else { | |
| 395 | + tableErrorCheckData.push(sVal); | |
| 396 | + } | |
| 397 | + } | |
| 398 | + } | |
| 399 | + | |
| 400 | + $('.check_validity').click(function(){ | |
| 401 | + tableErrorCheckData.length = 0; // 오류 번호 배열 초기화 | |
| 402 | + | |
| 403 | + var data = $tableExcel.getRows(); | |
| 404 | + var invalid = $tableExcel.getInvalidCells(); //오류 데이터 체크 | |
| 405 | + var dataLen = $tableExcel.getRows().length; //연락처 데이터 갯수 | |
| 406 | + var totLen = invalid.length; //오류 데이터 갯수 | |
| 407 | + var errMsg = ""; //최종 alert에 표시할 메시지 저장 변수 | |
| 408 | + | |
| 409 | + if(dataLen > 0) { //연락처 정보가 있으면 수행 | |
| 410 | + if(totLen > 0) { //내용에 오류가 있으면 수행 | |
| 411 | + //오류 데이터 값 저장 | |
| 412 | + for(var i=0; i < totLen; i++) { | |
| 413 | + var cellValue = invalid[i].getValue(); | |
| 414 | + SetTableErrorDupliCheck(cellValue); | |
| 415 | + } | |
| 416 | + | |
| 417 | + for(var i=0; i < dataLen; i++){ | |
| 418 | + // 휴대폰번호 체크 | |
| 419 | + var phone = data[i].getData().phone; | |
| 420 | + var valiCheck = checkHpNum(phone); | |
| 421 | + if(!valiCheck){ | |
| 422 | + SetTableErrorDupliCheck(phone); | |
| 423 | + } | |
| 424 | + } | |
| 425 | + } | |
| 426 | + else { | |
| 427 | + for(var i=0; i < dataLen; i++){ | |
| 428 | + // 휴대폰번호 체크 | |
| 429 | + var phone = data[i].getData().phone; | |
| 430 | + var valiCheck = checkHpNum(phone); | |
| 431 | + if(!valiCheck){ | |
| 432 | + SetTableErrorDupliCheck(phone); | |
| 433 | + } | |
| 434 | + } | |
| 435 | + } | |
| 436 | + } | |
| 437 | + else { | |
| 438 | + alert("연락처를 입력해 주세요."); | |
| 439 | + return false; | |
| 440 | + } | |
| 441 | + | |
| 442 | + if (tableErrorCheckData.length > 0) { | |
| 443 | + for (var i = 0; i < tableErrorCheckData.length; i++) | |
| 444 | + { | |
| 445 | + errMsg += tableErrorCheckData[i]; | |
| 446 | + if ((tableErrorCheckData.length - 1) > i) { | |
| 447 | + errMsg += ", "; | |
| 448 | + } | |
| 449 | + } | |
| 450 | + alert(errMsg + "의 내용에 오류가 있습니다."); | |
| 451 | + } | |
| 452 | + else { | |
| 453 | + alert("오류 데이터가 없습니다."); | |
| 454 | + } | |
| 455 | + | |
| 456 | + return false; | |
| 457 | + }); | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + //받는사람 중복 삭제 | |
| 462 | + $('.duple_del').click(function(){ | |
| 463 | + //기존 연락처 모두 불러오기 | |
| 464 | + var data = $tableExcel.getRows(); | |
| 465 | + var tableData = []; | |
| 466 | + var dpCnt = 0; | |
| 467 | + var totLen = $tableExcel.getRows().length; | |
| 468 | + | |
| 469 | + for(var i=0; i < totLen; i++){ | |
| 470 | + tableData.push({name: data[i].getData().name.trim(), phone: data[i].getData().phone.trim()}); | |
| 471 | + } | |
| 472 | + | |
| 473 | + var removeDuplData = dupliPhoneData(tableData); | |
| 474 | + $tableExcel.setData(removeDuplData); | |
| 475 | + | |
| 476 | + //총 받는사람 수 계산 | |
| 477 | + totRows = $tableExcel.getRows().length; | |
| 478 | + updateTotCnt(totRows); | |
| 479 | + }); | |
| 480 | + | |
| 481 | + | |
| 482 | +}); | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | +// 데이터 객체를 생성하는 함수 | |
| 487 | +function createDataObject(data) { | |
| 488 | + return { | |
| 489 | + A: data.A, | |
| 490 | + B: data.B, | |
| 491 | + C: data.C, | |
| 492 | + D: data.D, | |
| 493 | + E: data.E, | |
| 494 | + F: data.F, | |
| 495 | + G: data.G | |
| 496 | + }; | |
| 497 | +} | |
| 498 | + | |
| 499 | +//############################################################################################# | |
| 500 | +//파일업로드 드래그앤 드롭 | |
| 501 | +//############################################################################################# | |
| 502 | +var objDragAndDrop = $(".upload_area"); | |
| 503 | +$(document).on("dragenter",".upload_area",function(e){ | |
| 504 | + e.stopPropagation(); | |
| 505 | + e.preventDefault(); | |
| 506 | + //$(this).css('border', '2px solid #0B85A1'); | |
| 507 | +}); | |
| 508 | +$(document).on("dragover",".upload_area",function(e){ | |
| 509 | + e.stopPropagation(); | |
| 510 | + e.preventDefault(); | |
| 511 | +}); | |
| 512 | +$(document).on("drop",".upload_area",function(e){ | |
| 513 | + //$(this).css('border', '2px dotted #0B85A1'); | |
| 514 | + e.preventDefault(); | |
| 515 | + var files = e.originalEvent.dataTransfer.files; | |
| 516 | +// handleFileUpload(files,objDragAndDrop); //파일업로드 | |
| 517 | + excelFileChange(files[0]); | |
| 518 | +}); | |
| 519 | + | |
| 520 | +$(document).on('dragenter', function (e){ | |
| 521 | + e.stopPropagation(); | |
| 522 | + e.preventDefault(); | |
| 523 | +}); | |
| 524 | +$(document).on('dragover', function (e){ | |
| 525 | +e.stopPropagation(); | |
| 526 | +e.preventDefault(); | |
| 527 | +//objDragAndDrop.css('border', '2px dotted #0B85A1'); | |
| 528 | +}); | |
| 529 | +$(document).on('drop', function (e){ | |
| 530 | + e.stopPropagation(); | |
| 531 | + e.preventDefault(); | |
| 532 | +}); | |
| 533 | +//파일 드래그앤드롭 종료 | |
| 534 | + | |
| 535 | + | |
| 536 | + function excelFileChange(file){ | |
| 537 | + | |
| 538 | +// var file = event.target.files[0]; | |
| 539 | + if (file) { | |
| 540 | + var reader = new FileReader(); | |
| 541 | + reader.onload = function(e) { | |
| 542 | + var data = new Uint8Array(e.target.result); | |
| 543 | + var workbook = XLSX.read(data, {type: 'array'}); | |
| 544 | + var firstSheet = workbook.Sheets[workbook.SheetNames[0]]; | |
| 545 | + var jsonData = XLSX.utils.sheet_to_json(firstSheet, {header: 1}); | |
| 546 | + processExcelData(jsonData); | |
| 547 | + }; | |
| 548 | + reader.readAsArrayBuffer(file); | |
| 549 | + } | |
| 550 | + } | |
| 551 | + | |
| 552 | + // 엑셀 데이터 처리 함수 | |
| 553 | + function processExcelData(data) { | |
| 554 | + var keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; | |
| 555 | + var tableData = []; | |
| 556 | + | |
| 557 | + // 3번째 행부터 입력 | |
| 558 | + // 1,2행은 예시와 타이틀이라 입력안함 | |
| 559 | + data.slice(2).forEach(row => { | |
| 560 | + var rowData = {}; | |
| 561 | + keys.forEach((key, index) => { | |
| 562 | + rowData[key] = row[index] ? row[index].trim() : ""; // 각 컬럼에 대해 기본값을 설정 | |
| 563 | + }); | |
| 564 | + tableData.push(rowData); | |
| 565 | + }); | |
| 566 | + | |
| 567 | + | |
| 568 | + $tableExcel.setColumns([ // 열 정의를 다시 설정 | |
| 569 | + {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) { | |
| 570 | + cell.getRow().toggleSelect(); | |
| 571 | + }}, | |
| 572 | + {title: "A", hozAlign: "center", headerHozAlign: "center", field: "A", editor: "input", width: 125, validator: ["maxLength:100", "string"]}, | |
| 573 | + {title: "B", hozAlign: "center", headerHozAlign: "center", field: "B", editor: "input", width: 125, validator: ["maxLength:100", "string"]}, | |
| 574 | + {title: "C", hozAlign: "center", headerHozAlign: "center", field: "C", editor: "input", width: 125, validator: ["maxLength:100", "string"]}, | |
| 575 | + {title: "D", hozAlign: "center", headerHozAlign: "center", field: "D", editor: "input", width: 125, validator: ["maxLength:100", "string"]}, | |
| 576 | + {title: "E", hozAlign: "center", headerHozAlign: "center", field: "E", editor: "input", width: 125, validator: ["maxLength:100", "string"]}, | |
| 577 | + {title: "F", hozAlign: "center", headerHozAlign: "center", field: "F", editor: "input", width: 125, validator: ["maxLength:100", "string"]}, | |
| 578 | + {title: "G", hozAlign: "center", headerHozAlign: "center", field: "G", editor: "input", width: 125, validator: ["maxLength:100", "string"]} | |
| 579 | + ]); | |
| 580 | + | |
| 581 | + $tableExcel.setData(tableData).then(() => { | |
| 582 | + // rowTotCnt 업데이트 | |
| 583 | + document.getElementById("rowTotCnt").innerText = tableData.length; | |
| 584 | + }); | |
| 585 | + | |
| 586 | + } | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | +//############################################################################################# | |
| 591 | +//등록 | |
| 592 | +//############################################################################################# | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | +// 주소록 그룹 중복체크 | |
| 597 | +function getAddrGroupDuplCheckAjax() { | |
| 598 | + var isReturn = true; | |
| 599 | + | |
| 600 | + $.ajax({ | |
| 601 | + url : "<c:url value='/web/addr/getAddrGroupDuplCheckAjax.do' />", | |
| 602 | + type : 'POST', | |
| 603 | + data : {"addrGrpNm" : $("#addrGrpNm").val()}, | |
| 604 | + dataType:'json', | |
| 605 | + async: false, // 동기 | |
| 606 | + success : function(data, status){ | |
| 607 | + if(data.isSuccess == true) { | |
| 608 | + if(data.isDupl == true) { | |
| 609 | + //alert("중복된 그룹명입니다."); | |
| 610 | + isReturn = false; | |
| 611 | + } | |
| 612 | + } | |
| 613 | + else { | |
| 614 | + //alert("Message : " + msg); | |
| 615 | + } | |
| 616 | + }, | |
| 617 | + error: function (e) { | |
| 618 | + //alert("주소록 중복체크에 실패했습니다."); | |
| 619 | + } | |
| 620 | + }); | |
| 621 | + | |
| 622 | + return isReturn; | |
| 623 | +} | |
| 624 | + | |
| 625 | +//주소록그룹 콤보박스 유지 | |
| 626 | +function setSelectMassSetting(selectMassVal) { | |
| 627 | + $("#addrGrpIdInfo").val(selectMassVal).prop("selected", true); | |
| 628 | +} | |
| 629 | + | |
| 630 | +//데이터 비우기 | |
| 631 | +function SetClear() { | |
| 632 | + $("#addrGrpNm").val(""); // 새그룹명 Clear; | |
| 633 | + // 주소록 그룹정보 불러오기 | |
| 634 | + getAddrGroupList(); | |
| 635 | + | |
| 636 | + var data = $tableExcel.getRows(); | |
| 637 | + if (data == null || data == "") { | |
| 638 | + } | |
| 639 | + else { | |
| 640 | + $tableExcel.clearData(); | |
| 641 | + $("#rowTotCnt").text(0); //총건수 수정 | |
| 642 | + $("#rowDupCnt").text(0); //중복건수 수정 | |
| 643 | + dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 | |
| 644 | + } | |
| 645 | +} | |
| 646 | + | |
| 647 | +// 주소록 그룹정보 불러오기 | |
| 648 | +function getAddrGroupList() { | |
| 649 | + $.ajax({ | |
| 650 | + type : "POST", | |
| 651 | + async : false, | |
| 652 | + url : "/web/mjon/addr/addrGroupListAjax.do", | |
| 653 | + data : {}, | |
| 654 | + dataType:'json', | |
| 655 | + success : function(data) { | |
| 656 | + //alert(JSON.stringify(data.addrGroupList)); | |
| 657 | + | |
| 658 | + // Show Html | |
| 659 | + getAddrGroupListShow(data.addrGroupList); | |
| 660 | + }, | |
| 661 | + error : function(xhr, status, error) { | |
| 662 | + alert(error); | |
| 663 | + return false; | |
| 664 | + } | |
| 665 | + }); | |
| 666 | +} | |
| 667 | + | |
| 668 | +// Show Html | |
| 669 | +function getAddrGroupListShow(jsonList) { | |
| 670 | + var sHtml = ""; | |
| 671 | + sHtml += "<option value='NEW'>그룹추가</option>"; | |
| 672 | + sHtml += "<option value='0'>그룹미지정</option>"; | |
| 673 | + sHtml += "<option value='bookmark'>자주보내는 번호</option>"; | |
| 674 | + for (var j = 0; j < jsonList.length; j++) { | |
| 675 | + sHtml += " <option value='" + $.trim(jsonList[j].addrGrpId) + "' />" + $.trim(jsonList[j].addrGrpNm) + "</option>"; | |
| 676 | + } | |
| 677 | + | |
| 678 | + $("#addrGrpIdInfo").html(sHtml); | |
| 679 | +} | |
| 680 | + | |
| 681 | +$(document).on('change', '#addrGrpIdInfo', function() { | |
| 682 | + if ($("#addrGrpIdInfo option:selected").val() != "NEW") { | |
| 683 | + $("#addrGrpNm").val(""); // 새그룹명 Clear; | |
| 684 | + } | |
| 685 | +}); | |
| 686 | + | |
| 687 | +//############################################################################################# | |
| 688 | +//파일 불러오기 | |
| 689 | +//############################################################################################# | |
| 690 | + | |
| 691 | +//엑섹불러오기 버튼 클릭시 파일 첨부 실행 | |
| 692 | +$(document).on('click', '.c3', function() { | |
| 693 | + $("#excelFile").click(); | |
| 694 | +}); | |
| 695 | + | |
| 696 | +//체크박스 전체선택/해제 | |
| 697 | +$(document).on("click", "#chkAll", function(e) { | |
| 698 | + var isChecked = $(this).is(":checked"); | |
| 699 | + $("input[name=addrCheck]:checkbox").prop("checked", isChecked); | |
| 700 | +}); | |
| 701 | + | |
| 702 | +$(document).on("click", "#duplicationChkAll", function(e) { | |
| 703 | + var isChecked = $(this).is(":checked"); | |
| 704 | + $("input[name=addrCheck]:checkbox").prop("checked", isChecked); | |
| 705 | +}); | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | +// 중복 연락처 | |
| 710 | +function GetAddrMassDupli() { | |
| 711 | + var sHtml = ""; | |
| 712 | + sHtml += "<div class='' style='overflow-x:auto; height:350px;'>"; | |
| 713 | + sHtml += "<table class='tType4'>"; | |
| 714 | + sHtml += " <colgroup>"; | |
| 715 | + sHtml += " <col style='width:auto' />"; | |
| 716 | + sHtml += " </colgroup>"; | |
| 717 | + sHtml += " <thead>"; | |
| 718 | + sHtml += " <tr>"; | |
| 719 | + sHtml += " <th>중복 휴대폰번호 (" + numberWithCommas(dupliPhoneDataRealList.length) + "개)</th>"; | |
| 720 | + sHtml += " </tr>"; | |
| 721 | + sHtml += " </thead>"; | |
| 722 | + sHtml += " <tbody>"; | |
| 723 | + for (var i = 0; i < dupliPhoneDataRealList.length; i++) { | |
| 724 | + sHtml += " <tr>"; | |
| 725 | + sHtml += " <td>" + dupliPhoneDataRealList[i] + "</td>"; | |
| 726 | + sHtml += " </tr>"; | |
| 727 | + } | |
| 728 | + sHtml += " </tbody>"; | |
| 729 | + sHtml += " </table>"; | |
| 730 | + sHtml += " </div>"; | |
| 731 | + | |
| 732 | + $("#addrMassDupli_layer").html(sHtml); | |
| 733 | +} | |
| 734 | + | |
| 735 | +//중복 연락처 => 저장시 | |
| 736 | +function GetAddrMassSaveDupli() { | |
| 737 | + var sHtml = ""; | |
| 738 | + sHtml += "<div class='' style='overflow-x:auto; height:350px;'>"; | |
| 739 | + sHtml += "<table class='tType4'>"; | |
| 740 | + sHtml += " <colgroup>"; | |
| 741 | + sHtml += " <col style='width:auto' />"; | |
| 742 | + sHtml += " </colgroup>"; | |
| 743 | + sHtml += " <thead>"; | |
| 744 | + sHtml += " <tr>"; | |
| 745 | +// sHtml += " <th>중복 휴대폰번호 (" + numberWithCommas(addrMassDupliSaveList.length) + "개)</th>"; | |
| 746 | + sHtml += " <th>중복 휴대폰번호 (10개)</th>"; | |
| 747 | + sHtml += " </tr>"; | |
| 748 | + sHtml += " </thead>"; | |
| 749 | + sHtml += " <tbody>"; | |
| 750 | + for (var i = 0; i < addrMassDupliSaveList.length; i++) { | |
| 751 | + sHtml += " <tr>"; | |
| 752 | + sHtml += " <td>" + addrMassDupliSaveList[i].addrPhoneNo + "</td>"; | |
| 753 | + sHtml += " </tr>"; | |
| 754 | + } | |
| 755 | + sHtml += " </tbody>"; | |
| 756 | + sHtml += " </table>"; | |
| 757 | + sHtml += " </div>"; | |
| 758 | + | |
| 759 | + $("#addrMassSaveDupli_layer").html(sHtml); | |
| 760 | +} | |
| 761 | + | |
| 762 | +</script> | |
| 763 | + <!-- 엑셀입력 --> | |
| 764 | + <div class="popCont current pop_more_cont" id="popCont_1"> | |
| 765 | + <div class="titBox"> | |
| 766 | + <p>- 엑셀(EXCEL) 파일로 주소록을 한 번에 최대 2만건까지 등록하여 간편하게 발송 및 관리하실 수 있습니다.</p> | |
| 767 | + <p>- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 작성하셔야 합니다.</p> | |
| 768 | + <p> ※ 주소록 관리 메뉴에서 다운로드 받으신 엑셀 파일 또한 업로드 양식에 맞추어 작성하셔야 하며, </p> | |
| 769 | + <p> 주소록에 이미 등록된 휴대폰 번호는 업데이트 되지 않으므로 기존 주소록에서 해당 휴대폰 번호를 삭제한 후 재등록해 주시기 바랍니다.</p> | |
| 770 | + <p>- 쉼표(,), 구분선(|), 역슬래시(\, ₩), 작은따옴표('), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.</p> | |
| 771 | + <p>- 휴대폰 번호는 필수입력 항목입니다.</p> | |
| 772 | + <p>- 전화번호 형태는 010-1234-5678 또는 01012345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.</p> | |
| 773 | + <p>- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.</p> | |
| 774 | + <p>- 이름 20byte, [*1*]~[*4*] 40byte, 메모 250byte까지 입력 가능합니다.</p> | |
| 775 | + <p>- 첨부가능 파일 : xlsx, xls(최대용량 3MB)</p> | |
| 776 | + <p>- ‘오류 검사’를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다.</p> | |
| 777 | + <p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p> | |
| 778 | + <button type="button" class="excel_btn" onclick="location.href='/download/addr/주소록_대량등록.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button> | |
| 779 | + </div> | |
| 780 | + <div class="pop_more_wrap"> | |
| 781 | + <button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button> | |
| 782 | + </div> | |
| 783 | + </div><!--// 엑셀입력 --> | |
| 784 | + | |
| 785 | + <!-- 공통 --> | |
| 786 | + <div> | |
| 787 | + <table class="layer_tType1"> | |
| 788 | + <caption>엑셀입력 표</caption> | |
| 789 | + <colgroup> | |
| 790 | + <col style="width: 95px"> | |
| 791 | + <col style="width: auto"> | |
| 792 | + </colgroup> | |
| 793 | + <tbody> | |
| 794 | + <tr> | |
| 795 | + <th>그룹 선택</th> | |
| 796 | + <td> | |
| 797 | + <label for="" class="label">그룹 선택</label> | |
| 798 | + <select id="addrGrpIdInfo" name="addrGrpIdInfo"> | |
| 799 | + </select> | |
| 800 | + <label for="" class="label">그룹명 입력</label> | |
| 801 | + <input type="text" id="addrGrpNm" name="addrGrpNm" placeholder="새 그룹명을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'"class="inputLight" style="width: 300px;"> | |
| 802 | + | |
| 803 | +<!-- <input type="file" id="excelFile" accept=".xls, .xlsx, .txt" onchange="excelExport(event); return false;" style="display:none"/> --> | |
| 804 | + <input type="file" id="excelFile" accept=".xls, .xlsx, .txt" style="display:none"/> | |
| 805 | +<!-- <button type="button" id="file-load-trigger">Choose File</button> --> | |
| 806 | + <button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button> | |
| 807 | + </td> | |
| 808 | + </tr> | |
| 809 | + </tbody> | |
| 810 | + </table> | |
| 811 | + </div> | |
| 812 | + <div class="file_add upload_area"> | |
| 813 | + <p><img src="/publish/images/content/file_add.png" alt="파일 붙여넣기">마우스로 엑셀, TXT파일을 여기에 끌어다 놓으세요</p> | |
| 814 | + </div> | |
| 815 | + <div class="excel_middle2"> | |
| 816 | + <p> | |
| 817 | + 총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건 | |
| 818 | + | |
| 819 | + <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" onclick="GetAddrMassDupli()" id="btnAddrMassDupli">중복번호</button> | |
| 820 | + | |
| 821 | + <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> | |
| 822 | + </p> | |
| 823 | +<!-- <button type="button" class="btnType btnType6 addCallToF">번호추가</button> --> | |
| 824 | + </div> | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + <div class="adr_excel" style="margin-top: 13px;"> | |
| 830 | + <!-- thead --> | |
| 831 | + <div class="adr_hd select_adr_hd" data-group="tableExcel"> | |
| 832 | + <div></div> | |
| 833 | + <div style="width: 125px;"> | |
| 834 | + <label for="" class="label"></label> | |
| 835 | + <select class="field-selector"> | |
| 836 | + <option value="">선택하기</option> | |
| 837 | + <option value="addrNm">이름</option> | |
| 838 | + <option value="addrPhoneNo">휴대폰</option> | |
| 839 | + <option value="addrInfo1">[*1*]</option> | |
| 840 | + <option value="addrInfo2">[*2*]</option> | |
| 841 | + <option value="addrInfo3">[*3*]</option> | |
| 842 | + <option value="addrInfo4">[*4*]</option> | |
| 843 | + <option value="addrComment">메모</option> | |
| 844 | + </select> | |
| 845 | + </div> | |
| 846 | + <div style="width: 125px;"> | |
| 847 | + <label for="" class="label"></label> | |
| 848 | + <select class="field-selector"> | |
| 849 | + <option value="">선택하기</option> | |
| 850 | + <option value="addrNm">이름</option> | |
| 851 | + <option value="addrPhoneNo">휴대폰</option> | |
| 852 | + <option value="addrInfo1">[*1*]</option> | |
| 853 | + <option value="addrInfo2">[*2*]</option> | |
| 854 | + <option value="addrInfo3">[*3*]</option> | |
| 855 | + <option value="addrInfo4">[*4*]</option> | |
| 856 | + <option value="addrComment">메모</option> | |
| 857 | + </select> | |
| 858 | + </div> | |
| 859 | + <div style="width: 125px;"> | |
| 860 | + <label for="" class="label"></label> | |
| 861 | + <select class="field-selector"> | |
| 862 | + <option value="">선택하기</option> | |
| 863 | + <option value="addrNm">이름</option> | |
| 864 | + <option value="addrPhoneNo">휴대폰</option> | |
| 865 | + <option value="addrInfo1">[*1*]</option> | |
| 866 | + <option value="addrInfo2">[*2*]</option> | |
| 867 | + <option value="addrInfo3">[*3*]</option> | |
| 868 | + <option value="addrInfo4">[*4*]</option> | |
| 869 | + <option value="addrComment">메모</option> | |
| 870 | + </select> | |
| 871 | + </div> | |
| 872 | + <div style="width: 125px;"> | |
| 873 | + <label for="" class="label"></label> | |
| 874 | + <select class="field-selector"> | |
| 875 | + <option value="">선택하기</option> | |
| 876 | + <option value="addrNm">이름</option> | |
| 877 | + <option value="addrPhoneNo">휴대폰</option> | |
| 878 | + <option value="addrInfo1">[*1*]</option> | |
| 879 | + <option value="addrInfo2">[*2*]</option> | |
| 880 | + <option value="addrInfo3">[*3*]</option> | |
| 881 | + <option value="addrInfo4">[*4*]</option> | |
| 882 | + <option value="addrComment">메모</option> | |
| 883 | + </select> | |
| 884 | + </div> | |
| 885 | + <div style="width: 125px;"> | |
| 886 | + <label for="" class="label"></label> | |
| 887 | + <select class="field-selector"> | |
| 888 | + <option value="">선택하기</option> | |
| 889 | + <option value="addrNm">이름</option> | |
| 890 | + <option value="addrPhoneNo">휴대폰</option> | |
| 891 | + <option value="addrInfo1">[*1*]</option> | |
| 892 | + <option value="addrInfo2">[*2*]</option> | |
| 893 | + <option value="addrInfo3">[*3*]</option> | |
| 894 | + <option value="addrInfo4">[*4*]</option> | |
| 895 | + <option value="addrComment">메모</option> | |
| 896 | + </select> | |
| 897 | + </div> | |
| 898 | + <div style="width: 125px;"> | |
| 899 | + <label for="" class="label"></label> | |
| 900 | + <select class="field-selector"> | |
| 901 | + <option value="">선택하기</option> | |
| 902 | + <option value="addrNm">이름</option> | |
| 903 | + <option value="addrPhoneNo">휴대폰</option> | |
| 904 | + <option value="addrInfo1">[*1*]</option> | |
| 905 | + <option value="addrInfo2">[*2*]</option> | |
| 906 | + <option value="addrInfo3">[*3*]</option> | |
| 907 | + <option value="addrInfo4">[*4*]</option> | |
| 908 | + <option value="addrComment">메모</option> | |
| 909 | + </select> | |
| 910 | + </div> | |
| 911 | + <div style="width: 125px;"> | |
| 912 | + <label for="" class="label"></label> | |
| 913 | + <select class="field-selector"> | |
| 914 | + <option value="">선택하기</option> | |
| 915 | + <option value="addrNm">이름</option> | |
| 916 | + <option value="addrPhoneNo">휴대폰</option> | |
| 917 | + <option value="addrInfo1">[*1*]</option> | |
| 918 | + <option value="addrInfo2">[*2*]</option> | |
| 919 | + <option value="addrInfo3">[*3*]</option> | |
| 920 | + <option value="addrInfo4">[*4*]</option> | |
| 921 | + <option value="addrComment">메모</option> | |
| 922 | + </select> | |
| 923 | + </div> | |
| 924 | + </div> | |
| 925 | + </div> | |
| 926 | + | |
| 927 | + <div class="drag_drop_wrap callList_box" id="tabulator_excel"> | |
| 928 | + <img src="/publish/images/content/excel.jpg" style="width: 100%;"> | |
| 929 | + </div> | |
| 930 | + <div class="excel_middle"> | |
| 931 | + <div class="select_btnWrap clearfix"> | |
| 932 | + <div> | |
| 933 | + <button type="button" class="all_del"><i class="remove_img"></i>전체삭제</button> | |
| 934 | + <button type="button" class="select_del"><i class="remove_img"></i>선택삭제</button> | |
| 935 | + <button type="button" class="chkVali_del"><i class="remove_img"></i>오류번호삭제</button> | |
| 936 | + <button type="button" class="check_validity">오류 검사 <i></i></button> | |
| 937 | + <div class="error_hover_cont send_hover_cont addr_hover_cont"> | |
| 938 | + <p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p> | |
| 939 | + <span>(예시) 010-1234-0001(O) / 010-123-0001(X)</span> | |
| 940 | + </div> | |
| 941 | + </div> | |
| 942 | + | |
| 943 | + </div> | |
| 944 | + </div><!--// 공통 --> | |
| 945 | + | |
| 946 | + <!-- 붙여놓기 설명 --> | |
| 947 | + <div class="req_area"> | |
| 948 | + <div class="text_box"> | |
| 949 | + - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> | |
| 950 | + - 휴대폰 번호는 필수입력 항목입니다.<br> | |
| 951 | + - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> | |
| 952 | + - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> | |
| 953 | + - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. | |
| 954 | + </div> | |
| 955 | + </div> |
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp
... | ... | @@ -0,0 +1,697 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> | |
| 5 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 6 | + | |
| 7 | +<script type="text/javascript" src="<c:url value='/publish/js/content.js'/>"></script> | |
| 8 | + | |
| 9 | +<script type="text/javascript"> | |
| 10 | +$(document).ready(function(){ | |
| 11 | + | |
| 12 | + // 중복 휴대폰번호 버튼 노출여부 | |
| 13 | +// $("#btnAddrMassDupli").hide(); | |
| 14 | +// $("#btnAddrMassSaveDupli").hide(); | |
| 15 | + | |
| 16 | + //붙여넣기 이벤트 핸들러 | |
| 17 | + document.querySelector('#tabulator_clip').addEventListener('paste', function(e) { | |
| 18 | + e.preventDefault(); | |
| 19 | + var text = e.clipboardData.getData('text/plain'); | |
| 20 | + var rows = text.split('\n').map(row => row.split(',').map(cell => cell.trim())); | |
| 21 | + | |
| 22 | + var tableData = rows.map(row => { | |
| 23 | + return { | |
| 24 | + A: row[0] || "", | |
| 25 | + B: row[1] || "", | |
| 26 | + C: row[2] || "", | |
| 27 | + D: row[3] || "", | |
| 28 | + E: row[4] || "", | |
| 29 | + F: row[5] || "", | |
| 30 | + G: row[6] || "" | |
| 31 | + }; | |
| 32 | + }); | |
| 33 | + | |
| 34 | + $tableClip.setData(tableData); | |
| 35 | + }); | |
| 36 | + | |
| 37 | +}); | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | +function addrGroupLoadAjax(){ | |
| 43 | + $("#addrRegistSelect").load("/web/addr/selectAddrGroupAjax.do", function(response, status, xhr){}); | |
| 44 | + $("#funcAddrGroupSelect").load("/web/addr/selectAddrGroupAjax.do", function(response, status, xhr){}); | |
| 45 | +} | |
| 46 | + | |
| 47 | + | |
| 48 | +function insertAddrGroupAjax() { | |
| 49 | + var form = document.addrGrpInsertForm; | |
| 50 | + if(form.addrGrpNm.value == "") { | |
| 51 | + alert("주소록 그룹명을 입력해주세요."); | |
| 52 | + return; | |
| 53 | + } | |
| 54 | + if(!confirm("주소록 그룹을 추가하시겠습니까?")) { | |
| 55 | + return; | |
| 56 | + } | |
| 57 | + var data = new FormData(form); | |
| 58 | + | |
| 59 | + $.ajax({ | |
| 60 | + cache : false, | |
| 61 | + url : "<c:url value='/web/addr/insertAddrGroupAjax.do' />", | |
| 62 | + type : 'POST', | |
| 63 | + data : data, | |
| 64 | + dataType:'json', | |
| 65 | + processData: false, | |
| 66 | + contentType: false, | |
| 67 | + success : function(returnData, status){ | |
| 68 | + if(status == "success") { | |
| 69 | + if("fail"==returnData.result){ | |
| 70 | + alert(returnData.message); | |
| 71 | + return; | |
| 72 | + } else if("dupl"==returnData.result) { | |
| 73 | + alert("중복된 그룹명입니다."); | |
| 74 | + return; | |
| 75 | + } | |
| 76 | + alert("등록되었습니다."); | |
| 77 | + listAddrGrp(); | |
| 78 | + addrGroupLoadAjax(); | |
| 79 | + | |
| 80 | + }else{ alert("ERROR!");return;} | |
| 81 | + }, | |
| 82 | + error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); } | |
| 83 | + }); | |
| 84 | + | |
| 85 | +} | |
| 86 | + | |
| 87 | +function insertAddrAjax() { | |
| 88 | + var selectVal = $("#addrRegistSelect option:selected").val(); | |
| 89 | + //alert(selectVal); | |
| 90 | + | |
| 91 | + var form = document.addrInsertForm; | |
| 92 | + /* | |
| 93 | + //필수값 아니어서 뺐음 | |
| 94 | + if(form.addrNm.value == "") { | |
| 95 | + alert("주소록 이름을 입력하세요"); | |
| 96 | + return; | |
| 97 | + } | |
| 98 | + */ | |
| 99 | + if(form.addrPhoneNo.value == "") { | |
| 100 | + alert("주소록 번호를 입력하세요"); | |
| 101 | + return; | |
| 102 | + } | |
| 103 | + //if(!confirm("주소록을 추가하시겠습니까?")) { | |
| 104 | + // return; | |
| 105 | + //} | |
| 106 | + | |
| 107 | + if(!checkHpNum(form.addrPhoneNo.value)){//휴대폰 유효성 검사 | |
| 108 | + if(!checkNorPhoneNum(form.addrPhoneNo.value)){//일반전화 유효성 검사 | |
| 109 | + | |
| 110 | + alert("잘못된 휴대폰번호 또는 일반전화 번호 입니다."); | |
| 111 | + return false; | |
| 112 | + | |
| 113 | + } | |
| 114 | + | |
| 115 | + } | |
| 116 | + | |
| 117 | + var data = new FormData(form); | |
| 118 | + | |
| 119 | + $.ajax({ | |
| 120 | + cache : false, | |
| 121 | + url : "<c:url value='/web/mjon/addr/insertAddrAjax.do' />", | |
| 122 | + type : 'POST', | |
| 123 | + data : data, | |
| 124 | + dataType:'json', | |
| 125 | + processData: false, | |
| 126 | + contentType: false, | |
| 127 | + success : function(returnData, status){ | |
| 128 | + if(status == "success") { | |
| 129 | + if("fail"==returnData.result){ | |
| 130 | + alert(returnData.message); | |
| 131 | + return; | |
| 132 | + } else if("dupl"==returnData.result){ | |
| 133 | + alert("해당 그룹에 중복된 번호가 있습니다."); | |
| 134 | + return; | |
| 135 | + } | |
| 136 | + //alert("저장 되었습니다."); | |
| 137 | + | |
| 138 | + listAddrGrp(); | |
| 139 | + addrGroupLoadAjax(); | |
| 140 | + addrLoadAjax(); | |
| 141 | + | |
| 142 | + // 주소록그룹 콤보박스 유지 | |
| 143 | + setTimeout(setSelectSetting, 500, selectVal); | |
| 144 | + | |
| 145 | + }else{ alert("ERROR!");return;} | |
| 146 | + }, | |
| 147 | + error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); } | |
| 148 | + }); | |
| 149 | + | |
| 150 | +} | |
| 151 | + | |
| 152 | +// 주소록그룹 콤보박스 유지 | |
| 153 | +function setSelectSetting(selectVal) { | |
| 154 | + $("#addrRegistSelect").val(selectVal).prop("selected", true); | |
| 155 | +} | |
| 156 | + | |
| 157 | +function linkPage(pageNo){ | |
| 158 | + if ($('#searchKeywordAddr').val() != "" && $('#searchKeywordAddr').val() != null && $('#searchKeywordAddr').val() != undefined) { | |
| 159 | + // 문자전송 검색용 | |
| 160 | + $("#msgStartKeyword").val(""); | |
| 161 | + } | |
| 162 | + | |
| 163 | + var searchForm = document.searchAddrForm; | |
| 164 | + searchForm.pageIndex.value = pageNo; | |
| 165 | + searchForm.pageUnit.value = $('#pageUnit').val(); | |
| 166 | + searchForm.searchCondition.value = $('#searchConditionAddr').val(); | |
| 167 | + searchForm.searchKeyword.value = $('#searchKeywordAddr').val(); | |
| 168 | + searchForm.startKeyword.value = $("#msgStartKeyword").val(); | |
| 169 | + | |
| 170 | + var sendData = $(document.searchAddrForm).serializeArray(); | |
| 171 | + $("#adr1_right").load("/web/mjon/addr/selectAddrAjax.do", sendData, function(response, status, xhr){tableAllChk();}); | |
| 172 | + addrGroupLoadAjax(); | |
| 173 | +} | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | +//############################################################################################# | |
| 178 | +//Tabulator | |
| 179 | +//############################################################################################# | |
| 180 | + | |
| 181 | +$(document).ready(function(){ | |
| 182 | + //Tabulator AJAX Data Loading | |
| 183 | + | |
| 184 | + // 파일 선택 버튼 클릭 이벤트 | |
| 185 | + $("#file-load-trigger").on("click", function() { | |
| 186 | + $("#excelFile").click(); | |
| 187 | + }); | |
| 188 | + | |
| 189 | + // 파일 입력 이벤트 | |
| 190 | + $("#excelFile").on("change", function(event) { | |
| 191 | + excelFileChange(event.target.files[0]); | |
| 192 | + }); | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + //받는사람 전체삭제 버튼 처리 | |
| 197 | + $('.all_del').click(function(){ | |
| 198 | + var data = $tableClip.getRows(); | |
| 199 | + if(data == null || data == ""){ | |
| 200 | + alert("받는사람을 추가해 주세요."); | |
| 201 | + return false; | |
| 202 | + }else{ | |
| 203 | + $tableClip.clearData(); | |
| 204 | + $("#rowTotCnt").text(0); //총건수 수정 | |
| 205 | + $("#rowDupCnt").text(0); //중복건수 수정 | |
| 206 | + dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 | |
| 207 | + } | |
| 208 | + | |
| 209 | + }); | |
| 210 | + | |
| 211 | + | |
| 212 | + // 받는사람 선택삭제 버튼 처리해주기 | |
| 213 | + $('.select_del').click(function(){ | |
| 214 | + $("#rowDupCnt").text(0); //중복건수 수정 | |
| 215 | + dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 | |
| 216 | + | |
| 217 | + if($tableClip == null || $tableClip == ""){ | |
| 218 | + alert("받는사람을 추가해 주세요."); | |
| 219 | + return false; | |
| 220 | + } | |
| 221 | + | |
| 222 | + var selectedData = $tableClip.getSelectedRows(); | |
| 223 | + | |
| 224 | + if(selectedData == "" || selectedData == null){ | |
| 225 | + alert("받는 사람을 선택해 주세요."); | |
| 226 | + return false; | |
| 227 | + }else{ // 선택한 Row 데이터 삭제하기 | |
| 228 | + for(var i=0; i < selectedData.length; i++){ | |
| 229 | + selectedData[i].delete(); | |
| 230 | + } | |
| 231 | + } | |
| 232 | + | |
| 233 | + totRows = $tableClip.getRows().length; | |
| 234 | + | |
| 235 | + updateTotCnt(totRows); | |
| 236 | + }); | |
| 237 | + | |
| 238 | + //받는사람 오류번호 삭제 처리해주기 | |
| 239 | + $('.chkVali_del').click(function(){ | |
| 240 | + //기존 연락처 모두 불러오기 | |
| 241 | + var data = $tableClip.getRows(); | |
| 242 | + var tableData = []; | |
| 243 | + var totLen = $tableClip.getRows().length; | |
| 244 | + var errCnt = 0; | |
| 245 | + | |
| 246 | + if(totLen > 0){ | |
| 247 | + if(confirm("올바르지 않은 연락처 정보를 삭제 하시겠습니까?")){ | |
| 248 | + for(var i=0; i < totLen; i++){ | |
| 249 | + | |
| 250 | + | |
| 251 | + var phone = data[i].getData().phone; | |
| 252 | + var valiCheck = checkHpNum(phone); | |
| 253 | + if(valiCheck){ | |
| 254 | + tableData.push({name: data[i].getData().name.trim(), phone: data[i].getData().phone.trim(), info1:data[i].getData().info1, info2:data[i].getData().info2, info3:data[i].getData().info3, info4:data[i].getData().info4, memo:data[i].getData().memo}); | |
| 255 | + }else{ | |
| 256 | + errCnt++; | |
| 257 | + } | |
| 258 | + } | |
| 259 | + | |
| 260 | + var removeDuplData = dupliPhoneData(tableData); | |
| 261 | + | |
| 262 | + $tableClip.setData(removeDuplData); | |
| 263 | + | |
| 264 | + //총 받는사람 수 계산 | |
| 265 | + totRows = $tableClip.getRows().length; | |
| 266 | + updateTotCnt(totRows); | |
| 267 | + | |
| 268 | + if(errCnt > 0){ | |
| 269 | + alert(errCnt + " 건의 연락처를 삭제하였습니다."); | |
| 270 | + return false; | |
| 271 | + }else{ | |
| 272 | + alert("오류가 있는 연락처가 없습니다."); | |
| 273 | + } | |
| 274 | + } | |
| 275 | + }else{ | |
| 276 | + alert("연락처 정보를 입력해 주세요."); | |
| 277 | + return false; | |
| 278 | + } | |
| 279 | + }); | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + // 오류검사 항목 중복제거 | |
| 286 | + function SetTableErrorDupliCheck(sVal) { | |
| 287 | + var isDuplicate = false; | |
| 288 | + if (tableErrorCheckData.length == 0) { | |
| 289 | + tableErrorCheckData.push(sVal); | |
| 290 | + } | |
| 291 | + else { | |
| 292 | + for (var i = 0; i < tableErrorCheckData.length; i++) | |
| 293 | + { | |
| 294 | + if (tableErrorCheckData[i] == sVal) { | |
| 295 | + isDuplicate = true; | |
| 296 | + } | |
| 297 | + } | |
| 298 | + | |
| 299 | + if (isDuplicate) { | |
| 300 | + return; | |
| 301 | + } | |
| 302 | + else { | |
| 303 | + tableErrorCheckData.push(sVal); | |
| 304 | + } | |
| 305 | + } | |
| 306 | + } | |
| 307 | + | |
| 308 | + | |
| 309 | + // 오류검사 항목 중복제거 | |
| 310 | + function SetTableErrorDupliCheck(sVal) { | |
| 311 | + var isDuplicate = false; | |
| 312 | + if (tableErrorCheckData.length == 0) { | |
| 313 | + tableErrorCheckData.push(sVal); | |
| 314 | + } | |
| 315 | + else { | |
| 316 | + for (var i = 0; i < tableErrorCheckData.length; i++) | |
| 317 | + { | |
| 318 | + if (tableErrorCheckData[i] == sVal) { | |
| 319 | + isDuplicate = true; | |
| 320 | + } | |
| 321 | + } | |
| 322 | + | |
| 323 | + if (isDuplicate) { | |
| 324 | + return; | |
| 325 | + } | |
| 326 | + else { | |
| 327 | + tableErrorCheckData.push(sVal); | |
| 328 | + } | |
| 329 | + } | |
| 330 | + } | |
| 331 | + | |
| 332 | + $('.check_validity').click(function(){ | |
| 333 | + tableErrorCheckData.length = 0; // 오류 번호 배열 초기화 | |
| 334 | + | |
| 335 | + var data = $tableClip.getRows(); | |
| 336 | + var invalid = $tableClip.getInvalidCells(); //오류 데이터 체크 | |
| 337 | + var dataLen = $tableClip.getRows().length; //연락처 데이터 갯수 | |
| 338 | + var totLen = invalid.length; //오류 데이터 갯수 | |
| 339 | + var errMsg = ""; //최종 alert에 표시할 메시지 저장 변수 | |
| 340 | + | |
| 341 | + if(dataLen > 0) { //연락처 정보가 있으면 수행 | |
| 342 | + if(totLen > 0) { //내용에 오류가 있으면 수행 | |
| 343 | + //오류 데이터 값 저장 | |
| 344 | + for(var i=0; i < totLen; i++) { | |
| 345 | + var cellValue = invalid[i].getValue(); | |
| 346 | + SetTableErrorDupliCheck(cellValue); | |
| 347 | + } | |
| 348 | + | |
| 349 | + for(var i=0; i < dataLen; i++){ | |
| 350 | + // 휴대폰번호 체크 | |
| 351 | + var phone = data[i].getData().phone; | |
| 352 | + var valiCheck = checkHpNum(phone); | |
| 353 | + if(!valiCheck){ | |
| 354 | + SetTableErrorDupliCheck(phone); | |
| 355 | + } | |
| 356 | + } | |
| 357 | + } | |
| 358 | + else { | |
| 359 | + for(var i=0; i < dataLen; i++){ | |
| 360 | + // 휴대폰번호 체크 | |
| 361 | + var phone = data[i].getData().phone; | |
| 362 | + var valiCheck = checkHpNum(phone); | |
| 363 | + if(!valiCheck){ | |
| 364 | + SetTableErrorDupliCheck(phone); | |
| 365 | + } | |
| 366 | + } | |
| 367 | + } | |
| 368 | + } | |
| 369 | + else { | |
| 370 | + alert("연락처를 입력해 주세요."); | |
| 371 | + return false; | |
| 372 | + } | |
| 373 | + | |
| 374 | + if (tableErrorCheckData.length > 0) { | |
| 375 | + for (var i = 0; i < tableErrorCheckData.length; i++) | |
| 376 | + { | |
| 377 | + errMsg += tableErrorCheckData[i]; | |
| 378 | + if ((tableErrorCheckData.length - 1) > i) { | |
| 379 | + errMsg += ", "; | |
| 380 | + } | |
| 381 | + } | |
| 382 | + alert(errMsg + "의 내용에 오류가 있습니다."); | |
| 383 | + } | |
| 384 | + else { | |
| 385 | + alert("오류 데이터가 없습니다."); | |
| 386 | + } | |
| 387 | + | |
| 388 | + return false; | |
| 389 | + }); | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + //받는사람 중복 삭제 | |
| 394 | + $('.duple_del').click(function(){ | |
| 395 | + //기존 연락처 모두 불러오기 | |
| 396 | + var data = $tableClip.getRows(); | |
| 397 | + var tableData = []; | |
| 398 | + var dpCnt = 0; | |
| 399 | + var totLen = $tableClip.getRows().length; | |
| 400 | + | |
| 401 | + for(var i=0; i < totLen; i++){ | |
| 402 | + tableData.push({name: data[i].getData().name.trim(), phone: data[i].getData().phone.trim()}); | |
| 403 | + } | |
| 404 | + | |
| 405 | + var removeDuplData = dupliPhoneData(tableData); | |
| 406 | + $tableClip.setData(removeDuplData); | |
| 407 | + | |
| 408 | + //총 받는사람 수 계산 | |
| 409 | + totRows = $tableClip.getRows().length; | |
| 410 | + updateTotCnt(totRows); | |
| 411 | + }); | |
| 412 | + | |
| 413 | + | |
| 414 | +}); | |
| 415 | + | |
| 416 | + | |
| 417 | +// Show Html | |
| 418 | +function getAddrGroupListShow(jsonList) { | |
| 419 | + var sHtml = ""; | |
| 420 | + sHtml += "<option value='NEW'>그룹추가</option>"; | |
| 421 | + sHtml += "<option value='0'>그룹미지정</option>"; | |
| 422 | + sHtml += "<option value='bookmark'>자주보내는 번호</option>"; | |
| 423 | + for (var j = 0; j < jsonList.length; j++) { | |
| 424 | + sHtml += " <option value='" + $.trim(jsonList[j].addrGrpId) + "' />" + $.trim(jsonList[j].addrGrpNm) + "</option>"; | |
| 425 | + } | |
| 426 | + | |
| 427 | + $("#addrGrpIdInfo").html(sHtml); | |
| 428 | +} | |
| 429 | + | |
| 430 | +$(document).on('change', '#addrGrpIdInfo', function() { | |
| 431 | + if ($("#addrGrpIdInfo option:selected").val() != "NEW") { | |
| 432 | + $("#addrGrpNm").val(""); // 새그룹명 Clear; | |
| 433 | + } | |
| 434 | +}); | |
| 435 | + | |
| 436 | +//############################################################################################# | |
| 437 | +//파일 불러오기 | |
| 438 | +//############################################################################################# | |
| 439 | + | |
| 440 | + | |
| 441 | +//체크박스 전체선택/해제 | |
| 442 | +$(document).on("click", "#chkAll", function(e) { | |
| 443 | + var isChecked = $(this).is(":checked"); | |
| 444 | + $("input[name=addrCheck]:checkbox").prop("checked", isChecked); | |
| 445 | +}); | |
| 446 | + | |
| 447 | +$(document).on("click", "#duplicationChkAll", function(e) { | |
| 448 | + var isChecked = $(this).is(":checked"); | |
| 449 | + $("input[name=addrCheck]:checkbox").prop("checked", isChecked); | |
| 450 | +}); | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | +// 중복 연락처 | |
| 455 | +function GetAddrMassDupli() { | |
| 456 | + var sHtml = ""; | |
| 457 | + sHtml += "<div class='' style='overflow-x:auto; height:350px;'>"; | |
| 458 | + sHtml += "<table class='tType4'>"; | |
| 459 | + sHtml += " <colgroup>"; | |
| 460 | + sHtml += " <col style='width:auto' />"; | |
| 461 | + sHtml += " </colgroup>"; | |
| 462 | + sHtml += " <thead>"; | |
| 463 | + sHtml += " <tr>"; | |
| 464 | + sHtml += " <th>중복 휴대폰번호 (" + numberWithCommas(dupliPhoneDataRealList.length) + "개)</th>"; | |
| 465 | + sHtml += " </tr>"; | |
| 466 | + sHtml += " </thead>"; | |
| 467 | + sHtml += " <tbody>"; | |
| 468 | + for (var i = 0; i < dupliPhoneDataRealList.length; i++) { | |
| 469 | + sHtml += " <tr>"; | |
| 470 | + sHtml += " <td>" + dupliPhoneDataRealList[i] + "</td>"; | |
| 471 | + sHtml += " </tr>"; | |
| 472 | + } | |
| 473 | + sHtml += " </tbody>"; | |
| 474 | + sHtml += " </table>"; | |
| 475 | + sHtml += " </div>"; | |
| 476 | + | |
| 477 | + $("#addrMassDupli_layer").html(sHtml); | |
| 478 | +} | |
| 479 | + | |
| 480 | +//중복 연락처 => 저장시 | |
| 481 | +function GetAddrMassSaveDupli() { | |
| 482 | + var sHtml = ""; | |
| 483 | + sHtml += "<div class='' style='overflow-x:auto; height:350px;'>"; | |
| 484 | + sHtml += "<table class='tType4'>"; | |
| 485 | + sHtml += " <colgroup>"; | |
| 486 | + sHtml += " <col style='width:auto' />"; | |
| 487 | + sHtml += " </colgroup>"; | |
| 488 | + sHtml += " <thead>"; | |
| 489 | + sHtml += " <tr>"; | |
| 490 | +// sHtml += " <th>중복 휴대폰번호 (" + numberWithCommas(addrMassDupliSaveList.length) + "개)</th>"; | |
| 491 | + sHtml += " <th>중복 휴대폰번호 (10개)</th>"; | |
| 492 | + sHtml += " </tr>"; | |
| 493 | + sHtml += " </thead>"; | |
| 494 | + sHtml += " <tbody>"; | |
| 495 | + for (var i = 0; i < addrMassDupliSaveList.length; i++) { | |
| 496 | + sHtml += " <tr>"; | |
| 497 | + sHtml += " <td>" + addrMassDupliSaveList[i].addrPhoneNo + "</td>"; | |
| 498 | + sHtml += " </tr>"; | |
| 499 | + } | |
| 500 | + sHtml += " </tbody>"; | |
| 501 | + sHtml += " </table>"; | |
| 502 | + sHtml += " </div>"; | |
| 503 | + | |
| 504 | + $("#addrMassSaveDupli_layer").html(sHtml); | |
| 505 | +} | |
| 506 | + | |
| 507 | +</script> | |
| 508 | + | |
| 509 | + <!-- 붙여넣기 --> | |
| 510 | + <div class="popCont pop_more_cont" id="popCont_2"> | |
| 511 | + <div class="titBox"> | |
| 512 | + <p>- 텍스트(txt) 파일로 작성된 주소록을 등록하실 수 있습니다.</p> | |
| 513 | + <p>- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 붙여 넣으셔야 합니다.</p> | |
| 514 | + <p>- 입력 내용은 (Tab) 또는 (,) 구분하여 입력하여야 합니다.</p> | |
| 515 | + <p>- 한 줄(열)에 주소 한 건만 입력 가능합니다.</p> | |
| 516 | + <p>- 전화번호 형태는 010-1234-5678 또는 01012345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.</p> | |
| 517 | + <p> (예) 홍길동,010-1234-5678 또는 홍길동,01012345678</p> | |
| 518 | + <p>- 한번에 많은 양의 데이터를 입력하시려면 ‘주소록 복사(Ctrl+c) + 붙여넣기(Ctrl+v)’ 또는 ‘엑셀입력’을 이용하세요.</p> | |
| 519 | + <p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p> | |
| 520 | + <button type="button" class="txt_btn" onclick="location.href='/download/addr/주소록_대량등록.zip'"><i></i>TXT샘플 다운로드</button> | |
| 521 | + </div> | |
| 522 | + <div class="pop_more_wrap"> | |
| 523 | + <button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button> | |
| 524 | + </div> | |
| 525 | + </div><!--// 붙여넣기 --> | |
| 526 | + | |
| 527 | + <!-- 공통 --> | |
| 528 | + <div> | |
| 529 | + <table class="layer_tType1"> | |
| 530 | + <caption>엑셀입력 표</caption> | |
| 531 | + <colgroup> | |
| 532 | + <col style="width: 95px"> | |
| 533 | + <col style="width: auto"> | |
| 534 | + </colgroup> | |
| 535 | + <tbody> | |
| 536 | + <tr> | |
| 537 | + <th>그룹 선택</th> | |
| 538 | + <td> | |
| 539 | + <label for="" class="label">그룹 선택</label> | |
| 540 | + <select id="addrGrpIdInfo" name="addrGrpIdInfo"> | |
| 541 | + </select> | |
| 542 | + <label for="" class="label">그룹명 입력</label> | |
| 543 | + <input type="text" id="addrGrpNm" name="addrGrpNm" placeholder="새 그룹명을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'"class="inputLight" style="width: 300px;"> | |
| 544 | + | |
| 545 | +<!-- <input type="file" id="excelFile" accept=".xls, .xlsx, .txt" onchange="excelExport(event); return false;" style="display:none"/> --> | |
| 546 | + <input type="file" id="excelFile" accept=".xls, .xlsx, .txt" style="display:none"/> | |
| 547 | +<!-- <button type="button" id="file-load-trigger">Choose File</button> --> | |
| 548 | + <button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button> | |
| 549 | + </td> | |
| 550 | + </tr> | |
| 551 | + </tbody> | |
| 552 | + </table> | |
| 553 | + </div> | |
| 554 | + <div class="file_add upload_area"> | |
| 555 | + <p><img src="/publish/images/content/file_add.png" alt="파일 붙여넣기">마우스로 엑셀, TXT파일을 여기에 끌어다 놓으세요</p> | |
| 556 | + </div> | |
| 557 | + <div class="excel_middle2"> | |
| 558 | + <p> | |
| 559 | + 총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건 | |
| 560 | +<!-- --> | |
| 561 | +<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" onclick="GetAddrMassDupli()" id="btnAddrMassDupli">중복번호</button> --> | |
| 562 | +<!-- --> | |
| 563 | +<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> --> | |
| 564 | + </p> | |
| 565 | + <button type="button" class="btnType btnType6 addCallToF">번호추가</button> | |
| 566 | + </div> | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + <div class="adr_excel" style="margin-top: 13px;"> | |
| 572 | + <!-- thead --> | |
| 573 | + <div class="adr_hd select_adr_hd" data-group="tabulClip"> | |
| 574 | + <div></div> | |
| 575 | + <div style="width: 125px;"> | |
| 576 | + <label for="" class="label"></label> | |
| 577 | + <select class="field-selector"> | |
| 578 | + <option value="">선택하기</option> | |
| 579 | + <option value="addrNm">이름</option> | |
| 580 | + <option value="addrPhoneNo">휴대폰</option> | |
| 581 | + <option value="addrInfo1">[*1*]</option> | |
| 582 | + <option value="addrInfo2">[*2*]</option> | |
| 583 | + <option value="addrInfo3">[*3*]</option> | |
| 584 | + <option value="addrInfo4">[*4*]</option> | |
| 585 | + <option value="addrComment">메모</option> | |
| 586 | + </select> | |
| 587 | + </div> | |
| 588 | + <div style="width: 125px;"> | |
| 589 | + <label for="" class="label"></label> | |
| 590 | + <select class="field-selector"> | |
| 591 | + <option value="">선택하기</option> | |
| 592 | + <option value="addrNm">이름</option> | |
| 593 | + <option value="addrPhoneNo">휴대폰</option> | |
| 594 | + <option value="addrInfo1">[*1*]</option> | |
| 595 | + <option value="addrInfo2">[*2*]</option> | |
| 596 | + <option value="addrInfo3">[*3*]</option> | |
| 597 | + <option value="addrInfo4">[*4*]</option> | |
| 598 | + <option value="addrComment">메모</option> | |
| 599 | + </select> | |
| 600 | + </div> | |
| 601 | + <div style="width: 125px;"> | |
| 602 | + <label for="" class="label"></label> | |
| 603 | + <select class="field-selector"> | |
| 604 | + <option value="">선택하기</option> | |
| 605 | + <option value="addrNm">이름</option> | |
| 606 | + <option value="addrPhoneNo">휴대폰</option> | |
| 607 | + <option value="addrInfo1">[*1*]</option> | |
| 608 | + <option value="addrInfo2">[*2*]</option> | |
| 609 | + <option value="addrInfo3">[*3*]</option> | |
| 610 | + <option value="addrInfo4">[*4*]</option> | |
| 611 | + <option value="addrComment">메모</option> | |
| 612 | + </select> | |
| 613 | + </div> | |
| 614 | + <div style="width: 125px;"> | |
| 615 | + <label for="" class="label"></label> | |
| 616 | + <select class="field-selector"> | |
| 617 | + <option value="">선택하기</option> | |
| 618 | + <option value="addrNm">이름</option> | |
| 619 | + <option value="addrPhoneNo">휴대폰</option> | |
| 620 | + <option value="addrInfo1">[*1*]</option> | |
| 621 | + <option value="addrInfo2">[*2*]</option> | |
| 622 | + <option value="addrInfo3">[*3*]</option> | |
| 623 | + <option value="addrInfo4">[*4*]</option> | |
| 624 | + <option value="addrComment">메모</option> | |
| 625 | + </select> | |
| 626 | + </div> | |
| 627 | + <div style="width: 125px;"> | |
| 628 | + <label for="" class="label"></label> | |
| 629 | + <select class="field-selector"> | |
| 630 | + <option value="">선택하기</option> | |
| 631 | + <option value="addrNm">이름</option> | |
| 632 | + <option value="addrPhoneNo">휴대폰</option> | |
| 633 | + <option value="addrInfo1">[*1*]</option> | |
| 634 | + <option value="addrInfo2">[*2*]</option> | |
| 635 | + <option value="addrInfo3">[*3*]</option> | |
| 636 | + <option value="addrInfo4">[*4*]</option> | |
| 637 | + <option value="addrComment">메모</option> | |
| 638 | + </select> | |
| 639 | + </div> | |
| 640 | + <div style="width: 125px;"> | |
| 641 | + <label for="" class="label"></label> | |
| 642 | + <select class="field-selector"> | |
| 643 | + <option value="">선택하기</option> | |
| 644 | + <option value="addrNm">이름</option> | |
| 645 | + <option value="addrPhoneNo">휴대폰</option> | |
| 646 | + <option value="addrInfo1">[*1*]</option> | |
| 647 | + <option value="addrInfo2">[*2*]</option> | |
| 648 | + <option value="addrInfo3">[*3*]</option> | |
| 649 | + <option value="addrInfo4">[*4*]</option> | |
| 650 | + <option value="addrComment">메모</option> | |
| 651 | + </select> | |
| 652 | + </div> | |
| 653 | + <div style="width: 125px;"> | |
| 654 | + <label for="" class="label"></label> | |
| 655 | + <select class="field-selector"> | |
| 656 | + <option value="">선택하기</option> | |
| 657 | + <option value="addrNm">이름</option> | |
| 658 | + <option value="addrPhoneNo">휴대폰</option> | |
| 659 | + <option value="addrInfo1">[*1*]</option> | |
| 660 | + <option value="addrInfo2">[*2*]</option> | |
| 661 | + <option value="addrInfo3">[*3*]</option> | |
| 662 | + <option value="addrInfo4">[*4*]</option> | |
| 663 | + <option value="addrComment">메모</option> | |
| 664 | + </select> | |
| 665 | + </div> | |
| 666 | + </div> | |
| 667 | + </div> | |
| 668 | + | |
| 669 | + <div class="drag_drop_wrap callList_box" id="tabulator_clip"> | |
| 670 | + <img src="/publish/images/content/excel.jpg" style="width: 100%;"> | |
| 671 | + </div> | |
| 672 | + <div class="excel_middle"> | |
| 673 | + <div class="select_btnWrap clearfix"> | |
| 674 | + <div> | |
| 675 | + <button type="button" class="all_del"><i class="remove_img"></i>전체삭제</button> | |
| 676 | + <button type="button" class="select_del"><i class="remove_img"></i>선택삭제</button> | |
| 677 | + <button type="button" class="chkVali_del"><i class="remove_img"></i>오류번호삭제</button> | |
| 678 | + <button type="button" class="check_validity">오류 검사 <i></i></button> | |
| 679 | + <div class="error_hover_cont send_hover_cont addr_hover_cont"> | |
| 680 | + <p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p> | |
| 681 | + <span>(예시) 010-1234-0001(O) / 010-123-0001(X)</span> | |
| 682 | + </div> | |
| 683 | + </div> | |
| 684 | + | |
| 685 | + </div> | |
| 686 | + </div><!--// 공통 --> | |
| 687 | + | |
| 688 | + <!-- 붙여놓기 설명 --> | |
| 689 | + <div class="req_area"> | |
| 690 | + <div class="text_box"> | |
| 691 | + - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> | |
| 692 | + - 휴대폰 번호는 필수입력 항목입니다.<br> | |
| 693 | + - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> | |
| 694 | + - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> | |
| 695 | + - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. | |
| 696 | + </div> | |
| 697 | + </div> |
+++ src/main/webapp/js/web/addr/event.js
... | ... | @@ -0,0 +1,117 @@ |
| 1 | + | |
| 2 | + | |
| 3 | +$(document).ready(function(){ | |
| 4 | + | |
| 5 | + | |
| 6 | + //타이틀 select 선택 이벤트 | |
| 7 | + $('[data-group]').on('change', '.field-selector', function() { | |
| 8 | + | |
| 9 | + var group = $(this).closest('[data-group]').data('group'); | |
| 10 | + var selectedFields = []; | |
| 11 | + var isDuplicate = false; | |
| 12 | + | |
| 13 | + | |
| 14 | + // 타불 객체 가져오기 | |
| 15 | + var $objTabul = fn_utils_getTabulator(); | |
| 16 | + | |
| 17 | + console.log('$objTabul : ', $objTabul); | |
| 18 | + | |
| 19 | + if($objTabul.getData().length < 1){ | |
| 20 | + alert('데이터 입력 후 선택해 주세요.'); | |
| 21 | + $(this).val(""); | |
| 22 | + return false; | |
| 23 | + } | |
| 24 | + | |
| 25 | + // 중복체크 | |
| 26 | + $('[data-group="' + group + '"] .field-selector').each(function() { | |
| 27 | + var selectedField = $(this).val(); | |
| 28 | + if (selectedField) { | |
| 29 | + if (selectedFields.includes(selectedField)) { | |
| 30 | + alert("중복된 필드를 선택할 수 없습니다."); | |
| 31 | + $(this).val(""); // 중복 필드를 선택한 경우 빈 값으로 초기화 | |
| 32 | + isDuplicate = true; | |
| 33 | + return false; // 반복문 종료 | |
| 34 | + } | |
| 35 | + selectedFields.push(selectedField); | |
| 36 | + } | |
| 37 | + }); | |
| 38 | + | |
| 39 | + | |
| 40 | + // | |
| 41 | + updateTableFields($objTabul, group); | |
| 42 | + | |
| 43 | + // 필드가 휴대폰이면 열 중복체크 | |
| 44 | + if($(this).val() == 'phone'){ | |
| 45 | + fn_phoneDupl($objTabul); | |
| 46 | + } | |
| 47 | + }); | |
| 48 | + | |
| 49 | + | |
| 50 | + function fn_phoneDupl($objTabul){ | |
| 51 | + | |
| 52 | + var phoneFields = $objTabul.getData().map(row => row.phone); | |
| 53 | + | |
| 54 | + if(phoneFields.length < 1){ return false; } | |
| 55 | + | |
| 56 | + var uniquePhones = new Set(); | |
| 57 | + var duplicatePhones = []; | |
| 58 | + | |
| 59 | + phoneFields.forEach(phone => { | |
| 60 | + if (uniquePhones.has(phone)) { | |
| 61 | + duplicatePhones.push(phone); | |
| 62 | + } else { | |
| 63 | + uniquePhones.add(phone); | |
| 64 | + } | |
| 65 | + }); | |
| 66 | + | |
| 67 | + $('#rowDupCnt').text(duplicatePhones.length); | |
| 68 | + if (duplicatePhones.length > 0) { | |
| 69 | + alert("중복된 휴대폰 번호가 있습니다: \n" + duplicatePhones.join(", ")); | |
| 70 | + } else { | |
| 71 | +// alert("중복된 phone 필드 값이 없습니다."); | |
| 72 | + } | |
| 73 | + } | |
| 74 | + | |
| 75 | + /* | |
| 76 | + * 타이틀 select 선택할때마다 실행해서 | |
| 77 | + * 데이터테이블 필드값 수정 | |
| 78 | + */ | |
| 79 | + function updateTableFields($objTabul, group) { | |
| 80 | + var currentData = $objTabul.getData(); | |
| 81 | + var columns = [ | |
| 82 | + {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) { | |
| 83 | + cell.getRow().toggleSelect(); | |
| 84 | + }} | |
| 85 | + ]; | |
| 86 | + | |
| 87 | + var fieldMapping = []; | |
| 88 | + $('[data-group="' + group + '"] .field-selector').each(function(index) { | |
| 89 | + var selectedField = $(this).val(); | |
| 90 | + // ASCII 문자 코드 사용 - 65=A, 66=B ... | |
| 91 | + var field = String.fromCharCode(65 + index); | |
| 92 | + if (selectedField) { | |
| 93 | + columns.push({title: field, field: selectedField, hozAlign: "center", headerHozAlign: "center", editor: "input", width: 125, validator: ["maxLength:100", "string"]}); | |
| 94 | + fieldMapping.push(selectedField); | |
| 95 | + } else { | |
| 96 | + columns.push({title: field, field: field, hozAlign: "center", headerHozAlign: "center", editor: "input", width: 125, validator: ["maxLength:100", "string"]}); | |
| 97 | + fieldMapping.push(field); | |
| 98 | + } | |
| 99 | + }); | |
| 100 | + | |
| 101 | + var updatedData = currentData.map(row => { | |
| 102 | + var newRow = {}; | |
| 103 | + fieldMapping.forEach((field, index) => { | |
| 104 | + newRow[field] = row[Object.keys(row)[index]] || ""; | |
| 105 | + }); | |
| 106 | + return newRow; | |
| 107 | + }); | |
| 108 | + | |
| 109 | + $objTabul.setColumns(columns); | |
| 110 | + $objTabul.setData(updatedData); | |
| 111 | + | |
| 112 | + | |
| 113 | + } | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | +}); (No newline at end of file) |
+++ src/main/webapp/js/web/addr/init.js
... | ... | @@ -0,0 +1,120 @@ |
| 1 | + | |
| 2 | + | |
| 3 | +var tableErrorData = []; | |
| 4 | +var tableErrorCheckData = []; | |
| 5 | +var addrMassDupliSaveList = null; | |
| 6 | + | |
| 7 | +var gArrRestartIndex = 0; //배열 재시작카운드 | |
| 8 | +var gNameList = []; //치환문자 이름 | |
| 9 | +var gPhoneList = []; //받는사람 | |
| 10 | +var gInfo1List = []; //치환문자1 | |
| 11 | +var gInfo2List = []; //치환문자2 | |
| 12 | +var gInfo3List = []; //치환문자3 | |
| 13 | +var gInfo4List = []; //치환문자4 | |
| 14 | +var gMemoList = []; //메모 | |
| 15 | + | |
| 16 | + | |
| 17 | +var $tableExcel = null; //엑셀입력 탭 | |
| 18 | +var $tableClip = null; //붙여넣기 탭 | |
| 19 | +var $tableSelf = null; //붙여넣기 탭 | |
| 20 | + | |
| 21 | +$(document).ready(function(){ | |
| 22 | + | |
| 23 | + //Tabulator AJAX Data Loading | |
| 24 | + $tableExcel = new Tabulator("#tabulator_excel", { | |
| 25 | + height:"255px", | |
| 26 | + width:"100%", | |
| 27 | + layout:"fitColumns", | |
| 28 | + autoColumns:false, | |
| 29 | + headerHozAlign:"center", | |
| 30 | + validationMode:"highlight", | |
| 31 | + clipboard:false, | |
| 32 | + clipboardCopySelector:"table", | |
| 33 | + clipboardPasteAction:"insert", // insert, update, replace | |
| 34 | + placeholder:"Excel 파일을 업로드 해주세요.", //fit columns to width of table (optional) | |
| 35 | + columns:[ //Define Table Columns | |
| 36 | + {formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){ | |
| 37 | + cell.getRow().toggleSelect(); | |
| 38 | + } | |
| 39 | + }, | |
| 40 | + {title:"A", hozAlign:"center", headerHozAlign: "center", field:"A", editor:"input", width:125, validator:["maxLength:100", "string"]}, | |
| 41 | + {title:"B", hozAlign:"center", headerHozAlign: "center", field:"B", editor:"input", width:125, validator:["maxLength:100", "string"]}, | |
| 42 | + {title:"C", hozAlign:"center", headerHozAlign: "center", field:"C", editor:"input", width:125, validator:["maxLength:100", "string"]}, | |
| 43 | + {title:"D", hozAlign:"center", headerHozAlign: "center", field:"D", editor:"input", width:125, validator:["maxLength:100", "string"]}, | |
| 44 | + {title:"E", hozAlign:"center", headerHozAlign: "center", field:"E", editor:"input", width:125, validator:["maxLength:100", "string"]}, | |
| 45 | + {title:"F", hozAlign:"center", headerHozAlign: "center", field:"F", editor:"input", width:125, validator:["maxLength:100", "string"]}, | |
| 46 | + {title:"G", hozAlign:"center", headerHozAlign: "center", field:"G", editor:"input", width:125, validator:["maxLength:100", "string"]} | |
| 47 | + ], | |
| 48 | + validationFailed:function(cell, value, parameters){ // 유효성 체크 함수 | |
| 49 | + var valid = cell.isValid(); | |
| 50 | + if(!valid){ | |
| 51 | + alert("양식에 맞지 않는 정보가 입력되었습니다."); | |
| 52 | + | |
| 53 | + //해당 셀 데이터 삭제 | |
| 54 | + cell.setValue(""); | |
| 55 | + } | |
| 56 | + return value % parameters.phone; | |
| 57 | + }, | |
| 58 | + }); | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + $tableClip = new Tabulator("#tabulator_clip", { | |
| 65 | + height:"255px", | |
| 66 | + width:"100%", | |
| 67 | + layout:"fitColumns", | |
| 68 | + editor:true, | |
| 69 | + headerHozAlign:"center", | |
| 70 | + validationMode:"highlight", | |
| 71 | + placeholder:"복사(Ctrl+C)한 내용을 여기에 붙여넣기(Ctrl+V) 해주세요.", //fit columns to width of table (optional) | |
| 72 | + clipboard:true, // 클립보드 기능 활성화 | |
| 73 | + clipboardPasteAction:"insert", // insert, update, replace | |
| 74 | + clipboardPasteParser: function(clipboard) { | |
| 75 | + | |
| 76 | + // clipboard 기능 | |
| 77 | + var rows = clipboard.split('\n').map(row => row.split(/[\t,]+/).map(cell => cell.trim())); | |
| 78 | + console.log('rows : ', rows); | |
| 79 | + var tableData = rows.map(row => { | |
| 80 | + return { | |
| 81 | + A: row[0] || "", | |
| 82 | + B: row[1] || "", | |
| 83 | + C: row[2] || "", | |
| 84 | + D: row[3] || "", | |
| 85 | + E: row[4] || "", | |
| 86 | + F: row[5] || "", | |
| 87 | + G: row[6] || "" | |
| 88 | + }; | |
| 89 | + }); | |
| 90 | + return tableData; | |
| 91 | + }, | |
| 92 | + columns: [ | |
| 93 | + {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) { | |
| 94 | + cell.getRow().toggleSelect(); | |
| 95 | + }}, | |
| 96 | + {title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}, | |
| 97 | + {title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}, | |
| 98 | + {title:"C", field:"C", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}, | |
| 99 | + {title:"D", field:"D", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}, | |
| 100 | + {title:"E", field:"E", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}, | |
| 101 | + {title:"F", field:"F", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}, | |
| 102 | + {title:"G", field:"G", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]} | |
| 103 | + ], | |
| 104 | + validationFailed:function(cell, value, parameters){ // 유효성 체크 함수 | |
| 105 | + var valid = cell.isValid(); | |
| 106 | + if(!valid){ | |
| 107 | + alert("양식에 맞지 않는 정보가 입력되었습니다."); | |
| 108 | + | |
| 109 | + //해당 셀 데이터 삭제 | |
| 110 | + cell.setValue(""); | |
| 111 | + } | |
| 112 | + return value % parameters.phone; | |
| 113 | + }, | |
| 114 | + }); | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | +}); (No newline at end of file) |
+++ src/main/webapp/js/web/addr/utils.js
... | ... | @@ -0,0 +1,24 @@ |
| 1 | + | |
| 2 | + | |
| 3 | +$(document).ready(function(){ | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | +}); | |
| 8 | + | |
| 9 | +/* | |
| 10 | + * @discription 타블레이터 객체 가져오기 | |
| 11 | + * */ | |
| 12 | +function fn_utils_getTabulator(){ | |
| 13 | + | |
| 14 | + var activeTab = $('#tbTabl .tab.active'); | |
| 15 | + // data-tabul 값 가져오기 | |
| 16 | + var tabulValue = activeTab.data('tabul'); | |
| 17 | + console.log('tabulValue : ',tabulValue); | |
| 18 | + | |
| 19 | + return window['$' + tabulValue]; | |
| 20 | +} | |
| 21 | + | |
| 22 | +function fn_utils_isEmpty(obj){ | |
| 23 | + return obj == null || obj == ""; | |
| 24 | +}(No newline at end of file) |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?