diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt index defa8f9..0629f1c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt @@ -1,25 +1,149 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchCustomerActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_capability.rootView +import kotlinx.android.synthetic.main.activity_customer.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* class CustomerActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021301) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } } override fun initLayoutView(): Int = R.layout.activity_customer override fun observeRequestState() { - + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "客户列表" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + "", + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021301 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt index defa8f9..0629f1c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt @@ -1,25 +1,149 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchCustomerActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_capability.rootView +import kotlinx.android.synthetic.main.activity_customer.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* class CustomerActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021301) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } } override fun initLayoutView(): Int = R.layout.activity_customer override fun observeRequestState() { - + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "客户列表" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + "", + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021301 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt new file mode 100644 index 0000000..5f2cefe --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt @@ -0,0 +1,25 @@ +package com.casic.xz.meterage.view.home + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class CustomerDetailActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_customer_detail + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt index defa8f9..0629f1c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt @@ -1,25 +1,149 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchCustomerActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_capability.rootView +import kotlinx.android.synthetic.main.activity_customer.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* class CustomerActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021301) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } } override fun initLayoutView(): Int = R.layout.activity_customer override fun observeRequestState() { - + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "客户列表" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + "", + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021301 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt new file mode 100644 index 0000000..5f2cefe --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt @@ -0,0 +1,25 @@ +package com.casic.xz.meterage.view.home + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class CustomerDetailActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_customer_detail + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt index aea442f..b0bfd9c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt @@ -103,12 +103,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } private val callback = Handler.Callback { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt index defa8f9..0629f1c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt @@ -1,25 +1,149 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchCustomerActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_capability.rootView +import kotlinx.android.synthetic.main.activity_customer.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* class CustomerActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021301) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } } override fun initLayoutView(): Int = R.layout.activity_customer override fun observeRequestState() { - + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "客户列表" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + "", + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021301 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt new file mode 100644 index 0000000..5f2cefe --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt @@ -0,0 +1,25 @@ +package com.casic.xz.meterage.view.home + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class CustomerDetailActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_customer_detail + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt index aea442f..b0bfd9c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt @@ -103,12 +103,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt new file mode 100644 index 0000000..7e23b3a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -0,0 +1,43 @@ +package com.casic.xz.meterage.view.search + +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索客户 + * */ +class SearchCustomerActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + navigatePageTo(inputView.text.toString()) + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询客户名称、编号" + } + + override fun onResume() { + super.onResume() + //TODO 流式布局显示查询记录Tag? + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt index defa8f9..0629f1c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt @@ -1,25 +1,149 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchCustomerActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_capability.rootView +import kotlinx.android.synthetic.main.activity_customer.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* class CustomerActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021301) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } } override fun initLayoutView(): Int = R.layout.activity_customer override fun observeRequestState() { - + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "客户列表" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + "", + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021301 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt new file mode 100644 index 0000000..5f2cefe --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt @@ -0,0 +1,25 @@ +package com.casic.xz.meterage.view.home + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class CustomerDetailActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_customer_detail + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt index aea442f..b0bfd9c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt @@ -103,12 +103,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt new file mode 100644 index 0000000..7e23b3a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -0,0 +1,43 @@ +package com.casic.xz.meterage.view.search + +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索客户 + * */ +class SearchCustomerActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + navigatePageTo(inputView.text.toString()) + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询客户名称、编号" + } + + override fun onResume() { + super.onResume() + //TODO 流式布局显示查询记录Tag? + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt new file mode 100644 index 0000000..64f00ea --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt @@ -0,0 +1,150 @@ +package com.casic.xz.meterage.view.search + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.home.CustomerDetailActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_customer_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchCustomerResultActivity : KotlinBaseActivity() { + + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021302) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer_reasult + + override fun observeRequestState() { + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + //TODO 查询条件不确定 + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + param, + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021302 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt index defa8f9..0629f1c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt @@ -1,25 +1,149 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchCustomerActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_capability.rootView +import kotlinx.android.synthetic.main.activity_customer.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* class CustomerActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021301) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } } override fun initLayoutView(): Int = R.layout.activity_customer override fun observeRequestState() { - + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "客户列表" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + "", + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021301 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt new file mode 100644 index 0000000..5f2cefe --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt @@ -0,0 +1,25 @@ +package com.casic.xz.meterage.view.home + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class CustomerDetailActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_customer_detail + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt index aea442f..b0bfd9c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt @@ -103,12 +103,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt new file mode 100644 index 0000000..7e23b3a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -0,0 +1,43 @@ +package com.casic.xz.meterage.view.search + +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索客户 + * */ +class SearchCustomerActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + navigatePageTo(inputView.text.toString()) + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询客户名称、编号" + } + + override fun onResume() { + super.onResume() + //TODO 流式布局显示查询记录Tag? + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt new file mode 100644 index 0000000..64f00ea --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt @@ -0,0 +1,150 @@ +package com.casic.xz.meterage.view.search + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.home.CustomerDetailActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_customer_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchCustomerResultActivity : KotlinBaseActivity() { + + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021302) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer_reasult + + override fun observeRequestState() { + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + //TODO 查询条件不确定 + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + param, + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021302 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt index 5c2f743..fc2b4d0 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt @@ -86,12 +86,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_equipment_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt index defa8f9..0629f1c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt @@ -1,25 +1,149 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchCustomerActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_capability.rootView +import kotlinx.android.synthetic.main.activity_customer.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* class CustomerActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021301) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } } override fun initLayoutView(): Int = R.layout.activity_customer override fun observeRequestState() { - + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "客户列表" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + "", + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021301 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt new file mode 100644 index 0000000..5f2cefe --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt @@ -0,0 +1,25 @@ +package com.casic.xz.meterage.view.home + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class CustomerDetailActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_customer_detail + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt index aea442f..b0bfd9c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt @@ -103,12 +103,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt new file mode 100644 index 0000000..7e23b3a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -0,0 +1,43 @@ +package com.casic.xz.meterage.view.search + +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索客户 + * */ +class SearchCustomerActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + navigatePageTo(inputView.text.toString()) + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询客户名称、编号" + } + + override fun onResume() { + super.onResume() + //TODO 流式布局显示查询记录Tag? + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt new file mode 100644 index 0000000..64f00ea --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt @@ -0,0 +1,150 @@ +package com.casic.xz.meterage.view.search + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.home.CustomerDetailActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_customer_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchCustomerResultActivity : KotlinBaseActivity() { + + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021302) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer_reasult + + override fun observeRequestState() { + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + //TODO 查询条件不确定 + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + param, + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021302 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt index 5c2f743..fc2b4d0 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt @@ -86,12 +86,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_equipment_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 898b189..f275890 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_meterage_train_reasult override fun observeRequestState() { - meterageTrainViewModel.loadState.observe(this, { + meterageTrainViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt index defa8f9..0629f1c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt @@ -1,25 +1,149 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchCustomerActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_capability.rootView +import kotlinx.android.synthetic.main.activity_customer.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* class CustomerActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021301) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } } override fun initLayoutView(): Int = R.layout.activity_customer override fun observeRequestState() { - + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "客户列表" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + "", + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021301 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt new file mode 100644 index 0000000..5f2cefe --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt @@ -0,0 +1,25 @@ +package com.casic.xz.meterage.view.home + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class CustomerDetailActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_customer_detail + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt index aea442f..b0bfd9c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt @@ -103,12 +103,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt new file mode 100644 index 0000000..7e23b3a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -0,0 +1,43 @@ +package com.casic.xz.meterage.view.search + +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索客户 + * */ +class SearchCustomerActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + navigatePageTo(inputView.text.toString()) + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询客户名称、编号" + } + + override fun onResume() { + super.onResume() + //TODO 流式布局显示查询记录Tag? + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt new file mode 100644 index 0000000..64f00ea --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt @@ -0,0 +1,150 @@ +package com.casic.xz.meterage.view.search + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.home.CustomerDetailActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_customer_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchCustomerResultActivity : KotlinBaseActivity() { + + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021302) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer_reasult + + override fun observeRequestState() { + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + //TODO 查询条件不确定 + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + param, + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021302 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt index 5c2f743..fc2b4d0 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt @@ -86,12 +86,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_equipment_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 898b189..f275890 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_meterage_train_reasult override fun observeRequestState() { - meterageTrainViewModel.loadState.observe(this, { + meterageTrainViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt index c885d5c..32712e2 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt @@ -85,12 +85,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_standard_device_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt index defa8f9..0629f1c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt @@ -1,25 +1,149 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchCustomerActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_capability.rootView +import kotlinx.android.synthetic.main.activity_customer.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* class CustomerActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021301) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } } override fun initLayoutView(): Int = R.layout.activity_customer override fun observeRequestState() { - + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "客户列表" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + "", + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021301 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt new file mode 100644 index 0000000..5f2cefe --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt @@ -0,0 +1,25 @@ +package com.casic.xz.meterage.view.home + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class CustomerDetailActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_customer_detail + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt index aea442f..b0bfd9c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt @@ -103,12 +103,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt new file mode 100644 index 0000000..7e23b3a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -0,0 +1,43 @@ +package com.casic.xz.meterage.view.search + +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索客户 + * */ +class SearchCustomerActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + navigatePageTo(inputView.text.toString()) + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询客户名称、编号" + } + + override fun onResume() { + super.onResume() + //TODO 流式布局显示查询记录Tag? + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt new file mode 100644 index 0000000..64f00ea --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt @@ -0,0 +1,150 @@ +package com.casic.xz.meterage.view.search + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.home.CustomerDetailActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_customer_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchCustomerResultActivity : KotlinBaseActivity() { + + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021302) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer_reasult + + override fun observeRequestState() { + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + //TODO 查询条件不确定 + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + param, + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021302 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt index 5c2f743..fc2b4d0 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt @@ -86,12 +86,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_equipment_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 898b189..f275890 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_meterage_train_reasult override fun observeRequestState() { - meterageTrainViewModel.loadState.observe(this, { + meterageTrainViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt index c885d5c..32712e2 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt @@ -85,12 +85,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_standard_device_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/res/layout/activity_customer.xml b/app/src/main/res/layout/activity_customer.xml index 77d9ef6..22ec15f 100644 --- a/app/src/main/res/layout/activity_customer.xml +++ b/app/src/main/res/layout/activity_customer.xml @@ -1,6 +1,98 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt index defa8f9..0629f1c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt @@ -1,25 +1,149 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchCustomerActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_capability.rootView +import kotlinx.android.synthetic.main.activity_customer.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* class CustomerActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021301) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } } override fun initLayoutView(): Int = R.layout.activity_customer override fun observeRequestState() { - + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "客户列表" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + "", + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021301 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt new file mode 100644 index 0000000..5f2cefe --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt @@ -0,0 +1,25 @@ +package com.casic.xz.meterage.view.home + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class CustomerDetailActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_customer_detail + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt index aea442f..b0bfd9c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt @@ -103,12 +103,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt new file mode 100644 index 0000000..7e23b3a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -0,0 +1,43 @@ +package com.casic.xz.meterage.view.search + +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索客户 + * */ +class SearchCustomerActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + navigatePageTo(inputView.text.toString()) + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询客户名称、编号" + } + + override fun onResume() { + super.onResume() + //TODO 流式布局显示查询记录Tag? + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt new file mode 100644 index 0000000..64f00ea --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt @@ -0,0 +1,150 @@ +package com.casic.xz.meterage.view.search + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.home.CustomerDetailActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_customer_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchCustomerResultActivity : KotlinBaseActivity() { + + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021302) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer_reasult + + override fun observeRequestState() { + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + //TODO 查询条件不确定 + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + param, + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021302 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt index 5c2f743..fc2b4d0 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt @@ -86,12 +86,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_equipment_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 898b189..f275890 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_meterage_train_reasult override fun observeRequestState() { - meterageTrainViewModel.loadState.observe(this, { + meterageTrainViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt index c885d5c..32712e2 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt @@ -85,12 +85,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_standard_device_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/res/layout/activity_customer.xml b/app/src/main/res/layout/activity_customer.xml index 77d9ef6..22ec15f 100644 --- a/app/src/main/res/layout/activity_customer.xml +++ b/app/src/main/res/layout/activity_customer.xml @@ -1,6 +1,98 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_customer_detail.xml b/app/src/main/res/layout/activity_customer_detail.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_customer_detail.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt index defa8f9..0629f1c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt @@ -1,25 +1,149 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchCustomerActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_capability.rootView +import kotlinx.android.synthetic.main.activity_customer.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* class CustomerActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021301) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } } override fun initLayoutView(): Int = R.layout.activity_customer override fun observeRequestState() { - + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "客户列表" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + "", + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021301 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt new file mode 100644 index 0000000..5f2cefe --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt @@ -0,0 +1,25 @@ +package com.casic.xz.meterage.view.home + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class CustomerDetailActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_customer_detail + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt index aea442f..b0bfd9c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt @@ -103,12 +103,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt new file mode 100644 index 0000000..7e23b3a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -0,0 +1,43 @@ +package com.casic.xz.meterage.view.search + +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索客户 + * */ +class SearchCustomerActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + navigatePageTo(inputView.text.toString()) + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询客户名称、编号" + } + + override fun onResume() { + super.onResume() + //TODO 流式布局显示查询记录Tag? + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt new file mode 100644 index 0000000..64f00ea --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt @@ -0,0 +1,150 @@ +package com.casic.xz.meterage.view.search + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.home.CustomerDetailActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_customer_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchCustomerResultActivity : KotlinBaseActivity() { + + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021302) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer_reasult + + override fun observeRequestState() { + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + //TODO 查询条件不确定 + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + param, + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021302 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt index 5c2f743..fc2b4d0 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt @@ -86,12 +86,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_equipment_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 898b189..f275890 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_meterage_train_reasult override fun observeRequestState() { - meterageTrainViewModel.loadState.observe(this, { + meterageTrainViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt index c885d5c..32712e2 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt @@ -85,12 +85,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_standard_device_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/res/layout/activity_customer.xml b/app/src/main/res/layout/activity_customer.xml index 77d9ef6..22ec15f 100644 --- a/app/src/main/res/layout/activity_customer.xml +++ b/app/src/main/res/layout/activity_customer.xml @@ -1,6 +1,98 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_customer_detail.xml b/app/src/main/res/layout/activity_customer_detail.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_customer_detail.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_customer.xml b/app/src/main/res/layout/activity_search_customer.xml new file mode 100644 index 0000000..e8350cc --- /dev/null +++ b/app/src/main/res/layout/activity_search_customer.xml @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt index defa8f9..0629f1c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt @@ -1,25 +1,149 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchCustomerActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_capability.rootView +import kotlinx.android.synthetic.main.activity_customer.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* class CustomerActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021301) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } } override fun initLayoutView(): Int = R.layout.activity_customer override fun observeRequestState() { - + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "客户列表" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + "", + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021301 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt new file mode 100644 index 0000000..5f2cefe --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt @@ -0,0 +1,25 @@ +package com.casic.xz.meterage.view.home + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class CustomerDetailActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_customer_detail + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt index aea442f..b0bfd9c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt @@ -103,12 +103,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt new file mode 100644 index 0000000..7e23b3a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -0,0 +1,43 @@ +package com.casic.xz.meterage.view.search + +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索客户 + * */ +class SearchCustomerActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + navigatePageTo(inputView.text.toString()) + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询客户名称、编号" + } + + override fun onResume() { + super.onResume() + //TODO 流式布局显示查询记录Tag? + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt new file mode 100644 index 0000000..64f00ea --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt @@ -0,0 +1,150 @@ +package com.casic.xz.meterage.view.search + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.home.CustomerDetailActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_customer_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchCustomerResultActivity : KotlinBaseActivity() { + + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021302) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer_reasult + + override fun observeRequestState() { + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + //TODO 查询条件不确定 + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + param, + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021302 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt index 5c2f743..fc2b4d0 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt @@ -86,12 +86,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_equipment_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 898b189..f275890 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_meterage_train_reasult override fun observeRequestState() { - meterageTrainViewModel.loadState.observe(this, { + meterageTrainViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt index c885d5c..32712e2 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt @@ -85,12 +85,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_standard_device_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/res/layout/activity_customer.xml b/app/src/main/res/layout/activity_customer.xml index 77d9ef6..22ec15f 100644 --- a/app/src/main/res/layout/activity_customer.xml +++ b/app/src/main/res/layout/activity_customer.xml @@ -1,6 +1,98 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_customer_detail.xml b/app/src/main/res/layout/activity_customer_detail.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_customer_detail.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_customer.xml b/app/src/main/res/layout/activity_search_customer.xml new file mode 100644 index 0000000..e8350cc --- /dev/null +++ b/app/src/main/res/layout/activity_search_customer.xml @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_customer_reasult.xml b/app/src/main/res/layout/activity_search_customer_reasult.xml new file mode 100644 index 0000000..69a77f1 --- /dev/null +++ b/app/src/main/res/layout/activity_search_customer_reasult.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eaea412..b520164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,7 @@ + @@ -64,6 +65,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_customer_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.agreementLevelView.text = rowsBean.grade.toChineseGrade() + holder.overallView.text = rowsBean.evaluationName + holder.scaleView.text = rowsBean.companySizeName + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onItemClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var agreementLevelView: TextView = view.findViewById(R.id.agreementLevelView) + var overallView: TextView = view.findViewById(R.id.overallView) + var scaleView: TextView = view.findViewById(R.id.scaleView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 492a239..b214b05 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -141,6 +141,19 @@ return (t2 - t1) > 0 } +fun String.toChineseGrade(): String { + if (this.isBlank()) { + return "级别未知" + } + return when (this) { + "0" -> "A" + "1" -> "B" + "2" -> "C" + "3" -> "D" + else -> "级别未知" + } +} + fun String.compressImage(context: Context, listener: OnImageCompressListener) { Luban.with(context) .load(this) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt index dcbb471..6de2dc9 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_capability override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt index defa8f9..0629f1c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerActivity.kt @@ -1,25 +1,149 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchCustomerActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_capability.rootView +import kotlinx.android.synthetic.main.activity_customer.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* class CustomerActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021301) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } } override fun initLayoutView(): Int = R.layout.activity_customer override fun observeRequestState() { - + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "客户列表" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + "", + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021301 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt new file mode 100644 index 0000000..5f2cefe --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CustomerDetailActivity.kt @@ -0,0 +1,25 @@ +package com.casic.xz.meterage.view.home + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseActivity + +class CustomerDetailActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_customer_detail + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt index aea442f..b0bfd9c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt @@ -103,12 +103,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult override fun observeRequestState() { - capabilityViewModel.loadState.observe(this, { + capabilityViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt new file mode 100644 index 0000000..7e23b3a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -0,0 +1,43 @@ +package com.casic.xz.meterage.view.search + +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索客户 + * */ +class SearchCustomerActivity : KotlinBaseActivity() { + + override fun initData() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + navigatePageTo(inputView.text.toString()) + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询客户名称、编号" + } + + override fun onResume() { + super.onResume() + //TODO 流式布局显示查询记录Tag? + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt new file mode 100644 index 0000000..64f00ea --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerResultActivity.kt @@ -0,0 +1,150 @@ +package com.casic.xz.meterage.view.search + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.CustomerListAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.CustomerListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.home.CustomerDetailActivity +import com.casic.xz.meterage.vm.CustomerViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_customer_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchCustomerResultActivity : KotlinBaseActivity() { + + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var customerViewModel: CustomerViewModel + private lateinit var customerListAdapter: CustomerListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java] + customerViewModel.customerResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + customerLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + customerLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023021302) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + customerLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getCustomerList() + } + + customerLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getCustomerList() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_customer_reasult + + override fun observeRequestState() { + customerViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getCustomerList() + } + + //TODO 查询条件不确定 + private fun getCustomerList() { + customerViewModel.getCustomerList( + "", + param, + "", + "", + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023021302 -> { + if (isRefresh || isLoadMore) { + customerListAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无客户数据") { + pageIndex = 1 + getCustomerList() + } + } else { + emptyView!!.hide() + customerListAdapter = CustomerListAdapter(this, dataBeans) + customerRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + customerRecyclerView.adapter = customerListAdapter + customerListAdapter.setOnItemClickListener(object : + CustomerListAdapter.OnItemClickListener { + override fun onItemClicked(position: Int) { + val rowsModel = dataBeans[position] + navigatePageTo(rowsModel.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt index 5c2f743..fc2b4d0 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt @@ -86,12 +86,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_equipment_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 898b189..f275890 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -84,12 +84,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_meterage_train_reasult override fun observeRequestState() { - meterageTrainViewModel.loadState.observe(this, { + meterageTrainViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt index c885d5c..32712e2 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt @@ -85,12 +85,12 @@ override fun initLayoutView(): Int = R.layout.activity_search_standard_device_reasult override fun observeRequestState() { - equipmentViewModel.loadState.observe(this, { + equipmentViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } - }) + } } override fun setupTopBarLayout() { diff --git a/app/src/main/res/layout/activity_customer.xml b/app/src/main/res/layout/activity_customer.xml index 77d9ef6..22ec15f 100644 --- a/app/src/main/res/layout/activity_customer.xml +++ b/app/src/main/res/layout/activity_customer.xml @@ -1,6 +1,98 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_customer_detail.xml b/app/src/main/res/layout/activity_customer_detail.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_customer_detail.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_customer.xml b/app/src/main/res/layout/activity_search_customer.xml new file mode 100644 index 0000000..e8350cc --- /dev/null +++ b/app/src/main/res/layout/activity_search_customer.xml @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_customer_reasult.xml b/app/src/main/res/layout/activity_search_customer_reasult.xml new file mode 100644 index 0000000..69a77f1 --- /dev/null +++ b/app/src/main/res/layout/activity_search_customer_reasult.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_customer_rv_l.xml b/app/src/main/res/layout/item_customer_rv_l.xml new file mode 100644 index 0000000..c6a3417 --- /dev/null +++ b/app/src/main/res/layout/item_customer_rv_l.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + \ No newline at end of file