团队作业app端




package com.example.safeapp.ui.risk
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.example.safeapp.R
import com.example.safeapp.data.entity.SafetyRisk
import com.example.safeapp.databinding.ItemRiskBinding
class RiskAdapter(
private val onEditClick: (SafetyRisk) -> Unit,
private val onDeleteClick: (SafetyRisk) -> Unit
) : ListAdapter<SafetyRisk, RiskAdapter.RiskViewHolder>(RiskDiffCallback()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RiskViewHolder {
val binding = ItemRiskBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
return RiskViewHolder(binding)
}
override fun onBindViewHolder(holder: RiskViewHolder, position: Int) {
holder.bind(getItem(position))
}
inner class RiskViewHolder(
private val binding: ItemRiskBinding
) : RecyclerView.ViewHolder(binding.root) {
init {
binding.btnEdit.setOnClickListener {
val position = bindingAdapterPosition
if (position != RecyclerView.NO_POSITION) {
onEditClick(getItem(position))
}
}
binding.btnDelete.setOnClickListener {
val position = bindingAdapterPosition
if (position != RecyclerView.NO_POSITION) {
onDeleteClick(getItem(position))
}
}
}
fun bind(risk: SafetyRisk) {
binding.apply {
tvCode.text = risk.code
tvDepartment.text = "部门:${risk.department}"
tvRiskPoint.text = "风险项点:${risk.riskPoint}"
tvControlPerson.text = "管控人员:${risk.controlPerson}"
tvAuditStatus.text = risk.auditStatus
// 设置风险等级背景色
val riskLevelColor = when (risk.riskLevel) {
"高风险" -> R.color.risk_level_high
"中风险" -> R.color.risk_level_medium
"低风险" -> R.color.risk_level_low
else -> R.color.risk_level_medium
}
tvRiskLevel.setBackgroundResource(riskLevelColor)
tvRiskLevel.text = risk.riskLevel
}
}
}
private class RiskDiffCallback : DiffUtil.ItemCallback<SafetyRisk>() {
override fun areItemsTheSame(oldItem: SafetyRisk, newItem: SafetyRisk): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: SafetyRisk, newItem: SafetyRisk): Boolean {
return oldItem == newItem
}
}
}
package com.example.safeapp.ui.risk
import android.app.Dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.DialogFragment
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.example.safeapp.R
import com.example.safeapp.data.entity.SafetyRisk
import com.example.safeapp.databinding.DialogRiskEditBinding
import java.util.Date
class RiskEditDialog : DialogFragment() {
private var _binding: DialogRiskEditBinding? = null
private val binding get() = _binding!!
private var risk: SafetyRisk? = null
private var onSaveListener: ((SafetyRisk) -> Unit)? = null
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return Dialog(requireContext(), R.style.Theme_SafeApp_Dialog)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = DialogRiskEditBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupViews()
setupButtons()
}
private fun setupViews() {
risk?.let { existingRisk ->
binding.apply {
etCode.setText(existingRisk.code)
etDepartment.setText(existingRisk.department)
etSystem.setText(existingRisk.system)
etCategory.setText(existingRisk.category)
etProject.setText(existingRisk.project)
etRiskPoint.setText(existingRisk.riskPoint)
etRiskLevel.setText(existingRisk.riskLevel)
etHarmDegree.setText(existingRisk.harmDegree)
etControlMeasures.setText(existingRisk.controlMeasures)
etControlPosition.setText(existingRisk.controlPosition)
etControlPerson.setText(existingRisk.controlPerson)
etQuantitativeRequirements.setText(existingRisk.quantitativeRequirements)
}
}
}
private fun setupButtons() {
binding.btnCancel.setOnClickListener {
dismiss()
}
binding.btnSave.setOnClickListener {
if (validateInputs()) {
saveRisk()
}
}
// Set click listener for view history button
binding.btnViewHistory.setOnClickListener {
risk?.let { existingRisk ->
// Navigate to RiskMaintenanceFragment with risk ID
val bundle = Bundle().apply {
putLong("riskId", existingRisk.id)
}
findNavController().navigate(R.id.nav_risk_maintenance, bundle)
dismiss() // Dismiss the dialog after navigating
} ?: Toast.makeText(requireContext(), "请先保存风险项点", Toast.LENGTH_SHORT).show()
}
// Show/hide view history button based on whether it's an existing risk
binding.btnViewHistory.visibility = if (risk != null && risk?.id != 0L) View.VISIBLE else View.GONE
}
private fun validateInputs(): Boolean {
binding.apply {
if (etCode.text.isNullOrBlank()) {
etCode.error = "请输入风险编码"
return false
}
if (etDepartment.text.isNullOrBlank()) {
etDepartment.error = "请输入责任部门/工区"
return false
}
if (etSystem.text.isNullOrBlank()) {
etSystem.error = "请输入专业系统"
return false
}
if (etCategory.text.isNullOrBlank()) {
etCategory.error = "请输入风险类别"
return false
}
if (etProject.text.isNullOrBlank()) {
etProject.error = "请输入风险项目"
return false
}
if (etRiskPoint.text.isNullOrBlank()) {
etRiskPoint.error = "请输入风险项点"
return false
}
if (etRiskLevel.text.isNullOrBlank()) {
etRiskLevel.error = "请输入风险等级"
return false
}
if (etHarmDegree.text.isNullOrBlank()) {
etHarmDegree.error = "请输入危害程度"
return false
}
if (etControlMeasures.text.isNullOrBlank()) {
etControlMeasures.error = "请输入管控措施"
return false
}
if (etControlPosition.text.isNullOrBlank()) {
etControlPosition.error = "请输入管控岗位"
return false
}
if (etControlPerson.text.isNullOrBlank()) {
etControlPerson.error = "请输入管控人员"
return false
}
if (etQuantitativeRequirements.text.isNullOrBlank()) {
etQuantitativeRequirements.error = "请输入量化要求"
return false
}
}
return true
}
fun setRisk(risk: SafetyRisk?) {
this.risk = risk
}
fun setOnSaveListener(listener: (SafetyRisk) -> Unit) {
onSaveListener = listener
}
private fun saveRisk() {
val newRisk = SafetyRisk(
id = risk?.id ?: 0,
code = binding.etCode.text.toString(),
department = binding.etDepartment.text.toString(),
system = binding.etSystem.text.toString(),
category = binding.etCategory.text.toString(),
project = binding.etProject.text.toString(),
riskPoint = binding.etRiskPoint.text.toString(),
riskLevel = binding.etRiskLevel.text.toString(),
harmDegree = binding.etHarmDegree.text.toString(),
controlMeasures = binding.etControlMeasures.text.toString(),
controlPosition = binding.etControlPosition.text.toString(),
controlPerson = binding.etControlPerson.text.toString(),
quantitativeRequirements = binding.etQuantitativeRequirements.text.toString(),
createDate = risk?.createDate ?: Date(),
auditStatus = risk?.auditStatus ?: "待审核",
auditDate = risk?.auditDate,
version = (risk?.version ?: 0) + 1
)
onSaveListener?.invoke(newRisk)
dismiss()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
companion object {
fun newInstance(risk: SafetyRisk? = null): RiskEditDialog {
return RiskEditDialog().apply {
setRisk(risk)
}
}
}
}

浙公网安备 33010602011771号