首页底部导航栏图标;创建AI界面
@@ -61,7 +61,8 @@ import com.aiosman.ravenow.ui.composables.form.FormTextInput2
|
||||
import com.aiosman.ravenow.ui.modifiers.noRippleClickable
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
import androidx.compose.foundation.border
|
||||
import androidx.compose.ui.draw.shadow
|
||||
/**
|
||||
* 添加智能体界面
|
||||
*/
|
||||
@@ -73,7 +74,7 @@ fun AddAgentScreen() {
|
||||
var agnetNameError by remember { mutableStateOf<String?>(null) }
|
||||
var agnetDescError by remember { mutableStateOf<String?>(null) }
|
||||
var errorMessage by remember { mutableStateOf<String?>(null) }
|
||||
|
||||
var isProcessing by remember { mutableStateOf(false) }
|
||||
|
||||
|
||||
fun onNameChange(value: String) {
|
||||
@@ -148,88 +149,150 @@ fun AddAgentScreen() {
|
||||
stringResource(R.string.agent_add),
|
||||
fontWeight = FontWeight.W600,
|
||||
modifier = Modifier.weight(1f),
|
||||
textAlign = TextAlign.Center,
|
||||
fontSize = 17.sp,
|
||||
color = appColors.text
|
||||
)
|
||||
Spacer(modifier = Modifier.size(12.dp))
|
||||
Icon(
|
||||
}
|
||||
}
|
||||
Spacer(modifier = Modifier.height(32.dp))
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.size(24.dp)
|
||||
.noRippleClickable {
|
||||
// 提交创建智能体的逻辑可以在这里实现
|
||||
},
|
||||
imageVector = Icons.Default.Check,
|
||||
contentDescription = "Add",
|
||||
tint = appColors.text
|
||||
)
|
||||
}
|
||||
}
|
||||
Spacer(modifier = Modifier.height(44.dp))
|
||||
Box(
|
||||
modifier = Modifier.size(88.dp),
|
||||
contentAlignment = Alignment.Center
|
||||
.fillMaxWidth()
|
||||
.height(113.dp)
|
||||
.padding(horizontal = 20.dp),
|
||||
) {
|
||||
CustomAsyncImage(
|
||||
context,
|
||||
model.croppedBitmap,
|
||||
modifier = Modifier
|
||||
.size(88.dp)
|
||||
.size(48.dp)
|
||||
.clip(
|
||||
RoundedCornerShape(88.dp)
|
||||
RoundedCornerShape(48.dp)
|
||||
),
|
||||
contentDescription = "",
|
||||
contentScale = ContentScale.Crop,
|
||||
placeholderRes = R.mipmap.rider_pro_agent_avatar
|
||||
placeholderRes = R.mipmap.group_copy
|
||||
)
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
Text(
|
||||
text = "Aoisan 你好呀!今天想创造什么?",
|
||||
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.size(32.dp)
|
||||
.clip(CircleShape)
|
||||
.background(appColors.main)
|
||||
.align(Alignment.BottomEnd)
|
||||
.noRippleClickable {
|
||||
// 设置正在选择头像的标志
|
||||
model.isSelectingAvatar = true
|
||||
navController.navigate(NavigationRoute.AgentImageCrop.route)
|
||||
},
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Add,
|
||||
contentDescription = "Add",
|
||||
tint = Color.White,
|
||||
fontSize = 16.sp,
|
||||
fontWeight = FontWeight.W600
|
||||
)
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Text(
|
||||
text = "只需要一句话,你的专属AI将在这里诞生.",
|
||||
fontSize = 14.sp
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
Spacer(modifier = Modifier.height(58.dp))
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.padding(horizontal = 16.dp)
|
||||
.padding(horizontal = 20.dp)
|
||||
) {
|
||||
FormTextInput(
|
||||
value = model.name,
|
||||
label = stringResource(R.string.agent_name),
|
||||
hint = stringResource(R.string.agent_name_hint),
|
||||
background = appColors.inputBackground2,
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
) { value ->
|
||||
onNameChange(value)
|
||||
}
|
||||
// Spacer(modifier = Modifier.height(16.dp))
|
||||
Box {
|
||||
FormTextInput2(
|
||||
value = model.desc,
|
||||
label = stringResource(R.string.agent_desc),
|
||||
hint = stringResource(R.string.agent_desc_hint),
|
||||
hint = "一个会写诗的AI,一个懂你笑点的AI...",
|
||||
background = appColors.inputBackground2,
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
modifier = Modifier.fillMaxWidth().height(95.dp)
|
||||
// 阴影效果
|
||||
.shadow(
|
||||
elevation = 10.dp,
|
||||
shape = RoundedCornerShape(10.dp),
|
||||
spotColor = Color(0x33F563FF),
|
||||
ambientColor = Color(0x99F563FF),
|
||||
clip = false
|
||||
)
|
||||
.background(
|
||||
brush = Brush.linearGradient(
|
||||
listOf(
|
||||
Color(0xFF6246FF),
|
||||
Color(0xFF7C45ED)
|
||||
)
|
||||
),
|
||||
shape = RoundedCornerShape(10.dp)
|
||||
)
|
||||
.padding(0.5.dp)
|
||||
.background(
|
||||
color = appColors.inputBackground2,
|
||||
shape = RoundedCornerShape(10.dp)
|
||||
)
|
||||
) { value ->
|
||||
onDescChange(value)
|
||||
}
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.align(Alignment.BottomEnd)
|
||||
.padding(end = 12.dp, bottom = 12.dp)
|
||||
.noRippleClickable {
|
||||
if (!isProcessing && model.desc.isNotEmpty()) {
|
||||
isProcessing = true
|
||||
model.viewModelScope.launch {
|
||||
try {
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
} finally {
|
||||
isProcessing = false
|
||||
}
|
||||
Spacer(modifier = Modifier.height(58.dp))
|
||||
}
|
||||
}
|
||||
},
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Icon(
|
||||
painter = painterResource(id = R.mipmap.icons_info_magic),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(16.dp),
|
||||
tint = Color.Unspecified
|
||||
)
|
||||
Spacer(modifier = Modifier.width(5.dp))
|
||||
Text(
|
||||
text = "AI美化",
|
||||
color = Color(0xFF6246FF),
|
||||
fontSize = 14.sp
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.padding(start = 20.dp, top = 24.dp,end = 213.dp)
|
||||
.width(126.dp)
|
||||
.height(40.dp)
|
||||
.border(
|
||||
width = 1.dp,
|
||||
color = Color(0x33858B98),
|
||||
shape = RoundedCornerShape(12.dp)
|
||||
)
|
||||
.background(
|
||||
color = appColors.background,
|
||||
shape = RoundedCornerShape(12.dp),
|
||||
)
|
||||
) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.padding(horizontal = 16.dp, vertical = 10.dp),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Icon(
|
||||
painter = painterResource(id = R.mipmap.icons_infor_edit),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(16.dp),
|
||||
)
|
||||
Spacer(modifier = Modifier.width(8.dp))
|
||||
Text(
|
||||
text = "手动创造Ai",
|
||||
color = Color.Black,
|
||||
fontWeight = FontWeight.W600,
|
||||
fontSize = 14.sp
|
||||
)
|
||||
}
|
||||
}
|
||||
Spacer(modifier = Modifier.height(280.dp))
|
||||
|
||||
// 错误信息显示
|
||||
errorMessage?.let { error ->
|
||||
@@ -249,18 +312,17 @@ fun AddAgentScreen() {
|
||||
.background(
|
||||
brush = Brush.linearGradient(
|
||||
colors = listOf(
|
||||
Color(0xFFEE2A33),
|
||||
Color(0xFFD80264),
|
||||
Color(0xFF8468BC)
|
||||
Color(0x777c45ed),
|
||||
Color(0x777c68ef),
|
||||
Color(0x557bd8f8)
|
||||
)
|
||||
),
|
||||
shape = RoundedCornerShape(24.dp)
|
||||
),
|
||||
color = Color.White,
|
||||
backgroundColor = Color.Transparent,
|
||||
text = stringResource(R.string.agent_create),
|
||||
text = stringResource(R.string.create_confirm),
|
||||
isLoading = model.isUpdating,
|
||||
loadingText = stringResource(R.string.agent_createing),
|
||||
enabled = !model.isUpdating && validate()
|
||||
) {
|
||||
// 验证输入
|
||||
|
||||
@@ -66,9 +66,9 @@ object AddAgentViewModel : ViewModel() {
|
||||
|
||||
fun validate(): String? {
|
||||
return when {
|
||||
name.isEmpty() -> "智能体名称不能为空"
|
||||
name.length < 2 -> "智能体名称长度不能少于2个字符"
|
||||
name.length > 20 -> "智能体名称长度不能超过20个字符"
|
||||
// name.isEmpty() -> "智能体名称不能为空"
|
||||
// name.length < 2 -> "智能体名称长度不能少于2个字符"
|
||||
// name.length > 20 -> "智能体名称长度不能超过20个字符"
|
||||
desc.isEmpty() -> "智能体描述不能为空"
|
||||
desc.length > 100 -> "智能体描述长度不能超过100个字符"
|
||||
else -> null
|
||||
|
||||
@@ -79,7 +79,6 @@ fun FormTextInput2(
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.padding(top = 8.dp)
|
||||
) {
|
||||
if (value.isEmpty()) {
|
||||
Text(
|
||||
|
||||
@@ -17,13 +17,13 @@ sealed class NavigationItem(
|
||||
|
||||
data object Home : NavigationItem("Home",
|
||||
icon = { R.drawable.rider_pro_nav_home },
|
||||
selectedIcon = { R.mipmap.rider_pro_nav_home_hl },
|
||||
selectedIcon = { R.mipmap.bars_x_buttons_home_s },
|
||||
label = { stringResource(R.string.main_home) }
|
||||
)
|
||||
|
||||
data object Ai : NavigationItem("Ai",
|
||||
icon = { R.mipmap.bars_x_buttons_discover_bold},
|
||||
selectedIcon = { R.mipmap.dynamic_hl },
|
||||
selectedIcon = { R.mipmap.bars_x_buttons_discover_fill },
|
||||
label = { stringResource(R.string.index_dynamic) }
|
||||
)
|
||||
// data object Ai : NavigationItem("Ai",
|
||||
@@ -40,13 +40,13 @@ sealed class NavigationItem(
|
||||
|
||||
data object Notification : NavigationItem("Notification",
|
||||
icon = { R.drawable.rider_pro_nav_notification },
|
||||
selectedIcon = { R.mipmap.rider_pro_nav_message_hl },
|
||||
selectedIcon = { R.mipmap.bars_x_buttons_chat_s },
|
||||
label = { stringResource(R.string.main_message) }
|
||||
)
|
||||
|
||||
data object Profile : NavigationItem("Profile",
|
||||
icon = { R.drawable.rider_pro_nav_profile },
|
||||
selectedIcon = { R.mipmap.rider_pro_nav_profile_hl },
|
||||
selectedIcon = { R.mipmap.bars_x_buttons_user_s },
|
||||
label = { stringResource(R.string.main_profile) }
|
||||
)
|
||||
|
||||
|
||||
BIN
app/src/main/res/mipmap-hdpi/bars_x_buttons_chat_s.png
Normal file
|
After Width: | Height: | Size: 773 B |
BIN
app/src/main/res/mipmap-hdpi/bars_x_buttons_discover_fill.png
Normal file
|
After Width: | Height: | Size: 927 B |
BIN
app/src/main/res/mipmap-hdpi/bars_x_buttons_home_n_copy.png
Normal file
|
After Width: | Height: | Size: 535 B |
BIN
app/src/main/res/mipmap-hdpi/bars_x_buttons_home_n_copy_2.png
Normal file
|
After Width: | Height: | Size: 772 B |
BIN
app/src/main/res/mipmap-hdpi/bars_x_buttons_user_s.png
Normal file
|
After Width: | Height: | Size: 631 B |
BIN
app/src/main/res/mipmap-hdpi/group_copy.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
app/src/main/res/mipmap-hdpi/icons_info_magic.png
Normal file
|
After Width: | Height: | Size: 327 B |
BIN
app/src/main/res/mipmap-hdpi/icons_infor_edit.png
Normal file
|
After Width: | Height: | Size: 294 B |
BIN
app/src/main/res/mipmap-mdpi/bars_x_buttons_chat_s.png
Normal file
|
After Width: | Height: | Size: 581 B |
BIN
app/src/main/res/mipmap-mdpi/bars_x_buttons_discover_fill.png
Normal file
|
After Width: | Height: | Size: 634 B |
BIN
app/src/main/res/mipmap-mdpi/bars_x_buttons_home_n_copy.png
Normal file
|
After Width: | Height: | Size: 414 B |
BIN
app/src/main/res/mipmap-mdpi/bars_x_buttons_home_n_copy_2.png
Normal file
|
After Width: | Height: | Size: 602 B |
BIN
app/src/main/res/mipmap-mdpi/bars_x_buttons_user_s.png
Normal file
|
After Width: | Height: | Size: 421 B |
BIN
app/src/main/res/mipmap-mdpi/group_copy.png
Normal file
|
After Width: | Height: | Size: 768 B |
BIN
app/src/main/res/mipmap-mdpi/icons_info_magic.png
Normal file
|
After Width: | Height: | Size: 276 B |
BIN
app/src/main/res/mipmap-mdpi/icons_infor_edit.png
Normal file
|
After Width: | Height: | Size: 260 B |
BIN
app/src/main/res/mipmap-xhdpi/bars_x_buttons_chat_s.png
Normal file
|
After Width: | Height: | Size: 912 B |
BIN
app/src/main/res/mipmap-xhdpi/bars_x_buttons_discover_fill.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
app/src/main/res/mipmap-xhdpi/bars_x_buttons_home_n_copy.png
Normal file
|
After Width: | Height: | Size: 623 B |
BIN
app/src/main/res/mipmap-xhdpi/bars_x_buttons_home_n_copy_2.png
Normal file
|
After Width: | Height: | Size: 967 B |
BIN
app/src/main/res/mipmap-xhdpi/bars_x_buttons_user_s.png
Normal file
|
After Width: | Height: | Size: 726 B |
BIN
app/src/main/res/mipmap-xhdpi/group_copy.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
app/src/main/res/mipmap-xhdpi/icons_info_magic.png
Normal file
|
After Width: | Height: | Size: 374 B |
BIN
app/src/main/res/mipmap-xhdpi/icons_infor_edit.png
Normal file
|
After Width: | Height: | Size: 330 B |
BIN
app/src/main/res/mipmap-xxhdpi/bars_x_buttons_chat_s.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/bars_x_buttons_discover_fill.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/bars_x_buttons_home_n_copy.png
Normal file
|
After Width: | Height: | Size: 816 B |
BIN
app/src/main/res/mipmap-xxhdpi/bars_x_buttons_home_n_copy_2.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/bars_x_buttons_user_s.png
Normal file
|
After Width: | Height: | Size: 966 B |
BIN
app/src/main/res/mipmap-xxhdpi/group_copy.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/icons_info_magic.png
Normal file
|
After Width: | Height: | Size: 470 B |
BIN
app/src/main/res/mipmap-xxhdpi/icons_infor_edit.png
Normal file
|
After Width: | Height: | Size: 372 B |
BIN
app/src/main/res/mipmap-xxxhdpi/bars_x_buttons_chat_s.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/bars_x_buttons_discover_fill.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/bars_x_buttons_home_n_copy.png
Normal file
|
After Width: | Height: | Size: 1022 B |
BIN
app/src/main/res/mipmap-xxxhdpi/bars_x_buttons_home_n_copy_2.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/bars_x_buttons_user_s.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/group_copy.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/icons_info_magic.png
Normal file
|
After Width: | Height: | Size: 569 B |
BIN
app/src/main/res/mipmap-xxxhdpi/icons_infor_edit.png
Normal file
|
After Width: | Height: | Size: 443 B |
@@ -133,12 +133,13 @@
|
||||
<string name="agent_hot">热门</string>
|
||||
<string name="agent_recommend">推荐</string>
|
||||
<string name="agent_other">其他</string>
|
||||
<string name="agent_add">创建智能体</string>
|
||||
<string name="agent_add">创建AI</string>
|
||||
<string name="agent_name">名称</string>
|
||||
<string name="agent_name_hint">请输入名称</string>
|
||||
<string name="agent_desc">设定描述</string>
|
||||
<string name="agent_desc_hint">示例: 一位经验丰富的销售员,擅长通过幽默风趣的语言和生动的案例,将复杂的产品转化为客户易于理解并感兴趣的话题</string>
|
||||
<string name="agent_create">创建智能体</string>
|
||||
<string name="create_confirm">好的,就它了</string>
|
||||
<string name="moment_content_hint">需要一些灵感来写文章吗?让人工智能来帮你!</string>
|
||||
<string name="moment_ai_co">AI文案优化</string>
|
||||
<string name="moment_ai_delete">删除</string>
|
||||
|
||||
@@ -178,6 +178,7 @@
|
||||
<string name="agent_recommend_agent">推荐给你的智能体</string>
|
||||
<string name="hot_chat_room">正在高能对话中</string>
|
||||
<string name="create_agent">创建智能体</string>
|
||||
<string name="create_confirm">confirm</string>
|
||||
<string name="publish_dynamic">发布动态</string>
|
||||
<string name="hot_agent">热门智能体</string>
|
||||
<string name="group_room_enter">进入</string>
|
||||
|
||||