You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

168 lines
4.3 KiB

package com.gyf.csams.association.model
import android.app.Application
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.google.gson.reflect.TypeToken
import com.gyf.csams.uikit.AssociationMenu
import com.gyf.csams.uikit.TopMenuInterface
import com.gyf.lib.model.ScrollViewModel
import com.gyf.lib.uikit.StringForm
import com.gyf.lib.util.*
import com.orhanobut.logger.Logger
import kotlinx.coroutines.launch
class AssociationViewModel : ViewModel(), TopMenuInterface<AssociationMenu> {
override val _currentMenu: MutableLiveData<AssociationMenu> = MutableLiveData()
override val currentMenu: LiveData<AssociationMenu> = _currentMenu
/**
* 下拉菜单状态
*/
private val _expanded = MutableLiveData(false)
val expanded: LiveData<Boolean> = _expanded
private val _associationVo = MutableLiveData<AssociationMainVo>()
val associationVo: LiveData<AssociationMainVo> = _associationVo
fun load(id: Int) {
viewModelScope.launch {
HttpClient.post(
Api.buildUrl(AssociationApi.Load),
HttpCallback<AssociationMainVo>(action = "获取社团信息", onSuccess = {
it.body?.let { _associationVo.postValue(it) }
}, typeToken = object : TypeToken<ApiResponse<AssociationMainVo>>() {}.type),
jsonParam = ShowAssociationVo(id = id)
)
}
}
/**
* 切换下拉菜单状态
*
*/
fun switchType() {
_expanded.value?.let {
_expanded.value = !it
}
}
fun close() {
_expanded.value = false
}
}
/**
* 社团会员
*
*/
class MemberViewModel(application: Application) : ScrollViewModel<MemberVo>(application) {
val name = StringForm(formDesc = "姓名关键字", 5)
val search = "搜索"
private val _memberList = MutableLiveData<MutableList<MemberVo>>(mutableListOf())
val memberList = _memberList
override val initSize: Int = 10
init {
load()
}
/**
* 初始化成员
*
*/
override fun load() {
viewModelScope.launch {
_memberList.value?.apply {
repeat(initSize) {
add(MemberVo(name = "成员${size + 1}"))
}
Logger.i("初始化社团成员size=$size")
}
}
}
/**
* 加载更多成员
*
*/
override fun loadMore(callback: (message: String) -> Unit) {
viewModelScope.launch {
_memberList.value?.let {
val t = mutableListOf<MemberVo>()
t.addAll(it)
t.apply {
repeat(10) {
add(MemberVo(name = "成员${t.size + 1}"))
}
}
_memberList.postValue(t)
Logger.i("加载更多社团成员,size=${t.size}")
}
}
}
/**
* TODO 社团成员搜索
*
* @param callback
*/
fun search(callback: (value: String) -> Unit) {
Logger.i("搜索条件[成员姓名:${name.formValue.value}]")
callback(NOT_IMPL_TIP)
}
}
class OngoingActViewModel : ViewModel() {
private val _act = MutableLiveData<OngoingActVo>()
val act: LiveData<OngoingActVo> = _act
}
/**
* 历史活动
*
*/
class HistoryActViewModel(application: Application) : ScrollViewModel<HistoryActVo>(application) {
override val initSize = 10
init {
load()
}
override fun load() {
viewModelScope.launch {
_data.value?.apply {
repeat(initSize) {
add(HistoryActVo(name = "活动${size + 1}"))
}
Logger.i("初始化活动数量:${size}")
}
}
}
override fun loadMore(callback: (message: String) -> Unit) {
_data.value?.apply {
val t = mutableListOf<HistoryActVo>()
t.addAll(this)
t.apply {
repeat(10) {
add(HistoryActVo(name = "活动${t.size + 1}"))
}
}
_data.postValue(t)
callback("成功加载更多活动")
}
}
}