控制网接口;项目列表接口修改,及流程修改

main
chenglifeng 7 months ago
parent a9d2f5aedd
commit 7912b9e627
  1. 5
      app/build.gradle
  2. 5
      app/src/main/AndroidManifest.xml
  3. 14
      app/src/main/java/com/project/survey/App.kt
  4. 5
      app/src/main/java/com/project/survey/constants/Constants.kt
  5. 6
      app/src/main/java/com/project/survey/extend/ViewExt.kt
  6. 12
      app/src/main/java/com/project/survey/logic/repository/GlobalRepository.kt
  7. 3
      app/src/main/java/com/project/survey/logic/viewmodel/BaseViewModel.kt
  8. 32
      app/src/main/java/com/project/survey/logic/viewmodel/ControlNetViewModel.kt
  9. 13
      app/src/main/java/com/project/survey/logic/viewmodel/LoginViewModel.kt
  10. 11
      app/src/main/java/com/project/survey/logic/viewmodel/MainViewModel.kt
  11. 12
      app/src/main/java/com/project/survey/logic/viewmodel/ProjectViewModel.kt
  12. 12
      app/src/main/java/com/project/survey/model/LoginBean.kt
  13. 6
      app/src/main/java/com/project/survey/model/ProjectBean.kt
  14. 13
      app/src/main/java/com/project/survey/network/Api.kt
  15. 9
      app/src/main/java/com/project/survey/ui/MainActivity.kt
  16. 25
      app/src/main/java/com/project/survey/ui/SplashActivity.kt
  17. 63
      app/src/main/java/com/project/survey/ui/approval/ApprovalActivity.kt
  18. 58
      app/src/main/java/com/project/survey/ui/controlnet/ControlNetFirstListActivity.kt
  19. 62
      app/src/main/java/com/project/survey/ui/controlnet/ControlNetSpecialListActivity.kt
  20. 110
      app/src/main/java/com/project/survey/ui/controlnet/ControlPointActivity.kt
  21. 9
      app/src/main/java/com/project/survey/ui/home/HomeFragment.kt
  22. 11
      app/src/main/java/com/project/survey/ui/home/InstrumentFragment.kt
  23. 16
      app/src/main/java/com/project/survey/ui/home/MeFragment.kt
  24. 1
      app/src/main/java/com/project/survey/ui/login/LoginActivity.kt
  25. 14
      app/src/main/java/com/project/survey/ui/login/LoginInputCodeActivity.kt
  26. 60
      app/src/main/java/com/project/survey/ui/project/ProjectListActivity.kt
  27. 2
      app/src/main/java/com/project/survey/ui/project/ProjectListFragment.kt
  28. 13
      app/src/main/java/com/project/survey/util/LogoutUtil.kt
  29. 40
      app/src/main/java/com/project/survey/widget/SearchWidget.kt
  30. 2
      app/src/main/res/drawable/bg_search.xml
  31. 18
      app/src/main/res/layout/activity_approval.xml
  32. 16
      app/src/main/res/layout/activity_control_net_list.xml
  33. 78
      app/src/main/res/layout/activity_project_list.xml
  34. 2
      app/src/main/res/layout/fragment_me.xml
  35. 44
      app/src/main/res/layout/widget_search.xml
  36. 4
      app/src/main/res/values/attr.xml
  37. 4
      app/src/main/res/values/strings.xml

@ -231,5 +231,10 @@ dependencies {
implementation 'com.tencent:mmkv:1.3.9' implementation 'com.tencent:mmkv:1.3.9'
// BRVAH https://github.com/CymChad/BaseRecyclerViewAdapterHelper/wiki // BRVAH https://github.com/CymChad/BaseRecyclerViewAdapterHelper/wiki
implementation "io.github.cymchad:BaseRecyclerViewAdapterHelper4:4.1.4" implementation "io.github.cymchad:BaseRecyclerViewAdapterHelper4:4.1.4"
// https://github.com/scwang90/SmartRefreshLayout
implementation 'io.github.scwang90:refresh-layout-kernel:2.0.6' //
implementation 'io.github.scwang90:refresh-header-material:2.0.6' //
// implementation 'io.github.scwang90:refresh-header-classics:2.0.6' //
implementation 'io.github.scwang90:refresh-footer-classics:2.0.6' //
} }

@ -59,6 +59,7 @@
android:name=".ui.MainActivity" android:name=".ui.MainActivity"
android:exported="true" android:exported="true"
android:label="@string/app_name" android:label="@string/app_name"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize|stateHidden" /> android:windowSoftInputMode="adjustResize|stateHidden" />
<activity <activity
@ -118,6 +119,10 @@
android:exported="true" android:exported="true"
android:label="@string/dedicated_control_network" android:label="@string/dedicated_control_network"
android:windowSoftInputMode="adjustResize|stateHidden" /> android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name=".ui.controlnet.ControlPointActivity"
android:exported="true"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity <activity
android:name=".ui.instrument.satellitosis.SatelliteStatusActivity" android:name=".ui.instrument.satellitosis.SatelliteStatusActivity"
android:exported="true" android:exported="true"

