diff --git a/app/(sub-page)/tutorial/data.tsx b/app/(sub-page)/tutorial/data.tsx new file mode 100644 index 00000000..115c6bb9 --- /dev/null +++ b/app/(sub-page)/tutorial/data.tsx @@ -0,0 +1,66 @@ +import featureImage1 from '@/public/assets/tutorial/tutorial-feature1.png'; +import featureImage2 from '@/public/assets/tutorial/tutorial-feature2.png'; +import featureImage3 from '@/public/assets/tutorial/tutorial-feature3.png'; +import uploadImage0 from '@/public/assets/tutorial/tutorial0.png'; +import uploadImage1 from '@/public/assets/tutorial/tutorial1.png'; +import uploadImage2 from '@/public/assets/tutorial/tutorial2.png'; +import uploadImage3 from '@/public/assets/tutorial/tutorial3.png'; +import uploadImage4 from '@/public/assets/tutorial/tutorial4.png'; +import { StaticImageData } from 'next/image'; +import Link from 'next/link'; + +interface TutorialItem { + imageUrl: StaticImageData; + title: string; + content: React.ReactNode; +} + +export const TUTORIAL_FEATRUE: TutorialItem[] = [ + { + imageUrl: featureImage1, + title: 'first', + content: '강의 커스텀을 통한 졸업 사정 예측', + }, + { + imageUrl: featureImage2, + title: 'second', + content: '카테고리별(교양 / 전공) 수강 학점 현황 조회', + }, + { + imageUrl: featureImage3, + title: 'third', + content: '카테고리별(교양 / 전공) 미이수 과목 정보 및 잔여 학점 조회', + }, +]; + +export const TUTORIAL_UPLOAD: TutorialItem[] = [ + { + imageUrl: uploadImage0, + title: '1.', + content: ( + + MyiWeb MSI에 접속 후 로그인(PC환경 권장) + + ), + }, + { + imageUrl: uploadImage1, + title: '2.', + content: '좌측 성적/졸업 메뉴 → 성적표(상담용,B4)클릭', + }, + { + imageUrl: uploadImage2, + title: '3.', + content: '우측 상단 조회버튼 클릭 → 프린트 아이콘 클릭 (모바일 환경에서는 뜨지 않을 수 있습니다.)', + }, + { + imageUrl: uploadImage3, + title: '4.', + content: '인쇄 정보의 대상(PDF로 저장) 설정 → 하단 저장 버튼 클릭 (비율이 깨지지 않도록 조심해주세요.)', + }, + { + imageUrl: uploadImage4, + title: '5.', + content: '저장한 파일 업로드', + }, +]; diff --git a/app/(sub-page)/tutorial/page.tsx b/app/(sub-page)/tutorial/page.tsx new file mode 100644 index 00000000..52f0b059 --- /dev/null +++ b/app/(sub-page)/tutorial/page.tsx @@ -0,0 +1,44 @@ +import ImageCard from '@/app/ui/view/molecule/image-card/image-card'; +import TitleBox from '@/app/ui/view/molecule/title-box/title-box'; +import { cn } from '@/app/utils/shadcn/utils'; +import Image from 'next/image'; +import { TUTORIAL_FEATRUE, TUTORIAL_UPLOAD } from './data'; +import ContentContainer from '@/app/ui/view/atom/content-container/content-container'; + +function TutorialPage() { + return ( + +

튜토리얼

+

+ 명지인을 위한 졸업 요건 충족도 확인 서비스 ‘졸업을부탁해’ 입니다.
+ 우리 서비스의 주요 정보와 사용법을 확인해보세요 +

+ +
+ {TUTORIAL_FEATRUE.map((feature, index) => ( + {`feature-${index}`} + ))} +
+
+

+ 정보 제공을 위해서는 여러분의 이수과목 정보가 필요합니다. +
PDF 업로드를 진행해주세요. +

+ +
+ {TUTORIAL_UPLOAD.map((feature, index) => ( + + ))} +
+
+
+ ); +} + +export default TutorialPage; diff --git a/app/globals.css b/app/globals.css index 9e2a0fdf..444d1be0 100644 --- a/app/globals.css +++ b/app/globals.css @@ -29,6 +29,7 @@ a { ::-webkit-scrollbar { width: 10px; + height: 10px; } ::-webkit-scrollbar-track { diff --git a/app/ui/view/molecule/image-card/image-card.stories.tsx b/app/ui/view/molecule/image-card/image-card.stories.tsx new file mode 100644 index 00000000..1cc1c22b --- /dev/null +++ b/app/ui/view/molecule/image-card/image-card.stories.tsx @@ -0,0 +1,20 @@ +import featureIamge from '@/public/assets/tutorial/tutorial-feature1.png'; +import type { Meta, StoryObj } from '@storybook/react'; +import ImageCard, { ImageCardProps } from './image-card'; + +const meta = { + title: 'ui/view/molecule/ImageCard', + component: ImageCard, +} as Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + image: featureIamge, + title: 'first', + content: '강의 커스텀을 통한 졸업 사정 예측', + }, + render: (args: ImageCardProps) => , +}; diff --git a/app/ui/view/molecule/image-card/image-card.tsx b/app/ui/view/molecule/image-card/image-card.tsx new file mode 100644 index 00000000..03e5acd7 --- /dev/null +++ b/app/ui/view/molecule/image-card/image-card.tsx @@ -0,0 +1,21 @@ +import { cn } from '@/app/utils/shadcn/utils'; +import Image, { StaticImageData } from 'next/image'; + +export interface ImageCardProps { + image: StaticImageData; + title: string; + content: React.ReactNode; + className?: string; +} + +function ImageCard({ image, title, content, className }: ImageCardProps) { + return ( +
+ {title} +
{title}
+

{content}

+
+ ); +} + +export default ImageCard; diff --git a/app/ui/view/molecule/title-box/title-box.stories.tsx b/app/ui/view/molecule/title-box/title-box.stories.tsx new file mode 100644 index 00000000..bc89c5ef --- /dev/null +++ b/app/ui/view/molecule/title-box/title-box.stories.tsx @@ -0,0 +1,23 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import TitleBox from './title-box'; +import AnnounceMessageBox from '../announce-message-box/announce-massage-box'; + +const meta = { + title: 'ui/view/molecule/TitleBox', + component: TitleBox, +} as Meta; + +export default meta; +type Story = StoryObj; + +interface TitleBoxProps extends React.PropsWithChildren { + title: string; +} + +export const Default: Story = { + args: { + children: , + title: '졸업 요건 안내', + }, + render: (args: TitleBoxProps) => , +}; diff --git a/app/ui/view/molecule/title-box/title-box.tsx b/app/ui/view/molecule/title-box/title-box.tsx new file mode 100644 index 00000000..ed33187d --- /dev/null +++ b/app/ui/view/molecule/title-box/title-box.tsx @@ -0,0 +1,13 @@ +import { cn } from '@/app/utils/shadcn/utils'; + +function TitleBox({ title, children }: React.PropsWithChildren<{ title: string }>) { + return ( +
+

{title}

+
+ {children} +
+ ); +} + +export default TitleBox; diff --git a/public/assets/tutorial/tutorial-feature1.png b/public/assets/tutorial/tutorial-feature1.png new file mode 100644 index 00000000..80c6e0b9 Binary files /dev/null and b/public/assets/tutorial/tutorial-feature1.png differ diff --git a/public/assets/tutorial/tutorial-feature2.png b/public/assets/tutorial/tutorial-feature2.png new file mode 100644 index 00000000..65734ec8 Binary files /dev/null and b/public/assets/tutorial/tutorial-feature2.png differ diff --git a/public/assets/tutorial/tutorial-feature3.png b/public/assets/tutorial/tutorial-feature3.png new file mode 100644 index 00000000..a8ebc3db Binary files /dev/null and b/public/assets/tutorial/tutorial-feature3.png differ diff --git a/public/assets/tutorial/tutorial0.png b/public/assets/tutorial/tutorial0.png new file mode 100644 index 00000000..728a981e Binary files /dev/null and b/public/assets/tutorial/tutorial0.png differ diff --git a/public/assets/tutorial/tutorial1.png b/public/assets/tutorial/tutorial1.png new file mode 100644 index 00000000..11fe39ed Binary files /dev/null and b/public/assets/tutorial/tutorial1.png differ diff --git a/public/assets/tutorial/tutorial2.png b/public/assets/tutorial/tutorial2.png new file mode 100644 index 00000000..02fe5bd4 Binary files /dev/null and b/public/assets/tutorial/tutorial2.png differ diff --git a/public/assets/tutorial/tutorial3.png b/public/assets/tutorial/tutorial3.png new file mode 100644 index 00000000..f267d512 Binary files /dev/null and b/public/assets/tutorial/tutorial3.png differ diff --git a/public/assets/tutorial/tutorial4.png b/public/assets/tutorial/tutorial4.png new file mode 100644 index 00000000..9b07d16f Binary files /dev/null and b/public/assets/tutorial/tutorial4.png differ