团队作业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)
        }
    }
}

}

posted @ 2025-06-03 23:48  鱼一直摸  阅读(6)  评论(0)    收藏  举报