diff --git a/background/src/main/AndroidManifest.xml b/background/src/main/AndroidManifest.xml
index 7f78b8c..75bf62d 100644
--- a/background/src/main/AndroidManifest.xml
+++ b/background/src/main/AndroidManifest.xml
@@ -29,6 +29,9 @@
+
+
+
\ No newline at end of file
diff --git a/background/src/main/java/com/gyf/csams/main/model/CheckActViewModel.kt b/background/src/main/java/com/gyf/csams/main/model/CheckActViewModel.kt
new file mode 100644
index 0000000..cd63b3a
--- /dev/null
+++ b/background/src/main/java/com/gyf/csams/main/model/CheckActViewModel.kt
@@ -0,0 +1,51 @@
+package com.gyf.csams.main.model
+
+import android.app.Application
+import androidx.lifecycle.viewModelScope
+import com.gyf.ApplyViewModel
+import com.gyf.lib.util.format
+import com.gyf.lib.util.randomChinese
+import com.gyf.lib.util.randomDateTime
+import kotlinx.coroutines.launch
+
+data class ApplyActVo(
+ val activityName: String, val activityTime: String,
+ val location: String, val desc: String,
+ val size: Int
+)
+
+
+/**
+ * 活动数据管理
+ *
+ */
+class CheckActViewModel(application: Application) : ApplyViewModel(application) {
+ override val initSize: Int = 10
+
+ init {
+ load()
+ }
+
+ override fun load() {
+ viewModelScope.launch {
+ _data.value?.apply {
+ repeat(initSize) {
+ add(
+ ApplyActVo(
+ activityName = randomChinese(5),
+ activityTime = randomDateTime().format(),
+ location = randomChinese(10),
+ desc = randomChinese(10),
+ size = 10
+ )
+ )
+ }
+ }
+ }
+ }
+
+ override fun loadMore(callback: (message: String) -> Unit) {
+ TODO("Not yet implemented")
+ }
+
+}
\ No newline at end of file
diff --git a/background/src/main/java/com/gyf/csams/main/model/CheckQualityReportViewModel.kt b/background/src/main/java/com/gyf/csams/main/model/CheckQualityReportViewModel.kt
new file mode 100644
index 0000000..abe20ce
--- /dev/null
+++ b/background/src/main/java/com/gyf/csams/main/model/CheckQualityReportViewModel.kt
@@ -0,0 +1,62 @@
+package com.gyf.csams.main.model
+
+import android.app.Application
+import androidx.annotation.IntRange
+import androidx.lifecycle.viewModelScope
+import com.gyf.ApplyViewModel
+import com.gyf.lib.util.randomChinese
+import kotlinx.coroutines.launch
+
+
+const val MAX_SCORE = 5L
+
+/**
+ * 活动质量汇报单
+ *
+ * @property applyName 申请人
+ * @property activityName 活动名称
+ * @property merit 优点
+ * @property defect 缺点
+ * @property score 星级评价
+ */
+data class QualityReportVo(
+ val applyName: String,
+ val activityName: String,
+ val merit: String,
+ val defect: String,
+ @IntRange(from = 1L, to = MAX_SCORE) val score: Int
+)
+
+/**
+ * 活动质量汇报单评价
+ *
+ */
+class CheckQualityReportViewModel(application: Application) : ApplyViewModel(
+ application
+) {
+ override val initSize: Int = 10
+
+ init {
+ load()
+ }
+
+ override fun load() {
+ viewModelScope.launch {
+ _data.value?.apply {
+ repeat(initSize) {
+ add(
+ QualityReportVo(
+ applyName = randomChinese(3), activityName = randomChinese(10),
+ merit = randomChinese(10), defect = randomChinese(10),
+ score = (1..5).random()
+ )
+ )
+ }
+ }
+ }
+ }
+
+ override fun loadMore(callback: (message: String) -> Unit) {
+ TODO("Not yet implemented")
+ }
+}
\ No newline at end of file
diff --git a/background/src/main/java/com/gyf/csams/main/model/MenuViewModel.kt b/background/src/main/java/com/gyf/csams/main/model/MenuViewModel.kt
index 39e1b3d..b8c0591 100644
--- a/background/src/main/java/com/gyf/csams/main/model/MenuViewModel.kt
+++ b/background/src/main/java/com/gyf/csams/main/model/MenuViewModel.kt
@@ -2,16 +2,21 @@ package com.gyf.csams.main.model
import android.app.Activity
import androidx.lifecycle.ViewModel
-import com.gyf.csams.main.ui.AssociationManagementActivity
-import com.gyf.csams.main.ui.RenameActivity
+import com.gyf.csams.main.ui.*
enum class MenuType(val desc: String, val clazz: Map>) {
- //老师
- //总部长
Association(
- "社团管理", mapOf(
+ "社团管理",
+ mapOf(
"社团信息管理" to AssociationManagementActivity::class.java,
"审核换名申请表" to RenameActivity::class.java
+ ),
+ ),
+ Act(
+ "活动管理", mapOf(
+ "审核社团活动" to CheckActActivity::class.java,
+ "审核质量报告单" to CheckQualityReportActivity::class.java,
+ "查看社团活动" to ManagerActActivity::class.java
)
)
}
diff --git a/background/src/main/java/com/gyf/csams/main/ui/CheckActActivity.kt b/background/src/main/java/com/gyf/csams/main/ui/CheckActActivity.kt
new file mode 100644
index 0000000..5478d15
--- /dev/null
+++ b/background/src/main/java/com/gyf/csams/main/ui/CheckActActivity.kt
@@ -0,0 +1,87 @@
+package com.gyf.csams.main.ui
+
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import androidx.lifecycle.viewmodel.compose.viewModel
+import com.gyf.csams.R
+import com.gyf.csams.main.model.ApplyActVo
+import com.gyf.csams.main.model.CheckActViewModel
+import com.gyf.csams.uikit.RowItem
+import com.gyf.csams.uikit.TestTable
+import com.gyf.lib.uikit.BaseTextField
+import com.gyf.lib.uikit.ScaffoldModel
+import com.gyf.lib.util.BottomButton
+
+/**
+ * 审批社团活动
+ *
+ */
+class CheckActActivity : ComponentActivity() {
+ @ExperimentalComposeApi
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ setContent {
+ TestTable(
+ clazz = CheckActViewModel::class.java,
+ title = R.string.activity_application
+ ) {
+ ApplyActForm(vo = it)
+ }
+ }
+ }
+
+ @Composable
+ private fun ApplyActForm(
+ modifier: Modifier = Modifier, model: CheckActViewModel = viewModel(),
+ scaffoldModel: ScaffoldModel = viewModel(), vo: ApplyActVo
+ ) {
+ Column(modifier = modifier) {
+ val baseHeight = 50.dp
+ RowItem(
+ modifier = Modifier.height(baseHeight),
+ key = R.string.activity_name,
+ value = vo.activityName
+ )
+ RowItem(
+ modifier = Modifier.height(baseHeight * 1.5F),
+ key = R.string.activity_address,
+ value = vo.location
+ )
+ RowItem(
+ modifier = Modifier.height(baseHeight * 3),
+ key = R.string.activity_desc,
+ value = vo.desc
+ )
+ RowItem(
+ modifier = Modifier.height(baseHeight),
+ key = R.string.activity_size,
+ value = "${vo.size}"
+ )
+ RowItem(
+ modifier = Modifier.height(baseHeight), key = R.string.approver, value = ""
+ /**TODO 获取审批人**/
+ )
+ RowItem(modifier = Modifier.height(baseHeight * 3), key = R.string.approver_origin) {
+ BaseTextField(modifier = Modifier.fillMaxSize(), form = model.approverOrigin)
+ }
+ val message = stringResource(id = R.string.not_impl_error)
+ BottomButton(
+ confirmDesc = R.string.reported_btn, backDesc = R.string.reject_btn,
+ modifier = Modifier.fillMaxWidth()
+ ) {
+ scaffoldModel.update(message = message)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/background/src/main/java/com/gyf/csams/main/ui/CheckQualityReportActivity.kt b/background/src/main/java/com/gyf/csams/main/ui/CheckQualityReportActivity.kt
new file mode 100644
index 0000000..ef09308
--- /dev/null
+++ b/background/src/main/java/com/gyf/csams/main/ui/CheckQualityReportActivity.kt
@@ -0,0 +1,104 @@
+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.layout.*
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import androidx.lifecycle.viewmodel.compose.viewModel
+import com.gyf.csams.R
+import com.gyf.csams.main.model.CheckQualityReportViewModel
+import com.gyf.csams.main.model.MAX_SCORE
+import com.gyf.csams.main.model.QualityReportVo
+import com.gyf.csams.uikit.RowItem
+import com.gyf.csams.uikit.TestTable
+import com.gyf.lib.uikit.BaseTextField
+import com.gyf.lib.uikit.ScaffoldModel
+import com.gyf.lib.util.BottomButton
+
+/**
+ * 审批质量报告单
+ *
+ */
+class CheckQualityReportActivity : ComponentActivity() {
+ @ExperimentalComposeApi
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ setContent {
+ TestTable(
+ clazz = CheckQualityReportViewModel::class.java,
+ title = R.string.quality_report_title
+ ) {
+ CheckQualityReportForm(vo = it)
+ }
+ }
+ }
+
+ @Composable
+ private fun CheckQualityReportForm(
+ modifier: Modifier = Modifier, model: CheckQualityReportViewModel = viewModel(),
+ scaffoldModel: ScaffoldModel = viewModel(), vo: QualityReportVo
+ ) {
+ Column(modifier = modifier) {
+ val baseHeight = 50.dp
+ RowItem(
+ modifier = Modifier.height(baseHeight),
+ key = R.string.petitioner,
+ value = vo.applyName
+ )
+ RowItem(
+ modifier = Modifier.height(baseHeight),
+ key = R.string.activity_name,
+ value = vo.activityName
+ )
+ RowItem(
+ modifier = Modifier.height(baseHeight * 3),
+ key = R.string.activity_merit,
+ value = vo.merit
+ )
+ RowItem(
+ modifier = Modifier.height(baseHeight * 3),
+ key = R.string.activitiy_defect,
+ value = vo.defect
+ )
+ RowItem(
+ modifier = Modifier.height(baseHeight),
+ key = R.string.activity_evaluate
+ ) {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.Center
+ ) {
+ repeat(MAX_SCORE.toInt()) {
+ Image(
+ modifier = Modifier.weight(1F / MAX_SCORE),
+ painter = painterResource(id = if (it < vo.score) R.drawable.ic_collection_fill else R.drawable.ic_collection),
+ contentDescription = null
+ )
+ }
+ }
+ }
+ RowItem(
+ modifier = Modifier.height(baseHeight), key = R.string.approver, value = ""
+ /**TODO 获取审批人**/
+ )
+ RowItem(modifier = Modifier.height(baseHeight * 3), key = R.string.approver_origin) {
+ BaseTextField(modifier = Modifier.fillMaxSize(), form = model.approverOrigin)
+ }
+ val message = stringResource(id = R.string.not_impl_error)
+ BottomButton(
+ confirmDesc = R.string.reported_btn, backDesc = R.string.reject_btn,
+ modifier = Modifier.fillMaxWidth()
+ ) {
+ scaffoldModel.update(message = message)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/background/src/main/java/com/gyf/csams/main/ui/MainActivity.kt b/background/src/main/java/com/gyf/csams/main/ui/MainActivity.kt
index 41cb73a..11a9820 100644
--- a/background/src/main/java/com/gyf/csams/main/ui/MainActivity.kt
+++ b/background/src/main/java/com/gyf/csams/main/ui/MainActivity.kt
@@ -56,7 +56,15 @@ class MainActivity : ComponentActivity() {
}, modifier = Modifier.fillMaxWidth()) {
Text(text = stringResource(id = R.string.association_management))
}
- OutlinedButton(onClick = { /*TODO*/ }, modifier = Modifier.fillMaxWidth()) {
+ OutlinedButton(onClick = {
+ startActivity(
+ Intent(
+ this@MainActivity,
+ MenuActivity::class.java
+ ).apply {
+ putExtra(MenuType::name.name, MenuType.Act)
+ })
+ }, modifier = Modifier.fillMaxWidth()) {
Text(text = stringResource(id = R.string.activity_management))
}
}
diff --git a/background/src/main/java/com/gyf/csams/main/ui/ManagerActActivity.kt b/background/src/main/java/com/gyf/csams/main/ui/ManagerActActivity.kt
new file mode 100644
index 0000000..ef7969b
--- /dev/null
+++ b/background/src/main/java/com/gyf/csams/main/ui/ManagerActActivity.kt
@@ -0,0 +1,6 @@
+package com.gyf.csams.main.ui
+
+import androidx.activity.ComponentActivity
+
+class ManagerActActivity : ComponentActivity() {
+}
\ No newline at end of file
diff --git a/background/src/main/java/com/gyf/csams/main/ui/RenameActivity.kt b/background/src/main/java/com/gyf/csams/main/ui/RenameActivity.kt
index 066c39f..27d3c37 100644
--- a/background/src/main/java/com/gyf/csams/main/ui/RenameActivity.kt
+++ b/background/src/main/java/com/gyf/csams/main/ui/RenameActivity.kt
@@ -3,71 +3,43 @@ package com.gyf.csams.main.ui
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
-import androidx.annotation.StringRes
-import androidx.compose.foundation.border
-import androidx.compose.foundation.layout.*
-import androidx.compose.foundation.lazy.LazyColumn
-import androidx.compose.foundation.lazy.rememberLazyListState
-import androidx.compose.material.MaterialTheme
-import androidx.compose.material.Text
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.livedata.observeAsState
-import androidx.compose.ui.Alignment
+import androidx.compose.runtime.ExperimentalComposeApi
import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import com.gyf.csams.R
import com.gyf.csams.main.model.RenameViewModel
import com.gyf.csams.main.model.RenameVo
+import com.gyf.csams.uikit.RowItem
+import com.gyf.csams.uikit.TestTable
import com.gyf.lib.uikit.BaseTextField
-import com.gyf.lib.uikit.BodyS
-import com.gyf.lib.uikit.MainColumnFrame
import com.gyf.lib.uikit.ScaffoldModel
import com.gyf.lib.util.BottomButton
class RenameActivity : ComponentActivity() {
+ @ExperimentalComposeApi
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
- BodyS {
- MainColumnFrame(background = { /*TODO*/ }) {
- val listState = rememberLazyListState()
- val model: RenameViewModel = viewModel()
- val data by model.data.observeAsState()
- Row(
- horizontalArrangement = Arrangement.Center,
- modifier = Modifier
- .fillMaxWidth()
- .padding(10.dp)
- ) {
- Text(
- text = stringResource(id = R.string.rename_form),
- style = MaterialTheme.typography.h4
- )
- }
- LazyColumn(state = listState) {
- data?.forEach {
- item {
- RenameForm(renameVo = it)
- Spacer(modifier = Modifier.height(10.dp))
- }
- }
-
- }
- }
+ TestTable(clazz = RenameViewModel::class.java, title = R.string.rename_form) {
+ RenameForm(renameVo = it)
}
}
}
@Composable
- private fun RenameForm(modifier: Modifier = Modifier, renameVo: RenameVo) {
- val model: RenameViewModel = viewModel()
- val scaffoldModel: ScaffoldModel = viewModel()
+ private fun RenameForm(
+ modifier: Modifier = Modifier, model: RenameViewModel = viewModel(),
+ scaffoldModel: ScaffoldModel = viewModel(), renameVo: RenameVo
+ ) {
Column(modifier = modifier) {
val baseHeight = 50.dp
RowItem(
@@ -86,7 +58,7 @@ class RenameActivity : ComponentActivity() {
value = renameVo.newName
)
RowItem(
- modifier = Modifier.height(baseHeight),
+ modifier = Modifier.height(baseHeight * 3),
key = R.string.reason_for_application,
value = renameVo.reason
)
@@ -98,49 +70,13 @@ class RenameActivity : ComponentActivity() {
BaseTextField(modifier = Modifier.fillMaxSize(), form = model.approverOrigin)
}
val message = stringResource(id = R.string.not_impl_error)
- BottomButton(modifier = Modifier.fillMaxWidth()) {
+ BottomButton(
+ confirmDesc = R.string.reported_btn, backDesc = R.string.reject_btn,
+ modifier = Modifier.fillMaxWidth()
+ ) {
scaffoldModel.update(message = message)
}
}
}
- @Composable
- private fun RowItem(
- modifier: Modifier = Modifier,
- @StringRes key: Int,
- value: String? = null,
- content: (@Composable () -> Unit)? = null
- ) {
- Row(
- modifier = modifier
- .fillMaxWidth()
- .border(width = 1.dp, color = Color.Black)
- ) {
- Cell(
- modifier = Modifier.weight(0.5F),
- value = stringResource(id = key)
- )
- Cell(modifier = Modifier.weight(0.5F), value = value, content = content)
- }
- }
-
- @Composable
- private fun Cell(
- modifier: Modifier = Modifier,
- value: String? = null,
- content: (@Composable () -> Unit)? = null
- ) {
- Box(
- modifier = modifier
- .fillMaxSize()
- .border(width = 1.dp, color = MaterialTheme.colors.onBackground),
- contentAlignment = Alignment.Center
- ) {
- if (content != null) content() else Text(
- text = value ?: throw IllegalArgumentException(
- "参数错误"
- )
- )
- }
- }
}
\ No newline at end of file
diff --git a/background/src/main/java/com/gyf/csams/uikit/Table.kt b/background/src/main/java/com/gyf/csams/uikit/Table.kt
new file mode 100644
index 0000000..a469742
--- /dev/null
+++ b/background/src/main/java/com/gyf/csams/uikit/Table.kt
@@ -0,0 +1,111 @@
+package com.gyf.csams.uikit
+
+import androidx.annotation.StringRes
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+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.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import androidx.lifecycle.viewmodel.compose.viewModel
+import com.gyf.lib.ScrollListW
+import com.gyf.lib.uikit.BodyS
+import com.gyf.lib.uikit.MainColumnFrame
+
+/**
+ * 表格
+ *
+ * @param callback
+ */
+@ExperimentalComposeApi
+@Composable
+fun TestTable(
+ clazz: Class>,
+ @StringRes title: Int,
+ callback: @Composable (vo: A) -> Unit
+) {
+ BodyS {
+ MainColumnFrame(background = { /*TODO*/ }) {
+ val listState = rememberLazyListState()
+ val model = viewModel(modelClass = clazz)
+ val data by model.data.observeAsState()
+ Row(
+ horizontalArrangement = Arrangement.Center,
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(10.dp)
+ ) {
+ Text(
+ text = stringResource(id = title),
+ style = MaterialTheme.typography.h4
+ )
+ }
+ LazyColumn(state = listState) {
+ data?.forEach {
+ item {
+ callback(vo = it)
+ Spacer(modifier = Modifier.height(10.dp))
+ }
+ }
+
+ }
+ }
+ }
+}
+
+/**
+ * 表格行
+ *
+ * @param modifier
+ * @param key
+ * @param value
+ * @param content
+ */
+@Composable
+fun RowItem(
+ modifier: Modifier = Modifier,
+ @StringRes key: Int,
+ value: String? = null,
+ content: (@Composable () -> Unit)? = null
+) {
+ Row(
+ modifier = modifier
+ .fillMaxWidth()
+ .border(width = 1.dp, color = Color.Black)
+ ) {
+ Cell(
+ modifier = Modifier.weight(0.5F),
+ value = stringResource(id = key)
+ )
+ Cell(modifier = Modifier.weight(0.5F), value = value, content = content)
+ }
+}
+
+@Composable
+private fun Cell(
+ modifier: Modifier = Modifier,
+ value: String? = null,
+ content: (@Composable () -> Unit)? = null
+) {
+ Box(
+ modifier = modifier
+ .fillMaxSize()
+ .border(width = 1.dp, color = MaterialTheme.colors.onBackground),
+ contentAlignment = Alignment.Center
+ ) {
+ if (content != null) content() else Text(
+ text = value ?: throw IllegalArgumentException(
+ "参数错误"
+ )
+ )
+ }
+}
\ No newline at end of file
diff --git a/background/src/main/res/drawable/ic_collection.xml b/background/src/main/res/drawable/ic_collection.xml
new file mode 100644
index 0000000..82a4633
--- /dev/null
+++ b/background/src/main/res/drawable/ic_collection.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/background/src/main/res/drawable/ic_collection_fill.xml b/background/src/main/res/drawable/ic_collection_fill.xml
new file mode 100644
index 0000000..8d3baba
--- /dev/null
+++ b/background/src/main/res/drawable/ic_collection_fill.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/background/src/main/res/values-en/strings.xml b/background/src/main/res/values-en/strings.xml
index 16f5561..d6db783 100644
--- a/background/src/main/res/values-en/strings.xml
+++ b/background/src/main/res/values-en/strings.xml
@@ -18,4 +18,9 @@
导员
只能调整干事职务!
部门干事管理
+ 上报
+ 驳回
+ 优点
+ 缺点
+ 评价
\ No newline at end of file
diff --git a/background/src/main/res/values-zh/strings.xml b/background/src/main/res/values-zh/strings.xml
index 16f5561..d6db783 100644
--- a/background/src/main/res/values-zh/strings.xml
+++ b/background/src/main/res/values-zh/strings.xml
@@ -18,4 +18,9 @@
导员
只能调整干事职务!
部门干事管理
+ 上报
+ 驳回
+ 优点
+ 缺点
+ 评价
\ No newline at end of file
diff --git a/background/src/main/res/values/strings.xml b/background/src/main/res/values/strings.xml
index 16f5561..d6db783 100644
--- a/background/src/main/res/values/strings.xml
+++ b/background/src/main/res/values/strings.xml
@@ -18,4 +18,9 @@
导员
只能调整干事职务!
部门干事管理
+ 上报
+ 驳回
+ 优点
+ 缺点
+ 评价
\ No newline at end of file
diff --git a/lib/src/main/java/com/gyf/ApplyViewModel.kt b/lib/src/main/java/com/gyf/ApplyViewModel.kt
new file mode 100644
index 0000000..b8a8b8d
--- /dev/null
+++ b/lib/src/main/java/com/gyf/ApplyViewModel.kt
@@ -0,0 +1,11 @@
+package com.gyf
+
+import android.app.Application
+import com.gyf.lib.R
+import com.gyf.lib.ScrollListW
+import com.gyf.lib.uikit.StringForm
+
+abstract class ApplyViewModel(application: Application) : ScrollListW(application) {
+ val approverOrigin =
+ StringForm(formDesc = application.getString(R.string.approver_origin), textLength = 30)
+}
\ No newline at end of file
diff --git a/lib/src/main/res/values-en/strings.xml b/lib/src/main/res/values-en/strings.xml
index 5e676ac..c0e336f 100644
--- a/lib/src/main/res/values-en/strings.xml
+++ b/lib/src/main/res/values-en/strings.xml
@@ -20,4 +20,5 @@
审批人
审核理由
抱歉此功能尚未开放
+ 活动质量汇报单
\ No newline at end of file
diff --git a/lib/src/main/res/values-zh/strings.xml b/lib/src/main/res/values-zh/strings.xml
index 5e676ac..c0e336f 100644
--- a/lib/src/main/res/values-zh/strings.xml
+++ b/lib/src/main/res/values-zh/strings.xml
@@ -20,4 +20,5 @@
审批人
审核理由
抱歉此功能尚未开放
+ 活动质量汇报单
\ No newline at end of file
diff --git a/lib/src/main/res/values/strings.xml b/lib/src/main/res/values/strings.xml
index 5e676ac..c0e336f 100644
--- a/lib/src/main/res/values/strings.xml
+++ b/lib/src/main/res/values/strings.xml
@@ -20,4 +20,5 @@
审批人
审核理由
抱歉此功能尚未开放
+ 活动质量汇报单
\ No newline at end of file