瀏覽代碼

@fun: Project

bai 3 年之前
父節點
當前提交
d4d3b36e1e

+ 10 - 0
app/src/main/java/com/ys/bdtp/adm/mvvm/model/Fail.kt

@@ -0,0 +1,10 @@
+package com.ys.bdtp.adm.mvvm.model
+
+/**
+ * 网络请求失败类型
+ *
+ * @author bai
+ * @param code 失败编码
+ * @param message 失败信息
+ */
+data class Fail(val code: String, val message: String)

+ 2 - 2
app/src/main/java/com/ys/bdtp/adm/mvvm/model/Http.kt

@@ -13,9 +13,9 @@ suspend fun <T> request(block: suspend () -> Model<T>): Response<T> {
         if (model.result == "success") {
             Response.create(model.data)
         } else {
-            Response.create(model.message ?: "request ok, but no data")
+            Response.create(Fail(model.result, model.message ?: "request ok, but no data"))
         }
     } catch (t: Throwable) {
-        Response.create(t.message ?: "request crash and nothing")
+        Response.create(Fail("catch", t.message ?: "request catch and nothing"))
     }
 }

+ 3 - 3
app/src/main/java/com/ys/bdtp/adm/mvvm/model/Response.kt

@@ -11,8 +11,8 @@ sealed class Response<T> {
             return SuccessResponse(data)
         }
 
-        fun <T> create(message: String): FailureResponse<T> {
-            return FailureResponse(message)
+        fun <T> create(fail: Fail): FailureResponse<T> {
+            return FailureResponse(fail)
         }
     }
 }
@@ -30,4 +30,4 @@ data class SuccessResponse<T>(val data: T) : Response<T>()
  *
  * @author bai
  */
-data class FailureResponse<T>(val message: String) : Response<T>()
+data class FailureResponse<T>(val fail: Fail) : Response<T>()

+ 2 - 2
app/src/main/java/com/ys/bdtp/adm/mvvm/ui/screen/home/HomeScreen.kt

@@ -9,7 +9,7 @@ import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.dp
 import com.ys.bdtp.adm.mvvm.ui.compose.*
-import com.ys.bdtp.adm.mvvm.ui.screen.project.ProjectScreen
+import com.ys.bdtp.adm.mvvm.ui.screen.project.Project
 
 @OptIn(ExperimentalFoundationApi::class)
 @Composable
@@ -30,7 +30,7 @@ fun HomeScreen() {
         )
 
         Content {
-            ProjectScreen()
+            Project()
         }
     }
 }

+ 2 - 2
app/src/main/java/com/ys/bdtp/adm/mvvm/ui/screen/login/LoginContent.kt

@@ -207,10 +207,10 @@ fun LoginContent() {
                             }
                         }
                     },
-                    failure = { message ->
+                    failure = { fail ->
                         scope.launch {
                             snackbarHostState
-                                .showSnackbar(message = message)
+                                .showSnackbar(message = fail.message)
                         }
                     }
                 )

+ 2 - 2
app/src/main/java/com/ys/bdtp/adm/mvvm/ui/screen/main/Main.kt

@@ -9,7 +9,7 @@ import androidx.navigation.compose.composable
 import androidx.navigation.compose.rememberNavController
 import com.ys.bdtp.adm.mvvm.ui.screen.flash.Flash
 import com.ys.bdtp.adm.mvvm.ui.screen.login.LoginScreen
-import com.ys.bdtp.adm.mvvm.ui.screen.project.ProjectScreen
+import com.ys.bdtp.adm.mvvm.ui.screen.project.Project
 
 
 
@@ -34,7 +34,7 @@ fun Main() {
                 LoginScreen()
             }
             composable(Zygote.Project) {
-                ProjectScreen()
+                Project()
             }
         }
 

+ 88 - 1
app/src/main/java/com/ys/bdtp/adm/mvvm/ui/screen/project/Project.kt

@@ -1,9 +1,96 @@
 package com.ys.bdtp.adm.mvvm.ui.screen.project
 
