diff --git a/src/assets/images/empty-order.webp b/src/assets/images/empty-order.webp new file mode 100644 index 0000000..a9dca34 Binary files /dev/null and b/src/assets/images/empty-order.webp differ diff --git a/src/components/_common/EmptyState.tsx b/src/components/_common/EmptyState.tsx index e33a68e..ad11f8d 100644 --- a/src/components/_common/EmptyState.tsx +++ b/src/components/_common/EmptyState.tsx @@ -26,19 +26,19 @@ const styles = StyleSheet.create({ backgroundColor: colors.WHITE, }, icon: { - width: 220, - height: 220, - marginBottom: 16, + width: 180, + height: 180, + marginBottom: 25, }, title: { - fontSize: 18, + fontSize: 20, fontFamily: 'Pretendard-SemiBold', color: '#222', textAlign: 'center', }, subtitle: { - marginTop: 8, - fontSize: 14, + marginTop: 5, + fontSize: 15, fontFamily: 'Pretendard-Regular', color: '#666', textAlign: 'center', diff --git a/src/navigations/bottomTabs/SellerBottomTabsNavigator.tsx b/src/navigations/bottomTabs/SellerBottomTabsNavigator.tsx index 94bf112..11c3181 100644 --- a/src/navigations/bottomTabs/SellerBottomTabsNavigator.tsx +++ b/src/navigations/bottomTabs/SellerBottomTabsNavigator.tsx @@ -2,7 +2,6 @@ import React from 'react'; import { SvgProps } from 'react-native-svg'; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; -import { MenuItem } from '../stack/SellerStackNavigator'; import AcceptActive from '@/assets/icons/accept-active.svg'; import Accept from '@/assets/icons/accept.svg'; import MenuActive from '@/assets/icons/menu-active.svg'; @@ -14,6 +13,7 @@ import { sellerNavigations } from '@/constants/navigations'; import SellerMenuScreen from '@/screens/seller/SellerMenuScreen'; import SellerMypageScreen from '@/screens/seller/SellerMypageScreen'; import SellerOrderScreen from '@/screens/seller/SellerOrderScreen'; +import { MenuItem } from '@/types/domain'; export type SellerBottomTabsParamList = { [sellerNavigations.MENU_HOME]: { updatedMenu?: MenuItem } | undefined; @@ -64,7 +64,7 @@ function SellerBottomTabsNavigator() { name={sellerNavigations.MENU_HOME} component={SellerMenuScreen} options={{ - title: '메뉴관리', + title: '메뉴 관리', tabBarIcon: ({ focused }) => renderTabIcon(focused, MenuActive, Menu), }} /> diff --git a/src/screens/notification/NotificationScreen.tsx b/src/screens/notification/NotificationScreen.tsx index b8e53a5..4a35264 100644 --- a/src/screens/notification/NotificationScreen.tsx +++ b/src/screens/notification/NotificationScreen.tsx @@ -20,22 +20,28 @@ const getIconByType = (type: string) => { } }; -// ✅ 더미데이터 const dummyNotifications = [ { id: 1, - type: 'ENVIRONMENT_LEVEL_UP', - title: '레벨업', + type: 'ORDER_COMPLETION', + title: '주문 완료', createdAt: '2분 전', - body: '축하합니다! 환경 레벨 3단계를 달성했어요.\n환경 쿠폰이 발급되었어요', + body: '경성꽈배기의 주문이 접수되었습니다!\n가게에서 곧 준비를 시작할거에요.', }, { id: 2, - type: 'ORDER_COMPLETION', - title: '주문 완료', - createdAt: '2분 전', - body: '죠죠 대학로점의 주문이 접수되었습니다!\n가게에서 곧 준비를 시작할거에요.', + type: 'ENVIRONMENT_LEVEL_UP', + title: '레벨업', + createdAt: '3분 전', + body: '축하합니다! 환경 레벨 3단계를 달성했어요.\n환경 쿠폰이 발급되었어요', }, + // { + // id: 3, + // type: 'ORDER_COMPLETION', + // title: '주문 완료', + // createdAt: '5일 전', + // body: '죠죠 대학로점의 주문이 접수되었습니다!\n가게에서 곧 준비를 시작할거에요.', + // }, ]; const NotificationScreen = () => { diff --git a/src/screens/seller/SellerMenuModifyScreen.tsx b/src/screens/seller/SellerMenuModifyScreen.tsx index 2ad16a3..d4fae85 100644 --- a/src/screens/seller/SellerMenuModifyScreen.tsx +++ b/src/screens/seller/SellerMenuModifyScreen.tsx @@ -18,6 +18,8 @@ import { import { launchImageLibrary, ImagePickerResponse, Asset } from 'react-native-image-picker'; import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'; import { StackNavigationProp } from '@react-navigation/stack'; +import Minus from '@/assets/icons/minus.svg'; +import Plus from '@/assets/icons/plus.svg'; import { colors } from '@/constants/colors'; import { sellerNavigations } from '@/constants/navigations'; import { SellerStackparamList } from '@/navigations/stack/SellerStackNavigator'; @@ -178,7 +180,7 @@ const SellerMenuModifyScreen = () => { 수량 - - + { keyboardType="numeric" /> - + + @@ -236,7 +238,6 @@ const styles = StyleSheet.create({ marginBottom: 20, flexDirection: 'row', marginHorizontal: 25, - alignItems: 'center', gap: 5, }, scrollContainer: { @@ -246,16 +247,19 @@ const styles = StyleSheet.create({ flex: 1, borderWidth: 1, borderColor: colors.GRAY_200, - borderRadius: 4, - paddingHorizontal: 8, - paddingVertical: 4, + borderRadius: 8, + paddingHorizontal: 12, + paddingVertical: 8, color: colors.BLACK, + fontSize: 15, + fontFamily: 'Pretendard-Regular', }, label: { + marginTop: 5, width: 80, - fontSize: 16, - color: colors.GRAY_700, - fontFamily: 'Pretendard-Regular', + fontSize: 15, + color: colors.BLACK, + fontFamily: 'Pretendard-Medium', }, controls: { flex: 1, @@ -285,7 +289,7 @@ const styles = StyleSheet.create({ textAlign: 'center', }, quantityInput: { - width: 130, + flex: 1, height: 40, textAlign: 'center', borderWidth: 1, @@ -320,7 +324,7 @@ const styles = StyleSheet.create({ imageButton: { marginHorizontal: 25, marginLeft: 25 + 80 + 5, - paddingVertical: 12, + paddingVertical: 8, borderRadius: 6, backgroundColor: colors.WHITE, borderColor: colors.GREEN, diff --git a/src/screens/seller/SellerMenuScreen.tsx b/src/screens/seller/SellerMenuScreen.tsx index 2bbc8e5..c6a34a2 100644 --- a/src/screens/seller/SellerMenuScreen.tsx +++ b/src/screens/seller/SellerMenuScreen.tsx @@ -81,7 +81,7 @@ const SellerMenuScreen = () => { style={styles.topContainer} onPress={() => navigation.navigate(sellerNavigations.MENU_REGISTER)} > - + 메뉴등록 @@ -90,29 +90,30 @@ const SellerMenuScreen = () => { showsVerticalScrollIndicator={false} contentContainerStyle={{ paddingBottom: 24 }} > - {menus.map((menu) => ( - - - - - {menu.name} - {menu.info} - - {menu.price.toLocaleString('ko-KR')}원 - + {menus.map((menu, index) => ( + + + + + + + {menu.name} + {menu.info} + + {menu.price.toLocaleString('ko-KR')}원 + + navigation.navigate(sellerNavigations.MENU_MODIFY, { menu })} + > + 수정 + + - - navigation.navigate(sellerNavigations.MENU_MODIFY, { - menu, - }) - } - > - - 수정 - + + {/* 마지막 요소가 아닐 때만 line 표시 */} + {index < menus.length - 1 && } ))} @@ -129,13 +130,20 @@ const styles = StyleSheet.create({ }, innerContainer: { paddingHorizontal: 20, - paddingVertical: 13, + paddingVertical: 18, }, topContainer: { flexDirection: 'row', alignItems: 'center', - backgroundColor: colors.WHITE, - alignSelf: 'stretch', + alignSelf: 'flex-start', + paddingLeft: 6, + paddingRight: 9, + paddingVertical: 5, + backgroundColor: '#079500', + gap: 3, + borderWidth: 1, + borderRadius: 8, + borderColor: '#079500', }, listContainer: { flexShrink: 0, @@ -152,7 +160,7 @@ const styles = StyleSheet.create({ }, infoContainer: { flexDirection: 'row', - gap: 5, + gap: 10, }, img: { width: 80, @@ -164,15 +172,16 @@ const styles = StyleSheet.create({ textContainer: { justifyContent: 'center', flexDirection: 'column', + gap: 3, }, greenRegularText_15: { fontSize: 15, - fontFamily: 'Pretendard-Regular', - color: colors.GREEN, + fontFamily: 'Pretendard-SemiBold', + color: colors.WHITE, }, blackBoldText_15: { - fontSize: 15, - fontFamily: 'Pretendard-Bold', + fontSize: 16, + fontFamily: 'Pretendard-Medium', color: colors.BLACK, }, grayRegularText_13: { @@ -180,15 +189,31 @@ const styles = StyleSheet.create({ fontFamily: 'Pretendard-Regular', color: colors.GRAY_700, }, + editText: { + fontSize: 13, + fontFamily: 'Pretendard-Regular', + color: colors.BLACK, + }, + priceText: { + fontSize: 15, + fontFamily: 'Pretendard-SemiBold', + color: colors.BLACK, + }, deleteButton: { flexDirection: 'row', justifyContent: 'center', alignItems: 'center', paddingVertical: 4, - paddingHorizontal: 6, - backgroundColor: colors.GRAY_200, - borderRadius: 10, - gap: 2, + paddingHorizontal: 10, + backgroundColor: colors.WHITE, + borderColor: '#9C9C9C', + borderWidth: 1, + borderRadius: 7, + gap: 4, + }, + line: { + height: 1, + backgroundColor: '#eaeaeaff', }, }); diff --git a/src/screens/seller/SellerMypageScreen.tsx b/src/screens/seller/SellerMypageScreen.tsx index eb78ea5..894744b 100644 --- a/src/screens/seller/SellerMypageScreen.tsx +++ b/src/screens/seller/SellerMypageScreen.tsx @@ -17,7 +17,7 @@ const SellerMypageScreen = () => { const dummyInsight = { salesAmount: 125000, - popularMenu: ['죠죠 야끼소바', '새우구이', '매운 우동'], + popularMenu: ['경성꽈배기', '팥도너츠', '김치고기 고로케'], monthAmount: { '2025-05': 1050000, '2025-06': 800000, diff --git a/src/screens/seller/SellerOrderScreen.tsx b/src/screens/seller/SellerOrderScreen.tsx index d693cc2..5fe19f3 100644 --- a/src/screens/seller/SellerOrderScreen.tsx +++ b/src/screens/seller/SellerOrderScreen.tsx @@ -2,6 +2,8 @@ import { useState } from 'react'; import { Text, StyleSheet, View, FlatList, ActivityIndicator } from 'react-native'; import { TouchableOpacity } from 'react-native-gesture-handler'; import { SafeAreaView } from 'react-native-safe-area-context'; +import EmptyOrderImage from '@/assets/images/empty-order.webp'; +import EmptyState from '@/components/_common/EmptyState'; import CustomModal from '@/components/_modal/CustomModal'; import { colors } from '@/constants/colors'; import { stateMap } from '@/constants/modalStates'; @@ -25,7 +27,13 @@ const SellerOrderScreen = () => { const { mutate: failOrder } = useFailOrder(); const renderItem = ({ item: order }: { item: SellerOrder }) => { - const time = order.pickupDueTime.substring(11, 16); + const date = new Date(order.pickupDueTime); + const time = date.toLocaleTimeString('ko-KR', { + hour: '2-digit', + minute: '2-digit', + hour12: false, + timeZone: 'Asia/Seoul', + }); const formattedAmount = `${order.totalAmount.toLocaleString('ko-KR')}원`; return ( @@ -108,7 +116,14 @@ const SellerOrderScreen = () => { ListFooterComponent={ isFetchingNextPage ? : null } - contentContainerStyle={{ paddingBottom: 45 }} + ListEmptyComponent={ + + } + contentContainerStyle={{ flexGrow: 1, paddingBottom: 45 }} /> @@ -195,7 +210,7 @@ const styles = StyleSheet.create({ }, whiteRegularText_15: { fontSize: 15, - fontFamily: 'Pretendard-Regular', + fontFamily: 'Pretendard-SemiBold', color: colors.WHITE, }, blackRegularText_15: { diff --git a/src/screens/store/MenuDetailScreen.tsx b/src/screens/store/MenuDetailScreen.tsx index 22a21d4..ffea784 100644 --- a/src/screens/store/MenuDetailScreen.tsx +++ b/src/screens/store/MenuDetailScreen.tsx @@ -172,7 +172,7 @@ const MenuDetailScreen = () => { {menu.dailyDiscountPercent > 0 && ( {(menu.price * count).toLocaleString()}원 )} - {menu.discountPrice.toLocaleString()}원 + {(menu.discountPrice * count).toLocaleString()}원 장바구니에 담기