- 注释掉设备获取token的API接口和服务端点 - 移除设备信息查询相关的API接口和服务端点 - 删除登录功能的API接口和服务端点 - 移除部分收货功能的API接口和服务端点 - 注释掉添加物品采购单位的API接口和服务端点 - 相应移除ViewModel中的设备认证和登录逻辑 - 删除Repository中对应的网络请求方法
109 lines
3.6 KiB
Kotlin
109 lines
3.6 KiB
Kotlin
package com.sw.inbound.viewmodel
|
|
|
|
import androidx.lifecycle.viewModelScope
|
|
import com.sw.inbound.GlobalData
|
|
import com.sw.inbound.GlobalKey
|
|
import com.sw.inbound.model.request.LoginParam
|
|
import com.sw.inbound.model.response.CollectedFoodInfo
|
|
import com.sw.inbound.model.response.User
|
|
import com.sw.inbound.objbox.ObjectBox
|
|
import com.sw.inbound.repository.RemoteRepository
|
|
import com.sw.inbound.utils.GsonUtils
|
|
import com.sw.inbound.utils.SPUtil
|
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
|
import kotlinx.coroutines.flow.MutableStateFlow
|
|
import kotlinx.coroutines.flow.StateFlow
|
|
import kotlinx.coroutines.flow.asStateFlow
|
|
import kotlinx.coroutines.launch
|
|
import timber.log.Timber
|
|
import javax.inject.Inject
|
|
import kotlin.collections.remove
|
|
|
|
@HiltViewModel
|
|
class UserViewModel @Inject constructor(
|
|
private val repo: RemoteRepository
|
|
) : BaseViewModel(repo) {
|
|
|
|
// private var isFirstLaunch by mutableStateOf(true)
|
|
|
|
private val _user = MutableStateFlow<User?>(null)
|
|
val user = _user.asStateFlow()
|
|
|
|
fun getInitInfo() {
|
|
// Timber.d("getInitInfo isFirstLaunch = $isFirstLaunch")
|
|
//if (isFirstLaunch) {
|
|
|
|
// getUserInfo()
|
|
getDictType()
|
|
// isFirstLaunch = false
|
|
//}
|
|
}
|
|
|
|
// fun login(userName: String, password: String) = launchWithLoading {
|
|
// val loginParam = LoginParam(userName = userName, password = password)
|
|
// val response = repo.login(loginParam)
|
|
// if (parseResponse(response)) {
|
|
// SPUtil.getInstance().put(GlobalKey.KEY_USER_NAME, userName)
|
|
// _user.value = response.result
|
|
// saveToken(response.result)
|
|
// response.result?.token
|
|
// }
|
|
// }
|
|
|
|
fun getUserInfo() {
|
|
val userInfo = SPUtil.getInstance().get(GlobalKey.KEY_USER_INFO, "")
|
|
if (userInfo != null) {
|
|
_user.value = GsonUtils.fromJson(userInfo, User::class.java)
|
|
}
|
|
}
|
|
|
|
private fun saveToken(user: User?) {
|
|
user?.let {
|
|
SPUtil.getInstance().put(GlobalKey.KEY_USER_INFO, GsonUtils.toJson(it))
|
|
SPUtil.getInstance().put(GlobalKey.KEY_TOKEN, it.token)
|
|
GlobalData.appToken = it.token?:""
|
|
}
|
|
}
|
|
|
|
fun logout() {
|
|
SPUtil.getInstance().remove(GlobalKey.KEY_USER_INFO)
|
|
SPUtil.getInstance().remove(GlobalKey.KEY_TOKEN)
|
|
}
|
|
|
|
/**
|
|
* 已采集食材列表 UI 状态流
|
|
* 元素为按名称分组后的(名称,数量)数据
|
|
*/
|
|
private val _collectedFoodListState = MutableStateFlow<List<CollectedFoodInfo>>(emptyList())
|
|
val collectedFoodListState: StateFlow<List<CollectedFoodInfo>> = _collectedFoodListState.asStateFlow()
|
|
|
|
/**
|
|
* 加载已采集食材列表,按名称分组统计数量
|
|
* 使用属性查询只读 name 字段,不加载 foodVector,节省内存
|
|
* @param nameFilter 名称过滤关键词,为空时加载全部
|
|
*/
|
|
fun loadCollectedFoodList(nameFilter: String? = null) {
|
|
viewModelScope.launch {
|
|
val result = ObjectBox.queryFoodNameCounts(nameFilter)
|
|
_collectedFoodListState.value = result.map { (name, count) ->
|
|
CollectedFoodInfo(foodName = name, foodNum = count)
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 删除指定名称的所有采集记录,删除完成后刷新列表
|
|
* @param foodName 食材名称
|
|
* @param nameFilter 当前搜索关键词,用于删除后刷新列表
|
|
*/
|
|
fun removeCollectedFood(foodName: String, nameFilter: String? = null) {
|
|
viewModelScope.launch {
|
|
ObjectBox.remove(foodName)
|
|
loadCollectedFoodList(nameFilter)
|
|
}
|
|
}
|
|
|
|
override fun handleSensorScale(weight: Double) {
|
|
|
|
}
|
|
} |