diff --git a/src/apps/admin/AdminEnterpriseApplicationsPage.tsx b/src/apps/admin/AdminEnterpriseApplicationsPage.tsx
index e90487b..c8b771e 100644
--- a/src/apps/admin/AdminEnterpriseApplicationsPage.tsx
+++ b/src/apps/admin/AdminEnterpriseApplicationsPage.tsx
@@ -191,7 +191,7 @@ export function AdminEnterpriseApplicationsPage() {
},
- { label: '彩信应用', value: 'mms', content:
},
+ { label: '彩信应用', value: 'mms', pending: true, content: },
]}
/>
diff --git a/src/apps/admin/AdminEnterpriseSignaturesPage.tsx b/src/apps/admin/AdminEnterpriseSignaturesPage.tsx
index 65d9aa8..48801e0 100644
--- a/src/apps/admin/AdminEnterpriseSignaturesPage.tsx
+++ b/src/apps/admin/AdminEnterpriseSignaturesPage.tsx
@@ -565,6 +565,7 @@ export function AdminEnterpriseSignaturesPage() {
{ label: '短信签名', value: 'sms', content: smsSignatureContent },
{
label: '彩信签名',
+ pending: true,
value: 'mms',
content: (
<>
diff --git a/src/apps/admin/AdminEnterpriseTemplatesPage.tsx b/src/apps/admin/AdminEnterpriseTemplatesPage.tsx
index 8a49382..8439a49 100644
--- a/src/apps/admin/AdminEnterpriseTemplatesPage.tsx
+++ b/src/apps/admin/AdminEnterpriseTemplatesPage.tsx
@@ -595,7 +595,7 @@ export function AdminEnterpriseTemplatesPage() {
value={activeTab}
items={[
{ label: '短信模板', value: 'sms', content: smsContent },
- { label: '彩信模板', value: 'mms', content: mmsContent },
+ { label: '彩信模板', value: 'mms', pending: true, content: mmsContent },
]}
/>
diff --git a/src/components/ui/Tabs.tsx b/src/components/ui/Tabs.tsx
index a5afe7f..048b39a 100644
--- a/src/components/ui/Tabs.tsx
+++ b/src/components/ui/Tabs.tsx
@@ -5,6 +5,7 @@ export type TabItem = {
label: string;
value: string;
content: ReactNode;
+ pending?: boolean;
};
type TabsProps = {
@@ -36,7 +37,8 @@ export function Tabs({ items, defaultValue, value, onChange }: TabsProps) {
role="tab"
type="button"
>
- {item.label}
+ {item.label}
+ {item.pending ? 待开发 : null}
))}
diff --git a/src/layouts/AdminLayout.tsx b/src/layouts/AdminLayout.tsx
index 748a602..f374663 100644
--- a/src/layouts/AdminLayout.tsx
+++ b/src/layouts/AdminLayout.tsx
@@ -61,7 +61,7 @@ export function AdminLayout() {
{ label: '企业认证审核', to: '/admin/enterprise-audit', icon: ShieldCheck },
{ label: '短信审核', to: '/admin/sms-audit', icon: MessageSquare },
{ label: '短信模板审核', to: '/admin/templates', icon: FileCheck2 },
- { label: '彩信模板审核', to: '/admin/signatures', icon: ImageIcon },
+ { label: '彩信模板审核', to: '/admin/signatures', icon: ImageIcon, pending: true },
],
},
{
@@ -69,7 +69,7 @@ export function AdminLayout() {
icon: RadioTower,
items: [
{ label: '短信通道管理', to: '/admin/channels', icon: RadioTower },
- { label: '彩信通道管理', to: '/admin/mms-channels', icon: ImageIcon },
+ { label: '彩信通道管理', to: '/admin/mms-channels', icon: ImageIcon, pending: true },
{ label: '短信通道组管理', to: '/admin/channel-groups', icon: Layers3 },
],
},
@@ -86,7 +86,7 @@ export function AdminLayout() {
icon: Send,
items: [
{ label: '短信任务进度', to: '/admin/sms-task-progress', icon: TrendingUp },
- { label: '彩信任务进度', to: '/admin/mms-task-progress', icon: BarChart3 },
+ { label: '彩信任务进度', to: '/admin/mms-task-progress', icon: BarChart3, pending: true },
],
},
{
@@ -94,7 +94,7 @@ export function AdminLayout() {
icon: ReceiptText,
items: [
{ label: '短信记录', to: '/admin/sms-records', icon: MessageSquare },
- { label: '彩信记录', to: '/admin/mms-records', icon: ImageIcon },
+ { label: '彩信记录', to: '/admin/mms-records', icon: ImageIcon, pending: true },
{ label: '短信上行记录', to: '/admin/sms-uplink-records', icon: MessageSquare },
{ label: '充值记录', to: '/admin/recharge-records', icon: ReceiptText },
{ label: '账单流水', to: '/admin/billing', icon: ReceiptText },
diff --git a/src/layouts/AppShell.tsx b/src/layouts/AppShell.tsx
index 3ce992d..6dc9349 100644
--- a/src/layouts/AppShell.tsx
+++ b/src/layouts/AppShell.tsx
@@ -16,6 +16,7 @@ export type ShellNavItem = {
label: string;
to: string;
icon: ComponentType<{ size?: number; strokeWidth?: number }>;
+ pending?: boolean;
};
export type ShellNavSection = {
@@ -84,9 +85,10 @@ export function AppShell({
const Icon = item.icon;
return (
-
+
- {item.label}
+ {item.label}
+ {item.pending ? 待开发 : null}
);
})}
diff --git a/src/layouts/ClientLayout.tsx b/src/layouts/ClientLayout.tsx
index f11cc4a..ebd1255 100644
--- a/src/layouts/ClientLayout.tsx
+++ b/src/layouts/ClientLayout.tsx
@@ -46,20 +46,20 @@ export function ClientLayout() {
{
title: '彩信服务',
items: [
- { label: '签名报备', to: '/client/mms-signatures', icon: PenLine },
- { label: '彩信模板管理', to: '/client/mms-templates', icon: ImageIcon },
- { label: '发送彩信', to: '/client/mms-send', icon: MessageSquareText },
- { label: '查看批量任务', to: '/client/mms-batch-tasks', icon: ClipboardList },
- { label: '彩信发送详情', to: '/client/mms-send-detail', icon: ClipboardList },
- { label: '查看上行彩信', to: '/client/mms-uplink-messages', icon: ImageIcon },
+ { label: '签名报备', to: '/client/mms-signatures', icon: PenLine, pending: true },
+ { label: '彩信模板管理', to: '/client/mms-templates', icon: ImageIcon, pending: true },
+ { label: '发送彩信', to: '/client/mms-send', icon: MessageSquareText, pending: true },
+ { label: '查看批量任务', to: '/client/mms-batch-tasks', icon: ClipboardList, pending: true },
+ { label: '彩信发送详情', to: '/client/mms-send-detail', icon: ClipboardList, pending: true },
+ { label: '查看上行彩信', to: '/client/mms-uplink-messages', icon: ImageIcon, pending: true },
],
},
{
title: '账户',
items: [
- { label: '充值套餐', to: '/client/billing', icon: BadgeDollarSign },
- { label: '账单流水', to: '/client/invoices', icon: ReceiptText },
- { label: '账号设置', to: '/client/settings', icon: Settings },
+ { label: '充值套餐', to: '/client/billing', icon: BadgeDollarSign, pending: true },
+ { label: '账单流水', to: '/client/invoices', icon: ReceiptText, pending: true },
+ { label: '账号设置', to: '/client/settings', icon: Settings, pending: true },
],
},
{
diff --git a/src/styles/components.css b/src/styles/components.css
index 550e933..181c169 100644
--- a/src/styles/components.css
+++ b/src/styles/components.css
@@ -646,10 +646,13 @@
}
.ui-tabs__tab {
+ align-items: center;
background: transparent;
border: 0;
color: var(--color-text-muted);
+ display: inline-flex;
font-weight: var(--font-weight-semibold);
+ gap: var(--space-2);
padding: 0 var(--space-2) var(--space-3);
position: relative;
}
diff --git a/src/styles/global.css b/src/styles/global.css
index 9e55f52..5534147 100644
--- a/src/styles/global.css
+++ b/src/styles/global.css
@@ -293,12 +293,33 @@ h3 {
min-width: 0;
}
-.side-nav a span {
+.side-nav-label {
+ flex: 1;
+ min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
+.dev-status-badge {
+ background: var(--color-warning-soft);
+ border: 1px solid color-mix(in srgb, var(--color-warning) 24%, transparent);
+ border-radius: 999px;
+ color: var(--color-warning);
+ flex: 0 0 auto;
+ font-size: 11px;
+ font-weight: var(--font-weight-semibold);
+ line-height: 1;
+ padding: 3px 6px;
+ white-space: nowrap;
+}
+
+.ui-tabs__tab {
+ align-items: center;
+ display: inline-flex;
+ gap: var(--space-2);
+}
+
.side-nav a.active,
.side-nav a:hover {
background: var(--color-selected-soft);