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.
csamsclient/foreground/src/main/java/com/gyf/csams/activity/model/ActivityDetailViewModel.kt

327 lines
8.4 KiB

package com.gyf.csams.activity.model
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.gyf.csams.NOT_IMPL_TIP
import com.gyf.csams.uikit.*
import com.gyf.csams.util.randomChinese
import com.gyf.csams.util.randomDateTime
import com.gyf.csams.util.randomNum
import com.orhanobut.logger.Logger
import kotlinx.coroutines.launch
import java.util.*
/**
* 活动详情菜单通用状态
*
*/
class ActivityDetailViewModel : ViewModel(), TopMenuInterface<ActivityDetailMenu> {
override val _currentMenu: MutableLiveData<ActivityDetailMenu> = MutableLiveData()
override val currentMenu: LiveData<ActivityDetailMenu> = _currentMenu
}
/**
* TODO
*
* @property associationName 社团名字
* @property activityName 活动名
* @property activityTime 活动时间
* @property activityLocation 活动地点
* @property activityDesc 活动介绍
*/
data class ActivityDetailVo(
val associationName: String, val activityName: String,
val activityTime: Date, val activityLocation: String,
val activityDesc: String
)
/**
* 活动信息
*
*/
class ActivityInfoViewModel : ViewModel() {
private val _activityDetailVo = MutableLiveData<ActivityDetailVo>()
val activityDetailVo: LiveData<ActivityDetailVo> = _activityDetailVo
val like = "点赞"
val collect = "收藏"
init {
loadInfo()
}
/**
* TODO 点赞
*
* @param callback
*/
fun like(callback: (message: String) -> Unit) {
callback(NOT_IMPL_TIP)
}
/**
* TODO 收藏
*
* @param callback
*/
fun collect(callback: (message: String) -> Unit) {
callback(NOT_IMPL_TIP)
}
private fun loadInfo() {
viewModelScope.launch {
_activityDetailVo.value = ActivityDetailVo(
activityName = randomChinese(4),
associationName = randomChinese(4),
activityTime = randomDateTime(),
activityLocation = randomChinese(3),
activityDesc = randomChinese(500)
)
}
}
}
/**
* 图片
* @property name 文件名
* @property size 文件大小
* @property url 文件路径
* @property md5 文件hash
* @property createTime 文件创建时间
* @property studentId 文件上传人
*/
data class ActivityPhotoVo(
val name: String,
val size: Long,
val url: String,
val md5: String,
val createTime: Date,
val studentId: String
)
/**
* 活动相册数据状态管理
*
*/
class ActivityPhotoViewModel : ScrollList<ActivityPhotoVo>() {
override val initSize: Int = 10
init {
load()
}
fun upload(callback: (message: String) -> Unit) {
callback(NOT_IMPL_TIP)
}
/**
* TODO 加载相册
*
*/
override fun load() {
viewModelScope.launch {
_data.value?.apply {
repeat(initSize) {
add(
ActivityPhotoVo(
name = randomChinese(3),
size = randomNum(3).toLong(),
url = "",
md5 = "",
createTime = randomDateTime(),
studentId = ""
)
)
}
}
}
}
/**
* TODO 加载更多相册
*
* @param callback
*/
override fun loadMore(callback: (message: String) -> Unit) {
Logger.i("加载更多")
viewModelScope.launch {
_data.value?.apply {
val list = mutableListOf<ActivityPhotoVo>()
list.addAll(this)
repeat(initSize) {
add(
ActivityPhotoVo(
name = randomChinese(3),
size = randomNum(3).toLong(),
url = "",
md5 = "",
createTime = randomDateTime(),
studentId = ""
)
)
}
_data.postValue(list)
callback("成功加载更多相册")
}
}
}
}
data class ActivityMemberVo(val studentId: String, val name: String)
data class ActivityMembersVo(
val organizer: ActivityMemberVo,
val participant: MutableList<ActivityMemberVo>?
)
class ActivityMemberViewModel : ScrollList<ActivityMemberVo>() {
override val initSize: Int = 10
private val _allMember = MutableLiveData<ActivityMembersVo>()
val allMember: LiveData<ActivityMembersVo> = _allMember
init {
load()
}
/**
* TODO 加载活动成员
*
*/
override fun load() {
viewModelScope.launch {
_data.value?.apply {
repeat(initSize) {
add(ActivityMemberVo(studentId = randomNum(), name = randomChinese(3)))
}
_allMember.value = ActivityMembersVo(
organizer = ActivityMemberVo(
studentId = randomNum(),
name = randomChinese(3)
), participant = _data.value
)
}
}
}
/**
* TODO 加载更多活动成员
*
* @param callback
*/
override fun loadMore(callback: (message: String) -> Unit) {
viewModelScope.launch {
_data.value?.apply {
val list = mutableListOf<ActivityMemberVo>()
list.addAll(this)
repeat(initSize) {
add(ActivityMemberVo(studentId = randomNum(), name = randomChinese(3)))
}
_allMember.value?.apply {
_data.postValue(list)
_allMember.postValue(
ActivityMembersVo(
organizer = organizer,
participant = list
)
)
callback("成功加载更多活动参与者")
}
}
}
}
}
data class BBSVo(val studentId: String, val name: String, val createTime: Date, val content: String)
/**
* 交流区数据状态管理
*
*/
class BBSViewModel : ScrollList<BBSVo>(), SendInterface {
override val initSize: Int = 10
val title = "发送评论"
override val newContent = StringForm(formDesc = "评论内容", textLength = 80)
override val _openDialog = MutableLiveData<Boolean>()
override val openDialog: LiveData<Boolean> = _openDialog
init {
load()
}
override fun openDialog() {
_openDialog.value = true
}
override fun closeDialog() {
_openDialog.value = false
}
/**
* TODO 发送评论
*
* @param callback
*/
override fun send(callback: (message: String) -> Unit) {
callback(NOT_IMPL_TIP)
}
/**
* TODO 加载评论
*
*/
override fun load() {
viewModelScope.launch {
_data.value?.apply {
repeat(initSize) {
add(
BBSVo(
studentId = randomNum(),
createTime = randomDateTime(),
content = randomChinese(50),
name = randomChinese(3)
)
)
}
}
}
}
/**
* TODO 加载更多评论
*
* @param callback
*/
override fun loadMore(callback: (message: String) -> Unit) {
viewModelScope.launch {
_data.value?.apply {
repeat(initSize) {
val list = mutableListOf<BBSVo>()
list.addAll(this)
repeat(initSize) {
add(
BBSVo(
studentId = randomNum(),
name = randomChinese(3),
createTime = randomDateTime(),
content = randomChinese(50)
)
)
}
_data.postValue(list)
callback("成功加载更多评论")
}
}
}
}
}