Forráskód Böngészése

作业详情页面开发完成

bjb 4 hónapja
szülő
commit
02d8f55a92

+ 2 - 2
.idea/deploymentTargetSelector.xml

@@ -4,10 +4,10 @@
     <selectionStates>
       <SelectionState runConfigName="app">
         <option name="selectionMode" value="DROPDOWN" />
-        <DropdownSelection timestamp="2025-12-23T00:54:45.591141200Z">
+        <DropdownSelection timestamp="2025-12-24T06:35:24.548830500Z">
           <Target type="DEFAULT_BOOT">
             <handle>
-              <DeviceId pluginId="PhysicalDevice" identifier="serial=d8d12db95670c08" />
+              <DeviceId pluginId="Default" identifier="serial=192.168.0.38:5555;connection=6171309d" />
             </handle>
           </Target>
         </DropdownSelection>

+ 5 - 0
app/src/main/AndroidManifest.xml

@@ -54,6 +54,11 @@
             android:name=".ui.pages.edit.step.PageEditStep"
             android:exported="true"
             android:screenOrientation="portrait" />
+        <!--  作业详情  -->
+        <activity
+            android:name=".ui.pages.detail.job.PageDetailJob"
+            android:exported="true"
+            android:screenOrientation="portrait" />
         <!--  阿里消息推送服务配置  -->
         <service
             android:name=".service.AliPushService"

+ 5 - 2
app/src/main/java/com/iscs/bozzys/ui/pages/compose/JobListItem.kt

@@ -21,26 +21,29 @@ import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
 import com.iscs.bozzys.R
