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

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'
// BRVAH https://github.com/CymChad/BaseRecyclerViewAdapterHelper/wiki
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:exported="true"
android:label="@string/app_name"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
@ -118,6 +119,10 @@
android:exported="true"
android:label="@string/dedicated_control_network"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name=".ui.controlnet.ControlPointActivity"
android:exported="true"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name=".ui.instrument.satellitosis.SatelliteStatusActivity"
android:exported="true"

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

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

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

@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.project.survey.constants.SPConstants
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.ControlNetBean
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 {
val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
val res =
api.fetchSpecialControlNetList(
SPUtils.getString(SPConstants.PROJECT_ID) ?: "",
currentProject?.BD_XMXX_ID ?: "",
"BD_KZW",
"BD_KZW_ZY",
j_query,
page
page,
start = start
)
if (res.success) {
_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 {
var res = api.fetchSpecialControlNetCGList(
SPUtils.getString(SPConstants.PROJECT_ID) ?: "",
val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
val res = api.fetchSpecialControlNetCGList(
currentProject?.BD_XMXX_ID ?: "",
"BD_KZWZBCG",
"BD_KZWZBCG_ZY",
j_query,
page
page,
start = start
)
if (res.success) {
_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 {
var res = api.fetchSpecialControlNetCGList(
SPUtils.getString(SPConstants.PROJECT_ID) ?: "",
val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
val res = api.fetchSpecialControlNetCGList(
currentProject?.BD_XMXX_ID ?: "",
"BD_KZWZBCG",
"BD_KZWZBCG",
j_query,
page
page,
start = start
)
if (res.success) {
_controlNetCGListResponse.postValue(res.data)

@ -7,10 +7,12 @@ import com.project.survey.constants.EventConstants
import com.project.survey.constants.SPConstants
import com.project.survey.model.LoginBean
import com.project.survey.logic.event.Message
import com.project.survey.logic.repository.GlobalRepository
import com.project.survey.network.RetrofitClient
import com.project.survey.ui.MainActivity
import com.project.survey.ui.login.LoginActivity
import com.project.survey.ui.login.LoginInputCodeActivity
import com.project.survey.ui.project.ProjectListActivity
import com.project.survey.util.SPUtils
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 {
val res = api.externalPersonLogin(account, password, code)
if (res.success) {
// _externalPersonSMSCodeResponse.postValue(res.data)
SPUtils.put(SPConstants.TOKEN, res.data.token)
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)
msgEvent.postValue(Message(EventConstants.LOGIN_STATUS))
MainActivity.start()
// MainActivity.start()
// 登录成功,进入工程列表页面
ProjectListActivity.start()
ActivityUtils.finishActivity(LoginActivity::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.MutableLiveData
import com.project.survey.constants.SPConstants
import com.project.survey.model.ApprovalBean
import com.project.survey.model.ProjectBean
import com.project.survey.network.RetrofitClient
import com.project.survey.util.SPUtils
class ProjectViewModel : BaseViewModel() {
@ -18,9 +20,9 @@ class ProjectViewModel : BaseViewModel() {
/**
* 获取用户在工作的所以项目的信息
*/
fun getAllProjectIDByAccount(account: String) {
fun fetchProjectList() {
launch {
val res = api.getAllProjectIDByAccount(account)
val res = api.fetchProjectList(SPUtils.getString(SPConstants.PERSON_ID) ?: "")
if (res.success) {
_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 {
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) {
_workTaskListResponse.postValue(res.data.data.rows)
}

@ -1,6 +1,14 @@
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(
val token: String,
val mobilePhone: String
)
val mobilePhone: String,
val personId: String
) : Parcelable

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

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

@ -1,7 +1,9 @@
package com.project.survey.ui
import androidx.activity.viewModels
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentPagerAdapter
import androidx.fragment.app.viewModels
import androidx.viewpager.widget.ViewPager
import blankj.utilcode.util.AppUtils
import com.bingce.AppChannel
@ -11,12 +13,16 @@ import com.bingce.utils.RegisterUtil
import com.bingce.utils.SdkUtils
import com.flyco.tablayout.listener.OnTabSelectListener
import com.project.survey.R
import com.project.survey.constants.SPConstants
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.home.HomeFragment
import com.project.survey.ui.home.InstrumentFragment
import com.project.survey.ui.home.MeFragment
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)
private val viewModel: MainViewModel by viewModels()
override fun initView() {
SdkUtils.verify(
this,
@ -50,6 +58,7 @@ class MainActivity : BaseBindingActivity<ActivityMainBinding>() {
}
override fun initData() {
}
override fun initListener() {

@ -1,9 +1,15 @@
package com.project.survey.ui
import androidx.activity.viewModels
import androidx.fragment.app.viewModels
import com.project.survey.constants.SPConstants
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.login.LoginActivity
import com.project.survey.ui.project.ProjectListActivity
import com.project.survey.util.SPUtils
/**
@ -13,6 +19,8 @@ class SplashActivity : BaseBindingActivity<ActivitySplashBinding>() {
override fun getBinding(): ActivitySplashBinding = ActivitySplashBinding.inflate(layoutInflater)
private val viewModel: MainViewModel by viewModels()
override fun initView() {
}
@ -21,7 +29,22 @@ class SplashActivity : BaseBindingActivity<ActivitySplashBinding>() {
if (SPUtils.getString(SPConstants.TOKEN).isNullOrBlank()) {
LoginActivity.start()
} 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()
}

@ -6,21 +6,22 @@ import com.bingce.surveyor.agentweb.AgentWebActivity
import com.project.survey.BuildConfig
import com.project.survey.R
import com.project.survey.constants.SPConstants
import com.project.survey.ui.base.BaseBindingActivity
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.ui.approval.adapter.ApprovalAdapter
import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.SPUtils
import com.project.survey.util.param.Param
import com.project.survey.widget.LoadingDialog
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 {
const val PI_PREAPPROV = "PI_PREAPPROV"//待处理
@ -44,14 +45,17 @@ class ApprovalActivity : BaseBindingActivity<ActivityApprovalBinding>() {
private lateinit var type: String
private val adapter by lazy { ApprovalAdapter() }
private var currentPage = 1
override fun initView() {
val title = when (type) {
PI_PREAPPROV -> "待处理"
PI_APPROVED -> "已处理"
else -> "已发起"
}
immersionToolbar(mBinding.ilToolBar.toolbar, title)
immersionToolbar(
mBinding.ilToolBar.toolbar,
when (type) {
PI_PREAPPROV -> "待处理"
PI_APPROVED -> "已处理"
else -> "已发起"
}
)
// val beginTransaction = supportFragmentManager.beginTransaction()
// val fragemnt = when (type) {
// PI_PREAPPROV -> ApprovalWaitFragment()
@ -64,6 +68,7 @@ class ApprovalActivity : BaseBindingActivity<ActivityApprovalBinding>() {
// beginTransaction.replace(R.id.container, fragemnt)
// beginTransaction.commit()
mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(this)
mBinding.recyclerView.addItemDecoration(TransparentDividerDecoration(this))
mBinding.recyclerView.adapter = adapter
adapter.isStateViewEnable = true
@ -71,12 +76,29 @@ class ApprovalActivity : BaseBindingActivity<ActivityApprovalBinding>() {
}
override fun initData() {
viewModel.errorResponse.observe(this){
viewModel.errorResponse.observe(this) {
mBinding.smartRefreshLayout.smartDismiss()
}
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) {
// viewModel.fetchWorkTask(SPUtils.getString(SPConstants.PROJECT_ID) ?: "", type)
// } 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() {
adapter.setOnItemClickListener { _, _, position ->
adapter.getItem(position)?.let { bean ->
// 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 =
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))

@ -1,24 +1,24 @@
package com.project.survey.ui.controlnet
import android.content.Context
import android.content.Intent
import androidx.activity.viewModels
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.extend.smartDismiss
import com.project.survey.logic.viewmodel.ControlNetViewModel
import com.project.survey.model.ControlNetListBean
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.util.ActivityNavUtil
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 {
fun start() {
@ -34,14 +34,18 @@ class ControlNetFirstListActivity : BaseBindingActivity<ActivityControlNetListBi
private val adapter by lazy { ControlNetFirstAdapter() }
private var currentPage = 1
private var start = 0
override fun initView() {
immersionToolbar(mBinding.ilToolBar.toolbar, R.string.head_control_network)
initVersion()
mBinding.recyclerView.addItemDecoration(TransparentDividerDecoration(this))
mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(this)
mBinding.recyclerView.addItemDecoration(TransparentDividerDecoration(this))
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() {
viewModel.errorResponse.observe(this) {
mBinding.smartRefreshLayout.smartDismiss()
}
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() {

@ -4,6 +4,7 @@ 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
@ -11,11 +12,14 @@ 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 ControlNetSpecialListActivity : BaseBindingActivity<ActivityControlNetListBinding>() {
class ControlNetSpecialListActivity : BaseBindingActivity<ActivityControlNetListBinding>(),
OnRefreshLoadMoreListener {
companion object {
fun start() {
@ -30,11 +34,14 @@ class ControlNetSpecialListActivity : BaseBindingActivity<ActivityControlNetList
private val adapter by lazy { ControlNetSpecialAdapter() }
private var currentPage = 1
private var start = 0
override fun initView() {
immersionToolbar(mBinding.ilToolBar.toolbar, R.string.dedicated_control_network)
initVersion()
mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(this)
mBinding.recyclerView.addItemDecoration(TransparentDividerDecoration(this))
mBinding.recyclerView.adapter = adapter
adapter.isStateViewEnable = true
@ -42,21 +49,54 @@ class ControlNetSpecialListActivity : BaseBindingActivity<ActivityControlNetList
}
override fun initData() {
viewModel.errorResponse.observe(this) {
mBinding.smartRefreshLayout.smartDismiss()
}
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",
// * @Field("j_query") j_query: String = "",
// * @Field("page") page: Int,
viewModel.fetchSpecialControlNetList(
"",
currentPage
)
fetchData()
}
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() {

@ -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.ViewGroup
import androidx.fragment.app.viewModels
import com.project.survey.constants.SPConstants
import com.project.survey.databinding.FragmentHomeBinding
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.base.BaseBindingFragment
import com.project.survey.ui.controlnet.ControlNetFirstListActivity
@ -22,11 +25,15 @@ class HomeFragment : BaseBindingFragment<FragmentHomeBinding>() {
return FragmentHomeBinding.inflate(inflater, container, false)
}
private val viewModel: MainViewModel by viewModels()
override fun initView() {
mBinding.tvProject.text = SPUtils.getString(SPConstants.PROJECT_NAME)
}
override fun initData() {
val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
mBinding.tvProject.text = currentProject?.XMXX_NAME
// mBinding.itemToBeProcessed.setBadge(4)
}

@ -3,6 +3,7 @@ package com.project.survey.ui.home
import android.content.Intent
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.fragment.app.viewModels
import blankj.utilcode.util.AppUtils
import com.bingce.device.Device
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.config.GnssConfigManager
import com.project.survey.R
import com.project.survey.constants.SPConstants
import com.project.survey.databinding.FragmentInstrumentBinding
import com.project.survey.extend.setOnClickNoRepeatListener
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.instrument.basestationtranslation.RtkBaseCorrectActivity
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.setupstation.InstrumentSetFragmentSetupStationTypeUtils
import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.SPUtils
/**
* 仪器
@ -34,12 +39,16 @@ class InstrumentFragment : BaseBindingFragment<FragmentInstrumentBinding>() {
container: ViewGroup?
): FragmentInstrumentBinding = FragmentInstrumentBinding.inflate(inflater, container, false)
private val viewModel: MainViewModel by viewModels()
override fun initView() {
}
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() {

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

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

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

@ -3,17 +3,26 @@ package com.project.survey.ui.project
import android.view.Menu
import android.view.MenuItem
import androidx.activity.viewModels
import com.afollestad.materialdialogs.MaterialDialog
import com.project.survey.R
import com.project.survey.constants.SPConstants
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.model.LoginBean
import com.project.survey.ui.MainActivity
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.util.ActivityNavUtil
import com.project.survey.util.LogoutUtil
import com.project.survey.util.SPUtils
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 {
fun start() {
@ -28,7 +37,7 @@ class ProjectListActivity : BaseBindingActivity<ActivityProjectListBinding>() {
private val adapter by lazy { ProjectListAdapter() }
override fun initView() {
immersionToolbar(mBinding.ilToolBar.toolbar, "项目列表")
immersionToolbar(mBinding.toolbar, "项目列表")
// ImmersionBar.with(this)
// .statusBarDarkFont(true)
// .titleBarMarginTop(mBinding.ilToolBar.toolbar)
@ -39,26 +48,46 @@ class ProjectListActivity : BaseBindingActivity<ActivityProjectListBinding>() {
// mBinding.ilToolBar.toolbar.setTitle("项目列表")
// mBinding.ilToolBar.toolbar.setTitleTextColor(ContextCompat.getColor(this, R.color.text_color_main))
// initTabLayout()
// 搜索
mBinding.searchWidget.setOnEditorSearchListener {
// 搜索 it
}
mBinding.smartRefreshLayout.setOnRefreshListener(this)
mBinding.recyclerView.addItemDecoration(HorDividerDecoration(this))
mBinding.recyclerView.setAdapter(adapter)
adapter.isStateViewEnable = true
adapter.setStateViewLayout(this, R.layout.layout_no_data)
}
override fun initData() {
viewModel.errorResponse.observe(this) {
mBinding.smartRefreshLayout.smartDismiss()
}
viewModel.projectResponse.observe(this) {
mBinding.smartRefreshLayout.smartDismiss()
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() {
@ -91,8 +120,19 @@ class ProjectListActivity : BaseBindingActivity<ActivityProjectListBinding>() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
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)
}
}

@ -57,7 +57,7 @@ class ProjectListFragment : BaseBindingFragment<FragmentProjectListBinding>() {
}
}
viewModel.getAllProjectIDByAccount(SPUtils.getString(SPConstants.ACCOUNT) ?: "")
viewModel.fetchProjectList()
}
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"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="99dp" />
<corners android:radius="15dp" />
<solid android:color="#f2f4f5" />
</shape>

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

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

@ -1,45 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<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:tl="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
<include
android:id="@+id/ilToolBar"
layout="@layout/sh_toolbar" />
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/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
android:id="@+id/recyclerView"
<com.scwang.smart.refresh.layout.SmartRefreshLayout
android:id="@+id/smartRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:itemCount="3"
tools:listitem="@layout/item_project_list"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
app:srlEnableLoadMore="false">
<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-->
<!-- android:id="@+id/container"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="0dp"-->
<!-- android:layout_weight="1" />-->
<!-- <androidx.fragment.app.FragmentContainerView-->
<!-- android:id="@+id/container"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="0dp"-->
<!-- android:layout_weight="1" />-->
<!-- <com.flyco.tablayout.CommonTabLayout-->
<!-- android:id="@+id/tabLayout"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="54dp"-->
<!-- android:background="@color/bg_color_main_tab"-->
<!-- tl:tl_iconHeight="23dp"-->
<!-- tl:tl_iconWidth="23dp"-->
<!-- tl:tl_indicator_height="0dp"-->
<!-- tl:tl_textSelectColor="@color/text_color_tab_selected"-->
<!-- tl:tl_textUnselectColor="@color/text_color_tab_unselected"-->
<!-- tl:tl_textsize="12sp"-->
<!-- tl:tl_underline_color="@color/bg_color_main_underline_color"-->
<!-- tl:tl_underline_gravity="TOP"-->
<!-- tl:tl_underline_height="0.5dp" />-->
<!-- <com.flyco.tablayout.CommonTabLayout-->
<!-- android:id="@+id/tabLayout"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="54dp"-->
<!-- android:background="@color/bg_color_main_tab"-->
<!-- tl:tl_iconHeight="23dp"-->
<!-- tl:tl_iconWidth="23dp"-->
<!-- tl:tl_indicator_height="0dp"-->
<!-- tl:tl_textSelectColor="@color/text_color_tab_selected"-->
<!-- tl:tl_textUnselectColor="@color/text_color_tab_unselected"-->
<!-- tl:tl_textsize="12sp"-->
<!-- tl:tl_underline_color="@color/bg_color_main_underline_color"-->
<!-- tl:tl_underline_gravity="TOP"-->
<!-- tl:tl_underline_height="0.5dp" />-->
</LinearLayout>

@ -28,7 +28,7 @@
tools:text="请登录" />
<TextView
android:id="@+id/tvCompany"
android:id="@+id/tvProject"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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" />
</declare-styleable>
<declare-styleable name="SearchWidget">
<attr name="sw_hint" format="string|reference" />
</declare-styleable>
</resources>

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

Loading…
Cancel
Save