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.

165 lines
5.1 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.R
import com.gyf.csams.module.*
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 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
private val _applyAssociationResultVo = MutableLiveData<ApplyAssociationResultVo?>()
val applyAssociationResultVo: LiveData<ApplyAssociationResultVo?> = _applyAssociationResultVo
private val _dropMenuMessage = MutableLiveData<String?>()
val dropMenuMessage: LiveData<String?> = _dropMenuMessage
fun update(message: String? = null) {
_dropMenuMessage.postValue(message)
}
fun update(applyAssociationResultVo: ApplyAssociationResultVo? = null) {
_applyAssociationResultVo.postValue(applyAssociationResultVo)
}
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, token = TokenManager.getToken())
)
}
}
/**
* 切换下拉菜单状态
*
*/
fun switchType() {
_expanded.value?.let {
_expanded.value = !it
}
}
fun close() {
_expanded.value = false
}
/**
* 申请入团
*
*/
fun applyAssociation(associationId: Int, callback: (result: ApplyAssociationResultVo) -> Unit) {
viewModelScope.launch {
HttpClient.post(
url = Api.buildUrl(AssociationApi.CheckApply),
callback = HttpCallback<ApplyAssociationResultVo>(
action = "申请入团",
onSuccess = {
it.body?.let {
callback(it)
}
},
typeToken = object : TypeToken<ApiResponse<ApplyAssociationResultVo>>() {}.type
),
jsonParam =
SearchExamVo(associationId = associationId, token = TokenManager.getToken())
)
}
}
}
/**
* 社团成员
*
*/
class MemberViewModel(application: Application) : ScrollViewModel<UserInfoVo>(application) {
val name =
StringForm(formDesc = "姓名关键字", application.resources.getInteger(R.integer.name_length))
override val initSize: Int = 10
/**
* 加载社团成员
*
*/
fun load(id: Int) {
viewModelScope.launch {
HttpClient.post(
Api.buildUrl(AssociationApi.LoadMember), HttpCallback<MutableList<UserInfoVo>>(
action = "加载社团成员",
onSuccess = {
it.body?.let {
_data.postValue(it)
}
},
typeToken = object : TypeToken<ApiResponse<MutableList<UserInfoVo>>>() {}.type
),
jsonParam = QueryAssociationMembers(
id = id,
name = name.formValue.value,
token = TokenManager.getToken()
)
)
}
}
}
class OngoingActViewModel : ViewModel() {
private val _act = MutableLiveData<OngoingActVo>()
val act: LiveData<OngoingActVo> = _act
}
/**
* 历史活动
*
*/
class HistoryActViewModel(application: Application) : ScrollViewModel<ActivityVo>(application) {
fun load(associationId: Int) {
viewModelScope.launch {
HttpClient.post(
url = Api.buildUrl(ActivityApi.Load),
callback = HttpCallback<MutableList<ActivityVo>>(
action = "查看社团活动",
onSuccess = {
_data.postValue(it.body)
},
typeToken = object : TypeToken<ApiResponse<MutableList<ActivityVo>>>() {}.type
),
jsonParam = SearchActivityVo(
associationId = associationId,
token = TokenManager.getToken()
)
)
}
}
}