diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9b4acfd..6d3d99d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -131,4 +131,6 @@ implementation("cn.bertsir.zbarLibary:zbarlibary:1.4.2") //图表 implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") + //日期、时间选择器 + implementation("com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.13") } \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9b4acfd..6d3d99d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -131,4 +131,6 @@ implementation("cn.bertsir.zbarLibary:zbarlibary:1.4.2") //图表 implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") + //日期、时间选择器 + implementation("com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.13") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java new file mode 100644 index 0000000..d4b0b00 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java @@ -0,0 +1,73 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class SystemDictModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String name; + private String id; + private String value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } +} diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9b4acfd..6d3d99d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -131,4 +131,6 @@ implementation("cn.bertsir.zbarLibary:zbarlibary:1.4.2") //图表 implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") + //日期、时间选择器 + implementation("com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.13") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java new file mode 100644 index 0000000..d4b0b00 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java @@ -0,0 +1,73 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class SystemDictModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String name; + private String id; + private String value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index edc5bdf..901c010 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -10,6 +10,7 @@ import retrofit2.http.Multipart import retrofit2.http.POST import retrofit2.http.Part +import retrofit2.http.Path import retrofit2.http.Query import retrofit2.http.QueryMap @@ -48,6 +49,15 @@ suspend fun getUserDetail(@Header("token") token: String): String /** + * 获取字典值 + */ + @GET("/sys/dict/code/{dictCode}") + suspend fun getSystemDict( + @Header("token") token: String, + @Path("dictCode") dictCode: String + ): String + + /** * 实施中列表 */ @GET("/v3/site/listPage") @@ -101,12 +111,11 @@ /** * 报警列表 */ - @GET("/alarm/listPage") + @GET("/v3/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, - @Query("keywords") keywords: String, - @Query("orderBy") orderBy: String, - @Query("sort") sort: String, + @Query("projectId") projectId: String, + @Query("alarmType") alarmType: String, @Query("offset") offset: Int, @Query("limit") limit: Int ): String diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9b4acfd..6d3d99d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -131,4 +131,6 @@ implementation("cn.bertsir.zbarLibary:zbarlibary:1.4.2") //图表 implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") + //日期、时间选择器 + implementation("com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.13") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java new file mode 100644 index 0000000..d4b0b00 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java @@ -0,0 +1,73 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class SystemDictModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String name; + private String id; + private String value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index edc5bdf..901c010 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -10,6 +10,7 @@ import retrofit2.http.Multipart import retrofit2.http.POST import retrofit2.http.Part +import retrofit2.http.Path import retrofit2.http.Query import retrofit2.http.QueryMap @@ -48,6 +49,15 @@ suspend fun getUserDetail(@Header("token") token: String): String /** + * 获取字典值 + */ + @GET("/sys/dict/code/{dictCode}") + suspend fun getSystemDict( + @Header("token") token: String, + @Path("dictCode") dictCode: String + ): String + + /** * 实施中列表 */ @GET("/v3/site/listPage") @@ -101,12 +111,11 @@ /** * 报警列表 */ - @GET("/alarm/listPage") + @GET("/v3/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, - @Query("keywords") keywords: String, - @Query("orderBy") orderBy: String, - @Query("sort") sort: String, + @Query("projectId") projectId: String, + @Query("alarmType") alarmType: String, @Query("offset") offset: Int, @Query("limit") limit: Int ): String diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 1e2a78c..57497af 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -3,6 +3,7 @@ import android.util.Log import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.pengxh.kt.lite.extensions.timestampToCompleteDate @@ -56,6 +57,13 @@ } /** + * 获取字典值 + */ + suspend fun getSystemDict(dictCode: String): String { + return api.getSystemDict(AuthenticationHelper.token!!, dictCode) + } + + /** * 项目列表 */ suspend fun getProjectListByPage(keywords: String, state: String, page: Int): String { @@ -104,10 +112,12 @@ /** * 报警列表 */ - suspend fun getAlarmListByPage(keywords: String, page: Int): String { + suspend fun getAlarmListByPage(alarmType: String, page: Int): String { return api.getAlarmListByPage( AuthenticationHelper.token!!, - keywords, "alarmTime", "desc", page, + RuntimeCache.projectId, + alarmType, + page, LocaleConstant.PAGE_LIMIT ) } diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9b4acfd..6d3d99d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -131,4 +131,6 @@ implementation("cn.bertsir.zbarLibary:zbarlibary:1.4.2") //图表 implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") + //日期、时间选择器 + implementation("com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.13") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java new file mode 100644 index 0000000..d4b0b00 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java @@ -0,0 +1,73 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class SystemDictModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String name; + private String id; + private String value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index edc5bdf..901c010 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -10,6 +10,7 @@ import retrofit2.http.Multipart import retrofit2.http.POST import retrofit2.http.Part +import retrofit2.http.Path import retrofit2.http.Query import retrofit2.http.QueryMap @@ -48,6 +49,15 @@ suspend fun getUserDetail(@Header("token") token: String): String /** + * 获取字典值 + */ + @GET("/sys/dict/code/{dictCode}") + suspend fun getSystemDict( + @Header("token") token: String, + @Path("dictCode") dictCode: String + ): String + + /** * 实施中列表 */ @GET("/v3/site/listPage") @@ -101,12 +111,11 @@ /** * 报警列表 */ - @GET("/alarm/listPage") + @GET("/v3/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, - @Query("keywords") keywords: String, - @Query("orderBy") orderBy: String, - @Query("sort") sort: String, + @Query("projectId") projectId: String, + @Query("alarmType") alarmType: String, @Query("offset") offset: Int, @Query("limit") limit: Int ): String diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 1e2a78c..57497af 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -3,6 +3,7 @@ import android.util.Log import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.pengxh.kt.lite.extensions.timestampToCompleteDate @@ -56,6 +57,13 @@ } /** + * 获取字典值 + */ + suspend fun getSystemDict(dictCode: String): String { + return api.getSystemDict(AuthenticationHelper.token!!, dictCode) + } + + /** * 项目列表 */ suspend fun getProjectListByPage(keywords: String, state: String, page: Int): String { @@ -104,10 +112,12 @@ /** * 报警列表 */ - suspend fun getAlarmListByPage(keywords: String, page: Int): String { + suspend fun getAlarmListByPage(alarmType: String, page: Int): String { return api.getAlarmListByPage( AuthenticationHelper.token!!, - keywords, "alarmTime", "desc", page, + RuntimeCache.projectId, + alarmType, + page, LocaleConstant.PAGE_LIMIT ) } diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 300a75b..cbdf60e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -8,7 +8,10 @@ import com.casic.br.operationsite.extensions.combineImagePath import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.model.AlarmListModel +import com.casic.br.operationsite.model.SystemDictModel import com.casic.br.operationsite.vm.AlarmViewModel +import com.casic.br.operationsite.vm.SystemViewModel +import com.casic.br.operationsite.widgets.ConditionalFilterDialog import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity @@ -21,16 +24,18 @@ import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog import com.pengxh.kt.lite.widget.EmptyView +import com.pengxh.kt.lite.widget.TitleBarView class AlarmListActivity : KotlinBaseActivity() { private val context = this@AlarmListActivity + private lateinit var systemViewModel: SystemViewModel private lateinit var alarmAdapter: NormalRecyclerAdapter private lateinit var alarmViewModel: AlarmViewModel + private var dictModels: MutableList = ArrayList() private var page = 1 private var isRefresh = false private var isLoadMore = false - private var keywords = "" override fun initViewBinding(): ActivityAlarmListBinding { return ActivityAlarmListBinding.inflate(layoutInflater) @@ -38,16 +43,42 @@ override fun setupTopBarLayout() { binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor) + binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { + override fun onLeftClick() { + finish() + } - binding.titleInclude.searchTextView.setOnClickListener { - page = 1 - keywords = binding.titleInclude.searchInputView.text.toString() - getAlarmListByPage() - } + override fun onRightClick() { + //条件筛选 + ConditionalFilterDialog.Builder() + .setContext(context) + .setAlarmTypeCollection(dictModels) + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + ConditionalFilterDialog.OnDialogButtonClickListener { + override fun onConfirmClick(type: String) { + alarmViewModel.getAlarmListByPage(context, type, 1) + } + + override fun onCancelClick() {} + }).build().show() + } + }) } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + + //获取报警类型列表 + systemViewModel = ViewModelProvider(this)[SystemViewModel::class.java] + systemViewModel.dictLiveData.observe(this) { + if (it.code == 200) { + dictModels = it.data + } + } + systemViewModel.getSystemDict(this, "alarmType") + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] alarmViewModel.alarmModel.observe(this) { if (it.code == 200) { @@ -204,11 +235,9 @@ getAlarmListByPage() } }) - - binding.goBackButton.setOnClickListener { finish() } } private fun getAlarmListByPage() { - alarmViewModel.getAlarmListByPage(this, keywords, page) + alarmViewModel.getAlarmListByPage(this, "", page) } } \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9b4acfd..6d3d99d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -131,4 +131,6 @@ implementation("cn.bertsir.zbarLibary:zbarlibary:1.4.2") //图表 implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") + //日期、时间选择器 + implementation("com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.13") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java new file mode 100644 index 0000000..d4b0b00 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java @@ -0,0 +1,73 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class SystemDictModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String name; + private String id; + private String value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index edc5bdf..901c010 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -10,6 +10,7 @@ import retrofit2.http.Multipart import retrofit2.http.POST import retrofit2.http.Part +import retrofit2.http.Path import retrofit2.http.Query import retrofit2.http.QueryMap @@ -48,6 +49,15 @@ suspend fun getUserDetail(@Header("token") token: String): String /** + * 获取字典值 + */ + @GET("/sys/dict/code/{dictCode}") + suspend fun getSystemDict( + @Header("token") token: String, + @Path("dictCode") dictCode: String + ): String + + /** * 实施中列表 */ @GET("/v3/site/listPage") @@ -101,12 +111,11 @@ /** * 报警列表 */ - @GET("/alarm/listPage") + @GET("/v3/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, - @Query("keywords") keywords: String, - @Query("orderBy") orderBy: String, - @Query("sort") sort: String, + @Query("projectId") projectId: String, + @Query("alarmType") alarmType: String, @Query("offset") offset: Int, @Query("limit") limit: Int ): String diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 1e2a78c..57497af 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -3,6 +3,7 @@ import android.util.Log import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.pengxh.kt.lite.extensions.timestampToCompleteDate @@ -56,6 +57,13 @@ } /** + * 获取字典值 + */ + suspend fun getSystemDict(dictCode: String): String { + return api.getSystemDict(AuthenticationHelper.token!!, dictCode) + } + + /** * 项目列表 */ suspend fun getProjectListByPage(keywords: String, state: String, page: Int): String { @@ -104,10 +112,12 @@ /** * 报警列表 */ - suspend fun getAlarmListByPage(keywords: String, page: Int): String { + suspend fun getAlarmListByPage(alarmType: String, page: Int): String { return api.getAlarmListByPage( AuthenticationHelper.token!!, - keywords, "alarmTime", "desc", page, + RuntimeCache.projectId, + alarmType, + page, LocaleConstant.PAGE_LIMIT ) } diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 300a75b..cbdf60e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -8,7 +8,10 @@ import com.casic.br.operationsite.extensions.combineImagePath import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.model.AlarmListModel +import com.casic.br.operationsite.model.SystemDictModel import com.casic.br.operationsite.vm.AlarmViewModel +import com.casic.br.operationsite.vm.SystemViewModel +import com.casic.br.operationsite.widgets.ConditionalFilterDialog import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity @@ -21,16 +24,18 @@ import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog import com.pengxh.kt.lite.widget.EmptyView +import com.pengxh.kt.lite.widget.TitleBarView class AlarmListActivity : KotlinBaseActivity() { private val context = this@AlarmListActivity + private lateinit var systemViewModel: SystemViewModel private lateinit var alarmAdapter: NormalRecyclerAdapter private lateinit var alarmViewModel: AlarmViewModel + private var dictModels: MutableList = ArrayList() private var page = 1 private var isRefresh = false private var isLoadMore = false - private var keywords = "" override fun initViewBinding(): ActivityAlarmListBinding { return ActivityAlarmListBinding.inflate(layoutInflater) @@ -38,16 +43,42 @@ override fun setupTopBarLayout() { binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor) + binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { + override fun onLeftClick() { + finish() + } - binding.titleInclude.searchTextView.setOnClickListener { - page = 1 - keywords = binding.titleInclude.searchInputView.text.toString() - getAlarmListByPage() - } + override fun onRightClick() { + //条件筛选 + ConditionalFilterDialog.Builder() + .setContext(context) + .setAlarmTypeCollection(dictModels) + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + ConditionalFilterDialog.OnDialogButtonClickListener { + override fun onConfirmClick(type: String) { + alarmViewModel.getAlarmListByPage(context, type, 1) + } + + override fun onCancelClick() {} + }).build().show() + } + }) } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + + //获取报警类型列表 + systemViewModel = ViewModelProvider(this)[SystemViewModel::class.java] + systemViewModel.dictLiveData.observe(this) { + if (it.code == 200) { + dictModels = it.data + } + } + systemViewModel.getSystemDict(this, "alarmType") + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] alarmViewModel.alarmModel.observe(this) { if (it.code == 200) { @@ -204,11 +235,9 @@ getAlarmListByPage() } }) - - binding.goBackButton.setOnClickListener { finish() } } private fun getAlarmListByPage() { - alarmViewModel.getAlarmListByPage(this, keywords, page) + alarmViewModel.getAlarmListByPage(this, "", page) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt index 888f92e..578d8e3 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt @@ -22,9 +22,9 @@ val stateResult = MutableLiveData() val otherStateResult = MutableLiveData() - fun getAlarmListByPage(context: Context, keywords: String, page: Int) = launch({ + fun getAlarmListByPage(context: Context, alarmType: String, page: Int) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getAlarmListByPage(keywords, page) + val response = RetrofitServiceManager.getAlarmListByPage(alarmType, page) when (response.getResponseCode()) { 200 -> { alarmModel.value = gson.fromJson( diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9b4acfd..6d3d99d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -131,4 +131,6 @@ implementation("cn.bertsir.zbarLibary:zbarlibary:1.4.2") //图表 implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") + //日期、时间选择器 + implementation("com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.13") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java new file mode 100644 index 0000000..d4b0b00 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java @@ -0,0 +1,73 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class SystemDictModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String name; + private String id; + private String value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index edc5bdf..901c010 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -10,6 +10,7 @@ import retrofit2.http.Multipart import retrofit2.http.POST import retrofit2.http.Part +import retrofit2.http.Path import retrofit2.http.Query import retrofit2.http.QueryMap @@ -48,6 +49,15 @@ suspend fun getUserDetail(@Header("token") token: String): String /** + * 获取字典值 + */ + @GET("/sys/dict/code/{dictCode}") + suspend fun getSystemDict( + @Header("token") token: String, + @Path("dictCode") dictCode: String + ): String + + /** * 实施中列表 */ @GET("/v3/site/listPage") @@ -101,12 +111,11 @@ /** * 报警列表 */ - @GET("/alarm/listPage") + @GET("/v3/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, - @Query("keywords") keywords: String, - @Query("orderBy") orderBy: String, - @Query("sort") sort: String, + @Query("projectId") projectId: String, + @Query("alarmType") alarmType: String, @Query("offset") offset: Int, @Query("limit") limit: Int ): String diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 1e2a78c..57497af 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -3,6 +3,7 @@ import android.util.Log import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.pengxh.kt.lite.extensions.timestampToCompleteDate @@ -56,6 +57,13 @@ } /** + * 获取字典值 + */ + suspend fun getSystemDict(dictCode: String): String { + return api.getSystemDict(AuthenticationHelper.token!!, dictCode) + } + + /** * 项目列表 */ suspend fun getProjectListByPage(keywords: String, state: String, page: Int): String { @@ -104,10 +112,12 @@ /** * 报警列表 */ - suspend fun getAlarmListByPage(keywords: String, page: Int): String { + suspend fun getAlarmListByPage(alarmType: String, page: Int): String { return api.getAlarmListByPage( AuthenticationHelper.token!!, - keywords, "alarmTime", "desc", page, + RuntimeCache.projectId, + alarmType, + page, LocaleConstant.PAGE_LIMIT ) } diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 300a75b..cbdf60e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -8,7 +8,10 @@ import com.casic.br.operationsite.extensions.combineImagePath import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.model.AlarmListModel +import com.casic.br.operationsite.model.SystemDictModel import com.casic.br.operationsite.vm.AlarmViewModel +import com.casic.br.operationsite.vm.SystemViewModel +import com.casic.br.operationsite.widgets.ConditionalFilterDialog import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity @@ -21,16 +24,18 @@ import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog import com.pengxh.kt.lite.widget.EmptyView +import com.pengxh.kt.lite.widget.TitleBarView class AlarmListActivity : KotlinBaseActivity() { private val context = this@AlarmListActivity + private lateinit var systemViewModel: SystemViewModel private lateinit var alarmAdapter: NormalRecyclerAdapter private lateinit var alarmViewModel: AlarmViewModel + private var dictModels: MutableList = ArrayList() private var page = 1 private var isRefresh = false private var isLoadMore = false - private var keywords = "" override fun initViewBinding(): ActivityAlarmListBinding { return ActivityAlarmListBinding.inflate(layoutInflater) @@ -38,16 +43,42 @@ override fun setupTopBarLayout() { binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor) + binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { + override fun onLeftClick() { + finish() + } - binding.titleInclude.searchTextView.setOnClickListener { - page = 1 - keywords = binding.titleInclude.searchInputView.text.toString() - getAlarmListByPage() - } + override fun onRightClick() { + //条件筛选 + ConditionalFilterDialog.Builder() + .setContext(context) + .setAlarmTypeCollection(dictModels) + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + ConditionalFilterDialog.OnDialogButtonClickListener { + override fun onConfirmClick(type: String) { + alarmViewModel.getAlarmListByPage(context, type, 1) + } + + override fun onCancelClick() {} + }).build().show() + } + }) } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + + //获取报警类型列表 + systemViewModel = ViewModelProvider(this)[SystemViewModel::class.java] + systemViewModel.dictLiveData.observe(this) { + if (it.code == 200) { + dictModels = it.data + } + } + systemViewModel.getSystemDict(this, "alarmType") + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] alarmViewModel.alarmModel.observe(this) { if (it.code == 200) { @@ -204,11 +235,9 @@ getAlarmListByPage() } }) - - binding.goBackButton.setOnClickListener { finish() } } private fun getAlarmListByPage() { - alarmViewModel.getAlarmListByPage(this, keywords, page) + alarmViewModel.getAlarmListByPage(this, "", page) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt index 888f92e..578d8e3 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt @@ -22,9 +22,9 @@ val stateResult = MutableLiveData() val otherStateResult = MutableLiveData() - fun getAlarmListByPage(context: Context, keywords: String, page: Int) = launch({ + fun getAlarmListByPage(context: Context, alarmType: String, page: Int) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getAlarmListByPage(keywords, page) + val response = RetrofitServiceManager.getAlarmListByPage(alarmType, page) when (response.getResponseCode()) { 200 -> { alarmModel.value = gson.fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/vm/SystemViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/SystemViewModel.kt new file mode 100644 index 0000000..44035e9 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/vm/SystemViewModel.kt @@ -0,0 +1,36 @@ +package com.casic.br.operationsite.vm + +import android.content.Context +import androidx.lifecycle.MutableLiveData +import com.casic.br.operationsite.extensions.getResponseCode +import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.SystemDictModel +import com.casic.br.operationsite.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.base.BaseViewModel +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show + +class SystemViewModel : BaseViewModel() { + + private val gson = Gson() + val dictLiveData = MutableLiveData() + + fun getSystemDict(context: Context, dictCode: String) = launch({ + val response = RetrofitServiceManager.getSystemDict(dictCode) + when (response.getResponseCode()) { + 200 -> { + dictLiveData.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + + else -> { + response.getResponseMessage().show(context) + } + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9b4acfd..6d3d99d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -131,4 +131,6 @@ implementation("cn.bertsir.zbarLibary:zbarlibary:1.4.2") //图表 implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") + //日期、时间选择器 + implementation("com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.13") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java new file mode 100644 index 0000000..d4b0b00 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java @@ -0,0 +1,73 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class SystemDictModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String name; + private String id; + private String value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index edc5bdf..901c010 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -10,6 +10,7 @@ import retrofit2.http.Multipart import retrofit2.http.POST import retrofit2.http.Part +import retrofit2.http.Path import retrofit2.http.Query import retrofit2.http.QueryMap @@ -48,6 +49,15 @@ suspend fun getUserDetail(@Header("token") token: String): String /** + * 获取字典值 + */ + @GET("/sys/dict/code/{dictCode}") + suspend fun getSystemDict( + @Header("token") token: String, + @Path("dictCode") dictCode: String + ): String + + /** * 实施中列表 */ @GET("/v3/site/listPage") @@ -101,12 +111,11 @@ /** * 报警列表 */ - @GET("/alarm/listPage") + @GET("/v3/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, - @Query("keywords") keywords: String, - @Query("orderBy") orderBy: String, - @Query("sort") sort: String, + @Query("projectId") projectId: String, + @Query("alarmType") alarmType: String, @Query("offset") offset: Int, @Query("limit") limit: Int ): String diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 1e2a78c..57497af 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -3,6 +3,7 @@ import android.util.Log import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.pengxh.kt.lite.extensions.timestampToCompleteDate @@ -56,6 +57,13 @@ } /** + * 获取字典值 + */ + suspend fun getSystemDict(dictCode: String): String { + return api.getSystemDict(AuthenticationHelper.token!!, dictCode) + } + + /** * 项目列表 */ suspend fun getProjectListByPage(keywords: String, state: String, page: Int): String { @@ -104,10 +112,12 @@ /** * 报警列表 */ - suspend fun getAlarmListByPage(keywords: String, page: Int): String { + suspend fun getAlarmListByPage(alarmType: String, page: Int): String { return api.getAlarmListByPage( AuthenticationHelper.token!!, - keywords, "alarmTime", "desc", page, + RuntimeCache.projectId, + alarmType, + page, LocaleConstant.PAGE_LIMIT ) } diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 300a75b..cbdf60e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -8,7 +8,10 @@ import com.casic.br.operationsite.extensions.combineImagePath import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.model.AlarmListModel +import com.casic.br.operationsite.model.SystemDictModel import com.casic.br.operationsite.vm.AlarmViewModel +import com.casic.br.operationsite.vm.SystemViewModel +import com.casic.br.operationsite.widgets.ConditionalFilterDialog import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity @@ -21,16 +24,18 @@ import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog import com.pengxh.kt.lite.widget.EmptyView +import com.pengxh.kt.lite.widget.TitleBarView class AlarmListActivity : KotlinBaseActivity() { private val context = this@AlarmListActivity + private lateinit var systemViewModel: SystemViewModel private lateinit var alarmAdapter: NormalRecyclerAdapter private lateinit var alarmViewModel: AlarmViewModel + private var dictModels: MutableList = ArrayList() private var page = 1 private var isRefresh = false private var isLoadMore = false - private var keywords = "" override fun initViewBinding(): ActivityAlarmListBinding { return ActivityAlarmListBinding.inflate(layoutInflater) @@ -38,16 +43,42 @@ override fun setupTopBarLayout() { binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor) + binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { + override fun onLeftClick() { + finish() + } - binding.titleInclude.searchTextView.setOnClickListener { - page = 1 - keywords = binding.titleInclude.searchInputView.text.toString() - getAlarmListByPage() - } + override fun onRightClick() { + //条件筛选 + ConditionalFilterDialog.Builder() + .setContext(context) + .setAlarmTypeCollection(dictModels) + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + ConditionalFilterDialog.OnDialogButtonClickListener { + override fun onConfirmClick(type: String) { + alarmViewModel.getAlarmListByPage(context, type, 1) + } + + override fun onCancelClick() {} + }).build().show() + } + }) } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + + //获取报警类型列表 + systemViewModel = ViewModelProvider(this)[SystemViewModel::class.java] + systemViewModel.dictLiveData.observe(this) { + if (it.code == 200) { + dictModels = it.data + } + } + systemViewModel.getSystemDict(this, "alarmType") + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] alarmViewModel.alarmModel.observe(this) { if (it.code == 200) { @@ -204,11 +235,9 @@ getAlarmListByPage() } }) - - binding.goBackButton.setOnClickListener { finish() } } private fun getAlarmListByPage() { - alarmViewModel.getAlarmListByPage(this, keywords, page) + alarmViewModel.getAlarmListByPage(this, "", page) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt index 888f92e..578d8e3 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt @@ -22,9 +22,9 @@ val stateResult = MutableLiveData() val otherStateResult = MutableLiveData() - fun getAlarmListByPage(context: Context, keywords: String, page: Int) = launch({ + fun getAlarmListByPage(context: Context, alarmType: String, page: Int) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getAlarmListByPage(keywords, page) + val response = RetrofitServiceManager.getAlarmListByPage(alarmType, page) when (response.getResponseCode()) { 200 -> { alarmModel.value = gson.fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/vm/SystemViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/SystemViewModel.kt new file mode 100644 index 0000000..44035e9 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/vm/SystemViewModel.kt @@ -0,0 +1,36 @@ +package com.casic.br.operationsite.vm + +import android.content.Context +import androidx.lifecycle.MutableLiveData +import com.casic.br.operationsite.extensions.getResponseCode +import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.SystemDictModel +import com.casic.br.operationsite.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.base.BaseViewModel +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show + +class SystemViewModel : BaseViewModel() { + + private val gson = Gson() + val dictLiveData = MutableLiveData() + + fun getSystemDict(context: Context, dictCode: String) = launch({ + val response = RetrofitServiceManager.getSystemDict(dictCode) + when (response.getResponseCode()) { + 200 -> { + dictLiveData.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + + else -> { + response.getResponseMessage().show(context) + } + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/widgets/ConditionalFilterDialog.kt b/app/src/main/java/com/casic/br/operationsite/widgets/ConditionalFilterDialog.kt new file mode 100644 index 0000000..683f18e --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/widgets/ConditionalFilterDialog.kt @@ -0,0 +1,102 @@ +package com.casic.br.operationsite.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.widget.ArrayAdapter +import com.casic.br.operationsite.databinding.DialogConditionalFilterBinding +import com.casic.br.operationsite.model.SystemDictModel +import com.pengxh.kt.lite.R +import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.initDialogLayoutParams + +class ConditionalFilterDialog private constructor(builder: Builder) : + Dialog(builder.context, R.style.UserDefinedDialogStyle) { + + private val kTag = "ConditionalFilterDialog" + private val context = builder.context + private val dictModels = builder.dictModels + private val positiveBtn = builder.positiveBtn + private val negativeBtn = builder.negativeBtn + private val listener = builder.listener + + class Builder { + lateinit var context: Context + lateinit var dictModels: List + lateinit var positiveBtn: String + lateinit var negativeBtn: String + lateinit var listener: OnDialogButtonClickListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setAlarmTypeCollection(dictModels: List): Builder { + this.dictModels = dictModels + return this + } + + fun setPositiveButton(name: String): Builder { + positiveBtn = name + return this + } + + fun setNegativeButton(name: String): Builder { + negativeBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { + this.listener = listener + return this + } + + fun build(): ConditionalFilterDialog { + return ConditionalFilterDialog(this) + } + } + + private val binding: DialogConditionalFilterBinding by binding() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(0.8f) + setCancelable(false) + setCanceledOnTouchOutside(false) + + if (dictModels.isNotEmpty()) { + val typeArray = ArrayList() + dictModels.forEach { + typeArray.add(it.name) + } + binding.alarmTypeSpinner.adapter = ArrayAdapter( + context, android.R.layout.simple_spinner_item, typeArray + ) + binding.alarmTypeSpinner.setSelection(0) + } + + if (negativeBtn.isNotBlank()) { + binding.dialogCancelButton.text = negativeBtn + } + + binding.dialogCancelButton.setOnClickListener { + listener.onCancelClick() + dismiss() + } + if (positiveBtn.isNotBlank()) { + binding.dialogConfirmButton.text = positiveBtn + } + binding.dialogConfirmButton.setOnClickListener { + val index = binding.alarmTypeSpinner.selectedItemPosition + listener.onConfirmClick(dictModels[index].value) + dismiss() + } + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(type: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9b4acfd..6d3d99d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -131,4 +131,6 @@ implementation("cn.bertsir.zbarLibary:zbarlibary:1.4.2") //图表 implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") + //日期、时间选择器 + implementation("com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.13") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java new file mode 100644 index 0000000..d4b0b00 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java @@ -0,0 +1,73 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class SystemDictModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String name; + private String id; + private String value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index edc5bdf..901c010 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -10,6 +10,7 @@ import retrofit2.http.Multipart import retrofit2.http.POST import retrofit2.http.Part +import retrofit2.http.Path import retrofit2.http.Query import retrofit2.http.QueryMap @@ -48,6 +49,15 @@ suspend fun getUserDetail(@Header("token") token: String): String /** + * 获取字典值 + */ + @GET("/sys/dict/code/{dictCode}") + suspend fun getSystemDict( + @Header("token") token: String, + @Path("dictCode") dictCode: String + ): String + + /** * 实施中列表 */ @GET("/v3/site/listPage") @@ -101,12 +111,11 @@ /** * 报警列表 */ - @GET("/alarm/listPage") + @GET("/v3/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, - @Query("keywords") keywords: String, - @Query("orderBy") orderBy: String, - @Query("sort") sort: String, + @Query("projectId") projectId: String, + @Query("alarmType") alarmType: String, @Query("offset") offset: Int, @Query("limit") limit: Int ): String diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 1e2a78c..57497af 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -3,6 +3,7 @@ import android.util.Log import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.pengxh.kt.lite.extensions.timestampToCompleteDate @@ -56,6 +57,13 @@ } /** + * 获取字典值 + */ + suspend fun getSystemDict(dictCode: String): String { + return api.getSystemDict(AuthenticationHelper.token!!, dictCode) + } + + /** * 项目列表 */ suspend fun getProjectListByPage(keywords: String, state: String, page: Int): String { @@ -104,10 +112,12 @@ /** * 报警列表 */ - suspend fun getAlarmListByPage(keywords: String, page: Int): String { + suspend fun getAlarmListByPage(alarmType: String, page: Int): String { return api.getAlarmListByPage( AuthenticationHelper.token!!, - keywords, "alarmTime", "desc", page, + RuntimeCache.projectId, + alarmType, + page, LocaleConstant.PAGE_LIMIT ) } diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 300a75b..cbdf60e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -8,7 +8,10 @@ import com.casic.br.operationsite.extensions.combineImagePath import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.model.AlarmListModel +import com.casic.br.operationsite.model.SystemDictModel import com.casic.br.operationsite.vm.AlarmViewModel +import com.casic.br.operationsite.vm.SystemViewModel +import com.casic.br.operationsite.widgets.ConditionalFilterDialog import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity @@ -21,16 +24,18 @@ import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog import com.pengxh.kt.lite.widget.EmptyView +import com.pengxh.kt.lite.widget.TitleBarView class AlarmListActivity : KotlinBaseActivity() { private val context = this@AlarmListActivity + private lateinit var systemViewModel: SystemViewModel private lateinit var alarmAdapter: NormalRecyclerAdapter private lateinit var alarmViewModel: AlarmViewModel + private var dictModels: MutableList = ArrayList() private var page = 1 private var isRefresh = false private var isLoadMore = false - private var keywords = "" override fun initViewBinding(): ActivityAlarmListBinding { return ActivityAlarmListBinding.inflate(layoutInflater) @@ -38,16 +43,42 @@ override fun setupTopBarLayout() { binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor) + binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { + override fun onLeftClick() { + finish() + } - binding.titleInclude.searchTextView.setOnClickListener { - page = 1 - keywords = binding.titleInclude.searchInputView.text.toString() - getAlarmListByPage() - } + override fun onRightClick() { + //条件筛选 + ConditionalFilterDialog.Builder() + .setContext(context) + .setAlarmTypeCollection(dictModels) + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + ConditionalFilterDialog.OnDialogButtonClickListener { + override fun onConfirmClick(type: String) { + alarmViewModel.getAlarmListByPage(context, type, 1) + } + + override fun onCancelClick() {} + }).build().show() + } + }) } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + + //获取报警类型列表 + systemViewModel = ViewModelProvider(this)[SystemViewModel::class.java] + systemViewModel.dictLiveData.observe(this) { + if (it.code == 200) { + dictModels = it.data + } + } + systemViewModel.getSystemDict(this, "alarmType") + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] alarmViewModel.alarmModel.observe(this) { if (it.code == 200) { @@ -204,11 +235,9 @@ getAlarmListByPage() } }) - - binding.goBackButton.setOnClickListener { finish() } } private fun getAlarmListByPage() { - alarmViewModel.getAlarmListByPage(this, keywords, page) + alarmViewModel.getAlarmListByPage(this, "", page) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt index 888f92e..578d8e3 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt @@ -22,9 +22,9 @@ val stateResult = MutableLiveData() val otherStateResult = MutableLiveData() - fun getAlarmListByPage(context: Context, keywords: String, page: Int) = launch({ + fun getAlarmListByPage(context: Context, alarmType: String, page: Int) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getAlarmListByPage(keywords, page) + val response = RetrofitServiceManager.getAlarmListByPage(alarmType, page) when (response.getResponseCode()) { 200 -> { alarmModel.value = gson.fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/vm/SystemViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/SystemViewModel.kt new file mode 100644 index 0000000..44035e9 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/vm/SystemViewModel.kt @@ -0,0 +1,36 @@ +package com.casic.br.operationsite.vm + +import android.content.Context +import androidx.lifecycle.MutableLiveData +import com.casic.br.operationsite.extensions.getResponseCode +import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.SystemDictModel +import com.casic.br.operationsite.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.base.BaseViewModel +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show + +class SystemViewModel : BaseViewModel() { + + private val gson = Gson() + val dictLiveData = MutableLiveData() + + fun getSystemDict(context: Context, dictCode: String) = launch({ + val response = RetrofitServiceManager.getSystemDict(dictCode) + when (response.getResponseCode()) { + 200 -> { + dictLiveData.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + + else -> { + response.getResponseMessage().show(context) + } + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/widgets/ConditionalFilterDialog.kt b/app/src/main/java/com/casic/br/operationsite/widgets/ConditionalFilterDialog.kt new file mode 100644 index 0000000..683f18e --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/widgets/ConditionalFilterDialog.kt @@ -0,0 +1,102 @@ +package com.casic.br.operationsite.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.widget.ArrayAdapter +import com.casic.br.operationsite.databinding.DialogConditionalFilterBinding +import com.casic.br.operationsite.model.SystemDictModel +import com.pengxh.kt.lite.R +import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.initDialogLayoutParams + +class ConditionalFilterDialog private constructor(builder: Builder) : + Dialog(builder.context, R.style.UserDefinedDialogStyle) { + + private val kTag = "ConditionalFilterDialog" + private val context = builder.context + private val dictModels = builder.dictModels + private val positiveBtn = builder.positiveBtn + private val negativeBtn = builder.negativeBtn + private val listener = builder.listener + + class Builder { + lateinit var context: Context + lateinit var dictModels: List + lateinit var positiveBtn: String + lateinit var negativeBtn: String + lateinit var listener: OnDialogButtonClickListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setAlarmTypeCollection(dictModels: List): Builder { + this.dictModels = dictModels + return this + } + + fun setPositiveButton(name: String): Builder { + positiveBtn = name + return this + } + + fun setNegativeButton(name: String): Builder { + negativeBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { + this.listener = listener + return this + } + + fun build(): ConditionalFilterDialog { + return ConditionalFilterDialog(this) + } + } + + private val binding: DialogConditionalFilterBinding by binding() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(0.8f) + setCancelable(false) + setCanceledOnTouchOutside(false) + + if (dictModels.isNotEmpty()) { + val typeArray = ArrayList() + dictModels.forEach { + typeArray.add(it.name) + } + binding.alarmTypeSpinner.adapter = ArrayAdapter( + context, android.R.layout.simple_spinner_item, typeArray + ) + binding.alarmTypeSpinner.setSelection(0) + } + + if (negativeBtn.isNotBlank()) { + binding.dialogCancelButton.text = negativeBtn + } + + binding.dialogCancelButton.setOnClickListener { + listener.onCancelClick() + dismiss() + } + if (positiveBtn.isNotBlank()) { + binding.dialogConfirmButton.text = positiveBtn + } + binding.dialogConfirmButton.setOnClickListener { + val index = binding.alarmTypeSpinner.selectedItemPosition + listener.onConfirmClick(dictModels[index].value) + dismiss() + } + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(type: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml index dbcb6e9..4365604 100644 --- a/app/src/main/res/layout/activity_alarm_list.xml +++ b/app/src/main/res/layout/activity_alarm_list.xml @@ -7,54 +7,44 @@ android:background="@color/mainBackColor" android:orientation="vertical"> - + - + android:layout_weight="1" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - + + + android:layout_height="wrap_content" /> - + android:layout_height="wrap_content" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> - - - - - - - - - - + + + \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9b4acfd..6d3d99d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -131,4 +131,6 @@ implementation("cn.bertsir.zbarLibary:zbarlibary:1.4.2") //图表 implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") + //日期、时间选择器 + implementation("com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.13") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java new file mode 100644 index 0000000..d4b0b00 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/SystemDictModel.java @@ -0,0 +1,73 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class SystemDictModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String name; + private String id; + private String value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index edc5bdf..901c010 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -10,6 +10,7 @@ import retrofit2.http.Multipart import retrofit2.http.POST import retrofit2.http.Part +import retrofit2.http.Path import retrofit2.http.Query import retrofit2.http.QueryMap @@ -48,6 +49,15 @@ suspend fun getUserDetail(@Header("token") token: String): String /** + * 获取字典值 + */ + @GET("/sys/dict/code/{dictCode}") + suspend fun getSystemDict( + @Header("token") token: String, + @Path("dictCode") dictCode: String + ): String + + /** * 实施中列表 */ @GET("/v3/site/listPage") @@ -101,12 +111,11 @@ /** * 报警列表 */ - @GET("/alarm/listPage") + @GET("/v3/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, - @Query("keywords") keywords: String, - @Query("orderBy") orderBy: String, - @Query("sort") sort: String, + @Query("projectId") projectId: String, + @Query("alarmType") alarmType: String, @Query("offset") offset: Int, @Query("limit") limit: Int ): String diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 1e2a78c..57497af 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -3,6 +3,7 @@ import android.util.Log import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.LocaleConstant +import com.casic.br.operationsite.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.pengxh.kt.lite.extensions.timestampToCompleteDate @@ -56,6 +57,13 @@ } /** + * 获取字典值 + */ + suspend fun getSystemDict(dictCode: String): String { + return api.getSystemDict(AuthenticationHelper.token!!, dictCode) + } + + /** * 项目列表 */ suspend fun getProjectListByPage(keywords: String, state: String, page: Int): String { @@ -104,10 +112,12 @@ /** * 报警列表 */ - suspend fun getAlarmListByPage(keywords: String, page: Int): String { + suspend fun getAlarmListByPage(alarmType: String, page: Int): String { return api.getAlarmListByPage( AuthenticationHelper.token!!, - keywords, "alarmTime", "desc", page, + RuntimeCache.projectId, + alarmType, + page, LocaleConstant.PAGE_LIMIT ) } diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 300a75b..cbdf60e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -8,7 +8,10 @@ import com.casic.br.operationsite.extensions.combineImagePath import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.model.AlarmListModel +import com.casic.br.operationsite.model.SystemDictModel import com.casic.br.operationsite.vm.AlarmViewModel +import com.casic.br.operationsite.vm.SystemViewModel +import com.casic.br.operationsite.widgets.ConditionalFilterDialog import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity @@ -21,16 +24,18 @@ import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog import com.pengxh.kt.lite.widget.EmptyView +import com.pengxh.kt.lite.widget.TitleBarView class AlarmListActivity : KotlinBaseActivity() { private val context = this@AlarmListActivity + private lateinit var systemViewModel: SystemViewModel private lateinit var alarmAdapter: NormalRecyclerAdapter private lateinit var alarmViewModel: AlarmViewModel + private var dictModels: MutableList = ArrayList() private var page = 1 private var isRefresh = false private var isLoadMore = false - private var keywords = "" override fun initViewBinding(): ActivityAlarmListBinding { return ActivityAlarmListBinding.inflate(layoutInflater) @@ -38,16 +43,42 @@ override fun setupTopBarLayout() { binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor) + binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { + override fun onLeftClick() { + finish() + } - binding.titleInclude.searchTextView.setOnClickListener { - page = 1 - keywords = binding.titleInclude.searchInputView.text.toString() - getAlarmListByPage() - } + override fun onRightClick() { + //条件筛选 + ConditionalFilterDialog.Builder() + .setContext(context) + .setAlarmTypeCollection(dictModels) + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + ConditionalFilterDialog.OnDialogButtonClickListener { + override fun onConfirmClick(type: String) { + alarmViewModel.getAlarmListByPage(context, type, 1) + } + + override fun onCancelClick() {} + }).build().show() + } + }) } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) + + //获取报警类型列表 + systemViewModel = ViewModelProvider(this)[SystemViewModel::class.java] + systemViewModel.dictLiveData.observe(this) { + if (it.code == 200) { + dictModels = it.data + } + } + systemViewModel.getSystemDict(this, "alarmType") + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] alarmViewModel.alarmModel.observe(this) { if (it.code == 200) { @@ -204,11 +235,9 @@ getAlarmListByPage() } }) - - binding.goBackButton.setOnClickListener { finish() } } private fun getAlarmListByPage() { - alarmViewModel.getAlarmListByPage(this, keywords, page) + alarmViewModel.getAlarmListByPage(this, "", page) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt index 888f92e..578d8e3 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt @@ -22,9 +22,9 @@ val stateResult = MutableLiveData() val otherStateResult = MutableLiveData() - fun getAlarmListByPage(context: Context, keywords: String, page: Int) = launch({ + fun getAlarmListByPage(context: Context, alarmType: String, page: Int) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getAlarmListByPage(keywords, page) + val response = RetrofitServiceManager.getAlarmListByPage(alarmType, page) when (response.getResponseCode()) { 200 -> { alarmModel.value = gson.fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/vm/SystemViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/SystemViewModel.kt new file mode 100644 index 0000000..44035e9 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/vm/SystemViewModel.kt @@ -0,0 +1,36 @@ +package com.casic.br.operationsite.vm + +import android.content.Context +import androidx.lifecycle.MutableLiveData +import com.casic.br.operationsite.extensions.getResponseCode +import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.SystemDictModel +import com.casic.br.operationsite.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.base.BaseViewModel +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show + +class SystemViewModel : BaseViewModel() { + + private val gson = Gson() + val dictLiveData = MutableLiveData() + + fun getSystemDict(context: Context, dictCode: String) = launch({ + val response = RetrofitServiceManager.getSystemDict(dictCode) + when (response.getResponseCode()) { + 200 -> { + dictLiveData.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + + else -> { + response.getResponseMessage().show(context) + } + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/widgets/ConditionalFilterDialog.kt b/app/src/main/java/com/casic/br/operationsite/widgets/ConditionalFilterDialog.kt new file mode 100644 index 0000000..683f18e --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/widgets/ConditionalFilterDialog.kt @@ -0,0 +1,102 @@ +package com.casic.br.operationsite.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.widget.ArrayAdapter +import com.casic.br.operationsite.databinding.DialogConditionalFilterBinding +import com.casic.br.operationsite.model.SystemDictModel +import com.pengxh.kt.lite.R +import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.initDialogLayoutParams + +class ConditionalFilterDialog private constructor(builder: Builder) : + Dialog(builder.context, R.style.UserDefinedDialogStyle) { + + private val kTag = "ConditionalFilterDialog" + private val context = builder.context + private val dictModels = builder.dictModels + private val positiveBtn = builder.positiveBtn + private val negativeBtn = builder.negativeBtn + private val listener = builder.listener + + class Builder { + lateinit var context: Context + lateinit var dictModels: List + lateinit var positiveBtn: String + lateinit var negativeBtn: String + lateinit var listener: OnDialogButtonClickListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setAlarmTypeCollection(dictModels: List): Builder { + this.dictModels = dictModels + return this + } + + fun setPositiveButton(name: String): Builder { + positiveBtn = name + return this + } + + fun setNegativeButton(name: String): Builder { + negativeBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { + this.listener = listener + return this + } + + fun build(): ConditionalFilterDialog { + return ConditionalFilterDialog(this) + } + } + + private val binding: DialogConditionalFilterBinding by binding() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(0.8f) + setCancelable(false) + setCanceledOnTouchOutside(false) + + if (dictModels.isNotEmpty()) { + val typeArray = ArrayList() + dictModels.forEach { + typeArray.add(it.name) + } + binding.alarmTypeSpinner.adapter = ArrayAdapter( + context, android.R.layout.simple_spinner_item, typeArray + ) + binding.alarmTypeSpinner.setSelection(0) + } + + if (negativeBtn.isNotBlank()) { + binding.dialogCancelButton.text = negativeBtn + } + + binding.dialogCancelButton.setOnClickListener { + listener.onCancelClick() + dismiss() + } + if (positiveBtn.isNotBlank()) { + binding.dialogConfirmButton.text = positiveBtn + } + binding.dialogConfirmButton.setOnClickListener { + val index = binding.alarmTypeSpinner.selectedItemPosition + listener.onConfirmClick(dictModels[index].value) + dismiss() + } + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(type: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml index dbcb6e9..4365604 100644 --- a/app/src/main/res/layout/activity_alarm_list.xml +++ b/app/src/main/res/layout/activity_alarm_list.xml @@ -7,54 +7,44 @@ android:background="@color/mainBackColor" android:orientation="vertical"> - + - + android:layout_weight="1" + android:orientation="vertical"> - + android:layout_height="match_parent" /> - + + + android:layout_height="wrap_content" /> - + android:layout_height="wrap_content" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> - - - - - - - - - - + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_conditional_filter.xml b/app/src/main/res/layout/dialog_conditional_filter.xml new file mode 100644 index 0000000..32d3275 --- /dev/null +++ b/app/src/main/res/layout/dialog_conditional_filter.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + +