lmw
2023-06-16 03972ad1d3ce6ffe0be0395c0a4d5dcb4474031f
app/src/main/java/com/kuanzhai/user/dialog/ReasonDialog.kt
@@ -5,12 +5,16 @@
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.*
@@ -22,15 +26,44 @@
    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:StringCallback? = null
    private var callback:ReasonCallback? = null
    override fun setGravity() = Gravity.BOTTOM
    override fun initView() {
        rv_passenger.layoutManager = LinearLayoutManager(requireContext())
        passenger.add(Passenger(arguments?.getString("name")?:""))
        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人")
@@ -41,6 +74,18 @@
            }
        }
        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 {
@@ -48,7 +93,7 @@
                myToast("出行人姓名不能为空")
                return@setOnClickListener
            }
            if (reasonAdapter.checked == -1){
            if (reasonAdapter.checked.isEmpty()){
                myToast("请选择出行事由")
                return@setOnClickListener
            }
@@ -56,15 +101,19 @@
                myToast("请选择付费方式")
                return@setOnClickListener
            }
            callback?.onRlt(reason[reasonAdapter.checked])
            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, name:String,reason:ArrayList<String>,callback: StringCallback){
        fun show(fm: FragmentManager,payWay:Int,reason:ArrayList<String>,passenger:ArrayList<Passenger>,checkReason:String,content:String,callback: ReasonCallback){
            val reasonDialog = ReasonDialog()
            reasonDialog.arguments = bundleOf("name" to name,"reason" to reason)
            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")
        }