refactor: 注释移除 Compose 相关代码,统一入口替换为 HomeActivity
- 注释掉全部 Compose UI 代码(ui/、theme/、NavController、MainActivity、InitActivity 等) - BorderExt、TextExt、ToastUtils、LoadingState 中的 Compose 逻辑全部注释 - LoadingState 保留 show()/hide() 空方法避免编译报错 - 注释 SensorScaleUtils、BaseViewModel、DeviceViewModel 中的 ToastUtils 调用 - BootReceiver、CrashHandler 中 MainActivity 替换为 HomeActivity - UserViewModel、PurchaseOrderActivity 删除残余 Compose import - build.gradle.kts 替换为非 Compose 的 activity-ktx 和 coil 依赖 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+20
-20
@@ -11,7 +11,7 @@ plugins {
|
|||||||
id("kotlin-parcelize")
|
id("kotlin-parcelize")
|
||||||
// id("compose.compiler")
|
// id("compose.compiler")
|
||||||
kotlin("kapt")
|
kotlin("kapt")
|
||||||
alias(libs.plugins.kotlin.compose)
|
// alias(libs.plugins.kotlin.compose)
|
||||||
}
|
}
|
||||||
android {
|
android {
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
@@ -63,7 +63,7 @@ android {
|
|||||||
jvmTarget = "11"
|
jvmTarget = "11"
|
||||||
}
|
}
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
compose = true
|
// compose = true
|
||||||
viewBinding = true
|
viewBinding = true
|
||||||
buildConfig = true
|
buildConfig = true
|
||||||
}
|
}
|
||||||
@@ -83,12 +83,12 @@ dependencies {
|
|||||||
|
|
||||||
implementation(libs.androidx.core.ktx)
|
implementation(libs.androidx.core.ktx)
|
||||||
implementation(libs.androidx.lifecycle.runtime.ktx)
|
implementation(libs.androidx.lifecycle.runtime.ktx)
|
||||||
implementation(libs.androidx.activity.compose)
|
implementation("androidx.activity:activity-ktx:1.8.0")
|
||||||
implementation(platform(libs.androidx.compose.bom))
|
// implementation(platform(libs.androidx.compose.bom))
|
||||||
implementation(libs.androidx.ui)
|
// implementation(libs.androidx.ui)
|
||||||
implementation(libs.androidx.ui.graphics)
|
// implementation(libs.androidx.ui.graphics)
|
||||||
implementation(libs.androidx.ui.tooling.preview)
|
// implementation(libs.androidx.ui.tooling.preview)
|
||||||
implementation(libs.androidx.material3)
|
// implementation(libs.androidx.material3)
|
||||||
implementation(
|
implementation(
|
||||||
fileTree(
|
fileTree(
|
||||||
mapOf(
|
mapOf(
|
||||||
@@ -100,11 +100,11 @@ dependencies {
|
|||||||
testImplementation(libs.junit)
|
testImplementation(libs.junit)
|
||||||
androidTestImplementation(libs.androidx.junit)
|
androidTestImplementation(libs.androidx.junit)
|
||||||
androidTestImplementation(libs.androidx.espresso.core)
|
androidTestImplementation(libs.androidx.espresso.core)
|
||||||
androidTestImplementation(platform(libs.androidx.compose.bom))
|
// androidTestImplementation(platform(libs.androidx.compose.bom))
|
||||||
androidTestImplementation(libs.androidx.ui.test.junit4)
|
// androidTestImplementation(libs.androidx.ui.test.junit4)
|
||||||
debugImplementation(libs.androidx.ui.tooling)
|
// debugImplementation(libs.androidx.ui.tooling)
|
||||||
debugImplementation(libs.androidx.ui.test.manifest)
|
// debugImplementation(libs.androidx.ui.test.manifest)
|
||||||
implementation(libs.androidx.navigation.compose)
|
// implementation(libs.androidx.navigation.compose)
|
||||||
|
|
||||||
// camerax
|
// camerax
|
||||||
implementation(libs.androidx.camera.core)
|
implementation(libs.androidx.camera.core)
|
||||||
@@ -114,12 +114,12 @@ dependencies {
|
|||||||
implementation(libs.androidx.camera.extensions)
|
implementation(libs.androidx.camera.extensions)
|
||||||
|
|
||||||
// 权限申请
|
// 权限申请
|
||||||
implementation(libs.accompanist.permissions)
|
// implementation(libs.accompanist.permissions)
|
||||||
|
|
||||||
// hilt注入
|
// hilt注入
|
||||||
implementation(libs.hilt.android)
|
implementation(libs.hilt.android)
|
||||||
ksp(libs.hilt.android.compiler)
|
ksp(libs.hilt.android.compiler)
|
||||||
implementation(libs.androidx.hilt.navigation.compose)
|
// implementation(libs.androidx.hilt.navigation.compose)
|
||||||
|
|
||||||
// retrofit网络请求
|
// retrofit网络请求
|
||||||
implementation(libs.retrofit)
|
implementation(libs.retrofit)
|
||||||
@@ -131,8 +131,8 @@ dependencies {
|
|||||||
implementation(libs.gson)
|
implementation(libs.gson)
|
||||||
// 日志打印
|
// 日志打印
|
||||||
implementation(libs.timber)
|
implementation(libs.timber)
|
||||||
// 图片显示
|
// 图片显示(非Compose标准版)
|
||||||
implementation("io.coil-kt:coil-compose:2.4.0")
|
implementation("io.coil-kt:coil:2.4.0")
|
||||||
|
|
||||||
implementation(libs.core)
|
implementation(libs.core)
|
||||||
implementation(libs.android.core)
|
implementation(libs.android.core)
|
||||||
@@ -140,8 +140,8 @@ dependencies {
|
|||||||
|
|
||||||
implementation("androidx.recyclerview:recyclerview:1.4.0")
|
implementation("androidx.recyclerview:recyclerview:1.4.0")
|
||||||
|
|
||||||
implementation("androidx.compose.foundation:foundation:1.7.0")
|
// implementation("androidx.compose.foundation:foundation:1.7.0")
|
||||||
implementation("androidx.compose.foundation:foundation-layout:1.7.0")
|
// implementation("androidx.compose.foundation:foundation-layout:1.7.0")
|
||||||
implementation (libs.pytorch.android)
|
implementation (libs.pytorch.android)
|
||||||
implementation (libs.pytorch.android.torchvision)
|
implementation (libs.pytorch.android.torchvision)
|
||||||
|
|
||||||
@@ -158,4 +158,4 @@ dependencies {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
apply(plugin = "io.objectbox")
|
apply(plugin = "io.objectbox")
|
||||||
|
|||||||
@@ -1,183 +1,183 @@
|
|||||||
package com.sw.inbound
|
//package com.sw.inbound
|
||||||
|
//
|
||||||
import android.content.Intent
|
//import android.content.Intent
|
||||||
import android.os.Bundle
|
//import android.os.Bundle
|
||||||
import android.view.WindowManager
|
//import android.view.WindowManager
|
||||||
import androidx.activity.ComponentActivity
|
//import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
////import androidx.activity.compose.setContent
|
||||||
import androidx.activity.enableEdgeToEdge
|
//import androidx.activity.enableEdgeToEdge
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
////import androidx.compose.animation.AnimatedVisibility
|
||||||
import androidx.compose.animation.expandIn
|
////import androidx.compose.animation.expandIn
|
||||||
import androidx.compose.animation.shrinkOut
|
////import androidx.compose.animation.shrinkOut
|
||||||
import androidx.compose.foundation.Image
|
////import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.background
|
////import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Column
|
////import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Spacer
|
////import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.WindowInsets
|
////import androidx.compose.foundation.layout.WindowInsets
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
////import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.navigationBars
|
////import androidx.compose.foundation.layout.navigationBars
|
||||||
import androidx.compose.foundation.layout.padding
|
////import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
////import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.layout.width
|
////import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.layout.windowInsetsBottomHeight
|
////import androidx.compose.foundation.layout.windowInsetsBottomHeight
|
||||||
import androidx.compose.foundation.layout.wrapContentWidth
|
////import androidx.compose.foundation.layout.wrapContentWidth
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
////import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material3.Button
|
////import androidx.compose.material3.Button
|
||||||
import androidx.compose.material3.ButtonDefaults
|
////import androidx.compose.material3.ButtonDefaults
|
||||||
import androidx.compose.material3.Text
|
////import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
////import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
////import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.State
|
////import androidx.compose.runtime.State
|
||||||
import androidx.compose.runtime.collectAsState
|
////import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
////import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.ui.Alignment
|
////import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
////import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
////import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.asImageBitmap
|
////import androidx.compose.ui.graphics.asImageBitmap
|
||||||
import androidx.compose.ui.platform.LocalContext
|
////import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.painterResource
|
////import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
////import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
////import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
////import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
////import androidx.compose.ui.unit.sp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
////import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.sw.inbound.utils.AppUtil
|
////import com.sw.inbound.utils.AppUtil
|
||||||
import com.sw.inbound.utils.QRCodeUtil
|
////import com.sw.inbound.utils.QRCodeUtil
|
||||||
import com.sw.inbound.viewmodel.DeviceViewModel
|
////import com.sw.inbound.viewmodel.DeviceViewModel
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
//import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.delay
|
////import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
////import kotlinx.coroutines.flow.StateFlow
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* 设备初始化界面
|
// * 设备初始化界面
|
||||||
*/
|
// */
|
||||||
@AndroidEntryPoint
|
//@AndroidEntryPoint
|
||||||
class InitActivity : ComponentActivity() {
|
//class InitActivity : ComponentActivity() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
// override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
// super.onCreate(savedInstanceState)
|
||||||
enableEdgeToEdge()
|
// enableEdgeToEdge()
|
||||||
window.setFlags(
|
// window.setFlags(
|
||||||
WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
// WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
||||||
WindowManager.LayoutParams.FLAG_FULLSCREEN
|
// WindowManager.LayoutParams.FLAG_FULLSCREEN
|
||||||
)
|
|
||||||
setContent {
|
|
||||||
InitScreen()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private var scale = 0.8F
|
|
||||||
|
|
||||||
private val qrCodeBmp by lazy {
|
|
||||||
QRCodeUtil.generateQRCode(
|
|
||||||
content = GlobalData.deviceId,
|
|
||||||
size = (scale * 150).toInt()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Preview(widthDp = 1920, heightDp = 1080)
|
|
||||||
@Composable
|
|
||||||
fun InitScreen(
|
|
||||||
viewModel: DeviceViewModel = hiltViewModel<DeviceViewModel>()
|
|
||||||
) {
|
|
||||||
// val context = LocalContext.current
|
|
||||||
val hasDeviceData = viewModel.checkEquipmentInfo()
|
|
||||||
val deviceInfoResult = viewModel.deviceInfoResult.collectAsState()
|
|
||||||
|
|
||||||
if (hasDeviceData) {
|
|
||||||
LaunchedEffect(this) {
|
|
||||||
delay(1500)
|
|
||||||
goLoginActivity()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
FirstPage(viewModel)
|
|
||||||
}
|
|
||||||
if (deviceInfoResult.value == true) {
|
|
||||||
goLoginActivity()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun FirstPage(viewModel: DeviceViewModel) {
|
|
||||||
Column(
|
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
|
||||||
modifier = Modifier.size(
|
|
||||||
1920.dp, 1080.dp
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
Spacer(
|
|
||||||
modifier = Modifier
|
|
||||||
.padding(top = (scale * 112).dp)
|
|
||||||
.background(Color.White.copy(alpha = 0.0F))
|
|
||||||
.size((scale * 337).dp, (scale * 322).dp)
|
|
||||||
)
|
|
||||||
|
|
||||||
Button(
|
|
||||||
onClick = {
|
|
||||||
viewModel.getDeviceToken()
|
|
||||||
},
|
|
||||||
colors = ButtonDefaults.buttonColors(
|
|
||||||
contentColor = Color.Transparent,
|
|
||||||
containerColor = Color(0xFF08C6DC)
|
|
||||||
),
|
|
||||||
shape = RoundedCornerShape((scale * 8).dp),
|
|
||||||
modifier = Modifier
|
|
||||||
.width((scale * 225).dp)
|
|
||||||
.padding(top = (scale * 75).dp)
|
|
||||||
.padding((scale * 10).dp)
|
|
||||||
) {
|
|
||||||
Text(
|
|
||||||
text = "设备初始化",
|
|
||||||
color = Color.White,
|
|
||||||
fontSize = (scale * 22).sp,
|
|
||||||
fontWeight = FontWeight.Bold,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
Spacer(
|
|
||||||
modifier = Modifier
|
|
||||||
.wrapContentWidth()
|
|
||||||
.weight(1F)
|
|
||||||
)
|
|
||||||
Image(
|
|
||||||
bitmap = qrCodeBmp!!.asImageBitmap(),
|
|
||||||
contentDescription = "",
|
|
||||||
modifier = Modifier
|
|
||||||
.padding(bottom = 10.dp)
|
|
||||||
.size((scale * 150).dp, (scale * 150).dp)
|
|
||||||
)
|
|
||||||
Spacer(Modifier.windowInsetsBottomHeight(WindowInsets.navigationBars))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// AnimatedVisibility(
|
|
||||||
// visible = isSuccess.not(),
|
|
||||||
// enter = expandIn(clip = false),
|
|
||||||
// exit = shrinkOut(clip = false)
|
|
||||||
// ) {}
|
|
||||||
// fun initialize() {
|
|
||||||
// var deviceId = AppUtil.getUDID(this)
|
|
||||||
// deviceId = "6ce7cd59-b875-38b2-b73d-88a570be3212"
|
|
||||||
// GlobalData.deviceId = deviceId
|
|
||||||
// val isSuccess = deviceViewModel.checkEquipmentInfo()
|
|
||||||
// if (isSuccess) {
|
|
||||||
// goLoginActivity()
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// binding.ivQrCode.setImageBitmap(
|
|
||||||
// QRCodeUtil.generateQRCode(
|
|
||||||
// content = GlobalData.deviceId,
|
|
||||||
// size = 200
|
|
||||||
// )
|
|
||||||
// )
|
// )
|
||||||
// binding.btnInit.setOnClickListener {
|
//// setContent {
|
||||||
// deviceViewModel.getDeviceToken()
|
//// InitScreen()
|
||||||
// }
|
//// }
|
||||||
// }
|
// }
|
||||||
|
//
|
||||||
private fun goLoginActivity() {
|
//// private var scale = 0.8F
|
||||||
val intent = Intent(this, MainActivity::class.java)
|
////
|
||||||
startActivity(intent)
|
//// private val qrCodeBmp by lazy {
|
||||||
finish()
|
//// QRCodeUtil.generateQRCode(
|
||||||
}
|
//// content = GlobalData.deviceId,
|
||||||
|
//// size = (scale * 150).toInt()
|
||||||
|
//// )
|
||||||
}
|
//// }
|
||||||
|
//
|
||||||
|
//// @Preview(widthDp = 1920, heightDp = 1080)
|
||||||
|
//// @Composable
|
||||||
|
//// fun InitScreen(
|
||||||
|
//// viewModel: DeviceViewModel = hiltViewModel<DeviceViewModel>()
|
||||||
|
//// ) {
|
||||||
|
////// val context = LocalContext.current
|
||||||
|
//// val hasDeviceData = viewModel.checkEquipmentInfo()
|
||||||
|
//// val deviceInfoResult = viewModel.deviceInfoResult.collectAsState()
|
||||||
|
////
|
||||||
|
//// if (hasDeviceData) {
|
||||||
|
//// LaunchedEffect(this) {
|
||||||
|
//// delay(1500)
|
||||||
|
//// goLoginActivity()
|
||||||
|
//// }
|
||||||
|
//// } else {
|
||||||
|
//// FirstPage(viewModel)
|
||||||
|
//// }
|
||||||
|
//// if (deviceInfoResult.value == true) {
|
||||||
|
//// goLoginActivity()
|
||||||
|
//// }
|
||||||
|
//// }
|
||||||
|
////
|
||||||
|
////
|
||||||
|
//// @Composable
|
||||||
|
//// fun FirstPage(viewModel: DeviceViewModel) {
|
||||||
|
//// Column(
|
||||||
|
//// horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
|
//// modifier = Modifier.size(
|
||||||
|
//// 1920.dp, 1080.dp
|
||||||
|
//// )
|
||||||
|
//// ) {
|
||||||
|
//// Spacer(
|
||||||
|
//// modifier = Modifier
|
||||||
|
//// .padding(top = (scale * 112).dp)
|
||||||
|
//// .background(Color.White.copy(alpha = 0.0F))
|
||||||
|
//// .size((scale * 337).dp, (scale * 322).dp)
|
||||||
|
//// )
|
||||||
|
////
|
||||||
|
//// Button(
|
||||||
|
//// onClick = {
|
||||||
|
//// viewModel.getDeviceToken()
|
||||||
|
//// },
|
||||||
|
//// colors = ButtonDefaults.buttonColors(
|
||||||
|
//// contentColor = Color.Transparent,
|
||||||
|
//// containerColor = Color(0xFF08C6DC)
|
||||||
|
//// ),
|
||||||
|
//// shape = RoundedCornerShape((scale * 8).dp),
|
||||||
|
//// modifier = Modifier
|
||||||
|
//// .width((scale * 225).dp)
|
||||||
|
//// .padding(top = (scale * 75).dp)
|
||||||
|
//// .padding((scale * 10).dp)
|
||||||
|
//// ) {
|
||||||
|
//// Text(
|
||||||
|
//// text = "设备初始化",
|
||||||
|
//// color = Color.White,
|
||||||
|
//// fontSize = (scale * 22).sp,
|
||||||
|
//// fontWeight = FontWeight.Bold,
|
||||||
|
//// )
|
||||||
|
//// }
|
||||||
|
//// Spacer(
|
||||||
|
//// modifier = Modifier
|
||||||
|
//// .wrapContentWidth()
|
||||||
|
//// .weight(1F)
|
||||||
|
//// )
|
||||||
|
//// Image(
|
||||||
|
//// bitmap = qrCodeBmp!!.asImageBitmap(),
|
||||||
|
//// contentDescription = "",
|
||||||
|
//// modifier = Modifier
|
||||||
|
//// .padding(bottom = 10.dp)
|
||||||
|
//// .size((scale * 150).dp, (scale * 150).dp)
|
||||||
|
//// )
|
||||||
|
//// Spacer(Modifier.windowInsetsBottomHeight(WindowInsets.navigationBars))
|
||||||
|
//// }
|
||||||
|
//// }
|
||||||
|
//// AnimatedVisibility(
|
||||||
|
//// visible = isSuccess.not(),
|
||||||
|
//// enter = expandIn(clip = false),
|
||||||
|
//// exit = shrinkOut(clip = false)
|
||||||
|
//// ) {}
|
||||||
|
//// fun initialize() {
|
||||||
|
//// var deviceId = AppUtil.getUDID(this)
|
||||||
|
//// deviceId = "6ce7cd59-b875-38b2-b73d-88a570be3212"
|
||||||
|
//// GlobalData.deviceId = deviceId
|
||||||
|
//// val isSuccess = deviceViewModel.checkEquipmentInfo()
|
||||||
|
//// if (isSuccess) {
|
||||||
|
//// goLoginActivity()
|
||||||
|
//// return
|
||||||
|
//// }
|
||||||
|
//// binding.ivQrCode.setImageBitmap(
|
||||||
|
//// QRCodeUtil.generateQRCode(
|
||||||
|
//// content = GlobalData.deviceId,
|
||||||
|
//// size = 200
|
||||||
|
//// )
|
||||||
|
//// )
|
||||||
|
//// binding.btnInit.setOnClickListener {
|
||||||
|
//// deviceViewModel.getDeviceToken()
|
||||||
|
//// }
|
||||||
|
//// }
|
||||||
|
//
|
||||||
|
// private fun goLoginActivity() {
|
||||||
|
// val intent = Intent(this, MainActivity::class.java)
|
||||||
|
// startActivity(intent)
|
||||||
|
// finish()
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
|||||||
@@ -1,50 +1,50 @@
|
|||||||
package com.sw.inbound
|
//package com.sw.inbound
|
||||||
|
//
|
||||||
import android.os.Bundle
|
//import android.os.Bundle
|
||||||
import android.view.WindowManager
|
//import android.view.WindowManager
|
||||||
import androidx.activity.ComponentActivity
|
//import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
////import androidx.activity.compose.setContent
|
||||||
import androidx.activity.enableEdgeToEdge
|
//import androidx.activity.enableEdgeToEdge
|
||||||
import androidx.activity.viewModels
|
//import androidx.activity.viewModels
|
||||||
import androidx.lifecycle.lifecycleScope
|
//import androidx.lifecycle.lifecycleScope
|
||||||
import com.sw.inbound.objbox.FoodModule
|
//import com.sw.inbound.objbox.FoodModule
|
||||||
import com.sw.inbound.sdk.SensorScaleUtils
|
//import com.sw.inbound.sdk.SensorScaleUtils
|
||||||
import com.sw.inbound.ui.AppScreen
|
////import com.sw.inbound.ui.AppScreen
|
||||||
import com.sw.inbound.utils.ThreadUtils
|
//import com.sw.inbound.utils.ThreadUtils
|
||||||
import com.sw.inbound.viewmodel.ReceiptViewModel
|
//import com.sw.inbound.viewmodel.ReceiptViewModel
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
//import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.launch
|
//import kotlinx.coroutines.launch
|
||||||
|
//
|
||||||
@AndroidEntryPoint
|
//@AndroidEntryPoint
|
||||||
class MainActivity : ComponentActivity() {
|
//class MainActivity : ComponentActivity() {
|
||||||
|
//
|
||||||
val viewModel: ReceiptViewModel by viewModels()
|
// val viewModel: ReceiptViewModel by viewModels()
|
||||||
|
//
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
// override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
// super.onCreate(savedInstanceState)
|
||||||
enableEdgeToEdge()
|
// enableEdgeToEdge()
|
||||||
|
//
|
||||||
window.setFlags(
|
// window.setFlags(
|
||||||
WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
// WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
||||||
WindowManager.LayoutParams.FLAG_FULLSCREEN
|
// WindowManager.LayoutParams.FLAG_FULLSCREEN
|
||||||
)
|
// )
|
||||||
setContent {
|
//// setContent {
|
||||||
AppScreen(onBackRequest = {
|
//// AppScreen(onBackRequest = {
|
||||||
finish()
|
//// finish()
|
||||||
})
|
//// })
|
||||||
}
|
//// }
|
||||||
SensorScaleUtils.startScale(autoScale = true)
|
// SensorScaleUtils.startScale(autoScale = true)
|
||||||
lifecycleScope.launch {
|
// lifecycleScope.launch {
|
||||||
FoodModule.init(this@MainActivity)
|
// FoodModule.init(this@MainActivity)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
override fun onDestroy() {
|
// override fun onDestroy() {
|
||||||
SensorScaleUtils.closeScale()
|
// SensorScaleUtils.closeScale()
|
||||||
ThreadUtils.release()
|
// ThreadUtils.release()
|
||||||
super.onDestroy()
|
// super.onDestroy()
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import android.annotation.SuppressLint
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import com.sw.inbound.base.BaseActivity
|
import com.sw.inbound.base.BaseActivity
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.compose.runtime.collectAsState
|
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.sw.inbound.R
|
import com.sw.inbound.R
|
||||||
|
|||||||
@@ -1,44 +1,44 @@
|
|||||||
package com.sw.inbound.ext
|
//package com.sw.inbound.ext
|
||||||
|
//
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.composed
|
//import androidx.compose.ui.composed
|
||||||
import androidx.compose.ui.draw.drawWithCache
|
//import androidx.compose.ui.draw.drawWithCache
|
||||||
import androidx.compose.ui.geometry.CornerRadius
|
//import androidx.compose.ui.geometry.CornerRadius
|
||||||
import androidx.compose.ui.graphics.Color
|
//import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.PathEffect
|
//import androidx.compose.ui.graphics.PathEffect
|
||||||
import androidx.compose.ui.graphics.drawscope.Stroke
|
//import androidx.compose.ui.graphics.drawscope.Stroke
|
||||||
import androidx.compose.ui.platform.LocalDensity
|
//import androidx.compose.ui.platform.LocalDensity
|
||||||
import androidx.compose.ui.unit.Dp
|
//import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.dp
|
//import androidx.compose.ui.unit.dp
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* 虚线边框
|
// * 虚线边框
|
||||||
*/
|
// */
|
||||||
fun Modifier.dashedBorder(
|
//fun Modifier.dashedBorder(
|
||||||
strokeWidth: Dp = 2.dp,
|
// strokeWidth: Dp = 2.dp,
|
||||||
color: Color = Color(0xFFDCDCF0),
|
// color: Color = Color(0xFFDCDCF0),
|
||||||
cornerRadiusDp: Dp = 10.dp
|
// cornerRadiusDp: Dp = 10.dp
|
||||||
) = composed(
|
//) = composed(
|
||||||
factory = {
|
// factory = {
|
||||||
val density = LocalDensity.current
|
// val density = LocalDensity.current
|
||||||
val strokeWidthPx = density.run { strokeWidth.toPx() }
|
// val strokeWidthPx = density.run { strokeWidth.toPx() }
|
||||||
val cornerRadiusPx = density.run { cornerRadiusDp.toPx() }
|
// val cornerRadiusPx = density.run { cornerRadiusDp.toPx() }
|
||||||
|
//
|
||||||
this.then(
|
// this.then(
|
||||||
Modifier.drawWithCache {
|
// Modifier.drawWithCache {
|
||||||
onDrawBehind {
|
// onDrawBehind {
|
||||||
val stroke = Stroke(
|
// val stroke = Stroke(
|
||||||
width = strokeWidthPx,
|
// width = strokeWidthPx,
|
||||||
pathEffect = PathEffect.dashPathEffect(floatArrayOf(10f, 10f), 0f)
|
// pathEffect = PathEffect.dashPathEffect(floatArrayOf(10f, 10f), 0f)
|
||||||
)
|
// )
|
||||||
|
//
|
||||||
drawRoundRect(
|
// drawRoundRect(
|
||||||
color = color,
|
// color = color,
|
||||||
style = stroke,
|
// style = stroke,
|
||||||
cornerRadius = CornerRadius(cornerRadiusPx)
|
// cornerRadius = CornerRadius(cornerRadiusPx)
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
)
|
//)
|
||||||
@@ -1,33 +1,33 @@
|
|||||||
package com.sw.inbound.ext
|
//package com.sw.inbound.ext
|
||||||
|
//
|
||||||
import androidx.annotation.ColorRes
|
//import androidx.annotation.ColorRes
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.graphics.Color
|
//import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.res.colorResource
|
//import androidx.compose.ui.res.colorResource
|
||||||
import androidx.compose.ui.text.TextStyle
|
//import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
//import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
//import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.TextUnit
|
//import androidx.compose.ui.unit.TextUnit
|
||||||
import androidx.compose.ui.unit.sp
|
//import androidx.compose.ui.unit.sp
|
||||||
|
//
|
||||||
// 快速修改颜色
|
//// 快速修改颜色
|
||||||
fun TextStyle.withColor(color: Color): TextStyle = this.copy(color = color)
|
//fun TextStyle.withColor(color: Color): TextStyle = this.copy(color = color)
|
||||||
|
//
|
||||||
@Composable
|
//@Composable
|
||||||
fun TextStyle.withColorRes(@ColorRes colorRes: Int): TextStyle {
|
//fun TextStyle.withColorRes(@ColorRes colorRes: Int): TextStyle {
|
||||||
return this.copy(color = colorResource(id = colorRes))
|
// return this.copy(color = colorResource(id = colorRes))
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 快速修改字体大小
|
//// 快速修改字体大小
|
||||||
fun TextStyle.withSize(size: TextUnit): TextStyle = this.copy(fontSize = size)
|
//fun TextStyle.withSize(size: TextUnit): TextStyle = this.copy(fontSize = size)
|
||||||
|
//
|
||||||
fun TextStyle.withSizeSp(sp: Float): TextStyle = this.copy(fontSize = sp.sp)
|
//fun TextStyle.withSizeSp(sp: Float): TextStyle = this.copy(fontSize = sp.sp)
|
||||||
|
//
|
||||||
// 快速修改字体粗细
|
//// 快速修改字体粗细
|
||||||
fun TextStyle.withWeight(weight: FontWeight): TextStyle = this.copy(fontWeight = weight)
|
//fun TextStyle.withWeight(weight: FontWeight): TextStyle = this.copy(fontWeight = weight)
|
||||||
|
//
|
||||||
fun TextStyle.bold(): TextStyle = this.copy(fontWeight = FontWeight.Bold)
|
//fun TextStyle.bold(): TextStyle = this.copy(fontWeight = FontWeight.Bold)
|
||||||
fun TextStyle.medium(): TextStyle = this.copy(fontWeight = FontWeight.Medium)
|
//fun TextStyle.medium(): TextStyle = this.copy(fontWeight = FontWeight.Medium)
|
||||||
fun TextStyle.light(): TextStyle = this.copy(fontWeight = FontWeight.Light)
|
//fun TextStyle.light(): TextStyle = this.copy(fontWeight = FontWeight.Light)
|
||||||
|
//
|
||||||
fun TextStyle.textAlign(textAlign: TextAlign): TextStyle = this.copy(textAlign = textAlign)
|
//fun TextStyle.textAlign(textAlign: TextAlign): TextStyle = this.copy(textAlign = textAlign)
|
||||||
|
|||||||
@@ -1,19 +1,22 @@
|
|||||||
package com.sw.inbound.network
|
package com.sw.inbound.network
|
||||||
|
|
||||||
import androidx.compose.runtime.getValue
|
//import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
//import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.setValue
|
//import androidx.compose.runtime.setValue
|
||||||
import java.util.concurrent.atomic.AtomicInteger
|
//import java.util.concurrent.atomic.AtomicInteger
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 进度条状态
|
* 进度条状态(Compose 相关逻辑已注释,show/hide 保留为空方法供外部调用)
|
||||||
*/
|
*/
|
||||||
object LoadingState {
|
object LoadingState {
|
||||||
private var _isLoading by mutableStateOf(false)
|
// private var _isLoading by mutableStateOf(false)
|
||||||
val isLoading: Boolean get() = _isLoading
|
// val isLoading: Boolean get() = _isLoading
|
||||||
|
//
|
||||||
|
// private val counter = AtomicInteger(0)
|
||||||
|
//
|
||||||
|
// fun show() = counter.incrementAndGet().let { if (it == 1) _isLoading = true }
|
||||||
|
// fun hide() = counter.decrementAndGet().let { if (it <= 0) _isLoading = false }
|
||||||
|
|
||||||
private val counter = AtomicInteger(0)
|
fun show() = Unit
|
||||||
|
fun hide() = Unit
|
||||||
fun show() = counter.incrementAndGet().let { if (it == 1) _isLoading = true }
|
}
|
||||||
fun hide() = counter.decrementAndGet().let { if (it <= 0) _isLoading = false }
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package com.sw.inbound.receiver
|
|||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import com.sw.inbound.MainActivity
|
import com.sw.inbound.activity.HomeActivity
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -14,7 +14,7 @@ class BootReceiver : BroadcastReceiver() {
|
|||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
if (Intent.ACTION_BOOT_COMPLETED == intent.action) {
|
if (Intent.ACTION_BOOT_COMPLETED == intent.action) {
|
||||||
Timber.d("设备启动完成,开始执行自启动逻辑")
|
Timber.d("设备启动完成,开始执行自启动逻辑")
|
||||||
val intent = Intent(context, MainActivity::class.java)
|
val intent = Intent(context, HomeActivity::class.java)
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
context.startActivity(intent)
|
context.startActivity(intent)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package com.sw.inbound.sdk
|
|||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import com.sw.inbound.utils.ThreadUtils
|
import com.sw.inbound.utils.ThreadUtils
|
||||||
import com.sw.inbound.utils.ToastUtils
|
//import com.sw.inbound.utils.ToastUtils
|
||||||
import com.wabon.wbintelligenthardwaresdk.api.SensorScale
|
import com.wabon.wbintelligenthardwaresdk.api.SensorScale
|
||||||
import com.wabon.wbintelligenthardwaresdk.api.SensorScale.OnScaleResult
|
import com.wabon.wbintelligenthardwaresdk.api.SensorScale.OnScaleResult
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
@@ -52,7 +52,7 @@ object SensorScaleUtils {
|
|||||||
isValidWeight = false
|
isValidWeight = false
|
||||||
Timber.e("fail code = $errCode")
|
Timber.e("fail code = $errCode")
|
||||||
Handler(Looper.getMainLooper()).post {
|
Handler(Looper.getMainLooper()).post {
|
||||||
ToastUtils.showToast("秤读取数据异常")
|
//ToastUtils.showToast("秤读取数据异常")
|
||||||
startScale()
|
startScale()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -115,7 +115,7 @@ object SensorScaleUtils {
|
|||||||
fun tare() {
|
fun tare() {
|
||||||
mSensorScale?.tare {
|
mSensorScale?.tare {
|
||||||
Timber.d("去皮置零操作成功")
|
Timber.d("去皮置零操作成功")
|
||||||
ToastUtils.showToast("去皮置零操作成功")
|
//ToastUtils.showToast("去皮置零操作成功")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,174 +1,174 @@
|
|||||||
package com.sw.inbound.ui
|
//package com.sw.inbound.ui
|
||||||
|
//
|
||||||
import androidx.compose.animation.core.tween
|
//import androidx.compose.animation.core.tween
|
||||||
import androidx.compose.animation.fadeIn
|
//import androidx.compose.animation.fadeIn
|
||||||
import androidx.compose.animation.fadeOut
|
//import androidx.compose.animation.fadeOut
|
||||||
import androidx.compose.foundation.Image
|
//import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.layout.Box
|
//import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
//import androidx.compose.foundation.layout.PaddingValues
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
//import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
//import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.material3.Scaffold
|
//import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
//import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
//import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
//import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
//import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
//import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.layout.ContentScale
|
//import androidx.compose.ui.layout.ContentScale
|
||||||
import androidx.compose.ui.res.painterResource
|
//import androidx.compose.ui.res.painterResource
|
||||||
import androidx.navigation.NavHostController
|
//import androidx.navigation.NavHostController
|
||||||
import androidx.navigation.compose.NavHost
|
//import androidx.navigation.compose.NavHost
|
||||||
import androidx.navigation.compose.composable
|
//import androidx.navigation.compose.composable
|
||||||
import androidx.navigation.compose.currentBackStackEntryAsState
|
//import androidx.navigation.compose.currentBackStackEntryAsState
|
||||||
import androidx.navigation.compose.rememberNavController
|
//import androidx.navigation.compose.rememberNavController
|
||||||
import com.sw.inbound.GlobalKey
|
//import com.sw.inbound.GlobalKey
|
||||||
import com.sw.inbound.R
|
//import com.sw.inbound.R
|
||||||
import com.sw.inbound.ui.page.HomeScreen
|
//import com.sw.inbound.ui.page.HomeScreen
|
||||||
import com.sw.inbound.ui.page.PurchaseOrderScreen
|
//import com.sw.inbound.ui.page.PurchaseOrderScreen
|
||||||
import com.sw.inbound.utils.SPUtil
|
//import com.sw.inbound.utils.SPUtil
|
||||||
import com.sw.inbound.utils.ToastUtils
|
//import com.sw.inbound.utils.ToastUtils
|
||||||
|
//
|
||||||
@Composable
|
//@Composable
|
||||||
fun AppScreen(
|
//fun AppScreen(
|
||||||
onBackRequest: () -> Unit
|
// onBackRequest: () -> Unit
|
||||||
) {
|
//) {
|
||||||
val navController = rememberNavController()
|
// val navController = rememberNavController()
|
||||||
val currentBackStackEntry by navController.currentBackStackEntryAsState()
|
// val currentBackStackEntry by navController.currentBackStackEntryAsState()
|
||||||
var canBack by remember { mutableStateOf(false) }
|
// var canBack by remember { mutableStateOf(false) }
|
||||||
|
//
|
||||||
// 拦截物理返回键
|
// // 拦截物理返回键
|
||||||
// BackHandler(
|
//// BackHandler(
|
||||||
// onBack = {
|
//// onBack = {
|
||||||
// val currentRoute = currentBackStackEntry?.destination?.route
|
//// val currentRoute = currentBackStackEntry?.destination?.route
|
||||||
// Timber.d("BackHandler currentRouter = ${currentRoute}")
|
//// Timber.d("BackHandler currentRouter = ${currentRoute}")
|
||||||
// if (currentRoute == Screen.Home.route && !canBack) {
|
//// if (currentRoute == Screen.Home.route && !canBack) {
|
||||||
// ToastUtils.showToast("再次点击退出")
|
//// ToastUtils.showToast("再次点击退出")
|
||||||
// canBack = true
|
//// canBack = true
|
||||||
// } else if (currentRoute == Screen.Login.route) {
|
//// } else if (currentRoute == Screen.Login.route) {
|
||||||
// onBackRequest()
|
//// onBackRequest()
|
||||||
// } else {
|
//// } else {
|
||||||
// navController.popBackStack()
|
//// navController.popBackStack()
|
||||||
|
//// }
|
||||||
|
//// }
|
||||||
|
//// )
|
||||||
|
////
|
||||||
|
//// BackHandler(canBack) {
|
||||||
|
//// Timber.d("canBack = $canBack")
|
||||||
|
//// if (canBack) {
|
||||||
|
//// onBackRequest()
|
||||||
|
//// }
|
||||||
|
//// }
|
||||||
|
//
|
||||||
|
// Scaffold(
|
||||||
|
// modifier = Modifier
|
||||||
|
// .fillMaxSize()
|
||||||
|
// //.paint(painter = painterResource(R.mipmap.bg)),
|
||||||
|
// ,containerColor = Color.Transparent,
|
||||||
|
// content = { padding ->
|
||||||
|
// Box {
|
||||||
|
//// Image(
|
||||||
|
//// painter = painterResource(R.mipmap.bg),
|
||||||
|
//// contentDescription = null,
|
||||||
|
//// modifier = Modifier.fillMaxSize(),
|
||||||
|
//// contentScale = ContentScale.Crop
|
||||||
|
//// )
|
||||||
|
// Image(
|
||||||
|
// painter = painterResource(id = R.mipmap.bg),
|
||||||
|
// contentDescription = "背景图片",
|
||||||
|
// modifier = Modifier.fillMaxSize(),
|
||||||
|
// contentScale = ContentScale.Crop
|
||||||
|
// )
|
||||||
|
// NavHost(padding, navController, onBackRequest)
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// )
|
// )
|
||||||
|
// ToastUtils.ToastComposable()
|
||||||
|
// //GlobalLoading() // 全局Loading
|
||||||
//
|
//
|
||||||
// BackHandler(canBack) {
|
//}
|
||||||
// Timber.d("canBack = $canBack")
|
//
|
||||||
// if (canBack) {
|
///**
|
||||||
// onBackRequest()
|
// * 导航
|
||||||
|
// */
|
||||||
|
//@Composable
|
||||||
|
//private fun NavHost(
|
||||||
|
// padding: PaddingValues,
|
||||||
|
// navController: NavHostController,
|
||||||
|
// onBackRequest: () -> Unit = {}
|
||||||
|
//) {
|
||||||
|
// val spUtil = SPUtil.getInstance()
|
||||||
|
// val token = spUtil.get(GlobalKey.KEY_TOKEN, "")!!
|
||||||
|
// NavHost(
|
||||||
|
// modifier = Modifier
|
||||||
|
// .fillMaxSize()
|
||||||
|
// .padding(padding),
|
||||||
|
// navController = navController,
|
||||||
|
// //startDestination = if (token.isEmpty()) Screen.Login.route else Screen.Home.route
|
||||||
|
// startDestination = Screen.Home.route
|
||||||
|
// ) {
|
||||||
|
//// composable(Screen.Test.route) {
|
||||||
|
//// TestScreen(modifier = Modifier, navController)
|
||||||
|
//// }
|
||||||
|
// // 首页
|
||||||
|
// composable(Screen.Home.route) {
|
||||||
|
// HomeScreen(modifier = Modifier, navController, onBackRequest = onBackRequest)
|
||||||
// }
|
// }
|
||||||
// }
|
// // 登录
|
||||||
|
//// composable(Screen.Login.route) {
|
||||||
Scaffold(
|
//// LoginScreen(modifier = Modifier, navController)
|
||||||
modifier = Modifier
|
//// }
|
||||||
.fillMaxSize()
|
// // 采购单入库
|
||||||
//.paint(painter = painterResource(R.mipmap.bg)),
|
|
||||||
,containerColor = Color.Transparent,
|
|
||||||
content = { padding ->
|
|
||||||
Box {
|
|
||||||
// Image(
|
|
||||||
// painter = painterResource(R.mipmap.bg),
|
|
||||||
// contentDescription = null,
|
|
||||||
// modifier = Modifier.fillMaxSize(),
|
|
||||||
// contentScale = ContentScale.Crop
|
|
||||||
// )
|
|
||||||
Image(
|
|
||||||
painter = painterResource(id = R.mipmap.bg),
|
|
||||||
contentDescription = "背景图片",
|
|
||||||
modifier = Modifier.fillMaxSize(),
|
|
||||||
contentScale = ContentScale.Crop
|
|
||||||
)
|
|
||||||
NavHost(padding, navController, onBackRequest)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
ToastUtils.ToastComposable()
|
|
||||||
//GlobalLoading() // 全局Loading
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 导航
|
|
||||||
*/
|
|
||||||
@Composable
|
|
||||||
private fun NavHost(
|
|
||||||
padding: PaddingValues,
|
|
||||||
navController: NavHostController,
|
|
||||||
onBackRequest: () -> Unit = {}
|
|
||||||
) {
|
|
||||||
val spUtil = SPUtil.getInstance()
|
|
||||||
val token = spUtil.get(GlobalKey.KEY_TOKEN, "")!!
|
|
||||||
NavHost(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.padding(padding),
|
|
||||||
navController = navController,
|
|
||||||
//startDestination = if (token.isEmpty()) Screen.Login.route else Screen.Home.route
|
|
||||||
startDestination = Screen.Home.route
|
|
||||||
) {
|
|
||||||
// composable(Screen.Test.route) {
|
|
||||||
// TestScreen(modifier = Modifier, navController)
|
|
||||||
// }
|
|
||||||
// 首页
|
|
||||||
composable(Screen.Home.route) {
|
|
||||||
HomeScreen(modifier = Modifier, navController, onBackRequest = onBackRequest)
|
|
||||||
}
|
|
||||||
// 登录
|
|
||||||
// composable(Screen.Login.route) {
|
|
||||||
// LoginScreen(modifier = Modifier, navController)
|
|
||||||
// }
|
|
||||||
// 采购单入库
|
|
||||||
composable(
|
|
||||||
Screen.PurchaseOrder.route,
|
|
||||||
enterTransition = { fadeIn(animationSpec = tween(0)) }, // 无进入动画
|
|
||||||
exitTransition = { fadeOut(animationSpec = tween(0)) } // 无退出动画
|
|
||||||
) {
|
|
||||||
PurchaseOrderScreen(modifier = Modifier.fillMaxSize(), navController)
|
|
||||||
}
|
|
||||||
// // 自采单
|
|
||||||
// composable(
|
// composable(
|
||||||
// Screen.SelfProcurement.route,
|
// Screen.PurchaseOrder.route,
|
||||||
// enterTransition = { fadeIn(animationSpec = tween(0)) }, // 无进入动画
|
// enterTransition = { fadeIn(animationSpec = tween(0)) }, // 无进入动画
|
||||||
// exitTransition = { fadeOut(animationSpec = tween(0)) } // 无退出动画
|
// exitTransition = { fadeOut(animationSpec = tween(0)) } // 无退出动画
|
||||||
// ) {
|
// ) {
|
||||||
// SelfProcurementScreen(modifier = Modifier, navController)
|
// PurchaseOrderScreen(modifier = Modifier.fillMaxSize(), navController)
|
||||||
// }
|
// }
|
||||||
// // 收货
|
//// // 自采单
|
||||||
// composable(
|
//// composable(
|
||||||
// Screen.ReceiptProduct.route,
|
//// Screen.SelfProcurement.route,
|
||||||
// enterTransition = { fadeIn(animationSpec = tween(0)) }, // 无进入动画
|
//// enterTransition = { fadeIn(animationSpec = tween(0)) }, // 无进入动画
|
||||||
// exitTransition = { fadeOut(animationSpec = tween(0)) }, // 无退出动画
|
//// exitTransition = { fadeOut(animationSpec = tween(0)) } // 无退出动画
|
||||||
// arguments = listOf(
|
//// ) {
|
||||||
// navArgument(name = "id", builder = { type = NavType.IntType }),
|
//// SelfProcurementScreen(modifier = Modifier, navController)
|
||||||
// navArgument(name = "supplierId", builder = { type = NavType.IntType })
|
//// }
|
||||||
// )
|
//// // 收货
|
||||||
// ) { backStackEntry ->
|
//// composable(
|
||||||
// val id = backStackEntry.arguments?.getString("id") ?: ""
|
//// Screen.ReceiptProduct.route,
|
||||||
// val supplierId = backStackEntry.arguments?.getString("supplierId") ?: ""
|
//// enterTransition = { fadeIn(animationSpec = tween(0)) }, // 无进入动画
|
||||||
// ReceiptProductScreen(modifier = Modifier, navController, id, supplierId)
|
//// exitTransition = { fadeOut(animationSpec = tween(0)) }, // 无退出动画
|
||||||
// }
|
//// arguments = listOf(
|
||||||
}
|
//// navArgument(name = "id", builder = { type = NavType.IntType }),
|
||||||
}
|
//// navArgument(name = "supplierId", builder = { type = NavType.IntType })
|
||||||
|
//// )
|
||||||
sealed class Screen(val route: String) {
|
//// ) { backStackEntry ->
|
||||||
data object Home : Screen("home")
|
//// val id = backStackEntry.arguments?.getString("id") ?: ""
|
||||||
// data object Login : Screen("login")
|
//// val supplierId = backStackEntry.arguments?.getString("supplierId") ?: ""
|
||||||
|
//// ReceiptProductScreen(modifier = Modifier, navController, id, supplierId)
|
||||||
// 采购单入库
|
//// }
|
||||||
data object PurchaseOrder : Screen("purchase_order")
|
|
||||||
|
|
||||||
// 自采单入库
|
|
||||||
// data object SelfProcurement : Screen("self_procurement")
|
|
||||||
|
|
||||||
// 收货
|
|
||||||
// data object ReceiptProduct : Screen("receipt_product?id={id}&supplierId={supplierId}") {
|
|
||||||
// fun createRoute(id: Int, supplierId: Int) =
|
|
||||||
// "receipt_product?id=${id}&supplierId=${supplierId}"
|
|
||||||
// }
|
// }
|
||||||
|
//}
|
||||||
// 添加物品
|
//
|
||||||
// data object AddProduct : Screen("addProduct")
|
//sealed class Screen(val route: String) {
|
||||||
// data object Test : Screen("Test")
|
// data object Home : Screen("home")
|
||||||
}
|
//// data object Login : Screen("login")
|
||||||
|
//
|
||||||
|
// // 采购单入库
|
||||||
|
// data object PurchaseOrder : Screen("purchase_order")
|
||||||
|
//
|
||||||
|
// // 自采单入库
|
||||||
|
//// data object SelfProcurement : Screen("self_procurement")
|
||||||
|
//
|
||||||
|
// // 收货
|
||||||
|
//// data object ReceiptProduct : Screen("receipt_product?id={id}&supplierId={supplierId}") {
|
||||||
|
//// fun createRoute(id: Int, supplierId: Int) =
|
||||||
|
//// "receipt_product?id=${id}&supplierId=${supplierId}"
|
||||||
|
//// }
|
||||||
|
//
|
||||||
|
// // 添加物品
|
||||||
|
//// data object AddProduct : Screen("addProduct")
|
||||||
|
//// data object Test : Screen("Test")
|
||||||
|
//}
|
||||||
@@ -1,120 +1,120 @@
|
|||||||
package com.sw.inbound.ui.page
|
//package com.sw.inbound.ui.page
|
||||||
|
//
|
||||||
import androidx.activity.compose.BackHandler
|
//import androidx.activity.compose.BackHandler
|
||||||
import androidx.compose.foundation.Image
|
//import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.clickable
|
//import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
//import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
//import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
//import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
//import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.Spacer
|
//import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
//import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
//import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
//import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.width
|
//import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
//import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.collectAsState
|
//import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
//import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.remember
|
//import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Alignment
|
//import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.painterResource
|
//import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.unit.dp
|
//import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
//import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import androidx.navigation.NavHostController
|
//import androidx.navigation.NavHostController
|
||||||
import androidx.navigation.compose.rememberNavController
|
//import androidx.navigation.compose.rememberNavController
|
||||||
import com.sw.inbound.R
|
//import com.sw.inbound.R
|
||||||
import com.sw.inbound.activity.GoodsListActivity
|
//import com.sw.inbound.activity.GoodsListActivity
|
||||||
import com.sw.inbound.activity.PurchaseOrderActivity
|
//import com.sw.inbound.activity.PurchaseOrderActivity
|
||||||
import com.sw.inbound.activity.SelfProcurementActivity
|
//import com.sw.inbound.activity.SelfProcurementActivity
|
||||||
import com.sw.inbound.ui.Screen
|
//import com.sw.inbound.ui.Screen
|
||||||
import com.sw.inbound.ui.weight.TopTitleBar
|
//import com.sw.inbound.ui.weight.TopTitleBar
|
||||||
import com.sw.inbound.utils.ext.startActivity
|
//import com.sw.inbound.utils.ext.startActivity
|
||||||
import com.sw.inbound.viewmodel.UserViewModel
|
//import com.sw.inbound.viewmodel.UserViewModel
|
||||||
import timber.log.Timber
|
//import timber.log.Timber
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* 首页
|
// * 首页
|
||||||
*/
|
// */
|
||||||
@Composable
|
//@Composable
|
||||||
fun HomeScreen(
|
//fun HomeScreen(
|
||||||
modifier: Modifier = Modifier,
|
// modifier: Modifier = Modifier,
|
||||||
navController: NavHostController = rememberNavController(),
|
// navController: NavHostController = rememberNavController(),
|
||||||
viewModel: UserViewModel = hiltViewModel<UserViewModel>(),
|
// viewModel: UserViewModel = hiltViewModel<UserViewModel>(),
|
||||||
onBackRequest: () -> Unit = {}
|
// onBackRequest: () -> Unit = {}
|
||||||
) {
|
//) {
|
||||||
val user by viewModel.user.collectAsState()
|
// val user by viewModel.user.collectAsState()
|
||||||
|
//
|
||||||
// 避免每次进入都获取字典类型
|
// // 避免每次进入都获取字典类型
|
||||||
LaunchedEffect(Unit) {
|
// LaunchedEffect(Unit) {
|
||||||
Timber.d("LaunchedEffect(Unit)")
|
// Timber.d("LaunchedEffect(Unit)")
|
||||||
// viewModel.getInitInfo()
|
//// viewModel.getInitInfo()
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
BackHandler {
|
// BackHandler {
|
||||||
onBackRequest()
|
// onBackRequest()
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
Column(modifier = Modifier.fillMaxSize()) {
|
// Column(modifier = Modifier.fillMaxSize()) {
|
||||||
TopTitleBar(user = user, onLogoutClick = {
|
// TopTitleBar(user = user, onLogoutClick = {
|
||||||
// viewModel.logout()
|
//// viewModel.logout()
|
||||||
// navController.navigate(Screen.Login.route) {
|
//// navController.navigate(Screen.Login.route) {
|
||||||
// popUpTo(Screen.Home.route) {
|
//// popUpTo(Screen.Home.route) {
|
||||||
// inclusive = true
|
//// inclusive = true
|
||||||
// }
|
//// }
|
||||||
// }
|
//// }
|
||||||
})
|
// })
|
||||||
Row(
|
// Row(
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
// verticalAlignment = Alignment.CenterVertically,
|
||||||
horizontalArrangement = Arrangement.Center,
|
// horizontalArrangement = Arrangement.Center,
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.weight(1f)
|
// .weight(1f)
|
||||||
.fillMaxWidth()
|
// .fillMaxWidth()
|
||||||
) {
|
// ) {
|
||||||
Image(
|
// Image(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.width(595.dp)
|
// .width(595.dp)
|
||||||
.height(477.dp)
|
// .height(477.dp)
|
||||||
.clickable(
|
// .clickable(
|
||||||
interactionSource = remember { MutableInteractionSource() },
|
// interactionSource = remember { MutableInteractionSource() },
|
||||||
indication = null
|
// indication = null
|
||||||
) {
|
// ) {
|
||||||
// navController.navigate(Screen.PurchaseOrder.route)
|
//// navController.navigate(Screen.PurchaseOrder.route)
|
||||||
//navController.context.startActivity<ReceiptActivity> {
|
// //navController.context.startActivity<ReceiptActivity> {
|
||||||
// putExtra(GoodsListActivity.ID, "123123")
|
// // putExtra(GoodsListActivity.ID, "123123")
|
||||||
// putExtra(GoodsListActivity.SUPPLIER_ID, "123123123123")
|
// // putExtra(GoodsListActivity.SUPPLIER_ID, "123123123123")
|
||||||
// putExtra(GoodsListActivity.IS_RECEIPT_PAGE, true)
|
// // putExtra(GoodsListActivity.IS_RECEIPT_PAGE, true)
|
||||||
//}
|
// //}
|
||||||
navController.context.startActivity<PurchaseOrderActivity>()
|
// navController.context.startActivity<PurchaseOrderActivity>()
|
||||||
},
|
// },
|
||||||
painter = painterResource(R.mipmap.ic_order_purchase),
|
// painter = painterResource(R.mipmap.ic_order_purchase),
|
||||||
contentDescription = "采购单入库"
|
// contentDescription = "采购单入库"
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.width(15.dp))
|
// Spacer(modifier = Modifier.width(15.dp))
|
||||||
Image(
|
// Image(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.width(595.dp)
|
// .width(595.dp)
|
||||||
.height(477.dp)
|
// .height(477.dp)
|
||||||
.clickable(
|
// .clickable(
|
||||||
interactionSource = remember { MutableInteractionSource() },
|
// interactionSource = remember { MutableInteractionSource() },
|
||||||
indication = null
|
// indication = null
|
||||||
) {
|
// ) {
|
||||||
// navController.navigate(
|
//// navController.navigate(
|
||||||
// Screen.SelfProcurement.route, navOptions = NavOptions.Builder()
|
//// Screen.SelfProcurement.route, navOptions = NavOptions.Builder()
|
||||||
// .setEnterAnim(0)
|
//// .setEnterAnim(0)
|
||||||
// .setExitAnim(0)
|
//// .setExitAnim(0)
|
||||||
// .setPopEnterAnim(0)
|
//// .setPopEnterAnim(0)
|
||||||
// .setPopExitAnim(0)
|
//// .setPopExitAnim(0)
|
||||||
// .build()
|
//// .build()
|
||||||
// )
|
//// )
|
||||||
navController.context.startActivity<SelfProcurementActivity> {
|
// navController.context.startActivity<SelfProcurementActivity> {
|
||||||
putExtra(GoodsListActivity.IS_RECEIPT_PAGE, false)
|
// putExtra(GoodsListActivity.IS_RECEIPT_PAGE, false)
|
||||||
}
|
// }
|
||||||
},
|
// },
|
||||||
painter = painterResource(R.mipmap.ic_order_self_procurement),
|
// painter = painterResource(R.mipmap.ic_order_self_procurement),
|
||||||
contentDescription = "自采入库"
|
// contentDescription = "自采入库"
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|||||||
@@ -1,351 +1,351 @@
|
|||||||
package com.sw.inbound.ui.page
|
//package com.sw.inbound.ui.page
|
||||||
|
|
||||||
import androidx.compose.foundation.Image
|
|
||||||
import androidx.compose.foundation.background
|
|
||||||
import androidx.compose.foundation.clickable
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
|
||||||
import androidx.compose.foundation.layout.Box
|
|
||||||
import androidx.compose.foundation.layout.Column
|
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
|
||||||
import androidx.compose.foundation.layout.Row
|
|
||||||
import androidx.compose.foundation.layout.Spacer
|
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
|
||||||
import androidx.compose.foundation.layout.height
|
|
||||||
import androidx.compose.foundation.layout.padding
|
|
||||||
import androidx.compose.foundation.layout.width
|
|
||||||
import androidx.compose.foundation.lazy.LazyRow
|
|
||||||
import androidx.compose.foundation.lazy.items
|
|
||||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
||||||
import androidx.compose.material3.Button
|
|
||||||
import androidx.compose.material3.ButtonDefaults
|
|
||||||
import androidx.compose.material3.CircularProgressIndicator
|
|
||||||
import androidx.compose.material3.HorizontalDivider
|
|
||||||
import androidx.compose.material3.Text
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.runtime.DisposableEffect
|
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
|
||||||
import androidx.compose.runtime.collectAsState
|
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.mutableIntStateOf
|
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.runtime.setValue
|
|
||||||
import androidx.compose.runtime.snapshotFlow
|
|
||||||
import androidx.compose.ui.Alignment
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.graphics.Color
|
|
||||||
import androidx.compose.ui.layout.ContentScale
|
|
||||||
import androidx.compose.ui.res.colorResource
|
|
||||||
import androidx.compose.ui.res.painterResource
|
|
||||||
import androidx.compose.ui.text.TextStyle
|
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import androidx.compose.ui.unit.sp
|
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
|
||||||
import androidx.lifecycle.Lifecycle
|
|
||||||
import androidx.lifecycle.LifecycleEventObserver
|
|
||||||
import androidx.lifecycle.compose.LocalLifecycleOwner
|
|
||||||
import androidx.navigation.NavHostController
|
|
||||||
import androidx.navigation.compose.rememberNavController
|
|
||||||
import com.sw.inbound.R
|
|
||||||
import com.sw.inbound.activity.GoodsListActivity
|
|
||||||
import com.sw.inbound.activity.ReceiptActivity
|
|
||||||
import com.sw.inbound.activity.SelfProcurementActivity
|
|
||||||
import com.sw.inbound.ext.dashedBorder
|
|
||||||
import com.sw.inbound.ext.toFormattedString
|
|
||||||
import com.sw.inbound.model.response.SupplierInfo
|
|
||||||
import com.sw.inbound.ui.theme.AppTypography.blackTextStyle
|
|
||||||
import com.sw.inbound.ui.theme.AppTypography.grayTextStyle
|
|
||||||
import com.sw.inbound.ui.weight.BottomActionBar
|
|
||||||
import com.sw.inbound.ui.weight.TopTitleBar
|
|
||||||
import com.sw.inbound.utils.ext.startActivity
|
|
||||||
import com.sw.inbound.viewmodel.PurchaseOrderViewModel
|
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
|
||||||
import kotlinx.coroutines.flow.map
|
|
||||||
import timber.log.Timber
|
|
||||||
|
|
||||||
@Preview(
|
|
||||||
widthDp = 1920, heightDp = 1080, showBackground = true
|
|
||||||
)
|
|
||||||
/**
|
|
||||||
* 采购订单-供应商列表
|
|
||||||
*/
|
|
||||||
@Composable
|
|
||||||
fun PurchaseOrderScreen(
|
|
||||||
modifier: Modifier = Modifier,
|
|
||||||
navController: NavHostController = rememberNavController(),
|
|
||||||
viewModel: PurchaseOrderViewModel = hiltViewModel<PurchaseOrderViewModel>()
|
|
||||||
) {
|
|
||||||
val products by viewModel.supplierList.collectAsState()
|
|
||||||
val lazyListState = rememberLazyListState()
|
|
||||||
val canLoadMore by viewModel.canLoadMore.collectAsState()
|
|
||||||
val isMoreLoading by viewModel.isMoreLoading.collectAsState()
|
|
||||||
var pageNum by remember { mutableIntStateOf(1) }
|
|
||||||
val lifecycleOwner = LocalLifecycleOwner.current
|
|
||||||
val first = viewModel.firstOperate.collectAsState()
|
|
||||||
|
|
||||||
DisposableEffect(lifecycleOwner) {
|
|
||||||
val observer = LifecycleEventObserver { _, event ->
|
|
||||||
if (event == Lifecycle.Event.ON_RESUME) {
|
|
||||||
Timber.d("ON_RESUME 触发")
|
|
||||||
pageNum = 0
|
|
||||||
viewModel.getOrderList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lifecycleOwner.lifecycle.addObserver(observer)
|
|
||||||
onDispose { lifecycleOwner.lifecycle.removeObserver(observer) }
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检测是否滚动到底部
|
|
||||||
LaunchedEffect(lazyListState) {
|
|
||||||
snapshotFlow { lazyListState.layoutInfo }.map { layoutInfo ->
|
|
||||||
val lastVisibleItem = layoutInfo.visibleItemsInfo.lastOrNull()
|
|
||||||
lastVisibleItem?.index == layoutInfo.totalItemsCount - 1
|
|
||||||
}.distinctUntilChanged().collect { reachedEnd ->
|
|
||||||
Timber.d("加载更多 reachedEnd = $reachedEnd, isMoreLoading = $isMoreLoading, canLoadMore = $canLoadMore")
|
|
||||||
if (reachedEnd && !isMoreLoading && canLoadMore) {
|
|
||||||
pageNum++
|
|
||||||
viewModel.getOrderList(pageNum = pageNum)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Column {
|
|
||||||
TopTitleBar()
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.weight(1f)
|
|
||||||
.padding(horizontal = 10.dp)
|
|
||||||
) {
|
|
||||||
Image(
|
|
||||||
painter = painterResource(id = R.mipmap.bg_listview),
|
|
||||||
contentDescription = "背景",
|
|
||||||
modifier = Modifier.fillMaxSize(),
|
|
||||||
contentScale = ContentScale.FillBounds
|
|
||||||
)
|
|
||||||
|
|
||||||
Box(
|
|
||||||
modifier = Modifier.padding(
|
|
||||||
start = 30.dp, end = 30.dp, top = 30.dp, bottom = 90.dp
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
if (first.value) {
|
|
||||||
return@Box
|
|
||||||
}
|
|
||||||
if (products.isNullOrEmpty()) {
|
|
||||||
PurchaseEmptyItem()
|
|
||||||
} else {
|
|
||||||
LazyRow(
|
|
||||||
modifier = modifier.padding(10.dp),
|
|
||||||
state = lazyListState,
|
|
||||||
contentPadding = PaddingValues(16.dp),
|
|
||||||
horizontalArrangement = Arrangement.spacedBy(30.dp)
|
|
||||||
) {
|
|
||||||
items(items = products!!, key = { it!!.id ?: "" }) { product ->
|
|
||||||
PurchaseOrderItem(product!!) {
|
|
||||||
// navController.navigate(
|
|
||||||
// Screen.ReceiptProduct.createRoute(
|
|
||||||
// it.id,
|
|
||||||
// it.supplierId
|
|
||||||
// )
|
|
||||||
// )
|
|
||||||
navController.context.startActivity<ReceiptActivity> {
|
|
||||||
putExtra(GoodsListActivity.ID, product!!.id)
|
|
||||||
putExtra(GoodsListActivity.SUPPLIER_ID, product.supplierId)
|
|
||||||
putExtra(GoodsListActivity.IS_RECEIPT_PAGE, true)
|
|
||||||
//putExtra(GoodsListActivity.IS_NEW_RECEIPT, false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isMoreLoading) {
|
|
||||||
item {
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillParentMaxHeight()
|
|
||||||
.padding(16.dp),
|
|
||||||
contentAlignment = Alignment.Center
|
|
||||||
) {
|
|
||||||
CircularProgressIndicator()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BottomActionBar(modifier = Modifier, onLeftButtonClick = {
|
|
||||||
navController.popBackStack()
|
|
||||||
}, onRight2ButtonClick = {
|
|
||||||
//navController.navigate(Screen.SelfProcurement.route)
|
|
||||||
navController.context.startActivity<SelfProcurementActivity> {
|
|
||||||
putExtra(GoodsListActivity.IS_RECEIPT_PAGE, false)
|
|
||||||
}
|
|
||||||
//navController.context.startActivity<ReceiptActivity> {
|
|
||||||
// //xtra(GoodsListActivity.ID,it!!.id)
|
|
||||||
// //xtra(GoodsListActivity.SUPPLIER_ID,it.supplierId)
|
|
||||||
// putExtra(GoodsListActivity.IS_RECEIPT_PAGE,true)
|
|
||||||
// putExtra(GoodsListActivity.IS_NEW_RECEIPT,true)
|
|
||||||
//}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 采购单缺省
|
|
||||||
*/
|
|
||||||
@Composable
|
|
||||||
fun PurchaseEmptyItem() {
|
|
||||||
Column(
|
|
||||||
modifier = Modifier.fillMaxSize(),
|
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
|
||||||
verticalArrangement = Arrangement.Center
|
|
||||||
) {
|
|
||||||
Image(painter = painterResource(R.mipmap.ic_empty), contentDescription = "暂无数据")
|
|
||||||
Spacer(modifier = Modifier.height(30.dp))
|
|
||||||
Text(
|
|
||||||
text = "暂无数据", style = TextStyle(
|
|
||||||
fontSize = 30.sp, fontWeight = FontWeight.Bold, color = colorResource(R.color.title)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 列表item
|
|
||||||
*/
|
|
||||||
@Composable
|
|
||||||
fun PurchaseOrderItem(product: SupplierInfo, onItemClick: (SupplierInfo) -> Unit) {
|
|
||||||
|
|
||||||
val (receiptStatusStyle, statusLabel) = when (product.receiveStatus) {
|
|
||||||
// 1 -> blackTextStyle to "已关闭"
|
|
||||||
// 2 -> blackTextStyle to "已完成"
|
|
||||||
// 3 -> blackTextStyle.copy(
|
|
||||||
// color = colorResource(R.color.red)
|
|
||||||
// ) to "未收货"
|
|
||||||
//
|
//
|
||||||
// 4 -> blackTextStyle.copy(
|
//import androidx.compose.foundation.Image
|
||||||
|
//import androidx.compose.foundation.background
|
||||||
|
//import androidx.compose.foundation.clickable
|
||||||
|
//import androidx.compose.foundation.layout.Arrangement
|
||||||
|
//import androidx.compose.foundation.layout.Box
|
||||||
|
//import androidx.compose.foundation.layout.Column
|
||||||
|
//import androidx.compose.foundation.layout.PaddingValues
|
||||||
|
//import androidx.compose.foundation.layout.Row
|
||||||
|
//import androidx.compose.foundation.layout.Spacer
|
||||||
|
//import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
//import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
//import androidx.compose.foundation.layout.height
|
||||||
|
//import androidx.compose.foundation.layout.padding
|
||||||
|
//import androidx.compose.foundation.layout.width
|
||||||
|
//import androidx.compose.foundation.lazy.LazyRow
|
||||||
|
//import androidx.compose.foundation.lazy.items
|
||||||
|
//import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
|
//import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
|
//import androidx.compose.material3.Button
|
||||||
|
//import androidx.compose.material3.ButtonDefaults
|
||||||
|
//import androidx.compose.material3.CircularProgressIndicator
|
||||||
|
//import androidx.compose.material3.HorizontalDivider
|
||||||
|
//import androidx.compose.material3.Text
|
||||||
|
//import androidx.compose.runtime.Composable
|
||||||
|
//import androidx.compose.runtime.DisposableEffect
|
||||||
|
//import androidx.compose.runtime.LaunchedEffect
|
||||||
|
//import androidx.compose.runtime.collectAsState
|
||||||
|
//import androidx.compose.runtime.getValue
|
||||||
|
//import androidx.compose.runtime.mutableIntStateOf
|
||||||
|
//import androidx.compose.runtime.remember
|
||||||
|
//import androidx.compose.runtime.setValue
|
||||||
|
//import androidx.compose.runtime.snapshotFlow
|
||||||
|
//import androidx.compose.ui.Alignment
|
||||||
|
//import androidx.compose.ui.Modifier
|
||||||
|
//import androidx.compose.ui.graphics.Color
|
||||||
|
//import androidx.compose.ui.layout.ContentScale
|
||||||
|
//import androidx.compose.ui.res.colorResource
|
||||||
|
//import androidx.compose.ui.res.painterResource
|
||||||
|
//import androidx.compose.ui.text.TextStyle
|
||||||
|
//import androidx.compose.ui.text.font.FontWeight
|
||||||
|
//import androidx.compose.ui.text.style.TextOverflow
|
||||||
|
//import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
//import androidx.compose.ui.unit.dp
|
||||||
|
//import androidx.compose.ui.unit.sp
|
||||||
|
//import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
|
//import androidx.lifecycle.Lifecycle
|
||||||
|
//import androidx.lifecycle.LifecycleEventObserver
|
||||||
|
//import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||||
|
//import androidx.navigation.NavHostController
|
||||||
|
//import androidx.navigation.compose.rememberNavController
|
||||||
|
//import com.sw.inbound.R
|
||||||
|
//import com.sw.inbound.activity.GoodsListActivity
|
||||||
|
//import com.sw.inbound.activity.ReceiptActivity
|
||||||
|
//import com.sw.inbound.activity.SelfProcurementActivity
|
||||||
|
//import com.sw.inbound.ext.dashedBorder
|
||||||
|
//import com.sw.inbound.ext.toFormattedString
|
||||||
|
//import com.sw.inbound.model.response.SupplierInfo
|
||||||
|
//import com.sw.inbound.ui.theme.AppTypography.blackTextStyle
|
||||||
|
//import com.sw.inbound.ui.theme.AppTypography.grayTextStyle
|
||||||
|
//import com.sw.inbound.ui.weight.BottomActionBar
|
||||||
|
//import com.sw.inbound.ui.weight.TopTitleBar
|
||||||
|
//import com.sw.inbound.utils.ext.startActivity
|
||||||
|
//import com.sw.inbound.viewmodel.PurchaseOrderViewModel
|
||||||
|
//import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
|
//import kotlinx.coroutines.flow.map
|
||||||
|
//import timber.log.Timber
|
||||||
|
//
|
||||||
|
//@Preview(
|
||||||
|
// widthDp = 1920, heightDp = 1080, showBackground = true
|
||||||
|
//)
|
||||||
|
///**
|
||||||
|
// * 采购订单-供应商列表
|
||||||
|
// */
|
||||||
|
//@Composable
|
||||||
|
//fun PurchaseOrderScreen(
|
||||||
|
// modifier: Modifier = Modifier,
|
||||||
|
// navController: NavHostController = rememberNavController(),
|
||||||
|
// viewModel: PurchaseOrderViewModel = hiltViewModel<PurchaseOrderViewModel>()
|
||||||
|
//) {
|
||||||
|
// val products by viewModel.supplierList.collectAsState()
|
||||||
|
// val lazyListState = rememberLazyListState()
|
||||||
|
// val canLoadMore by viewModel.canLoadMore.collectAsState()
|
||||||
|
// val isMoreLoading by viewModel.isMoreLoading.collectAsState()
|
||||||
|
// var pageNum by remember { mutableIntStateOf(1) }
|
||||||
|
// val lifecycleOwner = LocalLifecycleOwner.current
|
||||||
|
// val first = viewModel.firstOperate.collectAsState()
|
||||||
|
//
|
||||||
|
// DisposableEffect(lifecycleOwner) {
|
||||||
|
// val observer = LifecycleEventObserver { _, event ->
|
||||||
|
// if (event == Lifecycle.Event.ON_RESUME) {
|
||||||
|
// Timber.d("ON_RESUME 触发")
|
||||||
|
// pageNum = 0
|
||||||
|
// viewModel.getOrderList()
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// lifecycleOwner.lifecycle.addObserver(observer)
|
||||||
|
// onDispose { lifecycleOwner.lifecycle.removeObserver(observer) }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 检测是否滚动到底部
|
||||||
|
// LaunchedEffect(lazyListState) {
|
||||||
|
// snapshotFlow { lazyListState.layoutInfo }.map { layoutInfo ->
|
||||||
|
// val lastVisibleItem = layoutInfo.visibleItemsInfo.lastOrNull()
|
||||||
|
// lastVisibleItem?.index == layoutInfo.totalItemsCount - 1
|
||||||
|
// }.distinctUntilChanged().collect { reachedEnd ->
|
||||||
|
// Timber.d("加载更多 reachedEnd = $reachedEnd, isMoreLoading = $isMoreLoading, canLoadMore = $canLoadMore")
|
||||||
|
// if (reachedEnd && !isMoreLoading && canLoadMore) {
|
||||||
|
// pageNum++
|
||||||
|
// viewModel.getOrderList(pageNum = pageNum)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Column {
|
||||||
|
// TopTitleBar()
|
||||||
|
// Box(
|
||||||
|
// modifier = Modifier
|
||||||
|
// .weight(1f)
|
||||||
|
// .padding(horizontal = 10.dp)
|
||||||
|
// ) {
|
||||||
|
// Image(
|
||||||
|
// painter = painterResource(id = R.mipmap.bg_listview),
|
||||||
|
// contentDescription = "背景",
|
||||||
|
// modifier = Modifier.fillMaxSize(),
|
||||||
|
// contentScale = ContentScale.FillBounds
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// Box(
|
||||||
|
// modifier = Modifier.padding(
|
||||||
|
// start = 30.dp, end = 30.dp, top = 30.dp, bottom = 90.dp
|
||||||
|
// )
|
||||||
|
// ) {
|
||||||
|
// if (first.value) {
|
||||||
|
// return@Box
|
||||||
|
// }
|
||||||
|
// if (products.isNullOrEmpty()) {
|
||||||
|
// PurchaseEmptyItem()
|
||||||
|
// } else {
|
||||||
|
// LazyRow(
|
||||||
|
// modifier = modifier.padding(10.dp),
|
||||||
|
// state = lazyListState,
|
||||||
|
// contentPadding = PaddingValues(16.dp),
|
||||||
|
// horizontalArrangement = Arrangement.spacedBy(30.dp)
|
||||||
|
// ) {
|
||||||
|
// items(items = products!!, key = { it!!.id ?: "" }) { product ->
|
||||||
|
// PurchaseOrderItem(product!!) {
|
||||||
|
//// navController.navigate(
|
||||||
|
//// Screen.ReceiptProduct.createRoute(
|
||||||
|
//// it.id,
|
||||||
|
//// it.supplierId
|
||||||
|
//// )
|
||||||
|
//// )
|
||||||
|
// navController.context.startActivity<ReceiptActivity> {
|
||||||
|
// putExtra(GoodsListActivity.ID, product!!.id)
|
||||||
|
// putExtra(GoodsListActivity.SUPPLIER_ID, product.supplierId)
|
||||||
|
// putExtra(GoodsListActivity.IS_RECEIPT_PAGE, true)
|
||||||
|
// //putExtra(GoodsListActivity.IS_NEW_RECEIPT, false)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (isMoreLoading) {
|
||||||
|
// item {
|
||||||
|
// Box(
|
||||||
|
// modifier = Modifier
|
||||||
|
// .fillParentMaxHeight()
|
||||||
|
// .padding(16.dp),
|
||||||
|
// contentAlignment = Alignment.Center
|
||||||
|
// ) {
|
||||||
|
// CircularProgressIndicator()
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// BottomActionBar(modifier = Modifier, onLeftButtonClick = {
|
||||||
|
// navController.popBackStack()
|
||||||
|
// }, onRight2ButtonClick = {
|
||||||
|
// //navController.navigate(Screen.SelfProcurement.route)
|
||||||
|
// navController.context.startActivity<SelfProcurementActivity> {
|
||||||
|
// putExtra(GoodsListActivity.IS_RECEIPT_PAGE, false)
|
||||||
|
// }
|
||||||
|
// //navController.context.startActivity<ReceiptActivity> {
|
||||||
|
// // //xtra(GoodsListActivity.ID,it!!.id)
|
||||||
|
// // //xtra(GoodsListActivity.SUPPLIER_ID,it.supplierId)
|
||||||
|
// // putExtra(GoodsListActivity.IS_RECEIPT_PAGE,true)
|
||||||
|
// // putExtra(GoodsListActivity.IS_NEW_RECEIPT,true)
|
||||||
|
// //}
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * 采购单缺省
|
||||||
|
// */
|
||||||
|
//@Composable
|
||||||
|
//fun PurchaseEmptyItem() {
|
||||||
|
// Column(
|
||||||
|
// modifier = Modifier.fillMaxSize(),
|
||||||
|
// horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
|
// verticalArrangement = Arrangement.Center
|
||||||
|
// ) {
|
||||||
|
// Image(painter = painterResource(R.mipmap.ic_empty), contentDescription = "暂无数据")
|
||||||
|
// Spacer(modifier = Modifier.height(30.dp))
|
||||||
|
// Text(
|
||||||
|
// text = "暂无数据", style = TextStyle(
|
||||||
|
// fontSize = 30.sp, fontWeight = FontWeight.Bold, color = colorResource(R.color.title)
|
||||||
|
// )
|
||||||
|
// )
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * 列表item
|
||||||
|
// */
|
||||||
|
//@Composable
|
||||||
|
//fun PurchaseOrderItem(product: SupplierInfo, onItemClick: (SupplierInfo) -> Unit) {
|
||||||
|
//
|
||||||
|
// val (receiptStatusStyle, statusLabel) = when (product.receiveStatus) {
|
||||||
|
//// 1 -> blackTextStyle to "已关闭"
|
||||||
|
//// 2 -> blackTextStyle to "已完成"
|
||||||
|
//// 3 -> blackTextStyle.copy(
|
||||||
|
//// color = colorResource(R.color.red)
|
||||||
|
//// ) to "未收货"
|
||||||
|
////
|
||||||
|
//// 4 -> blackTextStyle.copy(
|
||||||
|
//// color = colorResource(R.color.origin)
|
||||||
|
//// ) to "部分收货"
|
||||||
|
// 1 -> blackTextStyle.copy(
|
||||||
|
// color = colorResource(R.color.red)
|
||||||
|
// ) to "待收货"
|
||||||
|
//
|
||||||
|
// 2 -> blackTextStyle.copy(
|
||||||
// color = colorResource(R.color.origin)
|
// color = colorResource(R.color.origin)
|
||||||
// ) to "部分收货"
|
// ) to "已收货"
|
||||||
1 -> blackTextStyle.copy(
|
//
|
||||||
color = colorResource(R.color.red)
|
// 3 -> blackTextStyle to "已关闭"
|
||||||
) to "待收货"
|
// else -> blackTextStyle to "未知状态"
|
||||||
|
// }
|
||||||
2 -> blackTextStyle.copy(
|
//
|
||||||
color = colorResource(R.color.origin)
|
// val itemSpace = 29.dp
|
||||||
) to "已收货"
|
// Box(
|
||||||
|
// modifier = Modifier
|
||||||
3 -> blackTextStyle to "已关闭"
|
// .background(
|
||||||
else -> blackTextStyle to "未知状态"
|
// color = Color.White.copy(alpha = 0.37f), shape = RoundedCornerShape(10.dp) // 圆角背景
|
||||||
}
|
// )
|
||||||
|
// .clickable {
|
||||||
val itemSpace = 29.dp
|
// onItemClick(product)
|
||||||
Box(
|
// }) {
|
||||||
modifier = Modifier
|
// Column(
|
||||||
.background(
|
// modifier = Modifier
|
||||||
color = Color.White.copy(alpha = 0.37f), shape = RoundedCornerShape(10.dp) // 圆角背景
|
// .width(580.dp)
|
||||||
)
|
// .padding(horizontal = 30.dp, vertical = 30.dp),
|
||||||
.clickable {
|
// horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
onItemClick(product)
|
// verticalArrangement = Arrangement.spacedBy(0.dp)
|
||||||
}) {
|
// ) {
|
||||||
Column(
|
// Text(
|
||||||
modifier = Modifier
|
// text = product.supplierName ?: "-",
|
||||||
.width(580.dp)
|
// modifier = Modifier.padding(top = 25.dp),
|
||||||
.padding(horizontal = 30.dp, vertical = 30.dp),
|
// maxLines = 1,
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
// overflow = TextOverflow.Ellipsis,
|
||||||
verticalArrangement = Arrangement.spacedBy(0.dp)
|
// style = TextStyle(
|
||||||
) {
|
// fontWeight = FontWeight.Bold,
|
||||||
Text(
|
// fontSize = 30.sp,
|
||||||
text = product.supplierName ?: "-",
|
// color = colorResource(R.color.black)
|
||||||
modifier = Modifier.padding(top = 25.dp),
|
// )
|
||||||
maxLines = 1,
|
// )
|
||||||
overflow = TextOverflow.Ellipsis,
|
// Spacer(modifier = Modifier.height(itemSpace))
|
||||||
style = TextStyle(
|
// Text(
|
||||||
fontWeight = FontWeight.Bold,
|
// text = "单号 ${product.purCode ?: "-"}", maxLines = 1, style = grayTextStyle
|
||||||
fontSize = 30.sp,
|
// )
|
||||||
color = colorResource(R.color.black)
|
// Spacer(modifier = Modifier.height(itemSpace))
|
||||||
)
|
// HorizontalDivider(
|
||||||
)
|
// thickness = 1.dp, color = colorResource(R.color.divider)
|
||||||
Spacer(modifier = Modifier.height(itemSpace))
|
// )
|
||||||
Text(
|
// Spacer(modifier = Modifier.height(40.dp))
|
||||||
text = "单号 ${product.purCode ?: "-"}", maxLines = 1, style = grayTextStyle
|
// Text(
|
||||||
)
|
// text = "物品(项)", style = grayTextStyle
|
||||||
Spacer(modifier = Modifier.height(itemSpace))
|
// )
|
||||||
HorizontalDivider(
|
// Spacer(modifier = Modifier.height(22.dp))
|
||||||
thickness = 1.dp, color = colorResource(R.color.divider)
|
// Text(
|
||||||
)
|
// text = product.goodCount.toFormattedString(), style = TextStyle(
|
||||||
Spacer(modifier = Modifier.height(40.dp))
|
// color = colorResource(R.color.black),
|
||||||
Text(
|
// fontSize = 90.sp,
|
||||||
text = "物品(项)", style = grayTextStyle
|
// fontWeight = FontWeight.Bold
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.height(22.dp))
|
// )
|
||||||
Text(
|
// Spacer(modifier = Modifier.height(22.dp))
|
||||||
text = product.goodCount.toFormattedString(), style = TextStyle(
|
// Row(
|
||||||
color = colorResource(R.color.black),
|
// modifier = Modifier
|
||||||
fontSize = 90.sp,
|
// .fillMaxWidth()
|
||||||
fontWeight = FontWeight.Bold
|
// .dashedBorder(
|
||||||
)
|
// strokeWidth = 2.dp, color = Color(0xFFBDC5CE), cornerRadiusDp = 10.dp
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.height(22.dp))
|
// .padding(horizontal = 72.dp, vertical = 27.dp),
|
||||||
Row(
|
// horizontalArrangement = Arrangement.SpaceBetween
|
||||||
modifier = Modifier
|
// ) {
|
||||||
.fillMaxWidth()
|
// Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
||||||
.dashedBorder(
|
// Text(text = "采购日期", style = grayTextStyle)
|
||||||
strokeWidth = 2.dp, color = Color(0xFFBDC5CE), cornerRadiusDp = 10.dp
|
// Spacer(modifier = Modifier.height(8.dp))
|
||||||
)
|
// Text(text = product.purchaseDate ?: "-", style = blackTextStyle)
|
||||||
.padding(horizontal = 72.dp, vertical = 27.dp),
|
// }
|
||||||
horizontalArrangement = Arrangement.SpaceBetween
|
// Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
||||||
) {
|
// Text(text = "到货日期", style = grayTextStyle)
|
||||||
Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
// Spacer(modifier = Modifier.height(8.dp))
|
||||||
Text(text = "采购日期", style = grayTextStyle)
|
// Text(text = product.receiveDate ?: "-", style = blackTextStyle)
|
||||||
Spacer(modifier = Modifier.height(8.dp))
|
// }
|
||||||
Text(text = product.purchaseDate ?: "-", style = blackTextStyle)
|
// }
|
||||||
}
|
// Spacer(modifier = Modifier.height(28.dp))
|
||||||
Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
// Row(
|
||||||
Text(text = "到货日期", style = grayTextStyle)
|
// modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween
|
||||||
Spacer(modifier = Modifier.height(8.dp))
|
// ) {
|
||||||
Text(text = product.receiveDate ?: "-", style = blackTextStyle)
|
// Row {
|
||||||
}
|
// Text("收货状态:", style = grayTextStyle)
|
||||||
}
|
// Spacer(Modifier.width(8.dp))
|
||||||
Spacer(modifier = Modifier.height(28.dp))
|
// Text(statusLabel, style = receiptStatusStyle)
|
||||||
Row(
|
// }
|
||||||
modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween
|
//
|
||||||
) {
|
// Row {
|
||||||
Row {
|
// Text("采购人:", style = grayTextStyle)
|
||||||
Text("收货状态:", style = grayTextStyle)
|
// Spacer(Modifier.width(8.dp))
|
||||||
Spacer(Modifier.width(8.dp))
|
//
|
||||||
Text(statusLabel, style = receiptStatusStyle)
|
// Text(product.receiveUser, style = blackTextStyle)
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
Row {
|
// Spacer(modifier = Modifier.height(itemSpace))
|
||||||
Text("采购人:", style = grayTextStyle)
|
// Button(
|
||||||
Spacer(Modifier.width(8.dp))
|
// modifier = Modifier
|
||||||
|
// .fillMaxWidth()
|
||||||
Text(product.receiveUser, style = blackTextStyle)
|
// .height(80.dp),
|
||||||
}
|
// shape = RoundedCornerShape(10.dp),
|
||||||
}
|
// colors = ButtonDefaults.buttonColors(
|
||||||
Spacer(modifier = Modifier.height(itemSpace))
|
// containerColor = Color(0xFF009632).copy(alpha = 1f),
|
||||||
Button(
|
// contentColor = colorResource(R.color.white)
|
||||||
modifier = Modifier
|
// ),
|
||||||
.fillMaxWidth()
|
// onClick = {
|
||||||
.height(80.dp),
|
// onItemClick(product)
|
||||||
shape = RoundedCornerShape(10.dp),
|
// }) {
|
||||||
colors = ButtonDefaults.buttonColors(
|
// Text(
|
||||||
containerColor = Color(0xFF009632).copy(alpha = 1f),
|
// if (product.receiveStatus == 4) "部分收货" else "收货",
|
||||||
contentColor = colorResource(R.color.white)
|
// style = TextStyle(fontWeight = FontWeight.Bold, fontSize = 26.sp)
|
||||||
),
|
// )
|
||||||
onClick = {
|
// }
|
||||||
onItemClick(product)
|
// }
|
||||||
}) {
|
// }
|
||||||
Text(
|
//}
|
||||||
if (product.receiveStatus == 4) "部分收货" else "收货",
|
|
||||||
style = TextStyle(fontWeight = FontWeight.Bold, fontSize = 26.sp)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,64 +1,64 @@
|
|||||||
package com.sw.inbound.ui.theme
|
//package com.sw.inbound.ui.theme
|
||||||
|
//
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.graphics.Color
|
//import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.res.colorResource
|
//import androidx.compose.ui.res.colorResource
|
||||||
import androidx.compose.ui.text.TextStyle
|
//import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
//import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.sp
|
//import androidx.compose.ui.unit.sp
|
||||||
import com.sw.inbound.R
|
//import com.sw.inbound.R
|
||||||
|
//
|
||||||
object AppTypography {
|
//object AppTypography {
|
||||||
val gray96a0aaTextStyle: TextStyle
|
// val gray96a0aaTextStyle: TextStyle
|
||||||
@Composable get() = TextStyle(
|
// @Composable get() = TextStyle(
|
||||||
fontSize = 24.sp,
|
// fontSize = 24.sp,
|
||||||
fontWeight = FontWeight.Medium,
|
// fontWeight = FontWeight.Medium,
|
||||||
color = Color(0xFF96A0AA)
|
// color = Color(0xFF96A0AA)
|
||||||
)
|
// )
|
||||||
|
//
|
||||||
val gray999999TextStyle: TextStyle
|
// val gray999999TextStyle: TextStyle
|
||||||
@Composable get() = TextStyle(
|
// @Composable get() = TextStyle(
|
||||||
fontSize = 24.sp,
|
// fontSize = 24.sp,
|
||||||
fontWeight = FontWeight.Medium,
|
// fontWeight = FontWeight.Medium,
|
||||||
color = Color(0xFF999999)
|
// color = Color(0xFF999999)
|
||||||
)
|
// )
|
||||||
|
//
|
||||||
val black141428TextStyle: TextStyle
|
// val black141428TextStyle: TextStyle
|
||||||
@Composable get() = TextStyle(
|
// @Composable get() = TextStyle(
|
||||||
fontSize = 24.sp,
|
// fontSize = 24.sp,
|
||||||
fontWeight = FontWeight.Medium,
|
// fontWeight = FontWeight.Medium,
|
||||||
color = Black_141428
|
// color = Black_141428
|
||||||
)
|
// )
|
||||||
|
//
|
||||||
val grayTextStyle: TextStyle
|
// val grayTextStyle: TextStyle
|
||||||
@Composable
|
// @Composable
|
||||||
get() = TextStyle(
|
// get() = TextStyle(
|
||||||
color = colorResource(R.color.gray),
|
// color = colorResource(R.color.gray),
|
||||||
fontSize = 24.sp,
|
// fontSize = 24.sp,
|
||||||
fontWeight = FontWeight.Medium
|
// fontWeight = FontWeight.Medium
|
||||||
)
|
// )
|
||||||
val blackTextStyle: TextStyle
|
// val blackTextStyle: TextStyle
|
||||||
@Composable
|
// @Composable
|
||||||
get() = TextStyle(
|
// get() = TextStyle(
|
||||||
color = colorResource(R.color.black),
|
// color = colorResource(R.color.black),
|
||||||
fontSize = 24.sp,
|
// fontSize = 24.sp,
|
||||||
fontWeight = FontWeight.Bold
|
// fontWeight = FontWeight.Bold
|
||||||
)
|
// )
|
||||||
|
//
|
||||||
val blackMediumTextStyle: TextStyle
|
// val blackMediumTextStyle: TextStyle
|
||||||
@Composable
|
// @Composable
|
||||||
get() = TextStyle(
|
// get() = TextStyle(
|
||||||
color = colorResource(R.color.black),
|
// color = colorResource(R.color.black),
|
||||||
fontSize = 24.sp,
|
// fontSize = 24.sp,
|
||||||
fontWeight = FontWeight.Medium
|
// fontWeight = FontWeight.Medium
|
||||||
)
|
// )
|
||||||
|
//
|
||||||
val BlueTextStyle: TextStyle
|
// val BlueTextStyle: TextStyle
|
||||||
@Composable
|
// @Composable
|
||||||
get() = TextStyle(
|
// get() = TextStyle(
|
||||||
color = colorResource(R.color.blue),
|
// color = colorResource(R.color.blue),
|
||||||
fontSize = 24.sp,
|
// fontSize = 24.sp,
|
||||||
fontWeight = FontWeight.Bold
|
// fontWeight = FontWeight.Bold
|
||||||
)
|
// )
|
||||||
|
//
|
||||||
}
|
//}
|
||||||
@@ -1,22 +1,22 @@
|
|||||||
package com.sw.inbound.ui.theme
|
//package com.sw.inbound.ui.theme
|
||||||
|
//
|
||||||
import androidx.compose.ui.graphics.Color
|
//import androidx.compose.ui.graphics.Color
|
||||||
|
//
|
||||||
val Purple80 = Color(0xFFD0BCFF)
|
//val Purple80 = Color(0xFFD0BCFF)
|
||||||
val PurpleGrey80 = Color(0xFFCCC2DC)
|
//val PurpleGrey80 = Color(0xFFCCC2DC)
|
||||||
val Pink80 = Color(0xFFEFB8C8)
|
//val Pink80 = Color(0xFFEFB8C8)
|
||||||
|
//
|
||||||
val Purple40 = Color(0xFF6650a4)
|
//val Purple40 = Color(0xFF6650a4)
|
||||||
val PurpleGrey40 = Color(0xFF625b71)
|
//val PurpleGrey40 = Color(0xFF625b71)
|
||||||
val Pink40 = Color(0xFF7D5260)
|
//val Pink40 = Color(0xFF7D5260)
|
||||||
|
//
|
||||||
val Black_141428 = Color(0xFF141428)
|
//val Black_141428 = Color(0xFF141428)
|
||||||
val Gray_A0A0B4 = Color(0XffA0A0B4)
|
//val Gray_A0A0B4 = Color(0XffA0A0B4)
|
||||||
val Gray_DCDCF0 = Color(0xFFDCDCF0)
|
//val Gray_DCDCF0 = Color(0xFFDCDCF0)
|
||||||
val Gray_96A0AA = Color(0xFF96A0AA)
|
//val Gray_96A0AA = Color(0xFF96A0AA)
|
||||||
val GrayDivider = Color(0XFFDCDCF0)
|
//val GrayDivider = Color(0XFFDCDCF0)
|
||||||
|
//
|
||||||
val Green_009632 = Color(0xFF009632)
|
//val Green_009632 = Color(0xFF009632)
|
||||||
val Blue_0032C8 = Color(0xFF0032C8)
|
//val Blue_0032C8 = Color(0xFF0032C8)
|
||||||
val Red_FF3232 = Color(0xFFFF3232)
|
//val Red_FF3232 = Color(0xFFFF3232)
|
||||||
|
//
|
||||||
|
|||||||
@@ -1,57 +1,57 @@
|
|||||||
package com.sw.inbound.ui.theme
|
//package com.sw.inbound.ui.theme
|
||||||
|
//
|
||||||
import android.os.Build
|
//import android.os.Build
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
//import androidx.compose.foundation.isSystemInDarkTheme
|
||||||
import androidx.compose.material3.MaterialTheme
|
//import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.darkColorScheme
|
//import androidx.compose.material3.darkColorScheme
|
||||||
import androidx.compose.material3.dynamicDarkColorScheme
|
//import androidx.compose.material3.dynamicDarkColorScheme
|
||||||
import androidx.compose.material3.dynamicLightColorScheme
|
//import androidx.compose.material3.dynamicLightColorScheme
|
||||||
import androidx.compose.material3.lightColorScheme
|
//import androidx.compose.material3.lightColorScheme
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.platform.LocalContext
|
//import androidx.compose.ui.platform.LocalContext
|
||||||
|
//
|
||||||
private val DarkColorScheme = darkColorScheme(
|
//private val DarkColorScheme = darkColorScheme(
|
||||||
primary = Purple80,
|
// primary = Purple80,
|
||||||
secondary = PurpleGrey80,
|
// secondary = PurpleGrey80,
|
||||||
tertiary = Pink80
|
// tertiary = Pink80
|
||||||
)
|
//)
|
||||||
|
//
|
||||||
private val LightColorScheme = lightColorScheme(
|
//private val LightColorScheme = lightColorScheme(
|
||||||
primary = Purple40,
|
// primary = Purple40,
|
||||||
secondary = PurpleGrey40,
|
// secondary = PurpleGrey40,
|
||||||
tertiary = Pink40
|
// tertiary = Pink40
|
||||||
|
//
|
||||||
/* Other default colors to override
|
// /* Other default colors to override
|
||||||
background = Color(0xFFFFFBFE),
|
// background = Color(0xFFFFFBFE),
|
||||||
surface = Color(0xFFFFFBFE),
|
// surface = Color(0xFFFFFBFE),
|
||||||
onPrimary = Color.White,
|
// onPrimary = Color.White,
|
||||||
onSecondary = Color.White,
|
// onSecondary = Color.White,
|
||||||
onTertiary = Color.White,
|
// onTertiary = Color.White,
|
||||||
onBackground = Color(0xFF1C1B1F),
|
// onBackground = Color(0xFF1C1B1F),
|
||||||
onSurface = Color(0xFF1C1B1F),
|
// onSurface = Color(0xFF1C1B1F),
|
||||||
*/
|
// */
|
||||||
)
|
//)
|
||||||
|
//
|
||||||
@Composable
|
//@Composable
|
||||||
fun InboundTheme(
|
//fun InboundTheme(
|
||||||
darkTheme: Boolean = isSystemInDarkTheme(),
|
// darkTheme: Boolean = isSystemInDarkTheme(),
|
||||||
// Dynamic color is available on Android 12+
|
// // Dynamic color is available on Android 12+
|
||||||
dynamicColor: Boolean = true,
|
// dynamicColor: Boolean = true,
|
||||||
content: @Composable () -> Unit
|
// content: @Composable () -> Unit
|
||||||
) {
|
//) {
|
||||||
val colorScheme = when {
|
// val colorScheme = when {
|
||||||
dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
|
// dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
|
||||||
val context = LocalContext.current
|
// val context = LocalContext.current
|
||||||
if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
|
// if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
darkTheme -> DarkColorScheme
|
// darkTheme -> DarkColorScheme
|
||||||
else -> LightColorScheme
|
// else -> LightColorScheme
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
MaterialTheme(
|
// MaterialTheme(
|
||||||
colorScheme = colorScheme,
|
// colorScheme = colorScheme,
|
||||||
typography = Typography,
|
// typography = Typography,
|
||||||
content = content,
|
// content = content,
|
||||||
)
|
// )
|
||||||
}
|
//}
|
||||||
@@ -1,34 +1,34 @@
|
|||||||
package com.sw.inbound.ui.theme
|
//package com.sw.inbound.ui.theme
|
||||||
|
//
|
||||||
import androidx.compose.material3.Typography
|
//import androidx.compose.material3.Typography
|
||||||
import androidx.compose.ui.text.TextStyle
|
//import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.text.font.FontFamily
|
//import androidx.compose.ui.text.font.FontFamily
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
//import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.sp
|
//import androidx.compose.ui.unit.sp
|
||||||
|
//
|
||||||
// Set of Material typography styles to start with
|
//// Set of Material typography styles to start with
|
||||||
val Typography = Typography(
|
//val Typography = Typography(
|
||||||
bodyLarge = TextStyle(
|
// bodyLarge = TextStyle(
|
||||||
fontFamily = FontFamily.Default,
|
// fontFamily = FontFamily.Default,
|
||||||
fontWeight = FontWeight.Normal,
|
// fontWeight = FontWeight.Normal,
|
||||||
fontSize = 16.sp,
|
// fontSize = 16.sp,
|
||||||
lineHeight = 24.sp,
|
// lineHeight = 24.sp,
|
||||||
letterSpacing = 0.5.sp
|
// letterSpacing = 0.5.sp
|
||||||
)
|
// )
|
||||||
/* Other default text styles to override
|
// /* Other default text styles to override
|
||||||
titleLarge = TextStyle(
|
// titleLarge = TextStyle(
|
||||||
fontFamily = FontFamily.Default,
|
// fontFamily = FontFamily.Default,
|
||||||
fontWeight = FontWeight.Normal,
|
// fontWeight = FontWeight.Normal,
|
||||||
fontSize = 22.sp,
|
// fontSize = 22.sp,
|
||||||
lineHeight = 28.sp,
|
// lineHeight = 28.sp,
|
||||||
letterSpacing = 0.sp
|
// letterSpacing = 0.sp
|
||||||
),
|
// ),
|
||||||
labelSmall = TextStyle(
|
// labelSmall = TextStyle(
|
||||||
fontFamily = FontFamily.Default,
|
// fontFamily = FontFamily.Default,
|
||||||
fontWeight = FontWeight.Medium,
|
// fontWeight = FontWeight.Medium,
|
||||||
fontSize = 11.sp,
|
// fontSize = 11.sp,
|
||||||
lineHeight = 16.sp,
|
// lineHeight = 16.sp,
|
||||||
letterSpacing = 0.5.sp
|
// letterSpacing = 0.5.sp
|
||||||
)
|
// )
|
||||||
*/
|
// */
|
||||||
)
|
//)
|
||||||
@@ -1,105 +1,105 @@
|
|||||||
package com.sw.inbound.ui.weight
|
//package com.sw.inbound.ui.weight
|
||||||
|
//
|
||||||
import androidx.compose.foundation.Image
|
//import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.background
|
//import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.clickable
|
//import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
//import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Row
|
//import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.Spacer
|
//import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
//import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
//import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
//import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
//import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.layout.width
|
//import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
//import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material3.Text
|
//import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
//import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.colorResource
|
//import androidx.compose.ui.res.colorResource
|
||||||
import androidx.compose.ui.res.painterResource
|
//import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.text.TextStyle
|
//import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
//import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
//import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
//import androidx.compose.ui.unit.sp
|
||||||
import com.sw.inbound.R
|
//import com.sw.inbound.R
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* 底部按钮
|
// * 底部按钮
|
||||||
*/
|
// */
|
||||||
@Composable
|
//@Composable
|
||||||
fun BottomActionBar(
|
//fun BottomActionBar(
|
||||||
leftText: String = "返回",
|
// leftText: String = "返回",
|
||||||
right1ButtonText: String = "清空物品",
|
// right1ButtonText: String = "清空物品",
|
||||||
right2ButtonText: String = "新增收货",
|
// right2ButtonText: String = "新增收货",
|
||||||
showRight1Button: Boolean = false,
|
// showRight1Button: Boolean = false,
|
||||||
onLeftButtonClick: () -> Unit,
|
// onLeftButtonClick: () -> Unit,
|
||||||
onRight1ButtonClick: () -> Unit = {},
|
// onRight1ButtonClick: () -> Unit = {},
|
||||||
onRight2ButtonClick: () -> Unit,
|
// onRight2ButtonClick: () -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
// modifier: Modifier = Modifier,
|
||||||
) {
|
//) {
|
||||||
Row(
|
// Row(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.fillMaxWidth()
|
// .fillMaxWidth()
|
||||||
.padding(start = 30.dp, end = 30.dp, bottom = 20.dp)
|
// .padding(start = 30.dp, end = 30.dp, bottom = 20.dp)
|
||||||
.height(100.dp),
|
// .height(100.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
// verticalAlignment = Alignment.CenterVertically,
|
||||||
horizontalArrangement = Arrangement.SpaceBetween
|
// horizontalArrangement = Arrangement.SpaceBetween
|
||||||
) {
|
// ) {
|
||||||
// 左侧图标+文字
|
// // 左侧图标+文字
|
||||||
Row(
|
// Row(
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
// verticalAlignment = Alignment.CenterVertically,
|
||||||
horizontalArrangement = Arrangement.Center,
|
// horizontalArrangement = Arrangement.Center,
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.width(220.dp)
|
// .width(220.dp)
|
||||||
.height(100.dp)
|
// .height(100.dp)
|
||||||
.background(
|
// .background(
|
||||||
color = colorResource(R.color.blue),
|
// color = colorResource(R.color.blue),
|
||||||
shape = RoundedCornerShape(10.dp)
|
// shape = RoundedCornerShape(10.dp)
|
||||||
)
|
// )
|
||||||
.clickable {
|
// .clickable {
|
||||||
onLeftButtonClick()
|
// onLeftButtonClick()
|
||||||
}
|
// }
|
||||||
) {
|
// ) {
|
||||||
Image(
|
// Image(
|
||||||
painter = painterResource(R.mipmap.ic_back_white),
|
// painter = painterResource(R.mipmap.ic_back_white),
|
||||||
contentDescription = "返回",
|
// contentDescription = "返回",
|
||||||
modifier = Modifier.size(40.dp)
|
// modifier = Modifier.size(40.dp)
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.width(21.dp))
|
// Spacer(modifier = Modifier.width(21.dp))
|
||||||
Text(
|
// Text(
|
||||||
text = leftText,
|
// text = leftText,
|
||||||
style = TextStyle(
|
// style = TextStyle(
|
||||||
color = colorResource(R.color.white),
|
// color = colorResource(R.color.white),
|
||||||
fontWeight = FontWeight.Bold,
|
// fontWeight = FontWeight.Bold,
|
||||||
fontSize = 36.sp
|
// fontSize = 36.sp
|
||||||
)
|
// )
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
Row {
|
// Row {
|
||||||
if (showRight1Button) {
|
// if (showRight1Button) {
|
||||||
CustomOutlinedButton(
|
// CustomOutlinedButton(
|
||||||
modifier = modifier
|
// modifier = modifier
|
||||||
.width(300.dp)
|
// .width(300.dp)
|
||||||
.height(100.dp),
|
// .height(100.dp),
|
||||||
text = right1ButtonText,
|
// text = right1ButtonText,
|
||||||
fontSize = 36.sp,
|
// fontSize = 36.sp,
|
||||||
onClick = onRight1ButtonClick
|
// onClick = onRight1ButtonClick
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.width(20.dp))
|
// Spacer(modifier = Modifier.width(20.dp))
|
||||||
}
|
// }
|
||||||
CustomButton(
|
// CustomButton(
|
||||||
modifier = modifier
|
// modifier = modifier
|
||||||
.width(300.dp)
|
// .width(300.dp)
|
||||||
.height(100.dp),
|
// .height(100.dp),
|
||||||
text = right2ButtonText,
|
// text = right2ButtonText,
|
||||||
onClick = onRight2ButtonClick,
|
// onClick = onRight2ButtonClick,
|
||||||
borderColor = colorResource(R.color.blue),
|
// borderColor = colorResource(R.color.blue),
|
||||||
textColor = colorResource(R.color.white),
|
// textColor = colorResource(R.color.white),
|
||||||
fontSize = 36.sp
|
// fontSize = 36.sp
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
}
|
//}
|
||||||
@@ -1,193 +1,193 @@
|
|||||||
package com.sw.inbound.ui.weight
|
//package com.sw.inbound.ui.weight
|
||||||
|
//
|
||||||
import android.net.Uri
|
//import android.net.Uri
|
||||||
import android.widget.Toast
|
//import android.widget.Toast
|
||||||
import androidx.camera.view.CameraController
|
//import androidx.camera.view.CameraController
|
||||||
import androidx.camera.view.LifecycleCameraController
|
//import androidx.camera.view.LifecycleCameraController
|
||||||
import androidx.compose.foundation.Image
|
//import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.clickable
|
//import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
//import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
//import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
//import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.Spacer
|
//import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
//import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
//import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
//import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
//import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.width
|
//import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.material3.Text
|
//import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.DisposableEffect
|
//import androidx.compose.runtime.DisposableEffect
|
||||||
import androidx.compose.runtime.getValue
|
//import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
//import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
//import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
//import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
//import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
//import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.platform.LocalContext
|
//import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.colorResource
|
//import androidx.compose.ui.res.colorResource
|
||||||
import androidx.compose.ui.res.painterResource
|
//import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.unit.dp
|
//import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
//import androidx.compose.ui.unit.sp
|
||||||
import androidx.lifecycle.compose.LocalLifecycleOwner
|
//import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||||
import coil.compose.AsyncImage
|
//import coil.compose.AsyncImage
|
||||||
import com.sw.inbound.GlobalData
|
//import com.sw.inbound.GlobalData
|
||||||
import com.sw.inbound.R
|
//import com.sw.inbound.R
|
||||||
import com.sw.inbound.ext.dashedBorder
|
//import com.sw.inbound.ext.dashedBorder
|
||||||
import com.sw.inbound.ui.theme.AppTypography
|
//import com.sw.inbound.ui.theme.AppTypography
|
||||||
import com.sw.inbound.utils.FileUtils
|
//import com.sw.inbound.utils.FileUtils
|
||||||
import com.sw.inbound.utils.ToastUtils
|
//import com.sw.inbound.utils.ToastUtils
|
||||||
import com.sw.inbound.utils.rememberPhotoCapture
|
//import com.sw.inbound.utils.rememberPhotoCapture
|
||||||
import timber.log.Timber
|
//import timber.log.Timber
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* 相机预览 -默认不预览,支持拍照
|
// * 相机预览 -默认不预览,支持拍照
|
||||||
*/
|
// */
|
||||||
@Composable
|
//@Composable
|
||||||
fun CameraCaptureLayout(
|
//fun CameraCaptureLayout(
|
||||||
modifier: Modifier = Modifier
|
// modifier: Modifier = Modifier
|
||||||
) {
|
//) {
|
||||||
val context = LocalContext.current
|
// val context = LocalContext.current
|
||||||
var showCamera by remember { mutableStateOf(false) }
|
// var showCamera by remember { mutableStateOf(false) }
|
||||||
val lifecycleOwner = LocalLifecycleOwner.current
|
// val lifecycleOwner = LocalLifecycleOwner.current
|
||||||
var photoUri by remember { mutableStateOf<Uri?>(null) }
|
// var photoUri by remember { mutableStateOf<Uri?>(null) }
|
||||||
|
//
|
||||||
// CameraX 控制器
|
// // CameraX 控制器
|
||||||
val cameraController = remember {
|
// val cameraController = remember {
|
||||||
LifecycleCameraController(context).apply {
|
// LifecycleCameraController(context).apply {
|
||||||
setEnabledUseCases(
|
// setEnabledUseCases(
|
||||||
CameraController.IMAGE_CAPTURE or
|
// CameraController.IMAGE_CAPTURE or
|
||||||
CameraController.VIDEO_CAPTURE
|
// CameraController.VIDEO_CAPTURE
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// 创建拍照工具实例
|
// // 创建拍照工具实例
|
||||||
val (photoCaptureHelper, takePhoto) = rememberPhotoCapture(
|
// val (photoCaptureHelper, takePhoto) = rememberPhotoCapture(
|
||||||
cameraController = cameraController,
|
// cameraController = cameraController,
|
||||||
onSuccess = { savedUri ->
|
// onSuccess = { savedUri ->
|
||||||
// 处理拍照成功的逻辑
|
// // 处理拍照成功的逻辑
|
||||||
photoUri = savedUri
|
// photoUri = savedUri
|
||||||
Timber.d("photoUri = $photoUri")
|
// Timber.d("photoUri = $photoUri")
|
||||||
Toast.makeText(context, "图片已保存", Toast.LENGTH_SHORT).show()
|
// Toast.makeText(context, "图片已保存", Toast.LENGTH_SHORT).show()
|
||||||
showCamera = false
|
// showCamera = false
|
||||||
GlobalData.imageUri = photoUri
|
// GlobalData.imageUri = photoUri
|
||||||
},
|
// },
|
||||||
onError = { error ->
|
// onError = { error ->
|
||||||
// 处理拍照失败的逻辑
|
// // 处理拍照失败的逻辑
|
||||||
Toast.makeText(context, error, Toast.LENGTH_SHORT).show()
|
// Toast.makeText(context, error, Toast.LENGTH_SHORT).show()
|
||||||
GlobalData.imageUri = null
|
// GlobalData.imageUri = null
|
||||||
}
|
// }
|
||||||
)
|
// )
|
||||||
|
//
|
||||||
Column(
|
// Column(
|
||||||
modifier = modifier
|
// modifier = modifier
|
||||||
.width(428.dp)
|
// .width(428.dp)
|
||||||
.padding(16.dp),
|
// .padding(16.dp),
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
// horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
verticalArrangement = Arrangement.spacedBy(24.dp)
|
// verticalArrangement = Arrangement.spacedBy(24.dp)
|
||||||
) {
|
// ) {
|
||||||
if (showCamera) {
|
// if (showCamera) {
|
||||||
// 摄像头预览
|
// // 摄像头预览
|
||||||
CameraPreview(
|
// CameraPreview(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.width(428.dp)
|
// .width(428.dp)
|
||||||
.height(321.dp), controller = cameraController
|
// .height(321.dp), controller = cameraController
|
||||||
)
|
// )
|
||||||
} else {
|
// } else {
|
||||||
if (photoUri == null) {
|
// if (photoUri == null) {
|
||||||
// 图片预览区域
|
// // 图片预览区域
|
||||||
Column(
|
// Column(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.fillMaxWidth()
|
// .fillMaxWidth()
|
||||||
.height(321.dp)
|
// .height(321.dp)
|
||||||
.dashedBorder(strokeWidth = 2.dp, cornerRadiusDp = 15.dp)
|
// .dashedBorder(strokeWidth = 2.dp, cornerRadiusDp = 15.dp)
|
||||||
.clickable {
|
// .clickable {
|
||||||
showCamera = true
|
// showCamera = true
|
||||||
},
|
// },
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
// horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
verticalArrangement = Arrangement.Center
|
// verticalArrangement = Arrangement.Center
|
||||||
) {
|
// ) {
|
||||||
Image(
|
// Image(
|
||||||
painter = painterResource(R.mipmap.ic_camera),
|
// painter = painterResource(R.mipmap.ic_camera),
|
||||||
contentDescription = "默认图片",
|
// contentDescription = "默认图片",
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.width(96.dp)
|
// .width(96.dp)
|
||||||
.height(76.dp)
|
// .height(76.dp)
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.height(24.dp))
|
// Spacer(modifier = Modifier.height(24.dp))
|
||||||
Text(
|
// Text(
|
||||||
"图片采集",
|
// "图片采集",
|
||||||
style = AppTypography.grayTextStyle.copy(color = Color(0xFFB4B4C8))
|
// style = AppTypography.grayTextStyle.copy(color = Color(0xFFB4B4C8))
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
} else {
|
// } else {
|
||||||
Column(
|
// Column(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.fillMaxWidth()
|
// .fillMaxWidth()
|
||||||
.height(321.dp)
|
// .height(321.dp)
|
||||||
.dashedBorder(strokeWidth = 2.dp, cornerRadiusDp = 15.dp),
|
// .dashedBorder(strokeWidth = 2.dp, cornerRadiusDp = 15.dp),
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
// horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
verticalArrangement = Arrangement.Center
|
// verticalArrangement = Arrangement.Center
|
||||||
) {
|
// ) {
|
||||||
AsyncImage(
|
// AsyncImage(
|
||||||
model = photoUri,
|
// model = photoUri,
|
||||||
contentDescription = "照片",
|
// contentDescription = "照片",
|
||||||
modifier = Modifier.fillMaxSize()
|
// modifier = Modifier.fillMaxSize()
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
Row(
|
// Row(
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
// verticalAlignment = Alignment.CenterVertically,
|
||||||
horizontalArrangement = Arrangement.End
|
// horizontalArrangement = Arrangement.End
|
||||||
) {
|
// ) {
|
||||||
CustomOutlinedButton(
|
// CustomOutlinedButton(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.weight(1f)
|
// .weight(1f)
|
||||||
.height(80.dp),
|
// .height(80.dp),
|
||||||
text = "取消",
|
// text = "取消",
|
||||||
fontSize = 30.sp,
|
// fontSize = 30.sp,
|
||||||
borderColor = colorResource(R.color.green),
|
// borderColor = colorResource(R.color.green),
|
||||||
textColor = colorResource(R.color.green),
|
// textColor = colorResource(R.color.green),
|
||||||
onClick = {
|
// onClick = {
|
||||||
Timber.d("点击取消")
|
// Timber.d("点击取消")
|
||||||
showCamera = true
|
// showCamera = true
|
||||||
photoUri?.let {
|
// photoUri?.let {
|
||||||
FileUtils.deleteFileWithUri(context, photoUri!!)
|
// FileUtils.deleteFileWithUri(context, photoUri!!)
|
||||||
}
|
// }
|
||||||
photoUri = null
|
// photoUri = null
|
||||||
}
|
// }
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.width(20.dp))
|
// Spacer(modifier = Modifier.width(20.dp))
|
||||||
|
//
|
||||||
CustomButton(
|
// CustomButton(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.weight(1f)
|
// .weight(1f)
|
||||||
.height(80.dp),
|
// .height(80.dp),
|
||||||
text = "采集",
|
// text = "采集",
|
||||||
onClick = {
|
// onClick = {
|
||||||
Timber.d("点击采集")
|
// Timber.d("点击采集")
|
||||||
if (!showCamera) {
|
// if (!showCamera) {
|
||||||
ToastUtils.showToast("请先开启图片预览")
|
// ToastUtils.showToast("请先开启图片预览")
|
||||||
return@CustomButton
|
// return@CustomButton
|
||||||
}
|
// }
|
||||||
takePhoto()
|
// takePhoto()
|
||||||
},
|
// },
|
||||||
borderColor = colorResource(R.color.green),
|
// borderColor = colorResource(R.color.green),
|
||||||
textColor = colorResource(R.color.white),
|
// textColor = colorResource(R.color.white),
|
||||||
fontSize = 30.sp,
|
// fontSize = 30.sp,
|
||||||
showButtonIcon = true
|
// showButtonIcon = true
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// 生命周期管理
|
// // 生命周期管理
|
||||||
DisposableEffect(lifecycleOwner) {
|
// DisposableEffect(lifecycleOwner) {
|
||||||
Timber.d("cameraController")
|
// Timber.d("cameraController")
|
||||||
cameraController.bindToLifecycle(lifecycleOwner)
|
// cameraController.bindToLifecycle(lifecycleOwner)
|
||||||
onDispose { }
|
// onDispose { }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
@@ -1,52 +1,52 @@
|
|||||||
package com.sw.inbound.ui.weight
|
//package com.sw.inbound.ui.weight
|
||||||
|
//
|
||||||
import android.net.Uri
|
//import android.net.Uri
|
||||||
import androidx.camera.view.LifecycleCameraController
|
//import androidx.camera.view.LifecycleCameraController
|
||||||
import androidx.camera.view.PreviewView
|
//import androidx.camera.view.PreviewView
|
||||||
import androidx.compose.foundation.Image
|
//import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.layout.Box
|
//import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
//import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
//import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.painterResource
|
//import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.unit.dp
|
//import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.viewinterop.AndroidView
|
//import androidx.compose.ui.viewinterop.AndroidView
|
||||||
import coil.compose.AsyncImage
|
//import coil.compose.AsyncImage
|
||||||
import com.sw.inbound.R
|
//import com.sw.inbound.R
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* 相机预览
|
// * 相机预览
|
||||||
*/
|
// */
|
||||||
@Composable
|
//@Composable
|
||||||
fun CameraPreview(
|
//fun CameraPreview(
|
||||||
controller: LifecycleCameraController,
|
// controller: LifecycleCameraController,
|
||||||
modifier: Modifier = Modifier,
|
// modifier: Modifier = Modifier,
|
||||||
photoUri: Uri? = null
|
// photoUri: Uri? = null
|
||||||
) {
|
//) {
|
||||||
Box(modifier = modifier) {
|
// Box(modifier = modifier) {
|
||||||
AndroidView(
|
// AndroidView(
|
||||||
factory = { ctx ->
|
// factory = { ctx ->
|
||||||
PreviewView(ctx).apply {
|
// PreviewView(ctx).apply {
|
||||||
this.controller = controller
|
// this.controller = controller
|
||||||
scaleType = PreviewView.ScaleType.FILL_CENTER // 控制预览缩放
|
// scaleType = PreviewView.ScaleType.FILL_CENTER // 控制预览缩放
|
||||||
}
|
// }
|
||||||
},
|
// },
|
||||||
modifier = Modifier.fillMaxSize()
|
// modifier = Modifier.fillMaxSize()
|
||||||
)
|
// )
|
||||||
if (photoUri != null) {
|
// if (photoUri != null) {
|
||||||
AsyncImage(
|
// AsyncImage(
|
||||||
modifier = Modifier.fillMaxSize(),
|
// modifier = Modifier.fillMaxSize(),
|
||||||
model = photoUri,
|
// model = photoUri,
|
||||||
contentDescription = "照片",
|
// contentDescription = "照片",
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
Image(
|
// Image(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.fillMaxSize()
|
// .fillMaxSize()
|
||||||
.padding(30.dp),
|
// .padding(30.dp),
|
||||||
painter = painterResource(R.mipmap.ic_scan),
|
// painter = painterResource(R.mipmap.ic_scan),
|
||||||
contentDescription = "扫描"
|
// contentDescription = "扫描"
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
@@ -1,108 +1,108 @@
|
|||||||
package com.sw.inbound.ui.weight
|
//package com.sw.inbound.ui.weight
|
||||||
|
//
|
||||||
import androidx.compose.foundation.BorderStroke
|
//import androidx.compose.foundation.BorderStroke
|
||||||
import androidx.compose.foundation.Image
|
//import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.layout.Row
|
//import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.Spacer
|
//import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.width
|
//import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
//import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material3.Button
|
//import androidx.compose.material3.Button
|
||||||
import androidx.compose.material3.ButtonDefaults
|
//import androidx.compose.material3.ButtonDefaults
|
||||||
import androidx.compose.material3.OutlinedButton
|
//import androidx.compose.material3.OutlinedButton
|
||||||
import androidx.compose.material3.Text
|
//import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
//import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
//import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.res.colorResource
|
//import androidx.compose.ui.res.colorResource
|
||||||
import androidx.compose.ui.res.painterResource
|
//import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.text.TextStyle
|
//import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
//import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.Dp
|
//import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.TextUnit
|
//import androidx.compose.ui.unit.TextUnit
|
||||||
import androidx.compose.ui.unit.dp
|
//import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
//import androidx.compose.ui.unit.sp
|
||||||
import com.sw.inbound.R
|
//import com.sw.inbound.R
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* 空心按钮
|
// * 空心按钮
|
||||||
*/
|
// */
|
||||||
@Composable
|
//@Composable
|
||||||
fun CustomOutlinedButton(
|
//fun CustomOutlinedButton(
|
||||||
text: String,
|
// text: String,
|
||||||
onClick: () -> Unit,
|
// onClick: () -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
// modifier: Modifier = Modifier,
|
||||||
textColor: Color = colorResource(R.color.blue),
|
// textColor: Color = colorResource(R.color.blue),
|
||||||
borderColor: Color = Color.Blue,
|
// borderColor: Color = Color.Blue,
|
||||||
cornerRadius: Dp = 8.dp,
|
// cornerRadius: Dp = 8.dp,
|
||||||
borderWidth: Dp = 1.dp,
|
// borderWidth: Dp = 1.dp,
|
||||||
fontWeight: FontWeight = FontWeight.Bold,
|
// fontWeight: FontWeight = FontWeight.Bold,
|
||||||
fontSize: TextUnit = 24.sp
|
// fontSize: TextUnit = 24.sp
|
||||||
) {
|
//) {
|
||||||
OutlinedButton(
|
// OutlinedButton(
|
||||||
onClick = onClick,
|
// onClick = onClick,
|
||||||
modifier = modifier,
|
// modifier = modifier,
|
||||||
shape = RoundedCornerShape(cornerRadius),
|
// shape = RoundedCornerShape(cornerRadius),
|
||||||
border = BorderStroke(borderWidth, color = borderColor),
|
// border = BorderStroke(borderWidth, color = borderColor),
|
||||||
colors = ButtonDefaults.buttonColors(
|
// colors = ButtonDefaults.buttonColors(
|
||||||
containerColor = Color.Transparent,
|
// containerColor = Color.Transparent,
|
||||||
contentColor = textColor
|
// contentColor = textColor
|
||||||
)
|
// )
|
||||||
) {
|
// ) {
|
||||||
Text(
|
// Text(
|
||||||
text = text,
|
// text = text,
|
||||||
style = TextStyle(
|
// style = TextStyle(
|
||||||
fontWeight = fontWeight,
|
// fontWeight = fontWeight,
|
||||||
fontSize = fontSize,
|
// fontSize = fontSize,
|
||||||
color = textColor
|
// color = textColor
|
||||||
)
|
// )
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* 实心按钮
|
// * 实心按钮
|
||||||
*/
|
// */
|
||||||
@Composable
|
//@Composable
|
||||||
fun CustomButton(
|
//fun CustomButton(
|
||||||
text: String,
|
// text: String,
|
||||||
onClick: () -> Unit,
|
// onClick: () -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
// modifier: Modifier = Modifier,
|
||||||
textColor: Color = colorResource(R.color.white),
|
// textColor: Color = colorResource(R.color.white),
|
||||||
borderColor: Color = colorResource(R.color.green),
|
// borderColor: Color = colorResource(R.color.green),
|
||||||
cornerRadius: Dp = 8.dp,
|
// cornerRadius: Dp = 8.dp,
|
||||||
borderWidth: Dp = 1.dp,
|
// borderWidth: Dp = 1.dp,
|
||||||
fontWeight: FontWeight = FontWeight.Bold,
|
// fontWeight: FontWeight = FontWeight.Bold,
|
||||||
fontSize: TextUnit = 24.sp,
|
// fontSize: TextUnit = 24.sp,
|
||||||
showButtonIcon: Boolean = false
|
// showButtonIcon: Boolean = false
|
||||||
) {
|
//) {
|
||||||
Button(
|
// Button(
|
||||||
onClick = onClick,
|
// onClick = onClick,
|
||||||
modifier = modifier,
|
// modifier = modifier,
|
||||||
shape = RoundedCornerShape(cornerRadius),
|
// shape = RoundedCornerShape(cornerRadius),
|
||||||
border = BorderStroke(borderWidth, color = borderColor),
|
// border = BorderStroke(borderWidth, color = borderColor),
|
||||||
colors = ButtonDefaults.buttonColors(
|
// colors = ButtonDefaults.buttonColors(
|
||||||
containerColor = borderColor,
|
// containerColor = borderColor,
|
||||||
contentColor = textColor
|
// contentColor = textColor
|
||||||
)
|
// )
|
||||||
) {
|
// ) {
|
||||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
// Row(verticalAlignment = Alignment.CenterVertically) {
|
||||||
if (showButtonIcon) {
|
// if (showButtonIcon) {
|
||||||
Image(
|
// Image(
|
||||||
painter = painterResource(R.mipmap.ic_camera_small),
|
// painter = painterResource(R.mipmap.ic_camera_small),
|
||||||
contentDescription = "采集"
|
// contentDescription = "采集"
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.width(13.dp))
|
// Spacer(modifier = Modifier.width(13.dp))
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
Text(
|
// Text(
|
||||||
text = text,
|
// text = text,
|
||||||
style = TextStyle(
|
// style = TextStyle(
|
||||||
fontWeight = fontWeight,
|
// fontWeight = fontWeight,
|
||||||
fontSize = fontSize,
|
// fontSize = fontSize,
|
||||||
color = textColor
|
// color = textColor
|
||||||
)
|
// )
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
@@ -1,99 +1,99 @@
|
|||||||
package com.sw.inbound.ui.weight
|
//package com.sw.inbound.ui.weight
|
||||||
|
//
|
||||||
import androidx.compose.foundation.Image
|
//import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.background
|
//import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.border
|
//import androidx.compose.foundation.border
|
||||||
import androidx.compose.foundation.clickable
|
//import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Box
|
//import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
//import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
//import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
//import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.width
|
//import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
//import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.foundation.text.KeyboardActions
|
//import androidx.compose.foundation.text.KeyboardActions
|
||||||
import androidx.compose.foundation.text.KeyboardOptions
|
//import androidx.compose.foundation.text.KeyboardOptions
|
||||||
import androidx.compose.material3.Text
|
//import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TextField
|
//import androidx.compose.material3.TextField
|
||||||
import androidx.compose.material3.TextFieldDefaults
|
//import androidx.compose.material3.TextFieldDefaults
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
//import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
//import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
//import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
//import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
//import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.platform.LocalFocusManager
|
//import androidx.compose.ui.platform.LocalFocusManager
|
||||||
import androidx.compose.ui.res.painterResource
|
//import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.text.input.ImeAction
|
//import androidx.compose.ui.text.input.ImeAction
|
||||||
import androidx.compose.ui.unit.dp
|
//import androidx.compose.ui.unit.dp
|
||||||
import com.sw.inbound.R
|
//import com.sw.inbound.R
|
||||||
import com.sw.inbound.ui.theme.AppTypography
|
//import com.sw.inbound.ui.theme.AppTypography
|
||||||
import timber.log.Timber
|
//import timber.log.Timber
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* 搜索框
|
// * 搜索框
|
||||||
*/
|
// */
|
||||||
@Composable
|
//@Composable
|
||||||
fun CustomSearchView(onValueChange: (String) -> Unit = {}, onSearchClick: (String) -> Unit) {
|
//fun CustomSearchView(onValueChange: (String) -> Unit = {}, onSearchClick: (String) -> Unit) {
|
||||||
var searchText by remember { mutableStateOf("") }
|
// var searchText by remember { mutableStateOf("") }
|
||||||
val borderColor = Color(0xFFDCDCF0)
|
// val borderColor = Color(0xFFDCDCF0)
|
||||||
val focusManager = LocalFocusManager.current
|
// val focusManager = LocalFocusManager.current
|
||||||
// 搜索框
|
// // 搜索框
|
||||||
Box(
|
// Box(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.fillMaxWidth()
|
// .fillMaxWidth()
|
||||||
.height(60.dp)
|
// .height(60.dp)
|
||||||
.border(
|
// .border(
|
||||||
width = 2.dp,
|
// width = 2.dp,
|
||||||
color = borderColor,
|
// color = borderColor,
|
||||||
shape = RoundedCornerShape(10.dp) // 圆角边框
|
// shape = RoundedCornerShape(10.dp) // 圆角边框
|
||||||
)
|
// )
|
||||||
.background(Color.Transparent) // 透明背景
|
// .background(Color.Transparent) // 透明背景
|
||||||
) {
|
// ) {
|
||||||
TextField(
|
// TextField(
|
||||||
value = searchText,
|
// value = searchText,
|
||||||
onValueChange = {
|
// onValueChange = {
|
||||||
searchText = it
|
// searchText = it
|
||||||
onValueChange
|
// onValueChange
|
||||||
},
|
// },
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.fillMaxWidth()
|
// .fillMaxWidth()
|
||||||
.padding(end = 25.dp), // 为图标留出空间
|
// .padding(end = 25.dp), // 为图标留出空间
|
||||||
colors = TextFieldDefaults.colors(
|
// colors = TextFieldDefaults.colors(
|
||||||
focusedContainerColor = Color.Transparent,
|
// focusedContainerColor = Color.Transparent,
|
||||||
unfocusedContainerColor = Color.Transparent,
|
// unfocusedContainerColor = Color.Transparent,
|
||||||
disabledContainerColor = Color.Transparent,
|
// disabledContainerColor = Color.Transparent,
|
||||||
focusedIndicatorColor = Color.Transparent,
|
// focusedIndicatorColor = Color.Transparent,
|
||||||
unfocusedIndicatorColor = Color.Transparent,
|
// unfocusedIndicatorColor = Color.Transparent,
|
||||||
disabledIndicatorColor = Color.Transparent
|
// disabledIndicatorColor = Color.Transparent
|
||||||
),
|
// ),
|
||||||
placeholder = {
|
// placeholder = {
|
||||||
Text("输入物品名称", style = AppTypography.gray96a0aaTextStyle)
|
// Text("输入物品名称", style = AppTypography.gray96a0aaTextStyle)
|
||||||
},
|
// },
|
||||||
singleLine = true,
|
// singleLine = true,
|
||||||
textStyle = AppTypography.black141428TextStyle,
|
// textStyle = AppTypography.black141428TextStyle,
|
||||||
keyboardOptions = KeyboardOptions.Default.copy(
|
// keyboardOptions = KeyboardOptions.Default.copy(
|
||||||
imeAction = ImeAction.Search
|
// imeAction = ImeAction.Search
|
||||||
),
|
// ),
|
||||||
keyboardActions = KeyboardActions(onSearch = {
|
// keyboardActions = KeyboardActions(onSearch = {
|
||||||
focusManager.clearFocus()
|
// focusManager.clearFocus()
|
||||||
onSearchClick(searchText)
|
// onSearchClick(searchText)
|
||||||
}),
|
// }),
|
||||||
trailingIcon = {
|
// trailingIcon = {
|
||||||
Image(
|
// Image(
|
||||||
painter = painterResource(R.mipmap.ic_search),
|
// painter = painterResource(R.mipmap.ic_search),
|
||||||
contentDescription = "搜索",
|
// contentDescription = "搜索",
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.width(32.dp)
|
// .width(32.dp)
|
||||||
.height(32.dp)
|
// .height(32.dp)
|
||||||
.clickable {
|
// .clickable {
|
||||||
Timber.d("搜索点击")
|
// Timber.d("搜索点击")
|
||||||
focusManager.clearFocus()
|
// focusManager.clearFocus()
|
||||||
onSearchClick(searchText)
|
// onSearchClick(searchText)
|
||||||
}
|
// }
|
||||||
)
|
// )
|
||||||
},
|
// },
|
||||||
)
|
// )
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
@@ -1,29 +1,29 @@
|
|||||||
package com.sw.inbound.ui.weight
|
//package com.sw.inbound.ui.weight
|
||||||
|
//
|
||||||
import androidx.compose.material3.Text
|
//import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.text.TextStyle
|
//import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
//import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
//import androidx.compose.ui.text.style.TextOverflow
|
||||||
import com.sw.inbound.ui.theme.AppTypography
|
//import com.sw.inbound.ui.theme.AppTypography
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* 自定义单行文本
|
// * 自定义单行文本
|
||||||
*/
|
// */
|
||||||
@Composable
|
//@Composable
|
||||||
fun CustomSingleRightText(
|
//fun CustomSingleRightText(
|
||||||
modifier: Modifier,
|
// modifier: Modifier,
|
||||||
text: String,
|
// text: String,
|
||||||
style: TextStyle = AppTypography.blackTextStyle,
|
// style: TextStyle = AppTypography.blackTextStyle,
|
||||||
textAlign: TextAlign = TextAlign.End
|
// textAlign: TextAlign = TextAlign.End
|
||||||
) {
|
//) {
|
||||||
Text(
|
// Text(
|
||||||
modifier = modifier,
|
// modifier = modifier,
|
||||||
text = text,
|
// text = text,
|
||||||
textAlign = textAlign,
|
// textAlign = textAlign,
|
||||||
style = style,
|
// style = style,
|
||||||
maxLines = 1,
|
// maxLines = 1,
|
||||||
overflow = TextOverflow.Ellipsis,
|
// overflow = TextOverflow.Ellipsis,
|
||||||
)
|
// )
|
||||||
}
|
//}
|
||||||
@@ -1,226 +1,226 @@
|
|||||||
package com.sw.inbound.ui.weight
|
//package com.sw.inbound.ui.weight
|
||||||
|
//
|
||||||
import androidx.compose.foundation.background
|
//import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.border
|
//import androidx.compose.foundation.border
|
||||||
import androidx.compose.foundation.clickable
|
//import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Box
|
//import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.fillMaxHeight
|
//import androidx.compose.foundation.layout.fillMaxHeight
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
//import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
//import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
//import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.wrapContentHeight
|
//import androidx.compose.foundation.layout.wrapContentHeight
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
//import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.foundation.text.KeyboardActions
|
//import androidx.compose.foundation.text.KeyboardActions
|
||||||
import androidx.compose.foundation.text.KeyboardOptions
|
//import androidx.compose.foundation.text.KeyboardOptions
|
||||||
import androidx.compose.material3.LocalTextStyle
|
//import androidx.compose.material3.LocalTextStyle
|
||||||
import androidx.compose.material3.Text
|
//import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TextField
|
//import androidx.compose.material3.TextField
|
||||||
import androidx.compose.material3.TextFieldDefaults
|
//import androidx.compose.material3.TextFieldDefaults
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
//import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
//import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
//import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
//import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
//import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.focus.FocusDirection
|
//import androidx.compose.ui.focus.FocusDirection
|
||||||
import androidx.compose.ui.focus.onFocusChanged
|
//import androidx.compose.ui.focus.onFocusChanged
|
||||||
import androidx.compose.ui.graphics.Color
|
//import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.platform.LocalFocusManager
|
//import androidx.compose.ui.platform.LocalFocusManager
|
||||||
import androidx.compose.ui.text.TextStyle
|
//import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
//import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.input.ImeAction
|
//import androidx.compose.ui.text.input.ImeAction
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
//import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
//import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
//import androidx.compose.ui.unit.sp
|
||||||
import com.sw.inbound.ext.isValidFloat
|
//import com.sw.inbound.ext.isValidFloat
|
||||||
import com.sw.inbound.ext.isValidNumber
|
//import com.sw.inbound.ext.isValidNumber
|
||||||
import com.sw.inbound.ui.theme.AppTypography
|
//import com.sw.inbound.ui.theme.AppTypography
|
||||||
import com.sw.inbound.ui.theme.Black_141428
|
//import com.sw.inbound.ui.theme.Black_141428
|
||||||
import com.sw.inbound.ui.theme.Gray_DCDCF0
|
//import com.sw.inbound.ui.theme.Gray_DCDCF0
|
||||||
import timber.log.Timber
|
//import timber.log.Timber
|
||||||
|
//
|
||||||
//@Preview(showBackground = true)
|
////@Preview(showBackground = true)
|
||||||
|
////@Composable
|
||||||
|
////fun testTextField() {
|
||||||
|
//// Column(verticalArrangement = Arrangement.spacedBy(10.dp), modifier = Modifier.padding(20.dp)) {
|
||||||
|
//// CustomTextField(value = "123", onValueChange = {}, textAlign = TextAlign.Start)
|
||||||
|
//// CustomTextField(value = "", onValueChange = {}, textAlign = TextAlign.Start)
|
||||||
|
//// CustomTextField(value = "", onValueChange = {}, textAlign = TextAlign.End)
|
||||||
|
//// CustomTextField(
|
||||||
|
//// value = "123",
|
||||||
|
//// onValueChange = {},
|
||||||
|
//// textAlign = TextAlign.End,
|
||||||
|
//// trailingLabel = "克"
|
||||||
|
//// )
|
||||||
|
//// CustomTextField(
|
||||||
|
//// enabled = false,
|
||||||
|
//// modifier = Modifier
|
||||||
|
//// .height(60.dp),
|
||||||
|
//// value = "123",
|
||||||
|
//// onValueChange = {},
|
||||||
|
//// textAlign = TextAlign.End,
|
||||||
|
//// leadingIcon =
|
||||||
|
//// {
|
||||||
|
//// Button(
|
||||||
|
//// onClick = {},
|
||||||
|
//// modifier = Modifier
|
||||||
|
//// .padding(0.dp)
|
||||||
|
//// .fillMaxHeight(),
|
||||||
|
//// shape = RoundedCornerShape(10.dp),
|
||||||
|
//// border = BorderStroke(2.dp, color = Color.White),
|
||||||
|
//// colors = ButtonDefaults.buttonColors(
|
||||||
|
//// containerColor = Color.White,
|
||||||
|
//// contentColor = Black_141428
|
||||||
|
//// ),
|
||||||
|
//// ) { Text(text = "累计", style = AppTypography.black141428TextStyle) }
|
||||||
|
//// }
|
||||||
|
//// )
|
||||||
|
//// }
|
||||||
|
////
|
||||||
|
////}
|
||||||
|
//
|
||||||
|
//enum class InputType {
|
||||||
|
// Text, // 字符串
|
||||||
|
// Number, // 数字
|
||||||
|
// Decimal, // 浮点
|
||||||
|
// Percent, // 百分比
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * 自定义输入框
|
||||||
|
// */
|
||||||
//@Composable
|
//@Composable
|
||||||
//fun testTextField() {
|
//fun CustomTextField(
|
||||||
// Column(verticalArrangement = Arrangement.spacedBy(10.dp), modifier = Modifier.padding(20.dp)) {
|
// value: String,
|
||||||
// CustomTextField(value = "123", onValueChange = {}, textAlign = TextAlign.Start)
|
// onValueChange: (String) -> Unit,
|
||||||
// CustomTextField(value = "", onValueChange = {}, textAlign = TextAlign.Start)
|
// modifier: Modifier = Modifier.height(60.dp),
|
||||||
// CustomTextField(value = "", onValueChange = {}, textAlign = TextAlign.End)
|
// placeholderValue: String = "请录入", // 占位文本
|
||||||
// CustomTextField(
|
// trailingLabel: String? = null, // 右侧文字
|
||||||
// value = "123",
|
// textAlign: TextAlign = TextAlign.Start,
|
||||||
// onValueChange = {},
|
// textStyle: TextStyle? = null,
|
||||||
// textAlign = TextAlign.End,
|
// leadingIcon: @Composable (() -> Unit)? = null, // 左侧布局
|
||||||
// trailingLabel = "克"
|
// enabled: Boolean = true,
|
||||||
// )
|
// inputType: InputType = InputType.Text, // 输入类型
|
||||||
// CustomTextField(
|
// hasNext: Boolean = true, // 键盘显示下一个
|
||||||
// enabled = false,
|
// isInitUpdate: Boolean = false, // 是否需要根据原始数据变动
|
||||||
// modifier = Modifier
|
// keyboardOptions: KeyboardOptions? = null,
|
||||||
// .height(60.dp),
|
// keyboardActions: KeyboardActions? = null,
|
||||||
// value = "123",
|
// onClick: () -> Unit = {}, // 点击
|
||||||
// onValueChange = {},
|
//) {
|
||||||
// textAlign = TextAlign.End,
|
// val containerColor = if (enabled) Color.Transparent else Gray_DCDCF0
|
||||||
// leadingIcon =
|
// var inputValue by remember(if (isInitUpdate) value else null) {
|
||||||
// {
|
// mutableStateOf(value)
|
||||||
// Button(
|
// }
|
||||||
// onClick = {},
|
// val focusManager = LocalFocusManager.current
|
||||||
// modifier = Modifier
|
//
|
||||||
// .padding(0.dp)
|
// fun onEditingComplete(isFocus: Boolean) {
|
||||||
// .fillMaxHeight(),
|
// Timber.d("onEditingComplete inputValue = $inputValue, isFocus = $isFocus")
|
||||||
// shape = RoundedCornerShape(10.dp),
|
// onValueChange(inputValue)
|
||||||
// border = BorderStroke(2.dp, color = Color.White),
|
|
||||||
// colors = ButtonDefaults.buttonColors(
|
|
||||||
// containerColor = Color.White,
|
|
||||||
// contentColor = Black_141428
|
|
||||||
// ),
|
|
||||||
// ) { Text(text = "累计", style = AppTypography.black141428TextStyle) }
|
|
||||||
// }
|
|
||||||
// )
|
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
//}
|
// var newTextStyle = textStyle
|
||||||
|
// ?: LocalTextStyle.current.copy(
|
||||||
enum class InputType {
|
// color = Black_141428,
|
||||||
Text, // 字符串
|
// fontSize = 24.sp,
|
||||||
Number, // 数字
|
// fontWeight = FontWeight.Bold,
|
||||||
Decimal, // 浮点
|
// textAlign = textAlign
|
||||||
Percent, // 百分比
|
// )
|
||||||
}
|
// Box(modifier = modifier) {
|
||||||
|
// TextField(
|
||||||
/**
|
// enabled = enabled,
|
||||||
* 自定义输入框
|
// value = inputValue,
|
||||||
*/
|
// textStyle = newTextStyle,
|
||||||
@Composable
|
// onValueChange = { newValue ->
|
||||||
fun CustomTextField(
|
// Timber.d("onValueChange newValue = $newValue")
|
||||||
value: String,
|
// when (inputType) {
|
||||||
onValueChange: (String) -> Unit,
|
// InputType.Number -> {
|
||||||
modifier: Modifier = Modifier.height(60.dp),
|
// if (newValue.isEmpty() || newValue.isValidNumber()) {
|
||||||
placeholderValue: String = "请录入", // 占位文本
|
// inputValue = newValue
|
||||||
trailingLabel: String? = null, // 右侧文字
|
// onEditingComplete(true)
|
||||||
textAlign: TextAlign = TextAlign.Start,
|
// }
|
||||||
textStyle: TextStyle? = null,
|
// }
|
||||||
leadingIcon: @Composable (() -> Unit)? = null, // 左侧布局
|
//
|
||||||
enabled: Boolean = true,
|
// InputType.Decimal -> {
|
||||||
inputType: InputType = InputType.Text, // 输入类型
|
// if (newValue.isEmpty() || newValue.isValidFloat()) {
|
||||||
hasNext: Boolean = true, // 键盘显示下一个
|
// inputValue = newValue
|
||||||
isInitUpdate: Boolean = false, // 是否需要根据原始数据变动
|
// onEditingComplete(true)
|
||||||
keyboardOptions: KeyboardOptions? = null,
|
// }
|
||||||
keyboardActions: KeyboardActions? = null,
|
// }
|
||||||
onClick: () -> Unit = {}, // 点击
|
//
|
||||||
) {
|
// InputType.Percent -> {
|
||||||
val containerColor = if (enabled) Color.Transparent else Gray_DCDCF0
|
// val range: ClosedFloatingPointRange<Float> = 0f..100f
|
||||||
var inputValue by remember(if (isInitUpdate) value else null) {
|
// if (newValue.isEmpty() || (newValue.isValidFloat(1) && newValue.toFloat() in range)) {
|
||||||
mutableStateOf(value)
|
// inputValue = newValue
|
||||||
}
|
// onEditingComplete(true)
|
||||||
val focusManager = LocalFocusManager.current
|
// }
|
||||||
|
// }
|
||||||
fun onEditingComplete(isFocus: Boolean) {
|
//
|
||||||
Timber.d("onEditingComplete inputValue = $inputValue, isFocus = $isFocus")
|
// else -> {
|
||||||
onValueChange(inputValue)
|
// inputValue = newValue
|
||||||
}
|
// onEditingComplete(true)
|
||||||
|
// }
|
||||||
var newTextStyle = textStyle
|
// }
|
||||||
?: LocalTextStyle.current.copy(
|
// },
|
||||||
color = Black_141428,
|
//
|
||||||
fontSize = 24.sp,
|
// modifier = Modifier
|
||||||
fontWeight = FontWeight.Bold,
|
// .fillMaxWidth()
|
||||||
textAlign = textAlign
|
// .background(Color.Transparent)
|
||||||
)
|
// .border(
|
||||||
Box(modifier = modifier) {
|
// width = 2.dp,
|
||||||
TextField(
|
// color = Gray_DCDCF0,
|
||||||
enabled = enabled,
|
// shape = RoundedCornerShape(10.dp)
|
||||||
value = inputValue,
|
// )
|
||||||
textStyle = newTextStyle,
|
// .clickable(onClick = onClick)
|
||||||
onValueChange = { newValue ->
|
//// .focusable()
|
||||||
Timber.d("onValueChange newValue = $newValue")
|
// .onFocusChanged(onFocusChanged = { focusState ->
|
||||||
when (inputType) {
|
// {
|
||||||
InputType.Number -> {
|
// onEditingComplete(focusState.isFocused)
|
||||||
if (newValue.isEmpty() || newValue.isValidNumber()) {
|
// }
|
||||||
inputValue = newValue
|
// }),
|
||||||
onEditingComplete(true)
|
// colors = TextFieldDefaults.colors(
|
||||||
}
|
// focusedContainerColor = Color.Transparent,
|
||||||
}
|
// unfocusedContainerColor = Color.Transparent,
|
||||||
|
// disabledContainerColor = containerColor,
|
||||||
InputType.Decimal -> {
|
// focusedIndicatorColor = Color.Transparent,
|
||||||
if (newValue.isEmpty() || newValue.isValidFloat()) {
|
// unfocusedIndicatorColor = Color.Transparent,
|
||||||
inputValue = newValue
|
// disabledIndicatorColor = Color.Transparent
|
||||||
onEditingComplete(true)
|
// ),
|
||||||
}
|
// shape = RoundedCornerShape(10.dp),
|
||||||
}
|
// placeholder = {
|
||||||
|
// Text(
|
||||||
InputType.Percent -> {
|
// modifier = Modifier
|
||||||
val range: ClosedFloatingPointRange<Float> = 0f..100f
|
// .fillMaxWidth()
|
||||||
if (newValue.isEmpty() || (newValue.isValidFloat(1) && newValue.toFloat() in range)) {
|
// .fillMaxHeight()
|
||||||
inputValue = newValue
|
// .wrapContentHeight(Alignment.CenterVertically),
|
||||||
onEditingComplete(true)
|
// text = placeholderValue,
|
||||||
}
|
// textAlign = textAlign,
|
||||||
}
|
// style = AppTypography.gray96a0aaTextStyle
|
||||||
|
// )
|
||||||
else -> {
|
// },
|
||||||
inputValue = newValue
|
// leadingIcon = leadingIcon,
|
||||||
onEditingComplete(true)
|
// trailingIcon = trailingLabel?.let { label ->
|
||||||
}
|
// {
|
||||||
}
|
// Box(modifier = Modifier.padding(start = 10.dp, end = 20.dp)) {
|
||||||
},
|
// Text(
|
||||||
|
// text = trailingLabel,
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.fillMaxWidth()
|
// .fillMaxHeight()
|
||||||
.background(Color.Transparent)
|
// .wrapContentHeight(Alignment.CenterVertically),
|
||||||
.border(
|
// style = AppTypography.gray96a0aaTextStyle
|
||||||
width = 2.dp,
|
// )
|
||||||
color = Gray_DCDCF0,
|
// }
|
||||||
shape = RoundedCornerShape(10.dp)
|
// }
|
||||||
)
|
// },
|
||||||
.clickable(onClick = onClick)
|
// keyboardOptions = keyboardOptions
|
||||||
// .focusable()
|
// ?: KeyboardOptions.Default.copy(imeAction = if (hasNext) ImeAction.Next else ImeAction.Done),
|
||||||
.onFocusChanged(onFocusChanged = { focusState ->
|
// keyboardActions = keyboardActions ?: KeyboardActions(onNext = {
|
||||||
{
|
// focusManager.moveFocus(focusDirection = FocusDirection.Next)
|
||||||
onEditingComplete(focusState.isFocused)
|
// onEditingComplete(false)
|
||||||
}
|
// }, onDone = {
|
||||||
}),
|
// focusManager.clearFocus()
|
||||||
colors = TextFieldDefaults.colors(
|
// onEditingComplete(false)
|
||||||
focusedContainerColor = Color.Transparent,
|
// })
|
||||||
unfocusedContainerColor = Color.Transparent,
|
// )
|
||||||
disabledContainerColor = containerColor,
|
// }
|
||||||
focusedIndicatorColor = Color.Transparent,
|
//}
|
||||||
unfocusedIndicatorColor = Color.Transparent,
|
|
||||||
disabledIndicatorColor = Color.Transparent
|
|
||||||
),
|
|
||||||
shape = RoundedCornerShape(10.dp),
|
|
||||||
placeholder = {
|
|
||||||
Text(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.fillMaxHeight()
|
|
||||||
.wrapContentHeight(Alignment.CenterVertically),
|
|
||||||
text = placeholderValue,
|
|
||||||
textAlign = textAlign,
|
|
||||||
style = AppTypography.gray96a0aaTextStyle
|
|
||||||
)
|
|
||||||
},
|
|
||||||
leadingIcon = leadingIcon,
|
|
||||||
trailingIcon = trailingLabel?.let { label ->
|
|
||||||
{
|
|
||||||
Box(modifier = Modifier.padding(start = 10.dp, end = 20.dp)) {
|
|
||||||
Text(
|
|
||||||
text = trailingLabel,
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxHeight()
|
|
||||||
.wrapContentHeight(Alignment.CenterVertically),
|
|
||||||
style = AppTypography.gray96a0aaTextStyle
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
keyboardOptions = keyboardOptions
|
|
||||||
?: KeyboardOptions.Default.copy(imeAction = if (hasNext) ImeAction.Next else ImeAction.Done),
|
|
||||||
keyboardActions = keyboardActions ?: KeyboardActions(onNext = {
|
|
||||||
focusManager.moveFocus(focusDirection = FocusDirection.Next)
|
|
||||||
onEditingComplete(false)
|
|
||||||
}, onDone = {
|
|
||||||
focusManager.clearFocus()
|
|
||||||
onEditingComplete(false)
|
|
||||||
})
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,126 +1,126 @@
|
|||||||
package com.sw.inbound.ui.weight
|
//package com.sw.inbound.ui.weight
|
||||||
|
//
|
||||||
import androidx.compose.foundation.Image
|
//import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.background
|
//import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.clickable
|
//import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
//import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Row
|
//import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.Spacer
|
//import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
//import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
//import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
//import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
//import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.layout.width
|
//import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
//import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material3.Text
|
//import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
//import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.colorResource
|
//import androidx.compose.ui.res.colorResource
|
||||||
import androidx.compose.ui.res.painterResource
|
//import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.text.TextStyle
|
//import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
//import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
//import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
//import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
//import androidx.compose.ui.unit.sp
|
||||||
import com.sw.inbound.R
|
//import com.sw.inbound.R
|
||||||
|
//
|
||||||
@Preview
|
//@Preview
|
||||||
@Composable
|
//@Composable
|
||||||
fun BackButton() {
|
//fun BackButton() {
|
||||||
Row(
|
// Row(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.fillMaxWidth()
|
// .fillMaxWidth()
|
||||||
.padding(start = 30.dp, end = 30.dp, bottom = 20.dp)
|
// .padding(start = 30.dp, end = 30.dp, bottom = 20.dp)
|
||||||
.height(100.dp),
|
// .height(100.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
// verticalAlignment = Alignment.CenterVertically,
|
||||||
horizontalArrangement = Arrangement.SpaceBetween
|
// horizontalArrangement = Arrangement.SpaceBetween
|
||||||
) {
|
// ) {
|
||||||
// 左侧图标+文字
|
// // 左侧图标+文字
|
||||||
Row(
|
// Row(
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
// verticalAlignment = Alignment.CenterVertically,
|
||||||
horizontalArrangement = Arrangement.Center,
|
// horizontalArrangement = Arrangement.Center,
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.width(220.dp)
|
// .width(220.dp)
|
||||||
.height(100.dp)
|
// .height(100.dp)
|
||||||
.background(
|
// .background(
|
||||||
color = colorResource(R.color.blue),
|
// color = colorResource(R.color.blue),
|
||||||
shape = RoundedCornerShape(10.dp)
|
// shape = RoundedCornerShape(10.dp)
|
||||||
)
|
// )
|
||||||
.clickable {
|
// .clickable {
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
) {
|
// ) {
|
||||||
Image(
|
// Image(
|
||||||
painter = painterResource(R.mipmap.ic_back_white),
|
// painter = painterResource(R.mipmap.ic_back_white),
|
||||||
contentDescription = "返回",
|
// contentDescription = "返回",
|
||||||
modifier = Modifier.size(40.dp)
|
// modifier = Modifier.size(40.dp)
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.width(21.dp))
|
// Spacer(modifier = Modifier.width(21.dp))
|
||||||
Text(
|
// Text(
|
||||||
text = "返回",
|
// text = "返回",
|
||||||
style = TextStyle(
|
// style = TextStyle(
|
||||||
color = colorResource(R.color.white),
|
// color = colorResource(R.color.white),
|
||||||
fontWeight = FontWeight.Bold,
|
// fontWeight = FontWeight.Bold,
|
||||||
fontSize = 36.sp
|
// fontSize = 36.sp
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Row {
|
|
||||||
// if (false) {
|
|
||||||
// CustomOutlinedButton(
|
|
||||||
// modifier = Modifier
|
|
||||||
// .width(300.dp)
|
|
||||||
// .height(100.dp),
|
|
||||||
// text = "ok",
|
|
||||||
// fontSize = 36.sp,
|
|
||||||
// onClick = {}
|
|
||||||
// )
|
// )
|
||||||
// Spacer(modifier = Modifier.width(20.dp))
|
|
||||||
// }
|
|
||||||
// CustomButton(
|
|
||||||
// modifier = Modifier
|
|
||||||
// .width(300.dp)
|
|
||||||
// .height(100.dp),
|
|
||||||
// text = "Button",
|
|
||||||
// onClick = {},
|
|
||||||
// borderColor = colorResource(R.color.blue),
|
|
||||||
// textColor = colorResource(R.color.white),
|
|
||||||
// fontSize = 36.sp
|
|
||||||
// )
|
// )
|
||||||
// }
|
// }
|
||||||
}
|
//
|
||||||
}
|
//// Row {
|
||||||
@Composable
|
//// if (false) {
|
||||||
fun BackButton2() {
|
//// CustomOutlinedButton(
|
||||||
Row(
|
//// modifier = Modifier
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
//// .width(300.dp)
|
||||||
horizontalArrangement = Arrangement.Center,
|
//// .height(100.dp),
|
||||||
modifier = Modifier
|
//// text = "ok",
|
||||||
.width(220.dp)
|
//// fontSize = 36.sp,
|
||||||
.height(100.dp)
|
//// onClick = {}
|
||||||
.background(
|
//// )
|
||||||
color = colorResource(R.color.blue),
|
//// Spacer(modifier = Modifier.width(20.dp))
|
||||||
shape = RoundedCornerShape(10.dp)
|
//// }
|
||||||
)
|
//// CustomButton(
|
||||||
.clickable {
|
//// modifier = Modifier
|
||||||
|
//// .width(300.dp)
|
||||||
}
|
//// .height(100.dp),
|
||||||
) {
|
//// text = "Button",
|
||||||
Image(
|
//// onClick = {},
|
||||||
painter = painterResource(R.mipmap.ic_home2),
|
//// borderColor = colorResource(R.color.blue),
|
||||||
contentDescription = "返回",
|
//// textColor = colorResource(R.color.white),
|
||||||
modifier = Modifier.size(40.dp)
|
//// fontSize = 36.sp
|
||||||
)
|
//// )
|
||||||
Spacer(modifier = Modifier.width(21.dp))
|
//// }
|
||||||
Text(
|
// }
|
||||||
text = "返回",
|
//}
|
||||||
style = TextStyle(
|
//@Composable
|
||||||
color = colorResource(R.color.white),
|
//fun BackButton2() {
|
||||||
fontWeight = FontWeight.Bold,
|
// Row(
|
||||||
fontSize = 36.sp
|
// verticalAlignment = Alignment.CenterVertically,
|
||||||
)
|
// horizontalArrangement = Arrangement.Center,
|
||||||
)
|
// modifier = Modifier
|
||||||
}
|
// .width(220.dp)
|
||||||
}
|
// .height(100.dp)
|
||||||
|
// .background(
|
||||||
|
// color = colorResource(R.color.blue),
|
||||||
|
// shape = RoundedCornerShape(10.dp)
|
||||||
|
// )
|
||||||
|
// .clickable {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// ) {
|
||||||
|
// Image(
|
||||||
|
// painter = painterResource(R.mipmap.ic_home2),
|
||||||
|
// contentDescription = "返回",
|
||||||
|
// modifier = Modifier.size(40.dp)
|
||||||
|
// )
|
||||||
|
// Spacer(modifier = Modifier.width(21.dp))
|
||||||
|
// Text(
|
||||||
|
// text = "返回",
|
||||||
|
// style = TextStyle(
|
||||||
|
// color = colorResource(R.color.white),
|
||||||
|
// fontWeight = FontWeight.Bold,
|
||||||
|
// fontSize = 36.sp
|
||||||
|
// )
|
||||||
|
// )
|
||||||
|
// }
|
||||||
|
//}
|
||||||
@@ -1,145 +1,145 @@
|
|||||||
package com.sw.inbound.ui.weight
|
//package com.sw.inbound.ui.weight
|
||||||
|
//
|
||||||
import androidx.compose.foundation.Image
|
//import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.background
|
//import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.clickable
|
//import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Column
|
//import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
//import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.Spacer
|
//import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
//import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.padding
|
//import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
//import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.layout.width
|
//import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
//import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.itemsIndexed
|
//import androidx.compose.foundation.lazy.itemsIndexed
|
||||||
import androidx.compose.material3.HorizontalDivider
|
//import androidx.compose.material3.HorizontalDivider
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
//import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
//import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.res.colorResource
|
//import androidx.compose.ui.res.colorResource
|
||||||
import androidx.compose.ui.res.painterResource
|
//import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
//import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
//import androidx.compose.ui.unit.dp
|
||||||
import com.sw.inbound.R
|
//import com.sw.inbound.R
|
||||||
import com.sw.inbound.ext.bold
|
//import com.sw.inbound.ext.bold
|
||||||
import com.sw.inbound.model.request.PurchaseWarehouseParam
|
//import com.sw.inbound.model.request.PurchaseWarehouseParam
|
||||||
import com.sw.inbound.ui.theme.AppTypography
|
//import com.sw.inbound.ui.theme.AppTypography
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* 自采购 左侧列表
|
// * 自采购 左侧列表
|
||||||
*/
|
// */
|
||||||
@Composable
|
//@Composable
|
||||||
fun SelfProcurementListItem(
|
//fun SelfProcurementListItem(
|
||||||
modifier: Modifier = Modifier,
|
// modifier: Modifier = Modifier,
|
||||||
productList: List<PurchaseWarehouseParam>,
|
// productList: List<PurchaseWarehouseParam>,
|
||||||
checkedItem: PurchaseWarehouseParam? = null,
|
// checkedItem: PurchaseWarehouseParam? = null,
|
||||||
onItemCheckedClick: (PurchaseWarehouseParam) -> Unit = {},
|
// onItemCheckedClick: (PurchaseWarehouseParam) -> Unit = {},
|
||||||
showClose: Boolean = false,
|
// showClose: Boolean = false,
|
||||||
onCloseClick: (Int, PurchaseWarehouseParam) -> Unit,
|
// onCloseClick: (Int, PurchaseWarehouseParam) -> Unit,
|
||||||
) {
|
//) {
|
||||||
Column(
|
// Column(
|
||||||
modifier = modifier
|
// modifier = modifier
|
||||||
// .padding(horizontal = 30.dp)
|
//// .padding(horizontal = 30.dp)
|
||||||
) {
|
// ) {
|
||||||
// 左侧列表标题
|
// // 左侧列表标题
|
||||||
Row(
|
// Row(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.fillMaxWidth()
|
// .fillMaxWidth()
|
||||||
.padding(30.dp)
|
// .padding(30.dp)
|
||||||
) {
|
// ) {
|
||||||
CustomSingleRightText(
|
// CustomSingleRightText(
|
||||||
modifier = Modifier.weight(1f),
|
// modifier = Modifier.weight(1f),
|
||||||
text = "名称",
|
// text = "名称",
|
||||||
style = AppTypography.gray96a0aaTextStyle.bold(),
|
// style = AppTypography.gray96a0aaTextStyle.bold(),
|
||||||
textAlign = TextAlign.Start
|
// textAlign = TextAlign.Start
|
||||||
)
|
|
||||||
Spacer(modifier = Modifier.width(10.dp))
|
|
||||||
CustomSingleRightText(
|
|
||||||
modifier = Modifier.width(100.dp),
|
|
||||||
text = "单价(元)",
|
|
||||||
style = AppTypography.gray96a0aaTextStyle.bold()
|
|
||||||
)
|
|
||||||
Spacer(modifier = Modifier.width(20.dp))
|
|
||||||
CustomSingleRightText(
|
|
||||||
modifier = Modifier.width(100.dp),
|
|
||||||
text = "数量",
|
|
||||||
style = AppTypography.gray96a0aaTextStyle.bold()
|
|
||||||
)
|
|
||||||
Spacer(modifier = Modifier.width(20.dp))
|
|
||||||
CustomSingleRightText(
|
|
||||||
modifier = Modifier.width(110.dp),
|
|
||||||
text = "金额(元)",
|
|
||||||
style = AppTypography.gray96a0aaTextStyle.bold()
|
|
||||||
)
|
|
||||||
if (showClose) {
|
|
||||||
Spacer(modifier = Modifier.width(78.dp))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Spacer(modifier = Modifier.height(31.dp))
|
|
||||||
HorizontalDivider(thickness = 1.dp, color = colorResource(R.color.divider))
|
|
||||||
// Spacer(modifier = Modifier.height(31.dp))
|
|
||||||
// 左侧列表
|
|
||||||
LazyColumn() {
|
|
||||||
itemsIndexed(items = productList)
|
|
||||||
// items(
|
|
||||||
// items = productList,
|
|
||||||
// // 取消key,列表中可以插入同一物品
|
|
||||||
//// key = { it.goodsId }
|
|
||||||
// )
|
// )
|
||||||
{ index, it ->
|
// Spacer(modifier = Modifier.width(10.dp))
|
||||||
Row(
|
// CustomSingleRightText(
|
||||||
modifier = Modifier
|
// modifier = Modifier.width(100.dp),
|
||||||
.background(color = Color.Transparent)
|
// text = "单价(元)",
|
||||||
.padding(30.dp)
|
// style = AppTypography.gray96a0aaTextStyle.bold()
|
||||||
.clickable {
|
// )
|
||||||
onItemCheckedClick(it)
|
// Spacer(modifier = Modifier.width(20.dp))
|
||||||
}, verticalAlignment = Alignment.CenterVertically
|
// CustomSingleRightText(
|
||||||
) {
|
// modifier = Modifier.width(100.dp),
|
||||||
CustomSingleRightText(
|
// text = "数量",
|
||||||
modifier = Modifier.weight(1f),
|
// style = AppTypography.gray96a0aaTextStyle.bold()
|
||||||
text = it.goodsNameStr,
|
// )
|
||||||
textAlign = TextAlign.Start
|
// Spacer(modifier = Modifier.width(20.dp))
|
||||||
)
|
// CustomSingleRightText(
|
||||||
Spacer(modifier = Modifier.width(10.dp))
|
// modifier = Modifier.width(110.dp),
|
||||||
CustomSingleRightText(
|
// text = "金额(元)",
|
||||||
modifier = Modifier.width(100.dp),
|
// style = AppTypography.gray96a0aaTextStyle.bold()
|
||||||
text = it.goodsUnitPriceStr,
|
// )
|
||||||
style = AppTypography.blackTextStyle
|
// if (showClose) {
|
||||||
)
|
// Spacer(modifier = Modifier.width(78.dp))
|
||||||
Spacer(modifier = Modifier.width(20.dp))
|
// }
|
||||||
CustomSingleRightText(
|
// }
|
||||||
modifier = Modifier.width(100.dp),
|
//// Spacer(modifier = Modifier.height(31.dp))
|
||||||
text = "${it.goodsCountStr}${it.unitNameStr}",
|
// HorizontalDivider(thickness = 1.dp, color = colorResource(R.color.divider))
|
||||||
style = AppTypography.blackTextStyle
|
//// Spacer(modifier = Modifier.height(31.dp))
|
||||||
)
|
// // 左侧列表
|
||||||
Spacer(modifier = Modifier.width(20.dp))
|
// LazyColumn() {
|
||||||
CustomSingleRightText(
|
// itemsIndexed(items = productList)
|
||||||
modifier = Modifier.width(110.dp),
|
//// items(
|
||||||
text = it.goodsPriceStr,
|
//// items = productList,
|
||||||
style = AppTypography.blackTextStyle
|
//// // 取消key,列表中可以插入同一物品
|
||||||
)
|
////// key = { it.goodsId }
|
||||||
if (showClose) {
|
//// )
|
||||||
Spacer(modifier = Modifier.width(30.dp))
|
// { index, it ->
|
||||||
Image(
|
// Row(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.size(48.dp)
|
// .background(color = Color.Transparent)
|
||||||
.clickable {
|
// .padding(30.dp)
|
||||||
onCloseClick(index, it)
|
// .clickable {
|
||||||
},
|
// onItemCheckedClick(it)
|
||||||
painter = painterResource(R.mipmap.ic_delete),
|
// }, verticalAlignment = Alignment.CenterVertically
|
||||||
contentDescription = "删除"
|
// ) {
|
||||||
)
|
// CustomSingleRightText(
|
||||||
}
|
// modifier = Modifier.weight(1f),
|
||||||
}
|
// text = it.goodsNameStr,
|
||||||
// Spacer(modifier = Modifier.height(33.dp))
|
// textAlign = TextAlign.Start
|
||||||
// if (productList.indexOf(it) != productList.lastIndex)
|
// )
|
||||||
HorizontalDivider(
|
// Spacer(modifier = Modifier.width(10.dp))
|
||||||
thickness = 1.dp,
|
// CustomSingleRightText(
|
||||||
color = colorResource(R.color.divider)
|
// modifier = Modifier.width(100.dp),
|
||||||
)
|
// text = it.goodsUnitPriceStr,
|
||||||
// Spacer(modifier = Modifier.height(33.dp))
|
// style = AppTypography.blackTextStyle
|
||||||
}
|
// )
|
||||||
}
|
// Spacer(modifier = Modifier.width(20.dp))
|
||||||
}
|
// CustomSingleRightText(
|
||||||
}
|
// modifier = Modifier.width(100.dp),
|
||||||
|
// text = "${it.goodsCountStr}${it.unitNameStr}",
|
||||||
|
// style = AppTypography.blackTextStyle
|
||||||
|
// )
|
||||||
|
// Spacer(modifier = Modifier.width(20.dp))
|
||||||
|
// CustomSingleRightText(
|
||||||
|
// modifier = Modifier.width(110.dp),
|
||||||
|
// text = it.goodsPriceStr,
|
||||||
|
// style = AppTypography.blackTextStyle
|
||||||
|
// )
|
||||||
|
// if (showClose) {
|
||||||
|
// Spacer(modifier = Modifier.width(30.dp))
|
||||||
|
// Image(
|
||||||
|
// modifier = Modifier
|
||||||
|
// .size(48.dp)
|
||||||
|
// .clickable {
|
||||||
|
// onCloseClick(index, it)
|
||||||
|
// },
|
||||||
|
// painter = painterResource(R.mipmap.ic_delete),
|
||||||
|
// contentDescription = "删除"
|
||||||
|
// )
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//// Spacer(modifier = Modifier.height(33.dp))
|
||||||
|
//// if (productList.indexOf(it) != productList.lastIndex)
|
||||||
|
// HorizontalDivider(
|
||||||
|
// thickness = 1.dp,
|
||||||
|
// color = colorResource(R.color.divider)
|
||||||
|
// )
|
||||||
|
//// Spacer(modifier = Modifier.height(33.dp))
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
@@ -1,142 +1,142 @@
|
|||||||
package com.sw.inbound.ui.weight
|
//package com.sw.inbound.ui.weight
|
||||||
|
//
|
||||||
import android.content.Intent
|
//import android.content.Intent
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
//import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
import androidx.compose.foundation.Image
|
//import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.background
|
//import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.clickable
|
//import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.combinedClickable
|
//import androidx.compose.foundation.combinedClickable
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
//import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
//import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Row
|
//import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.Spacer
|
//import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
//import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
//import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
//import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
//import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.layout.width
|
//import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.layout.wrapContentSize
|
//import androidx.compose.foundation.layout.wrapContentSize
|
||||||
import androidx.compose.foundation.layout.wrapContentWidth
|
//import androidx.compose.foundation.layout.wrapContentWidth
|
||||||
import androidx.compose.material3.Text
|
//import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
//import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.getValue
|
//import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
//import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
//import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
//import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
//import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
//import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.res.colorResource
|
//import androidx.compose.ui.res.colorResource
|
||||||
import androidx.compose.ui.res.painterResource
|
//import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.text.TextStyle
|
//import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
//import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
//import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
//import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
//import androidx.compose.ui.unit.sp
|
||||||
import com.sw.inbound.MyApp
|
//import com.sw.inbound.MyApp
|
||||||
import com.sw.inbound.R
|
//import com.sw.inbound.R
|
||||||
import com.sw.inbound.activity.FoodCollectionActivity
|
//import com.sw.inbound.activity.FoodCollectionActivity
|
||||||
import com.sw.inbound.ext.medium
|
//import com.sw.inbound.ext.medium
|
||||||
import com.sw.inbound.model.response.User
|
//import com.sw.inbound.model.response.User
|
||||||
import com.sw.inbound.ui.theme.AppTypography
|
//import com.sw.inbound.ui.theme.AppTypography
|
||||||
import com.sw.inbound.utils.DateTimeUtils
|
//import com.sw.inbound.utils.DateTimeUtils
|
||||||
import com.sw.inbound.utils.ext.startActivity
|
//import com.sw.inbound.utils.ext.startActivity
|
||||||
import kotlinx.coroutines.delay
|
//import kotlinx.coroutines.delay
|
||||||
|
//
|
||||||
|
//
|
||||||
@OptIn(ExperimentalFoundationApi::class)
|
//@OptIn(ExperimentalFoundationApi::class)
|
||||||
@Preview(
|
//@Preview(
|
||||||
widthDp = 1920,
|
// widthDp = 1920,
|
||||||
heightDp = 1080,
|
// heightDp = 1080,
|
||||||
showBackground = true
|
// showBackground = true
|
||||||
)
|
//)
|
||||||
/**
|
///**
|
||||||
* 标题
|
// * 标题
|
||||||
*/
|
// */
|
||||||
@Composable
|
//@Composable
|
||||||
fun TopTitleBar(
|
//fun TopTitleBar(
|
||||||
modifier: Modifier = Modifier,
|
// modifier: Modifier = Modifier,
|
||||||
// title: String = "采购单入库",
|
//// title: String = "采购单入库",
|
||||||
title: String = "出入库管理",
|
// title: String = "出入库管理",
|
||||||
user: User? = null,
|
// user: User? = null,
|
||||||
onLogoutClick: () -> Unit = {}
|
// onLogoutClick: () -> Unit = {}
|
||||||
) {
|
//) {
|
||||||
var currentTime by remember { mutableStateOf(DateTimeUtils.getChineseDateString()) }
|
// var currentTime by remember { mutableStateOf(DateTimeUtils.getChineseDateString()) }
|
||||||
|
//
|
||||||
// 每秒更新一次时间
|
// // 每秒更新一次时间
|
||||||
LaunchedEffect(Unit) {
|
// LaunchedEffect(Unit) {
|
||||||
while (true) {
|
// while (true) {
|
||||||
delay(1000) // 1秒间隔
|
// delay(1000) // 1秒间隔
|
||||||
currentTime = DateTimeUtils.getChineseDateString()
|
// currentTime = DateTimeUtils.getChineseDateString()
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
Row(
|
// Row(
|
||||||
modifier = modifier
|
// modifier = modifier
|
||||||
.fillMaxWidth()
|
// .fillMaxWidth()
|
||||||
.padding(start = 60.dp, end = 60.dp, top = 22.dp),
|
// .padding(start = 60.dp, end = 60.dp, top = 22.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
// verticalAlignment = Alignment.CenterVertically,
|
||||||
horizontalArrangement = Arrangement.SpaceBetween
|
// horizontalArrangement = Arrangement.SpaceBetween
|
||||||
) {
|
// ) {
|
||||||
|
//
|
||||||
Box(modifier = Modifier
|
// Box(modifier = Modifier
|
||||||
.wrapContentSize()
|
// .wrapContentSize()
|
||||||
.clickable(onClick = {
|
// .clickable(onClick = {
|
||||||
MyApp.instance?.run {
|
// MyApp.instance?.run {
|
||||||
startActivity(
|
// startActivity(
|
||||||
Intent(this, FoodCollectionActivity::class.java).apply {
|
// Intent(this, FoodCollectionActivity::class.java).apply {
|
||||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
// addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
}
|
// }
|
||||||
)
|
// )
|
||||||
}
|
|
||||||
})) {
|
|
||||||
Text(
|
|
||||||
text = title,
|
|
||||||
style = TextStyle(
|
|
||||||
fontWeight = FontWeight.Bold,
|
|
||||||
color = colorResource(R.color.title),
|
|
||||||
fontSize = 36.sp
|
|
||||||
),
|
|
||||||
modifier = Modifier
|
|
||||||
.wrapContentSize()
|
|
||||||
.padding(10.dp)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
Spacer(modifier = Modifier.weight(1f))
|
|
||||||
|
|
||||||
if (user != null) {
|
|
||||||
Row(
|
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
|
||||||
modifier = Modifier
|
|
||||||
.height(60.dp)
|
|
||||||
.clickable {
|
|
||||||
onLogoutClick()
|
|
||||||
}) {
|
|
||||||
Text(text = user.name ?: "用户", style = AppTypography.blackTextStyle.medium())
|
|
||||||
Spacer(modifier = Modifier.width(21.dp))
|
|
||||||
Image(
|
|
||||||
modifier = Modifier.size(60.dp),
|
|
||||||
painter = painterResource(R.mipmap.ic_logout),
|
|
||||||
contentDescription = "退出"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Text(
|
|
||||||
// modifier = Modifier.combinedClickable(
|
|
||||||
// onClick = {},
|
|
||||||
// onLongClick = {
|
|
||||||
// onLogoutClick()
|
|
||||||
// }
|
// }
|
||||||
|
// })) {
|
||||||
|
// Text(
|
||||||
|
// text = title,
|
||||||
|
// style = TextStyle(
|
||||||
|
// fontWeight = FontWeight.Bold,
|
||||||
|
// color = colorResource(R.color.title),
|
||||||
|
// fontSize = 36.sp
|
||||||
// ),
|
// ),
|
||||||
text = currentTime,
|
// modifier = Modifier
|
||||||
style = TextStyle(
|
// .wrapContentSize()
|
||||||
fontWeight = FontWeight.Medium,
|
// .padding(10.dp)
|
||||||
color = colorResource(R.color.black),
|
// )
|
||||||
fontSize = 24.sp
|
// }
|
||||||
)
|
//
|
||||||
)
|
// Spacer(modifier = Modifier.weight(1f))
|
||||||
}
|
//
|
||||||
}
|
// if (user != null) {
|
||||||
}
|
// Row(
|
||||||
|
// verticalAlignment = Alignment.CenterVertically,
|
||||||
|
// modifier = Modifier
|
||||||
|
// .height(60.dp)
|
||||||
|
// .clickable {
|
||||||
|
// onLogoutClick()
|
||||||
|
// }) {
|
||||||
|
// Text(text = user.name ?: "用户", style = AppTypography.blackTextStyle.medium())
|
||||||
|
// Spacer(modifier = Modifier.width(21.dp))
|
||||||
|
// Image(
|
||||||
|
// modifier = Modifier.size(60.dp),
|
||||||
|
// painter = painterResource(R.mipmap.ic_logout),
|
||||||
|
// contentDescription = "退出"
|
||||||
|
// )
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// Text(
|
||||||
|
//// modifier = Modifier.combinedClickable(
|
||||||
|
//// onClick = {},
|
||||||
|
//// onLongClick = {
|
||||||
|
//// onLogoutClick()
|
||||||
|
//// }
|
||||||
|
//// ),
|
||||||
|
// text = currentTime,
|
||||||
|
// style = TextStyle(
|
||||||
|
// fontWeight = FontWeight.Medium,
|
||||||
|
// color = colorResource(R.color.black),
|
||||||
|
// fontSize = 24.sp
|
||||||
|
// )
|
||||||
|
// )
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ package com.sw.inbound.utils
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.platform.LocalContext
|
//import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.platform.LocalView
|
//import androidx.compose.ui.platform.LocalView
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Context 工具类
|
* Context 工具类
|
||||||
@@ -17,18 +17,18 @@ object ContextUtils {
|
|||||||
* 获取当前 Composable 的 Activity Context
|
* 获取当前 Composable 的 Activity Context
|
||||||
* 只能在 @Composable 函数中调用
|
* 只能在 @Composable 函数中调用
|
||||||
*/
|
*/
|
||||||
@Composable
|
// @Composable
|
||||||
fun getActivityContext(): Context {
|
// fun getActivityContext(): Context {
|
||||||
return LocalContext.current
|
// return LocalContext.current
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前 Composable 的 View
|
* 获取当前 Composable 的 View
|
||||||
*/
|
*/
|
||||||
@Composable
|
// @Composable
|
||||||
fun getLocalView(): View {
|
// fun getLocalView(): View {
|
||||||
return LocalView.current
|
// return LocalView.current
|
||||||
}
|
// }
|
||||||
|
|
||||||
// ========== 非 Composable 环境获取 ==========
|
// ========== 非 Composable 环境获取 ==========
|
||||||
|
|
||||||
@@ -47,4 +47,4 @@ object ContextUtils {
|
|||||||
"Application context not initialized. Call initAppContext() first."
|
"Application context not initialized. Call initAppContext() first."
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import android.os.Build
|
|||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.os.Process
|
import android.os.Process
|
||||||
import com.sw.inbound.MainActivity
|
import com.sw.inbound.activity.HomeActivity
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
@@ -86,7 +86,7 @@ class CrashHandler private constructor(private val context: Context) :
|
|||||||
private fun restartApp() {
|
private fun restartApp() {
|
||||||
// 延迟1秒后重启应用
|
// 延迟1秒后重启应用
|
||||||
Handler(Looper.getMainLooper()).postDelayed({
|
Handler(Looper.getMainLooper()).postDelayed({
|
||||||
val intent = Intent(context, MainActivity::class.java).apply {
|
val intent = Intent(context, HomeActivity::class.java).apply {
|
||||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,223 +1,223 @@
|
|||||||
package com.sw.inbound.utils
|
//package com.sw.inbound.utils
|
||||||
|
//
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
//import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableIntStateOf
|
//import androidx.compose.runtime.mutableIntStateOf
|
||||||
import androidx.compose.runtime.mutableLongStateOf
|
//import androidx.compose.runtime.mutableLongStateOf
|
||||||
import androidx.compose.runtime.mutableStateOf
|
//import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
//import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
//import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
//import androidx.compose.runtime.setValue
|
||||||
import kotlinx.coroutines.CoroutineScope
|
//import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Job
|
//import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.delay
|
//import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
//import kotlinx.coroutines.launch
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* Jetpack Compose 交互工具集
|
// * Jetpack Compose 交互工具集
|
||||||
* 包含快速点击过滤、防抖、节流、双击检测、长按检测等功能
|
// * 包含快速点击过滤、防抖、节流、双击检测、长按检测等功能
|
||||||
*/
|
// */
|
||||||
object InteractionUtils {
|
//object InteractionUtils {
|
||||||
|
//
|
||||||
// ======================== 点击过滤 ========================
|
// // ======================== 点击过滤 ========================
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 快速点击过滤器
|
// * 快速点击过滤器
|
||||||
* @param minInterval 最小点击间隔时间(毫秒),默认500ms
|
// * @param minInterval 最小点击间隔时间(毫秒),默认500ms
|
||||||
*/
|
// */
|
||||||
class ClickFilter(private val minInterval: Long = 500L) {
|
// class ClickFilter(private val minInterval: Long = 500L) {
|
||||||
private var lastClickTime: Long = 0
|
// private var lastClickTime: Long = 0
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 处理点击事件
|
// * 处理点击事件
|
||||||
* @return Boolean 是否允许此次点击(true=允许,false=拦截)
|
// * @return Boolean 是否允许此次点击(true=允许,false=拦截)
|
||||||
*/
|
// */
|
||||||
fun processClick(): Boolean {
|
// fun processClick(): Boolean {
|
||||||
val currentTime = System.currentTimeMillis()
|
// val currentTime = System.currentTimeMillis()
|
||||||
return if (currentTime - lastClickTime > minInterval) {
|
// return if (currentTime - lastClickTime > minInterval) {
|
||||||
lastClickTime = currentTime
|
// lastClickTime = currentTime
|
||||||
true
|
// true
|
||||||
} else {
|
// } else {
|
||||||
false
|
// false
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 处理点击事件(带回调)
|
// * 处理点击事件(带回调)
|
||||||
*/
|
// */
|
||||||
fun processClick(block: () -> Unit) {
|
// fun processClick(block: () -> Unit) {
|
||||||
if (processClick()) {
|
// if (processClick()) {
|
||||||
block()
|
// block()
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 记住点击过滤器
|
// * 记住点击过滤器
|
||||||
*/
|
// */
|
||||||
@Composable
|
// @Composable
|
||||||
fun rememberClickFilter(minInterval: Long = 500L): ClickFilter {
|
// fun rememberClickFilter(minInterval: Long = 500L): ClickFilter {
|
||||||
return remember { ClickFilter(minInterval) }
|
// return remember { ClickFilter(minInterval) }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// ======================== 防抖处理 ========================
|
// // ======================== 防抖处理 ========================
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 防抖工具类
|
// * 防抖工具类
|
||||||
* @param delayMillis 防抖延迟时间(毫秒)
|
// * @param delayMillis 防抖延迟时间(毫秒)
|
||||||
*/
|
// */
|
||||||
class Debouncer(private val delayMillis: Long) {
|
// class Debouncer(private val delayMillis: Long) {
|
||||||
private var lastActionTime = 0L
|
// private var lastActionTime = 0L
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 执行防抖操作
|
// * 执行防抖操作
|
||||||
* @param block 要执行的代码块
|
// * @param block 要执行的代码块
|
||||||
* @return Boolean 是否实际执行了操作
|
// * @return Boolean 是否实际执行了操作
|
||||||
*/
|
// */
|
||||||
fun debounce(block: () -> Unit): Boolean {
|
// fun debounce(block: () -> Unit): Boolean {
|
||||||
val currentTime = System.currentTimeMillis()
|
// val currentTime = System.currentTimeMillis()
|
||||||
if (currentTime - lastActionTime >= delayMillis) {
|
// if (currentTime - lastActionTime >= delayMillis) {
|
||||||
lastActionTime = currentTime
|
// lastActionTime = currentTime
|
||||||
block()
|
// block()
|
||||||
return true
|
// return true
|
||||||
}
|
// }
|
||||||
return false
|
// return false
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
// ======================== 双击检测 ========================
|
// // ======================== 双击检测 ========================
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 双击检测器
|
// * 双击检测器
|
||||||
*/
|
// */
|
||||||
class DoubleClickDetector(
|
// class DoubleClickDetector(
|
||||||
private val timeout: Long = 500L,
|
// private val timeout: Long = 500L,
|
||||||
private val onSingleClick: () -> Unit = {},
|
// private val onSingleClick: () -> Unit = {},
|
||||||
private val onDoubleClick: () -> Unit
|
// private val onDoubleClick: () -> Unit
|
||||||
) {
|
// ) {
|
||||||
private var clickCount by mutableIntStateOf(0)
|
// private var clickCount by mutableIntStateOf(0)
|
||||||
private var lastClickTime by mutableLongStateOf(0L)
|
// private var lastClickTime by mutableLongStateOf(0L)
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 处理点击事件
|
// * 处理点击事件
|
||||||
*/
|
// */
|
||||||
fun processClick(coroutineScope: CoroutineScope) {
|
// fun processClick(coroutineScope: CoroutineScope) {
|
||||||
val currentTime = System.currentTimeMillis()
|
// val currentTime = System.currentTimeMillis()
|
||||||
if (currentTime - lastClickTime < timeout) {
|
// if (currentTime - lastClickTime < timeout) {
|
||||||
clickCount++
|
// clickCount++
|
||||||
if (clickCount == 2) {
|
// if (clickCount == 2) {
|
||||||
onDoubleClick()
|
// onDoubleClick()
|
||||||
clickCount = 0
|
// clickCount = 0
|
||||||
}
|
// }
|
||||||
} else {
|
// } else {
|
||||||
clickCount = 1
|
// clickCount = 1
|
||||||
coroutineScope.launch {
|
// coroutineScope.launch {
|
||||||
delay(timeout)
|
// delay(timeout)
|
||||||
if (clickCount == 1) {
|
// if (clickCount == 1) {
|
||||||
onSingleClick()
|
// onSingleClick()
|
||||||
}
|
// }
|
||||||
clickCount = 0
|
// clickCount = 0
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
lastClickTime = currentTime
|
// lastClickTime = currentTime
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 记住双击检测器
|
// * 记住双击检测器
|
||||||
*/
|
// */
|
||||||
@Composable
|
// @Composable
|
||||||
fun rememberDoubleClickDetector(
|
// fun rememberDoubleClickDetector(
|
||||||
timeout: Long = 300L,
|
// timeout: Long = 300L,
|
||||||
onSingleClick: () -> Unit = {},
|
// onSingleClick: () -> Unit = {},
|
||||||
onDoubleClick: () -> Unit
|
// onDoubleClick: () -> Unit
|
||||||
): () -> Unit {
|
// ): () -> Unit {
|
||||||
val detector = remember { DoubleClickDetector(timeout, onSingleClick, onDoubleClick) }
|
// val detector = remember { DoubleClickDetector(timeout, onSingleClick, onDoubleClick) }
|
||||||
val scope = rememberCoroutineScope()
|
// val scope = rememberCoroutineScope()
|
||||||
|
//
|
||||||
return {
|
// return {
|
||||||
detector.processClick(scope)
|
// detector.processClick(scope)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// ======================== 长按检测 ========================
|
// // ======================== 长按检测 ========================
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 长按检测器
|
// * 长按检测器
|
||||||
*/
|
// */
|
||||||
class LongPressDetector(
|
// class LongPressDetector(
|
||||||
private val delay: Long = 1000L,
|
// private val delay: Long = 1000L,
|
||||||
private val onLongPress: () -> Unit,
|
// private val onLongPress: () -> Unit,
|
||||||
private val onClick: () -> Unit = {}
|
// private val onClick: () -> Unit = {}
|
||||||
) {
|
// ) {
|
||||||
private var pressJob: Job? = null
|
// private var pressJob: Job? = null
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 处理按压事件
|
// * 处理按压事件
|
||||||
*/
|
// */
|
||||||
fun handlePress(coroutineScope: CoroutineScope) {
|
// fun handlePress(coroutineScope: CoroutineScope) {
|
||||||
pressJob = coroutineScope.launch {
|
// pressJob = coroutineScope.launch {
|
||||||
delay(delay)
|
// delay(delay)
|
||||||
onLongPress()
|
// onLongPress()
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 处理释放事件
|
// * 处理释放事件
|
||||||
*/
|
// */
|
||||||
fun handleRelease() {
|
// fun handleRelease() {
|
||||||
pressJob?.cancel()
|
// pressJob?.cancel()
|
||||||
pressJob = null
|
// pressJob = null
|
||||||
onClick()
|
// onClick()
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 记住长按检测器
|
// * 记住长按检测器
|
||||||
*/
|
// */
|
||||||
@Composable
|
// @Composable
|
||||||
fun rememberLongPressDetector(
|
// fun rememberLongPressDetector(
|
||||||
delay: Long = 1000L,
|
// delay: Long = 1000L,
|
||||||
onLongPress: () -> Unit,
|
// onLongPress: () -> Unit,
|
||||||
onClick: () -> Unit = {}
|
// onClick: () -> Unit = {}
|
||||||
): Pair<() -> Unit, () -> Unit> {
|
// ): Pair<() -> Unit, () -> Unit> {
|
||||||
val detector = remember { LongPressDetector(delay, onLongPress, onClick) }
|
// val detector = remember { LongPressDetector(delay, onLongPress, onClick) }
|
||||||
val scope = rememberCoroutineScope()
|
// val scope = rememberCoroutineScope()
|
||||||
|
//
|
||||||
return Pair(
|
// return Pair(
|
||||||
first = { detector.handlePress(scope) },
|
// first = { detector.handlePress(scope) },
|
||||||
second = { detector.handleRelease() }
|
// second = { detector.handleRelease() }
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// ======================== 组合工具 ========================
|
// // ======================== 组合工具 ========================
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 带状态的按钮控制器
|
// * 带状态的按钮控制器
|
||||||
*/
|
// */
|
||||||
class StatefulButtonController {
|
// class StatefulButtonController {
|
||||||
var isLoading by mutableStateOf(false)
|
// var isLoading by mutableStateOf(false)
|
||||||
private val clickFilter = ClickFilter()
|
// private val clickFilter = ClickFilter()
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 处理按钮点击
|
// * 处理按钮点击
|
||||||
*/
|
// */
|
||||||
suspend fun handleClick(block: suspend () -> Unit) {
|
// suspend fun handleClick(block: suspend () -> Unit) {
|
||||||
if (clickFilter.processClick()) {
|
// if (clickFilter.processClick()) {
|
||||||
isLoading = true
|
// isLoading = true
|
||||||
try {
|
// try {
|
||||||
block()
|
// block()
|
||||||
} finally {
|
// } finally {
|
||||||
isLoading = false
|
// isLoading = false
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 记住带状态的按钮控制器
|
// * 记住带状态的按钮控制器
|
||||||
*/
|
// */
|
||||||
@Composable
|
// @Composable
|
||||||
fun rememberStatefulButtonController(): StatefulButtonController {
|
// fun rememberStatefulButtonController(): StatefulButtonController {
|
||||||
return remember { StatefulButtonController() }
|
// return remember { StatefulButtonController() }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
@@ -5,9 +5,9 @@ import android.net.Uri
|
|||||||
import androidx.camera.core.ImageCapture
|
import androidx.camera.core.ImageCapture
|
||||||
import androidx.camera.core.ImageCaptureException
|
import androidx.camera.core.ImageCaptureException
|
||||||
import androidx.camera.view.CameraController
|
import androidx.camera.view.CameraController
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.remember
|
//import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.platform.LocalContext
|
//import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -101,21 +101,21 @@ class PhotoCaptureHelper(
|
|||||||
* @param onError (String) -> Unit 拍照失败回调
|
* @param onError (String) -> Unit 拍照失败回调
|
||||||
* @return Pair<PhotoCaptureHelper, () -> Unit> 返回工具类实例和拍照函数
|
* @return Pair<PhotoCaptureHelper, () -> Unit> 返回工具类实例和拍照函数
|
||||||
*/
|
*/
|
||||||
@Composable
|
//@Composable
|
||||||
fun rememberPhotoCapture(
|
//fun rememberPhotoCapture(
|
||||||
cameraController: CameraController,
|
// cameraController: CameraController,
|
||||||
onSuccess: (Uri) -> Unit = {},
|
// onSuccess: (Uri) -> Unit = {},
|
||||||
onError: (String) -> Unit = {}
|
// onError: (String) -> Unit = {}
|
||||||
): Pair<PhotoCaptureHelper, () -> Unit> {
|
//): Pair<PhotoCaptureHelper, () -> Unit> {
|
||||||
val context = LocalContext.current
|
// val context = LocalContext.current
|
||||||
val photoCaptureHelper = remember {
|
// val photoCaptureHelper = remember {
|
||||||
PhotoCaptureHelper(
|
// PhotoCaptureHelper(
|
||||||
context = context,
|
// context = context,
|
||||||
cameraController = cameraController,
|
// cameraController = cameraController,
|
||||||
onSuccess = onSuccess,
|
// onSuccess = onSuccess,
|
||||||
onError = onError
|
// onError = onError
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return Pair(photoCaptureHelper) { photoCaptureHelper.takePhoto() }
|
// return Pair(photoCaptureHelper) { photoCaptureHelper.takePhoto() }
|
||||||
}
|
//}
|
||||||
|
|||||||
@@ -1,56 +1,56 @@
|
|||||||
package com.sw.inbound.utils
|
//package com.sw.inbound.utils
|
||||||
|
//
|
||||||
import androidx.compose.foundation.background
|
//import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Box
|
//import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
//import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
//import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
//import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material3.Text
|
//import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
//import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.getValue
|
//import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
//import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.setValue
|
//import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
//import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
//import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.unit.dp
|
//import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
//import androidx.compose.ui.unit.sp
|
||||||
import kotlinx.coroutines.delay
|
//import kotlinx.coroutines.delay
|
||||||
|
//
|
||||||
object ToastUtils {
|
//object ToastUtils {
|
||||||
private var show by mutableStateOf(false)
|
// private var show by mutableStateOf(false)
|
||||||
private var message by mutableStateOf("")
|
// private var message by mutableStateOf("")
|
||||||
|
//
|
||||||
fun showToast(msg: String) {
|
// fun showToast(msg: String) {
|
||||||
message = msg
|
// message = msg
|
||||||
show = true
|
// show = true
|
||||||
// Toast.makeText(ContextUtils.getAppContext(), msg, Toast.LENGTH_LONG).show()
|
//// Toast.makeText(ContextUtils.getAppContext(), msg, Toast.LENGTH_LONG).show()
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
@Composable
|
// @Composable
|
||||||
fun ToastComposable() {
|
// fun ToastComposable() {
|
||||||
if (show) {
|
// if (show) {
|
||||||
LaunchedEffect(Unit) {
|
// LaunchedEffect(Unit) {
|
||||||
delay(2000) // 自动2秒后消失
|
// delay(2000) // 自动2秒后消失
|
||||||
show = false
|
// show = false
|
||||||
}
|
// }
|
||||||
Box(
|
// Box(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
// .fillMaxWidth()
|
//// .fillMaxWidth()
|
||||||
.fillMaxSize()
|
// .fillMaxSize()
|
||||||
.padding(bottom = 156.dp),
|
// .padding(bottom = 156.dp),
|
||||||
contentAlignment = Alignment.BottomCenter
|
// contentAlignment = Alignment.BottomCenter
|
||||||
) {
|
// ) {
|
||||||
Text(
|
// Text(
|
||||||
text = message,
|
// text = message,
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.background(Color.Black.copy(alpha = 0.7f), RoundedCornerShape(8.dp))
|
// .background(Color.Black.copy(alpha = 0.7f), RoundedCornerShape(8.dp))
|
||||||
.padding(horizontal = 24.dp, vertical = 12.dp),
|
// .padding(horizontal = 24.dp, vertical = 12.dp),
|
||||||
color = Color.White,
|
// color = Color.White,
|
||||||
fontSize = 24.sp
|
// fontSize = 24.sp
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
@@ -14,7 +14,7 @@ import com.sw.inbound.network.LoadingState
|
|||||||
import com.sw.inbound.objbox.FoodModule
|
import com.sw.inbound.objbox.FoodModule
|
||||||
import com.sw.inbound.repository.RemoteRepository
|
import com.sw.inbound.repository.RemoteRepository
|
||||||
import com.sw.inbound.utils.SPUtil
|
import com.sw.inbound.utils.SPUtil
|
||||||
import com.sw.inbound.utils.ToastUtils
|
//import com.sw.inbound.utils.ToastUtils
|
||||||
import com.sw.inbound.utils.ext.toType
|
import com.sw.inbound.utils.ext.toType
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
@@ -113,7 +113,7 @@ abstract class BaseViewModel(
|
|||||||
is HttpException -> "服务器错误: ${e.code()}"
|
is HttpException -> "服务器错误: ${e.code()}"
|
||||||
else -> "操作失败: ${e.message}"
|
else -> "操作失败: ${e.message}"
|
||||||
}
|
}
|
||||||
ToastUtils.showToast(message)
|
//ToastUtils.showToast(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
// fun startSensorScale() {
|
// fun startSensorScale() {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import com.sw.inbound.model.response.EquipmentInfo
|
|||||||
import com.sw.inbound.repository.RemoteRepository
|
import com.sw.inbound.repository.RemoteRepository
|
||||||
import com.sw.inbound.utils.GsonUtils
|
import com.sw.inbound.utils.GsonUtils
|
||||||
import com.sw.inbound.utils.SPUtil
|
import com.sw.inbound.utils.SPUtil
|
||||||
import com.sw.inbound.utils.ToastUtils
|
//import com.sw.inbound.utils.ToastUtils
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
@@ -45,7 +45,7 @@ class DeviceViewModel @Inject constructor(
|
|||||||
Timber.e(e)
|
Timber.e(e)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ToastUtils.showToast("获取设备信息失败")
|
//ToastUtils.showToast("获取设备信息失败")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
package com.sw.inbound.viewmodel
|
package com.sw.inbound.viewmodel
|
||||||
|
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.setValue
|
|
||||||
import com.sw.inbound.GlobalData
|
import com.sw.inbound.GlobalData
|
||||||
import com.sw.inbound.GlobalKey
|
import com.sw.inbound.GlobalKey
|
||||||
import com.sw.inbound.model.request.LoginParam
|
import com.sw.inbound.model.request.LoginParam
|
||||||
|
|||||||
Reference in New Issue
Block a user