多个input框 输完后鼠标光标后移 删除自动前移

import React, { useEffect, useState } from '@alipay/bigfish/react';
import { Button, Checkbox, Input, Tooltip, Form } from '@alipay/bigfish/antd';
import { DesktopOutlined, MobileOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import styles from './index.less';
import { queryIndexInfo, queryFlowNodeData, submit } from '@/services/payment';
// import LoadingButton from '@alipay/loading-button';

import dispatchRoute from '@/services/dispatchRoute';
import { history } from '@alipay/bigfish';
import { BKEANK_SSOMODEL_INDEX } from '@/constants';
import { parse, stringify } from '@alipay/bigfish/util/query-string';

const Payment = () => {
  // 验证金额
  // const [verifyAmount, setverifyAmount] = useState<any>('');
  const [flowId, setFlowId] = useState<string>('');
  const [flowType, setFlowType] = useState<string>('');
  const [form] = Form.useForm();
  // 次数
  const [count, setcount] = useState(2);
  // 文字切换
  const [flag, setflag] = useState(true);
  const [checkbox, setcheckbox] = useState(false);
  // const [maxLength, setmaxLength] = useState([])
  // display none
  const [check, setcheck] = useState(true);
  //
  const [buttonfFlag, setbuttonfFlag] = useState(true);
  const [buttonfFlag1, setbuttonfFlag1] = useState(true);
  const [buttonfFlag2, setbuttonfFlag2] = useState(true);
  const [buttonfFlag3, setbuttonfFlag3] = useState(true);

  const [maxlength] = useState(1);
  // 卡号后四位
  const [cardNmuber, setcardNmuber] = useState('');
  // 重新决定跳转
  const decidePage = async () => {
    const data = await queryIndexInfo();
    if (!data) return;
    const { useNewFlow, hasOpenedAccount, currentNode, flowStatus, settleOpenFlowId } = data;
    if (!useNewFlow || hasOpenedAccount) {
      const parsedParams = parse(window.location.href.split('?')[1] || '');
      history.replace(`${BKEANK_SSOMODEL_INDEX}?${stringify(parsedParams)}`);
      return;
    }
    // debugger
    dispatchRoute(currentNode, flowStatus, settleOpenFlowId);
  };
  // 初始化验证数
  async function init() {
    const data = await queryIndexInfo(); // 流程
    if (!data) return;

    setFlowId(data?.flowId || '');
    setFlowType(data?.flowType || '');
    const result = await queryFlowNodeData({
      flowId: data?.flowId || '',
      flowType: data?.flowType || '',
    });
    if (!result) return;
    const flowNodeData = JSON.parse(result?.[0]?.flowNodeData || '{}'); // 返回的闫增次数
    const card = result?.[0]?.selectBindBankCard || '33300414'; // 返回的卡号
    setcardNmuber(card.substring(card.length - 4));

    // setCheckAmountCount(Number(flowNodeData.checkAmountCount) || 0);
    if (Number(flowNodeData.checkAmountCount) >= 2) {
      decidePage();
    }
  }
  // 点击验证回调
  async function confirmPayment() {
    setcheck(false);
    const verifyamount = `${form.getFieldsValue().input1}.${form.getFieldsValue().input2}${
      form.getFieldsValue().input3
    }`;
    const { success } = await submit({ verifyamount, flowId, flowType });
    setcheck(true);
    // debugger
    if (success) {
      // 成功
      decidePage();
    } else if (count - 1 === 0) {
      // 失败 次数-1 如果没次数 直接回首页
      decidePage();
    } else {
      // 还有次数
      setcount(count - 1);
      setflag(false);
      await init();
    }
  }

  // 验证码光标后移
  const handleInputValue = (e: React.ChangeEvent<HTMLInputElement>, type: string) => {
    const input = document.getElementsByTagName('input');
    const { value = '' } = e.target;
    if (type === 'A') {
      if (value) input[1].focus();
      if (e.target.value.length > 0) {
        setbuttonfFlag1(false);
      } else if (e.target.value.length === 0) {
        setbuttonfFlag1(true);
      }
    } else if (type === 'B') {
      if (value) input[2].focus();
      if (e.target.value.length > 0) {
        setbuttonfFlag2(false);
      } else if (e.target.value.length === 0) {
        setbuttonfFlag2(true);
      }
    } else if (type === 'C') {
      if (e.target.value.length > 0) {
        setbuttonfFlag3(false);
      } else if (e.target.value.length === 0) {
        setbuttonfFlag3(true);
      }
    }
  };
  // //删除验证码
  // const handleDel = (e: { target: { value: string | any[]; }; keyCode: number; }) => {
  //   console.log(e.target.value)
  //   const BACK_SPACE = 8;
  //   const isBackSpaceKey = e.keyCode === BACK_SPACE;
  //   if (isBackSpaceKey && e.target.value.length === 0) {
  //     let previous = e.target;
  //     console.log(e.target)
  //     previous = previous.previousElementSibling;
  //     while (previous) {
  //       if (previous === null) break;
  //       if (previous.tagName.toLowerCase() === "input") {
  //         console.log(previous)
  //         previous.focus();
  //         break;
  //       }
  //     }
  //   }
  // };

  useEffect(() => {
    init();
    setcount(2);
  }, []);
  const onFinish = (values: any) => {
    console.log('Success:', values);
  };
  return (
    <div className="payment">
      <div className={styles.bigbox} style={{ display: check ? 'none' : 'block' }}>
        <div className={styles.whitebox}>
          <div className={styles.banklogo}>
            <div className={styles.bankround}></div>
            <div className={styles.span}>处理中</div>
          </div>
          <div className={styles.logo}>
            <img
              src="https://gw.alipayobjects.com/zos/bmw-prod/9a7e4265-aed8-4db2-a63d-d3cd410051ea.ico"
              alt=""
            />
          </div>
        </div>
      </div>
      <div
        className="toppayment"
        style={{ background: '#F5F5F5', display: check ? 'block' : 'none' }}
      >
        <div className={styles.middle}>
          <div style={{ paddingTop: '24px' }} className={styles.h3font}>
            <span>请完成收款验证</span>
          </div>
          <div style={{ paddingTop: '24px' }} className={styles.paymentspan}>
            <p style={{ paddingTop: '12px', color: '#8B8B8B' }}>
              网商银行于
              <span className={styles.orange}>
                {new Date().getFullYear()}年{new Date().getMonth() + 1}月{new Date().getDate()}
              </span>
              日向下述账户汇入一笔2元以下的资金,请查询您的
              <span className={styles.orange}>网商银行企业账户</span>
              <span className={styles.orange}>(尾号{cardNmuber})</span>查询金额并填写到本页面。
            </p>
          </div>
          <Form
            form={form}
            name="basic"
            initialValues={{ remember: true }}
            onFinish={onFinish}
            //   onFinishFailed={onFinishFailed}
          >
            <div className={styles.smiddle}>
              <div className={styles.text}>
                输入网商银行验证打款金额{' '}
                <Tooltip title="需要追踪的资金的第一次流转的流入时间">
                  <QuestionCircleOutlined />
                </Tooltip>
              </div>

              <div className={styles.inputs}>
                <Form.Item
                  name="input1"
                  //   rules={[{ required: true, message: 'Please input your username!' }]}
                >
                  <Input
                    type="tel"
                    id="field001"
                    maxLength={maxlength}
                    onChange={(e) => handleInputValue(e, 'A')}
                    onFocus={() => {
                      setflag(true);
                    }}
                    style={{ width: '100px', height: '46px', textAlign: 'center' }}
                  ></Input>
                </Form.Item>
                <div
                  style={{
                    width: '50px',
                    height: '46px',
                    border: '1px solid #D9D9D9',
                    textAlign: 'center',
                    paddingTop: '20px',
                    fontWeight: 800,
                  }}
                >
                  .
                </div>

                <Form.Item
                  name="input2"
                  //   rules={[{ required: true, message: 'Please input your username!' }]}
                >
                  <Input
                    // onKeyDown={maxlength ? handleDel : null}
                    type="tel"
                    maxLength={maxlength}
                    id="field002"
                    onChange={(e) => handleInputValue(e, 'B')}
                    onFocus={() => {
                      setflag(true);
                    }}
                    style={{ width: '100px', height: '46px', textAlign: 'center' }}
                  />
                </Form.Item>
                <Form.Item
                  name="input3"
                  //   rules={[{ required: true, message: 'Please input your username!' }]}
                >
                  <Input
                    type="tel"
                    maxLength={1}
                    onChange={(e) => handleInputValue(e, 'C')}
                    id="field003"
                    onFocus={() => {
                      setflag(true);
                    }}
                    style={{ width: '100px', height: '46px', textAlign: 'center' }}
                  />
                </Form.Item>
                <div
                  style={{
                    width: '53px',
                    height: '46px',
                    border: '1px solid #D9D9D9',
                    textAlign: 'center',
                    paddingTop: '20px',
                  }}
                >
                  元
                </div>
              </div>
              <div className={styles.Receivepayment}>
                {flag ? (
                  <p>
                    您有 <span style={{ color: '#353535' }}>{count}次</span> 输入机会,
                    <span>{count}次</span>输入错误后需重新确认收款账户。
                  </p>
                ) : (
                  <p style={{ color: 'red' }}>
                    输入错误,您还剩余 <span>{count}次</span> 机会
                  </p>
                )}
              </div>
              <div className={styles.check}>
                {/* <Form.Item> */}
                <Form.Item
                  rules={[
                    {
                      validator: (_, value, callback) => {
                        const reg = /^[0-9]+.?[0-9]*/;
                        form.getFieldsValue();
                        if (
                          !reg.test(form.getFieldsValue().input1) ||
                          !reg.test(form.getFieldsValue().input2) ||
                          !reg.test(form.getFieldsValue().input3)
                        ) {
                          callback('输入格式只能为数字');
                        }
                        if (!checkbox) {
                          callback('请勾选《融易收服务协议》协议');
                        } else {
                          confirmPayment();
                          callback();
                        }
                      },
                    },
                  ]}
                  name="remember"
                  valuePropName="checked"
                >
                  <Checkbox
                    checked={checkbox}
                    onChange={(e) => {
                      setbuttonfFlag(!e.target.checked);
                      setcheckbox(e.target.checked);
                    }}
                  ></Checkbox>
                  <span
                    style={{
                      marginLeft: '8px',
                      color: '#666666',
                      fontFamily: 'PingFangSC-Regular, sans-serif',
                    }}
                  >
                    同意《融易收服务协议》
                  </span>
                </Form.Item>
              </div>
              <Form.Item rules={[{ required: true, message: 'Please input your username!' }]}>
                <Button
                  htmlType="submit"
                  disabled={buttonfFlag || buttonfFlag1 || buttonfFlag2 || buttonfFlag3}
                  className={styles.button}
                >
                  确认
                </Button>
                {/* <LoadingButton htmlType="submit" disabled={buttonfFlag} className={styles.button}>确认</LoadingButton> */}
              </Form.Item>
            </div>
          </Form>
        </div>
        <div className={styles.bmiddle}>
          <p className={styles.fontweight}>如何查询验证打款金额</p>
        </div>
        <div className={styles.bottom}>
          <div className={styles.bottomleft}>
            <p style={{ paddingTop: '24px' }}>
              <span style={{ fontSize: '16px', marginTop: '24px', marginLeft: '24px' }}>
                <DesktopOutlined style={{ fontSize: '16px', marginRight: '4px' }} />{' '}
                企业网银查询账单
              </span>{' '}
              <a href="" style={{ float: 'right', marginRight: '24px' }}>
                立即前往
              </a>
            </p>
            <img
              src="https://gw.alipayobjects.com/mdn/rms_4f58df/afts/img/A*hwgBQqi5xwQAAAAAAAAAAAAAARQnAQ"
              alt=""
              style={{ width: '60%', display: 'block', margin: 'auto', marginTop: '4%' }}
            />
          </div>
          <div className={styles.bottomright}>
            <p style={{ paddingTop: '24px' }}>
              <span style={{ fontSize: '16px', marginTop: '24px', marginLeft: '24px' }}>
                <MobileOutlined style={{ fontSize: '16px', marginRight: '4px' }} />
                支付宝登录网商银行小程序
              </span>
              <a href="" style={{ float: 'right', marginRight: '24px' }}>
                扫码查看
              </a>
            </p>
            <img
              src="https://gw.alipayobjects.com/mdn/rms_4f58df/afts/img/A*R0mLTqYb6mwAAAAAAAAAAAAAARQnAQ"
              alt=""
              style={{
                display: 'block',
                margin: 'auto',
                marginTop: '50px',
              }}
            />
          </div>
        </div>
      </div>
    </div>
  );
};

export default Payment;

上一篇:code_styles


下一篇:vue jsx