fix(distribution-admin): bind site context to member and enhance shelf product filters

This commit is contained in:
yml2213
2026-09-09 14:06:29 +08:00
parent 80ed9e7897
commit 2384bb3820
7 changed files with 680 additions and 236 deletions
+48 -22
View File
@@ -27,14 +27,17 @@ import {
listSites,
fetchDashboardAnalytics,
formatMoney,
getMe,
type Site,
type DistributionAnalytics,
type DistributionOrder,
} from '../api'
import { useMember } from '../MemberContext'
export default function Dashboard() {
const member = useMember()
const [sites, setSites] = useState<Site[]>([])
const [siteID, setSiteID] = useState<number>()
const [siteID, setSiteID] = useState<number | undefined>(member?.site_id)
const [analytics, setAnalytics] = useState<DistributionAnalytics | null>(null)
const [recentOrders, setRecentOrders] = useState<DistributionOrder[]>([])
const [loading, setLoading] = useState(false)
@@ -56,18 +59,39 @@ export default function Dashboard() {
}, [])
useEffect(() => {
listSites()
.then((rows) => {
setSites(rows)
if (rows.length > 0) {
setSiteID(rows[0].id)
void loadData(rows[0].id)
async function init() {
let currentMember = member
if (!currentMember) {
try {
currentMember = await getMe()
} catch {
// ignore
}
})
.catch(() => message.error('站点加载失败'))
}, [loadData])
}
const activeSiteID = currentMember?.site_id
if (activeSiteID) {
setSiteID(activeSiteID)
void loadData(activeSiteID)
}
const selectedSite = sites.find((s) => s.id === siteID)
if (currentMember?.is_superadmin) {
try {
const rows = await listSites()
setSites(rows)
if (!activeSiteID && rows.length > 0) {
setSiteID(rows[0].id)
void loadData(rows[0].id)
}
} catch {
// ignore
}
}
}
void init()
}, [member, loadData])
const selectedSiteName =
member?.site_name || sites.find((s) => s.id === siteID)?.site_name || '当前分销商'
return (
<Space direction="vertical" size="large" className="page" style={{ width: '100%' }}>
@@ -77,20 +101,22 @@ export default function Dashboard() {
运营数据大盘
</Typography.Title>
<Typography.Text type="secondary">
当前站点:{selectedSite?.site_name || '默认分销站'} ({selectedSite?.site_code}) · 实时聚合收号、货架、订单与结算收益
当前站点:{selectedSiteName} · 实时聚合收号、货架、订单与结算收益
</Typography.Text>
</div>
<Space>
<Select
placeholder="切换分销网站"
style={{ width: 220 }}
value={siteID}
options={sites.map((site) => ({ label: `${site.site_name} (${site.site_code})`, value: site.id }))}
onChange={(val) => {
setSiteID(val)
void loadData(val)
}}
/>
{member?.is_superadmin && sites.length > 1 && (
<Select
placeholder="切换分销网站"
style={{ width: 220 }}
value={siteID}
options={sites.map((site) => ({ label: `${site.site_name} (${site.site_code})`, value: site.id }))}
onChange={(val) => {
setSiteID(val)
void loadData(val)
}}
/>
)}
<Link to="/wallet">
<Button type="primary" icon={<WalletOutlined />}>
去提现