package com.example.smart.ui.item
|
|
import android.content.Context
|
import android.text.TextUtils
|
import android.view.Gravity
|
import android.view.View
|
import android.widget.LinearLayout
|
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelStore
|
import androidx.lifecycle.ViewModelStoreOwner
|
import com.example.basecore.util.DateUtils
|
import com.example.basecore.util.SchemeUtils
|
import com.example.basecore.util.ToastUtils
|
import com.example.basecore.util.toast
|
import com.example.smart.R
|
import com.example.smart.bean.EntityRef
|
import com.example.smart.bean.IdRef
|
import com.example.smart.databinding.MissionPopLayoutBinding
|
import com.example.smart.enumlist.CheckTaskState
|
import com.example.smart.ui.item.contacts.bean.MemberLiveData
|
import com.example.smart.ui.item.popup.DynamicPopupViewModel
|
import com.example.smart.ui.item.popup.data.DriverInfo
|
import com.example.smart.ui.item.popup.data.MissionBean
|
import com.example.smart.ui.item.popup.widget.MissionDriverView
|
import com.example.smart.ui.project.bean.TaskDetailInfo
|
import com.example.smart.util.contactsScheme
|
import com.loper7.date_time_picker.dialog.CardDatePickerDialog
|
import razerdp.basepopup.BasePopupWindow
|
|
/**
|
* @description: 设置任务信息
|
* @param mode 模式:true=新建项目-设置任务流程(选择刚创建的项目),false=新建任务模式(选择计划可用的项目)
|
*/
|
class CreateMissionPopWindow(
|
val mContext: Context, val planId: Int, val projectId: Int,
|
val success: () -> Unit,
|
val mode: Boolean = true // true=新建项目模式,false=新建任务模式
|
) :
|
BasePopupWindow(mContext), ViewModelStoreOwner {
|
|
var gravity = Gravity.BOTTOM
|
|
private lateinit var binding: MissionPopLayoutBinding
|
|
private var customModel: CreateMissionViewModel? = null
|
|
private val driverInfoList = ArrayList<DriverInfo>()
|
private val bean = MissionBean(
|
ArrayList(),
|
ArrayList(),
|
ArrayList(),
|
ArrayList(),
|
"",
|
"",
|
ArrayList()
|
)
|
|
// 当前选中的项目ID
|
private var selectedProjectId: Int = projectId
|
|
// 项目列表(新建任务模式下使用)
|
private val projectList = ArrayList<com.example.smart.bean.CommonOptionsBean>()
|
|
init {
|
setContentView(R.layout.mission_pop_layout)
|
}
|
|
override fun onViewCreated(contentView: View) {
|
super.onViewCreated(contentView)
|
binding = MissionPopLayoutBinding.bind(contentView)
|
// 支持任何 Activity,而不仅仅是 CreateItemActivity
|
if (mContext is androidx.lifecycle.ViewModelStoreOwner) {
|
customModel = ViewModelProvider(mContext as androidx.lifecycle.ViewModelStoreOwner).get(CreateMissionViewModel::class.java)
|
} else {
|
customModel = ViewModelProvider(this).get(CreateMissionViewModel::class.java)
|
}
|
|
MemberLiveData.observeForever {
|
if (it == "leader") {
|
bean.leader.clear()
|
bean.leader.addAll(MemberLiveData.getLeader())
|
} else {
|
bean.crew.clear()
|
bean.crew.addAll(MemberLiveData.getCrews())
|
}
|
bindUserList()
|
}
|
|
initView()
|
|
// 设置默认组长为当前用户
|
setDefaultLeader()
|
|
// 根据模式设置项目选择框的显示
|
if (mode) {
|
// 新建项目模式:隐藏选择按钮,只显示项目名称
|
binding.projectSelectTv.visibility = View.GONE
|
setProjectName(projectId)
|
} else {
|
// 新建任务模式:显示选择按钮,加载项目列表
|
binding.projectSelectTv.visibility = View.VISIBLE
|
loadProjectList(planId)
|
}
|
|
addClickListener()
|
}
|
|
|
private fun bindUserList() {
|
var leaderTxt = ""
|
for (member in bean.leader) {
|
leaderTxt += if (bean.leader.last() != member) {
|
member.name + ","
|
} else {
|
member.name
|
}
|
}
|
binding.leaderTv.text = leaderTxt
|
|
var crewTxt = ""
|
for (member in bean.crew) {
|
crewTxt += if (bean.crew.last() != member) {
|
member.name + ","
|
} else {
|
member.name
|
}
|
}
|
binding.crewTv.text = crewTxt
|
}
|
|
private fun initView() {
|
binding.run {
|
if (!TextUtils.isEmpty(bean.date)) {
|
dateTv.text = bean.date
|
} else {
|
dateTv.text = DateUtils.getCurDate()
|
}
|
|
if (!TextUtils.isEmpty(bean.location)) {
|
locationTv.setText(bean.location)
|
}
|
bindUserList()
|
}
|
|
// addDriverView()
|
}
|
|
/**
|
* 加载项目列表(新建任务模式)
|
*/
|
private fun loadProjectList(planId: Int) {
|
customModel?.getAvailableProjects(planId) { list ->
|
projectList.clear()
|
projectList.addAll(list)
|
// 如果列表中有当前项目,选中它;否则选中第一个
|
if (projectList.any { it.code.toIntOrNull() == projectId }) {
|
selectedProjectId = projectId
|
} else if (projectList.isNotEmpty()) {
|
selectedProjectId = projectList[0].code.toIntOrNull() ?: projectId
|
}
|
updateProjectDisplay()
|
}
|
}
|
|
/**
|
* 设置项目名称(新建项目模式)
|
*/
|
private fun setProjectName(projectId: Int) {
|
customModel?.getProjectDetail(projectId) { project ->
|
binding.projectTv.text = project?.name ?: ""
|
selectedProjectId = projectId
|
}
|
}
|
|
/**
|
* 设置默认组长为当前用户
|
*/
|
private fun setDefaultLeader() {
|
customModel?.getCurrentUserProfile { profile ->
|
profile?.let {
|
// 如果当前没有组长,则设置当前用户为默认组长
|
if (MemberLiveData.getLeader().isEmpty()) {
|
val currentUser = com.example.smart.ui.item.contacts.bean.MembersBean(
|
roleName = "", // 角色名称,如果没有可以留空
|
mobile = it.mobile,
|
code = it.userId ?: "",
|
name = it.username
|
)
|
MemberLiveData.addLeader(currentUser)
|
bean.leader.clear()
|
bean.leader.addAll(MemberLiveData.getLeader())
|
bindUserList()
|
}
|
}
|
}
|
}
|
|
/**
|
* 更新项目显示
|
*/
|
private fun updateProjectDisplay() {
|
val project = projectList.find { it.code.toIntOrNull() == selectedProjectId }
|
binding.projectTv.text = project?.name ?: ""
|
}
|
|
/**
|
* 显示项目选择弹窗
|
*/
|
private fun showProjectSelector() {
|
if (projectList.isEmpty()) {
|
mContext.toast("暂无项目可选")
|
return
|
}
|
|
val popup = com.example.smart.widget.dialog.CommonPopupWindow(mContext)
|
popup.bindData(projectList)
|
popup.listener = object : com.example.smart.widget.dialog.CommonPopupWindow.ItemClickListener {
|
override fun onItemClick(bean: com.example.smart.bean.CommonOptionsBean) {
|
selectedProjectId = bean.code.toIntOrNull() ?: projectId
|
updateProjectDisplay()
|
popup.dismiss()
|
}
|
}
|
popup.popupGravity = Gravity.BOTTOM
|
popup.showPopupWindow()
|
}
|
|
|
private fun addDriverView() {
|
if (bean.drivers.isEmpty()) {
|
val info = DriverInfo(EntityRef(0), EntityRef(0))
|
generateDriverView(info)
|
return
|
}
|
for (int in 0 until bean.drivers.size) {
|
val data = bean.drivers[int]
|
generateDriverView(data)
|
}
|
for (data in bean.drivers) {
|
generateDriverView(data)
|
}
|
}
|
|
private fun generateDriverView(driver: DriverInfo) {
|
val params = LinearLayout.LayoutParams(
|
LinearLayout.LayoutParams.WRAP_CONTENT,
|
LinearLayout.LayoutParams.WRAP_CONTENT
|
)
|
val view = MissionDriverView(mContext, driver)
|
view.layoutParams = params
|
|
binding.driverContainer.addView(view)
|
|
driverInfoList.add(driver)
|
}
|
|
|
private fun showDatePicker() {
|
CardDatePickerDialog.builder(mContext)
|
.setTitle("更新日期")
|
.showBackNow(false)
|
.setThemeColor(mContext.getColor(R.color.tab_select))
|
.setOnChoose(listener = object : CardDatePickerDialog.OnChooseListener {
|
override fun onChoose(millisecond: Long) {
|
binding.dateTv.text = DateUtils.stampToDate(millisecond)
|
}
|
}).build().show()
|
}
|
|
private fun addClickListener() {
|
binding.apply {
|
dateImg.setOnClickListener {
|
showDatePicker()
|
}
|
dateTv.setOnClickListener {
|
showDatePicker()
|
}
|
|
leaderSelectTv.setOnClickListener {
|
SchemeUtils.openScheme(mContext, "$contactsScheme?from=leader")
|
}
|
|
crewSelectTv.setOnClickListener {
|
SchemeUtils.openScheme(mContext, "$contactsScheme?from=crew")
|
}
|
|
// 项目选择
|
projectSelectTv.setOnClickListener {
|
showProjectSelector()
|
}
|
|
projectTv.setOnClickListener {
|
if (!mode) { // 只有新建任务模式才能选择项目
|
showProjectSelector()
|
}
|
}
|
|
addTv.setOnClickListener {
|
val info = DriverInfo(null, null)
|
generateDriverView(info)
|
}
|
|
closeImg.setOnClickListener {
|
dismiss()
|
}
|
|
ensureTv.setOnClickListener {
|
val leaderTxt = binding.leaderTv.text.toString()
|
if (TextUtils.isEmpty(leaderTxt)) {
|
mContext.toast("请选择组长")
|
return@setOnClickListener
|
}
|
|
for (info in driverInfoList) {
|
if (info.driver != null && info.driver!!.id <= 0) {
|
ToastUtils.showToast(mContext, "请输入司机名称")
|
return@setOnClickListener
|
}
|
|
if (info.car != null && info.car!!.id <= 0) {
|
ToastUtils.showToast(mContext, "请输入车牌号")
|
return@setOnClickListener
|
}
|
}
|
|
bean.date = binding.dateTv.text.toString()
|
bean.location = binding.locationTv.text.toString()
|
|
bean.cars = ArrayList()
|
bean.useCarInfos.addAll(driverInfoList)
|
|
val leaders = ArrayList<EntityRef>()
|
for (leader in bean.leader) {
|
leaders.add(EntityRef(leader.code.toInt(), leader.name))
|
}
|
|
val crews = ArrayList<EntityRef>()
|
for (crew in bean.crew) {
|
crews.add(EntityRef(crew.code.toInt(), crew.name))
|
}
|
|
val drivers = ArrayList<EntityRef>()
|
|
|
val cars = ArrayList<EntityRef>()
|
|
|
for (info in driverInfoList) {
|
if (info.driver != null) {
|
drivers.add(EntityRef(info.driver!!.id, info.driver!!.name))
|
}
|
|
if (info.car != null) {
|
cars.add(EntityRef(info.car!!.id, info.car!!.name))
|
}
|
}
|
|
//id、不对需要调整
|
val bean = TaskDetailInfo(
|
0,
|
EntityRef(planId),
|
EntityRef(selectedProjectId),
|
client = null,
|
state = CheckTaskState.Published,
|
date = bean.date,
|
assemblePlace = bean.location,
|
createTime = "",
|
updateTime = "",
|
gps = ArrayList(),
|
location = "",
|
creator = EntityRef(0),
|
groupLeaders = leaders,
|
groupMembers = crews,
|
drivers = drivers,
|
cars = cars
|
|
|
)
|
customModel?.createTask(bean,
|
{
|
ToastUtils.showToast(mContext, "发布成功")
|
dismiss()
|
success()
|
}, {
|
ToastUtils.showToast(mContext, "发布失败")
|
dismiss()
|
})
|
|
// dismiss()
|
}
|
}
|
}
|
|
|
override fun onDestroy() {
|
super.onDestroy()
|
MemberLiveData.removeObserver {}
|
}
|
|
private val mViewModelStore = ViewModelStore()
|
|
|
override val viewModelStore: ViewModelStore = mViewModelStore
|
}
|