diff --git a/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt b/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt index b68bf67..4c67142 100644 --- a/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt +++ b/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt @@ -27,6 +27,7 @@ private var inflater: LayoutInflater = LayoutInflater.from(ctx) private var multipleSelected = mutableSetOf() private var selectedItems = ArrayList() + private var indexArray = ArrayList() private var deleteAction = QMUISwipeAction.ActionBuilder() .icon(R.mipmap.delete_task.convertDrawable(ctx)) @@ -82,7 +83,8 @@ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { if (holder is SwipeViewHolder) { //绑定数据。标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 - val item = dataRows[position - 1] + val i = position - 1 + val item = dataRows[i] val beginDate = if (item.beginDate.isNullOrBlank()) { "时间未知" } else { @@ -129,19 +131,21 @@ //多选 val multiCheckBox: CheckBox = holder.itemView.findViewById(R.id.multiCheckBox) - multiCheckBox.isSelected = multipleSelected.contains(position - 1) + multiCheckBox.isSelected = multipleSelected.contains(i) multiCheckBox.setOnClickListener { - if (multipleSelected.contains(position - 1)) { - multipleSelected.remove(position - 1) - selectedItems.remove(dataRows[position - 1]) + if (multipleSelected.contains(i)) { + multipleSelected.remove(i) + selectedItems.remove(dataRows[i]) + indexArray.remove(i) holder.itemView.isSelected = false } else { - multipleSelected.add(position - 1) - selectedItems.add(dataRows[position - 1]) + multipleSelected.add(i) + selectedItems.add(dataRows[i]) + indexArray.add(i) holder.itemView.isSelected = true } - itemCheckedListener?.onItemChecked(selectedItems) + itemCheckedListener?.onItemChecked(indexArray, selectedItems) } } } @@ -151,7 +155,10 @@ interface OnItemCheckedListener { fun onItemClicked(item: TaskListModel.DataModel.RowsModel) - fun onItemChecked(items: ArrayList) + fun onItemChecked( + indexArray: ArrayList, + items: ArrayList + ) } fun setOnItemCheckedListener(listener: OnItemCheckedListener) { diff --git a/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt b/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt index b68bf67..4c67142 100644 --- a/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt +++ b/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt @@ -27,6 +27,7 @@ private var inflater: LayoutInflater = LayoutInflater.from(ctx) private var multipleSelected = mutableSetOf() private var selectedItems = ArrayList() + private var indexArray = ArrayList() private var deleteAction = QMUISwipeAction.ActionBuilder() .icon(R.mipmap.delete_task.convertDrawable(ctx)) @@ -82,7 +83,8 @@ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { if (holder is SwipeViewHolder) { //绑定数据。标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 - val item = dataRows[position - 1] + val i = position - 1 + val item = dataRows[i] val beginDate = if (item.beginDate.isNullOrBlank()) { "时间未知" } else { @@ -129,19 +131,21 @@ //多选 val multiCheckBox: CheckBox = holder.itemView.findViewById(R.id.multiCheckBox) - multiCheckBox.isSelected = multipleSelected.contains(position - 1) + multiCheckBox.isSelected = multipleSelected.contains(i) multiCheckBox.setOnClickListener { - if (multipleSelected.contains(position - 1)) { - multipleSelected.remove(position - 1) - selectedItems.remove(dataRows[position - 1]) + if (multipleSelected.contains(i)) { + multipleSelected.remove(i) + selectedItems.remove(dataRows[i]) + indexArray.remove(i) holder.itemView.isSelected = false } else { - multipleSelected.add(position - 1) - selectedItems.add(dataRows[position - 1]) + multipleSelected.add(i) + selectedItems.add(dataRows[i]) + indexArray.add(i) holder.itemView.isSelected = true } - itemCheckedListener?.onItemChecked(selectedItems) + itemCheckedListener?.onItemChecked(indexArray, selectedItems) } } } @@ -151,7 +155,10 @@ interface OnItemCheckedListener { fun onItemClicked(item: TaskListModel.DataModel.RowsModel) - fun onItemChecked(items: ArrayList) + fun onItemChecked( + indexArray: ArrayList, + items: ArrayList + ) } fun setOnItemCheckedListener(listener: OnItemCheckedListener) { diff --git a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt index b88846a..27b6bab 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt @@ -41,6 +41,8 @@ private lateinit var taskAdapter: TaskAdapter private var dataBeans: MutableList = ArrayList() private var selectedItems: MutableList = ArrayList() + private var batchDeletePositions: MutableList = ArrayList() + private var singleDeletePosition = -1 private var page = 1 private var isRefresh = false private var isLoadMore = false @@ -115,7 +117,11 @@ requireContext().navigatePageTo(item.id) } - override fun onItemChecked(items: ArrayList) { + override fun onItemChecked( + indexArray: ArrayList, + items: ArrayList + ) { + batchDeletePositions = indexArray selectedItems = items } }) @@ -145,9 +151,26 @@ super.onClickAction(swipeAction, selected, action) //标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 val adapterPosition = selected!!.bindingAdapterPosition - 1 + singleDeletePosition = adapterPosition val rowsModel = dataBeans[adapterPosition] if (action?.text == "删除") { - deleteItem(rowsModel) + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setMessage("删除后将无法恢复,是否继续?") + .setNegativeButton("容我想想") + .setPositiveButton("已经想好") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + swipeAction?.clear() + taskViewModel.deleteTask(arrayOf(rowsModel.id)) + } + }).build().show() } else { AlertInputDialog.Builder() .setContext(requireContext()) @@ -170,25 +193,6 @@ } }) - private fun deleteItem(rowsModel: TaskListModel.DataModel.RowsModel) { - AlertControlDialog.Builder() - .setContext(requireContext()) - .setTitle("提示") - .setMessage("删除后将无法恢复,是否继续?") - .setNegativeButton("容我想想") - .setPositiveButton("已经想好") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - "删除${rowsModel.taskCode}".show(requireContext()) - } - }).build().show() - } - override fun initEvent() { binding.calendarView.setOnClickListener { DateRangeActionSheet.Builder().setContext(requireContext()) @@ -253,7 +257,12 @@ } binding.deleteTaskButton.setOnClickListener { - selectedItems.size.toString().show(requireContext()) + val ids = ArrayList() + selectedItems.forEach { task -> + ids.add(task.id) + } + + taskViewModel.deleteTask(ids.toTypedArray()) } binding.taskSettingsButton.setOnClickListener { @@ -323,6 +332,36 @@ } } } + + taskViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show( + requireActivity(), "删除中,请稍后..." + ) + + LoadState.Success -> { + LoadingDialogHub.dismiss() + if (batchDeletePositions.isEmpty()) { + dataBeans.remove(dataBeans[singleDeletePosition]) + taskAdapter.notifyItemRemoved(singleDeletePosition) + taskAdapter.notifyItemRangeChanged( + singleDeletePosition, dataBeans.size - singleDeletePosition + ) + } else { + batchDeletePositions.forEach { index -> + dataBeans.remove(dataBeans[index]) + } + taskAdapter.notifyDataSetChanged() + } + "删除成功".show(requireActivity()) + } + + else -> { + LoadingDialogHub.dismiss() + "删除失败,请重试".show(requireActivity()) + } + } + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt b/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt index b68bf67..4c67142 100644 --- a/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt +++ b/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt @@ -27,6 +27,7 @@ private var inflater: LayoutInflater = LayoutInflater.from(ctx) private var multipleSelected = mutableSetOf() private var selectedItems = ArrayList() + private var indexArray = ArrayList() private var deleteAction = QMUISwipeAction.ActionBuilder() .icon(R.mipmap.delete_task.convertDrawable(ctx)) @@ -82,7 +83,8 @@ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { if (holder is SwipeViewHolder) { //绑定数据。标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 - val item = dataRows[position - 1] + val i = position - 1 + val item = dataRows[i] val beginDate = if (item.beginDate.isNullOrBlank()) { "时间未知" } else { @@ -129,19 +131,21 @@ //多选 val multiCheckBox: CheckBox = holder.itemView.findViewById(R.id.multiCheckBox) - multiCheckBox.isSelected = multipleSelected.contains(position - 1) + multiCheckBox.isSelected = multipleSelected.contains(i) multiCheckBox.setOnClickListener { - if (multipleSelected.contains(position - 1)) { - multipleSelected.remove(position - 1) - selectedItems.remove(dataRows[position - 1]) + if (multipleSelected.contains(i)) { + multipleSelected.remove(i) + selectedItems.remove(dataRows[i]) + indexArray.remove(i) holder.itemView.isSelected = false } else { - multipleSelected.add(position - 1) - selectedItems.add(dataRows[position - 1]) + multipleSelected.add(i) + selectedItems.add(dataRows[i]) + indexArray.add(i) holder.itemView.isSelected = true } - itemCheckedListener?.onItemChecked(selectedItems) + itemCheckedListener?.onItemChecked(indexArray, selectedItems) } } } @@ -151,7 +155,10 @@ interface OnItemCheckedListener { fun onItemClicked(item: TaskListModel.DataModel.RowsModel) - fun onItemChecked(items: ArrayList) + fun onItemChecked( + indexArray: ArrayList, + items: ArrayList + ) } fun setOnItemCheckedListener(listener: OnItemCheckedListener) { diff --git a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt index b88846a..27b6bab 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt @@ -41,6 +41,8 @@ private lateinit var taskAdapter: TaskAdapter private var dataBeans: MutableList = ArrayList() private var selectedItems: MutableList = ArrayList() + private var batchDeletePositions: MutableList = ArrayList() + private var singleDeletePosition = -1 private var page = 1 private var isRefresh = false private var isLoadMore = false @@ -115,7 +117,11 @@ requireContext().navigatePageTo(item.id) } - override fun onItemChecked(items: ArrayList) { + override fun onItemChecked( + indexArray: ArrayList, + items: ArrayList + ) { + batchDeletePositions = indexArray selectedItems = items } }) @@ -145,9 +151,26 @@ super.onClickAction(swipeAction, selected, action) //标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 val adapterPosition = selected!!.bindingAdapterPosition - 1 + singleDeletePosition = adapterPosition val rowsModel = dataBeans[adapterPosition] if (action?.text == "删除") { - deleteItem(rowsModel) + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setMessage("删除后将无法恢复,是否继续?") + .setNegativeButton("容我想想") + .setPositiveButton("已经想好") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + swipeAction?.clear() + taskViewModel.deleteTask(arrayOf(rowsModel.id)) + } + }).build().show() } else { AlertInputDialog.Builder() .setContext(requireContext()) @@ -170,25 +193,6 @@ } }) - private fun deleteItem(rowsModel: TaskListModel.DataModel.RowsModel) { - AlertControlDialog.Builder() - .setContext(requireContext()) - .setTitle("提示") - .setMessage("删除后将无法恢复,是否继续?") - .setNegativeButton("容我想想") - .setPositiveButton("已经想好") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - "删除${rowsModel.taskCode}".show(requireContext()) - } - }).build().show() - } - override fun initEvent() { binding.calendarView.setOnClickListener { DateRangeActionSheet.Builder().setContext(requireContext()) @@ -253,7 +257,12 @@ } binding.deleteTaskButton.setOnClickListener { - selectedItems.size.toString().show(requireContext()) + val ids = ArrayList() + selectedItems.forEach { task -> + ids.add(task.id) + } + + taskViewModel.deleteTask(ids.toTypedArray()) } binding.taskSettingsButton.setOnClickListener { @@ -323,6 +332,36 @@ } } } + + taskViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show( + requireActivity(), "删除中,请稍后..." + ) + + LoadState.Success -> { + LoadingDialogHub.dismiss() + if (batchDeletePositions.isEmpty()) { + dataBeans.remove(dataBeans[singleDeletePosition]) + taskAdapter.notifyItemRemoved(singleDeletePosition) + taskAdapter.notifyItemRangeChanged( + singleDeletePosition, dataBeans.size - singleDeletePosition + ) + } else { + batchDeletePositions.forEach { index -> + dataBeans.remove(dataBeans[index]) + } + taskAdapter.notifyDataSetChanged() + } + "删除成功".show(requireActivity()) + } + + else -> { + LoadingDialogHub.dismiss() + "删除失败,请重试".show(requireActivity()) + } + } + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 2a50819..1fe8204 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -80,6 +80,15 @@ ): String /** + * 删除任务 + */ + @POST("/system/busPatrolTask/batchDelete") + suspend fun deleteTask( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 任务详情 */ @POST("/system/busPatrolTask/detail") diff --git a/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt b/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt index b68bf67..4c67142 100644 --- a/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt +++ b/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt @@ -27,6 +27,7 @@ private var inflater: LayoutInflater = LayoutInflater.from(ctx) private var multipleSelected = mutableSetOf() private var selectedItems = ArrayList() + private var indexArray = ArrayList() private var deleteAction = QMUISwipeAction.ActionBuilder() .icon(R.mipmap.delete_task.convertDrawable(ctx)) @@ -82,7 +83,8 @@ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { if (holder is SwipeViewHolder) { //绑定数据。标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 - val item = dataRows[position - 1] + val i = position - 1 + val item = dataRows[i] val beginDate = if (item.beginDate.isNullOrBlank()) { "时间未知" } else { @@ -129,19 +131,21 @@ //多选 val multiCheckBox: CheckBox = holder.itemView.findViewById(R.id.multiCheckBox) - multiCheckBox.isSelected = multipleSelected.contains(position - 1) + multiCheckBox.isSelected = multipleSelected.contains(i) multiCheckBox.setOnClickListener { - if (multipleSelected.contains(position - 1)) { - multipleSelected.remove(position - 1) - selectedItems.remove(dataRows[position - 1]) + if (multipleSelected.contains(i)) { + multipleSelected.remove(i) + selectedItems.remove(dataRows[i]) + indexArray.remove(i) holder.itemView.isSelected = false } else { - multipleSelected.add(position - 1) - selectedItems.add(dataRows[position - 1]) + multipleSelected.add(i) + selectedItems.add(dataRows[i]) + indexArray.add(i) holder.itemView.isSelected = true } - itemCheckedListener?.onItemChecked(selectedItems) + itemCheckedListener?.onItemChecked(indexArray, selectedItems) } } } @@ -151,7 +155,10 @@ interface OnItemCheckedListener { fun onItemClicked(item: TaskListModel.DataModel.RowsModel) - fun onItemChecked(items: ArrayList) + fun onItemChecked( + indexArray: ArrayList, + items: ArrayList + ) } fun setOnItemCheckedListener(listener: OnItemCheckedListener) { diff --git a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt index b88846a..27b6bab 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt @@ -41,6 +41,8 @@ private lateinit var taskAdapter: TaskAdapter private var dataBeans: MutableList = ArrayList() private var selectedItems: MutableList = ArrayList() + private var batchDeletePositions: MutableList = ArrayList() + private var singleDeletePosition = -1 private var page = 1 private var isRefresh = false private var isLoadMore = false @@ -115,7 +117,11 @@ requireContext().navigatePageTo(item.id) } - override fun onItemChecked(items: ArrayList) { + override fun onItemChecked( + indexArray: ArrayList, + items: ArrayList + ) { + batchDeletePositions = indexArray selectedItems = items } }) @@ -145,9 +151,26 @@ super.onClickAction(swipeAction, selected, action) //标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 val adapterPosition = selected!!.bindingAdapterPosition - 1 + singleDeletePosition = adapterPosition val rowsModel = dataBeans[adapterPosition] if (action?.text == "删除") { - deleteItem(rowsModel) + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setMessage("删除后将无法恢复,是否继续?") + .setNegativeButton("容我想想") + .setPositiveButton("已经想好") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + swipeAction?.clear() + taskViewModel.deleteTask(arrayOf(rowsModel.id)) + } + }).build().show() } else { AlertInputDialog.Builder() .setContext(requireContext()) @@ -170,25 +193,6 @@ } }) - private fun deleteItem(rowsModel: TaskListModel.DataModel.RowsModel) { - AlertControlDialog.Builder() - .setContext(requireContext()) - .setTitle("提示") - .setMessage("删除后将无法恢复,是否继续?") - .setNegativeButton("容我想想") - .setPositiveButton("已经想好") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - "删除${rowsModel.taskCode}".show(requireContext()) - } - }).build().show() - } - override fun initEvent() { binding.calendarView.setOnClickListener { DateRangeActionSheet.Builder().setContext(requireContext()) @@ -253,7 +257,12 @@ } binding.deleteTaskButton.setOnClickListener { - selectedItems.size.toString().show(requireContext()) + val ids = ArrayList() + selectedItems.forEach { task -> + ids.add(task.id) + } + + taskViewModel.deleteTask(ids.toTypedArray()) } binding.taskSettingsButton.setOnClickListener { @@ -323,6 +332,36 @@ } } } + + taskViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show( + requireActivity(), "删除中,请稍后..." + ) + + LoadState.Success -> { + LoadingDialogHub.dismiss() + if (batchDeletePositions.isEmpty()) { + dataBeans.remove(dataBeans[singleDeletePosition]) + taskAdapter.notifyItemRemoved(singleDeletePosition) + taskAdapter.notifyItemRangeChanged( + singleDeletePosition, dataBeans.size - singleDeletePosition + ) + } else { + batchDeletePositions.forEach { index -> + dataBeans.remove(dataBeans[index]) + } + taskAdapter.notifyDataSetChanged() + } + "删除成功".show(requireActivity()) + } + + else -> { + LoadingDialogHub.dismiss() + "删除失败,请重试".show(requireActivity()) + } + } + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 2a50819..1fe8204 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -80,6 +80,15 @@ ): String /** + * 删除任务 + */ + @POST("/system/busPatrolTask/batchDelete") + suspend fun deleteTask( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 任务详情 */ @POST("/system/busPatrolTask/detail") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index c960e49..8aee206 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -4,7 +4,9 @@ import com.casic.br.ktd.utils.AuthenticationHelper import com.casic.br.ktd.utils.FileType import com.casic.br.ktd.utils.LocaleConstant +import com.google.gson.Gson import com.google.gson.JsonObject +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType @@ -23,6 +25,8 @@ RetrofitFactory.createRetrofit(httpConfig) } + private val gson by lazy { Gson() } + /** * 验证PublicKey */ @@ -156,6 +160,21 @@ } /** + * 删除任务 + */ + suspend fun deleteTask(ids: Array): String { + val param = JsonObject() + param.add( + "ids", gson.toJsonTree(ids, object : TypeToken>() {}.type).asJsonArray + ) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.deleteTask(AuthenticationHelper.token, requestBody) + } + + /** * 获取巡检车列表 */ suspend fun getVehicles(): String { diff --git a/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt b/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt index b68bf67..4c67142 100644 --- a/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt +++ b/app/src/main/java/com/casic/br/ktd/adapter/TaskAdapter.kt @@ -27,6 +27,7 @@ private var inflater: LayoutInflater = LayoutInflater.from(ctx) private var multipleSelected = mutableSetOf() private var selectedItems = ArrayList() + private var indexArray = ArrayList() private var deleteAction = QMUISwipeAction.ActionBuilder() .icon(R.mipmap.delete_task.convertDrawable(ctx)) @@ -82,7 +83,8 @@ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { if (holder is SwipeViewHolder) { //绑定数据。标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 - val item = dataRows[position - 1] + val i = position - 1 + val item = dataRows[i] val beginDate = if (item.beginDate.isNullOrBlank()) { "时间未知" } else { @@ -129,19 +131,21 @@ //多选 val multiCheckBox: CheckBox = holder.itemView.findViewById(R.id.multiCheckBox) - multiCheckBox.isSelected = multipleSelected.contains(position - 1) + multiCheckBox.isSelected = multipleSelected.contains(i) multiCheckBox.setOnClickListener { - if (multipleSelected.contains(position - 1)) { - multipleSelected.remove(position - 1) - selectedItems.remove(dataRows[position - 1]) + if (multipleSelected.contains(i)) { + multipleSelected.remove(i) + selectedItems.remove(dataRows[i]) + indexArray.remove(i) holder.itemView.isSelected = false } else { - multipleSelected.add(position - 1) - selectedItems.add(dataRows[position - 1]) + multipleSelected.add(i) + selectedItems.add(dataRows[i]) + indexArray.add(i) holder.itemView.isSelected = true } - itemCheckedListener?.onItemChecked(selectedItems) + itemCheckedListener?.onItemChecked(indexArray, selectedItems) } } } @@ -151,7 +155,10 @@ interface OnItemCheckedListener { fun onItemClicked(item: TaskListModel.DataModel.RowsModel) - fun onItemChecked(items: ArrayList) + fun onItemChecked( + indexArray: ArrayList, + items: ArrayList + ) } fun setOnItemCheckedListener(listener: OnItemCheckedListener) { diff --git a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt index b88846a..27b6bab 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt @@ -41,6 +41,8 @@ private lateinit var taskAdapter: TaskAdapter private var dataBeans: MutableList = ArrayList() private var selectedItems: MutableList = ArrayList() + private var batchDeletePositions: MutableList = ArrayList() + private var singleDeletePosition = -1 private var page = 1 private var isRefresh = false private var isLoadMore = false @@ -115,7 +117,11 @@ requireContext().navigatePageTo(item.id) } - override fun onItemChecked(items: ArrayList) { + override fun onItemChecked( + indexArray: ArrayList, + items: ArrayList + ) { + batchDeletePositions = indexArray selectedItems = items } }) @@ -145,9 +151,26 @@ super.onClickAction(swipeAction, selected, action) //标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 val adapterPosition = selected!!.bindingAdapterPosition - 1 + singleDeletePosition = adapterPosition val rowsModel = dataBeans[adapterPosition] if (action?.text == "删除") { - deleteItem(rowsModel) + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setMessage("删除后将无法恢复,是否继续?") + .setNegativeButton("容我想想") + .setPositiveButton("已经想好") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + swipeAction?.clear() + taskViewModel.deleteTask(arrayOf(rowsModel.id)) + } + }).build().show() } else { AlertInputDialog.Builder() .setContext(requireContext()) @@ -170,25 +193,6 @@ } }) - private fun deleteItem(rowsModel: TaskListModel.DataModel.RowsModel) { - AlertControlDialog.Builder() - .setContext(requireContext()) - .setTitle("提示") - .setMessage("删除后将无法恢复,是否继续?") - .setNegativeButton("容我想想") - .setPositiveButton("已经想好") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - "删除${rowsModel.taskCode}".show(requireContext()) - } - }).build().show() - } - override fun initEvent() { binding.calendarView.setOnClickListener { DateRangeActionSheet.Builder().setContext(requireContext()) @@ -253,7 +257,12 @@ } binding.deleteTaskButton.setOnClickListener { - selectedItems.size.toString().show(requireContext()) + val ids = ArrayList() + selectedItems.forEach { task -> + ids.add(task.id) + } + + taskViewModel.deleteTask(ids.toTypedArray()) } binding.taskSettingsButton.setOnClickListener { @@ -323,6 +332,36 @@ } } } + + taskViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show( + requireActivity(), "删除中,请稍后..." + ) + + LoadState.Success -> { + LoadingDialogHub.dismiss() + if (batchDeletePositions.isEmpty()) { + dataBeans.remove(dataBeans[singleDeletePosition]) + taskAdapter.notifyItemRemoved(singleDeletePosition) + taskAdapter.notifyItemRangeChanged( + singleDeletePosition, dataBeans.size - singleDeletePosition + ) + } else { + batchDeletePositions.forEach { index -> + dataBeans.remove(dataBeans[index]) + } + taskAdapter.notifyDataSetChanged() + } + "删除成功".show(requireActivity()) + } + + else -> { + LoadingDialogHub.dismiss() + "删除失败,请重试".show(requireActivity()) + } + } + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 2a50819..1fe8204 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -80,6 +80,15 @@ ): String /** + * 删除任务 + */ + @POST("/system/busPatrolTask/batchDelete") + suspend fun deleteTask( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 任务详情 */ @POST("/system/busPatrolTask/detail") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index c960e49..8aee206 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -4,7 +4,9 @@ import com.casic.br.ktd.utils.AuthenticationHelper import com.casic.br.ktd.utils.FileType import com.casic.br.ktd.utils.LocaleConstant +import com.google.gson.Gson import com.google.gson.JsonObject +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType @@ -23,6 +25,8 @@ RetrofitFactory.createRetrofit(httpConfig) } + private val gson by lazy { Gson() } + /** * 验证PublicKey */ @@ -156,6 +160,21 @@ } /** + * 删除任务 + */ + suspend fun deleteTask(ids: Array): String { + val param = JsonObject() + param.add( + "ids", gson.toJsonTree(ids, object : TypeToken>() {}.type).asJsonArray + ) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.deleteTask(AuthenticationHelper.token, requestBody) + } + + /** * 获取巡检车列表 */ suspend fun getVehicles(): String { diff --git a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt index b5f185c..df3a25b 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt @@ -35,22 +35,19 @@ fun getTasksByPage( beginDate: String, endDate: String, taskName: String, taskCode: String, offset: Int ) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getTasksByPage( beginDate, endDate, taskName, taskCode, offset ) val responseCode = response.separateResponseCode() if (responseCode == 200) { - loadState.value = LoadState.Success taskList.value = gson.fromJson( response, object : TypeToken() {}.type ) } else { - loadState.value = LoadState.Fail response.toErrorMessage().show(BaseApplication.get()) } }, { - loadState.value = LoadState.Fail + it.printStackTrace() }) fun addTask(carId: String, latitude: String, longitude: String, taskTitle: String) = launch({ @@ -106,6 +103,20 @@ loadState.value = LoadState.Fail }) + fun deleteTask(ids: Array) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.deleteTask(ids) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + } else { + loadState.value = LoadState.Fail + } + }, { + it.printStackTrace() + loadState.value = LoadState.Fail + }) + fun getTaskCount(beginDate: String, endDate: String, type: DateType) = launch({ val response = RetrofitServiceManager.getTaskCount(beginDate, endDate) val responseCode = response.separateResponseCode()