lmw
2023-06-13 adf8013576cbdd12e5ebea8ff7e32baf5d558b27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package com.kuanzhai.user.dialog
 
import android.view.Gravity
import androidx.core.os.bundleOf
import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import cn.sinata.xldutils.activity.BaseActivity
import cn.sinata.xldutils.fragment.BaseDialogFragment
import cn.sinata.xldutils.utils.myToast
import cn.sinata.xldutils.utils.showAllowingStateLoss
import com.kuanzhai.user.R
import com.kuanzhai.user.interfaces.StringCallback
import com.kuanzhai.user.network.HttpManager
import com.kuanzhai.user.network.entity.Passenger
import com.kuanzhai.user.network.request
import com.kuanzhai.user.ui.MainActivity
import com.kuanzhai.user.ui.official.adapter.PassengerAdapter
import com.kuanzhai.user.ui.official.adapter.ReasonAdapter
import kotlinx.android.synthetic.main.dialog_reason.*
 
class ReasonDialog:BaseDialogFragment() {
    override fun setContentView() = R.layout.dialog_reason
 
    private val passenger = arrayListOf<Passenger>()
    private val passengerAdapter by lazy { PassengerAdapter(passenger,tv_count) }
    private val reason by lazy { arguments?.getStringArrayList("reason")?: arrayListOf() }
    private val reasonAdapter by lazy { ReasonAdapter(reason) }
    private val passengers by lazy { arguments?.getParcelableArrayList<Passenger>("passenger")?: arrayListOf() }
 
    private var callback:ReasonCallback? = null
 
    override fun setGravity() = Gravity.BOTTOM
 
    override fun initView() {
        rv_passenger.layoutManager = LinearLayoutManager(requireContext())
        passenger.addAll(passengers)
        if (passenger.isEmpty())
            passenger.add(Passenger((requireActivity() as MainActivity).userInfo?.name?:"",(requireActivity() as MainActivity).userInfo?.phone?:""))
        tv_count.text = "出行人数 ${passenger.size}"
 
        rv_passenger.adapter = passengerAdapter
        passengerAdapter.callback = object :PassengerAdapter.MoreCallback{
            override fun onClick(position: Int) {
                HttpManager.queryStaff().request(requireActivity() as BaseActivity){_,data->
                    val list = (data ?: arrayListOf()).filter { it.name.isNotEmpty() }
                    if (list.isEmpty())
                        myToast("暂无常用乘车人")
                    else{
                        val singleWheelDialog = SingleWheelDialog()
                        val arrayListOf = arrayListOf<String>()
                        val nameList = list.map { it.name }
                        arrayListOf.addAll(nameList)
                        singleWheelDialog.arguments = bundleOf("title" to "常用乘车人","data" to arrayListOf)
                        singleWheelDialog.show(childFragmentManager,"p")
                        singleWheelDialog.setCallback(object :StringCallback{
                            override fun onRlt(rlt: String) {
                                passenger[position].name = list[nameList.indexOf(rlt)].name
                                passenger[position].phone = list[nameList.indexOf(rlt)].phone
                                passengerAdapter.notifyItemChanged(position)
                            }
                        })
                    }
                }
            }
        }
        iv_add.setOnClickListener {
            if (passenger.size == 4)
                myToast("最多可添加4人")
            else{
                passenger.add(Passenger())
                passengerAdapter.notifyDataSetChanged()
                tv_count.text = "出行人数 ${passenger.size}"
            }
        }
 
        val checkReason = arguments?.getString("checkReason")?:""
        val checkIndex = checkReason.split(",").map { reason.indexOf(it) }
        if (checkReason!= "事由出行")
            reasonAdapter.checked.addAll(checkIndex)
        val payWay = arguments?.getInt("payWay",0)?:0
        if (payWay == 1)
            rb_self.isChecked = true
        else if (payWay == 2)
            rb_company.isChecked = true
 
        et_content.setText(arguments?.getString("content"))
 
        rv_reason.layoutManager = GridLayoutManager(requireContext(),4)
        rv_reason.adapter = reasonAdapter
        tv_action.setOnClickListener {
            if (passenger.filter { it.name.isEmpty() }.isNotEmpty()){
                myToast("出行人姓名不能为空")
                return@setOnClickListener
            }
            if (reasonAdapter.checked.isEmpty()){
                myToast("请选择出行事由")
                return@setOnClickListener
            }
            if (rg_pay_way.checkedRadioButtonId == -1){
                myToast("请选择付费方式")
                return@setOnClickListener
            }
            callback?.onResult(passenger,reasonAdapter.checked.joinToString (","){ reason[it] },if (rb_company.isChecked) 2 else 1,et_content.text.toString())
            dismissAllowingStateLoss()
        }
    }
 
    interface ReasonCallback{
        fun onResult(passengers:List<Passenger>,reason:String,payWay:Int,remark:String)
    }
 
    companion object{
        fun show(fm: FragmentManager,payWay:Int,reason:ArrayList<String>,passenger:ArrayList<Passenger>,checkReason:String,content:String,callback: ReasonCallback){
            val reasonDialog = ReasonDialog()
            reasonDialog.arguments = bundleOf("payWay" to payWay,"reason" to reason,"passenger" to passenger,"checkReason" to checkReason,"content" to content)
            reasonDialog.callback = callback
            reasonDialog.showAllowingStateLoss(fm,"reason")
        }
    }
}