You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
310 lines
12 KiB
310 lines
12 KiB
package com.gyf.csams.main.ui
|
|
|
|
import android.os.Bundle
|
|
import androidx.activity.ComponentActivity
|
|
import androidx.activity.compose.setContent
|
|
import androidx.compose.foundation.Image
|
|
import androidx.compose.foundation.border
|
|
import androidx.compose.foundation.layout.*
|
|
import androidx.compose.material.ExperimentalMaterialApi
|
|
import androidx.compose.material.MaterialTheme
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.ExperimentalComposeApi
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.livedata.observeAsState
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.unit.dp
|
|
import androidx.core.view.WindowCompat
|
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
|
import com.google.accompanist.coil.rememberCoilPainter
|
|
import com.google.accompanist.insets.ExperimentalAnimatedInsets
|
|
import com.google.accompanist.insets.navigationBarsWithImePadding
|
|
import com.gyf.csams.R
|
|
import com.gyf.csams.main.model.AuditAssociationViewModel
|
|
import com.gyf.csams.uikit.RowItem
|
|
import com.gyf.csams.uikit.TestTableImeSimple
|
|
import com.gyf.lib.uikit.*
|
|
import com.gyf.lib.util.*
|
|
|
|
class AuditAssociationActivity : ComponentActivity() {
|
|
@ExperimentalMaterialApi
|
|
@ExperimentalAnimatedInsets
|
|
@ExperimentalComposeApi
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
WindowCompat.setDecorFitsSystemWindows(window, false)
|
|
setContent {
|
|
ImeBody {
|
|
val model: AuditAssociationViewModel = viewModel()
|
|
val data by model.data.observeAsState()
|
|
TestTableImeSimple(
|
|
title = R.string.association_reg_title
|
|
) {
|
|
data?.forEach {
|
|
item {
|
|
RegisterForm(vo = it)
|
|
Spacer(modifier = Modifier.height(10.dp))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@Composable
|
|
private fun CheckForm(
|
|
vo: DisposeRegInfoVo,
|
|
scaffoldModel: ScaffoldModel = viewModel(),
|
|
auditAssociationViewModel: AuditAssociationViewModel = viewModel(),
|
|
first: @Composable () -> Unit,
|
|
last: @Composable () -> Unit
|
|
) {
|
|
val baseHeight = 50.dp
|
|
|
|
(TokenManager.getOwnInfo() as? ManagerVo)?.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 = "确认"
|
|
) {
|
|
auditAssociationViewModel.check(
|
|
regId = vo.log.id,
|
|
result = result,
|
|
cause = cause.formValue.value
|
|
?: throw IllegalArgumentException("无法获取审核理由")
|
|
) {
|
|
scaffoldModel.update(message = it, actionLabel = "刷新") {
|
|
auditAssociationViewModel.load { }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
val accept: (m: String, isFirstAccept: Boolean) -> Unit =
|
|
{ m: String, isFirstAccept: Boolean ->
|
|
scaffoldModel.update("确认${m}?", actionLabel = "确认") {
|
|
auditAssociationViewModel.accept(
|
|
regId = vo.log.id,
|
|
isFirstAccept = isFirstAccept
|
|
) {
|
|
scaffoldModel.update(message = it, actionLabel = "刷新") {
|
|
auditAssociationViewModel.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(
|
|
modifier = Modifier.navigationBarsWithImePadding(),
|
|
form = cause
|
|
)
|
|
}
|
|
}
|
|
|
|
when {
|
|
//初审记录,负责人为空 等待初审
|
|
vo.log.nextAudit == null && vo.log.manager == null -> {
|
|
if (it.duty == Duty.PamphaBhusal) {
|
|
confirmDesc = R.string.accept_btn
|
|
onConfirm = { accept("受理", true) }
|
|
}
|
|
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(baseHeight),
|
|
key = R.string.audit_phases, value = "等待初审"
|
|
)
|
|
}
|
|
//初审记录,负责人不为空 初审受理
|
|
vo.log.nextAudit == null && vo.log.manager != 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(baseHeight),
|
|
key = R.string.audit_phases, value = "初审受理"
|
|
)
|
|
}
|
|
//初审记录,审核通过(上报) 等待复审
|
|
vo.log.nextAudit != null && vo.log.nextAudit?.manager == null -> {
|
|
|
|
if (it.duty == Duty.Teacher) {
|
|
confirmDesc = R.string.recheck_btn
|
|
onConfirm = { accept("复审", false) }
|
|
}
|
|
first()
|
|
RowItem(key = R.string.first_approver_origin, value = vo.log.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(baseHeight),
|
|
key = R.string.audit_phases, value = "等待复审"
|
|
)
|
|
}
|
|
//复审记录,审核结果为空 复审受理
|
|
vo.log.nextAudit != null && vo.log.nextAudit?.result == null -> {
|
|
first()
|
|
RowItem(key = R.string.first_approver_origin, value = vo.log.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(baseHeight),
|
|
key = R.string.audit_phases, value = "复审受理"
|
|
)
|
|
}
|
|
else -> {
|
|
first()
|
|
RowItem(key = R.string.first_approver_origin, value = vo.log.cause)
|
|
RowItem(
|
|
key = R.string.first_result, value = when (vo.log.result) {
|
|
null -> ""
|
|
true -> "通过"
|
|
false -> "不通过"
|
|
}
|
|
)
|
|
last()
|
|
RowItem(
|
|
key = R.string.last_approver_origin,
|
|
value = vo.log.nextAudit?.cause ?: ""
|
|
)
|
|
RowItem(
|
|
key = R.string.last_result, value = when (vo.log.nextAudit?.result) {
|
|
null -> ""
|
|
true -> "通过"
|
|
false -> "不通过"
|
|
}
|
|
)
|
|
RowItem(
|
|
modifier = Modifier.height(baseHeight),
|
|
key = R.string.audit_phases, value = "完成审核"
|
|
)
|
|
}
|
|
}
|
|
|
|
if (confirmDesc != null) {
|
|
BottomButton(
|
|
confirmDesc = confirmDesc,
|
|
backDesc = backDesc,
|
|
modifier = Modifier.fillMaxWidth(),
|
|
onBack = onBack
|
|
) {
|
|
onConfirm?.let { it() }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Composable
|
|
private fun RegisterForm(
|
|
modifier: Modifier = Modifier, vo: DisposeRegInfoVo
|
|
) {
|
|
Column(
|
|
modifier = modifier.border(
|
|
width = 1.dp,
|
|
color = MaterialTheme.colors.onBackground
|
|
)
|
|
) {
|
|
val baseHeight = 50.dp
|
|
|
|
RowItem(
|
|
modifier = Modifier.height(baseHeight),
|
|
key = R.string.petitioner,
|
|
value = vo.log.user.name
|
|
)
|
|
|
|
RowItem(
|
|
modifier = Modifier.height(baseHeight),
|
|
key = R.string.association_name,
|
|
value = vo.name
|
|
)
|
|
|
|
RowItem(
|
|
modifier = Modifier.height(baseHeight),
|
|
key = R.string.association_desc,
|
|
value = vo.desc
|
|
)
|
|
|
|
RowItem(
|
|
modifier = Modifier.height(baseHeight * 3),
|
|
key = R.string.association_logo
|
|
) {
|
|
//TODO 图片全屏显示
|
|
val painter =
|
|
rememberCoilPainter(Api.buildUrl(vo.logo))
|
|
Image(painter = painter, contentDescription = null)
|
|
}
|
|
|
|
CheckForm(vo = vo, first = {
|
|
RowItem(
|
|
modifier = Modifier.height(baseHeight),
|
|
key = R.string.first_approver,
|
|
value = vo.log.manager?.name ?: ""
|
|
)
|
|
}, last = {
|
|
RowItem(
|
|
modifier = Modifier.height(baseHeight),
|
|
key = R.string.last_approver,
|
|
value = vo.log.nextAudit?.manager?.name ?: ""
|
|
)
|
|
})
|
|
|
|
}
|
|
}
|
|
} |