diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0690f2838..06e8aafce 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,10 +14,40 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:usesCleartextTraffic="true" android:theme="@style/Theme.TerningAndroid" + android:usesCleartextTraffic="true" tools:targetApi="31"> + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/src/main/java/com/terning/core/designsystem/component/button/ChangeFilterButton.kt b/core/src/main/java/com/terning/core/designsystem/component/button/ChangeFilterButton.kt new file mode 100644 index 000000000..c322ddb6c --- /dev/null +++ b/core/src/main/java/com/terning/core/designsystem/component/button/ChangeFilterButton.kt @@ -0,0 +1,84 @@ +package com.terning.core.designsystem.component.button + +import androidx.annotation.StringRes +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.interaction.collectIsPressedAsState +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.ripple.LocalRippleTheme +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.theme.Grey400 +import com.terning.core.designsystem.theme.TerningMain +import com.terning.core.designsystem.theme.TerningSub1 +import com.terning.core.designsystem.theme.TerningSub5 +import com.terning.core.designsystem.theme.TerningTheme +import com.terning.core.designsystem.theme.White +import com.terning.core.util.NoRippleTheme + +@Composable +fun ChangeFilterButton( + isSelected: Boolean, + @StringRes text: Int, + cornerRadius: Dp, + paddingVertical: Dp, + onButtonClick: () -> Unit, + modifier: Modifier = Modifier, +) { + val interactionSource = remember { MutableInteractionSource() } + val isPressed by interactionSource.collectIsPressedAsState() + val backgroundColor = when { + !isSelected && !isPressed -> White + !isSelected && isPressed -> TerningSub5 + else -> TerningMain + } + val textColor = when { + !isSelected -> Grey400 + else -> White + } + val borderColor = when { + !isSelected && !isPressed -> TerningMain + !isSelected && isPressed -> TerningSub1 + else -> TerningMain + } + + CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) { + Button( + contentPadding = PaddingValues(vertical = paddingVertical), + modifier = modifier + .fillMaxWidth() + .wrapContentHeight(), + interactionSource = interactionSource, + colors = ButtonDefaults.buttonColors( + containerColor = backgroundColor, + contentColor = textColor, + ), + border = BorderStroke( + width = 1.dp, + color = borderColor + ), + shape = RoundedCornerShape(cornerRadius), + onClick = { onButtonClick() } + ) { + Text( + text = stringResource(id = text), + style = TerningTheme.typography.button3, + textAlign = TextAlign.Center, + ) + } + } +} diff --git a/feature/src/main/AndroidManifest.xml b/feature/src/main/AndroidManifest.xml index 708160b1c..a5918e68a 100644 --- a/feature/src/main/AndroidManifest.xml +++ b/feature/src/main/AndroidManifest.xml @@ -1,36 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/home/changefilter/ChangeFilterRoute.kt b/feature/src/main/java/com/terning/feature/home/changefilter/ChangeFilterRoute.kt new file mode 100644 index 000000000..643857488 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/home/changefilter/ChangeFilterRoute.kt @@ -0,0 +1,148 @@ +package com.terning.feature.home.changefilter + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavController +import com.terning.core.designsystem.component.button.RectangleButton +import com.terning.core.designsystem.component.datepicker.DatePickerUI +import com.terning.core.designsystem.component.topappbar.BackButtonTopAppBar +import com.terning.core.designsystem.theme.TerningTheme +import com.terning.feature.R +import com.terning.feature.home.changefilter.component.ChangeFilteringRadioGroup +import com.terning.feature.home.changefilter.component.FilteringMainTitleText +import com.terning.feature.home.changefilter.component.FilteringSubTitleText +import com.terning.feature.home.home.HomeViewModel +import com.terning.feature.home.home.model.InternFilterData +import com.terning.feature.home.home.model.UserNameState +import com.terning.feature.home.home.navigation.navigateHome +import java.util.Calendar + +val currentYear = Calendar.getInstance().get(Calendar.YEAR) +val currentMonth = Calendar.getInstance().get(Calendar.MONTH) + +@Composable +fun ChangeFilterRoute( + navController: NavController, +) { + ChangeFilterScreen(navController) +} + +@Composable +fun ChangeFilterScreen( + navController: NavController, + viewModel: HomeViewModel = hiltViewModel(), +) { + Scaffold( + topBar = { + BackButtonTopAppBar( + title = stringResource(id = R.string.change_filter_top_bar_title), + onBackButtonClick = { navController.popBackStack() }, + modifier = Modifier + .shadow(elevation = 2.dp) + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .padding( + top = paddingValues.calculateTopPadding(), + ) + ) { + ShowTitle( + mainTitle = stringResource(id = R.string.change_filter_grade_main), + subTitle = stringResource(id = R.string.filtering_status1_sub), + modifier = Modifier.padding( + top = 31.dp, + start = 24.dp, + end = 24.dp + ) + ) + ChangeFilteringRadioGroup( + filterType = 0, + internFilterData = viewModel.userName.internFilter, + onButtonClick = { viewModel.setGrade(it) } + ) + + UserNameState( + userName = "남지우자랑스러운티엘이되", + internFilter = InternFilterData( + grade = 4, + workingPeriod = 1, + startYear = 2024, + startMonth = 7, + ) + ) + + ShowTitle( + mainTitle = stringResource(id = R.string.filtering_status2_title), + subTitle = stringResource(id = R.string.filtering_status2_sub), + modifier = Modifier.padding( + top = 39.dp, + start = 24.dp, + end = 24.dp + ) + ) + ChangeFilteringRadioGroup( + filterType = 1, + internFilterData = viewModel.userName.internFilter, + onButtonClick = { viewModel.setWorkingPeriod(it) } + ) + + ShowTitle( + mainTitle = stringResource(id = R.string.filtering_status3_title), + subTitle = stringResource(id = R.string.filtering_status3_sub), + modifier = Modifier.padding( + top = 39.dp, + start = 24.dp, + end = 24.dp + ) + ) + + Spacer(modifier = Modifier.weight(1f)) + DatePickerUI( + chosenYear = currentYear, + chosenMonth = currentMonth, + ) + Spacer(modifier = Modifier.weight(1f)) + + RectangleButton( + style = TerningTheme.typography.button0, + paddingVertical = 19.dp, + text = R.string.change_filter_save, + onButtonClick = { + navController.navigateHome() + } + ) + } + } +} + +@Composable +private fun ShowTitle( + mainTitle: String, + subTitle: String, + modifier: Modifier = Modifier, +) { + FilteringMainTitleText( + text = mainTitle, + modifier = modifier.padding() + ) + FilteringSubTitleText( + text = subTitle, + modifier = Modifier + .padding( + top = 3.dp, + bottom = 13.dp, + start = 24.dp, + end = 24.dp + ) + ) +} \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/home/changefilter/component/ChangeFilteringRadioGroup.kt b/feature/src/main/java/com/terning/feature/home/changefilter/component/ChangeFilteringRadioGroup.kt new file mode 100644 index 000000000..ca60a3b12 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/home/changefilter/component/ChangeFilteringRadioGroup.kt @@ -0,0 +1,81 @@ +package com.terning.feature.home.changefilter.component + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.lazy.grid.itemsIndexed +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.component.button.ChangeFilterButton +import com.terning.feature.R +import com.terning.feature.home.home.model.InternFilterData + +@Composable +fun ChangeFilteringRadioGroup( + filterType: Int, + internFilterData: InternFilterData?, + onButtonClick: (Int) -> Unit, + modifier: Modifier = Modifier, +) { + val options = if (filterType == 0) { + listOf( + R.string.filtering_status1_button1, + R.string.filtering_status1_button2, + R.string.filtering_status1_button3, + R.string.filtering_status1_button4, + ) + } else { + listOf( + R.string.filtering_status2_button1, + R.string.filtering_status2_button2, + R.string.filtering_status2_button3, + ) + } + + val selectedIndex = remember { mutableIntStateOf(0) } + var selectedButton = remember { mutableStateListOf(false, false, false, false) } + + if (filterType == 0) { + selectedButton[ + internFilterData?.grade ?: 0 + ] = true + } else { + selectedButton[ + internFilterData?.workingPeriod ?: 0 + ] = true + } + + LazyVerticalGrid( + columns = GridCells.Fixed(options.size), + horizontalArrangement = Arrangement.spacedBy(12.dp), + modifier = modifier + .fillMaxWidth() + .wrapContentHeight() + .padding(horizontal = 24.dp) + + ) { + itemsIndexed(options) { index, option -> + ChangeFilterButton( + isSelected = selectedButton[index], + modifier = Modifier + .wrapContentHeight(), + text = options[index], + cornerRadius = 10.dp, + paddingVertical = 10.dp, + onButtonClick = { + selectedIndex.intValue = option + selectedButton.indices.forEach { i -> selectedButton[i] = false } + selectedButton[index] = true + onButtonClick(index) + } + ) + } + } +} \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/home/changefilter/navigation/ChangeFilterNavigation.kt b/feature/src/main/java/com/terning/feature/home/changefilter/navigation/ChangeFilterNavigation.kt new file mode 100644 index 000000000..5c2cab77f --- /dev/null +++ b/feature/src/main/java/com/terning/feature/home/changefilter/navigation/ChangeFilterNavigation.kt @@ -0,0 +1,30 @@ +package com.terning.feature.home.changefilter.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.terning.core.navigation.Route +import com.terning.feature.home.changefilter.ChangeFilterRoute +import kotlinx.serialization.Serializable + +fun NavController.navigateChangeFilter(navOptions: NavOptions? = null) { + navigate( + route = ChangeFilter, + navOptions = navOptions + ) +} + +fun NavGraphBuilder.changeFilterNavGraph( + navHostController: NavHostController +) { + composable { + ChangeFilterRoute( + navController = navHostController + ) + } +} + +@Serializable +data object ChangeFilter : Route \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/home/home/HomeRoute.kt b/feature/src/main/java/com/terning/feature/home/home/HomeRoute.kt index 125357311..6d3559742 100644 --- a/feature/src/main/java/com/terning/feature/home/home/HomeRoute.kt +++ b/feature/src/main/java/com/terning/feature/home/home/HomeRoute.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavHostController import com.terning.core.designsystem.component.bottomsheet.SortingBottomSheet import com.terning.core.designsystem.component.button.SortingButton import com.terning.core.designsystem.component.item.InternItemWithShadow @@ -36,6 +37,7 @@ import com.terning.core.designsystem.theme.Grey150 import com.terning.core.designsystem.theme.TerningTheme import com.terning.core.designsystem.theme.White import com.terning.feature.R +import com.terning.feature.home.changefilter.navigation.navigateChangeFilter import com.terning.feature.home.home.component.HomeFilteringEmptyIntern import com.terning.feature.home.home.component.HomeFilteringScreen import com.terning.feature.home.home.component.HomeRecommendEmptyIntern @@ -48,17 +50,23 @@ const val NAME_START_LENGTH = 7 const val NAME_END_LENGTH = 12 @Composable -fun HomeRoute() { +fun HomeRoute( + navController: NavHostController +) { val currentSortBy: MutableState = remember { mutableIntStateOf(0) } - HomeScreen(currentSortBy) + HomeScreen( + currentSortBy, + onChangeFilterClick = { navController.navigateChangeFilter() } + ) } @OptIn(ExperimentalFoundationApi::class) @Composable fun HomeScreen( currentSortBy: MutableState, + onChangeFilterClick: () -> Unit, viewModel: HomeViewModel = hiltViewModel(), ) { val userNameState = viewModel.userName @@ -109,7 +117,7 @@ fun HomeScreen( .background(White) ) { ShowRecommendTitle() - ShowInternFilter(userNameState = userNameState) + ShowInternFilter(userNameState = userNameState, onChangeFilterClick) HorizontalDivider( thickness = 4.dp, @@ -215,21 +223,29 @@ private fun ShowRecommendTitle() { } @Composable -private fun ShowInternFilter(userNameState: UserNameState) { - if (userNameState.internFilter == null) { +private fun ShowInternFilter(userNameState: UserNameState, onChangeFilterClick: () -> Unit) { + if (userNameState.internFilter?.grade == null) { HomeFilteringScreen( - grade = R.string.home_recommend_no_filtering_hyphen, - period = R.string.home_recommend_no_filtering_hyphen, - startYear = R.string.home_recommend_no_filtering_hyphen, - startMonth = R.string.home_recommend_no_filtering_hyphen + grade = stringResource(id = R.string.home_recommend_no_filtering_hyphen), + period = stringResource(id = R.string.home_recommend_no_filtering_hyphen), + startYear = stringResource(id = R.string.home_recommend_no_filtering_hyphen), + onChangeFilterClick = { onChangeFilterClick() }, ) } else { with(userNameState.internFilter) { HomeFilteringScreen( - grade = grade, - period = workingPeriod, - startYear = startYear, - startMonth = startMonth, + grade = (grade + 1).toString() + stringResource(id = R.string.home_recommend_filtering_grade), + period = stringResource( + id = when (workingPeriod) { + 0 -> R.string.filtering_status2_button1 + 1 -> R.string.filtering_status2_button2 + 2 -> R.string.filtering_status2_button3 + else -> R.string.home_recommend_no_filtering_hyphen + } + ), + startYear = startYear.toString() + stringResource(id = R.string.home_recommend_filtering_startYear) + + " " + startMonth.toString() + stringResource(id = R.string.home_recommend_filtering_startMonth), + onChangeFilterClick = { onChangeFilterClick() }, ) } } diff --git a/feature/src/main/java/com/terning/feature/home/home/HomeViewModel.kt b/feature/src/main/java/com/terning/feature/home/home/HomeViewModel.kt index 8ed636ae3..7a1a88d0e 100644 --- a/feature/src/main/java/com/terning/feature/home/home/HomeViewModel.kt +++ b/feature/src/main/java/com/terning/feature/home/home/HomeViewModel.kt @@ -10,8 +10,8 @@ import com.terning.core.designsystem.theme.CalGreen2 import com.terning.core.designsystem.theme.CalOrange1 import com.terning.core.designsystem.theme.CalPink import com.terning.core.designsystem.theme.CalYellow -import com.terning.feature.home.home.model.InternFilterData import com.terning.feature.home.home.model.InternData +import com.terning.feature.home.home.model.InternFilterData import com.terning.feature.home.home.model.ScrapData import com.terning.feature.home.home.model.UserNameState import com.terning.feature.home.home.model.UserScrapState @@ -28,7 +28,7 @@ class HomeViewModel @Inject constructor( UserNameState( userName = "남지우자랑스러운티엘이되", internFilter = InternFilterData( - grade = 4, + grade = 1, workingPeriod = 1, startYear = 2024, startMonth = 7, @@ -46,10 +46,17 @@ class HomeViewModel @Inject constructor( val scrapData get() = _scrapState.asStateFlow() private val _recommendInternState = MutableStateFlow>( -// getRecommendData() - listOf() + getRecommendData() ) val recommendInternData get() = _recommendInternState.asStateFlow() + + fun setGrade(grade: Int) { + userName.internFilter?.grade = grade + } + + fun setWorkingPeriod(workingPeriod: Int) { + userName.internFilter?.workingPeriod = workingPeriod + } } private fun getScrapData(): List = listOf( diff --git a/feature/src/main/java/com/terning/feature/home/home/component/HomeFilteringScreen.kt b/feature/src/main/java/com/terning/feature/home/home/component/HomeFilteringScreen.kt index e22a775ed..8011d60cf 100644 --- a/feature/src/main/java/com/terning/feature/home/home/component/HomeFilteringScreen.kt +++ b/feature/src/main/java/com/terning/feature/home/home/component/HomeFilteringScreen.kt @@ -24,14 +24,15 @@ import com.terning.core.designsystem.theme.Grey300 import com.terning.core.designsystem.theme.TerningMain import com.terning.core.designsystem.theme.TerningTheme import com.terning.core.designsystem.theme.White +import com.terning.core.extension.noRippleClickable import com.terning.feature.R @Composable fun HomeFilteringScreen( - grade: Int, - period: Int, - startYear: Int, - startMonth: Int, + grade: String, + period: String, + startYear: String, + onChangeFilterClick: () -> Unit, modifier: Modifier = Modifier, ) { Row( @@ -48,7 +49,8 @@ fun HomeFilteringScreen( color = TerningMain, shape = RoundedCornerShape(5.dp), ) - .align(Alignment.CenterVertically), + .align(Alignment.CenterVertically) + .noRippleClickable { onChangeFilterClick() }, ) { Image( painter = painterResource(id = R.drawable.ic_home_filtering_28), @@ -68,29 +70,21 @@ fun HomeFilteringScreen( } HomeFilteringText( - text = grade.toString() + stringResource(id = R.string.home_recommend_filtering_grade), + text = grade, modifier = Modifier .padding(vertical = 7.dp) ) HomeFilteringDivider() HomeFilteringText( - text = stringResource( - id = when (period) { - 1 -> R.string.home_recommend_filtering_working_period_1 - 2 -> R.string.home_recommend_filtering_working_period_2 - 3 -> R.string.home_recommend_filtering_working_period_3 - else -> R.string.server_failure - } - ), + text = period, modifier = Modifier .padding(vertical = 7.dp) ) HomeFilteringDivider() HomeFilteringText( - text = startYear.toString() + stringResource(id = R.string.home_recommend_filtering_startYear) - + " " + startMonth.toString() + stringResource(id = R.string.home_recommend_filtering_startMonth), + text = startYear, modifier = Modifier - .padding(vertical = 7.dp) + .padding(top = 7.dp, bottom = 7.dp) ) } } diff --git a/feature/src/main/java/com/terning/feature/home/home/model/InternFilterData.kt b/feature/src/main/java/com/terning/feature/home/home/model/InternFilterData.kt index b819d24fb..894faaddd 100644 --- a/feature/src/main/java/com/terning/feature/home/home/model/InternFilterData.kt +++ b/feature/src/main/java/com/terning/feature/home/home/model/InternFilterData.kt @@ -1,8 +1,8 @@ package com.terning.feature.home.home.model data class InternFilterData( - val grade: Int, - val workingPeriod: Int, + var grade: Int, + var workingPeriod: Int, val startYear: Int, val startMonth: Int, ) diff --git a/feature/src/main/java/com/terning/feature/home/home/navigation/HometNavigation.kt b/feature/src/main/java/com/terning/feature/home/home/navigation/HometNavigation.kt index c49027a9d..88ce969af 100644 --- a/feature/src/main/java/com/terning/feature/home/home/navigation/HometNavigation.kt +++ b/feature/src/main/java/com/terning/feature/home/home/navigation/HometNavigation.kt @@ -2,6 +2,7 @@ package com.terning.feature.home.home.navigation import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController import androidx.navigation.NavOptions import androidx.navigation.compose.composable import com.terning.core.navigation.MainTabRoute @@ -15,9 +16,9 @@ fun NavController.navigateHome(navOptions: NavOptions? = null) { ) } -fun NavGraphBuilder.homeNavGraph() { +fun NavGraphBuilder.homeNavGraph(navHostController: NavHostController) { composable { - HomeRoute() + HomeRoute(navController = navHostController) } } diff --git a/feature/src/main/java/com/terning/feature/main/MainScreen.kt b/feature/src/main/java/com/terning/feature/main/MainScreen.kt index 49c481a29..e97b15b58 100644 --- a/feature/src/main/java/com/terning/feature/main/MainScreen.kt +++ b/feature/src/main/java/com/terning/feature/main/MainScreen.kt @@ -21,6 +21,7 @@ import com.terning.core.designsystem.theme.TerningMain import com.terning.core.designsystem.theme.White import com.terning.core.util.NoRippleInteractionSource import com.terning.feature.calendar.navigation.calendarNavGraph +import com.terning.feature.home.changefilter.navigation.changeFilterNavGraph import com.terning.feature.home.home.navigation.homeNavGraph import com.terning.feature.intern.navigation.internNavGraph import com.terning.feature.mypage.navigation.myPageNavGraph @@ -57,7 +58,7 @@ fun MainScreen( navController = navigator.navController, startDestination = navigator.startDestination ) { - homeNavGraph() + homeNavGraph(navHostController = navigator.navController) calendarNavGraph() searchNavGraph(navHostController = navigator.navController) myPageNavGraph() @@ -67,6 +68,7 @@ fun MainScreen( filteringTwoNavGraph(navHostController = navigator.navController) filteringThreeNavGraph(navHostController = navigator.navController) searchProcessNavGraph(navHostController = navigator.navController) + changeFilterNavGraph(navHostController = navigator.navController) startFilteringNavGraph(navHostController = navigator.navController) startHomeNavGraph(navHostController = navigator.navController) internNavGraph(navHostController = navigator.navController) diff --git a/feature/src/main/res/values/strings.xml b/feature/src/main/res/values/strings.xml index 4436ad797..d89353a51 100644 --- a/feature/src/main/res/values/strings.xml +++ b/feature/src/main/res/values/strings.xml @@ -67,9 +67,6 @@ 내 계획에 딱 맞는 대학생 인턴 공고 필터링 학년 - 1개월 ~ 3개월 - 4개월 ~ 6개월 - 7개월 이상 필터링 설정에 일치하는 인턴 공고가 없어요! @@ -112,13 +109,10 @@ 원하는 근무 시작 시기에 맞는 인턴 공고를 찾아드려요 다음으로 - - 재학 상태를 선택해주세요 - 희망하는 인턴 근무 기간을 선택해주세요 - 입사를 계획중인 달을 선택해주세요 - 휴학중이라면, 휴학 전 마지막 수료 학년을 선택해주세요 - 선택한 기간 동안 근무할 수 있는 인턴 공고를 찾아드릴게요 - 선택한 달부터 근무를 시작할 수 있는 공고를 찾아드릴게요 + + 필터링 재설정 + 재학 상태를 선택해 주세요 + 저장하기 공유 아이콘