| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- import { StackScreenProps } from '@react-navigation/stack';
- import * as React from 'react';
- import {
- Div,
- Button,
- Image,
- Text,
- Avatar,
- Radio,
- RadioGroup,
- Input,
- } from 'react-native-magnus';
- import { ScrollView } from 'react-native-gesture-handler';
- import { useTranslation } from 'react-i18next';
- import { useMap, useCreation } from 'ahooks';
- import useModel from 'flooks';
- import Login from './model';
- import User from '../stores/User';
- import ImagePicker from '../components/ImagePicker';
- import { connect } from '../utils/SystemUtils';
- import { RiderMap } from '../utils/RiderInfoUtils';
- export default function TransportationScreen({ navigation }: StackScreenProps) {
- const { t } = useTranslation();
- const [transport, setTransport] = React.useState<string>('');
- const [extra, setExtra] = React.useState<string>('');
- const { riderApplyPre } = useModel(Login, []);
- const { riderInfo } = useModel(User, ['riderInfo']);
- const [transportationImgMap, transportationImgMapEvent] = useMap<
- string,
- string
- >([
- ['正面', ''],
- ['侧面', ''],
- ]);
- const [driverLicense, setDriverLicense] = React.useState<boolean>(false);
- const [driverLicenseImgMap, driverLicenseImgEvent] = useMap<string, string>([
- ['正面', ''],
- ['背面', ''],
- ]);
- const canSubmit = useCreation(() => {
- if (
- transport === '没有' ||
- (transport &&
- transportationImgMapEvent.get('正面') &&
- transportationImgMapEvent.get('侧面') &&
- (!driverLicense ||
- (driverLicense &&
- driverLicenseImgEvent.get('正面') &&
- driverLicenseImgEvent.get('背面'))))
- ) {
- return true;
- } else {
- return false;
- }
- }, [
- transport,
- extra,
- transportationImgMap,
- driverLicense,
- driverLicenseImgMap,
- ]);
- React.useEffect(() => {
- if (riderInfo && riderInfo.id) {
- const keys = [...RiderMap.keys()];
- if (keys.includes(riderInfo.transportation)) {
- setTransport(riderInfo.transportation);
- } else {
- setTransport('其他');
- setExtra(riderInfo.transportation.replace(/其他/, ''));
- }
- if (riderInfo.transportationImg) {
- transportationImgMapEvent.setAll([
- ['正面', riderInfo.transportationImg.split(',')[0]],
- ['侧面', riderInfo.transportationImg.split(',')[1]],
- ]);
- }
- if (riderInfo.driverLicenseImg) {
- setDriverLicense(true);
- driverLicenseImgEvent.setAll([
- ['正面', riderInfo.driverLicenseImg.split(',')[0]],
- ['背面', riderInfo.driverLicenseImg.split(',')[1]],
- ]);
- }
- }
- }, [riderInfo]);
- return (
- <Div bg="gray100" flex={1}>
- <ScrollView
- contentContainerStyle={{
- flexGrow: 1,
- backgroundColor: '#fff',
- }}
- >
- <Div borderTopWidth={10} borderColor="gray100" px={15}>
- <Div row py={10} overflow="hidden">
- <Text w={120} textAlign="left">
- {t('song-can-jiao-tong-gong-ju')}:
- </Text>
- <RadioGroup
- value={transport}
- onChange={(value: any) => {
- if (value !== '其他') {
- setExtra('');
- }
- setTransport(value);
- }}
- flexDir="row"
- flexWrap="wrap"
- flex={1}
- >
- {[...RiderMap.keys()].map((item, index) => {
- let info = RiderMap.get(item);
- return (
- <Radio
- value={item}
- key={index}
- activeColor="yellow500"
- inactiveColor="gray300"
- pr={20}
- my={5}
- >
- <Text ml={6} color="gray300">
- {t(info.name)}
- </Text>
- {info.hasInput && (
- <Input
- w={96}
- h={25}
- opacity={1}
- loaderColor="gray400"
- color="gray900"
- fontSize="sm"
- value={extra}
- onChangeText={setExtra}
- onFocus={() => {
- setTransport(item);
- }}
- ml={5}
- bg="gray100"
- />
- )}
- </Radio>
- );
- })}
- </RadioGroup>
- </Div>
- {transport != '' && transport != '没有' && (
- <>
- <Div row py={10} overflow="hidden">
- <Text w={120} textAlign="left">
- {t('jiao-tong-gong-ju-zhao-pian')}:
- </Text>
- <Div flex={1} row pt={30}>
- {[...transportationImgMap.keys()].map((item, index) => {
- return (
- <Div w="50%" key={index} alignItems="center">
- <ImagePicker
- img={transportationImgMapEvent.get(item)}
- setImg={(img) =>
- transportationImgMapEvent.set(item, img)
- }
- />
- </Div>
- );
- })}
- </Div>
- </Div>
- <Div row py={10} overflow="hidden">
- <Text w={120} textAlign="left">
- {t('you-wu-jia-shi-zheng')}:
- </Text>
- <RadioGroup
- value={driverLicense}
- onChange={(value: any) => setDriverLicense(value)}
- flexDir="row"
- flexWrap="wrap"
- flex={1}
- >
- <Radio
- value={true}
- activeColor="yellow500"
- inactiveColor="gray300"
- pr={20}
- my={5}
- >
- <Text ml={6} color="gray300">
- {t('you')}
- </Text>
- </Radio>
- <Radio
- value={false}
- activeColor="yellow500"
- inactiveColor="gray300"
- pr={20}
- my={5}
- >
- <Text ml={6} color="gray300">
- {t('mei-you')}
- </Text>
- </Radio>
- </RadioGroup>
- </Div>
- {driverLicense && (
- <Div row py={10} overflow="hidden">
- <Text w={120} textAlign="left">
- {t('jia-shi-zheng-zheng-fan-mian')}:
- </Text>
- <Div flex={1} row pt={30}>
- {[...driverLicenseImgMap.keys()].map((item, index) => {
- return (
- <Div w="50%" key={index} alignItems="center">
- <ImagePicker
- img={driverLicenseImgEvent.get(item)}
- setImg={(img) =>
- driverLicenseImgEvent.set(item, img)
- }
- />
- <Text>{item}</Text>
- </Div>
- );
- })}
- </Div>
- </Div>
- )}
- </>
- )}
- <Button
- w={112}
- bg="yellow500"
- alignSelf="center"
- fontSize="sm"
- my={20}
- disabled={!canSubmit}
- onPress={() => {
- riderApplyPre(
- transport + extra,
- transportationImgMapEvent.get('正面') +
- ',' +
- transportationImgMapEvent.get('侧面'),
- driverLicense
- ? driverLicenseImgEvent.get('正面') +
- ',' +
- driverLicenseImgEvent.get('背面')
- : ''
- );
- navigation.navigate('ApplyLocation');
- }}
- >
- {t('xia-yi-bu')}
- </Button>
- <Button
- w={112}
- color="yellow500"
- bg="none"
- borderColor="gray100"
- borderWidth={1}
- alignSelf="center"
- fontSize="sm"
- my={20}
- onPress={() => connect(navigation)}
- >
- {t('lian-xi-ke-fu')}
- </Button>
- </Div>
- </ScrollView>
- </Div>
- );
- }
|