增加数据推送、工作面列表、记录列表改为倒序,新数据展示在最上面、增加待提交数据标识、其它问题优化

This commit is contained in:
2025-09-15 19:15:02 +08:00
parent fa2672d6d7
commit be579ea7e4
37 changed files with 694 additions and 297 deletions
+5
View File
@@ -26,6 +26,8 @@ android {
arg("room.schemaLocation", "$projectDir/schemas") arg("room.schemaLocation", "$projectDir/schemas")
} }
} }
// 设置输出APK文件名格式
setProperty("archivesBaseName", "煤矿数采终端v${versionName}")
} }
signingConfigs{ signingConfigs{
@@ -105,4 +107,7 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1"
implementation 'com.google.code.gson:gson:2.10.1' implementation 'com.google.code.gson:gson:2.10.1'
implementation("org.apache.poi:poi:5.2.3")
implementation("org.apache.poi:poi-ooxml:5.2.3")
} }
@@ -4,6 +4,10 @@
package="com.zmkg.coaloperation"> package="com.zmkg.coaloperation">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage"/>
<application <application
android:name=".MyApplication" android:name=".MyApplication"
@@ -15,6 +19,17 @@
android:usesCleartextTraffic="true" android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config" android:networkSecurityConfig="@xml/network_security_config"
tools:replace="android:allowBackup"> tools:replace="android:allowBackup">
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="false" /> android:exported="false" />
@@ -49,6 +49,9 @@ class TunnelWorkingFaceAdapter(var list: MutableList<TunnelWorkingFaceEntity>) :
binding.llFaceRecord.let { binding.llFaceRecord.let {
if (item.isExpandRecord) it.visible() else it.gone() if (item.isExpandRecord) it.visible() else it.gone()
} }
binding.ivFlagEdit.let {
if (item.dataState == "1") it.visible() else it.gone()
}
binding.ivExpandRecord.setImageResource( binding.ivExpandRecord.setImageResource(
if (item.isExpandRecord) R.drawable.ic_arrow_down_white else R.drawable.ic_arrow_right_gray if (item.isExpandRecord) R.drawable.ic_arrow_down_white else R.drawable.ic_arrow_right_gray
) )
@@ -10,6 +10,8 @@ import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.db.entiry.tunnel.TunnelWorkingFaceRecordEntity import com.zmkg.coaloperation.db.entiry.tunnel.TunnelWorkingFaceRecordEntity
import androidx.core.graphics.toColorInt import androidx.core.graphics.toColorInt
import com.zmkg.coaloperation.databinding.ListItemTunnelWorkingFaceRecordBinding import com.zmkg.coaloperation.databinding.ListItemTunnelWorkingFaceRecordBinding
import com.zmkg.coaloperation.utils.gone
import com.zmkg.coaloperation.utils.visible
class TunnelWorkingFaceRecordAdapter(var list: MutableList<TunnelWorkingFaceRecordEntity>) : class TunnelWorkingFaceRecordAdapter(var list: MutableList<TunnelWorkingFaceRecordEntity>) :
BaseQuickAdapter<TunnelWorkingFaceRecordEntity, TunnelWorkingFaceRecordAdapter.VH>( BaseQuickAdapter<TunnelWorkingFaceRecordEntity, TunnelWorkingFaceRecordAdapter.VH>(
@@ -50,6 +52,11 @@ class TunnelWorkingFaceRecordAdapter(var list: MutableList<TunnelWorkingFaceReco
it.operation.text = if (item.operationType == "1") "查看" else "操作" it.operation.text = if (item.operationType == "1") "查看" else "操作"
it.divider.visibility = it.divider.visibility =
if (position == list.size - 1) View.GONE else View.VISIBLE if (position == list.size - 1) View.GONE else View.VISIBLE
it.ivFlagEdit.let {
if (item.dataState == "1") it.visible() else it.gone()
}
} }
} }
@@ -1,6 +1,8 @@
package com.zmkg.coaloperation.bean package com.zmkg.coaloperation.bean
import com.zmkg.coaloperation.db.entiry.tunnel.TunnelRoofLithologyEntity import com.zmkg.coaloperation.db.entiry.tunnel.TunnelRoofLithologyEntity
import com.zmkg.coaloperation.db.entiry.tunnel.TunnelWorkingFaceEntity
import com.zmkg.coaloperation.db.entiry.tunnel.TunnelWorkingFaceRecordEntity
data class TunnelWorkingItem( data class TunnelWorkingItem(
var name: String? = "", var name: String? = "",
@@ -19,3 +21,9 @@ data class WorkOption(
var id:String, var id:String,
var name: String var name: String
) )
data class TunnelSubmitData(
var faceList: MutableList<TunnelWorkingFaceEntity>?=null,
var recordList: MutableList<TunnelWorkingFaceRecordEntity>?=null,
var lithologyList: MutableList<TunnelRoofLithologyEntity>?=null
)
@@ -33,60 +33,60 @@ import java.io.Serializable
// val seamBumpPressure: String?, // val seamBumpPressure: String?,
// val surfaceSupportForm: String? // val surfaceSupportForm: String?
//) //)
//
class TunnelingHomeItemBean { //class TunnelingHomeItemBean {
var createBy: String? = null // var createBy: String? = null
var createTime: String? = null // var createTime: String? = null
var updateBy: String? = null // var updateBy: String? = null
var updateTime: String? = null // var updateTime: String? = null
var remark: String? = null // var remark: String? = null
var recordId: String? = null // var recordId: String? = null
var surfaceId: String? = null // var surfaceId: String? = null
var workingDate: String? = null // var workingDate: String? = null
var teamShift: String? = null // var teamShift: String? = null
var teamId: String? = null // var teamId: String? = null
var teamName: String? = null // var teamName: String? = null
var teamLeader: String? = null // var teamLeader: String? = null
var workingFootage: String? = null // var workingFootage: String? = null
var seamDip: String? = null // var seamDip: String? = null
var seamHeight: String? = null // var seamHeight: String? = null
var waterYield: String? = null // var waterYield: String? = null
var recordPerson: String? = null // var recordPerson: String? = null
var mineWorkingLith: String? = null // var mineWorkingLith: String? = null
} //}
//
/** ///**
* 新增工作面 给接口的数据 // * 新增工作面 给接口的数据
*/ // */
data class TunnelingFaceAddBean( //data class TunnelingFaceAddBean(
//
val surfaceName: String? = null, // val surfaceName: String? = null,
val totalFootage: String? = null, // val totalFootage: String? = null,
//
val areaId: Int? = null, // val areaId: Int? = null,
val areaName: String? = null, // val areaName: String? = null,
val createBy: String? = null, // val createBy: String? = null,
val createTime: String? = null, // val createTime: String? = null,
val geologicalType: String? = null, // val geologicalType: String? = null,
val hydrogeologicalType: String? = null, // val hydrogeologicalType: String? = null,
val params: Params? = null, // val params: Params? = null,
val planEndDate: String? = null, // val planEndDate: String? = null,
val planStartDate: String? = null, // val planStartDate: String? = null,
val remark: String? = null, // val remark: String? = null,
val seamBumpPressure: String? = null, // val seamBumpPressure: String? = null,
val seamGas: String? = null, // val seamGas: String? = null,
val seamId: Int? = null, // val seamId: Int? = null,
val seamIgnition: String? = null, // val seamIgnition: String? = null,
val seamName: String? = null, // val seamName: String? = null,
val surfaceAzimuth: String? = null, // val surfaceAzimuth: String? = null,
val surfaceHeight: String? = null, // val surfaceHeight: String? = null,
val surfaceId: Int? = null, // val surfaceId: Int? = null,
val surfaceSupportForm: String? = null, // val surfaceSupportForm: String? = null,
val surfaceWidth: String? = null, // val surfaceWidth: String? = null,
val tunnelNature: String? = null, // val tunnelNature: String? = null,
val updateBy: String? = null, // val updateBy: String? = null,
val updateTime: String? = null // val updateTime: String? = null
) //)
data class Params( data class Params(
val additionalProp1: String? = null, val additionalProp1: String? = null,
@@ -98,73 +98,73 @@ data class Params(
/** /**
* 工作面详情 * 工作面详情
*/ */
data class FaceWorkDetailBean( //data class FaceWorkDetailBean(
val accumulativeFootage: Int, // val accumulativeFootage: Int,
val areaId: Int, // val areaId: Int,
val areaName: String, // val areaName: String,
val createBy: String, // val createBy: String,
val createTime: String, // val createTime: String,
val geologicalType: String, // val geologicalType: String,
val hydrogeologicalType: String, // val hydrogeologicalType: String,
val latestRecord: LatestRecord, // val latestRecord: LatestRecord,
val params: Params, // val params: Params,
val planEndDate: String, // val planEndDate: String,
val planStartDate: String, // val planStartDate: String,
val remainingFootage: Int, // val remainingFootage: Int,
val remark: String, // val remark: String,
val seamBumpPressure: String, // val seamBumpPressure: String,
val seamGas: String, // val seamGas: String,
val seamId: Int, // val seamId: Int,
val seamIgnition: String, // val seamIgnition: String,
val seamName: String, // val seamName: String,
val surfaceAzimuth: String, // val surfaceAzimuth: String,
val surfaceHeight: String, // val surfaceHeight: String,
val surfaceId: Int, // val surfaceId: Int,
val surfaceName: String, // val surfaceName: String,
val surfaceSupportForm: String, // val surfaceSupportForm: String,
val surfaceWidth: String, // val surfaceWidth: String,
val totalFootage: Int, // val totalFootage: Int,
val tunnelNature: String, // val tunnelNature: String,
val updateBy: String, // val updateBy: String,
val updateTime: String, // val updateTime: String,
val yesterdayFootage: String, // val yesterdayFootage: String,
val monthFootage: String // val monthFootage: String
): Serializable //): Serializable
data class LatestRecord( //data class LatestRecord(
val createBy: String, // val createBy: String,
val createTime: String, // val createTime: String,
val mineWorkingLithologyList: MutableList<MineWorkingLithology>, // val mineWorkingLithologyList: MutableList<MineWorkingLithology>,
val params: Params, // val params: Params,
val recordId: Int, // val recordId: Int,
val recordPerson: String, // val recordPerson: String,
val remark: String, // val remark: String,
val seamDip: Int, // val seamDip: Int,
val seamHeight: Int, // val seamHeight: Int,
val surfaceId: Int, // val surfaceId: Int,
val surfaceName: String, // val surfaceName: String,
val teamId: Int, // val teamId: Int,
val teamLeader: String, // val teamLeader: String,
val teamName: String, // val teamName: String,
val teamShift: Int, // val teamShift: Int,
val updateBy: String, // val updateBy: String,
val updateTime: String, // val updateTime: String,
val waterYield: Int, // val waterYield: Int,
val workingDate: String, // val workingDate: String,
val workingFootage: Int // val workingFootage: Int
):Serializable //):Serializable
//
data class MineWorkingLithology( //data class MineWorkingLithology(
val createBy: String, // val createBy: String,
val createTime: String, // val createTime: String,
val lithologyId: Int, // val lithologyId: Int,
val lithologyType: String, // val lithologyType: String,
val params: Params, // val params: Params,
val positionEnd: Int, // val positionEnd: Int,
val positionStart: Int, // val positionStart: Int,
val recordId: Int, // val recordId: Int,
val remark: String, // val remark: String,
val updateBy: String, // val updateBy: String,
val updateTime: String // val updateTime: String
):Serializable //):Serializable
@@ -3,7 +3,6 @@ package com.zmkg.coaloperation.data.api
import com.zmkg.coaloperation.data.bean.ApiResponse import com.zmkg.coaloperation.data.bean.ApiResponse
import com.zmkg.coaloperation.db.entiry.tunnel.TunnelWorkingFaceEntity import com.zmkg.coaloperation.db.entiry.tunnel.TunnelWorkingFaceEntity
import com.zmkg.coaloperation.retorfit.UrlConfig import com.zmkg.coaloperation.retorfit.UrlConfig
import com.zmkg.coaloperation.bean.FaceWorkDetailBean
import com.zmkg.coaloperation.ui.home.bean.WaterLedgerBean import com.zmkg.coaloperation.ui.home.bean.WaterLedgerBean
import okhttp3.RequestBody import okhttp3.RequestBody
import retrofit2.http.Body import retrofit2.http.Body
@@ -35,17 +34,17 @@ interface HomeApi {
// @GET("/api/mine/tunnelling/surface/record/{recordId}") // @GET("/api/mine/tunnelling/surface/record/{recordId}")
// suspend fun getTunnelingHomeItemData(@Path("recordId") recordId: String?): ApiResponse<MutableList<TunnelingHomeItemBean>> // suspend fun getTunnelingHomeItemData(@Path("recordId") recordId: String?): ApiResponse<MutableList<TunnelingHomeItemBean>>
/** // /**
* 掘进-工作面详情 // * 掘进-工作面详情
*/ // */
@GET("/api/mine/tunnelling/surface/detail/{surfaceId}") // @GET("/api/mine/tunnelling/surface/detail/{surfaceId}")
suspend fun getTunnelingSurfaceDetail(@Path("surfaceId") surfaceId: String?): ApiResponse<FaceWorkDetailBean> // suspend fun getTunnelingSurfaceDetail(@Path("surfaceId") surfaceId: String?): ApiResponse<FaceWorkDetailBean>
/** /**
* 掘进-新增工作面 * 掘进-新增工作面
*/ */
@POST("/api/mine/tunnelling/surface/add") // @POST("/api/mine/tunnelling/surface/add")
suspend fun postTunnellingSurfaceAdd(@Body requestBody: RequestBody): ApiResponse<String> // suspend fun postTunnellingSurfaceAdd(@Body requestBody: RequestBody): ApiResponse<String>
@GET("/api/mine/tunnelling/surface/detailList") @GET("/api/mine/tunnelling/surface/detailList")
suspend fun getTunnelHomeList(): ApiResponse<MutableList<TunnelWorkingFaceEntity>?> suspend fun getTunnelHomeList(): ApiResponse<MutableList<TunnelWorkingFaceEntity>?>
@@ -20,10 +20,10 @@ interface TunnelWorkingFaceDao {
@Update @Update
fun update(entity: TunnelWorkingFaceEntity) fun update(entity: TunnelWorkingFaceEntity)
@Query("SELECT * FROM tunnel_working_face ORDER BY createTime ASC") @Query("SELECT * FROM tunnel_working_face ORDER BY createTime DESC")
fun getEntityList(): MutableList<TunnelWorkingFaceEntity>? fun getEntityList(): MutableList<TunnelWorkingFaceEntity>?
@Query("SELECT * FROM tunnel_working_face WHERE dataState = :dataState ORDER BY createTime ASC") @Query("SELECT * FROM tunnel_working_face WHERE dataState = :dataState ORDER BY createTime DESC")
fun getEntityListByState(dataState: String): MutableList<TunnelWorkingFaceEntity>? fun getEntityListByState(dataState: String): MutableList<TunnelWorkingFaceEntity>?
@Query("SELECT * FROM tunnel_working_face WHERE surfaceId = :surfaceId") @Query("SELECT * FROM tunnel_working_face WHERE surfaceId = :surfaceId")
@@ -21,16 +21,16 @@ interface TunnelWorkingFaceRecordDao {
@Update @Update
fun update(entity: TunnelWorkingFaceRecordEntity) fun update(entity: TunnelWorkingFaceRecordEntity)
@Query("SELECT * FROM tunnel_working_face_record WHERE surfaceId = :surfaceId ORDER BY createTime ASC") @Query("SELECT * FROM tunnel_working_face_record WHERE surfaceId = :surfaceId ORDER BY createTime DESC")
fun getEntityList(surfaceId: Long): MutableList<TunnelWorkingFaceRecordEntity>? fun getEntityList(surfaceId: Long): MutableList<TunnelWorkingFaceRecordEntity>?
@Query("SELECT * FROM tunnel_working_face_record WHERE dataState = :dataState ORDER BY createTime ASC") @Query("SELECT * FROM tunnel_working_face_record WHERE dataState = :dataState ORDER BY createTime DESC")
fun getEntityListByState(dataState: String): MutableList<TunnelWorkingFaceRecordEntity>? fun getEntityListByState(dataState: String): MutableList<TunnelWorkingFaceRecordEntity>?
@Query("SELECT * FROM tunnel_working_face_record WHERE surfaceId = :recordId") @Query("SELECT * FROM tunnel_working_face_record WHERE surfaceId = :recordId")
fun getEntityById(recordId: Long): TunnelWorkingFaceRecordEntity fun getEntityById(recordId: Long): TunnelWorkingFaceRecordEntity
@Query("SELECT * FROM tunnel_working_face_record WHERE surfaceId = :surfaceId AND latestRecordState = '1' ORDER BY createTime ASC LIMIT 1") @Query("SELECT * FROM tunnel_working_face_record WHERE surfaceId = :surfaceId AND latestRecordState = '1' ORDER BY createTime DESC LIMIT 1")
fun getLastEntity(surfaceId: Long): TunnelWorkingFaceRecordEntity? fun getLastEntity(surfaceId: Long): TunnelWorkingFaceRecordEntity?
@Query("DELETE FROM tunnel_working_face_record") @Query("DELETE FROM tunnel_working_face_record")
@@ -10,17 +10,23 @@ import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.adapter.TunnelRoofLithologyAdapter import com.zmkg.coaloperation.adapter.TunnelRoofLithologyAdapter
import com.zmkg.coaloperation.base.BaseVMBActivity import com.zmkg.coaloperation.base.BaseVMBActivity
import com.zmkg.coaloperation.base.viewmodel.TestViewModel import com.zmkg.coaloperation.base.viewmodel.TestViewModel
import com.zmkg.coaloperation.bean.TunnelWorkingItem
import com.zmkg.coaloperation.databinding.ActivityAddWorkingFaceRecordBinding import com.zmkg.coaloperation.databinding.ActivityAddWorkingFaceRecordBinding
import com.zmkg.coaloperation.db.entiry.tunnel.TunnelRoofLithologyEntity import com.zmkg.coaloperation.db.entiry.tunnel.TunnelRoofLithologyEntity
import com.zmkg.coaloperation.db.entiry.tunnel.TunnelWorkingFaceRecordEntity import com.zmkg.coaloperation.db.entiry.tunnel.TunnelWorkingFaceRecordEntity
import com.zmkg.coaloperation.db.viewmodel.TunnelRoofLithologyViewModel import com.zmkg.coaloperation.db.viewmodel.TunnelRoofLithologyViewModel
import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceRecordViewModel import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceRecordViewModel
import com.zmkg.coaloperation.superfuntion.hideLoading
import com.zmkg.coaloperation.superfuntion.showLoading
import com.zmkg.coaloperation.superfuntion.toJson import com.zmkg.coaloperation.superfuntion.toJson
import com.zmkg.coaloperation.utils.DateTimeUtil import com.zmkg.coaloperation.utils.DateTimeUtil
import com.zmkg.coaloperation.utils.DictUtils import com.zmkg.coaloperation.utils.DictUtils
import com.zmkg.coaloperation.utils.ExcelExportUtils
import com.zmkg.coaloperation.utils.FileUtils
import com.zmkg.coaloperation.utils.KeyboardUtil import com.zmkg.coaloperation.utils.KeyboardUtil
import com.zmkg.coaloperation.utils.PickerUtil import com.zmkg.coaloperation.utils.PickerUtil
import com.zmkg.coaloperation.utils.clickWithDebounce import com.zmkg.coaloperation.utils.clickWithDebounce
import com.zmkg.coaloperation.utils.formatDecimalString
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode import org.greenrobot.eventbus.ThreadMode
@@ -115,13 +121,19 @@ class AddWorkingFaceRecordActivity :
mBinding.btnSave.clickWithDebounce { mBinding.btnSave.clickWithDebounce {
if (showType == 0) { if (showType == 0) {
judgeInputParam {
saveFaceRecord() saveFaceRecord()
}
return@clickWithDebounce return@clickWithDebounce
} }
judgeInputParam {
updateFaceRecord() updateFaceRecord()
} }
}
mBinding.btnExport.clickWithDebounce { mBinding.btnExport.clickWithDebounce {
showToast("开发中……") judgeInputParam {
exportExcelFile()
}
} }
mBinding.rvLithology.let { mBinding.rvLithology.let {
@@ -169,46 +181,6 @@ class AddWorkingFaceRecordActivity :
} }
private fun saveFaceRecord() { private fun saveFaceRecord() {
if (mBinding.tvWorkingDate.text.isBlank()) {
showToast("请选择施工日期")
return
}
if (mBinding.tvTeamShift.text.isBlank()) {
showToast("请选择施工班次")
return
}
if (mBinding.tvWorkTeam.text.isBlank()) {
showToast("请选择施工队伍")
return
}
if (mBinding.etTeamLeader.text.isBlank()) {
showToast("请输入带班队长")
return
}
if (mBinding.etWorkingFootage.text.isBlank()) {
showToast("请输入本班进尺")
return
}
if (mBinding.etSeamDip.text.isBlank()) {
showToast("请输入煤层倾角")
return
}
if (mBinding.etSeamHeight.text.isBlank()) {
showToast("请输入煤层高")
return
}
if (mBinding.etRecordPerson.text.isBlank()) {
showToast("请输入填写人")
return
}
val emptyDataList = roofLithologyList.filter {
it.positionStart.isBlank() || it.positionEnd.isBlank() || it.lithologyType.isBlank()
}
if (emptyDataList.isNotEmpty()) {
showToast("顶板岩性中存在部分编录点数据为空")
return
}
val faceRecord = TunnelWorkingFaceRecordEntity().also { val faceRecord = TunnelWorkingFaceRecordEntity().also {
it.recordId = recordId it.recordId = recordId
it.surfaceId = surfaceId it.surfaceId = surfaceId
@@ -218,9 +190,9 @@ class AddWorkingFaceRecordActivity :
it.teamId = mBinding.tvWorkTeam.tag.toString() it.teamId = mBinding.tvWorkTeam.tag.toString()
it.teamLeader = mBinding.etTeamLeader.text.toString().trim() it.teamLeader = mBinding.etTeamLeader.text.toString().trim()
it.workingFootage = mBinding.etWorkingFootage.text.toString().trim() it.workingFootage = mBinding.etWorkingFootage.text.toString().trim().formatDecimalString()
it.seamDip = mBinding.etSeamDip.text.toString().trim() it.seamDip = mBinding.etSeamDip.text.toString().trim().formatDecimalString()
it.seamHeight = mBinding.etSeamHeight.text.toString().trim() it.seamHeight = mBinding.etSeamHeight.text.toString().trim().formatDecimalString()
it.recordPerson = mBinding.etRecordPerson.text.toString().trim() it.recordPerson = mBinding.etRecordPerson.text.toString().trim()
it.createTime = DateTimeUtil.formatDateTime(LocalDateTime.now()) it.createTime = DateTimeUtil.formatDateTime(LocalDateTime.now())
@@ -230,8 +202,8 @@ class AddWorkingFaceRecordActivity :
Log.d(TAG, "saveFaceRecord: ${roofLithologyList.toJson()}") Log.d(TAG, "saveFaceRecord: ${roofLithologyList.toJson()}")
workingFaceRecordViewModel.insert(faceRecord) { workingFaceRecordViewModel.insert(faceRecord) {
EventBus.getDefault().post(faceRecord)
roofLithologyViewModel.insertList(roofLithologyList) { roofLithologyViewModel.insertList(roofLithologyList) {
EventBus.getDefault().post(faceRecord)
finish() finish()
} }
} }
@@ -263,18 +235,18 @@ class AddWorkingFaceRecordActivity :
it.teamId = mBinding.tvWorkTeam.tag.toString() it.teamId = mBinding.tvWorkTeam.tag.toString()
it.teamLeader = mBinding.etTeamLeader.text.toString().trim() it.teamLeader = mBinding.etTeamLeader.text.toString().trim()
it.workingFootage = mBinding.etWorkingFootage.text.toString().trim() it.workingFootage = mBinding.etWorkingFootage.text.toString().trim().formatDecimalString()
it.seamDip = mBinding.etSeamDip.text.toString().trim() it.seamDip = mBinding.etSeamDip.text.toString().trim().formatDecimalString()
it.seamHeight = mBinding.etSeamHeight.text.toString().trim() it.seamHeight = mBinding.etSeamHeight.text.toString().trim().formatDecimalString()
it.recordPerson = mBinding.etRecordPerson.text.toString().trim() it.recordPerson = mBinding.etRecordPerson.text.toString().trim()
it.createTime = DateTimeUtil.formatDateTime(LocalDateTime.now()) it.createTime = DateTimeUtil.formatDateTime(LocalDateTime.now())
it.dataState = "1" it.dataState = "1"
} }
workingFaceRecordViewModel.update(faceRecord) { workingFaceRecordViewModel.update(faceRecord) {
EventBus.getDefault().post(faceRecord)
roofLithologyViewModel.deleteList(recordId) { roofLithologyViewModel.deleteList(recordId) {
roofLithologyViewModel.insertList(roofLithologyList) { roofLithologyViewModel.insertList(roofLithologyList) {
EventBus.getDefault().post(faceRecord)
finish() finish()
} }
} }
@@ -286,4 +258,89 @@ class AddWorkingFaceRecordActivity :
} }
private fun judgeInputParam(acton:()-> Unit) {
list.clear()
list.add(TunnelWorkingItem(name = "工作面名称", value = faceName))
val workingDate = mBinding.tvWorkingDate.text.toString().trim()
if (workingDate.isBlank()) {
showToast("请选择施工日期")
return
}
list.add(TunnelWorkingItem(name = "施工日期", value = workingDate))
val teamShift = mBinding.tvTeamShift.text.toString().trim()
if (teamShift.isBlank()) {
showToast("请选择施工班次")
return
}
list.add(TunnelWorkingItem(name = "施工班次", value = teamShift))
val workTeam = mBinding.tvWorkTeam.text.toString().trim()
if (workTeam.isBlank()) {
showToast("请选择施工队伍")
return
}
list.add(TunnelWorkingItem(name = "施工队伍", value = workTeam))
val teamLeader = mBinding.etTeamLeader.text.toString().trim()
if (teamLeader.isBlank()) {
showToast("请输入带班队长")
return
}
list.add(TunnelWorkingItem(name = "带班队长", value = teamLeader))
val workingFootage = mBinding.etWorkingFootage.text.toString().trim().formatDecimalString()
if (workingFootage.isBlank()) {
showToast("请输入本班进尺")
return
}
list.add(TunnelWorkingItem(name = "本班进尺", value = workingFootage))
val seamDip = mBinding.etSeamDip.text.toString().trim().formatDecimalString()
if (seamDip.isBlank()) {
showToast("请输入煤层倾角")
return
}
list.add(TunnelWorkingItem(name = "煤层倾角", value = seamDip))
val seamHeight = mBinding.etSeamHeight.text.toString().trim().formatDecimalString()
if (seamHeight.isBlank()) {
showToast("请输入煤层高")
return
}
list.add(TunnelWorkingItem(name = "煤层高", value = seamHeight))
val recordPerson = mBinding.etRecordPerson.text.toString().trim()
if (recordPerson.isBlank()) {
showToast("请输入填写人")
return
}
list.add(TunnelWorkingItem(name = "记录人", value = recordPerson))
val emptyDataList = roofLithologyList.filter {
it.positionStart.isBlank() || it.positionEnd.isBlank() || it.lithologyType.isBlank()
}
if (emptyDataList.isNotEmpty()) {
showToast("顶板岩性中存在部分编录点数据为空")
return
}
list.add(TunnelWorkingItem(name = "顶板岩性", value = "", items = roofLithologyList))
acton()
}
private val list: MutableList<TunnelWorkingItem> = mutableListOf()
private fun exportExcelFile() {
showLoading()
val fileName = "${faceName}_${mBinding.tvWorkingDate.text}_${System.currentTimeMillis()}.xlsx"
val filePath = FileUtils.getFilePath(fileName)
ExcelExportUtils.exportToExcel(list, filePath) {
window.decorView.postDelayed({
hideLoading()
showToast("Excel导出完成")
}, 1500)
}
}
} }
@@ -143,8 +143,8 @@ class TunnelingActivity :
val index = workingFaceList.indexOfFirst { it.surfaceId == event.surfaceId } val index = workingFaceList.indexOfFirst { it.surfaceId == event.surfaceId }
if (index == -1) { if (index == -1) {
//新增工作面 //新增工作面
val insertIndex = workingFaceList.size val insertIndex = 0
workingFaceList.add(event) workingFaceList.add(0,event)
workingFaceAdapter.notifyItemInserted(insertIndex) workingFaceAdapter.notifyItemInserted(insertIndex)
workingFaceAdapter.notifyItemRangeChanged(insertIndex, insertIndex+1) workingFaceAdapter.notifyItemRangeChanged(insertIndex, insertIndex+1)
return return
@@ -166,15 +166,18 @@ class TunnelingActivity :
faceEntity.records?.let { records -> faceEntity.records?.let { records ->
val index = records.indexOfFirst { it.recordId == event.recordId } val index = records.indexOfFirst { it.recordId == event.recordId }
if (index == -1) { if (index == -1) {
records.add(event) records.add(0,event)
} else { } else {
records[index] = event records[index] = event
} }
} }
val recordAdapter = getRecordAdapter(position) val recordAdapter = getRecordAdapter(position)
recordAdapter.notifyDataSetChanged() recordAdapter.notifyDataSetChanged()
workingFaceAdapter.notifyItemChanged(position)
} }
@SuppressLint("SuspiciousIndentation")
private fun getRecordAdapter(position:Int):TunnelWorkingFaceRecordAdapter { private fun getRecordAdapter(position:Int):TunnelWorkingFaceRecordAdapter {
val viewHolder = val viewHolder =
mBinding.rvList.findViewHolderForLayoutPosition(position) as TunnelWorkingFaceAdapter.VH mBinding.rvList.findViewHolderForLayoutPosition(position) as TunnelWorkingFaceAdapter.VH
@@ -15,6 +15,7 @@ import com.zmkg.coaloperation.databinding.ActivityWorkingFaceRecordBinding
import com.zmkg.coaloperation.db.entiry.tunnel.TunnelWorkingFaceRecordEntity import com.zmkg.coaloperation.db.entiry.tunnel.TunnelWorkingFaceRecordEntity
import com.zmkg.coaloperation.db.viewmodel.TunnelRoofLithologyViewModel import com.zmkg.coaloperation.db.viewmodel.TunnelRoofLithologyViewModel
import com.zmkg.coaloperation.utils.DictUtils import com.zmkg.coaloperation.utils.DictUtils
import com.zmkg.coaloperation.utils.formatDecimalString
import com.zmkg.coaloperation.utils.toJsonString import com.zmkg.coaloperation.utils.toJsonString
import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode import org.greenrobot.eventbus.ThreadMode
@@ -65,10 +66,6 @@ class WorkingFaceRecordActivity :
Log.d(TAG, "loadFaceRecord: ${faceRecord.toJsonString()}") Log.d(TAG, "loadFaceRecord: ${faceRecord.toJsonString()}")
faceRecord?.let { faceRecord?.let {
loadFaceRecord(it) loadFaceRecord(it)
roofLithologyViewModel.getEntityList(it.recordId) { lithologyEntities ->
list[6].items = lithologyEntities
adapter.notifyItemChanged(6)
}
} }
} }
@@ -86,17 +83,23 @@ class WorkingFaceRecordActivity :
) )
list.add(TunnelWorkingItem(pageType = 1, name = "施工队伍", value = it.teamName)) list.add(TunnelWorkingItem(pageType = 1, name = "施工队伍", value = it.teamName))
list.add(TunnelWorkingItem(pageType = 1, name = "带班队长", value = it.teamLeader)) list.add(TunnelWorkingItem(pageType = 1, name = "带班队长", value = it.teamLeader))
list.add(TunnelWorkingItem(pageType = 1, name = "本班进尺", value = it.workingFootage)) list.add(TunnelWorkingItem(pageType = 1, name = "本班进尺", value = "${it.workingFootage?.formatDecimalString()}m"))
// val rockList = mutableListOf<TunnelRoofLithologyEntity>() // val rockList = mutableListOf<TunnelRoofLithologyEntity>()
// rockList.add(RockItem(startLen = 0, endLen = 1, rockType = "泥")) // rockList.add(RockItem(startLen = 0, endLen = 1, rockType = "泥"))
// rockList.add(RockItem(startLen = 0, endLen = 1, rockType = "砂")) // rockList.add(RockItem(startLen = 0, endLen = 1, rockType = "砂"))
list.add(TunnelWorkingItem(pageType = 1, name = "顶板岩性", value = "", items = null)) list.add(TunnelWorkingItem(pageType = 1, name = "顶板岩性", value = "", items = null))
list.add(TunnelWorkingItem(pageType = 1, name = "煤层倾角", value = it.seamDip)) list.add(TunnelWorkingItem(pageType = 1, name = "煤层倾角", value = "${it.seamDip?.formatDecimalString()}°"))
list.add(TunnelWorkingItem(pageType = 1, name = "煤层高", value = it.seamHeight)) list.add(TunnelWorkingItem(pageType = 1, name = "煤层高", value = "${it.seamHeight?.formatDecimalString()}m"))
list.add(TunnelWorkingItem(pageType = 1, name = "记录人", value = it.recordPerson)) list.add(TunnelWorkingItem(pageType = 1, name = "记录人", value = it.recordPerson))
adapter.notifyDataSetChanged() adapter.notifyDataSetChanged()
roofLithologyViewModel.getEntityList(it.recordId) { lithologyEntities ->
list[6].items = lithologyEntities
adapter.notifyItemChanged(6)
}
} }
override fun bindEvent() { override fun bindEvent() {
@@ -12,7 +12,6 @@ import com.zmkg.coaloperation.db.viewmodel.TunnelRoofLithologyViewModel
import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceRecordViewModel import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceRecordViewModel
import com.zmkg.coaloperation.adapter.TunnelingRockNatureAdapter import com.zmkg.coaloperation.adapter.TunnelingRockNatureAdapter
import com.zmkg.coaloperation.databinding.ActivityWorkingFaceStatisticsBinding import com.zmkg.coaloperation.databinding.ActivityWorkingFaceStatisticsBinding
import com.zmkg.coaloperation.bean.FaceWorkDetailBean
import com.zmkg.coaloperation.ui.tunneling.viewmodel.TunnelingViewModel import com.zmkg.coaloperation.ui.tunneling.viewmodel.TunnelingViewModel
import com.zmkg.coaloperation.utils.ScreenUtil import com.zmkg.coaloperation.utils.ScreenUtil
import com.zmkg.coaloperation.utils.formatDecimalString import com.zmkg.coaloperation.utils.formatDecimalString
@@ -91,7 +90,7 @@ class WorkingFaceStatisticsActivity :
workingFaceRecordViewModel.getLastEntity(detail.surfaceId) { record -> workingFaceRecordViewModel.getLastEntity(detail.surfaceId) { record ->
record?.let { record?.let {
mBinding.tvYesterdayLen.text = "${it.workingFootage?.formatDecimalString()}m" mBinding.tvYesterdayLen.text = "${it.workingFootage?.formatDecimalString()}m"
mBinding.tvWorkingFaceAngle.text = "${it.seamDip?.formatDecimalString()}" mBinding.tvWorkingFaceAngle.text = "${it.seamDip?.formatDecimalString()}°"
// mBinding.tvMonthAccumulateLen.text = "${it.monthFootage}m" // mBinding.tvMonthAccumulateLen.text = "${it.monthFootage}m"
mBinding.tvWorkingFaceWater.text = "${it.waterYield?.formatDecimalString()}" mBinding.tvWorkingFaceWater.text = "${it.waterYield?.formatDecimalString()}"
@@ -134,9 +133,9 @@ class WorkingFaceStatisticsActivity :
// } // }
} }
private fun setDataView(bean: FaceWorkDetailBean?) { // private fun setDataView(bean: FaceWorkDetailBean?) {
bean ?: return // bean ?: return
} // }
private fun stringToDouble(numText: String?): Double { private fun stringToDouble(numText: String?): Double {
if (numText.isNullOrEmpty() || numText.isBlank()) return 0.toDouble() if (numText.isNullOrEmpty() || numText.isBlank()) return 0.toDouble()
@@ -9,6 +9,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle import androidx.lifecycle.repeatOnLifecycle
import com.zmkg.coaloperation.R import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.base.BaseVMBFragment import com.zmkg.coaloperation.base.BaseVMBFragment
import com.zmkg.coaloperation.bean.TunnelSubmitData
import com.zmkg.coaloperation.databinding.FragmentUserBinding import com.zmkg.coaloperation.databinding.FragmentUserBinding
import com.zmkg.coaloperation.db.viewmodel.TunnelRoofLithologyViewModel import com.zmkg.coaloperation.db.viewmodel.TunnelRoofLithologyViewModel
import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceRecordViewModel import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceRecordViewModel
@@ -64,12 +65,37 @@ class UserFragment :
override fun initView(root: View?, savedInstanceState: Bundle?) { override fun initView(root: View?, savedInstanceState: Bundle?) {
mBinding.apply { mBinding.apply {
networkConfig.setOrderStateInfo("网络配置", R.mipmap.network) networkConfig.setOrderStateInfo(
dataPull.setOrderStateInfo("数据拉取", R.drawable.ic_data_pull) "网络配置",
cacheManage.setOrderStateInfo("缓存管理", R.mipmap.buffer) R.mipmap.network,
checkUpdate.setOrderStateInfo("检查更新", R.mipmap.checkupdate) R.drawable.bg_icon_network_config
systemExit.setOrderStateInfo("系统退出", R.mipmap.systemexit) )
aboutUs.setOrderStateInfo("关于我们", R.mipmap.about_us) dataPull.setOrderStateInfo(
"数据拉取",
R.drawable.ic_data_pull,
R.drawable.bg_icon_data_pull
)
dataPush.setOrderStateInfo(
"数据推送",
R.drawable.ic_data_push,
R.drawable.bg_icon_data_push
)
cacheManage.setOrderStateInfo(
"缓存管理",
R.mipmap.buffer,
R.drawable.bg_icon_cache_manage
)
checkUpdate.setOrderStateInfo(
"检查更新",
R.mipmap.checkupdate,
R.drawable.bg_icon_check_update
)
systemExit.setOrderStateInfo(
"系统退出",
R.mipmap.systemexit,
R.drawable.bg_icon_system_exit
)
aboutUs.setOrderStateInfo("关于我们", R.mipmap.about_us, R.drawable.bg_icon_about_us)
} }
} }
@@ -78,6 +104,7 @@ class UserFragment :
addClickViews( addClickViews(
networkConfig, networkConfig,
dataPull, dataPull,
dataPush,
cacheManage, cacheManage,
checkUpdate, checkUpdate,
systemExit, systemExit,
@@ -94,13 +121,12 @@ class UserFragment :
} }
R.id.data_pull -> { R.id.data_pull -> {
showLoading("加载中")
checkDataState { state -> checkDataState { state ->
if (state) { if (state) {
showToast("本地存在待提交的数据") showToast("本地存在待提交的数据")
return@checkDataState return@checkDataState
} }
showLoading("加载中")
workingFaceViewModel.deleteAll { workingFaceViewModel.deleteAll {
workingFaceRecordViewModel.deleteAll { workingFaceRecordViewModel.deleteAll {
roofLithologyViewModel.deleteAll { roofLithologyViewModel.deleteAll {
@@ -115,6 +141,10 @@ class UserFragment :
} }
} }
R.id.data_push -> {
dataPush()
}
R.id.cache_manage -> { R.id.cache_manage -> {
toActivity(CacheManageActivity::class.java) toActivity(CacheManageActivity::class.java)
} }
@@ -207,4 +237,27 @@ class UserFragment :
} }
} }
private fun dataPush() {
showLoading()
val submitData = TunnelSubmitData()
workingFaceViewModel.getEntityListByState("1") { faceList ->
submitData.faceList = faceList
workingFaceRecordViewModel.getEntityListByState("1") { recordList ->
submitData.recordList = recordList
roofLithologyViewModel.getEntityListByState("1") { lithologyList ->
hideLoading()
submitData.lithologyList = lithologyList
if (submitData.faceList.isNullOrEmpty() ||
submitData.recordList.isNullOrEmpty() ||
submitData.lithologyList.isNullOrEmpty()
) {
showToast("暂无推送数据")
return@getEntityListByState
}
Log.d(TAG, "dataPush: ${submitData.toJsonString()}")
}
}
}
}
} }
@@ -9,6 +9,7 @@ import java.util.Date
object DateTimeUtil { object DateTimeUtil {
const val YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss" const val YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"
const val YYYY_MM_DD = "yyyy-MM-dd"
fun formatDateTime(dateTime: LocalDateTime, pattern: String = YYYY_MM_DD_HH_MM_SS): String { fun formatDateTime(dateTime: LocalDateTime, pattern: String = YYYY_MM_DD_HH_MM_SS): String {
val formatter = DateTimeFormatter.ofPattern(pattern) val formatter = DateTimeFormatter.ofPattern(pattern)
@@ -0,0 +1,71 @@
package com.zmkg.coaloperation.utils
import android.util.Log
import com.zmkg.coaloperation.bean.TunnelWorkingItem
import org.apache.poi.ss.util.CellRangeAddress
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import java.io.FileOutputStream
object ExcelExportUtils {
fun exportToExcel(list: List<TunnelWorkingItem>, filePath: String, block:()-> Unit) {
val workbook = XSSFWorkbook() // 创建XLSX格式工作簿
val sheet = workbook.createSheet("Sheet1")
// 创建表头
val mainHeader = sheet.createRow(0)
list.forEachIndexed { index, item ->
mainHeader.createCell(index).setCellValue(item.name)
}
val subHeader = sheet.createRow(1)
for (i in 0 until list.size - 1) {
subHeader.createCell(i).setCellValue("")
}
val subTitleList = mutableListOf("起始值", "结束值", "岩性")
subTitleList.forEachIndexed { index, subTitle ->
subHeader.createCell(list.size - 1 + index).setCellValue(subTitle)
}
sheet.addMergedRegion(CellRangeAddress(0, 0, 9, 11))
for (i in 0 until list.size - 1) {
sheet.addMergedRegion(CellRangeAddress(0, 1, i, i))
}
var rowNum = 2
var row = sheet.createRow(rowNum)
for (i in 0 until list.size - 1) {
row.createCell(i).setCellValue(list[i].value)
}
list[list.size - 1].items?.let {
for (i in 0 until it.size) {
if (i > 0) {
rowNum++
row = sheet.createRow(rowNum)
}
row.createCell(0 + list.size - 1).setCellValue(it[i].positionStart)
row.createCell(1 + list.size - 1).setCellValue(it[i].positionEnd)
row.createCell(2 + list.size - 1).setCellValue(it[i].lithologyType)
}
}
// 填充数据
// data.forEachIndexed { index, item ->
// val row = sheet.createRow(index + 1)
// row.createCell(0).setCellValue(item.id)
// row.createCell(1).setCellValue(item.name)
// }
// 自动调整列宽
// for (i in 0 until 9) {
// sheet.autoSizeColumn(i)
// }
// 写入文件
FileOutputStream(filePath).use { workbook.write(it) }
workbook.close()
Log.d("ExcelExportUtils", "exportToExcel: $filePath")
block()
}
}
data class DataBean(val id: Int, val name: String)
@@ -0,0 +1,47 @@
package com.zmkg.coaloperation.utils
import android.os.Environment
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
object FileUtils {
fun getFilePath(fileName:String): String {
val parentPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)
val path = File(parentPath, "煤矿数采终端")
if (!path.exists()) path.mkdirs()
val file = File(path, fileName)
if (!file.exists()) file.createNewFile()
return file.absolutePath
}
fun saveToPublicDirectory(fileName: String, content: String) {
val dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)
val appDir = File(dir, "dcmp")
if (!appDir.exists()) appDir.mkdirs()
val file = File(appDir, fileName)
try {
FileOutputStream(file).use { it.write(content.toByteArray()) }
} catch (e: IOException) {
e.printStackTrace()
}
}
// private fun requestStoragePermission() {
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// if (!Environment.isExternalStorageManager()) {
// val intent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
// startActivity(intent)
// }
// } else {
// ActivityCompat.requestPermissions(
// this,
// arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
// REQUEST_CODE
// )
// }
// }
}
@@ -8,6 +8,8 @@ import android.widget.RelativeLayout
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import com.zmkg.coaloperation.R import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.databinding.CustomMyInfoViewBinding import com.zmkg.coaloperation.databinding.CustomMyInfoViewBinding
import com.zmkg.coaloperation.utils.gone
import com.zmkg.coaloperation.utils.visible
/** /**
* 文本和跳转 * 文本和跳转
@@ -21,15 +23,14 @@ class CustomInfoView(context: Context?, attrs: AttributeSet?) : RelativeLayout(c
R.layout.custom_my_info_view, this,true) R.layout.custom_my_info_view, this,true)
fun setOrderStateInfo(name:String, id:Int){ fun setOrderStateInfo(name:String, imgResId:Int, bgResId: Int){
mBinding.apply { mBinding.apply {
if (id==0) { customInfoMenuIcon.run {
customInfoMenuIcon.visibility=View.GONE if (imgResId == 0) gone() else visible()
}else{ setImageResource(imgResId)
customInfoMenuIcon.visibility=View.VISIBLE setBackgroundResource(bgResId)
} }
customInfoMenuIcon.setImageResource(id) customInfoMenuName.text = name
customInfoMenuName.setText(name)
} }
} }
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#FF72AFD3"
android:startColor="#FF37ECBA"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:startColor="#ff95fe99"
android:endColor="#fff5feb9"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#FFF89273"
android:startColor="#FFB223F6"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#ff7657f8"
android:startColor="#fff538f6"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#ff1657f8"
android:startColor="#fff51856"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#ff73a3f8"
android:startColor="#ff0a28f4"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#FF96E6A1"
android:startColor="#FFD4FC79"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#FB2B85"/>
<size android:height="5dp" android:width="5dp"/>
</shape>
@@ -7,49 +7,44 @@
</data> </data>
<com.allen.library.shape.ShapeRelativeLayout
<com.allen.library.shape.ShapeLinearLayout
android:layout_width="match_parent"
android:layout_height="68dp"
android:layout_marginHorizontal="30dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:background="#20222B"
app:shapeSolidColor="#20222B" app:shapeSolidColor="#20222B"
app:shapeCornersRadius="16dp" app:shapeCornersRadius="16dp"
android:layout_width="match_parent" android:paddingHorizontal="15dp">
android:layout_height="match_parent"
android:background="#20222B">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="44dp"
android:layout_centerVertical="true"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView <ImageView
android:id="@+id/custom_info_menu_icon" android:id="@+id/custom_info_menu_icon"
android:layout_width="22dp" android:layout_width="44dp"
android:layout_height="22dp" android:layout_height="44dp"
android:layout_centerVertical="true" android:scaleType="fitCenter"
android:layout_marginLeft="15dp" android:padding="11dp"
android:scaleType="fitCenter"/> tools:src="@mipmap/network"
tools:background="@drawable/bg_icon_network_config"/>
<TextView <TextView
android:id="@+id/custom_info_menu_name" android:id="@+id/custom_info_menu_name"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_marginStart="12dp"
android:layout_marginLeft="8dp" android:layout_marginEnd="12dp"
tools:text="菜单" tools:text="菜单"
android:maxLines="1"
android:ellipsize="end"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="14sp" /> android:textSize="16sp" />
</LinearLayout>
<ImageView <ImageView
android:id="@+id/custom_info_iv_right" android:id="@+id/custom_info_iv_right"
android:layout_width="24dp" android:layout_width="24dp"
android:layout_height="24dp" android:layout_height="24dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="15dp"
android:src="@mipmap/arrow_right" /> android:src="@mipmap/arrow_right" />
</com.allen.library.shape.ShapeLinearLayout>
</com.allen.library.shape.ShapeRelativeLayout>
</layout> </layout>
@@ -59,6 +59,10 @@
android:layout_below="@+id/title_sec" android:layout_below="@+id/title_sec"
android:layout_marginHorizontal="5dp" android:layout_marginHorizontal="5dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
tools:itemCount="6"
app:spanCount="2"
android:overScrollMode="never"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
tools:listitem="@layout/item_home_menu_left_right" /> tools:listitem="@layout/item_home_menu_left_right" />
<LinearLayout <LinearLayout
@@ -33,54 +33,55 @@
android:textSize="24sp" /> android:textSize="24sp" />
<TextView <TextView
android:id="@+id/tvUserPhone"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="账号昵称" android:text="158****5678"
android:textColor="#6A6F87" android:textColor="#6A6F87"
android:textSize="14sp" /> android:textSize="14sp" />
<com.zmkg.coaloperation.view.CustomInfoView <com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/network_config" android:id="@+id/network_config"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="68dp" android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:layout_marginTop="15dp" /> android:layout_marginTop="15dp" />
<com.zmkg.coaloperation.view.CustomInfoView <com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/data_pull" android:id="@+id/data_pull"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="68dp" android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp" android:layout_marginTop="15dp" />
<com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/data_push"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp" /> android:layout_marginTop="15dp" />
<com.zmkg.coaloperation.view.CustomInfoView <com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/cache_manage" android:id="@+id/cache_manage"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="68dp" android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:layout_marginTop="15dp" /> android:layout_marginTop="15dp" />
<com.zmkg.coaloperation.view.CustomInfoView <com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/check_update" android:id="@+id/check_update"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="68dp" android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:layout_marginTop="15dp" /> android:layout_marginTop="15dp" />
<com.zmkg.coaloperation.view.CustomInfoView <com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/system_exit" android:id="@+id/system_exit"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="68dp" android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:layout_marginTop="15dp" /> android:layout_marginTop="15dp" />
<com.zmkg.coaloperation.view.CustomInfoView <com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/about_us" android:id="@+id/about_us"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="68dp" android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:layout_marginTop="15dp" /> android:layout_marginTop="15dp" />
</com.allen.library.shape.ShapeLinearLayout> </com.allen.library.shape.ShapeLinearLayout>
@@ -92,7 +93,8 @@
android:layout_height="68dp" android:layout_height="68dp"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:layout_marginTop="60dp" android:layout_marginTop="60dp"
android:background="#e3e3e3" /> app:srcCompat="@drawable/ic_avatar"/>
<!-- android:background="#e3e3e3"-->
</RelativeLayout> </RelativeLayout>
</layout> </layout>
@@ -7,34 +7,36 @@
</data> </data>
<com.allen.library.shape.ShapeRelativeLayout <com.allen.library.shape.ShapeLinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="80dp" android:layout_height="80dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginHorizontal="4dp" android:layout_marginHorizontal="4dp"
android:layout_marginVertical="5dp" android:layout_marginVertical="5dp"
android:paddingHorizontal="10dp"
app:shapeCornersRadius="6dp" app:shapeCornersRadius="6dp"
app:shapeStrokeColor="#10514C" app:shapeStrokeColor="#10514C"
app:shapeStrokeWidth="0.5dp"> app:shapeStrokeWidth="0.5dp">
<TextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_weight="1"
android:maxLines="1"
android:ellipsize="end"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="防灭火检查" />
<ImageView <ImageView
android:id="@+id/img" android:id="@+id/img"
android:layout_width="32dp" android:layout_width="32dp"
android:layout_height="32dp" android:layout_height="32dp"
android:layout_alignParentRight="true" android:layout_marginStart="10dp"
android:layout_centerVertical="true"
android:layout_marginRight="13dp"
android:scaleType="fitXY" /> android:scaleType="fitXY" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="防灭火检查" />
</com.allen.library.shape.ShapeLinearLayout>
</com.allen.library.shape.ShapeRelativeLayout>
</layout> </layout>
@@ -7,9 +7,11 @@
</data> </data>
<com.allen.library.shape.ShapeRelativeLayout <com.allen.library.shape.ShapeLinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="80dp" android:layout_height="85dp"
android:orientation="vertical"
android:gravity="center"
android:layout_marginHorizontal="2dp" android:layout_marginHorizontal="2dp"
android:layout_marginVertical="2dp" android:layout_marginVertical="2dp"
app:shapeCornersRadius="6dp" app:shapeCornersRadius="6dp"
@@ -20,20 +22,19 @@
android:layout_width="28dp" android:layout_width="28dp"
android:layout_height="28dp" android:layout_height="28dp"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:layout_marginRight="13dp"
android:scaleType="fitXY" /> android:scaleType="fitXY" />
<TextView <TextView
android:id="@+id/title" android:id="@+id/title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/img"
android:layout_centerHorizontal="true"
android:textColor="@color/white" android:textColor="@color/white"
android:layout_marginTop="6dp"
android:maxLines="1"
android:ellipsize="end"
android:textSize="12sp" android:textSize="12sp"
tools:text="防灭火检查" /> tools:text="防灭火检查" />
</com.allen.library.shape.ShapeRelativeLayout> </com.allen.library.shape.ShapeLinearLayout>
</layout> </layout>
@@ -24,7 +24,7 @@
android:maxLines="1" android:maxLines="1"
android:textCursorDrawable="@drawable/cursor_white" android:textCursorDrawable="@drawable/cursor_white"
android:minWidth="30dp" android:minWidth="30dp"
android:maxWidth="35dp" android:maxWidth="55dp"
android:paddingStart="5dp" android:paddingStart="5dp"
android:paddingEnd="5dp" android:paddingEnd="5dp"
android:textColor="@color/white" android:textColor="@color/white"
@@ -47,7 +47,7 @@
android:maxLines="1" android:maxLines="1"
android:textCursorDrawable="@drawable/cursor_white" android:textCursorDrawable="@drawable/cursor_white"
android:minWidth="30dp" android:minWidth="30dp"
android:maxWidth="35dp" android:maxWidth="55dp"
android:paddingStart="5dp" android:paddingStart="5dp"
android:paddingEnd="5dp" android:paddingEnd="5dp"
android:textColor="@color/white" android:textColor="@color/white"
@@ -72,7 +72,7 @@
android:maxLines="1" android:maxLines="1"
android:textCursorDrawable="@drawable/cursor_white" android:textCursorDrawable="@drawable/cursor_white"
android:minWidth="30dp" android:minWidth="30dp"
android:maxWidth="35dp" android:maxWidth="55dp"
android:paddingStart="5dp" android:paddingStart="5dp"
android:paddingEnd="5dp" android:paddingEnd="5dp"
android:textColor="@color/white" android:textColor="@color/white"
@@ -26,10 +26,22 @@
app:shapeStrokeColor="#FF26FFEB" app:shapeStrokeColor="#FF26FFEB"
app:shapeStrokeWidth="0.5dp"> app:shapeStrokeWidth="0.5dp">
<FrameLayout
android:layout_width="20dp"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/ivFlagEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_flag_edit"
android:visibility="gone"/>
</FrameLayout>
<!-- android:layout_marginStart="20dp"-->
<ImageView <ImageView
android:layout_width="30dp" android:layout_width="30dp"
android:layout_height="38dp" android:layout_height="38dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="10dp" android:layout_marginEnd="10dp"
android:background="@drawable/ic_geological" /> android:background="@drawable/ic_geological" />
@@ -8,7 +8,7 @@
</data> </data>
<LinearLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
@@ -68,7 +68,21 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
app:dividerColor="#282C38" app:dividerColor="#282C38"
android:layout_gravity="bottom"
android:visibility="visible"/> android:visibility="visible"/>
</LinearLayout> <FrameLayout
android:layout_width="20dp"
android:layout_height="match_parent"
android:layout_gravity="start">
<ImageView
android:id="@+id/ivFlagEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_flag_edit"
android:visibility="gone"/>
</FrameLayout>
</FrameLayout>
</layout> </layout>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>