package com.xw.yunwei.ui.work.car.detail.operations.repair import android.annotation.SuppressLint import android.net.Uri import androidx.recyclerview.widget.GridLayoutManager import com.blankj.utilcode.util.UriUtils import com.luck.picture.lib.basic.PictureSelector import com.luck.picture.lib.config.PictureMimeType import com.luck.picture.lib.config.SelectMimeType import com.luck.picture.lib.entity.LocalMedia import com.luck.picture.lib.interfaces.OnResultCallbackListener import com.xw.common.CommonDialog import com.xw.common.TimeDialog import com.xw.common.TimeDialog.Companion.getTime import com.xw.common.base.BaseActivity import com.xw.common.base.FileSelectBean import com.xw.common.base.ImageEventListener import com.xw.common.base.ImageSelectAdapter import com.xw.common.base.ShowImgListDialog import com.xw.common.utils.BindUtils.getUrl import com.xw.common.utils.BindUtils.getUrls import com.xw.common.utils.GlideEngine import com.xw.common.utils.PictureCompressEngine import com.xw.common.utils.ToastUtilCommon import com.xw.common.viewAdapter.ImageDefault import com.xw.common.viewAdapter.ViewAdapter import com.xw.yunwei.BR import com.xw.yunwei.Constants.user import com.xw.yunwei.R import com.xw.yunwei.databinding.ActivityCarRepairBinding import com.xw.yunwei.model.CarModel import com.xw.yunwei.model.MaintainRecordModel import java.util.ArrayList import kotlin.text.isNotEmpty import kotlin.text.replace /** * 车辆维修 */ class RepairCarActivity : BaseActivity() { override fun getBindingVariable() = BR.viewModel val dialogTime: TimeDialog by lazy { TimeDialog(this) } override fun init() { super.init() viewModel.taskId = intent.getLongExtra("taskId", -1L) viewModel.carId = intent.getLongExtra("carId", 0L) viewModel.queryInfo() viewModel.queryStatus() initAdapter() } override fun setObservable() { super.setObservable() viewModel.carStatus.observe(this) { if (it == 1) { viewModel.adapters[0].isEdit = 1 } else if (it == 2) { viewModel.adapters[0].isEdit = 0 } } viewModel.carInfo.observe(this) { initBasicInfo(it) } viewModel.repairRecord.observe(this){ if(it.status == 2){ it.xpVehicleRepair?.startRepairPicture?.let { val list = it.getUrls().map { FileSelectBean(url = it, type = "img") } viewModel.adapters[0].setList(list) } } } } override fun setListener() { super.setListener() binding.layoutSend.startTimeContainer.setOnClickListener { val showTime = getTime(viewModel.startTime.value) val minTime = getTime("2020-01-01") dialogTime.show("选择日期", showTime, minTime) { val selectTime = getTime(it) if (!viewModel.endTime.value.isNullOrEmpty()) { if (selectTime.replace("-", "") > viewModel.endTime.value!!.replace("-", "") ) { ToastUtilCommon.showWarn("开始时间不能大于结束时间") return@show } } viewModel.startTime.value = selectTime } } binding.layoutSend.endTimeContainer.setOnClickListener { val showTime = getTime(viewModel.endTime.value) val minTime = getTime("2020-01-01") dialogTime.show("选择日期", showTime, minTime) { val selectTime = getTime(it) if (!viewModel.startTime.value.isNullOrEmpty()) { if (selectTime.replace("-", "") < viewModel.startTime.value!!.replace("-", "") ) { ToastUtilCommon.showWarn("开始时间不能大于结束时间") return@show } } viewModel.endTime.value = getTime(it) } } } @SuppressLint("SetTextI18n") private fun initBasicInfo(it: CarModel) { binding.batteryLife.text = "${it.mileageRange?.toInt()}km" binding.batteryLife.setTextColor( com.xw.common.custom.BatteryView.getBatteryColor( it.currentElectricity ?: 0 ) ) binding.batteryView.setLevel(it.currentElectricity ?: 0) } private fun initAdapter() { viewModel.adapters.clear() viewModel.imageEvents.clear() for (index in 0 until 2) { val imageEvent = object : ImageEventListener() { override fun addImage(item: FileSelectBean) { viewModel.operateIndex = index showTypeDialog() } override fun viewImage(item: FileSelectBean) { val imgList: MutableList = ArrayList() for (item1 in viewModel.adapters[index].data) { imgList.add(item1.localPath.ifEmpty { item1.url }) } ShowImgListDialog( this@RepairCarActivity, imgList, imgList.indexOf(item.localPath) ).show() } override fun deleteImage(item: FileSelectBean) { viewModel.adapters[index].remove(item) } } viewModel.imageEvents.add(imageEvent) val adapter = ImageSelectAdapter(this, viewModel.maxSizes[index], 1, imageEvent) viewModel.adapters.add(adapter) } binding.layoutSend.rv.adapter = viewModel.adapters[0] binding.layoutSend.rv.layoutManager = GridLayoutManager(this, 5) binding.layoutGet.rvHis.adapter = viewModel.adapters[0] binding.layoutGet.rvHis.layoutManager = GridLayoutManager(this, 4) binding.layoutGet.rv.adapter = viewModel.adapters[1] binding.layoutGet.rv.layoutManager = GridLayoutManager(this, 5) } private fun showTypeDialog() { CommonDialog.showTypeDialog(this) { if (it == 0) takeAPhotograph() else if (it == 1) enterGallery() } } // 进入图库 @SuppressLint("SourceLockedOrientationActivity") private fun enterGallery() { PictureSelector.create(this) .openGallery(SelectMimeType.ofImage()) .setImageEngine(GlideEngine.createGlideEngine()) .setMaxSelectNum(viewModel.maxSizes[viewModel.operateIndex] - viewModel.adapters[viewModel.operateIndex].data.size) .setImageSpanCount(4) .isPreviewImage(true) .isDisplayCamera(false) .setCompressEngine(PictureCompressEngine()) .forResult(resultCallbackListener) } // 拍照 private fun takeAPhotograph() { PictureSelector.create(this) .openCamera(SelectMimeType.ofImage()) .setCompressEngine(PictureCompressEngine()) .forResultActivity(resultCallbackListener) } private var resultCallbackListener = object : OnResultCallbackListener { override fun onResult(result: ArrayList?) { result?.let { selectList -> val dataList: MutableList = ArrayList() dataList.addAll(viewModel.adapters[viewModel.operateIndex].data) for (item in selectList) { val path: String = item.availablePath var imgPath = if (PictureMimeType.isContent(path) && !item.isCut && !item.isCompressed) { UriUtils.uri2File(Uri.parse(path)).absolutePath } else { path } dataList.add(FileSelectBean(localPath = imgPath, type = "img")) } viewModel.adapters[viewModel.operateIndex].setList(dataList) } } override fun onCancel() {} } }