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
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()
|
|
)
|
|
)
|
|
}
|
|
}
|
|
} |