1、添加uniapp入口配置获取并展示
This commit is contained in:
shenzuqiang 2026-03-02 11:41:46 +08:00
parent b8365373fd
commit 7b00bda629
7 changed files with 941 additions and 826 deletions

View File

@ -4,10 +4,10 @@
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2026-02-28T10:08:53.722874Z">
<DropdownSelection timestamp="2026-03-02T03:06:17.024211200Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=JRBI89BIE6AI5TG6" />
<DeviceId pluginId="PhysicalDevice" identifier="serial=VSJNQ4NFBYJB5PZD" />
</handle>
</Target>
</DropdownSelection>

View File

@ -129,6 +129,7 @@ dependencies {
implementation(libs.androidx.datastore.core)
implementation(libs.androidx.datastore.preferences)
implementation(libs.androidx.foundation)
implementation(libs.foundation)
// 测试依赖
testImplementation(libs.junit)

View File

@ -11,6 +11,10 @@ class ConfigEntity {
@SerializedName("client.uni.version.upgrade") //小程序模拟器
var uniVersionEntity: List<UniVersionEntity>? = emptyList()
@SerializedName("client.icon.uni.home") //uni首页icon
var homeIconEntity: List<UniIconEntity>? = emptyList()
@SerializedName("client.popup.display") //显示开关控制
var popupConfig: PopupConfigEntity? = null

View File

@ -0,0 +1,22 @@
package com.img.rabbit.bean.response
import kotlinx.serialization.Serializable
/**
* {
* "icon": "https://cdn.batiao8.com/flaunt/uni_mp/icon/other/ticket.png",
* "text": "机票",
* "url": "pages/other/tickets-app/index",
* "type": "alipay",
* "enable": true
* }
*/
@Serializable
class UniIconEntity(
var icon: String = "",
var text: String = "",
var url: String = "",
var type: String = "",
var enable: Boolean = false
)

View File

@ -10,20 +10,19 @@ import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.layout.wrapContentWidth
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
@ -33,7 +32,6 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
@ -55,7 +53,6 @@ import com.img.rabbit.viewmodel.GeneralViewModel
@Composable
fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewModel) {
val context = LocalContext.current
val scrollState = rememberScrollState()
// 获取当前路由状态
val navBackStackEntry by navController.currentBackStackEntryAsState()
@ -92,18 +89,24 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
contentScale = ContentScale.FillWidth,
modifier = Modifier.fillMaxWidth()
)
Column (
LazyColumn (
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.weight(1f)
.offset(y = (-17).dp)
.padding(bottom = 56.dp)
.background(
color = Color.White,
shape = RoundedCornerShape(topStart = 18.dp, topEnd = 18.dp)
)
.verticalScroll(scrollState)
){
val homeIconConfig = PreferenceUtil.getUserConfig()?.config?.homeIconEntity
//大于9时每排展示3个否则每排展示4个
val columnsCount = if((homeIconConfig?.size?:0) >= 9){ 3 }else{ 4 }
val rows = homeIconConfig?.chunked(columnsCount)?:emptyList()
item {
//通过配置展示-AD1(模拟器)
val uniVersionConfig = PreferenceUtil.getUserConfig()?.config?.uniVersionEntity
if(uniVersionConfig?.isNotEmpty() == true){
val uniVersionSize = uniVersionConfig.size
@ -169,7 +172,39 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
}
}
}
}
items(rows) {rowItems ->
//通过配置展示-AD2
Row(Modifier.fillMaxWidth()) {
for (item in rowItems) {
Box(Modifier.weight(1f)) {
Column {
Box(modifier = Modifier.fillMaxWidth().height(8.dp))
AsyncImage(
model = item.icon,
contentDescription = item.text,
contentScale = ContentScale.FillWidth,
modifier = Modifier.width(48.dp).aspectRatio(48/48f).align(Alignment.CenterHorizontally),
fallback = painterResource(id = R.mipmap.ic_alipay_mock),
error = painterResource(id = R.mipmap.ic_alipay_mock)
)
Text(
text = item.text,
fontSize = 12.sp,
fontWeight = FontWeight.Normal,
color = Color(0xFF1A1A1A),
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
}
}
}
// 如果最后一行不满,填充空白占位
if (rowItems.size < columnsCount) {
Spacer(Modifier.weight((columnsCount - rowItems.size).toFloat()))
}
}
}
item {
//选尺寸制作
Image(
painter = painterResource(id = R.mipmap.ic_home_title_1_size),
@ -208,11 +243,17 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
contentDescription = null,
)
Column(
Row(
modifier = Modifier
.wrapContentSize()
.padding(start = 8.dp)
.fillMaxWidth()
.align(Alignment.Center)
) {
Box(
modifier = Modifier
.fillMaxWidth().weight(0.25f)
)
Column(
modifier = Modifier.wrapContentSize().weight(0.75f)
) {
Text(
text = "标准一寸",
@ -230,6 +271,7 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
)
}
}
}
Box(
modifier = Modifier
.width(10.dp)
@ -258,11 +300,17 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
contentDescription = null,
)
Column(
Row(
modifier = Modifier
.wrapContentSize()
.padding(start = 8.dp)
.fillMaxWidth()
.align(Alignment.Center)
) {
Box(
modifier = Modifier
.fillMaxWidth().weight(0.25f)
)
Column(
modifier = Modifier.wrapContentSize().weight(0.75f)
) {
Text(
text = "小一寸",
@ -281,6 +329,7 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
}
}
}
}
Row(
modifier = Modifier
.fillMaxWidth()
@ -310,11 +359,17 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
contentDescription = null,
)
Column(
Row(
modifier = Modifier
.wrapContentSize()
.padding(start = 8.dp)
.fillMaxWidth()
.align(Alignment.Center)
) {
Box(
modifier = Modifier
.fillMaxWidth().weight(0.25f)
)
Column(
modifier = Modifier.wrapContentSize().weight(0.75f)
) {
Text(
text = "标准二寸",
@ -331,6 +386,8 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
modifier = Modifier.wrapContentSize()
)
}
}
}
Box(
modifier = Modifier
@ -360,11 +417,17 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
contentDescription = null,
)
Column(
Row(
modifier = Modifier
.wrapContentSize()
.padding(start = 8.dp)
.fillMaxWidth()
.align(Alignment.Center)
) {
Box(
modifier = Modifier
.fillMaxWidth().weight(0.25f)
)
Column(
modifier = Modifier.wrapContentSize().weight(0.75f)
) {
Text(
text = "小二寸",
@ -381,11 +444,13 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
modifier = Modifier.wrapContentSize()
)
}
}
}
//证据制作
}
}
item {
//选证件制作
Image(
painter = painterResource(id = R.mipmap.ic_home_title_2_certificate),
contentDescription = null,
@ -419,13 +484,13 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
) {
Image(
painter = painterResource(id = R.mipmap.ic_home_certificate_bg),
modifier = Modifier.fillMaxWidth().aspectRatio(80f/50f),
contentDescription = null,
)
Column(
modifier = Modifier
.wrapContentSize()
.padding(start = 8.dp)
.fillMaxWidth()
.align(Alignment.Center)
) {
Text(
@ -433,14 +498,16 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
fontSize = 12.sp,
fontWeight = FontWeight.Bold,
color = Color(0xFF1A1A1A),
modifier = Modifier.wrapContentSize()
lineHeight = 12.sp,
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
Text(
text = "26x32mm",
fontSize = 10.sp,
fontWeight = FontWeight.Normal,
lineHeight = 10.sp,
color = Color(0xFFAAAAAA),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
}
}
@ -468,28 +535,30 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
) {
Image(
painter = painterResource(id = R.mipmap.ic_home_certificate_bg),
modifier = Modifier.fillMaxWidth().aspectRatio(80f/50f),
contentDescription = null,
)
Column(
modifier = Modifier
.wrapContentSize()
.padding(start = 8.dp)
.fillMaxWidth()
.align(Alignment.Center)
) {
Text(
text = "护照",
fontSize = 12.sp,
fontWeight = FontWeight.Bold,
lineHeight = 12.sp,
color = Color(0xFF1A1A1A),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
Text(
text = "33x48mm",
fontSize = 10.sp,
fontWeight = FontWeight.Normal,
lineHeight = 10.sp,
color = Color(0xFFAAAAAA),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
}
}
@ -517,28 +586,30 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
) {
Image(
painter = painterResource(id = R.mipmap.ic_home_certificate_bg),
modifier = Modifier.fillMaxWidth().aspectRatio(80f/50f),
contentDescription = null,
)
Column(
modifier = Modifier
.wrapContentSize()
.padding(start = 8.dp)
.fillMaxWidth()
.align(Alignment.Center)
) {
Text(
text = "驾驶证",
fontSize = 12.sp,
fontWeight = FontWeight.Bold,
lineHeight = 12.sp,
color = Color(0xFF1A1A1A),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
Text(
text = "22x32mm",
fontSize = 10.sp,
fontWeight = FontWeight.Normal,
lineHeight = 10.sp,
color = Color(0xFFAAAAAA),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
}
}
@ -566,28 +637,30 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
) {
Image(
painter = painterResource(id = R.mipmap.ic_home_certificate_bg),
modifier = Modifier.fillMaxWidth().aspectRatio(80f/50f),
contentDescription = null,
)
Column(
modifier = Modifier
.wrapContentSize()
.padding(start = 8.dp)
.fillMaxWidth()
.align(Alignment.Center)
) {
Text(
text = "社保卡",
fontSize = 12.sp,
fontWeight = FontWeight.Bold,
lineHeight = 12.sp,
color = Color(0xFF1A1A1A),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
Text(
text = "26x32mm",
fontSize = 10.sp,
fontWeight = FontWeight.Normal,
lineHeight = 10.sp,
color = Color(0xFFAAAAAA),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
}
}
@ -618,28 +691,30 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
) {
Image(
painter = painterResource(id = R.mipmap.ic_home_certificate_bg),
modifier = Modifier.fillMaxWidth().aspectRatio(80f/50f),
contentDescription = null,
)
Column(
modifier = Modifier
.wrapContentSize()
.padding(start = 8.dp)
.fillMaxWidth()
.align(Alignment.Center)
) {
Text(
text = "四六级",
fontSize = 12.sp,
fontWeight = FontWeight.Bold,
lineHeight = 12.sp,
color = Color(0xFF1A1A1A),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
Text(
text = "26x32mm",
fontSize = 10.sp,
fontWeight = FontWeight.Normal,
lineHeight = 10.sp,
color = Color(0xFFAAAAAA),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
}
}
@ -667,28 +742,30 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
) {
Image(
painter = painterResource(id = R.mipmap.ic_home_certificate_bg),
modifier = Modifier.fillMaxWidth().aspectRatio(80f/50f),
contentDescription = null,
)
Column(
modifier = Modifier
.wrapContentSize()
.padding(start = 8.dp)
.fillMaxWidth()
.align(Alignment.Center)
) {
Text(
text = "司法考试",
fontSize = 12.sp,
fontWeight = FontWeight.Bold,
lineHeight = 12.sp,
color = Color(0xFF1A1A1A),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
Text(
text = "33x48mm",
fontSize = 10.sp,
fontWeight = FontWeight.Normal,
lineHeight = 10.sp,
color = Color(0xFFAAAAAA),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
}
}
@ -716,28 +793,30 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
) {
Image(
painter = painterResource(id = R.mipmap.ic_home_certificate_bg),
modifier = Modifier.fillMaxWidth().aspectRatio(80f/50f),
contentDescription = null,
)
Column(
modifier = Modifier
.wrapContentSize()
.padding(start = 8.dp)
.fillMaxWidth()
.align(Alignment.Center)
) {
Text(
text = "结婚证",
fontSize = 12.sp,
fontWeight = FontWeight.Bold,
lineHeight = 12.sp,
color = Color(0xFF1A1A1A),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
Text(
text = "40x60mm",
fontSize = 10.sp,
fontWeight = FontWeight.Normal,
lineHeight = 10.sp,
color = Color(0xFFAAAAAA),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
}
}
@ -765,34 +844,36 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
) {
Image(
painter = painterResource(id = R.mipmap.ic_home_certificate_bg),
modifier = Modifier.fillMaxWidth().aspectRatio(80f/50f),
contentDescription = null,
)
Column(
modifier = Modifier
.wrapContentSize()
.padding(start = 8.dp)
.fillMaxWidth()
.align(Alignment.Center)
) {
Text(
text = "中国签证",
fontSize = 12.sp,
fontWeight = FontWeight.Bold,
lineHeight = 12.sp,
color = Color(0xFF1A1A1A),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
Text(
text = "35x45mm",
fontSize = 10.sp,
fontWeight = FontWeight.Normal,
lineHeight = 10.sp,
color = Color(0xFFAAAAAA),
modifier = Modifier.wrapContentSize()
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally)
)
}
}
}
}
item {
//其他
Image(
painter = painterResource(id = R.mipmap.ic_home_title_3_other),
@ -831,6 +912,7 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
) {
Image(
painter = painterResource(id = R.mipmap.ic_home_other_1_puzzle),
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally),
contentDescription = null,
)
@ -839,7 +921,7 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
fontSize = 12.sp,
fontWeight = FontWeight.Bold,
color = Color(0xFF1A1A1A),
modifier = Modifier.wrapContentSize().padding(top = 12.dp)
modifier = Modifier.wrapContentSize().padding(top = 12.dp).align(Alignment.CenterHorizontally)
)
}
}
@ -869,6 +951,7 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
) {
Image(
painter = painterResource(id = R.mipmap.ic_home_other_2_format),
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally),
contentDescription = null,
)
@ -877,7 +960,7 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
fontSize = 12.sp,
fontWeight = FontWeight.Bold,
color = Color(0xFF1A1A1A),
modifier = Modifier.wrapContentSize().padding(top = 12.dp)
modifier = Modifier.wrapContentSize().padding(top = 12.dp).align(Alignment.CenterHorizontally)
)
}
}
@ -911,6 +994,7 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
) {
Image(
painter = painterResource(id = R.mipmap.ic_home_other_3_size),
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally),
contentDescription = null,
)
@ -919,7 +1003,7 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
fontSize = 12.sp,
fontWeight = FontWeight.Bold,
color = Color(0xFF1A1A1A),
modifier = Modifier.wrapContentSize().padding(top = 12.dp)
modifier = Modifier.wrapContentSize().padding(top = 12.dp).align(Alignment.CenterHorizontally)
)
}
}
@ -949,6 +1033,7 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
) {
Image(
painter = painterResource(id = R.mipmap.ic_home_other_4_camera),
modifier = Modifier.wrapContentSize().align(Alignment.CenterHorizontally),
contentDescription = null,
)
@ -957,7 +1042,7 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
fontSize = 12.sp,
fontWeight = FontWeight.Bold,
color = Color(0xFF1A1A1A),
modifier = Modifier.wrapContentSize().padding(top = 12.dp)
modifier = Modifier.wrapContentSize().padding(top = 12.dp).align(Alignment.CenterHorizontally)
)
}
}
@ -967,8 +1052,7 @@ fun HomeScreen(navController: NavHostController,generalViewModel: GeneralViewMod
modifier = Modifier.fillMaxWidth().height(56.dp)
)
}
}
}
}

View File

@ -22,6 +22,8 @@ kotlin.code.style=official
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
android.injected.testOnly=false
# ????
GETUI_APPID=40qbPjPkYs7TnVAYCX0Ig6
GT_INSTALL_CHANNEL=general

View File

@ -55,6 +55,7 @@ tencentHelper = "3.0.6"
#oaid
android_cn_oaid = "4.2.12"
fastaes = "1.1.5"
foundationVersion = "1.10.3"
[libraries]
@ -123,6 +124,7 @@ tencent-helper = { module = "com.tencent.vasdolly:helper", version.ref = "tencen
android_cn_oaid = { module = "com.github.gzu-liyujiang:Android_CN_OAID", version.ref = "android_cn_oaid" }
#Decrypt
fastaes = { module = "io.github.billywei01:fastaes", version.ref = "fastaes" }
foundation = { group = "androidx.compose.foundation", name = "foundation", version.ref = "foundationVersion" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }