Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 66823d876d |
@@ -122,31 +122,13 @@ const renderReview = (f: Feedback) => {
|
|||||||
|
|
||||||
// 机型 / OS版本(提交反馈时的端环境;改版前历史反馈无 → -)
|
// 机型 / OS版本(提交反馈时的端环境;改版前历史反馈无 → -)
|
||||||
const renderDeviceOs = (f: Feedback) => {
|
const renderDeviceOs = (f: Feedback) => {
|
||||||
const modelName = f.device_model_name || f.device_model;
|
const os = [f.android_version ? `Android ${f.android_version}` : null, f.rom_name]
|
||||||
const rawModel =
|
|
||||||
f.device_model_name && f.device_model_name !== f.device_model ? f.device_model : null;
|
|
||||||
const romHasVersion = /\d/.test(f.rom_name || '');
|
|
||||||
const vendorOs = [
|
|
||||||
f.rom_name,
|
|
||||||
f.rom_version && !romHasVersion ? f.rom_version : null,
|
|
||||||
]
|
|
||||||
.filter(Boolean)
|
|
||||||
.join(' ');
|
|
||||||
const os = [
|
|
||||||
vendorOs || null,
|
|
||||||
f.android_version ? `Android ${f.android_version}` : null,
|
|
||||||
]
|
|
||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
.join(' · ');
|
.join(' · ');
|
||||||
if (!modelName && !os) return <Text type="secondary">-</Text>;
|
if (!f.device_model && !os) return <Text type="secondary">-</Text>;
|
||||||
return (
|
return (
|
||||||
<Space direction="vertical" size={0}>
|
<Space direction="vertical" size={0}>
|
||||||
<Text>{modelName || '-'}</Text>
|
<Text>{f.device_model || '-'}</Text>
|
||||||
{rawModel ? (
|
|
||||||
<Text type="secondary" style={{ fontSize: 12 }}>
|
|
||||||
{[f.device_manufacturer, rawModel].filter(Boolean).join(' · ')}
|
|
||||||
</Text>
|
|
||||||
) : null}
|
|
||||||
{os ? (
|
{os ? (
|
||||||
<Text type="secondary" style={{ fontSize: 12 }}>
|
<Text type="secondary" style={{ fontSize: 12 }}>
|
||||||
{os}
|
{os}
|
||||||
@@ -370,7 +352,7 @@ export default function FeedbacksPage() {
|
|||||||
{
|
{
|
||||||
title: '机型 / OS版本',
|
title: '机型 / OS版本',
|
||||||
key: 'device',
|
key: 'device',
|
||||||
width: 180,
|
width: 150,
|
||||||
render: (_: unknown, f: Feedback) => renderDeviceOs(f),
|
render: (_: unknown, f: Feedback) => renderDeviceOs(f),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -91,6 +91,7 @@ const NAV_GROUPS: NavGroup[] = [
|
|||||||
{ key: '/users', icon: <UserOutlined />, label: '用户管理' },
|
{ key: '/users', icon: <UserOutlined />, label: '用户管理' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{ key: '/admins', icon: <TeamOutlined />, label: '权限管理' },
|
||||||
{
|
{
|
||||||
key: 'monitoring-audit',
|
key: 'monitoring-audit',
|
||||||
icon: <FileSearchOutlined />,
|
icon: <FileSearchOutlined />,
|
||||||
@@ -103,7 +104,6 @@ const NAV_GROUPS: NavGroup[] = [
|
|||||||
{ key: '/audit-logs', icon: <FileSearchOutlined />, label: '审计日志' },
|
{ key: '/audit-logs', icon: <FileSearchOutlined />, label: '审计日志' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{ key: '/admins', icon: <TeamOutlined />, label: '权限管理' },
|
|
||||||
];
|
];
|
||||||
|
|
||||||
// 导航项 key(/dashboard)→ 权限页 key(dashboard),与后端 permissions.py 目录对齐
|
// 导航项 key(/dashboard)→ 权限页 key(dashboard),与后端 permissions.py 目录对齐
|
||||||
@@ -223,8 +223,7 @@ export default function MainLayout({ children }: { children: React.ReactNode })
|
|||||||
position: 'sticky',
|
position: 'sticky',
|
||||||
top: 0,
|
top: 0,
|
||||||
height: '100vh',
|
height: '100vh',
|
||||||
overflowY: 'auto',
|
overflow: 'hidden',
|
||||||
overflowX: 'hidden',
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<nav className={`side-nav${collapsed ? ' side-nav-collapsed' : ''}`} aria-label="后台导航">
|
<nav className={`side-nav${collapsed ? ' side-nav-collapsed' : ''}`} aria-label="后台导航">
|
||||||
@@ -314,8 +313,19 @@ export default function MainLayout({ children }: { children: React.ReactNode })
|
|||||||
.side-nav {
|
.side-nav {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
box-sizing: border-box;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
padding: 0 10px 14px;
|
height: calc(100vh - 48px);
|
||||||
|
min-height: 0;
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
overscroll-behavior: contain;
|
||||||
|
padding: 0 10px 20px;
|
||||||
|
scrollbar-gutter: stable;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
|
}
|
||||||
|
.side-nav:focus-within {
|
||||||
|
scroll-behavior: smooth;
|
||||||
}
|
}
|
||||||
.nav-group {
|
.nav-group {
|
||||||
padding: 6px 0 8px;
|
padding: 6px 0 8px;
|
||||||
|
|||||||
@@ -377,10 +377,7 @@ export interface Feedback {
|
|||||||
// 提交端环境快照:提交版本号 / 机型OS版本;改版前的历史反馈为 null
|
// 提交端环境快照:提交版本号 / 机型OS版本;改版前的历史反馈为 null
|
||||||
app_version: string | null;
|
app_version: string | null;
|
||||||
device_model: string | null;
|
device_model: string | null;
|
||||||
device_model_name: string | null;
|
|
||||||
device_manufacturer: string | null;
|
|
||||||
rom_name: string | null;
|
rom_name: string | null;
|
||||||
rom_version: number | null;
|
|
||||||
android_version: string | null;
|
android_version: string | null;
|
||||||
// 联表瞬态:展示完整手机号(点手机号查该用户全部反馈)
|
// 联表瞬态:展示完整手机号(点手机号查该用户全部反馈)
|
||||||
phone: string | null;
|
phone: string | null;
|
||||||
|
|||||||
Reference in New Issue
Block a user