app/Plugin/VeriTrans4G2/Resource/template/default/js/vt4g_credit_js.twig line 1

Open in your IDE?
  1. {#
  2. Copyright (c) 2018 VeriTrans Inc., a Digital Garage company. All rights reserved.
  3. http://www.veritrans.co.jp/
  4. #}
  5. <script src= "{{ asset(tokenJsPath, 'plugin') }} "></script>
  6. <script>
  7.     // 名前空間を設定
  8.     window.VeriTrans4G = window.VeriTrans4G || {};
  9.     VeriTrans4G.isProcessing = false;
  10.     // 支払方法のバリデーション
  11.     VeriTrans4G.validateOneClickPaymentType = function(formKey) {
  12.         var paymentTypeSelect = document.querySelector('select[name="'+formKey+'[payment_type]"]');
  13.         VeriTrans4G.hideErrorMessage(paymentTypeSelect);
  14.         return VeriTrans4G.validateNotBlank('payment_type', 'お支払い方法', null, formKey);
  15.     }
  16.     // カード名義人名のバリデーションチェック
  17.     VeriTrans4G.validateOneClickCardName = function(formKey) {
  18.         var nameKey = 'card_name';
  19.         var name = 'カード名義人名';
  20.         var cardNameSelect = document.querySelector('input[name="'+formKey+'['+nameKey+']"]');
  21.         //本人認証無しの場合は入力フォームが存在しないので、処理を終了する。
  22.         if(cardNameSelect == undefined){
  23.             return true;
  24.         }
  25.         var minLength = cardNameSelect.getAttribute('minlength');
  26.         var maxLength = cardNameSelect.getAttribute('maxlength');
  27.         VeriTrans4G.hideErrorMessage(cardNameSelect);
  28.         return VeriTrans4G.validateNotBlank(nameKey, name, null, formKey) &&
  29.                VeriTrans4G.validateRegex(nameKey, name, '[^a-zA-Z ]', '※ '+name+'は半角英字(半角スペースのみ許可)で入力してください', formKey) &&
  30.                VeriTrans4G.validateRange(nameKey, name, minLength, maxLength, formKey);
  31.     }
  32.     VeriTrans4G.setSubmit = function(e, targetId) {
  33.             e.preventDefault();
  34.             var elm = e.currentTarget;
  35.             var form = $(elm).parents('form');
  36.             if (VeriTrans4G.isProcessing) {
  37.                 alert('只今、処理中です。しばらくお待ちください。');
  38.                 return false;
  39.             }
  40.             VeriTrans4G.isProcessing = false;
  41.             switch (targetId) {
  42.                 case 'vt4g-credit':
  43.                     VeriTrans4G.fetchMdkToken(e, form, "{{ useRecaptcha }}", "{{ recaptchaSiteKey }}");
  44.                     return true;
  45.                 case 'vt4g-credit-account':
  46.                 case 'vt4g-credit-retrade':
  47.                     var formKey = {
  48.                         'vt4g-credit-account': 'payment_credit_account',
  49.                         'vt4g-credit-retrade': 'payment_credit_one_click'
  50.                     }[targetId];
  51.                     var isValid = true;
  52.                     if (!VeriTrans4G.validateOneClickPaymentType(formKey)) {
  53.                         isValid = false;
  54.                     }
  55.                     if (!VeriTrans4G.validateOneClickCardName(formKey)) {
  56.                         isValid = false;
  57.                     }
  58.                     if(!isValid){
  59.                         document.getElementById(targetId).scrollIntoView({
  60.                             behavior: "smooth",
  61.                             block: "start",
  62.                             inline: "start"
  63.                         });
  64.                         e.stopPropagation();
  65.                         loadingOverlay("hide");
  66.                         return false;
  67.                     }
  68.                     break;
  69.                 default:
  70.                     break;
  71.             }
  72.             VeriTrans4G.executeSubmit(form);
  73.             return true;
  74.     }
  75.     // カード登録情報にカード名義人名が登録済みかどうかを確認し、使用するカード情報をセットする。
  76.     VeriTrans4G.changeUseCardInfo = function() {
  77.         $('input[name="payment_order_id"], input[name="card_id"]').change(function(){
  78.             //カード番号
  79.             var cardNumber = $('input[name="payment_order_id"]:checked').parents('tr').find('input[name="registered_mask_card_number"]').val();
  80.             if(cardNumber !== undefined){
  81.                 $('#retrade_mask_card_number').val(cardNumber)
  82.             }
  83.             var cardNumber = $('input[name="card_id"]:checked').parents('tr').find('input[name="registered_mask_card_number"]').val();
  84.             if(cardNumber !== undefined){
  85.                 $('#account_mask_card_number').val(cardNumber)
  86.             }
  87.             //カード名義人名
  88.             var cardName = $('input[name="payment_order_id"]:checked').parents('tr').find('.registered_card_name').val();
  89.             if(cardName !== undefined){
  90.                 cardName.length == 0 ? $('#payment_credit_one_click_card_name').parents('dl').show() : $('#payment_credit_one_click_card_name').parents('dl').hide();
  91.                 $('#payment_credit_one_click_card_name').val(cardName)
  92.             }
  93.             var cardName = $('input[name="card_id"]:checked').parents('tr').find('.registered_card_name').val();
  94.             if(cardName !== undefined){
  95.                 cardName.length == 0 ? $('#payment_credit_account_card_name').parents('dl').show() : $('#payment_credit_account_card_name').parents('dl').hide();
  96.                 $('#payment_credit_account_card_name').val(cardName)
  97.             }
  98.         });
  99.         $('input[name="payment_order_id"], input[name="card_id"]').trigger('change');
  100.     }
  101.     // アコーディオン開閉時の処理
  102.     VeriTrans4G.moveAccordion = function() {
  103.         //初期表示の時に表示内容やエラーに応じてアコーディオンを一つ開く
  104.         var vt4gCredit = '';
  105.         var scrollPosition = '';
  106.         var formErrorCount = "{{ form.vars.errors.form.getErrors(true) | length }}"
  107.         if($('#vt4g-credit-account').length > 0 && formErrorCount === "0"){
  108.             vt4gCredit = $('#vt4g-credit-account');
  109.             formErrorCount = "{{ accountForm.vars.errors.form.getErrors(true) | length }}"
  110.             scrollPosition = document.getElementById('vt4g-credit-account');
  111.         } else if($('#vt4g-credit-retrade').length > 0 && formErrorCount === "0"){
  112.             vt4gCredit = $('#vt4g-credit-retrade');
  113.             formErrorCount = "{{ oneClickForm.vars.errors.form.getErrors(true) | length }}"
  114.             scrollPosition = document.getElementById('vt4g-credit-retrade');
  115.         } else {
  116.             vt4gCredit = $('#vt4g-credit');
  117.             scrollPosition = document.getElementById('vt4g-credit');
  118.         }
  119.         $.when(
  120.             $('.accordion_inner').hide(),
  121.             $('.accordion_inner').find('input').prop('disabled', true),
  122.             $('.accordion_inner').find('select').prop('disabled', true),
  123.             vt4gCredit.find('.accordion_inner').slideToggle(),
  124.             vt4gCredit.find('.change-class').toggleClass('plus-dark-icon'),
  125.             vt4gCredit.find('.change-class').toggleClass('minus-dark-icon'),
  126.             vt4gCredit.find('input').prop('disabled', false),
  127.             vt4gCredit.find('select').prop('disabled', false),
  128.         ).done(function(){
  129.             if(formErrorCount != "0"){
  130.                 scrollPosition.scrollIntoView({
  131.                     behavior: "smooth",
  132.                     block: "start",
  133.                     inline: "start"
  134.                 });
  135.             }
  136.         });
  137.         //アコーディオンが1個のみ場合は開閉する必要がないため処理を終了する
  138.         if ($('.vt4g_toggle_title').length === 1) {
  139.             $('.vt4g_toggle_btn').remove();
  140.             return;
  141.         }
  142.         //アコーディオン押下時の開閉イベント
  143.         $(document).on('click', '.vt4g_toggle_title', function(){
  144.             $.when(
  145.                 $('.accordion_inner').toggle('normal'),
  146.                 $('.change-class').toggleClass('plus-dark-icon'),
  147.                 $('.change-class').toggleClass('minus-dark-icon'),
  148.                 //一度全ての選択項目を非表示とする
  149.                 $('.accordion_inner').find('input').prop('disabled', true),
  150.                 $('.accordion_inner').find('select').prop('disabled', true),
  151.             ).done(function(){
  152.                 //指定されたアコーディオンの選択項目を表示する
  153.                 $('.accordion_inner:visible').find('input').prop('disabled', false),
  154.                 $('.accordion_inner:visible').find('select').prop('disabled', false);
  155.             });
  156.         });
  157.     }
  158.     $(function() {
  159.         VeriTrans4G.changeUseCardInfo();
  160.         VeriTrans4G.moveAccordion();
  161.         VeriTrans4G.tokenApiUrl = "{{ tokenApiUrl }}";
  162.         VeriTrans4G.tokenApiKey = "{{ tokenApiKey }}";
  163.         {% if paymentInfo.security_flg is defined %}
  164.             VeriTrans4G.securityFlg = !!{{ paymentInfo.security_flg }};
  165.         {% else %}
  166.             VeriTrans4G.securityFlg = true;
  167.         {% endif %}
  168.     })
  169. </script>