@ -1,5 +1,6 @@
package com.project.survey package com.project.survey
import android.content.Context
import android.util.Log import android.util.Log
import blankj.utilcode.util.Utils import blankj.utilcode.util.Utils
import com.bingce.AppChannel import com.bingce.AppChannel
@ -18,6 +19,10 @@ import com.bingce.device.DeviceProgressDialogBuilderImpl
import com.bingce.rtk.command.RTK import com.bingce.rtk.command.RTK
import com.bingce.utils.CoordinatorSystemNotifierImpl import com.bingce.utils.CoordinatorSystemNotifierImpl
import com.bingce.utils.ThreadPoolUtil import com.bingce.utils.ThreadPoolUtil
import com.scwang.smart.refresh.footer.ClassicsFooter
import com.scwang.smart.refresh.header.MaterialHeader
import com.scwang.smart.refresh.layout.SmartRefreshLayout
import com.scwang.smart.refresh.layout.api.RefreshLayout
import com.tencent.mmkv.MMKV import com.tencent.mmkv.MMKV
import io.reactivex.plugins.RxJavaPlugins import io.reactivex.plugins.RxJavaPlugins
import org.polaric.colorful.Colorful import org.polaric.colorful.Colorful
@ -58,6 +63,15 @@ class App : BaseApp() {
Utils.init(this) Utils.init(this)
initDatabase() initDatabase()
initDevice() initDevice()
// 设置全局的 Header 构建器
SmartRefreshLayout.setDefaultRefreshHeaderCreator { context: Context?, _: RefreshLayout? ->
MaterialHeader(context)
}
// 设置全局的 Footer 构建器
SmartRefreshLayout.setDefaultRefreshFooterCreator { context: Context?, _: RefreshLayout? ->
ClassicsFooter(context).setDrawableSize(20f)
}
} }
private fun initDatabase() { private fun initDatabase() {

@ -1,6 +1,7 @@
package com.project.survey.constants package com.project.survey.constants
object Constants { object Constants {
const val PAGE_SIZE = 30
} }
@ -8,12 +9,14 @@ object SPConstants {
const val TOKEN = "token" const val TOKEN = "token"
const val ACCOUNT = "account" const val ACCOUNT = "account"
const val MOBILE_PHONE = "mobilePhone" const val MOBILE_PHONE = "mobilePhone"
const val PERSON_ID = "personId"
const val RECENTLY_PROJECT = "recentlyProject" const val RECENTLY_PROJECT = "recentlyProject"
const val PROJECT_ID = "projectId" const val PROJECT_ID = "projectId"
const val PROJECT_NAME = "projectName" const val PROJECT_NAME = "projectName"
const val CURRENT_PROJECT = "currentProject"
} }
object EventConstants{ object EventConstants {
const val LOGIN_STATUS = "loginStatus" const val LOGIN_STATUS = "loginStatus"
} }

@ -1,6 +1,7 @@
package com.project.survey.extend package com.project.survey.extend
import android.view.View import android.view.View
import com.scwang.smart.refresh.layout.SmartRefreshLayout
/** /**
@ -24,4 +25,9 @@ fun View.isVisibleOrInvisible(visible: Boolean){
fun View.isVisibleOrGone(visible: Boolean){ fun View.isVisibleOrGone(visible: Boolean){
this.visibility = if (visible) View.VISIBLE else View.GONE this.visibility = if (visible) View.VISIBLE else View.GONE
}
fun SmartRefreshLayout.smartDismiss() {
finishRefresh(0)
finishLoadMore(0)
} }

@ -0,0 +1,12 @@
package com.project.survey.logic.repository
import androidx.lifecycle.MutableLiveData
import com.project.survey.model.LoginBean
import com.project.survey.model.ProjectBean
class GlobalRepository {
val loginBean = MutableLiveData<LoginBean>()
val currentProject = MutableLiveData<ProjectBean>()
}

@ -7,6 +7,7 @@ import blankj.utilcode.util.LogUtils
import com.project.survey.extend.toast import com.project.survey.extend.toast
import com.project.survey.logic.event.LiveBus import com.project.survey.logic.event.LiveBus
import com.project.survey.logic.event.Message import com.project.survey.logic.event.Message
import com.project.survey.logic.repository.GlobalRepository
import com.project.survey.network.ERROR import com.project.survey.network.ERROR
import com.project.survey.ui.login.LoginActivity import com.project.survey.ui.login.LoginActivity
import com.project.survey.util.ActivityNavUtil import com.project.survey.util.ActivityNavUtil
@ -19,6 +20,8 @@ import retrofit2.HttpException
open class BaseViewModel : ViewModel() { open class BaseViewModel : ViewModel() {
val repo: GlobalRepository = GlobalRepository()
val msgEvent by lazy { LiveBus.getInstance().with(Message::class.java) } val msgEvent by lazy { LiveBus.getInstance().with(Message::class.java) }
val errorResponse = MutableLiveData<String?>() val errorResponse = MutableLiveData<String?>()

@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.project.survey.constants.SPConstants import com.project.survey.constants.SPConstants
import com.project.survey.logic.bean.ListResult import com.project.survey.logic.bean.ListResult
import com.project.survey.logic.repository.GlobalRepository
import com.project.survey.model.ApprovalBean import com.project.survey.model.ApprovalBean
import com.project.survey.model.ControlNetBean import com.project.survey.model.ControlNetBean
import com.project.survey.model.ControlNetCGBean import com.project.survey.model.ControlNetCGBean
@ -23,15 +24,18 @@ class ControlNetViewModel : BaseViewModel() {
/** /**
* 获取专用控制网列表 * 获取专用控制网列表
*/ */
fun fetchSpecialControlNetList(j_query: String, page: Int = 1) { fun fetchSpecialControlNetList(j_query: String, page: Int = 1, start: Int = 0) {
launch { launch {
val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
val res = val res =
api.fetchSpecialControlNetList( api.fetchSpecialControlNetList(
SPUtils.getString(SPConstants.PROJECT_ID) ?: "", currentProject?.BD_XMXX_ID ?: "",
"BD_KZW", "BD_KZW",
"BD_KZW_ZY", "BD_KZW_ZY",
j_query, j_query,
page page,
start = start
) )
if (res.success) { if (res.success) {
_controlNetListResponse.postValue(res.data) _controlNetListResponse.postValue(res.data)
@ -46,14 +50,17 @@ class ControlNetViewModel : BaseViewModel() {
/** /**
* 获取专用控制网成果列表 * 获取专用控制网成果列表
*/ */
fun fetchSpecialControlNetCGList(j_query: String, page: Int = 1) { fun fetchSpecialControlNetCGList(j_query: String, page: Int = 1, start: Int = 0) {
launch { launch {
var res = api.fetchSpecialControlNetCGList( val currentProject =
SPUtils.getString(SPConstants.PROJECT_ID) ?: "", SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
val res = api.fetchSpecialControlNetCGList(
currentProject?.BD_XMXX_ID ?: "",
"BD_KZWZBCG", "BD_KZWZBCG",
"BD_KZWZBCG_ZY", "BD_KZWZBCG_ZY",
j_query, j_query,
page page,
start = start
) )
if (res.success) { if (res.success) {
_controlNetCGListResponse.postValue(res.data) _controlNetCGListResponse.postValue(res.data)
@ -64,14 +71,17 @@ class ControlNetViewModel : BaseViewModel() {
/** /**
* 获取首级控制网列表 * 获取首级控制网列表
*/ */
fun fetchFirstControlNetList(j_query: String, page: Int = 1) { fun fetchFirstControlNetList(j_query: String, page: Int = 1, start: Int = 0) {
launch { launch {
var res = api.fetchSpecialControlNetCGList( val currentProject =
SPUtils.getString(SPConstants.PROJECT_ID) ?: "", SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
val res = api.fetchSpecialControlNetCGList(
currentProject?.BD_XMXX_ID ?: "",
"BD_KZWZBCG", "BD_KZWZBCG",
"BD_KZWZBCG", "BD_KZWZBCG",
j_query, j_query,
page page,
start = start
) )
if (res.success) { if (res.success) {
_controlNetCGListResponse.postValue(res.data) _controlNetCGListResponse.postValue(res.data)

@ -7,10 +7,12 @@ import com.project.survey.constants.EventConstants
import com.project.survey.constants.SPConstants import com.project.survey.constants.SPConstants
import com.project.survey.model.LoginBean import com.project.survey.model.LoginBean
import com.project.survey.logic.event.Message import com.project.survey.logic.event.Message
import com.project.survey.logic.repository.GlobalRepository
import com.project.survey.network.RetrofitClient import com.project.survey.network.RetrofitClient
import com.project.survey.ui.MainActivity import com.project.survey.ui.MainActivity
import com.project.survey.ui.login.LoginActivity import com.project.survey.ui.login.LoginActivity
import com.project.survey.ui.login.LoginInputCodeActivity import com.project.survey.ui.login.LoginInputCodeActivity
import com.project.survey.ui.project.ProjectListActivity
import com.project.survey.util.SPUtils import com.project.survey.util.SPUtils
class LoginViewModel : BaseViewModel() { class LoginViewModel : BaseViewModel() {
@ -43,18 +45,23 @@ class LoginViewModel : BaseViewModel() {
/** /**
* 外部用户登录 * 外部用户登录
*/ */
fun externalPersonLogin(account: String, password: String, code: String){ fun externalPersonLogin(account: String, password: String, code: String) {
launch { launch {
val res = api.externalPersonLogin(account, password, code) val res = api.externalPersonLogin(account, password, code)
if (res.success) { if (res.success) {
// _externalPersonSMSCodeResponse.postValue(res.data) // _externalPersonSMSCodeResponse.postValue(res.data)
SPUtils.put(SPConstants.TOKEN, res.data.token)
SPUtils.put(SPConstants.ACCOUNT, account) SPUtils.put(SPConstants.ACCOUNT, account)
SPUtils.put(SPConstants.TOKEN, res.data.token)
SPUtils.put(SPConstants.PERSON_ID, res.data.personId)
SPUtils.put(SPConstants.MOBILE_PHONE, res.data.mobilePhone) SPUtils.put(SPConstants.MOBILE_PHONE, res.data.mobilePhone)
msgEvent.postValue(Message(EventConstants.LOGIN_STATUS)) msgEvent.postValue(Message(EventConstants.LOGIN_STATUS))
MainActivity.start() // MainActivity.start()
// 登录成功,进入工程列表页面
ProjectListActivity.start()
ActivityUtils.finishActivity(LoginActivity::class.java) ActivityUtils.finishActivity(LoginActivity::class.java)
ActivityUtils.finishActivity(LoginInputCodeActivity::class.java) ActivityUtils.finishActivity(LoginInputCodeActivity::class.java)
} }

@ -0,0 +1,11 @@
package com.project.survey.logic.viewmodel
import com.project.survey.network.RetrofitClient
class MainViewModel : BaseViewModel() {
val api = RetrofitClient.createApiService()
}

@ -2,9 +2,11 @@ package com.project.survey.logic.viewmodel
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.project.survey.constants.SPConstants
import com.project.survey.model.ApprovalBean import com.project.survey.model.ApprovalBean
import com.project.survey.model.ProjectBean import com.project.survey.model.ProjectBean
import com.project.survey.network.RetrofitClient import com.project.survey.network.RetrofitClient
import com.project.survey.util.SPUtils
class ProjectViewModel : BaseViewModel() { class ProjectViewModel : BaseViewModel() {
@ -18,9 +20,9 @@ class ProjectViewModel : BaseViewModel() {
/** /**
* 获取用户在工作的所以项目的信息 * 获取用户在工作的所以项目的信息
*/ */
fun getAllProjectIDByAccount(account: String) { fun fetchProjectList() {
launch { launch {
val res = api.getAllProjectIDByAccount(account) val res = api.fetchProjectList(SPUtils.getString(SPConstants.PERSON_ID) ?: "")
if (res.success) { if (res.success) {
_projectResponse.postValue(res.data) _projectResponse.postValue(res.data)
} }
@ -34,9 +36,11 @@ class ProjectViewModel : BaseViewModel() {
/** /**
* 获取流程审批列表 * 获取流程审批列表
*/ */
fun fetchWorkTask(projectId: String, type: String, page: Int = 1) { fun fetchWorkTask(type: String, page: Int = 1) {
launch { launch {
val res = api.fetchWorkTask(projectId, type, page) val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
val res = api.fetchWorkTask(currentProject?.BD_XMXX_ID ?: "", type, page)
if (res.success) { if (res.success) {
_workTaskListResponse.postValue(res.data.data.rows) _workTaskListResponse.postValue(res.data.data.rows)
} }

@ -1,6 +1,14 @@
package com.project.survey.model package com.project.survey.model
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
/**
* {"token":"a52e6940-34c9-4f93-8a60-5b13bf25693f","mobilePhone":"15903684576","personId":"fqwerfqergqwer"}
*/
@Parcelize
data class LoginBean( data class LoginBean(
val token: String, val token: String,
val mobilePhone: String val mobilePhone: String,
) val personId: String
) : Parcelable

@ -1,5 +1,8 @@
package com.project.survey.model package com.project.survey.model
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
//{ //{
// "XMXX_PILENO": "20221111", // "XMXX_PILENO": "20221111",
// "XMXX_INDUSTRYTYPE": "水电工程", // "XMXX_INDUSTRYTYPE": "水电工程",
@ -27,6 +30,7 @@ package com.project.survey.model
// "SY_ORG_ID": null, // "SY_ORG_ID": null,
// "XMXX_NAME": "测试项目" // "XMXX_NAME": "测试项目"
//} //}
@Parcelize
data class ProjectBean( data class ProjectBean(
val XMXX_NAME: String, //项目名称 val XMXX_NAME: String, //项目名称
val XMXX_CODE: String, //项目编号 val XMXX_CODE: String, //项目编号
@ -40,4 +44,4 @@ data class ProjectBean(
val XMXX_FILE: String?, //项目图片 val XMXX_FILE: String?, //项目图片
val XMXX_DESCRIPTION: String?, //项目图片 val XMXX_DESCRIPTION: String?, //项目图片
val BD_XMXX_ID: String?, val BD_XMXX_ID: String?,
) ) : Parcelable

@ -1,7 +1,6 @@
package com.project.survey.network package com.project.survey.network
import com.project.survey.logic.bean.ListResult import com.project.survey.logic.bean.ListResult
import com.project.survey.model.ApprovalBean
import com.project.survey.model.ApprovalResponse import com.project.survey.model.ApprovalResponse
import com.project.survey.model.ControlNetBean import com.project.survey.model.ControlNetBean
import com.project.survey.model.ControlNetCGBean import com.project.survey.model.ControlNetCGBean
@ -48,9 +47,9 @@ interface Api {
/** /**
* 获取用户可访问的所有项目的信息 * 获取用户可访问的所有项目的信息
*/ */
@GET("je/project/getAllProjectIDByAccount") @GET("je/project/getAllProjectIDByPersonId")
suspend fun getAllProjectIDByAccount( suspend fun fetchProjectList(
@Query("account") account: String @Query("personId") personId: String
): HttpResult<List<ProjectBean>> ): HttpResult<List<ProjectBean>>
// /** // /**
@ -95,7 +94,8 @@ interface Api {
@Field("funcCode") funcCode: String, @Field("funcCode") funcCode: String,
@Field("j_query") j_query: String, @Field("j_query") j_query: String,
@Field("page") page: Int, @Field("page") page: Int,
@Field("limit") limit: Int = 30 @Field("limit") limit: Int = 30,
@Field("start") start: Int = 0
): HttpResult<ListResult<ControlNetBean>> ): HttpResult<ListResult<ControlNetBean>>
/** /**
@ -110,6 +110,7 @@ interface Api {
@Field("funcCode") funcCode: String, @Field("funcCode") funcCode: String,
@Field("j_query") j_query: String = "", @Field("j_query") j_query: String = "",
@Field("page") page: Int, @Field("page") page: Int,
@Field("limit") limit: Int = 30 @Field("limit") limit: Int = 30,
@Field("start") start: Int = 0
): HttpResult<ListResult<ControlNetCGBean>> ): HttpResult<ListResult<ControlNetCGBean>>
} }

@ -1,7 +1,9 @@
package com.project.survey.ui package com.project.survey.ui
import androidx.activity.viewModels
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentPagerAdapter import androidx.fragment.app.FragmentPagerAdapter
import androidx.fragment.app.viewModels
import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager
import blankj.utilcode.util.AppUtils import blankj.utilcode.util.AppUtils
import com.bingce.AppChannel import com.bingce.AppChannel
@ -11,12 +13,16 @@ import com.bingce.utils.RegisterUtil
import com.bingce.utils.SdkUtils import com.bingce.utils.SdkUtils
import com.flyco.tablayout.listener.OnTabSelectListener import com.flyco.tablayout.listener.OnTabSelectListener
import com.project.survey.R import com.project.survey.R
import com.project.survey.constants.SPConstants
import com.project.survey.databinding.ActivityMainBinding import com.project.survey.databinding.ActivityMainBinding
import com.project.survey.logic.viewmodel.MainViewModel
import com.project.survey.model.ProjectBean
import com.project.survey.ui.base.BaseBindingActivity import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.ui.home.HomeFragment import com.project.survey.ui.home.HomeFragment
import com.project.survey.ui.home.InstrumentFragment import com.project.survey.ui.home.InstrumentFragment
import com.project.survey.ui.home.MeFragment import com.project.survey.ui.home.MeFragment
import com.project.survey.util.ActivityNavUtil import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.SPUtils
/** /**
* 主页 * 主页
@ -31,6 +37,8 @@ class MainActivity : BaseBindingActivity<ActivityMainBinding>() {
override fun getBinding(): ActivityMainBinding = ActivityMainBinding.inflate(layoutInflater) override fun getBinding(): ActivityMainBinding = ActivityMainBinding.inflate(layoutInflater)
private val viewModel: MainViewModel by viewModels()
override fun initView() { override fun initView() {
SdkUtils.verify( SdkUtils.verify(
this, this,
@ -50,6 +58,7 @@ class MainActivity : BaseBindingActivity<ActivityMainBinding>() {
} }
override fun initData() { override fun initData() {
} }
override fun initListener() { override fun initListener() {

@ -1,9 +1,15 @@
package com.project.survey.ui package com.project.survey.ui
import androidx.activity.viewModels
import androidx.fragment.app.viewModels
import com.project.survey.constants.SPConstants import com.project.survey.constants.SPConstants
import com.project.survey.databinding.ActivitySplashBinding import com.project.survey.databinding.ActivitySplashBinding
import com.project.survey.logic.viewmodel.MainViewModel
import com.project.survey.model.LoginBean
import com.project.survey.model.ProjectBean
import com.project.survey.ui.base.BaseBindingActivity import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.ui.login.LoginActivity import com.project.survey.ui.login.LoginActivity
import com.project.survey.ui.project.ProjectListActivity
import com.project.survey.util.SPUtils import com.project.survey.util.SPUtils
/** /**
@ -13,6 +19,8 @@ class SplashActivity : BaseBindingActivity<ActivitySplashBinding>() {
override fun getBinding(): ActivitySplashBinding = ActivitySplashBinding.inflate(layoutInflater) override fun getBinding(): ActivitySplashBinding = ActivitySplashBinding.inflate(layoutInflater)
private val viewModel: MainViewModel by viewModels()
override fun initView() { override fun initView() {
} }
@ -21,7 +29,22 @@ class SplashActivity : BaseBindingActivity<ActivitySplashBinding>() {
if (SPUtils.getString(SPConstants.TOKEN).isNullOrBlank()) { if (SPUtils.getString(SPConstants.TOKEN).isNullOrBlank()) {
LoginActivity.start() LoginActivity.start()
} else { } else {
MainActivity.start() val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
// SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
// ?.let { project ->
// viewModel.repo.currentProject.postValue(project)
// MainActivity.start()
// } ?: {
// //未选择工程
// ProjectListActivity.start()
// }
if (currentProject == null) {
//未选择工程
ProjectListActivity.start()
} else {
MainActivity.start()
}
} }
finish() finish()
} }

@ -6,21 +6,22 @@ import com.bingce.surveyor.agentweb.AgentWebActivity
import com.project.survey.BuildConfig import com.project.survey.BuildConfig
import com.project.survey.R import com.project.survey.R
import com.project.survey.constants.SPConstants import com.project.survey.constants.SPConstants
import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.databinding.ActivityApprovalBinding import com.project.survey.databinding.ActivityApprovalBinding
import com.project.survey.extend.toast import com.project.survey.extend.smartDismiss
import com.project.survey.logic.viewmodel.ProjectViewModel import com.project.survey.logic.viewmodel.ProjectViewModel
import com.project.survey.ui.approval.adapter.ApprovalAdapter import com.project.survey.ui.approval.adapter.ApprovalAdapter
import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.util.ActivityNavUtil import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.SPUtils import com.project.survey.util.SPUtils
import com.project.survey.util.param.Param import com.project.survey.util.param.Param
import com.project.survey.widget.LoadingDialog
import com.project.survey.widget.decoration.TransparentDividerDecoration import com.project.survey.widget.decoration.TransparentDividerDecoration
import com.scwang.smart.refresh.layout.api.RefreshLayout
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
/** /**
* 待处理已处理已发起 * 待处理已处理已发起
*/ */
class ApprovalActivity : BaseBindingActivity<ActivityApprovalBinding>() { class ApprovalActivity : BaseBindingActivity<ActivityApprovalBinding>(), OnRefreshLoadMoreListener {
companion object { companion object {
const val PI_PREAPPROV = "PI_PREAPPROV"//待处理 const val PI_PREAPPROV = "PI_PREAPPROV"//待处理
@ -44,14 +45,17 @@ class ApprovalActivity : BaseBindingActivity<ActivityApprovalBinding>() {
private lateinit var type: String private lateinit var type: String
private val adapter by lazy { ApprovalAdapter() } private val adapter by lazy { ApprovalAdapter() }
private var currentPage = 1
override fun initView() { override fun initView() {
val title = when (type) { immersionToolbar(
PI_PREAPPROV -> "待处理" mBinding.ilToolBar.toolbar,
PI_APPROVED -> "已处理" when (type) {
else -> "已发起" PI_PREAPPROV -> "待处理"
} PI_APPROVED -> "已处理"
immersionToolbar(mBinding.ilToolBar.toolbar, title) else -> "已发起"
}
)
// val beginTransaction = supportFragmentManager.beginTransaction() // val beginTransaction = supportFragmentManager.beginTransaction()
// val fragemnt = when (type) { // val fragemnt = when (type) {
// PI_PREAPPROV -> ApprovalWaitFragment() // PI_PREAPPROV -> ApprovalWaitFragment()
@ -64,6 +68,7 @@ class ApprovalActivity : BaseBindingActivity<ActivityApprovalBinding>() {
// beginTransaction.replace(R.id.container, fragemnt) // beginTransaction.replace(R.id.container, fragemnt)
// beginTransaction.commit() // beginTransaction.commit()
mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(this)
mBinding.recyclerView.addItemDecoration(TransparentDividerDecoration(this)) mBinding.recyclerView.addItemDecoration(TransparentDividerDecoration(this))
mBinding.recyclerView.adapter = adapter mBinding.recyclerView.adapter = adapter
adapter.isStateViewEnable = true adapter.isStateViewEnable = true
@ -71,12 +76,29 @@ class ApprovalActivity : BaseBindingActivity<ActivityApprovalBinding>() {
} }
override fun initData() { override fun initData() {
viewModel.errorResponse.observe(this){ viewModel.errorResponse.observe(this) {
mBinding.smartRefreshLayout.smartDismiss()
} }
viewModel.workTaskListResponse.observe(this) { viewModel.workTaskListResponse.observe(this) {
adapter.submitList(it, type) mBinding.smartRefreshLayout.smartDismiss()
if (currentPage == 1) {
adapter.submitList(it, type)
if (it.isEmpty()) {
mBinding.smartRefreshLayout.finishLoadMoreWithNoMoreData()
adapter.setStateViewLayout(this, R.layout.layout_no_data)
} else {
currentPage++
}
} else {
if (it.isEmpty()) {
mBinding.smartRefreshLayout.finishLoadMoreWithNoMoreData()
} else {
adapter.addAll(it)
currentPage++
}
}
} }
viewModel.fetchWorkTask(SPUtils.getString(SPConstants.PROJECT_ID) ?: "", type)
// if (type == PI_PREAPPROV) { // if (type == PI_PREAPPROV) {
// viewModel.fetchWorkTask(SPUtils.getString(SPConstants.PROJECT_ID) ?: "", type) // viewModel.fetchWorkTask(SPUtils.getString(SPConstants.PROJECT_ID) ?: "", type)
// } else if(type == PI_APPROVED) { // } else if(type == PI_APPROVED) {
@ -86,11 +108,24 @@ class ApprovalActivity : BaseBindingActivity<ActivityApprovalBinding>() {
// } // }
} }
private fun fetchData() {
viewModel.fetchWorkTask(type)
}
override fun onRefresh(refreshLayout: RefreshLayout) {
currentPage = 1
fetchData()
}
override fun onLoadMore(refreshLayout: RefreshLayout) {
fetchData()
}
override fun initListener() { override fun initListener() {
adapter.setOnItemClickListener { _, _, position -> adapter.setOnItemClickListener { _, _, position ->
adapter.getItem(position)?.let { bean -> adapter.getItem(position)?.let { bean ->
// http://10.190.183.37/app/micro/func/#/pages/func/form/{功能编码}/{流程ID}?authorization={登录token}&appId=2024-0926-1104-0165 // http://10.190.183.37/app/micro/func/#/pages/func/form/{功能编码}/{流程ID}?authorization={登录token}&appId=2024-0926-1104-0165
val token = SPUtils.getString(SPConstants.TOKEN)?:"" val token = SPUtils.getString(SPConstants.TOKEN) ?: ""
val url = val url =
BuildConfig.BASE_URL + "app/micro/func/#/pages/func/form/${bean.funcCode}/${bean.pkValue}?authorization=${token}&appId=2024-0926-1104-0165" BuildConfig.BASE_URL + "app/micro/func/#/pages/func/form/${bean.funcCode}/${bean.pkValue}?authorization=${token}&appId=2024-0926-1104-0165"
AgentWebActivity.navigation2(this, Uri.parse(url)) AgentWebActivity.navigation2(this, Uri.parse(url))

@ -1,24 +1,24 @@
package com.project.survey.ui.controlnet package com.project.survey.ui.controlnet
import android.content.Context
import android.content.Intent
import androidx.activity.viewModels import androidx.activity.viewModels
import com.project.survey.R import com.project.survey.R
import com.project.survey.adapter.ControlNetFirstListAdapter import com.project.survey.constants.Constants
import com.project.survey.databinding.ActivityControlNetListBinding import com.project.survey.databinding.ActivityControlNetListBinding
import com.project.survey.extend.smartDismiss
import com.project.survey.logic.viewmodel.ControlNetViewModel import com.project.survey.logic.viewmodel.ControlNetViewModel
import com.project.survey.model.ControlNetListBean
import com.project.survey.model.ControlNetVersionBean import com.project.survey.model.ControlNetVersionBean
import com.project.survey.ui.base.BaseBindingActivity import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.ui.controlnet.adapter.ControlNetFirstAdapter import com.project.survey.ui.controlnet.adapter.ControlNetFirstAdapter
import com.project.survey.util.ActivityNavUtil import com.project.survey.util.ActivityNavUtil
import com.project.survey.widget.decoration.TransparentDividerDecoration import com.project.survey.widget.decoration.TransparentDividerDecoration
import com.scwang.smart.refresh.layout.api.RefreshLayout
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
/** /**
* 首级控制网列表 * 首级控制网列表
*/ */
class ControlNetFirstListActivity : BaseBindingActivity<ActivityControlNetListBinding>() { class ControlNetFirstListActivity : BaseBindingActivity<ActivityControlNetListBinding>(),
OnRefreshLoadMoreListener {
companion object { companion object {
fun start() { fun start() {
@ -34,14 +34,18 @@ class ControlNetFirstListActivity : BaseBindingActivity<ActivityControlNetListBi
private val adapter by lazy { ControlNetFirstAdapter() } private val adapter by lazy { ControlNetFirstAdapter() }
private var currentPage = 1 private var currentPage = 1
private var start = 0
override fun initView() { override fun initView() {
immersionToolbar(mBinding.ilToolBar.toolbar, R.string.head_control_network) immersionToolbar(mBinding.ilToolBar.toolbar, R.string.head_control_network)
initVersion() initVersion()
mBinding.recyclerView.addItemDecoration(TransparentDividerDecoration(this))
mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(this)
mBinding.recyclerView.addItemDecoration(TransparentDividerDecoration(this))
mBinding.recyclerView.adapter = adapter mBinding.recyclerView.adapter = adapter
adapter.isStateViewEnable = true
adapter.setStateViewLayout(this, R.layout.layout_no_data)
} }
@ -55,10 +59,46 @@ class ControlNetFirstListActivity : BaseBindingActivity<ActivityControlNetListBi
} }
override fun initData() { override fun initData() {
viewModel.errorResponse.observe(this) {
mBinding.smartRefreshLayout.smartDismiss()
}
viewModel.controlNetCGListResponse.observe(this) { viewModel.controlNetCGListResponse.observe(this) {
adapter.submitList(it.rows) mBinding.smartRefreshLayout.smartDismiss()
if (currentPage == 1) {
adapter.submitList(it.rows)
if (it.rows.isEmpty()) {
mBinding.smartRefreshLayout.finishLoadMoreWithNoMoreData()
adapter.setStateViewLayout(this, R.layout.layout_no_data)
} else {
currentPage++
start += it.totalCount
}
} else {
if (it.rows.isEmpty()) {
mBinding.smartRefreshLayout.finishLoadMoreWithNoMoreData()
} else {
adapter.addAll(it.rows)
currentPage++
start += it.totalCount
}
}
} }
viewModel.fetchFirstControlNetList("", currentPage)
fetchData()
}
private fun fetchData() {
viewModel.fetchFirstControlNetList("", currentPage, start)
}
override fun onRefresh(refreshLayout: RefreshLayout) {
currentPage = 1
start = 0
fetchData()
}
override fun onLoadMore(refreshLayout: RefreshLayout) {
fetchData()
} }
override fun initListener() { override fun initListener() {

@ -4,6 +4,7 @@ import androidx.activity.viewModels
import com.project.survey.R import com.project.survey.R
import com.project.survey.constants.SPConstants import com.project.survey.constants.SPConstants
import com.project.survey.databinding.ActivityControlNetListBinding import com.project.survey.databinding.ActivityControlNetListBinding
import com.project.survey.extend.smartDismiss
import com.project.survey.logic.viewmodel.ControlNetViewModel import com.project.survey.logic.viewmodel.ControlNetViewModel
import com.project.survey.model.ControlNetVersionBean import com.project.survey.model.ControlNetVersionBean
import com.project.survey.ui.base.BaseBindingActivity import com.project.survey.ui.base.BaseBindingActivity
@ -11,11 +12,14 @@ import com.project.survey.ui.controlnet.adapter.ControlNetSpecialAdapter
import com.project.survey.util.ActivityNavUtil import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.SPUtils import com.project.survey.util.SPUtils
import com.project.survey.widget.decoration.TransparentDividerDecoration import com.project.survey.widget.decoration.TransparentDividerDecoration
import com.scwang.smart.refresh.layout.api.RefreshLayout
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
/** /**
* 专用控制网列表 * 专用控制网列表
*/ */
class ControlNetSpecialListActivity : BaseBindingActivity<ActivityControlNetListBinding>() { class ControlNetSpecialListActivity : BaseBindingActivity<ActivityControlNetListBinding>(),
OnRefreshLoadMoreListener {
companion object { companion object {
fun start() { fun start() {
@ -30,11 +34,14 @@ class ControlNetSpecialListActivity : BaseBindingActivity<ActivityControlNetList
private val adapter by lazy { ControlNetSpecialAdapter() } private val adapter by lazy { ControlNetSpecialAdapter() }
private var currentPage = 1 private var currentPage = 1
private var start = 0
override fun initView() { override fun initView() {
immersionToolbar(mBinding.ilToolBar.toolbar, R.string.dedicated_control_network) immersionToolbar(mBinding.ilToolBar.toolbar, R.string.dedicated_control_network)
initVersion() initVersion()
mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(this)
mBinding.recyclerView.addItemDecoration(TransparentDividerDecoration(this)) mBinding.recyclerView.addItemDecoration(TransparentDividerDecoration(this))
mBinding.recyclerView.adapter = adapter mBinding.recyclerView.adapter = adapter
adapter.isStateViewEnable = true adapter.isStateViewEnable = true
@ -42,21 +49,54 @@ class ControlNetSpecialListActivity : BaseBindingActivity<ActivityControlNetList
} }
override fun initData() { override fun initData() {
viewModel.errorResponse.observe(this) {
mBinding.smartRefreshLayout.smartDismiss()
}
viewModel.controlNetListResponse.observe(this) { viewModel.controlNetListResponse.observe(this) {
adapter.submitList(it.rows) mBinding.smartRefreshLayout.smartDismiss()
if (currentPage == 1) {
adapter.submitList(it.rows)
if (it.rows.isEmpty()) {
mBinding.smartRefreshLayout.finishLoadMoreWithNoMoreData()
adapter.setStateViewLayout(this, R.layout.layout_no_data)
} else {
currentPage++
start += it.totalCount
}
} else {
if (it.rows.isEmpty()) {
mBinding.smartRefreshLayout.finishLoadMoreWithNoMoreData()
} else {
adapter.addAll(it.rows)
currentPage++
start += it.totalCount
}
}
} }
//@Field("tableCode") tableCode: String = "BD_KZW",
// * @Field("funcCode") funcCode: String = "BD_KZW_ZY", fetchData()
// * @Field("j_query") j_query: String = "",
// * @Field("page") page: Int,
viewModel.fetchSpecialControlNetList(
"",
currentPage
)
} }
override fun initListener() { private fun fetchData() {
viewModel.fetchSpecialControlNetList("", currentPage, start)
}
override fun onRefresh(refreshLayout: RefreshLayout) {
currentPage = 1
start = 0
fetchData()
}
override fun onLoadMore(refreshLayout: RefreshLayout) {
fetchData()
}
override fun initListener() {
adapter.setOnItemClickListener { _, _, position ->
adapter.getItem(position)?.let { bean ->
ControlPointActivity.start()
}
}
} }
private fun initVersion() { private fun initVersion() {

@ -0,0 +1,110 @@
package com.project.survey.ui.controlnet
import androidx.activity.viewModels
import com.project.survey.R
import com.project.survey.constants.SPConstants
import com.project.survey.databinding.ActivityControlNetListBinding
import com.project.survey.extend.smartDismiss
import com.project.survey.logic.viewmodel.ControlNetViewModel
import com.project.survey.model.ControlNetVersionBean
import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.ui.controlnet.adapter.ControlNetFirstAdapter
import com.project.survey.ui.controlnet.adapter.ControlNetSpecialAdapter
import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.SPUtils
import com.project.survey.widget.decoration.TransparentDividerDecoration
import com.scwang.smart.refresh.layout.api.RefreshLayout
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
/**
* 控制点详情
*/
class ControlPointActivity : BaseBindingActivity<ActivityControlNetListBinding>(),
OnRefreshLoadMoreListener {
companion object {
fun start() {
ActivityNavUtil.startActivity<ControlPointActivity> { }
}
}
override fun getBinding(): ActivityControlNetListBinding =
ActivityControlNetListBinding.inflate(layoutInflater)
private val viewModel: ControlNetViewModel by viewModels()
private val adapter by lazy { ControlNetFirstAdapter() }
private var currentPage = 1
private var start = 0
override fun initView() {
immersionToolbar(mBinding.ilToolBar.toolbar, "控制点详情")
initVersion()
mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(this)
mBinding.recyclerView.addItemDecoration(TransparentDividerDecoration(this))
mBinding.recyclerView.adapter = adapter
adapter.isStateViewEnable = true
adapter.setStateViewLayout(this, R.layout.layout_no_data)
}
override fun initData() {
viewModel.errorResponse.observe(this) {
mBinding.smartRefreshLayout.smartDismiss()
}
viewModel.controlNetCGListResponse.observe(this) {
mBinding.smartRefreshLayout.smartDismiss()
if (currentPage == 1) {
adapter.submitList(it.rows)
if (it.rows.isEmpty()) {
mBinding.smartRefreshLayout.finishLoadMoreWithNoMoreData()
adapter.setStateViewLayout(this, R.layout.layout_no_data)
} else {
currentPage++
start += it.totalCount
}
} else {
if (it.rows.isEmpty()) {
mBinding.smartRefreshLayout.finishLoadMoreWithNoMoreData()
} else {
adapter.addAll(it.rows)
currentPage++
start += it.totalCount
}
}
}
fetchData()
}
private fun fetchData(){
viewModel.fetchSpecialControlNetCGList("", currentPage, start)
}
override fun onRefresh(refreshLayout: RefreshLayout) {
currentPage = 0
start = 0
fetchData()
}
override fun onLoadMore(refreshLayout: RefreshLayout) {
fetchData()
}
override fun initListener() {
}
private fun initVersion() {
val versionList = mutableListOf<ControlNetVersionBean>()
versionList.add(ControlNetVersionBean("版本一"))
versionList.add(ControlNetVersionBean("版本二"))
versionList.add(ControlNetVersionBean("版本三"))
mBinding.ilSearch.spinner.setItems(versionList)
}
}

@ -2,9 +2,12 @@ package com.project.survey.ui.home
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.viewModels
import com.project.survey.constants.SPConstants import com.project.survey.constants.SPConstants
import com.project.survey.databinding.FragmentHomeBinding import com.project.survey.databinding.FragmentHomeBinding
import com.project.survey.extend.setOnClickNoRepeatListener import com.project.survey.extend.setOnClickNoRepeatListener
import com.project.survey.logic.viewmodel.MainViewModel
import com.project.survey.model.ProjectBean
import com.project.survey.ui.approval.ApprovalActivity import com.project.survey.ui.approval.ApprovalActivity
import com.project.survey.ui.base.BaseBindingFragment import com.project.survey.ui.base.BaseBindingFragment
import com.project.survey.ui.controlnet.ControlNetFirstListActivity import com.project.survey.ui.controlnet.ControlNetFirstListActivity
@ -22,11 +25,15 @@ class HomeFragment : BaseBindingFragment<FragmentHomeBinding>() {
return FragmentHomeBinding.inflate(inflater, container, false) return FragmentHomeBinding.inflate(inflater, container, false)
} }
private val viewModel: MainViewModel by viewModels()
override fun initView() { override fun initView() {
mBinding.tvProject.text = SPUtils.getString(SPConstants.PROJECT_NAME)
} }
override fun initData() { override fun initData() {
val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
mBinding.tvProject.text = currentProject?.XMXX_NAME
// mBinding.itemToBeProcessed.setBadge(4) // mBinding.itemToBeProcessed.setBadge(4)
} }

@ -3,6 +3,7 @@ package com.project.survey.ui.home
import android.content.Intent import android.content.Intent
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.viewModels
import blankj.utilcode.util.AppUtils import blankj.utilcode.util.AppUtils
import com.bingce.device.Device import com.bingce.device.Device
import com.bingce.device.enums.ConnectTypeEnum import com.bingce.device.enums.ConnectTypeEnum
@ -12,9 +13,12 @@ import com.bingce.device.ui.ConnectTSActivity
import com.bingce.rtk.command.RTK import com.bingce.rtk.command.RTK
import com.bingce.rtk.config.GnssConfigManager import com.bingce.rtk.config.GnssConfigManager
import com.project.survey.R import com.project.survey.R
import com.project.survey.constants.SPConstants
import com.project.survey.databinding.FragmentInstrumentBinding import com.project.survey.databinding.FragmentInstrumentBinding
import com.project.survey.extend.setOnClickNoRepeatListener import com.project.survey.extend.setOnClickNoRepeatListener
import com.project.survey.extend.toast import com.project.survey.extend.toast
import com.project.survey.logic.viewmodel.MainViewModel
import com.project.survey.model.ProjectBean
import com.project.survey.ui.base.BaseBindingFragment import com.project.survey.ui.base.BaseBindingFragment
import com.project.survey.ui.instrument.basestationtranslation.RtkBaseCorrectActivity import com.project.survey.ui.instrument.basestationtranslation.RtkBaseCorrectActivity
import com.project.survey.ui.instrument.coordinatesystem.BingCeCoordinateSystemActivity import com.project.survey.ui.instrument.coordinatesystem.BingCeCoordinateSystemActivity
@ -23,6 +27,7 @@ import com.project.survey.ui.instrument.mobilestationmode.base.RtkPointCorrectAc
import com.project.survey.ui.instrument.satellitosis.SatelliteStatusActivity import com.project.survey.ui.instrument.satellitosis.SatelliteStatusActivity
import com.project.survey.ui.instrument.setupstation.InstrumentSetFragmentSetupStationTypeUtils import com.project.survey.ui.instrument.setupstation.InstrumentSetFragmentSetupStationTypeUtils
import com.project.survey.util.ActivityNavUtil import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.SPUtils
/** /**
* 仪器 * 仪器
@ -34,12 +39,16 @@ class InstrumentFragment : BaseBindingFragment<FragmentInstrumentBinding>() {
container: ViewGroup? container: ViewGroup?
): FragmentInstrumentBinding = FragmentInstrumentBinding.inflate(inflater, container, false) ): FragmentInstrumentBinding = FragmentInstrumentBinding.inflate(inflater, container, false)
private val viewModel: MainViewModel by viewModels()
override fun initView() { override fun initView() {
} }
override fun initData() { override fun initData() {
// mBinding.tvProject.text = "哈哈哈哈哈" val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
mBinding.tvProject.text = currentProject?.XMXX_NAME
} }
override fun initListener() { override fun initListener() {

@ -13,11 +13,14 @@ import com.project.survey.databinding.FragmentMeBinding
import com.project.survey.extend.setOnClickNoRepeatListener import com.project.survey.extend.setOnClickNoRepeatListener
import com.project.survey.logic.event.Message import com.project.survey.logic.event.Message
import com.project.survey.logic.viewmodel.LoginViewModel import com.project.survey.logic.viewmodel.LoginViewModel
import com.project.survey.logic.viewmodel.MainViewModel
import com.project.survey.model.ProjectBean
import com.project.survey.ui.MainActivity import com.project.survey.ui.MainActivity
import com.project.survey.ui.base.BaseBindingFragment import com.project.survey.ui.base.BaseBindingFragment
import com.project.survey.ui.login.LoginActivity import com.project.survey.ui.login.LoginActivity
import com.project.survey.ui.project.ProjectListActivity import com.project.survey.ui.project.ProjectListActivity
import com.project.survey.util.ActivityNavUtil import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.LogoutUtil
import com.project.survey.util.SPUtils import com.project.survey.util.SPUtils
/** /**
@ -25,19 +28,20 @@ import com.project.survey.util.SPUtils
*/ */
class MeFragment : BaseBindingFragment<FragmentMeBinding>() { class MeFragment : BaseBindingFragment<FragmentMeBinding>() {
private val viewModel: LoginViewModel by viewModels()
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentMeBinding = override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentMeBinding =
FragmentMeBinding.inflate(inflater, container, false) FragmentMeBinding.inflate(inflater, container, false)
private val viewModel: MainViewModel by viewModels()
override fun initView() { override fun initView() {
} }
override fun initData() { override fun initData() {
val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
mBinding.tvProject.text = currentProject?.XMXX_NAME
mBinding.tvName.text = SPUtils.getString(SPConstants.ACCOUNT) mBinding.tvName.text = SPUtils.getString(SPConstants.ACCOUNT)
// viewModel.msgEvent.observe(this) {
// updateUIByData()
// }
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
mBinding.tvVersion.text = BuildConfig.VERSION_NAME mBinding.tvVersion.text = BuildConfig.VERSION_NAME
} }
@ -58,9 +62,7 @@ class MeFragment : BaseBindingFragment<FragmentMeBinding>() {
.negativeText("取消") .negativeText("取消")
.positiveText("退出") .positiveText("退出")
.onPositive { _, _ -> .onPositive { _, _ ->
SPUtils.removeKey(SPConstants.TOKEN) LogoutUtil.clearSP()
SPUtils.removeKey(SPConstants.ACCOUNT)
SPUtils.removeKey(SPConstants.MOBILE_PHONE)
ActivityNavUtil.finishActivity<MainActivity>() ActivityNavUtil.finishActivity<MainActivity>()
ActivityNavUtil.startActivity<LoginActivity> { } ActivityNavUtil.startActivity<LoginActivity> { }
// viewModel.msgEvent.postValue(Message(EventConstants.LOGIN_STATUS)) // viewModel.msgEvent.postValue(Message(EventConstants.LOGIN_STATUS))

@ -77,7 +77,6 @@ class LoginActivity : BaseBindingActivity<ActivityLoginBinding>() {
} }
if (isOutLogin) { if (isOutLogin) {
// 外部账号登录 // 外部账号登录
viewModel.fetchExternalPersonSMSCode(account, password) viewModel.fetchExternalPersonSMSCode(account, password)
} else { } else {
toast("开发中……") toast("开发中……")

@ -38,13 +38,13 @@ class LoginInputCodeActivity : BaseBindingActivity<ActivityLoginInputCodeBinding
override fun initView() { override fun initView() {
immersionToolbar(mBinding.ilToolBar.toolbar) immersionToolbar(mBinding.ilToolBar.toolbar)
if (mobile.length == 11) { // if (mobile.length == 11) {
mBinding.tvTips.text = // mBinding.tvTips.text =
String.format( // String.format(
getString(R.string.the_verification_code_was_sent_for_login), // getString(R.string.the_verification_code_was_sent_for_login),
mobile.replace("(\\d{3})\\d{4}(\\d{4})","$1****$2") // mobile.replace("(\\d{3})\\d{4}(\\d{4})","$1****$2")
) // )
} // }
} }
override fun initData() { override fun initData() {

@ -3,17 +3,26 @@ package com.project.survey.ui.project
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import androidx.activity.viewModels import androidx.activity.viewModels
import com.afollestad.materialdialogs.MaterialDialog
import com.project.survey.R import com.project.survey.R
import com.project.survey.constants.SPConstants import com.project.survey.constants.SPConstants
import com.project.survey.databinding.ActivityProjectListBinding import com.project.survey.databinding.ActivityProjectListBinding
import com.project.survey.extend.smartDismiss
import com.project.survey.extend.toast
import com.project.survey.logic.viewmodel.ProjectViewModel import com.project.survey.logic.viewmodel.ProjectViewModel
import com.project.survey.model.LoginBean
import com.project.survey.ui.MainActivity
import com.project.survey.ui.base.BaseBindingActivity import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.ui.login.LoginActivity
import com.project.survey.ui.project.adapter.ProjectListAdapter import com.project.survey.ui.project.adapter.ProjectListAdapter
import com.project.survey.util.ActivityNavUtil import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.LogoutUtil
import com.project.survey.util.SPUtils import com.project.survey.util.SPUtils
import com.project.survey.widget.decoration.HorDividerDecoration import com.project.survey.widget.decoration.HorDividerDecoration
import com.scwang.smart.refresh.layout.api.RefreshLayout
import com.scwang.smart.refresh.layout.listener.OnRefreshListener
class ProjectListActivity : BaseBindingActivity<ActivityProjectListBinding>() { class ProjectListActivity : BaseBindingActivity<ActivityProjectListBinding>(), OnRefreshListener {
companion object { companion object {
fun start() { fun start() {
@ -28,7 +37,7 @@ class ProjectListActivity : BaseBindingActivity<ActivityProjectListBinding>() {
private val adapter by lazy { ProjectListAdapter() } private val adapter by lazy { ProjectListAdapter() }
override fun initView() { override fun initView() {
immersionToolbar(mBinding.ilToolBar.toolbar, "项目列表") immersionToolbar(mBinding.toolbar, "项目列表")
// ImmersionBar.with(this) // ImmersionBar.with(this)
// .statusBarDarkFont(true) // .statusBarDarkFont(true)
// .titleBarMarginTop(mBinding.ilToolBar.toolbar) // .titleBarMarginTop(mBinding.ilToolBar.toolbar)
@ -39,26 +48,46 @@ class ProjectListActivity : BaseBindingActivity<ActivityProjectListBinding>() {
// mBinding.ilToolBar.toolbar.setTitle("项目列表") // mBinding.ilToolBar.toolbar.setTitle("项目列表")
// mBinding.ilToolBar.toolbar.setTitleTextColor(ContextCompat.getColor(this, R.color.text_color_main)) // mBinding.ilToolBar.toolbar.setTitleTextColor(ContextCompat.getColor(this, R.color.text_color_main))
// initTabLayout() // initTabLayout()
// 搜索
mBinding.searchWidget.setOnEditorSearchListener {
// 搜索 it
}
mBinding.smartRefreshLayout.setOnRefreshListener(this)
mBinding.recyclerView.addItemDecoration(HorDividerDecoration(this)) mBinding.recyclerView.addItemDecoration(HorDividerDecoration(this))
mBinding.recyclerView.setAdapter(adapter) mBinding.recyclerView.setAdapter(adapter)
adapter.isStateViewEnable = true
adapter.setStateViewLayout(this, R.layout.layout_no_data)
} }
override fun initData() { override fun initData() {
viewModel.errorResponse.observe(this) {
mBinding.smartRefreshLayout.smartDismiss()
}
viewModel.projectResponse.observe(this) { viewModel.projectResponse.observe(this) {
mBinding.smartRefreshLayout.smartDismiss()
adapter.submitList(it) adapter.submitList(it)
// TODO 暂时将第一条设置为当前项目
if (it.isNotEmpty()) {
SPUtils.put(SPConstants.PROJECT_ID, it[0].BD_XMXX_ID)
SPUtils.put(SPConstants.PROJECT_NAME, it[0].XMXX_NAME)
}
} }
fetchData()
}
viewModel.getAllProjectIDByAccount(SPUtils.getString(SPConstants.ACCOUNT) ?: "") private fun fetchData() {
viewModel.fetchProjectList()
} }
override fun initListener() { override fun onRefresh(refreshLayout: RefreshLayout) {
fetchData()
}
override fun initListener() {
adapter.setOnItemClickListener { _, _, position ->
adapter.getItem(position)?.let { bean ->
// 进入项目,设置当前项目
SPUtils.put(SPConstants.CURRENT_PROJECT, bean)
MainActivity.start()
ActivityNavUtil.finishActivity<ProjectListActivity>()
}
}
} }
// private fun initTabLayout() { // private fun initTabLayout() {
@ -91,8 +120,19 @@ class ProjectListActivity : BaseBindingActivity<ActivityProjectListBinding>() {
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.menu_activity_project_list_exit) { if (item.itemId == R.id.menu_activity_project_list_exit) {
finish() MaterialDialog.Builder(this)
.title("确定退出吗?")
.negativeText("取消")
.positiveText("退出")
.onPositive { _, _ ->
LogoutUtil.clearSP()
ActivityNavUtil.startActivity<LoginActivity> { }
ActivityNavUtil.finishActivity<ProjectListActivity>()
// viewModel.msgEvent.postValue(Message(EventConstants.LOGIN_STATUS))
}
.show()
} }
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)
} }
} }

@ -57,7 +57,7 @@ class ProjectListFragment : BaseBindingFragment<FragmentProjectListBinding>() {
} }
} }
viewModel.getAllProjectIDByAccount(SPUtils.getString(SPConstants.ACCOUNT) ?: "") viewModel.fetchProjectList()
} }
override fun initListener() { override fun initListener() {

@ -0,0 +1,13 @@
package com.project.survey.util
import com.project.survey.constants.SPConstants
object LogoutUtil {
fun clearSP(){
SPUtils.removeKey(SPConstants.ACCOUNT)
SPUtils.removeKey(SPConstants.TOKEN)
SPUtils.removeKey(SPConstants.MOBILE_PHONE)
SPUtils.removeKey(SPConstants.PERSON_ID)
}
}

@ -0,0 +1,40 @@
package com.project.survey.widget
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.inputmethod.EditorInfo
import androidx.appcompat.widget.LinearLayoutCompat
import com.project.survey.R
import com.project.survey.databinding.WidgetSearchBinding
import com.project.survey.databinding.WidgetSectionItemBinding
import com.project.survey.extend.isVisibleOrGone
import com.project.survey.extend.toast
class SearchWidget @JvmOverloads constructor(
context: Context,
val attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : LinearLayoutCompat(context, attrs, defStyleAttr) {
private val binding: WidgetSearchBinding
init {
binding = WidgetSearchBinding.inflate(LayoutInflater.from(context), this, true)
val typeArray = context.obtainStyledAttributes(attrs, R.styleable.SearchWidget)
binding.etSearch.setHint(typeArray.getString(R.styleable.SearchWidget_sw_hint))
typeArray.recycle()
}
fun setOnEditorSearchListener(onSearch: (String) -> Unit) {
binding.etSearch.setOnEditorActionListener { textView, i, keyEvent ->
if (i == EditorInfo.IME_ACTION_SEARCH) {
onSearch(textView.text.toString())
}
return@setOnEditorActionListener true
}
}
}

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"> android:shape="rectangle">
<corners android:radius="99dp" /> <corners android:radius="15dp" />
<solid android:color="#f2f4f5" /> <solid android:color="#f2f4f5" />
</shape> </shape>

@ -16,12 +16,18 @@
<!-- android:id="@+id/container"--> <!-- android:id="@+id/container"-->
<!-- android:layout_width="match_parent"--> <!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent" />--> <!-- android:layout_height="match_parent" />-->
<androidx.recyclerview.widget.RecyclerView <com.scwang.smart.refresh.layout.SmartRefreshLayout
android:id="@+id/recyclerView" android:id="@+id/smartRefreshLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="2" <androidx.recyclerview.widget.RecyclerView
tools:listitem="@layout/item_approval_approved" /> android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="2"
tools:listitem="@layout/item_approval_approved" />
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
</LinearLayout> </LinearLayout>

@ -13,11 +13,17 @@
android:id="@+id/ilSearch" android:id="@+id/ilSearch"
layout="@layout/item_search_control_net" /> layout="@layout/item_search_control_net" />
<androidx.recyclerview.widget.RecyclerView <com.scwang.smart.refresh.layout.SmartRefreshLayout
android:id="@+id/recyclerView" android:id="@+id/smartRefreshLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
android:padding="@dimen/sw_12dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/sw_12dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
</LinearLayout> </LinearLayout>

@ -1,45 +1,63 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tl="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tl="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"> android:orientation="vertical">
<include <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/ilToolBar" android:id="@+id/toolbar"
layout="@layout/sh_toolbar" /> android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:background="@color/transparent"
app:navigationIcon="@drawable/icon_toolbar_back"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:titleCentered="true"
app:titleTextAppearance="@style/ToolbarTextAppearance" />
<include layout="@layout/item_search" /> <com.project.survey.widget.SearchWidget
android:id="@+id/searchWidget"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:sw_hint="项目名称、项目编号" />
<androidx.recyclerview.widget.RecyclerView <com.scwang.smart.refresh.layout.SmartRefreshLayout
android:id="@+id/recyclerView" android:id="@+id/smartRefreshLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:itemCount="3" app:srlEnableLoadMore="false">
tools:listitem="@layout/item_project_list"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="3"
tools:listitem="@layout/item_project_list" />
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
<!-- <androidx.fragment.app.FragmentContainerView--> <!-- <androidx.fragment.app.FragmentContainerView-->
<!-- android:id="@+id/container"--> <!-- android:id="@+id/container"-->
<!-- android:layout_width="match_parent"--> <!-- android:layout_width="match_parent"-->
<!-- android:layout_height="0dp"--> <!-- android:layout_height="0dp"-->
<!-- android:layout_weight="1" />--> <!-- android:layout_weight="1" />-->
<!-- <com.flyco.tablayout.CommonTabLayout--> <!-- <com.flyco.tablayout.CommonTabLayout-->
<!-- android:id="@+id/tabLayout"--> <!-- android:id="@+id/tabLayout"-->
<!-- android:layout_width="match_parent"--> <!-- android:layout_width="match_parent"-->
<!-- android:layout_height="54dp"--> <!-- android:layout_height="54dp"-->
<!-- android:background="@color/bg_color_main_tab"--> <!-- android:background="@color/bg_color_main_tab"-->
<!-- tl:tl_iconHeight="23dp"--> <!-- tl:tl_iconHeight="23dp"-->
<!-- tl:tl_iconWidth="23dp"--> <!-- tl:tl_iconWidth="23dp"-->
<!-- tl:tl_indicator_height="0dp"--> <!-- tl:tl_indicator_height="0dp"-->
<!-- tl:tl_textSelectColor="@color/text_color_tab_selected"--> <!-- tl:tl_textSelectColor="@color/text_color_tab_selected"-->
<!-- tl:tl_textUnselectColor="@color/text_color_tab_unselected"--> <!-- tl:tl_textUnselectColor="@color/text_color_tab_unselected"-->
<!-- tl:tl_textsize="12sp"--> <!-- tl:tl_textsize="12sp"-->
<!-- tl:tl_underline_color="@color/bg_color_main_underline_color"--> <!-- tl:tl_underline_color="@color/bg_color_main_underline_color"-->
<!-- tl:tl_underline_gravity="TOP"--> <!-- tl:tl_underline_gravity="TOP"-->
<!-- tl:tl_underline_height="0.5dp" />--> <!-- tl:tl_underline_height="0.5dp" />-->
</LinearLayout> </LinearLayout>

@ -28,7 +28,7 @@
tools:text="请登录" /> tools:text="请登录" />
<TextView <TextView
android:id="@+id/tvCompany" android:id="@+id/tvProject"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/sw_6dp" android:layout_marginTop="@dimen/sw_6dp"

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="7dp"
android:background="@drawable/bg_search"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="18dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_search" />
<EditText
android:id="@+id/etSearch"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
android:hint="请输入"
android:imeOptions="actionSearch"
android:inputType="text"
android:paddingHorizontal="6dp"
android:singleLine="true"
android:textColor="@color/text_color_1"
android:textColorHint="@color/text_color_2"
android:textSize="11sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="@drawable/bg_search_shadow_2" />
</LinearLayout>

@ -33,4 +33,8 @@
<attr name="siw_name" format="string|reference" /> <attr name="siw_name" format="string|reference" />
</declare-styleable> </declare-styleable>
<declare-styleable name="SearchWidget">
<attr name="sw_hint" format="string|reference" />
</declare-styleable>
</resources> </resources>

@ -39,8 +39,8 @@
<string name="xui_met_input_error" translatable="false">输入不符合要求!</string> <string name="xui_met_input_error" translatable="false">输入不符合要求!</string>
<string name="xui_met_not_allow_empty" translatable="false">输入不能为空!</string> <string name="xui_met_not_allow_empty" translatable="false">输入不能为空!</string>
<string name="please_input_code">请输入验证码</string> <string name="please_input_code">请输入验证码</string>
<string name="the_verification_code_was_sent_for_login">验证码已发送至%1$s的手机,如您已更换手机,请联系管理员。</string> <!-- <string name="the_verification_code_was_sent_for_login">验证码已发送至%1$s的手机,如您已更换手机,请联系管理员。</string>-->
<!-- <string name="the_verification_code_was_sent_for_login">验证码已发送至您的手机,如您已更换手机,请联系管理员。</string>--> <string name="the_verification_code_was_sent_for_login">验证码已发送至您的手机,如您已更换手机,请联系管理员。</string>
<string name="the_verification_code_was_sent_for_forget_pwd">验证码已发送至%1$s的手机,请输入6位数验证码。</string> <string name="the_verification_code_was_sent_for_forget_pwd">验证码已发送至%1$s的手机,请输入6位数验证码。</string>
<string name="authentication">身份验证</string> <string name="authentication">身份验证</string>
<string name="please_input_username">请输入账号。</string> <string name="please_input_username">请输入账号。</string>

Loading…
Cancel
Save