Sfoglia il codice sorgente

适配手机,修改部分UI显示效果

bjb 3 mesi fa
parent
commit
e1b5bdf8d2

+ 9 - 0
app/src/main/java/com/iscs/bozzys/api/ApiRequest.kt

@@ -330,4 +330,13 @@ object ApiRequest {
         return requestApi { api.getUserCharacteristicList(params) }
     }
 
+    /**
+     * 删除用户特征数据
+     *
+     * @param params ids=
+     */
+    suspend fun deleteUserCharacteristic(params: MutableMap<String, Any>): Result<Response<Boolean>> {
+        return requestApi { api.deleteUserCharacteristic(params) }
+    }
+
 }

+ 11 - 0
app/src/main/java/com/iscs/bozzys/api/ApiService.kt

@@ -3,6 +3,7 @@ package com.iscs.bozzys.api
 import com.google.gson.JsonObject
 import okhttp3.MultipartBody
 import retrofit2.http.Body
+import retrofit2.http.DELETE
 import retrofit2.http.GET
 import retrofit2.http.HeaderMap
 import retrofit2.http.Headers
@@ -290,4 +291,14 @@ interface ApiService {
         @HeaderMap headers: Map<String, String> = ApiRequest.getUserHeaders()
     ): Response<ResponsePage<UserCharacteristic>>
 
+    /**
+     * 删除用户特征数据
+     */
+    @Headers("Content-Type: application/x-www-form-urlencoded")
+    @DELETE("/admin-api/iscs/user-characteristic/deleteUserCharacteristicList")
+    suspend fun deleteUserCharacteristic(
+        @QueryMap params: MutableMap<String, Any>,
+        @HeaderMap headers: Map<String, String> = ApiRequest.getUserHeaders()
+    ): Response<Boolean>
+
 }

+ 5 - 5
app/src/main/java/com/iscs/bozzys/ui/dialog/TipsDialog.kt

