|
@ -6,160 +6,175 @@ import { IconTreeTriangleDown } from '@douyinfe/semi-icons'; |
|
|
import "./index.less"; |
|
|
import "./index.less"; |
|
|
|
|
|
|
|
|
const Header = (props) => { |
|
|
const Header = (props) => { |
|
|
const { dispatch, history, user, actions, socket, headerItems, tochange } = props; |
|
|
const { dispatch, history, user, actions, socket, headerItems, tochange } = props; |
|
|
|
|
|
let userRole = user?.pomsUserInfo?.role |
|
|
|
|
|
let modalRole = [] |
|
|
|
|
|
if (userRole) { |
|
|
|
|
|
let modal = [] |
|
|
|
|
|
userRole?.map(v => { |
|
|
|
|
|
if (v == 'data_analyst') ['analysis', 'data', 'workOrder', 'means'].map(u => modal.push(u)) |
|
|
|
|
|
if (v == 'after_sale') ['problem', 'facility', 'workOrder', 'means'].map(u => modal.push(u)) |
|
|
|
|
|
if (v == 'resource_manage') ['facility', 'workOrder', 'means'].map(u => modal.push(u)) |
|
|
|
|
|
if (v == 'customer_service') ['service', 'workOrder', 'means'].map(u => modal.push(u)) |
|
|
|
|
|
}) |
|
|
|
|
|
modal.push('console') |
|
|
|
|
|
modal = [...new Set(modal)] |
|
|
|
|
|
modalRole = headerItems?.filter(v => modal.includes(v.itemKey)) |
|
|
|
|
|
if (userRole?.includes('SuperAdmin') || userRole?.includes('admin')) modalRole = headerItems |
|
|
|
|
|
|
|
|
return ( |
|
|
} |
|
|
<> |
|
|
return ( |
|
|
<div id="top-slider"> |
|
|
<> |
|
|
<Nav |
|
|
<div id="top-slider"> |
|
|
mode={"horizontal"} |
|
|
<Nav |
|
|
onClick={({ itemKey }) => { |
|
|
mode={"horizontal"} |
|
|
if (itemKey == "logout") { |
|
|
onClick={({ itemKey }) => { |
|
|
dispatch(actions.auth.logout(user)); |
|
|
if (itemKey == "logout") { |
|
|
if (socket) { |
|
|
dispatch(actions.auth.logout(user)); |
|
|
socket.disconnect(); |
|
|
if (socket) { |
|
|
} |
|
|
socket.disconnect(); |
|
|
history.push(`/signin`); |
|
|
} |
|
|
} |
|
|
history.push(`/signin`); |
|
|
}} |
|
|
} |
|
|
style={{ |
|
|
}} |
|
|
height: 48, |
|
|
style={{ |
|
|
minWidth: 520, |
|
|
height: 48, |
|
|
background: '#1D2343', |
|
|
minWidth: 520, |
|
|
backgroundSize: "100% 100%", |
|
|
background: '#1D2343', |
|
|
color: "white", |
|
|
backgroundSize: "100% 100%", |
|
|
}} |
|
|
color: "white", |
|
|
header={{ |
|
|
}} |
|
|
logo: ( |
|
|
header={{ |
|
|
<img |
|
|
logo: ( |
|
|
src="/assets/images/install/long_logo.png" |
|
|
<img |
|
|
style={{ display: "inline-block", width: 200, height: 40, marginLeft: -24 }} |
|
|
src="/assets/images/install/long_logo.png" |
|
|
/> |
|
|
style={{ display: "inline-block", width: 200, height: 40, marginLeft: -24 }} |
|
|
), |
|
|
/> |
|
|
text: ( |
|
|
), |
|
|
<> |
|
|
text: ( |
|
|
|
|
|
<> |
|
|
|
|
|
|
|
|
{/* <SplitButtonGroup style={{ marginLeft: 10 }} aria-label="项目操作按钮组"> */} |
|
|
{/* <SplitButtonGroup style={{ marginLeft: 10 }} aria-label="项目操作按钮组"> */} |
|
|
<Button theme="solid" type="primary" style={{ width: 52, height: 24, background: '#005ABD' }}>全局</Button> |
|
|
<Button theme="solid" type="primary" style={{ width: 52, height: 24, background: '#005ABD' }}>全局</Button> |
|
|
{/* <Dropdown onVisibleChange={(v) => { }} menu={{}} trigger="click" position="bottomRight"> */} |
|
|
{/* <Dropdown onVisibleChange={(v) => { }} menu={{}} trigger="click" position="bottomRight"> */} |
|
|
<Button style={{ width: 16, height: 24, background: '#005ABD' }} theme="solid" type="primary" icon={<IconTreeTriangleDown />}></Button> |
|
|
<Button style={{ width: 16, height: 24, background: '#005ABD' }} theme="solid" type="primary" icon={<IconTreeTriangleDown />}></Button> |
|
|
{/* </Dropdown> */} |
|
|
{/* </Dropdown> */} |
|
|
{/* </SplitButtonGroup> */} |
|
|
{/* </SplitButtonGroup> */} |
|
|
</> |
|
|
</> |
|
|
), |
|
|
), |
|
|
}} |
|
|
}} |
|
|
footer={ |
|
|
footer={ |
|
|
<> |
|
|
<> |
|
|
{headerItems.map((item, index) => { |
|
|
{modalRole.length > 0 ? modalRole.map((item, index) => { |
|
|
if (item.hasOwnProperty('items')) { |
|
|
if (item.hasOwnProperty('items')) { |
|
|
return ( |
|
|
return ( |
|
|
<Nav.Sub |
|
|
<Nav.Sub |
|
|
key={index + 'a'} |
|
|
key={index + 'a'} |
|
|
itemKey={item.itemKey} |
|
|
itemKey={item.itemKey} |
|
|
text={item.text} |
|
|
text={item.text} |
|
|
dropdownStyle={{ color: '#F2F3F5' }} |
|
|
dropdownStyle={{ color: '#F2F3F5' }} |
|
|
> |
|
|
> |
|
|
{item.hasOwnProperty('items') && item.items.map((ite, idx) => ( |
|
|
{item.hasOwnProperty('items') && item.items.map((ite, idx) => ( |
|
|
<Nav.Item key={idx + 'd'} itemKey={ite.itemKey} text={ite.text} onClick={() => { tochange(ite); }} /> |
|
|
<Nav.Item key={idx + 'd'} itemKey={ite.itemKey} text={ite.text} onClick={() => { tochange(ite); }} /> |
|
|
))} |
|
|
))} |
|
|
</Nav.Sub> |
|
|
</Nav.Sub> |
|
|
) |
|
|
) |
|
|
} |
|
|
} |
|
|
else { |
|
|
else { |
|
|
return ( |
|
|
return ( |
|
|
<div key='console' style={{ display: 'inline-flex' }}> |
|
|
<div key='console' style={{ display: 'inline-flex' }}> |
|
|
<img src="/assets/images/background/console.png" style={{ width: 24, marginRight: -10 }} /> |
|
|
<img src="/assets/images/background/console.png" style={{ width: 24, marginRight: -10 }} /> |
|
|
<Nav.Item key={index + 'a'} itemKey={item.itemKey} text={item.text} onClick={() => { tochange(item) }} /> |
|
|
<Nav.Item key={index + 'a'} itemKey={item.itemKey} text={item.text} onClick={() => { tochange(item) }} /> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
) |
|
|
) |
|
|
} |
|
|
} |
|
|
})} |
|
|
}) : ""} |
|
|
<Nav.Sub |
|
|
<Nav.Sub |
|
|
itemKey={"user"} |
|
|
itemKey={"user"} |
|
|
text={ |
|
|
text={ |
|
|
<div |
|
|
<div |
|
|
style={{ |
|
|
style={{ |
|
|
marginLeft: -8, |
|
|
marginLeft: -8, |
|
|
display: "inline-block", |
|
|
display: "inline-block", |
|
|
color: "white", |
|
|
color: "white", |
|
|
}} |
|
|
}} |
|
|
> |
|
|
> |
|
|
<Avatar size="extra-small" color="light-blue" style={{ marginRight: 4 }}> |
|
|
<Avatar size="extra-small" color="light-blue" style={{ marginRight: 4 }}> |
|
|
{user?.name?.substr(0, 1)} |
|
|
{user?.name?.substr(0, 1)} |
|
|
</Avatar> |
|
|
</Avatar> |
|
|
<div style={{ |
|
|
<div style={{ |
|
|
display: "inline-block", position: "relative", |
|
|
display: "inline-block", position: "relative", |
|
|
top: 10, |
|
|
top: 10, |
|
|
left: 4, |
|
|
left: 4, |
|
|
marginRight: 4, |
|
|
marginRight: 4, |
|
|
}} |
|
|
}} |
|
|
> |
|
|
> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
} |
|
|
} |
|
|
> |
|
|
> |
|
|
<div style={{ width: 133, }}> |
|
|
<div style={{ width: 133, }}> |
|
|
<div style={{ display: "flex", alignItems: 'center', background: '#F0F5FF', padding: '8px 0px 8px 12px' }}> |
|
|
<div style={{ display: "flex", alignItems: 'center', background: '#F0F5FF', padding: '8px 0px 8px 12px' }}> |
|
|
<Avatar size="extra-small" color="light-blue" style={{ marginRight: 4 }}> |
|
|
<Avatar size="extra-small" color="light-blue" style={{ marginRight: 4 }}> |
|
|
{user?.name?.substr(0, 1)} |
|
|
{user?.name?.substr(0, 1)} |
|
|
</Avatar> |
|
|
</Avatar> |
|
|
<div style={{ fontSize: 12, color: '#4A4A4A' }}> |
|
|
<div style={{ fontSize: 12, color: '#4A4A4A' }}> |
|
|
{user.name} |
|
|
{user.name} |
|
|
<div title={user?.department?.map(v => v.name + '、')} style={{ width: 60, overflow: 'hidden', whiteSpace: 'nowrap', textOverflow: 'ellipsis', color: '#969799', fontSize: 12 }}>{user?.department?.map(v => v.name + '、')}</div> |
|
|
<div title={user?.department?.map(v => v.name + '、')} style={{ width: 60, overflow: 'hidden', whiteSpace: 'nowrap', textOverflow: 'ellipsis', color: '#969799', fontSize: 12 }}>{user?.department?.map(v => v.name + '、')}</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div style={{ display: 'flex', alignItems: 'center', height: 30, borderBottom: '1px solid #F2F3F5', cursor: "pointer" }} |
|
|
<div style={{ display: 'flex', alignItems: 'center', height: 30, borderBottom: '1px solid #F2F3F5', cursor: "pointer" }} |
|
|
onClick={() => { |
|
|
onClick={() => { |
|
|
history.push(`/userCenter`); |
|
|
history.push(`/userCenter`); |
|
|
}}> |
|
|
}}> |
|
|
<div style={{ width: 15, height: 15, marginLeft: 20 }}> |
|
|
<div style={{ width: 15, height: 15, marginLeft: 20 }}> |
|
|
<img src="/assets/images/console/yonghu.png" alt="" style={{ width: '100%', height: '100%' }} /> |
|
|
<img src="/assets/images/console/yonghu.png" alt="" style={{ width: '100%', height: '100%' }} /> |
|
|
</div> |
|
|
</div> |
|
|
<div style={{ color: '#646566', fontSize: 12, marginLeft: 9 }}> |
|
|
<div style={{ color: '#646566', fontSize: 12, marginLeft: 9 }}> |
|
|
用户中心 |
|
|
用户中心 |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div style={{ display: 'flex', alignItems: 'center', height: 30, borderBottom: '1px solid #F2F3F5', cursor: "pointer" }}> |
|
|
<div style={{ display: 'flex', alignItems: 'center', height: 30, borderBottom: '1px solid #F2F3F5', cursor: "pointer" }}> |
|
|
<div style={{ width: 15, height: 15, marginLeft: 20 }}> |
|
|
<div style={{ width: 15, height: 15, marginLeft: 20 }}> |
|
|
<img src="/assets/images/console/suo.png" alt="" style={{ width: '100%', height: '100%' }} /> |
|
|
<img src="/assets/images/console/suo.png" alt="" style={{ width: '100%', height: '100%' }} /> |
|
|
</div> |
|
|
</div> |
|
|
<div style={{ color: '#646566', fontSize: 12, marginLeft: 9 }}> |
|
|
<div style={{ color: '#646566', fontSize: 12, marginLeft: 9 }}> |
|
|
安全认证 |
|
|
安全认证 |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: 27, color: '#646566', fontSize: 12, cursor: "pointer" }} |
|
|
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: 27, color: '#646566', fontSize: 12, cursor: "pointer" }} |
|
|
onClick={() => { |
|
|
onClick={() => { |
|
|
dispatch(actions.auth.logout(user)); |
|
|
dispatch(actions.auth.logout(user)); |
|
|
if (socket) { |
|
|
if (socket) { |
|
|
socket.disconnect(); |
|
|
socket.disconnect(); |
|
|
} |
|
|
} |
|
|
history.push(`/signin`); |
|
|
history.push(`/signin`); |
|
|
}}> |
|
|
}}> |
|
|
退出 |
|
|
退出 |
|
|
{/* <Nav.Item itemKey={"logout"} text={"退出"} style={{ textAlign: "center" }} /> */} |
|
|
{/* <Nav.Item itemKey={"logout"} text={"退出"} style={{ textAlign: "center" }} /> */} |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
{/* collapseButton collapseText */} |
|
|
{/* collapseButton collapseText */} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</Nav.Sub> |
|
|
</Nav.Sub> |
|
|
</> |
|
|
</> |
|
|
} |
|
|
} |
|
|
/> |
|
|
/> |
|
|
</div> |
|
|
</div> |
|
|
</> |
|
|
</> |
|
|
); |
|
|
); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
function mapStateToProps (state) { |
|
|
function mapStateToProps (state) { |
|
|
const { global, auth, webSocket } = state; |
|
|
const { global, auth, webSocket } = state; |
|
|
return { |
|
|
return { |
|
|
actions: global.actions, |
|
|
actions: global.actions, |
|
|
user: auth.user, |
|
|
user: auth.user, |
|
|
socket: webSocket.socket, |
|
|
socket: webSocket.socket, |
|
|
}; |
|
|
}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
export default connect(mapStateToProps)(Header); |
|
|
export default connect(mapStateToProps)(Header); |
|
|