Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8d75a6fde3 |
@@ -122,13 +122,31 @@ const renderReview = (f: Feedback) => {
|
|||||||
|
|
||||||
// 机型 / OS版本(提交反馈时的端环境;改版前历史反馈无 → -)
|
// 机型 / OS版本(提交反馈时的端环境;改版前历史反馈无 → -)
|
||||||
const renderDeviceOs = (f: Feedback) => {
|
const renderDeviceOs = (f: Feedback) => {
|
||||||
const os = [f.android_version ? `Android ${f.android_version}` : null, f.rom_name]
|
const modelName = f.device_model_name || f.device_model;
|
||||||
|
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 (!f.device_model && !os) return <Text type="secondary">-</Text>;
|
if (!modelName && !os) return <Text type="secondary">-</Text>;
|
||||||
return (
|
return (
|
||||||
<Space direction="vertical" size={0}>
|
<Space direction="vertical" size={0}>
|
||||||
<Text>{f.device_model || '-'}</Text>
|
<Text>{modelName || '-'}</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}
|
||||||
@@ -352,7 +370,7 @@ export default function FeedbacksPage() {
|
|||||||
{
|
{
|
||||||
title: '机型 / OS版本',
|
title: '机型 / OS版本',
|
||||||
key: 'device',
|
key: 'device',
|
||||||
width: 150,
|
width: 180,
|
||||||
render: (_: unknown, f: Feedback) => renderDeviceOs(f),
|
render: (_: unknown, f: Feedback) => renderDeviceOs(f),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -91,7 +91,6 @@ 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 />,
|
||||||
@@ -104,6 +103,7 @@ 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,7 +223,8 @@ export default function MainLayout({ children }: { children: React.ReactNode })
|
|||||||
position: 'sticky',
|
position: 'sticky',
|
||||||
top: 0,
|
top: 0,
|
||||||
height: '100vh',
|
height: '100vh',
|
||||||
overflow: 'hidden',
|
overflowY: 'auto',
|
||||||
|
overflowX: 'hidden',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<nav className={`side-nav${collapsed ? ' side-nav-collapsed' : ''}`} aria-label="后台导航">
|
<nav className={`side-nav${collapsed ? ' side-nav-collapsed' : ''}`} aria-label="后台导航">
|
||||||
@@ -313,19 +314,8 @@ 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;
|
||||||
height: calc(100vh - 48px);
|
padding: 0 10px 14px;
|
||||||
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,7 +377,10 @@ 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