-import androidx.compose.runtime.Composable
+import android.net.ConnectivityManager
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.ys.bdtp.adm.app.isNet
+import com.ys.bdtp.adm.app.theme.underColor
+import com.ys.bdtp.adm.mvvm.model.FailureResponse
+import com.ys.bdtp.adm.mvvm.model.SuccessResponse
+import com.ys.bdtp.adm.mvvm.model.vo.request.Account
+import com.ys.bdtp.adm.mvvm.ui.compose.Blank
+import com.ys.bdtp.adm.mvvm.ui.compose.Div
+import com.ys.bdtp.adm.mvvm.ui.compose.Head
+import com.ys.bdtp.adm.mvvm.ui.compose.HeadRight
+import com.ys.bdtp.adm.mvvm.vm.project.ProjectViewModel
+import kotlinx.coroutines.launch
+import org.kodein.di.compose.rememberInstance
+import org.kodein.di.compose.rememberViewModel
 
 
+@OptIn(ExperimentalFoundationApi::class)
 @Composable
 fun Project() {
+    val vm by rememberViewModel<ProjectViewModel>()
+    val cm by rememberInstance<ConnectivityManager>()
 
+    var account by remember { mutableStateOf<Account?>(null) }
+    val scope = rememberCoroutineScope()
+
+    LaunchedEffect(Unit) {
+        // isNet 联网,进行网络通信,获取账号信息也判断 token是否能用
+        if (isNet(cm)) {
+            scope.launch {
+                when (val response = vm.getAccount()) {
+                    is SuccessResponse -> {
+                        val a = response.data
+                        account = a
+                        vm.setCurrentAccount(a)
+                    }
+
+                    is FailureResponse -> {
+                        // TODO 根据消息 进行跳转
+                    }
+                }
+            }
+        }
+    }
+
+    Column(
+        modifier = Modifier.fillMaxSize()
+    ) {
+        Head(
+            left = {
+                ProjectHeadLeft()
+            },
+            right = {
+                HeadRight(
+                    role = { "项目管家" },
+                    click = {}
+                )
+            }
+        )
+        Div(Div.Row)
+        Column(
+            modifier = Modifier
+                .fillMaxHeight()
+                .wrapContentWidth()
+                .background(underColor)
+                .padding(horizontal = 32.dp, vertical = 40.dp)
+        ) {
+            account?.let {
+                if (it.projects.isEmpty()) {
+                    Blank()
+                } else {
+                    ProjectContent(it.projects)
+                }
+            }
+        }
+    }
+}
+
+@Preview(
+    widthDp = 1280,
+    heightDp = 800,
+    showBackground = true,
+    backgroundColor = 0xFFFFFFFF
+)
+@Composable
+fun PreviewProject() {
+    Project()
 }

+ 0 - 96
app/src/main/java/com/ys/bdtp/adm/mvvm/ui/screen/project/ProjectScreen.kt

@@ -1,96 +0,0 @@
-package com.ys.bdtp.adm.mvvm.ui.screen.project
-
-import android.net.ConnectivityManager
-import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.background
-import androidx.compose.foundation.layout.*
-import androidx.compose.runtime.*
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import com.ys.bdtp.adm.app.isNet
-import com.ys.bdtp.adm.app.theme.underColor
-import com.ys.bdtp.adm.mvvm.model.FailureResponse
-import com.ys.bdtp.adm.mvvm.model.SuccessResponse
-import com.ys.bdtp.adm.mvvm.model.vo.request.Account
-import com.ys.bdtp.adm.mvvm.ui.compose.Blank
-import com.ys.bdtp.adm.mvvm.ui.compose.Div
-import com.ys.bdtp.adm.mvvm.ui.compose.Head
-import com.ys.bdtp.adm.mvvm.ui.compose.HeadRight
-import com.ys.bdtp.adm.mvvm.vm.project.ProjectViewModel
-import kotlinx.coroutines.launch
-import org.kodein.di.compose.rememberInstance
-import org.kodein.di.compose.rememberViewModel
-
-
-@OptIn(ExperimentalFoundationApi::class)
-@Composable
-fun ProjectScreen() {
-    val vm by rememberViewModel<ProjectViewModel>()
-    val cm by rememberInstance<ConnectivityManager>()
-
-    var account by remember { mutableStateOf<Account?>(null) }
-    val scope = rememberCoroutineScope()
-
-    LaunchedEffect(Unit) {
-        // isNet 联网,进行网络通信,获取账号信息也判断 token是否能用
-        if (isNet(cm)) {
-            scope.launch {
-                when (val response = vm.getAccount()) {
-                    is SuccessResponse -> {
-                        val a = response.data
-                        account = a
-                        vm.setCurrentAccount(a)
-                    }
-
-                    is FailureResponse -> {
-
-                    }
-                }
-            }
-        }
-    }
-
-    Column(
-        modifier = Modifier.fillMaxSize()
-    ) {
-        Head(
-            left = {
-                ProjectHeadLeft()
-            },
-            right = {
-                HeadRight(
-                    role = { "项目管家" },
-                    click = {}
-                )
-            }
-        )
-        Div(Div.Row)
-        Column(
-            modifier = Modifier
-                .fillMaxHeight()
-                .wrapContentWidth()
-                .background(underColor)
-                .padding(horizontal = 32.dp, vertical = 40.dp)
-        ) {
-            account?.let {
-                if (it.projects.isEmpty()) {
-                    Blank()
-                } else {
-                    ProjectContent(it.projects)
-                }
-            }
-        }
-    }
-}
-
-@Preview(
-    widthDp = 1280,
-    heightDp = 800,
-    showBackground = true,
-    backgroundColor = 0xFFFFFFFF
-)
-@Composable
-fun PreviewProject() {
-    ProjectScreen()
-}

+ 3 - 2
app/src/main/java/com/ys/bdtp/adm/mvvm/vm/flash/FlashViewModel.kt

@@ -2,6 +2,7 @@ package com.ys.bdtp.adm.mvvm.vm.flash
 
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
+import com.ys.bdtp.adm.mvvm.model.Fail
 import com.ys.bdtp.adm.mvvm.model.FailureResponse
 import com.ys.bdtp.adm.mvvm.model.SuccessResponse
 import com.ys.bdtp.adm.mvvm.model.db.entity.UserEntity
@@ -32,7 +33,7 @@ class FlashViewModel(private val repo: FlashRepository) : ViewModel() {
      * @param success 获取成功回调
      * @param failure 获取失败回调
      */
-    suspend fun getAccount(success: (Account) -> Unit,  failure: (String) -> Unit) {
+    suspend fun getAccount(success: (Account) -> Unit, failure: (Fail) -> Unit) {
         viewModelScope.launch {
             when (val response = repo.getAccount()) {
                 is SuccessResponse -> {
@@ -40,7 +41,7 @@ class FlashViewModel(private val repo: FlashRepository) : ViewModel() {
                 }
 
                 is FailureResponse -> {
-                    failure(response.message)
+                    failure(response.fail)
                 }
             }
         }

+ 3 - 2
app/src/main/java/com/ys/bdtp/adm/mvvm/vm/login/LoginViewModel.kt

@@ -2,6 +2,7 @@ package com.ys.bdtp.adm.mvvm.vm.login
 
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
+import com.ys.bdtp.adm.mvvm.model.Fail
 import com.ys.bdtp.adm.mvvm.model.FailureResponse
 import com.ys.bdtp.adm.mvvm.model.SuccessResponse
 import com.ys.bdtp.adm.mvvm.model.vo.request.Login
@@ -19,7 +20,7 @@ class LoginViewModel(private val repo: LoginRepository) : ViewModel() {
     fun login(
         login: Login,
         success: (String) -> Unit,
-        failure: (String) -> Unit,
+        failure: (Fail) -> Unit,
     ) {
         viewModelScope.launch {
             when (val response = repo.login(login)) {
@@ -27,7 +28,7 @@ class LoginViewModel(private val repo: LoginRepository) : ViewModel() {
                     success(response.data)
                 }
                 is FailureResponse -> {
-                    failure(response.message)
+                    failure(response.fail)
                 }
             }
         }

+ 3 - 2
app/src/main/java/com/ys/bdtp/adm/mvvm/vm/project/ProjectViewModel.kt

@@ -2,6 +2,7 @@ package com.ys.bdtp.adm.mvvm.vm.project
 
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
+import com.ys.bdtp.adm.mvvm.model.Fail
 import com.ys.bdtp.adm.mvvm.model.FailureResponse
 import com.ys.bdtp.adm.mvvm.model.Response
 import com.ys.bdtp.adm.mvvm.model.SuccessResponse
@@ -28,14 +29,14 @@ class ProjectViewModel(private val repo: ProjectRepository) : ViewModel() {
     /**
      * 获取账号信息
      */
-    suspend fun getAccount(success: (Account) -> Unit, failure: (String) -> Unit) {
+    suspend fun getAccount(success: (Account) -> Unit, failure: (Fail) -> Unit) {
         viewModelScope.launch {
             when (val response = repo.getAccount()) {
                 is SuccessResponse -> {
                     success(response.data)
                 }
                 is FailureResponse -> {
-                    failure(response.message)
+                    failure(response.fail)
                 }
             }
         }