diff --git a/client/cms/src/components/events/nickname-needed.dialog.container.tsx b/client/cms/src/components/events/nickname-needed.dialog.container.tsx
new file mode 100644
index 0000000..608361e
--- /dev/null
+++ b/client/cms/src/components/events/nickname-needed.dialog.container.tsx
@@ -0,0 +1,15 @@
+import { useNavigate } from '@tanstack/react-router';
+import { isEmpty } from 'lodash-es';
+import { useUserInfo } from '@/hooks/data/useUserInfo';
+import { Dialog } from '../ui/dialog';
+import { NicknameNeededDialogView } from './nickname-needed.dialog.view';
+
+export function NicknameNeededDialogContainer() {
+ const { data } = useUserInfo();
+ const navigate = useNavigate();
+ return (
+
+ );
+}
diff --git a/client/cms/src/components/events/nickname-needed.dialog.view.tsx b/client/cms/src/components/events/nickname-needed.dialog.view.tsx
new file mode 100644
index 0000000..195d298
--- /dev/null
+++ b/client/cms/src/components/events/nickname-needed.dialog.view.tsx
@@ -0,0 +1,24 @@
+import { HatGlasses } from 'lucide-react';
+import { Button } from '../ui/button';
+import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '../ui/dialog';
+
+export function NicknameNeededDialogView({ onAction }: { onAction: () => void }) {
+ return (
+
+
+ 请先填写昵称
+
+ 如要加入活动,请先于「个人资料」页面填写昵称。
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/client/cms/src/routes/_workbenchLayout/events/index.tsx b/client/cms/src/routes/_workbenchLayout/events/index.tsx
index d5db551..807b240 100644
--- a/client/cms/src/routes/_workbenchLayout/events/index.tsx
+++ b/client/cms/src/routes/_workbenchLayout/events/index.tsx
@@ -1,5 +1,6 @@
import { createFileRoute } from '@tanstack/react-router';
import { EventGridContainer } from '@/components/events/event-grid/event-grid.container';
+import { NicknameNeededDialogContainer } from '@/components/events/nickname-needed.dialog.container';
export const Route = createFileRoute('/_workbenchLayout/events/')({
component: RouteComponent,
@@ -8,6 +9,7 @@ export const Route = createFileRoute('/_workbenchLayout/events/')({
function RouteComponent() {
return (
+
);
diff --git a/client/cms/src/routes/_workbenchLayout/profile/index.tsx b/client/cms/src/routes/_workbenchLayout/profile/index.tsx
index db4ea2d..ef8f2fe 100644
--- a/client/cms/src/routes/_workbenchLayout/profile/index.tsx
+++ b/client/cms/src/routes/_workbenchLayout/profile/index.tsx
@@ -1,7 +1,5 @@
import { createFileRoute, Navigate } from '@tanstack/react-router';
-import { Suspense } from 'react';
import { ProfileError } from '@/components/profile/profile.error';
-import { ProfileSkeleton } from '@/components/profile/profile.skeleton';
import { useUserInfo } from '@/hooks/data/useUserInfo';
export const Route = createFileRoute('/_workbenchLayout/profile/')({
@@ -14,8 +12,6 @@ export const Route = createFileRoute('/_workbenchLayout/profile/')({
function RouteComponent() {
const { data } = useUserInfo();
return (
- }>
-
-
+
);
}
diff --git a/client/cms/src/stories/events/nickname-needed-dialog.stories.tsx b/client/cms/src/stories/events/nickname-needed-dialog.stories.tsx
new file mode 100644
index 0000000..27cf1e8
--- /dev/null
+++ b/client/cms/src/stories/events/nickname-needed-dialog.stories.tsx
@@ -0,0 +1,24 @@
+import type { Meta, StoryObj } from '@storybook/react-vite';
+import { NicknameNeededDialogView } from '@/components/events/nickname-needed.dialog.view';
+import { Dialog } from '@/components/ui/dialog';
+
+const meta = {
+ title: 'Events/NicknameNeededDialog',
+ component: NicknameNeededDialogView,
+ decorators: [
+ Story => (
+
+ ),
+ ],
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+export const Primary: Story = {
+ args: {
+ onAction: () => { },
+ },
+};