+import com.iscs.bozzys.ui.pages.detail.job.openPageDetailJob
 import com.iscs.bozzys.ui.theme.Text
 
 @OptIn(ExperimentalLayoutApi::class)
 @Composable
 fun JobListItem() {
+    val ctx = LocalContext.current
     Column(
         Modifier
-            .padding(bottom = 15.dp)
+            .padding(top = 1.dp, bottom = 15.dp)
             .fillMaxWidth()
             .height(156.dp)
             .border(1.dp, color = Color(0xFFEEEEEE), shape = RoundedCornerShape(12.dp))
             .clip(RoundedCornerShape(12.dp))
             .background(Color(0xFFF8F9FA))
-            .clickable(onClick = {})
+            .clickable(onClick = { ctx.openPageDetailJob() })
             .padding(16.dp)
     ) {
         Row {

+ 4 - 3
app/src/main/java/com/iscs/bozzys/ui/pages/create/job/PageCreateJob.kt

@@ -86,12 +86,13 @@ class PageCreateJob : PageBase() {
                     .padding(top = 15.dp, bottom = (15f + pv.calculateBottomPadding().value).dp)
             ) {
                 Button(
-                    { openPageEditStep() }, Modifier
+                    onClick = { openPageEditStep() }, modifier = Modifier
                         .padding(horizontal = 16.dp)
                         .fillMaxWidth()
-                        .height(56.dp)
+                        .height(50.dp)
                         .clip(RoundedCornerShape(12.dp))
-                        .background(MaterialTheme.colorScheme.primary)
+                        .background(MaterialTheme.colorScheme.primary),
+                    shape = RoundedCornerShape(12.dp)
                 ) {
                     Row(verticalAlignment = Alignment.CenterVertically) {
                         Text("下一步", fontSize = 16.sp, fontWeight = FontWeight.Bold)

+ 479 - 0
app/src/main/java/com/iscs/bozzys/ui/pages/detail/job/PageDetailJob.kt

@@ -0,0 +1,479 @@
+package com.iscs.bozzys.ui.pages.detail.job
+
+import android.content.Context
+import android.content.Intent
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.FlowRow
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.heightIn
+import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.text.BasicTextField
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material3.Icon
+import androidx.compose.material3.LocalTextStyle
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.iscs.bozzys.R
+import com.iscs.bozzys.ui.base.PageBase
+import com.iscs.bozzys.ui.base.Title
+import com.iscs.bozzys.ui.pages.compose.CardContainer
+import com.iscs.bozzys.ui.theme.Main
+import com.iscs.bozzys.ui.theme.Text
+
+/**
+ * 跳转到作业详情页面
+ */
+fun Context.openPageDetailJob() {
+    startActivity(Intent(this, PageDetailJob::class.java))
+}
+
+/**
+ * 作业详情页面
+ */
+class PageDetailJob : PageBase() {
+
+    @Composable
+    override fun GetViews(pv: PaddingValues) {
+        val pb = pv.calculateBottomPadding()
+        Column(
+            modifier = Modifier
+                .background(Color(0xFFF8F8F8))
+        ) {
+            Title(pv, "作业详情")
+            Column(
+                modifier = Modifier
+                    .weight(1f)
+                    .verticalScroll(state = rememberScrollState())
+                    .padding(16.dp)
+            ) {
+                CardContainer(
+                    modifier = Modifier
+                        .fillMaxWidth()
+                ) {
+                    Column(Modifier.padding(10.dp)) {
+                        Row(verticalAlignment = Alignment.CenterVertically) {
+                            Icon(
+                                painterResource(R.drawable.jobs),
+                                contentDescription = null,
+                                modifier = Modifier
+                                    .padding(end = 5.dp)
+                                    .size(16.dp),
+                                tint = MaterialTheme.colorScheme.primary
+                            )
+                            Text("审核作业", fontSize = 16.sp, fontWeight = FontWeight.Bold, color = Text)
+                        }
+                        FlowRow(
+                            verticalArrangement = Arrangement.Center, modifier = Modifier
+                                .padding(top = 6.dp)
+                                .offset(x = (-3).dp)
+                        ) {
+                            Row(
+                                modifier = Modifier
+                                    .padding(horizontal = 3.dp, vertical = 3.dp)
+                                    .clip(RoundedCornerShape(50))
+                                    .background(Color(0xFFFFF8E6))
+                                    .padding(horizontal = 10.dp, vertical = 2.dp),
+                                verticalAlignment = Alignment.CenterVertically
+                            ) {
+                                Icon(
+                                    painterResource(R.drawable.number),
+                                    contentDescription = null,
+                                    tint = MaterialTheme.colorScheme.primary,
+                                    modifier = Modifier
+                                        .padding(end = 3.dp)
+                                        .size(14.dp)
+                                )
+                                Text("WO-2025-003", fontSize = 12.sp, color = Text)
+                            }
+                            Row(
+                                modifier = Modifier
+                                    .padding(horizontal = 3.dp, vertical = 3.dp)
+                                    .clip(RoundedCornerShape(50))
+                                    .background(Color(0xFFFFF8E6))
+                                    .padding(horizontal = 10.dp, vertical = 2.dp),
+                                verticalAlignment = Alignment.CenterVertically
+                            ) {
+                                Icon(
+                                    painterResource(R.drawable.location),
+                                    contentDescription = null,
+                                    tint = MaterialTheme.colorScheme.primary,
+                                    modifier = Modifier
+                                        .padding(end = 3.dp)
+                                        .size(14.dp)
+                                )
+                                Text("车间A区", fontSize = 12.sp, color = Text)
+                            }
+                            Row(
+                                modifier = Modifier
+                                    .padding(horizontal = 3.dp, vertical = 3.dp)
+                                    .clip(RoundedCornerShape(50))
+                                    .background(Color(0xFFFFF8E6))
+                                    .padding(horizontal = 10.dp, vertical = 2.dp),
+                                verticalAlignment = Alignment.CenterVertically
+                            ) {
+                                Icon(
+                                    painterResource(R.drawable.user),
+                                    contentDescription = null,
+                                    tint = MaterialTheme.colorScheme.primary,
+                                    modifier = Modifier
+                                        .padding(end = 3.dp)
+                                        .size(14.dp)
+                                )
+                                Text("张三", fontSize = 12.sp, color = Text)
+                            }
+                            Row(
+                                modifier = Modifier
+                                    .padding(horizontal = 3.dp, vertical = 3.dp)
+                                    .clip(RoundedCornerShape(50))
+                                    .background(Color(0xFFFFF8E6))
+                                    .padding(horizontal = 10.dp, vertical = 2.dp),
+                                verticalAlignment = Alignment.CenterVertically
+                            ) {
+                                Icon(
+                                    painterResource(R.drawable.target),
+                                    contentDescription = null,
+                                    tint = MaterialTheme.colorScheme.primary,
+                                    modifier = Modifier
+                                        .padding(end = 3.dp)
+                                        .size(14.dp)
+                                )
+                                Text("待审核", fontSize = 12.sp, color = Text)
+                            }
+                            Row(
+                                modifier = Modifier
+                                    .padding(horizontal = 3.dp, vertical = 3.dp)
+                                    .clip(RoundedCornerShape(50))
+                                    .background(Color(0xFFFFF8E6))
+                                    .padding(horizontal = 10.dp, vertical = 2.dp),
+                                verticalAlignment = Alignment.CenterVertically
+                            ) {
+                                Icon(
+                                    painterResource(R.drawable.job_todo),
+                                    contentDescription = null,
+                                    tint = MaterialTheme.colorScheme.primary,
+                                    modifier = Modifier
+                                        .padding(end = 3.dp)
+                                        .size(14.dp)
+                                )
+                                Text("8小时", fontSize = 12.sp, color = Text)
+                            }
+                        }
+                    }
+                }
+                // 检修计划方案
+                CardContainer(
+                    modifier = Modifier
+                        .padding(top = 16.dp)
+                        .fillMaxWidth()
+                ) {
+                    Column(Modifier.padding(10.dp)) {
+                        Row(verticalAlignment = Alignment.CenterVertically) {
+                            Icon(
+                                painterResource(R.drawable.job_check),
+                                contentDescription = null,
+                                modifier = Modifier
+                                    .padding(end = 5.dp)
+                                    .size(16.dp),
+                                tint = MaterialTheme.colorScheme.primary
+                            )
+                            Text("检修计划方案", fontSize = 16.sp, fontWeight = FontWeight.Bold, color = Text)
+                        }
+                        Spacer(
+                            Modifier
+                                .padding(vertical = 10.dp)
+                                .fillMaxWidth()
+                                .height(1.dp)
+                                .background(Color(0xFFF5F5F5))
+                        )
+                        Text("本次检修主要针对三号线履带传送线分装设备进行日常维护保养,包括:", fontSize = 14.sp, color = Color(0xFF666666))
+                    }
+                }
+                // 核心风险点
+                CardContainer(
+                    modifier = Modifier
+                        .padding(top = 16.dp)
+                        .fillMaxWidth()
+                ) {
+                    Column(Modifier.padding(10.dp)) {
+                        Row(verticalAlignment = Alignment.CenterVertically) {
+                            Icon(
+                                painterResource(R.drawable.job_warning),
+                                contentDescription = null,
+                                modifier = Modifier
+                                    .padding(end = 5.dp)
+                                    .size(16.dp),
+                                tint = MaterialTheme.colorScheme.primary
+                            )
+                            Text("核心风险点", fontSize = 16.sp, fontWeight = FontWeight.Bold, color = Text)
+                        }
+                        Spacer(
+                            Modifier
+                                .padding(vertical = 10.dp)
+                                .fillMaxWidth()
+                                .height(1.dp)
+                                .background(Color(0xFFF5F5F5))
+                        )
+                        Box(
+                            Modifier
+                                .padding(bottom = 6.dp)
+                                .clip(RoundedCornerShape(4.dp))
+                                .background(Color(0xFFFF4D4F))
+                        ) {
+                            Row(
+                                Modifier
+                                    .offset(x = 3.dp)
+                                    .clip(RoundedCornerShape(2.dp))
+                                    .background(Color(0xFFFFF0E6))
+                                    .padding(horizontal = 8.dp, vertical = 5.dp)
+                            ) {
+                                Text("1.", color = Color(0xFFFF4D4F), fontSize = 14.sp, modifier = Modifier.padding(end = 6.dp))
+                                Text(
+                                    "机械伤害风险:设备运行时可能造成人员伤害",
+                                    fontSize = 14.sp,
+                                    color = Color(0xFF666666),
+                                    modifier = Modifier.weight(1f)
+                                )
+                            }
+                        }
+                        Box(
+                            Modifier
+                                .padding(bottom = 6.dp)
+                                .clip(RoundedCornerShape(4.dp))
+                                .background(Color(0xFFFF4D4F))
+                        ) {
+                            Row(
+                                Modifier
+                                    .offset(x = 3.dp)
+                                    .clip(RoundedCornerShape(2.dp))
+                                    .background(Color(0xFFFFF0E6))
+                                    .padding(horizontal = 8.dp, vertical = 5.dp)
+                            ) {
+                                Text("2.", color = Color(0xFFFF4D4F), fontSize = 14.sp, modifier = Modifier.padding(end = 6.dp))
+                                Text(
+                                    "电气安全风险:设备断电不彻底可能导致触电",
+                                    fontSize = 14.sp,
+                                    color = Color(0xFF666666),
+                                    modifier = Modifier.weight(1f)
+                                )
+                            }
+                        }
+                        Box(
+                            Modifier
+                                .padding(bottom = 6.dp)
+                                .clip(RoundedCornerShape(4.dp))
+                                .background(Color(0xFFFF4D4F))
+                        ) {
+                            Row(
+                                Modifier
+                                    .offset(x = 3.dp)
+                                    .clip(RoundedCornerShape(2.dp))
+                                    .background(Color(0xFFFFF0E6))
+                                    .padding(horizontal = 8.dp, vertical = 5.dp)
+                            ) {
+                                Text("3.", color = Color(0xFFFF4D4F), fontSize = 14.sp, modifier = Modifier.padding(end = 6.dp))
+                                Text(
+                                    "高处作业风险:部分检修位置需要登高作业",
+                                    fontSize = 14.sp,
+                                    color = Color(0xFF666666),
+                                    modifier = Modifier.weight(1f)
+                                )
+                            }
+                        }
+                    }
+                }
+                // 相关资料附件
+                CardContainer(
+                    modifier = Modifier
+                        .padding(top = 16.dp)
+                        .fillMaxWidth()
+                ) {
+                    Column(Modifier.padding(10.dp)) {
+                        Row(verticalAlignment = Alignment.CenterVertically) {
+                            Icon(
+                                painterResource(R.drawable.job_attach),
+                                contentDescription = null,
+                                modifier = Modifier
+                                    .padding(end = 5.dp)
+                                    .size(16.dp),
+                                tint = MaterialTheme.colorScheme.primary
+                            )
+                            Text("相关资料附件", fontSize = 16.sp, fontWeight = FontWeight.Bold, color = Text)
+                        }
+                        Spacer(
+                            Modifier
+                                .padding(vertical = 10.dp)
+                                .fillMaxWidth()
+                                .height(1.dp)
+                                .background(Color(0xFFF5F5F5))
+                        )
+                        Row(
+                            verticalAlignment = Alignment.CenterVertically,
+                            modifier = Modifier
+                                .padding(bottom = 6.dp)
+                                .fillMaxWidth()
+                                .border(1.dp, color = Color(0xFFEEEEEE), shape = RoundedCornerShape(12.dp))
+                                .clip(RoundedCornerShape(12.dp))
+                                .background(Color(0xFFF8F8F8))
+                                .padding(10.dp)
+                        ) {
+                            Icon(
+                                painterResource(R.drawable.file_pdf),
+                                contentDescription = null,
+                                modifier = Modifier
+                                    .padding(end = 5.dp)
+                                    .size(16.dp),
+                                tint = MaterialTheme.colorScheme.primary
+                            )
+                            Text("检修方案.pdf", color = Text, fontSize = 14.sp)
+                        }
+                        Row(
+                            verticalAlignment = Alignment.CenterVertically,
+                            modifier = Modifier
+                                .padding(bottom = 6.dp)
+                                .fillMaxWidth()
+                                .border(1.dp, color = Color(0xFFEEEEEE), shape = RoundedCornerShape(12.dp))
+                                .clip(RoundedCornerShape(12.dp))
+                                .background(Color(0xFFF8F8F8))
+                                .padding(10.dp)
+                        ) {
+                            Icon(
+                                painterResource(R.drawable.file_jpg),
+                                contentDescription = null,
+                                modifier = Modifier
+                                    .padding(end = 5.dp)
+                                    .size(16.dp),
+                                tint = MaterialTheme.colorScheme.primary
+                            )
+                            Text("设备位置图.jpg", color = Text, fontSize = 14.sp)
+                        }
+                    }
+                }
+                // 审核意见
+                CardContainer(
+                    modifier = Modifier
+                        .padding(top = 16.dp)
+                        .fillMaxWidth()
+                ) {
+                    Column(Modifier.padding(10.dp)) {
+                        Row(verticalAlignment = Alignment.CenterVertically) {
+                            Icon(
+                                painterResource(R.drawable.message),
+                                contentDescription = null,
+                                modifier = Modifier
+                                    .padding(end = 5.dp)
+                                    .size(16.dp),
+                                tint = MaterialTheme.colorScheme.primary
+                            )
+                            Text("审核意见", fontSize = 16.sp, fontWeight = FontWeight.Bold, color = Text)
+                        }
+                        Spacer(
+                            Modifier
+                                .padding(vertical = 10.dp)
+                                .fillMaxWidth()
+                                .height(1.dp)
+                                .background(Color(0xFFF5F5F5))
+                        )
+                        BasicTextField(
+                            "",
+                            onValueChange = {},
+                            Modifier
+                                .fillMaxWidth()
+                                .heightIn(min = 120.dp)
+                                .border(1.dp, color = Color(0xFFEEEEEE), shape = RoundedCornerShape(12.dp))
+                                .clip(RoundedCornerShape(12.dp))
+                                .background(Color(0xFFF8F8F8))
+                                .padding(10.dp),
+                            textStyle = LocalTextStyle.current.copy(fontSize = 14.sp, lineHeight = 18.sp),
+                            decorationBox = { innerTextField ->
+                                Box(contentAlignment = Alignment.TopStart) {
+                                    innerTextField()
+                                    if ("".isEmpty()) {
+                                        val text = "请输入审核意见"
+                                        Text(text, color = Color(0xFF9CA3AF), fontSize = 14.sp, lineHeight = 18.sp)
+                                    }
+                                }
+                            },
+                            cursorBrush = SolidColor(Main),
+                            keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text)
+                        )
+                    }
+                }
+            }
+            // 底部功能按钮
+            Row(
+                modifier = Modifier
+                    .padding(bottom = if (pb.value <= 0) 10.dp else pb)
+                    .padding(horizontal = 24.dp)
+                    .fillMaxWidth()
+            ) {
+                Button(
+                    {}, modifier = Modifier
+                        .weight(1f)
+                        .height(50.dp)
+                        .clip(RoundedCornerShape(12.dp)),
+                    colors = ButtonDefaults.buttonColors(containerColor = Color(0xFFFFF0E6)),
+                    shape = RoundedCornerShape(12.dp)
+                ) {
+                    Row(verticalAlignment = Alignment.CenterVertically) {
+                        Icon(
+                            painter = painterResource(R.drawable.job_close),
+                            contentDescription = null,
+                            modifier = Modifier
+                                .padding(end = 5.dp)
+                                .size(16.dp),
+                            tint = Color(0xFFFF4D4F)
+                        )
+                        Text("审核不通过", color = Color(0xFFFF4D4F))
+                    }
+                }
+                Spacer(Modifier.width(16.dp))
+                Button(
+                    {}, modifier = Modifier
+                        .weight(1f)
+                        .height(50.dp)
+                        .clip(RoundedCornerShape(12.dp)),
+                    shape = RoundedCornerShape(12.dp)
+                ) {
+                    Row(verticalAlignment = Alignment.CenterVertically) {
+                        Icon(
+                            painter = painterResource(R.drawable.job_finish),
+                            contentDescription = null,
+                            modifier = Modifier
+                                .padding(end = 5.dp)
+                                .size(16.dp),
+                            tint = Color.White
+                        )
+                        Text("审核通过", color = Color.White)
+                    }
+                }
+            }
+        }
+    }
+}

+ 2 - 1
app/src/main/java/com/iscs/bozzys/ui/pages/home/HomeCompose.kt

@@ -35,6 +35,7 @@ import androidx.compose.runtime.remember
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.text.font.FontWeight
@@ -83,7 +84,7 @@ private fun TopToolBar(pv: PaddingValues, vmHome: VMHome) {
     Column(
         modifier = Modifier
             .fillMaxWidth()
-            .background(Main)
+            .background(brush = Brush.horizontalGradient(listOf(Color(0xFFFF8C00), Color(0xFFFFA500))))
             .padding(top = pv.calculateTopPadding())
     ) {
         Row(

+ 139 - 18
app/src/main/java/com/iscs/bozzys/ui/pages/home/JobsCompose.kt

@@ -14,18 +14,26 @@ import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.lazy.rememberLazyListState
 import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.text.BasicTextField
 import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.Icon
+import androidx.compose.material3.LocalTextStyle
 import androidx.compose.material3.Text
 import androidx.compose.material3.pulltorefresh.PullToRefreshBox
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.SolidColor
 import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.text.font.FontWeight
@@ -54,6 +62,7 @@ fun JobsCompose(pv: PaddingValues, zIndex: Float, vmHome: VMHome) {
                 .fillMaxSize()
         ) {
             TopToolBar(pv, vmHome)
+            FilterBar()
             MessageList()
         }
     }
@@ -65,16 +74,16 @@ fun JobsCompose(pv: PaddingValues, zIndex: Float, vmHome: VMHome) {
 @Composable
 private fun TopToolBar(pv: PaddingValues, vmHome: VMHome) {
     val ctx = LocalContext.current
+    var keywords by remember { mutableStateOf("") }
     Column(
         modifier = Modifier
             .fillMaxWidth()
-            .background(Main)
-            .padding(top = pv.calculateTopPadding())
+            .background(brush = Brush.horizontalGradient(listOf(Color(0xFFFF8C00), Color(0xFFFFA500))))
+            .padding(top = pv.calculateTopPadding() + 8.dp)
     ) {
         Row(
             modifier = Modifier
                 .fillMaxWidth()
-                .height(66.dp)
                 .padding(start = 16.dp, end = 10.dp),
             verticalAlignment = Alignment.CenterVertically
         ) {
@@ -91,6 +100,98 @@ private fun TopToolBar(pv: PaddingValues, vmHome: VMHome) {
                 tint = Color.White
             )
         }
+        Row(
+            Modifier
+                .background(brush = Brush.horizontalGradient(listOf(Color(0xFFFF8C00), Color(0xFFFFA500))))
+                .padding(horizontal = 16.dp, vertical = 8.dp)
+        ) {
+            BasicTextField(
+                keywords,
+                onValueChange = { keywords = it },
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .height(40.dp)
+                    .clip(RoundedCornerShape(50))
+                    .background(brush = Brush.horizontalGradient(listOf(Color(0xFFFFA126), Color(0xFFFFB126))))
+                    .padding(horizontal = 16.dp),
+                singleLine = true,
+                textStyle = LocalTextStyle.current.copy(fontSize = 16.sp, lineHeight = 18.sp, color = Color.White),
+                decorationBox = { innerTextField ->
+                    Box(contentAlignment = Alignment.CenterStart) {
+                        innerTextField()
+                        if (keywords.isEmpty()) {
+                            val text = "搜索作业票、作业名称..."
+                            Text(
+                                text,
+                                color = Color.White.copy(alpha = 0.8f),
+                                fontSize = 16.sp,
+                                lineHeight = 18.sp
+                            )
+                        }
+                    }
+                },
+                cursorBrush = SolidColor(Color.White),
+            )
+        }
+    }
+}
+
+/**
+ * 过滤条
+ */
+@Composable
+private fun FilterBar() {
+    var idx by remember { mutableStateOf(0) }
+    Row(
+        modifier = Modifier
+            .fillMaxWidth()
+            .padding(horizontal = 16.dp)
+            .padding(top = 6.dp)
+    ) {
+        Text(
+            "全部", fontSize = 14.sp, color = if (idx == 0) Color.White else Color(0xFF666666),
+            modifier = Modifier
+                .padding(end = 10.dp)
+                .clip(RoundedCornerShape(50))
+                .background(
+                    color = if (idx == 0) Main else Color(0xFFF0F0F0)
+                )
+                .clickable(onClick = { idx = 0 })
+                .padding(horizontal = 12.dp, vertical = 5.dp),
+        )
+        Text(
+            "进行中", fontSize = 14.sp, color = if (idx == 1) Color.White else Color(0xFF666666),
+            modifier = Modifier
+                .padding(end = 10.dp)
+                .clip(RoundedCornerShape(50))
+                .background(
+                    color = if (idx == 1) Main else Color(0xFFF0F0F0)
+                )
+                .clickable(onClick = { idx = 1 })
+                .padding(horizontal = 12.dp, vertical = 5.dp),
+        )
+        Text(
+            "已完成", fontSize = 14.sp, color = if (idx == 2) Color.White else Color(0xFF666666),
+            modifier = Modifier
+                .padding(end = 10.dp)
+                .clip(RoundedCornerShape(50))
+                .background(
+                    color = if (idx == 2) Main else Color(0xFFF0F0F0)
+                )
+                .clickable(onClick = { idx = 2 })
+                .padding(horizontal = 12.dp, vertical = 5.dp),
+        )
+        Text(
+            "已取消", fontSize = 14.sp, color = if (idx == 3) Color.White else Color(0xFF666666),
+            modifier = Modifier
+                .padding(end = 10.dp)
+                .clip(RoundedCornerShape(50))
+                .background(
+                    color = if (idx == 3) Main else Color(0xFFF0F0F0)
+                )
+                .clickable(onClick = { idx = 3 })
+                .padding(horizontal = 12.dp, vertical = 5.dp),
+        )
     }
 }
 
@@ -102,20 +203,39 @@ private fun TopToolBar(pv: PaddingValues, vmHome: VMHome) {
 private fun MessageList() {
     val isRefresh = remember { mutableStateOf(false) }
     val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
-    PullToRefreshBox(isRefresh.value, onRefresh = {
-        isRefresh.value = true
-    }, modifier = Modifier.fillMaxSize()) {
-        LazyColumn(
-            modifier = Modifier
-                .padding(top = 5.dp)
-                .fillMaxSize()
-                .padding(horizontal = 16.dp)
-        ) {
-            items(list) { item ->
-                when (item) {
-                    1 -> MessageListItemTitle("今天")
-                    6 -> MessageListItemTitle("昨天")
-                    else -> JobListItem()
+    // 监听顶部Item
+    val listState = rememberLazyListState()
+    // 当前顶部Item
+    val topIdx by remember {
+        derivedStateOf {
+            listState.firstVisibleItemIndex
+        }
+    }
+    Box {
+        PullToRefreshBox(isRefresh.value, onRefresh = {
+            isRefresh.value = true
+        }, modifier = Modifier.fillMaxSize()) {
+            Box(
+                modifier = Modifier
+                    .padding(top = 5.dp)
+                    .fillMaxSize()
+                    .padding(horizontal = 16.dp)
+            ) {
+                LazyColumn(
+                    state = listState,
+                    modifier = Modifier.fillMaxSize()
+                ) {
+                    items(list) { item ->
+                        when (item) {
+                            1 -> MessageListItemTitle("今天")
+                            6 -> MessageListItemTitle("昨天")
+                            else -> JobListItem()
+                        }
+                    }
+                }
+                // 悬浮在列表的顶部
+                Box(Modifier.background(Color.White)) {
+                    MessageListItemTitle("${list[topIdx]}")
                 }
             }
         }
@@ -130,11 +250,12 @@ private fun MessageListItemTitle(title: String) {
     Text(
         title,
         fontSize = 16.sp,
-        lineHeight = 21.sp,
+        lineHeight = 22.sp,
         fontWeight = FontWeight.Medium,
         color = Text,
         modifier = Modifier
             .padding(bottom = 10.dp)
             .fillMaxWidth()
+            .height(22.dp),
     )
 }

+ 30 - 8
app/src/main/java/com/iscs/bozzys/ui/pages/home/MessageCompose.kt

@@ -16,17 +16,21 @@ import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.lazy.rememberLazyListState
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.Icon
 import androidx.compose.material3.Text
 import androidx.compose.material3.pulltorefresh.PullToRefreshBox
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.text.font.FontWeight
@@ -67,7 +71,7 @@ private fun TopToolBar(pv: PaddingValues, vmHome: VMHome) {
     Column(
         modifier = Modifier
             .fillMaxWidth()
-            .background(Main)
+            .background(brush = Brush.horizontalGradient(listOf(Color(0xFFFF8C00), Color(0xFFFFA500))))
             .padding(top = pv.calculateTopPadding())
     ) {
         Row(
@@ -111,22 +115,39 @@ private fun TopToolBar(pv: PaddingValues, vmHome: VMHome) {
 private fun MessageList() {
     val isRefresh = remember { mutableStateOf(false) }
     val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
+    // 监听顶部Item
+    val listState = rememberLazyListState()
+    // 当前顶部Item
+    val topIdx by remember {
+        derivedStateOf {
+            listState.firstVisibleItemIndex
+        }
+    }
     PullToRefreshBox(isRefresh.value, onRefresh = {
         isRefresh.value = true
     }, modifier = Modifier.fillMaxSize()) {
-        LazyColumn(
+        Box(
             modifier = Modifier
                 .padding(top = 5.dp)
                 .fillMaxSize()
                 .padding(horizontal = 16.dp)
         ) {
-            items(list) { item ->
-                when (item) {
-                    1 -> MessageListItemTitle("今天")
-                    6 -> MessageListItemTitle("昨天")
-                    else -> MessageListItemContent(item)
+            LazyColumn(
+                state = listState,
+                modifier = Modifier.fillMaxSize()
+            ) {
+                items(list) { item ->
+                    when (item) {
+                        1 -> MessageListItemTitle("今天")
+                        6 -> MessageListItemTitle("昨天")
+                        else -> MessageListItemContent(item)
+                    }
                 }
             }
+            // 悬浮在列表的顶部
+            Box(Modifier.background(Color.White)) {
+                MessageListItemTitle("${list[topIdx]}")
+            }
         }
     }
 }
@@ -139,12 +160,13 @@ private fun MessageListItemTitle(title: String) {
     Text(
         title,
         fontSize = 16.sp,
-        lineHeight = 21.sp,
+        lineHeight = 22.sp,
         fontWeight = FontWeight.Medium,
         color = Text,
         modifier = Modifier
             .padding(bottom = 10.dp)
             .fillMaxWidth()
+            .height(22.dp)
     )
 }
 

+ 86 - 83
app/src/main/java/com/iscs/bozzys/ui/pages/login/PageLogin.kt

@@ -65,6 +65,8 @@ fun Context.openPageLogin() {
 
 /**
  * 登录页面
+ *
+ * 验证码登录和其他方式登录暂时屏蔽 待逐步开放
  */
 class PageLogin : PageBase() {
 
@@ -128,41 +130,42 @@ class PageLogin : PageBase() {
                 .verticalScroll(rememberScrollState()), horizontalAlignment = Alignment.CenterHorizontally
         ) {
             Text("欢迎登录", fontSize = 20.sp, fontWeight = FontWeight.SemiBold, color = Text, modifier = Modifier.padding(top = 30.dp))
-            Row(
-                Modifier
-                    .padding(top = 24.dp)
-                    .size(335.dp, 47.dp)
-                    .border(1.dp, color = Color(0xFFD1D5DB), shape = RoundedCornerShape(12.dp))
-                    .clip(RoundedCornerShape(12.dp)),
-                verticalAlignment = Alignment.CenterVertically
-            ) {
-                Text(
-                    "短信登录",
-                    Modifier
-                        .weight(1f)
-                        .fillMaxHeight()
-                        .background(if (state.loginType == 0) SubMain else Color.White)
-                        .clickable(onClick = { vm.updateLoginType(0) }),
-                    color = if (state.loginType == 0) Main else TextDesc,
-                    lineHeight = 47.sp,
-                    fontSize = 14.sp,
-                    fontWeight = if (state.loginType == 0) FontWeight.SemiBold else FontWeight.Normal,
-                    textAlign = TextAlign.Center
-                )
-                Text(
-                    "密码登录",
-                    Modifier
-                        .weight(1f)
-                        .fillMaxHeight()
-                        .background(if (state.loginType == 1) SubMain else Color.White)
-                        .clickable(onClick = { vm.updateLoginType(1) }),
-                    color = if (state.loginType == 1) Main else TextDesc,
-                    lineHeight = 47.sp,
-                    fontSize = 14.sp,
-                    fontWeight = if (state.loginType == 1) FontWeight.SemiBold else FontWeight.Normal,
-                    textAlign = TextAlign.Center,
-                )
-            }
+            Spacer(Modifier.weight(1f))
+//            Row(
+//                Modifier
+//                    .padding(top = 24.dp)
+//                    .size(335.dp, 47.dp)
+//                    .border(1.dp, color = Color(0xFFD1D5DB), shape = RoundedCornerShape(12.dp))
+//                    .clip(RoundedCornerShape(12.dp)),
+//                verticalAlignment = Alignment.CenterVertically
+//            ) {
+//                Text(
+//                    "短信登录",
+//                    Modifier
+//                        .weight(1f)
+//                        .fillMaxHeight()
+//                        .background(if (state.loginType == 0) SubMain else Color.White)
+//                        .clickable(onClick = { vm.updateLoginType(0) }),
+//                    color = if (state.loginType == 0) Main else TextDesc,
+//                    lineHeight = 47.sp,
+//                    fontSize = 14.sp,
+//                    fontWeight = if (state.loginType == 0) FontWeight.SemiBold else FontWeight.Normal,
+//                    textAlign = TextAlign.Center
+//                )
+//                Text(
+//                    "密码登录",
+//                    Modifier
+//                        .weight(1f)
+//                        .fillMaxHeight()
+//                        .background(if (state.loginType == 1) SubMain else Color.White)
+//                        .clickable(onClick = { vm.updateLoginType(1) }),
+//                    color = if (state.loginType == 1) Main else TextDesc,
+//                    lineHeight = 47.sp,
+//                    fontSize = 14.sp,
+//                    fontWeight = if (state.loginType == 1) FontWeight.SemiBold else FontWeight.Normal,
+//                    textAlign = TextAlign.Center,
+//                )
+//            }
             Row(
                 Modifier
                     .padding(top = 24.dp)
@@ -270,54 +273,54 @@ class PageLogin : PageBase() {
                 Text("工业安全系统,请妥善保管账号信息", Modifier.padding(start = 5.dp), fontSize = 12.sp, color = Color(0xFF6B7280))
             }
             // 其他登录方式
-            Box(Modifier.padding(top = 20.dp), contentAlignment = Alignment.Center) {
-                Spacer(
-                    Modifier
-                        .size(335.dp, 1.dp)
-                        .background(Color(0xFFEEEEEE))
-                )
-                Text(
-                    "其他登录方式", Modifier
-                        .background(Color.White)
-                        .padding(horizontal = 5.dp),
-                    fontSize = 14.sp, color = Color(0xFF999999)
-                )
-            }
-            Row(Modifier.padding(top = 30.dp, bottom = 10.dp), verticalAlignment = Alignment.CenterVertically) {
-                Icon(
-                    painter = painterResource(R.drawable.fingerprint),
-                    contentDescription = null,
-                    Modifier
-                        .padding(horizontal = 10.dp)
-                        .size(50.dp)
-                        .clip(RoundedCornerShape(50))
-                        .background(Color(0xFFF5F5F5))
-                        .padding(13.dp),
-                    tint = Color(0xFF6B7280)
-                )
-                Icon(
-                    painter = painterResource(R.drawable.qrcode),
-                    contentDescription = null,
-                    Modifier
-                        .padding(horizontal = 10.dp)
-                        .size(50.dp)
-                        .clip(RoundedCornerShape(50))
-                        .background(Color(0xFFF5F5F5))
-                        .padding(13.dp),
-                    tint = Color(0xFF6B7280)
-                )
-                Icon(
-                    painter = painterResource(R.drawable.bluetooth),
-                    contentDescription = null,
-                    Modifier
-                        .padding(horizontal = 10.dp)
-                        .size(50.dp)
-                        .clip(RoundedCornerShape(50))
-                        .background(Color(0xFFF5F5F5))
-                        .padding(15.dp),
-                    tint = Color(0xFF6B7280)
-                )
-            }
+//            Box(Modifier.padding(top = 20.dp), contentAlignment = Alignment.Center) {
+//                Spacer(
+//                    Modifier
+//                        .size(335.dp, 1.dp)
+//                        .background(Color(0xFFEEEEEE))
+//                )
+//                Text(
+//                    "其他登录方式", Modifier
+//                        .background(Color.White)
+//                        .padding(horizontal = 5.dp),
+//                    fontSize = 14.sp, color = Color(0xFF999999)
+//                )
+//            }
+//            Row(Modifier.padding(top = 30.dp, bottom = 10.dp), verticalAlignment = Alignment.CenterVertically) {
+//                Icon(
+//                    painter = painterResource(R.drawable.fingerprint),
+//                    contentDescription = null,
+//                    Modifier
+//                        .padding(horizontal = 10.dp)
+//                        .size(50.dp)
+//                        .clip(RoundedCornerShape(50))
+//                        .background(Color(0xFFF5F5F5))
+//                        .padding(13.dp),
+//                    tint = Color(0xFF6B7280)
+//                )
+//                Icon(
+//                    painter = painterResource(R.drawable.qrcode),
+//                    contentDescription = null,
+//                    Modifier
+//                        .padding(horizontal = 10.dp)
+//                        .size(50.dp)
+//                        .clip(RoundedCornerShape(50))
+//                        .background(Color(0xFFF5F5F5))
+//                        .padding(13.dp),
+//                    tint = Color(0xFF6B7280)
+//                )
+//                Icon(
+//                    painter = painterResource(R.drawable.bluetooth),
+//                    contentDescription = null,
+//                    Modifier
+//                        .padding(horizontal = 10.dp)
+//                        .size(50.dp)
+//                        .clip(RoundedCornerShape(50))
+//                        .background(Color(0xFFF5F5F5))
+//                        .padding(15.dp),
+//                    tint = Color(0xFF6B7280)
+//                )
+//            }
             Spacer(Modifier.weight(2f))
             // 底部版本等提示
             Column(Modifier.width(335.dp), horizontalAlignment = Alignment.CenterHorizontally) {

+ 1 - 1
app/src/main/java/com/iscs/bozzys/ui/pages/vm/VMLogin.kt

@@ -95,4 +95,4 @@ class VMLogin : VMBase() {
 /**
  * 登录页面状态模型
  */
-data class StateLogin(val loginType: Int = 0, val account: String = "", val code: String = "")
+data class StateLogin(val loginType: Int = 1, val account: String = "", val code: String = "")

+ 12 - 0
app/src/main/res/drawable/file_jpg.xml

@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="32dp"
+    android:height="32dp"
+    android:viewportWidth="1024"
+    android:viewportHeight="1024">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M507.4,607.5H482v36.9h25.3c12.3,0 19.5,-9 19.5,-18.4s-7.2,-18.4 -19.5,-18.4z"/>
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M716.8,51.2L307.2,51.2c-141.4,0 -256,114.6 -256,256v409.6c0,141.4 114.6,256 256,256h409.6c141.4,0 256,-114.6 256,-256L972.8,307.2c0,-141.4 -114.6,-256 -256,-256zM403,687.1c0,43.3 -34.3,64 -68.6,64 -21.2,0 -34.8,-5.1 -49.7,-20l29.4,-29.2c5.6,5.6 10.2,9.2 20.2,9.2 13.8,0 23.8,-7.7 23.8,-25.1L358.2,567.3h44.8v119.8zM509.4,684.5L482,684.5L482,749.6L437.2,749.6v-182.3h72.2c40.4,0 62.2,28.7 62.2,58.6s-21.8,58.6 -62.2,58.6zM732.4,670c0,29.4 -4.6,46.6 -18.4,60.7 -15.6,16.1 -33,20.5 -53,20.5 -21.2,0 -37.4,-7.2 -50.7,-20.5 -19.2,-19.2 -18.4,-44.8 -18.4,-72.2 0,-27.4 -0.8,-53 18.4,-72.2 13.3,-13.3 28.7,-20.5 50.7,-20.5 46.8,0 66.8,30.5 71.2,60.4h-45.1c-3.6,-13.8 -10.8,-20.5 -26.1,-20.5 -8.2,0 -14.3,3.6 -17.7,7.9 -4.1,5.4 -6.7,11.5 -6.7,44.8s2.6,39.7 6.7,45.1c3.3,4.4 9.5,7.7 17.7,7.7 9.5,0 15.9,-2.8 20,-7.2 5.1,-5.1 6.9,-12.5 6.9,-19.5v-2.6h-26.9v-37.4h71.4v25.3zM885.8,445.4h-102.4c-113.1,0 -204.8,-91.7 -204.8,-204.8L578.6,138.2h102.4c113.1,0 204.8,91.7 204.8,204.8v102.4z"/>
+</vector>

+ 12 - 0
app/src/main/res/drawable/file_pdf.xml

@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="32dp"
+    android:height="32dp"
+    android:viewportWidth="1024"
+    android:viewportHeight="1024">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M364.6,607.5h-25.3v36.9h25.3c12.3,0 19.5,-9 19.5,-18.4s-7.2,-18.4 -19.5,-18.4zM519.4,607.2h-19.7V709.6h19.7c11.3,0 17.4,-4.1 21.5,-10.2 3.6,-5.1 4.9,-10 4.9,-41 0,-30.7 -1.3,-35.8 -4.9,-41 -4.1,-6.1 -10.2,-10.2 -21.5,-10.2z"/>
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M716.8,51.2L307.2,51.2c-141.4,0 -256,114.6 -256,256v409.6c0,141.4 114.6,256 256,256h409.6c141.4,0 256,-114.6 256,-256L972.8,307.2c0,-141.4 -114.6,-256 -256,-256zM366.6,684.5h-27.4L339.2,749.6L294.4,749.6v-182.3h72.2c40.4,0 62.2,28.7 62.2,58.6s-21.8,58.6 -62.2,58.6zM571.7,731.6c-12.5,12.5 -30.2,17.9 -49.2,17.9h-67.6v-182.3h67.6c18.9,0 36.6,5.4 49.2,17.9 21.2,21.2 18.9,44.5 18.9,73.2 0,28.7 2.3,52 -18.9,73.2zM745.5,607.2L666.4,607.2v32h67.6v39.9L666.4,679.2v70.4h-44.8v-182.3h123.9v39.9zM885.8,445.4h-102.4c-113.1,0 -204.8,-91.7 -204.8,-204.8L578.6,138.2h102.4c113.1,0 204.8,91.7 204.8,204.8v102.4z"/>
+</vector>

+ 9 - 0
app/src/main/res/drawable/job_attach.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="32dp"
+    android:height="32dp"
+    android:viewportWidth="1024"
+    android:viewportHeight="1024">
+  <path
+      android:pathData="M503.6,1005.7a53.8,53.8 0,0 1,-37.9 -91.4l381.8,-382.5a237.7,237.7 0,0 0,-336.3 -336.3l-356.6,356.6a161.1,161.1 0,0 0,228 227.8l334.8,-334.8a81.6,81.6 0,0 0,-115.2 -115.9L333.4,598.7a53.6,53.6 0,0 1,-75.9 -75.9l269,-269a188.9,188.9 0,0 1,267 267.2L458.6,855.8A268.4,268.4 0,0 1,78.9 475.4l356.6,-356.6a345.1,345.1 0,0 1,488 488.8L541.7,989.6a54.9,54.9 0,0 1,-38 16.1z"
+      android:fillColor="#333333"/>
+</vector>

+ 15 - 0
app/src/main/res/drawable/job_check.xml

@@ -0,0 +1,15 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="32dp"
+    android:height="32dp"
+    android:viewportWidth="1024"
+    android:viewportHeight="1024">
+  <path
+      android:pathData="M441,781.7a303.4,303.4 0,0 1,12.4 -85.8H214.9a35.7,35.7 0,0 1,-35.7 -35.7,35.7 35.7,0 0,1 35.7,-35.7h269.9a304.3,304.3 0,0 1,66.2 -76.8h-335.9a35.7,35.7 0,0 1,0 -71.5h570.6a35.2,35.2 0,0 1,22.7 8.4,303.6 303.6,0 0,1 152.9,84.3V187.4a85.8,85.8 0,0 0,-85.8 -85.8H644.9C621.4,39.1 566.7,0 496.4,0c-62.6,0 -125.1,39.1 -140.8,101.6H124.8a85.8,85.8 0,0 0,-85.8 85.8v750.8a85.8,85.8 0,0 0,85.8 85.8h436.9a303.1,303.1 0,0 1,-120.6 -242.3zM214.9,328h570.6a35.7,35.7 0,0 1,0 71.5H214.9a35.7,35.7 0,1 1,0 -71.5z"
+      android:fillColor="#707070"/>
+  <path
+      android:pathData="M775.5,773.1h-66.6a15.7,15.7 0,0 0,-16.6 15.2,16.4 16.4,0 0,0 17.4,14.3h66.7a15.7,15.7 0,0 0,16.6 -15.2,16.5 16.5,0 0,0 -17.4,-14.4z"
+      android:fillColor="#707070"/>
+  <path
+      android:pathData="M742.5,539.3a242.3,242.3 0,1 0,242.3 242.3,243.5 243.5,0 0,0 -242.3,-242.3zM872.5,794.7a24.8,24.8 0,0 1,-14.3 21.4l-40.2,21.3a24,24 0,0 0,-13.4 21.4v34.1c-0.5,21.4 -7.1,30.9 -35.7,30.9h-52.2c-28.6,0 -34.9,-4.9 -35.2,-30.6v-34.4a23.9,23.9 0,0 0,-13.6 -21l-38.2,-19.7a29.6,29.6 0,0 1,-17.1 -25.9L612.6,691.1a29.6,29.6 0,0 1,16.7 -25.8l45.7,-23.2a19.8,19.8 0,0 1,25.4 6,15 15,0 0,1 2.5,8.2v50a4.9,4.9 0,0 0,2.8 4.3l34.6,17.8a4.3,4.3 0,0 0,1.4 0.4,4.1 4.1,0 0,0 1.3,0 7.1,7.1 0,0 0,2.9 -0.6l34.6,-17.8a5,5 0,0 0,2.8 -4.3v-50a17.7,17.7 0,0 1,18.6 -16.5,20.1 20.1,0 0,1 9.3,2.3l48,24.7a24.9,24.9 0,0 1,13.6 21.9z"
+      android:fillColor="#707070"/>
+</vector>

+ 9 - 0
app/src/main/res/drawable/job_close.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="32dp"
+    android:height="32dp"
+    android:viewportWidth="1024"
+    android:viewportHeight="1024">
+  <path
+      android:pathData="M512,1024C229.2,1024 0,794.8 0,512S229.2,0 512,0s512,229.2 512,512 -229.2,512 -512,512zM573,513.1l169.5,-169.5a42.4,42.4 0,0 0,-59.9 -59.9l-169.5,169.5 -169.5,-169.5a42.4,42.4 0,0 0,-59.9 59.9l169.5,169.5 -169.5,169.5a42.4,42.4 0,0 0,59.9 59.9l169.5,-169.5 169.5,169.5a42.4,42.4 0,0 0,59.9 -59.9l-169.5,-169.5z"
+      android:fillColor="#2c2c2c"/>
+</vector>

+ 9 - 0
app/src/main/res/drawable/job_warning.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="32dp"
+    android:height="32dp"
+    android:viewportWidth="1024"
+    android:viewportHeight="1024">
+  <path
+      android:pathData="M572.1,337.1a57.3,57.3 0,1 0,-114.2 -6h-0.2l12.9,272.9v0.4a44.5,44.5 0,1 0,89 -1.2l12.4,-266.1zM375.1,145.9c76.2,-130 199.8,-129.8 275.8,0l340.4,581.1c76.1,130 15.8,235.4 -135.2,235.4L170,962.4c-150.8,0 -211.2,-105.7 -135.2,-235.4L375.1,145.9zM515.2,833.5a57.3,57.3 0,1 0,0 -114.5,57.3 57.3,0 0,0 0,114.5z"
+      android:fillColor="#FB6547"/>
+</vector>

+ 15 - 0
app/src/main/res/drawable/number.xml

@@ -0,0 +1,15 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="32dp"
+    android:height="32dp"
+    android:viewportWidth="1024"
+    android:viewportHeight="1024">
+  <path
+      android:pathData="M128,341.3m42.7,0l682.7,0q42.7,0 42.7,42.7l0,0q0,42.7 -42.7,42.7l-682.7,0q-42.7,0 -42.7,-42.7l0,0q0,-42.7 42.7,-42.7Z"
+      android:fillColor="#666666"/>
+  <path
+      android:pathData="M422.6,85.3H426.7a38.6,38.6 0,0 1,38.4 42.5L387.8,900.3a42.7,42.7 0,0 1,-42.5 38.4H341.3a38.6,38.6 0,0 1,-38.4 -42.5L380.2,123.7a42.7,42.7 0,0 1,42.5 -38.4zM678.6,85.3H682.7a38.6,38.6 0,0 1,38.4 42.5L643.8,900.3a42.7,42.7 0,0 1,-42.5 38.4H597.3a38.6,38.6 0,0 1,-38.4 -42.5L636.2,123.7a42.7,42.7 0,0 1,42.5 -38.4z"
+      android:fillColor="#666666"/>
+  <path
+      android:pathData="M128,597.3m42.7,0l682.7,0q42.7,0 42.7,42.7l0,0q0,42.7 -42.7,42.7l-682.7,0q-42.7,0 -42.7,-42.7l0,0q0,-42.7 42.7,-42.7Z"
+      android:fillColor="#666666"/>
+</vector>

+ 9 - 0
app/src/main/res/drawable/target.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="32dp"
+    android:height="32dp"
+    android:viewportWidth="1024"
+    android:viewportHeight="1024">
+  <path
+      android:pathData="M788.5,629.4c0,-17.1 -5.8,-31.7 -17.7,-44.7L421.2,235.9c-12.3,-12.3 -29.4,-22.9 -49.8,-31.7 -21.2,-8.9 -39.9,-13 -57,-13L110.9,191.1c-17.1,0 -31.7,6.5 -44,18.8 -12.3,12.3 -18.8,27 -18.8,44l0,202.8c0,17.1 4.1,36.5 13,57 8.9,21.2 18.8,37.5 31.7,49.8l349.5,349.5c12.3,12.3 27,17.7 44,17.7 17.1,0 31.7,-5.8 44.7,-17.7l239.6,-239.6C782,661.2 788.5,646.5 788.5,629.4L788.5,629.4 788.5,629.4zM248.5,392.2c-12.3,12.3 -27,18.1 -44,18.1 -17.1,0 -31.7,-5.8 -44,-18.1 -12.3,-12.3 -18.1,-27 -18.1,-44 0,-17.1 5.8,-31.7 18.1,-44 12.3,-12.3 27,-18.1 44,-18.1 17.1,0 31.7,5.8 44,18.1C260.8,316.4 266.2,331.1 266.2,348.2 267.3,365.6 260.8,379.9 248.5,392.2L248.5,392.2 248.5,392.2zM958.1,584.4 L608.6,235.9c-12.3,-12.3 -29.4,-22.9 -49.8,-31.7C537.6,195.2 518.8,191.1 501.8,191.1l-109.9,0c17.1,0 36.5,4.1 57,13 21.2,8.9 37.5,18.8 49.8,31.7l349.5,348.5c12.3,13 18.1,27.6 18.1,44.7s-5.8,31.7 -18.1,44l-229,229.7c9.9,9.9 18.8,17.1 25.9,21.8 7.2,4.8 17.1,6.5 28.7,6.5 17.1,0 31.7,-5.8 44.7,-18.1l239.6,-240.3c12.3,-12.3 17.7,-27 17.7,-44S970.1,597.7 958.1,584.4L958.1,584.4 958.1,584.4zM958.1,584.4"
+      android:fillColor="#272636"/>
+</vector>