OwnerSingleFragment.kt 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653
  1. package com.quansu.heifengwuliu.fragment
  2. import android.app.Activity
  3. import android.content.Context
  4. import android.content.Intent
  5. import android.graphics.Color
  6. import android.graphics.Typeface
  7. import android.os.Bundle
  8. import android.text.Editable
  9. import android.text.TextUtils
  10. import android.text.TextWatcher
  11. import android.view.LayoutInflater
  12. import android.view.ViewGroup
  13. import android.widget.FrameLayout
  14. import android.widget.TextView
  15. import androidx.fragment.app.Fragment
  16. import androidx.lifecycle.Observer
  17. import com.google.gson.Gson
  18. import com.hwangjr.rxbus.annotation.Subscribe
  19. import com.hwangjr.rxbus.annotation.Tag
  20. import com.qmuiteam.qmui.layout.QMUIFrameLayout
  21. import com.qmuiteam.qmui.skin.QMUISkinHelper
  22. import com.qmuiteam.qmui.skin.QMUISkinValueBuilder
  23. import com.qmuiteam.qmui.util.QMUIDisplayHelper
  24. import com.qmuiteam.qmui.util.QMUIResHelper
  25. import com.qmuiteam.qmui.widget.popup.QMUIPopup
  26. import com.qmuiteam.qmui.widget.popup.QMUIPopups
  27. import com.qmuiteam.qmui.widget.tab.QMUITab
  28. import com.qmuiteam.qmui.widget.tab.QMUITabIndicator
  29. import com.qmuiteam.qmui.widget.tab.QMUITabSegment
  30. import com.quansu.heifengwuliu.R
  31. import com.quansu.heifengwuliu.activity.AddressActivity
  32. import com.quansu.heifengwuliu.activity.AreaSelectActivity
  33. import com.quansu.heifengwuliu.adapter.BaseFragmentPagerAdapter
  34. import com.quansu.heifengwuliu.base.MBFragment
  35. import com.quansu.heifengwuliu.config.ConfigRx
  36. import com.quansu.heifengwuliu.config.MIntentAction
  37. import com.quansu.heifengwuliu.databinding.FragmentOwnersingleBinding
  38. import com.quansu.heifengwuliu.inte.ChoiceData
  39. import com.quansu.heifengwuliu.model.AddressBean
  40. import com.quansu.heifengwuliu.model.DataInfoBean
  41. import com.quansu.heifengwuliu.model.bean.ReceiveBean
  42. import com.quansu.heifengwuliu.model.bean.SendBean
  43. import com.quansu.heifengwuliu.utils.PopuListUtils
  44. import com.quansu.heifengwuliu.utils.PopupUtils
  45. import com.quansu.heifengwuliu.vmodel.OwnerSingleVModel
  46. import com.yanzhenjie.permission.AndPermission
  47. import com.yanzhenjie.permission.runtime.Permission
  48. import com.ysnows.base.ccretrofit.CCRetrofit
  49. import com.ysnows.base.model.PositionBean
  50. import com.ysnows.base.route.IGaode
  51. import com.ysnows.base.utils.B
  52. import com.ysnows.base.utils.UiSwitch
  53. import java.text.DecimalFormat
  54. /**
  55. * 一装一卸
  56. *Created by shihuiyun
  57. *on 2020/9/11
  58. */
  59. class OwnerSingleFragment : MBFragment<OwnerSingleVModel, FragmentOwnersingleBinding>() {
  60. var cats = ArrayList<String>()
  61. private var type = 1// 1:/装货 2卸货
  62. private var selectViewpage = 0
  63. var goodsTypeList = ArrayList<String>()
  64. var numsTypeList = ArrayList<String>()
  65. var insurance = ArrayList<String>()
  66. var is_agree = 1//默认 已阅读运输协议
  67. var is_public = 1//默认 发布到货源大厅
  68. var is_insurance = 0//默认 不够买保险
  69. //出
  70. var lat_out: String = ""
  71. var lng_out: String = ""
  72. var province_out: String = ""
  73. var city_out: String = ""
  74. var area_out: String = ""
  75. var time_out: String = ""
  76. //入
  77. var lat_in: String = ""
  78. var lng_in: String = ""
  79. var province_in: String = ""
  80. var city_in: String = ""
  81. var area_in: String = ""
  82. var time_in: String = ""
  83. var info_id:String="0"
  84. override fun init(savedInstanceState: Bundle?) {
  85. super.init(savedInstanceState)
  86. getData()
  87. vm.info.observe(this, Observer {
  88. //观察
  89. goodsTypeList.addAll(it.goods_type)
  90. numsTypeList.addAll(it.nums_type)
  91. initTab(it)
  92. })
  93. initData()
  94. }
  95. override fun vmClass(): Class<OwnerSingleVModel> {
  96. return OwnerSingleVModel::class.java
  97. }
  98. override fun listeners() {
  99. super.listeners()
  100. binding.tvPublish.setOnClickListener {
  101. //发布
  102. judgeValue()
  103. return@setOnClickListener
  104. // var mNormalPopup = QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(getContext(), 250))
  105. var mNormalPopup = QMUIPopups.fullScreenPopup(context)
  106. val builder: QMUISkinValueBuilder = QMUISkinValueBuilder.acquire()
  107. val frameLayout = QMUIFrameLayout(context)
  108. frameLayout.background = QMUIResHelper.getAttrDrawable(context, R.attr.qmui_skin_support_popup_bg)
  109. builder.background(R.attr.qmui_skin_support_popup_bg)
  110. QMUISkinHelper.setSkinValue(frameLayout, builder)
  111. frameLayout.radius = QMUIDisplayHelper.dp2px(context, 12)
  112. val padding = QMUIDisplayHelper.dp2px(context, 20)
  113. frameLayout.setPadding(padding, padding, padding, padding)
  114. //自定义布局
  115. val layoutInflater = requireContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
  116. var layout = layoutInflater.inflate(R.layout.item_app, null)
  117. val tv: TextView = layout.findViewById(R.id.label)
  118. tv.text = "123344"
  119. tv.setOnClickListener {
  120. mNormalPopup.dismiss()
  121. }
  122. builder.release();
  123. val size = QMUIDisplayHelper.dp2px(context, 200)
  124. val lp: FrameLayout.LayoutParams = FrameLayout.LayoutParams(size, size)
  125. frameLayout.addView(layout, lp)
  126. mNormalPopup.addView(frameLayout)
  127. mNormalPopup.onDismiss() {
  128. toast("onDismiss")
  129. }
  130. mNormalPopup.dismissIfOutsideTouch(false)
  131. mNormalPopup.animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER)
  132. mNormalPopup.show(binding.tvPublish)
  133. }
  134. binding.llChoseUnits.setOnClickListener {
  135. PopuListUtils.showQMUIPopup(context(), binding.llChoseUnits, numsTypeList, object : ChoiceData {
  136. override fun onRestuse(name: String?) {
  137. vm.unit.value = name
  138. }
  139. })
  140. }
  141. binding.llGoodsType.setOnClickListener {
  142. PopuListUtils.showQMUIPopup(context(), binding.llGoodsType, goodsTypeList, object : ChoiceData {
  143. override fun onRestuse(name: String?) {
  144. vm.goodstype.value = name
  145. }
  146. })
  147. }
  148. binding.llIsInsurance.setOnClickListener {
  149. PopuListUtils.showQMUIPopup(context(), binding.llGoodsType, insurance, object : ChoiceData {
  150. override fun onRestuse(name: String?) {
  151. vm.insurance.value = name
  152. is_insurance = if (name.equals("是")) 1 else 0
  153. }
  154. })
  155. }
  156. binding.llAgree.setOnClickListener {
  157. is_agree = if (is_agree == 1) 0 else 1
  158. vm.isAgree.value = is_agree
  159. }
  160. binding.llPublic.setOnClickListener {
  161. is_public = if (is_public == 1) 0 else 1
  162. vm.isPush.value = is_public
  163. }
  164. binding.etSingCarNums.addTextChangedListener(object : TextWatcher {
  165. override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
  166. override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
  167. override fun afterTextChanged(editable: Editable) {
  168. var nums = editable.toString().trim()
  169. if (TextUtils.isEmpty(nums)) {
  170. nums = "0"
  171. }
  172. sumTotal(1, nums)
  173. }
  174. })
  175. binding.etSingCarPrice.addTextChangedListener(object : TextWatcher {
  176. override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
  177. override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
  178. override fun afterTextChanged(editable: Editable) {
  179. var price = editable.toString().trim()
  180. if (TextUtils.isEmpty(price)) {
  181. price = "0"
  182. }
  183. sumTotal(2, price)
  184. }
  185. })
  186. }
  187. private fun judgeValue() {
  188. if (TextUtils.isEmpty(province_out)) {
  189. toast("请选择装货地址!")
  190. return
  191. }
  192. var name_out = binding.viewOut.etName.text.toString().trim()
  193. if (TextUtils.isEmpty(name_out)) {
  194. toast("请输入发货人!")
  195. return
  196. }
  197. var mobile_out = binding.viewOut.etPhone.text.toString().trim()
  198. if (TextUtils.isEmpty(mobile_out)) {
  199. toast("请输入发货人电话!")
  200. return
  201. }
  202. if (TextUtils.isEmpty(time_out)) {
  203. toast("请输入装货时间")
  204. return
  205. }
  206. var address_out = binding.viewOut.etDetailedAddress.text.toString().trim()
  207. var sendBean = SendBean(lat_out, lng_out, province_out, city_out, address_out, address_out, name_out, mobile_out, time_out, "0")
  208. if (TextUtils.isEmpty(province_in)) {
  209. toast("请选择卸货地址!")
  210. return
  211. }
  212. var name_in = binding.viewEnter.etName.text.toString().trim()
  213. if (TextUtils.isEmpty(name_in)) {
  214. toast("请输入卸货人!")
  215. return
  216. }
  217. var mobile_in = binding.viewEnter.etPhone.text.toString().trim()
  218. if (TextUtils.isEmpty(mobile_in)) {
  219. toast("请输入卸货人电话!")
  220. return
  221. }
  222. if (TextUtils.isEmpty(time_in)) {
  223. toast("请输入卸货时间")
  224. return
  225. }
  226. if (TextUtils.isEmpty(vm.goodstype.value.toString())) {
  227. toast("请选择货物类型")
  228. return
  229. }
  230. if (TextUtils.isEmpty(vm.unit.value.toString())) {
  231. toast("请选择单车运量单位")
  232. return
  233. }
  234. var nums = binding.etSingCarNums.text.toString().trim()
  235. if (TextUtils.isEmpty(vm.unit.value.toString())) {
  236. toast("请输入单车运量数量")
  237. return
  238. }
  239. var price = binding.etSingCarPrice.text.toString().trim()
  240. var total = binding.etSingCarTotal.text.toString().trim()
  241. if (TextUtils.isEmpty(vm.unit.value.toString())) {
  242. toast("请输入总金额")
  243. return
  244. }
  245. if (TextUtils.isEmpty(time_in)) {
  246. toast("请输入卸货时间")
  247. return
  248. }
  249. var address_in = binding.viewEnter.etDetailedAddress.text.toString().trim()
  250. var receiveBean = ReceiveBean(lat_in, lng_in, province_in, city_in, address_in, address_in, name_in, mobile_in, time_in, "1",
  251. "", vm.goodstype.value.toString(), nums, vm.unit.value.toString(), price, total
  252. )
  253. if (is_agree==0) {
  254. toast("请阅读并同意《平台运输协议》")
  255. return
  256. }
  257. var carnums=binding.etCarNums.text.toString()
  258. if(TextUtils.isEmpty(carnums)){
  259. toast("请输入所需车辆数量")
  260. return
  261. }
  262. var data=binding.etData.text.toString()
  263. var send= Gson().toJson(sendBean)
  264. var receive= Gson().toJson(receiveBean)
  265. vm.setReleaseSource(info_id,total,"",carnums,is_public.toString(),is_insurance.toString(),"1",
  266. data,send,receive)
  267. }
  268. /**
  269. * type:1单车运量 2单价
  270. * value:输入的值
  271. * @return
  272. */
  273. private fun sumTotal(type: Int, value: String) {
  274. var df = DecimalFormat("0.00")
  275. var total = "0"
  276. if (type == 1) {//数量
  277. var price = binding.etSingCarPrice.text.toString().trim()
  278. if (TextUtils.isEmpty(price)) {
  279. price = "0"
  280. }
  281. total = df.format(value.toDouble() * price.toDouble())
  282. } else {//价格
  283. var nums = binding.etSingCarNums.text.toString().trim()
  284. if (TextUtils.isEmpty(nums)) {
  285. nums = "0"
  286. }
  287. var df = DecimalFormat("0.00");
  288. total = df.format(nums.toDouble() * value.toDouble())
  289. }
  290. binding.etSingCarTotal.setText(total)
  291. }
  292. private fun getData() {
  293. //获取信息
  294. vm.getDataInfo(info_id);
  295. }
  296. private fun initTab(info: DataInfoBean) {
  297. if (null != info.car_type) {
  298. for (item in info.car_type) {
  299. cats.add(item.type_name)
  300. }
  301. }
  302. //设置viewpager
  303. val fragments = ArrayList<Fragment>()
  304. var index = 0
  305. for (cat in cats) {
  306. var ownerImgFragment = OwnerImgFragment()
  307. ownerImgFragment.arguments = B().putString("img", info.car_type[index].type_img).ok()
  308. fragments.add(ownerImgFragment)
  309. index++
  310. }
  311. val adapter = BaseFragmentPagerAdapter(childFragmentManager, fragments)
  312. binding.qmViewPager.adapter = adapter
  313. //设置tab
  314. binding.tabs.setIndicator(QMUITabIndicator(QMUIDisplayHelper.dp2px(context(), 2), false, true))
  315. val space: Int = QMUIDisplayHelper.dp2px(context, 20)
  316. binding.tabs.setPadding(space, 0, space, 0)
  317. binding.tabs.mode = QMUITabSegment.MODE_SCROLLABLE
  318. // val space: Int = QMUIDisplayHelper.dp2px(context, 16)
  319. // binding.tabs.mode = QMUITabSegment.MODE_SCROLLABLE //MODE_SCROLLABLE 自适应宽度+滚动 MODE_FIXED 均分
  320. // binding.tabs.setItemSpaceInScrollMode(space)
  321. // binding.tabs.setupWithViewPager(binding.qmViewPager, false)
  322. // binding.tabs.setPadding(space, 0, space, 0)
  323. //
  324. val builder = binding.tabs.tabBuilder()
  325. builder
  326. .skinChangeWithTintColor(false)
  327. .setSelectColor(Color.parseColor("#2E4E71"))
  328. .setNormalColor(Color.parseColor("#666666"))
  329. .setTypeface(Typeface.DEFAULT_BOLD, Typeface.DEFAULT)
  330. .setDynamicChangeIconColor(false)
  331. val tabs = ArrayList<QMUITab>()
  332. for (cat in cats) {
  333. val item = builder
  334. .setText(cat)
  335. .build(context())
  336. tabs.add(item)
  337. }
  338. tabs.forEach {
  339. binding.tabs.addTab(it)
  340. }
  341. binding.tabs.setupWithViewPager(binding.qmViewPager, false)
  342. binding.imgNext.setOnClickListener {
  343. selectViewpage = binding.qmViewPager.currentItem
  344. if (selectViewpage < cats.size - 1) {
  345. binding.qmViewPager.currentItem = selectViewpage + 1
  346. }
  347. }
  348. //向右
  349. binding.imgDown.setOnClickListener {
  350. toast("222")
  351. selectViewpage = binding.qmViewPager.currentItem
  352. if (selectViewpage < cats.size - 1) {
  353. binding.qmViewPager.currentItem = selectViewpage + 1
  354. }
  355. }
  356. //向左
  357. binding.imgUp.setOnClickListener {
  358. selectViewpage = binding.qmViewPager.currentItem
  359. if (selectViewpage < cats.size - 1 && selectViewpage > 0) {
  360. binding.qmViewPager.currentItem = selectViewpage - 1
  361. }
  362. }
  363. }
  364. private fun initData() {
  365. insurance.add("是")
  366. insurance.add("否")
  367. //卸货信息
  368. binding.viewEnter.tvCity.setHint("请选择卸货地址")
  369. binding.viewEnter.llChoseMap.setOnClickListener {
  370. //地图选点
  371. type = 2
  372. choseMap()
  373. }
  374. binding.viewOut.llChoseMap.setOnClickListener {
  375. //地图选点
  376. type = 1
  377. choseMap()
  378. }
  379. binding.viewOut.llChoseAddress.setOnClickListener {
  380. //地址薄 1
  381. type = 1
  382. UiSwitch.bundleRes(this, AddressActivity::class.java,
  383. B.with().putString("type", "1").ok(), MIntentAction.REQUEST_CODE_ONE)
  384. }
  385. binding.viewEnter.llChoseAddress.setOnClickListener {
  386. //地址薄 2
  387. type = 2
  388. UiSwitch.bundleRes(this, AddressActivity::class.java,
  389. B.with().putString("type", "2").ok(), MIntentAction.REQUEST_CODE_ONE)
  390. }
  391. binding.viewEnter.tvCity.setOnClickListener {
  392. type = 2
  393. UiSwitch.singleRes(this, AreaSelectActivity::class.java,
  394. MIntentAction.REQUEST_CODE_TWO)
  395. }
  396. binding.viewOut.tvCity.setOnClickListener {
  397. type = 1
  398. UiSwitch.singleRes(this, AreaSelectActivity::class.java,
  399. MIntentAction.REQUEST_CODE_TWO)
  400. }
  401. binding.viewEnter.tvChoseTime.setOnClickListener {
  402. //选择时间
  403. PopupUtils.setChoseTime(context, binding.viewEnter.tvChoseTime, object : ChoiceData {
  404. override fun onRestuse(time: String?) {
  405. if (time != null) {
  406. time_in = time
  407. }
  408. }
  409. })
  410. }
  411. binding.viewOut.tvChoseTime.setOnClickListener {
  412. PopupUtils.setChoseTime(context, binding.viewOut.tvChoseTime, object : ChoiceData {
  413. override fun onRestuse(time: String?) {
  414. if (time != null) {
  415. time_out = time
  416. }
  417. }
  418. })
  419. }
  420. }
  421. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
  422. super.onActivityResult(requestCode, resultCode, data)
  423. if (MIntentAction.REQUEST_CODE_TWO === requestCode && resultCode == Activity.RESULT_OK) {
  424. val bundle = data!!.extras
  425. if (null != bundle) {
  426. var name = bundle.getString("name")
  427. if (type == 1) {
  428. area_out = bundle.getString("area_code")
  429. province_out = bundle.getString("province_code")
  430. city_out = bundle.getString("city_code")
  431. binding.viewOut.tvCity.text = name
  432. } else {
  433. area_in = bundle.getString("area_code")
  434. province_in = bundle.getString("province_code")
  435. city_in = bundle.getString("city_code")
  436. binding.viewEnter.tvCity.text = name
  437. }
  438. }
  439. return
  440. }
  441. if (MIntentAction.REQUEST_CODE_ONE == requestCode && resultCode == Activity.RESULT_OK) {
  442. val bundle = data!!.extras
  443. if (null != bundle) {
  444. var item = bundle.getSerializable("item") as AddressBean
  445. //todo
  446. if (type == 1) {
  447. binding.viewOut.tvCity.text = item.province?.name + item.city?.name + item.area?.name
  448. binding.viewOut.etDetailedAddress.setText(item.address)
  449. binding.viewOut.tvChoseTime.text = item.create_time
  450. binding.viewOut.etName.setText(item.name)
  451. binding.viewOut.etPhone.setText(item.mobile)
  452. var province_code = item.province?.code
  453. var city_code = item.city?.code
  454. var area_code = item.area?.code
  455. } else {
  456. binding.viewEnter.tvCity.text = item.province?.name + item.city?.name + item.area?.name
  457. binding.viewEnter.etDetailedAddress.setText(item.address)
  458. binding.viewEnter.tvChoseTime.text = item.create_time
  459. binding.viewEnter.etName.setText(item.name)
  460. binding.viewEnter.etPhone.setText(item.mobile)
  461. var province_code = item.province?.code
  462. var city_code = item.city?.code
  463. var area_code = item.area?.code
  464. }
  465. }
  466. return
  467. }
  468. }
  469. private fun choseMap() {
  470. AndPermission.with(repository().context)
  471. .runtime()
  472. .permission(Permission.ACCESS_COARSE_LOCATION,
  473. Permission.ACCESS_FINE_LOCATION,
  474. Permission.WRITE_EXTERNAL_STORAGE,
  475. Permission.READ_EXTERNAL_STORAGE,
  476. Permission.READ_PHONE_STATE
  477. )
  478. .onGranted { data ->
  479. CCRetrofit.instance()
  480. .with(context)
  481. .create(IGaode::class.java)
  482. .selectLocation()
  483. .subscribe()
  484. }
  485. .start()
  486. }
  487. override fun binding(inflater: LayoutInflater, container: ViewGroup?): FragmentOwnersingleBinding {
  488. return FragmentOwnersingleBinding.inflate(layoutInflater)
  489. }
  490. override fun title(): String? {
  491. return null
  492. }
  493. override val isRxbus: Boolean
  494. get() = true
  495. @Subscribe(tags = [Tag(ConfigRx.ADD_POSITION)])
  496. fun getPosition(bean: PositionBean) {
  497. var provincename = bean.provincename
  498. var latitude = bean.latitude
  499. var longitude = bean.longitude
  500. if (type == 2) {
  501. lat_in = bean.latitude
  502. lng_in = bean.longitude
  503. area_in = bean.areacode
  504. province_in = bean.areacode.substring(0, 2) + "0000"
  505. city_in = bean.areacode.substring(0, 4) + "00"
  506. binding.viewEnter.etDetailedAddress.setText(bean.position)
  507. binding.viewEnter.tvCity.text = bean.provincename + bean.cityname + bean.areaname
  508. } else {
  509. lat_out = bean.latitude
  510. lng_out = bean.longitude
  511. area_out = bean.areacode
  512. province_out = bean.areacode.substring(0, 2) + "0000"
  513. city_out = bean.areacode.substring(0, 4) + "00"
  514. binding.viewOut.etDetailedAddress.setText(bean.position)
  515. binding.viewOut.tvCity.text = bean.provincename + bean.cityname + bean.areaname
  516. }
  517. }
  518. }