feat: 删除 GA JS;菜单显示用户姓名;用户信息增加姓名和角色;Auth 增加初始指,统一登陆和超时接口

perf/export-docx feat-RBAC-0.9.1
Jimmy Liow 1 year ago
parent 9304c4735d
commit 579689f3e0

@ -14,13 +14,6 @@
100%{-webkit-transform:translate(150px)} 100%{-webkit-transform:translate(150px)}
} }
</style> </style>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-7JN1HT1DY4"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-7JN1HT1DY4');
</script>
</head> </head>
<body> <body>
<div id="root"> <div id="root">

@ -22,6 +22,7 @@
"Login": "Login", "Login": "Login",
"Username": "Username", "Username": "Username",
"Realname": "Realname",
"Password": "Password", "Password": "Password",
"ChangePassword": "Change password", "ChangePassword": "Change password",

@ -22,6 +22,7 @@
"Login": "登录", "Login": "登录",
"Username": "账号", "Username": "账号",
"Realname": "姓名",
"Password": "密码", "Password": "密码",
"ChangePassword": "修改密码", "ChangePassword": "修改密码",

@ -1,5 +1,6 @@
import { create } from 'zustand' import { create } from 'zustand'
import { fetchJSON, postForm } from '@/utils/request' import { fetchJSON, postForm } from '@/utils/request'
import { isEmpty } from '@/utils/commons'
import { HT_HOST } from "@/config" import { HT_HOST } from "@/config"
import { usingStorage } from '@/hooks/usingStorage' import { usingStorage } from '@/hooks/usingStorage'
@ -147,6 +148,7 @@ const useAccountStore = create((set, get) => ({
const resultArray = await fetchAccountList(searchParams) const resultArray = await fetchAccountList(searchParams)
console.info(resultArray)
const mapAccoutList = resultArray.map((r) => { const mapAccoutList = resultArray.map((r) => {
return { return {
accountId: r.wu_id, accountId: r.wu_id,
@ -160,7 +162,7 @@ const useAccountStore = create((set, get) => ({
travelAgencyId: r.travel_agency_id, travelAgencyId: r.travel_agency_id,
disabled: r.wu_limitsign, disabled: r.wu_limitsign,
// 数据库支持逗号分隔多角色(5,6,7),目前界面只需单个。 // 数据库支持逗号分隔多角色(5,6,7),目前界面只需单个。
roleId: parseInt(r.roles), roleId: isEmpty(r.roles) ? 0 : parseInt(r.roles),
role: r.roles_name, role: r.roles_name,
} }
}) })

@ -43,8 +43,18 @@ async function fetchLastRequet() {
return errcode !== 0 ? {} : result return errcode !== 0 ? {} : result
} }
const initialState = {
tokenInterval: null,
tokenTimeout: true,
loginStatus: 0,
defaltRoute: '',
permissionList: []
}
const useAuthStore = create(lifecycleware((set, get) => ({ const useAuthStore = create(lifecycleware((set, get) => ({
...initialState,
onAuth: async () => { onAuth: async () => {
const { startTokenInterval, loadUserPermission } = get() const { startTokenInterval, loadUserPermission } = get()
const { userId, loginToken } = usingStorage() const { userId, loginToken } = usingStorage()
@ -98,16 +108,11 @@ const useAuthStore = create(lifecycleware((set, get) => ({
const { clearStorage } = usingStorage() const { clearStorage } = usingStorage()
clearStorage() clearStorage()
clearInterval(tokenInterval) clearInterval(tokenInterval)
set(() => ({ set(initialState)
defaultRoute: '/',
loginStatus: 0,
tokenInterval: null,
tokenTimeout: true
}))
}, },
startTokenInterval: () => { startTokenInterval: () => {
const { loginTimeout } = get() const { logout } = get()
async function checkTokenTimeout() { async function checkTokenTimeout() {
const { LastReqDate } = await fetchLastRequet() const { LastReqDate } = await fetchLastRequet()
@ -116,27 +121,17 @@ const useAuthStore = create(lifecycleware((set, get) => ({
const diffTime = now.getTime() - lastReqDate.getTime() const diffTime = now.getTime() - lastReqDate.getTime()
const diffHours = diffTime/1000/60/60 const diffHours = diffTime/1000/60/60
if (diffHours > 1) { if (diffHours > 1) {
loginTimeout() logout()
} }
} }
const interval = setInterval(() => checkTokenTimeout(), 1000*60*20) const interval = setInterval(() => checkTokenTimeout(), 1000*60*10)
set(() => ({ set(() => ({
tokenInterval: interval tokenInterval: interval
})) }))
}, },
loginTimeout: () => { // TODO: 迁移到 Account.js
const { tokenInterval } = get()
const { clearStorage } = usingStorage()
clearStorage()
clearInterval(tokenInterval)
set(() => ({
tokenTimeout: true
}))
},
// 迁移到 Account.js
changeUserPassword: (password, newPassword) => { changeUserPassword: (password, newPassword) => {
const { userId } = usingStorage() const { userId } = usingStorage()
const formData = new FormData(); const formData = new FormData();
@ -174,16 +169,6 @@ const useAuthStore = create(lifecycleware((set, get) => ({
}) })
}, },
tokenInterval: null,
tokenTimeout: false,
loginStatus: 0,
defaltRoute: '',
permissionList: [],
}))) })))
export default useAuthStore export default useAuthStore

@ -48,6 +48,7 @@ function App() {
.then(u => { .then(u => {
setUserDetail({ setUserDetail({
username: u.LoginName, username: u.LoginName,
realname: u.real_name,
travelAgencyName: u.VName, travelAgencyName: u.VName,
}) })
}) })
@ -157,7 +158,6 @@ function App() {
items: [...[ items: [...[
{ label: <Link to='/account/change-password'>{t('ChangePassword')}</Link>, key: '0' }, { label: <Link to='/account/change-password'>{t('ChangePassword')}</Link>, key: '0' },
{ label: <Link to='/account/profile'>{t('Profile')}</Link>, key: '1' }, { label: <Link to='/account/profile'>{t('Profile')}</Link>, key: '1' },
{ type: 'divider' },
isPermitted(PERM_ACCOUNT_MANAGEMENT) ? { label: <Link to='/account/management'>{t('account:accountList')}</Link>, key: '3' } : null, isPermitted(PERM_ACCOUNT_MANAGEMENT) ? { label: <Link to='/account/management'>{t('account:accountList')}</Link>, key: '3' } : null,
isPermitted(PERM_ROLE_NEW) ? { label: <Link to='/account/role-list'>{t('account:roleList')}</Link>, key: '4' } : null, isPermitted(PERM_ROLE_NEW) ? { label: <Link to='/account/role-list'>{t('account:roleList')}</Link>, key: '4' } : null,
{ type: 'divider' }, { type: 'divider' },
@ -169,7 +169,7 @@ function App() {
> >
<a onClick={e => e.preventDefault()}> <a onClick={e => e.preventDefault()}>
<Space> <Space>
{userDetail?.username} {userDetail?.realname}
<DownOutlined /> <DownOutlined />
</Space> </Space>
</a> </a>

@ -81,13 +81,15 @@ function Management() {
useEffect(() => { useEffect(() => {
fetchRoleList() fetchRoleList()
.then((roleList) => { .then((roleList) => {
setRoleAllList(roleList.map(r => { const roleListMap = roleList.map(r => {
return { return {
value: r.role_id, value: r.role_id,
label: r.role_name, label: r.role_name,
disabled: r.role_id === 1 disabled: r.role_id === 1
} }
})) })
roleListMap.unshift({ value: 0, label: '未设置', disabled: true });
setRoleAllList(roleListMap)
}) })
}, []) }, [])

@ -15,7 +15,8 @@ function Profile() {
.then(json => { .then(json => {
setUserDetail({ setUserDetail({
username: json.LoginName, username: json.LoginName,
telephone: json.LkPhone, realname: json.real_name,
rolesName: json.roles_name,
emailAddress: json.LMI_listmail, emailAddress: json.LMI_listmail,
travelAgencyName: json.VName, travelAgencyName: json.VName,
}) })
@ -28,7 +29,7 @@ function Profile() {
<Col span={12} offset={6}> <Col span={12} offset={6}>
<Descriptions title={t('userProfile')} layout="vertical" column={2}> <Descriptions title={t('userProfile')} layout="vertical" column={2}>
<Descriptions.Item label={t("Username")}>{userDetail?.username}</Descriptions.Item> <Descriptions.Item label={t("Username")}>{userDetail?.username}</Descriptions.Item>
<Descriptions.Item label={t("Telephone")}>{userDetail?.telephone}</Descriptions.Item> <Descriptions.Item label={t("Realname")}>{userDetail?.realname}({userDetail?.rolesName})</Descriptions.Item>
<Descriptions.Item label={t("Email")}>{userDetail?.emailAddress}</Descriptions.Item> <Descriptions.Item label={t("Email")}>{userDetail?.emailAddress}</Descriptions.Item>
<Descriptions.Item label={t("Company")}>{userDetail?.travelAgencyName}</Descriptions.Item> <Descriptions.Item label={t("Company")}>{userDetail?.travelAgencyName}</Descriptions.Item>
</Descriptions> </Descriptions>

Loading…
Cancel
Save