This commit is contained in:
2025-09-09 16:18:35 +08:00
parent cd35562244
commit d231f3678c
8 changed files with 178 additions and 84 deletions

View File

@@ -22,7 +22,7 @@ sealed class NavigationItem(
) )
data object Ai : NavigationItem("Ai", data object Ai : NavigationItem("Ai",
icon = { R.drawable.dynamic }, icon = { R.mipmap.bars_x_buttons_discover_bold},
selectedIcon = { R.mipmap.dynamic_hl }, selectedIcon = { R.mipmap.dynamic_hl },
label = { stringResource(R.string.index_dynamic) } label = { stringResource(R.string.index_dynamic) }
) )

View File

@@ -43,6 +43,7 @@ import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
@@ -60,6 +61,7 @@ import com.aiosman.ravenow.ui.index.tabs.ai.tabs.hot.HotAgent
import com.aiosman.ravenow.ui.modifiers.noRippleClickable import com.aiosman.ravenow.ui.modifiers.noRippleClickable
import com.aiosman.ravenow.ui.composables.TabItem import com.aiosman.ravenow.ui.composables.TabItem
import com.aiosman.ravenow.ui.composables.TabSpacer import com.aiosman.ravenow.ui.composables.TabSpacer
import com.aiosman.ravenow.ui.index.tabs.moment.CustomTabItem
import com.aiosman.ravenow.ui.index.tabs.moment.tabs.expolre.AgentItem import com.aiosman.ravenow.ui.index.tabs.moment.tabs.expolre.AgentItem
import com.aiosman.ravenow.ui.index.tabs.moment.tabs.expolre.ExploreViewModel import com.aiosman.ravenow.ui.index.tabs.moment.tabs.expolre.ExploreViewModel
import com.aiosman.ravenow.utils.DebounceUtils import com.aiosman.ravenow.utils.DebounceUtils
@@ -101,7 +103,7 @@ fun Agent() {
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.padding( .padding(
top = statusBarPaddingValues.calculateTopPadding()+18.dp, top = statusBarPaddingValues.calculateTopPadding(),
bottom = navigationBarPaddings, bottom = navigationBarPaddings,
start = 16.dp, start = 16.dp,
end = 16.dp end = 16.dp
@@ -111,92 +113,178 @@ fun Agent() {
Row( Row(
modifier = Modifier modifier = Modifier
.wrapContentHeight() .wrapContentHeight()
.height(44.dp)
.fillMaxWidth(), .fillMaxWidth(),
horizontalArrangement = Arrangement.Start, horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
// 搜索框 androidx.compose.material3.Text(
Row( text = "Rave AI",
fontSize = 20.sp,
fontWeight = FontWeight.W900,
color = AppColors.text,
modifier = Modifier modifier = Modifier
.height(36.dp) .align(Alignment.CenterVertically)
.weight(1f) )
.clip(shape = RoundedCornerShape(8.dp))
.background(AppColors.inputBackground) Spacer(modifier = Modifier.weight(1f))
.padding(horizontal = 8.dp, vertical = 0.dp)
.noRippleClickable { Image(
// 搜索框点击事件
},
verticalAlignment = Alignment.CenterVertically
) {
Icon(
painter = painterResource(id = R.drawable.rider_pro_nav_search), painter = painterResource(id = R.drawable.rider_pro_nav_search),
contentDescription = null, contentDescription = "search",
tint = AppColors.inputHint
)
Box {
Text(
text = stringResource(R.string.search),
modifier = Modifier.padding(start = 8.dp),
color = AppColors.inputHint,
fontSize = 17.sp
)
}
}
Spacer(modifier = Modifier.width(16.dp))
// 新增
Icon(
modifier = Modifier modifier = Modifier
.size(36.dp) .size(24.dp)
.noRippleClickable { .noRippleClickable {
if (DebounceUtils.simpleDebounceClick(lastClickTime, 500L) { navController.navigate(NavigationRoute.Search.route)
// 检查游客模式,如果是游客则跳转登录
if (GuestLoginCheckOut.needLogin(GuestLoginCheckOutScene.CREATE_AGENT)) {
navController.navigate(NavigationRoute.Login.route)
} else {
// 导航到添加智能体页面
navController.navigate(
NavigationRoute.AddAgent.route
)
}
}) {
lastClickTime = System.currentTimeMillis()
}
}, },
painter = painterResource(id = R.drawable.rider_pro_new_post_add_pic), colorFilter = ColorFilter.tint(AppColors.text)
contentDescription = null,
tint = AppColors.text
) )
} }
// 推荐Agent Spacer(modifier = Modifier.height(15.dp))
// // 搜索框
// Row(
// modifier = Modifier
// .height(36.dp)
// .weight(1f)
// .clip(shape = RoundedCornerShape(8.dp))
// .background(AppColors.inputBackground)
// .padding(horizontal = 8.dp, vertical = 0.dp)
// .noRippleClickable {
// // 搜索框点击事件
// },
// verticalAlignment = Alignment.CenterVertically
// ) {
// Icon(
// painter = painterResource(id = R.drawable.rider_pro_nav_search),
// contentDescription = null,
// tint = AppColors.inputHint
// )
// Box {
// Text(
// text = stringResource(R.string.search),
// modifier = Modifier.padding(start = 8.dp),
// color = AppColors.inputHint,
// fontSize = 17.sp
// )
// }
// }
// Spacer(modifier = Modifier.width(16.dp))
// // 创建智能体
// Icon(
// modifier = Modifier
// .size(36.dp)
// .noRippleClickable {
// if (DebounceUtils.simpleDebounceClick(lastClickTime, 500L) {
// // 检查游客模式,如果是游客则跳转登录
// if (GuestLoginCheckOut.needLogin(GuestLoginCheckOutScene.CREATE_AGENT)) {
// navController.navigate(NavigationRoute.Login.route)
// } else {
// // 导航到添加智能体页面
// navController.navigate(
// NavigationRoute.AddAgent.route
// )
// }
// }) {
// lastClickTime = System.currentTimeMillis()
// }
// },
// painter = painterResource(id = R.drawable.rider_pro_new_post_add_pic),
// contentDescription = null,
// tint = AppColors.text
// )
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.height(260.dp) .height(400.dp)
.padding(vertical = 8.dp) .padding(vertical = 8.dp)
) { ) {
// 标题
// // 标题
// Row(
// verticalAlignment = Alignment.CenterVertically,
// modifier = Modifier.padding(bottom = 12.dp)
// ) {
// Image(
// painter = painterResource(R.mipmap.rider_pro_agent2),
// contentDescription = "agent",
// modifier = Modifier.size(28.dp),
//
// )
// Spacer(modifier = Modifier.width(4.dp))
// androidx.compose.material3.Text(
// text = stringResource(R.string.agent_recommend_agent),
// fontSize = 16.sp,
// fontWeight = androidx.compose.ui.text.font.FontWeight.W600,
// color = AppColors.text
// )
// }
// 标签页
Row( Row(
verticalAlignment = Alignment.CenterVertically, modifier = Modifier
modifier = Modifier.padding(bottom = 12.dp) .fillMaxWidth()
.wrapContentHeight()
.padding( bottom = 16.dp),
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.Bottom
) { ) {
Image( // 推荐标签(默认选中)
painter = painterResource(R.mipmap.rider_pro_agent2), CustomTabItem(
contentDescription = "agent", text = stringResource(R.string.agent_recommend),
modifier = Modifier.size(28.dp), isSelected = true,
onClick = {
) // TODO: 实现点击切换逻辑
Spacer(modifier = Modifier.width(4.dp))
androidx.compose.material3.Text(
text = stringResource(R.string.agent_recommend_agent),
fontSize = 16.sp,
fontWeight = androidx.compose.ui.text.font.FontWeight.W600,
color = AppColors.text
)
} }
)
TabSpacer()
// Scenes标签
CustomTabItem(
text = "scenes",
isSelected = false,
onClick = {
// TODO: 实现点击切换逻辑
}
)
TabSpacer()
// Voices标签
CustomTabItem(
text = "voices",
isSelected = false,
onClick = {
// TODO: 实现点击切换逻辑
}
)
TabSpacer()
// Anime标签
CustomTabItem(
text = "anime",
isSelected = false,
onClick = {
// TODO: 实现点击切换逻辑
}
)
// TabSpacer()
//
// // Assist标签
// CustomTabItem(
// text = "assist",
// isSelected = false,
// onClick = {
// // TODO: 实现点击切换逻辑
// }
// )
}
// Agent ViewPager // Agent ViewPager
AgentViewPagerSection(agentItems = viewModel.agentItems.take(9),viewModel) AgentViewPagerSection(agentItems = viewModel.agentItems.take(15),viewModel)
} }
Spacer(modifier = Modifier.height(0.dp)) Spacer(modifier = Modifier.height(0.dp))
@@ -312,8 +400,8 @@ fun Agent() {
fun AgentViewPagerSection(agentItems: List<AgentItem>,viewModel: AgentViewModel) { fun AgentViewPagerSection(agentItems: List<AgentItem>,viewModel: AgentViewModel) {
val AppColors = LocalAppTheme.current val AppColors = LocalAppTheme.current
// 每页显示3个agent // 每页显示5个agent
val itemsPerPage = 3 val itemsPerPage = 5
val totalPages = (agentItems.size + itemsPerPage - 1) / itemsPerPage val totalPages = (agentItems.size + itemsPerPage - 1) / itemsPerPage
if (totalPages > 0) { if (totalPages > 0) {
@@ -323,7 +411,7 @@ fun AgentViewPagerSection(agentItems: List<AgentItem>,viewModel: AgentViewModel)
// Agent内容 // Agent内容
Box( Box(
modifier = Modifier modifier = Modifier
.height(180.dp) .height(300.dp)
) { ) {
HorizontalPager( HorizontalPager(
state = pagerState, state = pagerState,
@@ -344,7 +432,8 @@ fun AgentViewPagerSection(agentItems: List<AgentItem>,viewModel: AgentViewModel)
viewModel = viewModel, viewModel = viewModel,
agentItems = agentItems.drop(page * itemsPerPage).take(itemsPerPage), agentItems = agentItems.drop(page * itemsPerPage).take(itemsPerPage),
page = page, page = page,
modifier = Modifier.height(180.dp) modifier = Modifier
.height(300.dp)
.graphicsLayer { .graphicsLayer {
scaleX = scale scaleX = scale
scaleY = scale scaleY = scale
@@ -368,7 +457,9 @@ fun AgentViewPagerSection(agentItems: List<AgentItem>,viewModel: AgentViewModel)
.padding(horizontal = 4.dp) .padding(horizontal = 4.dp)
.size(3.dp) .size(3.dp)
.background( .background(
color = if (pagerState.currentPage == index) AppColors.text else AppColors.secondaryText.copy(alpha = 0.3f), color = if (pagerState.currentPage == index) AppColors.text else AppColors.secondaryText.copy(
alpha = 0.3f
),
shape = androidx.compose.foundation.shape.CircleShape shape = androidx.compose.foundation.shape.CircleShape
) )
) )
@@ -487,7 +578,10 @@ fun AgentCard2(viewModel: AgentViewModel,agentItem: AgentItem,navController: Nav
navController.navigate(NavigationRoute.Login.route) navController.navigate(NavigationRoute.Login.route)
} else { } else {
viewModel.createSingleChat(agentItem.openId) viewModel.createSingleChat(agentItem.openId)
viewModel.goToChatAi(agentItem.openId, navController = navController) viewModel.goToChatAi(
agentItem.openId,
navController = navController
)
} }
}) { }) {
lastClickTime = System.currentTimeMillis() lastClickTime = System.currentTimeMillis()

View File

@@ -93,7 +93,7 @@ fun GalleryItem(
Text( Text(
text = "故事还没开始", text = "故事还没开始",
fontSize = 12.sp, fontSize = 16.sp,
color = AppColors.text, color = AppColors.text,
fontWeight = FontWeight.W600 fontWeight = FontWeight.W600
) )
@@ -150,7 +150,7 @@ fun GalleryGrid(
Text( Text(
text = "故事还没开始", text = "故事还没开始",
fontSize = 12.sp, fontSize = 16.sp,
color = AppColors.text, color = AppColors.text,
fontWeight = FontWeight.W600 fontWeight = FontWeight.W600
) )

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 935 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB