From a68a79ddb524e1f724f2dcb1c3fbbdd1646441ba Mon Sep 17 00:00:00 2001
From: pan <1029559041@qq.com>
Date: Sat, 22 May 2021 20:22:52 +0800
Subject: [PATCH] =?UTF-8?q?=E7=95=8C=E9=9D=A2=E6=A1=86=E6=9E=B6=E4=BC=98?=
=?UTF-8?q?=E5=8C=96=20=E5=A2=9E=E5=8A=A0=E7=A4=BE=E5=9B=A2=E7=AE=A1?=
=?UTF-8?q?=E7=90=86-=E7=A4=BE=E5=9B=A2=E4=BF=A1=E6=81=AF=E7=AE=A1?=
=?UTF-8?q?=E7=90=86=E7=95=8C=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
background/src/main/AndroidManifest.xml | 6 +
.../com/gyf/csams/account/ui/LoginActivity.kt | 6 +-
.../model/AssociationManagementViewModel.kt | 96 ++++++++++++++
.../com/gyf/csams/main/model/MenuViewModel.kt | 15 +++
.../main/ui/AssociationManagementActivity.kt | 124 ++++++++++++++++++
.../gyf/csams/main/ui/DepartmentActivity.kt | 17 ++-
.../com/gyf/csams/main/ui/MainActivity.kt | 30 +++--
.../main/ui/ManagementOfficerActivity.kt | 20 +--
.../com/gyf/csams/main/ui/MenuActivity.kt | 79 +++++++++++
background/src/main/res/values-en/strings.xml | 1 +
background/src/main/res/values-zh/strings.xml | 1 +
background/src/main/res/values/strings.xml | 1 +
.../csams/account/model/AccountViewModel.kt | 46 +++----
.../gyf/csams/account/ui/AccountActivity.kt | 94 +++++++------
.../activity/model/ActivityDetailViewModel.kt | 2 +-
.../activity/ui/ActivityDetailActivity.kt | 7 +-
.../gyf/csams/activity/ui/ApplyActActivity.kt | 3 +-
.../association/model/AssociationViewModel.kt | 2 +-
.../csams/association/model/ExamViewModel.kt | 2 +-
.../association/ui/AssociationActivity.kt | 28 ++--
.../gyf/csams/association/ui/ExamActivity.kt | 8 +-
.../csams/association/ui/ReNameActivity.kt | 8 +-
.../association/ui/RegAssociationActivity.kt | 29 ++--
.../com/gyf/csams/main/model/MainViewModel.kt | 16 +--
.../com/gyf/csams/main/ui/MainActivity.kt | 17 +--
.../message/model/SysMessageViewModel.kt | 2 +-
.../gyf/csams/message/ui/MessageActivity.kt | 4 +-
.../csams/message/ui/SysMessageActivity.kt | 4 +-
.../java/com/gyf/csams/uikit/ViewModel.kt | 18 +--
lib/src/main/java/com/gyf/lib/ScrollList.kt | 18 +++
.../main/java/com/gyf/lib/uikit/MainFrame.kt | 13 +-
.../java/com/gyf/lib/util/BottomButton.kt | 5 +-
32 files changed, 517 insertions(+), 205 deletions(-)
create mode 100644 background/src/main/java/com/gyf/csams/main/model/AssociationManagementViewModel.kt
create mode 100644 background/src/main/java/com/gyf/csams/main/model/MenuViewModel.kt
create mode 100644 background/src/main/java/com/gyf/csams/main/ui/AssociationManagementActivity.kt
create mode 100644 background/src/main/java/com/gyf/csams/main/ui/MenuActivity.kt
create mode 100644 lib/src/main/java/com/gyf/lib/ScrollList.kt
diff --git a/background/src/main/AndroidManifest.xml b/background/src/main/AndroidManifest.xml
index 8324f49..e171ed9 100644
--- a/background/src/main/AndroidManifest.xml
+++ b/background/src/main/AndroidManifest.xml
@@ -32,6 +32,12 @@
+
+
\ No newline at end of file
diff --git a/background/src/main/java/com/gyf/csams/account/ui/LoginActivity.kt b/background/src/main/java/com/gyf/csams/account/ui/LoginActivity.kt
index 989e5d9..26da88a 100644
--- a/background/src/main/java/com/gyf/csams/account/ui/LoginActivity.kt
+++ b/background/src/main/java/com/gyf/csams/account/ui/LoginActivity.kt
@@ -19,9 +19,8 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import com.gyf.csams.account.model.LoginViewModel
import com.gyf.csams.main.ui.MainActivity
import com.gyf.lib.uikit.BaseTextField
-import com.gyf.lib.uikit.Body
+import com.gyf.lib.uikit.BodyS
import com.gyf.lib.uikit.MainBoxFrame
-import com.gyf.lib.uikit.ShowSnackbar
/**
* 登录
@@ -32,7 +31,7 @@ class LoginActivity : ComponentActivity() {
super.onCreate(savedInstanceState)
setContent {
- Body { scaffoldState ->
+ BodyS {
val context = LocalContext.current as LoginActivity
MainBoxFrame(
background = { /*TODO 背景图*/ },
@@ -57,7 +56,6 @@ class LoginActivity : ComponentActivity() {
}) {
Text(text = model.login)
}
- ShowSnackbar(scaffoldState = scaffoldState)
}
}
}
diff --git a/background/src/main/java/com/gyf/csams/main/model/AssociationManagementViewModel.kt b/background/src/main/java/com/gyf/csams/main/model/AssociationManagementViewModel.kt
new file mode 100644
index 0000000..0487460
--- /dev/null
+++ b/background/src/main/java/com/gyf/csams/main/model/AssociationManagementViewModel.kt
@@ -0,0 +1,96 @@
+package com.gyf.csams.main.model
+
+import androidx.lifecycle.viewModelScope
+import com.gyf.lib.ScrollList
+import com.gyf.lib.util.randomChinese
+import kotlinx.coroutines.launch
+
+/**
+ * 社团级别
+ *
+ */
+enum class AssociationLevel {
+ A,
+ B,
+ C,
+ D
+}
+
+/**
+ * 所属院系
+ *
+ */
+enum class AssociationFaculty(val desc: String, val range: IntRange) {
+ ForeignLanguageDept("外语系", 0..0),
+ CivilEngineeringDept("土木工程", 1..10),
+ SEM("经理管理学院", 11..20),
+ MechanicalEngineeringDept("机械工程", 21..30),
+ TransportationDept("交通运输", 31..40),
+ ArchitectureAndArts("建筑与艺术", 41..50),
+ ElectricalDept("电气", 51..60),
+ MaterialsDept("材料", 61..70),
+ MessageDept("信息", 71..80),
+ MathematicsDept("数理", 81..90),
+ GraduateStudent("研究生", 91..99)
+}
+
+/**
+ * 社团
+ *
+ * @property name 社团名称
+ */
+data class AssociationVo(
+ val associationId: Long, val name: String, val commander: String,
+ val faculty: AssociationFaculty, val level: AssociationLevel, val desc: String
+)
+
+/**
+ * 数据状态管理
+ *
+ */
+class AssociationManagementViewModel : ScrollList() {
+ override val initSize: Int = 10
+
+ init {
+ load()
+ }
+
+ override fun load() {
+ viewModelScope.launch {
+ _data.value?.apply {
+ repeat(initSize) {
+ add(
+ AssociationVo(
+ associationId = (0..65535L).random(),
+ name = randomChinese(5),
+ commander = randomChinese(3),
+ faculty = AssociationFaculty.values().random(),
+ level = AssociationLevel.values().random(),
+ desc = randomChinese(20)
+ )
+ )
+ }
+ }
+ }
+ }
+
+ override fun loadMore(callback: (message: String) -> Unit) {
+ TODO("Not yet implemented")
+ }
+
+ /**
+ * TODO 更新社团级别
+ *
+ * @param level
+ */
+ fun update(associationVo: AssociationVo, level: AssociationLevel) {
+ _data.value?.apply {
+ val i = indexOf(associationVo)
+ set(i, associationVo.copy(level = level))
+ val new = mutableListOf()
+ new.addAll(this)
+ clear()
+ _data.postValue(new)
+ }
+ }
+}
\ No newline at end of file
diff --git a/background/src/main/java/com/gyf/csams/main/model/MenuViewModel.kt b/background/src/main/java/com/gyf/csams/main/model/MenuViewModel.kt
new file mode 100644
index 0000000..9e01c6a
--- /dev/null
+++ b/background/src/main/java/com/gyf/csams/main/model/MenuViewModel.kt
@@ -0,0 +1,15 @@
+package com.gyf.csams.main.model
+
+import android.app.Activity
+import androidx.lifecycle.ViewModel
+import com.gyf.csams.main.ui.AssociationManagementActivity
+
+enum class MenuType(val desc: String, val clazz: Map>) {
+ //老师
+ //总部长
+ Association("社团管理", mapOf("社团信息管理" to AssociationManagementActivity::class.java))
+}
+
+class MenuViewModel : ViewModel() {
+
+}
\ No newline at end of file
diff --git a/background/src/main/java/com/gyf/csams/main/ui/AssociationManagementActivity.kt b/background/src/main/java/com/gyf/csams/main/ui/AssociationManagementActivity.kt
new file mode 100644
index 0000000..18a1880
--- /dev/null
+++ b/background/src/main/java/com/gyf/csams/main/ui/AssociationManagementActivity.kt
@@ -0,0 +1,124 @@
+package com.gyf.csams.main.ui
+
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.material.*
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.livedata.observeAsState
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import androidx.lifecycle.viewmodel.compose.viewModel
+import com.gyf.csams.main.model.AssociationLevel
+import com.gyf.csams.main.model.AssociationManagementViewModel
+import com.gyf.lib.uikit.BodyS
+import com.gyf.lib.uikit.MainBoxFrame
+import com.gyf.lib.uikit.ScaffoldModel
+
+/**
+ * 社团管理
+ *
+ */
+class AssociationManagementActivity : ComponentActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ setContent {
+ BodyS {
+ MainBoxFrame(background = { /*TODO*/ }) {
+ val model: AssociationManagementViewModel = viewModel()
+ val data by model.data.observeAsState()
+ val listState = rememberLazyListState()
+ val scaffoldModel: ScaffoldModel = viewModel()
+ LazyColumn(modifier = Modifier.fillMaxSize(), state = listState) {
+ data?.forEach {
+ it.apply {
+ item {
+ var expanded by remember {
+ mutableStateOf(false)
+ }
+ Card(backgroundColor = MaterialTheme.colors.background) {
+ Column(
+ modifier = Modifier.padding(10.dp),
+ verticalArrangement = Arrangement.SpaceBetween
+ ) {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween
+ ) {
+ Text(
+ text = "$associationId",
+ style = MaterialTheme.typography.h6
+ )
+ Text(
+ text = name,
+ style = MaterialTheme.typography.h4
+ )
+ Spacer(modifier = Modifier)
+ }
+ Spacer(modifier = Modifier.height(5.dp))
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Text(
+ text = commander,
+ style = MaterialTheme.typography.h5
+ )
+ Text(
+ text = faculty.desc,
+ style = MaterialTheme.typography.h5
+ )
+
+ OutlinedButton(onClick = {
+ expanded = true
+ }) {
+ Text(
+ text = level.name,
+ style = MaterialTheme.typography.h5
+ )
+ DropdownMenu(
+ expanded = expanded,
+ onDismissRequest = { /*TODO*/ }) {
+ AssociationLevel.values().forEach {
+ DropdownMenuItem(onClick = {
+ model.update(
+ associationVo = this@apply,
+ level = it
+ )
+ expanded = false
+ }) {
+ Text(text = it.name)
+ }
+ }
+ }
+ }
+ }
+ Spacer(modifier = Modifier.height(5.dp))
+ Card(
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(50.dp)
+ ) {
+ Text(text = desc)
+ }
+ }
+ }
+ Spacer(modifier = Modifier.height(10.dp))
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/background/src/main/java/com/gyf/csams/main/ui/DepartmentActivity.kt b/background/src/main/java/com/gyf/csams/main/ui/DepartmentActivity.kt
index ef305de..58ef387 100644
--- a/background/src/main/java/com/gyf/csams/main/ui/DepartmentActivity.kt
+++ b/background/src/main/java/com/gyf/csams/main/ui/DepartmentActivity.kt
@@ -1,5 +1,6 @@
package com.gyf.csams.main.ui
+import android.content.Intent
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
@@ -12,9 +13,10 @@ import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.gyf.csams.R
-import com.gyf.lib.uikit.Body
+import com.gyf.lib.uikit.BodyS
import com.gyf.lib.uikit.MainColumnFrame
@@ -27,9 +29,7 @@ class DepartmentActivity : ComponentActivity() {
super.onCreate(savedInstanceState)
setContent {
- Body { _ ->
-
-
+ BodyS {
MainColumnFrame(background = { /*TODO*/ }) {
val weight = 0.1F
val departWeight = 0.2F
@@ -83,10 +83,9 @@ class DepartmentActivity : ComponentActivity() {
horizontalArrangement = Arrangement.Center
) {
OutlinedButton(onClick = { dialogContent = null }) {
- Text(text = context.getString(R.string.close))
+ Text(text = stringResource(id = R.string.close))
}
}
-
})
}
@@ -152,7 +151,11 @@ class DepartmentActivity : ComponentActivity() {
verticalArrangement = Arrangement.SpaceBetween
) {
RowItem(text = "部门部长:")
- RowItem(text = "部门干事管理")
+ OutlinedButton(modifier = Modifier.fillMaxWidth(), onClick = {
+ startActivity(Intent(applicationContext, ManagementOfficerActivity::class.java))
+ }) {
+ Text(text = stringResource(id = R.string.management_officer))
+ }
RowItem(text = "部门总人数:")
}
}
diff --git a/background/src/main/java/com/gyf/csams/main/ui/MainActivity.kt b/background/src/main/java/com/gyf/csams/main/ui/MainActivity.kt
index 1702242..bd1f3e5 100644
--- a/background/src/main/java/com/gyf/csams/main/ui/MainActivity.kt
+++ b/background/src/main/java/com/gyf/csams/main/ui/MainActivity.kt
@@ -14,23 +14,21 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import com.gyf.csams.R
import com.gyf.csams.main.model.MainViewModel
-import com.gyf.lib.uikit.Body
-import com.gyf.lib.uikit.MainColumnFrame
-import com.gyf.lib.uikit.Profile
-import com.gyf.lib.uikit.ShowSnackbar
+import com.gyf.csams.main.model.MenuType
+import com.gyf.lib.uikit.*
import com.gyf.lib.uikit.theme.CSAMSTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
- Body { scaffoldState ->
+ BodyS {
val model: MainViewModel = viewModel()
val person by model.person.observeAsState()
MainColumnFrame(background = { /*TODO*/ }) {
@@ -41,25 +39,31 @@ class MainActivity : ComponentActivity() {
.padding(10.dp), personInfoVo = it
)
}
- val context = LocalContext.current
Column(
modifier = Modifier.weight(0.7F),
verticalArrangement = Arrangement.SpaceEvenly
) {
OutlinedButton(onClick = {
- context.startActivity(Intent(context, DepartmentActivity::class.java))
+ startActivity(Intent(this@MainActivity, DepartmentActivity::class.java))
}, modifier = Modifier.fillMaxWidth()) {
- Text(text = context.getString(R.string.department_management))
+ Text(text = stringResource(id = R.string.department_management))
}
- OutlinedButton(onClick = { /*TODO*/ }, modifier = Modifier.fillMaxWidth()) {
- Text(text = context.getString(R.string.association_management))
+ OutlinedButton(onClick = {
+ startActivity(
+ Intent(
+ this@MainActivity,
+ MenuActivity::class.java
+ ).apply {
+ putExtra(MenuType::name.name, MenuType.Association)
+ })
+ }, modifier = Modifier.fillMaxWidth()) {
+ Text(text = stringResource(id = R.string.association_management))
}
OutlinedButton(onClick = { /*TODO*/ }, modifier = Modifier.fillMaxWidth()) {
- Text(text = context.getString(R.string.activity_management))
+ Text(text = stringResource(id = R.string.activity_management))
}
}
}
- ShowSnackbar(scaffoldState = scaffoldState)
}
}
}
diff --git a/background/src/main/java/com/gyf/csams/main/ui/ManagementOfficerActivity.kt b/background/src/main/java/com/gyf/csams/main/ui/ManagementOfficerActivity.kt
index 3928eea..56222fc 100644
--- a/background/src/main/java/com/gyf/csams/main/ui/ManagementOfficerActivity.kt
+++ b/background/src/main/java/com/gyf/csams/main/ui/ManagementOfficerActivity.kt
@@ -25,7 +25,10 @@ import com.gyf.csams.main.model.Duty
import com.gyf.csams.main.model.ManagementOfficerModel
import com.gyf.csams.main.model.MinisterVo
import com.gyf.csams.main.model.OfficerVo
-import com.gyf.lib.uikit.*
+import com.gyf.lib.uikit.BodyS
+import com.gyf.lib.uikit.MainColumnFrame
+import com.gyf.lib.uikit.Profile
+import com.gyf.lib.uikit.ScaffoldModel
import com.orhanobut.logger.Logger
/**
@@ -37,7 +40,7 @@ class ManagementOfficerActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
- Body { scaffoldState ->
+ BodyS {
MainColumnFrame(background = { /*TODO*/ }) {
val weight = 1 / 3F
val model: ManagementOfficerModel = viewModel()
@@ -63,8 +66,6 @@ class ManagementOfficerActivity : ComponentActivity() {
officerVoList = publicRelationsDepartment
)
}
-
- ShowSnackbar(scaffoldState = scaffoldState)
}
}
}
@@ -132,7 +133,7 @@ class ManagementOfficerActivity : ComponentActivity() {
desc = it.value.mobile
)
) {
-
+ Logger.i("expanded=$expanded")
Text(
text = it.value.duty.desc,
modifier = Modifier.clickable(onClick = {
@@ -141,14 +142,7 @@ class ManagementOfficerActivity : ComponentActivity() {
.update(message = context.getString(R.string.update_duty_error))
})
)
-// Text(
-// text = it.duty.desc,
-// modifier = Modifier.clickable(onClick = {
-// if (duty.desc != Duty.Minister.desc) expanded =
-// true else scaffoldModel
-// .update(message = context.getString(R.string.update_duty_error))
-// })
-// )
+
DropdownMenu(
expanded = expanded,
onDismissRequest = { /*TODO*/ }) {
diff --git a/background/src/main/java/com/gyf/csams/main/ui/MenuActivity.kt b/background/src/main/java/com/gyf/csams/main/ui/MenuActivity.kt
new file mode 100644
index 0000000..afed155
--- /dev/null
+++ b/background/src/main/java/com/gyf/csams/main/ui/MenuActivity.kt
@@ -0,0 +1,79 @@
+package com.gyf.csams.main.ui
+
+import android.app.Activity
+import android.content.Intent
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.border
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.*
+import androidx.compose.material.Card
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import com.gyf.csams.main.model.MenuType
+import com.gyf.lib.uikit.BodyS
+import com.gyf.lib.uikit.MainBoxFrame
+
+/**
+ * 菜单
+ *
+ */
+class MenuActivity : ComponentActivity() {
+
+ lateinit var menuType: MenuType
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ menuType = intent?.getSerializableExtra(MenuType::name.name) as MenuType
+
+ setContent {
+ BodyS {
+ MainBoxFrame(background = { /*TODO*/ }, contentAlignment = Alignment.Center) {
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .border(width = 1.dp, color = MaterialTheme.colors.onBackground)
+ .padding(10.dp), verticalArrangement = Arrangement.SpaceAround
+ ) {
+ menuType.clazz.entries.chunked(2).forEach {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceEvenly
+ ) {
+ MenuItem(menuName = it[0].key, clazz = it[0].value)
+ if (it.size == 2) {
+ MenuItem(menuName = it[1].key, clazz = it[1].value)
+ } else {
+ Spacer(modifier = Modifier.size(100.dp))
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Composable
+ private fun MenuItem(menuName: String, clazz: Class) {
+ Card(
+ modifier = Modifier
+ .size(100.dp)
+ .clickable(onClick = {
+ startActivity(Intent(this, clazz))
+ }),
+ backgroundColor = MaterialTheme.colors.background
+ ) {
+ Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
+ Text(text = menuName)
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/background/src/main/res/values-en/strings.xml b/background/src/main/res/values-en/strings.xml
index 5e5c3e9..16f5561 100644
--- a/background/src/main/res/values-en/strings.xml
+++ b/background/src/main/res/values-en/strings.xml
@@ -17,4 +17,5 @@
职务
导员
只能调整干事职务!
+ 部门干事管理
\ No newline at end of file
diff --git a/background/src/main/res/values-zh/strings.xml b/background/src/main/res/values-zh/strings.xml
index 5e5c3e9..16f5561 100644
--- a/background/src/main/res/values-zh/strings.xml
+++ b/background/src/main/res/values-zh/strings.xml
@@ -17,4 +17,5 @@
职务
导员
只能调整干事职务!
+ 部门干事管理
\ No newline at end of file
diff --git a/background/src/main/res/values/strings.xml b/background/src/main/res/values/strings.xml
index 5e5c3e9..16f5561 100644
--- a/background/src/main/res/values/strings.xml
+++ b/background/src/main/res/values/strings.xml
@@ -17,4 +17,5 @@
职务
导员
只能调整干事职务!
+ 部门干事管理
\ No newline at end of file
diff --git a/foreground/src/main/java/com/gyf/csams/account/model/AccountViewModel.kt b/foreground/src/main/java/com/gyf/csams/account/model/AccountViewModel.kt
index 8f5be46..a9f9b23 100644
--- a/foreground/src/main/java/com/gyf/csams/account/model/AccountViewModel.kt
+++ b/foreground/src/main/java/com/gyf/csams/account/model/AccountViewModel.kt
@@ -16,20 +16,19 @@ import com.gyf.csams.account.ui.AccountRoute
import com.gyf.csams.util.AppDatabase
import com.gyf.csams.util.SimpleCallback
import com.gyf.csams.util.TokenResDto
+import com.gyf.lib.uikit.ScaffoldModel
import com.gyf.lib.uikit.StringForm
import com.gyf.lib.util.ApiResponse
import com.gyf.lib.util.HttpClient
import com.orhanobut.logger.Logger
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
-import kotlinx.serialization.Serializable
/**
* 响应自动生成密码
*
* @property password
*/
-@Serializable
data class UserResDto(val password: String)
/**
@@ -69,12 +68,16 @@ class AccountViewModel(application: Application) : AndroidViewModel(application)
val welcomeStart = "同学您好\n"
val welcomeEnd = "欢迎使用"
+ lateinit var scaffoldModel: ScaffoldModel
+
//学号
val studentId = object : StringForm(formDesc = "学号", textLength = 8) {
override fun onChange(value: String) {
super.onChange(value)
viewModelScope.launch {
- checkRepeat()
+ checkRepeat {
+ scaffoldModel.update(message = it)
+ }
}
}
}
@@ -128,12 +131,8 @@ class AccountViewModel(application: Application) : AndroidViewModel(application)
val isValidForm: LiveData = _isValidForm
- //注册请求响应信息
- private val _snackBarMsg = MutableLiveData()
- val snackBarMsg: LiveData = _snackBarMsg
-
- private val _dialogMsg = MutableLiveData()
- val dialogMsg: LiveData = _dialogMsg
+ private val _dialogMsg = MutableLiveData()
+ val dialogMsg: LiveData = _dialogMsg
val loginDesc = "登陆"
@@ -173,7 +172,7 @@ class AccountViewModel(application: Application) : AndroidViewModel(application)
* 检查学号是否已注册
*
*/
- private suspend fun checkRepeat() {
+ private suspend fun checkRepeat(onFail: (error: String) -> Unit) {
if (checkStudentId()) {
if (checkJob?.isActive == true) {
checkJob?.join()
@@ -189,7 +188,7 @@ class AccountViewModel(application: Application) : AndroidViewModel(application)
_isRepeat.postValue(it.body)
_isValidForm.postValue(_isValidName.value == true && it.body == false)
},
- onFail = { _snackBarMsg.postValue(it) },
+ onFail = onFail,
type = object : TypeToken>() {}.type
), mapOf("studentId" to "${studentId.formValue.value}")
)
@@ -225,7 +224,7 @@ class AccountViewModel(application: Application) : AndroidViewModel(application)
_isValidForm.value = false
} else {
_isValidForm.value =
- checkStudentId() && (if (route == AccountRoute.register) checkName() && isRepeat.value == false else checkPassword())
+ checkStudentId() && (if (route == AccountRoute.Register) checkName() && isRepeat.value == false else checkPassword())
}
return _isValidForm.value == true
}
@@ -234,7 +233,7 @@ class AccountViewModel(application: Application) : AndroidViewModel(application)
* 注册
*
*/
- fun register() {
+ fun register(onFail: (error: String) -> Unit) {
if (checkForm()) {
val url = Api.buildUrl(AccountApi.Register)
Logger.i("开始$regBtnDesc,请求接口:$url")
@@ -249,7 +248,7 @@ class AccountViewModel(application: Application) : AndroidViewModel(application)
)
)
},
- onFail = { _snackBarMsg.postValue(it) },
+ onFail = onFail,
type = object : TypeToken>() {}.type
),
jsonBody = Gson().toJson(
@@ -265,18 +264,6 @@ class AccountViewModel(application: Application) : AndroidViewModel(application)
}
}
- /**
- *
- */
-
- /**
- * 重置信息
- *
- */
- fun resetRegisterResMsg() {
- _snackBarMsg.value = ""
- }
-
fun resetDialogMsg() {
_dialogMsg.value = null
}
@@ -290,7 +277,7 @@ class AccountViewModel(application: Application) : AndroidViewModel(application)
* 登录
*
*/
- fun login() {
+ fun login(callback: (message: String) -> Unit) {
if (checkForm()) {
val url = Api.buildUrl(AccountApi.Login)
Logger.i("开始$loginDesc,请求接口:$url")
@@ -299,8 +286,7 @@ class AccountViewModel(application: Application) : AndroidViewModel(application)
SimpleCallback(
action = loginDesc,
onSuccess = {
- _snackBarMsg.postValue(it.message)
-
+ callback(it.message)
val context = getApplication().applicationContext
val token = it.body?.token
if (token != null) {
@@ -313,7 +299,7 @@ class AccountViewModel(application: Application) : AndroidViewModel(application)
}
}
},
- onFail = { _snackBarMsg.postValue(it) },
+ onFail = { callback(it) },
type = object : TypeToken>() {}.type
),
jsonBody = Gson().toJson(
diff --git a/foreground/src/main/java/com/gyf/csams/account/ui/AccountActivity.kt b/foreground/src/main/java/com/gyf/csams/account/ui/AccountActivity.kt
index 80248db..3013d5e 100644
--- a/foreground/src/main/java/com/gyf/csams/account/ui/AccountActivity.kt
+++ b/foreground/src/main/java/com/gyf/csams/account/ui/AccountActivity.kt
@@ -8,7 +8,6 @@ import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.*
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
@@ -29,12 +28,13 @@ import com.gyf.csams.account.model.DialogMessage
import com.gyf.csams.uikit.AnimationText
import com.gyf.lib.uikit.BaseTextField
import com.gyf.lib.uikit.Body
+import com.gyf.lib.uikit.ScaffoldModel
import com.orhanobut.logger.Logger
enum class AccountRoute {
- login,
- register
+ Login,
+ Register
}
class AccountActivity : ComponentActivity() {
@@ -42,22 +42,24 @@ class AccountActivity : ComponentActivity() {
super.onCreate(savedInstanceState)
setContent {
- Body { nav, scaffoldState ->
- NavHost(navController = nav, startDestination = AccountRoute.login.name) {
- composable(AccountRoute.login.name) {
+ Body { nav ->
+ NavHost(navController = nav, startDestination = AccountRoute.Login.name) {
+ composable(AccountRoute.Login.name) {
Account(
- scaffoldState = scaffoldState,
- route = AccountRoute.login
- ) { isValidForm: Boolean, accountViewModel: AccountViewModel ->
+ route = AccountRoute.Login
+ ) { isValidForm: Boolean, accountViewModel: AccountViewModel, scaffoldModel: ScaffoldModel ->
Spacer(modifier = Modifier.height(10.dp))
-
OutlinedButton(
- onClick = { accountViewModel.login() },
- enabled = isValidForm,
- modifier = Modifier
- .fillMaxWidth()
- .padding(bottom = 10.dp)
- ) {
+ onClick = {
+ accountViewModel.login {
+ scaffoldModel.update(message = it)
+ }
+ },
+ enabled = isValidForm,
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(bottom = 10.dp)
+ ) {
Text(text = accountViewModel.loginDesc)
}
@@ -68,7 +70,7 @@ class AccountActivity : ComponentActivity() {
}
OutlinedButton(
- onClick = { nav.navigate(AccountRoute.register.name) },
+ onClick = { nav.navigate(AccountRoute.Register.name) },
modifier = Modifier.fillMaxWidth(),
colors = ButtonDefaults.outlinedButtonColors(
contentColor = MaterialTheme.colors.onBackground
@@ -80,25 +82,28 @@ class AccountActivity : ComponentActivity() {
}
- composable(AccountRoute.register.name) {
- Account(
- scaffoldState = scaffoldState,
- route = AccountRoute.register
- ) { isValidForm: Boolean, accountViewModel: AccountViewModel ->
- Spacer(modifier = Modifier.height(10.dp))
+ composable(AccountRoute.Register.name) {
+ Account(
+ route = AccountRoute.Register
+ ) { isValidForm: Boolean, accountViewModel: AccountViewModel, _: ScaffoldModel ->
+ Spacer(modifier = Modifier.height(10.dp))
- OutlinedButton(
- onClick = { accountViewModel.register() },
- enabled = isValidForm,
- modifier = Modifier
- .fillMaxWidth()
- .padding(bottom = 10.dp)
- ) {
+ OutlinedButton(
+ onClick = {
+ accountViewModel.register {
+
+ }
+ },
+ enabled = isValidForm,
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(bottom = 10.dp)
+ ) {
Text(text = accountViewModel.regBtnDesc)
}
OutlinedButton(
- onClick = { nav.navigate(AccountRoute.login.name) },
+ onClick = { nav.navigate(AccountRoute.Login.name) },
modifier = Modifier.fillMaxWidth(),
colors = ButtonDefaults.outlinedButtonColors(
contentColor = MaterialTheme.colors.onBackground
@@ -122,10 +127,11 @@ class AccountActivity : ComponentActivity() {
@Composable
private fun Account(
accountViewModel: AccountViewModel = viewModel(),
- scaffoldState: ScaffoldState,
+ scaffoldModel: ScaffoldModel = viewModel(),
route: AccountRoute,
- Action: @Composable (isValidForm: Boolean, accountViewModel: AccountViewModel) -> Unit
+ Action: @Composable (isValidForm: Boolean, accountViewModel: AccountViewModel, scaffoldModel: ScaffoldModel) -> Unit
) {
+ accountViewModel.scaffoldModel = scaffoldModel
accountViewModel.route = route
Row(
horizontalArrangement = Arrangement.Center,
@@ -154,28 +160,20 @@ class AccountActivity : ComponentActivity() {
}
})
- StudentId(checkRepeat = route == AccountRoute.register)
+ StudentId(checkRepeat = route == AccountRoute.Register)
Spacer(modifier = Modifier.height(10.dp))
- if (route == AccountRoute.register) Name() else Password()
+ if (route == AccountRoute.Register) Name() else Password()
Spacer(modifier = Modifier.height(10.dp))
PasswordTip()
val isValidForm: Boolean by accountViewModel.isValidForm.observeAsState(false)
- Action(isValidForm = isValidForm, accountViewModel = accountViewModel)
-
- val snackBarMsg: String by accountViewModel.snackBarMsg.observeAsState("")
-
- if (snackBarMsg != "") {
- LaunchedEffect(scaffoldState) {
- scaffoldState.snackbarHostState.showSnackbar(
- message = snackBarMsg
- )
- accountViewModel.resetRegisterResMsg()
- }
- }
-
+ Action(
+ isValidForm = isValidForm,
+ accountViewModel = accountViewModel,
+ scaffoldModel = scaffoldModel
+ )
RegisterDialog()
}
}
diff --git a/foreground/src/main/java/com/gyf/csams/activity/model/ActivityDetailViewModel.kt b/foreground/src/main/java/com/gyf/csams/activity/model/ActivityDetailViewModel.kt
index 929573b..c584410 100644
--- a/foreground/src/main/java/com/gyf/csams/activity/model/ActivityDetailViewModel.kt
+++ b/foreground/src/main/java/com/gyf/csams/activity/model/ActivityDetailViewModel.kt
@@ -6,9 +6,9 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.gyf.csams.NOT_IMPL_TIP
import com.gyf.csams.uikit.ActivityDetailMenu
-import com.gyf.csams.uikit.ScrollList
import com.gyf.csams.uikit.SendInterface
import com.gyf.csams.uikit.TopMenuInterface
+import com.gyf.lib.ScrollList
import com.gyf.lib.uikit.StringForm
import com.gyf.lib.util.randomChinese
import com.gyf.lib.util.randomDateTime
diff --git a/foreground/src/main/java/com/gyf/csams/activity/ui/ActivityDetailActivity.kt b/foreground/src/main/java/com/gyf/csams/activity/ui/ActivityDetailActivity.kt
index 8b44fd0..8320622 100644
--- a/foreground/src/main/java/com/gyf/csams/activity/ui/ActivityDetailActivity.kt
+++ b/foreground/src/main/java/com/gyf/csams/activity/ui/ActivityDetailActivity.kt
@@ -26,7 +26,6 @@ import com.gyf.csams.uikit.*
import com.gyf.lib.uikit.Body
import com.gyf.lib.uikit.MainColumnFrame
import com.gyf.lib.uikit.ScaffoldModel
-import com.gyf.lib.uikit.ShowSnackbar
import com.gyf.lib.util.format
import com.orhanobut.logger.Logger
@@ -42,7 +41,7 @@ class ActivityDetailActivity : ComponentActivity() {
setContent {
- Body { nav, scaffoldState ->
+ Body { nav ->
val model: ActivityDetailViewModel = viewModel()
val currentMenuName by model.currentMenu.observeAsState(ActivityDetailMenu.startMenu)
Column {
@@ -57,22 +56,18 @@ class ActivityDetailActivity : ComponentActivity() {
) {
composable(ActivityDetailMenu.Info.name) {
Info()
- ShowSnackbar(scaffoldState = scaffoldState)
model.clickMenu(ActivityDetailMenu.Info)
}
composable(ActivityDetailMenu.Photo.name) {
Photo()
- ShowSnackbar(scaffoldState = scaffoldState)
model.clickMenu(ActivityDetailMenu.Photo)
}
composable(ActivityDetailMenu.Member.name) {
Member()
- ShowSnackbar(scaffoldState = scaffoldState)
model.clickMenu(ActivityDetailMenu.Member)
}
composable(ActivityDetailMenu.BBS.name) {
BBS()
- ShowSnackbar(scaffoldState = scaffoldState)
model.clickMenu(ActivityDetailMenu.BBS)
}
}
diff --git a/foreground/src/main/java/com/gyf/csams/activity/ui/ApplyActActivity.kt b/foreground/src/main/java/com/gyf/csams/activity/ui/ApplyActActivity.kt
index ac4de30..24cd3d3 100644
--- a/foreground/src/main/java/com/gyf/csams/activity/ui/ApplyActActivity.kt
+++ b/foreground/src/main/java/com/gyf/csams/activity/ui/ApplyActActivity.kt
@@ -77,7 +77,7 @@ class ApplyActActivity : AppCompatActivity() {
mLocationClient = (application as MainApplication).mLocationClient
setContent {
- Body { scaffoldState ->
+ BodyS {
MainColumnFrame(background = { Background(image = BackgroundImage.ApplyActivity) }) {
val model: ApplyActViewModel = viewModel()
val scaffoldModel: ScaffoldModel = viewModel()
@@ -182,7 +182,6 @@ class ApplyActActivity : AppCompatActivity() {
}
}
}
- ShowSnackbar(scaffoldState = scaffoldState)
}
}
}
diff --git a/foreground/src/main/java/com/gyf/csams/association/model/AssociationViewModel.kt b/foreground/src/main/java/com/gyf/csams/association/model/AssociationViewModel.kt
index 7fe1fc6..105c7a8 100644
--- a/foreground/src/main/java/com/gyf/csams/association/model/AssociationViewModel.kt
+++ b/foreground/src/main/java/com/gyf/csams/association/model/AssociationViewModel.kt
@@ -6,8 +6,8 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.gyf.csams.NOT_IMPL_TIP
import com.gyf.csams.uikit.AssociationMenu
-import com.gyf.csams.uikit.ScrollList
import com.gyf.csams.uikit.TopMenuInterface
+import com.gyf.lib.ScrollList
import com.gyf.lib.uikit.StringForm
import com.orhanobut.logger.Logger
import kotlinx.coroutines.launch
diff --git a/foreground/src/main/java/com/gyf/csams/association/model/ExamViewModel.kt b/foreground/src/main/java/com/gyf/csams/association/model/ExamViewModel.kt
index c2cc191..65ccd8b 100644
--- a/foreground/src/main/java/com/gyf/csams/association/model/ExamViewModel.kt
+++ b/foreground/src/main/java/com/gyf/csams/association/model/ExamViewModel.kt
@@ -4,7 +4,7 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.gyf.csams.NOT_IMPL_TIP
-import com.gyf.csams.uikit.ScrollList
+import com.gyf.lib.ScrollList
import com.gyf.lib.uikit.StringForm
import kotlinx.coroutines.launch
import kotlin.random.Random
diff --git a/foreground/src/main/java/com/gyf/csams/association/ui/AssociationActivity.kt b/foreground/src/main/java/com/gyf/csams/association/ui/AssociationActivity.kt
index b1eebb7..3e3df2e 100644
--- a/foreground/src/main/java/com/gyf/csams/association/ui/AssociationActivity.kt
+++ b/foreground/src/main/java/com/gyf/csams/association/ui/AssociationActivity.kt
@@ -30,7 +30,10 @@ import com.gyf.csams.activity.ui.ActivityDetailActivity
import com.gyf.csams.activity.ui.ApplyActActivity
import com.gyf.csams.association.model.*
import com.gyf.csams.uikit.*
-import com.gyf.lib.uikit.*
+import com.gyf.lib.uikit.BaseTextField
+import com.gyf.lib.uikit.Body
+import com.gyf.lib.uikit.MainColumnFrame
+import com.gyf.lib.uikit.ScaffoldModel
import com.gyf.lib.util.randomChinese
import com.orhanobut.logger.Logger
@@ -44,17 +47,17 @@ class AssociationActivity : ComponentActivity() {
super.onCreate(savedInstanceState)
setContent {
- Body { nav, scaffoldState ->
- val context = LocalContext.current as AssociationActivity
- val model: AssociationViewModel = viewModel()
- val currentMenuName: AssociationMenu by model.currentMenu.observeAsState(
- AssociationMenu.startMenu
- )
- val intent = Intent(context, ExamActivity::class.java)
- val expanded by model.expanded.observeAsState(false)
+ Body { nav ->
+ val context = LocalContext.current as AssociationActivity
+ val model: AssociationViewModel = viewModel()
+ val currentMenuName: AssociationMenu by model.currentMenu.observeAsState(
+ AssociationMenu.startMenu
+ )
+ val intent = Intent(context, ExamActivity::class.java)
+ val expanded by model.expanded.observeAsState(false)
- Column {
- Logger.i("expanded=$expanded")
+ Column {
+ Logger.i("expanded=$expanded")
TextTopAppBar(nav = nav,
currentMenuName = currentMenuName.menuName,
menuNames = AssociationMenu.values(),
@@ -154,17 +157,14 @@ class AssociationActivity : ComponentActivity() {
composable(AssociationMenu.Member.name) {
model.clickMenu(AssociationMenu.Member)
Member()
- ShowSnackbar(scaffoldState = scaffoldState)
}
composable(AssociationMenu.Main.name) {
model.clickMenu(AssociationMenu.Main)
Main()
- ShowSnackbar(scaffoldState = scaffoldState)
}
composable(AssociationMenu.ActivityList.name) {
model.clickMenu(AssociationMenu.ActivityList)
AssociationList()
- ShowSnackbar(scaffoldState = scaffoldState)
}
}
}
diff --git a/foreground/src/main/java/com/gyf/csams/association/ui/ExamActivity.kt b/foreground/src/main/java/com/gyf/csams/association/ui/ExamActivity.kt
index f5a9da6..5ade30d 100644
--- a/foreground/src/main/java/com/gyf/csams/association/ui/ExamActivity.kt
+++ b/foreground/src/main/java/com/gyf/csams/association/ui/ExamActivity.kt
@@ -22,7 +22,10 @@ import com.gyf.csams.R
import com.gyf.csams.association.model.*
import com.gyf.csams.uikit.Background
import com.gyf.csams.uikit.BackgroundImage
-import com.gyf.lib.uikit.*
+import com.gyf.lib.uikit.BaseTextField
+import com.gyf.lib.uikit.BodyS
+import com.gyf.lib.uikit.MainColumnFrame
+import com.gyf.lib.uikit.ScaffoldModel
import com.gyf.lib.util.BottomButton
@@ -40,7 +43,7 @@ class ExamActivity : ComponentActivity() {
activityType = intent?.getSerializableExtra(ExamActivityType::name.name) as ExamActivityType
setContent {
- Body { scaffoldState ->
+ BodyS {
MainColumnFrame(background = {
Background(
image = BackgroundImage.Exam,
@@ -50,7 +53,6 @@ class ExamActivity : ComponentActivity() {
Spacer(modifier = Modifier.weight(0.1F))
Title(modifier = Modifier.weight(0.1F))
Exam(modifier = Modifier.weight(0.8F))
- ShowSnackbar(scaffoldState = scaffoldState)
}
}
}
diff --git a/foreground/src/main/java/com/gyf/csams/association/ui/ReNameActivity.kt b/foreground/src/main/java/com/gyf/csams/association/ui/ReNameActivity.kt
index 8d2b863..8ca52d1 100644
--- a/foreground/src/main/java/com/gyf/csams/association/ui/ReNameActivity.kt
+++ b/foreground/src/main/java/com/gyf/csams/association/ui/ReNameActivity.kt
@@ -13,7 +13,10 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import com.gyf.csams.association.model.RenameViewModel
import com.gyf.csams.uikit.Background
import com.gyf.csams.uikit.BackgroundImage
-import com.gyf.lib.uikit.*
+import com.gyf.lib.uikit.BaseTextField
+import com.gyf.lib.uikit.BodyS
+import com.gyf.lib.uikit.MainColumnFrame
+import com.gyf.lib.uikit.ScaffoldModel
import com.gyf.lib.util.BottomButton
/**
@@ -25,7 +28,7 @@ class ReNameActivity : ComponentActivity() {
super.onCreate(savedInstanceState)
setContent {
- Body { scaffoldState ->
+ BodyS {
MainColumnFrame(background = { Background(image = BackgroundImage.Rename) }) {
Spacer(
modifier = Modifier
@@ -51,7 +54,6 @@ class ReNameActivity : ComponentActivity() {
}
Spacer(modifier = Modifier.weight(1 - 0.2F * 2 - 0.1F * 4))
- ShowSnackbar(scaffoldState = scaffoldState)
}
}
}
diff --git a/foreground/src/main/java/com/gyf/csams/association/ui/RegAssociationActivity.kt b/foreground/src/main/java/com/gyf/csams/association/ui/RegAssociationActivity.kt
index a58b49b..6012071 100644
--- a/foreground/src/main/java/com/gyf/csams/association/ui/RegAssociationActivity.kt
+++ b/foreground/src/main/java/com/gyf/csams/association/ui/RegAssociationActivity.kt
@@ -33,7 +33,10 @@ import com.gyf.csams.R
import com.gyf.csams.association.model.RegAssociationViewModel
import com.gyf.csams.uikit.Background
import com.gyf.csams.uikit.BackgroundImage
-import com.gyf.lib.uikit.*
+import com.gyf.lib.uikit.BaseTextField
+import com.gyf.lib.uikit.BodyS
+import com.gyf.lib.uikit.MainColumnFrame
+import com.gyf.lib.uikit.ScaffoldModel
import com.gyf.lib.util.BottomButton
import com.orhanobut.logger.Logger
@@ -47,17 +50,17 @@ class RegAssociationActivity : ComponentActivity() {
super.onCreate(savedInstanceState)
setContent {
- Body { scaffoldState ->
- MainColumnFrame(background = {
- Background(
- BackgroundImage.RegAssociation,
- alpha = 0.5F
- )
- }) {
- Spacer(
- modifier = Modifier
- .weight(0.1F)
- )
+ BodyS {
+ MainColumnFrame(background = {
+ Background(
+ BackgroundImage.RegAssociation,
+ alpha = 0.5F
+ )
+ }) {
+ Spacer(
+ modifier = Modifier
+ .weight(0.1F)
+ )
Title()
Name()
Desc(
@@ -82,8 +85,6 @@ class RegAssociationActivity : ComponentActivity() {
model.register { scaffoldModel.update(message = it) }
}
Spacer(modifier = Modifier.weight(0.05F))
-
- ShowSnackbar(scaffoldState = scaffoldState)
}
}
diff --git a/foreground/src/main/java/com/gyf/csams/main/model/MainViewModel.kt b/foreground/src/main/java/com/gyf/csams/main/model/MainViewModel.kt
index ef66fba..d0ecfd9 100644
--- a/foreground/src/main/java/com/gyf/csams/main/model/MainViewModel.kt
+++ b/foreground/src/main/java/com/gyf/csams/main/model/MainViewModel.kt
@@ -5,8 +5,8 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.gyf.csams.NOT_IMPL_TIP
-import com.gyf.csams.uikit.ScrollList
import com.gyf.csams.uikit.SendInterface
+import com.gyf.lib.ScrollList
import com.gyf.lib.uikit.PersonInfoVo
import com.gyf.lib.uikit.StringForm
import com.gyf.lib.util.randomChinese
@@ -48,7 +48,7 @@ class MarqueeViewModel : ViewModel() {
*
* @property name 社团名称
*/
-data class AssociationDto(val name: String)
+data class AssociationListVo(val name: String)
/**
* 主页
@@ -83,7 +83,7 @@ class MainViewModel : ViewModel(), SendInterface {
* 社团列表
*
*/
-class ListViewModel : ScrollList() {
+class ListViewModel : ScrollList() {
val name = StringForm(formDesc = "社团名称", textLength = 5)
val desc = StringForm(formDesc = "社团简介", textLength = 10)
@@ -92,8 +92,8 @@ class ListViewModel : ScrollList() {
val associationListSize = 10
//社团列表
- private val _associationList = MutableLiveData>(mutableListOf())
- val associationDto: LiveData> = _associationList
+ private val _associationList = MutableLiveData>(mutableListOf())
+ val associationListVo: LiveData> = _associationList
val searchDesc = "搜索"
@@ -125,7 +125,7 @@ class ListViewModel : ScrollList() {
repeat(
10
) {
- add(AssociationDto(name = "社团${_associationList.value?.size}"))
+ add(AssociationListVo(name = "社团${_associationList.value?.size}"))
}
}
@@ -140,11 +140,11 @@ class ListViewModel : ScrollList() {
override fun loadMore(callback: (message: String) -> Unit) {
viewModelScope.launch {
_associationList.value?.apply {
- val list = mutableListOf()
+ val list = mutableListOf()
list.addAll(this)
list.apply {
repeat(10) {
- add(AssociationDto(name = "社团${size}"))
+ add(AssociationListVo(name = "社团${size}"))
}
}
Logger.i("t.size=${size}")
diff --git a/foreground/src/main/java/com/gyf/csams/main/ui/MainActivity.kt b/foreground/src/main/java/com/gyf/csams/main/ui/MainActivity.kt
index 5d59414..aec2a6a 100644
--- a/foreground/src/main/java/com/gyf/csams/main/ui/MainActivity.kt
+++ b/foreground/src/main/java/com/gyf/csams/main/ui/MainActivity.kt
@@ -52,19 +52,16 @@ class MainActivity : ComponentActivity() {
setContent {
- Body { nav, scaffoldState ->
+ Body { nav ->
NavHost(navController = nav, startDestination = MainMenu.Main.name) {
composable(MainMenu.Main.name) {
Main(navController = nav)
- ShowSnackbar(scaffoldState = scaffoldState)
}
composable(MainMenu.List.name) {
AssociationList(navController = nav)
- ShowSnackbar(scaffoldState = scaffoldState)
}
composable(MainMenu.Center.name) {
Center(navController = nav)
- ShowSnackbar(scaffoldState = scaffoldState)
}
}
@@ -236,21 +233,21 @@ class MainActivity : ComponentActivity() {
model: ListViewModel = viewModel(),
scaffoldModel: ScaffoldModel = viewModel()
) {
- val associationList: MutableList? by model.associationDto.observeAsState()
+ val associationListList: MutableList? by model.associationListVo.observeAsState()
val listState = rememberLazyListState()
LazyColumn(state = listState) {
- associationList?.chunked(2)?.forEach {
+ associationListList?.chunked(2)?.forEach {
item {
Row {
Spacer(modifier = Modifier.weight(0.1F))
Box(modifier = Modifier.weight(0.35F)) {
- Association(associationDto = it[0])
+ Association(associationListVo = it[0])
}
Spacer(modifier = Modifier.weight(0.05F))
if (it.size == 2) {
Box(modifier = Modifier.weight(0.35F)) {
- Association(associationDto = it[1])
+ Association(associationListVo = it[1])
}
} else {
Box(
@@ -276,7 +273,7 @@ class MainActivity : ComponentActivity() {
}
@Composable
- private fun Association(associationDto: AssociationDto) {
+ private fun Association(associationListVo: AssociationListVo) {
val context = LocalContext.current
Card(modifier = Modifier.clickable(onClick = {
context.startActivity(
@@ -294,7 +291,7 @@ class MainActivity : ComponentActivity() {
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.Center
) {
- Text(text = associationDto.name)
+ Text(text = associationListVo.name)
}
}
diff --git a/foreground/src/main/java/com/gyf/csams/message/model/SysMessageViewModel.kt b/foreground/src/main/java/com/gyf/csams/message/model/SysMessageViewModel.kt
index f27ed74..c06bd88 100644
--- a/foreground/src/main/java/com/gyf/csams/message/model/SysMessageViewModel.kt
+++ b/foreground/src/main/java/com/gyf/csams/message/model/SysMessageViewModel.kt
@@ -2,7 +2,7 @@ package com.gyf.csams.message.model
import androidx.lifecycle.viewModelScope
import com.gyf.csams.NOT_IMPL_TIP
-import com.gyf.csams.uikit.ScrollList
+import com.gyf.lib.ScrollList
import com.gyf.lib.util.randomChinese
import com.gyf.lib.util.randomDateTime
import com.gyf.lib.util.randomNum
diff --git a/foreground/src/main/java/com/gyf/csams/message/ui/MessageActivity.kt b/foreground/src/main/java/com/gyf/csams/message/ui/MessageActivity.kt
index 85152a2..3907c6a 100644
--- a/foreground/src/main/java/com/gyf/csams/message/ui/MessageActivity.kt
+++ b/foreground/src/main/java/com/gyf/csams/message/ui/MessageActivity.kt
@@ -22,7 +22,7 @@ import com.gyf.csams.message.model.MessageViewModel
import com.gyf.csams.uikit.Background
import com.gyf.csams.uikit.BackgroundImage
import com.gyf.csams.uikit.TextTopAppBar
-import com.gyf.lib.uikit.Body
+import com.gyf.lib.uikit.BodyS
import com.gyf.lib.uikit.MainColumnFrame
/**
@@ -34,7 +34,7 @@ class MessageActivity : ComponentActivity() {
super.onCreate(savedInstanceState)
setContent {
- Body { _ ->
+ BodyS {
val model: MessageViewModel = viewModel()
val context = LocalContext.current
MainColumnFrame(background = {
diff --git a/foreground/src/main/java/com/gyf/csams/message/ui/SysMessageActivity.kt b/foreground/src/main/java/com/gyf/csams/message/ui/SysMessageActivity.kt
index a004976..b8fcfdf 100644
--- a/foreground/src/main/java/com/gyf/csams/message/ui/SysMessageActivity.kt
+++ b/foreground/src/main/java/com/gyf/csams/message/ui/SysMessageActivity.kt
@@ -22,7 +22,7 @@ import com.gyf.csams.message.model.*
import com.gyf.csams.uikit.Background
import com.gyf.csams.uikit.BackgroundImage
import com.gyf.csams.uikit.TextTopAppBar
-import com.gyf.lib.uikit.Body
+import com.gyf.lib.uikit.BodyS
import com.gyf.lib.uikit.MainColumnFrame
import com.gyf.lib.util.format
@@ -35,7 +35,7 @@ class SysMessageActivity : ComponentActivity() {
super.onCreate(savedInstanceState)
setContent {
- Body { _ ->
+ BodyS {
MainColumnFrame(background = {
Background(
image = BackgroundImage.ActivityMessage,
diff --git a/foreground/src/main/java/com/gyf/csams/uikit/ViewModel.kt b/foreground/src/main/java/com/gyf/csams/uikit/ViewModel.kt
index 3db437d..ac95403 100644
--- a/foreground/src/main/java/com/gyf/csams/uikit/ViewModel.kt
+++ b/foreground/src/main/java/com/gyf/csams/uikit/ViewModel.kt
@@ -2,7 +2,10 @@ package com.gyf.csams.uikit
import android.app.Application
import androidx.compose.ui.graphics.ImageBitmap
-import androidx.lifecycle.*
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
import com.google.gson.reflect.TypeToken
import com.gyf.csams.R
import com.gyf.csams.util.SimpleCallback
@@ -90,18 +93,5 @@ class ImageModel(application: Application, private val urlPath: String) :
}
}
-abstract class ScrollList : ViewModel() {
- protected val _data = MutableLiveData>(mutableListOf())
- val data: LiveData> = _data
-
- abstract val initSize: Int
-
- //加载列表
- abstract fun load()
-
- //加载更多数据
- abstract fun loadMore(callback: (message: String) -> Unit)
-}
-
diff --git a/lib/src/main/java/com/gyf/lib/ScrollList.kt b/lib/src/main/java/com/gyf/lib/ScrollList.kt
new file mode 100644
index 0000000..a4b6998
--- /dev/null
+++ b/lib/src/main/java/com/gyf/lib/ScrollList.kt
@@ -0,0 +1,18 @@
+package com.gyf.lib
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+
+abstract class ScrollList : ViewModel() {
+ protected val _data = MutableLiveData>(mutableListOf())
+ val data: LiveData> = _data
+
+ abstract val initSize: Int
+
+ //加载列表
+ abstract fun load()
+
+ //加载更多数据
+ abstract fun loadMore(callback: (message: String) -> Unit)
+}
\ No newline at end of file
diff --git a/lib/src/main/java/com/gyf/lib/uikit/MainFrame.kt b/lib/src/main/java/com/gyf/lib/uikit/MainFrame.kt
index 27ec818..b8a2eac 100644
--- a/lib/src/main/java/com/gyf/lib/uikit/MainFrame.kt
+++ b/lib/src/main/java/com/gyf/lib/uikit/MainFrame.kt
@@ -140,39 +140,40 @@ fun MainBottomAppBar(
}
-
/**
*
*
* @param content
*/
@Composable
-fun Body(content: @Composable (scaffoldState: ScaffoldState) -> Unit) {
+fun BodyS(content: @Composable () -> Unit) {
CSAMSTheme {
Surface(color = MaterialTheme.colors.background) {
val scaffoldState = rememberScaffoldState()
Scaffold(scaffoldState = scaffoldState) {
- content(scaffoldState = scaffoldState)
+ content()
+ ShowSnackbar(scaffoldState = scaffoldState)
}
}
}
}
/**
- * 带导航的主体
+ * 带底部导航的界面框架
*
* @param content
*/
@Composable
-fun Body(content: @Composable (nav: NavHostController, scaffoldState: ScaffoldState) -> Unit) {
+fun Body(content: @Composable (nav: NavHostController) -> Unit) {
CSAMSTheme {
Surface(color = MaterialTheme.colors.background) {
val navController = rememberNavController()
val scaffoldState = rememberScaffoldState()
Scaffold(scaffoldState = scaffoldState) {
- content(nav = navController, scaffoldState = scaffoldState)
+ content(nav = navController)
+ ShowSnackbar(scaffoldState = scaffoldState)
}
}
}
diff --git a/lib/src/main/java/com/gyf/lib/util/BottomButton.kt b/lib/src/main/java/com/gyf/lib/util/BottomButton.kt
index fdfae33..ae24ca2 100644
--- a/lib/src/main/java/com/gyf/lib/util/BottomButton.kt
+++ b/lib/src/main/java/com/gyf/lib/util/BottomButton.kt
@@ -13,6 +13,7 @@ import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.gyf.lib.R
@@ -29,13 +30,13 @@ fun BottomButton(
onClick = onConfirm,
modifier = Modifier.background(color = MaterialTheme.colors.primary)
) {
- Text(text = context.getString(confirmDesc))
+ Text(text = stringResource(id = confirmDesc))
}
Spacer(modifier = Modifier.width(10.dp))
OutlinedButton(onClick = {
context.onBackPressed()
}, modifier = Modifier.background(color = MaterialTheme.colors.secondary)) {
- Text(text = context.getString(backDesc))
+ Text(text = stringResource(id = backDesc))
}
}
}
\ No newline at end of file