|
@@ -2,19 +2,41 @@ package com.iscs.bozzys.ui.pages.profile.face
|
|
|
|
|
|
|
|
import android.content.Context
|
|
import android.content.Context
|
|
|
import android.content.Intent
|
|
import android.content.Intent
|
|
|
|
|
+import androidx.compose.foundation.clickable
|
|
|
import androidx.compose.foundation.layout.Column
|
|
import androidx.compose.foundation.layout.Column
|
|
|
import androidx.compose.foundation.layout.PaddingValues
|
|
import androidx.compose.foundation.layout.PaddingValues
|
|
|
import androidx.compose.foundation.layout.Row
|
|
import androidx.compose.foundation.layout.Row
|
|
|
|
|
+import androidx.compose.foundation.layout.fillMaxWidth
|
|
|
|
|
+import androidx.compose.foundation.layout.height
|
|
|
|
|
+import androidx.compose.foundation.layout.padding
|
|
|
|
|
+import androidx.compose.foundation.layout.size
|
|
|
|
|
+import androidx.compose.foundation.rememberScrollState
|
|
|
|
|
+import androidx.compose.foundation.shape.RoundedCornerShape
|
|
|
|
|
+import androidx.compose.foundation.verticalScroll
|
|
|
|
|
+import androidx.compose.material3.Icon
|
|
|
|
|
+import androidx.compose.material3.MaterialTheme
|
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.material3.Text
|
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.Composable
|
|
|
import androidx.compose.runtime.LaunchedEffect
|
|
import androidx.compose.runtime.LaunchedEffect
|
|
|
import androidx.compose.runtime.collectAsState
|
|
import androidx.compose.runtime.collectAsState
|
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.getValue
|
|
|
|
|
+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.res.painterResource
|
|
|
|
|
+import androidx.compose.ui.text.font.FontWeight
|
|
|
|
|
+import androidx.compose.ui.unit.dp
|
|
|
|
|
+import androidx.compose.ui.unit.sp
|
|
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
|
|
import coil.compose.AsyncImage
|
|
import coil.compose.AsyncImage
|
|
|
|
|
+import com.iscs.bozzys.R
|
|
|
import com.iscs.bozzys.api.UserCharacteristic
|
|
import com.iscs.bozzys.api.UserCharacteristic
|
|
|
import com.iscs.bozzys.ui.common.PageBase
|
|
import com.iscs.bozzys.ui.common.PageBase
|
|
|
import com.iscs.bozzys.ui.common.Title
|
|
import com.iscs.bozzys.ui.common.Title
|
|
|
|
|
+import com.iscs.bozzys.ui.dialog.TipsDialog
|
|
|
|
|
+import com.iscs.bozzys.ui.pages.compose.CardBox
|
|
|
import com.iscs.bozzys.ui.pages.vm.VMFace
|
|
import com.iscs.bozzys.ui.pages.vm.VMFace
|
|
|
import com.iscs.bozzys.utils.DateUtil.getShowDateOrTime
|
|
import com.iscs.bozzys.utils.DateUtil.getShowDateOrTime
|
|
|
|
|
|
|
@@ -47,8 +69,12 @@ class PageFace : PageBase() {
|
|
|
}
|
|
}
|
|
|
Column() {
|
|
Column() {
|
|
|
Title(pv, "人脸")
|
|
Title(pv, "人脸")
|
|
|
- Column() {
|
|
|
|
|
- state.faceList.forEach { FaceListItem(it) }
|
|
|
|
|
|
|
+ Column(
|
|
|
|
|
+ modifier = Modifier
|
|
|
|
|
+ .padding(horizontal = 16.dp, vertical = 8.dp)
|
|
|
|
|
+ .verticalScroll(rememberScrollState())
|
|
|
|
|
+ ) {
|
|
|
|
|
+ state.faceList.forEach { FaceListItem(vm, it) }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -57,10 +83,48 @@ class PageFace : PageBase() {
|
|
|
* 人脸特诊数据
|
|
* 人脸特诊数据
|
|
|
*/
|
|
*/
|
|
|
@Composable
|
|
@Composable
|
|
|
- fun FaceListItem(face: UserCharacteristic) {
|
|
|
|
|
- Row() {
|
|
|
|
|
- Text(face.createTime.getShowDateOrTime())
|
|
|
|
|
- AsyncImage(model = face.imageUrl, contentDescription = null)
|
|
|
|
|
|
|
+ fun FaceListItem(vm: VMFace, face: UserCharacteristic) {
|
|
|
|
|
+ val state by vm.state.collectAsState()
|
|
|
|
|
+ CardBox(modifier = Modifier.padding(vertical = 8.dp)) {
|
|
|
|
|
+ Row(
|
|
|
|
|
+ modifier = Modifier
|
|
|
|
|
+ .height(80.dp)
|
|
|
|
|
+ .fillMaxWidth()
|
|
|
|
|
+ .padding(horizontal = 12.dp),
|
|
|
|
|
+ verticalAlignment = Alignment.CenterVertically
|
|
|
|
|
+ ) {
|
|
|
|
|
+ AsyncImage(
|
|
|
|
|
+ model = face.imageUrl,
|
|
|
|
|
+ contentDescription = null,
|
|
|
|
|
+ placeholder = painterResource(R.mipmap.logo),
|
|
|
|
|
+ modifier = Modifier
|
|
|
|
|
+ .size(60.dp)
|
|
|
|
|
+ .clip(RoundedCornerShape(50)),
|
|
|
|
|
+ contentScale = ContentScale.Crop
|
|
|
|
|
+ )
|
|
|
|
|
+ Column(
|
|
|
|
|
+ modifier = Modifier
|
|
|
|
|
+ .padding(horizontal = 6.dp)
|
|
|
|
|
+ .weight(1f)
|
|
|
|
|
+ ) {
|
|
|
|
|
+ Text("录入时间", fontSize = 16.sp, fontWeight = FontWeight.Bold)
|
|
|
|
|
+ Text(face.createTime.getShowDateOrTime(), fontSize = 14.sp, color = MaterialTheme.colorScheme.surfaceTint.copy(alpha = 0.5f))
|
|
|
|
|
+ }
|
|
|
|
|
+ Icon(
|
|
|
|
|
+ painter = painterResource(R.drawable.delete_all), contentDescription = null, modifier = Modifier
|
|
|
|
|
+ .size(36.dp)
|
|
|
|
|
+ .clip(RoundedCornerShape(50))
|
|
|
|
|
+ .clickable { vm.showDeleteTips() }
|
|
|
|
|
+ .padding(5.dp),
|
|
|
|
|
+ tint = Color(0xFFFA666C)
|
|
|
|
|
+ )
|
|
|
|
|
+ }
|
|
|
|
|
+ TipsDialog(show = state.showDeleteTips, title = "提示", content = "确定要删除当前人脸数据吗?", onCancel = {
|
|
|
|
|
+ vm.hideDeleteTips()
|
|
|
|
|
+ }, onConfirm = {
|
|
|
|
|
+ vm.hideDeleteTips()
|
|
|
|
|
+ vm.deleteFaceData(face)
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|