fix(distribution-admin): add missing useMember and getMe imports in Orders.tsx and clean remaining site selectors

This commit is contained in:
yml2213
2026-09-09 14:12:19 +08:00
parent 2384bb3820
commit aa466051ac
4 changed files with 137 additions and 65 deletions
+2
View File
@@ -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',
+45 -21
View File
@@ -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<Site[]>([])
const [siteID, setSiteID] = useState<number>()
const [siteID, setSiteID] = useState<number | undefined>(member?.site_id)
const [channels, setChannels] = useState<PaymentChannel[]>([])
const [configID, setConfigID] = useState<number | null>(null)
const [priority, setPriority] = useState<number>(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() {
<Space direction="vertical" className="page">
<Typography.Title level={3}>支付通道</Typography.Title>
<Space>
<Select
placeholder="分销网站"
style={{ width: 200 }}
value={siteID}
options={sites.map((site) => ({ label: site.site_name, value: site.id }))}
onChange={(value) => {
setSiteID(value)
void load(value)
}}
/>
{member?.is_superadmin && sites.length > 1 && (
<Select
placeholder="分销网站"
style={{ width: 200 }}
value={siteID}
options={sites.map((site) => ({ label: site.site_name, value: site.id }))}
onChange={(value) => {
setSiteID(value)
void load(value)
}}
/>
)}
<InputNumber min={1} placeholder="商户配置 ID" value={configID ?? undefined} onChange={(v) => setConfigID(v ?? null)} />
<InputNumber min={0} placeholder="优先级" value={priority} onChange={(v) => setPriority(v ?? 0)} />
<Button type="primary" onClick={handleBind}>绑定</Button>
+45 -24
View File
@@ -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<string, string> = {
two_party_distributor_receive: '两方-分销收号',
@@ -9,8 +10,9 @@ const MODE_LABELS: Record<string, string> = {
}
export default function Rules() {
const member = useMember()
const [sites, setSites] = useState<Site[]>([])
const [siteID, setSiteID] = useState<number | undefined>(undefined)
const [siteID, setSiteID] = useState<number | undefined>(member?.site_id)
const [rules, setRules] = useState<Rule[]>([])
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() {
<Space direction="vertical" className="page">
<Typography.Title level={3}>比例与税费规则</Typography.Title>
<Space>
<Select
allowClear
placeholder="分销网站"
style={{ width: 200 }}
value={siteID}
options={sites.map((site) => ({ label: site.site_name, value: site.id }))}
onChange={(value) => {
setSiteID(value)
void load(value)
}}
/>
{member?.is_superadmin && sites.length > 1 && (
<Select
allowClear
placeholder="分销网站"
style={{ width: 200 }}
value={siteID}
options={sites.map((site) => ({ label: site.site_name, value: site.id }))}
onChange={(value) => {
setSiteID(value)
void load(value)
}}
/>
)}
</Space>
<Card>
<Table
+45 -20
View File
@@ -24,13 +24,16 @@ import {
import {
listSites,
updateSiteBranding,
getMe,
type Site,
type SiteBrandingPayload,
} from '../api'
import { useMember } from '../MemberContext'
export default function SiteSettings() {
const member = useMember()
const [sites, setSites] = useState<Site[]>([])
const [siteID, setSiteID] = useState<number>()
const [siteID, setSiteID] = useState<number | undefined>(member?.site_id)
const [loading, setLoading] = useState(false)
const [saving, setSaving] = useState(false)
const [currentSite, setCurrentSite] = useState<Site | null>(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() {
</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={(value) => {
setSiteID(value)
void loadSite(value)
}}
/>
{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={(value) => {
setSiteID(value)
void loadSite(value)
}}
/>
)}
{currentSite?.site_code && (
<Button
icon={<EyeOutlined />}