package com.gyf.csams.uikit import androidx.annotation.StringRes import androidx.compose.foundation.layout.* import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import com.google.accompanist.insets.ExperimentalAnimatedInsets import com.gyf.csams.R import com.gyf.csams.main.model.BaseAuditViewModel import com.gyf.csams.module.AuditVo import com.gyf.csams.module.Duty import com.gyf.lib.uikit.* import com.gyf.lib.util.BottomButton import com.gyf.lib.util.TokenManager val BASE_HEIGHT = 50.dp @ExperimentalMaterialApi @ExperimentalAnimatedInsets @Composable inline fun > ContentCheckForm( @StringRes title: Int, crossinline RegisterForm: @Composable (vo: T) -> Unit ) { ImeBody { val model: E = viewModel() val data by model.data.observeAsState() TestTableImeSimple( title = title ) { data?.forEach { item { RegisterForm(vo = it) CheckForm(vo = it) Spacer(modifier = Modifier.height(10.dp)) } } } } } /** * 表格审核组件 * * @param VO * @param M * @param vo * @param scaffoldModel * @param model * @param first * @param last */ @Composable inline fun > CheckForm( vo: VO, scaffoldModel: ScaffoldModel = viewModel(), model: M = viewModel(), first: @Composable () -> Unit = { RowItem( modifier = Modifier.height(BASE_HEIGHT), key = R.string.first_approver, value = vo.audit.manager?.name ?: "" ) }, last: @Composable () -> Unit = { RowItem( modifier = Modifier.height(BASE_HEIGHT), key = R.string.last_approver, value = vo.audit.nextAudit?.manager?.name ?: "" ) } ) { TokenManager.getManagerInfo()?.let { it -> var confirmDesc: Int? = null var backDesc: Int? = null var onConfirm: (() -> Unit)? = null var onBack: (() -> Unit)? = null val check: (result: Boolean, cause: StringForm) -> Unit = { result: Boolean, cause: StringForm -> scaffoldModel.update( message = "确认${if (result) "上报" else "驳回"}?", actionLabel = "确认" ) { model.check( auditId = vo.audit.id, result = result, cause = cause.getValue() ) { model.load() } } } val accept: (m: String) -> Unit = { m: String -> scaffoldModel.update("确认${m}?", actionLabel = "确认") { model.accept( auditId = vo.audit.id ) { model.load() } } } val doCheck: @Composable () -> Unit = { val cause = ValidStringForm( formDesc = "审核理由", textLength = 20 ) val statusForm by cause.statusForm.observeAsState() onConfirm = { if (statusForm == FormStatus.Empty) { scaffoldModel.update("${cause.formDesc}不能为空", actionLabel = "知道了") } else { check(true, cause) } } onBack = { if (statusForm == FormStatus.Empty) { scaffoldModel.update("${cause.formDesc}不能为空", actionLabel = "知道了") } else { check(false, cause) } } Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center ) { BaseTextField( form = cause ) } } when { //初审记录,负责人为空 等待初审 vo.audit.nextAudit == null && vo.audit.manager == null -> { if (it.duty == Duty.PamphaBhusal) { confirmDesc = R.string.accept_btn onConfirm = { accept("受理") } } first() RowItem(key = R.string.first_approver_origin, value = "") RowItem(key = R.string.first_result, value = "") last() RowItem(key = R.string.last_approver_origin, value = "") RowItem(key = R.string.last_result, value = "") RowItem( modifier = Modifier.height(BASE_HEIGHT), key = R.string.audit_phases, value = "等待初审" ) } //初审记录,负责人不为空 初审受理 vo.audit.nextAudit == null && vo.audit.manager != null && vo.audit.result == null -> { first() if (it.duty == Duty.PamphaBhusal) { confirmDesc = R.string.reported_btn backDesc = R.string.reject_btn doCheck() } else { RowItem(key = R.string.first_approver_origin, value = "") } RowItem(key = R.string.first_result, value = "") last() RowItem(key = R.string.last_approver_origin, value = "") RowItem(key = R.string.last_result, value = "") RowItem( modifier = Modifier.height(BASE_HEIGHT), key = R.string.audit_phases, value = "初审受理" ) } //初审记录,审核通过(上报) 等待复审 vo.audit.nextAudit != null && vo.audit.nextAudit?.manager == null -> { if (it.duty == Duty.Teacher) { confirmDesc = R.string.recheck_btn onConfirm = { accept("复审") } } first() RowItem(key = R.string.first_approver_origin, value = vo.audit.cause) RowItem(key = R.string.first_result, value = "通过") last() RowItem(key = R.string.last_approver_origin, value = "") RowItem(key = R.string.last_result, value = "") RowItem( modifier = Modifier.height(BASE_HEIGHT), key = R.string.audit_phases, value = "等待复审" ) } //复审记录,审核结果为空 复审受理 vo.audit.nextAudit != null && vo.audit.nextAudit?.result == null -> { first() RowItem(key = R.string.first_approver_origin, value = vo.audit.cause) RowItem(key = R.string.first_result, value = "通过") last() if (it.duty == Duty.Teacher) { confirmDesc = R.string.allow_btn backDesc = R.string.reject_btn doCheck() } else { RowItem(key = R.string.last_approver_origin, value = "") } RowItem(key = R.string.last_result, value = "") RowItem( modifier = Modifier.height(BASE_HEIGHT), key = R.string.audit_phases, value = "复审受理" ) } else -> { first() RowItem(key = R.string.first_approver_origin, value = vo.audit.cause) RowItem( key = R.string.first_result, value = when (vo.audit.result) { null -> "" true -> "通过" false -> "不通过" } ) last() RowItem( key = R.string.last_approver_origin, value = vo.audit.nextAudit?.cause ?: "" ) RowItem( key = R.string.last_result, value = when (vo.audit.nextAudit?.result) { null -> "" true -> "通过" false -> "不通过" } ) RowItem( modifier = Modifier.height(BASE_HEIGHT), key = R.string.audit_phases, value = "完成审核" ) } } if (confirmDesc != null) { BottomButton( confirmDesc = confirmDesc, backDesc = backDesc, modifier = Modifier.fillMaxWidth(), onBack = onBack ) { onConfirm?.let { it() } } } } }