fix: 修复页面间状态丢失问题并优化选择页面

- 修复选择审批人后再选择抄送人导致状态丢失的问题
- 使用独立的 sessionStorage key (selectedApprovers, selectedCc)
- 组件每次挂载时从 sessionStorage 恢复状态
- 只在提交/保存成功后清除 sessionStorage
- 优化人员选择页面布局和样式
- 更新 CLAUDE.md 文档记录问题和解决方案

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-02-25 15:22:12 +08:00
parent 2d39357cc3
commit 09d4cb8054
51 changed files with 2944 additions and 647 deletions
+80 -1
View File
@@ -1,11 +1,90 @@
import { useEffect } from 'react'
import { useNavigate } from 'react-router-dom'
import { Toast } from 'antd-mobile'
import styles from './login.module.css'
export default function Login() {
const navigate = useNavigate()
useEffect(() => {
// 检查 URL 中是否有 auth_code 参数(飞书授权回调)
const urlParams = new URLSearchParams(window.location.search)
const authCode = urlParams.get('auth_code')
if (authCode) {
// 有授权码,执行登录
handleFeishuLogin(authCode)
} else {
// 没有授权码,跳转到飞书授权页面
redirectToFeishu()
}
}, [])
const redirectToFeishu = () => {
// 飞书应用配置
const appId = 'cli_a8033d607cba500d'
// 当前页面 URL 作为回调地址
const redirectUri = encodeURIComponent(window.location.origin + '/login')
// 租户密钥(新友合公司)
const tenantKey = '14e7bc0fe5985740'
// 构建飞书授权 URL
const authUrl = `https://open.feishu.cn/open-apis/authen/v1/oidc/authorize?app_id=${appId}&redirect_uri=${redirectUri}&scope=&state=${tenantKey}`
// 跳转到飞书授权页面
window.location.href = authUrl
}
const handleFeishuLogin = async (authCode: string) => {
try {
const tenantKey = '14e7bc0fe5985740'
// 调用后端登录接口
const response = await fetch('/api/v1/auth/feishu-login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
auth_code: authCode,
tenant_key: tenantKey,
}),
})
const result = await response.json()
if (result.code === 0) {
// 登录成功,保存 token
localStorage.setItem('token', result.data.token)
localStorage.setItem('user', JSON.stringify(result.data.user))
Toast.show('登录成功')
// 跳转到首页
navigate('/dashboard')
} else {
Toast.show(result.message || '登录失败')
// 登录失败,重新跳转到飞书授权
setTimeout(() => {
redirectToFeishu()
}, 2000)
}
} catch (error: any) {
console.error('登录失败:', error)
Toast.show('登录失败,请重试')
setTimeout(() => {
redirectToFeishu()
}, 2000)
}
}
return (
<div className={styles.login}>
<div className={styles.container}>
<h1>企业工具台</h1>
<button className={styles.feishuBtn}>飞书授权登录</button>
<p>正在跳转到飞书授权...</p>
<button className={styles.feishuBtn} onClick={redirectToFeishu}>
重新跳转飞书登录
</button>
</div>
</div>
)