Files
template-10519/src/pages/index/Header.tsx
2025-06-26 17:01:05 +08:00

217 lines
7.0 KiB
TypeScript

import {useEffect, useState} from "react";
import Taro from '@tarojs/taro';
import {Button, Space} from '@nutui/nutui-react-taro'
import {TriangleDown} from '@nutui/icons-react-taro'
import {Popup, Avatar, NavBar} from '@nutui/nutui-react-taro'
import {getUserInfo} from "@/api/layout";
import {TenantId} from "@/utils/config";
import {getOrganization} from "@/api/system/organization";
import {myUserVerify} from "@/api/system/userVerify";
const Header = (props: any) => {
const [IsLogin, setIsLogin] = useState<boolean>(true)
const [showBasic, setShowBasic] = useState(false)
const [statusBarHeight, setStatusBarHeight] = useState<number>()
const [roleName, setRoleName] = useState<string>()
const onNav = () => {
if (!IsLogin) {
return false;
}
Taro.switchTab({
url: '/pages/user/user',
})
}
const reload = () => {
Taro.getSystemInfo({
success: (res) => {
setStatusBarHeight(res.statusBarHeight)
},
})
getUserInfo().then((data) => {
if (data) {
console.log(data.organizationName,'0000')
setIsLogin(true);
Taro.setStorageSync('UserId', data.userId)
Taro.setStorageSync('Phone',data.phone)
// 机构ID
Taro.setStorageSync('OrganizationId',data.organizationId)
// 父级机构ID
getOrganization(Number(data.organizationId)).then(res => {
Taro.setStorageSync('OrganizationParentId',res.parentId)
})
// 所属站点名称
if(data.organizationName){
Taro.setStorageSync('OrganizationName',data.organizationName)
}
// 是否已认证
if(data.certification){
Taro.setStorageSync('Certification','1')
}
// 安装人员
const isInstaller = data.roles?.findIndex(item => item.roleCode == 'Installer')
if(isInstaller != -1){
setRoleName('安装人员')
Taro.setStorageSync('RoleName', '安装人员')
Taro.setStorageSync('RoleCode', 'Installer')
return false;
}
// 管理员
const isKdy = data.roles?.findIndex(item => item.roleCode == 'admin')
if(isKdy != -1){
setRoleName('管理员')
Taro.setStorageSync('RoleName', '管理')
Taro.setStorageSync('RoleCode', 'admin')
return false;
}
// 交警
const isJj = data.roles?.findIndex(item => item.roleCode == 'jiaojing')
if(isJj != -1){
setRoleName('交警')
Taro.setStorageSync('RoleName', '交警')
Taro.setStorageSync('RoleCode', 'jiaojing')
Taro.setStorageSync('Certification', 'jj')
return false;
}
// 邮政协会/管局
const isYz = data.roles?.findIndex(item => item.roleCode == 'youzheng')
if(isYz != -1){
setRoleName('邮政协会/管局')
Taro.setStorageSync('RoleName', '邮政协会/管局')
Taro.setStorageSync('RoleCode', 'youzheng')
Taro.setStorageSync('Certification', 'yz')
return false;
}
// 快递公司
const isKd = data.roles?.findIndex(item => item.roleCode == 'kuaidi')
if(isKd != -1){
setRoleName('快递公司')
Taro.setStorageSync('RoleName', '快递公司')
Taro.setStorageSync('RoleCode', 'kuaidi')
return false;
}
const isZD = data.roles?.findIndex(item => item.roleCode == 'zhandian')
if(isZD != -1){
setRoleName('快递站点')
Taro.setStorageSync('RoleName', '快递站点')
Taro.setStorageSync('RoleCode', 'zhandian')
}
// 快递员
const isKdyy = data.roles?.findIndex(item => item.roleCode == 'kuaidiyuan')
if(isKdyy != -1){
setRoleName('快递员')
Taro.setStorageSync('RoleName', '快递员')
Taro.setStorageSync('RoleCode', 'kuaidiyuan')
return false;
}
// 注册用户
const isUser = data.roles?.findIndex(item => item.roleCode == 'user')
if(isUser != -1){
setRoleName('注册用户')
Taro.setStorageSync('RoleName', '注册用户')
Taro.setStorageSync('RoleCode', 'user')
return false;
}
}
}).catch(() => {
setIsLogin(false);
console.log('未登录')
});
myUserVerify({status: 1}).then(data => {
if(data?.realName){
Taro.setStorageSync('RealName',data.realName)
}
})
}
/* 获取用户手机号 */
const handleGetPhoneNumber = ({detail}) => {
const {code, encryptedData, iv} = detail
Taro.login({
success: function () {
if (code) {
Taro.request({
url: 'https://server.gxwebsoft.com/api/wx-login/loginByMpWxPhone',
method: 'POST',
data: {
code,
encryptedData,
iv,
notVerifyPhone: true,
refereeId: 0,
sceneType: 'save_referee',
tenantId: TenantId
},
header: {
'content-type': 'application/json',
TenantId
},
success: function (res) {
Taro.setStorageSync('access_token', res.data.data.access_token)
Taro.setStorageSync('UserId', res.data.data.user.userId)
setIsLogin(true)
// 重新加载小程序
Taro.reLaunch({
url: '/pages/index/index'
})
}
})
} else {
console.log('登录失败!')
}
}
})
}
useEffect(() => {
reload()
}, [])
return (
<>
<NavBar
fixed={true}
style={{marginTop: `${statusBarHeight}px`, backgroundColor: 'transparent'}}
onBackClick={() => {
}}
left={
!IsLogin ? (
<div style={{display: 'flex', alignItems: 'center'}}>
<Button style={{color: '#000'}} open-type="getPhoneNumber" onGetPhoneNumber={handleGetPhoneNumber}>
<Space>
<Avatar
size="22"
src={props.user?.avatar}
/>
<span style={{color: '#000'}}>{props.user?.nickname}</span>
</Space>
</Button>
<TriangleDown size={9}/>
</div>
) : (
<div style={{display: 'flex', alignItems: 'center', gap: '8px'}} onClick={onNav}>
<Avatar
size="22"
src={props.user?.avatar}
/>
{props.user?.nickname}{roleName && <span>({roleName})</span>}
<TriangleDown size={9}/>
</div>
)}>
</NavBar>
<Popup
visible={showBasic}
position="bottom"
style={{width: '100%', height: '100%'}}
onClose={() => {
setShowBasic(false)
}}
>
<div style={{padding: '12px 0', fontWeight: 'bold', textAlign: 'center'}}></div>
</Popup>
</>
)
}
export default Header