| | |
| | | val adapter by lazy { |
| | | PagerAdapter(this) |
| | | } |
| | | |
| | | private var tabLayoutMediator: TabLayoutMediator? = null |
| | | override fun onCreate(savedInstanceState: Bundle?) { |
| | | super.onCreate(savedInstanceState) |
| | | // 初始化一次性定位,用于后续筛选或下发位置 |
| | |
| | | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { |
| | | super.onViewCreated(view, savedInstanceState) |
| | | binding.viewPager.adapter = adapter |
| | | TabLayoutMediator(binding.tabLayout, binding.viewPager) { tab, position -> |
| | | tab.text = tabTitles[position] |
| | | }.attach() |
| | | tabLayoutMediator = |
| | | TabLayoutMediator(binding.tabLayout, binding.viewPager) { tab, position -> |
| | | tab.text = tabTitles[position] |
| | | }.apply { |
| | | attach() |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | val totalCountShow = it.totalTableCount.showCount(99) |
| | | val waitArriveCountShow = it.waitArriveCount.showCount(99) |
| | | val waitHandleCountShow = it.waitHandleCount.showCount(99) |
| | | val completedCountShow = it.completedCount.showCount(99) |
| | | val reassignmentCount = it.reassignmentCount.showCount(99) |
| | | tabTitles[0] = "全部${if (totalCountShow.isEmpty()) "" else " $totalCountShow"}" |
| | | tabTitles[1] = |
| | | "待到达${if (waitArriveCountShow.isEmpty()) "" else " $waitArriveCountShow"}" |
| | | tabTitles[2] = |
| | | "待处理${if (waitHandleCountShow.isEmpty()) "" else " $waitHandleCountShow"}" |
| | | tabTitles[3] = |
| | | "已处理${if (completedCountShow.isEmpty()) "" else " $completedCountShow"}" |
| | | tabTitles[4] = "改派中" |
| | | tabTitles[3] = "已处理" |
| | | tabTitles[4] = "改派中${if (reassignmentCount.isEmpty()) "" else " $reassignmentCount"}" |
| | | adapter.notifyDataSetChanged() |
| | | binding.tvAllCount.visibility = |
| | | if ((it.totalCount ?: 0) > 0) View.VISIBLE else View.GONE |
| | |
| | | * 首次创建时初始化各选项的默认选中状态及点击逻辑。 |
| | | */ |
| | | private fun showFilterDialog() { |
| | | if (filterDialog == null) { |
| | | filterDialog = DialogFactory.produce(requireActivity()).apply { |
| | | customView( |
| | | com.xw.yunwei.R.layout.dialog_data_filter, |
| | | noVerticalPadding = true, |
| | | horizontalPadding = false |
| | | filterDialog = DialogFactory.produce(requireActivity()).apply { |
| | | customView( |
| | | com.xw.yunwei.R.layout.dialog_data_filter, |
| | | noVerticalPadding = true, |
| | | horizontalPadding = false |
| | | ) |
| | | cancelable(true) |
| | | cornerRadius(12f) |
| | | |
| | | val bind: DialogDataFilterBinding? = DataBindingUtil.bind(getCustomView()) |
| | | |
| | | with(bind!!) { |
| | | // 移除默认的标题栏显示,改用自定义数据填充 |
| | | bind.stllTaskTime.remove() |
| | | bind.stllTaskLevel.remove() |
| | | bind.stllTaskType.remove() |
| | | |
| | | // 初始化派发时间筛选项 |
| | | bind.stllTaskTime.setData( |
| | | viewModel.filterTaskTime, |
| | | requireActivity(), |
| | | arrayListOf( |
| | | viewModel.filterTaskTime.indexOf(viewModel.selectTaskTime).toString() |
| | | ), |
| | | requireActivity().resources.getColor(R.color.blue_5), |
| | | "shape_blue1_bg_4" |
| | | ) |
| | | cancelable(true) |
| | | cornerRadius(12f) |
| | | bind.tvStartTime.text = viewModel.startTime |
| | | bind.tvEndTime.text = viewModel.endTime |
| | | // 初始化优先级筛选项 |
| | | bind.stllTaskLevel.setData( |
| | | viewModel.filterTaskLevel, |
| | | requireActivity(), |
| | | arrayListOf( |
| | | viewModel.filterTaskLevel.indexOf(viewModel.selectTaskLevel).toString() |
| | | ), |
| | | requireActivity().resources.getColor(R.color.blue_5), |
| | | "shape_blue1_bg_4" |
| | | ) |
| | | // 初始化任务类型筛选项 |
| | | bind.stllTaskType.setData( |
| | | viewModel.filterTaskType, |
| | | requireActivity(), |
| | | arrayListOf( |
| | | viewModel.filterTaskType.indexOf(viewModel.selectTaskType).toString() |
| | | ), |
| | | requireActivity().resources.getColor(R.color.blue_5), |
| | | "shape_blue1_bg_4" |
| | | ) |
| | | |
| | | val bind: DialogDataFilterBinding? = DataBindingUtil.bind(getCustomView()) |
| | | |
| | | with(bind!!) { |
| | | // 移除默认的标题栏显示,改用自定义数据填充 |
| | | bind.stllTaskTime.remove() |
| | | bind.stllTaskLevel.remove() |
| | | bind.stllTaskType.remove() |
| | | |
| | | // 初始化派发时间筛选项 |
| | | bind.stllTaskTime.setData( |
| | | viewModel.filterTaskTime, |
| | | requireActivity(), |
| | | arrayListOf("2"), |
| | | requireActivity().resources.getColor(R.color.blue_5), |
| | | "shape_blue1_bg_4" |
| | | ) |
| | | // 初始化优先级筛选项 |
| | | bind.stllTaskLevel.setData( |
| | | viewModel.filterTaskLevel, |
| | | requireActivity(), |
| | | arrayListOf("0"), |
| | | requireActivity().resources.getColor(R.color.blue_5), |
| | | "shape_blue1_bg_4" |
| | | ) |
| | | // 初始化任务类型筛选项 |
| | | bind.stllTaskType.setData( |
| | | viewModel.filterTaskType, |
| | | requireActivity(), |
| | | arrayListOf("0"), |
| | | requireActivity().resources.getColor(R.color.blue_5), |
| | | "shape_blue1_bg_4" |
| | | ) |
| | | |
| | | // 派发时间点击监听:单选切换并清空自定义时间 |
| | | bind.stllTaskTime.setListener { |
| | | for (index in bind.stllTaskTime.selectIndexList) { // 先取消选中状态 |
| | | bind.stllTaskTime.onTvClick(index) |
| | | } |
| | | val index = it.tag as Int // 当前点击的下标 |
| | | // 派发时间点击监听:单选切换并清空自定义时间 |
| | | bind.stllTaskTime.setListener { |
| | | for (index in bind.stllTaskTime.selectIndexList) { // 先取消选中状态 |
| | | bind.stllTaskTime.onTvClick(index) |
| | | viewModel.selectTaskTime = viewModel.filterTaskTime[index] |
| | | |
| | | viewModel.startTime = "" |
| | | viewModel.endTime = "" |
| | | bind.tvStartTime.text = viewModel.startTime |
| | | bind.tvEndTime.text = viewModel.endTime |
| | | } |
| | | // 优先级点击监听:单选切换 |
| | | bind.stllTaskLevel.setListener { |
| | | for (index in bind.stllTaskLevel.selectIndexList) { // 先取消选中状态 |
| | | bind.stllTaskLevel.onTvClick(index) |
| | | } |
| | | val index = it.tag as Int // 当前点击的下标 |
| | | val index = it.tag as Int // 当前点击的下标 |
| | | bind.stllTaskTime.onTvClick(index) |
| | | viewModel.selectTaskTime = viewModel.filterTaskTime[index] |
| | | |
| | | viewModel.startTime = "" |
| | | viewModel.endTime = "" |
| | | bind.tvStartTime.text = viewModel.startTime |
| | | bind.tvEndTime.text = viewModel.endTime |
| | | } |
| | | // 优先级点击监听:单选切换 |
| | | bind.stllTaskLevel.setListener { |
| | | for (index in bind.stllTaskLevel.selectIndexList) { // 先取消选中状态 |
| | | bind.stllTaskLevel.onTvClick(index) |
| | | viewModel.selectTaskLevel = viewModel.filterTaskLevel[index] |
| | | } |
| | | // 任务类型点击监听:单选切换 |
| | | bind.stllTaskType.setListener { |
| | | for (index in bind.stllTaskType.selectIndexList) { // 先取消选中状态 |
| | | bind.stllTaskType.onTvClick(index) |
| | | } |
| | | val index = it.tag as Int // 当前点击的下标 |
| | | val index = it.tag as Int // 当前点击的下标 |
| | | bind.stllTaskLevel.onTvClick(index) |
| | | viewModel.selectTaskLevel = viewModel.filterTaskLevel[index] |
| | | } |
| | | // 任务类型点击监听:单选切换 |
| | | bind.stllTaskType.setListener { |
| | | for (index in bind.stllTaskType.selectIndexList) { // 先取消选中状态 |
| | | bind.stllTaskType.onTvClick(index) |
| | | viewModel.changeTaskType(index) |
| | | } |
| | | /** |
| | | * 排序选项点击回调 |
| | | * @param name 排序字段名称 |
| | | */ |
| | | val onCheck: (String) -> Unit = { name -> |
| | | if (name == viewModel.selectTaskSort) { |
| | | // 同一字段再次点击,切换正序/倒序 |
| | | viewModel.taskSort = if (viewModel.taskSort == 1) 2 else 1 |
| | | val index = it.tag as Int // 当前点击的下标 |
| | | bind.stllTaskType.onTvClick(index) |
| | | viewModel.changeTaskType(index) |
| | | } |
| | | val refresh: () -> Unit = { |
| | | viewModel.sortViews.forEach { |
| | | if (it.name.text == viewModel.selectTaskSort) { |
| | | it.layout.isSelected = true |
| | | it.name.isSelected = true |
| | | it.arrowUp.isSelected = viewModel.taskSort == 2 |
| | | it.arrowDown.isSelected = viewModel.taskSort == 1 |
| | | } else { |
| | | // 切换排序字段,默认正序 |
| | | viewModel.selectTaskSort = name |
| | | viewModel.taskSort = 1 |
| | | } |
| | | // 更新所有排序项的选中状态及箭头方向 |
| | | viewModel.sortViews.forEach { |
| | | if (it.name.text == viewModel.selectTaskSort) { |
| | | it.layout.isSelected = true |
| | | it.name.isSelected = true |
| | | it.arrowUp.isSelected = viewModel.taskSort == 2 |
| | | it.arrowDown.isSelected = viewModel.taskSort == 1 |
| | | } else { |
| | | it.layout.isSelected = false |
| | | it.name.isSelected = false |
| | | it.arrowUp.isSelected = false |
| | | it.arrowDown.isSelected = false |
| | | } |
| | | it.layout.isSelected = false |
| | | it.name.isSelected = false |
| | | it.arrowUp.isSelected = false |
| | | it.arrowDown.isSelected = false |
| | | } |
| | | } |
| | | // 默认选中第一个排序项 |
| | | val defaultSelectFirst: () -> Unit = { |
| | | viewModel.sortViews.forEachIndexed { index, itemBind -> |
| | | itemBind.layout.isSelected = index == 0 |
| | | itemBind.name.isSelected = index == 0 |
| | | itemBind.arrowUp.isSelected = index == 0 && viewModel.taskSort == 2 |
| | | itemBind.arrowDown.isSelected = index == 0 && viewModel.taskSort == 1 |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 排序选项点击回调 |
| | | * @param name 排序字段名称 |
| | | */ |
| | | val onCheck: (String) -> Unit = { name -> |
| | | if (name == viewModel.selectTaskSort) { |
| | | // 同一字段再次点击,切换正序/倒序 |
| | | viewModel.taskSort = if (viewModel.taskSort == 1) 2 else 1 |
| | | } else { |
| | | // 切换排序字段,默认正序 |
| | | viewModel.selectTaskSort = name |
| | | viewModel.taskSort = 1 |
| | | } |
| | | // 更新所有排序项的选中状态及箭头方向 |
| | | refresh() |
| | | } |
| | | |
| | | // 动态构建排序选项视图 |
| | | bind.tagLayout.removeAllViews() |
| | | viewModel.sortViews.clear() |
| | | viewModel.filterTaskSort.forEachIndexed { index, name -> |
| | | val itemBind: ItemArrow2TextBinding = DataBindingUtil.inflate( |
| | | LayoutInflater.from(activity), |
| | | com.xw.yunwei.R.layout.item_arrow2_text, |
| | | null, |
| | | false |
| | | ) |
| | | itemBind.name.text = name |
| | | viewModel.sortViews.add(itemBind) |
| | | itemBind.root.setOnClickListener { onCheck(name) } |
| | | bind.tagLayout.addView(itemBind.root) |
| | | // 动态构建排序选项视图 |
| | | bind.tagLayout.removeAllViews() |
| | | viewModel.sortViews.clear() |
| | | viewModel.filterTaskSort.forEachIndexed { index, name -> |
| | | val itemBind: ItemArrow2TextBinding = DataBindingUtil.inflate( |
| | | LayoutInflater.from(activity), |
| | | com.xw.yunwei.R.layout.item_arrow2_text, |
| | | null, |
| | | false |
| | | ) |
| | | itemBind.name.text = name |
| | | viewModel.sortViews.add(itemBind) |
| | | itemBind.root.setOnClickListener { onCheck(name) } |
| | | bind.tagLayout.addView(itemBind.root) |
| | | } |
| | | refresh() |
| | | viewModel.sortViews.forEach { |
| | | if (it.name.text == viewModel.selectTaskSort) { |
| | | it.layout.isSelected = true |
| | | it.name.isSelected = true |
| | | it.arrowUp.isSelected = viewModel.taskSort == 2 |
| | | it.arrowDown.isSelected = viewModel.taskSort == 1 |
| | | } else { |
| | | it.layout.isSelected = false |
| | | it.name.isSelected = false |
| | | it.arrowUp.isSelected = false |
| | | it.arrowDown.isSelected = false |
| | | } |
| | | defaultSelectFirst() |
| | | |
| | | // 开始时间选择:弹出日期选择器并校验不能大于结束时间 |
| | | bind.tvStartTime.setOnClickListener { |
| | | val showTime = getTime(viewModel.startTime) |
| | | val minTime = getTime("2020-01-01") |
| | | dialogTime.show("选择日期", showTime, minTime) { |
| | | val odlIndex = mutableListOf<Int>() |
| | | for (index in bind.stllTaskTime.selectIndexList) { // 先取消选中状态 |
| | | odlIndex.add(index) |
| | | } |
| | | odlIndex.forEach { bind.stllTaskTime.onTvClick(it) } |
| | | viewModel.selectTaskTime = "" |
| | | |
| | | val selectTime = getTime(it) |
| | | if (viewModel.endTime.isNotEmpty()) { |
| | | if (selectTime.replace("-", "") > viewModel.endTime.replace( |
| | | "-", "" |
| | | ) |
| | | ) { |
| | | ToastUtilCommon.showWarn("开始时间不能大于结束时间") |
| | | return@show |
| | | } |
| | | } |
| | | viewModel.startTime = selectTime |
| | | bind.tvStartTime.text = viewModel.startTime |
| | | } |
| | | } |
| | | // 结束时间选择:弹出日期选择器并校验不能小于开始时间 |
| | | bind.tvEndTime.setOnClickListener { |
| | | val showTime = getTime(viewModel.endTime) |
| | | val minTime = getTime("2020-01-01") |
| | | dialogTime.show("选择日期", showTime, minTime) { |
| | | val odlIndex = mutableListOf<Int>() |
| | | for (index in bind.stllTaskTime.selectIndexList) { // 先取消选中状态 |
| | | odlIndex.add(index) |
| | | } |
| | | odlIndex.forEach { bind.stllTaskTime.onTvClick(it) } |
| | | viewModel.selectTaskTime = "" |
| | | |
| | | val selectTime = getTime(it) |
| | | if (viewModel.startTime.isNotEmpty()) { |
| | | if (selectTime.replace("-", "") < viewModel.startTime.replace( |
| | | "-", "" |
| | | ) |
| | | ) { |
| | | ToastUtilCommon.showWarn("开始时间不能大于结束时间") |
| | | return@show |
| | | } |
| | | } |
| | | viewModel.endTime = getTime(it) |
| | | bind.tvEndTime.text = viewModel.endTime |
| | | } |
| | | } |
| | | |
| | | // 取消:直接关闭弹窗 |
| | | bind.cancel.setOnClickListener { dismiss() } |
| | | // 重置:恢复所有筛选项为默认状态 |
| | | bind.btnLeft.setOnClickListener { |
| | | } |
| | | // 开始时间选择:弹出日期选择器并校验不能大于结束时间 |
| | | bind.tvStartTime.setOnClickListener { |
| | | val showTime = getTime(viewModel.startTime) |
| | | val minTime = getTime("2020-01-01") |
| | | dialogTime.show("选择日期", showTime, minTime) { |
| | | val odlIndex = mutableListOf<Int>() |
| | | for (index in bind.stllTaskTime.selectIndexList) { // 先取消选中状态 |
| | | odlIndex.add(index) |
| | | } |
| | | odlIndex.forEach { bind.stllTaskTime.onTvClick(it) } |
| | | viewModel.selectTaskTime = viewModel.filterTaskTime[2] |
| | | bind.stllTaskTime.onTvClick(2) |
| | | viewModel.selectTaskTime = "" |
| | | |
| | | odlIndex.clear() |
| | | for (index in bind.stllTaskLevel.selectIndexList) { // 先取消选中状态 |
| | | odlIndex.add(index) |
| | | val selectTime = getTime(it) |
| | | if (viewModel.endTime.isNotEmpty()) { |
| | | if (selectTime.replace("-", "") > viewModel.endTime.replace( |
| | | "-", "" |
| | | ) |
| | | ) { |
| | | ToastUtilCommon.showWarn("开始时间不能大于结束时间") |
| | | return@show |
| | | } |
| | | } |
| | | odlIndex.forEach { bind.stllTaskLevel.onTvClick(it) } |
| | | viewModel.selectTaskLevel = viewModel.filterTaskLevel[0] |
| | | bind.stllTaskLevel.onTvClick(0) |
| | | |
| | | odlIndex.clear() |
| | | for (index in bind.stllTaskType.selectIndexList) { // 先取消选中状态 |
| | | odlIndex.add(index) |
| | | } |
| | | odlIndex.forEach { bind.stllTaskType.onTvClick(it) } |
| | | viewModel.changeTaskType(0) |
| | | bind.stllTaskType.onTvClick(0) |
| | | |
| | | viewModel.startTime = "" |
| | | viewModel.startTime = selectTime |
| | | bind.tvStartTime.text = viewModel.startTime |
| | | viewModel.endTime = "" |
| | | bind.tvEndTime.text = viewModel.endTime |
| | | |
| | | viewModel.selectTaskSort = viewModel.filterTaskSort[0] |
| | | defaultSelectFirst() |
| | | } |
| | | // 确定:校验时间合法性后下发筛选条件 |
| | | bind.btnRight.setOnClickListener { |
| | | if (viewModel.selectTaskTime.isEmpty() && (viewModel.startTime.isEmpty() || viewModel.endTime.isEmpty())) { |
| | | ToastUtilCommon.showWarn("请正确选择时间") |
| | | return@setOnClickListener |
| | | } |
| | | // 结束时间选择:弹出日期选择器并校验不能小于开始时间 |
| | | bind.tvEndTime.setOnClickListener { |
| | | val showTime = getTime(viewModel.endTime) |
| | | val minTime = getTime("2020-01-01") |
| | | dialogTime.show("选择日期", showTime, minTime) { |
| | | val odlIndex = mutableListOf<Int>() |
| | | for (index in bind.stllTaskTime.selectIndexList) { // 先取消选中状态 |
| | | odlIndex.add(index) |
| | | } |
| | | EventBus.getDefault().post(filterData) |
| | | viewModel.statistic() |
| | | odlIndex.forEach { bind.stllTaskTime.onTvClick(it) } |
| | | viewModel.selectTaskTime = "" |
| | | |
| | | val selectTime = getTime(it) |
| | | if (viewModel.startTime.isNotEmpty()) { |
| | | if (selectTime.replace("-", "") < viewModel.startTime.replace( |
| | | "-", "" |
| | | ) |
| | | ) { |
| | | ToastUtilCommon.showWarn("开始时间不能大于结束时间") |
| | | return@show |
| | | } |
| | | } |
| | | viewModel.endTime = getTime(it) |
| | | bind.tvEndTime.text = viewModel.endTime |
| | | } |
| | | } |
| | | |
| | | // 取消:直接关闭弹窗 |
| | | bind.cancel.setOnClickListener { dismiss() } |
| | | // 重置:恢复所有筛选项为默认状态 |
| | | bind.btnLeft.setOnClickListener { |
| | | val odlIndex = mutableListOf<Int>() |
| | | for (index in bind.stllTaskTime.selectIndexList) { // 先取消选中状态 |
| | | odlIndex.add(index) |
| | | } |
| | | odlIndex.forEach { bind.stllTaskTime.onTvClick(it) } |
| | | viewModel.selectTaskTime = viewModel.filterTaskTime[2] |
| | | bind.stllTaskTime.onTvClick(2) |
| | | |
| | | odlIndex.clear() |
| | | for (index in bind.stllTaskLevel.selectIndexList) { // 先取消选中状态 |
| | | odlIndex.add(index) |
| | | } |
| | | odlIndex.forEach { bind.stllTaskLevel.onTvClick(it) } |
| | | viewModel.selectTaskLevel = viewModel.filterTaskLevel[0] |
| | | bind.stllTaskLevel.onTvClick(0) |
| | | |
| | | odlIndex.clear() |
| | | for (index in bind.stllTaskType.selectIndexList) { // 先取消选中状态 |
| | | odlIndex.add(index) |
| | | } |
| | | odlIndex.forEach { bind.stllTaskType.onTvClick(it) } |
| | | viewModel.changeTaskType(0) |
| | | bind.stllTaskType.onTvClick(0) |
| | | |
| | | viewModel.startTime = "" |
| | | bind.tvStartTime.text = viewModel.startTime |
| | | viewModel.endTime = "" |
| | | bind.tvEndTime.text = viewModel.endTime |
| | | |
| | | viewModel.selectTaskSort = viewModel.filterTaskSort[0] |
| | | refresh() |
| | | } |
| | | // 确定:校验时间合法性后下发筛选条件 |
| | | bind.btnRight.setOnClickListener { |
| | | if (viewModel.selectTaskTime.isEmpty() && (viewModel.startTime.isEmpty() || viewModel.endTime.isEmpty())) { |
| | | ToastUtilCommon.showWarn("请正确选择时间") |
| | | return@setOnClickListener |
| | | } |
| | | EventBus.getDefault().post(filterData) |
| | | viewModel.statistic() |
| | | // requireActivity().supportFragmentManager.setFragmentResult( |
| | | // REQUEST_KEY_FILTER, |
| | | // bundleOf(KEY_FILTER_DATA to filterData) |
| | | // ) |
| | | filterDialog?.dismiss() |
| | | } |
| | | // 底部确定按钮:同上 |
| | | bind.sure.setOnClickListener { |
| | | EventBus.getDefault().post(filterData) |
| | | viewModel.statistic() |
| | | filterDialog?.dismiss() |
| | | } |
| | | // 底部确定按钮:同上 |
| | | bind.sure.setOnClickListener { |
| | | EventBus.getDefault().post(filterData) |
| | | viewModel.statistic() |
| | | // requireActivity().supportFragmentManager.setFragmentResult( |
| | | // REQUEST_KEY_FILTER, |
| | | // bundleOf(KEY_FILTER_DATA to filterData) |
| | | // ) |
| | | filterDialog?.dismiss() |
| | | } |
| | | filterDialog?.dismiss() |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | override fun onDestroyView() { |
| | | super.onDestroyView() |
| | | tabLayoutMediator?.detach() |
| | | } |
| | | |
| | | override fun onDestroy() { |
| | | super.onDestroy() |
| | | EventBus.getDefault().unregister(this) |