MobileField.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { FC, useState } from "react";
  2. /**
  3. * @description 手机号码选择框
  4. */
  5. import { Input, Space } from "antd-mobile";
  6. import { useTranslations } from "next-intl";
  7. interface MobileValue {
  8. preValue: string | number;
  9. realValue: string;
  10. }
  11. const columns = [["86", "01", "02", "03"]];
  12. interface MobileFieldProps {
  13. value?: MobileValue;
  14. onChange?: (value: MobileValue) => void;
  15. code?: boolean;
  16. }
  17. const MobileField: FC<MobileFieldProps> = ({
  18. value = { preValue: "86", realValue: "" },
  19. onChange,
  20. code = true,
  21. }) => {
  22. const [visible, setVisible] = useState(false);
  23. const t = useTranslations("form");
  24. const triggerValue = (changedValue: Partial<MobileValue>) => {
  25. onChange?.({ ...value, ...changedValue });
  26. };
  27. const onRealValueChange = (value: string) => {
  28. triggerValue({ realValue: value.replace(/[^0-9]/g, "") });
  29. };
  30. // const onPreValueChange = (value: PickerValue[]) => {
  31. // const v = value[0];
  32. // if (v === null) return;
  33. // triggerValue({ preValue: v });
  34. // };
  35. return (
  36. <>
  37. <Space align="center">
  38. {code && (
  39. <>
  40. <Space align="center" onClick={() => setVisible(true)}>
  41. <div className={"text-[#999]"}>+{value.preValue}</div>
  42. </Space>
  43. </>
  44. )}
  45. <Input
  46. value={value.realValue}
  47. placeholder={t("phone")}
  48. maxLength={11}
  49. onChange={onRealValueChange}
  50. />
  51. </Space>
  52. {/*<Picker*/}
  53. {/* columns={columns}*/}
  54. {/* visible={visible}*/}
  55. {/* onClose={() => {*/}
  56. {/* setVisible(false);*/}
  57. {/* }}*/}
  58. {/* value={[value.preValue]}*/}
  59. {/* onConfirm={onPreValueChange}*/}
  60. {/*/>*/}
  61. </>
  62. );
  63. };
  64. export default MobileField;