|
|
@@ -10,13 +10,15 @@ import com.drake.brv.utils.linear
|
|
|
import com.drake.brv.utils.models
|
|
|
import com.drake.brv.utils.setup
|
|
|
import com.grkj.data.enums.JobTicketStatusEnum
|
|
|
-import com.grkj.data.model.vo.UserManageVo
|
|
|
import com.grkj.iscs.R
|
|
|
import com.grkj.iscs.common.DataTransferConstants
|
|
|
import com.grkj.iscs.databinding.FragmentSelectMemeberBinding
|
|
|
import com.grkj.iscs.databinding.ItemSelectAllMemberBinding
|
|
|
import com.grkj.iscs.databinding.ItemSelectMemberBinding
|
|
|
import com.grkj.data.enums.RoleEnum
|
|
|
+import com.grkj.data.model.vo.JobTicketGroupDataVo
|
|
|
+import com.grkj.data.model.vo.JobUserVo
|
|
|
+import com.grkj.iscs.databinding.ItemLockerGroupBinding
|
|
|
import com.grkj.iscs.features.main.viewmodel.common.SelectMemberViewModel
|
|
|
import com.grkj.ui_base.base.BaseFragment
|
|
|
import com.grkj.ui_base.utils.CommonUtils
|
|
|
@@ -35,8 +37,9 @@ import kotlin.getValue
|
|
|
@AndroidEntryPoint
|
|
|
class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
|
|
|
private val viewModel: SelectMemberViewModel by viewModels()
|
|
|
- private var selectedLockerData: MutableList<UserManageVo> = mutableListOf()
|
|
|
- private var selectedColockerData: MutableList<UserManageVo> = mutableListOf()
|
|
|
+ private var selectedLockerData: MutableList<Pair<JobTicketGroupDataVo, MutableList<JobUserVo>>> =
|
|
|
+ mutableListOf()
|
|
|
+ private var selectedColockerData: MutableList<JobUserVo> = mutableListOf()
|
|
|
private var isLockerSelect = true
|
|
|
private var canSelectColoker = true
|
|
|
private var ticketId: Long? = null
|
|
|
@@ -79,35 +82,33 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
|
|
|
navController.popBackStack()
|
|
|
}
|
|
|
binding.lockerRv.linear(LinearLayout.HORIZONTAL).setup {
|
|
|
- addType<UserManageVo>(R.layout.item_select_member)
|
|
|
+ addType<Pair<JobTicketGroupDataVo, MutableList<JobUserVo>>>(R.layout.item_locker_group)
|
|
|
onBind {
|
|
|
- onLockerRVBinding(this)
|
|
|
+ onGroupLockerRVBinding(this)
|
|
|
}
|
|
|
}
|
|
|
binding.colockerRv.linear(LinearLayout.HORIZONTAL).setup {
|
|
|
- addType<UserManageVo>(R.layout.item_select_member)
|
|
|
+ addType<JobUserVo>(R.layout.item_select_member)
|
|
|
onBind {
|
|
|
onColockerRVBinding(this)
|
|
|
}
|
|
|
}
|
|
|
binding.allUserRv.grid(6).setup {
|
|
|
- addType<UserManageVo>(R.layout.item_select_all_member)
|
|
|
+ addType<JobUserVo>(R.layout.item_select_all_member)
|
|
|
onBind {
|
|
|
onAllUserRVBinding(this)
|
|
|
}
|
|
|
}
|
|
|
binding.selectColockerLayout.isVisible = canSelectColoker
|
|
|
- binding.selectLockerTv.setDebouncedClickListener {
|
|
|
- setLockerData()
|
|
|
- }
|
|
|
binding.selectColockerTv.setDebouncedClickListener {
|
|
|
+ binding.lockerRv.adapter?.notifyDataSetChanged()
|
|
|
setColockerData()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private fun BindingAdapter.BindingViewHolder.onAllUserRVBinding(holder: BindingAdapter.BindingViewHolder) {
|
|
|
val itemBinding = holder.getBinding<ItemSelectAllMemberBinding>()
|
|
|
- val item = holder.getModel<UserManageVo>()
|
|
|
+ val item = holder.getModel<JobUserVo>()
|
|
|
itemBinding.lockerName.text = item.nickName
|
|
|
itemBinding.lockerIcon.isSelected = item.isSelected
|
|
|
(item.avatar
|
|
|
@@ -122,16 +123,9 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
|
|
|
if (!isLockerSelect && (selectedColockerData.size == 1 || (viewModel.ticketUsers.isNotEmpty() && viewModel.ticketUsers.find { it.userId == item.userId }?.jobStatus == "1"))) {
|
|
|
PopTip.build().tip(com.grkj.ui_base.R.string.can_not_remove_current_colocker)
|
|
|
return@setOnClickListener
|
|
|
- } else if (selectedLockerData.size == 1 && viewModel.jobTicketData != null && viewModel.jobTicketData?.ticketStatus != JobTicketStatusEnum.SELECT_MEMBER.status) {
|
|
|
- PopTip.build().tip(com.grkj.ui_base.R.string.can_not_remove_current_locker)
|
|
|
- return@setOnClickListener
|
|
|
}
|
|
|
item.isSelected = false
|
|
|
- if (isLockerSelect) {
|
|
|
- selectedLockerData.removeIf { it.userId == item.userId }
|
|
|
- } else {
|
|
|
- selectedColockerData.removeIf { it.userId == item.userId }
|
|
|
- }
|
|
|
+ selectedColockerData.removeIf { it.userId == item.userId }
|
|
|
} else {
|
|
|
item.isSelected = true
|
|
|
if ((item.avatar
|
|
|
@@ -140,10 +134,14 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
|
|
|
PopTip.build().tip(R.string.current_user_has_not_face_data)
|
|
|
}
|
|
|
if (isLockerSelect) {
|
|
|
- viewModel.userData.filter { it.userId in selectedLockerData.map { it.userId } }
|
|
|
- .forEach { it.isSelected = false }
|
|
|
- selectedLockerData.clear()
|
|
|
- selectedLockerData.add(item)
|
|
|
+ viewModel.userData.filter {
|
|
|
+ it.userId in (selectedLockerData.find { viewModel.currentSelectGroup?.groupId == it.first.groupId }?.second?.map { it.userId }
|
|
|
+ ?: mutableListOf())
|
|
|
+ }.forEach { it.isSelected = false }
|
|
|
+ selectedLockerData.find { it.first.groupId == viewModel.currentSelectGroup?.groupId }?.second?.clear()
|
|
|
+ selectedLockerData.find { it.first.groupId == viewModel.currentSelectGroup?.groupId }?.second?.add(
|
|
|
+ item
|
|
|
+ )
|
|
|
} else {
|
|
|
selectedColockerData.add(item)
|
|
|
}
|
|
|
@@ -157,9 +155,38 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private fun BindingAdapter.BindingViewHolder.onLockerRVBinding(holder: BindingAdapter.BindingViewHolder) {
|
|
|
+ private fun BindingAdapter.BindingViewHolder.onGroupLockerRVBinding(holder: BindingAdapter.BindingViewHolder) {
|
|
|
+ val itemBinding = holder.getBinding<ItemLockerGroupBinding>()
|
|
|
+ val item = holder.getModel<Pair<JobTicketGroupDataVo, MutableList<JobUserVo>>>()
|
|
|
+ itemBinding.groupName.text = item.first.groupName
|
|
|
+ itemBinding.groupTitleLayout.setDebouncedClickListener {
|
|
|
+ isLockerSelect = true
|
|
|
+ itemBinding.groupTitleLayout.isSelected = !itemBinding.groupTitleLayout.isSelected
|
|
|
+ itemBinding.groupName.isSelected = itemBinding.groupTitleLayout.isSelected
|
|
|
+ viewModel.currentSelectGroup = item.first
|
|
|
+ binding.allUserRv.models =
|
|
|
+ viewModel.userData.filter { it.roleKeys.contains(RoleEnum.JTLOCKER.roleKey) }
|
|
|
+ .filter { it.isSelected == false }
|
|
|
+ adapter.notifyDataSetChanged()
|
|
|
+ }
|
|
|
+ itemBinding.groupTitleLayout.isSelected =
|
|
|
+ isLockerSelect && item.first.groupId == viewModel.currentSelectGroup?.groupId
|
|
|
+ itemBinding.groupName.isSelected =
|
|
|
+ isLockerSelect && item.first.groupId == viewModel.currentSelectGroup?.groupId
|
|
|
+ itemBinding.groupLockerRv.linear(LinearLayout.HORIZONTAL).setup {
|
|
|
+ addType<JobUserVo>(R.layout.item_select_member)
|
|
|
+ onBind {
|
|
|
+ onLockerRVBinding(item.first, this)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun BindingAdapter.BindingViewHolder.onLockerRVBinding(
|
|
|
+ groupData: JobTicketGroupDataVo,
|
|
|
+ holder: BindingAdapter.BindingViewHolder
|
|
|
+ ) {
|
|
|
val itemBinding = holder.getBinding<ItemSelectMemberBinding>()
|
|
|
- val item = holder.getModel<UserManageVo>()
|
|
|
+ val item = holder.getModel<JobUserVo>()
|
|
|
itemBinding.lockerName.text = item.nickName
|
|
|
itemBinding.lockerIcon.isSelected = true
|
|
|
(item.avatar
|
|
|
@@ -170,11 +197,11 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
|
|
|
}
|
|
|
} ?: itemBinding.lockerIcon.setImageResource(R.drawable.icon_select_member)
|
|
|
itemBinding.root.setOnClickListener {
|
|
|
- if (selectedLockerData.size == 1 && viewModel.jobTicketData != null && viewModel.jobTicketData?.ticketStatus != JobTicketStatusEnum.SELECT_MEMBER.status) {
|
|
|
+ if (selectedLockerData.find { it.first.groupId == groupData.groupId }?.second?.size == 1 && viewModel.jobTicketData != null && viewModel.jobTicketData?.ticketStatus != JobTicketStatusEnum.SELECT_MEMBER.status) {
|
|
|
PopTip.build().tip(com.grkj.ui_base.R.string.can_not_remove_current_locker)
|
|
|
return@setOnClickListener
|
|
|
}
|
|
|
- selectedLockerData.removeIf { it.userId == item.userId }
|
|
|
+ selectedLockerData.find { it.first.groupId == groupData.groupId }?.second?.clear()
|
|
|
viewModel.userData.find { it.userId == item.userId }?.isSelected = false
|
|
|
adapter.notifyDataSetChanged()
|
|
|
binding.allUserRv.adapter?.notifyDataSetChanged()
|
|
|
@@ -183,7 +210,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
|
|
|
|
|
|
private fun BindingAdapter.BindingViewHolder.onColockerRVBinding(holder: BindingAdapter.BindingViewHolder) {
|
|
|
val itemBinding = holder.getBinding<ItemSelectMemberBinding>()
|
|
|
- val item = holder.getModel<UserManageVo>()
|
|
|
+ val item = holder.getModel<JobUserVo>()
|
|
|
itemBinding.lockerName.text = item.nickName
|
|
|
itemBinding.lockerIcon.isSelected = true
|
|
|
(item.avatar
|
|
|
@@ -207,15 +234,16 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
|
|
|
|
|
|
private fun setLockerData() {
|
|
|
isLockerSelect = true
|
|
|
- binding.selectMemberTip.text = CommonUtils.getStr(R.string.select_locker_tip)
|
|
|
+ binding.selectMemberTip.text =
|
|
|
+ getString(R.string.select_locker_tip, viewModel.currentSelectGroup?.groupName ?: "")
|
|
|
binding.lockerRv.models = selectedLockerData
|
|
|
binding.allUserRv.models =
|
|
|
viewModel.userData.filter { it.roleKeys.contains(RoleEnum.JTLOCKER.roleKey) }.apply {
|
|
|
forEach {
|
|
|
- it.isSelected = it.userId in selectedLockerData.map { it.userId }
|
|
|
+ it.isSelected = it.userId in selectedLockerData.map { it.second }.flatten()
|
|
|
+ .map { it.userId }
|
|
|
}
|
|
|
- sortedBy { it.isSelected }
|
|
|
- }
|
|
|
+ }.filter { it.isSelected == false }
|
|
|
}
|
|
|
|
|
|
private fun setColockerData() {
|
|
|
@@ -242,7 +270,8 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
|
|
|
GlobalDataTempStore.getInstance()
|
|
|
.getData(DataTransferConstants.KEY_SELECTED_MEMBER_LOCKER_DATA)
|
|
|
if (tempSelectedLockerData is List<*>) {
|
|
|
- selectedLockerData = (tempSelectedLockerData as List<UserManageVo>).toMutableList()
|
|
|
+ selectedLockerData =
|
|
|
+ (tempSelectedLockerData as List<Pair<JobTicketGroupDataVo, MutableList<JobUserVo>>>).toMutableList()
|
|
|
binding.lockerRv.models = selectedLockerData
|
|
|
}
|
|
|
}
|
|
|
@@ -254,7 +283,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
|
|
|
.getData(DataTransferConstants.KEY_SELECTED_MEMBER_COLOCKER_DATA)
|
|
|
if (tempSelectedColockerData is List<*>) {
|
|
|
selectedColockerData =
|
|
|
- (tempSelectedColockerData as List<UserManageVo>).toMutableList()
|
|
|
+ (tempSelectedColockerData as List<JobUserVo>).toMutableList()
|
|
|
binding.colockerRv.models = selectedColockerData
|
|
|
}
|
|
|
}
|