import request from '../utils/RequestUtils'; import { addAsyncStorage, removeAsyncStorage, getAsyncStorage, } from '../utils/AsyncStorageUtils'; import { toastShow, toastHide, toastInfo, toastSuccess, } from '../utils/SystemUtils'; import Map from '../map/model'; import i18n from '../i18n'; const user = (now) => ({ id: null, userInfo: {}, initialRouteName: '', verifiedInfo: {}, riderInfo: {}, sign: false, noSign: false, getUser() { let userInfo = { id: 0, }; return request .get('/user/my') .then((res) => { if (res.identity === 'RIDER') { userInfo = res; return request.get('/rider/my'); } else { return Promise.reject('noRider'); } }) .then((res) => { now({ riderInfo: res, }); return Promise.resolve(); }) .catch((e) => { if (e === 'noRider') { return Promise.reject('noRider'); } else if (userInfo.id) { return request.get('/verified/my'); } else { now({ id: userInfo.id, userInfo, }); return Promise.reject(userInfo.id); } }) .then((res) => { now({ id: userInfo.id, userInfo, }); if (res.id) { now({ verifiedInfo: res, }); } return Promise.reject(userInfo.id); }); }, setRider(info) { now({ riderInfo: info }); }, logout() { removeAsyncStorage('token').then(() => { // 清除用户信息 now({ id: 0, userInfo: {}, riderInfo: {}, verifiedInfo: {} }); toastSuccess(i18n.t('tui-chu-cheng-gong')); }); }, updateUser({ ...info }) { const { id, getUser } = now(); toastShow(); return request .post('/user/save', { data: { ...info, id, }, }) .then(() => { return getUser(); }) .then(() => { toastHide(); toastSuccess(i18n.t('geng-xin-cheng-gong')); return Promise.resolve(); }) .catch((e) => { toastHide(); toastInfo(e.error); }); }, getInit(back) { const { getUser } = now(); return getUser() .catch((id) => { if (back) { back(id); } const { verifiedInfo, riderInfo } = now(); console.log(id); console.log(verifiedInfo); console.log(riderInfo); if (id === 'noRider') { now({ initialRouteName: 'Login' }); return Promise.reject(); } else if (id && riderInfo.id) { if (riderInfo.status === 'PENDING') { now({ initialRouteName: 'AuditResult' }); return Promise.reject(); } else if (riderInfo.status === 'DENY') { return getAsyncStorage('seApply'); } else { return getAsyncStorage('riderIsApply'); } } else if (id && verifiedInfo.id) { now({ initialRouteName: 'Transportation' }); return Promise.reject(); } else if (id) { now({ initialRouteName: 'Certification' }); return Promise.reject(); } else { now({ initialRouteName: 'Login' }); return Promise.reject(); } }) .then((res) => { const { riderInfo } = now(); if ( (res && riderInfo.status === 'PASS' && res === 'true') || (!res && riderInfo.status === 'DENY') ) { now({ initialRouteName: 'AuditResult' }); } else if (res) { now({ initialRouteName: res }); } else { now({ initialRouteName: 'MainStack' }); } }) .catch(() => {}); }, getSignInfo() { const { id } = now(); if (!id) { now({ sign: false, }); return Promise.resolve(false); } return request .get('/riderSign/all', { params: { query: { userId: id, }, }, }) .then((res) => { if (res.content.length > 0) { const info = res.content.find((item) => { return !!item.takingOrders; }); now({ sign: info ? true : res.content[0].takingOrders, signInfo: info || res.content[0], noSign: false, }); return Promise.resolve(info ? true : res.content[0].takingOrders); } else { now({ sign: false, noSign: true, }); return Promise.resolve(false); } }); }, riderOrder() { toastShow(); const { sign, noSign, riderInfo } = now(); const { getNowLocation } = now(Map); return getNowLocation() .then((res) => { const { location } = res; if (noSign) { return request.post('/riderSign/save', { data: { takingOrders: true, longitude: location.lng, latitude: location.lat, riderId: riderInfo.id, }, }); } else { return request.get('/riderSign/riderOrder', { params: { isStart: !sign, longitude: location.lng, latitude: location.lat, }, }); } }) .then((res) => { now({ sign: !sign, noSign: false, }); toastSuccess((sign ? '休息' : '开工') + '成功'); }) .catch((e) => { toastInfo(e.error); }); }, }); export default user;