@@ -83,8 +83,8 @@ fun TipsDialog(
                         .clip(RoundedCornerShape(12.dp))
                         .background(Color.White)
                 ) {
-                    Column(modifier = Modifier.width(320.dp), horizontalAlignment = Alignment.CenterHorizontally) {
-                        Text(title, fontSize = 16.sp, lineHeight = 48.sp, fontWeight = FontWeight.Bold, color = Text)
+                    Column(modifier = Modifier.fillMaxWidth(0.75f), horizontalAlignment = Alignment.CenterHorizontally) {
+                        Text(title, fontSize = 18.sp, lineHeight = 48.sp, fontWeight = FontWeight.Bold, color = Text)
                         Spacer(
                             Modifier
                                 .fillMaxWidth()
@@ -93,7 +93,7 @@ fun TipsDialog(
                         )
                         Text(
                             content,
-                            fontSize = 15.sp,
+                            fontSize = 16.sp,
                             color = Text.copy(alpha = 0.8f),
                             modifier = Modifier.padding(horizontal = 16.dp, vertical = 20.dp)
                         )
@@ -105,7 +105,7 @@ fun TipsDialog(
                                     .clip(RoundedCornerShape(6.dp))
                                     .background(Color.Gray.copy(alpha = 0.6f))
                                     .clickable(onClick = { onCancel() })
-                                    .padding(vertical = 5.dp),
+                                    .padding(vertical = 8.dp),
                                 textAlign = TextAlign.Center,
                                 fontSize = 16.sp,
                                 fontWeight = FontWeight.Bold
@@ -119,7 +119,7 @@ fun TipsDialog(
                                     .clip(RoundedCornerShape(6.dp))
                                     .background(MaterialTheme.colorScheme.primary)
                                     .clickable(onClick = { onConfirm() })
-                                    .padding(vertical = 5.dp),
+                                    .padding(vertical = 8.dp),
                                 textAlign = TextAlign.Center,
                                 fontSize = 16.sp,
                                 fontWeight = FontWeight.Bold

+ 1 - 1
app/src/main/java/com/iscs/bozzys/ui/pages/compose/JobListItem.kt

@@ -42,7 +42,7 @@ fun JobListItem(job: Job) {
     val levelInfo = job.getLevelNameAndColor()
     CardBox(
         modifier = Modifier
-            .padding(vertical = 5.dp)
+            .padding(horizontal = 16.dp, vertical = 5.dp)
             .fillMaxWidth()
             .heightIn(max = 200.dp),
         shadowBlur = 6.dp

+ 1 - 1
app/src/main/java/com/iscs/bozzys/ui/pages/compose/TaskListItem.kt

@@ -41,7 +41,7 @@ fun TaskListItem(task: Task) {
     val levelInfo = task.getLevelNameAndColor()
     CardBox(
         modifier = Modifier
-            .padding(vertical = 5.dp)
+            .padding(horizontal = 16.dp, vertical = 5.dp)
             .fillMaxWidth()
             .heightIn(max = 200.dp),
         shadowBlur = 6.dp

+ 9 - 4
app/src/main/java/com/iscs/bozzys/ui/pages/home/HomeCompose.kt

@@ -356,7 +356,6 @@ private fun TaskList(pv: PaddingValues, vm: VMHome) {
     val state by vm.state.collectAsState()
     Column(
         Modifier
-            .padding(horizontal = 16.dp)
             .padding(bottom = pv.calculateBottomPadding())
             .fillMaxSize()
             .verticalScroll(state = rememberScrollState())
@@ -364,6 +363,7 @@ private fun TaskList(pv: PaddingValues, vm: VMHome) {
     ) {
         Row(
             Modifier
+                .padding(horizontal = 16.dp)
                 .fillMaxWidth()
                 .height(36.dp)
                 .clickable(indication = null, interactionSource = remember { MutableInteractionSource() }, onClick = {
@@ -377,7 +377,7 @@ private fun TaskList(pv: PaddingValues, vm: VMHome) {
         }
         if (state.homeTasks.isEmpty()) CardBox(
             modifier = Modifier
-                .padding(vertical = 5.dp)
+                .padding(horizontal = 16.dp, vertical = 5.dp)
                 .fillMaxWidth()
                 .height(102.dp),
             shadowBlur = 6.dp
@@ -401,6 +401,7 @@ private fun TaskList(pv: PaddingValues, vm: VMHome) {
         }
         Row(
             Modifier
+                .padding(horizontal = 16.dp)
                 .fillMaxWidth()
                 .height(36.dp)
                 .clickable(indication = null, interactionSource = remember { MutableInteractionSource() }, onClick = {
@@ -414,7 +415,7 @@ private fun TaskList(pv: PaddingValues, vm: VMHome) {
         }
         if (state.messageList.isEmpty()) CardBox(
             modifier = Modifier
-                .padding(vertical = 5.dp)
+                .padding(horizontal = 16.dp, vertical = 5.dp)
                 .fillMaxWidth()
                 .height(102.dp),
             shadowBlur = 6.dp
@@ -429,7 +430,11 @@ private fun TaskList(pv: PaddingValues, vm: VMHome) {
                 Text("您当前暂无新消息", fontSize = 14.sp, color = Text)
             }
         }
-        Column(Modifier.fillMaxWidth()) {
+        Column(
+            Modifier
+                .padding(horizontal = 16.dp)
+                .fillMaxWidth()
+        ) {
             state.messageList.forEach { msg -> key(msg.id) { MessageListItem(msg, vm) } }
         }
     }

+ 2 - 2
app/src/main/java/com/iscs/bozzys/ui/pages/home/JobsCompose.kt

@@ -271,11 +271,11 @@ private fun TaskList(vm: VMHome) {
                 modifier = Modifier
                     .padding(top = 5.dp)
                     .fillMaxSize()
-                    .padding(horizontal = 16.dp)
             ) {
                 LazyColumn(
                     state = listState,
-                    modifier = Modifier.fillMaxSize()
+                    modifier = Modifier
+                        .fillMaxSize()
                 ) {
                     items(state.jobList) { item ->
                         JobListItem(item)

+ 2 - 1
app/src/main/java/com/iscs/bozzys/ui/pages/home/PageHome.kt

@@ -96,7 +96,8 @@ class PageHome : PageBase() {
     @Composable
     fun CreateNavigationBar(pv: PaddingValues, bgColor: Color, vm: VMHome) {
         val state by vm.state.collectAsState()
-        Column(modifier = Modifier.fillMaxWidth()) {
+        // 只有一个或者一个没有不显示导航栏
+        if (state.navs.size > 1) Column(modifier = Modifier.fillMaxWidth()) {
             HorizontalDivider(thickness = 1.dp, color = Color(0xFFEEEEEE))
             Row(
                 modifier = Modifier

+ 2 - 2
app/src/main/java/com/iscs/bozzys/ui/pages/home/TasksCompose.kt

@@ -236,11 +236,11 @@ private fun TaskList(vm: VMHome) {
                 modifier = Modifier
                     .padding(top = 5.dp)
                     .fillMaxSize()
-                    .padding(horizontal = 16.dp)
             ) {
                 LazyColumn(
                     state = listState,
-                    modifier = Modifier.fillMaxSize()
+                    modifier = Modifier
+                        .fillMaxSize()
                 ) {
                     items(state.taskList) { item ->
                         TaskListItem(item)

+ 70 - 6
app/src/main/java/com/iscs/bozzys/ui/pages/profile/face/PageFace.kt

@@ -2,19 +2,41 @@ package com.iscs.bozzys.ui.pages.profile.face
 
 import android.content.Context
 import android.content.Intent
+import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.PaddingValues
 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.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.collectAsState
 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 coil.compose.AsyncImage
+import com.iscs.bozzys.R
 import com.iscs.bozzys.api.UserCharacteristic
 import com.iscs.bozzys.ui.common.PageBase
 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.utils.DateUtil.getShowDateOrTime
 
@@ -47,8 +69,12 @@ class PageFace : PageBase() {
         }
         Column() {
             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
-    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)
+            })
         }
     }
 }

+ 32 - 1
app/src/main/java/com/iscs/bozzys/ui/pages/vm/VMFace.kt

@@ -50,6 +50,37 @@ class VMFace : VMBase() {
         }
     }
 
+    /**
+     * 删除特征数据
+     *
+     * @param face 特征数据
+     */
+    fun deleteFaceData(face: UserCharacteristic) {
+        viewModelScope.launch(Dispatchers.IO) {
+            loading.emit(StateLoading(show = true))
+            ApiRequest.deleteUserCharacteristic(mutableMapOf("ids" to face.id)).onSuccess {
+                delay(500)
+                loading.emit(StateLoading())
+                delay(100)
+                val list = _state.value.faceList.filter { it.id != face.id }.toMutableList()
+                _state.value = _state.value.copy(faceList = list)
+            }.onFailure {
+                delay(500)
+                loading.emit(StateLoading())
+                delay(100)
+                toast.emit(it.getResponse<Any>().msg)
+            }
+        }
+    }
+
+    fun showDeleteTips() {
+        _state.value = _state.value.copy(showDeleteTips = true)
+    }
+
+    fun hideDeleteTips() {
+        _state.value = _state.value.copy(showDeleteTips = false)
+    }
+
 }
 
 /**
@@ -57,4 +88,4 @@ class VMFace : VMBase() {
  *
  * @param faceList  人脸列表
  */
-data class StateFace(val faceList: MutableList<UserCharacteristic> = mutableListOf())
+data class StateFace(val faceList: MutableList<UserCharacteristic> = mutableListOf(), val showDeleteTips: Boolean = false)

+ 13 - 9
app/src/main/java/com/iscs/bozzys/ui/pages/vm/VMHome.kt

@@ -52,7 +52,7 @@ class VMHome : VMBase() {
     fun init() {
         initEvent()
         viewModelScope.launch {
-            _state.value = _state.value.copy(navs = listOf(TAB_HOME, TAB_TASKS, TAB_SETTINGS))
+             _state.value = _state.value.copy(navs = listOf(TAB_HOME))
             delay(500)
             refreshHome(true)
         }
@@ -132,21 +132,17 @@ class VMHome : VMBase() {
                 _state.value = _state.value.copy(isHomeTabRefresh = false)
                 delay(500)
                 loading.emit(StateLoading())
+                delay(100)
                 toast.emit("获取用户信息失败,请稍后重试")
                 return@launch
             }
-            // 获取到用户信息后即刷新导航栏数据
-            if (permissionRsp.data?.roles.isAdmin()) {
-                _state.value = _state.value.copy(navs = listOf(TAB_HOME, TAB_JOBS, TAB_TASKS, TAB_SETTINGS))
-            } else {
-                _state.value = _state.value.copy(navs = listOf(TAB_HOME, TAB_TASKS, TAB_SETTINGS))
-            }
             // 查询顶部的任务个数
             val statisticsRsp = ApiRequest.getTaskStatistics().getOrElse { it.getResponse() }
             if (!statisticsRsp.code.isCodeOk()) {
                 _state.value = _state.value.copy(isHomeTabRefresh = false)
                 delay(500)
                 loading.emit(StateLoading())
+                delay(100)
                 toast.emit(statisticsRsp.msg)
                 return@launch
             }
@@ -156,6 +152,7 @@ class VMHome : VMBase() {
                 _state.value = _state.value.copy(isHomeTabRefresh = false)
                 delay(500)
                 loading.emit(StateLoading())
+                delay(100)
                 toast.emit(msgCountRsp.msg)
                 return@launch
             }
@@ -167,6 +164,7 @@ class VMHome : VMBase() {
                 _state.value = _state.value.copy(isHomeTabRefresh = false)
                 delay(500)
                 loading.emit(StateLoading())
+                delay(100)
                 toast.emit(jobRsp.msg)
                 return@launch
             }
@@ -180,6 +178,7 @@ class VMHome : VMBase() {
                 _state.value = _state.value.copy(isHomeTabRefresh = false)
                 delay(500)
                 loading.emit(StateLoading())
+                delay(100)
                 toast.emit(statisticsRsp.msg)
                 return@launch
             }
@@ -189,12 +188,19 @@ class VMHome : VMBase() {
                 _state.value = _state.value.copy(isHomeTabRefresh = false)
                 delay(500)
                 loading.emit(StateLoading())
+                delay(100)
                 toast.emit(msgRsp.msg)
                 return@launch
             }
             permissionRsp.data?.user?.avatar.saveUserAvatar()
             permissionRsp.data?.roleList?.saveRoleList()
+            delay(500)
+            loading.emit(StateLoading())
+            delay(100)
+            // 获取到用户信息后即刷新导航栏数据
+            val navs = if (permissionRsp.data?.roles.isAdmin()) { listOf(TAB_HOME, TAB_JOBS, TAB_TASKS, TAB_SETTINGS) } else { listOf(TAB_HOME, TAB_TASKS, TAB_SETTINGS) }
             _state.value = _state.value.copy(
+                navs = navs,
                 homeTasks = ArrayList(tasksRsp.data?.list ?: emptyList()),
                 messageList = ArrayList(msgRsp.data?.list ?: emptyList()),
                 todoCountRunning = statisticsRsp.data?.inProgressCount ?: 0,
@@ -208,8 +214,6 @@ class VMHome : VMBase() {
             updateUnReadCount(1, jobRsp.data?.total ?: 0)
             // 更新任务数字
             updateUnReadCount(2, statisticsRsp.data?.inProgressCount ?: 0)
-            delay(500)
-            loading.emit(StateLoading())
             // 去加载作业和任务数据
             done()
         }

+ 4 - 2
app/src/main/java/com/iscs/bozzys/ui/theme/Theme.kt

@@ -25,7 +25,8 @@ private val DarkColorScheme = darkColorScheme(
     onSurfaceVariant = Main,
     surfaceContainerHigh = Color.Black,
     background = Color(0xFFF8F8F8),
-    surfaceContainer = Color.White
+    surfaceContainer = Color.White,
+    surfaceTint = Text
 )
 
 // 标准主题配置
@@ -36,7 +37,8 @@ private val LightColorScheme = lightColorScheme(
     onSurfaceVariant = Main,
     surfaceContainerHigh = Color.White,
     background = Color(0xFFF8F8F8),
-    surfaceContainer = Color.White
+    surfaceContainer = Color.White,
+    surfaceTint = Text
 )
 
 @OptIn(ExperimentalFoundationApi::class)