diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 6c4c80c..cdc9762 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,6 +5,7 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.home.CapabilityActivity
import com.casic.xz.meterage.view.home.EquipmentActivity
import com.casic.xz.meterage.view.home.StandardDeviceActivity
import com.casic.xz.meterage.view.notice.NoticeListActivity
@@ -45,7 +46,7 @@
// "委托需求" -> requireContext().navigatePageTo()
// "访客" -> requireContext().navigatePageTo()
// "标准规范" -> requireContext().navigatePageTo()
-// "能力列表" -> requireContext().navigatePageTo()
+ "能力列表" -> requireContext().navigatePageTo()
// "计量培训" -> requireContext().navigatePageTo()
// "合同发票" -> requireContext().navigatePageTo()
// "业务统计" -> requireContext().navigatePageTo()
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 6c4c80c..cdc9762 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,6 +5,7 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.home.CapabilityActivity
import com.casic.xz.meterage.view.home.EquipmentActivity
import com.casic.xz.meterage.view.home.StandardDeviceActivity
import com.casic.xz.meterage.view.notice.NoticeListActivity
@@ -45,7 +46,7 @@
// "委托需求" -> requireContext().navigatePageTo()
// "访客" -> requireContext().navigatePageTo()
// "标准规范" -> requireContext().navigatePageTo()
-// "能力列表" -> requireContext().navigatePageTo()
+ "能力列表" -> requireContext().navigatePageTo()
// "计量培训" -> requireContext().navigatePageTo()
// "合同发票" -> requireContext().navigatePageTo()
// "业务统计" -> requireContext().navigatePageTo()
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
new file mode 100644
index 0000000..32ecaf1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
@@ -0,0 +1,215 @@
+package com.casic.xz.meterage.model;
+
+public class CapabilityDetailModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public static class DataModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private int isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public int getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(int isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 6c4c80c..cdc9762 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,6 +5,7 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.home.CapabilityActivity
import com.casic.xz.meterage.view.home.EquipmentActivity
import com.casic.xz.meterage.view.home.StandardDeviceActivity
import com.casic.xz.meterage.view.notice.NoticeListActivity
@@ -45,7 +46,7 @@
// "委托需求" -> requireContext().navigatePageTo()
// "访客" -> requireContext().navigatePageTo()
// "标准规范" -> requireContext().navigatePageTo()
-// "能力列表" -> requireContext().navigatePageTo()
+ "能力列表" -> requireContext().navigatePageTo()
// "计量培训" -> requireContext().navigatePageTo()
// "合同发票" -> requireContext().navigatePageTo()
// "业务统计" -> requireContext().navigatePageTo()
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
new file mode 100644
index 0000000..32ecaf1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
@@ -0,0 +1,215 @@
+package com.casic.xz.meterage.model;
+
+public class CapabilityDetailModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public static class DataModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private int isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public int getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(int isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
new file mode 100644
index 0000000..ee308ad
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
@@ -0,0 +1,311 @@
+package com.casic.xz.meterage.model;
+
+import java.util.List;
+
+public class CapabilityListModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ //TODO orders字段后期需要调整
+ public static class DataModel {
+ private String countId;
+ private String current;
+ private String maxLimit;
+ private boolean optimizeCountSql;
+ private List> orders;
+ private String pages;
+ private List records;
+ private boolean searchCount;
+ private String size;
+ private String total;
+
+ public String getCountId() {
+ return countId;
+ }
+
+ public void setCountId(String countId) {
+ this.countId = countId;
+ }
+
+ public String getCurrent() {
+ return current;
+ }
+
+ public void setCurrent(String current) {
+ this.current = current;
+ }
+
+ public String getMaxLimit() {
+ return maxLimit;
+ }
+
+ public void setMaxLimit(String maxLimit) {
+ this.maxLimit = maxLimit;
+ }
+
+ public boolean isOptimizeCountSql() {
+ return optimizeCountSql;
+ }
+
+ public void setOptimizeCountSql(boolean optimizeCountSql) {
+ this.optimizeCountSql = optimizeCountSql;
+ }
+
+ public List> getOrders() {
+ return orders;
+ }
+
+ public void setOrders(List> orders) {
+ this.orders = orders;
+ }
+
+ public String getPages() {
+ return pages;
+ }
+
+ public void setPages(String pages) {
+ this.pages = pages;
+ }
+
+ public List getRecords() {
+ return records;
+ }
+
+ public void setRecords(List records) {
+ this.records = records;
+ }
+
+ public boolean isSearchCount() {
+ return searchCount;
+ }
+
+ public void setSearchCount(boolean searchCount) {
+ this.searchCount = searchCount;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public String getTotal() {
+ return total;
+ }
+
+ public void setTotal(String total) {
+ this.total = total;
+ }
+
+ public static class RecordsModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private String isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(String isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 6c4c80c..cdc9762 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,6 +5,7 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.home.CapabilityActivity
import com.casic.xz.meterage.view.home.EquipmentActivity
import com.casic.xz.meterage.view.home.StandardDeviceActivity
import com.casic.xz.meterage.view.notice.NoticeListActivity
@@ -45,7 +46,7 @@
// "委托需求" -> requireContext().navigatePageTo()
// "访客" -> requireContext().navigatePageTo()
// "标准规范" -> requireContext().navigatePageTo()
-// "能力列表" -> requireContext().navigatePageTo()
+ "能力列表" -> requireContext().navigatePageTo()
// "计量培训" -> requireContext().navigatePageTo()
// "合同发票" -> requireContext().navigatePageTo()
// "业务统计" -> requireContext().navigatePageTo()
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
new file mode 100644
index 0000000..32ecaf1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
@@ -0,0 +1,215 @@
+package com.casic.xz.meterage.model;
+
+public class CapabilityDetailModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public static class DataModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private int isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public int getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(int isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
new file mode 100644
index 0000000..ee308ad
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
@@ -0,0 +1,311 @@
+package com.casic.xz.meterage.model;
+
+import java.util.List;
+
+public class CapabilityListModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ //TODO orders字段后期需要调整
+ public static class DataModel {
+ private String countId;
+ private String current;
+ private String maxLimit;
+ private boolean optimizeCountSql;
+ private List> orders;
+ private String pages;
+ private List records;
+ private boolean searchCount;
+ private String size;
+ private String total;
+
+ public String getCountId() {
+ return countId;
+ }
+
+ public void setCountId(String countId) {
+ this.countId = countId;
+ }
+
+ public String getCurrent() {
+ return current;
+ }
+
+ public void setCurrent(String current) {
+ this.current = current;
+ }
+
+ public String getMaxLimit() {
+ return maxLimit;
+ }
+
+ public void setMaxLimit(String maxLimit) {
+ this.maxLimit = maxLimit;
+ }
+
+ public boolean isOptimizeCountSql() {
+ return optimizeCountSql;
+ }
+
+ public void setOptimizeCountSql(boolean optimizeCountSql) {
+ this.optimizeCountSql = optimizeCountSql;
+ }
+
+ public List> getOrders() {
+ return orders;
+ }
+
+ public void setOrders(List> orders) {
+ this.orders = orders;
+ }
+
+ public String getPages() {
+ return pages;
+ }
+
+ public void setPages(String pages) {
+ this.pages = pages;
+ }
+
+ public List getRecords() {
+ return records;
+ }
+
+ public void setRecords(List records) {
+ this.records = records;
+ }
+
+ public boolean isSearchCount() {
+ return searchCount;
+ }
+
+ public void setSearchCount(boolean searchCount) {
+ this.searchCount = searchCount;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public String getTotal() {
+ return total;
+ }
+
+ public void setTotal(String total) {
+ this.total = total;
+ }
+
+ public static class RecordsModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private String isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(String isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3382fae..75f6c2b 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -75,4 +75,24 @@
@Header("token") token: String,
@Body requestBody: RequestBody
): String
+
+ /**
+ * 获取能力列表
+ */
+ @POST("/price/queryPriceList")
+ suspend fun getCapabilityList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
+
+ /**
+ * 获取能力详情
+ */
+ @POST("/price/queryPriceInfo")
+ suspend fun getCapabilityDetail(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 6c4c80c..cdc9762 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,6 +5,7 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.home.CapabilityActivity
import com.casic.xz.meterage.view.home.EquipmentActivity
import com.casic.xz.meterage.view.home.StandardDeviceActivity
import com.casic.xz.meterage.view.notice.NoticeListActivity
@@ -45,7 +46,7 @@
// "委托需求" -> requireContext().navigatePageTo()
// "访客" -> requireContext().navigatePageTo()
// "标准规范" -> requireContext().navigatePageTo()
-// "能力列表" -> requireContext().navigatePageTo()
+ "能力列表" -> requireContext().navigatePageTo()
// "计量培训" -> requireContext().navigatePageTo()
// "合同发票" -> requireContext().navigatePageTo()
// "业务统计" -> requireContext().navigatePageTo()
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
new file mode 100644
index 0000000..32ecaf1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
@@ -0,0 +1,215 @@
+package com.casic.xz.meterage.model;
+
+public class CapabilityDetailModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public static class DataModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private int isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public int getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(int isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
new file mode 100644
index 0000000..ee308ad
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
@@ -0,0 +1,311 @@
+package com.casic.xz.meterage.model;
+
+import java.util.List;
+
+public class CapabilityListModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ //TODO orders字段后期需要调整
+ public static class DataModel {
+ private String countId;
+ private String current;
+ private String maxLimit;
+ private boolean optimizeCountSql;
+ private List> orders;
+ private String pages;
+ private List records;
+ private boolean searchCount;
+ private String size;
+ private String total;
+
+ public String getCountId() {
+ return countId;
+ }
+
+ public void setCountId(String countId) {
+ this.countId = countId;
+ }
+
+ public String getCurrent() {
+ return current;
+ }
+
+ public void setCurrent(String current) {
+ this.current = current;
+ }
+
+ public String getMaxLimit() {
+ return maxLimit;
+ }
+
+ public void setMaxLimit(String maxLimit) {
+ this.maxLimit = maxLimit;
+ }
+
+ public boolean isOptimizeCountSql() {
+ return optimizeCountSql;
+ }
+
+ public void setOptimizeCountSql(boolean optimizeCountSql) {
+ this.optimizeCountSql = optimizeCountSql;
+ }
+
+ public List> getOrders() {
+ return orders;
+ }
+
+ public void setOrders(List> orders) {
+ this.orders = orders;
+ }
+
+ public String getPages() {
+ return pages;
+ }
+
+ public void setPages(String pages) {
+ this.pages = pages;
+ }
+
+ public List getRecords() {
+ return records;
+ }
+
+ public void setRecords(List records) {
+ this.records = records;
+ }
+
+ public boolean isSearchCount() {
+ return searchCount;
+ }
+
+ public void setSearchCount(boolean searchCount) {
+ this.searchCount = searchCount;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public String getTotal() {
+ return total;
+ }
+
+ public void setTotal(String total) {
+ this.total = total;
+ }
+
+ public static class RecordsModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private String isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(String isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3382fae..75f6c2b 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -75,4 +75,24 @@
@Header("token") token: String,
@Body requestBody: RequestBody
): String
+
+ /**
+ * 获取能力列表
+ */
+ @POST("/price/queryPriceList")
+ suspend fun getCapabilityList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
+
+ /**
+ * 获取能力详情
+ */
+ @POST("/price/queryPriceInfo")
+ suspend fun getCapabilityDetail(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 1af43c3..27e91ca 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -173,7 +173,12 @@
val offsetMap = HashMap()
offsetMap["offset"] = offset
- return api.getStandardDeviceList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ return api.getStandardDeviceList(
+ AuthenticationHelper.token!!,
+ requestBody,
+ limitMap,
+ offsetMap
+ )
}
/**
@@ -187,4 +192,45 @@
)
return api.getStandardDeviceDetail(AuthenticationHelper.token!!, requestBody)
}
+
+ /**
+ * 获取能力列表
+ */
+ suspend fun getCapabilityList(
+ checkType: String,
+ priceItem: String,
+ priceName: String,
+ priceNo: String,
+ priceType: String,
+ offset: Int
+ ): String {
+ val paramObject = JSONObject()
+ paramObject.put("checkType", checkType)
+ paramObject.put("priceItem", priceItem)
+ paramObject.put("priceName", priceName)
+ paramObject.put("priceNo", priceNo)
+ paramObject.put("priceType", priceType)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getCapabilityList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ }
+
+ /**
+ * 获取能力详情
+ */
+ suspend fun getCapabilityDetail(id: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("id", id)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.getCapabilityDetail(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 6c4c80c..cdc9762 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,6 +5,7 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.home.CapabilityActivity
import com.casic.xz.meterage.view.home.EquipmentActivity
import com.casic.xz.meterage.view.home.StandardDeviceActivity
import com.casic.xz.meterage.view.notice.NoticeListActivity
@@ -45,7 +46,7 @@
// "委托需求" -> requireContext().navigatePageTo()
// "访客" -> requireContext().navigatePageTo()
// "标准规范" -> requireContext().navigatePageTo()
-// "能力列表" -> requireContext().navigatePageTo()
+ "能力列表" -> requireContext().navigatePageTo()
// "计量培训" -> requireContext().navigatePageTo()
// "合同发票" -> requireContext().navigatePageTo()
// "业务统计" -> requireContext().navigatePageTo()
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
new file mode 100644
index 0000000..32ecaf1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
@@ -0,0 +1,215 @@
+package com.casic.xz.meterage.model;
+
+public class CapabilityDetailModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public static class DataModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private int isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public int getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(int isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
new file mode 100644
index 0000000..ee308ad
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
@@ -0,0 +1,311 @@
+package com.casic.xz.meterage.model;
+
+import java.util.List;
+
+public class CapabilityListModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ //TODO orders字段后期需要调整
+ public static class DataModel {
+ private String countId;
+ private String current;
+ private String maxLimit;
+ private boolean optimizeCountSql;
+ private List> orders;
+ private String pages;
+ private List records;
+ private boolean searchCount;
+ private String size;
+ private String total;
+
+ public String getCountId() {
+ return countId;
+ }
+
+ public void setCountId(String countId) {
+ this.countId = countId;
+ }
+
+ public String getCurrent() {
+ return current;
+ }
+
+ public void setCurrent(String current) {
+ this.current = current;
+ }
+
+ public String getMaxLimit() {
+ return maxLimit;
+ }
+
+ public void setMaxLimit(String maxLimit) {
+ this.maxLimit = maxLimit;
+ }
+
+ public boolean isOptimizeCountSql() {
+ return optimizeCountSql;
+ }
+
+ public void setOptimizeCountSql(boolean optimizeCountSql) {
+ this.optimizeCountSql = optimizeCountSql;
+ }
+
+ public List> getOrders() {
+ return orders;
+ }
+
+ public void setOrders(List> orders) {
+ this.orders = orders;
+ }
+
+ public String getPages() {
+ return pages;
+ }
+
+ public void setPages(String pages) {
+ this.pages = pages;
+ }
+
+ public List getRecords() {
+ return records;
+ }
+
+ public void setRecords(List records) {
+ this.records = records;
+ }
+
+ public boolean isSearchCount() {
+ return searchCount;
+ }
+
+ public void setSearchCount(boolean searchCount) {
+ this.searchCount = searchCount;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public String getTotal() {
+ return total;
+ }
+
+ public void setTotal(String total) {
+ this.total = total;
+ }
+
+ public static class RecordsModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private String isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(String isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3382fae..75f6c2b 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -75,4 +75,24 @@
@Header("token") token: String,
@Body requestBody: RequestBody
): String
+
+ /**
+ * 获取能力列表
+ */
+ @POST("/price/queryPriceList")
+ suspend fun getCapabilityList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
+
+ /**
+ * 获取能力详情
+ */
+ @POST("/price/queryPriceInfo")
+ suspend fun getCapabilityDetail(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 1af43c3..27e91ca 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -173,7 +173,12 @@
val offsetMap = HashMap()
offsetMap["offset"] = offset
- return api.getStandardDeviceList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ return api.getStandardDeviceList(
+ AuthenticationHelper.token!!,
+ requestBody,
+ limitMap,
+ offsetMap
+ )
}
/**
@@ -187,4 +192,45 @@
)
return api.getStandardDeviceDetail(AuthenticationHelper.token!!, requestBody)
}
+
+ /**
+ * 获取能力列表
+ */
+ suspend fun getCapabilityList(
+ checkType: String,
+ priceItem: String,
+ priceName: String,
+ priceNo: String,
+ priceType: String,
+ offset: Int
+ ): String {
+ val paramObject = JSONObject()
+ paramObject.put("checkType", checkType)
+ paramObject.put("priceItem", priceItem)
+ paramObject.put("priceName", priceName)
+ paramObject.put("priceNo", priceNo)
+ paramObject.put("priceType", priceType)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getCapabilityList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ }
+
+ /**
+ * 获取能力详情
+ */
+ suspend fun getCapabilityDetail(id: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("id", id)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.getCapabilityDetail(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
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
new file mode 100644
index 0000000..7b9c9ec
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt
@@ -0,0 +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.CapabilityListAdapter
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.view.search.SearchCapabilityActivity
+import com.casic.xz.meterage.vm.CapabilityViewModel
+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.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class CapabilityActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var capabilityViewModel: CapabilityViewModel
+ private lateinit var capabilityListAdapter: CapabilityListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.capabilityResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.records!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ capabilityLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ capabilityLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023020902)
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ navigatePageTo()
+ }
+
+ capabilityLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ capabilityLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getCapabilityList()
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_capability
+
+ override fun observeRequestState() {
+ capabilityViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ private fun getCapabilityList() {
+ capabilityViewModel.getCapabilityList(
+ "",
+ "",
+ "",
+ "",
+ "",
+ pageIndex
+ )
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023020902 -> {
+ if (isRefresh || isLoadMore) {
+ capabilityListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("无数据") {
+ pageIndex = 1
+ getCapabilityList()
+ }
+ } else {
+ emptyView!!.hide()
+ capabilityListAdapter = CapabilityListAdapter(this, dataBeans)
+ capabilityRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ capabilityRecyclerView.adapter = capabilityListAdapter
+ capabilityListAdapter.setOnItemClickListener(object :
+ CapabilityListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ navigatePageTo(rowsModel.id)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "能力列表"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 6c4c80c..cdc9762 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,6 +5,7 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.home.CapabilityActivity
import com.casic.xz.meterage.view.home.EquipmentActivity
import com.casic.xz.meterage.view.home.StandardDeviceActivity
import com.casic.xz.meterage.view.notice.NoticeListActivity
@@ -45,7 +46,7 @@
// "委托需求" -> requireContext().navigatePageTo()
// "访客" -> requireContext().navigatePageTo()
// "标准规范" -> requireContext().navigatePageTo()
-// "能力列表" -> requireContext().navigatePageTo()
+ "能力列表" -> requireContext().navigatePageTo()
// "计量培训" -> requireContext().navigatePageTo()
// "合同发票" -> requireContext().navigatePageTo()
// "业务统计" -> requireContext().navigatePageTo()
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
new file mode 100644
index 0000000..32ecaf1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
@@ -0,0 +1,215 @@
+package com.casic.xz.meterage.model;
+
+public class CapabilityDetailModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public static class DataModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private int isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public int getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(int isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
new file mode 100644
index 0000000..ee308ad
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
@@ -0,0 +1,311 @@
+package com.casic.xz.meterage.model;
+
+import java.util.List;
+
+public class CapabilityListModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ //TODO orders字段后期需要调整
+ public static class DataModel {
+ private String countId;
+ private String current;
+ private String maxLimit;
+ private boolean optimizeCountSql;
+ private List> orders;
+ private String pages;
+ private List records;
+ private boolean searchCount;
+ private String size;
+ private String total;
+
+ public String getCountId() {
+ return countId;
+ }
+
+ public void setCountId(String countId) {
+ this.countId = countId;
+ }
+
+ public String getCurrent() {
+ return current;
+ }
+
+ public void setCurrent(String current) {
+ this.current = current;
+ }
+
+ public String getMaxLimit() {
+ return maxLimit;
+ }
+
+ public void setMaxLimit(String maxLimit) {
+ this.maxLimit = maxLimit;
+ }
+
+ public boolean isOptimizeCountSql() {
+ return optimizeCountSql;
+ }
+
+ public void setOptimizeCountSql(boolean optimizeCountSql) {
+ this.optimizeCountSql = optimizeCountSql;
+ }
+
+ public List> getOrders() {
+ return orders;
+ }
+
+ public void setOrders(List> orders) {
+ this.orders = orders;
+ }
+
+ public String getPages() {
+ return pages;
+ }
+
+ public void setPages(String pages) {
+ this.pages = pages;
+ }
+
+ public List getRecords() {
+ return records;
+ }
+
+ public void setRecords(List records) {
+ this.records = records;
+ }
+
+ public boolean isSearchCount() {
+ return searchCount;
+ }
+
+ public void setSearchCount(boolean searchCount) {
+ this.searchCount = searchCount;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public String getTotal() {
+ return total;
+ }
+
+ public void setTotal(String total) {
+ this.total = total;
+ }
+
+ public static class RecordsModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private String isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(String isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3382fae..75f6c2b 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -75,4 +75,24 @@
@Header("token") token: String,
@Body requestBody: RequestBody
): String
+
+ /**
+ * 获取能力列表
+ */
+ @POST("/price/queryPriceList")
+ suspend fun getCapabilityList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
+
+ /**
+ * 获取能力详情
+ */
+ @POST("/price/queryPriceInfo")
+ suspend fun getCapabilityDetail(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 1af43c3..27e91ca 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -173,7 +173,12 @@
val offsetMap = HashMap()
offsetMap["offset"] = offset
- return api.getStandardDeviceList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ return api.getStandardDeviceList(
+ AuthenticationHelper.token!!,
+ requestBody,
+ limitMap,
+ offsetMap
+ )
}
/**
@@ -187,4 +192,45 @@
)
return api.getStandardDeviceDetail(AuthenticationHelper.token!!, requestBody)
}
+
+ /**
+ * 获取能力列表
+ */
+ suspend fun getCapabilityList(
+ checkType: String,
+ priceItem: String,
+ priceName: String,
+ priceNo: String,
+ priceType: String,
+ offset: Int
+ ): String {
+ val paramObject = JSONObject()
+ paramObject.put("checkType", checkType)
+ paramObject.put("priceItem", priceItem)
+ paramObject.put("priceName", priceName)
+ paramObject.put("priceNo", priceNo)
+ paramObject.put("priceType", priceType)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getCapabilityList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ }
+
+ /**
+ * 获取能力详情
+ */
+ suspend fun getCapabilityDetail(id: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("id", id)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.getCapabilityDetail(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
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
new file mode 100644
index 0000000..7b9c9ec
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt
@@ -0,0 +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.CapabilityListAdapter
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.view.search.SearchCapabilityActivity
+import com.casic.xz.meterage.vm.CapabilityViewModel
+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.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class CapabilityActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var capabilityViewModel: CapabilityViewModel
+ private lateinit var capabilityListAdapter: CapabilityListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.capabilityResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.records!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ capabilityLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ capabilityLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023020902)
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ navigatePageTo()
+ }
+
+ capabilityLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ capabilityLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getCapabilityList()
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_capability
+
+ override fun observeRequestState() {
+ capabilityViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ private fun getCapabilityList() {
+ capabilityViewModel.getCapabilityList(
+ "",
+ "",
+ "",
+ "",
+ "",
+ pageIndex
+ )
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023020902 -> {
+ if (isRefresh || isLoadMore) {
+ capabilityListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("无数据") {
+ pageIndex = 1
+ getCapabilityList()
+ }
+ } else {
+ emptyView!!.hide()
+ capabilityListAdapter = CapabilityListAdapter(this, dataBeans)
+ capabilityRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ capabilityRecyclerView.adapter = capabilityListAdapter
+ capabilityListAdapter.setOnItemClickListener(object :
+ CapabilityListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ navigatePageTo(rowsModel.id)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "能力列表"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt
new file mode 100644
index 0000000..ddb486c
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt
@@ -0,0 +1,61 @@
+package com.casic.xz.meterage.view.home
+
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.vm.CapabilityViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_capability_detail.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class CapabilityDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var capabilityViewModel: CapabilityViewModel
+
+ override fun initData() {
+ val id = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.getCapabilityDetail(id)
+ capabilityViewModel.capabilityDetailResult.observe(this, {
+ if (it.code == 200) {
+ val data = it.data!!
+
+ priceCodeView.text = data.priceNo
+ checkTypeView.text = data.checkType
+ createView.text = data.createTime
+ categoryView.text = data.categoryName
+ projectView.text = data.priceItem
+ basisStandardView.text = data.priceStandard
+ limitRangeView.text = data.priceLimit
+ explainView.text = data.priceDescription
+ remarkView.text = data.remark
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_capability_detail
+
+ override fun observeRequestState() {
+ capabilityViewModel.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 = "能力列表"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 6c4c80c..cdc9762 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,6 +5,7 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.home.CapabilityActivity
import com.casic.xz.meterage.view.home.EquipmentActivity
import com.casic.xz.meterage.view.home.StandardDeviceActivity
import com.casic.xz.meterage.view.notice.NoticeListActivity
@@ -45,7 +46,7 @@
// "委托需求" -> requireContext().navigatePageTo()
// "访客" -> requireContext().navigatePageTo()
// "标准规范" -> requireContext().navigatePageTo()
-// "能力列表" -> requireContext().navigatePageTo()
+ "能力列表" -> requireContext().navigatePageTo()
// "计量培训" -> requireContext().navigatePageTo()
// "合同发票" -> requireContext().navigatePageTo()
// "业务统计" -> requireContext().navigatePageTo()
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
new file mode 100644
index 0000000..32ecaf1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
@@ -0,0 +1,215 @@
+package com.casic.xz.meterage.model;
+
+public class CapabilityDetailModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public static class DataModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private int isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public int getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(int isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
new file mode 100644
index 0000000..ee308ad
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
@@ -0,0 +1,311 @@
+package com.casic.xz.meterage.model;
+
+import java.util.List;
+
+public class CapabilityListModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ //TODO orders字段后期需要调整
+ public static class DataModel {
+ private String countId;
+ private String current;
+ private String maxLimit;
+ private boolean optimizeCountSql;
+ private List> orders;
+ private String pages;
+ private List records;
+ private boolean searchCount;
+ private String size;
+ private String total;
+
+ public String getCountId() {
+ return countId;
+ }
+
+ public void setCountId(String countId) {
+ this.countId = countId;
+ }
+
+ public String getCurrent() {
+ return current;
+ }
+
+ public void setCurrent(String current) {
+ this.current = current;
+ }
+
+ public String getMaxLimit() {
+ return maxLimit;
+ }
+
+ public void setMaxLimit(String maxLimit) {
+ this.maxLimit = maxLimit;
+ }
+
+ public boolean isOptimizeCountSql() {
+ return optimizeCountSql;
+ }
+
+ public void setOptimizeCountSql(boolean optimizeCountSql) {
+ this.optimizeCountSql = optimizeCountSql;
+ }
+
+ public List> getOrders() {
+ return orders;
+ }
+
+ public void setOrders(List> orders) {
+ this.orders = orders;
+ }
+
+ public String getPages() {
+ return pages;
+ }
+
+ public void setPages(String pages) {
+ this.pages = pages;
+ }
+
+ public List getRecords() {
+ return records;
+ }
+
+ public void setRecords(List records) {
+ this.records = records;
+ }
+
+ public boolean isSearchCount() {
+ return searchCount;
+ }
+
+ public void setSearchCount(boolean searchCount) {
+ this.searchCount = searchCount;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public String getTotal() {
+ return total;
+ }
+
+ public void setTotal(String total) {
+ this.total = total;
+ }
+
+ public static class RecordsModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private String isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(String isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3382fae..75f6c2b 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -75,4 +75,24 @@
@Header("token") token: String,
@Body requestBody: RequestBody
): String
+
+ /**
+ * 获取能力列表
+ */
+ @POST("/price/queryPriceList")
+ suspend fun getCapabilityList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
+
+ /**
+ * 获取能力详情
+ */
+ @POST("/price/queryPriceInfo")
+ suspend fun getCapabilityDetail(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 1af43c3..27e91ca 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -173,7 +173,12 @@
val offsetMap = HashMap()
offsetMap["offset"] = offset
- return api.getStandardDeviceList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ return api.getStandardDeviceList(
+ AuthenticationHelper.token!!,
+ requestBody,
+ limitMap,
+ offsetMap
+ )
}
/**
@@ -187,4 +192,45 @@
)
return api.getStandardDeviceDetail(AuthenticationHelper.token!!, requestBody)
}
+
+ /**
+ * 获取能力列表
+ */
+ suspend fun getCapabilityList(
+ checkType: String,
+ priceItem: String,
+ priceName: String,
+ priceNo: String,
+ priceType: String,
+ offset: Int
+ ): String {
+ val paramObject = JSONObject()
+ paramObject.put("checkType", checkType)
+ paramObject.put("priceItem", priceItem)
+ paramObject.put("priceName", priceName)
+ paramObject.put("priceNo", priceNo)
+ paramObject.put("priceType", priceType)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getCapabilityList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ }
+
+ /**
+ * 获取能力详情
+ */
+ suspend fun getCapabilityDetail(id: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("id", id)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.getCapabilityDetail(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
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
new file mode 100644
index 0000000..7b9c9ec
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt
@@ -0,0 +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.CapabilityListAdapter
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.view.search.SearchCapabilityActivity
+import com.casic.xz.meterage.vm.CapabilityViewModel
+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.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class CapabilityActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var capabilityViewModel: CapabilityViewModel
+ private lateinit var capabilityListAdapter: CapabilityListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.capabilityResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.records!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ capabilityLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ capabilityLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023020902)
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ navigatePageTo()
+ }
+
+ capabilityLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ capabilityLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getCapabilityList()
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_capability
+
+ override fun observeRequestState() {
+ capabilityViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ private fun getCapabilityList() {
+ capabilityViewModel.getCapabilityList(
+ "",
+ "",
+ "",
+ "",
+ "",
+ pageIndex
+ )
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023020902 -> {
+ if (isRefresh || isLoadMore) {
+ capabilityListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("无数据") {
+ pageIndex = 1
+ getCapabilityList()
+ }
+ } else {
+ emptyView!!.hide()
+ capabilityListAdapter = CapabilityListAdapter(this, dataBeans)
+ capabilityRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ capabilityRecyclerView.adapter = capabilityListAdapter
+ capabilityListAdapter.setOnItemClickListener(object :
+ CapabilityListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ navigatePageTo(rowsModel.id)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "能力列表"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt
new file mode 100644
index 0000000..ddb486c
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt
@@ -0,0 +1,61 @@
+package com.casic.xz.meterage.view.home
+
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.vm.CapabilityViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_capability_detail.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class CapabilityDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var capabilityViewModel: CapabilityViewModel
+
+ override fun initData() {
+ val id = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.getCapabilityDetail(id)
+ capabilityViewModel.capabilityDetailResult.observe(this, {
+ if (it.code == 200) {
+ val data = it.data!!
+
+ priceCodeView.text = data.priceNo
+ checkTypeView.text = data.checkType
+ createView.text = data.createTime
+ categoryView.text = data.categoryName
+ projectView.text = data.priceItem
+ basisStandardView.text = data.priceStandard
+ limitRangeView.text = data.priceLimit
+ explainView.text = data.priceDescription
+ remarkView.text = data.remark
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_capability_detail
+
+ override fun observeRequestState() {
+ capabilityViewModel.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 = "能力列表"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt
new file mode 100644
index 0000000..9242993
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt
@@ -0,0 +1,41 @@
+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_capability.*
+
+/**
+ * 搜索能力
+ * */
+class SearchCapabilityActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_capability
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+
+ 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 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 6c4c80c..cdc9762 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,6 +5,7 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.home.CapabilityActivity
import com.casic.xz.meterage.view.home.EquipmentActivity
import com.casic.xz.meterage.view.home.StandardDeviceActivity
import com.casic.xz.meterage.view.notice.NoticeListActivity
@@ -45,7 +46,7 @@
// "委托需求" -> requireContext().navigatePageTo()
// "访客" -> requireContext().navigatePageTo()
// "标准规范" -> requireContext().navigatePageTo()
-// "能力列表" -> requireContext().navigatePageTo()
+ "能力列表" -> requireContext().navigatePageTo()
// "计量培训" -> requireContext().navigatePageTo()
// "合同发票" -> requireContext().navigatePageTo()
// "业务统计" -> requireContext().navigatePageTo()
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
new file mode 100644
index 0000000..32ecaf1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
@@ -0,0 +1,215 @@
+package com.casic.xz.meterage.model;
+
+public class CapabilityDetailModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public static class DataModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private int isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public int getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(int isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
new file mode 100644
index 0000000..ee308ad
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
@@ -0,0 +1,311 @@
+package com.casic.xz.meterage.model;
+
+import java.util.List;
+
+public class CapabilityListModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ //TODO orders字段后期需要调整
+ public static class DataModel {
+ private String countId;
+ private String current;
+ private String maxLimit;
+ private boolean optimizeCountSql;
+ private List> orders;
+ private String pages;
+ private List records;
+ private boolean searchCount;
+ private String size;
+ private String total;
+
+ public String getCountId() {
+ return countId;
+ }
+
+ public void setCountId(String countId) {
+ this.countId = countId;
+ }
+
+ public String getCurrent() {
+ return current;
+ }
+
+ public void setCurrent(String current) {
+ this.current = current;
+ }
+
+ public String getMaxLimit() {
+ return maxLimit;
+ }
+
+ public void setMaxLimit(String maxLimit) {
+ this.maxLimit = maxLimit;
+ }
+
+ public boolean isOptimizeCountSql() {
+ return optimizeCountSql;
+ }
+
+ public void setOptimizeCountSql(boolean optimizeCountSql) {
+ this.optimizeCountSql = optimizeCountSql;
+ }
+
+ public List> getOrders() {
+ return orders;
+ }
+
+ public void setOrders(List> orders) {
+ this.orders = orders;
+ }
+
+ public String getPages() {
+ return pages;
+ }
+
+ public void setPages(String pages) {
+ this.pages = pages;
+ }
+
+ public List getRecords() {
+ return records;
+ }
+
+ public void setRecords(List records) {
+ this.records = records;
+ }
+
+ public boolean isSearchCount() {
+ return searchCount;
+ }
+
+ public void setSearchCount(boolean searchCount) {
+ this.searchCount = searchCount;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public String getTotal() {
+ return total;
+ }
+
+ public void setTotal(String total) {
+ this.total = total;
+ }
+
+ public static class RecordsModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private String isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(String isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3382fae..75f6c2b 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -75,4 +75,24 @@
@Header("token") token: String,
@Body requestBody: RequestBody
): String
+
+ /**
+ * 获取能力列表
+ */
+ @POST("/price/queryPriceList")
+ suspend fun getCapabilityList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
+
+ /**
+ * 获取能力详情
+ */
+ @POST("/price/queryPriceInfo")
+ suspend fun getCapabilityDetail(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 1af43c3..27e91ca 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -173,7 +173,12 @@
val offsetMap = HashMap()
offsetMap["offset"] = offset
- return api.getStandardDeviceList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ return api.getStandardDeviceList(
+ AuthenticationHelper.token!!,
+ requestBody,
+ limitMap,
+ offsetMap
+ )
}
/**
@@ -187,4 +192,45 @@
)
return api.getStandardDeviceDetail(AuthenticationHelper.token!!, requestBody)
}
+
+ /**
+ * 获取能力列表
+ */
+ suspend fun getCapabilityList(
+ checkType: String,
+ priceItem: String,
+ priceName: String,
+ priceNo: String,
+ priceType: String,
+ offset: Int
+ ): String {
+ val paramObject = JSONObject()
+ paramObject.put("checkType", checkType)
+ paramObject.put("priceItem", priceItem)
+ paramObject.put("priceName", priceName)
+ paramObject.put("priceNo", priceNo)
+ paramObject.put("priceType", priceType)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getCapabilityList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ }
+
+ /**
+ * 获取能力详情
+ */
+ suspend fun getCapabilityDetail(id: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("id", id)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.getCapabilityDetail(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
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
new file mode 100644
index 0000000..7b9c9ec
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt
@@ -0,0 +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.CapabilityListAdapter
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.view.search.SearchCapabilityActivity
+import com.casic.xz.meterage.vm.CapabilityViewModel
+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.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class CapabilityActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var capabilityViewModel: CapabilityViewModel
+ private lateinit var capabilityListAdapter: CapabilityListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.capabilityResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.records!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ capabilityLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ capabilityLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023020902)
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ navigatePageTo()
+ }
+
+ capabilityLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ capabilityLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getCapabilityList()
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_capability
+
+ override fun observeRequestState() {
+ capabilityViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ private fun getCapabilityList() {
+ capabilityViewModel.getCapabilityList(
+ "",
+ "",
+ "",
+ "",
+ "",
+ pageIndex
+ )
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023020902 -> {
+ if (isRefresh || isLoadMore) {
+ capabilityListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("无数据") {
+ pageIndex = 1
+ getCapabilityList()
+ }
+ } else {
+ emptyView!!.hide()
+ capabilityListAdapter = CapabilityListAdapter(this, dataBeans)
+ capabilityRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ capabilityRecyclerView.adapter = capabilityListAdapter
+ capabilityListAdapter.setOnItemClickListener(object :
+ CapabilityListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ navigatePageTo(rowsModel.id)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "能力列表"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt
new file mode 100644
index 0000000..ddb486c
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt
@@ -0,0 +1,61 @@
+package com.casic.xz.meterage.view.home
+
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.vm.CapabilityViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_capability_detail.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class CapabilityDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var capabilityViewModel: CapabilityViewModel
+
+ override fun initData() {
+ val id = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.getCapabilityDetail(id)
+ capabilityViewModel.capabilityDetailResult.observe(this, {
+ if (it.code == 200) {
+ val data = it.data!!
+
+ priceCodeView.text = data.priceNo
+ checkTypeView.text = data.checkType
+ createView.text = data.createTime
+ categoryView.text = data.categoryName
+ projectView.text = data.priceItem
+ basisStandardView.text = data.priceStandard
+ limitRangeView.text = data.priceLimit
+ explainView.text = data.priceDescription
+ remarkView.text = data.remark
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_capability_detail
+
+ override fun observeRequestState() {
+ capabilityViewModel.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 = "能力列表"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt
new file mode 100644
index 0000000..9242993
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt
@@ -0,0 +1,41 @@
+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_capability.*
+
+/**
+ * 搜索能力
+ * */
+class SearchCapabilityActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_capability
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+
+ 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/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt
new file mode 100644
index 0000000..e8a9fe5
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt
@@ -0,0 +1,151 @@
+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.CapabilityListAdapter
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.view.home.CapabilityDetailActivity
+import com.casic.xz.meterage.vm.CapabilityViewModel
+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_capability_reasult.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchCapabilityResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var capabilityViewModel: CapabilityViewModel
+ private lateinit var capabilityListAdapter: CapabilityListAdapter
+ 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)
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.capabilityResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.records!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ capabilityLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ capabilityLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023020903)
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ capabilityLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ capabilityLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getCapabilityList()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ private fun getCapabilityList() {
+ capabilityViewModel.getCapabilityList(
+ "",
+ "",
+ param,
+ "",
+ "",
+ pageIndex
+ )
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult
+
+ override fun observeRequestState() {
+ capabilityViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023020903 -> {
+ if (isRefresh || isLoadMore) {
+ capabilityListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("无数据") {
+ pageIndex = 1
+ getCapabilityList()
+ }
+ } else {
+ emptyView!!.hide()
+ capabilityListAdapter = CapabilityListAdapter(this, dataBeans)
+ capabilityRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ capabilityRecyclerView.adapter = capabilityListAdapter
+ capabilityListAdapter.setOnItemClickListener(object :
+ CapabilityListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ navigatePageTo(rowsModel.id)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 6c4c80c..cdc9762 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,6 +5,7 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.home.CapabilityActivity
import com.casic.xz.meterage.view.home.EquipmentActivity
import com.casic.xz.meterage.view.home.StandardDeviceActivity
import com.casic.xz.meterage.view.notice.NoticeListActivity
@@ -45,7 +46,7 @@
// "委托需求" -> requireContext().navigatePageTo()
// "访客" -> requireContext().navigatePageTo()
// "标准规范" -> requireContext().navigatePageTo()
-// "能力列表" -> requireContext().navigatePageTo()
+ "能力列表" -> requireContext().navigatePageTo()
// "计量培训" -> requireContext().navigatePageTo()
// "合同发票" -> requireContext().navigatePageTo()
// "业务统计" -> requireContext().navigatePageTo()
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
new file mode 100644
index 0000000..32ecaf1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
@@ -0,0 +1,215 @@
+package com.casic.xz.meterage.model;
+
+public class CapabilityDetailModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public static class DataModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private int isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public int getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(int isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
new file mode 100644
index 0000000..ee308ad
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
@@ -0,0 +1,311 @@
+package com.casic.xz.meterage.model;
+
+import java.util.List;
+
+public class CapabilityListModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ //TODO orders字段后期需要调整
+ public static class DataModel {
+ private String countId;
+ private String current;
+ private String maxLimit;
+ private boolean optimizeCountSql;
+ private List> orders;
+ private String pages;
+ private List records;
+ private boolean searchCount;
+ private String size;
+ private String total;
+
+ public String getCountId() {
+ return countId;
+ }
+
+ public void setCountId(String countId) {
+ this.countId = countId;
+ }
+
+ public String getCurrent() {
+ return current;
+ }
+
+ public void setCurrent(String current) {
+ this.current = current;
+ }
+
+ public String getMaxLimit() {
+ return maxLimit;
+ }
+
+ public void setMaxLimit(String maxLimit) {
+ this.maxLimit = maxLimit;
+ }
+
+ public boolean isOptimizeCountSql() {
+ return optimizeCountSql;
+ }
+
+ public void setOptimizeCountSql(boolean optimizeCountSql) {
+ this.optimizeCountSql = optimizeCountSql;
+ }
+
+ public List> getOrders() {
+ return orders;
+ }
+
+ public void setOrders(List> orders) {
+ this.orders = orders;
+ }
+
+ public String getPages() {
+ return pages;
+ }
+
+ public void setPages(String pages) {
+ this.pages = pages;
+ }
+
+ public List getRecords() {
+ return records;
+ }
+
+ public void setRecords(List records) {
+ this.records = records;
+ }
+
+ public boolean isSearchCount() {
+ return searchCount;
+ }
+
+ public void setSearchCount(boolean searchCount) {
+ this.searchCount = searchCount;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public String getTotal() {
+ return total;
+ }
+
+ public void setTotal(String total) {
+ this.total = total;
+ }
+
+ public static class RecordsModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private String isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(String isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3382fae..75f6c2b 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -75,4 +75,24 @@
@Header("token") token: String,
@Body requestBody: RequestBody
): String
+
+ /**
+ * 获取能力列表
+ */
+ @POST("/price/queryPriceList")
+ suspend fun getCapabilityList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
+
+ /**
+ * 获取能力详情
+ */
+ @POST("/price/queryPriceInfo")
+ suspend fun getCapabilityDetail(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 1af43c3..27e91ca 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -173,7 +173,12 @@
val offsetMap = HashMap()
offsetMap["offset"] = offset
- return api.getStandardDeviceList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ return api.getStandardDeviceList(
+ AuthenticationHelper.token!!,
+ requestBody,
+ limitMap,
+ offsetMap
+ )
}
/**
@@ -187,4 +192,45 @@
)
return api.getStandardDeviceDetail(AuthenticationHelper.token!!, requestBody)
}
+
+ /**
+ * 获取能力列表
+ */
+ suspend fun getCapabilityList(
+ checkType: String,
+ priceItem: String,
+ priceName: String,
+ priceNo: String,
+ priceType: String,
+ offset: Int
+ ): String {
+ val paramObject = JSONObject()
+ paramObject.put("checkType", checkType)
+ paramObject.put("priceItem", priceItem)
+ paramObject.put("priceName", priceName)
+ paramObject.put("priceNo", priceNo)
+ paramObject.put("priceType", priceType)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getCapabilityList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ }
+
+ /**
+ * 获取能力详情
+ */
+ suspend fun getCapabilityDetail(id: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("id", id)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.getCapabilityDetail(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
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
new file mode 100644
index 0000000..7b9c9ec
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt
@@ -0,0 +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.CapabilityListAdapter
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.view.search.SearchCapabilityActivity
+import com.casic.xz.meterage.vm.CapabilityViewModel
+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.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class CapabilityActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var capabilityViewModel: CapabilityViewModel
+ private lateinit var capabilityListAdapter: CapabilityListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.capabilityResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.records!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ capabilityLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ capabilityLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023020902)
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ navigatePageTo()
+ }
+
+ capabilityLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ capabilityLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getCapabilityList()
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_capability
+
+ override fun observeRequestState() {
+ capabilityViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ private fun getCapabilityList() {
+ capabilityViewModel.getCapabilityList(
+ "",
+ "",
+ "",
+ "",
+ "",
+ pageIndex
+ )
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023020902 -> {
+ if (isRefresh || isLoadMore) {
+ capabilityListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("无数据") {
+ pageIndex = 1
+ getCapabilityList()
+ }
+ } else {
+ emptyView!!.hide()
+ capabilityListAdapter = CapabilityListAdapter(this, dataBeans)
+ capabilityRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ capabilityRecyclerView.adapter = capabilityListAdapter
+ capabilityListAdapter.setOnItemClickListener(object :
+ CapabilityListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ navigatePageTo(rowsModel.id)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "能力列表"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt
new file mode 100644
index 0000000..ddb486c
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt
@@ -0,0 +1,61 @@
+package com.casic.xz.meterage.view.home
+
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.vm.CapabilityViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_capability_detail.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class CapabilityDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var capabilityViewModel: CapabilityViewModel
+
+ override fun initData() {
+ val id = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.getCapabilityDetail(id)
+ capabilityViewModel.capabilityDetailResult.observe(this, {
+ if (it.code == 200) {
+ val data = it.data!!
+
+ priceCodeView.text = data.priceNo
+ checkTypeView.text = data.checkType
+ createView.text = data.createTime
+ categoryView.text = data.categoryName
+ projectView.text = data.priceItem
+ basisStandardView.text = data.priceStandard
+ limitRangeView.text = data.priceLimit
+ explainView.text = data.priceDescription
+ remarkView.text = data.remark
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_capability_detail
+
+ override fun observeRequestState() {
+ capabilityViewModel.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 = "能力列表"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt
new file mode 100644
index 0000000..9242993
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt
@@ -0,0 +1,41 @@
+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_capability.*
+
+/**
+ * 搜索能力
+ * */
+class SearchCapabilityActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_capability
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+
+ 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/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt
new file mode 100644
index 0000000..e8a9fe5
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt
@@ -0,0 +1,151 @@
+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.CapabilityListAdapter
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.view.home.CapabilityDetailActivity
+import com.casic.xz.meterage.vm.CapabilityViewModel
+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_capability_reasult.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchCapabilityResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var capabilityViewModel: CapabilityViewModel
+ private lateinit var capabilityListAdapter: CapabilityListAdapter
+ 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)
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.capabilityResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.records!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ capabilityLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ capabilityLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023020903)
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ capabilityLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ capabilityLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getCapabilityList()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ private fun getCapabilityList() {
+ capabilityViewModel.getCapabilityList(
+ "",
+ "",
+ param,
+ "",
+ "",
+ pageIndex
+ )
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult
+
+ override fun observeRequestState() {
+ capabilityViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023020903 -> {
+ if (isRefresh || isLoadMore) {
+ capabilityListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("无数据") {
+ pageIndex = 1
+ getCapabilityList()
+ }
+ } else {
+ emptyView!!.hide()
+ capabilityListAdapter = CapabilityListAdapter(this, dataBeans)
+ capabilityRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ capabilityRecyclerView.adapter = capabilityListAdapter
+ capabilityListAdapter.setOnItemClickListener(object :
+ CapabilityListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ navigatePageTo(rowsModel.id)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/CapabilityViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/CapabilityViewModel.kt
new file mode 100644
index 0000000..a398906
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/vm/CapabilityViewModel.kt
@@ -0,0 +1,67 @@
+package com.casic.xz.meterage.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.extensions.separateResponseCode
+import com.casic.xz.meterage.extensions.toErrorMessage
+import com.casic.xz.meterage.model.CapabilityDetailModel
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class CapabilityViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val capabilityResult = MutableLiveData()
+ val capabilityDetailResult = MutableLiveData()
+
+ fun getCapabilityList(
+ checkType: String,
+ priceItem: String,
+ priceName: String,
+ priceNo: String,
+ priceType: String,
+ offset: Int
+ ) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.getCapabilityList(
+ checkType, priceItem, priceName, priceNo, priceType, offset
+ )
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ capabilityResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
+
+ fun getCapabilityDetail(id: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.getCapabilityDetail(id)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ capabilityDetailResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 6c4c80c..cdc9762 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,6 +5,7 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.home.CapabilityActivity
import com.casic.xz.meterage.view.home.EquipmentActivity
import com.casic.xz.meterage.view.home.StandardDeviceActivity
import com.casic.xz.meterage.view.notice.NoticeListActivity
@@ -45,7 +46,7 @@
// "委托需求" -> requireContext().navigatePageTo()
// "访客" -> requireContext().navigatePageTo()
// "标准规范" -> requireContext().navigatePageTo()
-// "能力列表" -> requireContext().navigatePageTo()
+ "能力列表" -> requireContext().navigatePageTo()
// "计量培训" -> requireContext().navigatePageTo()
// "合同发票" -> requireContext().navigatePageTo()
// "业务统计" -> requireContext().navigatePageTo()
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
new file mode 100644
index 0000000..32ecaf1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
@@ -0,0 +1,215 @@
+package com.casic.xz.meterage.model;
+
+public class CapabilityDetailModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public static class DataModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private int isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public int getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(int isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
new file mode 100644
index 0000000..ee308ad
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
@@ -0,0 +1,311 @@
+package com.casic.xz.meterage.model;
+
+import java.util.List;
+
+public class CapabilityListModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ //TODO orders字段后期需要调整
+ public static class DataModel {
+ private String countId;
+ private String current;
+ private String maxLimit;
+ private boolean optimizeCountSql;
+ private List> orders;
+ private String pages;
+ private List records;
+ private boolean searchCount;
+ private String size;
+ private String total;
+
+ public String getCountId() {
+ return countId;
+ }
+
+ public void setCountId(String countId) {
+ this.countId = countId;
+ }
+
+ public String getCurrent() {
+ return current;
+ }
+
+ public void setCurrent(String current) {
+ this.current = current;
+ }
+
+ public String getMaxLimit() {
+ return maxLimit;
+ }
+
+ public void setMaxLimit(String maxLimit) {
+ this.maxLimit = maxLimit;
+ }
+
+ public boolean isOptimizeCountSql() {
+ return optimizeCountSql;
+ }
+
+ public void setOptimizeCountSql(boolean optimizeCountSql) {
+ this.optimizeCountSql = optimizeCountSql;
+ }
+
+ public List> getOrders() {
+ return orders;
+ }
+
+ public void setOrders(List> orders) {
+ this.orders = orders;
+ }
+
+ public String getPages() {
+ return pages;
+ }
+
+ public void setPages(String pages) {
+ this.pages = pages;
+ }
+
+ public List getRecords() {
+ return records;
+ }
+
+ public void setRecords(List records) {
+ this.records = records;
+ }
+
+ public boolean isSearchCount() {
+ return searchCount;
+ }
+
+ public void setSearchCount(boolean searchCount) {
+ this.searchCount = searchCount;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public String getTotal() {
+ return total;
+ }
+
+ public void setTotal(String total) {
+ this.total = total;
+ }
+
+ public static class RecordsModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private String isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(String isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3382fae..75f6c2b 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -75,4 +75,24 @@
@Header("token") token: String,
@Body requestBody: RequestBody
): String
+
+ /**
+ * 获取能力列表
+ */
+ @POST("/price/queryPriceList")
+ suspend fun getCapabilityList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
+
+ /**
+ * 获取能力详情
+ */
+ @POST("/price/queryPriceInfo")
+ suspend fun getCapabilityDetail(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 1af43c3..27e91ca 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -173,7 +173,12 @@
val offsetMap = HashMap()
offsetMap["offset"] = offset
- return api.getStandardDeviceList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ return api.getStandardDeviceList(
+ AuthenticationHelper.token!!,
+ requestBody,
+ limitMap,
+ offsetMap
+ )
}
/**
@@ -187,4 +192,45 @@
)
return api.getStandardDeviceDetail(AuthenticationHelper.token!!, requestBody)
}
+
+ /**
+ * 获取能力列表
+ */
+ suspend fun getCapabilityList(
+ checkType: String,
+ priceItem: String,
+ priceName: String,
+ priceNo: String,
+ priceType: String,
+ offset: Int
+ ): String {
+ val paramObject = JSONObject()
+ paramObject.put("checkType", checkType)
+ paramObject.put("priceItem", priceItem)
+ paramObject.put("priceName", priceName)
+ paramObject.put("priceNo", priceNo)
+ paramObject.put("priceType", priceType)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getCapabilityList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ }
+
+ /**
+ * 获取能力详情
+ */
+ suspend fun getCapabilityDetail(id: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("id", id)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.getCapabilityDetail(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
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
new file mode 100644
index 0000000..7b9c9ec
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt
@@ -0,0 +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.CapabilityListAdapter
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.view.search.SearchCapabilityActivity
+import com.casic.xz.meterage.vm.CapabilityViewModel
+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.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class CapabilityActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var capabilityViewModel: CapabilityViewModel
+ private lateinit var capabilityListAdapter: CapabilityListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.capabilityResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.records!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ capabilityLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ capabilityLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023020902)
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ navigatePageTo()
+ }
+
+ capabilityLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ capabilityLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getCapabilityList()
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_capability
+
+ override fun observeRequestState() {
+ capabilityViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ private fun getCapabilityList() {
+ capabilityViewModel.getCapabilityList(
+ "",
+ "",
+ "",
+ "",
+ "",
+ pageIndex
+ )
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023020902 -> {
+ if (isRefresh || isLoadMore) {
+ capabilityListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("无数据") {
+ pageIndex = 1
+ getCapabilityList()
+ }
+ } else {
+ emptyView!!.hide()
+ capabilityListAdapter = CapabilityListAdapter(this, dataBeans)
+ capabilityRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ capabilityRecyclerView.adapter = capabilityListAdapter
+ capabilityListAdapter.setOnItemClickListener(object :
+ CapabilityListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ navigatePageTo(rowsModel.id)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "能力列表"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt
new file mode 100644
index 0000000..ddb486c
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt
@@ -0,0 +1,61 @@
+package com.casic.xz.meterage.view.home
+
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.vm.CapabilityViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_capability_detail.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class CapabilityDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var capabilityViewModel: CapabilityViewModel
+
+ override fun initData() {
+ val id = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.getCapabilityDetail(id)
+ capabilityViewModel.capabilityDetailResult.observe(this, {
+ if (it.code == 200) {
+ val data = it.data!!
+
+ priceCodeView.text = data.priceNo
+ checkTypeView.text = data.checkType
+ createView.text = data.createTime
+ categoryView.text = data.categoryName
+ projectView.text = data.priceItem
+ basisStandardView.text = data.priceStandard
+ limitRangeView.text = data.priceLimit
+ explainView.text = data.priceDescription
+ remarkView.text = data.remark
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_capability_detail
+
+ override fun observeRequestState() {
+ capabilityViewModel.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 = "能力列表"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt
new file mode 100644
index 0000000..9242993
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt
@@ -0,0 +1,41 @@
+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_capability.*
+
+/**
+ * 搜索能力
+ * */
+class SearchCapabilityActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_capability
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+
+ 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/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt
new file mode 100644
index 0000000..e8a9fe5
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt
@@ -0,0 +1,151 @@
+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.CapabilityListAdapter
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.view.home.CapabilityDetailActivity
+import com.casic.xz.meterage.vm.CapabilityViewModel
+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_capability_reasult.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchCapabilityResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var capabilityViewModel: CapabilityViewModel
+ private lateinit var capabilityListAdapter: CapabilityListAdapter
+ 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)
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.capabilityResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.records!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ capabilityLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ capabilityLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023020903)
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ capabilityLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ capabilityLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getCapabilityList()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ private fun getCapabilityList() {
+ capabilityViewModel.getCapabilityList(
+ "",
+ "",
+ param,
+ "",
+ "",
+ pageIndex
+ )
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult
+
+ override fun observeRequestState() {
+ capabilityViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023020903 -> {
+ if (isRefresh || isLoadMore) {
+ capabilityListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("无数据") {
+ pageIndex = 1
+ getCapabilityList()
+ }
+ } else {
+ emptyView!!.hide()
+ capabilityListAdapter = CapabilityListAdapter(this, dataBeans)
+ capabilityRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ capabilityRecyclerView.adapter = capabilityListAdapter
+ capabilityListAdapter.setOnItemClickListener(object :
+ CapabilityListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ navigatePageTo(rowsModel.id)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/CapabilityViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/CapabilityViewModel.kt
new file mode 100644
index 0000000..a398906
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/vm/CapabilityViewModel.kt
@@ -0,0 +1,67 @@
+package com.casic.xz.meterage.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.extensions.separateResponseCode
+import com.casic.xz.meterage.extensions.toErrorMessage
+import com.casic.xz.meterage.model.CapabilityDetailModel
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class CapabilityViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val capabilityResult = MutableLiveData()
+ val capabilityDetailResult = MutableLiveData()
+
+ fun getCapabilityList(
+ checkType: String,
+ priceItem: String,
+ priceName: String,
+ priceNo: String,
+ priceType: String,
+ offset: Int
+ ) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.getCapabilityList(
+ checkType, priceItem, priceName, priceNo, priceType, offset
+ )
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ capabilityResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
+
+ fun getCapabilityDetail(id: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.getCapabilityDetail(id)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ capabilityDetailResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_capability.xml b/app/src/main/res/layout/activity_capability.xml
new file mode 100644
index 0000000..1d8e1f7
--- /dev/null
+++ b/app/src/main/res/layout/activity_capability.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 6c4c80c..cdc9762 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,6 +5,7 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.home.CapabilityActivity
import com.casic.xz.meterage.view.home.EquipmentActivity
import com.casic.xz.meterage.view.home.StandardDeviceActivity
import com.casic.xz.meterage.view.notice.NoticeListActivity
@@ -45,7 +46,7 @@
// "委托需求" -> requireContext().navigatePageTo()
// "访客" -> requireContext().navigatePageTo()
// "标准规范" -> requireContext().navigatePageTo()
-// "能力列表" -> requireContext().navigatePageTo()
+ "能力列表" -> requireContext().navigatePageTo()
// "计量培训" -> requireContext().navigatePageTo()
// "合同发票" -> requireContext().navigatePageTo()
// "业务统计" -> requireContext().navigatePageTo()
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
new file mode 100644
index 0000000..32ecaf1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityDetailModel.java
@@ -0,0 +1,215 @@
+package com.casic.xz.meterage.model;
+
+public class CapabilityDetailModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public static class DataModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private int isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public int getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(int isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
new file mode 100644
index 0000000..ee308ad
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/model/CapabilityListModel.java
@@ -0,0 +1,311 @@
+package com.casic.xz.meterage.model;
+
+import java.util.List;
+
+public class CapabilityListModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ //TODO orders字段后期需要调整
+ public static class DataModel {
+ private String countId;
+ private String current;
+ private String maxLimit;
+ private boolean optimizeCountSql;
+ private List> orders;
+ private String pages;
+ private List records;
+ private boolean searchCount;
+ private String size;
+ private String total;
+
+ public String getCountId() {
+ return countId;
+ }
+
+ public void setCountId(String countId) {
+ this.countId = countId;
+ }
+
+ public String getCurrent() {
+ return current;
+ }
+
+ public void setCurrent(String current) {
+ this.current = current;
+ }
+
+ public String getMaxLimit() {
+ return maxLimit;
+ }
+
+ public void setMaxLimit(String maxLimit) {
+ this.maxLimit = maxLimit;
+ }
+
+ public boolean isOptimizeCountSql() {
+ return optimizeCountSql;
+ }
+
+ public void setOptimizeCountSql(boolean optimizeCountSql) {
+ this.optimizeCountSql = optimizeCountSql;
+ }
+
+ public List> getOrders() {
+ return orders;
+ }
+
+ public void setOrders(List> orders) {
+ this.orders = orders;
+ }
+
+ public String getPages() {
+ return pages;
+ }
+
+ public void setPages(String pages) {
+ this.pages = pages;
+ }
+
+ public List getRecords() {
+ return records;
+ }
+
+ public void setRecords(List records) {
+ this.records = records;
+ }
+
+ public boolean isSearchCount() {
+ return searchCount;
+ }
+
+ public void setSearchCount(boolean searchCount) {
+ this.searchCount = searchCount;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public String getTotal() {
+ return total;
+ }
+
+ public void setTotal(String total) {
+ this.total = total;
+ }
+
+ public static class RecordsModel {
+ private String categoryName;
+ private String checkType;
+ private String createTime;
+ private String directorDiscountPermission;
+ private String historicalPriceList;
+ private String id;
+ private String isDel;
+ private String itemName;
+ private String model;
+ private String operatorDiscountPermission;
+ private String price;
+ private String priceDescription;
+ private String priceItem;
+ private String priceLimit;
+ private String priceName;
+ private String priceNo;
+ private String priceStandard;
+ private String priceType;
+ private String remark;
+ private String updateTime;
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getCheckType() {
+ return checkType;
+ }
+
+ public void setCheckType(String checkType) {
+ this.checkType = checkType;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getDirectorDiscountPermission() {
+ return directorDiscountPermission;
+ }
+
+ public void setDirectorDiscountPermission(String directorDiscountPermission) {
+ this.directorDiscountPermission = directorDiscountPermission;
+ }
+
+ public String getHistoricalPriceList() {
+ return historicalPriceList;
+ }
+
+ public void setHistoricalPriceList(String historicalPriceList) {
+ this.historicalPriceList = historicalPriceList;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getIsDel() {
+ return isDel;
+ }
+
+ public void setIsDel(String isDel) {
+ this.isDel = isDel;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getOperatorDiscountPermission() {
+ return operatorDiscountPermission;
+ }
+
+ public void setOperatorDiscountPermission(String operatorDiscountPermission) {
+ this.operatorDiscountPermission = operatorDiscountPermission;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getPriceDescription() {
+ return priceDescription;
+ }
+
+ public void setPriceDescription(String priceDescription) {
+ this.priceDescription = priceDescription;
+ }
+
+ public String getPriceItem() {
+ return priceItem;
+ }
+
+ public void setPriceItem(String priceItem) {
+ this.priceItem = priceItem;
+ }
+
+ public String getPriceLimit() {
+ return priceLimit;
+ }
+
+ public void setPriceLimit(String priceLimit) {
+ this.priceLimit = priceLimit;
+ }
+
+ public String getPriceName() {
+ return priceName;
+ }
+
+ public void setPriceName(String priceName) {
+ this.priceName = priceName;
+ }
+
+ public String getPriceNo() {
+ return priceNo;
+ }
+
+ public void setPriceNo(String priceNo) {
+ this.priceNo = priceNo;
+ }
+
+ public String getPriceStandard() {
+ return priceStandard;
+ }
+
+ public void setPriceStandard(String priceStandard) {
+ this.priceStandard = priceStandard;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3382fae..75f6c2b 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -75,4 +75,24 @@
@Header("token") token: String,
@Body requestBody: RequestBody
): String
+
+ /**
+ * 获取能力列表
+ */
+ @POST("/price/queryPriceList")
+ suspend fun getCapabilityList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
+
+ /**
+ * 获取能力详情
+ */
+ @POST("/price/queryPriceInfo")
+ suspend fun getCapabilityDetail(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index 1af43c3..27e91ca 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -173,7 +173,12 @@
val offsetMap = HashMap()
offsetMap["offset"] = offset
- return api.getStandardDeviceList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ return api.getStandardDeviceList(
+ AuthenticationHelper.token!!,
+ requestBody,
+ limitMap,
+ offsetMap
+ )
}
/**
@@ -187,4 +192,45 @@
)
return api.getStandardDeviceDetail(AuthenticationHelper.token!!, requestBody)
}
+
+ /**
+ * 获取能力列表
+ */
+ suspend fun getCapabilityList(
+ checkType: String,
+ priceItem: String,
+ priceName: String,
+ priceNo: String,
+ priceType: String,
+ offset: Int
+ ): String {
+ val paramObject = JSONObject()
+ paramObject.put("checkType", checkType)
+ paramObject.put("priceItem", priceItem)
+ paramObject.put("priceName", priceName)
+ paramObject.put("priceNo", priceNo)
+ paramObject.put("priceType", priceType)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getCapabilityList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
+ }
+
+ /**
+ * 获取能力详情
+ */
+ suspend fun getCapabilityDetail(id: String): String {
+ val paramObject = JSONObject()
+ paramObject.put("id", id)
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.getCapabilityDetail(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
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
new file mode 100644
index 0000000..7b9c9ec
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityActivity.kt
@@ -0,0 +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.CapabilityListAdapter
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.view.search.SearchCapabilityActivity
+import com.casic.xz.meterage.vm.CapabilityViewModel
+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.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class CapabilityActivity : KotlinBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var capabilityViewModel: CapabilityViewModel
+ private lateinit var capabilityListAdapter: CapabilityListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.capabilityResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.records!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ capabilityLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ capabilityLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023020902)
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ navigatePageTo()
+ }
+
+ capabilityLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ capabilityLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getCapabilityList()
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_capability
+
+ override fun observeRequestState() {
+ capabilityViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ private fun getCapabilityList() {
+ capabilityViewModel.getCapabilityList(
+ "",
+ "",
+ "",
+ "",
+ "",
+ pageIndex
+ )
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023020902 -> {
+ if (isRefresh || isLoadMore) {
+ capabilityListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("无数据") {
+ pageIndex = 1
+ getCapabilityList()
+ }
+ } else {
+ emptyView!!.hide()
+ capabilityListAdapter = CapabilityListAdapter(this, dataBeans)
+ capabilityRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ capabilityRecyclerView.adapter = capabilityListAdapter
+ capabilityListAdapter.setOnItemClickListener(object :
+ CapabilityListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ navigatePageTo(rowsModel.id)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "能力列表"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt
new file mode 100644
index 0000000..ddb486c
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/home/CapabilityDetailActivity.kt
@@ -0,0 +1,61 @@
+package com.casic.xz.meterage.view.home
+
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.vm.CapabilityViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_capability_detail.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class CapabilityDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var capabilityViewModel: CapabilityViewModel
+
+ override fun initData() {
+ val id = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.getCapabilityDetail(id)
+ capabilityViewModel.capabilityDetailResult.observe(this, {
+ if (it.code == 200) {
+ val data = it.data!!
+
+ priceCodeView.text = data.priceNo
+ checkTypeView.text = data.checkType
+ createView.text = data.createTime
+ categoryView.text = data.categoryName
+ projectView.text = data.priceItem
+ basisStandardView.text = data.priceStandard
+ limitRangeView.text = data.priceLimit
+ explainView.text = data.priceDescription
+ remarkView.text = data.remark
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_capability_detail
+
+ override fun observeRequestState() {
+ capabilityViewModel.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 = "能力列表"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt
new file mode 100644
index 0000000..9242993
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt
@@ -0,0 +1,41 @@
+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_capability.*
+
+/**
+ * 搜索能力
+ * */
+class SearchCapabilityActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_capability
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+
+ 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/SearchCapabilityResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt
new file mode 100644
index 0000000..e8a9fe5
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityResultActivity.kt
@@ -0,0 +1,151 @@
+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.CapabilityListAdapter
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.view.home.CapabilityDetailActivity
+import com.casic.xz.meterage.vm.CapabilityViewModel
+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_capability_reasult.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchCapabilityResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var capabilityViewModel: CapabilityViewModel
+ private lateinit var capabilityListAdapter: CapabilityListAdapter
+ 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)
+ capabilityViewModel = ViewModelProvider(this)[CapabilityViewModel::class.java]
+ capabilityViewModel.capabilityResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.records!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ capabilityLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ capabilityLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023020903)
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ capabilityLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ capabilityLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getCapabilityList()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getCapabilityList()
+ }
+
+ private fun getCapabilityList() {
+ capabilityViewModel.getCapabilityList(
+ "",
+ "",
+ param,
+ "",
+ "",
+ pageIndex
+ )
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_capability_reasult
+
+ override fun observeRequestState() {
+ capabilityViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023020903 -> {
+ if (isRefresh || isLoadMore) {
+ capabilityListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("无数据") {
+ pageIndex = 1
+ getCapabilityList()
+ }
+ } else {
+ emptyView!!.hide()
+ capabilityListAdapter = CapabilityListAdapter(this, dataBeans)
+ capabilityRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ capabilityRecyclerView.adapter = capabilityListAdapter
+ capabilityListAdapter.setOnItemClickListener(object :
+ CapabilityListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ navigatePageTo(rowsModel.id)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/CapabilityViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/CapabilityViewModel.kt
new file mode 100644
index 0000000..a398906
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/vm/CapabilityViewModel.kt
@@ -0,0 +1,67 @@
+package com.casic.xz.meterage.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.extensions.separateResponseCode
+import com.casic.xz.meterage.extensions.toErrorMessage
+import com.casic.xz.meterage.model.CapabilityDetailModel
+import com.casic.xz.meterage.model.CapabilityListModel
+import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+
+class CapabilityViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val capabilityResult = MutableLiveData()
+ val capabilityDetailResult = MutableLiveData()
+
+ fun getCapabilityList(
+ checkType: String,
+ priceItem: String,
+ priceName: String,
+ priceNo: String,
+ priceType: String,
+ offset: Int
+ ) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.getCapabilityList(
+ checkType, priceItem, priceName, priceNo, priceType, offset
+ )
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ capabilityResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
+
+ fun getCapabilityDetail(id: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.getCapabilityDetail(id)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ capabilityDetailResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_capability.xml b/app/src/main/res/layout/activity_capability.xml
new file mode 100644
index 0000000..1d8e1f7
--- /dev/null
+++ b/app/src/main/res/layout/activity_capability.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_capability_detail.xml b/app/src/main/res/layout/activity_capability_detail.xml
new file mode 100644
index 0000000..8faa3a8
--- /dev/null
+++ b/app/src/main/res/layout/activity_capability_detail.xml
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1d6bb4b..78b3de2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,10 +48,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+) : 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_capability_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.capabilityNameView.text = rowsBean.priceName
+ holder.categoryView.text = rowsBean.categoryName
+ holder.projectView.text = rowsBean.priceItem
+ holder.priceView.text = rowsBean.price.toString()
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var capabilityNameView: TextView = view.findViewById(R.id.capabilityNameView)
+ var categoryView: TextView = view.findViewById(R.id.categoryView)
+ var projectView: TextView = view.findViewById(R.id.projectView)
+ var priceView: TextView = view.findViewById(R.id.priceView)
+ }
+
+ 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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 6c4c80c..cdc9762 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,6 +5,7 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.home.CapabilityActivity
import com.casic.xz.meterage.view.home.EquipmentActivity
import com.casic.xz.meterage.view.home.StandardDeviceActivity
import com.casic.xz.meterage.view.notice.NoticeListActivity
@@ -45,7 +46,7 @@
// "委托需求" -> requireContext().navigatePageTo()
// "访客" -> requireContext().navigatePageTo()
// "标准规范" -> requireContext().navigatePageTo()
-// "能力列表" -> requireContext().navigatePageTo()
+ "能力列表" -> requireContext().navigatePageTo()
// "计量培训" -> requireContext().navigatePageTo()
// "合同发票" -> requireContext().navigatePageTo