✨ feat(登录登出): 已完成用户使用账号密码登录登出
This commit is contained in:
parent
a07ca24140
commit
5bc498ad31
@ -1,43 +1,39 @@
|
|||||||
import Taro from "@tarojs/taro"
|
import Taro from '@tarojs/taro'
|
||||||
import Qs from 'qs'
|
import Qs from 'qs'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 跳转
|
* 跳转
|
||||||
* @param path
|
* @param path
|
||||||
* @param params
|
* @param params
|
||||||
* @param type false 跳转普通页面,true 跳转tabbar页面
|
* @param type false 跳转普通页面,true 跳转tabbar页面
|
||||||
*/
|
*/
|
||||||
type ParamLink = 'navigateTo'|'switchTab'|'reLaunch'|'redirectTo'
|
type ParamLink = 'navigateTo' | 'switchTab' | 'reLaunch' | 'redirectTo'
|
||||||
export const goLink = (path = '', params = {}, way: ParamLink = 'navigateTo') => {
|
export const goLink = (path = '', params = {}, way: ParamLink = 'navigateTo') => {
|
||||||
if(path) {
|
if (path) {
|
||||||
let params_str = Qs.stringify(params)
|
let params_str = Qs.stringify(params)
|
||||||
console.log('params_str::',params_str)
|
path = params_str ? path + '?' + params_str : path
|
||||||
path = params_str?path+'?'+params_str:path
|
Taro[way]({ url: path })
|
||||||
console.log('path::', way)
|
}
|
||||||
Taro[way]({url: path})
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 判断对象为空
|
* 判断对象为空
|
||||||
* @param object
|
* @param object
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export const isEmptyObject = (object: any)=>{
|
export const isEmptyObject = (object: any) => {
|
||||||
if(object==undefined||object==null||Number.isNaN(object)){
|
if (object == undefined || object == null || Number.isNaN(object)) {
|
||||||
return true;
|
return true
|
||||||
}else{
|
} else {
|
||||||
if(object.constructor==Object){
|
if (object.constructor == Object) {
|
||||||
return Reflect.ownKeys(object).length==0;
|
return Reflect.ownKeys(object).length == 0
|
||||||
}else if(object.constructor==Array){
|
} else if (object.constructor == Array) {
|
||||||
return object.length==0;
|
return object.length == 0
|
||||||
}else if(object.constructor==String){
|
} else if (object.constructor == String) {
|
||||||
return object=="";
|
return object == ''
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 表单检索
|
* 表单检索
|
||||||
@ -58,86 +54,90 @@ export const isEmptyObject = (object: any)=>{
|
|||||||
* @param message
|
* @param message
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export const retrieval = (data: any, rules?: Object, message: string="请填写完信息")=>{
|
export const retrieval = (data: any, rules?: Object, message: string = '请填写完信息') => {
|
||||||
return new Promise((resolve, reject)=>{
|
return new Promise((resolve, reject) => {
|
||||||
if(rules){
|
if (rules) {
|
||||||
const keys = Reflect.ownKeys(rules);
|
const keys = Reflect.ownKeys(rules)
|
||||||
const result = keys.some((key:any)=>{
|
const result = keys.some((key: any) => {
|
||||||
for(let item of (rules as any)[key]){
|
for (let item of (rules as any)[key]) {
|
||||||
|
let _res = false
|
||||||
let _res = false;
|
if (item.validator) {
|
||||||
if(item.validator){
|
if (item.validator(data[key], item)) {
|
||||||
if(item.validator(data[key],item)){
|
_res = true
|
||||||
_res=true;
|
}
|
||||||
}
|
} else if (item.regex) {
|
||||||
}else if(item.regex){
|
if (!item.regex.test(data[key])) {
|
||||||
if(!item.regex.test(data[key])){
|
_res = true
|
||||||
_res=true;
|
}
|
||||||
}
|
} else {
|
||||||
}else{
|
if (isEmptyObject(data[key])) {
|
||||||
if(isEmptyObject(data[key])){
|
_res = true
|
||||||
_res=true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
message = item.message;
|
|
||||||
return _res;
|
|
||||||
}
|
}
|
||||||
});
|
message = item.message
|
||||||
if(result){
|
return _res
|
||||||
reject(message);
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
const keys = Reflect.ownKeys(data);
|
|
||||||
if(keys.some((key:any)=>isEmptyObject(data[key]))){
|
|
||||||
reject(message);
|
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
if (result) {
|
||||||
|
reject(message)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const keys = Reflect.ownKeys(data)
|
||||||
|
if (keys.some((key: any) => isEmptyObject(data[key]))) {
|
||||||
|
reject(message)
|
||||||
}
|
}
|
||||||
resolve(null);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* toast提示
|
|
||||||
*/
|
|
||||||
export const alert = {
|
|
||||||
success(title: string){
|
|
||||||
Taro.showToast({
|
|
||||||
title,icon: "success"
|
|
||||||
})
|
|
||||||
},
|
|
||||||
error(title: string){
|
|
||||||
Taro.showToast({
|
|
||||||
title,icon: "error"
|
|
||||||
})
|
|
||||||
},
|
|
||||||
loading(title: string, mask: true|false = false){
|
|
||||||
Taro.showToast({
|
|
||||||
title,icon: "loading",
|
|
||||||
mask
|
|
||||||
})
|
|
||||||
},
|
|
||||||
none(title: string){
|
|
||||||
Taro.showToast({
|
|
||||||
title,icon: "none"
|
|
||||||
})
|
|
||||||
|
|
||||||
},
|
|
||||||
showLoading(title: string, mask: true|false = true) {
|
|
||||||
Taro.showLoading({title, mask})
|
|
||||||
},
|
|
||||||
hideLoading() {
|
|
||||||
Taro.hideLoading()
|
|
||||||
}
|
}
|
||||||
}
|
resolve(null)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* toast提示
|
||||||
|
*/
|
||||||
|
export const alert = {
|
||||||
|
success(title: string) {
|
||||||
|
Taro.showToast({
|
||||||
|
title,
|
||||||
|
icon: 'success',
|
||||||
|
})
|
||||||
|
},
|
||||||
|
error(title: string) {
|
||||||
|
Taro.showToast({
|
||||||
|
title,
|
||||||
|
icon: 'error',
|
||||||
|
})
|
||||||
|
},
|
||||||
|
loading(title: string, mask: true | false = false) {
|
||||||
|
Taro.showToast({
|
||||||
|
title,
|
||||||
|
icon: 'loading',
|
||||||
|
mask,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
none(title: string) {
|
||||||
|
Taro.showToast({
|
||||||
|
title,
|
||||||
|
icon: 'none',
|
||||||
|
})
|
||||||
|
},
|
||||||
|
showLoading(title: string, mask: boolean = true) {
|
||||||
|
Taro.showLoading({ title, mask })
|
||||||
|
},
|
||||||
|
hideLoading() {
|
||||||
|
Taro.hideLoading()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
// 金额千位分割符
|
// 金额千位分割符
|
||||||
export const formatKbPrice = (number: string) => {
|
export const formatKbPrice = (number: string) => {
|
||||||
const ret = Array.from(number).reverse().reduce((result: string[],next,i,arr) => {
|
const ret = Array.from(number)
|
||||||
if((i+1)%3 === 0 && (i+1) !== arr.length) {
|
.reverse()
|
||||||
result.push(next,',')
|
.reduce((result: string[], next, i, arr) => {
|
||||||
return result;
|
if ((i + 1) % 3 === 0 && i + 1 !== arr.length) {
|
||||||
}
|
result.push(next, ',')
|
||||||
result.push(next);
|
return result
|
||||||
return result;
|
}
|
||||||
},[])
|
result.push(next)
|
||||||
return ret.reverse().join('');
|
return result
|
||||||
|
}, [])
|
||||||
|
return ret.reverse().join('')
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
.checkbox {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
&--text {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
.checkbox_main {
|
.checkbox_main {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
@ -14,9 +14,10 @@ type params = {
|
|||||||
circle?: boolean
|
circle?: boolean
|
||||||
round?: boolean
|
round?: boolean
|
||||||
size?: CheckboxSize
|
size?: CheckboxSize
|
||||||
|
children?: React.ReactNode
|
||||||
}
|
}
|
||||||
export default forwardRef((props: params, ref) => {
|
export default forwardRef((props: params, ref) => {
|
||||||
const { onSelect, onClose, status = false, disabled = false, circle = false, round = true, size = 'normal' } = props
|
const { onSelect, onClose, status = false, disabled = false, circle = false, round = true, size = 'normal', children } = props
|
||||||
const [selected, SetSelected] = useState(false)
|
const [selected, SetSelected] = useState(false)
|
||||||
const onSelectEven = () => {
|
const onSelectEven = () => {
|
||||||
if (disabled) return false
|
if (disabled) return false
|
||||||
@ -54,12 +55,13 @@ export default forwardRef((props: params, ref) => {
|
|||||||
SetSelected(status)
|
SetSelected(status)
|
||||||
}, [status])
|
}, [status])
|
||||||
return (
|
return (
|
||||||
<>
|
<View className={styles.checkbox} onClick={() => onSelectEven()}>
|
||||||
<View className={classnames(styles.checkbox_main, getMainClassName())} onClick={() => onSelectEven()}>
|
<View className={classnames(styles.checkbox_main, getMainClassName())}>
|
||||||
<View className={classnames(styles.checkbox_item, getClassName())}>
|
<View className={classnames(styles.checkbox_item, getClassName())}>
|
||||||
{selected && <IconFont name='icon-a-jizhumima' size={22} color='#fff'></IconFont>}
|
{selected && <IconFont name='icon-a-jizhumima' size={22} color='#fff'></IconFont>}
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
</>
|
{children && <View className={styles['checkbox--text']}>{children}</View>}
|
||||||
|
</View>
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
@ -41,7 +41,6 @@ const NormalButton: FC<PropsType> = (props) => {
|
|||||||
[styles['button--plain']]: plain,
|
[styles['button--plain']]: plain,
|
||||||
[styles['button--circle']]: circle,
|
[styles['button--circle']]: circle,
|
||||||
}
|
}
|
||||||
console.log('classObj==>button', classObject)
|
|
||||||
return classObject
|
return classObject
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,11 +1,25 @@
|
|||||||
export const SET_USERINFO = 'setUserInfo'
|
// export const SET_USERINFO = 'setUserInfo'
|
||||||
export const SET_ADMINUSERINFO = 'setAdminUserInfo'
|
// export const SET_ADMINUSERINFO = 'setAdminUserInfo'
|
||||||
export const SET_TOKEN = 'setToken'
|
// export const SET_TOKEN = 'setToken'
|
||||||
export const SET_SESSIONKEY = 'setSessionkey'
|
// export const SET_SESSIONKEY = 'setSessionkey'
|
||||||
export const SET_SORTCODE = 'setSortCode'
|
// export const SET_SORTCODE = 'setSortCode'
|
||||||
export const CLEAR_TOKEN = 'clearToken'
|
// export const CLEAR_TOKEN = 'clearToken'
|
||||||
export const CLEAR_SESSIONKEY = 'clearSessionkey'
|
// export const CLEAR_SESSIONKEY = 'clearSessionkey'
|
||||||
export const CLEAR_USERINFO = 'clearUserInfo'
|
// export const CLEAR_USERINFO = 'clearUserInfo'
|
||||||
export const CLEAR_ADMINUSERINFO = 'clearAdminUserInfo'
|
// export const CLEAR_ADMINUSERINFO = 'clearAdminUserInfo'
|
||||||
export const CLEAR_SORTCODE = 'clearSortCode'
|
// export const CLEAR_SORTCODE = 'clearSortCode'
|
||||||
export const LOGIN_STATUS = 'loginStatus'
|
// export const LOGIN_STATUS = 'loginStatus'
|
||||||
|
|
||||||
|
export const enum UserInfoActionType {
|
||||||
|
SET_USERINFO = 'setUserInfo',
|
||||||
|
SET_ADMINUSERINFO = 'setAdminUserInfo',
|
||||||
|
SET_TOKEN = 'setToken',
|
||||||
|
SET_SESSIONKEY = 'setSessionkey',
|
||||||
|
SET_SORTCODE = 'setSortCode',
|
||||||
|
CLEAR_TOKEN = 'clearToken',
|
||||||
|
CLEAR_SESSIONKEY = 'clearSessionkey',
|
||||||
|
CLEAR_USERINFO = 'clearUserInfo',
|
||||||
|
CLEAR_ADMINUSERINFO = 'clearAdminUserInfo',
|
||||||
|
CLEAR_SORTCODE = 'clearSortCode',
|
||||||
|
LOGIN_STATUS = 'loginStatus',
|
||||||
|
}
|
||||||
|
@ -25,8 +25,6 @@ type TabBarIndexMap = {
|
|||||||
const CustomTabBar: FC = () => {
|
const CustomTabBar: FC = () => {
|
||||||
console.log('重新渲染')
|
console.log('重新渲染')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const { selectedId, tabItem } = useSelector((state) => {
|
const { selectedId, tabItem } = useSelector((state) => {
|
||||||
console.log('sdfasdfa', state)
|
console.log('sdfasdfa', state)
|
||||||
return state.tabBarData
|
return state.tabBarData
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Divider from '@/components/divider'
|
import Divider from '@/components/divider'
|
||||||
import IconFont from '@/components/iconfont'
|
import IconFont from '@/components/iconfont'
|
||||||
import { View, Image, Text, Input, CommonEventFunction } from '@tarojs/components'
|
import { View, Image, Text, Input } from '@tarojs/components'
|
||||||
import { FC, useState } from 'react'
|
import { FC, useState } from 'react'
|
||||||
import styles from './index.module.scss'
|
import styles from './index.module.scss'
|
||||||
import MCheckbox from '@/components/checkbox'
|
import MCheckbox from '@/components/checkbox'
|
||||||
@ -8,11 +8,14 @@ import NormalButton from '@/components/normalButton'
|
|||||||
import IconCard from '@/components/iconCard'
|
import IconCard from '@/components/iconCard'
|
||||||
import {memo} from 'react'
|
import {memo} from 'react'
|
||||||
import { LoginApi } from '@/api'
|
import { LoginApi } from '@/api'
|
||||||
|
import Taro from '@tarojs/taro'
|
||||||
|
import { alert } from '@/common/common'
|
||||||
|
import useUserInfo from '@/use/useUserInfo'
|
||||||
|
|
||||||
const Login: FC = () => {
|
const Login: FC = () => {
|
||||||
const [isRemember, setRemember] = useState(false)
|
const [isRemember, setRemember] = useState(false)
|
||||||
|
|
||||||
const [eyesStatus, setEyesStatus] = useState(false)
|
const [eyesStatus, setEyesStatus] = useState(true)
|
||||||
|
|
||||||
const handlePwdVisible = () => {
|
const handlePwdVisible = () => {
|
||||||
setEyesStatus((value) => !value)
|
setEyesStatus((value) => !value)
|
||||||
@ -30,19 +33,47 @@ const Login: FC = () => {
|
|||||||
const [account, setAccount] = useState('')
|
const [account, setAccount] = useState('')
|
||||||
const [password, setPassword] = useState('')
|
const [password, setPassword] = useState('')
|
||||||
|
|
||||||
|
const formatInput = (value:string) => {
|
||||||
|
return value.trim()
|
||||||
|
}
|
||||||
|
|
||||||
const handleInputAccount = (event: any) => {
|
const handleInputAccount = (event: any) => {
|
||||||
|
const formated = formatInput(event.detail.value)
|
||||||
|
setAccount(formated)
|
||||||
}
|
}
|
||||||
const handleInputPassword = () => {
|
const handleInputPassword = (event: any) => {
|
||||||
|
const formated = formatInput(event.detail.value)
|
||||||
|
setPassword(formated)
|
||||||
}
|
}
|
||||||
|
|
||||||
const { fetchData , state} = LoginApi()
|
const { setToken, setUserInfo } = useUserInfo()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const { fetchData } = LoginApi()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const handleLogin = async () => {
|
const handleLogin = async () => {
|
||||||
await fetchData({
|
if (account === '' || password === '') return alert.error('账号密码不能为空!')
|
||||||
|
console.log('账户密码:', account, password)
|
||||||
|
const res = await fetchData({
|
||||||
account,
|
account,
|
||||||
password,
|
password,
|
||||||
})
|
})
|
||||||
|
console.log('state===>', res)
|
||||||
|
if (res.success) {
|
||||||
|
alert.success('登陆成功')
|
||||||
|
setToken(res.data.token)
|
||||||
|
setUserInfo({ ...res.data })
|
||||||
|
|
||||||
|
Taro.redirectTo({
|
||||||
|
url: '/pages/index/index',
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
alert.error('登陆失败')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -61,9 +92,14 @@ const Login: FC = () => {
|
|||||||
<View className={styles['input-bar']}>
|
<View className={styles['input-bar']}>
|
||||||
<IconFont name='icon-mima' size={48} color='#999999'></IconFont>
|
<IconFont name='icon-mima' size={48} color='#999999'></IconFont>
|
||||||
<Divider direction='vertical'></Divider>
|
<Divider direction='vertical'></Divider>
|
||||||
<Input onInput={handleInputPassword} className={styles['input-bar--password']} type='safe-password' placeholder='请输入密码'></Input>
|
<Input
|
||||||
|
onInput={handleInputPassword}
|
||||||
|
password={eyesStatus}
|
||||||
|
className={styles['input-bar--password']}
|
||||||
|
type='safe-password'
|
||||||
|
placeholder='请输入密码'></Input>
|
||||||
<View onClick={handlePwdVisible}>
|
<View onClick={handlePwdVisible}>
|
||||||
{eyesStatus ? (
|
{!eyesStatus ? (
|
||||||
<IconFont name='icon-yanjing' size={48} color='#999999'></IconFont>
|
<IconFont name='icon-yanjing' size={48} color='#999999'></IconFont>
|
||||||
) : (
|
) : (
|
||||||
<IconFont name='icon-biyan' size={48} color='#999999'></IconFont>
|
<IconFont name='icon-biyan' size={48} color='#999999'></IconFont>
|
||||||
@ -72,8 +108,9 @@ const Login: FC = () => {
|
|||||||
</View>
|
</View>
|
||||||
<View className={styles['login-options']}>
|
<View className={styles['login-options']}>
|
||||||
<View className={styles['login-option']}>
|
<View className={styles['login-option']}>
|
||||||
<MCheckbox status={isRemember} size='small' circle onSelect={selectCallBack} onClose={closeCallBack}></MCheckbox>
|
<MCheckbox status={isRemember} size='small' circle onSelect={selectCallBack} onClose={closeCallBack}>
|
||||||
<Text className={styles.isRememberPwd}>记住密码</Text>
|
记住密码
|
||||||
|
</MCheckbox>
|
||||||
</View>
|
</View>
|
||||||
<View className={styles['login-option']}>
|
<View className={styles['login-option']}>
|
||||||
<Text className={styles.isForgetPwd}>忘记密码?</Text>
|
<Text className={styles.isForgetPwd}>忘记密码?</Text>
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { isEmptyObject } from '@/common/common'
|
import { View, Image, Text } from '@tarojs/components'
|
||||||
import { Button, View, Image, Text } from '@tarojs/components'
|
import { FC, useState } from 'react'
|
||||||
import { FC, memo, useMemo, useState } from 'react'
|
|
||||||
import styles from './index.module.scss'
|
import styles from './index.module.scss'
|
||||||
import defaultAvatar from '../../styles/image/defaultAvatar.png'
|
import defaultAvatar from '../../styles/image/defaultAvatar.png'
|
||||||
import NormalButton from '@/components/normalButton'
|
import NormalButton from '@/components/normalButton'
|
||||||
@ -9,6 +8,8 @@ import Divider from '@/components/Divider'
|
|||||||
import LayoutBlock from '@/components/layoutBlock'
|
import LayoutBlock from '@/components/layoutBlock'
|
||||||
import IconCard from '@/components/iconCard'
|
import IconCard from '@/components/iconCard'
|
||||||
import IconFont from '@/components/iconfont'
|
import IconFont from '@/components/iconfont'
|
||||||
|
import useUserInfo from '@/use/useUserInfo'
|
||||||
|
import { goLink } from '@/common/common'
|
||||||
|
|
||||||
type IconfontName = Parameters<typeof IconFont>['0']['name']
|
type IconfontName = Parameters<typeof IconFont>['0']['name']
|
||||||
type IconCardType = {
|
type IconCardType = {
|
||||||
@ -19,11 +20,13 @@ type IconCardType = {
|
|||||||
|
|
||||||
// 用户信息
|
// 用户信息
|
||||||
const UserInfo: FC = () => {
|
const UserInfo: FC = () => {
|
||||||
const [userInfo, setUserInfo] = useState({
|
const { removeToken, removeUserInfo, userInfo } = useUserInfo()
|
||||||
avatarUrl: '',
|
console.log('userInfo==>', userInfo)
|
||||||
username: '',
|
// const [userInfo, setUserInfo] = useState({
|
||||||
userno: '',
|
// avatarUrl: '',
|
||||||
})
|
// username: '',
|
||||||
|
// userno: '',
|
||||||
|
// })
|
||||||
|
|
||||||
|
|
||||||
const feature: IconCardType[] = [
|
const feature: IconCardType[] = [
|
||||||
@ -110,18 +113,24 @@ const UserInfo: FC = () => {
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
const handleLogout = () => {}
|
|
||||||
|
// 退出登录
|
||||||
|
const handleLogout = () => {
|
||||||
|
removeToken()
|
||||||
|
removeUserInfo()
|
||||||
|
goLink('/pages/login/index', {}, 'reLaunch')
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<LayoutBlock circle>
|
<LayoutBlock circle>
|
||||||
<View className={styles.topBar}>
|
<View className={styles.topBar}>
|
||||||
<View className={styles.left}>
|
<View className={styles.left}>
|
||||||
<UserAvatar src={userInfo.avatarUrl} />
|
<UserAvatar src={userInfo.userInfo.avatar_url} />
|
||||||
</View>
|
</View>
|
||||||
<View className={styles.middle}>
|
<View className={styles.middle}>
|
||||||
<Text className={styles.username}>杨子杰</Text>
|
<Text className={styles.username}>{userInfo.userInfo.user_name}</Text>
|
||||||
<Text className={styles.userno}>064</Text>
|
<Text className={styles.userno}>{userInfo.userInfo.user_code}</Text>
|
||||||
</View>
|
</View>
|
||||||
<View className={styles.right}>
|
<View className={styles.right}>
|
||||||
<NormalButton type='primary' round size='normal' onClick={handleLogout}>
|
<NormalButton type='primary' round size='normal' onClick={handleLogout}>
|
||||||
@ -161,13 +170,6 @@ const UserInfo: FC = () => {
|
|||||||
})}
|
})}
|
||||||
</View>
|
</View>
|
||||||
</LayoutBlock>
|
</LayoutBlock>
|
||||||
{/* <LayoutBlock circle>
|
|
||||||
<View className={styles.layoutTabBar}>
|
|
||||||
<View className={styles.layoutTitle}>客户列表</View>
|
|
||||||
<View className={styles.layoutDescription}>查看全部客户 ▶</View>
|
|
||||||
</View>
|
|
||||||
asdfasdfasdfas
|
|
||||||
</LayoutBlock> */}
|
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ const INIT = {
|
|||||||
shopCount: Taro.getStorageSync(STORAGE_SHOPCOUNT)?JSON.parse(Taro.getStorageSync(STORAGE_SHOPCOUNT)).shopCount:0,
|
shopCount: Taro.getStorageSync(STORAGE_SHOPCOUNT)?JSON.parse(Taro.getStorageSync(STORAGE_SHOPCOUNT)).shopCount:0,
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function counter (state = INIT, action: Action) {
|
export default (state = INIT, action: Action) => {
|
||||||
const {type, data} = action
|
const {type, data} = action
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case SET_SHOPCOUNT:
|
case SET_SHOPCOUNT:
|
||||||
@ -31,4 +31,4 @@ export default function counter (state = INIT, action: Action) {
|
|||||||
default:
|
default:
|
||||||
return state
|
return state
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import { DataParam as userInfoParam } from './userInfo';
|
|||||||
import { DataParam as commonDataParam } from './commonData';
|
import { DataParam as commonDataParam } from './commonData';
|
||||||
import { TabBarData as tabbarDataParam } from './tabBar';
|
import { TabBarData as tabbarDataParam } from './tabBar';
|
||||||
type Params = {
|
type Params = {
|
||||||
userInfo: userInfoParam
|
userInfoData: userInfoParam
|
||||||
commonData: commonDataParam
|
commonData: commonDataParam
|
||||||
tabBarData: tabbarDataParam
|
tabBarData: tabbarDataParam
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import { combineReducers } from 'redux'
|
import { combineReducers } from 'redux'
|
||||||
import userInfo from './userInfo'
|
import userInfoData from './userInfo'
|
||||||
import commonData from './commonData'
|
import commonData from './commonData'
|
||||||
import tabBarReducer from './tabBar'
|
import tabBarReducer from './tabBar'
|
||||||
|
|
||||||
export type Reducers = {
|
export type Reducers = {
|
||||||
userInfo: typeof userInfo
|
userInfoData: typeof userInfoData
|
||||||
commonData: typeof commonData
|
commonData: typeof commonData
|
||||||
tabBarData: typeof tabBarReducer
|
tabBarData: typeof tabBarReducer
|
||||||
}
|
}
|
||||||
@ -12,7 +12,7 @@ export type Reducers = {
|
|||||||
export type ReducersKey = keyof Reducers
|
export type ReducersKey = keyof Reducers
|
||||||
|
|
||||||
export default combineReducers<Reducers>({
|
export default combineReducers<Reducers>({
|
||||||
userInfo,
|
userInfoData,
|
||||||
commonData,
|
commonData,
|
||||||
tabBarData: tabBarReducer,
|
tabBarData: tabBarReducer,
|
||||||
})
|
})
|
||||||
|
@ -1,31 +1,18 @@
|
|||||||
|
|
||||||
import Taro from '@tarojs/taro'
|
import Taro from '@tarojs/taro'
|
||||||
import {
|
import { UserInfoActionType } from '../constants/userInfo'
|
||||||
SET_USERINFO,
|
|
||||||
SET_ADMINUSERINFO,
|
|
||||||
SET_TOKEN,
|
|
||||||
SET_SESSIONKEY,
|
|
||||||
SET_SORTCODE,
|
|
||||||
CLEAR_TOKEN,
|
|
||||||
CLEAR_USERINFO,
|
|
||||||
CLEAR_SESSIONKEY,
|
|
||||||
CLEAR_ADMINUSERINFO,
|
|
||||||
CLEAR_SORTCODE,
|
|
||||||
LOGIN_STATUS
|
|
||||||
} from '../constants/userInfo'
|
|
||||||
|
|
||||||
export type UserParam = {
|
export type UserParam = {
|
||||||
nickName?:string,
|
department_code?: string
|
||||||
phone?:string,
|
department_id?: string
|
||||||
avatarUrl?:string,
|
department_name?: string
|
||||||
city?: string,
|
physical_warehouse?: number
|
||||||
country?: string,
|
physical_warehouse_name?: string
|
||||||
province?: string,
|
token?: string
|
||||||
gender?: number,
|
user_code?: number
|
||||||
language?: string,
|
user_id?: string
|
||||||
timestamp?: number,
|
user_name?: number
|
||||||
physical_warehouse?: number,
|
avatar_url?: string
|
||||||
physical_warehouse_name?: string,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export type UserAdminParam = {
|
export type UserAdminParam = {
|
||||||
@ -38,8 +25,8 @@ export type UserAdminParam = {
|
|||||||
user_id?: number,
|
user_id?: number,
|
||||||
user_name?: string,
|
user_name?: string,
|
||||||
wechat_user_open_id?: number
|
wechat_user_open_id?: number
|
||||||
is_authorize_name?: false|true,
|
is_authorize_name?: boolean,
|
||||||
is_authorize_phone?: false|true,
|
is_authorize_phone?: boolean,
|
||||||
phone?:string,
|
phone?:string,
|
||||||
authentication_status?:number,
|
authentication_status?:number,
|
||||||
authentication_status_name: string,
|
authentication_status_name: string,
|
||||||
@ -64,11 +51,11 @@ export type DataParam = {
|
|||||||
userInfo: UserParam,
|
userInfo: UserParam,
|
||||||
adminUserInfo: UserAdminParam,
|
adminUserInfo: UserAdminParam,
|
||||||
sort_code: SortCodeParam
|
sort_code: SortCodeParam
|
||||||
logingStatus?: false //登录状态 true 正在登录
|
logingStatus?: boolean //登录状态 true 正在登录
|
||||||
}
|
}
|
||||||
|
|
||||||
type Action = {
|
export type UserInfoAction = {
|
||||||
type?: string,
|
type: UserInfoActionType
|
||||||
data?: DataParam
|
data?: DataParam
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,42 +69,42 @@ const INIT_USER = {
|
|||||||
logingStatus: false
|
logingStatus: false
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function counter (state = INIT_USER, action: Action) {
|
export default (state = INIT_USER, action: UserInfoAction) => {
|
||||||
const {type, data} = action
|
const { type, data } = action
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case SET_USERINFO:
|
case UserInfoActionType.SET_USERINFO:
|
||||||
Taro.setStorageSync('userInfo',JSON.stringify(data?.userInfo))
|
Taro.setStorageSync('userInfo', JSON.stringify(data?.userInfo))
|
||||||
return {...state,...data}
|
return { ...state, ...data }
|
||||||
case SET_ADMINUSERINFO:
|
case UserInfoActionType.SET_ADMINUSERINFO:
|
||||||
Taro.setStorageSync('adminUserInfo',JSON.stringify(data?.adminUserInfo))
|
Taro.setStorageSync('adminUserInfo', JSON.stringify(data?.adminUserInfo))
|
||||||
return {...state,...data}
|
return { ...state, ...data }
|
||||||
case SET_TOKEN:
|
case UserInfoActionType.SET_TOKEN:
|
||||||
Taro.setStorageSync('token',data?.token)
|
Taro.setStorageSync('token', data?.token)
|
||||||
return {...state,...data}
|
return { ...state, ...data }
|
||||||
case SET_SESSIONKEY:
|
case UserInfoActionType.SET_SESSIONKEY:
|
||||||
Taro.setStorageSync('session_key',data?.session_key)
|
Taro.setStorageSync('session_key', data?.session_key)
|
||||||
return {...state,...data}
|
return { ...state, ...data }
|
||||||
case SET_SORTCODE:
|
case UserInfoActionType.SET_SORTCODE:
|
||||||
Taro.setStorageSync('sort_code',JSON.stringify(data?.sort_code))
|
Taro.setStorageSync('sort_code', JSON.stringify(data?.sort_code))
|
||||||
return {...state,...data}
|
return { ...state, ...data }
|
||||||
case CLEAR_TOKEN:
|
case UserInfoActionType.CLEAR_TOKEN:
|
||||||
Taro.removeStorageSync('token')
|
Taro.removeStorageSync('token')
|
||||||
return {...state, token:''}
|
return { ...state, token: '' }
|
||||||
case CLEAR_SESSIONKEY:
|
case UserInfoActionType.CLEAR_SESSIONKEY:
|
||||||
Taro.removeStorageSync('session_key')
|
Taro.removeStorageSync('session_key')
|
||||||
return {...state, session_key:''}
|
return { ...state, session_key: '' }
|
||||||
case CLEAR_USERINFO:
|
case UserInfoActionType.CLEAR_USERINFO:
|
||||||
Taro.removeStorageSync('userInfo')
|
Taro.removeStorageSync('userInfo')
|
||||||
return {...state, userInfo: null}
|
return { ...state, userInfo: null }
|
||||||
case CLEAR_ADMINUSERINFO:
|
case UserInfoActionType.CLEAR_ADMINUSERINFO:
|
||||||
Taro.removeStorageSync('adminUserInfo')
|
Taro.removeStorageSync('adminUserInfo')
|
||||||
return {...state, adminUserInfo: null}
|
return { ...state, adminUserInfo: null }
|
||||||
case CLEAR_SORTCODE:
|
case UserInfoActionType.CLEAR_SORTCODE:
|
||||||
Taro.removeStorageSync('sort_code')
|
Taro.removeStorageSync('sort_code')
|
||||||
return {...state, sortCode: null}
|
return { ...state, sortCode: null }
|
||||||
case LOGIN_STATUS:
|
case UserInfoActionType.LOGIN_STATUS:
|
||||||
return {...state, ...data}
|
return { ...state, ...data }
|
||||||
default:
|
default:
|
||||||
return state
|
return state
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -122,6 +122,7 @@ export const useRequest = (
|
|||||||
}
|
}
|
||||||
|
|
||||||
const stateRef = useRef({ ...params })
|
const stateRef = useRef({ ...params })
|
||||||
|
console.log('stateRef==>', stateRef)
|
||||||
const [state, setState] = useState({ ...stateRef.current })
|
const [state, setState] = useState({ ...stateRef.current })
|
||||||
const { removeToken, removeSessionKey, removeUserInfo } = useUserInfo()
|
const { removeToken, removeSessionKey, removeUserInfo } = useUserInfo()
|
||||||
const { login } = useLoginRequest()
|
const { login } = useLoginRequest()
|
||||||
@ -152,11 +153,11 @@ export const useRequest = (
|
|||||||
},
|
},
|
||||||
...(options.method?.toUpperCase() == 'GET'
|
...(options.method?.toUpperCase() == 'GET'
|
||||||
? {
|
? {
|
||||||
data: stateRef.current.query,
|
data: stateRef.current.query,
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
data: options.type?.toUpperCase() == 'FORMDATA' ? qs.stringify(stateRef.current.query) : stateRef.current.query,
|
data: options.type?.toUpperCase() == 'FORMDATA' ? qs.stringify(stateRef.current.query) : stateRef.current.query,
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
const result = await Taro.request(q as any)
|
const result = await Taro.request(q as any)
|
||||||
const { statusCode } = result
|
const { statusCode } = result
|
||||||
@ -196,10 +197,11 @@ export const useRequest = (
|
|||||||
}
|
}
|
||||||
stateRef.current.error = false
|
stateRef.current.error = false
|
||||||
stateRef.current.loading = false
|
stateRef.current.loading = false
|
||||||
setState(() => ({ ...stateRef.current }))
|
setState(() => ({...stateRef.current}))
|
||||||
|
console.log('request result stateRef', stateRef.current)
|
||||||
|
console.log('request result state', state)
|
||||||
return stateRef.current
|
return stateRef.current
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
fetchData,
|
fetchData,
|
||||||
state,
|
state,
|
||||||
|
@ -1,40 +1,47 @@
|
|||||||
import { useDispatch, useSelector } from 'react-redux'
|
import { useDispatch } from 'react-redux'
|
||||||
import { CLEAR_SESSIONKEY, SET_USERINFO, SET_TOKEN, SET_SESSIONKEY, CLEAR_USERINFO, CLEAR_TOKEN, SET_ADMINUSERINFO, SET_SORTCODE } from '@/constants/userInfo'
|
import { UserInfoActionType } from '@/constants/userInfo'
|
||||||
import { DataParam, UserParam, UserAdminParam, SortCodeParam } from '@/reducers/userInfo'
|
import { DataParam, UserParam, UserAdminParam, SortCodeParam, UserInfoAction } from '@/reducers/userInfo'
|
||||||
|
import { Dispatch } from 'redux'
|
||||||
|
import { useSelector } from '@/reducers/hooks'
|
||||||
export default () => {
|
export default () => {
|
||||||
const userInfo = useSelector((state: DataParam) => state.userInfo) as DataParam
|
const userInfo = useSelector((state) => state.userInfoData)
|
||||||
const dispatch = useDispatch()
|
const dispatch = useDispatch<Dispatch<UserInfoAction>>()
|
||||||
|
|
||||||
const setToken = (token: string) => {
|
const setToken = (token: string) => {
|
||||||
dispatch({ type: SET_TOKEN, data: { token } })
|
// @ts-ignore
|
||||||
|
dispatch({ type: UserInfoActionType.SET_TOKEN, data: { token } })
|
||||||
}
|
}
|
||||||
|
|
||||||
const setSessionKey = (sessionkey: string) => {
|
const setSessionKey = (sessionkey: string) => {
|
||||||
dispatch({ type: SET_SESSIONKEY, data: { session_key: sessionkey } })
|
// @ts-ignore
|
||||||
|
dispatch({ type: UserInfoActionType.SET_SESSIONKEY, data: { session_key: sessionkey } })
|
||||||
}
|
}
|
||||||
|
|
||||||
const setUserInfo = (userInfo: UserParam) => {
|
const setUserInfo = (userInfo: UserParam) => {
|
||||||
dispatch({ type: SET_USERINFO, data: { userInfo } })
|
// @ts-ignore
|
||||||
|
dispatch({ type: UserInfoActionType.SET_USERINFO, data: { userInfo } })
|
||||||
}
|
}
|
||||||
|
|
||||||
const setAdminUserInfo = (adminUserInfo: UserAdminParam) => {
|
const setAdminUserInfo = (adminUserInfo: UserAdminParam) => {
|
||||||
dispatch({ type: SET_ADMINUSERINFO, data: { adminUserInfo } })
|
// @ts-ignore
|
||||||
|
dispatch({ type: UserInfoActionType.SET_ADMINUSERINFO, data: { adminUserInfo } })
|
||||||
}
|
}
|
||||||
|
|
||||||
const setSortCode = (sortCode: SortCodeParam) => {
|
const setSortCode = (sortCode: SortCodeParam) => {
|
||||||
dispatch({ type: SET_SORTCODE, data: { sort_code: sortCode } })
|
// @ts-ignore
|
||||||
|
dispatch({ type: UserInfoActionType.SET_SORTCODE, data: { sort_code: sortCode } })
|
||||||
}
|
}
|
||||||
|
|
||||||
const removeUserInfo = () => {
|
const removeUserInfo = () => {
|
||||||
dispatch({ type: CLEAR_USERINFO })
|
dispatch({ type: UserInfoActionType.CLEAR_USERINFO })
|
||||||
}
|
}
|
||||||
|
|
||||||
const removeToken = () => {
|
const removeToken = () => {
|
||||||
dispatch({ type: CLEAR_TOKEN })
|
dispatch({ type: UserInfoActionType.CLEAR_TOKEN })
|
||||||
}
|
}
|
||||||
|
|
||||||
const removeSessionKey = () => {
|
const removeSessionKey = () => {
|
||||||
dispatch({ type: CLEAR_SESSIONKEY })
|
dispatch({ type: UserInfoActionType.CLEAR_SESSIONKEY })
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user