123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653 |
- package com.quansu.heifengwuliu.fragment
- import android.app.Activity
- import android.content.Context
- import android.content.Intent
- import android.graphics.Color
- import android.graphics.Typeface
- import android.os.Bundle
- import android.text.Editable
- import android.text.TextUtils
- import android.text.TextWatcher
- import android.view.LayoutInflater
- import android.view.ViewGroup
- import android.widget.FrameLayout
- import android.widget.TextView
- import androidx.fragment.app.Fragment
- import androidx.lifecycle.Observer
- import com.google.gson.Gson
- import com.hwangjr.rxbus.annotation.Subscribe
- import com.hwangjr.rxbus.annotation.Tag
- import com.qmuiteam.qmui.layout.QMUIFrameLayout
- import com.qmuiteam.qmui.skin.QMUISkinHelper
- import com.qmuiteam.qmui.skin.QMUISkinValueBuilder
- import com.qmuiteam.qmui.util.QMUIDisplayHelper
- import com.qmuiteam.qmui.util.QMUIResHelper
- import com.qmuiteam.qmui.widget.popup.QMUIPopup
- import com.qmuiteam.qmui.widget.popup.QMUIPopups
- import com.qmuiteam.qmui.widget.tab.QMUITab
- import com.qmuiteam.qmui.widget.tab.QMUITabIndicator
- import com.qmuiteam.qmui.widget.tab.QMUITabSegment
- import com.quansu.heifengwuliu.R
- import com.quansu.heifengwuliu.activity.AddressActivity
- import com.quansu.heifengwuliu.activity.AreaSelectActivity
- import com.quansu.heifengwuliu.adapter.BaseFragmentPagerAdapter
- import com.quansu.heifengwuliu.base.MBFragment
- import com.quansu.heifengwuliu.config.ConfigRx
- import com.quansu.heifengwuliu.config.MIntentAction
- import com.quansu.heifengwuliu.databinding.FragmentOwnersingleBinding
- import com.quansu.heifengwuliu.inte.ChoiceData
- import com.quansu.heifengwuliu.model.AddressBean
- import com.quansu.heifengwuliu.model.DataInfoBean
- import com.quansu.heifengwuliu.model.bean.ReceiveBean
- import com.quansu.heifengwuliu.model.bean.SendBean
- import com.quansu.heifengwuliu.utils.PopuListUtils
- import com.quansu.heifengwuliu.utils.PopupUtils
- import com.quansu.heifengwuliu.vmodel.OwnerSingleVModel
- import com.yanzhenjie.permission.AndPermission
- import com.yanzhenjie.permission.runtime.Permission
- import com.ysnows.base.ccretrofit.CCRetrofit
- import com.ysnows.base.model.PositionBean
- import com.ysnows.base.route.IGaode
- import com.ysnows.base.utils.B
- import com.ysnows.base.utils.UiSwitch
- import java.text.DecimalFormat
- /**
- * 一装一卸
- *Created by shihuiyun
- *on 2020/9/11
- */
- class OwnerSingleFragment : MBFragment<OwnerSingleVModel, FragmentOwnersingleBinding>() {
- var cats = ArrayList<String>()
- private var type = 1// 1:/装货 2卸货
- private var selectViewpage = 0
- var goodsTypeList = ArrayList<String>()
- var numsTypeList = ArrayList<String>()
- var insurance = ArrayList<String>()
- var is_agree = 1//默认 已阅读运输协议
- var is_public = 1//默认 发布到货源大厅
- var is_insurance = 0//默认 不够买保险
- //出
- var lat_out: String = ""
- var lng_out: String = ""
- var province_out: String = ""
- var city_out: String = ""
- var area_out: String = ""
- var time_out: String = ""
- //入
- var lat_in: String = ""
- var lng_in: String = ""
- var province_in: String = ""
- var city_in: String = ""
- var area_in: String = ""
- var time_in: String = ""
- var info_id:String="0"
- override fun init(savedInstanceState: Bundle?) {
- super.init(savedInstanceState)
- getData()
- vm.info.observe(this, Observer {
- //观察
- goodsTypeList.addAll(it.goods_type)
- numsTypeList.addAll(it.nums_type)
- initTab(it)
- })
- initData()
- }
- override fun vmClass(): Class<OwnerSingleVModel> {
- return OwnerSingleVModel::class.java
- }
- override fun listeners() {
- super.listeners()
- binding.tvPublish.setOnClickListener {
- //发布
- judgeValue()
- return@setOnClickListener
- // var mNormalPopup = QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(getContext(), 250))
- var mNormalPopup = QMUIPopups.fullScreenPopup(context)
- val builder: QMUISkinValueBuilder = QMUISkinValueBuilder.acquire()
- val frameLayout = QMUIFrameLayout(context)
- frameLayout.background = QMUIResHelper.getAttrDrawable(context, R.attr.qmui_skin_support_popup_bg)
- builder.background(R.attr.qmui_skin_support_popup_bg)
- QMUISkinHelper.setSkinValue(frameLayout, builder)
- frameLayout.radius = QMUIDisplayHelper.dp2px(context, 12)
- val padding = QMUIDisplayHelper.dp2px(context, 20)
- frameLayout.setPadding(padding, padding, padding, padding)
- //自定义布局
- val layoutInflater = requireContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
- var layout = layoutInflater.inflate(R.layout.item_app, null)
- val tv: TextView = layout.findViewById(R.id.label)
- tv.text = "123344"
- tv.setOnClickListener {
- mNormalPopup.dismiss()
- }
- builder.release();
- val size = QMUIDisplayHelper.dp2px(context, 200)
- val lp: FrameLayout.LayoutParams = FrameLayout.LayoutParams(size, size)
- frameLayout.addView(layout, lp)
- mNormalPopup.addView(frameLayout)
- mNormalPopup.onDismiss() {
- toast("onDismiss")
- }
- mNormalPopup.dismissIfOutsideTouch(false)
- mNormalPopup.animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER)
- mNormalPopup.show(binding.tvPublish)
- }
- binding.llChoseUnits.setOnClickListener {
- PopuListUtils.showQMUIPopup(context(), binding.llChoseUnits, numsTypeList, object : ChoiceData {
- override fun onRestuse(name: String?) {
- vm.unit.value = name
- }
- })
- }
- binding.llGoodsType.setOnClickListener {
- PopuListUtils.showQMUIPopup(context(), binding.llGoodsType, goodsTypeList, object : ChoiceData {
- override fun onRestuse(name: String?) {
- vm.goodstype.value = name
- }
- })
- }
- binding.llIsInsurance.setOnClickListener {
- PopuListUtils.showQMUIPopup(context(), binding.llGoodsType, insurance, object : ChoiceData {
- override fun onRestuse(name: String?) {
- vm.insurance.value = name
- is_insurance = if (name.equals("是")) 1 else 0
- }
- })
- }
- binding.llAgree.setOnClickListener {
- is_agree = if (is_agree == 1) 0 else 1
- vm.isAgree.value = is_agree
- }
- binding.llPublic.setOnClickListener {
- is_public = if (is_public == 1) 0 else 1
- vm.isPush.value = is_public
- }
- binding.etSingCarNums.addTextChangedListener(object : TextWatcher {
- override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
- override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
- override fun afterTextChanged(editable: Editable) {
- var nums = editable.toString().trim()
- if (TextUtils.isEmpty(nums)) {
- nums = "0"
- }
- sumTotal(1, nums)
- }
- })
- binding.etSingCarPrice.addTextChangedListener(object : TextWatcher {
- override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
- override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
- override fun afterTextChanged(editable: Editable) {
- var price = editable.toString().trim()
- if (TextUtils.isEmpty(price)) {
- price = "0"
- }
- sumTotal(2, price)
- }
- })
- }
- private fun judgeValue() {
- if (TextUtils.isEmpty(province_out)) {
- toast("请选择装货地址!")
- return
- }
- var name_out = binding.viewOut.etName.text.toString().trim()
- if (TextUtils.isEmpty(name_out)) {
- toast("请输入发货人!")
- return
- }
- var mobile_out = binding.viewOut.etPhone.text.toString().trim()
- if (TextUtils.isEmpty(mobile_out)) {
- toast("请输入发货人电话!")
- return
- }
- if (TextUtils.isEmpty(time_out)) {
- toast("请输入装货时间")
- return
- }
- var address_out = binding.viewOut.etDetailedAddress.text.toString().trim()
- var sendBean = SendBean(lat_out, lng_out, province_out, city_out, address_out, address_out, name_out, mobile_out, time_out, "0")
- if (TextUtils.isEmpty(province_in)) {
- toast("请选择卸货地址!")
- return
- }
- var name_in = binding.viewEnter.etName.text.toString().trim()
- if (TextUtils.isEmpty(name_in)) {
- toast("请输入卸货人!")
- return
- }
- var mobile_in = binding.viewEnter.etPhone.text.toString().trim()
- if (TextUtils.isEmpty(mobile_in)) {
- toast("请输入卸货人电话!")
- return
- }
- if (TextUtils.isEmpty(time_in)) {
- toast("请输入卸货时间")
- return
- }
- if (TextUtils.isEmpty(vm.goodstype.value.toString())) {
- toast("请选择货物类型")
- return
- }
- if (TextUtils.isEmpty(vm.unit.value.toString())) {
- toast("请选择单车运量单位")
- return
- }
- var nums = binding.etSingCarNums.text.toString().trim()
- if (TextUtils.isEmpty(vm.unit.value.toString())) {
- toast("请输入单车运量数量")
- return
- }
- var price = binding.etSingCarPrice.text.toString().trim()
- var total = binding.etSingCarTotal.text.toString().trim()
- if (TextUtils.isEmpty(vm.unit.value.toString())) {
- toast("请输入总金额")
- return
- }
- if (TextUtils.isEmpty(time_in)) {
- toast("请输入卸货时间")
- return
- }
- var address_in = binding.viewEnter.etDetailedAddress.text.toString().trim()
- var receiveBean = ReceiveBean(lat_in, lng_in, province_in, city_in, address_in, address_in, name_in, mobile_in, time_in, "1",
- "", vm.goodstype.value.toString(), nums, vm.unit.value.toString(), price, total
- )
- if (is_agree==0) {
- toast("请阅读并同意《平台运输协议》")
- return
- }
- var carnums=binding.etCarNums.text.toString()
- if(TextUtils.isEmpty(carnums)){
- toast("请输入所需车辆数量")
- return
- }
- var data=binding.etData.text.toString()
- var send= Gson().toJson(sendBean)
- var receive= Gson().toJson(receiveBean)
- vm.setReleaseSource(info_id,total,"",carnums,is_public.toString(),is_insurance.toString(),"1",
- data,send,receive)
- }
- /**
- * type:1单车运量 2单价
- * value:输入的值
- * @return
- */
- private fun sumTotal(type: Int, value: String) {
- var df = DecimalFormat("0.00")
- var total = "0"
- if (type == 1) {//数量
- var price = binding.etSingCarPrice.text.toString().trim()
- if (TextUtils.isEmpty(price)) {
- price = "0"
- }
- total = df.format(value.toDouble() * price.toDouble())
- } else {//价格
- var nums = binding.etSingCarNums.text.toString().trim()
- if (TextUtils.isEmpty(nums)) {
- nums = "0"
- }
- var df = DecimalFormat("0.00");
- total = df.format(nums.toDouble() * value.toDouble())
- }
- binding.etSingCarTotal.setText(total)
- }
- private fun getData() {
- //获取信息
- vm.getDataInfo(info_id);
- }
- private fun initTab(info: DataInfoBean) {
- if (null != info.car_type) {
- for (item in info.car_type) {
- cats.add(item.type_name)
- }
- }
- //设置viewpager
- val fragments = ArrayList<Fragment>()
- var index = 0
- for (cat in cats) {
- var ownerImgFragment = OwnerImgFragment()
- ownerImgFragment.arguments = B().putString("img", info.car_type[index].type_img).ok()
- fragments.add(ownerImgFragment)
- index++
- }
- val adapter = BaseFragmentPagerAdapter(childFragmentManager, fragments)
- binding.qmViewPager.adapter = adapter
- //设置tab
- binding.tabs.setIndicator(QMUITabIndicator(QMUIDisplayHelper.dp2px(context(), 2), false, true))
- val space: Int = QMUIDisplayHelper.dp2px(context, 20)
- binding.tabs.setPadding(space, 0, space, 0)
- binding.tabs.mode = QMUITabSegment.MODE_SCROLLABLE
- // val space: Int = QMUIDisplayHelper.dp2px(context, 16)
- // binding.tabs.mode = QMUITabSegment.MODE_SCROLLABLE //MODE_SCROLLABLE 自适应宽度+滚动 MODE_FIXED 均分
- // binding.tabs.setItemSpaceInScrollMode(space)
- // binding.tabs.setupWithViewPager(binding.qmViewPager, false)
- // binding.tabs.setPadding(space, 0, space, 0)
- //
- val builder = binding.tabs.tabBuilder()
- builder
- .skinChangeWithTintColor(false)
- .setSelectColor(Color.parseColor("#2E4E71"))
- .setNormalColor(Color.parseColor("#666666"))
- .setTypeface(Typeface.DEFAULT_BOLD, Typeface.DEFAULT)
- .setDynamicChangeIconColor(false)
- val tabs = ArrayList<QMUITab>()
- for (cat in cats) {
- val item = builder
- .setText(cat)
- .build(context())
- tabs.add(item)
- }
- tabs.forEach {
- binding.tabs.addTab(it)
- }
- binding.tabs.setupWithViewPager(binding.qmViewPager, false)
- binding.imgNext.setOnClickListener {
- selectViewpage = binding.qmViewPager.currentItem
- if (selectViewpage < cats.size - 1) {
- binding.qmViewPager.currentItem = selectViewpage + 1
- }
- }
- //向右
- binding.imgDown.setOnClickListener {
- toast("222")
- selectViewpage = binding.qmViewPager.currentItem
- if (selectViewpage < cats.size - 1) {
- binding.qmViewPager.currentItem = selectViewpage + 1
- }
- }
- //向左
- binding.imgUp.setOnClickListener {
- selectViewpage = binding.qmViewPager.currentItem
- if (selectViewpage < cats.size - 1 && selectViewpage > 0) {
- binding.qmViewPager.currentItem = selectViewpage - 1
- }
- }
- }
- private fun initData() {
- insurance.add("是")
- insurance.add("否")
- //卸货信息
- binding.viewEnter.tvCity.setHint("请选择卸货地址")
- binding.viewEnter.llChoseMap.setOnClickListener {
- //地图选点
- type = 2
- choseMap()
- }
- binding.viewOut.llChoseMap.setOnClickListener {
- //地图选点
- type = 1
- choseMap()
- }
- binding.viewOut.llChoseAddress.setOnClickListener {
- //地址薄 1
- type = 1
- UiSwitch.bundleRes(this, AddressActivity::class.java,
- B.with().putString("type", "1").ok(), MIntentAction.REQUEST_CODE_ONE)
- }
- binding.viewEnter.llChoseAddress.setOnClickListener {
- //地址薄 2
- type = 2
- UiSwitch.bundleRes(this, AddressActivity::class.java,
- B.with().putString("type", "2").ok(), MIntentAction.REQUEST_CODE_ONE)
- }
- binding.viewEnter.tvCity.setOnClickListener {
- type = 2
- UiSwitch.singleRes(this, AreaSelectActivity::class.java,
- MIntentAction.REQUEST_CODE_TWO)
- }
- binding.viewOut.tvCity.setOnClickListener {
- type = 1
- UiSwitch.singleRes(this, AreaSelectActivity::class.java,
- MIntentAction.REQUEST_CODE_TWO)
- }
- binding.viewEnter.tvChoseTime.setOnClickListener {
- //选择时间
- PopupUtils.setChoseTime(context, binding.viewEnter.tvChoseTime, object : ChoiceData {
- override fun onRestuse(time: String?) {
- if (time != null) {
- time_in = time
- }
- }
- })
- }
- binding.viewOut.tvChoseTime.setOnClickListener {
- PopupUtils.setChoseTime(context, binding.viewOut.tvChoseTime, object : ChoiceData {
- override fun onRestuse(time: String?) {
- if (time != null) {
- time_out = time
- }
- }
- })
- }
- }
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- super.onActivityResult(requestCode, resultCode, data)
- if (MIntentAction.REQUEST_CODE_TWO === requestCode && resultCode == Activity.RESULT_OK) {
- val bundle = data!!.extras
- if (null != bundle) {
- var name = bundle.getString("name")
- if (type == 1) {
- area_out = bundle.getString("area_code")
- province_out = bundle.getString("province_code")
- city_out = bundle.getString("city_code")
- binding.viewOut.tvCity.text = name
- } else {
- area_in = bundle.getString("area_code")
- province_in = bundle.getString("province_code")
- city_in = bundle.getString("city_code")
- binding.viewEnter.tvCity.text = name
- }
- }
- return
- }
- if (MIntentAction.REQUEST_CODE_ONE == requestCode && resultCode == Activity.RESULT_OK) {
- val bundle = data!!.extras
- if (null != bundle) {
- var item = bundle.getSerializable("item") as AddressBean
- //todo
- if (type == 1) {
- binding.viewOut.tvCity.text = item.province?.name + item.city?.name + item.area?.name
- binding.viewOut.etDetailedAddress.setText(item.address)
- binding.viewOut.tvChoseTime.text = item.create_time
- binding.viewOut.etName.setText(item.name)
- binding.viewOut.etPhone.setText(item.mobile)
- var province_code = item.province?.code
- var city_code = item.city?.code
- var area_code = item.area?.code
- } else {
- binding.viewEnter.tvCity.text = item.province?.name + item.city?.name + item.area?.name
- binding.viewEnter.etDetailedAddress.setText(item.address)
- binding.viewEnter.tvChoseTime.text = item.create_time
- binding.viewEnter.etName.setText(item.name)
- binding.viewEnter.etPhone.setText(item.mobile)
- var province_code = item.province?.code
- var city_code = item.city?.code
- var area_code = item.area?.code
- }
- }
- return
- }
- }
- private fun choseMap() {
- AndPermission.with(repository().context)
- .runtime()
- .permission(Permission.ACCESS_COARSE_LOCATION,
- Permission.ACCESS_FINE_LOCATION,
- Permission.WRITE_EXTERNAL_STORAGE,
- Permission.READ_EXTERNAL_STORAGE,
- Permission.READ_PHONE_STATE
- )
- .onGranted { data ->
- CCRetrofit.instance()
- .with(context)
- .create(IGaode::class.java)
- .selectLocation()
- .subscribe()
- }
- .start()
- }
- override fun binding(inflater: LayoutInflater, container: ViewGroup?): FragmentOwnersingleBinding {
- return FragmentOwnersingleBinding.inflate(layoutInflater)
- }
- override fun title(): String? {
- return null
- }
- override val isRxbus: Boolean
- get() = true
- @Subscribe(tags = [Tag(ConfigRx.ADD_POSITION)])
- fun getPosition(bean: PositionBean) {
- var provincename = bean.provincename
- var latitude = bean.latitude
- var longitude = bean.longitude
- if (type == 2) {
- lat_in = bean.latitude
- lng_in = bean.longitude
- area_in = bean.areacode
- province_in = bean.areacode.substring(0, 2) + "0000"
- city_in = bean.areacode.substring(0, 4) + "00"
- binding.viewEnter.etDetailedAddress.setText(bean.position)
- binding.viewEnter.tvCity.text = bean.provincename + bean.cityname + bean.areaname
- } else {
- lat_out = bean.latitude
- lng_out = bean.longitude
- area_out = bean.areacode
- province_out = bean.areacode.substring(0, 2) + "0000"
- city_out = bean.areacode.substring(0, 4) + "00"
- binding.viewOut.etDetailedAddress.setText(bean.position)
- binding.viewOut.tvCity.text = bean.provincename + bean.cityname + bean.areaname
- }
- }
- }
|