Merge branch 'master' of http://hylee@vcs.iten.co.kr:9999/hylee/mjon_git
@cdd0bff537dfe351289e39c54842621aeaf9e98e
+++ src/main/java/itn/com/cmm/MjonBTSendVO.java
... | ... | @@ -0,0 +1,130 @@ |
| 1 | +package itn.com.cmm; | |
| 2 | + | |
| 3 | +import lombok.Getter; | |
| 4 | +import lombok.Setter; | |
| 5 | +import lombok.ToString; | |
| 6 | + | |
| 7 | +@Getter | |
| 8 | +@Setter | |
| 9 | +@ToString | |
| 10 | +public class MjonBTSendVO{ | |
| 11 | + | |
| 12 | + | |
| 13 | + /** | |
| 14 | + * @description : 수신자번호 | |
| 15 | + */ | |
| 16 | + private String phone; | |
| 17 | + | |
| 18 | + /** | |
| 19 | + * @description : [*이름*] - 치환문자 | |
| 20 | + */ | |
| 21 | + private String name; | |
| 22 | + | |
| 23 | + /** | |
| 24 | + * @description : [*1*] - 치환문자 | |
| 25 | + */ | |
| 26 | + private String rep1; | |
| 27 | + | |
| 28 | + /** | |
| 29 | + * @description : [*2*] - 치환문자 | |
| 30 | + */ | |
| 31 | + private String rep2; | |
| 32 | + | |
| 33 | + /** | |
| 34 | + * @description : [*3*] - 치환문자 | |
| 35 | + */ | |
| 36 | + private String rep3; | |
| 37 | + | |
| 38 | + /** | |
| 39 | + * @description : [*4*] - 치환문자 | |
| 40 | + */ | |
| 41 | + private String rep4; | |
| 42 | + | |
| 43 | + /** | |
| 44 | + * @description : 문자ID | |
| 45 | + */ | |
| 46 | + private String msgId; | |
| 47 | + | |
| 48 | + /** | |
| 49 | + * @description : 전송그룹ID (대량문자의 경우 하나의 그룹으로 세팅) | |
| 50 | + */ | |
| 51 | + private String msgGroupId; | |
| 52 | + | |
| 53 | + /** | |
| 54 | + * @description : 문자온 일반회원ID | |
| 55 | + */ | |
| 56 | + private String userId; | |
| 57 | + | |
| 58 | + /** | |
| 59 | + * @description : 발신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.) | |
| 60 | + */ | |
| 61 | + private String callFrom; | |
| 62 | + /** | |
| 63 | + * @description : 수신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.) | |
| 64 | + */ | |
| 65 | + private String callTo; | |
| 66 | + /** | |
| 67 | + * @description : 예약 발송일시 | |
| 68 | + */ | |
| 69 | + private String reqDate; | |
| 70 | + /** | |
| 71 | + * @description :전송사(04:다우, 05:JJ, 07:IVT, 01:아이하트 , 02:현대퓨처넷, 03:아이엠오) | |
| 72 | + */ | |
| 73 | + private String agentCode; | |
| 74 | + | |
| 75 | + /** | |
| 76 | + * @description : MMS용 메시지제목 | |
| 77 | + */ | |
| 78 | + private String subject; | |
| 79 | + | |
| 80 | + /** | |
| 81 | + * @description : SMS용 메시지본문 | |
| 82 | + */ | |
| 83 | + private String smsTxt; | |
| 84 | + | |
| 85 | + /** | |
| 86 | + * @description : 메세지타입(4: SMS 전송, 5: URL 전송, 6: MMS전송, 7: BARCODE전송, 8: 카카오 알림톡 전송) | |
| 87 | + */ | |
| 88 | + private String msgType; | |
| 89 | + | |
| 90 | + | |
| 91 | + /** | |
| 92 | + * @description : 첨부파일 갯수 | |
| 93 | + */ | |
| 94 | + private String fileCnt; | |
| 95 | + | |
| 96 | + /** | |
| 97 | + * @description : 파일이름1 | |
| 98 | + */ | |
| 99 | + private String filePath1; | |
| 100 | + | |
| 101 | + /** | |
| 102 | + * @description : 파일이름2 | |
| 103 | + */ | |
| 104 | + private String filePath2; | |
| 105 | + | |
| 106 | + /** | |
| 107 | + * @description : 파일이름3 | |
| 108 | + */ | |
| 109 | + private String filePath3; | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + /** | |
| 114 | + * @description : event 여부 / group tb에 넣는 용도 / 기본값 N | |
| 115 | + */ | |
| 116 | + private String eventYn="N"; | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + /** | |
| 121 | + * @description : 개별단가 | |
| 122 | + */ | |
| 123 | + private String eachPrice; | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | +} |
--- src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
... | ... | @@ -603,6 +603,313 @@ |
| 603 | 603 |
return kakaoSendAdvcListVO; |
| 604 | 604 |
} |
| 605 | 605 |
|
| 606 |
+ |
|
| 607 |
+ |
|
| 608 |
+ |
|
| 609 |
+ public List<KakaoSendAdvcVO> populateSendListsBT(KakaoVO kakaoVO |
|
| 610 |
+ , boolean isHolidayNotified |
|
| 611 |
+ , StatusResponse statusResponse |
|
| 612 |
+ , UserManageVO userManageVO |
|
| 613 |
+ , List<String> resultSpamTxt |
|
| 614 |
+ ) throws Exception {
|
|
| 615 |
+ |
|
| 616 |
+ //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) |
|
| 617 |
+// String befCash = kakaoVO.getBefCash(); |
|
| 618 |
+ |
|
| 619 |
+ // ftToString bt 같이사용 |
|
| 620 |
+ log.info("kakaoVO.ftToString() :: [{}]", kakaoVO.ftToString());
|
|
| 621 |
+ |
|
| 622 |
+ |
|
| 623 |
+ // 예약 시간 기본값 설정 |
|
| 624 |
+ Date now = new Date(); |
|
| 625 |
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
|
| 626 |
+ |
|
| 627 |
+ String atSmishingYn = userManageVO.getAtSmishingYn(); |
|
| 628 |
+ String exceptSpamYn = userManageVO.getExceptSpamYn(); |
|
| 629 |
+ |
|
| 630 |
+ |
|
| 631 |
+ List<KakaoSendAdvcVO> kakaoSendAdvcListVO = new ArrayList<>(); |
|
| 632 |
+ // BT 같이 사용함 |
|
| 633 |
+ Calendar calendar = setupBaseDateFT(kakaoVO); |
|
| 634 |
+ |
|
| 635 |
+ |
|
| 636 |
+ |
|
| 637 |
+ // BT 내용 |
|
| 638 |
+ String templateContent = kakaoVO.getTemplateContent(); |
|
| 639 |
+ // 실패 대체 문자 |
|
| 640 |
+ String subMsgTxt = kakaoVO.getSubMsgTxt(); |
|
| 641 |
+ log.info(" + StringUtils.isNotEmpty(subMsgTxt) :: [{}]", StringUtils.isNotEmpty(subMsgTxt));
|
|
| 642 |
+ if(StringUtils.isNotEmpty(subMsgTxt)) {
|
|
| 643 |
+ kakaoVO.setSubMsgSendYn("Y");
|
|
| 644 |
+ |
|
| 645 |
+ // 광고문자면 처리 - 광고 Y |
|
| 646 |
+ if ("Y".equals(kakaoVO.getAdFlag())) {
|
|
| 647 |
+ subMsgTxt = "(광고)" + subMsgTxt + "\n" + "무료거부 0808800858"; |
|
| 648 |
+ } |
|
| 649 |
+ |
|
| 650 |
+ } |
|
| 651 |
+ |
|
| 652 |
+ |
|
| 653 |
+ |
|
| 654 |
+ // 사용자 개인 단가 정보 불러오기 |
|
| 655 |
+ MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId()); |
|
| 656 |
+ // 시스템 기본 단가 정보 불러오기 |
|
| 657 |
+ JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); |
|
| 658 |
+ |
|
| 659 |
+ // 카톡 스미싱 yn은 몯 at로 통일 |
|
| 660 |
+ kakaoVO.setAtSmishingYn(mberManageVO.getAtSmishingYn()); |
|
| 661 |
+ |
|
| 662 |
+ // 치환 문구가 있는지 확인 |
|
| 663 |
+ Boolean replaceYN = MsgSendUtils.getReplaceYN(templateContent); |
|
| 664 |
+ Boolean replaceSubYN = MsgSendUtils.getReplaceYN(subMsgTxt); |
|
| 665 |
+ |
|
| 666 |
+ |
|
| 667 |
+/** 리스트명 수정해야함 */ |
|
| 668 |
+ /** @MSGID KEY값 */ |
|
| 669 |
+ List<String> idList = mjonCommon.getNextCustomMsgCId(kakaoVO.getMjonFTSendVOList().size()); |
|
| 670 |
+ |
|
| 671 |
+ |
|
| 672 |
+ Map<String, Function<MjonFTSendVO, String>> placeholders = new HashMap<>(); |
|
| 673 |
+ placeholders.put("[*이름*]", MjonFTSendVO::getName);
|
|
| 674 |
+ placeholders.put("[*1*]", MjonFTSendVO::getRep1);
|
|
| 675 |
+ placeholders.put("[*2*]", MjonFTSendVO::getRep2);
|
|
| 676 |
+ placeholders.put("[*3*]", MjonFTSendVO::getRep3);
|
|
| 677 |
+ placeholders.put("[*4*]", MjonFTSendVO::getRep4);
|
|
| 678 |
+ |
|
| 679 |
+ String imageType = kakaoVO.getImageType(); |
|
| 680 |
+/** 단가 수정해야함 */ |
|
| 681 |
+ // 개인단가 |
|
| 682 |
+ Float kakaoMemberFtPrice = |
|
| 683 |
+ imageType == null ? mberManageVO.getKakaoFtPrice() : |
|
| 684 |
+ "I".equals(imageType) ? mberManageVO.getKakaoFtImgPrice() : |
|
| 685 |
+ "W".equals(imageType) ? mberManageVO.getKakaoFtWideImgPrice() : |
|
| 686 |
+ mberManageVO.getKakaoFtPrice(); |
|
| 687 |
+ |
|
| 688 |
+ // 시스템단가 |
|
| 689 |
+ Float kakaoSysJoinFtPrice = |
|
| 690 |
+ imageType == null ? sysJoinSetVO.getKakaoFtPrice() : |
|
| 691 |
+ "I".equals(imageType) ? sysJoinSetVO.getKakaoFtImgPrice() : |
|
| 692 |
+ "W".equals(imageType) ? sysJoinSetVO.getKakaoFtWideImgPrice() : |
|
| 693 |
+ sysJoinSetVO.getKakaoFtPrice(); |
|
| 694 |
+ |
|
| 695 |
+ Float kakaoFtPrice = |
|
| 696 |
+ getValidPrice(kakaoMemberFtPrice, kakaoSysJoinFtPrice); |
|
| 697 |
+ |
|
| 698 |
+ // 대체문자가 있을경우 사용 |
|
| 699 |
+ float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice()); |
|
| 700 |
+ float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice()); |
|
| 701 |
+ float picturePrice = getValidPrice(mberManageVO.getPicturePrice(), sysJoinSetVO.getPicturePrice()); |
|
| 702 |
+ |
|
| 703 |
+ boolean hasPerformedSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 |
|
| 704 |
+ boolean hasPerformedSubSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 |
|
| 705 |
+ boolean hasPerformedDelayYn = false; // 치환 문자가 없는 경우, |
|
| 706 |
+ |
|
| 707 |
+ |
|
| 708 |
+ |
|
| 709 |
+ String imgFilePath = ""; |
|
| 710 |
+ if(StringUtils.isNotEmpty(kakaoVO.getAtchFileId()) && |
|
| 711 |
+ ("I".equals(imageType) || "W".equals(imageType))) {
|
|
| 712 |
+ imgFilePath = mjonMsgDAO.selectPhotoImgFileRealPath(kakaoVO.getAtchFileId()); |
|
| 713 |
+ } |
|
| 714 |
+ |
|
| 715 |
+ |
|
| 716 |
+ |
|
| 717 |
+ /** @jsonStr 필요유무 */ |
|
| 718 |
+ boolean hasButtons = CollectionUtils.isNotEmpty(kakaoVO.getButtonVOList()); |
|
| 719 |
+ String sharedJsonStr = null; |
|
| 720 |
+ |
|
| 721 |
+ |
|
| 722 |
+ // 치환데이터가 없는 경우 한 번만 계산하기 위한 캐시 변수 추가 |
|
| 723 |
+ Map<String, Object> sharedPricingResult = null; |
|
| 724 |
+ // 치환데이터가 없는 경우 for문 전에 한 번만 계산 |
|
| 725 |
+ if (!replaceSubYN && StringUtils.isNotEmpty(subMsgTxt)) {
|
|
| 726 |
+ sharedPricingResult = calculateSubMsgPricing(subMsgTxt, imgFilePath, shortPrice, longPrice, picturePrice, kakaoFtPrice); |
|
| 727 |
+ |
|
| 728 |
+ // 사전계산에서 INVALID인 경우 즉시 리턴 |
|
| 729 |
+ String preSendType = (String) sharedPricingResult.get("sendType");
|
|
| 730 |
+ if ("INVALID".equals(preSendType)) {
|
|
| 731 |
+ statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다."); |
|
| 732 |
+ return kakaoSendAdvcListVO; |
|
| 733 |
+ } |
|
| 734 |
+ } |
|
| 735 |
+ |
|
| 736 |
+ |
|
| 737 |
+/** 리스트명 수정해야함 */ |
|
| 738 |
+ List<MjonFTSendVO> mjonFTSendVOList = kakaoVO.getMjonFTSendVOList(); |
|
| 739 |
+ |
|
| 740 |
+ for (int i = 0; i < mjonFTSendVOList.size(); i++) {
|
|
| 741 |
+ MjonFTSendVO mjonFTSendVO = mjonFTSendVOList.get(i); |
|
| 742 |
+ |
|
| 743 |
+ |
|
| 744 |
+/** createFTSendVO 수정해야함 */ |
|
| 745 |
+ KakaoSendAdvcVO sendVO = createFTSendVO(kakaoVO, calendar); |
|
| 746 |
+ // 공통 가격 설정 |
|
| 747 |
+ sendVO.setSmsPrice(Float.toString(shortPrice)); |
|
| 748 |
+ sendVO.setMmsPrice(Float.toString(longPrice)); |
|
| 749 |
+ sendVO.setPicturePrice(Float.toString(picturePrice)); |
|
| 750 |
+ |
|
| 751 |
+ sendVO.setCallTo(mjonFTSendVO.getPhone()); |
|
| 752 |
+ sendVO.setMsgId(idList.get(i)); |
|
| 753 |
+ |
|
| 754 |
+ |
|
| 755 |
+ // 친구톡 문자 |
|
| 756 |
+ String templateContentTemp = templateContent; |
|
| 757 |
+ // 치환 문자면 |
|
| 758 |
+ if(replaceYN) {
|
|
| 759 |
+ |
|
| 760 |
+ // 각 치환 구문을 확인하고 치환할 값이 없으면 오류 반환 |
|
| 761 |
+ for (Map.Entry<String, Function<MjonFTSendVO, String>> entry : placeholders.entrySet()) {
|
|
| 762 |
+ String placeholder = entry.getKey(); |
|
| 763 |
+ String value = entry.getValue().apply(mjonFTSendVO); |
|
| 764 |
+ if (templateContentTemp.contains(placeholder)) {
|
|
| 765 |
+ if (StringUtils.isEmpty(value)) {
|
|
| 766 |
+ statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다."); |
|
| 767 |
+ return null; |
|
| 768 |
+ } |
|
| 769 |
+ templateContentTemp = templateContentTemp.replace(placeholder, value); |
|
| 770 |
+ } |
|
| 771 |
+ } |
|
| 772 |
+ } |
|
| 773 |
+ sendVO.setTemplateContent(templateContentTemp); |
|
| 774 |
+ |
|
| 775 |
+ // 실패 대체 문자 |
|
| 776 |
+ String subMsgTxtTemp = null; |
|
| 777 |
+ if(StringUtils.isNotEmpty(subMsgTxt)) {
|
|
| 778 |
+ subMsgTxtTemp = subMsgTxt; |
|
| 779 |
+ |
|
| 780 |
+ if(replaceSubYN) {
|
|
| 781 |
+ // 각 치환 구문을 확인하고 치환할 값이 없으면 오류 반환 |
|
| 782 |
+ for (Map.Entry<String, Function<MjonFTSendVO, String>> entry : placeholders.entrySet()) {
|
|
| 783 |
+ String placeholder = entry.getKey(); |
|
| 784 |
+ String value = entry.getValue().apply(mjonFTSendVO); |
|
| 785 |
+ if (subMsgTxtTemp.contains(placeholder)) {
|
|
| 786 |
+ if (StringUtils.isEmpty(value)) {
|
|
| 787 |
+ statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다."); |
|
| 788 |
+ return null; |
|
| 789 |
+ } |
|
| 790 |
+ subMsgTxtTemp = subMsgTxtTemp.replace(placeholder, value); |
|
| 791 |
+ } |
|
| 792 |
+ } |
|
| 793 |
+ } |
|
| 794 |
+ } |
|
| 795 |
+ sendVO.setSubMsgTxt(subMsgTxtTemp); |
|
| 796 |
+ |
|
| 797 |
+ |
|
| 798 |
+ //대체문자가 있으면 |
|
| 799 |
+ // Step 1-4: 실패 대체 문자 치환데이터 설정 |
|
| 800 |
+ if(StringUtils.isNotEmpty(subMsgTxtTemp)) { // 대체문자가 있나?
|
|
| 801 |
+ |
|
| 802 |
+ // 최적화된 계산 로직 |
|
| 803 |
+ Map<String, Object> pricingResult; |
|
| 804 |
+ |
|
| 805 |
+ if (replaceSubYN) {
|
|
| 806 |
+ // 치환데이터 있음 → 매번 새로 계산 |
|
| 807 |
+ pricingResult = calculateSubMsgPricing(subMsgTxtTemp, imgFilePath, |
|
| 808 |
+ shortPrice, longPrice, picturePrice, kakaoFtPrice); |
|
| 809 |
+ |
|
| 810 |
+ // INVALID 체크 |
|
| 811 |
+ String resultSendType = (String) pricingResult.get("sendType");
|
|
| 812 |
+ if ("INVALID".equals(resultSendType)) {
|
|
| 813 |
+ statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다."); |
|
| 814 |
+ return kakaoSendAdvcListVO; |
|
| 815 |
+ } |
|
| 816 |
+ } else {
|
|
| 817 |
+ // 치환데이터 없음 → 미리 계산된 결과 재사용 |
|
| 818 |
+ pricingResult = sharedPricingResult; |
|
| 819 |
+ } |
|
| 820 |
+ |
|
| 821 |
+ |
|
| 822 |
+ // 결과 적용 |
|
| 823 |
+ applyPricingResult(sendVO, pricingResult); |
|
| 824 |
+ |
|
| 825 |
+ |
|
| 826 |
+ }else {
|
|
| 827 |
+ // 대체문자가 없으면 카카오톡 단가 그대로 사용 |
|
| 828 |
+ sendVO.setEachPrice( Float.toString(kakaoFtPrice) ); |
|
| 829 |
+ } |
|
| 830 |
+ |
|
| 831 |
+ |
|
| 832 |
+ // 스팸 단어 체크 |
|
| 833 |
+ // exceptSpam는 사용자 스팸 단어 체크할건지에 대한 여부 N : 체크 |
|
| 834 |
+ if("N".equals(exceptSpamYn)) {
|
|
| 835 |
+ // 친구톡 내용 |
|
| 836 |
+ if(replaceYN) {
|
|
| 837 |
+ checkSpamAndSetStatus(kakaoVO |
|
| 838 |
+ , templateContentTemp |
|
| 839 |
+ , resultSpamTxt, isHolidayNotified); |
|
| 840 |
+ }else if(!hasPerformedSpamCheck) {
|
|
| 841 |
+ checkSpamAndSetStatus(kakaoVO |
|
| 842 |
+ , templateContentTemp |
|
| 843 |
+ , resultSpamTxt, isHolidayNotified); |
|
| 844 |
+ hasPerformedSpamCheck = true; |
|
| 845 |
+ } |
|
| 846 |
+ // 대체문자 내용 |
|
| 847 |
+ if(StringUtils.isNotEmpty(subMsgTxtTemp)) {
|
|
| 848 |
+ if(replaceSubYN) {
|
|
| 849 |
+ checkSpamAndSetStatus(kakaoVO |
|
| 850 |
+ , subMsgTxtTemp |
|
| 851 |
+ , resultSpamTxt, isHolidayNotified); |
|
| 852 |
+ }else if(!hasPerformedSubSpamCheck) {
|
|
| 853 |
+ checkSpamAndSetStatus(kakaoVO |
|
| 854 |
+ , subMsgTxtTemp |
|
| 855 |
+ , resultSpamTxt, isHolidayNotified); |
|
| 856 |
+ hasPerformedSubSpamCheck = true; |
|
| 857 |
+ } |
|
| 858 |
+ |
|
| 859 |
+ } |
|
| 860 |
+ } |
|
| 861 |
+ |
|
| 862 |
+ log.info(" kakaoVO.toString() :: [{}]",kakaoVO.ftToString());
|
|
| 863 |
+ |
|
| 864 |
+ |
|
| 865 |
+ /* @isHolidayNotified |
|
| 866 |
+ * - 관리자 알림 설정으로 인해 |
|
| 867 |
+ * - 해당 시간이면 지연 미처리 |
|
| 868 |
+ * @smishingYn |
|
| 869 |
+ * - 회원 별 '스미싱 온' 상태값 |
|
| 870 |
+ * - Y면 알림, 지연 처리해야 함 |
|
| 871 |
+ * */ |
|
| 872 |
+ if("Y".equalsIgnoreCase(atSmishingYn) && isHolidayNotified) {
|
|
| 873 |
+ kakaoVO.setSpamStatus("Y");
|
|
| 874 |
+ kakaoVO.setSmishingYn("Y");
|
|
| 875 |
+ kakaoVO.setAtDelayYn("Y");
|
|
| 876 |
+ } |
|
| 877 |
+ |
|
| 878 |
+ // 지연 여부 처리 |
|
| 879 |
+ if (( "Y".equalsIgnoreCase(atSmishingYn) || "Y".equalsIgnoreCase(kakaoVO.getAtDelayYn())) |
|
| 880 |
+ && !hasPerformedDelayYn && isHolidayNotified) {
|
|
| 881 |
+ calendar.add(Calendar.MINUTE, 30); // 모든 시간을 30분 뒤로 미룸 |
|
| 882 |
+ // TEST |
|
| 883 |
+// calendar.add(Calendar.MINUTE, 5); // 모든 시간을 30분 뒤로 미룸 |
|
| 884 |
+ hasPerformedDelayYn = true; |
|
| 885 |
+ } |
|
| 886 |
+ |
|
| 887 |
+ sendVO.setReqDate(sdf.format(calendar.getTime())); // 분할된 시간 설정 또는 기본 예약 시간 사용 |
|
| 888 |
+ |
|
| 889 |
+ |
|
| 890 |
+ |
|
| 891 |
+ |
|
| 892 |
+ // 타이틀이나 버튼이 있고 |
|
| 893 |
+ if(hasButtons || StringUtils.isNotEmpty(kakaoVO.getTemplateImageUrl())) {
|
|
| 894 |
+ // |
|
| 895 |
+ if (StringUtils.isEmpty(sharedJsonStr)) {
|
|
| 896 |
+ // 치환 데이터가 없고 아직 생성되지 않았으면 한 번만 생성 |
|
| 897 |
+ sharedJsonStr = kakaoApiJsonSave.kakaoApiFTJsonSave_advc(kakaoVO); |
|
| 898 |
+ sendVO.setJsonStr(sharedJsonStr); |
|
| 899 |
+ } |
|
| 900 |
+ sendVO.setBizJsonName(idList.get(0)); |
|
| 901 |
+ |
|
| 902 |
+ } |
|
| 903 |
+ |
|
| 904 |
+ kakaoSendAdvcListVO.add(sendVO); |
|
| 905 |
+ log.info(" sendVO.toString() :: [{}]",sendVO.toString());
|
|
| 906 |
+ } |
|
| 907 |
+ |
|
| 908 |
+ |
|
| 909 |
+ return kakaoSendAdvcListVO; |
|
| 910 |
+ } |
|
| 911 |
+ |
|
| 912 |
+ |
|
| 606 | 913 |
private void checkSpamAndSetStatus(KakaoVO kakaoVO |
| 607 | 914 |
, String chkText |
| 608 | 915 |
, List<String> resultSpamTxt, boolean isHolidayNotified) throws Exception {
|
--- src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
... | ... | @@ -4,6 +4,7 @@ |
| 4 | 4 |
import java.util.List; |
| 5 | 5 |
import java.util.Map; |
| 6 | 6 |
|
| 7 |
+import itn.com.cmm.MjonBTSendVO; |
|
| 7 | 8 |
import itn.com.cmm.MjonFTSendVO; |
| 8 | 9 |
import itn.let.mjo.msg.service.MjonMsgVO; |
| 9 | 10 |
import lombok.Getter; |
... | ... | @@ -266,7 +267,11 @@ |
| 266 | 267 |
|
| 267 | 268 |
private List<Map<String, String>> varListMap; |
| 268 | 269 |
|
| 270 |
+ |
|
| 271 |
+ |
|
| 269 | 272 |
private List<MjonFTSendVO> mjonFTSendVOList = new ArrayList<>(); |
| 273 |
+ |
|
| 274 |
+ private List<MjonBTSendVO> mjonBTSendVOList = new ArrayList<>(); |
|
| 270 | 275 |
|
| 271 | 276 |
@Override |
| 272 | 277 |
public String toString() {
|
... | ... | @@ -304,6 +309,18 @@ |
| 304 | 309 |
mjonFTListSb.append("]");
|
| 305 | 310 |
|
| 306 | 311 |
|
| 312 |
+ |
|
| 313 |
+ StringBuilder mjonBTListSb = new StringBuilder("[");
|
|
| 314 |
+ if (mjonBTSendVOList != null && !mjonBTSendVOList.isEmpty()) {
|
|
| 315 |
+ String prefix = ""; |
|
| 316 |
+ for (MjonBTSendVO vo : mjonBTSendVOList) {
|
|
| 317 |
+ mjonBTListSb.append(prefix).append(vo == null ? "null" : vo.toString()); |
|
| 318 |
+ prefix = ", "; |
|
| 319 |
+ } |
|
| 320 |
+ } |
|
| 321 |
+ mjonBTListSb.append("]");
|
|
| 322 |
+ |
|
| 323 |
+ |
|
| 307 | 324 |
return "KakaoSendAdvcVO[" + |
| 308 | 325 |
"\n senderKey=[" + senderKey + "]" + |
| 309 | 326 |
"\n , subMsgTxtReplYn=[" + subMsgTxtReplYn + "]" + |
... | ... | @@ -331,6 +348,7 @@ |
| 331 | 348 |
"\n , befCash=[" + getBefCash() + "]" + |
| 332 | 349 |
"\n , befPoint=[" + getBefPoint() + "]" + |
| 333 | 350 |
"\n , mjonFTSendVOList=" + mjonFTListSb.toString() + |
| 351 |
+ "\n , mjonBTSendVOList=" + mjonBTListSb.toString() + |
|
| 334 | 352 |
"\n ]"; |
| 335 | 353 |
} |
| 336 | 354 |
|
+++ src/main/java/itn/let/kakao/user/kakaoBt/service/KakaoBrandMsgService.java
... | ... | @@ -0,0 +1,12 @@ |
| 1 | +package itn.let.kakao.user.kakaoBt.service; | |
| 2 | + | |
| 3 | +import javax.servlet.http.HttpServletRequest; | |
| 4 | + | |
| 5 | +import itn.let.kakao.kakaoComm.KakaoVO; | |
| 6 | +import itn.let.mail.service.StatusResponse; | |
| 7 | + | |
| 8 | +public interface KakaoBrandMsgService { | |
| 9 | + | |
| 10 | + StatusResponse insertKakaoBtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception; | |
| 11 | + | |
| 12 | +} |
+++ src/main/java/itn/let/kakao/user/kakaoBt/service/KakaoBrandMsgTemplateService.java
... | ... | @@ -0,0 +1,26 @@ |
| 1 | +package itn.let.kakao.user.kakaoBt.service; | |
| 2 | + | |
| 3 | +import java.util.List; | |
| 4 | + | |
| 5 | +import itn.let.kakao.kakaoComm.KakaoVO; | |
| 6 | + | |
| 7 | +public interface KakaoBrandMsgTemplateService { | |
| 8 | + | |
| 9 | + //친구톡 템플릿 저장처리 | |
| 10 | + int insertKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception; | |
| 11 | + | |
| 12 | + //친구톡 템플릿 리스트 불러오기 | |
| 13 | + List<KakaoVO> selectKakaoFriendsTemplateList(KakaoVO kakaoVO) throws Exception; | |
| 14 | + | |
| 15 | + //친구톡 템플릿 삭제처리하기 | |
| 16 | + int deleteKakaoFriendstalkTemplate(KakaoVO kakaoVO) throws Exception; | |
| 17 | + | |
| 18 | + //친구톡 템플릿 상세정보 조회 | |
| 19 | + KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception; | |
| 20 | + | |
| 21 | + //친구톡 템플릿 수정처리하기 | |
| 22 | + int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception; | |
| 23 | + | |
| 24 | + //친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리 | |
| 25 | + int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception; | |
| 26 | +} |
+++ src/main/java/itn/let/kakao/user/kakaoBt/service/impl/KakaoBrandMsgServiceImpl.java
... | ... | @@ -0,0 +1,292 @@ |
| 1 | +package itn.let.kakao.user.kakaoBt.service.impl; | |
| 2 | + | |
| 3 | +import java.time.Duration; | |
| 4 | +import java.time.Instant; | |
| 5 | +import java.util.ArrayList; | |
| 6 | +import java.util.HashMap; | |
| 7 | +import java.util.List; | |
| 8 | +import java.util.Map; | |
| 9 | +import java.util.stream.Collectors; | |
| 10 | + | |
| 11 | +import javax.annotation.Resource; | |
| 12 | +import javax.servlet.http.HttpServletRequest; | |
| 13 | + | |
| 14 | +import org.apache.commons.lang3.StringUtils; | |
| 15 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 16 | +import org.springframework.http.HttpStatus; | |
| 17 | +import org.springframework.stereotype.Service; | |
| 18 | + | |
| 19 | +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; | |
| 20 | +import egovframework.rte.fdl.idgnr.EgovIdGnrService; | |
| 21 | +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; | |
| 22 | +import itn.com.cmm.LoginVO; | |
| 23 | +import itn.com.utl.fcc.service.EgovStringUtil; | |
| 24 | +import itn.let.kakao.kakaoComm.KakaoSendAdvcVO; | |
| 25 | +import itn.let.kakao.kakaoComm.KakaoSendUtil; | |
| 26 | +import itn.let.kakao.kakaoComm.KakaoVO; | |
| 27 | +import itn.let.kakao.user.kakaoAt.service.impl.KakaoAlimTalkDAO; | |
| 28 | +import itn.let.kakao.user.kakaoBt.service.KakaoBrandMsgService; | |
| 29 | +import itn.let.mail.service.StatusResponse; | |
| 30 | +import itn.let.mjo.mjocommon.MjonCommon; | |
| 31 | +import itn.let.mjo.msg.service.MjonMsgVO; | |
| 32 | +import itn.let.mjo.msg.service.impl.MjonMsgDAO; | |
| 33 | +import itn.let.mjo.msgdata.service.MjonMsgDataService; | |
| 34 | +import itn.let.module.base.PriceAndPoint; | |
| 35 | +import itn.let.uss.umt.service.EgovUserManageService; | |
| 36 | +import itn.let.uss.umt.service.UserManageVO; | |
| 37 | +import lombok.extern.slf4j.Slf4j; | |
| 38 | + | |
| 39 | +@Slf4j | |
| 40 | +@Service("KakaoBrandMsgService") | |
| 41 | +public class KakaoBrandMsgServiceImpl extends EgovAbstractServiceImpl implements KakaoBrandMsgService{ | |
| 42 | + | |
| 43 | + @Resource(name = "egovFriendstalkTemplateIdService") | |
| 44 | + private EgovIdGnrService idgenFriendTalkTmpId; | |
| 45 | + | |
| 46 | + @Resource(name="kakaoBrandMsgTemplateDAO") | |
| 47 | + private KakaoBrandMsgTemplateDAO kakaoBrandMsgTemplateDAO; | |
| 48 | + | |
| 49 | + @Resource(name="mjonMsgDAO") | |
| 50 | + private MjonMsgDAO mjonMsgDAO; | |
| 51 | + | |
| 52 | + /** userManageService */ | |
| 53 | + @Resource(name = "userManageService") | |
| 54 | + private EgovUserManageService userManageService; | |
| 55 | + | |
| 56 | + @Resource(name = "egovMjonMsgGroupIdGnrService") | |
| 57 | + private EgovIdGnrService idgenMjonMsgGroupId; | |
| 58 | + | |
| 59 | + | |
| 60 | + @Resource(name="kakaoAlimTalkDAO") | |
| 61 | + private KakaoAlimTalkDAO kakaoAlimTalkDAO; | |
| 62 | + | |
| 63 | + @Resource(name = "MjonMsgDataService") | |
| 64 | + private MjonMsgDataService mjonMsgDataService; | |
| 65 | + | |
| 66 | + @Autowired | |
| 67 | + KakaoSendUtil kakaoSendUtil; | |
| 68 | + | |
| 69 | + @Autowired | |
| 70 | + private MjonCommon mjonCommon; | |
| 71 | + | |
| 72 | + @Autowired | |
| 73 | + private PriceAndPoint priceAndPoint; | |
| 74 | + | |
| 75 | + @Override | |
| 76 | + public StatusResponse insertKakaoBtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception { | |
| 77 | + StatusResponse statusResponse = new StatusResponse(); | |
| 78 | + | |
| 79 | + log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.toString()); | |
| 80 | + | |
| 81 | + log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.ftToString()); | |
| 82 | + | |
| 83 | + | |
| 84 | +// if(1==1) { | |
| 85 | +// throw new RuntimeException("강제로 발생시킨 예외"); | |
| 86 | +// } | |
| 87 | + | |
| 88 | + // 측정할 메소드 호출 전 시간 기록 | |
| 89 | + Instant start = Instant.now(); | |
| 90 | +// KakaoSendAdvcVO | |
| 91 | + | |
| 92 | + Map<String, Object> returnMap = new HashMap<>(); | |
| 93 | + Map<String, Object> apiReturnMap = new HashMap<>(); | |
| 94 | + | |
| 95 | + String userId = ""; | |
| 96 | + if("A".equals(kakaoVO.getSendKind())) | |
| 97 | + { | |
| 98 | + userId = kakaoVO.getMberId(); | |
| 99 | + }else { | |
| 100 | + | |
| 101 | + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated() | |
| 102 | + ? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser() | |
| 103 | + : null; | |
| 104 | + userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); | |
| 105 | + | |
| 106 | + if (userId.equals("")) { | |
| 107 | + return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다."); | |
| 108 | + } | |
| 109 | + | |
| 110 | + } | |
| 111 | + | |
| 112 | + kakaoVO.setUserId(userId); | |
| 113 | + | |
| 114 | + /** | |
| 115 | + * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 현재 로그인 세션도 만료 처리함 | |
| 116 | + */ | |
| 117 | + boolean mberSttus = userManageService.selectUserStatusInfo(userId); | |
| 118 | + if (!mberSttus) { | |
| 119 | + request.getSession().invalidate(); | |
| 120 | + // UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때 | |
| 121 | + return new StatusResponse(HttpStatus.UNAUTHORIZED, | |
| 122 | + "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 친구톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.", "STAT_1070"); | |
| 123 | + } | |
| 124 | + | |
| 125 | + | |
| 126 | + /** | |
| 127 | + * 친구톡은 발송 시간 제약이 있음 | |
| 128 | + */ | |
| 129 | + if(kakaoSendUtil.isRestrictedFriendTalkTime(kakaoSendUtil.resolveBaseDate(kakaoVO))) { | |
| 130 | + // UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때 | |
| 131 | + return new StatusResponse(HttpStatus.BAD_REQUEST, | |
| 132 | + "브랜드메시지는 20시 50분부터 익일 08시까지 발송이 제한됩니다.","STAT_2080"); | |
| 133 | + } | |
| 134 | + | |
| 135 | + | |
| 136 | +/** @isHolidayNotified | |
| 137 | + * @false : 알림 X | |
| 138 | + * @true : 알림 O */ | |
| 139 | + boolean isHolidayNotified = mjonCommon.processUserAndCheckFT(kakaoVO); | |
| 140 | + | |
| 141 | + | |
| 142 | + UserManageVO userManageVO = mjonCommon.getUserManageInfo(userId); | |
| 143 | + | |
| 144 | + | |
| 145 | + // 스팸관련 키워드 select | |
| 146 | + List<String> resultSpamTxt = mjonMsgDataService.selectSpamKeywordList(); | |
| 147 | + | |
| 148 | +/** @카카오톡 전송 list 셋팅 -------------------------------------------*/ | |
| 149 | + List<KakaoSendAdvcVO> kakaoSendAdvcListVO = kakaoSendUtil.populateSendListsBT(kakaoVO, isHolidayNotified, statusResponse, userManageVO, resultSpamTxt); | |
| 150 | + if (statusResponse.getStatus() != null && !statusResponse.getStatus().equals(HttpStatus.OK)) { | |
| 151 | + log.error(" + populateSendLists 처리 중 오류 발생: {}", statusResponse.getMessage()); | |
| 152 | + return statusResponse; | |
| 153 | + } | |
| 154 | + | |
| 155 | + | |
| 156 | +/** @전송금액 확인 --------------------------------------------------*/ | |
| 157 | + if (!kakaoSendUtil.isCashSufficient(userId, kakaoSendAdvcListVO)) { | |
| 158 | + log.error("Insufficient balance for message sending."); | |
| 159 | + return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.", "STAT_1060"); | |
| 160 | + } | |
| 161 | + | |
| 162 | + | |
| 163 | +/** @json파일이 있을 떄 biz_attachments insert */ | |
| 164 | + kakaoSendUtil.insertKakaoAtDataJsonInfo_advc(kakaoSendAdvcListVO); | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + Map<String, List<KakaoSendAdvcVO>> priceGroupedMessages = kakaoSendAdvcListVO.stream() | |
| 169 | + .collect(Collectors.groupingBy(KakaoSendAdvcVO::getEachPrice)); | |
| 170 | + // instTotalCnt : 화면에서 보여줄 총 발송건수 | |
| 171 | + int instTotalCnt = 0; | |
| 172 | + | |
| 173 | + | |
| 174 | + // 임시 | |
| 175 | + List<String> nextMsgGroupIdA = new ArrayList<>(); | |
| 176 | + // 대안: entrySet() 직접 사용 | |
| 177 | + String apiMsgGroupId = ""; | |
| 178 | + String apiMsgType = ""; | |
| 179 | + for (Map.Entry<String, List<KakaoSendAdvcVO>> entry : priceGroupedMessages.entrySet()) { | |
| 180 | + // entry 사용 | |
| 181 | + | |
| 182 | + List<KakaoSendAdvcVO> groupedMsgList = entry.getValue(); // 해당 가격의 메시지 리스트 | |
| 183 | + | |
| 184 | + String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId(); | |
| 185 | + groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId)); | |
| 186 | + | |
| 187 | + // api 전달 값 | |
| 188 | + apiMsgGroupId = StringUtils.isNotEmpty(apiMsgGroupId) | |
| 189 | + ? apiMsgGroupId + "," + nextMsgGroupId | |
| 190 | + : nextMsgGroupId; | |
| 191 | + | |
| 192 | + apiMsgType = StringUtils.isNotEmpty(apiMsgType) | |
| 193 | + ? apiMsgType + "," + kakaoSendAdvcListVO.get(0).getMsgType() | |
| 194 | + : kakaoSendAdvcListVO.get(0).getMsgType(); | |
| 195 | + | |
| 196 | + // 발송 데이터 삽입 | |
| 197 | + int instCnt = kakaoSendUtil.insertKakaoData_advc(groupedMsgList); | |
| 198 | +// int instCnt = 6; | |
| 199 | + | |
| 200 | + if(instCnt > 0) { | |
| 201 | + | |
| 202 | + instTotalCnt += instCnt; | |
| 203 | + | |
| 204 | + KakaoSendAdvcVO sendVO = groupedMsgList.get(0); | |
| 205 | + | |
| 206 | +/** @groupData 테이블 insert */ | |
| 207 | + kakaoSendUtil.insertKakaoGroupDataTb_advc(instCnt, kakaoVO, sendVO); | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | +/** @biz_kakao_price에 insert (대체문자 환불관련 테이블)*/ | |
| 212 | + priceAndPoint.insertBizFtKakaoPrice(kakaoVO.getUserId(), sendVO.getMsgGroupId()); | |
| 213 | + | |
| 214 | + | |
| 215 | + priceAndPoint.insertCashAndPoint(kakaoVO.getUserId() | |
| 216 | + , -Float.parseFloat(sendVO.getTotPrice()) | |
| 217 | + , "카카오 친구톡 총 "+groupedMsgList.size()+"건 중 " + instCnt + "건 발송" | |
| 218 | + , nextMsgGroupId | |
| 219 | + ); | |
| 220 | + | |
| 221 | + | |
| 222 | +/** @SLACK발송 */ | |
| 223 | + /** @발송조건이되면 발송 */ | |
| 224 | + if(isHolidayNotified | |
| 225 | + && ("Y".equals(userManageVO.getAtSmishingYn()) || "Y".equals(kakaoVO.getAtDelayYn())) | |
| 226 | + ) { | |
| 227 | + mjonCommon.getAdminKakaoAtSendSlack(sendVO); | |
| 228 | + }else if("Y".equals(kakaoVO.getAtSmishingYn())){ | |
| 229 | + /** @발송조건이 안되면 DB INSERT */ | |
| 230 | + mjonMsgDAO.insertSpamPassMsgData(MjonMsgVO.builder() | |
| 231 | + .msgGroupId(nextMsgGroupId) | |
| 232 | + .userId(kakaoVO.getUserId()) | |
| 233 | + .reqDate(kakaoVO.getReqDate()) | |
| 234 | + .smsTxt(groupedMsgList.get(0).getTemplateContent()) | |
| 235 | + .totalCallCnt(instCnt) | |
| 236 | + .callFrom(kakaoVO.getCallFrom()) | |
| 237 | + .msgType("8") | |
| 238 | + .reserveYn(kakaoVO.getReserveYn()) | |
| 239 | + .build() | |
| 240 | + ); | |
| 241 | + } | |
| 242 | + | |
| 243 | + nextMsgGroupIdA.add(nextMsgGroupId); | |
| 244 | + | |
| 245 | + } | |
| 246 | + | |
| 247 | + } | |
| 248 | + | |
| 249 | + apiReturnMap.put("resultSts", instTotalCnt); | |
| 250 | + // 그룹 ID | |
| 251 | + apiReturnMap.put("msgGroupId", apiMsgGroupId); | |
| 252 | + // 메세지 타입 | |
| 253 | + apiReturnMap.put("msgType", apiMsgType); | |
| 254 | + | |
| 255 | + returnMap.put("resultSts", instTotalCnt); | |
| 256 | + returnMap.put("reserYn", kakaoVO.getReserveYn()); | |
| 257 | + returnMap.put("groupIds", nextMsgGroupIdA); | |
| 258 | + | |
| 259 | + | |
| 260 | + // 측정할 메소드 호출 후 시간 기록 | |
| 261 | + Instant end = Instant.now(); | |
| 262 | + | |
| 263 | + log.info(" + start :: [{}]", start); | |
| 264 | + // 실행 시간 계산 (나노초, 밀리초, 초) | |
| 265 | + long seconds = Duration.between(start, end).getSeconds(); | |
| 266 | + log.info("메소드 실행 시간 (초): {} s", seconds); | |
| 267 | + double minutes = seconds / 60.0; // 소수점 포함을 위해 60.0으로 나눔 | |
| 268 | + | |
| 269 | + returnMap.put("second", seconds+" s"); | |
| 270 | + returnMap.put("minutes", minutes+" min"); | |
| 271 | + | |
| 272 | + | |
| 273 | +// System.out.println("메소드 실행 시간 (분): " + minutes + " min"); | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | +// priceAndPoint.getBefCash(userId); | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + statusResponse.setStatus(HttpStatus.OK); | |
| 284 | + statusResponse.setObject(returnMap); | |
| 285 | + apiReturnMap.put("result", HttpStatus.OK); | |
| 286 | + apiReturnMap.put("message", "전송이 완료되었습니다."); | |
| 287 | + statusResponse.setApiReturn(apiReturnMap); | |
| 288 | + | |
| 289 | + return statusResponse; | |
| 290 | + } | |
| 291 | + | |
| 292 | +} |
+++ src/main/java/itn/let/kakao/user/kakaoBt/service/impl/KakaoBrandMsgTemplateDAO.java
... | ... | @@ -0,0 +1,163 @@ |
| 1 | +package itn.let.kakao.user.kakaoBt.service.impl; | |
| 2 | + | |
| 3 | +import java.util.ArrayList; | |
| 4 | +import java.util.List; | |
| 5 | + | |
| 6 | +import org.springframework.stereotype.Repository; | |
| 7 | + | |
| 8 | +import egovframework.rte.psl.dataaccess.EgovAbstractDAO; | |
| 9 | +import itn.let.kakao.admin.kakaoAt.service.MjonKakaoTemplateButtonVO; | |
| 10 | +import itn.let.kakao.kakaoComm.KakaoButtonVO; | |
| 11 | +import itn.let.kakao.kakaoComm.KakaoVO; | |
| 12 | + | |
| 13 | +@Repository("kakaoBrandMsgTemplateDAO") | |
| 14 | +public class KakaoBrandMsgTemplateDAO extends EgovAbstractDAO{ | |
| 15 | + | |
| 16 | + | |
| 17 | + //친구톡 템플릿 저장하기 | |
| 18 | + public int insertKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{ | |
| 19 | + | |
| 20 | + int result = 0; | |
| 21 | + try { | |
| 22 | + | |
| 23 | + result = update("kakaoFriendsTalkTemplateDAO.insertKakaoFriendsTemplateData", kakaoVO); | |
| 24 | + | |
| 25 | + } catch (Exception e) { | |
| 26 | + System.out.println("insertKakaoFriendsTemplateData DAO Error !!! " + e); | |
| 27 | + } | |
| 28 | + | |
| 29 | + return result; | |
| 30 | + } | |
| 31 | + | |
| 32 | + public int insertKakaoFriendsTemplateButtonData(MjonKakaoTemplateButtonVO buttonVO) throws Exception{ | |
| 33 | + int result = 0; | |
| 34 | + | |
| 35 | + try { | |
| 36 | + | |
| 37 | + result = update("kakaoFriendsTalkTemplateDAO.insertKakaoFriendsTemplateButtonData", buttonVO); | |
| 38 | + | |
| 39 | + } catch (Exception e) { | |
| 40 | + System.out.println("insertKakaoFriendsTemplateButtonData DAO Error !!! " + e); | |
| 41 | + } | |
| 42 | + | |
| 43 | + return result; | |
| 44 | + | |
| 45 | + } | |
| 46 | + | |
| 47 | + //친구톡 템플릿 리스트 불러오기 | |
| 48 | + @SuppressWarnings("unchecked") | |
| 49 | + public List<KakaoVO> selectKakaoFriendsTemplateList(KakaoVO kakaoVO) throws Exception{ | |
| 50 | + List<KakaoVO> result = new ArrayList<KakaoVO>(); | |
| 51 | + | |
| 52 | + try { | |
| 53 | + | |
| 54 | + result = (List<KakaoVO>) list("kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateList", kakaoVO); | |
| 55 | + | |
| 56 | + } catch (Exception e) { | |
| 57 | + System.out.println("selectKakaoFriendsTemplateList DAO Error !!! " + e); | |
| 58 | + } | |
| 59 | + | |
| 60 | + return result; | |
| 61 | + } | |
| 62 | + | |
| 63 | + @SuppressWarnings("unchecked") | |
| 64 | + public List<KakaoButtonVO> selectKakaoFriendsTemplateButtons(MjonKakaoTemplateButtonVO buttonVO) throws Exception{ | |
| 65 | + | |
| 66 | + List<KakaoButtonVO> result = new ArrayList<KakaoButtonVO>(); | |
| 67 | + | |
| 68 | + try { | |
| 69 | + | |
| 70 | + result = (List<KakaoButtonVO>) list("kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateButtons", buttonVO); | |
| 71 | + | |
| 72 | + } catch (Exception e) { | |
| 73 | + System.out.println("selectKakaoFriendsTemplateButtons DAO Error !!! " + e); | |
| 74 | + } | |
| 75 | + | |
| 76 | + return result; | |
| 77 | + } | |
| 78 | + | |
| 79 | + //친구톡 템플릿 삭제처리하기 | |
| 80 | + public int deleteKakaoFriendstalkTemplate(KakaoVO kakaoVO) throws Exception{ | |
| 81 | + | |
| 82 | + int result = 0; | |
| 83 | + | |
| 84 | + try { | |
| 85 | + | |
| 86 | + result = update("kakaoFriendsTalkTemplateDAO.deleteKakaoFriendstalkTemplate", kakaoVO); | |
| 87 | + | |
| 88 | + } catch (Exception e) { | |
| 89 | + System.out.println("deleteKakaoFriendstalkTemplate DAO Error !!! " + e); | |
| 90 | + } | |
| 91 | + | |
| 92 | + return result; | |
| 93 | + | |
| 94 | + } | |
| 95 | + | |
| 96 | + //친구톡 템플릿 삭제처리하기 | |
| 97 | + public int deleteKakaoFriendstalkButtons(KakaoVO kakaoVO) throws Exception{ | |
| 98 | + int result = 0; | |
| 99 | + | |
| 100 | + try { | |
| 101 | + | |
| 102 | + result = update("kakaoFriendsTalkTemplateDAO.deleteKakaoFriendstalkButtons", kakaoVO); | |
| 103 | + | |
| 104 | + } catch (Exception e) { | |
| 105 | + System.out.println("deleteKakaoFriendstalkButtons DAO Error !!! " + e); | |
| 106 | + } | |
| 107 | + | |
| 108 | + return result; | |
| 109 | + } | |
| 110 | + | |
| 111 | + | |
| 112 | + //친구톡 템플릿 상세정보 조회 | |
| 113 | + public KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception{ | |
| 114 | + | |
| 115 | + KakaoVO result = new KakaoVO(); | |
| 116 | + | |
| 117 | + try { | |
| 118 | + | |
| 119 | + result = (KakaoVO) select("kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateDetail", kakaoVO); | |
| 120 | + | |
| 121 | + } catch (Exception e) { | |
| 122 | + System.out.println("selectKakaoFriendsTemplateDetail DAO Error !!! " + e); | |
| 123 | + } | |
| 124 | + | |
| 125 | + return result; | |
| 126 | + | |
| 127 | + } | |
| 128 | + | |
| 129 | + //친구톡 템플릿 수정처리하기 | |
| 130 | + public int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{ | |
| 131 | + | |
| 132 | + int result = 0; | |
| 133 | + | |
| 134 | + try { | |
| 135 | + | |
| 136 | + result = update("kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateData", kakaoVO); | |
| 137 | + | |
| 138 | + } catch (Exception e) { | |
| 139 | + System.out.println("updateKakaoFriendsTemplateData DAO Error !!! " + e); | |
| 140 | + } | |
| 141 | + | |
| 142 | + return result; | |
| 143 | + | |
| 144 | + } | |
| 145 | + | |
| 146 | + //친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리 | |
| 147 | + public int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception{ | |
| 148 | + | |
| 149 | + int result = 0; | |
| 150 | + | |
| 151 | + try { | |
| 152 | + | |
| 153 | + result = update("kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateImageDataDel",kakaoVO); | |
| 154 | + | |
| 155 | + } catch (Exception e) { | |
| 156 | + System.out.println("updateKakaoFriendsTemplateData DAO Error !!! " + e); | |
| 157 | + } | |
| 158 | + | |
| 159 | + return result; | |
| 160 | + | |
| 161 | + } | |
| 162 | + | |
| 163 | +} |
+++ src/main/java/itn/let/kakao/user/kakaoBt/service/impl/KakaoBrandMsgTemplateServiceImpl.java
... | ... | @@ -0,0 +1,227 @@ |
| 1 | +package itn.let.kakao.user.kakaoBt.service.impl; | |
| 2 | + | |
| 3 | +import java.util.ArrayList; | |
| 4 | +import java.util.List; | |
| 5 | + | |
| 6 | +import javax.annotation.Resource; | |
| 7 | + | |
| 8 | +import org.springframework.stereotype.Service; | |
| 9 | + | |
| 10 | +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; | |
| 11 | +import egovframework.rte.fdl.idgnr.EgovIdGnrService; | |
| 12 | +import itn.let.kakao.admin.kakaoAt.service.MjonKakaoTemplateButtonVO; | |
| 13 | +import itn.let.kakao.kakaoComm.KakaoButtonVO; | |
| 14 | +import itn.let.kakao.kakaoComm.KakaoVO; | |
| 15 | +import itn.let.kakao.user.kakaoBt.service.KakaoBrandMsgTemplateService; | |
| 16 | + | |
| 17 | +@Service("KakaoBrandMsgTemplateService") | |
| 18 | +public class KakaoBrandMsgTemplateServiceImpl extends EgovAbstractServiceImpl implements KakaoBrandMsgTemplateService{ | |
| 19 | + | |
| 20 | + @Resource(name = "egovFriendstalkTemplateIdService") | |
| 21 | + private EgovIdGnrService idgenFriendTalkTmpId; | |
| 22 | + | |
| 23 | + @Resource(name="kakaoBrandMsgTemplateDAO") | |
| 24 | + private KakaoBrandMsgTemplateDAO kakaoBrandMsgTemplateDAO; | |
| 25 | + | |
| 26 | + //친구톡 템플릿 저장처리 | |
| 27 | + @Override | |
| 28 | + public int insertKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{ | |
| 29 | + | |
| 30 | + int result = 0; | |
| 31 | + int resultBtn = 0; | |
| 32 | + try { | |
| 33 | + | |
| 34 | + String tmpIdgen = idgenFriendTalkTmpId.getNextStringId(); | |
| 35 | + kakaoVO.setFriendId(tmpIdgen); | |
| 36 | + System.out.println("++++++++++++++++++ tmpIdgen ::: "+tmpIdgen); | |
| 37 | + result = kakaoBrandMsgTemplateDAO.insertKakaoFriendsTemplateData(kakaoVO); | |
| 38 | + | |
| 39 | + if(result > 0) { | |
| 40 | + | |
| 41 | + for(KakaoButtonVO button: kakaoVO.getButtonVOList()) { | |
| 42 | + | |
| 43 | + MjonKakaoTemplateButtonVO tmpButtonVO = new MjonKakaoTemplateButtonVO(); | |
| 44 | + | |
| 45 | + tmpButtonVO.setTemplateId(tmpIdgen); | |
| 46 | + tmpButtonVO.setTemplateUseType("F"); | |
| 47 | + tmpButtonVO.setButtonName(button.getName()); | |
| 48 | + tmpButtonVO.setButtonLinktype(button.getLinkType()); | |
| 49 | + tmpButtonVO.setButtonLinkpc(button.getLinkPc()); | |
| 50 | + tmpButtonVO.setButtonLinkmo(button.getLinkMo()); | |
| 51 | + tmpButtonVO.setButtonLinkios(button.getLinkIos()); | |
| 52 | + tmpButtonVO.setButtonLinkand(button.getLinkAnd()); | |
| 53 | + tmpButtonVO.setUserId(kakaoVO.getUserId()); | |
| 54 | + | |
| 55 | + int resultCnt = kakaoBrandMsgTemplateDAO.insertKakaoFriendsTemplateButtonData(tmpButtonVO); | |
| 56 | + resultBtn = resultBtn + resultCnt; | |
| 57 | + | |
| 58 | + } | |
| 59 | + | |
| 60 | + } | |
| 61 | + | |
| 62 | + } catch (Exception e) { | |
| 63 | + System.out.println("insertKakaoFriendsTemplateData ServiceImple Error !!! " + e); | |
| 64 | + return result = 0; | |
| 65 | + } | |
| 66 | + | |
| 67 | + return result; | |
| 68 | + } | |
| 69 | + | |
| 70 | + //친구톡 템플릿 리스트 불러오기 | |
| 71 | + @Override | |
| 72 | + public List<KakaoVO> selectKakaoFriendsTemplateList(KakaoVO kakaoVO) throws Exception{ | |
| 73 | + | |
| 74 | + List<KakaoVO> resultList = new ArrayList<KakaoVO>(); | |
| 75 | + List<KakaoVO> resultFinalTemplateList = new ArrayList<KakaoVO>(); | |
| 76 | + | |
| 77 | + try { | |
| 78 | + | |
| 79 | + resultList = kakaoBrandMsgTemplateDAO.selectKakaoFriendsTemplateList(kakaoVO); | |
| 80 | + | |
| 81 | + //각 템플릿별 버튼 정보 추가해주기 | |
| 82 | + for(KakaoVO templateVO : resultList) { | |
| 83 | + | |
| 84 | + List<KakaoButtonVO> buttonList = new ArrayList<KakaoButtonVO>(); | |
| 85 | + MjonKakaoTemplateButtonVO buttonVO = new MjonKakaoTemplateButtonVO(); | |
| 86 | + buttonVO.setTemplateId(templateVO.getFriendId()); | |
| 87 | + buttonVO.setTemplateUseType("F"); | |
| 88 | + buttonList = kakaoBrandMsgTemplateDAO.selectKakaoFriendsTemplateButtons(buttonVO); | |
| 89 | + | |
| 90 | + if(buttonList != null) { | |
| 91 | + templateVO.setButtonVOList(buttonList); | |
| 92 | + } | |
| 93 | + | |
| 94 | + resultFinalTemplateList.add(templateVO); | |
| 95 | + | |
| 96 | + } | |
| 97 | + | |
| 98 | + } catch (Exception e) { | |
| 99 | + System.out.println("selectKakaoFriendsTemplateList ServiceImple Error !!! " + e); | |
| 100 | + } | |
| 101 | + | |
| 102 | + return resultFinalTemplateList; | |
| 103 | + | |
| 104 | + } | |
| 105 | + | |
| 106 | + //친구톡 템플릿 삭제처리하기 | |
| 107 | + @Override | |
| 108 | + public int deleteKakaoFriendstalkTemplate(KakaoVO kakaoVO) throws Exception{ | |
| 109 | + int result = 0; | |
| 110 | + | |
| 111 | + try { | |
| 112 | + | |
| 113 | + //친구톡 템플릿 정보 삭제 - Delete_yn 컬럼 값 변경 처리함 | |
| 114 | + result = kakaoBrandMsgTemplateDAO.deleteKakaoFriendstalkTemplate(kakaoVO); | |
| 115 | + | |
| 116 | + if(result > 0) {//템플릿에 등록된 버튼 삭제 - 상태값 컬럼이 없어서 삭제처리 보류 | |
| 117 | + | |
| 118 | + //int resultBtn = kakaoFriendsTalkTemplateDAO.deleteKakaoFriendstalkButtons(kakaoVO); | |
| 119 | + | |
| 120 | + } | |
| 121 | + | |
| 122 | + } catch (Exception e) { | |
| 123 | + System.out.println("deleteKakaoFriendstalkTemplate ServiceImple Error !!! " + e); | |
| 124 | + } | |
| 125 | + | |
| 126 | + return result; | |
| 127 | + } | |
| 128 | + | |
| 129 | + //친구톡 템플릿 상세정보 조회 | |
| 130 | + @Override | |
| 131 | + public KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception{ | |
| 132 | + | |
| 133 | + KakaoVO result = new KakaoVO(); | |
| 134 | + | |
| 135 | + try { | |
| 136 | + | |
| 137 | + result = kakaoBrandMsgTemplateDAO.selectKakaoFriendsTemplateDetail(kakaoVO); | |
| 138 | + | |
| 139 | + //템플릿에 등록된 버튼정보가 있는지 확인하여 추가 | |
| 140 | + if(result != null) { | |
| 141 | + | |
| 142 | + List<KakaoButtonVO> buttonList = new ArrayList<KakaoButtonVO>(); | |
| 143 | + MjonKakaoTemplateButtonVO buttonVO = new MjonKakaoTemplateButtonVO(); | |
| 144 | + buttonVO.setTemplateId(kakaoVO.getFriendId()); | |
| 145 | + buttonVO.setTemplateUseType("F"); | |
| 146 | + buttonList = kakaoBrandMsgTemplateDAO.selectKakaoFriendsTemplateButtons(buttonVO); | |
| 147 | + | |
| 148 | + if(buttonList != null) { | |
| 149 | + result.setButtonVOList(buttonList); | |
| 150 | + } | |
| 151 | + | |
| 152 | + } | |
| 153 | + | |
| 154 | + } catch (Exception e) { | |
| 155 | + System.out.println("selectKakaoFriendsTemplateDetail ServiceImple Error !!! " + e); | |
| 156 | + } | |
| 157 | + | |
| 158 | + return result; | |
| 159 | + | |
| 160 | + } | |
| 161 | + | |
| 162 | + //친구톡 템플릿 수정처리하기 | |
| 163 | + @Override | |
| 164 | + public int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{ | |
| 165 | + | |
| 166 | + int result = 0; | |
| 167 | + int resultBtn = 0; | |
| 168 | + | |
| 169 | + try { | |
| 170 | + | |
| 171 | + //템플릿 정보 수정 | |
| 172 | + result = kakaoBrandMsgTemplateDAO.updateKakaoFriendsTemplateData(kakaoVO); | |
| 173 | + | |
| 174 | + String friendId = kakaoVO.getFriendId(); | |
| 175 | + if(result > 0) { | |
| 176 | + | |
| 177 | + //기존 버튼 정보 삭제 | |
| 178 | + int resultBtnCnt = kakaoBrandMsgTemplateDAO.deleteKakaoFriendstalkButtons(kakaoVO); | |
| 179 | + | |
| 180 | + //신규 버튼 정보 입력 | |
| 181 | + for(KakaoButtonVO button: kakaoVO.getButtonVOList()) { | |
| 182 | + | |
| 183 | + MjonKakaoTemplateButtonVO tmpButtonVO = new MjonKakaoTemplateButtonVO(); | |
| 184 | + | |
| 185 | + tmpButtonVO.setTemplateId(friendId); | |
| 186 | + tmpButtonVO.setTemplateUseType("F"); | |
| 187 | + tmpButtonVO.setButtonName(button.getName()); | |
| 188 | + tmpButtonVO.setButtonLinktype(button.getLinkType()); | |
| 189 | + tmpButtonVO.setButtonLinkpc(button.getLinkPc()); | |
| 190 | + tmpButtonVO.setButtonLinkmo(button.getLinkMo()); | |
| 191 | + tmpButtonVO.setButtonLinkios(button.getLinkIos()); | |
| 192 | + tmpButtonVO.setButtonLinkand(button.getLinkAnd()); | |
| 193 | + tmpButtonVO.setUserId(kakaoVO.getUserId()); | |
| 194 | + | |
| 195 | + int resultCnt = kakaoBrandMsgTemplateDAO.insertKakaoFriendsTemplateButtonData(tmpButtonVO); | |
| 196 | + resultBtn = resultBtn + resultCnt; | |
| 197 | + | |
| 198 | + } | |
| 199 | + | |
| 200 | + } | |
| 201 | + | |
| 202 | + } catch (Exception e) { | |
| 203 | + System.out.println("updateKakaoFriendsTemplateData ServiceImple Error !!! " + e); | |
| 204 | + } | |
| 205 | + | |
| 206 | + return result; | |
| 207 | + } | |
| 208 | + | |
| 209 | + //친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리 | |
| 210 | + @Override | |
| 211 | + public int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception{ | |
| 212 | + | |
| 213 | + int result = 0; | |
| 214 | + | |
| 215 | + try { | |
| 216 | + | |
| 217 | + result = kakaoBrandMsgTemplateDAO.updateKakaoFriendsTemplateImageDataDel(kakaoVO); | |
| 218 | + | |
| 219 | + } catch (Exception e) { | |
| 220 | + System.out.println("updateKakaoFriendsTemplateData ServiceImple Error !!! " + e); | |
| 221 | + } | |
| 222 | + | |
| 223 | + return result; | |
| 224 | + | |
| 225 | + } | |
| 226 | + | |
| 227 | +} |
+++ src/main/java/itn/let/kakao/user/kakaoBt/web/KakaoBrandMsgSendController.java
... | ... | @@ -0,0 +1,232 @@ |
| 1 | +package itn.let.kakao.user.kakaoBt.web; | |
| 2 | + | |
| 3 | +import java.math.BigDecimal; | |
| 4 | +import java.math.RoundingMode; | |
| 5 | +import java.util.ArrayList; | |
| 6 | +import java.util.Calendar; | |
| 7 | +import java.util.List; | |
| 8 | + | |
| 9 | +import javax.annotation.Resource; | |
| 10 | +import javax.servlet.http.HttpServletRequest; | |
| 11 | + | |
| 12 | +import lombok.extern.slf4j.Slf4j; | |
| 13 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 14 | +import org.springframework.http.ResponseEntity; | |
| 15 | +import org.springframework.stereotype.Controller; | |
| 16 | +import org.springframework.ui.ModelMap; | |
| 17 | +import org.springframework.web.bind.annotation.ModelAttribute; | |
| 18 | +import org.springframework.web.bind.annotation.RequestBody; | |
| 19 | +import org.springframework.web.bind.annotation.RequestMapping; | |
| 20 | + | |
| 21 | +import egovframework.rte.fdl.idgnr.EgovIdGnrService; | |
| 22 | +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; | |
| 23 | +import itn.com.cmm.EgovMessageSource; | |
| 24 | +import itn.com.cmm.LoginVO; | |
| 25 | +import itn.com.cmm.util.MJUtil; | |
| 26 | +import itn.com.utl.fcc.service.EgovStringUtil; | |
| 27 | +import itn.let.kakao.kakaoComm.KakaoSendUtil; | |
| 28 | +import itn.let.kakao.kakaoComm.KakaoVO; | |
| 29 | +import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; | |
| 30 | +import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; | |
| 31 | +import itn.let.kakao.user.kakaoBt.service.KakaoBrandMsgService; | |
| 32 | +import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService; | |
| 33 | +import itn.let.mail.service.StatusResponse; | |
| 34 | +import itn.let.mjo.msgdata.service.MjonMsgDataService; | |
| 35 | +import itn.let.mjo.msgholiday.service.MsgHolidayService; | |
| 36 | +import itn.let.mjo.symbol.service.MjonSymbolService; | |
| 37 | +import itn.let.mjo.symbol.service.MjonSymbolVO; | |
| 38 | +import itn.let.sym.site.service.EgovSiteManagerService; | |
| 39 | +import itn.let.uss.umt.service.EgovUserManageService; | |
| 40 | +import itn.let.uss.umt.service.MberManageVO; | |
| 41 | + | |
| 42 | +@Slf4j | |
| 43 | +@Controller | |
| 44 | +public class KakaoBrandMsgSendController { | |
| 45 | + | |
| 46 | + @Resource(name = "egovMjonMsgGroupIdGnrService") | |
| 47 | + private EgovIdGnrService idgenMjonMsgGroupId; | |
| 48 | + | |
| 49 | + /** EgovMessageSource */ | |
| 50 | + @Resource(name="egovMessageSource") | |
| 51 | + EgovMessageSource egovMessageSource; | |
| 52 | + | |
| 53 | + @Resource(name = "mjonSymbolService") | |
| 54 | + private MjonSymbolService mjonSymbolService; | |
| 55 | + | |
| 56 | + @Resource(name = "kakaoApiService") | |
| 57 | + private KakaoApiService kakaoApiService; | |
| 58 | + | |
| 59 | + @Resource(name = "MjonMsgDataService") | |
| 60 | + private MjonMsgDataService mjonMsgDataService; | |
| 61 | + | |
| 62 | + @Resource(name = "kakaoFriendsTalkTemplateService") | |
| 63 | + private KakaoFriendsTalkTemplateService kakaoFtTemplateService; | |
| 64 | + | |
| 65 | + @Resource(name = "KakaoBrandMsgService") | |
| 66 | + private KakaoBrandMsgService kakaoBrandMsgService; | |
| 67 | + | |
| 68 | +// @Resource(name = "KakaoFriendsTalkService") | |
| 69 | +// private KakaoFriendsTalkService kakaoFriendsTalkService; | |
| 70 | + | |
| 71 | + /** userManageService */ | |
| 72 | + @Resource(name = "userManageService") | |
| 73 | + private EgovUserManageService userManageService; | |
| 74 | + | |
| 75 | + @Resource(name = "kakaoAlimTalkService") | |
| 76 | + private KakaoAlimTalkService kakaoAlimTalkService; | |
| 77 | + | |
| 78 | + /** 사이트 설정 */ | |
| 79 | + @Resource(name = "egovSiteManagerService") | |
| 80 | + EgovSiteManagerService egovSiteManagerService; | |
| 81 | + | |
| 82 | + @Resource(name = "MsgHolidayService") | |
| 83 | + private MsgHolidayService msgHolidayService; | |
| 84 | + | |
| 85 | + @Autowired | |
| 86 | + KakaoSendUtil kakaoSendUtil; | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + /** | |
| 92 | + * @methodName : KakaoAlimtalkMsgDataView | |
| 93 | + * @author : 이호영 | |
| 94 | + * @date : 2025. 12. 18. | |
| 95 | + * @description : 브랜드 메시지 발송화면 이동 | |
| 96 | + * @return : String | |
| 97 | + * @param model | |
| 98 | + * @param kakaoVO | |
| 99 | + * @return | |
| 100 | + * @throws Exception | |
| 101 | + * | |
| 102 | + */ | |
| 103 | + @RequestMapping(value= {"/web/mjon/kakao/brandMsg/kakaoBrandMsgDataView.do"}) | |
| 104 | + public String KakaoAlimtalkMsgDataView(ModelMap model | |
| 105 | + , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { | |
| 106 | + | |
| 107 | + | |
| 108 | + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; | |
| 109 | + String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); | |
| 110 | + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); | |
| 111 | + | |
| 112 | + /*if(userId == "") { | |
| 113 | + return "redirect:/web/user/login/login.do"; | |
| 114 | + }*/ | |
| 115 | + | |
| 116 | + model.addAttribute("loginVO", loginVO); | |
| 117 | + | |
| 118 | + | |
| 119 | + if(!"".equals(userId) && !"ROLE_ADMIN".equals(author)) { | |
| 120 | + | |
| 121 | + //사용자 등록 발신프로필 정보 조회해오기 | |
| 122 | + kakaoVO.setUserId(userId); | |
| 123 | + List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); | |
| 124 | + model.addAttribute("resultProfileList", resultProfileList); | |
| 125 | + | |
| 126 | + // 특수문자 리스트 불러오기 | |
| 127 | + MjonSymbolVO symbolVO = new MjonSymbolVO(); | |
| 128 | + List<MjonSymbolVO> symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); | |
| 129 | + model.addAttribute("symbolList", symbolList); | |
| 130 | + | |
| 131 | + //아이디 발신번호 리스트 불러오기. | |
| 132 | + List<String> resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); | |
| 133 | + List<String> resultPhonList = new ArrayList<String>(); | |
| 134 | + MJUtil mjUtil = new MJUtil(); | |
| 135 | + for(String phone : resultSendPhonList) { | |
| 136 | + resultPhonList.add(mjUtil.addDash(phone)); | |
| 137 | + } | |
| 138 | + model.addAttribute("resultPhonList", resultPhonList); | |
| 139 | + | |
| 140 | + | |
| 141 | + MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); | |
| 142 | + | |
| 143 | + model.addAttribute("atSmishingYn", mberManageVO.getAtSmishingYn()); | |
| 144 | + | |
| 145 | + //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 | |
| 146 | + /*Float shortPrice = mberManageVO.getShortPrice(); | |
| 147 | + Float longPrice = mberManageVO.getLongPrice(); | |
| 148 | + Float picturePrice = mberManageVO.getPicturePrice(); | |
| 149 | + Float picture2Price = mberManageVO.getPicture2Price(); | |
| 150 | + Float picture3Price = mberManageVO.getPicture3Price();*/ | |
| 151 | + BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); | |
| 152 | + | |
| 153 | + model.addAttribute("userMoney", userMoney); | |
| 154 | + | |
| 155 | + | |
| 156 | + Calendar cal = Calendar.getInstance(); | |
| 157 | + ////////////////////////////////////////////////////////////////// | |
| 158 | + | |
| 159 | + //최근 전송 내역 | |
| 160 | +// MjonMsgDataVO searchVO = new MjonMsgDataVO(); | |
| 161 | +// Date now = new Date(); | |
| 162 | +// SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); | |
| 163 | +// cal.setTime(now); | |
| 164 | +// cal.add(Calendar.DATE, -3); | |
| 165 | +// String chkDate = format.format(cal.getTime()); | |
| 166 | +// searchVO.setUserId(userId); | |
| 167 | +// searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 | |
| 168 | +// model.addAttribute("resultLatestMsgList", mjonMsgDataService.selectLatestMsgList(searchVO)); | |
| 169 | + | |
| 170 | + //자주보내는 번호 | |
| 171 | +// model.addAttribute("resultBookMarkMsgList", mjonMsgDataService.selectBookMarkMsgList(searchVO)); | |
| 172 | + | |
| 173 | + // 사용자 정의 단가 정보 불러오기(시스템 단가 혹은 협의 단가) | |
| 174 | + model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId)); | |
| 175 | + | |
| 176 | + | |
| 177 | + //사용자 템플릿 정보 조회 | |
| 178 | + String friendId = kakaoVO.getFriendId(); | |
| 179 | + KakaoVO resultTemplateVO = new KakaoVO(); | |
| 180 | + | |
| 181 | + if(friendId != null) { | |
| 182 | + resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO); | |
| 183 | + } | |
| 184 | + model.addAttribute("resultTemplateVO", resultTemplateVO); | |
| 185 | + | |
| 186 | + | |
| 187 | + //친구톡 발송시간 체크 하기 - 20:50 ~ 익일 08:00 사이에는 발송 금지 | |
| 188 | + int hour = cal.get(Calendar.HOUR_OF_DAY); | |
| 189 | + int minute = cal.get(Calendar.MINUTE); | |
| 190 | + | |
| 191 | + int time = hour * 60 + minute; // 하루 기준 분 단위 | |
| 192 | + | |
| 193 | + boolean sendStatus = !(time < 480 || time >= 1250); // 08:00(480), 20:50(1250) | |
| 194 | + | |
| 195 | + if(!sendStatus) { | |
| 196 | + System.out.println("발송금지 시간 " + hour + ":" + minute); | |
| 197 | + } | |
| 198 | + | |
| 199 | + System.out.println("발송상태는 ::: "+sendStatus); | |
| 200 | + model.addAttribute("sendStatus", sendStatus); | |
| 201 | + | |
| 202 | + } | |
| 203 | + | |
| 204 | +// return "web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView"; | |
| 205 | + return "web/kakao/msgdata/bt/brandMsgDataView"; | |
| 206 | + } | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + /** | |
| 211 | + * @methodName : kakaoFriendsTalkMsgSendAjax_advc | |
| 212 | + * @author : 이호영 | |
| 213 | + * @date : 2025. 12. 18. | |
| 214 | + * @description : 브랜드 메시지 발송 로직 | |
| 215 | + * @return : ResponseEntity<StatusResponse> | |
| 216 | + * @param kakaoVO | |
| 217 | + * @param request | |
| 218 | + * @return | |
| 219 | + * @throws Exception | |
| 220 | + * | |
| 221 | + */ | |
| 222 | + @RequestMapping(value = "/web/mjon/kakao/brandMsg/kakaoBrandMsgSendAjax_advc.do") | |
| 223 | + public ResponseEntity<StatusResponse> kakaoBrandMsgSendAjax_advc( | |
| 224 | + @RequestBody KakaoVO kakaoVO, | |
| 225 | + HttpServletRequest request | |
| 226 | + ) throws Exception { | |
| 227 | + System.out.println(" :: sendMsgData_bt_advc :: "); | |
| 228 | + return ResponseEntity.ok().body(kakaoBrandMsgService.insertKakaoBtSandAjax_advc(kakaoVO, request)) ; | |
| 229 | + | |
| 230 | + } | |
| 231 | + | |
| 232 | +} |
+++ src/main/java/itn/let/kakao/user/kakaoBt/web/KakaoBrandMsgTemplateController.java
... | ... | @@ -0,0 +1,89 @@ |
| 1 | +package itn.let.kakao.user.kakaoBt.web; | |
| 2 | + | |
| 3 | +import java.time.LocalDateTime; | |
| 4 | +import java.util.ArrayList; | |
| 5 | +import java.util.List; | |
| 6 | +import java.util.Map; | |
| 7 | + | |
| 8 | +import javax.annotation.Resource; | |
| 9 | +import javax.servlet.http.HttpServletRequest; | |
| 10 | +import javax.servlet.http.HttpServletResponse; | |
| 11 | + | |
| 12 | +import org.apache.commons.lang3.StringUtils; | |
| 13 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 14 | +import org.springframework.http.HttpStatus; | |
| 15 | +import org.springframework.http.ResponseEntity; | |
| 16 | +import org.springframework.stereotype.Controller; | |
| 17 | +import org.springframework.ui.Model; | |
| 18 | +import org.springframework.ui.ModelMap; | |
| 19 | +import org.springframework.web.bind.annotation.ModelAttribute; | |
| 20 | +import org.springframework.web.bind.annotation.RequestMapping; | |
| 21 | +import org.springframework.web.bind.annotation.ResponseBody; | |
| 22 | +import org.springframework.web.multipart.MultipartFile; | |
| 23 | +import org.springframework.web.multipart.MultipartHttpServletRequest; | |
| 24 | +import org.springframework.web.servlet.ModelAndView; | |
| 25 | + | |
| 26 | +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; | |
| 27 | +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; | |
| 28 | +import itn.com.cmm.EgovMessageSource; | |
| 29 | +import itn.com.cmm.LoginVO; | |
| 30 | +import itn.com.cmm.RestResponse; | |
| 31 | +import itn.com.cmm.service.EgovCmmUseService; | |
| 32 | +import itn.com.utl.fcc.service.EgovStringUtil; | |
| 33 | +import itn.let.kakao.kakaoComm.KakaoReturnVO; | |
| 34 | +import itn.let.kakao.kakaoComm.KakaoVO; | |
| 35 | +import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiImageUpload; | |
| 36 | +import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfile; | |
| 37 | +import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfileCategory; | |
| 38 | +import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; | |
| 39 | +import itn.let.kakao.kakaoComm.kakaoApi.KakaoFTJsonSave; | |
| 40 | +import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; | |
| 41 | +import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService; | |
| 42 | +import itn.let.mail.service.StatusResponse; | |
| 43 | +import itn.let.mjo.symbol.service.MjonSymbolService; | |
| 44 | +import itn.let.mjo.symbol.service.MjonSymbolVO; | |
| 45 | +import itn.let.uss.ion.cnt.service.CntManageVO; | |
| 46 | +import itn.let.uss.umt.service.EgovUserManageService; | |
| 47 | +import lombok.extern.slf4j.Slf4j; | |
| 48 | + | |
| 49 | +@Slf4j | |
| 50 | +@Controller | |
| 51 | +public class KakaoBrandMsgTemplateController { | |
| 52 | + | |
| 53 | + @Resource(name = "kakaoFriendsTalkTemplateService") | |
| 54 | + private KakaoFriendsTalkTemplateService kakaoFtTemplateService; | |
| 55 | + | |
| 56 | + @Resource(name = "EgovCmmUseService") | |
| 57 | + private EgovCmmUseService cmmUseService; | |
| 58 | + | |
| 59 | + @Resource(name = "kakaoApiService") | |
| 60 | + private KakaoApiService kakaoApiService; | |
| 61 | + | |
| 62 | + /** EgovMessageSource */ | |
| 63 | + @Resource(name="egovMessageSource") | |
| 64 | + EgovMessageSource egovMessageSource; | |
| 65 | + | |
| 66 | + @Resource(name = "mjonSymbolService") | |
| 67 | + private MjonSymbolService mjonSymbolService; | |
| 68 | + | |
| 69 | + /** userManageService */ | |
| 70 | + @Resource(name = "userManageService") | |
| 71 | + private EgovUserManageService userManageService; | |
| 72 | + | |
| 73 | + @Autowired | |
| 74 | + KakaoApiProfile kakaoApiProfile; | |
| 75 | + | |
| 76 | + @Autowired | |
| 77 | + KakaoApiProfileCategory kakaoApiProfileCategory; | |
| 78 | + | |
| 79 | + @Autowired | |
| 80 | + KakaoApiTemplate kakaoApiTemplate; | |
| 81 | + | |
| 82 | + @Autowired | |
| 83 | + KakaoApiImageUpload kakaoApiImageUpload; | |
| 84 | + | |
| 85 | + @Autowired | |
| 86 | + KakaoFTJsonSave kakaoFTJsonSave; | |
| 87 | + | |
| 88 | + | |
| 89 | +} |
--- src/main/java/itn/let/uss/umt/service/MberManageVO.java
+++ src/main/java/itn/let/uss/umt/service/MberManageVO.java
... | ... | @@ -321,6 +321,12 @@ |
| 321 | 321 |
|
| 322 | 322 |
private float kakaoFtWideImgPrice; // 카카오 친구톡 와이드 단가 |
| 323 | 323 |
|
| 324 |
+ private float kakaoBtPrice; // 카카오 친구톡 텍스트 단가 |
|
| 325 |
+ |
|
| 326 |
+ private float kakaoBtImgPrice; // 카카오 친구톡 이미지 단가 |
|
| 327 |
+ |
|
| 328 |
+ private float kakaoBtWideImgPrice; // 카카오 친구톡 와이드 단가 |
|
| 329 |
+ |
|
| 324 | 330 |
private float faxPrice; // 팩스 단가 |
| 325 | 331 |
|
| 326 | 332 |
private double userMoney; //회원보유 캐시 |
... | ... | @@ -1819,6 +1825,24 @@ |
| 1819 | 1825 |
public void setKakaoFtWideImgPrice(float kakaoFtWideImgPrice) {
|
| 1820 | 1826 |
this.kakaoFtWideImgPrice = kakaoFtWideImgPrice; |
| 1821 | 1827 |
} |
| 1828 |
+ public float getKakaoBtPrice() {
|
|
| 1829 |
+ return kakaoBtPrice; |
|
| 1830 |
+ } |
|
| 1831 |
+ public void setKakaoBtPrice(float kakaoBtPrice) {
|
|
| 1832 |
+ this.kakaoBtPrice = kakaoBtPrice; |
|
| 1833 |
+ } |
|
| 1834 |
+ public float getKakaoBtImgPrice() {
|
|
| 1835 |
+ return kakaoBtImgPrice; |
|
| 1836 |
+ } |
|
| 1837 |
+ public void setKakaoBtImgPrice(float kakaoBtImgPrice) {
|
|
| 1838 |
+ this.kakaoBtImgPrice = kakaoBtImgPrice; |
|
| 1839 |
+ } |
|
| 1840 |
+ public float getKakaoBtWideImgPrice() {
|
|
| 1841 |
+ return kakaoBtWideImgPrice; |
|
| 1842 |
+ } |
|
| 1843 |
+ public void setKakaoBtWideImgPrice(float kakaoBtWideImgPrice) {
|
|
| 1844 |
+ this.kakaoBtWideImgPrice = kakaoBtWideImgPrice; |
|
| 1845 |
+ } |
|
| 1822 | 1846 |
public float getFaxPrice() {
|
| 1823 | 1847 |
return faxPrice; |
| 1824 | 1848 |
} |
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
... | ... | @@ -2188,6 +2188,9 @@ |
| 2188 | 2188 |
, PRE_PAYMENT_YN AS prePaymentYn |
| 2189 | 2189 |
, BIZ_NO AS bizNo |
| 2190 | 2190 |
, MBER_EMAIL_ADRES AS mberEmailAdres |
| 2191 |
+ , KAKAO_BT_PRICE AS kakaoBtPrice |
|
| 2192 |
+ , KAKAO_BT_IMG_PRICE AS kakaoBtImgPrice |
|
| 2193 |
+ , KAKAO_BT_WIDE_IMG_PRICE AS kakaoBtWideImgPrice |
|
| 2191 | 2194 |
FROM LETTNGNRLMBER |
| 2192 | 2195 |
WHERE MBER_ID = #userId# |
| 2193 | 2196 |
|
--- src/main/webapp/WEB-INF/jsp/web/custom/MsgCustomPopupAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/custom/MsgCustomPopupAjax.jsp
... | ... | @@ -417,6 +417,7 @@ |
| 417 | 417 |
<p><span class="vMiddle">*</span> <span class="c_e40000">캘리그래피체는 수정이 불가</span>합니다.</p> |
| 418 | 418 |
<p><span class="vMiddle">*</span> <span class="c_e40000">제작형태와 요청사항이 상이</span>한 경우 <span class="c_e40000">추가로 비용이 발생</span>할 수 있습니다.</p> |
| 419 | 419 |
<p><span class="vMiddle">*</span> <span class="c_e40000">제작된 이미지는 <span class="c_e40000">알림톡 및 친구톡</span> 발송에는 사용할 수 없습니다.</p> |
| 420 |
+<%-- <p><span class="vMiddle">*</span> <span class="c_e40000">제작된 이미지는 <span class="c_e40000">알림톡 및 브랜드메시지</span> 발송에는 사용할 수 없습니다.</p>--%> |
|
| 420 | 421 |
</div> |
| 421 | 422 |
</td> |
| 422 | 423 |
</tr> |
--- src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
... | ... | @@ -16,11 +16,13 @@ |
| 16 | 16 |
|
| 17 | 17 |
var menuTopTab = '${paramKakaoVO.menuTopTab}';
|
| 18 | 18 |
|
| 19 |
+ |
|
| 19 | 20 |
if(menuTopTab == ''){
|
| 20 | 21 |
|
| 21 | 22 |
menuTopTab = form.menuTopTab.value; |
| 22 | 23 |
|
| 23 | 24 |
} |
| 25 |
+ console.log('menuTopTab : ', menuTopTab);
|
|
| 24 | 26 |
|
| 25 | 27 |
if(menuTopTab == 'tabConf'){
|
| 26 | 28 |
$(".topTab").removeClass("active");
|
... | ... | @@ -37,6 +39,10 @@ |
| 37 | 39 |
}else if(menuTopTab == 'tabIntro'){
|
| 38 | 40 |
$(".topTab").removeClass("active");
|
| 39 | 41 |
$("#tabIntro").addClass("active");
|
| 42 |
+ |
|
| 43 |
+ }else if(menuTopTab == 'tabBrandMsg'){
|
|
| 44 |
+ $(".topTab").removeClass("active");
|
|
| 45 |
+ $("#tabBt").addClass("active");
|
|
| 40 | 46 |
} |
| 41 | 47 |
|
| 42 | 48 |
} |
... | ... | @@ -64,7 +70,12 @@ |
| 64 | 70 |
|
| 65 | 71 |
url = "<c:url value='/web/mjon/kakao/alimtalk/kakaotalkIntrdView.do'/>"; |
| 66 | 72 |
|
| 73 |
+ }else if(tabInfo == 'tabBrandMsg'){
|
|
| 74 |
+ |
|
| 75 |
+ url = "<c:url value='/web/mjon/kakao/brandMsg/kakaoBrandMsgDataView.do'/>"; |
|
| 76 |
+ |
|
| 67 | 77 |
} |
| 78 |
+ |
|
| 68 | 79 |
|
| 69 | 80 |
//form.action =url; |
| 70 | 81 |
//form.submit(); |
... | ... | @@ -142,6 +153,7 @@ |
| 142 | 153 |
|
| 143 | 154 |
<ul class="tabType4"> |
| 144 | 155 |
<li id="tabAt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlim');">알림톡</button></li>
|
| 156 |
+ <%--<li id="tabBt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabBrandMsg');">브랜드메시지</button></li>--%>
|
|
| 145 | 157 |
<li id="tabFt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabFriend');">친구톡</button></li>
|
| 146 | 158 |
<li id="tabConf" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabConf');">카카오톡 설정</button></li>
|
| 147 | 159 |
<li id="tabIntro" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabKakaotalkIntrd');">카카오톡 소개</button></li>
|
--- src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaotalkIntro.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaotalkIntro.jsp
... | ... | @@ -26,7 +26,7 @@ |
| 26 | 26 |
|
| 27 | 27 |
<ul class="tabType1"> |
| 28 | 28 |
<li class="tab active"><button type="button" onclick="contentTab(this,'1');">알림톡</button></li> |
| 29 |
- <li class="tab"><button type="button" onclick="contentTab(this,'2');">친구톡</button></li> |
|
| 29 |
+ <li class="tab"><button type="button" onclick="contentTab(this,'2');">브랜드메시지</button></li> |
|
| 30 | 30 |
</ul> |
| 31 | 31 |
|
| 32 | 32 |
<!-- 알림톡 소개 --> |
... | ... | @@ -304,11 +304,11 @@ |
| 304 | 304 |
</div> |
| 305 | 305 |
<!-- // 알림톡 소개 --> |
| 306 | 306 |
|
| 307 |
- <!-- 친구톡 소개 --> |
|
| 307 |
+ <!-- 브랜드메시지 소개 --> |
|
| 308 | 308 |
<div class="tab_content friendtalk" id="tab_content_2"> |
| 309 | 309 |
<div class="kakao_intro"> |
| 310 | 310 |
<div class="title"> |
| 311 |
- <h3>친구톡이란?</h3> |
|
| 311 |
+ <h3>브랜드메시지란?</h3> |
|
| 312 | 312 |
</div> |
| 313 | 313 |
|
| 314 | 314 |
<div class="title-line"> |
... | ... | @@ -321,42 +321,44 @@ |
| 321 | 321 |
<div class="intro"> |
| 322 | 322 |
<img class="phone" src="/publish/images/kakao_intro_cont/phone_friendtalk.png" alt="핸드폰"> |
| 323 | 323 |
|
| 324 |
- <ul class="list"> |
|
| 324 |
+ <ul class="list" style="width:57%;"> |
|
| 325 | 325 |
<li> |
| 326 |
- <img src="/publish/images/kakao_intro_cont/text_friendtalk.png" alt="카카오톡 전용 기업 메시지 서비스 “알림톡”"> |
|
| 326 |
+ <img src="/publish/images/kakao_intro_cont/text_brandmsg.png" alt="카카오톡 전용 기업 메시지 서비스 “알림톡”"> |
|
| 327 | 327 |
</li> |
| 328 | 328 |
<li> |
| 329 |
- <p>1</p> |
|
| 330 |
- <p><span>광고성 메시지</span> 발송 가능(광고 표기 및 수신거부 안내 포함)</p> |
|
| 331 |
- </li> |
|
| 332 |
- <li> |
|
| 333 |
- <p>2</p> |
|
| 334 |
- <p>채널 친구 추가된 사용자라면 <span>누구에게나</span> 발송 가능</p> |
|
| 335 |
- </li> |
|
| 336 |
- <li> |
|
| 337 |
- <p>3</p> |
|
| 338 |
- <p><span>1,000자 이내</span> 텍스트 및 <span>이미지</span> 전송 가능</p> |
|
| 339 |
- </li> |
|
| 340 |
- <li> |
|
| 341 |
- <p>4</p> |
|
| 342 |
- <p><span>맞춤형 메시지 및 쿠폰, 링크</span> 버튼 제공 가능</p> |
|
| 343 |
- </li> |
|
| 344 |
- <li> |
|
| 345 |
- <p>5</p> |
|
| 346 |
- <p>문자 메시지 대비 <span>저렴한</span> 단가</p> |
|
| 347 |
- </li> |
|
| 348 |
- <li> |
|
| 349 |
- <p>6</p> |
|
| 350 |
- <p>발송실패 시 <span>대체문자 발송</span> 기능 지원</p> |
|
| 351 |
- </li> |
|
| 352 |
- <li> |
|
| 353 |
- <p>7</p> |
|
| 354 |
- <p>클릭률/도달률 분석을 통한 <span>마케팅 효율 강화</span></p> |
|
| 355 |
- </li> |
|
| 356 |
- <li> |
|
| 357 |
- <p>8</p> |
|
| 358 |
- <p>브랜드 친화적인 <span>이미지 커스터마이징</span> 가능</p> |
|
| 359 |
- </li> |
|
| 329 |
+ <p>1</p> |
|
| 330 |
+ <p><span>광고성 메시지</span> 발송 가능(광고 표기 및 수신거부 안내 포함)</p> |
|
| 331 |
+ </li> |
|
| 332 |
+ <li> |
|
| 333 |
+ <p>2</p> |
|
| 334 |
+ <p>채널 친구 추가된 사용자라면 <span>누구에게나</span> 발송 가능<strong>(타깃 설정 미지원)</strong></p> |
|
| 335 |
+ </li> |
|
| 336 |
+ <li> |
|
| 337 |
+ <p>3</p> |
|
| 338 |
+ <p> |
|
| 339 |
+ <span>1,000자 이내</span> 텍스트 및 <span>이미지</span> 전송 가능 |
|
| 340 |
+ </p> |
|
| 341 |
+ </li> |
|
| 342 |
+ <li> |
|
| 343 |
+ <p>4</p> |
|
| 344 |
+ <p><span>맞춤형 메시지 및 쿠폰, 링크</span> 버튼 제공 가능</p> |
|
| 345 |
+ </li> |
|
| 346 |
+ <li> |
|
| 347 |
+ <p>5</p> |
|
| 348 |
+ <p>문자 메시지 대비 <span>저렴한</span> 단가</p> |
|
| 349 |
+ </li> |
|
| 350 |
+ <li> |
|
| 351 |
+ <p>6</p> |
|
| 352 |
+ <p>발송실패 시 <span>대체문자 발송</span> 기능 지원</p> |
|
| 353 |
+ </li> |
|
| 354 |
+ <li> |
|
| 355 |
+ <p>7</p> |
|
| 356 |
+ <p>클릭률/도달률 분석을 통한 <span>마케팅 효율 강화</span></p> |
|
| 357 |
+ </li> |
|
| 358 |
+ <li> |
|
| 359 |
+ <p>8</p> |
|
| 360 |
+ <p>브랜드 친화적인 <span>이미지 커스터마이징</span> 가능</p> |
|
| 361 |
+ </li> |
|
| 360 | 362 |
</ul> |
| 361 | 363 |
</div> |
| 362 | 364 |
|
... | ... | @@ -364,7 +366,7 @@ |
| 364 | 366 |
<div class="fight"> |
| 365 | 367 |
<div class="line"></div> |
| 366 | 368 |
<div class="fight-title"> |
| 367 |
- <h4>알림톡 <span>VS</span> 친구톡</h4> |
|
| 369 |
+ <h4>알림톡 <span>VS</span> 브랜드메시지</h4> |
|
| 368 | 370 |
<div class="circle"></div> |
| 369 | 371 |
</div> |
| 370 | 372 |
|
... | ... | @@ -400,17 +402,17 @@ |
| 400 | 402 |
</div> |
| 401 | 403 |
|
| 402 | 404 |
<div class="vs friendtalk_vs"> |
| 403 |
- <div class="title">친구톡</div> |
|
| 405 |
+ <div class="title">브랜드메시지</div> |
|
| 404 | 406 |
<div class="box"> |
| 405 | 407 |
<ul> |
| 406 |
- <li>채널 친구</li> |
|
| 407 |
- <li>광고 및 마케팅성<span>(예 : 이벤트, 쿠폰 등)</span></li> |
|
| 408 |
- <li>텍스트, 기본이미지, 와이드 이미지형 등</li> |
|
| 409 |
- <li>최대 5개</li> |
|
| 410 |
- <li>별도 승인 없음 <span>야간 발송 제한(20:50 ~ 익일 08:00)</span></li> |
|
| 411 |
- <li>13.8원 ~ 22.9원</li> |
|
| 412 |
- <li>1,000자</li> |
|
| 413 |
- <li>가능</li> |
|
| 408 |
+ <li>채널 친구<span>(타깃 설정 미지원)</span></li> |
|
| 409 |
+ <li>광고 및 마케팅성<span>(예 : 이벤트, 쿠폰 등)</span></li> |
|
| 410 |
+ <li>텍스트, 기본이미지, 와이드 이미지형 등</li> |
|
| 411 |
+ <li>최대 5개</li> |
|
| 412 |
+ <li>별도 승인 없음 <span>야간 발송 제한(20:50 ~ 익일 08:00)</span></li> |
|
| 413 |
+ <li>20원</li> |
|
| 414 |
+ <li>1,000자</li> |
|
| 415 |
+ <li>가능</li> |
|
| 414 | 416 |
</ul> |
| 415 | 417 |
</div> |
| 416 | 418 |
</div> |
... | ... | @@ -422,7 +424,7 @@ |
| 422 | 424 |
<!-- 친구톡 유형 --> |
| 423 | 425 |
<div class="use"> |
| 424 | 426 |
<div class="title"> |
| 425 |
- <h3>친구톡 유형</h3> |
|
| 427 |
+ <h3>브랜드메시지 유형</h3> |
|
| 426 | 428 |
</div> |
| 427 | 429 |
|
| 428 | 430 |
<div class="title-line"> |
... | ... | @@ -476,14 +478,14 @@ |
| 476 | 478 |
<li class="guide_03"> |
| 477 | 479 |
<div class="title">STEP <span>03</span></div> |
| 478 | 480 |
<i></i> |
| 479 |
- <p class="guide_title">친구톡 전송</p> |
|
| 480 |
- <span class="guide_info">친구톡은 별도의 템플릿 심사 절차 없이, 즉시 발송 가능합니다.</span> |
|
| 481 |
+ <p class="guide_title">브랜드메시지 전송</p> |
|
| 482 |
+ <span class="guide_info">브랜드메시지는 별도의 템플릿 심사 절차 없이, 즉시 발송 가능합니다.</span> |
|
| 481 | 483 |
</li> |
| 482 | 484 |
</ul> |
| 483 | 485 |
|
| 484 | 486 |
<!--이용가이드 버튼--> |
| 485 | 487 |
<div class="guide"> |
| 486 |
- <a href="https://kakaobusiness.gitbook.io/main/ad/brandmessage" target="_blank">친구톡 이용가이드 보기 <img src="/publish/images/kakao_intro_cont/guide_arrow.png" alt="알림톡 이용가이드 화살표"></a> |
|
| 488 |
+ <a href="https://kakaobusiness.gitbook.io/main/ad/brandmessage" target="_blank">브랜드메시지 이용가이드 보기 <img src="/publish/images/kakao_intro_cont/guide_arrow.png" alt="알림톡 이용가이드 화살표"></a> |
|
| 487 | 489 |
</div> |
| 488 | 490 |
</div> |
| 489 | 491 |
|
... | ... | @@ -493,15 +495,14 @@ |
| 493 | 495 |
<p><span><img src="/publish/images/kakao_intro_cont/note_icon.png" alt="유의사항 아이콘"></span>유의사항</p> |
| 494 | 496 |
</div> |
| 495 | 497 |
<ul> |
| 496 |
- <li>- (광고) 표기 여부는 선택 가능하나 , (광고)표기 해제에 따른 법령상 의무사항을 미 준수시에는 메시지 발송이 중단될 수 있습니다.</li> |
|
| 497 |
- <li>- 광고성 친구톡 메시지에는 “(광고) 표시 및 수신거부 방식”이 표시되며, 대체 문자의 경우에는 “(광고) 문구 및 080 무료수신거부 번호”가 자동으로 포함됩니다.</li> |
|
| 498 |
- <li><b>- 광고성 메시지의 발송 가능 시간은 08:00 ~ 20:50(한국시간) 입니다.</b></li> |
|
| 499 |
- <li>- 친구톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.</li> |
|
| 500 |
- <li>- 카카오정책 및 심의기준을 반드시 준수하여야 합니다.</li> |
|
| 498 |
+ <li>- 브랜드메시지에는 "(광고) 문구 및 수신거부 방식"이 자동으로 표시되며, 대체 문자 발송 시에는 “(광고) 문구 및 080 무료수신거부 번호”가 자동으로 적용됩니다.</li> |
|
| 499 |
+ <li><b>- 광고성 메시지의 발송 가능 시간은 08:00 ~ 20:50(한국시간) 입니다.</b></li> |
|
| 500 |
+ <li>- 브랜드메시지 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.</li> |
|
| 501 |
+ <li>- 카카오정책 및 심의기준을 반드시 준수하여야 합니다.</li> |
|
| 501 | 502 |
</ul> |
| 502 | 503 |
</div> |
| 503 | 504 |
</div> |
| 504 |
- <!-- // 친구톡 소개 --> |
|
| 505 |
+ <!-- // 브랜드메시지 소개 --> |
|
| 505 | 506 |
|
| 506 | 507 |
</div> |
| 507 | 508 |
</div> |
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/bt/brandMsgDataView.jsp
... | ... | @@ -0,0 +1,2678 @@ |
| 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="fn" uri="http://java.sun.com/jsp/jstl/functions"%> | |
| 4 | +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> | |
| 5 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 6 | +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> | |
| 7 | +<%@ page import="itn.com.cmm.LoginVO" %> | |
| 8 | +<script src="/js/kakao/ft/templateComm.js"></script> | |
| 9 | + | |
| 10 | +<script type="text/javascript" src="<c:out value='/js/MJUtill.js' />"></script> | |
| 11 | +<script type="text/javascript" src="<c:out value='/js/kakao/ft/ftPriceClclt.js' />"></script> | |
| 12 | +<script type="text/javascript" src="<c:out value='/js/kakao/ft/ftTabulator.js?v=20240328' />"></script> | |
| 13 | +<script type="text/javascript" src="<c:out value='/js/txtSpecialReplace.js' />"></script> | |
| 14 | +<script type="text/javascript" src="<c:out value='/js/kakao/ft/addr.js' />"></script> | |
| 15 | +<script type="text/javascript" src="<c:out value='/js/common/popup.js' />"></script> | |
| 16 | +<script type="text/javascript" src="<c:out value='/js/kakao/ft/friendstalkExcel.js' />"></script> | |
| 17 | +<!-- 주소록 유효성 체크 공통유틸로 인해 추가 --> | |
| 18 | +<script type="text/javascript" src="<c:url value='/js/web/addr/cmn.js?date=202409021440'/>"></script> | |
| 19 | + | |
| 20 | + | |
| 21 | +<script type="text/javascript"> | |
| 22 | + | |
| 23 | +var loginVO = '${loginVO}'; | |
| 24 | +/* 파일등록 */ | |
| 25 | +var _fileIdx = 0; | |
| 26 | +var _fileForm2 = new Array(); | |
| 27 | +var fileExt = ""; // 첨부파일 확장자 | |
| 28 | +var excelAddr = []; //엑셀 불러오기에서 내용 저장하는 배열 변수 | |
| 29 | + | |
| 30 | +var KAKAO_FT_PRICE; | |
| 31 | +var KAKAO_FT_IMG_PRICE; | |
| 32 | +var KAKAO_FT_WIDE_IMG_PRICE; | |
| 33 | +$(document).ready(function (){ | |
| 34 | + | |
| 35 | + KAKAO_FT_PRICE = $('#kakaoFtPrice').val(); | |
| 36 | + KAKAO_FT_IMG_PRICE = $('#kakaoFtImgPrice').val(); | |
| 37 | + KAKAO_FT_WIDE_IMG_PRICE = $('#kakaoFtWideImgPrice').val(); | |
| 38 | + //화면 초기 로딩시 화면 처리해주기 - 템플릿 불러오기 했을 경우를 위함 | |
| 39 | + initFormChk(); | |
| 40 | + | |
| 41 | + //특수문자, 일괄변화문구 삽입 기능 처리 | |
| 42 | + $(".symbolButton, .changeWord").on('click', function(){ | |
| 43 | + | |
| 44 | + // 커서 위치에 삽입 | |
| 45 | + setCursorInsertText("inputTemplateContent", $(this).attr("value")); | |
| 46 | + setContentsLeng($('#inputTemplateContent').val()); | |
| 47 | + }); | |
| 48 | + | |
| 49 | + | |
| 50 | + //즉시 발송 라디오 버튼 선택시 숨김처리 | |
| 51 | + $('input[name="reserYn"]').on('change', function() { | |
| 52 | + const isReserve = $(this).val() === 'Y'; | |
| 53 | + | |
| 54 | + $('.rev_selected').toggle(isReserve); | |
| 55 | + $('.send_rev .send_content').css('padding-bottom', isReserve ? '0' : '108px'); | |
| 56 | + $('.send_btn .btnType:first-child').html(isReserve ? '예약하기' : '발송하기'); | |
| 57 | + $('#bizForm #reserveYn').val($(this).val()); | |
| 58 | + }); | |
| 59 | + | |
| 60 | + //템플릿 내용 입력 글자수 체크 해주기 | |
| 61 | + $("#inputTemplateContent").keyup(function(e){ | |
| 62 | + | |
| 63 | + var contents = $('#inputTemplateContent').val(); | |
| 64 | + setContentsLengForFriends(contents); | |
| 65 | + | |
| 66 | + }); | |
| 67 | + | |
| 68 | +// 웹링크 버튼명 변경 시 미리보기에도 적용 (여러 개일 때 정확하게) | |
| 69 | + $(document).on('keyup', '#btnNmWeb', function(){ | |
| 70 | + var inputTxt = $(this).val() || '웹링크'; | |
| 71 | + // 웹링크용 인풋만 골라서 현재 인덱스를 구함 | |
| 72 | + var $webNmInputs = $('input#btnNmWeb'); | |
| 73 | + var idx = $webNmInputs.index(this); | |
| 74 | + // 미리보기 영역의 웹링크 버튼들 중, 동일한 인덱스의 버튼 텍스트를 바꿔줌 | |
| 75 | + $('.btnViewArea .btn_kakao_type.btnEmpty[id^=btnViewWL]').eq(idx).text(inputTxt); | |
| 76 | + }); | |
| 77 | + $(document).on('keyup', '#btnNmApp', function(){ | |
| 78 | + var inputTxt = $(this).val() || '앱링크'; | |
| 79 | + var $appNmInputs = $('input#btnNmApp'); | |
| 80 | + var idx = $appNmInputs.index(this); | |
| 81 | + $('.btnViewArea .btn_kakao_type.btnEmpty[id^=btnViewAL]').eq(idx).text(inputTxt); | |
| 82 | + }); | |
| 83 | + | |
| 84 | + $(".friend_talk_wrap #ad_Y").click(function () { | |
| 85 | + if ($(this).is(":checked") == true) { | |
| 86 | + | |
| 87 | + fnAgentCodeChg(); | |
| 88 | + } | |
| 89 | + thisFnByteString($('#smsTxtArea').val()); | |
| 90 | + }); | |
| 91 | + $("#send_fail_check").change(function(){ | |
| 92 | + if($("#send_fail_check").is(":checked")){ | |
| 93 | + | |
| 94 | + | |
| 95 | + if(loginVO == "" || loginVO == null){ | |
| 96 | + alert("로그인 후 사용 가능한 기능입니다."); | |
| 97 | + location.href="<c:url value='/web/user/login/login.do'/>"; | |
| 98 | + return false; | |
| 99 | + | |
| 100 | + $("#send_fail_check").prop("checked", false); | |
| 101 | + } | |
| 102 | + | |
| 103 | + if($('#callFromList').val() === ''){ | |
| 104 | + | |
| 105 | + if(confirm('대체문자 전송을 위한 발신번호가 등록되지 않았습니다. \n대체문자 발신번호를 지금 등록하시겠습니까?')){ | |
| 106 | + window.location="<c:out value='/web/user/sendNumberManage.do' />"; | |
| 107 | + } | |
| 108 | + $("#send_fail_check").prop("checked", false); | |
| 109 | + | |
| 110 | + }else{ | |
| 111 | + // 에러버튼 체크 초기화 | |
| 112 | + fn_insertErrorYN('N'); | |
| 113 | + | |
| 114 | + $('#smsTxtArea').val(''); | |
| 115 | +// // 미리보기 텍스트를 가져와 줄바꿈 처리 후 대체문자 내용으로 입력 | |
| 116 | + $('#smsTxtArea').val( | |
| 117 | + $('.template_text').html().trim().replace(/(<br>|<br\/>|<br \/>)/g, '\r\n') | |
| 118 | + ); | |
| 119 | + | |
| 120 | +// //문자 내용 입력시 바이트수 계산하기 | |
| 121 | + | |
| 122 | + $(".replace_send_wrap").slideDown(400); | |
| 123 | + thisFnByteString($('#smsTxtArea').val()); | |
| 124 | + } | |
| 125 | + }else{ | |
| 126 | + $(".replace_send_wrap").slideUp(400); | |
| 127 | + // 초기화 버튼 클릭 | |
| 128 | + $('#failCheckInit').click(); | |
| 129 | + $('.send_top .send_right .phone').css({'top': '0','transition': 'top .4s linear'}); | |
| 130 | + } | |
| 131 | + | |
| 132 | + // 금액 계산 fn 호출 | |
| 133 | + totalFtPriceSum(tableL.getRows().length); | |
| 134 | + //fn_priceClclt(); | |
| 135 | + }); | |
| 136 | + | |
| 137 | + // 대체문자 내용 수정 | |
| 138 | + $('#smsTxtArea').keyup(function(){ | |
| 139 | + // 금액 계산 fn 호출 | |
| 140 | + totalFtPriceSum(tableL.getRows().length); | |
| 141 | + //fn_priceClclt(); | |
| 142 | + // 문자 바이트수 체크 | |
| 143 | + thisFnByteString($('#smsTxtArea').val()); | |
| 144 | + // 에러버튼 체크 초기화 | |
| 145 | + fn_insertErrorYN('N'); | |
| 146 | + | |
| 147 | + }); | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + // 광고포함여부 체크 이벤트 | |
| 152 | + $("#ad_Y").click(function () { | |
| 153 | + const isChecked = $(this).prop("checked"); | |
| 154 | + $('#adFlag').val(isChecked ? 'Y' : 'N'); | |
| 155 | + }); | |
| 156 | + | |
| 157 | + | |
| 158 | + $("input[name='img_file_add']").change(function () { | |
| 159 | + | |
| 160 | + imageInit(); | |
| 161 | + | |
| 162 | + | |
| 163 | + // 첨부가 없으면 | |
| 164 | + if ($('#sendFailImgSrc').attr('src') != null) { | |
| 165 | + $('#sendFailImg').hide(); | |
| 166 | + $('#sendFailImgSrc').attr('src', ''); | |
| 167 | + $('#atchFileId').val(''); | |
| 168 | + thisFnByteString($('#smsTxtArea').val()); | |
| 169 | + } | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + //결제 금액 구하기 | |
| 175 | + totalFtPriceSum(tableL.getRows().length); | |
| 176 | + }); | |
| 177 | + | |
| 178 | + // 최근 전송내역 | |
| 179 | + resultLatestMsgList(); | |
| 180 | + //자주보내는 번호 | |
| 181 | + resultBookMarkMsgList(); | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + // 대체문자 초기화 | |
| 187 | + $('#failCheckInit').on('click', function(){ | |
| 188 | + console.log('::failCheckInit::'); | |
| 189 | + $('#smsTxtArea').val(''); | |
| 190 | + thisFnByteString(''); | |
| 191 | + | |
| 192 | + }); | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | +}); | |
| 197 | + | |
| 198 | +function imageInit(){ | |
| 199 | + | |
| 200 | + var imageUrl = $("#templateImageUrl").val(); | |
| 201 | + | |
| 202 | + // 이미지가 없으면 function 종료 | |
| 203 | + if(imageUrl == ''){ | |
| 204 | + return false; | |
| 205 | + } | |
| 206 | + | |
| 207 | + // 이미지가 있으면 이미지 창 및 미리보기 창에 이미지 삭제 | |
| 208 | + $("#imgLink").val(""); | |
| 209 | + $("#imgFile").val(""); | |
| 210 | + | |
| 211 | + $('#imgTitle').addClass('file_none') | |
| 212 | + .text("이미지 없음"); | |
| 213 | + | |
| 214 | + $('#imgLink').prop('disabled', false); // 회색 처리 제거 + 입력 불가 제거 | |
| 215 | + | |
| 216 | + $("#templateImageUrl").val(""); | |
| 217 | + $('.kakao_image').css("display", "none"); | |
| 218 | + $("#kakaoImg").attr("src", ""); | |
| 219 | + $("#imageFileName").val(""); //이미지 파일명 삭제 | |
| 220 | + | |
| 221 | +} | |
| 222 | +/* | |
| 223 | +function validateButtons() { | |
| 224 | + var isValid = true; | |
| 225 | + | |
| 226 | + console.log($('#buttonAddWrap').html()); | |
| 227 | + var val = ''; | |
| 228 | + // button_add_wrap 하위 input들 중에서 비어있는 항목이 있는지 확인 | |
| 229 | + $('#buttonAddWrap').find('input[type="text"]').each(function() { | |
| 230 | + | |
| 231 | + var val = $(this).val().trim(); | |
| 232 | + if (val === '') { | |
| 233 | + console.log($(this).prop('outerHTML')); | |
| 234 | + isValid = false; | |
| 235 | + return false; // .each 루프 중단 | |
| 236 | + } | |
| 237 | + }); | |
| 238 | + | |
| 239 | + if (!isValid) { | |
| 240 | + alert('버튼명 및 링크를 입력해주세요.'); | |
| 241 | + return false; | |
| 242 | + }else if (!val.startsWith('http://') && !val.startsWith('https://') ) { | |
| 243 | + alert('버튼의 링크는 http:// 또는 https:// 형식으로 입력해주세요.'); | |
| 244 | + $(this).focus(); | |
| 245 | + return false; | |
| 246 | + } | |
| 247 | + | |
| 248 | + return true; | |
| 249 | +} */ | |
| 250 | + | |
| 251 | +function validateButtons() { | |
| 252 | + var isValid = true; | |
| 253 | + | |
| 254 | + $('.kakaoBtnNmList').each(function() { | |
| 255 | + var val = $(this).val().trim(); | |
| 256 | + | |
| 257 | + // 빈 값 체크 | |
| 258 | + if (val === '') { | |
| 259 | + alert('버튼명을 모두 입력해주세요.'); | |
| 260 | + $(this).focus(); | |
| 261 | + isValid = false; | |
| 262 | + return false; // .each 루프 중단 | |
| 263 | + } | |
| 264 | + | |
| 265 | + }); | |
| 266 | + | |
| 267 | + if(isValid){ | |
| 268 | + $('.kakaoBtnList').each(function() { | |
| 269 | + var val = $(this).val().trim(); | |
| 270 | + | |
| 271 | + // 빈 값 체크 | |
| 272 | + if (val === '') { | |
| 273 | + alert('링크를 모두 입력해주세요.'); | |
| 274 | + $(this).focus(); | |
| 275 | + isValid = false; | |
| 276 | + return false; // .each 루프 중단 | |
| 277 | + } | |
| 278 | + | |
| 279 | + // http 형식 체크 | |
| 280 | + if (!val.startsWith('http://') && !val.startsWith('https://')) { | |
| 281 | + alert('버튼의 링크는 http:// 또는 https:// 형식으로 입력해주세요.'); | |
| 282 | + $(this).focus(); | |
| 283 | + isValid = false; | |
| 284 | + return false; // .each 루프 중단 | |
| 285 | + } | |
| 286 | + }); | |
| 287 | + } | |
| 288 | + | |
| 289 | + | |
| 290 | + return isValid; | |
| 291 | +} | |
| 292 | + | |
| 293 | +//최근 전송내역 | |
| 294 | +function resultLatestMsgList(){ | |
| 295 | + | |
| 296 | + | |
| 297 | + $.ajax({ | |
| 298 | + type:"POST", | |
| 299 | + url:"/web/mjon/msgdata/resultLatestMsgListAjax.do", | |
| 300 | + data:{}, | |
| 301 | + dataType:'json', | |
| 302 | + // timeout:(1000*30), | |
| 303 | + success:function(data){ | |
| 304 | + console.log('resultLatestMsgList : ',data.object); | |
| 305 | + | |
| 306 | + | |
| 307 | + // 가져온 데이터 배열 | |
| 308 | + let resultList = data.object; | |
| 309 | + let $latestMsgUl = $('#latestMsgUl'); // 기존 리스트 UL | |
| 310 | + | |
| 311 | + // 기존 내용을 비우기 | |
| 312 | + $latestMsgUl.empty(); | |
| 313 | + | |
| 314 | + // 데이터가 있는 경우 | |
| 315 | + if (resultList && resultList.length > 0) { | |
| 316 | + resultList.forEach(function(item, index) { | |
| 317 | + let listItem = | |
| 318 | + '<li id="latestLi">' + | |
| 319 | + '<input type="checkbox" id="addrChk_' + (index + 1) + '" name="latAddrChk" value="' + item.callTo + '">' + | |
| 320 | + '<label for="addrChk_' + (index + 1) + '" class="label">최근 전송내역</label>' + | |
| 321 | + '<p>' + item.callTo + '</p>' + | |
| 322 | + '<button type="button" id="latestAddrDel">' + | |
| 323 | + '<img src="/publish/images/popup/close3.png" alt="전화번호 삭제">' + | |
| 324 | + '</button>' + | |
| 325 | + '</li>'; | |
| 326 | + | |
| 327 | + $latestMsgUl.append(listItem); | |
| 328 | + }); | |
| 329 | + } else { | |
| 330 | + // 데이터가 없는 경우 | |
| 331 | + $latestMsgUl.append('<li><p>최근 발송 내역이 없습니다.</p></li>'); | |
| 332 | + } | |
| 333 | + }, | |
| 334 | + error:function(request , status, error){ | |
| 335 | + console.log(' error ?'); | |
| 336 | + console.log('request : ', request); | |
| 337 | + console.log('status : ', status); | |
| 338 | + } | |
| 339 | + }); | |
| 340 | +} | |
| 341 | + | |
| 342 | +//자주보내는 번호 | |
| 343 | +function resultBookMarkMsgList(){ | |
| 344 | + | |
| 345 | + $.ajax({ | |
| 346 | + type:"POST", | |
| 347 | + url:"/web/mjon/msgdata/resultBookMarkMsgList.do", | |
| 348 | + data:{}, | |
| 349 | + dataType:'json', | |
| 350 | + // timeout:(1000*30), | |
| 351 | + success:function(data){ | |
| 352 | + console.log('resultBookMarkMsgList : ',data.object); | |
| 353 | + | |
| 354 | + | |
| 355 | + // 가져온 데이터 배열 | |
| 356 | + let resultList = data.object; | |
| 357 | + let $bookMsgUl = $('#bookMsgUl'); // 기존 리스트 UL | |
| 358 | + | |
| 359 | + // 기존 내용을 비우기 | |
| 360 | + $bookMsgUl.empty(); | |
| 361 | + | |
| 362 | + // 데이터가 있는 경우 | |
| 363 | + if (resultList && resultList.length > 0) { | |
| 364 | + resultList.forEach(function(item, index) { | |
| 365 | +// console.log(item.addrPhoneNo + " : " + item.addrPhoneNo); | |
| 366 | + let listItem = | |
| 367 | + '<li id="bookMarkLi">' + | |
| 368 | + '<input type="checkbox" id="bokAddrChk_' + (index + 1) + '" name="bookAddrChk" value="' + item.addrPhoneNo + '">' + | |
| 369 | + '<label for="bokAddrChk_' + (index + 1) + '" class="label">최근 전송내역</label>' + | |
| 370 | +// '<p>' + item.addrPhoneNo + '</p>' + | |
| 371 | + '<p>' + item.addrPhoneNo + '</p>' + | |
| 372 | + '<button type="button" id="bookMarkAddrDel">' + | |
| 373 | + '<img src="/publish/images/popup/close3.png" alt="전화번호 삭제">' + | |
| 374 | + '</button>' + | |
| 375 | + '</li>'; | |
| 376 | + | |
| 377 | + $bookMsgUl.append(listItem); | |
| 378 | + }); | |
| 379 | + } else { | |
| 380 | + // 데이터가 없는 경우 | |
| 381 | + $bookMsgUl.append('<li><p>등록된 자주 보내는 번호 내역이 없습니다..</p></li>'); | |
| 382 | + } | |
| 383 | + }, | |
| 384 | + error:function(request , status, error){ | |
| 385 | + console.log(' error ?'); | |
| 386 | + console.log('request : ', request); | |
| 387 | + console.log('status : ', status); | |
| 388 | + } | |
| 389 | + }); | |
| 390 | +} | |
| 391 | + | |
| 392 | +function initFormChk(){ | |
| 393 | + console.log(':: initFormChk ::'); | |
| 394 | + | |
| 395 | + //채널ID 정보 미리보기에 표시해주기 | |
| 396 | + fnAgentCodeChg(); | |
| 397 | + | |
| 398 | + //템플릿 등록 이미지가 있는 경우 이미지 정보 표시해 주기 | |
| 399 | + var imgType = $('#imageType').val(); | |
| 400 | + | |
| 401 | + $("#img_file_0").prop('checked',true); | |
| 402 | + if(imgType){ | |
| 403 | + | |
| 404 | + if(imgType == 'I'){ | |
| 405 | + | |
| 406 | + $('#img_file_1').click(); | |
| 407 | + | |
| 408 | + }else if(imgType == 'W'){ | |
| 409 | + $('#img_file_2').click(); | |
| 410 | + } | |
| 411 | + | |
| 412 | + // 이미지명 입력 | |
| 413 | + $('#imgTitle').removeClass('file_none') | |
| 414 | + .text($('#imageFileName').val()); | |
| 415 | + | |
| 416 | + | |
| 417 | + $('#imgLink').val($('#imgLinkTemp').val()); // 이미지 link | |
| 418 | + $('#imgLink').prop('disabled', true); // 회색 처리 + 입력 불가 | |
| 419 | + // 이미지 URL은 해당 input에 있음. | |
| 420 | + | |
| 421 | + /* else{ | |
| 422 | + $(".img_add_info_wrap, .img_file_add_wrap").hide(); | |
| 423 | + } */ | |
| 424 | + | |
| 425 | + } | |
| 426 | + | |
| 427 | + var imgUrl = $('#templateImageUrl').val(); | |
| 428 | + | |
| 429 | + if(imgUrl != ''){ | |
| 430 | + $('.kakao_image').css("display", "block"); | |
| 431 | + $("#kakaoImg").attr("src", imgUrl); | |
| 432 | + $("#kakaoImg").attr("src", imgUrl); | |
| 433 | + | |
| 434 | + $('#sendFailImg').show(); | |
| 435 | + $('#sendFailImgSrc').attr('src', imgUrl); | |
| 436 | + | |
| 437 | + } | |
| 438 | + | |
| 439 | + //초기 템플릿 내용 글자수 처리해주기 | |
| 440 | + var tmpContents = $('#inputTemplateContent').val(); | |
| 441 | + setContentsLengForFriends(tmpContents); | |
| 442 | + | |
| 443 | + var reserYn = $("input[name=reserYn]:checked").val(); | |
| 444 | + if(reserYn == 'N'){ | |
| 445 | + | |
| 446 | + $('.rev_selected').hide(); | |
| 447 | + $('.send_rev .send_content').css('padding-bottom','108px'); | |
| 448 | + $('.send_btn .btnType:first-child').html('발송하기'); | |
| 449 | + $('#bizForm #reserveYn').val('N'); | |
| 450 | + | |
| 451 | + } | |
| 452 | + | |
| 453 | + | |
| 454 | + // 광고포함여부 체크 | |
| 455 | + // 기본 | |
| 456 | + // - adFlag = Y | |
| 457 | + // - ad_Y = Y | |
| 458 | + if($('#adFlag').val() == 'N'){ | |
| 459 | + $('#ad_Y').click(); | |
| 460 | + } | |
| 461 | + | |
| 462 | + | |
| 463 | +} | |
| 464 | + | |
| 465 | +//우측 미리보기 화면 채널 아이디 정보 변경해 주기 | |
| 466 | +function fnAgentCodeChg(){ | |
| 467 | + var yellowIdVal = $("#selectAgentCode option:checked").val(); | |
| 468 | + var yellowId = $("#selectAgentCode option:checked").text(); | |
| 469 | + var yellowIdAt = yellowId.replaceAll('@',''); | |
| 470 | + | |
| 471 | + // 체크 여부에 따라 채널ID 문구 설정 | |
| 472 | + | |
| 473 | + if(yellowIdVal != ''){ | |
| 474 | + | |
| 475 | + $('#spnYellowid').text(yellowId); // 미리보기화면 최상단 채널ID | |
| 476 | + | |
| 477 | + var cleanYellowId = yellowId.replace(/^@/, ""); // 앞에 @ 기호 제거 | |
| 478 | + if ($("#ad_Y").is(":checked")) { | |
| 479 | + | |
| 480 | + $("#adTxt").show(); // 내용 | |
| 481 | +// $("#adTxt p").html("(광고) " + cleanYellowId + ""); // 내용 | |
| 482 | + $("#adTxt p").html("(광고)"); // 내용 | |
| 483 | + | |
| 484 | +// $("#talkTitle").html("<span>(광고)</span> " + cleanYellowId); // 미리보기 화면 상단 | |
| 485 | + $("#talkTitle").html("<span>(광고)</span> "); // 미리보기 화면 상단 | |
| 486 | + } | |
| 487 | + | |
| 488 | + }else{ | |
| 489 | + | |
| 490 | + var channelId = "채널ID"; | |
| 491 | + | |
| 492 | + $('#spnYellowid').text(channelId); // 미리보기화면 최상단 채널ID | |
| 493 | + | |
| 494 | + if ($("#ad_Y").is(":checked")) { | |
| 495 | + | |
| 496 | + $("#adTxt").show(); // 내용 | |
| 497 | +// $("#adTxt p").html("(광고) " + channelId + ""); // 내용 | |
| 498 | + $("#adTxt p").html("(광고)"); // 내용 | |
| 499 | + | |
| 500 | +// $("#talkTitle").html("<span>(광고)</span> " + channelId); // 미리보기 화면 상단 | |
| 501 | + $("#talkTitle").html("<span>(광고)</span>"); // 미리보기 화면 상단 | |
| 502 | + } else { | |
| 503 | + $("#adTxt").hide(); // 내용 | |
| 504 | + $("#talkTitle").html(channelId); // 미리보기 화면 상단 | |
| 505 | + } | |
| 506 | + } | |
| 507 | +} | |
| 508 | + | |
| 509 | +//파일첨부 버튼 클릭시 파일 첨부 실행 | |
| 510 | +function upImgClick(){ | |
| 511 | + var selectChennelID = $("select[name='selectAgentCode']").val(); //채널ID 정보 | |
| 512 | + var imageType = $("input[name=img_file_add]:checked").val(); //이미지 종류 정보(일반, 와이드) | |
| 513 | + var title = $("#imgTitle").text(); | |
| 514 | + var link = $("#imgLink").val(); | |
| 515 | + | |
| 516 | + if(selectChennelID == ''){ | |
| 517 | + | |
| 518 | + $("#imgTitle").text(""); | |
| 519 | + $("#imgFile").val(""); | |
| 520 | + alert("채널ID를 선택해 주세요."); | |
| 521 | + return false; | |
| 522 | + | |
| 523 | + } | |
| 524 | + | |
| 525 | + if(imageType != ''){ | |
| 526 | + | |
| 527 | + bizForm.imageType.value = imageType; | |
| 528 | + | |
| 529 | + }else{ | |
| 530 | + | |
| 531 | + $("#imgTitle").text(""); | |
| 532 | + $("#imgFile").val(""); | |
| 533 | + alert("이미지 종류를 선택해 주세요."); | |
| 534 | + return false; | |
| 535 | + | |
| 536 | + } | |
| 537 | + /* | |
| 538 | + if(title == ''){ | |
| 539 | + | |
| 540 | + $("#imgTitle").text(""); | |
| 541 | + $("#imgFile").val(""); | |
| 542 | + alert("이미지 제목을 입력해 주세요."); | |
| 543 | + return false; | |
| 544 | + | |
| 545 | + } */ | |
| 546 | + | |
| 547 | + //이미지 선택시 링크 정보 및 url 패턴 검사 | |
| 548 | + console.log('link: ', link); | |
| 549 | + if (!link) { | |
| 550 | + if(!confirm("먼저 URL을 입력하지 않으면 이미지에 URL이 저장되지 않습니다. 계속하시겠습니까?")){ | |
| 551 | + return false; | |
| 552 | + } | |
| 553 | + }else if(!link.startsWith('http://') && !link.startsWith('https://')){ | |
| 554 | + alert('이동할 URL은 http:// 또는 https:// 형식으로 입력해주세요.'); | |
| 555 | + return false; | |
| 556 | + } | |
| 557 | + /* | |
| 558 | + else if(link.search("http://") == -1 && link.search("https://") == -1){ | |
| 559 | + | |
| 560 | + $("#imgTitle").text(""); | |
| 561 | + $("#imgFile").val(""); | |
| 562 | + alert("이미지 URL 주소에는 http:// 또는 https://를 포함하여 입력해야 합니다."); | |
| 563 | + return false; | |
| 564 | + } | |
| 565 | + */ | |
| 566 | + //첨부파일 선택 팝업 호출해주기 | |
| 567 | + $("#imgFile").click(); | |
| 568 | +} | |
| 569 | + | |
| 570 | +//첨부 이미지 정보 확인 처리 해주기(이미지 리사이징 전단계) | |
| 571 | +function imgResizeInfo(event){ | |
| 572 | + | |
| 573 | + var fileValue = $("#imgFile").val().split("\\"); | |
| 574 | + var fileName = fileValue[fileValue.length-1]; | |
| 575 | + | |
| 576 | + var fileExt = fileName.split('.').pop().toLowerCase(); | |
| 577 | + | |
| 578 | + if(fileExt.length > 0){ | |
| 579 | + if($.inArray(fileExt, ['jpg','jpeg','png']) == -1) { | |
| 580 | + alert('jpg, jpeg, png 파일만 업로드 할수 있습니다.'); | |
| 581 | + return false; | |
| 582 | + } | |
| 583 | + | |
| 584 | + $("#imgTitle").text(fileName); | |
| 585 | + } | |
| 586 | + | |
| 587 | + //알림톡 이미지 등록 요청하기 | |
| 588 | + getTemplateImagUrl(); | |
| 589 | +} | |
| 590 | + | |
| 591 | +//카카오 친구톡 이미지 등록 요청 API 호출해주기 | |
| 592 | +function getTemplateImagUrl(){ | |
| 593 | + | |
| 594 | + var bizForm = document.bizForm; | |
| 595 | + | |
| 596 | + var data = new FormData(bizForm); | |
| 597 | + var atchFileSts = true; //첨부파일 갯수 상태 값1 | |
| 598 | + | |
| 599 | + data.append("file0", $('#imgFile').prop('files')[0]); | |
| 600 | + | |
| 601 | + var fileValue = $("#imgFile").val().split("\\"); | |
| 602 | + var fileName = fileValue[fileValue.length-1]; | |
| 603 | + | |
| 604 | + var fileExt = fileName.split('.').pop().toLowerCase(); | |
| 605 | + | |
| 606 | + if($.inArray(fileExt, ['jpg','jpeg', 'png']) == -1) { | |
| 607 | + | |
| 608 | + alert('jpg, jpeg 파일만 업로드 할수 있습니다.'); | |
| 609 | + return false; | |
| 610 | + | |
| 611 | + } | |
| 612 | + | |
| 613 | + | |
| 614 | +// if(fileExt == "jpg" || fileExt == "jpeg" || fileExt == "png"){ | |
| 615 | + console.log('fileExt : ', fileExt); | |
| 616 | + if(fileExt != null && fileExt !== "jpg" && fileExt !== "jpeg" && fileExt !== "png"){ | |
| 617 | + alert("jpg, jpeg, png 파일만 업로드 할 수 있습니다."); | |
| 618 | + return; | |
| 619 | + } | |
| 620 | + | |
| 621 | + | |
| 622 | + var url = url = "/web/mjon/kakao/template/sendKakaoFriendsTemplateImageUploadAjax_advc.do"; | |
| 623 | +// var url = url = "/web/mjon/kakao/template/sendKakaoFriendsTemplateImageUploadAjax.do"; | |
| 624 | + | |
| 625 | + $.ajax({ | |
| 626 | + type : 'POST' | |
| 627 | + , enctype : 'multipart/form-data' | |
| 628 | + , url : url | |
| 629 | + , data : data | |
| 630 | + , dataType:'json' | |
| 631 | + , async:true | |
| 632 | + , processData: false | |
| 633 | + , contentType: false | |
| 634 | + , cache : false | |
| 635 | + , success : function(returnData){ | |
| 636 | + console.log('returnData : ', returnData); | |
| 637 | + | |
| 638 | + | |
| 639 | + | |
| 640 | + if (returnData.status === 'OK' || returnData.status === 200) { | |
| 641 | + alert(returnData.message); | |
| 642 | + | |
| 643 | + $('#imgTitle').removeClass('file_none') | |
| 644 | + .text(fileName); | |
| 645 | + $('#imgLinkTemp').val($('#imgLink').val()); // 회색 처리 + 입력 불가 | |
| 646 | + $('#imgLink').prop('disabled', true); // 회색 처리 + 입력 불가 | |
| 647 | + | |
| 648 | + | |
| 649 | + $("#imageFileName").val(fileName); | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + // imgUrl은 object에 포함된 경우만 처리 | |
| 654 | + if (returnData.object) { | |
| 655 | + $("#templateImageUrl").val(returnData.object.imgUrl); | |
| 656 | + $(".kakao_image").css("display", "block"); | |
| 657 | + $("#kakaoImg").attr("src", returnData.object.imgUrl); | |
| 658 | + | |
| 659 | + | |
| 660 | + // 대체문자 이미지 | |
| 661 | + $("#atchFileId").val(returnData.object.atchFileId); | |
| 662 | + // 대체문자 | |
| 663 | + $('#sendFailImg').show(); | |
| 664 | + $('#sendFailImgSrc').attr('src', returnData.object.imgUrl); | |
| 665 | + // 대체문자 포토형으로 수정 | |
| 666 | +// $('.put_left').removeClass("short"); //내용 입력 박스 클래스 삭제 | |
| 667 | +// $('.put_left').removeClass("long"); //내용 입력 박스 클래스 삭제 | |
| 668 | +// $('.put_left').addClass('photo'); | |
| 669 | + setSendFailTemplate('P') | |
| 670 | + } | |
| 671 | + | |
| 672 | + } else { | |
| 673 | + alert(returnData.message || "이미지 등록 중 오류가 발생하였습니다."); | |
| 674 | + | |
| 675 | + // 첨부파일 정보 초기화 | |
| 676 | + $("#imgFile").val(""); | |
| 677 | + | |
| 678 | + $('#imgTitle').addClass('file_none') | |
| 679 | + .text("이미지 없음"); | |
| 680 | + return false; | |
| 681 | + } | |
| 682 | + }, | |
| 683 | + beforeSend : function(xmlHttpRequest) { | |
| 684 | + //로딩창 show | |
| 685 | + $('.loading_layer').addClass('active'); | |
| 686 | + }, | |
| 687 | + complete : function(xhr, textStatus) { | |
| 688 | + //로딩창 hide | |
| 689 | + $('.loading_layer').removeClass('active'); | |
| 690 | + }, | |
| 691 | + error : function(request , status, error){ | |
| 692 | + alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error); | |
| 693 | + } | |
| 694 | + }); | |
| 695 | + | |
| 696 | + //첨부파일 이름 및 데이터 지워주기 - 완료 후 팝업이 자동으로 닫힘. | |
| 697 | + $("#imgFile").val(""); | |
| 698 | +} | |
| 699 | + | |
| 700 | +function setSendFailTemplate(p_type){ | |
| 701 | + if(p_type == 'P'){ | |
| 702 | + // 대체문자 포토형으로 수정 | |
| 703 | + $('.put_left').removeClass("short"); //내용 입력 박스 클래스 삭제 | |
| 704 | + $('.put_left').removeClass("long"); //내용 입력 박스 클래스 삭제 | |
| 705 | + $('.put_left').addClass('photo'); | |
| 706 | + | |
| 707 | + $('.msg_com').removeClass("msg_short"); //단문 클래스 삭제하고 | |
| 708 | + $('.msg_com').removeClass("msg_long"); //단문 클래스 삭제하고 | |
| 709 | + $('.msg_com').addClass("msg_photo"); //단문 클래스 삭제하고 | |
| 710 | + | |
| 711 | + | |
| 712 | + $('#limitLeng').html("2000"); | |
| 713 | + $('.msg_com').html("그림"); | |
| 714 | + | |
| 715 | + } | |
| 716 | + | |
| 717 | +} | |
| 718 | + | |
| 719 | +function fnImageDel(){ | |
| 720 | + | |
| 721 | + if(confirm("등록된 이미지를 삭제하시겠습니까?")){ | |
| 722 | + imageInit(); | |
| 723 | + } | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + /* var imageUrl = $("#templateImageUrl").val(); | |
| 728 | + var bizForm = document.bizForm; | |
| 729 | + | |
| 730 | + bizForm.senderKey.value = $("select[name='selectAgentCode']").val(); // 선택 채널ID | |
| 731 | + | |
| 732 | + if(imageUrl == ''){ | |
| 733 | + | |
| 734 | + alert("등록된 이미지가 없습니다."); | |
| 735 | + return false; | |
| 736 | + | |
| 737 | + } | |
| 738 | + | |
| 739 | + var tmpFriendId = $("#tmpFriendId").val(); | |
| 740 | + console.log(' + tmpFriendId :: ', tmpFriendId); | |
| 741 | + if(tmpFriendId != ''){ | |
| 742 | + | |
| 743 | + if(!confirm("불러온 템플릿의 이미지도 함께 삭제 됩니다. 계속하시겠습니까?")){ | |
| 744 | + return false; | |
| 745 | + } | |
| 746 | + | |
| 747 | + } | |
| 748 | + | |
| 749 | + var data = new FormData(bizForm); | |
| 750 | + | |
| 751 | + if(confirm("등록된 이미지를 삭제하시겠습니까?")){ | |
| 752 | + | |
| 753 | + $.ajax({ | |
| 754 | + type: "POST" | |
| 755 | + , url: "/web/mjon/kakao/template/deleteKakaoFriendsImageDataAjax.do" | |
| 756 | + , data: data | |
| 757 | + , dataType: 'json' | |
| 758 | + , async: false | |
| 759 | + , processData: false | |
| 760 | + , contentType: false | |
| 761 | + , cache: false | |
| 762 | + , success: function (returnData, status) { | |
| 763 | + | |
| 764 | + var result = returnData.result; | |
| 765 | + var code = returnData.code; | |
| 766 | + var msg = returnData.msg; | |
| 767 | + | |
| 768 | + if(result == "notLogin") {//차단 발신번호인 경우 등록 불가 | |
| 769 | + alert("로그인후 진행이 가능합니다."); | |
| 770 | + }else if(returnData.result == "success") { | |
| 771 | + | |
| 772 | + if(code == "200"){ | |
| 773 | + alert("등록된 이미지가 삭제되었습니다."); | |
| 774 | + $("#imgLink").val(""); | |
| 775 | + $("#imgFile").val(""); | |
| 776 | + | |
| 777 | + $('#imgTitle').addClass('file_none') | |
| 778 | + .text("이미지 없음"); | |
| 779 | + | |
| 780 | + $('#imgLink').prop('disabled', false); // 회색 처리 제거 + 입력 불가 제거 | |
| 781 | + | |
| 782 | + $("#templateImageUrl").val(""); | |
| 783 | + $('.kakao_image').css("display", "none"); | |
| 784 | + $("#kakaoImg").attr("src", ""); | |
| 785 | + $("#imageFileName").val(""); //이미지 파일명 삭제 | |
| 786 | + $("#img_file_0").click(); //이미지 첨부 안함 선택 | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + return false; | |
| 794 | + | |
| 795 | + }else{ | |
| 796 | + alert(msg); | |
| 797 | + return false; | |
| 798 | + } | |
| 799 | + }else{ | |
| 800 | + alert("이미지 삭제에 오류가 발생하였습니다."); | |
| 801 | + return false; | |
| 802 | + } | |
| 803 | + } | |
| 804 | + ,error: function (e) { | |
| 805 | + console.log("ERROR : ", e); | |
| 806 | + alert("이미지 삭제에 오류가 발생하였습니다."); | |
| 807 | + } | |
| 808 | + }); | |
| 809 | + } */ | |
| 810 | +} | |
| 811 | + | |
| 812 | +//알림톡 내용 초기화 해주기 | |
| 813 | +function fnContentsReset(){ | |
| 814 | + $("#inputTemplateContent").val(""); | |
| 815 | + $(".template_text").text("내용 미리보기"); | |
| 816 | + $('.nowChar').text("0 /"); | |
| 817 | +} | |
| 818 | + | |
| 819 | +//저장 템플릿 불러오기 선택시 | |
| 820 | +function myTemplateSelect(ftId){ | |
| 821 | + | |
| 822 | + var form = document.templateForm; | |
| 823 | + | |
| 824 | + form.friendId.value = ftId; | |
| 825 | + | |
| 826 | + form.action="/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do"; | |
| 827 | + form.submit(); | |
| 828 | + | |
| 829 | + | |
| 830 | +} | |
| 831 | + | |
| 832 | +/* | |
| 833 | +function advTextChange(adFlagVal){ | |
| 834 | + console.log('adFlagVal : ', adFlagVal); | |
| 835 | + if(typeof adFlagVal == "undefined" || adFlagVal == null || adFlagVal == ""){ | |
| 836 | + | |
| 837 | + $("#ad_Y").prop('checked',true); | |
| 838 | + | |
| 839 | + }else if(adFlagVal == 'N'){//광고 표시 숨김처리 | |
| 840 | + | |
| 841 | + $('.adFlag').hide(); | |
| 842 | + $('.kakao_block_text').hide(); | |
| 843 | + $('.adFlagAfter').hide(); | |
| 844 | + | |
| 845 | + }else{ | |
| 846 | + $('.adFlag').show(); | |
| 847 | + $('.kakao_block_text').show(); | |
| 848 | + $('.adFlagAfter').show(); | |
| 849 | + } | |
| 850 | + | |
| 851 | +} | |
| 852 | + */ | |
| 853 | + | |
| 854 | +//친구톡 내용 템플릿으로 저장하기 - 내용 저장하기 | |
| 855 | +function myTemplateSave(){ | |
| 856 | + | |
| 857 | + var selectAgentCode = $("select[name='selectAgentCode']").val(); // 선택 채널ID | |
| 858 | + var yellowId = $("select[name='selectAgentCode'] option:selected").text().replaceAll('@',''); // 선택 채널명 | |
| 859 | + var inputTemplateName = $("#inputTemplateName").val(); // 입력 템플릿 이름 | |
| 860 | + var imageType = $("input[name=img_file_add]:checked").val(); // 첨부 이미지 종류(없음, 일반, 와이드 이미지) | |
| 861 | + var imageTitle = $("#imgTitle").text(); //첨부이미지 제목 | |
| 862 | + var imageLink = $("#imgLink").val(); //첨부이미지 클릭시 이동 링크 주소 | |
| 863 | + var inputTemplateContent = $("#inputTemplateContent").val(); // 템플릿 내용 | |
| 864 | + | |
| 865 | + var inputTemplateImageName = $("#templateImageName").val(); // 템플릿 이미지 파일명 | |
| 866 | + var inputTemplateImageUrl = $("#templateImageUrl").val(); // 템플릿 이미지 링크 | |
| 867 | + | |
| 868 | + // 공통 유효성 검사 조회 | |
| 869 | + if(selectAgentCode == null || selectAgentCode == ""){ | |
| 870 | + alert("채널ID를 선택해 주세요"); | |
| 871 | + return; | |
| 872 | + }; | |
| 873 | + | |
| 874 | + if(inputTemplateName == null || inputTemplateName == ""){ | |
| 875 | + alert("템플릿 명을 입력해 주세요"); | |
| 876 | + $("#inputTemplateName").focus(); | |
| 877 | + return; | |
| 878 | + }; | |
| 879 | + | |
| 880 | + if(imageType == 'I' || imageType == 'W'){ | |
| 881 | + | |
| 882 | + if(imageTitle == ''){ | |
| 883 | + | |
| 884 | + alert("이미지 제목을 입력해 주세요."); | |
| 885 | + return false; | |
| 886 | + | |
| 887 | + } | |
| 888 | + | |
| 889 | + /* if(imageLink == ''){ | |
| 890 | + | |
| 891 | + alert("이미지 클릭시 이동할 URL을 입력해 주세요."); | |
| 892 | + return false; | |
| 893 | + | |
| 894 | + }else{ | |
| 895 | + | |
| 896 | + if(imageLink.search("http://") == -1 && imageLink.search("https://") == -1){ | |
| 897 | + | |
| 898 | + alert("이미지 URL 주소에는 http:// 또는 https://를 포함하여 입력해야 합니다."); | |
| 899 | + return false; | |
| 900 | + | |
| 901 | + } | |
| 902 | + | |
| 903 | + } */ | |
| 904 | + | |
| 905 | + if(inputTemplateImageUrl == ''){ | |
| 906 | + | |
| 907 | + alert("이미지를 선택해 주세요."); | |
| 908 | + return false; | |
| 909 | + | |
| 910 | + } | |
| 911 | + | |
| 912 | + } | |
| 913 | + | |
| 914 | + | |
| 915 | + if(inputTemplateContent == null || inputTemplateContent == ""){ | |
| 916 | + alert("템플릿 내용을 입력해 주세요."); | |
| 917 | + return; | |
| 918 | + }; | |
| 919 | + | |
| 920 | + var bizForm = document.bizForm; | |
| 921 | + bizForm.senderKey.value = selectAgentCode; | |
| 922 | + //bizForm.yellowId.value = yellowId; | |
| 923 | + bizForm.templateName.value = inputTemplateName; | |
| 924 | + //bizForm.imageType.value = imageType; | |
| 925 | + | |
| 926 | + bizForm.imgLink.value = imageLink; | |
| 927 | + console.log('imageLink : ', imageLink); | |
| 928 | + console.log('bizForm.imgLink.value : ', bizForm.imgLink.value); | |
| 929 | + | |
| 930 | + bizForm.templateContent.value = inputTemplateContent; | |
| 931 | + | |
| 932 | + var data = new FormData(bizForm); | |
| 933 | + data.append("imgLink", imageLink); | |
| 934 | + data.forEach((value, key) => { | |
| 935 | + console.log(key, value); | |
| 936 | + }); | |
| 937 | + | |
| 938 | + if(confirm("템플릿을 저장하시겠습니까?")){ | |
| 939 | + | |
| 940 | + $.ajax({ | |
| 941 | + type: "POST" | |
| 942 | + , url: "/web/mjon/kakao/template/insertKakaoFriendsTemplateDataAjax.do" | |
| 943 | + , data: data | |
| 944 | + , dataType: 'json' | |
| 945 | + , async: false | |
| 946 | + , processData: false | |
| 947 | + , contentType: false | |
| 948 | + , cache: false | |
| 949 | + , success: function (returnData, status) { | |
| 950 | + | |
| 951 | + var result = returnData.result; | |
| 952 | + | |
| 953 | + if(result == "loginFail") {//차단 발신번호인 경우 등록 불가 | |
| 954 | + alert("로그인후 진행이 가능합니다."); | |
| 955 | + }else if(returnData.result == "success") { | |
| 956 | + alert("템플릿 저장이 완료되었습니다."); | |
| 957 | + return false; | |
| 958 | + }else{ | |
| 959 | + | |
| 960 | + alert("템플릿 저장에 오류가 발생하였습니다."); | |
| 961 | + return false; | |
| 962 | + | |
| 963 | + } | |
| 964 | + } | |
| 965 | + ,error: function (e) { | |
| 966 | + console.log("ERROR : ", e); | |
| 967 | + alert("템플릿 저장에 오류가 발생하였습니다."); | |
| 968 | + } | |
| 969 | + }); | |
| 970 | + | |
| 971 | + } | |
| 972 | + | |
| 973 | +} | |
| 974 | + | |
| 975 | +//주소록 불러오기 버튼 클릭시 | |
| 976 | +$('.popupAddr').click(function(){ | |
| 977 | + | |
| 978 | + if(loginVO == "" || loginVO == null){ | |
| 979 | + alert("주소록 불러오기 서비스는 로그인 후 이용 가능합니다."); | |
| 980 | + location.href="<c:url value='/web/user/login/login.do'/>"; | |
| 981 | + return false; | |
| 982 | + } | |
| 983 | + | |
| 984 | + $("#addrGroupLoad").load("/web/mjon/msgdata/selectAddrGroupListAjax.do", "" ,function(response, status, xhr){ | |
| 985 | + //리스트 스크롤 처리해주기 | |
| 986 | + $(".adr_pop_list").mCustomScrollbar({ | |
| 987 | + axis: 'y', | |
| 988 | + scrollbarPosition: "outside", | |
| 989 | + theme: "dark", | |
| 990 | + autoHideScrollbar: false | |
| 991 | + }); | |
| 992 | + }); | |
| 993 | + | |
| 994 | +}); | |
| 995 | + | |
| 996 | +function fnEmptyId(){ | |
| 997 | + | |
| 998 | + alert("로그인 후 이용이 가능합니다."); | |
| 999 | + return false; | |
| 1000 | + | |
| 1001 | +} | |
| 1002 | + | |
| 1003 | +//분할전송 건수 데이터 체크 | |
| 1004 | +function checkNumber(event) { | |
| 1005 | + var divideCnt = $('#frmDivideCnt').val(); | |
| 1006 | + if(!(event.key >= 0 && event.key <= 9)) { | |
| 1007 | + return false; | |
| 1008 | + } | |
| 1009 | + | |
| 1010 | + var totCnt = divideCnt + "" + event.key; | |
| 1011 | + if(Number(totCnt) > 5000){ | |
| 1012 | + alert("분할전송 건수는 5,000건을 초과할 수 없습니다."); | |
| 1013 | + $('#frmDivideCnt').val("20"); | |
| 1014 | + return false; | |
| 1015 | + } | |
| 1016 | + | |
| 1017 | + return true; | |
| 1018 | +} | |
| 1019 | + | |
| 1020 | +function fnSelectMinChk(){ | |
| 1021 | + | |
| 1022 | + var resHour = $("#msgResHour option:selected").val(); | |
| 1023 | + var resMin = $("#msgResMin option:selected").val(); | |
| 1024 | + | |
| 1025 | + if(resHour == '20'){ | |
| 1026 | + | |
| 1027 | + if(resMin >= 50 && resMin <= 59){ | |
| 1028 | + | |
| 1029 | + alert("친구톡은 20시 50분부터 익일 08시까지 발송이 제한됩니다."); | |
| 1030 | + $("#msgResMin").val("40").prop("selected", true); | |
| 1031 | + | |
| 1032 | + } | |
| 1033 | + | |
| 1034 | + } | |
| 1035 | + | |
| 1036 | +} | |
| 1037 | + | |
| 1038 | + | |
| 1039 | +//친구톡 발송 금지 시간 처리 | |
| 1040 | +function fn_noTimeSend(){ | |
| 1041 | + | |
| 1042 | + var id = '${loginVO.id}'; | |
| 1043 | + | |
| 1044 | + if(id == ""){ | |
| 1045 | + | |
| 1046 | + alert("로그인 후 이용이 가능합니다."); | |
| 1047 | + return false; | |
| 1048 | + | |
| 1049 | + } | |
| 1050 | + | |
| 1051 | + alert("친구톡은 20:50 ~ 익일 08:00까지 발송할 수 없습니다."); | |
| 1052 | + return false; | |
| 1053 | + | |
| 1054 | +} | |
| 1055 | + | |
| 1056 | +//친구톡 데이터 전송 처리 | |
| 1057 | +function fn_sendMsgData(){ | |
| 1058 | + | |
| 1059 | + // 유효성 검사 실패 시 저장 동작 중단 | |
| 1060 | +/* if (!validateLinks()) { | |
| 1061 | + return false; | |
| 1062 | + } | |
| 1063 | + */ | |
| 1064 | + | |
| 1065 | + var senderKey = $("#selectAgentCode option:checked").val(); | |
| 1066 | + | |
| 1067 | + if(senderKey == ''){ | |
| 1068 | + | |
| 1069 | + alert("채널ID를 선택해 주세요."); | |
| 1070 | + return false; | |
| 1071 | + | |
| 1072 | + }else{ | |
| 1073 | + | |
| 1074 | + $("#inputSenderKey").val(senderKey); | |
| 1075 | + | |
| 1076 | + } | |
| 1077 | + | |
| 1078 | + //이미지 첨부 체크 | |
| 1079 | + var imgChk = $("input[name=img_file_add]:checked").val(); | |
| 1080 | + if(!getFtImageType(imgChk)){ | |
| 1081 | + return false; | |
| 1082 | + } | |
| 1083 | + | |
| 1084 | + //템플릿 버튼 갯수 체크 | |
| 1085 | + var buttonCnt = $(".btn_kakao_type").length; | |
| 1086 | + | |
| 1087 | + if(buttonCnt > 0){ | |
| 1088 | + //json 파일 필요 유무 셋팅 | |
| 1089 | + $("#bizJsonYn").val("Y"); | |
| 1090 | + } | |
| 1091 | + | |
| 1092 | + //친구톡 내용 체크 | |
| 1093 | + var tmpContents = $('#inputTemplateContent').val(); | |
| 1094 | + | |
| 1095 | + if(tmpContents == ""){ | |
| 1096 | + | |
| 1097 | + alert("친구톡 내용을 입력해 주세요."); | |
| 1098 | + return false; | |
| 1099 | + | |
| 1100 | + } | |
| 1101 | + | |
| 1102 | + var rtnStr = strChinJpnCheck(tmpContents); | |
| 1103 | + | |
| 1104 | + //문자내용에 이모지가 있는지 체크 | |
| 1105 | + if(!emojiCheck(tmpContents)) return false; | |
| 1106 | + | |
| 1107 | + if(rtnStr.length > 0){ | |
| 1108 | + | |
| 1109 | + alert("입력하신 문구 중 \" " + rtnStr + " \" 는 일부 휴대폰에서 표기되지 않을 수 있습니다."); | |
| 1110 | + | |
| 1111 | + } | |
| 1112 | + | |
| 1113 | + | |
| 1114 | + | |
| 1115 | + var selectedData = tableL.getRows(); | |
| 1116 | + | |
| 1117 | + if(selectedData == "" || selectedData == null){ | |
| 1118 | + | |
| 1119 | + alert("받는사람 주소를 한 건 이상 입력해주세요."); | |
| 1120 | + return false; | |
| 1121 | + | |
| 1122 | + } | |
| 1123 | + | |
| 1124 | + //예약문자 시간 체크 | |
| 1125 | + var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인 | |
| 1126 | + | |
| 1127 | + if(reserYn == 'Y'){ | |
| 1128 | + | |
| 1129 | + var date = $(".resDate").val();//form.msgResDate.value; | |
| 1130 | + var hour = $("#msgResHour option:selected").val(); | |
| 1131 | + var min = $("#msgResMin option:selected").val(); | |
| 1132 | + | |
| 1133 | + if(date == ""){ | |
| 1134 | + | |
| 1135 | + alert("예약전송 날짜를 선택해 주세요."); | |
| 1136 | + return false; | |
| 1137 | + | |
| 1138 | + }else{ | |
| 1139 | + | |
| 1140 | + var now = new Date(); | |
| 1141 | + var reqDate = date + " " + hour + ":" + min + ":00"; | |
| 1142 | + var gapDate = getGapDayTime(date, hour, min); | |
| 1143 | + | |
| 1144 | + if(gapDate < 0){ // 음수이면 이전날짜, 크면 이후 날짜. | |
| 1145 | + alert("예약 날짜는 현재 시간 이후의 날짜 및 시간을 선택해 주세요."); | |
| 1146 | + return false; | |
| 1147 | + }else{ | |
| 1148 | + $("#reqDate").val(reqDate); //예약일자 파라미터 저장 | |
| 1149 | + } | |
| 1150 | + } | |
| 1151 | + | |
| 1152 | + }else{ | |
| 1153 | + | |
| 1154 | + $("#reqDate").val(""); //예약일자 파라미터 저장 | |
| 1155 | + | |
| 1156 | + } | |
| 1157 | + | |
| 1158 | + | |
| 1159 | + //대체문자 선택 및 내용 체크 | |
| 1160 | + var subMsgSendYn = "N"; | |
| 1161 | + if($("#send_fail_check").is(":checked")){ | |
| 1162 | + subMsgSendYn = 'Y' | |
| 1163 | + $('#callFrom').val($('#callFromList').val()) | |
| 1164 | + } | |
| 1165 | + $("#subMsgSendYn").val(subMsgSendYn); | |
| 1166 | + if(subMsgSendYn == 'Y'){ | |
| 1167 | + $("#subMsgTxt").val( $('#smsTxtArea').val()); | |
| 1168 | + } | |
| 1169 | + | |
| 1170 | + | |
| 1171 | + | |
| 1172 | + //템플릿 내용 입력 | |
| 1173 | + $("#templateContent").val(tmpContents); | |
| 1174 | + | |
| 1175 | + //광고포함 여부 | |
| 1176 | +/* var adFlag = $("input[name=adFlag]:checked").val(); | |
| 1177 | + $("#adFlag").val(adFlag); */ | |
| 1178 | + | |
| 1179 | + | |
| 1180 | + if (!validateButtons()) { | |
| 1181 | + return; | |
| 1182 | + } | |
| 1183 | + | |
| 1184 | + | |
| 1185 | + | |
| 1186 | + if(!confirm("친구톡을 발송하시겠습니까?")){ | |
| 1187 | + return false; | |
| 1188 | + } | |
| 1189 | + | |
| 1190 | + | |
| 1191 | + | |
| 1192 | + // 타블레이터 호출 | |
| 1193 | + var $selectedData = tableL.getData(); // 데이터 가져오기 | |
| 1194 | + | |
| 1195 | + var data = $('#bizForm'); | |
| 1196 | + var formDataArray = data.serializeArray(); | |
| 1197 | + | |
| 1198 | + // 배열을 객체로 변환 | |
| 1199 | + var formData = {}; | |
| 1200 | + $.each(formDataArray, function(index, field) { | |
| 1201 | + formData[field.name] = field.value; | |
| 1202 | + }); | |
| 1203 | + | |
| 1204 | + // 2. buttonVOList 수동으로 수집 | |
| 1205 | + var buttonList = []; | |
| 1206 | + $('input[name^="buttonVOList"]').each(function() { | |
| 1207 | + let nameAttr = $(this).attr('name'); | |
| 1208 | + let match = nameAttr.match(/buttonVOList\[(\d+)\]\.(\w+)/); | |
| 1209 | + if (match) { | |
| 1210 | + let index = parseInt(match[1]); | |
| 1211 | + let key = match[2]; | |
| 1212 | + let value = $(this).val(); | |
| 1213 | + | |
| 1214 | + if (!buttonList[index]) buttonList[index] = {}; | |
| 1215 | + buttonList[index][key] = value; | |
| 1216 | + } | |
| 1217 | + }); | |
| 1218 | + | |
| 1219 | + // 3. formData에 배열로 추가 | |
| 1220 | + formData["buttonVOList"] = buttonList; | |
| 1221 | + // 회색 처리 + 입력 불가 | |
| 1222 | + | |
| 1223 | + // 4. 기존의 buttonVOList[0].xxx 형태 제거 | |
| 1224 | + Object.keys(formData).forEach(function(key) { | |
| 1225 | + if (/^buttonVOList\[\d+\]\./.test(key)) { | |
| 1226 | + delete formData[key]; | |
| 1227 | + } | |
| 1228 | + }); | |
| 1229 | + | |
| 1230 | + // VO에 정의되어있지 않는 필요없는 값은 제거 | |
| 1231 | + ["img_file_add", "userMoney", "callToList"].forEach(function(key) { | |
| 1232 | + delete formData[key]; | |
| 1233 | + }); | |
| 1234 | + | |
| 1235 | + formData["imgLink"] = $('#imgLinkTemp').val(); | |
| 1236 | + | |
| 1237 | + // 빈 값 제거 | |
| 1238 | + removeEmptyValues(formData); | |
| 1239 | + // 선택된 데이터 추가 | |
| 1240 | + formData["mjonBTSendVOList"] = $selectedData; | |
| 1241 | + // JSON 데이터 확인 | |
| 1242 | + console.log("최종 formData:", JSON.stringify(formData)); | |
| 1243 | + | |
| 1244 | + | |
| 1245 | + // 프로그래스파 시간을 위한 계산 | |
| 1246 | + var estimtedTime = calculateEstimatedTime(tableL.getRows().length); | |
| 1247 | + | |
| 1248 | + | |
| 1249 | + $.ajax({ | |
| 1250 | + type: "POST" | |
| 1251 | +// , url: "/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax_advc.do" | |
| 1252 | + , url: "/web/mjon/kakao/brandMsg/kakaoBrandMsgSendAjax_advc.do" | |
| 1253 | + , data: JSON.stringify(formData) | |
| 1254 | + , contentType: 'application/json' | |
| 1255 | + , dataType: 'json' | |
| 1256 | + , success: function (data) { | |
| 1257 | + console.log('data : ', data); | |
| 1258 | + | |
| 1259 | + var status = data.status; | |
| 1260 | + if("OK" == status){ | |
| 1261 | + var resultSts = data.object.resultSts; | |
| 1262 | + var reserYn = data.object.reserYn; | |
| 1263 | + var resText = (reserYn === 'Y') ? '예약' : '발송'; | |
| 1264 | + | |
| 1265 | + $('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'}); | |
| 1266 | + $('.pop_msg_success .msg_text').html(resText+" 성공 : <strong>"+ resultSts + "</strong>건의<br>친구톡이 " + resText + " 되었습니다."); | |
| 1267 | + | |
| 1268 | + }else if("UNAUTHORIZED" == status){ | |
| 1269 | + alert(data.message); | |
| 1270 | + location.reload(); | |
| 1271 | + }else{ | |
| 1272 | + alert(data.message); | |
| 1273 | + return false; | |
| 1274 | + } | |
| 1275 | + | |
| 1276 | + /* | |
| 1277 | + if(status == 'success'){ | |
| 1278 | + if("loginFail" == returnData.result){ | |
| 1279 | + | |
| 1280 | + alert(returnData.message); | |
| 1281 | + return false; | |
| 1282 | + | |
| 1283 | + }else if('fail' == returnData.result){ | |
| 1284 | + | |
| 1285 | + alert(returnData.message); | |
| 1286 | + return false; | |
| 1287 | + | |
| 1288 | + }else if('authFail' == returnData.result){ | |
| 1289 | + | |
| 1290 | + alert(returnData.message); | |
| 1291 | + location.reload(); | |
| 1292 | + | |
| 1293 | + } else if(status == 'success'){ | |
| 1294 | + | |
| 1295 | + var kakaoSendCnt = returnData.resultSts; | |
| 1296 | + | |
| 1297 | + $('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'}); | |
| 1298 | + | |
| 1299 | + //예약발송 건의 경우 결과 팝업 문구 변경 | |
| 1300 | + if(reserYn == 'Y'){ | |
| 1301 | + $('.pop_msg_success .msg_text').html("예약 성공 : <strong>"+ kakaoSendCnt + "</strong>건의<br>친구톡이 예약 되었습니다."); | |
| 1302 | + }else{ | |
| 1303 | + $('.pop_msg_success .msg_text').html("발송 성공 : <strong>"+ kakaoSendCnt + "</strong>건의<br>친구톡이 발송 되었습니다."); | |
| 1304 | + } | |
| 1305 | + | |
| 1306 | + $('.mask').addClass('on'); | |
| 1307 | + } | |
| 1308 | + } */ | |
| 1309 | + } | |
| 1310 | + ,beforeSend : function(xmlHttpRequest) { | |
| 1311 | + //로딩창 show | |
| 1312 | +// $('.loading_layer').addClass('active'); | |
| 1313 | + progressStart(estimtedTime); | |
| 1314 | + } | |
| 1315 | + ,complete : function(xhr, textStatus) { | |
| 1316 | + //로딩창 hide | |
| 1317 | +// $('.loading_layer').removeClass('active'); | |
| 1318 | + progressComplete(); | |
| 1319 | + } | |
| 1320 | + ,error: function (e) { | |
| 1321 | + console.log("ERROR : ", e); | |
| 1322 | + alert("카카오 브랜드메시지 전송에 실패하였습니다."); | |
| 1323 | + } | |
| 1324 | + }); | |
| 1325 | + | |
| 1326 | +} | |
| 1327 | + | |
| 1328 | +//프로그레스바 | |
| 1329 | +var start, change; | |
| 1330 | +var progressInterval = null; // 전역 변수로 타이머 ID 관리 | |
| 1331 | +function progressStart(time) { | |
| 1332 | + // 기존 타이머 정지 및 초기화 | |
| 1333 | + if (progressInterval !== null) { | |
| 1334 | + clearInterval(progressInterval); // 이전 타이머 정지 | |
| 1335 | + progressInterval = null; // 타이머 ID 초기화 | |
| 1336 | + } | |
| 1337 | + resetProgressBar(); // 프로그레스바 초기화 | |
| 1338 | + | |
| 1339 | + // 프로그레스바 보이기 | |
| 1340 | + $(".progress_bar_wrap").css("display", "flex"); | |
| 1341 | + | |
| 1342 | + // 프로그레스바 요소 가져오기 | |
| 1343 | + var timeText = document.querySelector(".time_text"); | |
| 1344 | + var bar = document.querySelector(".change_bar"); | |
| 1345 | + | |
| 1346 | + // 초기 상태 설정 | |
| 1347 | + var width = 1; | |
| 1348 | + var totalTime = time * 1000; // 총 실행 시간 (밀리초) | |
| 1349 | + var cmpWid = totalTime / 100; // width 증가 간격 (밀리초) | |
| 1350 | + | |
| 1351 | + // 새 타이머 시작 | |
| 1352 | + progressInterval = setInterval(changeWidth, cmpWid); | |
| 1353 | + | |
| 1354 | + function changeWidth() { | |
| 1355 | + if (width >= 100) { | |
| 1356 | + // 프로그레스바 100% 도달 | |
| 1357 | + clearInterval(progressInterval); // 타이머 종료 | |
| 1358 | + progressInterval = null; // 타이머 ID 초기화 | |
| 1359 | + | |
| 1360 | + timeText.innerHTML = "100%"; | |
| 1361 | + | |
| 1362 | + setTimeout(function () { | |
| 1363 | + // 100% 표시 후 "잠시만 기다려주세요" 변경 | |
| 1364 | + timeText.innerHTML = "잠시만 기다려주세요..."; | |
| 1365 | + $(".time_text").addClass("animation"); | |
| 1366 | + }, 1000); | |
| 1367 | + } else { | |
| 1368 | + // 프로그레스바 진행 | |
| 1369 | + width++; | |
| 1370 | + bar.style.width = width + "%"; | |
| 1371 | + timeText.innerHTML = width + "%"; | |
| 1372 | + } | |
| 1373 | + } | |
| 1374 | +} | |
| 1375 | + | |
| 1376 | +//선택된 데이터의 길이에 따라 예상 시간 계산 함수 | |
| 1377 | +function calculateEstimatedTime(selectedCount) { | |
| 1378 | + //기준값 | |
| 1379 | + // const processTimePerBatch = 130; // 130초 | |
| 1380 | + | |
| 1381 | + | |
| 1382 | + // 30만건 기준 10분으로 기준을 잡아서 | |
| 1383 | + // 시간계산함 | |
| 1384 | + const processTimePerBatch = 600; | |
| 1385 | + const batchSize = 300000; | |
| 1386 | + | |
| 1387 | + // 1건당 처리 시간 | |
| 1388 | + const timePerRecord = processTimePerBatch / batchSize; | |
| 1389 | + | |
| 1390 | + // 예상 시간 계산 | |
| 1391 | + const estimatedTimeInSeconds = selectedCount * timePerRecord; | |
| 1392 | + | |
| 1393 | + return estimatedTimeInSeconds.toFixed(2); | |
| 1394 | +} | |
| 1395 | + | |
| 1396 | +//빈 값이나 null 값을 제거하는 함수 | |
| 1397 | +function removeEmptyValues(obj) { | |
| 1398 | + Object.keys(obj).forEach(function(key) { | |
| 1399 | + if (obj[key] === null || obj[key] === '') { | |
| 1400 | + delete obj[key]; | |
| 1401 | + } | |
| 1402 | + }); | |
| 1403 | +} | |
| 1404 | + | |
| 1405 | +/** | |
| 1406 | + * @description 대체문자 오류체크 funciton | |
| 1407 | + */ | |
| 1408 | +function fn_errorChk(){ | |
| 1409 | + | |
| 1410 | + // 대체문자가 없을 시 return false; | |
| 1411 | + if($('#txtReplYn').val() === 'N') | |
| 1412 | + { | |
| 1413 | + alert('오류가 없습니다.'); | |
| 1414 | + return false; | |
| 1415 | + } | |
| 1416 | + | |
| 1417 | + // 치환 부분 변수명만 추출 = 배열 | |
| 1418 | + var varList = $("#inputTemplateContent").val().match(/#\{([^}]+)\}/g); | |
| 1419 | + | |
| 1420 | + var smsTxt = $('#smsTxtArea').val(); | |
| 1421 | + for(var i=0; i < varList.length; i++){ | |
| 1422 | + if(smsTxt.indexOf(varList[i]) < 0){ | |
| 1423 | + if(confirm(varList[i] + '값이 없습니다. 치환문자 없이 진행하시겠습니까?')){ | |
| 1424 | + fn_insertErrorYN('Y'); | |
| 1425 | + }; | |
| 1426 | + return false; | |
| 1427 | + } | |
| 1428 | + smsTxt = smsTxt.replace(varList[i], ''); | |
| 1429 | + }; | |
| 1430 | + alert('오류가 없습니다.'); | |
| 1431 | + fn_insertErrorYN('Y'); | |
| 1432 | +} | |
| 1433 | + | |
| 1434 | + | |
| 1435 | +function fn_insertErrorYN(val){ | |
| 1436 | + $('#errorChk').val(val); | |
| 1437 | +} | |
| 1438 | + | |
| 1439 | +//링크 유효성 검증 함수 | |
| 1440 | +function validateLinks() { | |
| 1441 | + | |
| 1442 | + console.log('검사 대상 수:', $('.kakaoBtnList').length); | |
| 1443 | + | |
| 1444 | + let isValid = true; | |
| 1445 | + | |
| 1446 | + $('.kakaoBtnList').each(function () { | |
| 1447 | + const val = $(this).val().trim(); | |
| 1448 | + | |
| 1449 | + console.log('val : ', val); | |
| 1450 | + if (val !== '' && !val.startsWith('http://') && !val.startsWith('https://')) { | |
| 1451 | + alert(`"${val}" 은(는) http:// 또는 https:// 로 시작해야 합니다.`); | |
| 1452 | + $(this).focus(); | |
| 1453 | + isValid = false; | |
| 1454 | + return false; // each 루프 중단 | |
| 1455 | + } | |
| 1456 | + }); | |
| 1457 | + | |
| 1458 | + return isValid; | |
| 1459 | +} | |
| 1460 | + | |
| 1461 | + | |
| 1462 | + | |
| 1463 | + | |
| 1464 | +//문자 바이트수 계산하기 함수 | |
| 1465 | +function thisFnByteString(contents){ | |
| 1466 | + var totalByte = 0; | |
| 1467 | + //var content = contents; | |
| 1468 | + var adverYn = $("input[name='send_adYn']:checked").val(); | |
| 1469 | + var adTxtLeng = 0; | |
| 1470 | + var denyTxtLeng = 0; | |
| 1471 | + | |
| 1472 | + $('#msgLeng').html(""); | |
| 1473 | + $('#limitLeng').html(""); | |
| 1474 | + | |
| 1475 | + /* if ($("#ad_Y").is(":checked")) { | |
| 1476 | + contents = "(광고)"+contents+"\n무료거부 0808800858" | |
| 1477 | + } */ | |
| 1478 | + contents = adYChkAndMakeContents(contents); | |
| 1479 | + console.log(contents); | |
| 1480 | + var conLeng = conByteLeng(contents); // 내용 문자 입력 바이트 수 계산하기 | |
| 1481 | + | |
| 1482 | + | |
| 1483 | + $('#msgLeng').text(conLeng); | |
| 1484 | + | |
| 1485 | + //문자 길이 변수에 저장해주기 | |
| 1486 | +// $('#smsLen').val(conLeng); | |
| 1487 | + | |
| 1488 | + var imgType = $('#sendFailImgSrc').attr('src'); | |
| 1489 | + | |
| 1490 | + | |
| 1491 | + if(imgType != null && "" != imgType){ | |
| 1492 | + | |
| 1493 | + setSendFailTemplate('P') | |
| 1494 | + } | |
| 1495 | + else if(conLeng > 90){ | |
| 1496 | + | |
| 1497 | + $('#limitLeng').html("2000"); | |
| 1498 | + $('.msg_com').html("장문"); | |
| 1499 | + $('#msgType').val("6"); // 메세지 타입 설정 | |
| 1500 | + | |
| 1501 | + $('.msg_com').removeClass("msg_short"); //단문 클래스 삭제하고 | |
| 1502 | + $('.put_left').removeClass("short"); //내용 입력 박스 클래스 삭제 | |
| 1503 | + $('.put_left').removeClass("photo"); //내용 입력 박스 클래스 삭제 | |
| 1504 | + $('.msg_com').addClass("msg_long"); // 장문 클래스 삽입 | |
| 1505 | + $("#subMsgType").val("LMS"); | |
| 1506 | + | |
| 1507 | + }else{ | |
| 1508 | + | |
| 1509 | + $('#limitLeng').html("90"); | |
| 1510 | + $('.msg_com').html("단문"); | |
| 1511 | + $('#msgType').val("4"); // 메세지 타입 설정 | |
| 1512 | + | |
| 1513 | + $('.msg_com').removeClass("msg_long"); //단문 클래스 삭제하고 | |
| 1514 | + $('.put_left').removeClass("long"); //내용 입력 박스 클래스 삭제 | |
| 1515 | + $('.put_left').removeClass("photo"); //내용 입력 박스 클래스 삭제 | |
| 1516 | + $('.msg_com').addClass("msg_short"); // 장문 클래스 삽입 | |
| 1517 | + $("#subMsgType").val("SMS"); | |
| 1518 | + | |
| 1519 | + } | |
| 1520 | + | |
| 1521 | + $('#msgLeng').html(conLeng + " / "); | |
| 1522 | + totalFtPriceSum(tableL.getRows().length); | |
| 1523 | + | |
| 1524 | +} | |
| 1525 | + | |
| 1526 | +function msgSuccessClose(obj){ | |
| 1527 | +// $(obj).closest('.pop_msg_success').attr('style',''); | |
| 1528 | +// location.reload(true); | |
| 1529 | +// $('html').scrollTop(0); | |
| 1530 | + | |
| 1531 | + location.href = '/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do'; | |
| 1532 | +} | |
| 1533 | + | |
| 1534 | +function getFtImageType(imgChk){ | |
| 1535 | + | |
| 1536 | + if(imgChk == 'I' || imgChk == 'W'){ | |
| 1537 | + | |
| 1538 | + var imgLink = $("#imgLink").val(); | |
| 1539 | + var imgFileName = $("#imageFileName").val(); | |
| 1540 | + | |
| 1541 | + /* | |
| 1542 | + if(imgLink == ''){ | |
| 1543 | + | |
| 1544 | + alert("친구톡 이미지 선택시 이동할 링크 주소를 입력해 주세요."); | |
| 1545 | + return false; | |
| 1546 | + | |
| 1547 | + } */ | |
| 1548 | + | |
| 1549 | + if(imgFileName == ''){ | |
| 1550 | + | |
| 1551 | + alert("친구톡 이미지를 등록해 주세요."); | |
| 1552 | + return false; | |
| 1553 | + | |
| 1554 | + } | |
| 1555 | + | |
| 1556 | + $("#imageType").val(imgChk); | |
| 1557 | + | |
| 1558 | + //json 파일 필요 유무 셋팅 | |
| 1559 | + $("#bizJsonYn").val("Y"); | |
| 1560 | + } | |
| 1561 | + | |
| 1562 | + return true; | |
| 1563 | + | |
| 1564 | +} | |
| 1565 | + | |
| 1566 | + | |
| 1567 | +function goToKakaoTestPopUp(){ | |
| 1568 | + | |
| 1569 | + if(loginVO == "" || loginVO == null){ | |
| 1570 | + alert("테스트 발송 서비스는 로그인 후 이용 가능합니다."); | |
| 1571 | + location.href="<c:url value='/web/user/login/login.do'/>"; | |
| 1572 | + return false; | |
| 1573 | + } | |
| 1574 | + | |
| 1575 | + //기업회원 체크 | |
| 1576 | + if(!usrDeptChk()){ | |
| 1577 | + return false; | |
| 1578 | + } | |
| 1579 | + | |
| 1580 | + var form = document.bizForm; | |
| 1581 | + var senderKey = $("#selectAgentCode option:checked").val(); | |
| 1582 | + var yellowId = $("#selectAgentCode option:checked").text(); | |
| 1583 | + | |
| 1584 | + if(senderKey == ''){ | |
| 1585 | + alert("채널ID를 선택해 주세요."); | |
| 1586 | + return false; | |
| 1587 | + }else{ | |
| 1588 | + $("#inputSenderKey").val(senderKey); | |
| 1589 | + $("#yellowId").val(yellowId); | |
| 1590 | + } | |
| 1591 | + | |
| 1592 | + var imgChk = $("input[name=img_file_add]:checked").val(); | |
| 1593 | + if(!getFtImageType(imgChk)){ | |
| 1594 | + return false; | |
| 1595 | + } | |
| 1596 | + | |
| 1597 | + //템플릿 버튼 갯수 체크 | |
| 1598 | + var buttonCnt = $(".btn_kakao_type").length; | |
| 1599 | + | |
| 1600 | + if(buttonCnt > 0){ | |
| 1601 | + //json 파일 필요 유무 셋팅 | |
| 1602 | + $("#bizJsonYn").val("Y"); | |
| 1603 | + } | |
| 1604 | + | |
| 1605 | + //친구톡 내용 체크 | |
| 1606 | + var tmpContents = $('#inputTemplateContent').val(); | |
| 1607 | + | |
| 1608 | + if(tmpContents == ""){ | |
| 1609 | + | |
| 1610 | + alert("친구톡 내용을 입력해 주세요."); | |
| 1611 | + return false; | |
| 1612 | + | |
| 1613 | + }else{ | |
| 1614 | + | |
| 1615 | + //템플릿 내용 입력 | |
| 1616 | + $("#templateContent").val(tmpContents); | |
| 1617 | + | |
| 1618 | + } | |
| 1619 | + | |
| 1620 | + var rtnStr = strChinJpnCheck(tmpContents); | |
| 1621 | + | |
| 1622 | + //문자내용에 이모지가 있는지 체크 | |
| 1623 | + if(!emojiCheck(tmpContents)) return false; | |
| 1624 | + | |
| 1625 | + if(rtnStr.length > 0){ | |
| 1626 | + | |
| 1627 | + alert("입력하신 문구 중 \" " + rtnStr + " \" 는 일부 휴대폰에서 표기되지 않을 수 있습니다."); | |
| 1628 | + | |
| 1629 | + } | |
| 1630 | + | |
| 1631 | + | |
| 1632 | + var selectedData = tableL.getRows(); | |
| 1633 | + | |
| 1634 | + if(selectedData == "" || selectedData == null){ | |
| 1635 | + | |
| 1636 | + alert("받는사람 주소를 한 건 이상 입력해주세요."); | |
| 1637 | + return false; | |
| 1638 | + } | |
| 1639 | + | |
| 1640 | + form.method = "post"; | |
| 1641 | + window.open("about:blank", 'testSendPop', 'width=770, height=850, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1'); | |
| 1642 | + form.target = "testSendPop"; | |
| 1643 | + form.action = "/web/mjon/kakao/friendstalk/selectKakaoFriendsTalkTestSendPopup.do"; | |
| 1644 | + form.submit(); | |
| 1645 | +} | |
| 1646 | + | |
| 1647 | + | |
| 1648 | +function msgResultLink(){ | |
| 1649 | + var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인 | |
| 1650 | + location.href="/web/kakao/sent/selectKakaoSentView.do"; | |
| 1651 | +} | |
| 1652 | + | |
| 1653 | +function updateButtons(){ | |
| 1654 | + | |
| 1655 | +} | |
| 1656 | + | |
| 1657 | + | |
| 1658 | + | |
| 1659 | + | |
| 1660 | +</script> | |
| 1661 | + | |
| 1662 | +<!-- 로딩바 --> | |
| 1663 | +<div class="loading_layer"> | |
| 1664 | + <div class="loading_container"> | |
| 1665 | + <div class="bar"></div> | |
| 1666 | + <div class="text">Loading</div> | |
| 1667 | + </div> | |
| 1668 | +</div> | |
| 1669 | + | |
| 1670 | + | |
| 1671 | +<div class="progress_bar_wrap"> | |
| 1672 | + <div class="progress_box"> | |
| 1673 | + <p class="time_text">0%</p> | |
| 1674 | + <div class="bar"> | |
| 1675 | + <span class="change_bar"></span> | |
| 1676 | + </div> | |
| 1677 | + </div> | |
| 1678 | + <div class="btn_wrap"> | |
| 1679 | + </div> | |
| 1680 | + | |
| 1681 | +</div> | |
| 1682 | + | |
| 1683 | +<div class="inner"> | |
| 1684 | + <div class="send_top"> | |
| 1685 | + <!-- tab button --> | |
| 1686 | + <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %> | |
| 1687 | + <!-- // tab button --> | |
| 1688 | + <div class="top_content kakaotalksend_cont current pay_tab_wrap"> | |
| 1689 | + <div class="heading"> | |
| 1690 | + <h2>브랜드메시지 전송</h2><!-- KakaoFriendsTalkMsgDataView --> | |
| 1691 | +<!-- <button type="button" class="button info">친구톡 사용방법</button> --> | |
| 1692 | + <button type="button" class="button info" onclick="infoListPop('friendTalkSend','792','340');">사용안내</button> | |
| 1693 | + </div> | |
| 1694 | + | |
| 1695 | + <!-- 유저 보유잔액 --> | |
| 1696 | + <input type="hidden" id="oriUserMoney" value="<c:out value='${userMoney}' />"> | |
| 1697 | + | |
| 1698 | + <!-- 각 금액 단가 --> | |
| 1699 | + <input type="hidden" id="kakaoFtPrice" value="<c:out value='${sendPrice.kakaoFtPrice}' />"> <!-- 친구톡 단가 --> | |
| 1700 | + <input type="hidden" id="kakaoFtImgPrice" value="<c:out value='${sendPrice.kakaoFtImgPrice}' />"> <!-- 친구톡 이미지 단가 --> | |
| 1701 | + <input type="hidden" id="kakaoFtWideImgPrice" value="<c:out value='${sendPrice.kakaoFtWideImgPrice}' />"> <!-- 친구톡 와이드이미지 단가 --> | |
| 1702 | + <input type="hidden" id="longPrice" value="<c:out value='${sendPrice.longPrice}' />"> <!-- mms 단가 --> | |
| 1703 | + <input type="hidden" id="shortPrice" value="<c:out value='${sendPrice.shortPrice}' />"> <!-- sms 단가 --> | |
| 1704 | + <input type="hidden" id="picturePrice" value="<c:out value='${sendPrice.picturePrice}' />"> <!-- sms 단가 --> | |
| 1705 | + <input type="hidden" id="imgLinkTemp" name="imgLinkTemp" value="<c:out value='${resultTemplateVO.imgLink}'/>"/> | |
| 1706 | + | |
| 1707 | + <form id="bizForm" name="bizForm" method="multipart/form-data"> | |
| 1708 | + <input type="hidden" id="menuTopTab" name="menuTopTab" value="tabBrandMsg"> | |
| 1709 | + <input type="hidden" id="imageType" name="imageType" value="<c:out value='${resultTemplateVO.imageType}'/>"/> | |
| 1710 | + <input type="hidden" id="inputSenderKey" name="senderKey" value="<c:out value='${resultTemplateVO.senderKey}'/>"/> | |
| 1711 | + <input type="hidden" id="imageFileName" name="imageFileName" value="<c:out value='${resultTemplateVO.imageFileName}'/>"> | |
| 1712 | + <input type="hidden" id="templateImageUrl" name="templateImageUrl" value="<c:out value='${resultTemplateVO.templateImageUrl}'/>"> | |
| 1713 | + <input type="hidden" id="tmpFriendId" name="friendId" value="<c:out value='${resultTemplateVO.friendId}'/>"> | |
| 1714 | + <input type="hidden" id="templateName" name="templateName" value=""/> | |
| 1715 | + <input type="hidden" id="adFlag" name="adFlag" value="<c:out value='${resultTemplateVO.adFlag}' default='Y'/>"> | |
| 1716 | + <input type="hidden" id="templateContent" name="templateContent" value=""/> | |
| 1717 | + | |
| 1718 | + <!-- 이미지 있을때 대체문자 발송 참고 이미지 --> | |
| 1719 | + <input type="hidden" id="atchFileId" name="atchFileId" value="<c:out value='${resultTemplateVO.atchFileId}'/>"/> | |
| 1720 | + | |
| 1721 | + <!-- 예약발송 여부 --> | |
| 1722 | + <input type="hidden" id="reserveYn" name="reserveYn" value="N"/> | |
| 1723 | + <input type="hidden" id="reqDate" name="reqDate" value=""/> | |
| 1724 | + | |
| 1725 | + <!-- 변환문자 유무 --> | |
| 1726 | + <input type="hidden" id="txtReplYn" name="txtReplYn" value="N"/> | |
| 1727 | + <input type="hidden" id="varValList" name="varValList" value=""/> | |
| 1728 | + | |
| 1729 | + <!-- 수신목록 --> | |
| 1730 | + <input type="hidden" id="callToList" name="callToList" value=""/> | |
| 1731 | + | |
| 1732 | + <!-- 스팸 문구 유무 --> | |
| 1733 | + <input type="hidden" id="spamStatus" name="spamStatus" value="N"/> | |
| 1734 | + <input type="hidden" id="atSmishingYn" name="atSmishingYn" value="<c:out value='${atSmishingYn}' />"/> | |
| 1735 | + | |
| 1736 | + <!-- 오류 체크 --> | |
| 1737 | + <input type="hidden" id="errorChk" name="errorChk" value="N"/> | |
| 1738 | + | |
| 1739 | + <!-- 대체문자 여부 --> | |
| 1740 | + <input type="hidden" id="subMsgSendYn" name="subMsgSendYn" value="N"/> | |
| 1741 | + <input type="hidden" id="subMsgType" name="subMsgType" value="SMS"/> | |
| 1742 | + <input type="hidden" id="subMsgTxtReplYn" name="subMsgTxtReplYn" value="N"/> | |
| 1743 | + <input type="hidden" id="subMsgTxt" name="subMsgTxt" value=""/> | |
| 1744 | + | |
| 1745 | + <!-- 발신번호정보 --> | |
| 1746 | + <input type="hidden" id="callFrom" name="callFrom" value=""/> | |
| 1747 | + | |
| 1748 | + <!-- 친구톡 발송 단가 정보 --> | |
| 1749 | +<!-- <input type="hidden" id="eachPrice" name="eachPrice" value="0"/> --> | |
| 1750 | +<!-- <input type="hidden" id="totPrice" name="totalPrice" value="0"/> --> | |
| 1751 | + | |
| 1752 | + <!-- 친구톡 발송 json 파일 필요 유무 --> | |
| 1753 | + <input type="hidden" id="bizJsonYn" name="bizJsonYn" value="N"/> | |
| 1754 | + | |
| 1755 | + <input type="hidden" id="yellowId" name="yellowId" value=""/> | |
| 1756 | + | |
| 1757 | + | |
| 1758 | + <div class="send_general friend_talk_wrap kakao_wrap"> | |
| 1759 | + <div class="send_left"> | |
| 1760 | + <table class="tType1"> | |
| 1761 | + <colgroup> | |
| 1762 | + <col style="width: 130px;"> | |
| 1763 | + <col style="width: auto;"> | |
| 1764 | + </colgroup> | |
| 1765 | + <tbody> | |
| 1766 | + <tr> | |
| 1767 | + <th>채널ID</th> | |
| 1768 | + <td> | |
| 1769 | + <label for="selectAgentCode" class="채널ID 선택"></label> | |
| 1770 | + <select class="select_gray_type" name="selectAgentCode" id="selectAgentCode" onchange="javascript:fnAgentCodeChg();"> | |
| 1771 | + <option value="">채널ID 선택</option> | |
| 1772 | + <c:forEach var="kakaoProfileInfo" items="${resultProfileList}" varStatus="status"> | |
| 1773 | + <option value="${kakaoProfileInfo.senderKey}" <c:if test="${kakaoProfileInfo.senderKey eq resultTemplateVO.senderKey}">selected</c:if> ><c:out value='${kakaoProfileInfo.yellowId}'/></option> | |
| 1774 | + </c:forEach> | |
| 1775 | + </select> | |
| 1776 | + </td> | |
| 1777 | + </tr> | |
| 1778 | + <tr> | |
| 1779 | + <th>템플릿명</th> | |
| 1780 | + <td> | |
| 1781 | + <div class="template_name_wrap"> | |
| 1782 | + <input type="text" id="inputTemplateName" name="inputTemplateName" value="<c:out value='${resultTemplateVO.templateName}'/>" placeholder="최대 50자, 템플릿 관리용"> | |
| 1783 | + | |
| 1784 | + | |
| 1785 | + <button | |
| 1786 | + type="button" | |
| 1787 | + class="btnType btnType8" | |
| 1788 | + onclick="${not empty loginVO.id | |
| 1789 | + ? "window.open('/web/mjon/kakao/template/selectKakaoFriendsTemplateListPopupAjax.do','_blank','width=930, height=780, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes')" | |
| 1790 | + : "alert('로그인 후 이용이 가능합니다.'); return false;"}"> | |
| 1791 | + 템플릿 불러오기 | |
| 1792 | + </button> | |
| 1793 | + | |
| 1794 | +<!-- <button type="button" class="btnType btnType8" onclick="window.open('/publish/popup_friendtalk_template_choice.html','_blank','width=930, height=780, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes')">템플릿 불러오기</button> --> | |
| 1795 | + </div> | |
| 1796 | + </td> | |
| 1797 | + </tr> | |
| 1798 | + <tr> | |
| 1799 | + <th>이미지 첨부</th> | |
| 1800 | + <td> | |
| 1801 | + <input type="radio" name="img_file_add" id="img_file_0" value="" checked="checked"> | |
| 1802 | + <label for="img_file_0">첨부 안함</label> | |
| 1803 | + <input type="radio" name="img_file_add" id="img_file_1" value="I"> | |
| 1804 | + <label for="img_file_1">이미지 첨부</label> | |
| 1805 | + <input type="radio" name="img_file_add" id="img_file_2" value="W"> | |
| 1806 | + <label for="img_file_2">와이드 이미지 첨부</label> | |
| 1807 | + | |
| 1808 | + <div class="img_file_add_wrap basic_img_add_wrap"> | |
| 1809 | + <p class="info_title_text"><span class="c_e40000">*</span> 이미지 첨부 안내</p> | |
| 1810 | + <ul class="info_text"> | |
| 1811 | + <li>- 권장사이즈 : 800px * 400px</li> | |
| 1812 | + <li>- 제한사이즈 : 가로 500px 미만, 가로:세로 비율이 2:1 미만 또는 3:4 초과시 업로드 불가</li> | |
| 1813 | + <li>- 파일형식 : jpg, png (최대 5MB)</li> | |
| 1814 | + <li>- 이미지 첨부 시 메시지 내용은 최대 400자, 버튼 5개까지 입력할 수 있습니다.</li> | |
| 1815 | + </ul> | |
| 1816 | + </div> | |
| 1817 | + <div class="img_file_add_wrap wide_img_add_wrap"> | |
| 1818 | + <p class="info_title_text"><span class="c_e40000">*</span> 와이드 이미지 첨부 안내</p> | |
| 1819 | + <ul class="info_text"> | |
| 1820 | + <li>- 권장사이즈 : 800px * 600px</li> | |
| 1821 | + <li>- 파일형식 : jpg, png (최대 5MB)</li> | |
| 1822 | + <li>- 와이드 이미지 첨부시 메시지 내용은 최대 76자, 버튼 1개까지 입력할 수 있습니다.</li> | |
| 1823 | + </ul> | |
| 1824 | + | |
| 1825 | + | |
| 1826 | + </div> | |
| 1827 | + <ul class="img_file_info_wrap"> | |
| 1828 | + <li> | |
| 1829 | + <button type="button" class="btnType btnType8 btn_img_upload" onclick="javascript:upImgClick(); return false;">이미지 불러오기</button> | |
| 1830 | + <input type="file" id="imgFile" accept=".jpg, .jpeg, .png" onchange="imgResizeInfo(event); return false;" style="display:none"/> | |
| 1831 | + <div class="img_file_wrap"> | |
| 1832 | + <p id="imgTitle" class="file_name file_none">이미지 없음</p> | |
| 1833 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> | |
| 1834 | + <img src="/publish/images/btn_delete.png" alt="이미지 삭제" onclick="fnImageDel();"> | |
| 1835 | + </button> | |
| 1836 | + </div> | |
| 1837 | + </li> | |
| 1838 | + <li> | |
| 1839 | + <p>이미지 클릭시 이동할 URL</p> | |
| 1840 | + <input type="text" id="imgLink" name="imgLink" value="<c:out value='${resultTemplateVO.imgLink}'/>" placeholder="(선택사항) https://" class="img_url"> | |
| 1841 | + </li> | |
| 1842 | + </ul> | |
| 1843 | + | |
| 1844 | + </td> | |
| 1845 | + </tr> | |
| 1846 | + <tr> | |
| 1847 | + <th>광고포함 여부</th> | |
| 1848 | + <td> | |
| 1849 | + <input type="checkbox" id="ad_Y" style="margin: -4px 5px 0 0;" checked="checked" value="Y"> | |
| 1850 | + <label for="ad_Y">광고성 정보 포함</label> | |
| 1851 | + </td> | |
| 1852 | + </tr> | |
| 1853 | + <tr> | |
| 1854 | + <th>내용</th> | |
| 1855 | + <td class="kakao_template_text"> | |
| 1856 | + <div class="put_left short"> | |
| 1857 | + <div class="put_text_wrap"> | |
| 1858 | + <div class="ad_txt" id="adTxt"> | |
| 1859 | + <p>(광고) 채널ID</p> | |
| 1860 | + </div> | |
| 1861 | + <label for="inputTemplateContent" class="label"></label> | |
| 1862 | + <textarea id="inputTemplateContent" name="inputTemplateContent" class="put_text" placeholder="내용을 입력해주세요."><c:out value="${resultTemplateVO.templateContent}"/></textarea> | |
| 1863 | + <div class="text_length"> | |
| 1864 | + <div class="sub_ad_text"> | |
| 1865 | + <p>수신거부 : 홈 > 채널차단</p> | |
| 1866 | + </div> | |
| 1867 | + <div> | |
| 1868 | + <p><span class="fwMd nowChar">0 /</span><span class="c_002c9a fwMd totChar">1000</span>자</p> | |
| 1869 | + </div> | |
| 1870 | + </div> | |
| 1871 | + </div> | |
| 1872 | + </div> | |
| 1873 | + <div class="put_right"> | |
| 1874 | + <div class="btn_popup_wrap"> | |
| 1875 | + <button type="button" class="btnType btnType7" onclick="miniPopup(this)">특수문자</button> | |
| 1876 | + <div class="send_miniPop spc_character"> | |
| 1877 | + <div class="tab_character"> | |
| 1878 | + <a href="#none" class="on">특수문자</a> | |
| 1879 | + <a href="#none">웃음</a> | |
| 1880 | + <a href="#none">슬픔</a> | |
| 1881 | + <a href="#none">분노</a> | |
| 1882 | + <a href="#none">사랑</a> | |
| 1883 | + <a href="#none">그외</a> | |
| 1884 | + </div> | |
| 1885 | + <!-- 특수문자 --> | |
| 1886 | + <div class="cnt_character on"> | |
| 1887 | + <div class="box_character"> | |
| 1888 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 1889 | + <c:if test="${symbolList.symbolType == 'D'}"> | |
| 1890 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}"><c:out value="${symbolList.symbol}"/></a> | |
| 1891 | + </c:if> | |
| 1892 | + </c:forEach> | |
| 1893 | + </div> | |
| 1894 | + </div> | |
| 1895 | + <!-- //특수문자 --> | |
| 1896 | + | |
| 1897 | + <!-- 웃음 --> | |
| 1898 | + <div class="cnt_character emt_character"> | |
| 1899 | + <div class="box_character"> | |
| 1900 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 1901 | + <c:if test="${symbolList.symbolType == 'S'}"> | |
| 1902 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 1903 | + </c:if> | |
| 1904 | + </c:forEach> | |
| 1905 | + </div> | |
| 1906 | + </div> | |
| 1907 | + <!-- //웃음 --> | |
| 1908 | + | |
| 1909 | + <!-- 슬픔 --> | |
| 1910 | + <div class="cnt_character emt_character"> | |
| 1911 | + <div class="box_character"> | |
| 1912 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 1913 | + <c:if test="${symbolList.symbolType == 'C'}"> | |
| 1914 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 1915 | + </c:if> | |
| 1916 | + </c:forEach> | |
| 1917 | + </div> | |
| 1918 | + </div> | |
| 1919 | + <!-- //슬픔 --> | |
| 1920 | + | |
| 1921 | + <!-- 분노 --> | |
| 1922 | + <div class="cnt_character emt_character"> | |
| 1923 | + <div class="box_character"> | |
| 1924 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 1925 | + <c:if test="${symbolList.symbolType == 'A'}"> | |
| 1926 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 1927 | + </c:if> | |
| 1928 | + </c:forEach> | |
| 1929 | + </div> | |
| 1930 | + </div> | |
| 1931 | + <!-- //분노 --> | |
| 1932 | + | |
| 1933 | + <!-- 사랑 --> | |
| 1934 | + <div class="cnt_character emt_character"> | |
| 1935 | + <div class="box_character"> | |
| 1936 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 1937 | + <c:if test="${symbolList.symbolType == 'L'}"> | |
| 1938 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 1939 | + </c:if> | |
| 1940 | + </c:forEach> | |
| 1941 | + </div> | |
| 1942 | + </div> | |
| 1943 | + <!-- //사랑 --> | |
| 1944 | + | |
| 1945 | + <!-- 그외 --> | |
| 1946 | + <div class="cnt_character emt_character emt_etc "> | |
| 1947 | + <div class="box_character"> | |
| 1948 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 1949 | + <c:if test="${symbolList.symbolType == 'E'}"> | |
| 1950 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 1951 | + </c:if> | |
| 1952 | + </c:forEach> | |
| 1953 | + </div> | |
| 1954 | + </div> | |
| 1955 | + <!-- //그외 --> | |
| 1956 | + <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button> | |
| 1957 | + </div> | |
| 1958 | + </div> | |
| 1959 | + <div class="btn_popup_wrap convers_wrap"> | |
| 1960 | + <button type="button" class="btnType btnType7" onclick="miniPopup(this)">특정문구 일괄변환<i class="qmMark"></i></button> | |
| 1961 | + <div class="send_miniPop convers"> | |
| 1962 | + <div> | |
| 1963 | + <div class="convers_top"> | |
| 1964 | + <span>특정문구 일괄변환이란?</span> | |
| 1965 | + <p>주소록, 엑셀에 입력된 내용을 이용해 수신자마다 다른 내용의 메시지를 발송하는 기능</p> | |
| 1966 | + </div> | |
| 1967 | + <div class="convers_middle"> | |
| 1968 | + <a href="javascript:void(0)" class="changeWord" value="[*이름*]"><c:out value="[*이름*]"/></a> | |
| 1969 | + </div> | |
| 1970 | + <div class="convers_bottom"> | |
| 1971 | + <a href="javascript:void(0)" class="changeWord" value="[*1*]"><c:out value="[*1*]"/></a> | |
| 1972 | + <a href="javascript:void(0)" class="changeWord" value="[*2*]"><c:out value="[*2*]"/></a> | |
| 1973 | + <a href="javascript:void(0)" class="changeWord" value="[*3*]"><c:out value="[*3*]"/></a> | |
| 1974 | + <a href="javascript:void(0)" class="changeWord" value="[*4*]"><c:out value="[*4*]"/></a> | |
| 1975 | + </div> | |
| 1976 | + </div> | |
| 1977 | + <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button> | |
| 1978 | + </div> | |
| 1979 | + </div> | |
| 1980 | + <div class="btn_popup_wrap spc_wrap"> | |
| 1981 | + <button type="button" class="btnType btnType7" onclick="miniPopup(this)">이모티콘</button> | |
| 1982 | + <div class="send_miniPop spc_character kakao_emoticon"> | |
| 1983 | + <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %> | |
| 1984 | + <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button> | |
| 1985 | + </div> | |
| 1986 | + </div> | |
| 1987 | + <div class="btn_popup_wrap template_call_wrap"> | |
| 1988 | + </div> | |
| 1989 | + <div class="send_btnWrap"> | |
| 1990 | + <button | |
| 1991 | + type="button" | |
| 1992 | + class="btnType btnType9 btn_text_save" | |
| 1993 | + onclick="${not empty loginVO.id | |
| 1994 | + ? 'myTemplateSave()' | |
| 1995 | + : 'alert(\'로그인 후 이용이 가능합니다.\'); return false;'}"> | |
| 1996 | + 템플릿 저장 | |
| 1997 | + </button> | |
| 1998 | + <button type="button" class="btnType btnType9" onclick="javascript:fnContentsReset();">초기화</button> | |
| 1999 | + </div> | |
| 2000 | + </div> | |
| 2001 | + </td> | |
| 2002 | + </tr> | |
| 2003 | + <tr> | |
| 2004 | + <th>버튼</th> | |
| 2005 | + <td class="template_button"> | |
| 2006 | + <select name="tmpBtnSelect" id="tmpBtnSelect" class="select_gray_type template_button_select"> | |
| 2007 | + <option value="button_type_0">버튼타입 선택</option> | |
| 2008 | +<!-- <option value="button_type_1">배송조회</option> --> | |
| 2009 | + <option value="button_type_2">웹링크</option> | |
| 2010 | + <option value="button_type_3">앱링크</option> | |
| 2011 | +<!-- <option value="button_type_5">메시지전달</option> --> | |
| 2012 | + </select> | |
| 2013 | + <button type="button" class="btnType btnType6" onclick="friendTemplateButtonAdd();">추가</button> | |
| 2014 | + <div class="button_add_wrap" id="buttonAddWrap"> | |
| 2015 | + <c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status"> | |
| 2016 | + | |
| 2017 | + <c:if test="${buttonList.linkType eq 'DS'}"> | |
| 2018 | + <!-- 배송조회 버튼 --> | |
| 2019 | + <dl class="button_type_wrap type1"> | |
| 2020 | + <dt>배송조회</dt> | |
| 2021 | + <dd class="button_type_input"> | |
| 2022 | + <input type="hidden" id="buttonLikeTypeDeliv" name="buttonVOList[${status.index}].linkType" value="DS"/> | |
| 2023 | + <input type="text" id="btnNmDeliv" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 2024 | + <p class="cf_text">*이용가능 택배사 : KG로지스, 우체국택배,일양로지스, GTX로지스, FedEx, 경동택배, 합동택배, 롯데택배</p> | |
| 2025 | + </dd> | |
| 2026 | + <dd> | |
| 2027 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> | |
| 2028 | + </dd> | |
| 2029 | + </dl> | |
| 2030 | + </c:if> | |
| 2031 | + | |
| 2032 | + <c:if test="${buttonList.linkType eq 'WL'}"> | |
| 2033 | + <!-- 웹링크 버튼 --> | |
| 2034 | + <dl class="button_type_wrap type2"> | |
| 2035 | + <dt>웹링크</dt> | |
| 2036 | + <dd class="button_type_input"> | |
| 2037 | + <ul> | |
| 2038 | + <li> | |
| 2039 | + <input type="hidden" id="buttonLikeTypeWeb" name="buttonVOList[${status.index}].linkType" value="WL"/> | |
| 2040 | + <input type="text" id="btnNmWeb" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 2041 | + </li> | |
| 2042 | + <li> | |
| 2043 | + <input type="text" id="buttonLinkMo" name="buttonVOList[${status.index}].linkMo" value="<c:out value='${buttonList.linkMo}'/>" placeholder="모바일 링크 입력"> | |
| 2044 | + </li> | |
| 2045 | + <li> | |
| 2046 | + <input type="text" id="buttonLinkPc" name="buttonVOList[${status.index}].linkPc" value="<c:out value='${buttonList.linkPc}'/>" placeholder="PC 링크 입력"> | |
| 2047 | + </li> | |
| 2048 | + </ul> | |
| 2049 | + </dd> | |
| 2050 | + <dd> | |
| 2051 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> | |
| 2052 | + </dd> | |
| 2053 | + </dl> | |
| 2054 | + </c:if> | |
| 2055 | + | |
| 2056 | + <c:if test="${buttonList.linkType eq 'AL'}"> | |
| 2057 | + <!-- 앱링크 버튼 --> | |
| 2058 | + <dl class="button_type_wrap type3"> | |
| 2059 | + <dt>앱링크</dt> | |
| 2060 | + <dd class="button_type_input"> | |
| 2061 | + <ul> | |
| 2062 | + <li> | |
| 2063 | + <input type="hidden" id="buttonLikeTypeApp" name="buttonVOList[${status.index}].linkType" value="AL"/> | |
| 2064 | + <input type="text" id="btnNmApp" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 2065 | + </li> | |
| 2066 | + <li> | |
| 2067 | + <input type="text" id="buttonLinkAnd" name="buttonVOList[${status.index}].linkAnd" value="<c:out value='${buttonList.linkAnd}'/>" placeholder="Android 링크 입력"> | |
| 2068 | + </li> | |
| 2069 | + <li> | |
| 2070 | + <input type="text" id="buttonLinkIos" name="buttonVOList[${status.index}].linkIos" value="<c:out value='${buttonList.linkIos}'/>" placeholder="IOS 링크 입력"> | |
| 2071 | + </li> | |
| 2072 | + </ul> | |
| 2073 | + </dd> | |
| 2074 | + <dd> | |
| 2075 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> | |
| 2076 | + </dd> | |
| 2077 | + </dl> | |
| 2078 | + </c:if> | |
| 2079 | + | |
| 2080 | + <c:if test="${buttonList.linkType eq 'BK'}"> | |
| 2081 | + <!-- 봇키워드 --> | |
| 2082 | + <dl class="button_type_wrap type4"> | |
| 2083 | + <dt>봇키워드</dt> | |
| 2084 | + <dd class="button_type_input"> | |
| 2085 | + <input type="hidden" id="buttonLikeTypeBot" name="buttonVOList[${status.index}].linkType" value="BK"/> | |
| 2086 | + <input type="text" id="btnNmBot" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 2087 | + </dd> | |
| 2088 | + <dd><button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button></dd> | |
| 2089 | + </dl> | |
| 2090 | + </c:if> | |
| 2091 | + | |
| 2092 | + <c:if test="${buttonList.linkType eq 'MD'}"> | |
| 2093 | + <!-- 메시지 전달 --> | |
| 2094 | + <dl class="button_type_wrap type5"> | |
| 2095 | + <dt>메시지전달</dt> | |
| 2096 | + <dd class="button_type_input"> | |
| 2097 | + <input type="hidden" id="buttonLikeTypeMsg" name="buttonVOList[${status.index}].linkType" value="MD" /> | |
| 2098 | + <input type="text" id="btnNmMsg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 2099 | + </dd> | |
| 2100 | + <dd> | |
| 2101 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> | |
| 2102 | + <img src="/publish/images/btn_delete.png" alt=""> | |
| 2103 | + </button> | |
| 2104 | + </dd> | |
| 2105 | + </dl> | |
| 2106 | + </c:if> | |
| 2107 | + | |
| 2108 | + <c:if test="${buttonList.linkType eq 'BC'}"> | |
| 2109 | + <!-- 상담톡 전환 --> | |
| 2110 | + <dl class="button_type_wrap type6"> | |
| 2111 | + <dt>상담톡전환</dt> | |
| 2112 | + <dd class="button_type_input"> | |
| 2113 | + <input type="hidden" id="buttonLikeTypeCons" name="buttonVOList[${status.index}].linkType" value="BC" /> | |
| 2114 | + <input type="text" id="btnNmCons" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 2115 | + </dd> | |
| 2116 | + <dd> | |
| 2117 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> | |
| 2118 | + <img src="/publish/images/btn_delete.png" alt=""> | |
| 2119 | + </button> | |
| 2120 | + </dd> | |
| 2121 | + </dl> | |
| 2122 | + </c:if> | |
| 2123 | + | |
| 2124 | + <c:if test="${buttonList.linkType eq 'BT'}"> | |
| 2125 | + <!-- 챗봇전환 --> | |
| 2126 | + <dl class="button_type_wrap type7"> | |
| 2127 | + <dt>챗봇전환</dt> | |
| 2128 | + <dd class="button_type_input"> | |
| 2129 | + <input type="hidden" id="buttonLikeTypeBotChg" name="buttonVOList[${status.index}].linkType" value="BT" /> | |
| 2130 | + <input type="text" id="btnNmBotChg" name="buttonVOList[${status.index}].name" value="" placeholder="버튼명 입력(최대 14자)"> | |
| 2131 | + </dd> | |
| 2132 | + <dd> | |
| 2133 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> | |
| 2134 | + <img src="/publish/images/btn_delete.png" alt=""> | |
| 2135 | + </button> | |
| 2136 | + </dd> | |
| 2137 | + </dl> | |
| 2138 | + </c:if> | |
| 2139 | + </c:forEach> | |
| 2140 | + </div> | |
| 2141 | + </td> | |
| 2142 | + </tr> | |
| 2143 | + <tr> | |
| 2144 | + <th>받는사람</th> | |
| 2145 | + <td class="putText"> | |
| 2146 | + <div class="clearfix receipt_num"> | |
| 2147 | + <div class="receipt_num_top"> | |
| 2148 | + <label for="callTo" class="label">받는 번호입력</label> | |
| 2149 | + <input type="text" value="" placeholder="번호를 입력하세요" id="callTo" name="callTo" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'" style="width:340px;"> | |
| 2150 | + <button type="button" class="btnType btnType6 addCallToF">번호추가</button> | |
| 2151 | + <span><span class="vMiddle">*</span> 중복번호는 한번만 발송됩니다.</span> | |
| 2152 | + </div> | |
| 2153 | + <div class="receipt_num_midde"> | |
| 2154 | + <div class="listType list01 callList_box" id="callList_box"> | |
| 2155 | + <div class="list_table list_head"> | |
| 2156 | + <div class="cb_wrap"> | |
| 2157 | + <label for="select_all" class="label"></label> | |
| 2158 | + <input type="checkbox" id="select_all"> | |
| 2159 | + </div> | |
| 2160 | + <div class="list_table_num"> | |
| 2161 | + <p>휴대폰</p> | |
| 2162 | + <img src="/publish/images/sortUp.png"> | |
| 2163 | + <img src="/publish/images/sortDown.png"> | |
| 2164 | + </div> | |
| 2165 | + <div class="list_table_name"> | |
| 2166 | + <p>이름</p> | |
| 2167 | + <img src="/publish/images/sortUp.png"> | |
| 2168 | + <img src="/publish/images/sortDown.png"> | |
| 2169 | + </div> | |
| 2170 | + </div> | |
| 2171 | + <div class="list_body_wrap" id="wrap01_body"> | |
| 2172 | + </div> | |
| 2173 | + </div> | |
| 2174 | + <div class="put_right"> | |
| 2175 | + <div class="btn_popup_wrap spc_wrap"> | |
| 2176 | + <button type="button" data-tooltip="popup06" class="btnType btnType7 popupAddr">주소록 불러오기</button> | |
| 2177 | + </div> | |
| 2178 | + <div class="btn_popup_wrap"> | |
| 2179 | + <button type="button" data-tooltip="popup07" class="btnType btnType7">엑셀 불러오기</button> | |
| 2180 | + </div> | |
| 2181 | + <div class="btn_popup_wrap"> | |
| 2182 | + <button type="button" data-tooltip="popup03" class="btnType btnType7 tab1">최근 전송내역</button> | |
| 2183 | + </div> | |
| 2184 | + <div class="btn_popup_wrap"> | |
| 2185 | + <button type="button" data-tooltip="popup03" class="btnType btnType7 tab2">자주보내는 번호</button> | |
| 2186 | + </div> | |
| 2187 | + <!-- <div class="btn_popup_wrap check_validity_wrap"> | |
| 2188 | + <button type="button" class="btnType btnType7 check_validity">오류 검사<i class="qmMark error_qm"></i></button> | |
| 2189 | + <div class="error_hover_cont send_hover_cont"> | |
| 2190 | + <p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p> | |
| 2191 | + <span>(예시) 010-1234-0001(O) / 010-12345-0001(X)</span> | |
| 2192 | + </div> | |
| 2193 | + </div> --> | |
| 2194 | + </div> | |
| 2195 | + </div> | |
| 2196 | + <div class="list_bottom clearfix"> | |
| 2197 | + <div class="remove_btnWrap"> | |
| 2198 | + <button type="button" class="btnType15 all_del"><i class="remove_img"></i>전체삭제</button> | |
| 2199 | + <button type="button" class="btnType15 select_del"><i class="remove_img"></i>선택삭제</button> | |
| 2200 | + </div> | |
| 2201 | + <div class="list_bottom_right"> | |
| 2202 | + <p>총 <span class="c_e40000" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a" id="rowDupCnt">0</span>건</p> | |
| 2203 | +<!-- <button type="button" class="address_reg2">주소록에 등록</button> --> | |
| 2204 | + </div> | |
| 2205 | + </div> | |
| 2206 | + </div> | |
| 2207 | + </td> | |
| 2208 | + </tr> | |
| 2209 | + <tr> | |
| 2210 | + <th colspan="2" class="billingAmount"> | |
| 2211 | + <div> | |
| 2212 | + <div class="final_pay"> | |
| 2213 | + <div class="pay_info_list"> | |
| 2214 | + <p>발송금액 :</p> | |
| 2215 | + <div class="info" id="repPriceTxt" style="display: none;"> | |
| 2216 | + 단문 : <strong>20</strong>건<span>/</span>장문 : | |
| 2217 | + <strong>150</strong>건<span>/</span>그림문자 : | |
| 2218 | + <strong>30</strong>건 | |
| 2219 | + </div> | |
| 2220 | + </div> | |
| 2221 | + <p class="price"><span id="repPriceTxt"></span><span id="totalPriceTxt">0</span> 원<span></span></p> | |
| 2222 | + </div> | |
| 2223 | + <div class="pay_type clearfix"> | |
| 2224 | + <div> | |
| 2225 | + <input type="radio" id="radio_bill_1" name="radio_bill" checked="checked"> | |
| 2226 | + <label for="radio_bill_1">보유잔액</label> | |
| 2227 | + <label for="userMoney" class="label">보유잔액</label> | |
| 2228 | + <fmt:formatNumber type="number" maxFractionDigits="3" value="${sendPrice.userMoney}" var="commaPrice" /> | |
| 2229 | + <input type="text" id="userMoney" name="userMoney" value="<c:out value='${commaPrice}'/>" readonly=""> | |
| 2230 | + <span class="won">원</span> | |
| 2231 | + <button type="button" class="btnType btnType21" onclick="location.href='/web/member/pay/PayView.do'">충전</button> | |
| 2232 | + </div> | |
| 2233 | + <div></div> | |
| 2234 | + </div> | |
| 2235 | + </div> | |
| 2236 | + </th> | |
| 2237 | + </tr> | |
| 2238 | + <tr> | |
| 2239 | + <th colspan="2" class="replace_send_th"> | |
| 2240 | + <div class="title_th"><p>대체문자</p> | |
| 2241 | + <input type="checkbox" id="send_fail_check" name="send_fail_check" class="send_fail_check"> | |
| 2242 | + <label for="send_fail_check">친구톡 전송 실패 시 문자 전송</label> | |
| 2243 | + </div> | |
| 2244 | + <div class="replace_send_wrap"> | |
| 2245 | + <table class="tType1"> | |
| 2246 | + <colgroup> | |
| 2247 | + <col style="width: 90px;"> | |
| 2248 | + <col style="width: auto;"> | |
| 2249 | + </colgroup> | |
| 2250 | + <tbody> | |
| 2251 | + <tr> | |
| 2252 | + <th>발신번호</th> | |
| 2253 | + <td> | |
| 2254 | + <label for="callFromList" class="label"></label> | |
| 2255 | + <select id="callFromList" name="callFromList" class="sel_number"> | |
| 2256 | + <c:choose> | |
| 2257 | + <c:when test="${not empty resultPhonList}"> | |
| 2258 | + <c:forEach var="phonList" items="${resultPhonList}" varStatus="status"> | |
| 2259 | + <option value="${phonList}">${phonList}</option> | |
| 2260 | + </c:forEach> | |
| 2261 | + </c:when> | |
| 2262 | + <c:otherwise> | |
| 2263 | + <option value="">등록된 발신 번호가 없습니다.</option> | |
| 2264 | + </c:otherwise> | |
| 2265 | + </c:choose> | |
| 2266 | + </select> | |
| 2267 | + <button type="button" class="btnType btnType6" onclick="location.href='/web/user/sendNumberManage.do'">번호등록</button> | |
| 2268 | + </td> | |
| 2269 | + </tr> | |
| 2270 | + <tr> | |
| 2271 | + <th>내용</th> | |
| 2272 | + <td class="putText"> | |
| 2273 | + <div class="clearfix"> | |
| 2274 | + <div class="put_left short"> | |
| 2275 | + <!-- 업로드한 이미지의 썸네일 영역 --> | |
| 2276 | + <ul class="thumb_wrap liOnImg ui-sortable"> | |
| 2277 | + <li class="delLi" id="sendFailImg" style="display: none"> | |
| 2278 | + <div> | |
| 2279 | + <img src="" id="sendFailImgSrc" class="thumb_img edit_y" alt="thumb1"> | |
| 2280 | + </div> | |
| 2281 | +<!-- <button type="button" class="file_close"><img src="/publish/images/content/thumb_del.png" alt="첨부파일 삭제"></button> --> | |
| 2282 | +<!-- <button type="button" class="file_close_on"><img src="/publish/images/content/thumb_del_on.png" alt="첨부파일 삭제"></button> --> | |
| 2283 | + </li> | |
| 2284 | + | |
| 2285 | + </ul> | |
| 2286 | + <label for="smsTxtArea" class="label"></label> | |
| 2287 | + <!-- //업로드한 이미지의 썸네일 영역 --> | |
| 2288 | + <div class="ad_txt" style=""> | |
| 2289 | + <p>(광고)</p> | |
| 2290 | + </div> | |
| 2291 | + <textarea id="smsTxtArea" class="put_text"></textarea> | |
| 2292 | + <div class="text_length"> | |
| 2293 | + <div class="deny_txt sub_ad_text"> | |
| 2294 | + <p>무료거부 0808800858</p> | |
| 2295 | + </div> | |
| 2296 | + <div name="afterDeny"> | |
| 2297 | + <p> | |
| 2298 | + <span class="fwMd" id="msgLeng">0 /</span> | |
| 2299 | + <span class="c_002c9a fwMd" id="limitLeng">90</span>byte | |
| 2300 | + </p> | |
| 2301 | + <span class="msg_com msg_short">단문</span> | |
| 2302 | + </div> | |
| 2303 | + </div> | |
| 2304 | + </div> | |
| 2305 | + <div class="put_right"> | |
| 2306 | + <button type="button" class="btnType btnType9" id="failCheckInit">초기화</button> | |
| 2307 | +<!-- <button type="button" class="btnType btnType7" onclick="javascript:fn_errorChk(); return false;">오류검사<i class="qmMark"></i></button> --> | |
| 2308 | + </div> | |
| 2309 | + </div> | |
| 2310 | + </td> | |
| 2311 | + </tr> | |
| 2312 | + </tbody> | |
| 2313 | + </table> | |
| 2314 | + </div> | |
| 2315 | + </th> | |
| 2316 | + </tr> | |
| 2317 | + </tbody> | |
| 2318 | + </table> | |
| 2319 | + </div> | |
| 2320 | + <div class="send_right"> | |
| 2321 | + <div class="phone"> | |
| 2322 | + <div class="phoneIn"> | |
| 2323 | + <p class="prev_p"> | |
| 2324 | + <img src="/publish/images/content/kakao_prev_icon.png" alt=""> | |
| 2325 | + <span id="spnYellowid">@채널ID</span> | |
| 2326 | + </p> | |
| 2327 | + <!-- 텍스트 미리보기 --> | |
| 2328 | + <div class="text_preview"> | |
| 2329 | + <p class="friend_talk_title" id="talkTitle"> | |
| 2330 | +<!-- <span>(광고)</span> 채널ID --> | |
| 2331 | + <span>(광고)</span> | |
| 2332 | + </p> | |
| 2333 | + <div class="allimtalk_content"> | |
| 2334 | + <div class="kakao_image" style="display:none;"> | |
| 2335 | + <img src="" id="kakaoImg" alt=""> | |
| 2336 | + </div> | |
| 2337 | + <p class="template_text">내용 미리보기</p> | |
| 2338 | + <div class="btnViewArea"> | |
| 2339 | + <c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status"> | |
| 2340 | + <button type="button" class="btn_kakao_type btnEmpty" style="display:block;"><c:out value="${buttonList.name}"/></button> | |
| 2341 | + </c:forEach> | |
| 2342 | + </div> | |
| 2343 | + </div> | |
| 2344 | + <p class="kakao_block_text">수신거부 : 홈 > 채널차단</p> | |
| 2345 | + </div> | |
| 2346 | + <!-- //텍스트 미리보기 --> | |
| 2347 | + </div> | |
| 2348 | + <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p> | |
| 2349 | + </div> | |
| 2350 | + <div class="phone_bottom"> | |
| 2351 | + <div class="send_rev"> | |
| 2352 | + <div class="send_content" style="padding-bottom: 0;"> | |
| 2353 | + <div class="rev_radio"> | |
| 2354 | + <ul> | |
| 2355 | + <li> | |
| 2356 | + <input type="radio" id="reserYnN" name="reserYn" value="N" checked="checked"><label for="reserYnN">즉시</label> | |
| 2357 | + </li> | |
| 2358 | + <li> | |
| 2359 | + <input type="radio" id="reserYnY" name="reserYn" value="Y"><label for="reserYnY">예약</label> | |
| 2360 | + </li> | |
| 2361 | + </ul> | |
| 2362 | + </div> | |
| 2363 | + <div class="send_btn"> | |
| 2364 | + <%-- 친구톡 발송시간 체크 하기 - 20:50 ~ 익일 08:00 사이에는 발송 금지 --%> | |
| 2365 | + <c:choose> | |
| 2366 | + <c:when test="${sendStatus eq 'true'}"> | |
| 2367 | + <button type="button" class="btnType btnType11" onclick="javascript:fn_sendMsgData(); return false;">발송하기</button> | |
| 2368 | + </c:when> | |
| 2369 | + <c:otherwise> | |
| 2370 | + <button type="button" class="btnType btnType11" onclick="javascript:fn_noTimeSend(); return false;">발송하기</button> | |
| 2371 | + </c:otherwise> | |
| 2372 | + </c:choose> | |
| 2373 | + <button type="button" class="btnType btnType10" onclick="javascript:goToKakaoTestPopUp(); return false;">테스트발송</button> | |
| 2374 | + </div> | |
| 2375 | + </div> | |
| 2376 | + <div class="rev_selected" > | |
| 2377 | + <div class="rev_top"> | |
| 2378 | + <span>날짜 :</span> | |
| 2379 | + <div class="calendar_wrap"> | |
| 2380 | + <input type="text" class="startDate2 inp resDate calendar picker__input picker__input--active" title="검색 시작일" id="startDate2" name="startDate2" value="" data-datecontrol="true" readonly="" aria-haspopup="true" aria-expanded="true" aria-readonly="false" aria-owns="startDate2_root"> | |
| 2381 | + </div> | |
| 2382 | + <div class="selBox"> | |
| 2383 | + <label for="msgResHour" class="label">시 선택</label> | |
| 2384 | + <select class="selType1" id="msgResHour" name="msgResHour"> | |
| 2385 | + <c:forEach var="hour" begin="8" end="20" step="1" varStatus="status"> | |
| 2386 | + <c:choose> | |
| 2387 | + <c:when test="${hour < 10}"> | |
| 2388 | + <option value="0${hour}">0${hour}시</option> | |
| 2389 | + </c:when> | |
| 2390 | + <c:otherwise> | |
| 2391 | + <option value="${hour}">${hour}시</option> | |
| 2392 | + </c:otherwise> | |
| 2393 | + </c:choose> | |
| 2394 | + </c:forEach> | |
| 2395 | + </select> | |
| 2396 | + <label for="msgResMin" class="label">분 선택</label> | |
| 2397 | + <select class="selType1" id="msgResMin" name="msgResMin" onChange="fnSelectMinChk();"> | |
| 2398 | + <c:forEach var="min" begin="0" end="59" step="1"> | |
| 2399 | + <c:choose> | |
| 2400 | + <c:when test="${min < 10}"> | |
| 2401 | + <option value="0${min}">0${min}분</option> | |
| 2402 | + </c:when> | |
| 2403 | + <c:otherwise> | |
| 2404 | + <option value="${min}">${min}분</option> | |
| 2405 | + </c:otherwise> | |
| 2406 | + </c:choose> | |
| 2407 | + </c:forEach> | |
| 2408 | + </select> | |
| 2409 | + </div> | |
| 2410 | + </div> | |
| 2411 | + <%-- <div class="rev_bottom"> | |
| 2412 | + <input type="checkbox" id="inputDivideChk" name="inputDivideChk"> | |
| 2413 | + <label for="inputDivideChk">분할전송</label> | |
| 2414 | + <input type="text" class="dividType1" id="frmDivideCnt" name="frmDivideCnt" value="20" onkeypress='return checkNumber(event)' maxlength="4"/> | |
| 2415 | + <label for="divideCnt">건</label> | |
| 2416 | + <select class="selType1" id="divideTime" name="divideTime"> | |
| 2417 | + <option value="5">05분</option> | |
| 2418 | + <option value="10">10분</option> | |
| 2419 | + <option value="15">15분</option> | |
| 2420 | + <option value="20">20분</option> | |
| 2421 | + <option value="30">30분</option> | |
| 2422 | + </select> | |
| 2423 | + <label for="divideTime">간격</label> | |
| 2424 | + </div> --%> | |
| 2425 | + </div> | |
| 2426 | + </div> | |
| 2427 | + </div> | |
| 2428 | + </div> | |
| 2429 | + </div> | |
| 2430 | + </form> | |
| 2431 | + </div> | |
| 2432 | + </div> | |
| 2433 | +</div> | |
| 2434 | + | |
| 2435 | +<!-- 문자발송 성공 레이어팝업 --> | |
| 2436 | +<div class="tooltip-wrap"> | |
| 2437 | + <div class="popup-com pop_msg_success"> | |
| 2438 | + <div class="popup_heading"> | |
| 2439 | + <p>친구톡 전송 결과</p> | |
| 2440 | + <button type="button" class="tooltip-close" onclick="msgSuccessClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> | |
| 2441 | + </div> | |
| 2442 | + <div class="layer_in"> | |
| 2443 | + <div class="msg_text">발송 성공 : <strong>1</strong> 건,수신거부 : <span>0</span>건의<br>문자가 발송 되었습니다.</div> | |
| 2444 | + </div> | |
| 2445 | + <div class="popup_btn"> | |
| 2446 | + <button type="button" onclick="msgResultLink(); return false;">친구톡 발송결과 바로가기</button> | |
| 2447 | + <button type="button" class="tooltip-close" onclick="msgSuccessClose(this);">확인</button> | |
| 2448 | + </div> | |
| 2449 | + </div> | |
| 2450 | +</div> | |
| 2451 | + | |
| 2452 | +<!-- 주소록 불러오기 --> | |
| 2453 | +<div class="tooltip-wrap"> | |
| 2454 | + <div class="popup-com import_layer popup06 adr_call_popup" tabindex="0" | |
| 2455 | + data-tooltip-con="popup06" data-focus="popup06" | |
| 2456 | + data-focus-prev="popup06-close" style="width: 1000px"> | |
| 2457 | + <div class="popup_heading"> | |
| 2458 | + <p> | |
| 2459 | + <span>주소록 불러오기 | |
| 2460 | + </p> | |
| 2461 | + <button type="button" onClick="javascript:addrClose(); return false;"> | |
| 2462 | + <img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"> | |
| 2463 | + </button> | |
| 2464 | + </div> | |
| 2465 | + <div class="layer_in"> | |
| 2466 | + <div class="titBox titBox_pad"> | |
| 2467 | + <p> | |
| 2468 | + - 주소록 수정 및 변경은 <span>[주소록 관리]</span>에서만 가능합니다. | |
| 2469 | + </p> | |
| 2470 | + <button type="button" class="adr_admin" | |
| 2471 | + onClick="location.href='/web/mjon/addr/selectAddrList.do'">주소록 | |
| 2472 | + 관리</button> | |
| 2473 | + </div> | |
| 2474 | + <div class="adr_wrap"> | |
| 2475 | + <form id="searchAddrGrpForm" name="searchAddrGrpForm" method="post" | |
| 2476 | + style="display: flex; justify-content: space-between;"> | |
| 2477 | + <input type="hidden" id="searchAddrGrpId" name="searchAddrGrpId" | |
| 2478 | + value="" /> <input type="hidden" id="type" name="type" value="all" /> | |
| 2479 | + <input type="hidden" id="searchKeyword" name="searchKeyword" | |
| 2480 | + value="" /> <input type="hidden" name="searchCondition" | |
| 2481 | + id="searchCondition" value="0" /> | |
| 2482 | + <div class="adr_pop_left"> | |
| 2483 | + <div class="adr_left_search"> | |
| 2484 | + <label for="searchKeyword" class="label">그룹명 검색</label> <input | |
| 2485 | + type="text" name="searchGrpKeyword" id="searchGrpKeyword" | |
| 2486 | + placeholder="그룹명 검색" onfocus="this.placeholder=''" | |
| 2487 | + onblur="this.placeholder='그룹명 검색'" class="inputLight"> | |
| 2488 | + <button type="button" | |
| 2489 | + onClick="javascrit:fnAddrGrpSearch(); return false;"> | |
| 2490 | + <img src="/publish/images/popup/search.png" alt="검색"> | |
| 2491 | + </button> | |
| 2492 | + </div> | |
| 2493 | + <div class="adr_pop_box"> | |
| 2494 | + <div id="addrGroupLoad"></div> | |
| 2495 | + </div> | |
| 2496 | + <!-- <div class="popup_btn"> | |
| 2497 | + <button type="button" class="btnType" onClick="javascript:fnSelectAddrGrpList(); return false;">선택 그룹 추가</button> | |
| 2498 | + </div> --> | |
| 2499 | + </div> | |
| 2500 | + <div class="adr_pop_right"> | |
| 2501 | + <div class="clearfix"> | |
| 2502 | + <div class="btnWrap_last"> | |
| 2503 | + <label for="searchAddrCondition" class="label">카테고리 선택</label> <select | |
| 2504 | + id="searchAddrCondition" name="searchAddrCondition" | |
| 2505 | + class="selType2"> | |
| 2506 | + <option value='0'>전체</option> | |
| 2507 | + <option value='1'>그룹명</option> | |
| 2508 | + <option value='2'>이름</option> | |
| 2509 | + <option value='3'>핸드폰번호</option> | |
| 2510 | + </select> <label for="searchAddrKeyword" class="label">검색어 입력</label> <input | |
| 2511 | + type="text" id="searchAddrKeyword" name="searchAddrKeyword" | |
| 2512 | + placeholder="검색어를 입력하세요" onfocus="this.placeholder=''" | |
| 2513 | + onblur="this.placeholder='검색어를 입력하세요'"> | |
| 2514 | + <button type="button" class="btnType btnType17" | |
| 2515 | + onClick="javascrit:fnAddrSearch(); return false;">검색</button> | |
| 2516 | + </div> | |
| 2517 | + <!-- table --> | |
| 2518 | + <div class="adr_excel adr_pop_list2 callAddr_box" | |
| 2519 | + style="max-width: 722px"></div> | |
| 2520 | + <!--// table --> | |
| 2521 | + </div> | |
| 2522 | + <div class="popup_btn_wrap2"> | |
| 2523 | + <!-- <button type="button" onClick="javascript:addrToList(); return false;">추가</button> --> | |
| 2524 | + <button type="button" | |
| 2525 | + onClick="javascript:addrToList_advc('all'); return false;">전체추가</button> | |
| 2526 | + <button type="button" | |
| 2527 | + onClick="javascript:addrToList_advc('select'); return false;">선택추가</button> | |
| 2528 | + <button type="button" | |
| 2529 | + onClick="javascript:addrClose(); return false;">닫기</button> | |
| 2530 | + </div> | |
| 2531 | + <%-- 주소록 레이어 팝업 닫기 실행 코드 --%> | |
| 2532 | + <input type="hidden" name="btnAddrClose" id="btnAddrClose" | |
| 2533 | + class="tooltip-close closeAddr" data-focus="popup06-close" /> | |
| 2534 | + </div> | |
| 2535 | + </form> | |
| 2536 | + </div> | |
| 2537 | + </div> | |
| 2538 | + </div> | |
| 2539 | +</div> | |
| 2540 | +<!--// 주소록 불러오기 --> | |
| 2541 | + | |
| 2542 | +<!-- 엑셀 불러오기 --> | |
| 2543 | +<form id="excelForm" name="excelForm" method="post"> | |
| 2544 | + <div class="tooltip-wrap"> | |
| 2545 | +<!-- <div class="popup-com import_layer popup07" tabindex="0" data-tooltip-con="popup07" data-focus="popup07" data-focus-prev="popup07-close"> --> | |
| 2546 | + <div class="popup-com adr_layer popup07" tabindex="0" data-tooltip-con="popup07" data-focus="popup07" data-focus-prev="popup07-close" style="width: 1000px;"> | |
| 2547 | + <%@include file="/WEB-INF/jsp/web/kakao/msgdata/include/ftDataIncludeExcel.jsp" %> | |
| 2548 | +<%-- <%@include file="/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp" %> --%> | |
| 2549 | + <!-- <div class="popup_heading"> | |
| 2550 | + <p><span>엑셀</span> 불러오기</p> | |
| 2551 | + <button type="button" class="tooltip-close" data-focus="popup07-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> | |
| 2552 | + </div> | |
| 2553 | + <div class="layer_in"> | |
| 2554 | + 엑셀파일 불러오기 | |
| 2555 | + <div class="hascont"> | |
| 2556 | + <div class="titBox"> | |
| 2557 | + <p>- 최대 2만 건까지 등록할 수 있습니다.</p> | |
| 2558 | + <p>- [엑셀 불러오기]시 문서의 A, B열을 불러옵니다.(지원하는 파일 형식 : xls, xlsx)</p> | |
| 2559 | + <p>- 휴대폰 항목은 숫자, 하이픈(-)만 인식하며, 번호 앞에 0이 생략되어도 정상 등록됩니다. | |
| 2560 | + </p> | |
| 2561 | + <button type="button" class="excel_btn" onclick="location.href='/cmm/fms/FileDown.do?atchFileId=FILE_000000000011651&fileSn=1'"><i></i>샘플파일 다운로드</button> | |
| 2562 | + <button type="button" class="excel_btn" onclick="location.href='/download/msg/엑셀주소록_등록양식.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button> | |
| 2563 | + </div> | |
| 2564 | + <div class="attachedFile"> | |
| 2565 | + <label for="excelNm" class="attachedFile_label">첨부파일</label> | |
| 2566 | + <input type="text" id="excelNm" value="" readonly> | |
| 2567 | + <input type="file" id="excelFile" accept=".xls, .xlsx" onchange="excelExport(event); return false;" style="display:none"/> | |
| 2568 | + <button type="button" class="btnType btnType6 c1">찾아보기</button> | |
| 2569 | + <p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p> | |
| 2570 | + <p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p> | |
| 2571 | + </div> | |
| 2572 | + </div>// 엑셀파일 불러오기 | |
| 2573 | + <div class="popup_btn_wrap2"> | |
| 2574 | + <button type="button" class="tooltip-close" data-focus="popup07-close" data-focus-next="popup07" id="excelAdd">추가</button> | |
| 2575 | + <button type="button" class="tooltip-close" data-focus="popup07-close" data-focus-next="popup07">닫기</button> | |
| 2576 | + </div> | |
| 2577 | + </div> --> | |
| 2578 | + </div> | |
| 2579 | + </div><!--// 엑셀 불러오기 --> | |
| 2580 | +</form> | |
| 2581 | + | |
| 2582 | + | |
| 2583 | +<div class="tooltip-wrap"> | |
| 2584 | + <div class="popup-com history_layer popup03" tabindex="0" | |
| 2585 | + data-tooltip-con="popup03" data-focus="popup03" | |
| 2586 | + data-focus-prev="popup03-close"> | |
| 2587 | + <div class="popup_heading"> | |
| 2588 | + <p> | |
| 2589 | + 전송내역 | |
| 2590 | + </p> | |
| 2591 | + <button type="button" class="tooltip-close" | |
| 2592 | + data-focus="popup03-close" id="btnLatestAddPhoneClose"> | |
| 2593 | + <img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"> | |
| 2594 | + </button> | |
| 2595 | + </div> | |
| 2596 | + <div class="layer_in"> | |
| 2597 | + <!-- tab button --> | |
| 2598 | + <ul class="tabType6"> | |
| 2599 | + <li class="tab active"><button type="button" | |
| 2600 | + onclick="TabType(this,'1');">최근 전송내역</button></li> | |
| 2601 | + <li class="tab"><button type="button" | |
| 2602 | + onclick="TabType(this,'2');">자주보내는 번호</button></li> | |
| 2603 | + </ul> | |
| 2604 | + <!--// tab button --> | |
| 2605 | + <!-- 최근 전송내역 --> | |
| 2606 | + <div class="history_cont hascont current"> | |
| 2607 | + <div class="histroy_trans latestMsgArea" id="latestMsgArea"> | |
| 2608 | + <ul id="latestMsgUl"> | |
| 2609 | + <%-- <c:choose> | |
| 2610 | + <c:when test="${not empty resultLatestMsgList}"> | |
| 2611 | + <c:forEach var="latestMsgList" items="${resultLatestMsgList}" varStatus="status"> | |
| 2612 | + <li id="latestLi"> | |
| 2613 | + <input type="checkbox" id="addrChk_${status.count}" name="latAddrChk" value="<c:out value='${latestMsgList.callTo}'/>"> | |
| 2614 | + <label for="addrChk_${status.count}" class="label">최근 전송내역</label> | |
| 2615 | + <p><c:out value="${latestMsgList.callTo}"/></p> | |
| 2616 | + <button type="button" id="latestAddrDel"> | |
| 2617 | + <img src="/publish/images/popup/close3.png" alt="전화번호 삭제"> | |
| 2618 | + </button> | |
| 2619 | + </li> | |
| 2620 | + </c:forEach> | |
| 2621 | + </c:when> | |
| 2622 | + <c:otherwise> | |
| 2623 | + <li> | |
| 2624 | + <p>최근 발송 내역이 없습니다.</p> | |
| 2625 | + </li> | |
| 2626 | + </c:otherwise> | |
| 2627 | + </c:choose> --%> | |
| 2628 | + </ul> | |
| 2629 | + </div> | |
| 2630 | + <div class="popup_btn_wrap2 hisroy_btn" style="width: 230px;"> | |
| 2631 | + <button type="button" id="latestAddPhoneAll">전체추가</button> | |
| 2632 | + <button type="button" id="latestAddPhone">선택추가</button> | |
| 2633 | + <button type="button" id="latestCancelPhone">선택취소</button> | |
| 2634 | + </div> | |
| 2635 | + </div> | |
| 2636 | + <!--// 최근 전송내역 --> | |
| 2637 | + <!-- 자주보내는 번호 --> | |
| 2638 | + <div class="history_cont hascont"> | |
| 2639 | + <div class="histroy_trans" id="bookMarkMsgArea"> | |
| 2640 | + <ul id="bookMsgUl"> | |
| 2641 | + <li> | |
| 2642 | + <p>데이터 로딩중입니다.</p> | |
| 2643 | + </li> | |
| 2644 | + <%-- <c:choose> | |
| 2645 | + <c:when test="${not empty resultBookMarkMsgList}"> | |
| 2646 | + <c:forEach var="bookMarkMsgList" items="${resultBookMarkMsgList}" varStatus="status"> | |
| 2647 | + <li id="bookMarkLi"> | |
| 2648 | + <input type="checkbox" id="bokAddrChk_${status.count}" name="bookAddrChk" value="<c:out value='${bookMarkMsgList.addrPhoneNo}'/>"> | |
| 2649 | + <label for="addrChk_${status.count}" class="label">최근 전송내역</label> | |
| 2650 | + <p><c:out value="${bookMarkMsgList.addrPhoneNo}"/></p> | |
| 2651 | + <button type="button" id="bookMarkAddrDel"><img src="/publish/images/popup/close3.png" alt="전화번호 삭제"></button> | |
| 2652 | + </li> | |
| 2653 | + </c:forEach> | |
| 2654 | + </c:when> | |
| 2655 | + <c:otherwise> | |
| 2656 | + <li> | |
| 2657 | + <p>등록된 자주 보내는 번호 내역이 없습니다.</p> | |
| 2658 | + </li> | |
| 2659 | + </c:otherwise> | |
| 2660 | + </c:choose> --%> | |
| 2661 | + </ul> | |
| 2662 | + </div> | |
| 2663 | + <div class="popup_btn_wrap2 hisroy_btn" style="width: 230px;"> | |
| 2664 | + <button type="button" id="bookMarkAddPhoneAll">전체추가</button> | |
| 2665 | + <button type="button" id="bookMarkAddPhone">선택추가</button> | |
| 2666 | + <button type="button" id="bookMarkCancelPhone">선택취소</button> | |
| 2667 | + </div> | |
| 2668 | + </div> | |
| 2669 | + <!--// 자주보내는 번호 --> | |
| 2670 | + </div> | |
| 2671 | + </div> | |
| 2672 | +</div> | |
| 2673 | +<!--// 전송내역 팝업 --> | |
| 2674 | + | |
| 2675 | + | |
| 2676 | +<form id="templateForm" name="templateForm" method="post"> | |
| 2677 | + <input type="hidden" id="friendId" name="friendId" value="<c:out value='${resultTemplateVO.friendId}'/>"/> | |
| 2678 | +</form>(No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
... | ... | @@ -1655,8 +1655,26 @@ |
| 1655 | 1655 |
|
| 1656 | 1656 |
|
| 1657 | 1657 |
|
| 1658 |
- |
|
| 1659 | 1658 |
</script> |
| 1659 |
+<div class="mask on"></div> |
|
| 1660 |
+ |
|
| 1661 |
+<!-- 친구톡 서비스 중단 --> |
|
| 1662 |
+<div class="tooltip-wrap "> |
|
| 1663 |
+ <div class="popup-com service_stop_popup alert_layer_popup" tabindex="0" data-tooltip-con="alert_layer_popup" data-focus="alert_layer_popup" data-focus-prev="alert_layer_popup-close" style="display:block;width:490px;opacity:1;"> |
|
| 1664 |
+ <div class="popup_heading"> |
|
| 1665 |
+ <p>알림</p> |
|
| 1666 |
+ <button type="button" class="tooltip-close" onclick="location.href='/web/main/mainPage.do'"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> |
|
| 1667 |
+ </div> |
|
| 1668 |
+ <div class="layer_in"> |
|
| 1669 |
+ <p>친구톡 서비스는 종료되었으며,<br />2026년 1월부터 <b>'브랜드메시지'</b>로 전환될 예정입니다.</p> |
|
| 1670 |
+ <div class="popup_btn"> |
|
| 1671 |
+ <button type="button" class="btn fill blue" onclick="location.href='/web/main/mainPage.do'">메인화면 바로가기</button> |
|
| 1672 |
+ </div> |
|
| 1673 |
+ </div> |
|
| 1674 |
+ </div> |
|
| 1675 |
+</div> |
|
| 1676 |
+<!-- //친구톡 서비스 중단 --> |
|
| 1677 |
+<!-- //친구톡 서비스 중단 --> |
|
| 1660 | 1678 |
|
| 1661 | 1679 |
<!-- 로딩바 --> |
| 1662 | 1680 |
<div class="loading_layer"> |
... | ... | @@ -1798,11 +1816,11 @@ |
| 1798 | 1816 |
<th>이미지 첨부</th> |
| 1799 | 1817 |
<td> |
| 1800 | 1818 |
<input type="radio" name="img_file_add" id="img_file_0" value="" checked="checked"> |
| 1801 |
- <label for="img_file_0">첨부 안함</label> |
|
| 1819 |
+ <label for="img_file_0">텍스트</label> |
|
| 1802 | 1820 |
<input type="radio" name="img_file_add" id="img_file_1" value="I"> |
| 1803 |
- <label for="img_file_1">이미지 첨부</label> |
|
| 1821 |
+ <label for="img_file_1">이미지</label> |
|
| 1804 | 1822 |
<input type="radio" name="img_file_add" id="img_file_2" value="W"> |
| 1805 |
- <label for="img_file_2">와이드 이미지 첨부</label> |
|
| 1823 |
+ <label for="img_file_2">와이드</label> |
|
| 1806 | 1824 |
|
| 1807 | 1825 |
<div class="img_file_add_wrap basic_img_add_wrap"> |
| 1808 | 1826 |
<p class="info_title_text"><span class="c_e40000">*</span> 이미지 첨부 안내</p> |
--- src/main/webapp/WEB-INF/jsp/web/kakao/profile/KakaoProfileList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/profile/KakaoProfileList.jsp
... | ... | @@ -461,6 +461,7 @@ |
| 461 | 461 |
<div class="titBox"> |
| 462 | 462 |
<p>- 카카오톡 채널(https://center-pf.kakao.com)에서 가입 후, 카카오톡 채널(채널ID) 등록바랍니다.</p> |
| 463 | 463 |
<p>- 카카오톡 채널 관리자센터- [서비스관리] – 프로필명 클릭 – [관리]메뉴-카카오톡 채널 홈에서 홈 공개 및 검색허용을 하셔야 등록가능합니다.</p> |
| 464 |
+<%-- <p>- 카카오 알림톡/브랜드메시지는 기업고객 전용 서비스입니다.</p>--%> |
|
| 464 | 465 |
<p>- 카카오 알림톡/친구톡은 기업고객 전용 서비스입니다.</p> |
| 465 | 466 |
</div> |
| 466 | 467 |
<div class="list_info"> |
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
... | ... | @@ -510,6 +510,7 @@ |
| 510 | 510 |
<div class="titBox_result"> |
| 511 | 511 |
<p>- 최대 3개월간의 발송내역만 확인하실 수 있습니다.</p> |
| 512 | 512 |
<p>- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.</p> |
| 513 |
+<%-- <p>- 기존 카카오 친구톡 서비스는 브랜드메시지로 변경되었습니다.</p>--%> |
|
| 513 | 514 |
</div> |
| 514 | 515 |
<!--// 발송결과 개선 : 문구추가 --> |
| 515 | 516 |
|
... | ... | @@ -646,6 +647,7 @@ |
| 646 | 647 |
<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
|
| 647 | 648 |
<li class="tab"><button type="button" onclick="fnTabLoad('at', 1); return false;">알림톡</button></li>
|
| 648 | 649 |
<li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li>
|
| 650 |
+<%-- <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">브랜드메시지</button></li>--%>
|
|
| 649 | 651 |
</ul><!--// tab button --> |
| 650 | 652 |
</div> |
| 651 | 653 |
<!-- 예약관리 > 전체 --> |
--- src/main/webapp/WEB-INF/jsp/web/pay/PayGuide.jsp
+++ src/main/webapp/WEB-INF/jsp/web/pay/PayGuide.jsp
... | ... | @@ -545,7 +545,7 @@ |
| 545 | 545 |
</table> |
| 546 | 546 |
<span class="reqTxt4">* 텍스트 용량(Byte)에 대한 안내 : 한글2Byte, 영문·숫자 1Byte를 차지.</span> |
| 547 | 547 |
|
| 548 |
- <p class="tType1_title"><img src="/publish/images/content/icon_fee2.png" alt="알림톡 아이콘 이미지"> 친구톡</p> |
|
| 548 |
+ <%-- <p class="tType1_title"><img src="/publish/images/content/icon_fee2.png" alt="알림톡 아이콘 이미지"> 친구톡</p> |
|
| 549 | 549 |
<table class="tType2"> |
| 550 | 550 |
<colgroup> |
| 551 | 551 |
<col style="width: 20%;"> |
... | ... | @@ -574,7 +574,31 @@ |
| 574 | 574 |
<td><span>22.9</span>원</td> |
| 575 | 575 |
</tr> |
| 576 | 576 |
</tbody> |
| 577 |
- </table> |
|
| 577 |
+ </table> --%> |
|
| 578 |
+ |
|
| 579 |
+ <p class="tType1_title"><img src="/publish/images/content/icon_fee2.png" alt="알림톡 아이콘 이미지"> 브랜드메시지</p> |
|
| 580 |
+ <table class="tType2"> |
|
| 581 |
+ <colgroup> |
|
| 582 |
+ <col style="width: 20%;"> |
|
| 583 |
+ <col style="width: 60%;"> |
|
| 584 |
+ <col style="width: 20%;"> |
|
| 585 |
+ </colgroup> |
|
| 586 |
+ <thead> |
|
| 587 |
+ <tr> |
|
| 588 |
+ <th>구분</th> |
|
| 589 |
+ <th>특징</th> |
|
| 590 |
+ <th>가격</th> |
|
| 591 |
+ </tr> |
|
| 592 |
+ </thead> |
|
| 593 |
+ <tbody> |
|
| 594 |
+ <tr> |
|
| 595 |
+ <th>브랜드메시지</th> |
|
| 596 |
+ <td>카카오톡을 통해 채널 친구 대상으로 발송이 가능한 광고성 메시지<br />(1,000자 이하의 텍스트 및 이미지 발송 가능)</td> |
|
| 597 |
+ <td>20원</td> |
|
| 598 |
+ </tr> |
|
| 599 |
+ </tbody> |
|
| 600 |
+ </table> |
|
| 601 |
+ <span class="reqTxt4">* 텍스트 용량(Byte)에 대한 안내 : 한글2Byte, 영문·숫자 1Byte를 차지.</span> |
|
| 578 | 602 |
|
| 579 | 603 |
<p class="tType1_title"><img src="/publish/images/content/icon_fee_fax.png" alt="팩스 아이콘 이미지"> 팩스</p> |
| 580 | 604 |
<table class="tType2"> |
+++ src/main/webapp/publish/.gitignore
... | ... | @@ -0,0 +1,0 @@ |
+++ src/main/webapp/publish/brandMsg_set.html
... | ... | @@ -0,0 +1,720 @@ |
| 1 | +<!DOCTYPE html> | |
| 2 | +<html lang="ko"> | |
| 3 | + | |
| 4 | +<head> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
| 7 | + <title>문자온_브랜드메시지 템플릿_리스트</title> | |
| 8 | + | |
| 9 | + <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap" | |
| 10 | + rel="stylesheet"> | |
| 11 | + <link rel="stylesheet" href="/publish/css/reset.css"> | |
| 12 | + <link rel="stylesheet" href="/publish/css/jquery.mCustomScrollbar.css"> | |
| 13 | + <link rel="stylesheet" href="/publish/css/common.css"> | |
| 14 | + <link rel="stylesheet" href="/publish/css/button.css"> | |
| 15 | + <link rel="stylesheet" href="/publish/css/content.css"> | |
| 16 | + <link rel="stylesheet" href="/publish/css/adrbook.css"> | |
| 17 | + <link rel="stylesheet" href="/publish/css/font.css"> | |
| 18 | + <link rel="stylesheet" href="/publish/css/popupLayer.css"> | |
| 19 | + <link rel="stylesheet" href="/publish/js/datepicker/classic.css"> | |
| 20 | + <link rel="stylesheet" href="/publish/js/datepicker/classic.date.css"> | |
| 21 | + | |
| 22 | + | |
| 23 | + <script src="/publish/js/jquery-3.5.0.js"></script> | |
| 24 | + <script src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script> | |
| 25 | + <script src="/publish/js/common.js"></script> | |
| 26 | + <script src="/publish/js/content.js"></script> | |
| 27 | + <script src="/publish/js/popup.js"></script> | |
| 28 | + <script src="/publish/js/popupLayer.js"></script> | |
| 29 | + <script type="text/javascript" src="/publish/js/datepicker/picker.js"></script> | |
| 30 | + <script type="text/javascript" src="/publish/js/datepicker/picker.date.js"></script> | |
| 31 | + <script type="text/javascript" src="/publish/js/datepicker/ko_KR.js"></script> | |
| 32 | + | |
| 33 | + | |
| 34 | +</head> | |
| 35 | + | |
| 36 | +<body> | |
| 37 | + <div class="skip_menu"> | |
| 38 | + <a href="#cont" title="본문 바로가기" class="contGo">본문 바로가기</a> | |
| 39 | + </div> | |
| 40 | + <!--// skip 메뉴 --> | |
| 41 | + | |
| 42 | + <!-- header 영역 --> | |
| 43 | + <header id="header" class="header sub "> | |
| 44 | + <!-- header top 영역 --> | |
| 45 | + <div class="header_top"> | |
| 46 | + <div class="inner"> | |
| 47 | + <ul class="menu_left"> | |
| 48 | + <li><a href="#"><i class="hdTop_fav"></i>즐겨찾기추가</a></li> | |
| 49 | + <li><a href="#"><i class="hdTop_mypage"></i>마이페이지</a></li> | |
| 50 | + <li><a href="#"><i class="hdTop_center"></i>고객센터</a></li> | |
| 51 | + </ul> | |
| 52 | + <ul class="menu_right"> | |
| 53 | + <li><a href="#">충전하기</a></li> | |
| 54 | + <li class="SortLine"><a href="#">요금안내</a></li> | |
| 55 | + <li class="SortLine"><a href="#">이용안내</a></li> | |
| 56 | + <li class="SortLine"><a href="#">1:1고객상담</a></li> | |
| 57 | + </ul> | |
| 58 | + </div> | |
| 59 | + </div><!-- header top 영역 --> | |
| 60 | + <!-- header body 영역 --> | |
| 61 | + <div class="header_body"> | |
| 62 | + <div class="inner table"> | |
| 63 | + <h1 class="logo"><a href="/publish/index.html" alt="문자온 메인 바로가기"><img src="/publish/images/CI.png" | |
| 64 | + alt="문자온 CI"></a></h1> | |
| 65 | + <ul class="gnbWrap table_cell"> | |
| 66 | + <li><a href="#">문자발송</a></li> | |
| 67 | + <li><a href="#">선거문자</a></li> | |
| 68 | + <li><a href="#">맞춤제작</a></li> | |
| 69 | + <li><a href="#">비즈톡</a></li> | |
| 70 | + <li><a href="#">주소록 관리</a></li> | |
| 71 | + <li><a href="#">발송결과</a></li> | |
| 72 | + <li><a href="#">예약관리</a></li> | |
| 73 | + <li><a href="#">결제내역</a></li> | |
| 74 | + </ul> | |
| 75 | + <div class="s_menu"> | |
| 76 | + <i class="allSearch_info"><span>문자검색</span></i> | |
| 77 | + <button type="button" title="전체검색" class="allSearch" onclick="searchToggle();"><img | |
| 78 | + src="/publish/images/search.png" alt="검색영역 열기" class="allMenu"></button> | |
| 79 | + <button type="button" title="전체메뉴"><img src="/publish/images/all_menu.png" alt="전체메뉴 열기"></button> | |
| 80 | + </div> | |
| 81 | + </div> | |
| 82 | + <!-- search popup 영역 --> | |
| 83 | + <div class="pop_search"> | |
| 84 | + <div class="inner"> | |
| 85 | + <div class="area_search"> | |
| 86 | + <select name="" id=""> | |
| 87 | + <option value="">그림문자</option> | |
| 88 | + <option value="">단문문자</option> | |
| 89 | + <option value="">장문문자</option> | |
| 90 | + <option value="">GIF</option> | |
| 91 | + </select> | |
| 92 | + <input type="text" placeholder="문자샘플 검색하기"> | |
| 93 | + <button><img src="/publish/images/search02.png" alt=""></button> | |
| 94 | + </div> | |
| 95 | + <div class="area_popular"> | |
| 96 | + <p><i></i>인기검색어</p> | |
| 97 | + <ul class="popular_tag"> | |
| 98 | + <li><a href="#">#정월대보름</a></li> | |
| 99 | + <li class="on"><a href="#">#추석</a></li> | |
| 100 | + <li><a href="#">#가을인사</a></li> | |
| 101 | + <li><a href="#">#좋은하루</a></li> | |
| 102 | + </ul> | |
| 103 | + </div> | |
| 104 | + <button class="btn_close" onclick="searchToggle();"><img src="/publish/images/btn_searchclose.png" | |
| 105 | + alt=""></button> | |
| 106 | + </div> | |
| 107 | + </div> | |
| 108 | + <!--// search popup 영역 --> | |
| 109 | + </div> | |
| 110 | + <!--// header body 영역 --> | |
| 111 | + <div id="login" class="login"> | |
| 112 | + <div class="inner table"> | |
| 113 | + <div class="login_left table_cell"> | |
| 114 | + <div class="login_put"> | |
| 115 | + <label for="id_text" class="label"></label> | |
| 116 | + <input type="text" placeholder="아이디를 입력해주세요" id="id_text" class="id_text" maxlength="30" | |
| 117 | + size="18"> | |
| 118 | + <label for="password_text" class="label"></label> | |
| 119 | + <input type="password" placeholder="비밀번호를 입력해주세요" id="password_text" class="password_text" | |
| 120 | + maxlength="30" size="18"> | |
| 121 | + <label for="login_button" class="label"></label> | |
| 122 | + <button type="submit" class="btnType btnType1" class="login_button">로그인</button> | |
| 123 | + </div> | |
| 124 | + <div class="login_save"> | |
| 125 | + <input type="checkbox" id="save_id"> | |
| 126 | + <label for="save_id">아이디 저장</label> | |
| 127 | + </div> | |
| 128 | + <div class="login_find"> | |
| 129 | + <a href="#">아이디찾기 /</a> | |
| 130 | + <a href="#">비밀번호 찾기</a> | |
| 131 | + </div> | |
| 132 | + <div> | |
| 133 | + <button type="button" class="btnType btnType2">회원가입</button> | |
| 134 | + <button type="button" class="btnType btnType3">둘러보기</button> | |
| 135 | + </div> | |
| 136 | + </div> | |
| 137 | + <div class="login_right"> | |
| 138 | + <span><i></i>이달의 이벤트</span> | |
| 139 | + <button type="button" class="btnType btnType4">바로가기</button> | |
| 140 | + </div> | |
| 141 | + </div> | |
| 142 | + </div> | |
| 143 | + <!--// login 영역 --> | |
| 144 | + </header> | |
| 145 | + <!--// header 영역 --> | |
| 146 | + <!-- login 영역 --> | |
| 147 | + <!-- content 영역 --> | |
| 148 | + <div id="container" class="cont sub"> | |
| 149 | + <div class="inner"> | |
| 150 | + <!-- send top --> | |
| 151 | + <div class="send_top"> | |
| 152 | + <!-- tab button --> | |
| 153 | + <ul class="tabType4"> | |
| 154 | + <li class="tab"><button type="button" onclick="location.href='/publish/kakao_allimtalk_send.html'">알림톡</button></li> | |
| 155 | + <li class="tab"><button type="button" onclick="location.href='/publish/kakao_friendtalk_send.html'">친구톡</button></li> | |
| 156 | + <li class="tab active"><button type="button" onclick="location.href='/publish/kakao_use_guide.html'">카카오톡 설정</button></li> | |
| 157 | + <li class="tab"><button type="button" onclick="TabType5(this,'4');">알림톡·친구톡 소개</button></li> | |
| 158 | + </ul> | |
| 159 | + <!--// tab button --> | |
| 160 | + <!-- 카카오톡 설정 - 알림톡 템플릿 등록/관리 - 내템플릿 --> | |
| 161 | + <div class="top_content kakaotalkset_cont current pay_tab_wrap"> | |
| 162 | + <div class="heading"> | |
| 163 | + <h2>카카오톡 설정</h2> | |
| 164 | + <button type="button" class="button info" onclick="infoListPop('brandMsgSet','792','340');">사용안내</button> | |
| 165 | + </div> | |
| 166 | + <div class="list_tab_wrap2 type2 "> | |
| 167 | + <!-- tab button --> | |
| 168 | + <ul class="list_tab"> | |
| 169 | + <li class="tab"><button type="button" onclick="location.href='/publish/kakao_use_guide.html'">사용안내</button></li> | |
| 170 | + <li class="tab"><button type="button" onclick="location.href='/publish/kakao_profile_add.html'">발신프로필 등록/관리</button></li> | |
| 171 | + <li class="tab"><button type="button" onclick="location.href='/publish/kakao_allimtalk_list.html'">알림톡 템플릿 등록/관리</button></li> | |
| 172 | + <li class="tab active"><button type="button" onclick="location.href='/publish/kakao_friendtalk_list.html'">브랜드메시지 템플릿 관리</button></li> | |
| 173 | + </ul> | |
| 174 | + <!--// tab button --> | |
| 175 | + </div> | |
| 176 | + | |
| 177 | + <div class="tab_content template_content_wrap friend_template_content current" id="tab_content_1"> | |
| 178 | + <!-- 검색조건 --> | |
| 179 | + <div class="excel_middle"> | |
| 180 | + <div class="select_btnWrap clearfix"> | |
| 181 | + <div class="btn_left"> | |
| 182 | + <span class="cal_label">등록일</span> | |
| 183 | + <div class="calendar_wrap"> | |
| 184 | + <input type="text" class="startDate inp calendar picker__input" title="검색 시작일" id="startDate" name="startDate" value="" data-datecontrol="true" readonly="" aria-haspopup="true" aria-expanded="false" aria-readonly="false" aria-owns="startDate_root"><div class="picker" id="startDate_root" aria-hidden="true"><div class="picker__holder" tabindex="-1"><div class="picker__frame"><div class="picker__wrap"><div class="picker__box"><div class="picker__header"><div class="picker__month">2월</div><div class="picker__year">2023</div><div class="picker__nav--prev" data-nav="-1" role="button" aria-controls="startDate_table" title="이전 달 보기"> </div><div class="picker__nav--next" data-nav="1" role="button" aria-controls="startDate_table" title="다음 달 보기"> </div></div><table class="picker__table" id="startDate_table" role="grid" aria-controls="startDate" aria-readonly="true"><thead><tr><th class="picker__weekday" scope="col" title="월요일">월</th><th class="picker__weekday" scope="col" title="화요일">화</th><th class="picker__weekday" scope="col" title="수요일">수</th><th class="picker__weekday" scope="col" title="목요일">목</th><th class="picker__weekday" scope="col" title="금요일">금</th><th class="picker__weekday" scope="col" title="토요일">토</th><th class="picker__weekday" scope="col" title="일요일">일</th></tr></thead><tbody><tr><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1675004400000" role="gridcell" aria-label="2023/01/30">30</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1675090800000" role="gridcell" aria-label="2023/01/31">31</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675177200000" role="gridcell" aria-label="2023/02/01">1</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675263600000" role="gridcell" aria-label="2023/02/02">2</div></td><td role="presentation"><div class="picker__day picker__day--infocus picker__day--today picker__day--highlighted" data-pick="1675350000000" role="gridcell" aria-label="2023/02/03" aria-activedescendant="true">3</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675436400000" role="gridcell" aria-label="2023/02/04">4</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675522800000" role="gridcell" aria-label="2023/02/05">5</div></td></tr><tr><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675609200000" role="gridcell" aria-label="2023/02/06">6</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675695600000" role="gridcell" aria-label="2023/02/07">7</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675782000000" role="gridcell" aria-label="2023/02/08">8</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675868400000" role="gridcell" aria-label="2023/02/09">9</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675954800000" role="gridcell" aria-label="2023/02/10">10</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676041200000" role="gridcell" aria-label="2023/02/11">11</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676127600000" role="gridcell" aria-label="2023/02/12">12</div></td></tr><tr><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676214000000" role="gridcell" aria-label="2023/02/13">13</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676300400000" role="gridcell" aria-label="2023/02/14">14</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676386800000" role="gridcell" aria-label="2023/02/15">15</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676473200000" role="gridcell" aria-label="2023/02/16">16</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676559600000" role="gridcell" aria-label="2023/02/17">17</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676646000000" role="gridcell" aria-label="2023/02/18">18</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676732400000" role="gridcell" aria-label="2023/02/19">19</div></td></tr><tr><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676818800000" role="gridcell" aria-label="2023/02/20">20</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676905200000" role="gridcell" aria-label="2023/02/21">21</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676991600000" role="gridcell" aria-label="2023/02/22">22</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1677078000000" role="gridcell" aria-label="2023/02/23">23</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1677164400000" role="gridcell" aria-label="2023/02/24">24</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1677250800000" role="gridcell" aria-label="2023/02/25">25</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1677337200000" role="gridcell" aria-label="2023/02/26">26</div></td></tr><tr><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1677423600000" role="gridcell" aria-label="2023/02/27">27</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1677510000000" role="gridcell" aria-label="2023/02/28">28</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1677596400000" role="gridcell" aria-label="2023/03/01">1</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1677682800000" role="gridcell" aria-label="2023/03/02">2</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1677769200000" role="gridcell" aria-label="2023/03/03">3</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1677855600000" role="gridcell" aria-label="2023/03/04">4</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1677942000000" role="gridcell" aria-label="2023/03/05">5</div></td></tr><tr><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678028400000" role="gridcell" aria-label="2023/03/06">6</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678114800000" role="gridcell" aria-label="2023/03/07">7</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678201200000" role="gridcell" aria-label="2023/03/08">8</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678287600000" role="gridcell" aria-label="2023/03/09">9</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678374000000" role="gridcell" aria-label="2023/03/10">10</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678460400000" role="gridcell" aria-label="2023/03/11">11</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678546800000" role="gridcell" aria-label="2023/03/12">12</div></td></tr></tbody></table><div class="picker__footer"><button class="picker__button--today" type="button" data-pick="1675350000000" disabled="" aria-controls="startDate">오늘</button><button class="picker__button--clear" type="button" data-clear="1" disabled="" aria-controls="startDate">초기화</button><button class="picker__button--close" type="button" data-close="true" disabled="" aria-controls="startDate">닫기</button></div></div></div></div></div></div><input type="hidden" name="startDate_submit"> | |
| 185 | + <span class="dateEtc">~</span> | |
| 186 | + <input type="text" class="endDate inp calendar picker__input" title="검색 종료일" id="endDate" name="endDate" value="" data-datecontrol="true" readonly="" aria-haspopup="true" aria-expanded="false" aria-readonly="false" aria-owns="endDate_root"><div class="picker" id="endDate_root" aria-hidden="true"><div class="picker__holder" tabindex="-1"><div class="picker__frame"><div class="picker__wrap"><div class="picker__box"><div class="picker__header"><div class="picker__month">2월</div><div class="picker__year">2023</div><div class="picker__nav--prev" data-nav="-1" role="button" aria-controls="endDate_table" title="이전 달 보기"> </div><div class="picker__nav--next" data-nav="1" role="button" aria-controls="endDate_table" title="다음 달 보기"> </div></div><table class="picker__table" id="endDate_table" role="grid" aria-controls="endDate" aria-readonly="true"><thead><tr><th class="picker__weekday" scope="col" title="월요일">월</th><th class="picker__weekday" scope="col" title="화요일">화</th><th class="picker__weekday" scope="col" title="수요일">수</th><th class="picker__weekday" scope="col" title="목요일">목</th><th class="picker__weekday" scope="col" title="금요일">금</th><th class="picker__weekday" scope="col" title="토요일">토</th><th class="picker__weekday" scope="col" title="일요일">일</th></tr></thead><tbody><tr><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1675004400000" role="gridcell" aria-label="2023/01/30">30</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1675090800000" role="gridcell" aria-label="2023/01/31">31</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675177200000" role="gridcell" aria-label="2023/02/01">1</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675263600000" role="gridcell" aria-label="2023/02/02">2</div></td><td role="presentation"><div class="picker__day picker__day--infocus picker__day--today picker__day--highlighted" data-pick="1675350000000" role="gridcell" aria-label="2023/02/03" aria-activedescendant="true">3</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675436400000" role="gridcell" aria-label="2023/02/04">4</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675522800000" role="gridcell" aria-label="2023/02/05">5</div></td></tr><tr><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675609200000" role="gridcell" aria-label="2023/02/06">6</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675695600000" role="gridcell" aria-label="2023/02/07">7</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675782000000" role="gridcell" aria-label="2023/02/08">8</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675868400000" role="gridcell" aria-label="2023/02/09">9</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1675954800000" role="gridcell" aria-label="2023/02/10">10</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676041200000" role="gridcell" aria-label="2023/02/11">11</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676127600000" role="gridcell" aria-label="2023/02/12">12</div></td></tr><tr><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676214000000" role="gridcell" aria-label="2023/02/13">13</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676300400000" role="gridcell" aria-label="2023/02/14">14</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676386800000" role="gridcell" aria-label="2023/02/15">15</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676473200000" role="gridcell" aria-label="2023/02/16">16</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676559600000" role="gridcell" aria-label="2023/02/17">17</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676646000000" role="gridcell" aria-label="2023/02/18">18</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676732400000" role="gridcell" aria-label="2023/02/19">19</div></td></tr><tr><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676818800000" role="gridcell" aria-label="2023/02/20">20</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676905200000" role="gridcell" aria-label="2023/02/21">21</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1676991600000" role="gridcell" aria-label="2023/02/22">22</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1677078000000" role="gridcell" aria-label="2023/02/23">23</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1677164400000" role="gridcell" aria-label="2023/02/24">24</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1677250800000" role="gridcell" aria-label="2023/02/25">25</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1677337200000" role="gridcell" aria-label="2023/02/26">26</div></td></tr><tr><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1677423600000" role="gridcell" aria-label="2023/02/27">27</div></td><td role="presentation"><div class="picker__day picker__day--infocus" data-pick="1677510000000" role="gridcell" aria-label="2023/02/28">28</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1677596400000" role="gridcell" aria-label="2023/03/01">1</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1677682800000" role="gridcell" aria-label="2023/03/02">2</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1677769200000" role="gridcell" aria-label="2023/03/03">3</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1677855600000" role="gridcell" aria-label="2023/03/04">4</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1677942000000" role="gridcell" aria-label="2023/03/05">5</div></td></tr><tr><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678028400000" role="gridcell" aria-label="2023/03/06">6</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678114800000" role="gridcell" aria-label="2023/03/07">7</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678201200000" role="gridcell" aria-label="2023/03/08">8</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678287600000" role="gridcell" aria-label="2023/03/09">9</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678374000000" role="gridcell" aria-label="2023/03/10">10</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678460400000" role="gridcell" aria-label="2023/03/11">11</div></td><td role="presentation"><div class="picker__day picker__day--outfocus" data-pick="1678546800000" role="gridcell" aria-label="2023/03/12">12</div></td></tr></tbody></table><div class="picker__footer"><button class="picker__button--today" type="button" data-pick="1675350000000" disabled="" aria-controls="endDate">오늘</button><button class="picker__button--clear" type="button" data-clear="1" disabled="" aria-controls="endDate">초기화</button><button class="picker__button--close" type="button" data-close="true" disabled="" aria-controls="endDate">닫기</button></div></div></div></div></div></div><input type="hidden" name="endDate_submit"> | |
| 187 | + </div> | |
| 188 | + <select name="searchCondition" id="searchCondition" class="selType2"> | |
| 189 | + <option value="2">등록상태</option> | |
| 190 | + <option value="3">심사필요</option> | |
| 191 | + <option value="4">심사요청</option> | |
| 192 | + <option value="5">반려</option> | |
| 193 | + <option value="6">승인</option> | |
| 194 | + <option value="7">정지</option> | |
| 195 | + </select> | |
| 196 | + <div class="search"> | |
| 197 | + <label for="id" class="label"></label> | |
| 198 | + <input type="text" class="search_input" id="searchKeyword" name="searchKeyword" value="" placeholder="검색어를 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요.'"> | |
| 199 | + <button type="button" class="btnType btnType2">검색</button> | |
| 200 | + </div> | |
| 201 | + </div> | |
| 202 | + </div> | |
| 203 | + </div> | |
| 204 | + <!-- //검색조건 --> | |
| 205 | + <div class="list_info"> | |
| 206 | + <div class="btn_wrap left"> | |
| 207 | + <button type="button" class="btnType btnType2 template_add" onclick="location.href='/publish/kakao_friendtalk_add.html'">템플릿 등록</button> | |
| 208 | + <button type="button" class="btnType btnType3 btn_list"><i></i>리스트</button> | |
| 209 | + <button type="button" class="btnType btnType3 btn_thumbnail"><i></i>썸네일</button> | |
| 210 | + </div> | |
| 211 | + <!-- <div class="btn_wrap right"> | |
| 212 | + <button type="button" class="btnType btnType8">템플릿 심사요청</button> | |
| 213 | + </div> --> | |
| 214 | + </div> | |
| 215 | + <!--<div class="thumbnail_content current"> | |
| 216 | + <ul class="kakao_template_list thumbnail_list"> | |
| 217 | + <li> | |
| 218 | + <div class="kakao_template_wrap"> | |
| 219 | + <div class="template_cont"> | |
| 220 | + <div class="title"> | |
| 221 | + <div class="check"> | |
| 222 | + <input type="checkbox"> | |
| 223 | + </div> | |
| 224 | + <p title="포인트 적립안내">(광고)munjaon</p> | |
| 225 | + </div> | |
| 226 | + <div class="allimtalk_content"> | |
| 227 | + <p class="template_text">[포인트 적립] | |
| 228 | + 쿼드커피에서 컨택포인트로 적립하셨네요! | |
| 229 | + 320p 적립 완료되어 고객님의 현재 포인트는 7,000P입니다. | |
| 230 | + | |
| 231 | + [포인트 정책] | |
| 232 | + 4,000P 이상 모으면 현금처럼 사용하실 수 있습니다.</p> | |
| 233 | + <button type="button" class="btn_kakao_type">버튼명</button> | |
| 234 | + </div> | |
| 235 | + </div> | |
| 236 | + <p class="cf_text">수신거부 | 홈 > 채널차단</p> | |
| 237 | + </div> | |
| 238 | + <div class="kakao_template_info"> | |
| 239 | + <dl> | |
| 240 | + <dt>등록일</dt> | |
| 241 | + <dd>2023.01.05 17:00 | |
| 242 | + <div class="btn_wrap"> | |
| 243 | + <button type="button" class="btn_template_edit" title="템플릿 수정"><img src="/publish/images/content/btn_template_edit.png" alt=""></button> | |
| 244 | + <button type="button" class="btn_template_delete" title="템플릿 삭제"><img src="/publish/images/content/btn_template_delete.png" alt=""></button> | |
| 245 | + </div> | |
| 246 | + </dd> | |
| 247 | + </dl> | |
| 248 | + </div> | |
| 249 | + </li> | |
| 250 | + <li> | |
| 251 | + <div class="kakao_template_wrap"> | |
| 252 | + <div class="template_cont"> | |
| 253 | + <div class="title"> | |
| 254 | + <div class="check"> | |
| 255 | + <input type="checkbox"> | |
| 256 | + </div> | |
| 257 | + <p title="포인트 적립안내">(광고)munjaon</p> | |
| 258 | + </div> | |
| 259 | + <div class="allimtalk_content"> | |
| 260 | + <p class="template_text">[포인트 적립] | |
| 261 | + 쿼드커피에서 컨택포인트로 적립하셨네요! | |
| 262 | + 320p 적립 완료되어 고객님의 현재 포인트는 7,000P입니다. | |
| 263 | + | |
| 264 | + [포인트 정책] | |
| 265 | + 4,000P 이상 모으면 현금처럼 사용하실 수 있습니다.</p> | |
| 266 | + <button type="button" class="btn_kakao_type">버튼명</button> | |
| 267 | + </div> | |
| 268 | + </div> | |
| 269 | + <p class="cf_text">수신거부 | 홈 > 채널차단</p> | |
| 270 | + </div> | |
| 271 | + <div class="kakao_template_info"> | |
| 272 | + <dl> | |
| 273 | + <dt>등록일</dt> | |
| 274 | + <dd>2023.01.05 17:00 | |
| 275 | + <div class="btn_wrap"> | |
| 276 | + <button type="button" class="btn_template_edit" title="템플릿 수정"><img src="/publish/images/content/btn_template_edit.png" alt=""></button> | |
| 277 | + <button type="button" class="btn_template_delete" title="템플릿 삭제"><img src="/publish/images/content/btn_template_delete.png" alt=""></button> | |
| 278 | + </div> | |
| 279 | + </dd> | |
| 280 | + </dl> | |
| 281 | + </div> | |
| 282 | + </li> | |
| 283 | + <li> | |
| 284 | + <div class="kakao_template_wrap"> | |
| 285 | + <div class="template_cont"> | |
| 286 | + <div class="title"> | |
| 287 | + <div class="check"> | |
| 288 | + <input type="checkbox"> | |
| 289 | + </div> | |
| 290 | + <p title="포인트 적립안내">(광고)munjaon</p> | |
| 291 | + </div> | |
| 292 | + <div class="allimtalk_content"> | |
| 293 | + <p class="template_text">[포인트 적립] | |
| 294 | + 쿼드커피에서 컨택포인트로 적립하셨네요! | |
| 295 | + 320p 적립 완료되어 고객님의 현재 포인트는 7,000P입니다. | |
| 296 | + | |
| 297 | + [포인트 정책] | |
| 298 | + 4,000P 이상 모으면 현금처럼 사용하실 수 있습니다.</p> | |
| 299 | + <button type="button" class="btn_kakao_type">버튼명</button> | |
| 300 | + </div> | |
| 301 | + </div> | |
| 302 | + <p class="cf_text">수신거부 | 홈 > 채널차단</p> | |
| 303 | + </div> | |
| 304 | + <div class="kakao_template_info"> | |
| 305 | + <dl> | |
| 306 | + <dt>등록일</dt> | |
| 307 | + <dd>2023.01.05 17:00 | |
| 308 | + <div class="btn_wrap"> | |
| 309 | + <button type="button" class="btn_template_edit" title="템플릿 수정"><img src="/publish/images/content/btn_template_edit.png" alt=""></button> | |
| 310 | + <button type="button" class="btn_template_delete" title="템플릿 삭제"><img src="/publish/images/content/btn_template_delete.png" alt=""></button> | |
| 311 | + </div> | |
| 312 | + </dd> | |
| 313 | + </dl> | |
| 314 | + </div> | |
| 315 | + </li> | |
| 316 | + <li> | |
| 317 | + <div class="kakao_template_wrap"> | |
| 318 | + <div class="template_cont"> | |
| 319 | + <div class="title"> | |
| 320 | + <div class="check"> | |
| 321 | + <input type="checkbox"> | |
| 322 | + </div> | |
| 323 | + <p title="포인트 적립안내">(광고)munjaon</p> | |
| 324 | + </div> | |
| 325 | + <div class="allimtalk_content"> | |
| 326 | + <p class="template_text">[포인트 적립] | |
| 327 | + 쿼드커피에서 컨택포인트로 적립하셨네요! | |
| 328 | + 320p 적립 완료되어 고객님의 현재 포인트는 7,000P입니다. | |
| 329 | + | |
| 330 | + [포인트 정책] | |
| 331 | + 4,000P 이상 모으면 현금처럼 사용하실 수 있습니다.</p> | |
| 332 | + <button type="button" class="btn_kakao_type">버튼명</button> | |
| 333 | + </div> | |
| 334 | + </div> | |
| 335 | + <p class="cf_text">수신거부 | 홈 > 채널차단</p> | |
| 336 | + </div> | |
| 337 | + <div class="kakao_template_info"> | |
| 338 | + <dl> | |
| 339 | + <dt>등록일</dt> | |
| 340 | + <dd>2023.01.05 17:00 | |
| 341 | + <div class="btn_wrap"> | |
| 342 | + <button type="button" class="btn_template_edit" title="템플릿 수정"><img src="/publish/images/content/btn_template_edit.png" alt=""></button> | |
| 343 | + <button type="button" class="btn_template_delete" title="템플릿 삭제"><img src="/publish/images/content/btn_template_delete.png" alt=""></button> | |
| 344 | + </div> | |
| 345 | + </dd> | |
| 346 | + </dl> | |
| 347 | + </div> | |
| 348 | + </li> | |
| 349 | + <li> | |
| 350 | + <div class="kakao_template_wrap"> | |
| 351 | + <div class="template_cont"> | |
| 352 | + <div class="title"> | |
| 353 | + <div class="check"> | |
| 354 | + <input type="checkbox"> | |
| 355 | + </div> | |
| 356 | + <p title="포인트 적립안내">(광고)munjaon</p> | |
| 357 | + </div> | |
| 358 | + <div class="allimtalk_content"> | |
| 359 | + <p class="template_text">[포인트 적립] | |
| 360 | + 쿼드커피에서 컨택포인트로 적립하셨네요! | |
| 361 | + 320p 적립 완료되어 고객님의 현재 포인트는 7,000P입니다. | |
| 362 | + | |
| 363 | + [포인트 정책] | |
| 364 | + 4,000P 이상 모으면 현금처럼 사용하실 수 있습니다.</p> | |
| 365 | + <button type="button" class="btn_kakao_type">버튼명</button> | |
| 366 | + </div> | |
| 367 | + </div> | |
| 368 | + <p class="cf_text">수신거부 | 홈 > 채널차단</p> | |
| 369 | + </div> | |
| 370 | + <div class="kakao_template_info"> | |
| 371 | + <dl> | |
| 372 | + <dt>등록일</dt> | |
| 373 | + <dd>2023.01.05 17:00 | |
| 374 | + <div class="btn_wrap"> | |
| 375 | + <button type="button" class="btn_template_edit" title="템플릿 수정"><img src="/publish/images/content/btn_template_edit.png" alt=""></button> | |
| 376 | + <button type="button" class="btn_template_delete" title="템플릿 삭제"><img src="/publish/images/content/btn_template_delete.png" alt=""></button> | |
| 377 | + </div> | |
| 378 | + </dd> | |
| 379 | + </dl> | |
| 380 | + </div> | |
| 381 | + </li> | |
| 382 | + <li> | |
| 383 | + <div class="kakao_template_wrap"> | |
| 384 | + <div class="template_cont"> | |
| 385 | + <div class="title"> | |
| 386 | + <div class="check"> | |
| 387 | + <input type="checkbox"> | |
| 388 | + </div> | |
| 389 | + <p title="포인트 적립안내">(광고)munjaon</p> | |
| 390 | + </div> | |
| 391 | + <div class="allimtalk_content"> | |
| 392 | + <p class="template_text">[포인트 적립] | |
| 393 | + 쿼드커피에서 컨택포인트로 적립하셨네요! | |
| 394 | + 320p 적립 완료되어 고객님의 현재 포인트는 7,000P입니다. | |
| 395 | + | |
| 396 | + [포인트 정책] | |
| 397 | + 4,000P 이상 모으면 현금처럼 사용하실 수 있습니다.</p> | |
| 398 | + <button type="button" class="btn_kakao_type">버튼명</button> | |
| 399 | + </div> | |
| 400 | + </div> | |
| 401 | + <p class="cf_text">수신거부 | 홈 > 채널차단</p> | |
| 402 | + </div> | |
| 403 | + <div class="kakao_template_info"> | |
| 404 | + <dl> | |
| 405 | + <dt>등록일</dt> | |
| 406 | + <dd>2023.01.05 17:00 | |
| 407 | + <div class="btn_wrap"> | |
| 408 | + <button type="button" class="btn_template_edit" title="템플릿 수정"><img src="/publish/images/content/btn_template_edit.png" alt=""></button> | |
| 409 | + <button type="button" class="btn_template_delete" title="템플릿 삭제"><img src="/publish/images/content/btn_template_delete.png" alt=""></button> | |
| 410 | + </div> | |
| 411 | + </dd> | |
| 412 | + </dl> | |
| 413 | + </div> | |
| 414 | + </li> | |
| 415 | + <li> | |
| 416 | + <div class="kakao_template_wrap"> | |
| 417 | + <div class="template_cont"> | |
| 418 | + <div class="title"> | |
| 419 | + <div class="check"> | |
| 420 | + <input type="checkbox"> | |
| 421 | + </div> | |
| 422 | + <p title="포인트 적립안내">(광고)munjaon</p> | |
| 423 | + </div> | |
| 424 | + <div class="allimtalk_content"> | |
| 425 | + <p class="template_text">[포인트 적립] | |
| 426 | + 쿼드커피에서 컨택포인트로 적립하셨네요! | |
| 427 | + 320p 적립 완료되어 고객님의 현재 포인트는 7,000P입니다. | |
| 428 | + | |
| 429 | + [포인트 정책] | |
| 430 | + 4,000P 이상 모으면 현금처럼 사용하실 수 있습니다.</p> | |
| 431 | + <button type="button" class="btn_kakao_type">버튼명</button> | |
| 432 | + </div> | |
| 433 | + </div> | |
| 434 | + <p class="cf_text">수신거부 | 홈 > 채널차단</p> | |
| 435 | + </div> | |
| 436 | + <div class="kakao_template_info"> | |
| 437 | + <dl> | |
| 438 | + <dt>등록일</dt> | |
| 439 | + <dd>2023.01.05 17:00 | |
| 440 | + <div class="btn_wrap"> | |
| 441 | + <button type="button" class="btn_template_edit" title="템플릿 수정"><img src="/publish/images/content/btn_template_edit.png" alt=""></button> | |
| 442 | + <button type="button" class="btn_template_delete" title="템플릿 삭제"><img src="/publish/images/content/btn_template_delete.png" alt=""></button> | |
| 443 | + </div> | |
| 444 | + </dd> | |
| 445 | + </dl> | |
| 446 | + </div> | |
| 447 | + </li> | |
| 448 | + <li> | |
| 449 | + <div class="kakao_template_wrap"> | |
| 450 | + <div class="template_cont"> | |
| 451 | + <div class="title"> | |
| 452 | + <div class="check"> | |
| 453 | + <input type="checkbox"> | |
| 454 | + </div> | |
| 455 | + <p title="포인트 적립안내">(광고)munjaon</p> | |
| 456 | + </div> | |
| 457 | + <div class="allimtalk_content"> | |
| 458 | + <p class="template_text">[포인트 적립] | |
| 459 | + 쿼드커피에서 컨택포인트로 적립하셨네요! | |
| 460 | + 320p 적립 완료되어 고객님의 현재 포인트는 7,000P입니다. | |
| 461 | + | |
| 462 | + [포인트 정책] | |
| 463 | + 4,000P 이상 모으면 현금처럼 사용하실 수 있습니다.</p> | |
| 464 | + <button type="button" class="btn_kakao_type">버튼명</button> | |
| 465 | + </div> | |
| 466 | + </div> | |
| 467 | + <p class="cf_text">수신거부 | 홈 > 채널차단</p> | |
| 468 | + </div> | |
| 469 | + <div class="kakao_template_info"> | |
| 470 | + <dl> | |
| 471 | + <dt>등록일</dt> | |
| 472 | + <dd>2023.01.05 17:00 | |
| 473 | + <div class="btn_wrap"> | |
| 474 | + <button type="button" class="btn_template_edit" title="템플릿 수정"><img src="/publish/images/content/btn_template_edit.png" alt=""></button> | |
| 475 | + <button type="button" class="btn_template_delete" title="템플릿 삭제"><img src="/publish/images/content/btn_template_delete.png" alt=""></button> | |
| 476 | + </div> | |
| 477 | + </dd> | |
| 478 | + </dl> | |
| 479 | + </div> | |
| 480 | + </li> | |
| 481 | + </ul> | |
| 482 | + </div> --> | |
| 483 | + <div class="list_content current" style="display:block;"> | |
| 484 | + <div class="tb_wrap"> | |
| 485 | + <table class="tType4"> | |
| 486 | + <colgroup> | |
| 487 | + <col style="width: 70px;"> | |
| 488 | + <col style="width: 15%;"> | |
| 489 | + <col style="width: auto;"> | |
| 490 | + <col style="width: 15%;"> | |
| 491 | + <col style="width: 15%;"> | |
| 492 | + </colgroup> | |
| 493 | + <thead> | |
| 494 | + <tr> | |
| 495 | + <th> | |
| 496 | + <label for="chkAll" class="label">전체 선택</label> | |
| 497 | + <input type="checkbox" id="chkAll"> | |
| 498 | + </th> | |
| 499 | + <th>카카오톡 채널 아이디</th> | |
| 500 | + <th>템플릿명</th> | |
| 501 | + <th>템플릿 유형</th> | |
| 502 | + <th>등록일</th> | |
| 503 | + </tr> | |
| 504 | + </thead> | |
| 505 | + <tbody> | |
| 506 | + <tr> | |
| 507 | + <td> | |
| 508 | + <label for="profile_1" class="label">선택</label> | |
| 509 | + <input name="kakao_profile" id="profile_1" type="checkbox"> | |
| 510 | + </td> | |
| 511 | + <td>@문자온</td> | |
| 512 | + <td>템플릿이름1</td> | |
| 513 | + <td>텍스트</td> | |
| 514 | + <td>2021-03-22</td> | |
| 515 | + </tr> | |
| 516 | + </tbody> | |
| 517 | + </table> | |
| 518 | + </div> | |
| 519 | + </div> | |
| 520 | + <div class="table_btn clearfix"> | |
| 521 | + <button type="button" class="btnType btnType15"><i class="add_img"></i>전체선택</button> | |
| 522 | + <button type="button" class="btnType btnType15"><i class="remove_img"></i>선택삭제</button> | |
| 523 | + </div> | |
| 524 | + <!-- pagination --> | |
| 525 | + <ul class="pagination"> | |
| 526 | + <li class="page_first"><button><img src="/publish/images/content/page_first.png"alt=""></button></li> | |
| 527 | + <li class="page_prev"><button><img src="/publish/images/content/page_prev.png"alt=""></button></li> | |
| 528 | + <li class="on"><button>1</button></li> | |
| 529 | + <li><button>2</button></li> | |
| 530 | + <li><button>3</button></li> | |
| 531 | + <li><button>4</button></li> | |
| 532 | + <li><button>5</button></li> | |
| 533 | + <li><button>6</button></li> | |
| 534 | + <li><button>7</button></li> | |
| 535 | + <li><button>8</button></li> | |
| 536 | + <li><button>9</button></li> | |
| 537 | + <li><button>10</button></li> | |
| 538 | + <li class="page_next"><button><img src="/publish/images/content/page_next.png"alt=""></button></li> | |
| 539 | + <li class="page_last"><button><img src="/publish/images/content/page_last.png"alt=""></button></li> | |
| 540 | + </ul><!-- pagination --> | |
| 541 | + </div> | |
| 542 | + <div class="tab_content template_sample_content_wrap" id="tab_content_2"> | |
| 543 | + <!-- 검색조건 --> | |
| 544 | + <div class="excel_middle"> | |
| 545 | + <div class="select_btnWrap clearfix"> | |
| 546 | + <div class="btn_left"> | |
| 547 | + <span class="cal_label">템플릿 유형</span> | |
| 548 | + <select name="searchCondition" id="searchCondition" class="selType2"> | |
| 549 | + <option value="2">등록상태</option> | |
| 550 | + <option value="3">심사필요</option> | |
| 551 | + <option value="4">심사요청</option> | |
| 552 | + <option value="5">반려</option> | |
| 553 | + <option value="6">승인</option> | |
| 554 | + <option value="7">정지</option> | |
| 555 | + </select> | |
| 556 | + <div class="search"> | |
| 557 | + <label for="id" class="label"></label> | |
| 558 | + <input type="text" class="search_input" id="searchKeyword" name="searchKeyword" value="" placeholder="검색어를 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요.'"> | |
| 559 | + <button type="button" class="btnType btnType2">검색</button> | |
| 560 | + </div> | |
| 561 | + </div> | |
| 562 | + </div> | |
| 563 | + </div> | |
| 564 | + <!-- //검색조건 --> | |
| 565 | + <ul class="adr_depth3"> | |
| 566 | + <li class="tab active"><button type="button" onclick="listTab(this,'1');">BEST</button></li> | |
| 567 | + <li class="tab"><button type="button" onclick="listTab(this,'2');">병원</button></li> | |
| 568 | + <li class="tab"><button type="button" onclick="listTab(this,'3');">쇼핑</button></li> | |
| 569 | + <li class="tab"><button type="button" onclick="listTab(this,'4');">배송/배달</button></li> | |
| 570 | + <li class="tab"><button type="button" onclick="listTab(this,'5');">교육</button></li> | |
| 571 | + <li class="tab"><button type="button" onclick="listTab(this,'6');">금융/보험</button></li> | |
| 572 | + <li class="tab"><button type="button" onclick="listTab(this,'7');">여행</button></li> | |
| 573 | + <li class="tab"><button type="button" onclick="listTab(this,'8');">고객관리</button></li> | |
| 574 | + <li class="tab"><button type="button" onclick="listTab(this,'9');">안내</button></li> | |
| 575 | + </ul> | |
| 576 | + <div class="thumbnail_content"> | |
| 577 | + <ul class="kakao_template_list thumbnail_list"> | |
| 578 | + <li> | |
| 579 | + <div class="kakao_template_wrap"> | |
| 580 | + <div class="template_cont"> | |
| 581 | + <div class="title"> | |
| 582 | + <div class="check"> | |
| 583 | + <input type="checkbox"> | |
| 584 | + </div> | |
| 585 | + <p title="포인트 적립안내">포인트 적립안내</p> | |
| 586 | + </div> | |
| 587 | + <div class="img_box"> | |
| 588 | + <img src="/publish/images/kakao_template_img.png" alt=""> | |
| 589 | + </div> | |
| 590 | + <div class="text_box"> | |
| 591 | + <p>[포인트 적립] | |
| 592 | + 쿼드커피에서 컨택포인트로 적립하셨네요! | |
| 593 | + 320p 적립 완료되어 고객님의 현재 포인트는 7,000P입니다. | |
| 594 | + | |
| 595 | + [포인트 정책] | |
| 596 | + 4,000P 이상 모으면 현금처럼 사용하실 수 있습니다. | |
| 597 | + </p> | |
| 598 | + </div> | |
| 599 | + </div> | |
| 600 | + </div> | |
| 601 | + <div class="btn_wrap"> | |
| 602 | + <button type="button" class="btnType btnType3 btn_template_use">템플릿 사용하기</button> | |
| 603 | + </div> | |
| 604 | + </li> | |
| 605 | + <li> | |
| 606 | + <div class="kakao_template_wrap"> | |
| 607 | + <div class="template_cont"> | |
| 608 | + <div class="title"> | |
| 609 | + <div class="check"> | |
| 610 | + <input type="checkbox"> | |
| 611 | + </div> | |
| 612 | + <p title="포인트 적립안내">포인트 적립안내</p> | |
| 613 | + </div> | |
| 614 | + <div class="img_box"> | |
| 615 | + <img src="/publish/images/kakao_template_img.png" alt=""> | |
| 616 | + </div> | |
| 617 | + <div class="text_box"> | |
| 618 | + <p>[포인트 적립] | |
| 619 | + 쿼드커피에서 컨택포인트로 적립하셨네요! | |
| 620 | + 320p 적립 완료되어 고객님의 현재 포인트는 7,000P입니다. | |
| 621 | + | |
| 622 | + [포인트 정책] | |
| 623 | + 4,000P 이상 모으면 현금처럼 사용하실 수 있습니다. | |
| 624 | + </p> | |
| 625 | + </div> | |
| 626 | + </div> | |
| 627 | + </div> | |
| 628 | + <div class="btn_wrap"> | |
| 629 | + <button type="button" class="btnType btnType3 btn_template_use">템플릿 사용하기</button> | |
| 630 | + </div> | |
| 631 | + </li> | |
| 632 | + <li> | |
| 633 | + <div class="kakao_template_wrap"> | |
| 634 | + <div class="template_cont"> | |
| 635 | + <div class="title"> | |
| 636 | + <div class="check"> | |
| 637 | + <input type="checkbox"> | |
| 638 | + </div> | |
| 639 | + <p title="포인트 적립안내">포인트 적립안내</p> | |
| 640 | + </div> | |
| 641 | + <div class="img_box"> | |
| 642 | + <img src="/publish/images/kakao_template_img.png" alt=""> | |
| 643 | + </div> | |
| 644 | + <div class="text_box"> | |
| 645 | + <p>[포인트 적립] | |
| 646 | + 쿼드커피에서 컨택포인트로 적립하셨네요! | |
| 647 | + 320p 적립 완료되어 고객님의 현재 포인트는 7,000P입니다. | |
| 648 | + | |
| 649 | + [포인트 정책] | |
| 650 | + 4,000P 이상 모으면 현금처럼 사용하실 수 있습니다. | |
| 651 | + </p> | |
| 652 | + </div> | |
| 653 | + </div> | |
| 654 | + </div> | |
| 655 | + <div class="btn_wrap"> | |
| 656 | + <button type="button" class="btnType btnType3 btn_template_use">템플릿 사용하기</button> | |
| 657 | + </div> | |
| 658 | + </li> | |
| 659 | + <li> | |
| 660 | + <div class="kakao_template_wrap"> | |
| 661 | + <div class="template_cont"> | |
| 662 | + <div class="title"> | |
| 663 | + <div class="check"> | |
| 664 | + <input type="checkbox"> | |
| 665 | + </div> | |
| 666 | + <p title="포인트 적립안내">포인트 적립안내</p> | |
| 667 | + </div> | |
| 668 | + <div class="img_box"> | |
| 669 | + <img src="/publish/images/kakao_template_img.png" alt=""> | |
| 670 | + </div> | |
| 671 | + <div class="text_box"> | |
| 672 | + <p>[포인트 적립] | |
| 673 | + 쿼드커피에서 컨택포인트로 적립하셨네요! | |
| 674 | + 320p 적립 완료되어 고객님의 현재 포인트는 7,000P입니다. | |
| 675 | + | |
| 676 | + [포인트 정책] | |
| 677 | + 4,000P 이상 모으면 현금처럼 사용하실 수 있습니다. | |
| 678 | + </p> | |
| 679 | + </div> | |
| 680 | + </div> | |
| 681 | + </div> | |
| 682 | + <div class="btn_wrap"> | |
| 683 | + <button type="button" class="btnType btnType3 btn_template_use">템플릿 사용하기</button> | |
| 684 | + </div> | |
| 685 | + </li> | |
| 686 | + </ul> | |
| 687 | + </div> | |
| 688 | + | |
| 689 | + <!-- pagination --> | |
| 690 | + <ul class="pagination"> | |
| 691 | + <li class="page_first"><button><img src="/publish/images/content/page_first.png"alt=""></button></li> | |
| 692 | + <li class="page_prev"><button><img src="/publish/images/content/page_prev.png"alt=""></button></li> | |
| 693 | + <li class="on"><button>1</button></li> | |
| 694 | + <li><button>2</button></li> | |
| 695 | + <li><button>3</button></li> | |
| 696 | + <li><button>4</button></li> | |
| 697 | + <li><button>5</button></li> | |
| 698 | + <li><button>6</button></li> | |
| 699 | + <li><button>7</button></li> | |
| 700 | + <li><button>8</button></li> | |
| 701 | + <li><button>9</button></li> | |
| 702 | + <li><button>10</button></li> | |
| 703 | + <li class="page_next"><button><img src="/publish/images/content/page_next.png"alt=""></button></li> | |
| 704 | + <li class="page_last"><button><img src="/publish/images/content/page_last.png"alt=""></button></li> | |
| 705 | + </ul><!-- pagination --> | |
| 706 | + </div> | |
| 707 | + | |
| 708 | + </div> | |
| 709 | + </div> | |
| 710 | + </div> | |
| 711 | + <!--// send top --> | |
| 712 | + </div> | |
| 713 | + </div> | |
| 714 | + <!--// content 영역 --> | |
| 715 | + <!-- footer --> | |
| 716 | + <div data-include-path="/publish/layout/_footer.html"></div> | |
| 717 | + <!--// footer 영역 --> | |
| 718 | +</body> | |
| 719 | + | |
| 720 | +</html>(No newline at end of file) |
--- src/main/webapp/publish/css/content.css
+++ src/main/webapp/publish/css/content.css
... | ... | @@ -2062,11 +2062,12 @@ |
| 2062 | 2062 |
.kakao_intro_cont .friendtalk .kakao_intro .con .intro ul li{margin:0 0 19px 0;}
|
| 2063 | 2063 |
.kakao_intro_cont .friendtalk .kakao_intro .con .intro ul li p:nth-child(2){display:flex;line-height:1;height:auto;justify-content:center;align-items:center;padding:22px 0 18px 0;font-family:'GmarketSansMedium';}
|
| 2064 | 2064 |
.kakao_intro_cont .friendtalk .kakao_intro .con .intro ul li p:nth-child(2) span{display:inline-block;font-family:'GmarketSansBold';margin:0 4px;}
|
| 2065 |
+.kakao_intro_cont .friendtalk .kakao_intro .con .intro ul li p:nth-child(2) strong{font-size:14px;}
|
|
| 2065 | 2066 |
.kakao_intro_cont .friendtalk .kakao_intro .con .intro ul li:nth-child(4) p:nth-child(2){height:auto;line-height:1;padding:24px 0 18px 0;}
|
| 2066 | 2067 |
.kakao_intro_cont .friendtalk .kakao_intro .con .intro .phone{width:auto;height:100%;margin:-20px 0 0 -15px;}
|
| 2067 | 2068 |
|
| 2068 | 2069 |
.kakao_intro_cont .friendtalk .kakao_intro .fight .wrap{max-width:1024px;gap:50px;justify-content:center;}
|
| 2069 |
-.kakao_intro_cont .friendtalk .kakao_intro .con .fight .fight-title{width:250px;}
|
|
| 2070 |
+.kakao_intro_cont .friendtalk .kakao_intro .con .fight .fight-title{width:330px;}
|
|
| 2070 | 2071 |
.kakao_intro_cont .friendtalk .kakao_intro .vs{display:flex;width:calc((100% - 200px) / 2);flex-direction:column;align-items:center;gap:20px;}
|
| 2071 | 2072 |
.kakao_intro_cont .friendtalk .kakao_intro .vs.vs_title{width:100px;}
|
| 2072 | 2073 |
.kakao_intro_cont .friendtalk .kakao_intro .vs .title{height:34px;padding:5px 30px 3px;border-radius:35px;background:#E4E6EA;font-family:'GmarketSansBold';color:#666;font-size:20px;line-height:35px;}
|
... | ... | @@ -2303,7 +2304,7 @@ |
| 2303 | 2304 |
.send_top .resultcont_right .phone_kakako .phoneIn .template_info_wrap .btn_template_choice{width: 120px; height: 36px; font-size: 16px; color: #fae100; background-color: #302218; border-radius: 5px;}
|
| 2304 | 2305 |
.send_top .resultcont_right .phone_kakako .addText{color: #002c9a;text-align: center; font-size: 14px; padding-top: 2px; margin:10px 0 10px 0;}
|
| 2305 | 2306 |
|
| 2306 |
-.send_top .resultcont_right .phone_kakako.friendtalk .phoneIn .text_preview .allimtalk_content{border-radius:5px;}
|
|
| 2307 |
+.send_top .resultcont_right .phone_kakako.friendtalk .phoneIn .text_preview .allimtalk_content{border-radius:5px;overflow:hidden;}
|
|
| 2307 | 2308 |
.send_top .resultcont_right .phone_kakako.friendtalk .friend_talk_title{margin:0 0 10px 0;font-size:15px;color:#777;}
|
| 2308 | 2309 |
.send_top .resultcont_right .phone_kakako.friendtalk .kakao_block_text{width:calc(100% - 20px);text-align:right;font-size:13px;color:#555;font-weight:300;margin:10px 0 0 0;}
|
| 2309 | 2310 |
|
--- src/main/webapp/publish/css/popupLayer.css
+++ src/main/webapp/publish/css/popupLayer.css
... | ... | @@ -1,7 +1,7 @@ |
| 1 | 1 |
/* 공통영역 */ |
| 2 | 2 |
.tooltip-wrap {position: relative; z-index: 100;}
|
| 3 | 3 |
.popup-com {display: none;position: fixed; border-radius: 10px;background-color: #fff;box-shadow: 5px 5px 15px rgba(0,0,0,0.5); overflow: hidden;opacity:0;transition:opacity 0.3s;}
|
| 4 |
-.popup-com .popup_heading {background-color: #fbc72b; position: relative; padding: 15px 20px; }
|
|
| 4 |
+.popup-com .popup_heading {background-color: #fbc72b; position: relative; padding: 15px 20px; border-radius:}
|
|
| 5 | 5 |
.popup-com .popup_heading p {font-size: 22px; font-weight: 600;}
|
| 6 | 6 |
.popup-com .popup_heading button {position: absolute; top: 50%; transform: translateY(-50%); right: 20px;}
|
| 7 | 7 |
.popup-com .titBox>button {height: 36px;}
|
... | ... | @@ -13,6 +13,8 @@ |
| 13 | 13 |
|
| 14 | 14 |
.mask {left:-9999%;top:-9999%;}
|
| 15 | 15 |
.mask.on {overflow:hidden;position:fixed;left:0;top:0;width:100%;min-width:1920px;height:100%;background: rgba(0,0,0,0.5);z-index:99;}
|
| 16 |
+ |
|
| 17 |
+.alert_layer_popup .layer_in{padding:40px 30px;text-align:center;font-size:18px;font-weight:400;line-height:1.4;}
|
|
| 16 | 18 |
|
| 17 | 19 |
/* 공통 */ |
| 18 | 20 |
.popup_search_wrap.type2{margin: 0 0 30px 0; padding: 15px 20px; border-radius: 5px;}
|
... | ... | @@ -172,9 +174,8 @@ |
| 172 | 174 |
.custom_layer .body_cont table tr.custom_put1 td .custom_put1_list {padding-bottom: 8px; border-bottom: 1px solid #d5d5d5; margin-bottom: 6px;}
|
| 173 | 175 |
.custom_layer .body_cont table tr.custom_put1 td .custom_put1_list .price {position: absolute; right: 0px; color: #555; font-weight: 300;}
|
| 174 | 176 |
.custom_layer .body_cont table tr.custom_put1 td .custom_put1_list .price span {font-weight: 500;}
|
| 175 |
-.custom_layer .body_cont table tr.custom_put1 td .custom_put1_txt {margin-top: 14px;}
|
|
| 176 |
-.custom_layer .body_cont table tr.custom_put1 td .custom_put1_txt p {font-size: 14px; color: #333; font-wieght: 300;}
|
|
| 177 |
-.custom_layer .body_cont table tr.custom_put1 td .custom_put1_txt p:first-child {margin-bottom: 10px;}
|
|
| 177 |
+.custom_layer .body_cont table tr.custom_put1 td .custom_put1_txt {margin-top:8px;}
|
|
| 178 |
+.custom_layer .body_cont table tr.custom_put1 td .custom_put1_txt p {font-size: 14px; color: #333; font-wieght: 300; line-height:1.2;}
|
|
| 178 | 179 |
/* 제공방법 */ |
| 179 | 180 |
.custom_layer .body_cont table tr.custom_put2 th {vertical-align: middle;}
|
| 180 | 181 |
.custom_layer .body_cont table tr.custom_put2 td {vertical-align:middle; height: 50px; display: flex; align-items: center;}
|
... | ... | @@ -1098,7 +1099,8 @@ |
| 1098 | 1099 |
.kakao_rev_popup .kakao_wrap .friendtalk .kakao_image{border-radius:5px 5px 0 0;overflow:hidden;}
|
| 1099 | 1100 |
.kakao_rev_popup .kakao_wrap .friendtalk .rev_pop_txt{padding:20px;}
|
| 1100 | 1101 |
.kakao_rev_popup .kakao_wrap .friendtalk .rev_pop_txt p {margin:0 0 10px 0;font-size: 15px;color:#777;}
|
| 1101 |
-.kakao_rev_popup .kakao_wrap .friendtalk .rev_pop_txt .template_text{padding:10px 10px 0 10px;}
|
|
| 1102 |
+.kakao_rev_popup .kakao_wrap .friendtalk .rev_pop_txt .template_text,.kakao_rev_popup .kakao_wrap .friendtalk .rev_pop_txt .allimtalk_content p{padding:10px 10px 0 10px;}
|
|
| 1103 |
+.kakao_rev_popup .kakao_wrap .friendtalk .rev_pop_txt .allimtalk_content .emphasis_title_text{padding:10px 10px 15px 10px;}
|
|
| 1102 | 1104 |
.kakao_rev_popup .kakao_wrap .friendtalk .rev_pop_txt p.kakao_block_text{width:calc(100% - 60px);text-align:right;font-size:13px;color:#555;font-weight:300;margin:10px 0 0 0;}
|
| 1103 | 1105 |
|
| 1104 | 1106 |
/* 카카오테스트발송 팝업 */ |
... | ... | @@ -1279,6 +1281,11 @@ |
| 1279 | 1281 |
.info_guide_popup .layer_in .info_guide_sub{margin: -20px 0 0 0; font-size: 14px; color: #666; font-weight: 300; line-height: 1.5;}
|
| 1280 | 1282 |
.info_guide_popup .layer_in .info_guide_sub span{color: #222; font-weight: 400;}
|
| 1281 | 1283 |
|
| 1284 |
+/* 친구톡 서비스 중단 */ |
|
| 1285 |
+.service_stop_popup{left:50%;top:50%;transform:translate(-50%,-50%);}
|
|
| 1286 |
+.service_stop_popup .layer_in b{font-weight:600;}
|
|
| 1287 |
+.service_stop_popup .layer_in .popup_btn{margin:20px 0 0 0;}
|
|
| 1288 |
+ |
|
| 1282 | 1289 |
/* ie */ |
| 1283 | 1290 |
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
|
| 1284 | 1291 |
/* 특수문자 */ |
+++ src/main/webapp/publish/css/style.css
... | ... | @@ -0,0 +1,344 @@ |
| 1 | +:root{
| |
| 2 | + --primary-color: #002c9a; | |
| 3 | + --primary-color-hover: #002788; | |
| 4 | + --primary-light-color: #E8F0FF; | |
| 5 | + --primary-light-color-hover: #97b1e1; | |
| 6 | + | |
| 7 | + --secondary-color: #eea301; | |
| 8 | + --secondary-color-hover: #FFAE00; | |
| 9 | + --secondary-light-color: #FBC72B; | |
| 10 | + --secondary-light-color-hover: #F6BB08; | |
| 11 | + | |
| 12 | + | |
| 13 | + --red-color: #E40000; | |
| 14 | + --red-color-hover: #D70202; | |
| 15 | + --red-light-color: #ffe5e5; | |
| 16 | + | |
| 17 | + | |
| 18 | + --green-color: #19B32B; | |
| 19 | + --green-color-hover: #0E9A1F; | |
| 20 | + | |
| 21 | + --gray-color: #6A6C72; | |
| 22 | + --gray-color-hover: #56585e; | |
| 23 | + --lightgray-color: #999999; | |
| 24 | + --lightgray-color-hover: #a3a3a3; | |
| 25 | + | |
| 26 | + --gray-border: #D5D5D5; | |
| 27 | + --darkgray-border: #B9B9B9; | |
| 28 | + --primary-light-border: #B1C6EE; | |
| 29 | + | |
| 30 | + --lightgray-bg: #f2f3f4; | |
| 31 | +} | |
| 32 | + | |
| 33 | +/* 폰트 */ | |
| 34 | +.fwLg{font-weight: 300 !important}
| |
| 35 | +.fwRg{font-weight: 400 !important}
| |
| 36 | +.fwMd{font-weight: 500 !important}
| |
| 37 | +.fwBold{font-weight: 700 !important}
| |
| 38 | + | |
| 39 | +.sub_font{font-family:'GmarketSansBold';}
| |
| 40 | + | |
| 41 | +/* 버튼 */ | |
| 42 | +.btn{border-radius: 5px;}
| |
| 43 | +.btn:hover{box-shadow: 0px 0px 5px 3px rgba(0,0,0,0.12);transition: all 0.3s ease;}
| |
| 44 | + | |
| 45 | +.btn.xssmall{height: 28px;}
| |
| 46 | +.btn.ssmall{height: 30px;}
| |
| 47 | +.btn.small{height: 32px;}
| |
| 48 | +.btn.medium{height: 34px;}
| |
| 49 | +.btn.large{height: 36px;}
| |
| 50 | +.btn.xlarge{height: 38px;}
| |
| 51 | + | |
| 52 | +.btn.fill.primary{background-color: var(--primary-color);color: #fff;}
| |
| 53 | +.btn.fill.primary:hover{background-color: var(--primary-color-hover);color: #fff;}
| |
| 54 | +.btn.fill.primary_light{background-color: var(--primary-light-color);border: 1px solid var(--primary-light-border);color:#222;}
| |
| 55 | +.btn.fill.primary_light:hover{background-color: var(--primary-light-color-hover);}
| |
| 56 | +.btn.fill.secondary{background-color: var(--secondary-color);color: #222;}
| |
| 57 | +.btn.fill.secondary:hover{background-color: var(--secondary-color-hover);color: #222;}
| |
| 58 | +.btn.fill.red{background-color: var(--red-color);color: #fff;}
| |
| 59 | +.btn.fill.red:hover{background-color: var(--red-color-hover);}
| |
| 60 | +.btn.fill.green{background-color: var(--green-color);color: #fff;}
| |
| 61 | +.btn.fill.green:hover{background-color: var(--green-color-hover);}
| |
| 62 | + | |
| 63 | +.btn.line.primary{border: 1px solid var(--primary-color);color: var(--primary-color);}
| |
| 64 | +.btn.line.primary:hover{border: var(--primary-color-hover);color: var(--primary-color-hover);}
| |
| 65 | +.btn.line.secondary{border: 1px solid var(--secondary-color);color: #222;}
| |
| 66 | +.btn.line.secondary:hover{border: 1px solid var(--secondary-color-hover);}
| |
| 67 | +.btn.line.red{border: 1px solid var(--red-color);color: var(--red-color);}
| |
| 68 | +.btn.line.red:hover{border: var(--red-color-hover);color: var(--red-color-hover);}
| |
| 69 | +.btn.line.green{border: 1px solid var(--green-color);color: var(--green-color);}
| |
| 70 | +.btn.line.green:hover{background-color: var(--green-color-hover);}
| |
| 71 | + | |
| 72 | +/* 버튼 및 인풋 타입 */ | |
| 73 | +select {border: 1px solid #e5e5e5;vertical-align: middle;font-weight: 300;font-size: 16px;font-family: 'Noto Sans KR', sans-serif;}
| |
| 74 | +select.selType1 {height: 34px;padding:0 25px 0 10px;border: 1px solid #d5d5d5;border-radius: 3px;background-image: url(/publish/images/select_search2.png);background-repeat: no-repeat;background-position: right 5px top 50%;color: #777;}
| |
| 75 | +/* .area_tabs */ | |
| 76 | +select.selType2 {height: 36px; align-self: center; width: 125px; color: #666; background-image: url(/publish/images/select_search.png); background-repeat: no-repeat; background-position: 92% center; padding-left: 12px; box-sizing: border-box; border-radius: 3px; border: 1px solid #ccc;margin-left: 2px; font-size: 16px;}
| |
| 77 | +.list_selType1:focus {outline: none;}
| |
| 78 | +select.list_selType1 {background-color: transparent; border: none; width: 100%; padding: 0 15px; background-image: url(/publish/images/mem/list_select.png);background-repeat: no-repeat;background-position: right 0 top 50%; font-size: 18px; color: #222; font-family: 'Noto Sans KR', sans-serif; cursor: pointer;}
| |
| 79 | + | |
| 80 | +input {border: 0;vertical-align: middle;box-sizing: border-box; font-family: 'Noto Sans KR', sans-serif; }
| |
| 81 | +input:focus {outline: none;}
| |
| 82 | +input::placeholder {font-family: 'Noto Sans KR', sans-serif; font-weight: 300;color: #a6a6a6 !important;}
| |
| 83 | +input:-ms-input-placeholder {font-family: 'Noto Sans KR', sans-serif; font-weight: 300;color: #a6a6a6 !important;}
| |
| 84 | +input[type="text"] {padding: 0 10px; border-radius: 3px;font-size: 16px;}
| |
| 85 | +input[type="text"].readonly::placeholder {color: #222 !important;}
| |
| 86 | +input[type="text"].readonly:-ms-input-placeholder {color: #222 !important;}
| |
| 87 | +input[type="text"].inputLight::placeholder {color: #a6a6a6 !important;}
| |
| 88 | +input[type="text"].inputLight:-ms-input-placeholder {color: #a6a6a6 !important;}
| |
| 89 | +input[type="password"] {padding: 0 10px; border-radius: 3px;font-size: 16px;}
| |
| 90 | +input[type="password"].inputLight::placeholder {color: #a6a6a6 !important;}
| |
| 91 | +input[type="password"].inputLight:-ms-input-placeholder {color: #a6a6a6 !important;}
| |
| 92 | + | |
| 93 | +input.input_text{border:1px solid #d5d5d5;}
| |
| 94 | + /* 비밀번호 css 변경 */ | |
| 95 | + | |
| 96 | +input[type="checkbox"] {width: 16px; height: 16px; border: 1px solid #d6d8da;}
| |
| 97 | +input[type="radio"] {margin-top: 2px; margin-right: 3px;}
| |
| 98 | +input[type="radio"]+label {margin-right: 18px;font-size:16px;vertical-align: middle;}
| |
| 99 | +input[type="radio"].radio_big {margin:0;width:16px;height:16px;}
| |
| 100 | +/* input[type="radio"]+label, input[type="checkbox"]+label {vertical-align: middle;} */
| |
| 101 | +textarea {width: 100%;font-size: 16px;padding: 15px; box-sizing: border-box;color: #666;font-weight: 300;font-family: 'Noto Sans KR', sans-serif;}
| |
| 102 | +textarea::-webkit-scrollbar {width:7px;}
| |
| 103 | +textarea::-webkit-scrollbar-thumb {background: #c3c6c7; border-radius: 3px;}
| |
| 104 | +textarea::-webkit-scrollbar-thumb:active {background:#808080;}
| |
| 105 | +textarea::placeholder {font-family: 'Noto Sans KR', sans-serif; font-weight: 300;color: #a6a6a6 !important;}
| |
| 106 | +textarea:-ms-input-placeholder {font-family: 'Noto Sans KR', sans-serif; font-weight: 300;color: #a6a6a6 !important;}
| |
| 107 | + | |
| 108 | +.sort_wrap {display:inline-block;}
| |
| 109 | +.sort_wrap button:nth-child(1) img {margin-left: 3px;}
| |
| 110 | +.sort_wrap button:nth-child(2) img {margin-left: -5px;}
| |
| 111 | +.sort_wrap button img {margin-bottom: 5px;}
| |
| 112 | +.sortBtn {background-image: url(/publish/images/sortUp.png);border: none;background-color: transparent;background-repeat: no-repeat;background-position: center center;height: 14px;cursor: pointer; margin: -3px 0 0 0;}
| |
| 113 | +.sortBtnDesc {background-image: url(/publish/images/sortDown.png);border: none;background-color: transparent;background-repeat: no-repeat;background-position: center center;height: 14px;cursor: pointer;margin: -2px 0 0 0;}
| |
| 114 | +.sortBtnAsc {background-image: url(/publish/images/sortUp.png);border: none;background-color: transparent;background-repeat: no-repeat;background-position: center center;height: 14px;cursor: pointer;}
| |
| 115 | + | |
| 116 | +.numOfCase {position: absolute;right: 0;top: 57px;}
| |
| 117 | +.numOfCase p {display: inline-block;font-size: 13px;}
| |
| 118 | +.numOfCase p:first-child span {color: #e40000;font-weight: 500;}
| |
| 119 | +.numOfCase p:last-child span {color: var(--primary-color);font-weight: 500;}
| |
| 120 | + | |
| 121 | +/* table */ | |
| 122 | + | |
| 123 | +.tType1 {width: 100%;text-align: left;table-layout: fixed;}
| |
| 124 | +.tType1 tbody tr {border-bottom: 1px solid #e5e5e5;}
| |
| 125 | +.tType1 tbody tr:first-child{border-top: 2px solid #000;}
| |
| 126 | +.tType1 tbody tr th {min-width: 75px; height: 55px; vertical-align: middle;font-size: 17px; text-align: left;}
| |
| 127 | +.tType1 tbody tr th .essential {display:inline-block;margin:4px 2px 0 0;vertical-align:top;color:#e40000;}
| |
| 128 | +.tType1 tbody tr th.vTop {vertical-align: top; padding-top: 20px; line-height: 1.2;}
| |
| 129 | +.tType1 tbody tr td {vertical-align: middle;font-weight: 300;line-height: 1.3; padding: 10px 0;}
| |
| 130 | +.tType1 tbody tr td p {line-height: 1.4;}
| |
| 131 | +.tType1 tbody tr td.send_cf {font-size: 18px;}
| |
| 132 | +.tType1 tbody tr td.putText {padding: 10px 0;}
| |
| 133 | +.tType1 tbody tr td.putText>div {display: flex; width: 100%;}
| |
| 134 | +.tType1 tbody tr td.putText>p:last-child {color: #555; font-size: 14px; padding-top: 10px;}
| |
| 135 | +.tType1 tbody tr td.putText .put_left {float: left;width: calc(100% - 26%); min-width: 420px; padding: 0 10px; border:1px solid #f2f2f2;box-sizing: border-box; border-radius: 5px; background-color: #f2f2f2; position: relative; /*max-height: 300px;*/}
| |
| 136 | +.tType1 tbody tr td.putText .put_left .text_length {position: relative;min-height: 28px;margin:0 0 15px;border-radius: 0 0 5px 5px;}
| |
| 137 | +.tType1 tbody tr td.putText .put_left .text_length>div:first-child {font-size: 15px; padding-left: 10px;}
| |
| 138 | +.tType1 tbody tr td.putText .put_left .text_length>div:last-child {position: absolute;bottom: 0;right: 10px;}
| |
| 139 | +.tType1 tbody tr td.putText .put_left .text_length p {display: inline-block;padding-right: 10px;}
| |
| 140 | +.tType1 tbody tr td.putText .put_right { width: 26%; max-width: 200px; position: relative;}
| |
| 141 | +.tType1 tbody tr td.putText .put_right>button {width: calc(100% - 10px); margin-left: 10px;margin-bottom: 5px;}
| |
| 142 | +.tType1 tbody tr td.putText .put_right .btn_popup_wrap button:not(.btn_close) {width: calc(100% - 10px); margin-left: 10px;margin-bottom: 5px;}
| |
| 143 | +.tType1 tbody tr td.putText button .qmMark {background-image: url(/publish/images/content/qmIcon_s.png); width: 19px; height: 19px; margin-left: 5px; margin-top: -2px;}
| |
| 144 | +.tType1 tbody tr td.putText .put_right .send_btnWrap {position: absolute;bottom: 0;right:0;width: calc(100% - 10px);}
| |
| 145 | +.tType1 tbody tr td.putText .put_right .send_btnWrap button {width: 48.5%;}
| |
| 146 | +.tType1 tbody tr td.putText textarea {height: 160px; border: none;margin: 0;padding:0 15px;border-radius: 5px 5px 0 0;outline: 0;background-color: transparent; font-size: 15px;}
| |
| 147 | +.tType1 tbody tr td.putText .put_left.short textarea {height: 190px;margin:10px 0;padding:0 5px;}
| |
| 148 | +.tType1 tbody tr td.putText .put_left.short textarea::placeholder {color: #b5b5b5;}
| |
| 149 | +.tType1 tbody tr td.putText .put_left.short.on {border: 1px solid var(--primary-color);border-radius: 5px;background-color: #eef2f9 !important;}
| |
| 150 | +.tType1 tbody tr td.putText .put_left.long textarea {height: 380px;}
| |
| 151 | +.tType1 tbody tr td.putText .put_left.long.on {border: 1px solid #12bec9;border-radius: 5px;background-color: #eef5f9 !important;}
| |
| 152 | +.tType1 tbody tr td.putText .put_left.photo.on {border: 1px solid #e26ba9;border-radius: 5px;background-color: #f8f1f5 !important;}
| |
| 153 | +.tType1 tbody tr.msg_title {display:none;}
| |
| 154 | +.tType1 tbody tr.msg_title.active {display:table-row;}
| |
| 155 | +.tType1 tbody tr.msg_title td .title_wrap .textbox {display:none;margin:10px 0 0;}
| |
| 156 | +.tType1 tbody tr.msg_title td .title_wrap .textbox.active {display:block;}
| |
| 157 | + | |
| 158 | +.tType1_title {font-size: 20px; font-weight: 600; position: relative; height: 40px;}
| |
| 159 | +.tType1_title button {position: absolute;top: 22%; right: 0; transform: translateY(-50%); background-color: var(--primary-color); height: 40px; padding: 0 15px; color: #fff;}
| |
| 160 | +.tType1_title>span {font-size: 16px; font-weight: 300; color: #666;}
| |
| 161 | +.tType1 tbody tr td.send_list {position: relative;display: flex; justify-content: space-between;}
| |
| 162 | +.tType1 tbody tr td.send_list .list_left, .tType1 tbody tr td.send_list .list_right {width: calc(100%/2 - 25px);min-width: 290px;}
| |
| 163 | +.tType1 tbody tr td.send_list .list_left {left: 0;position: relative;}
| |
| 164 | +.tType1 tbody tr td.send_list .list_left .add_num {height: 90px;}
| |
| 165 | +.tType1 tbody tr td.send_list .list_left .add_num input[type="text"] {width: calc(100% - 97px);min-width: 200px;}
| |
| 166 | +.tType1 tbody tr td.send_list .list_left .add_num input[type="text"]::placeholder {color: #a6a6a6; font-weight: 300;}
| |
| 167 | +.tType1 tbody tr td.send_list .list_left .add_num>span {color: #e40000;font-size: 13px;font-weight: 400;line-height: 39px;}
| |
| 168 | +.tType1 tbody tr td .text_req {display: inline-block; color: #999; font-size: 17px; font-weight: 300; vertical-align: middle;}
| |
| 169 | + | |
| 170 | + | |
| 171 | +.tType1 tbody tr td.send_list .list_right {right: 0;}
| |
| 172 | +.tType1 tbody tr td.send_list .list_right .list_btnWrap {display: flex;flex-flow: wrap;justify-content: space-between;}
| |
| 173 | +.tType1 tbody tr td.send_list .list_right .list_btnWrap button {height: 37px;width: calc(100%/3 - 3px);margin-bottom: 5px;}
| |
| 174 | + | |
| 175 | +.tType1 tbody tr td.send_list .add_btn {position: absolute; right: 0; top: 0;}
| |
| 176 | +.tType1 tbody tr td.send_list .add_btn button {min-width: 95px; height: 32px; font-size: 14px;}
| |
| 177 | +.tType1 tbody tr td.send_list .add_remove {text-align: center;margin: 40px 4px 0 4px;align-self: center;}
| |
| 178 | +.tType1 tbody tr td.send_list .add_remove button {display: block;max-width: 44px;padding: 4px 6px; border: 1px solid #b1b1b1;border-radius: 5px; margin: 0 auto;margin-bottom: 5px;font-size: 12px;}
| |
| 179 | +.tType1 tbody tr td.send_list .add_remove button:hover {box-shadow: 0px 0px 5px 3px rgba(0,0,0,0.12);}
| |
| 180 | +.tType1 tbody tr td.send_list .add_remove button.add i {background-image:url(/publish/images/content/add_btn.png);width: 11px;height: 10px;display: block;margin: 0 auto;}
| |
| 181 | +.tType1 tbody tr td.send_list .add_remove button.remove i {background-image:url(/publish/images/content/remove_btn.png);width: 11px;height: 10px;display: block;margin: 0 auto;}
| |
| 182 | + | |
| 183 | +.tType1 tbody tr th.billingAmount {position: relative;line-height: 1;vertical-align: middle;}
| |
| 184 | +.tType1 tbody tr th.billingAmount>div {background-color: #f2f2f2;border-radius: 5px;padding: 23px 30px;margin: 20px 0; position: relative;}
| |
| 185 | +.tType1 tbody tr th.billingAmount>div .final_pay {position: relative; margin-bottom: 20px; display: flex; justify-content: space-between; align-items: center;}
| |
| 186 | +.tType1 tbody tr th.billingAmount>div p:first-child {font-size: 20px;font-weight: 500;}
| |
| 187 | +.tType1 tbody tr th.billingAmount>div p:last-child {font-size: 20px;}
| |
| 188 | +.tType1 tbody tr th.billingAmount>div p span#totalPriceTxt {font-size: 24px;color: #e40000;font-weight: 500;}
| |
| 189 | +.tType1 tbody tr th.billingAmount>div p span:last-child {font-size: 16px;color: #888;font-weight: 300;}
| |
| 190 | +.tType1 tbody tr th.billingAmount .pay_info_list p {float:left;line-height:35px;}
| |
| 191 | +.tType1 tbody tr th.billingAmount .pay_info_list .info {float:left;margin:0 0 0 15px;padding:8px 15px 10px;font-size:16px;font-weight:300;color:#555;background:#e5e5e5;border-radius:5px;box-sizing:border-box;}
| |
| 192 | +.tType1 tbody tr th.billingAmount .pay_info_list .info strong {font-size:18px;font-weight:700;color:var(--primary-color);}
| |
| 193 | +.tType1 tbody tr th.billingAmount .pay_info_list .info span {margin:0 8px 0 7px;}
| |
| 194 | +.tType1 tbody tr th.billingAmount button.cal_btn {position: absolute;right: 0; top: 50%;transform: translateY(-50%);background-color: var(--secondary-color);width: 88px;height: 32px;border-radius: 5px;}
| |
| 195 | +.tType1 tbody tr th.billingAmount button.cal_btn:hover {box-shadow: 0px 0px 5px 3px rgba(0,0,0,0.12);}
| |
| 196 | +.tType1 tbody tr th.billingAmount button.cal_btn i {background-image: url(/publish/images/content/calIcon.png);width: 12px;height: 16px;margin: 0 3px 2px 0;}
| |
| 197 | +.tType1 tbody tr th.billingAmount .pay_type {background-color: #fff; border-radius: 5px 5px 0 0; height: 60px; padding: 12px 13px; box-sizing: border-box;}
| |
| 198 | +.tType1 tbody tr th.billingAmount .pay_type button.btn_event_cash{width: 100px;}
| |
| 199 | +.tType1 tbody tr th.billingAmount .pay_type:last-child {margin-top: 10px;}
| |
| 200 | +.tType1 tbody tr th.billingAmount .pay_type>div:first-child {float: left;margin:0 0 0 5px;}
| |
| 201 | +.tType1 tbody tr th.billingAmount .pay_type>div .won {display:inline-block;margin:9px 11px 0 -34px;font-size:16px;vertical-align:top;color:#9a9a9a;}
| |
| 202 | +.tType1 tbody tr th.billingAmount .pay_type>div:last-child {float: right;}
| |
| 203 | +.tType1 tbody tr th.billingAmount .pay_type>div:only-child{float: left;}
| |
| 204 | +.tType1 tbody tr th.billingAmount .pay_type input[type="radio"]+label {font-size: 16px;}
| |
| 205 | +.tType1 tbody tr th.billingAmount .pay_type input[type="radio"]+label span {font-size: 17px; font-weight: 700;}
| |
| 206 | +.tType1 tbody tr th.billingAmount .pay_type input[type="text"] {width: 210px; height: 36px; padding:0 37px 2px 16px; border-radius: 5px;text-align:right;}
| |
| 207 | +.tType1 tbody tr th.billingAmount .pay_type input[type="text"]::placeholder {color: #000; font-size: 16px; text-align: right; font-weight: 500;}
| |
| 208 | +.tType1 tbody tr th.billingAmount .pay_type button {width: 78px; margin-left: 5px;}
| |
| 209 | + | |
| 210 | +.tType1 tbody tr td.check_num>div {display: inline-block;}
| |
| 211 | +.tType1 tbody tr td.check_num>div button {height: 40px; padding: 0 5px;}
| |
| 212 | +.tType1 tbody input[type="text"] {height: 40px; padding: 0 15px; background-color: #f2f2f2;border-radius: 5px;line-height:38px;}
| |
| 213 | +.tType1 tbody input[type="password"] {height: 50px; padding: 0 15px; background-color: #f2f2f2;border-radius: 5px; font-size: 16px;}
| |
| 214 | +.tType1 tbody select.sel_number {width: 340px; height: 40px; padding: 0 20px; background-color: #f2f2f2;border-radius: 5px; border: 0;color: var(--primary-color);font-weight: 400;font-size: 16px;background-image: url(/publish/images/select_search.png); background-repeat: no-repeat; background-position: 94% center;}
| |
| 215 | +.tType1 tbody input[type="text"]::placeholder {color: #a6a6a6;}
| |
| 216 | +.tType1 tbody input:disabled {background-color: #dedede;}
| |
| 217 | + | |
| 218 | + | |
| 219 | +.tType3 {width: 100%; border-radius: 3px; border: 1px solid #ccc; box-sizing: border-box;}
| |
| 220 | +.tType3.payDetail {margin-bottom: 50px;}
| |
| 221 | +.tType3.usageDetail {margin-bottom: 50px;}
| |
| 222 | +.tType3.payDetail {margin: -15px 0 10px 0;}
| |
| 223 | +.payDetail .tType3_hd>div:nth-child(1), .payDetail .tType3_bd>div:nth-child(1) {width: 40px;}
| |
| 224 | +.payDetail .tType3_hd>div:nth-child(2), .payDetail .tType3_bd>div:nth-child(2) {width: 20%;}
| |
| 225 | +.payDetail .tType3_hd>div:nth-child(3), .payDetail .tType3_bd>div:nth-child(3) {width: 17%;}
| |
| 226 | +.payDetail .tType3_hd>div:nth-child(4), .payDetail .tType3_bd>div:nth-child(4) {width: 15%;}
| |
| 227 | +.payDetail .tType3_hd>div:nth-child(5), .payDetail .tType3_bd>div:nth-child(5) {width: 17%;}
| |
| 228 | +.payDetail .tType3_hd>div:nth-child(6), .payDetail .tType3_bd>div:nth-child(6) {width: 15%;}
| |
| 229 | +.payDetail .tType3_hd>div:nth-child(7), .payDetail .tType3_bd>div:nth-child(7) {width: 17%;}
| |
| 230 | + | |
| 231 | +.table_cont {display: none;}
| |
| 232 | +.table_cont.current {display: block;}
| |
| 233 | + | |
| 234 | +.tType3 .tType3_hd { display: flex; height: 36px; line-height: 34px; font-size: 15px; box-sizing: border-box; position: relative; z-index: 0; background-color: #ededed; text-align: center; border-radius: 3px 3px 0 0;}
| |
| 235 | +.tType3 .tType3_hd::after {content: ""; background-color: #e9e9e9; width: 100%; height: 18px; position: absolute; bottom: 0; left: 0;z-index: -1;}
| |
| 236 | +.tType3 .tType3_hd>div {border-left: 1px solid #ccc; border-bottom: 1px solid #ccc; box-sizing: border-box;}
| |
| 237 | +.tType3 .tType3_hd>div:first-child {border-left: 0; }
| |
| 238 | +.tType3 .font_ellipsis {position: relative;}
| |
| 239 | + | |
| 240 | +.tType3 .tType3_bd { display: flex; height: 40px; line-height: 40px; font-size: 15px; box-sizing: border-box; text-align: center; color: #555; font-weight: 300;}
| |
| 241 | +.tType3 .tType3_bd span {font-weight: 400;}
| |
| 242 | +.tType3 .tType3_bd>div {height: 40px; padding: 0 10px; line-height: 40px; border-bottom: 1px solid #e5e5e5; border-left: 1px solid #e5e5e5; text-align: center; color: #555; font-weight: 300; box-sizing: border-box;}
| |
| 243 | +.tType3 .tType3_bd>div:first-child {border-left: 0;}
| |
| 244 | +.tType3 .tType3_bd:last-child>div {border-bottom: 0;}
| |
| 245 | +.tType3 .tType3_bd .table_certify {font-weight: 400;}
| |
| 246 | +.tType3 .tType3_bd .input_wrap2 input[type="text"] {text-align: center; background-color: #f2f2f2; width: calc(100% - 20px); height: 32px; border-radius: 5px; color: #555; vertical-align: baseline;}
| |
| 247 | +.tType3 .tType3_bd .input_wrap2 input[type="text"]::placeholder {color: #555;}
| |
| 248 | +.tType3 .tType3_bd .input_wrap2 input[type="text"]:-ms-input-placeholder {color: #555;}
| |
| 249 | +.tType3 .tType3_bd .btnType14 {height: 28px; padding: 0 11.5px; vertical-align: baseline; line-height: 28px;}
| |
| 250 | +.tType3 .tType3_bd input[type="radio"] {margin-top: 0; margin-right: 0; vertical-align: revert;}
| |
| 251 | + | |
| 252 | +.tb_wrap{position:relative;width: 100%; min-height: 430px; border: 1px solid #ccc; border-radius: 5px; margin-bottom: 10px; box-sizing: border-box;border-bottom:0 none;}
| |
| 253 | +.tb_wrap:after {content:'';position:absolute;left:2px;bottom:0;width:calc(100% - 4px);height:1px;background:#ccc;}
| |
| 254 | +.tType4{table-layout: fixed; width: 100%;}
| |
| 255 | +.tType4 thead{background-color: #ededed; position: relative; z-index: 0;}
| |
| 256 | +.tType4 thead tr:only-child th{height: 36px;}
| |
| 257 | +.tType4 thead th{border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; font-size: 15px; font-weight: 400; position: relative; z-index: 1; line-height: 25px; vertical-align: middle;}
| |
| 258 | +.tType4 thead th::after{position: absolute; content: " "; width: 100%; height: 18px; background-color: #e5e5e5; bottom: 0; left: 0; z-index: -1;}
| |
| 259 | +.tType4 thead th:last-child{border-right: 0;}
| |
| 260 | +.tType4 .sort_wrap{display: inline-block;}
| |
| 261 | +.tType4 tbody td{text-align: center; font-size: 15px; color: #666; font-weight: 400; border-right: 1px solid #d5d5d5; border-bottom: 1px solid #d5d5d5; height: 38px; vertical-align: middle; padding: 0 10px; box-sizing: border-box;}
| |
| 262 | +.tType4 tbody td.tb_tit{text-align: left; position: relative;}
| |
| 263 | +.tType4 tbody td.input_wrap2 input[type="text"] {text-align: center;background-color: #f2f2f2;width: calc(100% - 20px);height: 32px;border-radius: 5px;border: 1px solid #f2f2f2;margin-right: 0;color: #555;}
| |
| 264 | +.tType4 tbody tr:only-child:last-child td{border-bottom: 1px solid #ccc;}
| |
| 265 | +.tType4 tbody td:last-child{border-right: 0;}
| |
| 266 | +.tType4 tbody td>p{width: 100%; line-height: 38px; white-space: nowrap; text-overflow: ellipsis; letter-spacing: -0.5px; overflow: hidden;margin: 0 auto;}
| |
| 267 | +.tType4 tbody td span {font-weight: 400;}
| |
| 268 | +.tType4 td input[type="text"]{height: 28px; display: inline-block; border: 1px solid #e5e5e5; margin-right: 5px;}
| |
| 269 | +.tType4 tbody .btnType14 {height: 28px;}
| |
| 270 | +.tType4 .memo_text {width: calc(100% - 35px); margin-right: 5px; display: inline-block; text-align: left; vertical-align: inherit;}
| |
| 271 | +.tType4 tbody td span.textReject {line-height:28px;}
| |
| 272 | +.tType4 tbody td .btnTypeReject {margin:0 0 0 3px;line-height:26px;letter-spacing:0;text-align:center;vertical-align:top;}
| |
| 273 | +.tType4 tbody td.result_cont a {text-align: left!important; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;}
| |
| 274 | +.tType4 tbody td.result_cont .result_tit { }
| |
| 275 | +.tType4 tbody td .cancel_date {font-size:14px; color:#666; display: block;}
| |
| 276 | +/* // table */ | |
| 277 | + | |
| 278 | +/* tab */ | |
| 279 | +.top_content {display: none;}
| |
| 280 | +.top_content.current {display: block;}
| |
| 281 | +.custom_content {display: none;}
| |
| 282 | +.custom_content.current {display: block;}
| |
| 283 | +.bottom_content {display: none;}
| |
| 284 | +.bottom_content.current {display: block;}
| |
| 285 | +.popup_cont {display: none;}
| |
| 286 | +.popup_cont.current {display: block;}
| |
| 287 | +.history_cont {display: none;}
| |
| 288 | +.history_cont.current {display: block;}
| |
| 289 | + | |
| 290 | + | |
| 291 | +.tabType1 {background-color: #fff;width: 100%;border-radius: 10px; display: flex;text-align: center;margin-bottom: 20px;border:2px solid #46484a;}
| |
| 292 | +.tabType1 li {flex-basis: calc(100%/2); position: relative;}
| |
| 293 | +.tabType1 li button {width: 100%;padding: 13px 0;font-size: 16px;position:relative;z-index:1;}
| |
| 294 | +.tabType1 li.active {background-color: #46484a;}
| |
| 295 | +.tabType1 li.active:after {content:'';position:absolute;left:-1px;top:-1px;width:100%;height:100%;border:1px solid #46484a;}
| |
| 296 | +.tabType1 li.active button {color: #fff;border:1px solid #46484a;background-color: #46484a;}
| |
| 297 | +.tabType1 li.active button:before {content:'';position:absolute;left:-1px;top:-1px;width:100%;height:100%;border:2px solid #46484a;box-sizing:border-box;}
| |
| 298 | +.tabType1 li.active button:after {content:'';position:absolute;left:-5px;top:-5px;width:100%;height:100%;border:5px solid #46484a;border-radius:10px;}
| |
| 299 | + | |
| 300 | +.tabType2 {width: calc(100% - 600px); border-radius:10px 10px 0 0; display: flex;text-align: center;margin-bottom: 20px;position: relative;background-color: #fff;}
| |
| 301 | +.tabType2::after {position: absolute;height: 2px;background-color: #000;width: calc(100% + 600px);content: "";bottom: 0;left: 0;}
| |
| 302 | +.tabType2 li {flex-basis: calc(100% /4);min-width: 200px;}
| |
| 303 | +.tabType2 li button {width: 100%;padding: 13px 0;font-size: 20px;border-left: 1px solid #e5e5e5;background-color: #fff;}
| |
| 304 | +.tabType2 li:nth-child(3) button {border-left: 0;}
| |
| 305 | +.tabType2 li:first-child button {border-left: 0;border-radius: 10px 0 0 0;}
| |
| 306 | +.tabType2 li:last-child button {border-radius: 0 10px 0 0;}
| |
| 307 | +.tabType2 li.active button {background-color: #46484a;border-radius:10px 10px 0 0;color: #fff;border-left: 1px solid transparent;}
| |
| 308 | + | |
| 309 | +.tabType4 {background-color: #fff;width: 100%;border-radius: 10px; display: flex;text-align: center;margin-bottom: 20px;border:2px solid #46484a;}
| |
| 310 | +.tabType4 li {flex-basis: calc(100%/3); position: relative;}
| |
| 311 | +.tabType4 li::after {content: ""; position: absolute; right: -1px; top: 50%; transform: translateY(-50%); width: 1px; height: 34px; background-color: #ccc;}
| |
| 312 | +.tabType4 li:last-child::after {content: none;}
| |
| 313 | +.tabType4 li.active::after {content: none;}
| |
| 314 | +.tabType4 li button {position:relative;width: 100%; height: 50px; padding: 12px 0;font-size: 18px; letter-spacing: -0.5px;}
| |
| 315 | +.tabType4 li.active button {color:#fff;border:1px solid #46484a;background-color:#46484a;}
| |
| 316 | +.tabType4 li.active button:before {content:'';position:absolute;left:-1px;top:-1px;width:100%;height:100%;border:2px solid #46484a;box-sizing:border-box;}
| |
| 317 | +.tabType4 li.active button:after {content:'';position:absolute;left:-5px;top:-5px;width:100%;height:100%;border:5px solid #46484a;border-radius:10px;}
| |
| 318 | +.tabType4.tabTwo li {flex-basis: calc(100%/2);}
| |
| 319 | + | |
| 320 | +.tabType5 {background-color: #fff;width: 100%; border: 1px solid #dfdfdf; border-bottom: 1px solid #46484a; border-radius: 5px 5px 0 0; display: flex;text-align: center;}
| |
| 321 | +.tabType5 li {flex-basis: calc(100%/3); position: relative;}
| |
| 322 | +.tabType5 li::after {content: ""; position: absolute; right: -1px; top: 50%; transform: translateY(-50%); width: 1px; height: 100%; background-color: #c7c8c8;}
| |
| 323 | +.tabType5 li:last-child::after {content: none;}
| |
| 324 | +.tabType5 li.active::after {content: none;}
| |
| 325 | +.tabType5 li button {width: 100%;height: 45px; font-size: 18px;}
| |
| 326 | +.tabType5 li.active button {background-color: #46484a;border-radius: 5px 5px 0 0;color: #fff; font-weight: 300;}
| |
| 327 | + | |
| 328 | +.tabType6 {background-color: #fff;width: 100%;border-bottom: 1px solid #e5e5e5; display: flex;text-align: center;}
| |
| 329 | +.tabType6 li {flex-basis: calc(100%/2);}
| |
| 330 | +.tabType6 li button {width: 100%;height: 35px; font-size: 16px;border: 1px solid #dfdfdf; border-bottom: 1px solid #e5e5e5; border-radius: 5px 5px 0 0;}
| |
| 331 | +.tabType6 li.active button {background-color: #c8c8c8;border-radius: 5px 5px 0 0; border: 1px solid #c8c8c8;}
| |
| 332 | +.pay_refund_cont .pay_tType1 {margin-top:-20px;}
| |
| 333 | +.pay_refund_cont .pay_tType1 tbody tr:first-child {border-top:0 none;}
| |
| 334 | + | |
| 335 | +/* // tab */ | |
| 336 | + | |
| 337 | +/* calendar */ | |
| 338 | +.calendar_wrap {position:relative;display: inline-block;}
| |
| 339 | +.calendar_wrap>span {font-weight: 500;}
| |
| 340 | +.calendar_wrap>input[type="text"] {height: 36px;line-height: 36px;width: 140px;border: 1px solid #d5d5d5;font-size: 16px;font-weight: 300;padding: 0 5px;color: #777;background: url(/publish/images/calendar/calendarIcon2.png) #fff no-repeat right 7px center;}
| |
| 341 | +.calendar_in {position: relative;display: inline;}
| |
| 342 | +.calendar_in>button { border: 1px solid transparent !important; height: 26px; margin: 1px 0 0 0; padding: 0; text-indent: -9999em; width: 26px; vertical-align: middle; position: absolute; right: 8px;top: 57%; transform: translateY(-50%);}
| |
| 343 | +.calendar_in .calendar-frame {border: 0;height: 290px;width: 320px;}
| |
| 344 | +.calendar_in .calendarPop {display: none;position: absolute;z-index: 10;top: 32px;left: -204px; border-radius: 10px 10px 0 0;box-shadow: 0px 0px 5px 3px rgba(0,0,0,0.12); background-color: #fff;}(No newline at end of file) |
--- src/main/webapp/publish/images/intro_function.jpg
+++ src/main/webapp/publish/images/intro_function.jpg
| Binary file is not shown |
--- src/main/webapp/publish/images/intro_service.jpg
+++ src/main/webapp/publish/images/intro_service.jpg
| Binary file is not shown |
+++ src/main/webapp/publish/images/kakao_intro_cont/text_brandmsg.png
| Binary file is not shown |
--- src/main/webapp/publish/info_popup.html
+++ src/main/webapp/publish/info_popup.html
... | ... | @@ -447,6 +447,20 @@ |
| 447 | 447 |
</div> |
| 448 | 448 |
</div> |
| 449 | 449 |
<!-- // 카톡발송 > 친구톡 --> |
| 450 |
+ <!-- 카카오톡 설정 > 브랜드메시지 템플릿 관리--> |
|
| 451 |
+ <div class="info_popup" id="brandMsgSet"> |
|
| 452 |
+ <div class="popup_heading"> |
|
| 453 |
+ <p>사용안내</p> |
|
| 454 |
+ </div> |
|
| 455 |
+ <div class="layer_in layer_info_wrap"> |
|
| 456 |
+ <ul class="info_list"> |
|
| 457 |
+ <li>브랜드메시지는 알림톡과 달리 별도의 템플릿 심사가 필요하지 않습니다.</li> |
|
| 458 |
+ <li>등록된 템플릿은 자유롭게 삭제가 가능합니다.</li> |
|
| 459 |
+ <li>문자온이 제공하지 않는 이모티콘, 이모지를 포함하여 템플릿을 등록할 경우, 브랜드메시지 발송이 불가합니다.</li> |
|
| 460 |
+ </ul> |
|
| 461 |
+ </div> |
|
| 462 |
+ </div> |
|
| 463 |
+ <!-- // 카톡발송 > 친구톡 --> |
|
| 450 | 464 |
|
| 451 | 465 |
</body> |
| 452 | 466 |
|
--- src/main/webapp/publish/js/content.js
+++ src/main/webapp/publish/js/content.js
... | ... | @@ -436,6 +436,7 @@ |
| 436 | 436 |
}); |
| 437 | 437 |
|
| 438 | 438 |
// 알림톡 템플릿 등록/관리 버튼 클릭 시 콘텐츠 바뀜 |
| 439 |
+ /*$(".template_content_wrap:not(.friend_template_content) .btn_list").click(function () {*/
|
|
| 439 | 440 |
$(".btn_list").click(function () {
|
| 440 | 441 |
$(this).closest(".tab_content").find(".thumbnail_content").fadeOut(0);
|
| 441 | 442 |
$(this).closest(".tab_content").find(".list_content,.btn_thumbnail").show();
|
--- src/main/webapp/publish/kakao_allimtalk_intro.html
+++ src/main/webapp/publish/kakao_allimtalk_intro.html
... | ... | @@ -46,7 +46,7 @@ |
| 46 | 46 |
|
| 47 | 47 |
<ul class="tabType1"> |
| 48 | 48 |
<li class="tab active"><button type="button" onclick="contentTab(this,'1');">알림톡</button></li> |
| 49 |
- <li class="tab"><button type="button" onclick="contentTab(this,'2');">친구톡</button></li> |
|
| 49 |
+ <li class="tab"><button type="button" onclick="contentTab(this,'2');">브랜드메시지</button></li> |
|
| 50 | 50 |
</ul> |
| 51 | 51 |
|
| 52 | 52 |
<!-- 알림톡 소개 --> |
... | ... | @@ -325,7 +325,7 @@ |
| 325 | 325 |
<div class="tab_content friendtalk" id="tab_content_2"> |
| 326 | 326 |
<div class="kakao_intro"> |
| 327 | 327 |
<div class="title"> |
| 328 |
- <h3>친구톡이란?</h3> |
|
| 328 |
+ <h3>브랜드메시지란?</h3> |
|
| 329 | 329 |
</div> |
| 330 | 330 |
|
| 331 | 331 |
|
... | ... | @@ -339,9 +339,9 @@ |
| 339 | 339 |
<div class="intro"> |
| 340 | 340 |
<img class="phone" src="/publish/images/kakao_intro_cont/phone_friendtalk.png" alt="핸드폰"> |
| 341 | 341 |
|
| 342 |
- <ul class="list"> |
|
| 342 |
+ <ul class="list" style="width:57%;"> |
|
| 343 | 343 |
<li> |
| 344 |
- <img src="/publish/images/kakao_intro_cont/text_friendtalk.png" alt="카카오톡 전용 기업 메시지 서비스 “알림톡”"> |
|
| 344 |
+ <img src="/publish/images/kakao_intro_cont/text_brandmsg.png" alt="카카오톡 전용 기업 메시지 서비스 “알림톡”"> |
|
| 345 | 345 |
</li> |
| 346 | 346 |
<li> |
| 347 | 347 |
<p>1</p> |
... | ... | @@ -349,7 +349,7 @@ |
| 349 | 349 |
</li> |
| 350 | 350 |
<li> |
| 351 | 351 |
<p>2</p> |
| 352 |
- <p>채널 친구 추가된 사용자라면 <span>누구에게나</span> 발송 가능</p> |
|
| 352 |
+ <p>채널 친구 추가된 사용자라면 <span>누구에게나</span> 발송 가능<strong>(타깃 설정 미지원)</strong></p> |
|
| 353 | 353 |
</li> |
| 354 | 354 |
<li> |
| 355 | 355 |
<p>3</p> |
... | ... | @@ -363,7 +363,7 @@ |
| 363 | 363 |
</li> |
| 364 | 364 |
<li> |
| 365 | 365 |
<p>5</p> |
| 366 |
- <p>문자 메시지 대비 <span>O % 이상</span> 저렴</p> |
|
| 366 |
+ <p>문자 메시지 대비 <span>저렴한</span> 단가</p> |
|
| 367 | 367 |
</li> |
| 368 | 368 |
<li> |
| 369 | 369 |
<p>6</p> |
... | ... | @@ -384,7 +384,7 @@ |
| 384 | 384 |
<div class="fight"> |
| 385 | 385 |
<div class="line"></div> |
| 386 | 386 |
<div class="fight-title"> |
| 387 |
- <h4>알림톡 <span>VS</span> 친구톡</h4> |
|
| 387 |
+ <h4>알림톡 <span>VS</span> 브랜드메시지</h4> |
|
| 388 | 388 |
<div class="circle"></div> |
| 389 | 389 |
</div> |
| 390 | 390 |
|
... | ... | @@ -420,15 +420,15 @@ |
| 420 | 420 |
</div> |
| 421 | 421 |
|
| 422 | 422 |
<div class="vs friendtalk_vs"> |
| 423 |
- <div class="title">친구톡</div> |
|
| 423 |
+ <div class="title">브랜드메시지</div> |
|
| 424 | 424 |
<div class="box"> |
| 425 | 425 |
<ul> |
| 426 |
- <li>채널 친구</li> |
|
| 426 |
+ <li>채널 친구<span>(타깃 설정 미지원)</span></li> |
|
| 427 | 427 |
<li>광고 및 마케팅성<span>(예 : 이벤트, 쿠폰 등)</span></li> |
| 428 | 428 |
<li>텍스트, 기본이미지, 와이드 이미지형 등</li> |
| 429 | 429 |
<li>최대 5개</li> |
| 430 | 430 |
<li>별도 승인 없음 <span>야간 발송 제한(20:50 ~ 익일 08:00)</span></li> |
| 431 |
- <li>0.0원 ~ 0.0원</li> |
|
| 431 |
+ <li>20원</li> |
|
| 432 | 432 |
<li>1,000자</li> |
| 433 | 433 |
<li>가능</li> |
| 434 | 434 |
</ul> |
... | ... | @@ -442,7 +442,7 @@ |
| 442 | 442 |
<!-- 친구톡 유형 --> |
| 443 | 443 |
<div class="use"> |
| 444 | 444 |
<div class="title"> |
| 445 |
- <h3>친구톡 유형</h3> |
|
| 445 |
+ <h3>브랜드메시지 유형</h3> |
|
| 446 | 446 |
</div> |
| 447 | 447 |
|
| 448 | 448 |
<div class="title-line"> |
... | ... | @@ -498,14 +498,14 @@ |
| 498 | 498 |
<li class="guide_03"> |
| 499 | 499 |
<div class="title">STEP <span>03</span></div> |
| 500 | 500 |
<i></i> |
| 501 |
- <p class="guide_title">친구톡 전송</p> |
|
| 502 |
- <span class="guide_info">친구톡은 별도의 템플릿 심사 절차 없이, 즉시 발송 가능합니다.</span> |
|
| 501 |
+ <p class="guide_title">브랜드메시지 전송</p> |
|
| 502 |
+ <span class="guide_info">브랜드메시지는 별도의 템플릿 심사 절차 없이, 즉시 발송 가능합니다.</span> |
|
| 503 | 503 |
</li> |
| 504 | 504 |
</ul> |
| 505 | 505 |
|
| 506 | 506 |
<!--이용가이드 버튼--> |
| 507 | 507 |
<div class="guide"> |
| 508 |
- <a href="https://kakaobusiness.gitbook.io/main/ad/brandmessage" target="_blank">친구톡 이용가이드 보기 <img src="/publish/images/kakao_intro_cont/guide_arrow.png" alt="알림톡 이용가이드 화살표"></a> |
|
| 508 |
+ <a href="https://kakaobusiness.gitbook.io/main/ad/brandmessage" target="_blank">브랜드메시지 이용가이드 보기 <img src="/publish/images/kakao_intro_cont/guide_arrow.png" alt="알림톡 이용가이드 화살표"></a> |
|
| 509 | 509 |
</div> |
| 510 | 510 |
</div> |
| 511 | 511 |
|
... | ... | @@ -515,10 +515,9 @@ |
| 515 | 515 |
<p><span><img src="/publish/images/kakao_intro_cont/note_icon.png" alt="유의사항 아이콘"></span>유의사항</p> |
| 516 | 516 |
</div> |
| 517 | 517 |
<ul> |
| 518 |
- <li>- (광고) 표기 여부는 선택 가능하나 , (광고)표기 해제에 따른 법령상 의무사항을 미 준수시에는 메시지 발송이 중단될 수 있습니다.</li> |
|
| 519 |
- <li>- 광고성 친구톡 메시지에는 “(광고) 표시 및 수신거부 방식”이 표시되며, 대체 문자의 경우에는 “(광고) 문구 및 080 무료수신거부 번호”가 자동으로 포함됩니다.</li> |
|
| 518 |
+ <li>- 브랜드메시지에는 "(광고) 문구 및 수신거부 방식"이 자동으로 표시되며, 대체 문자 발송 시에는 “(광고) 문구 및 080 무료수신거부 번호”가 자동으로 적용됩니다.</li> |
|
| 520 | 519 |
<li><b>- 광고성 메시지의 발송 가능 시간은 08:00 ~ 20:50(한국시간) 입니다.</b></li> |
| 521 |
- <li>- 친구톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.</li> |
|
| 520 |
+ <li>- 브랜드메시지 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.</li> |
|
| 522 | 521 |
<li>- 카카오정책 및 심의기준을 반드시 준수하여야 합니다.</li> |
| 523 | 522 |
</ul> |
| 524 | 523 |
</div> |
--- src/main/webapp/publish/kakao_friendtalk_send.html
+++ src/main/webapp/publish/kakao_friendtalk_send.html
... | ... | @@ -38,6 +38,25 @@ |
| 38 | 38 |
</head> |
| 39 | 39 |
|
| 40 | 40 |
<body> |
| 41 |
+ <div class="mask on"></div> |
|
| 42 |
+ <!-- 친구톡 서비스 중단 --> |
|
| 43 |
+ <div class="tooltip-wrap "> |
|
| 44 |
+ <div class="popup-com service_stop_popup alert_layer_popup" tabindex="0" data-tooltip-con="alert_layer_popup" data-focus="alert_layer_popup" data-focus-prev="alert_layer_popup-close" style="display:block;width:490px;opacity:1;"> |
|
| 45 |
+ <div class="popup_heading"> |
|
| 46 |
+ <p>알림</p> |
|
| 47 |
+ <button type="button" class="tooltip-close" data-focus="alert_layer_popup-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> |
|
| 48 |
+ </div> |
|
| 49 |
+ <div class="layer_in"> |
|
| 50 |
+ <p>친구톡 서비스는 종료되었으며,<br />2026년 1월부터 <b>'브랜드메시지'</b>로 전환될 예정입니다.</p> |
|
| 51 |
+ <div class="popup_btn"> |
|
| 52 |
+ <button type="button" class="btn fill blue" onclick="location.href='/web/main/mainPage.do'">메인화면 바로가기</button> |
|
| 53 |
+ </div> |
|
| 54 |
+ </div> |
|
| 55 |
+ </div> |
|
| 56 |
+ </div> |
|
| 57 |
+ <!-- //친구톡 서비스 중단 --> |
|
| 58 |
+ |
|
| 59 |
+ |
|
| 41 | 60 |
<div class="skip_menu"> |
| 42 | 61 |
<a href="#cont" title="본문 바로가기" class="contGo">본문 바로가기</a> |
| 43 | 62 |
</div> |
... | ... | @@ -96,11 +115,11 @@ |
| 96 | 115 |
<th>이미지 첨부</th> |
| 97 | 116 |
<td> |
| 98 | 117 |
<input type="radio" name="img_file_add" id="img_file_0" checked> |
| 99 |
- <label for="img_file_0">첨부 안함</label> |
|
| 118 |
+ <label for="img_file_0">텍스트</label> |
|
| 100 | 119 |
<input type="radio" name="img_file_add" id="img_file_1"> |
| 101 |
- <label for="img_file_1">이미지 첨부</label> |
|
| 120 |
+ <label for="img_file_1">이미지</label> |
|
| 102 | 121 |
<input type="radio" name="img_file_add" id="img_file_2"> |
| 103 |
- <label for="img_file_2">와이드 이미지 첨부</label> |
|
| 122 |
+ <label for="img_file_2">와이드</label> |
|
| 104 | 123 |
|
| 105 | 124 |
<div class="img_file_add_wrap basic_img_add_wrap"> |
| 106 | 125 |
<p class="info_title_text"><span class="c_e40000">*</span> 이미지 첨부 안내</p> |
--- src/main/webapp/publish/kakao_profile_add.html
+++ src/main/webapp/publish/kakao_profile_add.html
... | ... | @@ -238,7 +238,7 @@ |
| 238 | 238 |
<div class="titBox"> |
| 239 | 239 |
<p>- 카카오톡 채널(https://center-pf.kakao.com)에서 가입 후, 카카오톡 채널(발신프로필) 등록바랍니다.</p> |
| 240 | 240 |
<p>- 카카오톡 채널 관리자센터- [서비스관리] – 프로필명 클릭 – [관리]메뉴-카카오톡 채널 홈에서 홈 공개 및 검색허용을 하셔야 등록가능합니다.</p> |
| 241 |
- <p>- 카카오 알림톡/친구톡은 기업고객 전용 서비스입니다.</p> |
|
| 241 |
+ <p>- 카카오 알림톡/브랜드메시지는 기업고객 전용 서비스입니다.</p> |
|
| 242 | 242 |
</div> |
| 243 | 243 |
<div class="list_info"> |
| 244 | 244 |
<div class="btn_wrap"> |
--- src/main/webapp/publish/payment1.html
+++ src/main/webapp/publish/payment1.html
... | ... | @@ -470,7 +470,30 @@ |
| 470 | 470 |
</table> |
| 471 | 471 |
<span class="reqTxt4">* 텍스트 용량(Byte)에 대한 안내 : 한글2Byte, 영문·숫자 1Byte를 차지.</span> |
| 472 | 472 |
|
| 473 |
- <p class="tType1_title"><img src="/publish/images/content/icon_fee2.png" alt="알림톡 아이콘 이미지"> 친구톡</p> |
|
| 473 |
+ <p class="tType1_title"><img src="/publish/images/content/icon_fee2.png" alt="알림톡 아이콘 이미지"> 브랜드메시지</p> |
|
| 474 |
+ <table class="tType2"> |
|
| 475 |
+ <colgroup> |
|
| 476 |
+ <col style="width: 20%;"> |
|
| 477 |
+ <col style="width: 60%;"> |
|
| 478 |
+ <col style="width: 20%;"> |
|
| 479 |
+ </colgroup> |
|
| 480 |
+ <thead> |
|
| 481 |
+ <tr> |
|
| 482 |
+ <th>구분</th> |
|
| 483 |
+ <th>특징</th> |
|
| 484 |
+ <th>가격</th> |
|
| 485 |
+ </tr> |
|
| 486 |
+ </thead> |
|
| 487 |
+ <tbody> |
|
| 488 |
+ <tr> |
|
| 489 |
+ <th>브랜드메시지</th> |
|
| 490 |
+ <td>카카오톡을 통해 채널 친구 대상으로 발송이 가능한 광고성 메시지<br />(1,000자 이하의 텍스트 및 이미지 발송 가능)</td> |
|
| 491 |
+ <td>20원</td> |
|
| 492 |
+ </tr> |
|
| 493 |
+ </tbody> |
|
| 494 |
+ </table> |
|
| 495 |
+ <span class="reqTxt4">* 텍스트 용량(Byte)에 대한 안내 : 한글2Byte, 영문·숫자 1Byte를 차지.</span> |
|
| 496 |
+ <!-- <p class="tType1_title"><img src="/publish/images/content/icon_fee2.png" alt="알림톡 아이콘 이미지"> 친구톡</p> |
|
| 474 | 497 |
<table class="tType2"> |
| 475 | 498 |
<colgroup> |
| 476 | 499 |
<col style="width: 20%;"> |
... | ... | @@ -499,7 +522,7 @@ |
| 499 | 522 |
<td><span>22.9</span>원</td> |
| 500 | 523 |
</tr> |
| 501 | 524 |
</tbody> |
| 502 |
- </table> |
|
| 525 |
+ </table> --> |
|
| 503 | 526 |
<!-- <span class="reqTxt4">* 텍스트 용량(Byte)에 대한 안내 : 한글2Byte, 영문·숫자 1Byte를 차지.</span> --> |
| 504 | 527 |
|
| 505 | 528 |
<p class="tType1_title"><img src="/publish/images/content/icon_fee_fax.png" alt="팩스 아이콘 이미지"> 팩스</p> |
--- src/main/webapp/publish/payment4.html
+++ src/main/webapp/publish/payment4.html
... | ... | @@ -54,6 +54,84 @@ |
| 54 | 54 |
|
| 55 | 55 |
<body> |
| 56 | 56 |
|
| 57 |
+ <!-- 브랜드메시지 상세 팝업 --> |
|
| 58 |
+ <div class="tooltip-wrap"> |
|
| 59 |
+ <div class="popup-com adr_layer kakao_rev_popup brandmsg_detail_popup" tabindex="0" data-tooltip-con="brandmsg_detail_popup" data-focus="allimTalk_detail_popup" data-focus-prev="brandmsg_detail_popup-close" style="width:440px;"> |
|
| 60 |
+ <div class="popup_heading"> |
|
| 61 |
+ <p>문자내용</p> |
|
| 62 |
+ <button type="button" class="tooltip-close" data-focus="brandmsg_detail_popup-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> |
|
| 63 |
+ </div> |
|
| 64 |
+ <div class="layer_in"> |
|
| 65 |
+ <div class="list_tab_wrap2 kakao_rev_tab"> |
|
| 66 |
+ <!-- tab button --> |
|
| 67 |
+ <ul class="list_tab"> |
|
| 68 |
+ <li class="tab active"><button type="button" onclick="popupTab(this,'1');">카카오톡</button></li> |
|
| 69 |
+ <!-- <li class="tab"><button type="button" onclick="popupTab(this,'2');">대체문자</button></li> --> |
|
| 70 |
+ </ul> |
|
| 71 |
+ <!--// tab button --> |
|
| 72 |
+ </div> |
|
| 73 |
+ <div class="popCont current kakao_wrap " id="popCont_1"> |
|
| 74 |
+ <div class="phone_kakao friendtalk"> |
|
| 75 |
+ <div class="phoneIn"> |
|
| 76 |
+ <div class="rev_pop_middle clearfix"> |
|
| 77 |
+ |
|
| 78 |
+ <span>발송일시 : 2025-12-09 18:05:05</span> |
|
| 79 |
+ <span class="msg_com msg_allimtalk"> |
|
| 80 |
+ 브랜드(텍스트) |
|
| 81 |
+ </span> |
|
| 82 |
+ </div> |
|
| 83 |
+ <!-- 텍스트 미리보기 --> |
|
| 84 |
+ <div class="rev_pop_txt"> |
|
| 85 |
+ <div class="text_preview"> |
|
| 86 |
+ <p class="friend_talk_title"><span>(광고)</span></p> |
|
| 87 |
+ <div class="allimtalk_content"> |
|
| 88 |
+ <div class="kakao_image"> |
|
| 89 |
+ <img src="https://mud-kage.kakao.com/dn/Sseex/btsQMCVwCSJ/s0jeqzYQUjW1jX1Msszdk1/img_l.jpg" alt=""> |
|
| 90 |
+ </div> |
|
| 91 |
+ <p class="emphasis_side_text">강조표기 보조문구 미리보기</p> |
|
| 92 |
+ <p class="emphasis_title_text">타이틀 미리보기</p> |
|
| 93 |
+ <p class="template_text">내용미리보기</p> |
|
| 94 |
+ <p class="side_info_text">부가정보내용</p> |
|
| 95 |
+ <p class="channel_info_text">채널 추가 안내 메시지 미리보기</p> |
|
| 96 |
+ <button type="button" class="btn_kakao_type">버튼명</button> |
|
| 97 |
+ <button type="button" class="btn_kakao_type">버튼명</button> |
|
| 98 |
+ </div> |
|
| 99 |
+ <p class="kakao_block_text">수신거부 : 홈 > 채널차단</p> |
|
| 100 |
+ </div> |
|
| 101 |
+ </div> |
|
| 102 |
+ </div> |
|
| 103 |
+ </div> |
|
| 104 |
+ </div> |
|
| 105 |
+ <!-- <div class="popCont replace_send_popup" id="popCont_2"> |
|
| 106 |
+ <div class="rev_pop_in"> |
|
| 107 |
+ <div class="rev_pop_middle clearfix"> |
|
| 108 |
+ <span>발송일시 : 2021-05-28 16:52:30</span> |
|
| 109 |
+ <span class="msg_com msg_allimtalk">알림톡</span> |
|
| 110 |
+ </div> |
|
| 111 |
+ <div class="rev_pop_txt"> |
|
| 112 |
+ <ul> |
|
| 113 |
+ <li><img src="/publish/images/content/thumb1.jpg" alt="발송된 그림문자 미리보기"></li> |
|
| 114 |
+ <li><img src="/publish/images/content/thumb2.jpg" alt="발송된 그림문자 미리보기"></li> |
|
| 115 |
+ <li><img src="/publish/images/content/thumb3.jpg" alt="발송된 그림문자 미리보기"></li> |
|
| 116 |
+ </ul> |
|
| 117 |
+ <div> |
|
| 118 |
+ <p class="deny_receipt">(광고) 무료거부 080-888-8282</p> |
|
| 119 |
+ <p class="rev_cont">안녕하세요. 문자온미용실 입니다.<br> |
|
| 120 |
+ 여름 맞이 이벤트 입니다.<br> |
|
| 121 |
+ 7월부터 8월까지 모든 염색 10만원(시세이도 및 탈색은 별도) |
|
| 122 |
+ </p> |
|
| 123 |
+ </div> |
|
| 124 |
+ </div> |
|
| 125 |
+ </div> |
|
| 126 |
+ </div> --> |
|
| 127 |
+ <div class="popup_btn_wrap2" style="justify-content: center;"> |
|
| 128 |
+ <button type="button" class="tooltip-close" data-focus="brandmsg_detail_popup-close" data-focus-next="brandmsg_detail_popup">닫기</button> |
|
| 129 |
+ </div> |
|
| 130 |
+ </div> |
|
| 131 |
+ </div> |
|
| 132 |
+ </div> |
|
| 133 |
+ <!--// 브랜드메시지 상세 팝업 --> |
|
| 134 |
+ |
|
| 57 | 135 |
|
| 58 | 136 |
<!-- 알림톡 상세 팝업 --> |
| 59 | 137 |
<div class="tooltip-wrap"> |
... | ... | @@ -298,8 +376,8 @@ |
| 298 | 376 |
<li class="tab"><button type="button" onclick="listTab2(this,'4');">그림</button></li> |
| 299 | 377 |
<li class="tab"><button type="button" onclick="listTab2(this,'5');">선거</button></li> |
| 300 | 378 |
<li class="tab"><button type="button" onclick="listTab2(this,'5');">알림톡</button></li> |
| 301 |
- <!-- <li class="tab"><button type="button" onclick="listTab2(this,'5');">친구톡</button></li> --> |
|
| 302 |
- <li class="tab"><button type="button" onclick="listTab2(this,'5');">팩스</button></li> |
|
| 379 |
+ <li class="tab"><button type="button" onclick="listTab2(this,'5');">브랜드메시지</button></li> |
|
| 380 |
+ <li class="tab"><button type="button" onclick="listTab2(this,'6');">팩스</button></li> |
|
| 303 | 381 |
</ul> |
| 304 | 382 |
<!--// tab button --> |
| 305 | 383 |
</div> |
... | ... | @@ -322,7 +400,7 @@ |
| 322 | 400 |
<table class="tType4"> |
| 323 | 401 |
<colgroup> |
| 324 | 402 |
<col style="width: auto;"> |
| 325 |
- <col style="width: 9%;"> |
|
| 403 |
+ <col style="width: 15%;"> |
|
| 326 | 404 |
<col style="width: 10%;"> |
| 327 | 405 |
<col style="width: 12%;"> |
| 328 | 406 |
<col style="width: 12%;"> |
... | ... | @@ -359,6 +437,20 @@ |
| 359 | 437 |
</tr> |
| 360 | 438 |
<tr> |
| 361 | 439 |
<td>2025-04-21 18:19</td> |
| 440 |
+ <td>브랜드(텍스트)</td> |
|
| 441 |
+ <td><button class="btnType btnType20" data-tooltip="brandmsg_detail_popup">상세보기</button></td> |
|
| 442 |
+ <td> |
|
| 443 |
+ <p class="fwRg c_002c9a">187</p> |
|
| 444 |
+ </td> |
|
| 445 |
+ <td> |
|
| 446 |
+ <p class="fwRg c_222">23</p> |
|
| 447 |
+ </td> |
|
| 448 |
+ <td> |
|
| 449 |
+ <p class="fwRg c_002c9a">5</p> |
|
| 450 |
+ </td> |
|
| 451 |
+ </tr> |
|
| 452 |
+ <tr> |
|
| 453 |
+ <td>2025-04-21 18:19</td> |
|
| 362 | 454 |
<td>알림톡</td> |
| 363 | 455 |
<td><button class="btnType btnType20" data-tooltip="allimTalk_detail_popup">상세보기</button></td> |
| 364 | 456 |
<td> |
--- src/main/webapp/publish/sub2.html
+++ src/main/webapp/publish/sub2.html
... | ... | @@ -136,10 +136,8 @@ |
| 136 | 136 |
</div> |
| 137 | 137 |
<div class="custom_put1_txt"> |
| 138 | 138 |
<p><span class="vMiddle">*</span> <span class="c_e40000">캘리그래피체는 수정이 불가</span>합니다.</p> |
| 139 |
- <p><span class="vMiddle">*</span> |
|
| 140 |
- <spanspan class="c_e40000">제작형태와 요청사항이 상이한 경우 <spanspan class="c_e40000">추가로 비용이 발생할 수 있습니다.</spanspan> |
|
| 141 |
- </spanspan> |
|
| 142 |
- </p> |
|
| 139 |
+ <p><span class="vMiddle">*</span> <span class="c_e40000">제작형태와 요청사항이 상이한 경우 <span class="c_e40000">추가로 비용이 발생할 수 있습니다.</span></span></p> |
|
| 140 |
+ <p><span class="vMiddle">*</span> <span class="c_e40000">제작된 이미지는 알림톡 및 브랜드메시지 발송에는 사용할 수 없습니다.</span></p> |
|
| 143 | 141 |
</div> |
| 144 | 142 |
</td> |
| 145 | 143 |
</tr> |
--- src/main/webapp/publish/textingmsg.html
+++ src/main/webapp/publish/textingmsg.html
... | ... | @@ -651,7 +651,7 @@ |
| 651 | 651 |
<div class="titBox_result"> |
| 652 | 652 |
<p>- 최대 3개월간의 발송내역만 확인하실 수 있습니다.</p> |
| 653 | 653 |
<p>- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.</p> |
| 654 |
- <p>- 단문문자는 최대 24시간, 장문 및 그림문자는 최대 72시간까지 결과값이 수신되지 않은 경우 실패(비과금) 처리됩니다.</p> |
|
| 654 |
+ <p>- 기존 카카오 친구톡 서비스는 브랜드메시지로 변경되었습니다.</p> |
|
| 655 | 655 |
</div> |
| 656 | 656 |
<!--// 발송결과 개선 : 문구추가 --> |
| 657 | 657 |
|
... | ... | @@ -726,9 +726,9 @@ |
| 726 | 726 |
</dl> |
| 727 | 727 |
</div> |
| 728 | 728 |
</div> |
| 729 |
- <!-- <div class="rev_admin_in"> |
|
| 729 |
+ <div class="rev_admin_in"> |
|
| 730 | 730 |
<div class="rev_admin_top clearfix"> |
| 731 |
- <p>친구톡</p> |
|
| 731 |
+ <p>브랜드메시지</p> |
|
| 732 | 732 |
<p><span>171</span> 건</p> |
| 733 | 733 |
</div> |
| 734 | 734 |
<div class="rev_admin_btm"> |
... | ... | @@ -745,7 +745,7 @@ |
| 745 | 745 |
<dd><span class="c_e40000">0</span>건</dd> |
| 746 | 746 |
</dl> |
| 747 | 747 |
</div> |
| 748 |
- </div> --> |
|
| 748 |
+ </div> |
|
| 749 | 749 |
</div> |
| 750 | 750 |
|
| 751 | 751 |
<div class="list_tab_wrap2 type4"> |
... | ... | @@ -754,7 +754,7 @@ |
| 754 | 754 |
<li class="tab active"><button type="button" onclick="listTab2(this,'1');">전체</button> |
| 755 | 755 |
</li> |
| 756 | 756 |
<li class="tab"><button type="button" onclick="listTab2(this,'2');">알림톡</button></li> |
| 757 |
- <li class="tab"><button type="button" onclick="listTab2(this,'3');">친구톡</button></li> |
|
| 757 |
+ <li class="tab"><button type="button" onclick="listTab2(this,'3');">브랜드메시지</button></li> |
|
| 758 | 758 |
</ul> |
| 759 | 759 |
<!--// tab button --> |
| 760 | 760 |
</div> |
... | ... | @@ -810,7 +810,7 @@ |
| 810 | 810 |
<colgroup> |
| 811 | 811 |
<col style="width: 45px;"> |
| 812 | 812 |
<col style="width: 12%;"> |
| 813 |
- <col style="width: 8%;"> |
|
| 813 |
+ <col style="width: 10%;"> |
|
| 814 | 814 |
<col style="width: auto;"> |
| 815 | 815 |
<col style="width: 8%;"> |
| 816 | 816 |
<col style="width: 6%;"> |
... | ... | @@ -820,7 +820,7 @@ |
| 820 | 820 |
<col style="width: 6%;"> |
| 821 | 821 |
<col style="width: 6%;"> |
| 822 | 822 |
<col style="width: 9%;"> |
| 823 |
- <col style="width: 11%;"> |
|
| 823 |
+ <col style="width: 8%;"> |
|
| 824 | 824 |
</colgroup> |
| 825 | 825 |
<thead> |
| 826 | 826 |
<tr> |
... | ... | @@ -865,7 +865,7 @@ |
| 865 | 865 |
<input type="checkbox"> |
| 866 | 866 |
</td> |
| 867 | 867 |
<td>2024-01-09 17:42</td> |
| 868 |
- <td>단문</td> |
|
| 868 |
+ <td>알림톡</td> |
|
| 869 | 869 |
<td class="result_cont"><a href="#">내용을 클릭하면 상세보기 화면으로 이동합니다.</a></td> |
| 870 | 870 |
<td>125,895</td> |
| 871 | 871 |
<td> |
... | ... | @@ -893,6 +893,40 @@ |
| 893 | 893 |
<p><button class="btnType btnType20">예약취소</button></p> |
| 894 | 894 |
</td> |
| 895 | 895 |
</tr> |
| 896 |
+ <tr> |
|
| 897 |
+ <td> |
|
| 898 |
+ <label for="" class="label">선택</label> |
|
| 899 |
+ <input type="checkbox"> |
|
| 900 |
+ </td> |
|
| 901 |
+ <td>2024-01-09 17:42</td> |
|
| 902 |
+ <td>브랜드(텍스트)</td> |
|
| 903 |
+ <td class="result_cont"><a href="/publish/textingmsg_detail_brandmsg.html">내용을 클릭하면 상세보기 화면으로 이동합니다.</a></td> |
|
| 904 |
+ <td>125,895</td> |
|
| 905 |
+ <td> |
|
| 906 |
+ <p class="c_666">0</p> |
|
| 907 |
+ </td> |
|
| 908 |
+ <td> |
|
| 909 |
+ <p class="c_002c9a">0</p> |
|
| 910 |
+ </td> |
|
| 911 |
+ <td> |
|
| 912 |
+ <p class="c_e40000">0</p> |
|
| 913 |
+ </td> |
|
| 914 |
+ <td> |
|
| 915 |
+ <p class="c_002c9a">0</p> |
|
| 916 |
+ </td> |
|
| 917 |
+ <td> |
|
| 918 |
+ <p class="c_002c9a">0</p> |
|
| 919 |
+ </td> |
|
| 920 |
+ <td> |
|
| 921 |
+ <p class="c_e40000">125,895</p> |
|
| 922 |
+ </td> |
|
| 923 |
+ <td> |
|
| 924 |
+ 8,485,258원 |
|
| 925 |
+ </td> |
|
| 926 |
+ <td> |
|
| 927 |
+ <p><button class="btnType btnType20">예약취소</button></p> |
|
| 928 |
+ </td> |
|
| 929 |
+ </tr> |
|
| 896 | 930 |
</tbody> |
| 897 | 931 |
</table> |
| 898 | 932 |
</div> |
+++ src/main/webapp/publish/textingmsg_detail_brandmsg.html
... | ... | @@ -0,0 +1,845 @@ |
| 1 | +<!DOCTYPE html> | |
| 2 | +<html lang="ko"> | |
| 3 | + | |
| 4 | +<head> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
| 7 | + <title>문자온_발송결과</title> | |
| 8 | + | |
| 9 | + <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap" rel="stylesheet"> | |
| 10 | + <link rel="stylesheet" href="/publish/css/reset.css"> | |
| 11 | + <link rel="stylesheet" href="/publish/css/jquery.mCustomScrollbar.css"> | |
| 12 | + <link rel="stylesheet" href="/publish/css/common.css"> | |
| 13 | + <link rel="stylesheet" href="/publish/css/button.css"> | |
| 14 | + <link rel="stylesheet" href="/publish/css/content.css"> | |
| 15 | + <link rel="stylesheet" href="/publish/css/mem.css"> | |
| 16 | + <link rel="stylesheet" href="/publish/css/font.css"> | |
| 17 | + <link rel="stylesheet" href="/publish/css/popupLayer.css"> | |
| 18 | + <link rel="stylesheet" href="/publish/js/datepicker/classic.css"> | |
| 19 | + <link rel="stylesheet" href="/publish/js/datepicker/classic.date.css"> | |
| 20 | + | |
| 21 | + | |
| 22 | + <script src="/publish/js/jquery-3.5.0.js"></script> | |
| 23 | + <script src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script> | |
| 24 | + <script src="/publish/js/common.js"></script> | |
| 25 | + <script src="/publish/js/content.js"></script> | |
| 26 | + <script src="/publish/js/popupLayer.js"></script> | |
| 27 | + <script type="text/javascript" src="/publish/js/datepicker/picker.js"></script> | |
| 28 | + <script type="text/javascript" src="/publish/js/datepicker/picker.date.js"></script> | |
| 29 | + <script type="text/javascript" src="/publish/js/datepicker/ko_KR.js"></script> | |
| 30 | + | |
| 31 | + <script> | |
| 32 | + $(document).ready(function () { | |
| 33 | + $(".table_tab_wrap .tab_depth1 a").click(function () { | |
| 34 | + var tab_num = $(this).index(); | |
| 35 | + $(".table_cont .tb_wrap").eq(tab_num).show(); | |
| 36 | + $(".table_cont .tb_wrap").eq(tab_num).siblings(".tb_wrap").hide(); | |
| 37 | + if ($(".table_tab_wrap .tab_depth1 a:visible").length == tab_num + 1) { | |
| 38 | + $(this).css("border-radius", "0 5px 5px 0"); | |
| 39 | + } else {} | |
| 40 | + }) | |
| 41 | + }); | |
| 42 | + | |
| 43 | + function phoneTab(obj, tabId) { | |
| 44 | + var $tab = $(obj).closest("li"); | |
| 45 | + $tab.addClass("active"); | |
| 46 | + $tab.find("button").attr("title", "선택됨"); | |
| 47 | + $tab.siblings("li.tab").removeClass("active"); | |
| 48 | + $tab.siblings("li.tab").find("button").removeAttr("title"); | |
| 49 | + | |
| 50 | + var $tabCn = $("#tab_phone_" + tabId); | |
| 51 | + $tabCn.fadeIn(0); | |
| 52 | + $tabCn.addClass("current"); | |
| 53 | + | |
| 54 | + $(".tab_phone").not($tabCn).removeClass("current"); | |
| 55 | + $(".tab_phone").not($tabCn).fadeOut(0); | |
| 56 | + | |
| 57 | + currTabId = tabId; | |
| 58 | + } | |
| 59 | + </script> | |
| 60 | + | |
| 61 | +</head> | |
| 62 | + | |
| 63 | +<body> | |
| 64 | + <div class="mask"></div> | |
| 65 | + | |
| 66 | + <!-- 220411 이통사 스팸차단 및 번호도용 방지 서비스 안내 팝업 --> | |
| 67 | + <div class="tooltip-wrap"> | |
| 68 | + <div class="popup-com ad_layer popupJunk" tabindex="0" data-tooltip-con="popupJunk" data-focus="popupJunk" data-focus-prev="popupJunk-close" style="width: 795px;"> | |
| 69 | + <div class="popup_heading"> | |
| 70 | + <p>이통사 스팸차단 및 번호도용 방지 서비스 안내</p> | |
| 71 | + <button type="button" class="tooltip-close" data-focus="popupJunk-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> | |
| 72 | + </div> | |
| 73 | + <div class="layer_in"> | |
| 74 | + <div class="list_tab_wrap2 type5"> | |
| 75 | + <!-- tab button --> | |
| 76 | + <ul class="list_tab"> | |
| 77 | + <li class="tab active"><button type="button" onclick="listTab2(this,'1');">이통사 스팸 필터링 서비스</button></li> | |
| 78 | + <li class="tab"><button type="button" onclick="listTab2(this,'2');">번호도용 문자차단 서비스</button></li> | |
| 79 | + </ul><!-- // tab button --> | |
| 80 | + </div> | |
| 81 | + <!-- 광고문자 전송규정 안내 --> | |
| 82 | + <div class="adpop_cont current" id="listTab2_1"> | |
| 83 | + <div class="titBox"> | |
| 84 | + <div class="notibox">한국인터넷진흥원 불법스팸대응센터에서 스팸종합대책을 마련함에 따라,<br>각 통신사에서 스팸차단서비스라는 서비스를 진행하고 있습니다.</div> | |
| 85 | + <p>- 스팸차단서비스는 이동통신사의 별도 조합 기준에 따른 스팸확률에 의한 차단으로 스팸으로 판단되는 문자를</p> | |
| 86 | + <p> 휴대폰 문자수신함이 아닌, 각 통신사별 스팸보관함에 전송한 후 결과값은 성공을 처리합니다(정상과금 처리)</p> | |
| 87 | + <p>- 스팸문자로 저장된것이 확인되었다면, 스팸차단서비스를 해제하여 이용하시기 바랍니다.</p> | |
| 88 | + <p> (개인정보보호정책으로 인해 본인 이외 타인은 확인 불가하므로, 본인이 직접 확인해야합니다.)</p> | |
| 89 | + </div> | |
| 90 | + <div class="adpop1_bottom"> | |
| 91 | + <p class="title_box"><span>01.</span>통신사 홈페이지를 통해 확인하는 방법<button type="button" class="view_button" onclick="popContentBoxView(this);"><i></i></button></p> | |
| 92 | + <div class="content_box"> | |
| 93 | + <ul class="list"> | |
| 94 | + <li class="tit"> | |
| 95 | + <ul> | |
| 96 | + <li> | |
| 97 | + <div class="img_box"><img src="/publish/images/content/junk_agency001.png" alt="SK telecom" /></div> | |
| 98 | + <a href="http://www.tworld.co.kr/normal.do?serviceId=S_PROD2001&viewId=V_PROD7070&prod_id=NA00002121&uCode=u1_2" target="_blank" rel="nosublink">T월드 문자 스팸필터링 바로가기</a> | |
| 99 | + </li> | |
| 100 | + <li> | |
| 101 | + <div class="img_box"><img src="/publish/images/content/junk_agency002.png" alt="olleh KT" /></div> | |
| 102 | + <a href="https://product.kt.com/wDic/productDetail.do?ItemCode=479" target="_blank" rel="nosublink">KT (안심)스팸차단 바로가기</a> | |
| 103 | + </li> | |
| 104 | + <li> | |
| 105 | + <div class="img_box"><img src="/publish/images/content/junk_agency003.png" alt="LG U+" /></div> | |
| 106 | + <a href="https://www.lguplus.com/plan/addon/addon-call-msg/LRZ0000277" target="_blank" rel="nosublink">U+ 스팸차단 바로가기</a> | |
| 107 | + </li> | |
| 108 | + </ul> | |
| 109 | + </li> | |
| 110 | + <li> | |
| 111 | + <dl> | |
| 112 | + <dt><img src="/publish/images/content/junk_agency001_01.png" alt="T world" /></dt> | |
| 113 | + <dd> | |
| 114 | + <p>Tworld<a href="https://www.tworld.co.kr" target="_blank" rel="nosublink">(www.tworld.co.kr)</a> 홈페이지 접속 → 로그인 → [스팸필터링] 검색<br>→ 부가서비스 - 문자 스팸필터링 → 설정 → SMS인증 → 스팸차단 메시지 확인</p> | |
| 115 | + </dd> | |
| 116 | + </dl> | |
| 117 | + </li> | |
| 118 | + <li> | |
| 119 | + <dl> | |
| 120 | + <dt><img src="/publish/images/content/junk_agency002_01.png" alt="olleh O" /></dt> | |
| 121 | + <dd> | |
| 122 | + <p>KT<a href="https://www.kt.com/" target="_blank" rel="nosublink">(www.kt.com)</a> 홈페이지 접속 → 로그인 →[스팸차단서비스] 검색<br>→ 스팸차단서비스 → 스팸메시지함 → 스팸차단 메시지 확인</p> | |
| 123 | + </dd> | |
| 124 | + </dl> | |
| 125 | + </li> | |
| 126 | + <li> | |
| 127 | + <dl> | |
| 128 | + <dt><img src="/publish/images/content/junk_agency003_01.png" alt="LG U+" /></dt> | |
| 129 | + <dd> | |
| 130 | + <p>U+<a href="https://www.uplus.co.kr" target="_blank" rel="nosublink">(www.uplus.co.kr)</a> 홈페이지 접속 → 로그인 → [스팸차단] 검색<br>→ 부가서비스 - 스팸차단 → 스팸내역 조회 → SMS인증 → 스팸차단 메시지 확인</p> | |
| 131 | + </dd> | |
| 132 | + </dl> | |
| 133 | + </li> | |
| 134 | + </ul> | |
| 135 | + </div> | |
| 136 | + </div> | |
| 137 | + <div class="adpop1_bottom"> | |
| 138 | + <p class="title_box"><span>02.</span>통신사 어플을 통해 확인하는 방법<button type="button" class="view_button" onclick="popContentBoxView(this);"><i></i></button></p> | |
| 139 | + <div class="content_box"> | |
| 140 | + <ul class="list02"> | |
| 141 | + <li> | |
| 142 | + <div class="img_box"><img src="/publish/images/content/junk_agency01_02.png" alt="SKT" /></div> | |
| 143 | + <dl> | |
| 144 | + <dt>SKT · T스팸필터링</dt> | |
| 145 | + <dd>T Store, 구글 Play 스토어<br>다운가능</dd> | |
| 146 | + </dl> | |
| 147 | + </li> | |
| 148 | + <li> | |
| 149 | + <div class="img_box"><img src="/publish/images/content/junk_agency02_02.png" alt="KT" /></div> | |
| 150 | + <dl> | |
| 151 | + <dt>KT올레 · 올레스팸차단서비스</dt> | |
| 152 | + <dd>구글 Play 스토어 다운가능</dd> | |
| 153 | + </dl> | |
| 154 | + </li> | |
| 155 | + <li> | |
| 156 | + <div class="img_box"><img src="/publish/images/content/junk_agency03_02.png" alt="LG" /></div> | |
| 157 | + <dl> | |
| 158 | + <dt>LG U+ · U+ 스팸차단</dt> | |
| 159 | + <dd>구글 Play 스토어 다운가능</dd> | |
| 160 | + </dl> | |
| 161 | + </li> | |
| 162 | + </ul> | |
| 163 | + </div> | |
| 164 | + </div> | |
| 165 | + <div class="adpop1_bottom"> | |
| 166 | + <p class="title_box"><span>03.</span>통신사 고객센터를 확인하는 방법<button type="button" class="view_button" onclick="popContentBoxView(this);"><i></i></button></p> | |
| 167 | + <div class="content_box"> | |
| 168 | + <dl class="cscenter"> | |
| 169 | + <dt>휴대폰 114 + 통화버튼</dt> | |
| 170 | + <dd> | |
| 171 | + <ul> | |
| 172 | + <li>· SKT 고객센터(1599-0011)</li> | |
| 173 | + <li>· KT올레 고객센터(100)</li> | |
| 174 | + <li>· LG U+ 고객센터(1544-0010)</li> | |
| 175 | + </ul> | |
| 176 | + </dd> | |
| 177 | + </dl> | |
| 178 | + </div> | |
| 179 | + </div> | |
| 180 | + </div><!-- // 광고문자 전송규정 안내 --> | |
| 181 | + | |
| 182 | + <!-- 광고문자 수신동의 안내 --> | |
| 183 | + <div class="adpop_cont" id="listTab2_2"> | |
| 184 | + <div class="titBox"> | |
| 185 | + <div class="notibox">웹에서 발송되는 스팸, 스미싱 문자에 내 번호가 회신번호로 악용되는 것을 방지해주는 서비스로<br>해당 서비스에 가입된 경우 인터넷 문자 발송서비스를 통해 본인 휴대폰번호로 문자 발송시 차단됩니다</div> | |
| 186 | + <p>- 모든 전송 결과값이 실패로 확인되는 경우, 번호도용문자차단서비스에 가입여부 확인 후 해당서비스를 해지</p> | |
| 187 | + <p> 하신 후 전송하시기 바랍니다.</p> | |
| 188 | + </div> | |
| 189 | + <div class="adpop1_bottom"> | |
| 190 | + <p class="title_box"><span>01.</span>통신사 홈페이지를 통해 확인하는 방법<button type="button" class="view_button" onclick="popContentBoxView(this);"><i></i></button></p> | |
| 191 | + <div class="content_box"> | |
| 192 | + <ul class="list"> | |
| 193 | + <li class="tit"> | |
| 194 | + <ul> | |
| 195 | + <li> | |
| 196 | + <div class="img_box"><img src="/publish/images/content/junk_agency001.png" alt="SKT" /></div> | |
| 197 | + <a href="http://www.tworld.co.kr/normal.do?serviceId=S_PROD2001&viewId=V_PROD7070&prod_id=NA00004406&uCode=u1_2" target="_blank" rel="nosublink">T번호도용문자차단 바로가기</a> | |
| 198 | + </li> | |
| 199 | + <li> | |
| 200 | + <div class="img_box"><img src="/publish/images/content/junk_agency002.png" alt="KT" /></div> | |
| 201 | + <a href="https://product.kt.com/wDic/productDetail.do?ItemCode=1047" target="_blank" rel="nosublink">KT번호도용문자차단 바로가기</a> | |
| 202 | + </li> | |
| 203 | + <li> | |
| 204 | + <div class="img_box"><img src="/publish/images/content/junk_agency003.png" alt="Uplus" /></div> | |
| 205 | + <a href="https://www.lguplus.com/plan/addon/addon-call-msg/LRZ0002297" target="_blank" rel="nosublink">U+ 번호도용문자차단 바로가기</a> | |
| 206 | + </li> | |
| 207 | + </ul> | |
| 208 | + </li> | |
| 209 | + <li> | |
| 210 | + <dl> | |
| 211 | + <dt><img src="/publish/images/content/junk_agency001_01.png" alt="tworld" /></dt> | |
| 212 | + <dd> | |
| 213 | + <p>Tworld<a href="https://www.tworld.co.kr" target="_blank" rel="nosublink">(www.tworld.co.kr)</a> 홈페이지 접속 → 로그인<br>→ [번호도용문자차단] 검색 → 부가서비스 → 번호도용문자차단 → 해지</p> | |
| 214 | + </dd> | |
| 215 | + </dl> | |
| 216 | + </li> | |
| 217 | + <li> | |
| 218 | + <dl> | |
| 219 | + <dt><img src="/publish/images/content/junk_agency002_01.png" alt="kt" /></dt> | |
| 220 | + <dd> | |
| 221 | + <p>KT<a href="https://www.kt.com" target="_blank" rel="nosublink">(www.kt.com)</a> 홈페이지 접속 → 로그인<br>→ [번호도용문자차단] 검색 → 부가서비스 → 번호도용문자차단 → 해지</p> | |
| 222 | + </dd> | |
| 223 | + </dl> | |
| 224 | + </li> | |
| 225 | + <li> | |
| 226 | + <dl> | |
| 227 | + <dt><img src="/publish/images/content/junk_agency003_01.png" alt="LGuplus" /></dt> | |
| 228 | + <dd> | |
| 229 | + <p>U+<a href="https://www.uplus.co.kr" target="_blank" rel="nosublink">(www.uplus.co.kr)</a> 홈페이지 접속 → 로그인 → [번호도용문자차단] 검색<br>→ 부가서비스 → 번호도용문자차단 → 해지</p> | |
| 230 | + </dd> | |
| 231 | + </dl> | |
| 232 | + </li> | |
| 233 | + </ul> | |
| 234 | + </div> | |
| 235 | + </div> | |
| 236 | + <div class="adpop1_bottom"> | |
| 237 | + <p class="title_box"><span>02.</span>통신사 고객센터를 확인하는 방법<button type="button" class="view_button" onclick="popContentBoxView(this);"><i></i></button></p> | |
| 238 | + <div class="content_box"> | |
| 239 | + <dl class="cscenter"> | |
| 240 | + <dt>휴대폰 114 + 통화버튼</dt> | |
| 241 | + <dd> | |
| 242 | + <ul> | |
| 243 | + <li>· SKT 고객센터(1599-0011)</li> | |
| 244 | + <li>· KT올레 고객센터(100)</li> | |
| 245 | + <li>· LG U+ 고객센터(1544-0010)</li> | |
| 246 | + </ul> | |
| 247 | + </dd> | |
| 248 | + </dl> | |
| 249 | + </div> | |
| 250 | + </div> | |
| 251 | + </div><!-- // 광고문자 수신동의 안내 --> | |
| 252 | + </div> | |
| 253 | + <div class="popup_btn_wrap2" style="margin: 0 auto 30px auto;"> | |
| 254 | + <button type="button" class="tooltip-close" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button> | |
| 255 | + </div> | |
| 256 | + </div> | |
| 257 | + </div> | |
| 258 | + <!-- //220411 이통사 스팸차단 및 번호도용 방지 서비스 안내 팝업 --> | |
| 259 | + | |
| 260 | + | |
| 261 | + <!-- 발송대상리스트 팝업 --> | |
| 262 | + <div class="tooltip-wrap"> | |
| 263 | + <div class="popup-com ad_layer rev_popup04" tabindex="0" data-tooltip-con="rev_popup04" data-focus="rev_popup04" data-focus-prev="rev_popup04-close" style="width:595px;"> | |
| 264 | + <div class="popup_heading"> | |
| 265 | + <p>발송대상 리스트</p> | |
| 266 | + <button type="button" class="tooltip-close" data-focus="rev_popup04-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> | |
| 267 | + </div> | |
| 268 | + <div class="layer_in"> | |
| 269 | + | |
| 270 | + <div class="popup_search_type2"> | |
| 271 | + <label for="" class="label">검색종류 선택</label> | |
| 272 | + <div class="title">수신번호</div> | |
| 273 | + <label for="" class="label">검색어입력</label> | |
| 274 | + <input type="text" class="send_text" id="searchInput" placeholder="3자 이상 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='3자 이상 입력하세요.'"> | |
| 275 | + <button type="button" id="searchBtn" class="btnType btnType2" style="width:63px; margin:0;">검색</button> | |
| 276 | + </div> | |
| 277 | + | |
| 278 | + <div class="list_tab_wrap2 type4"> | |
| 279 | + <ul class="tabType3" id="tabType" name="tabType"> | |
| 280 | + <li class="tab active"><button type="button" id="initTab" title="선택됨">전체</button></li> | |
| 281 | + <li class="tab"><button type="button">대기</button></li> | |
| 282 | + <li class="tab"><button type="button">성공</button></li> | |
| 283 | + <li class="tab"><button type="button">실패</button></li> | |
| 284 | + </ul> | |
| 285 | + </div> | |
| 286 | + | |
| 287 | + <div class="tb_wrap" style="min-height:200px;"> | |
| 288 | + <table class="tType4"> | |
| 289 | + <colgroup> | |
| 290 | + <col style="width: 30%;"> | |
| 291 | + <col style="width: 40%;"> | |
| 292 | + <col style="width: 30%;"> | |
| 293 | + </colgroup> | |
| 294 | + <thead> | |
| 295 | + <tr> | |
| 296 | + <th>이름 | |
| 297 | + <div class="sort_wrap"> | |
| 298 | + <input type="button" class="sort sortBtn"> | |
| 299 | + </div> | |
| 300 | + </th> | |
| 301 | + <th>수신번호 | |
| 302 | + <div class="sort_wrap"> | |
| 303 | + <input type="button" class="sort sortBtn"> | |
| 304 | + </div> | |
| 305 | + </th> | |
| 306 | + <th>상세결과 | |
| 307 | + <div class="sort_wrap"> | |
| 308 | + <input type="button" class="sort sortBtn"> | |
| 309 | + </div> | |
| 310 | + </th> | |
| 311 | + </tr> | |
| 312 | + </thead> | |
| 313 | + <tbody> | |
| 314 | + <tr> | |
| 315 | + <td>홍길동</td> | |
| 316 | + <td>010-1234-5678</td> | |
| 317 | + <td>성공(카톡)</td> | |
| 318 | + </tr> | |
| 319 | + <tr> | |
| 320 | + <td>홍길동</td> | |
| 321 | + <td>010-1234-5678</td> | |
| 322 | + <td>성공(카톡)</td> | |
| 323 | + </tr> | |
| 324 | + <tr> | |
| 325 | + <td>홍길동</td> | |
| 326 | + <td>010-1234-5678</td> | |
| 327 | + <td>실패(카톡+문자)</td> | |
| 328 | + </tr> | |
| 329 | + <tr> | |
| 330 | + <td>홍길동</td> | |
| 331 | + <td>010-1234-5678</td> | |
| 332 | + <td>성공(문자)</td> | |
| 333 | + </tr> | |
| 334 | + <tr> | |
| 335 | + <td>홍길동</td> | |
| 336 | + <td>010-1234-5678</td> | |
| 337 | + <td>성공(문자)</td> | |
| 338 | + </tr> | |
| 339 | + <tr> | |
| 340 | + <td>홍길동</td> | |
| 341 | + <td>010-1234-5678</td> | |
| 342 | + <td>실패(카톡+문자)</td> | |
| 343 | + </tr> | |
| 344 | + <tr> | |
| 345 | + <td>홍길동</td> | |
| 346 | + <td>010-1234-5678</td> | |
| 347 | + <td>성공(카톡)</td> | |
| 348 | + </tr> | |
| 349 | + </tbody> | |
| 350 | + </table> | |
| 351 | + | |
| 352 | + </div> | |
| 353 | + | |
| 354 | + <div class="table_btn clearfix"> | |
| 355 | + <div class="table_btn_left"> | |
| 356 | + <button type="button" class="excel_btn btnType"><i class="downroad"></i>엑셀 다운로드</button> | |
| 357 | + <button type="button" data-tooltip="rev_popup02" class="btnType btnType14"><i class="add_img"></i>주소록 등록</button> | |
| 358 | + <button type="button" class="btnType btnType15" style="display: none;"><i class="remove_img"></i>주소록에서 번호 삭제</button> | |
| 359 | + </div> | |
| 360 | + </div> | |
| 361 | + | |
| 362 | + <!-- pagination --> | |
| 363 | + <ul class="pagination"> | |
| 364 | + <li class="page_first"><button><img src="/publish/images/content/page_first.png" alt=""></button></li> | |
| 365 | + <li class="page_prev"><button><img src="/publish/images/content/page_prev.png" alt=""></button></li> | |
| 366 | + <li class="on"><button>1</button></li> | |
| 367 | + <li><button>2</button></li> | |
| 368 | + <li><button>3</button></li> | |
| 369 | + <li><button>4</button></li> | |
| 370 | + <li><button>5</button></li> | |
| 371 | + <li><button>6</button></li> | |
| 372 | + <li><button>7</button></li> | |
| 373 | + <li><button>8</button></li> | |
| 374 | + <li><button>9</button></li> | |
| 375 | + <li><button>10</button></li> | |
| 376 | + <li class="page_next"><button><img src="/publish/images/content/page_next.png" alt=""></button></li> | |
| 377 | + <li class="page_last"><button><img src="/publish/images/content/page_last.png" alt=""></button></li> | |
| 378 | + </ul><!-- pagination --> | |
| 379 | + | |
| 380 | + </div> | |
| 381 | + <div class="popup_btn_wrap2" style="margin: -40px auto 30px auto;"> | |
| 382 | + <button type="button" class="tooltip-close" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button> | |
| 383 | + </div> | |
| 384 | + | |
| 385 | + </div> | |
| 386 | + </div> | |
| 387 | + <!-- //발송대상 리스트 안내 팝업 --> | |
| 388 | + | |
| 389 | + <!-- 그룹등록 팝업 data-tooltip:rev_popup02 --> | |
| 390 | + <div class="tooltip-wrap"> | |
| 391 | + <div class="popup-com adr_layer rev_popup02" tabindex="0" data-tooltip-con="rev_popup02" data-focus="rev_popup02" data-focus-prev="rev_popup02-close" style="width: 500px;"> | |
| 392 | + <div class="popup_heading"> | |
| 393 | + <p>그룹등록</p> | |
| 394 | + <button type="button" class="tooltip-close" data-focus="rev_popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> | |
| 395 | + </div> | |
| 396 | + <div class="layer_in"> | |
| 397 | + <div class="gorup_join_cont"> | |
| 398 | + <p class="adr_pop_title">선택된 발송내역 전화번호를 그룹으로 등록합니다.</p> | |
| 399 | + <div class="group_input" style="margin-top: 0;"> | |
| 400 | + <div class="input_left">그룹이름</div> | |
| 401 | + <div class="input_right"> | |
| 402 | + <label for="" class="label">새 그룹명 입력</label> | |
| 403 | + <input type="text" placeholder="새 그룹명 입력" onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명 입력'" class="inputLight"> | |
| 404 | + </div> | |
| 405 | + </div> | |
| 406 | + <div class="popup_btn_wrap2"> | |
| 407 | + <button type="button">저장</button> | |
| 408 | + <button type="button" class="tooltip-close" data-focus="rev_popup02-close" data-focus-next="rev_popup02">취소</button> | |
| 409 | + </div> | |
| 410 | + </div> | |
| 411 | + </div> | |
| 412 | + </div> | |
| 413 | + </div> | |
| 414 | + <!--// 발송실패사유 팝업 --> | |
| 415 | + | |
| 416 | + <!-- skip 메뉴 --> | |
| 417 | + <div class="skip_menu"> | |
| 418 | + <a href="#cont" title="본문 바로가기" class="contGo">본문 바로가기</a> | |
| 419 | + </div> | |
| 420 | + <!--// skip 메뉴 --> | |
| 421 | + <!-- quick 메뉴 --> | |
| 422 | + <div class="quickMenu"> | |
| 423 | + <div> | |
| 424 | + <p class="quick_title">QUICK<br>MENU</p> | |
| 425 | + <p class="quick_title2">QUICK</p> | |
| 426 | + <ul class="quickMenuIn"> | |
| 427 | + <li> | |
| 428 | + <a href="/publish/index.html"><i class="quick1"></i><span>이용안내</span></a> | |
| 429 | + <div class="hover_cont">이용안내</div> | |
| 430 | + </li> | |
| 431 | + <li> | |
| 432 | + <a href="#"><i class="quick2"></i><span>채팅상담</span></a> | |
| 433 | + <div class="hover_cont">채팅상담</div> | |
| 434 | + </li> | |
| 435 | + <li> | |
| 436 | + <a href="#"><i class="quick3"></i><span>원격지원</span></a> | |
| 437 | + <div class="hover_cont">원격지원</div> | |
| 438 | + </li> | |
| 439 | + <li> | |
| 440 | + <a href="#"><i class="quick4"></i><span>맞춤제작</span></a> | |
| 441 | + <div class="hover_cont">맞춤제작</div> | |
| 442 | + </li> | |
| 443 | + <li> | |
| 444 | + <a href="#"><i class="quick5"></i><span>주소록 등록</span></a> | |
| 445 | + <div class="hover_cont">주소록 등록</div> | |
| 446 | + </li> | |
| 447 | + <li> | |
| 448 | + <a href="#"><i class="quick6"></i><span>엑셀 전송</span></a> | |
| 449 | + <div class="hover_cont">엑셀 대량전송</div> | |
| 450 | + </li> | |
| 451 | + <li> | |
| 452 | + <a href="#"><i class="quick7"></i><span>견적서</span></a> | |
| 453 | + <div class="hover_cont">견적서</div> | |
| 454 | + </li> | |
| 455 | + <li> | |
| 456 | + <a href="#"><i class="quick8"></i><span>결제</span></a> | |
| 457 | + <div class="hover_cont">결제</div> | |
| 458 | + </li> | |
| 459 | + <li> | |
| 460 | + <a href="#"><i class="quick9"></i><span>영수증/계산서</span></a> | |
| 461 | + <div class="hover_cont">영수증/계산서</div> | |
| 462 | + </li> | |
| 463 | + </ul> | |
| 464 | + <button type="button" class="goTop" title="맨 위로 이동">TOP<i></i></button> | |
| 465 | + </div> | |
| 466 | + </div> | |
| 467 | + <!--// quick 메뉴 --> | |
| 468 | + <!-- header 영역 --> | |
| 469 | + <header id="header" class="header"> | |
| 470 | + <!-- header top 영역 --> | |
| 471 | + <div class="header_top"> | |
| 472 | + <div class="inner"> | |
| 473 | + <ul class="menu_left"> | |
| 474 | + <li><a href="#"><i class="hdTop_fav"></i>즐겨찾기추가</a></li> | |
| 475 | + <li><a href="#"><i class="hdTop_mypage"></i>마이페이지</a></li> | |
| 476 | + <li><a href="#"><i class="hdTop_center"></i>고객센터</a></li> | |
| 477 | + </ul> | |
| 478 | + <ul class="menu_right"> | |
| 479 | + <li><a href="#">충전하기</a></li> | |
| 480 | + <li class="SortLine"><a href="#">요금안내</a></li> | |
| 481 | + <li class="SortLine"><a href="#">이용안내</a></li> | |
| 482 | + <li class="SortLine"><a href="#">1:1고객상담</a></li> | |
| 483 | + </ul> | |
| 484 | + </div> | |
| 485 | + </div><!-- header top 영역 --> | |
| 486 | + <!-- header body 영역 --> | |
| 487 | + <div class="header_body"> | |
| 488 | + <div class="inner table"> | |
| 489 | + <h1 class="logo"><a href="/publish/index.html" alt="문자온 메인 바로가기"><img src="/publish/images/CI.png" alt="문자온 CI"></a></h1> | |
| 490 | + <ul class="gnbWrap table_cell"> | |
| 491 | + <li><a href="#">문자발송</a></li> | |
| 492 | + <li><a href="#">선거문자</a></li> | |
| 493 | + <li><a href="#">맞춤제작</a></li> | |
| 494 | + <li><a href="#">비즈톡</a></li> | |
| 495 | + <li><a href="#">주소록 관리</a></li> | |
| 496 | + <li><a href="#">발송결과</a></li> | |
| 497 | + <li><a href="#">예약관리</a></li> | |
| 498 | + <li><a href="#">결제내역</a></li> | |
| 499 | + </ul> | |
| 500 | + <div class="s_menu"> | |
| 501 | + <i class="allSearch_info"><span>문자검색</span></i> | |
| 502 | + <button type="button" title="전체검색" class="allSearch" onclick="searchToggle();"><img src="/publish/images/search.png" alt="검색영역 열기" class="allMenu"></button> | |
| 503 | + <button type="button" title="전체메뉴"><img src="/publish/images/all_menu.png" alt="전체메뉴 열기"></button> | |
| 504 | + </div> | |
| 505 | + </div> | |
| 506 | + <!-- search popup 영역 --> | |
| 507 | + <div class="pop_search"> | |
| 508 | + <div class="inner"> | |
| 509 | + <div class="area_search"> | |
| 510 | + <select name="" id=""> | |
| 511 | + <option value="">그림문자</option> | |
| 512 | + <option value="">단문문자</option> | |
| 513 | + <option value="">장문문자</option> | |
| 514 | + <option value="">GIF</option> | |
| 515 | + </select> | |
| 516 | + <input type="text" placeholder="문자샘플 검색하기"> | |
| 517 | + <button><img src="/publish/images/search02.png" alt=""></button> | |
| 518 | + </div> | |
| 519 | + <div class="area_popular"> | |
| 520 | + <p><i></i>인기검색어</p> | |
| 521 | + <ul class="popular_tag"> | |
| 522 | + <li><a href="#">#정월대보름</a></li> | |
| 523 | + <li class="on"><a href="#">#추석</a></li> | |
| 524 | + <li><a href="#">#가을인사</a></li> | |
| 525 | + <li><a href="#">#좋은하루</a></li> | |
| 526 | + </ul> | |
| 527 | + </div> | |
| 528 | + <button class="btn_close" onclick="searchToggle();"><img src="/publish/images/btn_searchclose.png" alt=""></button> | |
| 529 | + </div> | |
| 530 | + </div> | |
| 531 | + <!--// search popup 영역 --> | |
| 532 | + </div> | |
| 533 | + <!--// header body 영역 --> | |
| 534 | + <div id="login" class="login"> | |
| 535 | + <div class="inner table"> | |
| 536 | + <div class="login_left table_cell"> | |
| 537 | + <div class="login_put"> | |
| 538 | + <label for="id_text" class="label"></label> | |
| 539 | + <input type="text" placeholder="아이디를 입력해주세요" id="id_text" class="id_text" maxlength="30" size="18"> | |
| 540 | + <label for="password_text" class="label"></label> | |
| 541 | + <input type="password" placeholder="비밀번호를 입력해주세요" id="password_text" class="password_text" maxlength="30" size="18"> | |
| 542 | + <label for="login_button" class="label"></label> | |
| 543 | + <button type="submit" class="btnType btnType1" class="login_button">로그인</button> | |
| 544 | + </div> | |
| 545 | + <div class="login_save"> | |
| 546 | + <input type="checkbox" id="save_id"> | |
| 547 | + <label for="save_id">아이디 저장</label> | |
| 548 | + </div> | |
| 549 | + <div class="login_find"> | |
| 550 | + <a href="#">아이디찾기 /</a> | |
| 551 | + <a href="#">비밀번호 찾기</a> | |
| 552 | + </div> | |
| 553 | + <div> | |
| 554 | + <button type="button" class="btnType btnType2">회원가입</button> | |
| 555 | + <button type="button" class="btnType btnType3">둘러보기</button> | |
| 556 | + </div> | |
| 557 | + </div> | |
| 558 | + <div class="login_right"> | |
| 559 | + <span><i></i>이달의 이벤트</span> | |
| 560 | + <button type="button" class="btnType btnType4">바로가기</button> | |
| 561 | + </div> | |
| 562 | + </div> | |
| 563 | + </div> | |
| 564 | + <!--// login 영역 --> | |
| 565 | + </header> | |
| 566 | + <!--// header 영역 --> | |
| 567 | + <!-- login 영역 --> | |
| 568 | + <!-- content 영역 --> | |
| 569 | + <div id="container" class="cont sub"> | |
| 570 | + <div class="inner"> | |
| 571 | + <!-- send top --> | |
| 572 | + <div class="send_top"> | |
| 573 | + <!-- 결제관리 - 요금 사용내역 --> | |
| 574 | + <div class="rev_admin_cont serv_content current"> | |
| 575 | + <div class="heading"> | |
| 576 | + <h2>발송결과 상세</h2> | |
| 577 | + <button type="button" class="button junk" data-tooltip="popupJunk" style="right:0;">통신사 스팸규격안내</button> | |
| 578 | + </div> | |
| 579 | + | |
| 580 | + <!-- 발송결과 상세 및 미리보기--> | |
| 581 | + | |
| 582 | + <div class="send_general"> | |
| 583 | + <!-- 발송결과 상세 정보 --> | |
| 584 | + <div class="resultcont_left"> | |
| 585 | + <!--발송정보--> | |
| 586 | + <div class="res_info"> | |
| 587 | + <div class="res_info_in"> | |
| 588 | + <div class="res_info_top clearfix"> | |
| 589 | + <p>발송정보</p> | |
| 590 | + <p><button type="button" class="btnType btnType3" onclick="fnMjMsgReSendAll();">재전송</button></p> | |
| 591 | + </div> | |
| 592 | + <div class="res_info_btm"> | |
| 593 | + <dl> | |
| 594 | + <dt>발송일시</dt> | |
| 595 | + <dd>2025-04-21 18:19:48</dd> | |
| 596 | + </dl> | |
| 597 | + <dl> | |
| 598 | + <dt>형태</dt> | |
| 599 | + <dd> | |
| 600 | + 브랜드(텍스트) | |
| 601 | + </dd> | |
| 602 | + </dl> | |
| 603 | + <dl> | |
| 604 | + <dt>발송건수</dt> | |
| 605 | + <dd><span class="c_222">1</span>건</dd> | |
| 606 | + </dl> | |
| 607 | + <dl> | |
| 608 | + <dt>채널정보</dt> | |
| 609 | + <dd>@아이티앤</dd> | |
| 610 | + </dl> | |
| 611 | + <dl> | |
| 612 | + <dt>진행상황</dt> | |
| 613 | + <dd>완료</dd> | |
| 614 | + </dl> | |
| 615 | + | |
| 616 | + </div> | |
| 617 | + <div class="res_info_btm"> | |
| 618 | + <dl> | |
| 619 | + <dt class="btm_charge">발송요금(합계)</dt> | |
| 620 | + <dd><span class="stcharge">5</span>원</dd> | |
| 621 | + <!--<dd><span class="stcharge">-</span>원</dd>--> | |
| 622 | + <!-- 예역취소 후 금액은 하이픈 처리--> | |
| 623 | + </dl> | |
| 624 | + <div class="charge_line"> | |
| 625 | + <dl> | |
| 626 | + <dt class="charge_title">· 카카오톡</dt> | |
| 627 | + <dd><span class="c_222">5</span>원</dd> | |
| 628 | + </dl> | |
| 629 | + <dl> | |
| 630 | + <dt class="charge_title">· 대체문자</dt> | |
| 631 | + <dd><span class="c_222">0</span>원</dd> | |
| 632 | + </dl> | |
| 633 | + </div> | |
| 634 | + </div> | |
| 635 | + </div> | |
| 636 | + </div> | |
| 637 | + <!--// 발송정보--> | |
| 638 | + <!--상세결과--> | |
| 639 | + <div class="res_info"> | |
| 640 | + <div class="res_info_in"> | |
| 641 | + <div class="res_info_top clearfix" style="padding:0 0 10px 0;"> | |
| 642 | + <p>상세결과</p> | |
| 643 | + <p><!-- <button type="button" class="refresh_btn btnType"><i class="refresh_img"></i>새로고침</button> --></p> | |
| 644 | + </div> | |
| 645 | + <div class="res_num"> | |
| 646 | + <div class="res_info_btm1"> | |
| 647 | + <dl> | |
| 648 | + <dt>전체건수</dt> | |
| 649 | + <dd><a href="#" data-tooltip="rev_popup04"><span class="c_222_g">101</span>건(100%)</a></dd> | |
| 650 | + </dl> | |
| 651 | + </div> | |
| 652 | + <div class="res_info_btm1"> | |
| 653 | + <dl> | |
| 654 | + <dt>성공건수</dt> | |
| 655 | + <dd><span class="c_002c9a_g">100</span>건(100%)</dd> | |
| 656 | + </dl> | |
| 657 | + </div> | |
| 658 | + </div> | |
| 659 | + <div class="res_num"> | |
| 660 | + <div class="res_info_btm1"> | |
| 661 | + <dl> | |
| 662 | + <dt>대기건수</dt> | |
| 663 | + <dd><span class="c_666_g">0</span>건(0%)</dd> | |
| 664 | + </dl> | |
| 665 | + </div> | |
| 666 | + <div class="res_info_btm1"> | |
| 667 | + <dl> | |
| 668 | + <dt>실패건수</dt> | |
| 669 | + <dd><span class="c_e40000_g">1</span>건(100%)</dd> | |
| 670 | + </dl> | |
| 671 | + </div> | |
| 672 | + </div> | |
| 673 | + <div class="table_btn clearfix"> | |
| 674 | + <div class="table_btn_left"> | |
| 675 | + <!-- <button type="button" data-tooltip="rev_popup02" class="btnType btnType14"><i class="add_img"></i>주소록 등록</button> | |
| 676 | + <button type="button" class="excel_btn btnType"><i class="downroad"></i>엑셀 다운로드</button> --> | |
| 677 | + <p class="table_bottom_txt">* 전체건수를 클릭하면 받는 사람 상세정보를 확인하실 수 있습니다.</p> | |
| 678 | + <p class="table_bottom_txt" style="padding:5px 0 0 0;">* 대체문자 발송 성공 시, 성공건수로 집계됩니다.</p> | |
| 679 | + </div> | |
| 680 | + <div class="table_btn_right"> | |
| 681 | + | |
| 682 | + </div> | |
| 683 | + </div> | |
| 684 | + </div> | |
| 685 | + </div> | |
| 686 | + <!--// 발송결과--> | |
| 687 | + | |
| 688 | + | |
| 689 | + </div> | |
| 690 | + <!--// 발송결과 상세 정보 --> | |
| 691 | + | |
| 692 | + <div class="resultcont_right" id="previewPhone"> | |
| 693 | + <div class="phone"> | |
| 694 | + <!-- 탭스타일 --> | |
| 695 | + <div class="list_tab_wrap2 type5"> | |
| 696 | + <ul class="tabType3" id="tabType" name="tabType"> | |
| 697 | + <li class="tab active"><button type="button" onclick="phoneTab(this,'1');" title="선택됨">카카오톡</button></li> | |
| 698 | + <!-- <li class="tab"><button type="button" onclick="phoneTab(this,'2');">대체문자</button></li> --> | |
| 699 | + </ul> | |
| 700 | + </div> | |
| 701 | + <!--// 탭스타일 --> | |
| 702 | + | |
| 703 | + <!-- 카카오 알림톡 미리보기 --> | |
| 704 | + <div class="tab_phone current" id="tab_phone_1"> | |
| 705 | + <div class="phone_kakako friendtalk"> | |
| 706 | + <div class="phoneIn"> | |
| 707 | + <p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt="">@munjaon</p> | |
| 708 | + <!-- 텍스트 미리보기 --> | |
| 709 | + <div class="text_preview"> | |
| 710 | + <p class="friend_talk_title"><span>(광고)</span></p> | |
| 711 | + <div class="allimtalk_content"> | |
| 712 | + | |
| 713 | + <div class="kakao_image"><img src="/publish/images/content/kakao_img_basic.jpg" alt=""></div> | |
| 714 | + <p class="template_text">홍길동 고객님 안녕하세요. | |
| 715 | + 문자온입니다. | |
| 716 | + 문자온에서는 재결제 고객님들께 다양한 이벤트를 준비하였으니, 방문하셔서 혜택 놓치지 마세요.</p> | |
| 717 | + <button type="button" class="btn_kakao_type">문자온 바로가기</button> | |
| 718 | + | |
| 719 | + </div> | |
| 720 | + <p class="kakao_block_text">수신거부 : 홈 > 채널차단</p> | |
| 721 | + </div> | |
| 722 | + </div> | |
| 723 | + <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p> | |
| 724 | + </div> | |
| 725 | + </div> | |
| 726 | + <!--// 카카오 알림톡 미리보기 --> | |
| 727 | + | |
| 728 | + <!-- 대체문자 --> | |
| 729 | + | |
| 730 | + <!-- 카카오 알림톡 미리보기 --> | |
| 731 | + <div class="tab_phone" id="tab_phone_2" style="display: none;position:relative;"> | |
| 732 | + <div class="phone"> | |
| 733 | + <div class="phoneIn"> | |
| 734 | + <div> | |
| 735 | + <p class="prev_p"><img src="/publish/images/search.png">문자내용</p> | |
| 736 | + <div class="text_length2 clearfix" style="display:none;"> | |
| 737 | + <span class="msg_com msg_short">단문</span> | |
| 738 | + <div> | |
| 739 | + <span>글자크기</span> | |
| 740 | + <button type="button"><img src="/publish/images/content/font_plus.png"></button> | |
| 741 | + <button type="button"><img src="/publish/images/content/font_minus.png"></button> | |
| 742 | + </div> | |
| 743 | + </div> | |
| 744 | + <div class="text_length2 clearfix" style="display:none;"> | |
| 745 | + <span class="msg_com msg_long">장문</span> | |
| 746 | + <div> | |
| 747 | + <span>글자크기</span> | |
| 748 | + <button type="button"><img src="/publish/images/content/font_plus.png"></button> | |
| 749 | + <button type="button"><img src="/publish/images/content/font_minus.png"></button> | |
| 750 | + </div> | |
| 751 | + </div> | |
| 752 | + <div class="text_length2 clearfix"> | |
| 753 | + <span class="msg_com msg_photo"> | |
| 754 | + 그림 | |
| 755 | + </span> | |
| 756 | + </div> | |
| 757 | + <!-- 텍스트 미리보기 --> | |
| 758 | + <div class="text_preview"> | |
| 759 | + <div class="preiew_img"> | |
| 760 | + <div class="img_box"> | |
| 761 | + <img src="/cmm/fms/getImage2.do?atchFileId=FILE_000000000013873&fileSn=0" alt="발송된 그림문자 미리보기" style="width: 100%"> | |
| 762 | + </div> | |
| 763 | + </div> | |
| 764 | + <div class="preview_auto"> | |
| 765 | + <p class="ad_tit">(광고)</p> | |
| 766 | + <p class="realtime" id="smsTxt"> | |
| 767 | + test | |
| 768 | + </p> | |
| 769 | + <p class="deny_receipt">무료거부 0808800858</p> | |
| 770 | + </div> | |
| 771 | + </div> | |
| 772 | + <!-- //텍스트 미리보기 --> | |
| 773 | + </div> | |
| 774 | + </div> | |
| 775 | + <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p> | |
| 776 | + </div> | |
| 777 | + </div> | |
| 778 | + <!--// 카카오 알림톡 미리보기 --> | |
| 779 | + <!-- // 대체문자 --> | |
| 780 | + | |
| 781 | + </div> | |
| 782 | + </div> | |
| 783 | + | |
| 784 | + <!-- 발송결과 미리보기 --> | |
| 785 | + <div class="resultcont_right" style="display: none;"> | |
| 786 | + <!-- 카카오 알림톡 미리보기 --> | |
| 787 | + <div class="phone_kakako"> | |
| 788 | + <div class="phoneIn"> | |
| 789 | + <p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt="">@munjaon</p> | |
| 790 | + <!-- 텍스트 미리보기 --> | |
| 791 | + <div class="text_preview"> | |
| 792 | + <div class="allimtalk_title"> | |
| 793 | + <img src="/publish/images/content/icon_allimtalk.png" alt="">알림톡 도착 | |
| 794 | + </div> | |
| 795 | + <div class="allimtalk_content"> | |
| 796 | + <!-- <div class="kakao_image"> --> | |
| 797 | + <!-- <img src="/publish/images/content/kakao_template_img.png" alt=""> --> | |
| 798 | + <!-- </div> --> | |
| 799 | + <p class="emphasis_side_text">강조표기 보조문구 미리보기</p> | |
| 800 | + <p class="emphasis_title_text">타이틀 미리보기</p> | |
| 801 | + <p class="template_text">내용미리보기</p> | |
| 802 | + <p class="side_info_text">부가정보내용</p> | |
| 803 | + <p class="channel_info_text">채널 추가 안내 메시지 미리보기</p> | |
| 804 | + <button type="button" class="btn_kakao_type">버튼명</button> | |
| 805 | + <button type="button" class="btn_kakao_type">버튼명</button> | |
| 806 | + <!-- <p class="emphasis_side_text">강조표기 보조문구 미리보기</p> --> | |
| 807 | + <!-- <p class="emphasis_title_text">타이틀 미리보기</p> --> | |
| 808 | + <!-- <p class="template_text">내용미리보기</p> --> | |
| 809 | + <!-- <p class="side_info_text">부가정보내용</p> --> | |
| 810 | + <!-- <p class="channel_info_text">채널 추가 안내 메시지 미리보기</p> --> | |
| 811 | + <!-- <button type="button" class="btn_kakao_type">버튼명</button> --> | |
| 812 | + <!-- <button type="button" class="btn_kakao_type">버튼명</button> --> | |
| 813 | + </div> | |
| 814 | + </div> | |
| 815 | + <!-- //텍스트 미리보기 --> | |
| 816 | + </div> | |
| 817 | + | |
| 818 | + <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p> | |
| 819 | + </div> | |
| 820 | + <!--// 카카오 알림톡 미리보기 --> | |
| 821 | + | |
| 822 | + </div> | |
| 823 | + <!--// 발송결과 미리보기 --> | |
| 824 | + </div> | |
| 825 | + | |
| 826 | + <!--// 발송결과 상세 및 미리보기--> | |
| 827 | + | |
| 828 | + <!-- 목록--> | |
| 829 | + <div class="btn_list_type1"> | |
| 830 | + <button class="btnType btnType17">목록</button> | |
| 831 | + </div> | |
| 832 | + <!--// 목록--> | |
| 833 | + | |
| 834 | + </div> | |
| 835 | + </div> | |
| 836 | + <!--// send top --> | |
| 837 | + </div> | |
| 838 | + </div> | |
| 839 | + <!--// content 영역 --> | |
| 840 | + <!-- footer 영역 --> | |
| 841 | + <div data-include-path="/publish/layout/_footer.html"></div> | |
| 842 | + <!--// footer 영역 --> | |
| 843 | +</body> | |
| 844 | + | |
| 845 | +</html>(No newline at end of file) |
--- src/main/webapp/publish/use_statement.html
+++ src/main/webapp/publish/use_statement.html
... | ... | @@ -91,16 +91,14 @@ |
| 91 | 91 |
<p>(단위 : 원, 건)</p> |
| 92 | 92 |
<div class="est_table2_wrap"> |
| 93 | 93 |
<table class="est_table2"> |
| 94 |
- <caption>사용일시, 문자유형, 발송건수, 사용금액을 제공하는 표</caption> |
|
| 94 |
+ <caption>문자유형, 발송건수, 사용금액을 제공하는 표</caption> |
|
| 95 | 95 |
<colgroup> |
| 96 |
- <col style="width:20%;"> |
|
| 97 |
- <col style="width:20%;"> |
|
| 98 |
- <col style="width:20%;"> |
|
| 99 |
- <col style="width:auto;"> |
|
| 96 |
+ <col style="width:calc(100%/3);"> |
|
| 97 |
+ <col style="width:calc(100%/3);"> |
|
| 98 |
+ <col style="width:calc(100%/3);"> |
|
| 100 | 99 |
</colgroup> |
| 101 | 100 |
<thead> |
| 102 | 101 |
<tr> |
| 103 |
- <th scope="col">사용일시</th> |
|
| 104 | 102 |
<th scope="col">문자유형</th> |
| 105 | 103 |
<th scope="col">발송건수</th> |
| 106 | 104 |
<th scope="col">사용금액</th> |
... | ... | @@ -108,28 +106,9 @@ |
| 108 | 106 |
</thead> |
| 109 | 107 |
<tbody> |
| 110 | 108 |
<tr> |
| 111 |
- <td>2024-07-18 12:11</td> |
|
| 112 |
- <td>단문</td> |
|
| 109 |
+ <td>브랜드(텍스트)</td> |
|
| 113 | 110 |
<td>1</td> |
| 114 |
- <td>75</td> |
|
| 115 |
- </tr> |
|
| 116 |
- <tr> |
|
| 117 |
- <td>2024-07-18 12:11</td> |
|
| 118 |
- <td>장문</td> |
|
| 119 |
- <td>2</td> |
|
| 120 |
- <td>64</td> |
|
| 121 |
- </tr> |
|
| 122 |
- <tr> |
|
| 123 |
- <td>2024-07-18 12:11</td> |
|
| 124 |
- <td>그림</td> |
|
| 125 |
- <td>1</td> |
|
| 126 |
- <td>59</td> |
|
| 127 |
- </tr> |
|
| 128 |
- <tr> |
|
| 129 |
- <td>2024-07-18 12:11</td> |
|
| 130 |
- <td>단문</td> |
|
| 131 |
- <td>1</td> |
|
| 132 |
- <td>75</td> |
|
| 111 |
+ <td>20</td> |
|
| 133 | 112 |
</tr> |
| 134 | 113 |
|
| 135 | 114 |
</tbody> |
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?