diff --git a/distribution-admin/src/pages/Orders.tsx b/distribution-admin/src/pages/Orders.tsx index 8cdddd3..04ec35d 100644 --- a/distribution-admin/src/pages/Orders.tsx +++ b/distribution-admin/src/pages/Orders.tsx @@ -19,10 +19,12 @@ import { listSites, fetchReceivedListings, updateReceivedListingStatus, + getMe, type DistributionOrder, type ReceivedListing, type Site, } from '../api' +import { useMember } from '../MemberContext' const ORDER_STATUSES = [ 'pending_payment', diff --git a/distribution-admin/src/pages/Payments.tsx b/distribution-admin/src/pages/Payments.tsx index e93fd01..beec2a5 100644 --- a/distribution-admin/src/pages/Payments.tsx +++ b/distribution-admin/src/pages/Payments.tsx @@ -1,10 +1,12 @@ import { useEffect, useState } from 'react' import { Card, Table, Typography, Space, Select, Tag, InputNumber, Button, message } from 'antd' -import { bindPaymentChannel, listPaymentChannels, listSites, unbindPaymentChannel, type PaymentChannel, type Site } from '../api' +import { bindPaymentChannel, listPaymentChannels, listSites, unbindPaymentChannel, getMe, type PaymentChannel, type Site } from '../api' +import { useMember } from '../MemberContext' export default function Payments() { + const member = useMember() const [sites, setSites] = useState([]) - const [siteID, setSiteID] = useState() + const [siteID, setSiteID] = useState(member?.site_id) const [channels, setChannels] = useState([]) const [configID, setConfigID] = useState(null) const [priority, setPriority] = useState(0) @@ -22,16 +24,36 @@ export default function Payments() { } useEffect(() => { - listSites() - .then((items) => { - setSites(items) - if (items.length > 0) { - setSiteID(items[0].id) - void load(items[0].id) + async function init() { + let currentMember = member + if (!currentMember) { + try { + currentMember = await getMe() + } catch { + // ignore } - }) - .catch(() => message.error('站点加载失败')) - }, []) + } + const activeSiteID = currentMember?.site_id + if (activeSiteID) { + setSiteID(activeSiteID) + void load(activeSiteID) + } + + if (currentMember?.is_superadmin) { + try { + const rows = await listSites() + setSites(rows) + if (!activeSiteID && rows.length > 0) { + setSiteID(rows[0].id) + void load(rows[0].id) + } + } catch { + // ignore + } + } + } + void init() + }, [member]) async function handleBind() { if (!siteID || !configID) { @@ -63,16 +85,18 @@ export default function Payments() { 支付通道 - ({ label: site.site_name, value: site.id }))} + onChange={(value) => { + setSiteID(value) + void load(value) + }} + /> + )} setConfigID(v ?? null)} /> setPriority(v ?? 0)} /> diff --git a/distribution-admin/src/pages/Rules.tsx b/distribution-admin/src/pages/Rules.tsx index 920d0fb..f2131cd 100644 --- a/distribution-admin/src/pages/Rules.tsx +++ b/distribution-admin/src/pages/Rules.tsx @@ -1,6 +1,7 @@ import { useEffect, useState } from 'react' import { Card, Table, Typography, Space, Select, Tag, message } from 'antd' -import { listRules, listSites, updateRuleStatus, type Rule, type Site } from '../api' +import { listRules, listSites, updateRuleStatus, getMe, type Rule, type Site } from '../api' +import { useMember } from '../MemberContext' const MODE_LABELS: Record = { two_party_distributor_receive: '两方-分销收号', @@ -9,8 +10,9 @@ const MODE_LABELS: Record = { } export default function Rules() { + const member = useMember() const [sites, setSites] = useState([]) - const [siteID, setSiteID] = useState(undefined) + const [siteID, setSiteID] = useState(member?.site_id) const [rules, setRules] = useState([]) const [loading, setLoading] = useState(false) @@ -26,18 +28,35 @@ export default function Rules() { } useEffect(() => { - listSites() - .then((rows) => { - setSites(rows) - if (rows.length === 1) { - setSiteID(rows[0].id) - void load(rows[0].id) - } else { - void load(undefined) + async function init() { + let currentMember = member + if (!currentMember) { + try { + currentMember = await getMe() + } catch { + // ignore } - }) - .catch(() => message.error('站点加载失败')) - }, []) + } + const activeSiteID = currentMember?.site_id + if (activeSiteID) { + setSiteID(activeSiteID) + void load(activeSiteID) + } + + if (currentMember?.is_superadmin) { + try { + const rows = await listSites() + setSites(rows) + if (!activeSiteID) { + void load(undefined) + } + } catch { + // ignore + } + } + } + void init() + }, [member]) async function toggleStatus(rule: Rule) { const next = rule.status === 'active' ? 'disabled' : 'active' @@ -54,17 +73,19 @@ export default function Rules() { 比例与税费规则 - ({ label: site.site_name, value: site.id }))} + onChange={(value) => { + setSiteID(value) + void load(value) + }} + /> + )} ([]) - const [siteID, setSiteID] = useState() + const [siteID, setSiteID] = useState(member?.site_id) const [loading, setLoading] = useState(false) const [saving, setSaving] = useState(false) const [currentSite, setCurrentSite] = useState(null) @@ -61,16 +64,36 @@ export default function SiteSettings() { }, [form]) useEffect(() => { - listSites() - .then((rows) => { - setSites(rows) - if (rows.length > 0) { - setSiteID(rows[0].id) - void loadSite(rows[0].id) + async function init() { + let currentMember = member + if (!currentMember) { + try { + currentMember = await getMe() + } catch { + // ignore } - }) - .catch(() => message.error('站点加载失败')) - }, [loadSite]) + } + const activeSiteID = currentMember?.site_id + if (activeSiteID) { + setSiteID(activeSiteID) + void loadSite(activeSiteID) + } + + if (currentMember?.is_superadmin) { + try { + const rows = await listSites() + setSites(rows) + if (!activeSiteID && rows.length > 0) { + setSiteID(rows[0].id) + void loadSite(rows[0].id) + } + } catch { + // ignore + } + } + } + void init() + }, [member, loadSite]) async function handleSave(values: SiteBrandingPayload) { if (!siteID) return @@ -127,16 +150,18 @@ export default function SiteSettings() { - ({ label: `${site.site_name} (${site.site_code})`, value: site.id }))} + onChange={(value) => { + setSiteID(value) + void loadSite(value) + }} + /> + )} {currentSite?.site_code && (