From 2c3ebd86f98f2ce0a66580880918dc1899fb2390 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Fri, 6 Mar 2026 09:28:55 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=B3=A8=E9=87=8A=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=20Compose=20=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E7=BB=9F=E4=B8=80=E5=85=A5=E5=8F=A3=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E4=B8=BA=20HomeActivity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 注释掉全部 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 --- app/build.gradle.kts | 40 +- .../main/java/com/sw/inbound/InitActivity.kt | 362 ++++----- .../main/java/com/sw/inbound/MainActivity.kt | 100 +-- .../inbound/activity/PurchaseOrderActivity.kt | 1 - .../main/java/com/sw/inbound/ext/BorderExt.kt | 88 +-- .../main/java/com/sw/inbound/ext/TextExt.kt | 66 +- .../com/sw/inbound/network/LoadingState.kt | 27 +- .../com/sw/inbound/receiver/BootReceiver.kt | 4 +- .../com/sw/inbound/sdk/SensorScaleUtils.kt | 6 +- .../java/com/sw/inbound/ui/NavController.kt | 326 ++++---- .../java/com/sw/inbound/ui/page/HomeScreen.kt | 240 +++--- .../sw/inbound/ui/page/PurchaseOrderScreen.kt | 698 +++++++++--------- .../com/sw/inbound/ui/theme/AppTypography.kt | 128 ++-- .../java/com/sw/inbound/ui/theme/Color.kt | 44 +- .../java/com/sw/inbound/ui/theme/Theme.kt | 114 +-- .../main/java/com/sw/inbound/ui/theme/Type.kt | 68 +- .../sw/inbound/ui/weight/BottomActionBar.kt | 210 +++--- .../inbound/ui/weight/CameraCaptureLayout.kt | 386 +++++----- .../com/sw/inbound/ui/weight/CameraPreview.kt | 104 +-- .../com/sw/inbound/ui/weight/CustomButton.kt | 216 +++--- .../inbound/ui/weight/CustomSearchScreen.kt | 198 ++--- .../ui/weight/CustomSingleRightText.kt | 58 +- .../sw/inbound/ui/weight/CustomTextField.kt | 446 +++++------ .../com/sw/inbound/ui/weight/CustomWidget.kt | 246 +++--- .../ui/weight/SelfProcurementListItem.kt | 288 ++++---- .../com/sw/inbound/ui/weight/TopTitleBar.kt | 280 +++---- .../java/com/sw/inbound/utils/ContextUtils.kt | 24 +- .../java/com/sw/inbound/utils/CrashHandler.kt | 4 +- .../com/sw/inbound/utils/InteractionUtils.kt | 446 +++++------ .../sw/inbound/utils/PhotoCaptureHelper.kt | 42 +- .../java/com/sw/inbound/utils/ToastUtils.kt | 112 +-- .../com/sw/inbound/viewmodel/BaseViewModel.kt | 4 +- .../sw/inbound/viewmodel/DeviceViewModel.kt | 4 +- .../com/sw/inbound/viewmodel/UserViewModel.kt | 3 - 34 files changed, 2691 insertions(+), 2692 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8278834..ac85d58 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -11,7 +11,7 @@ plugins { id("kotlin-parcelize") // id("compose.compiler") kotlin("kapt") - alias(libs.plugins.kotlin.compose) +// alias(libs.plugins.kotlin.compose) } android { signingConfigs { @@ -63,7 +63,7 @@ android { jvmTarget = "11" } buildFeatures { - compose = true +// compose = true viewBinding = true buildConfig = true } @@ -83,12 +83,12 @@ dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) - implementation(libs.androidx.activity.compose) - implementation(platform(libs.androidx.compose.bom)) - implementation(libs.androidx.ui) - implementation(libs.androidx.ui.graphics) - implementation(libs.androidx.ui.tooling.preview) - implementation(libs.androidx.material3) + implementation("androidx.activity:activity-ktx:1.8.0") +// implementation(platform(libs.androidx.compose.bom)) +// implementation(libs.androidx.ui) +// implementation(libs.androidx.ui.graphics) +// implementation(libs.androidx.ui.tooling.preview) +// implementation(libs.androidx.material3) implementation( fileTree( mapOf( @@ -100,11 +100,11 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) - androidTestImplementation(platform(libs.androidx.compose.bom)) - androidTestImplementation(libs.androidx.ui.test.junit4) - debugImplementation(libs.androidx.ui.tooling) - debugImplementation(libs.androidx.ui.test.manifest) - implementation(libs.androidx.navigation.compose) +// androidTestImplementation(platform(libs.androidx.compose.bom)) +// androidTestImplementation(libs.androidx.ui.test.junit4) +// debugImplementation(libs.androidx.ui.tooling) +// debugImplementation(libs.androidx.ui.test.manifest) +// implementation(libs.androidx.navigation.compose) // camerax implementation(libs.androidx.camera.core) @@ -114,12 +114,12 @@ dependencies { implementation(libs.androidx.camera.extensions) // 权限申请 - implementation(libs.accompanist.permissions) +// implementation(libs.accompanist.permissions) // hilt注入 implementation(libs.hilt.android) ksp(libs.hilt.android.compiler) - implementation(libs.androidx.hilt.navigation.compose) +// implementation(libs.androidx.hilt.navigation.compose) // retrofit网络请求 implementation(libs.retrofit) @@ -131,8 +131,8 @@ dependencies { implementation(libs.gson) // 日志打印 implementation(libs.timber) - // 图片显示 - implementation("io.coil-kt:coil-compose:2.4.0") + // 图片显示(非Compose标准版) + implementation("io.coil-kt:coil:2.4.0") implementation(libs.core) implementation(libs.android.core) @@ -140,8 +140,8 @@ dependencies { implementation("androidx.recyclerview:recyclerview:1.4.0") - implementation("androidx.compose.foundation:foundation:1.7.0") - implementation("androidx.compose.foundation:foundation-layout:1.7.0") +// implementation("androidx.compose.foundation:foundation:1.7.0") +// implementation("androidx.compose.foundation:foundation-layout:1.7.0") implementation (libs.pytorch.android) implementation (libs.pytorch.android.torchvision) @@ -158,4 +158,4 @@ dependencies { } -apply(plugin = "io.objectbox") \ No newline at end of file +apply(plugin = "io.objectbox") diff --git a/app/src/main/java/com/sw/inbound/InitActivity.kt b/app/src/main/java/com/sw/inbound/InitActivity.kt index 0fdb357..0e12c96 100644 --- a/app/src/main/java/com/sw/inbound/InitActivity.kt +++ b/app/src/main/java/com/sw/inbound/InitActivity.kt @@ -1,183 +1,183 @@ -package com.sw.inbound - -import android.content.Intent -import android.os.Bundle -import android.view.WindowManager -import androidx.activity.ComponentActivity -import androidx.activity.compose.setContent -import androidx.activity.enableEdgeToEdge -import androidx.compose.animation.AnimatedVisibility -import androidx.compose.animation.expandIn -import androidx.compose.animation.shrinkOut -import androidx.compose.foundation.Image -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.navigationBars -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.layout.windowInsetsBottomHeight -import androidx.compose.foundation.layout.wrapContentWidth -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Button -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.State -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.asImageBitmap -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.text.font.FontWeight -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 com.sw.inbound.utils.AppUtil -import com.sw.inbound.utils.QRCodeUtil -import com.sw.inbound.viewmodel.DeviceViewModel -import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.StateFlow - -/** - * 设备初始化界面 - */ -@AndroidEntryPoint -class InitActivity : ComponentActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - enableEdgeToEdge() - window.setFlags( - 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() - ) { -// 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 -// ) +//package com.sw.inbound +// +//import android.content.Intent +//import android.os.Bundle +//import android.view.WindowManager +//import androidx.activity.ComponentActivity +////import androidx.activity.compose.setContent +//import androidx.activity.enableEdgeToEdge +////import androidx.compose.animation.AnimatedVisibility +////import androidx.compose.animation.expandIn +////import androidx.compose.animation.shrinkOut +////import androidx.compose.foundation.Image +////import androidx.compose.foundation.background +////import androidx.compose.foundation.layout.Column +////import androidx.compose.foundation.layout.Spacer +////import androidx.compose.foundation.layout.WindowInsets +////import androidx.compose.foundation.layout.fillMaxSize +////import androidx.compose.foundation.layout.navigationBars +////import androidx.compose.foundation.layout.padding +////import androidx.compose.foundation.layout.size +////import androidx.compose.foundation.layout.width +////import androidx.compose.foundation.layout.windowInsetsBottomHeight +////import androidx.compose.foundation.layout.wrapContentWidth +////import androidx.compose.foundation.shape.RoundedCornerShape +////import androidx.compose.material3.Button +////import androidx.compose.material3.ButtonDefaults +////import androidx.compose.material3.Text +////import androidx.compose.runtime.Composable +////import androidx.compose.runtime.LaunchedEffect +////import androidx.compose.runtime.State +////import androidx.compose.runtime.collectAsState +////import androidx.compose.runtime.getValue +////import androidx.compose.ui.Alignment +////import androidx.compose.ui.Modifier +////import androidx.compose.ui.graphics.Color +////import androidx.compose.ui.graphics.asImageBitmap +////import androidx.compose.ui.platform.LocalContext +////import androidx.compose.ui.res.painterResource +////import androidx.compose.ui.text.font.FontWeight +////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 com.sw.inbound.utils.AppUtil +////import com.sw.inbound.utils.QRCodeUtil +////import com.sw.inbound.viewmodel.DeviceViewModel +//import dagger.hilt.android.AndroidEntryPoint +////import kotlinx.coroutines.delay +////import kotlinx.coroutines.flow.StateFlow +// +///** +// * 设备初始化界面 +// */ +//@AndroidEntryPoint +//class InitActivity : ComponentActivity() { +// override fun onCreate(savedInstanceState: Bundle?) { +// super.onCreate(savedInstanceState) +// enableEdgeToEdge() +// window.setFlags( +// WindowManager.LayoutParams.FLAG_FULLSCREEN, +// WindowManager.LayoutParams.FLAG_FULLSCREEN // ) -// binding.btnInit.setOnClickListener { -// deviceViewModel.getDeviceToken() -// } +//// setContent { +//// InitScreen() +//// } // } - - private fun goLoginActivity() { - val intent = Intent(this, MainActivity::class.java) - startActivity(intent) - finish() - } - - -} \ No newline at end of file +// +//// 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() +//// ) { +////// 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() +// } +// +// +//} diff --git a/app/src/main/java/com/sw/inbound/MainActivity.kt b/app/src/main/java/com/sw/inbound/MainActivity.kt index 086b553..817be9a 100644 --- a/app/src/main/java/com/sw/inbound/MainActivity.kt +++ b/app/src/main/java/com/sw/inbound/MainActivity.kt @@ -1,50 +1,50 @@ -package com.sw.inbound - -import android.os.Bundle -import android.view.WindowManager -import androidx.activity.ComponentActivity -import androidx.activity.compose.setContent -import androidx.activity.enableEdgeToEdge -import androidx.activity.viewModels -import androidx.lifecycle.lifecycleScope -import com.sw.inbound.objbox.FoodModule -import com.sw.inbound.sdk.SensorScaleUtils -import com.sw.inbound.ui.AppScreen -import com.sw.inbound.utils.ThreadUtils -import com.sw.inbound.viewmodel.ReceiptViewModel -import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.launch - -@AndroidEntryPoint -class MainActivity : ComponentActivity() { - - val viewModel: ReceiptViewModel by viewModels() - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - enableEdgeToEdge() - - window.setFlags( - WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN - ) - setContent { - AppScreen(onBackRequest = { - finish() - }) - } - SensorScaleUtils.startScale(autoScale = true) - lifecycleScope.launch { - FoodModule.init(this@MainActivity) - } - } - - override fun onDestroy() { - SensorScaleUtils.closeScale() - ThreadUtils.release() - super.onDestroy() - } -} - - - +//package com.sw.inbound +// +//import android.os.Bundle +//import android.view.WindowManager +//import androidx.activity.ComponentActivity +////import androidx.activity.compose.setContent +//import androidx.activity.enableEdgeToEdge +//import androidx.activity.viewModels +//import androidx.lifecycle.lifecycleScope +//import com.sw.inbound.objbox.FoodModule +//import com.sw.inbound.sdk.SensorScaleUtils +////import com.sw.inbound.ui.AppScreen +//import com.sw.inbound.utils.ThreadUtils +//import com.sw.inbound.viewmodel.ReceiptViewModel +//import dagger.hilt.android.AndroidEntryPoint +//import kotlinx.coroutines.launch +// +//@AndroidEntryPoint +//class MainActivity : ComponentActivity() { +// +// val viewModel: ReceiptViewModel by viewModels() +// +// override fun onCreate(savedInstanceState: Bundle?) { +// super.onCreate(savedInstanceState) +// enableEdgeToEdge() +// +// window.setFlags( +// WindowManager.LayoutParams.FLAG_FULLSCREEN, +// WindowManager.LayoutParams.FLAG_FULLSCREEN +// ) +//// setContent { +//// AppScreen(onBackRequest = { +//// finish() +//// }) +//// } +// SensorScaleUtils.startScale(autoScale = true) +// lifecycleScope.launch { +// FoodModule.init(this@MainActivity) +// } +// } +// +// override fun onDestroy() { +// SensorScaleUtils.closeScale() +// ThreadUtils.release() +// super.onDestroy() +// } +//} +// +// +// diff --git a/app/src/main/java/com/sw/inbound/activity/PurchaseOrderActivity.kt b/app/src/main/java/com/sw/inbound/activity/PurchaseOrderActivity.kt index 20409dd..c4a78e3 100644 --- a/app/src/main/java/com/sw/inbound/activity/PurchaseOrderActivity.kt +++ b/app/src/main/java/com/sw/inbound/activity/PurchaseOrderActivity.kt @@ -4,7 +4,6 @@ import android.annotation.SuppressLint import android.os.Bundle import com.sw.inbound.base.BaseActivity import androidx.activity.viewModels -import androidx.compose.runtime.collectAsState import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.sw.inbound.R diff --git a/app/src/main/java/com/sw/inbound/ext/BorderExt.kt b/app/src/main/java/com/sw/inbound/ext/BorderExt.kt index c92c76c..489ffa3 100644 --- a/app/src/main/java/com/sw/inbound/ext/BorderExt.kt +++ b/app/src/main/java/com/sw/inbound/ext/BorderExt.kt @@ -1,44 +1,44 @@ -package com.sw.inbound.ext - -import androidx.compose.ui.Modifier -import androidx.compose.ui.composed -import androidx.compose.ui.draw.drawWithCache -import androidx.compose.ui.geometry.CornerRadius -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.PathEffect -import androidx.compose.ui.graphics.drawscope.Stroke -import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.unit.Dp -import androidx.compose.ui.unit.dp - -/** - * 虚线边框 - */ -fun Modifier.dashedBorder( - strokeWidth: Dp = 2.dp, - color: Color = Color(0xFFDCDCF0), - cornerRadiusDp: Dp = 10.dp -) = composed( - factory = { - val density = LocalDensity.current - val strokeWidthPx = density.run { strokeWidth.toPx() } - val cornerRadiusPx = density.run { cornerRadiusDp.toPx() } - - this.then( - Modifier.drawWithCache { - onDrawBehind { - val stroke = Stroke( - width = strokeWidthPx, - pathEffect = PathEffect.dashPathEffect(floatArrayOf(10f, 10f), 0f) - ) - - drawRoundRect( - color = color, - style = stroke, - cornerRadius = CornerRadius(cornerRadiusPx) - ) - } - } - ) - } -) \ No newline at end of file +//package com.sw.inbound.ext +// +//import androidx.compose.ui.Modifier +//import androidx.compose.ui.composed +//import androidx.compose.ui.draw.drawWithCache +//import androidx.compose.ui.geometry.CornerRadius +//import androidx.compose.ui.graphics.Color +//import androidx.compose.ui.graphics.PathEffect +//import androidx.compose.ui.graphics.drawscope.Stroke +//import androidx.compose.ui.platform.LocalDensity +//import androidx.compose.ui.unit.Dp +//import androidx.compose.ui.unit.dp +// +///** +// * 虚线边框 +// */ +//fun Modifier.dashedBorder( +// strokeWidth: Dp = 2.dp, +// color: Color = Color(0xFFDCDCF0), +// cornerRadiusDp: Dp = 10.dp +//) = composed( +// factory = { +// val density = LocalDensity.current +// val strokeWidthPx = density.run { strokeWidth.toPx() } +// val cornerRadiusPx = density.run { cornerRadiusDp.toPx() } +// +// this.then( +// Modifier.drawWithCache { +// onDrawBehind { +// val stroke = Stroke( +// width = strokeWidthPx, +// pathEffect = PathEffect.dashPathEffect(floatArrayOf(10f, 10f), 0f) +// ) +// +// drawRoundRect( +// color = color, +// style = stroke, +// cornerRadius = CornerRadius(cornerRadiusPx) +// ) +// } +// } +// ) +// } +//) \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ext/TextExt.kt b/app/src/main/java/com/sw/inbound/ext/TextExt.kt index 521c3f0..4096a6f 100644 --- a/app/src/main/java/com/sw/inbound/ext/TextExt.kt +++ b/app/src/main/java/com/sw/inbound/ext/TextExt.kt @@ -1,33 +1,33 @@ -package com.sw.inbound.ext - -import androidx.annotation.ColorRes -import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.colorResource -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.TextUnit -import androidx.compose.ui.unit.sp - -// 快速修改颜色 -fun TextStyle.withColor(color: Color): TextStyle = this.copy(color = color) - -@Composable -fun TextStyle.withColorRes(@ColorRes colorRes: Int): TextStyle { - return this.copy(color = colorResource(id = colorRes)) -} - -// 快速修改字体大小 -fun TextStyle.withSize(size: TextUnit): TextStyle = this.copy(fontSize = size) - -fun TextStyle.withSizeSp(sp: Float): TextStyle = this.copy(fontSize = sp.sp) - -// 快速修改字体粗细 -fun TextStyle.withWeight(weight: FontWeight): TextStyle = this.copy(fontWeight = weight) - -fun TextStyle.bold(): TextStyle = this.copy(fontWeight = FontWeight.Bold) -fun TextStyle.medium(): TextStyle = this.copy(fontWeight = FontWeight.Medium) -fun TextStyle.light(): TextStyle = this.copy(fontWeight = FontWeight.Light) - -fun TextStyle.textAlign(textAlign: TextAlign): TextStyle = this.copy(textAlign = textAlign) +//package com.sw.inbound.ext +// +//import androidx.annotation.ColorRes +//import androidx.compose.runtime.Composable +//import androidx.compose.ui.graphics.Color +//import androidx.compose.ui.res.colorResource +//import androidx.compose.ui.text.TextStyle +//import androidx.compose.ui.text.font.FontWeight +//import androidx.compose.ui.text.style.TextAlign +//import androidx.compose.ui.unit.TextUnit +//import androidx.compose.ui.unit.sp +// +//// 快速修改颜色 +//fun TextStyle.withColor(color: Color): TextStyle = this.copy(color = color) +// +//@Composable +//fun TextStyle.withColorRes(@ColorRes colorRes: Int): TextStyle { +// return this.copy(color = colorResource(id = colorRes)) +//} +// +//// 快速修改字体大小 +//fun TextStyle.withSize(size: TextUnit): TextStyle = this.copy(fontSize = size) +// +//fun TextStyle.withSizeSp(sp: Float): TextStyle = this.copy(fontSize = sp.sp) +// +//// 快速修改字体粗细 +//fun TextStyle.withWeight(weight: FontWeight): TextStyle = this.copy(fontWeight = weight) +// +//fun TextStyle.bold(): TextStyle = this.copy(fontWeight = FontWeight.Bold) +//fun TextStyle.medium(): TextStyle = this.copy(fontWeight = FontWeight.Medium) +//fun TextStyle.light(): TextStyle = this.copy(fontWeight = FontWeight.Light) +// +//fun TextStyle.textAlign(textAlign: TextAlign): TextStyle = this.copy(textAlign = textAlign) diff --git a/app/src/main/java/com/sw/inbound/network/LoadingState.kt b/app/src/main/java/com/sw/inbound/network/LoadingState.kt index ba1960c..c1bf264 100644 --- a/app/src/main/java/com/sw/inbound/network/LoadingState.kt +++ b/app/src/main/java/com/sw/inbound/network/LoadingState.kt @@ -1,19 +1,22 @@ package com.sw.inbound.network -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.setValue -import java.util.concurrent.atomic.AtomicInteger +//import androidx.compose.runtime.getValue +//import androidx.compose.runtime.mutableStateOf +//import androidx.compose.runtime.setValue +//import java.util.concurrent.atomic.AtomicInteger /** - * 进度条状态 + * 进度条状态(Compose 相关逻辑已注释,show/hide 保留为空方法供外部调用) */ object LoadingState { - private var _isLoading by mutableStateOf(false) - val isLoading: Boolean get() = _isLoading +// private var _isLoading by mutableStateOf(false) +// 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() = counter.incrementAndGet().let { if (it == 1) _isLoading = true } - fun hide() = counter.decrementAndGet().let { if (it <= 0) _isLoading = false } -} \ No newline at end of file + fun show() = Unit + fun hide() = Unit +} diff --git a/app/src/main/java/com/sw/inbound/receiver/BootReceiver.kt b/app/src/main/java/com/sw/inbound/receiver/BootReceiver.kt index 9750633..67c98dc 100644 --- a/app/src/main/java/com/sw/inbound/receiver/BootReceiver.kt +++ b/app/src/main/java/com/sw/inbound/receiver/BootReceiver.kt @@ -3,7 +3,7 @@ package com.sw.inbound.receiver import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import com.sw.inbound.MainActivity +import com.sw.inbound.activity.HomeActivity import timber.log.Timber /** @@ -14,7 +14,7 @@ class BootReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (Intent.ACTION_BOOT_COMPLETED == intent.action) { Timber.d("设备启动完成,开始执行自启动逻辑") - val intent = Intent(context, MainActivity::class.java) + val intent = Intent(context, HomeActivity::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) context.startActivity(intent) } diff --git a/app/src/main/java/com/sw/inbound/sdk/SensorScaleUtils.kt b/app/src/main/java/com/sw/inbound/sdk/SensorScaleUtils.kt index f800a01..20bee13 100644 --- a/app/src/main/java/com/sw/inbound/sdk/SensorScaleUtils.kt +++ b/app/src/main/java/com/sw/inbound/sdk/SensorScaleUtils.kt @@ -3,7 +3,7 @@ package com.sw.inbound.sdk import android.os.Handler import android.os.Looper 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.OnScaleResult import kotlinx.coroutines.delay @@ -52,7 +52,7 @@ object SensorScaleUtils { isValidWeight = false Timber.e("fail code = $errCode") Handler(Looper.getMainLooper()).post { - ToastUtils.showToast("秤读取数据异常") + //ToastUtils.showToast("秤读取数据异常") startScale() } } @@ -115,7 +115,7 @@ object SensorScaleUtils { fun tare() { mSensorScale?.tare { Timber.d("去皮置零操作成功") - ToastUtils.showToast("去皮置零操作成功") + //ToastUtils.showToast("去皮置零操作成功") } } diff --git a/app/src/main/java/com/sw/inbound/ui/NavController.kt b/app/src/main/java/com/sw/inbound/ui/NavController.kt index e95460b..8c4a555 100644 --- a/app/src/main/java/com/sw/inbound/ui/NavController.kt +++ b/app/src/main/java/com/sw/inbound/ui/NavController.kt @@ -1,174 +1,174 @@ -package com.sw.inbound.ui - -import androidx.compose.animation.core.tween -import androidx.compose.animation.fadeIn -import androidx.compose.animation.fadeOut -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Scaffold -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.res.painterResource -import androidx.navigation.NavHostController -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable -import androidx.navigation.compose.currentBackStackEntryAsState -import androidx.navigation.compose.rememberNavController -import com.sw.inbound.GlobalKey -import com.sw.inbound.R -import com.sw.inbound.ui.page.HomeScreen -import com.sw.inbound.ui.page.PurchaseOrderScreen -import com.sw.inbound.utils.SPUtil -import com.sw.inbound.utils.ToastUtils - -@Composable -fun AppScreen( - onBackRequest: () -> Unit -) { - val navController = rememberNavController() - val currentBackStackEntry by navController.currentBackStackEntryAsState() - var canBack by remember { mutableStateOf(false) } - - // 拦截物理返回键 -// BackHandler( -// onBack = { -// val currentRoute = currentBackStackEntry?.destination?.route -// Timber.d("BackHandler currentRouter = ${currentRoute}") -// if (currentRoute == Screen.Home.route && !canBack) { -// ToastUtils.showToast("再次点击退出") -// canBack = true -// } else if (currentRoute == Screen.Login.route) { -// onBackRequest() -// } else { -// navController.popBackStack() +//package com.sw.inbound.ui +// +//import androidx.compose.animation.core.tween +//import androidx.compose.animation.fadeIn +//import androidx.compose.animation.fadeOut +//import androidx.compose.foundation.Image +//import androidx.compose.foundation.layout.Box +//import androidx.compose.foundation.layout.PaddingValues +//import androidx.compose.foundation.layout.fillMaxSize +//import androidx.compose.foundation.layout.padding +//import androidx.compose.material3.Scaffold +//import androidx.compose.runtime.Composable +//import androidx.compose.runtime.getValue +//import androidx.compose.runtime.mutableStateOf +//import androidx.compose.runtime.remember +//import androidx.compose.runtime.setValue +//import androidx.compose.ui.Modifier +//import androidx.compose.ui.graphics.Color +//import androidx.compose.ui.layout.ContentScale +//import androidx.compose.ui.res.painterResource +//import androidx.navigation.NavHostController +//import androidx.navigation.compose.NavHost +//import androidx.navigation.compose.composable +//import androidx.navigation.compose.currentBackStackEntryAsState +//import androidx.navigation.compose.rememberNavController +//import com.sw.inbound.GlobalKey +//import com.sw.inbound.R +//import com.sw.inbound.ui.page.HomeScreen +//import com.sw.inbound.ui.page.PurchaseOrderScreen +//import com.sw.inbound.utils.SPUtil +//import com.sw.inbound.utils.ToastUtils +// +//@Composable +//fun AppScreen( +// onBackRequest: () -> Unit +//) { +// val navController = rememberNavController() +// val currentBackStackEntry by navController.currentBackStackEntryAsState() +// var canBack by remember { mutableStateOf(false) } +// +// // 拦截物理返回键 +//// BackHandler( +//// onBack = { +//// val currentRoute = currentBackStackEntry?.destination?.route +//// Timber.d("BackHandler currentRouter = ${currentRoute}") +//// if (currentRoute == Screen.Home.route && !canBack) { +//// ToastUtils.showToast("再次点击退出") +//// canBack = true +//// } else if (currentRoute == Screen.Login.route) { +//// onBackRequest() +//// } else { +//// 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) // } -// } - - 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 - -} - -/** - * 导航 - */ -@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(Screen.Login.route) { +//// LoginScreen(modifier = Modifier, navController) +//// } +// // 采购单入库 // composable( -// Screen.SelfProcurement.route, +// Screen.PurchaseOrder.route, // enterTransition = { fadeIn(animationSpec = tween(0)) }, // 无进入动画 // exitTransition = { fadeOut(animationSpec = tween(0)) } // 无退出动画 // ) { -// SelfProcurementScreen(modifier = Modifier, navController) +// PurchaseOrderScreen(modifier = Modifier.fillMaxSize(), navController) // } -// // 收货 -// composable( -// Screen.ReceiptProduct.route, -// enterTransition = { fadeIn(animationSpec = tween(0)) }, // 无进入动画 -// exitTransition = { fadeOut(animationSpec = tween(0)) }, // 无退出动画 -// arguments = listOf( -// navArgument(name = "id", builder = { type = NavType.IntType }), -// navArgument(name = "supplierId", builder = { type = NavType.IntType }) -// ) -// ) { backStackEntry -> -// val id = backStackEntry.arguments?.getString("id") ?: "" -// val supplierId = backStackEntry.arguments?.getString("supplierId") ?: "" -// ReceiptProductScreen(modifier = Modifier, navController, id, supplierId) -// } - } -} - -sealed class Screen(val route: String) { - 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}" +//// // 自采单 +//// composable( +//// Screen.SelfProcurement.route, +//// enterTransition = { fadeIn(animationSpec = tween(0)) }, // 无进入动画 +//// exitTransition = { fadeOut(animationSpec = tween(0)) } // 无退出动画 +//// ) { +//// SelfProcurementScreen(modifier = Modifier, navController) +//// } +//// // 收货 +//// composable( +//// Screen.ReceiptProduct.route, +//// enterTransition = { fadeIn(animationSpec = tween(0)) }, // 无进入动画 +//// exitTransition = { fadeOut(animationSpec = tween(0)) }, // 无退出动画 +//// arguments = listOf( +//// navArgument(name = "id", builder = { type = NavType.IntType }), +//// navArgument(name = "supplierId", builder = { type = NavType.IntType }) +//// ) +//// ) { backStackEntry -> +//// val id = backStackEntry.arguments?.getString("id") ?: "" +//// val supplierId = backStackEntry.arguments?.getString("supplierId") ?: "" +//// ReceiptProductScreen(modifier = Modifier, navController, id, supplierId) +//// } // } - - // 添加物品 -// data object AddProduct : Screen("addProduct") -// data object Test : Screen("Test") -} \ No newline at end of file +//} +// +//sealed class Screen(val route: String) { +// 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") +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ui/page/HomeScreen.kt b/app/src/main/java/com/sw/inbound/ui/page/HomeScreen.kt index 53819e5..58ebbb0 100644 --- a/app/src/main/java/com/sw/inbound/ui/page/HomeScreen.kt +++ b/app/src/main/java/com/sw/inbound/ui/page/HomeScreen.kt @@ -1,120 +1,120 @@ -package com.sw.inbound.ui.page - -import androidx.activity.compose.BackHandler -import androidx.compose.foundation.Image -import androidx.compose.foundation.clickable -import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -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.width -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel -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.PurchaseOrderActivity -import com.sw.inbound.activity.SelfProcurementActivity -import com.sw.inbound.ui.Screen -import com.sw.inbound.ui.weight.TopTitleBar -import com.sw.inbound.utils.ext.startActivity -import com.sw.inbound.viewmodel.UserViewModel -import timber.log.Timber - -/** - * 首页 - */ -@Composable -fun HomeScreen( - modifier: Modifier = Modifier, - navController: NavHostController = rememberNavController(), - viewModel: UserViewModel = hiltViewModel(), - onBackRequest: () -> Unit = {} -) { - val user by viewModel.user.collectAsState() - - // 避免每次进入都获取字典类型 - LaunchedEffect(Unit) { - Timber.d("LaunchedEffect(Unit)") -// viewModel.getInitInfo() - } - - BackHandler { - onBackRequest() - } - - Column(modifier = Modifier.fillMaxSize()) { - TopTitleBar(user = user, onLogoutClick = { -// viewModel.logout() -// navController.navigate(Screen.Login.route) { -// popUpTo(Screen.Home.route) { -// inclusive = true -// } -// } - }) - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.Center, - modifier = Modifier - .weight(1f) - .fillMaxWidth() - ) { - Image( - modifier = Modifier - .width(595.dp) - .height(477.dp) - .clickable( - interactionSource = remember { MutableInteractionSource() }, - indication = null - ) { -// navController.navigate(Screen.PurchaseOrder.route) - //navController.context.startActivity { - // putExtra(GoodsListActivity.ID, "123123") - // putExtra(GoodsListActivity.SUPPLIER_ID, "123123123123") - // putExtra(GoodsListActivity.IS_RECEIPT_PAGE, true) - //} - navController.context.startActivity() - }, - painter = painterResource(R.mipmap.ic_order_purchase), - contentDescription = "采购单入库" - ) - Spacer(modifier = Modifier.width(15.dp)) - Image( - modifier = Modifier - .width(595.dp) - .height(477.dp) - .clickable( - interactionSource = remember { MutableInteractionSource() }, - indication = null - ) { -// navController.navigate( -// Screen.SelfProcurement.route, navOptions = NavOptions.Builder() -// .setEnterAnim(0) -// .setExitAnim(0) -// .setPopEnterAnim(0) -// .setPopExitAnim(0) -// .build() -// ) - navController.context.startActivity { - putExtra(GoodsListActivity.IS_RECEIPT_PAGE, false) - } - }, - painter = painterResource(R.mipmap.ic_order_self_procurement), - contentDescription = "自采入库" - ) - } - } -} \ No newline at end of file +//package com.sw.inbound.ui.page +// +//import androidx.activity.compose.BackHandler +//import androidx.compose.foundation.Image +//import androidx.compose.foundation.clickable +//import androidx.compose.foundation.interaction.MutableInteractionSource +//import androidx.compose.foundation.layout.Arrangement +//import androidx.compose.foundation.layout.Column +//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.width +//import androidx.compose.runtime.Composable +//import androidx.compose.runtime.LaunchedEffect +//import androidx.compose.runtime.collectAsState +//import androidx.compose.runtime.getValue +//import androidx.compose.runtime.remember +//import androidx.compose.ui.Alignment +//import androidx.compose.ui.Modifier +//import androidx.compose.ui.res.painterResource +//import androidx.compose.ui.unit.dp +//import androidx.hilt.navigation.compose.hiltViewModel +//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.PurchaseOrderActivity +//import com.sw.inbound.activity.SelfProcurementActivity +//import com.sw.inbound.ui.Screen +//import com.sw.inbound.ui.weight.TopTitleBar +//import com.sw.inbound.utils.ext.startActivity +//import com.sw.inbound.viewmodel.UserViewModel +//import timber.log.Timber +// +///** +// * 首页 +// */ +//@Composable +//fun HomeScreen( +// modifier: Modifier = Modifier, +// navController: NavHostController = rememberNavController(), +// viewModel: UserViewModel = hiltViewModel(), +// onBackRequest: () -> Unit = {} +//) { +// val user by viewModel.user.collectAsState() +// +// // 避免每次进入都获取字典类型 +// LaunchedEffect(Unit) { +// Timber.d("LaunchedEffect(Unit)") +//// viewModel.getInitInfo() +// } +// +// BackHandler { +// onBackRequest() +// } +// +// Column(modifier = Modifier.fillMaxSize()) { +// TopTitleBar(user = user, onLogoutClick = { +//// viewModel.logout() +//// navController.navigate(Screen.Login.route) { +//// popUpTo(Screen.Home.route) { +//// inclusive = true +//// } +//// } +// }) +// Row( +// verticalAlignment = Alignment.CenterVertically, +// horizontalArrangement = Arrangement.Center, +// modifier = Modifier +// .weight(1f) +// .fillMaxWidth() +// ) { +// Image( +// modifier = Modifier +// .width(595.dp) +// .height(477.dp) +// .clickable( +// interactionSource = remember { MutableInteractionSource() }, +// indication = null +// ) { +//// navController.navigate(Screen.PurchaseOrder.route) +// //navController.context.startActivity { +// // putExtra(GoodsListActivity.ID, "123123") +// // putExtra(GoodsListActivity.SUPPLIER_ID, "123123123123") +// // putExtra(GoodsListActivity.IS_RECEIPT_PAGE, true) +// //} +// navController.context.startActivity() +// }, +// painter = painterResource(R.mipmap.ic_order_purchase), +// contentDescription = "采购单入库" +// ) +// Spacer(modifier = Modifier.width(15.dp)) +// Image( +// modifier = Modifier +// .width(595.dp) +// .height(477.dp) +// .clickable( +// interactionSource = remember { MutableInteractionSource() }, +// indication = null +// ) { +//// navController.navigate( +//// Screen.SelfProcurement.route, navOptions = NavOptions.Builder() +//// .setEnterAnim(0) +//// .setExitAnim(0) +//// .setPopEnterAnim(0) +//// .setPopExitAnim(0) +//// .build() +//// ) +// navController.context.startActivity { +// putExtra(GoodsListActivity.IS_RECEIPT_PAGE, false) +// } +// }, +// painter = painterResource(R.mipmap.ic_order_self_procurement), +// contentDescription = "自采入库" +// ) +// } +// } +//} diff --git a/app/src/main/java/com/sw/inbound/ui/page/PurchaseOrderScreen.kt b/app/src/main/java/com/sw/inbound/ui/page/PurchaseOrderScreen.kt index ee99165..bad1bb2 100644 --- a/app/src/main/java/com/sw/inbound/ui/page/PurchaseOrderScreen.kt +++ b/app/src/main/java/com/sw/inbound/ui/page/PurchaseOrderScreen.kt @@ -1,351 +1,351 @@ -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() -) { - 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 { - 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 { - putExtra(GoodsListActivity.IS_RECEIPT_PAGE, false) - } - //navController.context.startActivity { - // //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 "未收货" +//package com.sw.inbound.ui.page // -// 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() +//) { +// 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 { +// 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 { +// putExtra(GoodsListActivity.IS_RECEIPT_PAGE, false) +// } +// //navController.context.startActivity { +// // //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) -// ) to "部分收货" - 1 -> blackTextStyle.copy( - color = colorResource(R.color.red) - ) to "待收货" - - 2 -> blackTextStyle.copy( - color = colorResource(R.color.origin) - ) to "已收货" - - 3 -> blackTextStyle to "已关闭" - else -> blackTextStyle to "未知状态" - } - - val itemSpace = 29.dp - Box( - modifier = Modifier - .background( - color = Color.White.copy(alpha = 0.37f), shape = RoundedCornerShape(10.dp) // 圆角背景 - ) - .clickable { - onItemClick(product) - }) { - Column( - modifier = Modifier - .width(580.dp) - .padding(horizontal = 30.dp, vertical = 30.dp), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(0.dp) - ) { - Text( - text = product.supplierName ?: "-", - modifier = Modifier.padding(top = 25.dp), - maxLines = 1, - overflow = TextOverflow.Ellipsis, - style = TextStyle( - fontWeight = FontWeight.Bold, - fontSize = 30.sp, - color = colorResource(R.color.black) - ) - ) - Spacer(modifier = Modifier.height(itemSpace)) - Text( - text = "单号 ${product.purCode ?: "-"}", maxLines = 1, style = grayTextStyle - ) - Spacer(modifier = Modifier.height(itemSpace)) - HorizontalDivider( - thickness = 1.dp, color = colorResource(R.color.divider) - ) - Spacer(modifier = Modifier.height(40.dp)) - Text( - text = "物品(项)", style = grayTextStyle - ) - Spacer(modifier = Modifier.height(22.dp)) - Text( - text = product.goodCount.toFormattedString(), style = TextStyle( - color = colorResource(R.color.black), - fontSize = 90.sp, - fontWeight = FontWeight.Bold - ) - ) - Spacer(modifier = Modifier.height(22.dp)) - Row( - modifier = Modifier - .fillMaxWidth() - .dashedBorder( - strokeWidth = 2.dp, color = Color(0xFFBDC5CE), cornerRadiusDp = 10.dp - ) - .padding(horizontal = 72.dp, vertical = 27.dp), - horizontalArrangement = Arrangement.SpaceBetween - ) { - Column(horizontalAlignment = Alignment.CenterHorizontally) { - Text(text = "采购日期", style = grayTextStyle) - Spacer(modifier = Modifier.height(8.dp)) - Text(text = product.purchaseDate ?: "-", style = blackTextStyle) - } - Column(horizontalAlignment = Alignment.CenterHorizontally) { - Text(text = "到货日期", style = grayTextStyle) - Spacer(modifier = Modifier.height(8.dp)) - Text(text = product.receiveDate ?: "-", style = blackTextStyle) - } - } - Spacer(modifier = Modifier.height(28.dp)) - Row( - modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween - ) { - Row { - Text("收货状态:", style = grayTextStyle) - Spacer(Modifier.width(8.dp)) - Text(statusLabel, style = receiptStatusStyle) - } - - Row { - Text("采购人:", style = grayTextStyle) - Spacer(Modifier.width(8.dp)) - - Text(product.receiveUser, style = blackTextStyle) - } - } - Spacer(modifier = Modifier.height(itemSpace)) - Button( - modifier = Modifier - .fillMaxWidth() - .height(80.dp), - shape = RoundedCornerShape(10.dp), - colors = ButtonDefaults.buttonColors( - containerColor = Color(0xFF009632).copy(alpha = 1f), - contentColor = colorResource(R.color.white) - ), - onClick = { - onItemClick(product) - }) { - Text( - if (product.receiveStatus == 4) "部分收货" else "收货", - style = TextStyle(fontWeight = FontWeight.Bold, fontSize = 26.sp) - ) - } - } - } -} \ No newline at end of file +// ) to "已收货" +// +// 3 -> blackTextStyle to "已关闭" +// else -> blackTextStyle to "未知状态" +// } +// +// val itemSpace = 29.dp +// Box( +// modifier = Modifier +// .background( +// color = Color.White.copy(alpha = 0.37f), shape = RoundedCornerShape(10.dp) // 圆角背景 +// ) +// .clickable { +// onItemClick(product) +// }) { +// Column( +// modifier = Modifier +// .width(580.dp) +// .padding(horizontal = 30.dp, vertical = 30.dp), +// horizontalAlignment = Alignment.CenterHorizontally, +// verticalArrangement = Arrangement.spacedBy(0.dp) +// ) { +// Text( +// text = product.supplierName ?: "-", +// modifier = Modifier.padding(top = 25.dp), +// maxLines = 1, +// overflow = TextOverflow.Ellipsis, +// style = TextStyle( +// fontWeight = FontWeight.Bold, +// fontSize = 30.sp, +// color = colorResource(R.color.black) +// ) +// ) +// Spacer(modifier = Modifier.height(itemSpace)) +// Text( +// text = "单号 ${product.purCode ?: "-"}", maxLines = 1, style = grayTextStyle +// ) +// Spacer(modifier = Modifier.height(itemSpace)) +// HorizontalDivider( +// thickness = 1.dp, color = colorResource(R.color.divider) +// ) +// Spacer(modifier = Modifier.height(40.dp)) +// Text( +// text = "物品(项)", style = grayTextStyle +// ) +// Spacer(modifier = Modifier.height(22.dp)) +// Text( +// text = product.goodCount.toFormattedString(), style = TextStyle( +// color = colorResource(R.color.black), +// fontSize = 90.sp, +// fontWeight = FontWeight.Bold +// ) +// ) +// Spacer(modifier = Modifier.height(22.dp)) +// Row( +// modifier = Modifier +// .fillMaxWidth() +// .dashedBorder( +// strokeWidth = 2.dp, color = Color(0xFFBDC5CE), cornerRadiusDp = 10.dp +// ) +// .padding(horizontal = 72.dp, vertical = 27.dp), +// horizontalArrangement = Arrangement.SpaceBetween +// ) { +// Column(horizontalAlignment = Alignment.CenterHorizontally) { +// Text(text = "采购日期", style = grayTextStyle) +// Spacer(modifier = Modifier.height(8.dp)) +// Text(text = product.purchaseDate ?: "-", style = blackTextStyle) +// } +// Column(horizontalAlignment = Alignment.CenterHorizontally) { +// Text(text = "到货日期", style = grayTextStyle) +// Spacer(modifier = Modifier.height(8.dp)) +// Text(text = product.receiveDate ?: "-", style = blackTextStyle) +// } +// } +// Spacer(modifier = Modifier.height(28.dp)) +// Row( +// modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween +// ) { +// Row { +// Text("收货状态:", style = grayTextStyle) +// Spacer(Modifier.width(8.dp)) +// Text(statusLabel, style = receiptStatusStyle) +// } +// +// Row { +// Text("采购人:", style = grayTextStyle) +// Spacer(Modifier.width(8.dp)) +// +// Text(product.receiveUser, style = blackTextStyle) +// } +// } +// Spacer(modifier = Modifier.height(itemSpace)) +// Button( +// modifier = Modifier +// .fillMaxWidth() +// .height(80.dp), +// shape = RoundedCornerShape(10.dp), +// colors = ButtonDefaults.buttonColors( +// containerColor = Color(0xFF009632).copy(alpha = 1f), +// contentColor = colorResource(R.color.white) +// ), +// onClick = { +// onItemClick(product) +// }) { +// Text( +// if (product.receiveStatus == 4) "部分收货" else "收货", +// style = TextStyle(fontWeight = FontWeight.Bold, fontSize = 26.sp) +// ) +// } +// } +// } +//} diff --git a/app/src/main/java/com/sw/inbound/ui/theme/AppTypography.kt b/app/src/main/java/com/sw/inbound/ui/theme/AppTypography.kt index 9edf6c4..7ba801b 100644 --- a/app/src/main/java/com/sw/inbound/ui/theme/AppTypography.kt +++ b/app/src/main/java/com/sw/inbound/ui/theme/AppTypography.kt @@ -1,64 +1,64 @@ -package com.sw.inbound.ui.theme - -import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.colorResource -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.sp -import com.sw.inbound.R - -object AppTypography { - val gray96a0aaTextStyle: TextStyle - @Composable get() = TextStyle( - fontSize = 24.sp, - fontWeight = FontWeight.Medium, - color = Color(0xFF96A0AA) - ) - - val gray999999TextStyle: TextStyle - @Composable get() = TextStyle( - fontSize = 24.sp, - fontWeight = FontWeight.Medium, - color = Color(0xFF999999) - ) - - val black141428TextStyle: TextStyle - @Composable get() = TextStyle( - fontSize = 24.sp, - fontWeight = FontWeight.Medium, - color = Black_141428 - ) - - val grayTextStyle: TextStyle - @Composable - get() = TextStyle( - color = colorResource(R.color.gray), - fontSize = 24.sp, - fontWeight = FontWeight.Medium - ) - val blackTextStyle: TextStyle - @Composable - get() = TextStyle( - color = colorResource(R.color.black), - fontSize = 24.sp, - fontWeight = FontWeight.Bold - ) - - val blackMediumTextStyle: TextStyle - @Composable - get() = TextStyle( - color = colorResource(R.color.black), - fontSize = 24.sp, - fontWeight = FontWeight.Medium - ) - - val BlueTextStyle: TextStyle - @Composable - get() = TextStyle( - color = colorResource(R.color.blue), - fontSize = 24.sp, - fontWeight = FontWeight.Bold - ) - -} \ No newline at end of file +//package com.sw.inbound.ui.theme +// +//import androidx.compose.runtime.Composable +//import androidx.compose.ui.graphics.Color +//import androidx.compose.ui.res.colorResource +//import androidx.compose.ui.text.TextStyle +//import androidx.compose.ui.text.font.FontWeight +//import androidx.compose.ui.unit.sp +//import com.sw.inbound.R +// +//object AppTypography { +// val gray96a0aaTextStyle: TextStyle +// @Composable get() = TextStyle( +// fontSize = 24.sp, +// fontWeight = FontWeight.Medium, +// color = Color(0xFF96A0AA) +// ) +// +// val gray999999TextStyle: TextStyle +// @Composable get() = TextStyle( +// fontSize = 24.sp, +// fontWeight = FontWeight.Medium, +// color = Color(0xFF999999) +// ) +// +// val black141428TextStyle: TextStyle +// @Composable get() = TextStyle( +// fontSize = 24.sp, +// fontWeight = FontWeight.Medium, +// color = Black_141428 +// ) +// +// val grayTextStyle: TextStyle +// @Composable +// get() = TextStyle( +// color = colorResource(R.color.gray), +// fontSize = 24.sp, +// fontWeight = FontWeight.Medium +// ) +// val blackTextStyle: TextStyle +// @Composable +// get() = TextStyle( +// color = colorResource(R.color.black), +// fontSize = 24.sp, +// fontWeight = FontWeight.Bold +// ) +// +// val blackMediumTextStyle: TextStyle +// @Composable +// get() = TextStyle( +// color = colorResource(R.color.black), +// fontSize = 24.sp, +// fontWeight = FontWeight.Medium +// ) +// +// val BlueTextStyle: TextStyle +// @Composable +// get() = TextStyle( +// color = colorResource(R.color.blue), +// fontSize = 24.sp, +// fontWeight = FontWeight.Bold +// ) +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ui/theme/Color.kt b/app/src/main/java/com/sw/inbound/ui/theme/Color.kt index eeb1609..eb527c2 100644 --- a/app/src/main/java/com/sw/inbound/ui/theme/Color.kt +++ b/app/src/main/java/com/sw/inbound/ui/theme/Color.kt @@ -1,22 +1,22 @@ -package com.sw.inbound.ui.theme - -import androidx.compose.ui.graphics.Color - -val Purple80 = Color(0xFFD0BCFF) -val PurpleGrey80 = Color(0xFFCCC2DC) -val Pink80 = Color(0xFFEFB8C8) - -val Purple40 = Color(0xFF6650a4) -val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) - -val Black_141428 = Color(0xFF141428) -val Gray_A0A0B4 = Color(0XffA0A0B4) -val Gray_DCDCF0 = Color(0xFFDCDCF0) -val Gray_96A0AA = Color(0xFF96A0AA) -val GrayDivider = Color(0XFFDCDCF0) - -val Green_009632 = Color(0xFF009632) -val Blue_0032C8 = Color(0xFF0032C8) -val Red_FF3232 = Color(0xFFFF3232) - +//package com.sw.inbound.ui.theme +// +//import androidx.compose.ui.graphics.Color +// +//val Purple80 = Color(0xFFD0BCFF) +//val PurpleGrey80 = Color(0xFFCCC2DC) +//val Pink80 = Color(0xFFEFB8C8) +// +//val Purple40 = Color(0xFF6650a4) +//val PurpleGrey40 = Color(0xFF625b71) +//val Pink40 = Color(0xFF7D5260) +// +//val Black_141428 = Color(0xFF141428) +//val Gray_A0A0B4 = Color(0XffA0A0B4) +//val Gray_DCDCF0 = Color(0xFFDCDCF0) +//val Gray_96A0AA = Color(0xFF96A0AA) +//val GrayDivider = Color(0XFFDCDCF0) +// +//val Green_009632 = Color(0xFF009632) +//val Blue_0032C8 = Color(0xFF0032C8) +//val Red_FF3232 = Color(0xFFFF3232) +// diff --git a/app/src/main/java/com/sw/inbound/ui/theme/Theme.kt b/app/src/main/java/com/sw/inbound/ui/theme/Theme.kt index f44a1ab..8d3e2b1 100644 --- a/app/src/main/java/com/sw/inbound/ui/theme/Theme.kt +++ b/app/src/main/java/com/sw/inbound/ui/theme/Theme.kt @@ -1,57 +1,57 @@ -package com.sw.inbound.ui.theme - -import android.os.Build -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.darkColorScheme -import androidx.compose.material3.dynamicDarkColorScheme -import androidx.compose.material3.dynamicLightColorScheme -import androidx.compose.material3.lightColorScheme -import androidx.compose.runtime.Composable -import androidx.compose.ui.platform.LocalContext - -private val DarkColorScheme = darkColorScheme( - primary = Purple80, - secondary = PurpleGrey80, - tertiary = Pink80 -) - -private val LightColorScheme = lightColorScheme( - primary = Purple40, - secondary = PurpleGrey40, - tertiary = Pink40 - - /* Other default colors to override - background = Color(0xFFFFFBFE), - surface = Color(0xFFFFFBFE), - onPrimary = Color.White, - onSecondary = Color.White, - onTertiary = Color.White, - onBackground = Color(0xFF1C1B1F), - onSurface = Color(0xFF1C1B1F), - */ -) - -@Composable -fun InboundTheme( - darkTheme: Boolean = isSystemInDarkTheme(), - // Dynamic color is available on Android 12+ - dynamicColor: Boolean = true, - content: @Composable () -> Unit -) { - val colorScheme = when { - dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { - val context = LocalContext.current - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - } - - darkTheme -> DarkColorScheme - else -> LightColorScheme - } - - MaterialTheme( - colorScheme = colorScheme, - typography = Typography, - content = content, - ) -} \ No newline at end of file +//package com.sw.inbound.ui.theme +// +//import android.os.Build +//import androidx.compose.foundation.isSystemInDarkTheme +//import androidx.compose.material3.MaterialTheme +//import androidx.compose.material3.darkColorScheme +//import androidx.compose.material3.dynamicDarkColorScheme +//import androidx.compose.material3.dynamicLightColorScheme +//import androidx.compose.material3.lightColorScheme +//import androidx.compose.runtime.Composable +//import androidx.compose.ui.platform.LocalContext +// +//private val DarkColorScheme = darkColorScheme( +// primary = Purple80, +// secondary = PurpleGrey80, +// tertiary = Pink80 +//) +// +//private val LightColorScheme = lightColorScheme( +// primary = Purple40, +// secondary = PurpleGrey40, +// tertiary = Pink40 +// +// /* Other default colors to override +// background = Color(0xFFFFFBFE), +// surface = Color(0xFFFFFBFE), +// onPrimary = Color.White, +// onSecondary = Color.White, +// onTertiary = Color.White, +// onBackground = Color(0xFF1C1B1F), +// onSurface = Color(0xFF1C1B1F), +// */ +//) +// +//@Composable +//fun InboundTheme( +// darkTheme: Boolean = isSystemInDarkTheme(), +// // Dynamic color is available on Android 12+ +// dynamicColor: Boolean = true, +// content: @Composable () -> Unit +//) { +// val colorScheme = when { +// dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { +// val context = LocalContext.current +// if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) +// } +// +// darkTheme -> DarkColorScheme +// else -> LightColorScheme +// } +// +// MaterialTheme( +// colorScheme = colorScheme, +// typography = Typography, +// content = content, +// ) +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ui/theme/Type.kt b/app/src/main/java/com/sw/inbound/ui/theme/Type.kt index 1fc68ee..7915ad8 100644 --- a/app/src/main/java/com/sw/inbound/ui/theme/Type.kt +++ b/app/src/main/java/com/sw/inbound/ui/theme/Type.kt @@ -1,34 +1,34 @@ -package com.sw.inbound.ui.theme - -import androidx.compose.material3.Typography -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.sp - -// Set of Material typography styles to start with -val Typography = Typography( - bodyLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 16.sp, - lineHeight = 24.sp, - letterSpacing = 0.5.sp - ) - /* Other default text styles to override - titleLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 22.sp, - lineHeight = 28.sp, - letterSpacing = 0.sp - ), - labelSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 11.sp, - lineHeight = 16.sp, - letterSpacing = 0.5.sp - ) - */ -) \ No newline at end of file +//package com.sw.inbound.ui.theme +// +//import androidx.compose.material3.Typography +//import androidx.compose.ui.text.TextStyle +//import androidx.compose.ui.text.font.FontFamily +//import androidx.compose.ui.text.font.FontWeight +//import androidx.compose.ui.unit.sp +// +//// Set of Material typography styles to start with +//val Typography = Typography( +// bodyLarge = TextStyle( +// fontFamily = FontFamily.Default, +// fontWeight = FontWeight.Normal, +// fontSize = 16.sp, +// lineHeight = 24.sp, +// letterSpacing = 0.5.sp +// ) +// /* Other default text styles to override +// titleLarge = TextStyle( +// fontFamily = FontFamily.Default, +// fontWeight = FontWeight.Normal, +// fontSize = 22.sp, +// lineHeight = 28.sp, +// letterSpacing = 0.sp +// ), +// labelSmall = TextStyle( +// fontFamily = FontFamily.Default, +// fontWeight = FontWeight.Medium, +// fontSize = 11.sp, +// lineHeight = 16.sp, +// letterSpacing = 0.5.sp +// ) +// */ +//) \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ui/weight/BottomActionBar.kt b/app/src/main/java/com/sw/inbound/ui/weight/BottomActionBar.kt index efe868c..b8306ab 100644 --- a/app/src/main/java/com/sw/inbound/ui/weight/BottomActionBar.kt +++ b/app/src/main/java/com/sw/inbound/ui/weight/BottomActionBar.kt @@ -1,105 +1,105 @@ -package com.sw.inbound.ui.weight - -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.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -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.unit.dp -import androidx.compose.ui.unit.sp -import com.sw.inbound.R - -/** - * 底部按钮 - */ -@Composable -fun BottomActionBar( - leftText: String = "返回", - right1ButtonText: String = "清空物品", - right2ButtonText: String = "新增收货", - showRight1Button: Boolean = false, - onLeftButtonClick: () -> Unit, - onRight1ButtonClick: () -> Unit = {}, - onRight2ButtonClick: () -> Unit, - modifier: Modifier = Modifier, -) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(start = 30.dp, end = 30.dp, bottom = 20.dp) - .height(100.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - // 左侧图标+文字 - Row( - 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 { - onLeftButtonClick() - } - ) { - Image( - painter = painterResource(R.mipmap.ic_back_white), - contentDescription = "返回", - modifier = Modifier.size(40.dp) - ) - Spacer(modifier = Modifier.width(21.dp)) - Text( - text = leftText, - style = TextStyle( - color = colorResource(R.color.white), - fontWeight = FontWeight.Bold, - fontSize = 36.sp - ) - ) - } - - Row { - if (showRight1Button) { - CustomOutlinedButton( - modifier = modifier - .width(300.dp) - .height(100.dp), - text = right1ButtonText, - fontSize = 36.sp, - onClick = onRight1ButtonClick - ) - Spacer(modifier = Modifier.width(20.dp)) - } - CustomButton( - modifier = modifier - .width(300.dp) - .height(100.dp), - text = right2ButtonText, - onClick = onRight2ButtonClick, - borderColor = colorResource(R.color.blue), - textColor = colorResource(R.color.white), - fontSize = 36.sp - ) - } - } - -} \ No newline at end of file +//package com.sw.inbound.ui.weight +// +//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.Row +//import androidx.compose.foundation.layout.Spacer +//import androidx.compose.foundation.layout.fillMaxWidth +//import androidx.compose.foundation.layout.height +//import androidx.compose.foundation.layout.padding +//import androidx.compose.foundation.layout.size +//import androidx.compose.foundation.layout.width +//import androidx.compose.foundation.shape.RoundedCornerShape +//import androidx.compose.material3.Text +//import androidx.compose.runtime.Composable +//import androidx.compose.ui.Alignment +//import androidx.compose.ui.Modifier +//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.unit.dp +//import androidx.compose.ui.unit.sp +//import com.sw.inbound.R +// +///** +// * 底部按钮 +// */ +//@Composable +//fun BottomActionBar( +// leftText: String = "返回", +// right1ButtonText: String = "清空物品", +// right2ButtonText: String = "新增收货", +// showRight1Button: Boolean = false, +// onLeftButtonClick: () -> Unit, +// onRight1ButtonClick: () -> Unit = {}, +// onRight2ButtonClick: () -> Unit, +// modifier: Modifier = Modifier, +//) { +// Row( +// modifier = Modifier +// .fillMaxWidth() +// .padding(start = 30.dp, end = 30.dp, bottom = 20.dp) +// .height(100.dp), +// verticalAlignment = Alignment.CenterVertically, +// horizontalArrangement = Arrangement.SpaceBetween +// ) { +// // 左侧图标+文字 +// Row( +// 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 { +// onLeftButtonClick() +// } +// ) { +// Image( +// painter = painterResource(R.mipmap.ic_back_white), +// contentDescription = "返回", +// modifier = Modifier.size(40.dp) +// ) +// Spacer(modifier = Modifier.width(21.dp)) +// Text( +// text = leftText, +// style = TextStyle( +// color = colorResource(R.color.white), +// fontWeight = FontWeight.Bold, +// fontSize = 36.sp +// ) +// ) +// } +// +// Row { +// if (showRight1Button) { +// CustomOutlinedButton( +// modifier = modifier +// .width(300.dp) +// .height(100.dp), +// text = right1ButtonText, +// fontSize = 36.sp, +// onClick = onRight1ButtonClick +// ) +// Spacer(modifier = Modifier.width(20.dp)) +// } +// CustomButton( +// modifier = modifier +// .width(300.dp) +// .height(100.dp), +// text = right2ButtonText, +// onClick = onRight2ButtonClick, +// borderColor = colorResource(R.color.blue), +// textColor = colorResource(R.color.white), +// fontSize = 36.sp +// ) +// } +// } +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ui/weight/CameraCaptureLayout.kt b/app/src/main/java/com/sw/inbound/ui/weight/CameraCaptureLayout.kt index 550f439..4cda327 100644 --- a/app/src/main/java/com/sw/inbound/ui/weight/CameraCaptureLayout.kt +++ b/app/src/main/java/com/sw/inbound/ui/weight/CameraCaptureLayout.kt @@ -1,193 +1,193 @@ -package com.sw.inbound.ui.weight - -import android.net.Uri -import android.widget.Toast -import androidx.camera.view.CameraController -import androidx.camera.view.LifecycleCameraController -import androidx.compose.foundation.Image -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -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.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.colorResource -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import androidx.lifecycle.compose.LocalLifecycleOwner -import coil.compose.AsyncImage -import com.sw.inbound.GlobalData -import com.sw.inbound.R -import com.sw.inbound.ext.dashedBorder -import com.sw.inbound.ui.theme.AppTypography -import com.sw.inbound.utils.FileUtils -import com.sw.inbound.utils.ToastUtils -import com.sw.inbound.utils.rememberPhotoCapture -import timber.log.Timber - -/** - * 相机预览 -默认不预览,支持拍照 - */ -@Composable -fun CameraCaptureLayout( - modifier: Modifier = Modifier -) { - val context = LocalContext.current - var showCamera by remember { mutableStateOf(false) } - val lifecycleOwner = LocalLifecycleOwner.current - var photoUri by remember { mutableStateOf(null) } - - // CameraX 控制器 - val cameraController = remember { - LifecycleCameraController(context).apply { - setEnabledUseCases( - CameraController.IMAGE_CAPTURE or - CameraController.VIDEO_CAPTURE - ) - } - } - - // 创建拍照工具实例 - val (photoCaptureHelper, takePhoto) = rememberPhotoCapture( - cameraController = cameraController, - onSuccess = { savedUri -> - // 处理拍照成功的逻辑 - photoUri = savedUri - Timber.d("photoUri = $photoUri") - Toast.makeText(context, "图片已保存", Toast.LENGTH_SHORT).show() - showCamera = false - GlobalData.imageUri = photoUri - }, - onError = { error -> - // 处理拍照失败的逻辑 - Toast.makeText(context, error, Toast.LENGTH_SHORT).show() - GlobalData.imageUri = null - } - ) - - Column( - modifier = modifier - .width(428.dp) - .padding(16.dp), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(24.dp) - ) { - if (showCamera) { - // 摄像头预览 - CameraPreview( - modifier = Modifier - .width(428.dp) - .height(321.dp), controller = cameraController - ) - } else { - if (photoUri == null) { - // 图片预览区域 - Column( - modifier = Modifier - .fillMaxWidth() - .height(321.dp) - .dashedBorder(strokeWidth = 2.dp, cornerRadiusDp = 15.dp) - .clickable { - showCamera = true - }, - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center - ) { - Image( - painter = painterResource(R.mipmap.ic_camera), - contentDescription = "默认图片", - modifier = Modifier - .width(96.dp) - .height(76.dp) - ) - Spacer(modifier = Modifier.height(24.dp)) - Text( - "图片采集", - style = AppTypography.grayTextStyle.copy(color = Color(0xFFB4B4C8)) - ) - } - } else { - Column( - modifier = Modifier - .fillMaxWidth() - .height(321.dp) - .dashedBorder(strokeWidth = 2.dp, cornerRadiusDp = 15.dp), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center - ) { - AsyncImage( - model = photoUri, - contentDescription = "照片", - modifier = Modifier.fillMaxSize() - ) - } - } - } - - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.End - ) { - CustomOutlinedButton( - modifier = Modifier - .weight(1f) - .height(80.dp), - text = "取消", - fontSize = 30.sp, - borderColor = colorResource(R.color.green), - textColor = colorResource(R.color.green), - onClick = { - Timber.d("点击取消") - showCamera = true - photoUri?.let { - FileUtils.deleteFileWithUri(context, photoUri!!) - } - photoUri = null - } - ) - Spacer(modifier = Modifier.width(20.dp)) - - CustomButton( - modifier = Modifier - .weight(1f) - .height(80.dp), - text = "采集", - onClick = { - Timber.d("点击采集") - if (!showCamera) { - ToastUtils.showToast("请先开启图片预览") - return@CustomButton - } - takePhoto() - }, - borderColor = colorResource(R.color.green), - textColor = colorResource(R.color.white), - fontSize = 30.sp, - showButtonIcon = true - ) - } - } - - // 生命周期管理 - DisposableEffect(lifecycleOwner) { - Timber.d("cameraController") - cameraController.bindToLifecycle(lifecycleOwner) - onDispose { } - } -} \ No newline at end of file +//package com.sw.inbound.ui.weight +// +//import android.net.Uri +//import android.widget.Toast +//import androidx.camera.view.CameraController +//import androidx.camera.view.LifecycleCameraController +//import androidx.compose.foundation.Image +//import androidx.compose.foundation.clickable +//import androidx.compose.foundation.layout.Arrangement +//import androidx.compose.foundation.layout.Column +//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.material3.Text +//import androidx.compose.runtime.Composable +//import androidx.compose.runtime.DisposableEffect +//import androidx.compose.runtime.getValue +//import androidx.compose.runtime.mutableStateOf +//import androidx.compose.runtime.remember +//import androidx.compose.runtime.setValue +//import androidx.compose.ui.Alignment +//import androidx.compose.ui.Modifier +//import androidx.compose.ui.graphics.Color +//import androidx.compose.ui.platform.LocalContext +//import androidx.compose.ui.res.colorResource +//import androidx.compose.ui.res.painterResource +//import androidx.compose.ui.unit.dp +//import androidx.compose.ui.unit.sp +//import androidx.lifecycle.compose.LocalLifecycleOwner +//import coil.compose.AsyncImage +//import com.sw.inbound.GlobalData +//import com.sw.inbound.R +//import com.sw.inbound.ext.dashedBorder +//import com.sw.inbound.ui.theme.AppTypography +//import com.sw.inbound.utils.FileUtils +//import com.sw.inbound.utils.ToastUtils +//import com.sw.inbound.utils.rememberPhotoCapture +//import timber.log.Timber +// +///** +// * 相机预览 -默认不预览,支持拍照 +// */ +//@Composable +//fun CameraCaptureLayout( +// modifier: Modifier = Modifier +//) { +// val context = LocalContext.current +// var showCamera by remember { mutableStateOf(false) } +// val lifecycleOwner = LocalLifecycleOwner.current +// var photoUri by remember { mutableStateOf(null) } +// +// // CameraX 控制器 +// val cameraController = remember { +// LifecycleCameraController(context).apply { +// setEnabledUseCases( +// CameraController.IMAGE_CAPTURE or +// CameraController.VIDEO_CAPTURE +// ) +// } +// } +// +// // 创建拍照工具实例 +// val (photoCaptureHelper, takePhoto) = rememberPhotoCapture( +// cameraController = cameraController, +// onSuccess = { savedUri -> +// // 处理拍照成功的逻辑 +// photoUri = savedUri +// Timber.d("photoUri = $photoUri") +// Toast.makeText(context, "图片已保存", Toast.LENGTH_SHORT).show() +// showCamera = false +// GlobalData.imageUri = photoUri +// }, +// onError = { error -> +// // 处理拍照失败的逻辑 +// Toast.makeText(context, error, Toast.LENGTH_SHORT).show() +// GlobalData.imageUri = null +// } +// ) +// +// Column( +// modifier = modifier +// .width(428.dp) +// .padding(16.dp), +// horizontalAlignment = Alignment.CenterHorizontally, +// verticalArrangement = Arrangement.spacedBy(24.dp) +// ) { +// if (showCamera) { +// // 摄像头预览 +// CameraPreview( +// modifier = Modifier +// .width(428.dp) +// .height(321.dp), controller = cameraController +// ) +// } else { +// if (photoUri == null) { +// // 图片预览区域 +// Column( +// modifier = Modifier +// .fillMaxWidth() +// .height(321.dp) +// .dashedBorder(strokeWidth = 2.dp, cornerRadiusDp = 15.dp) +// .clickable { +// showCamera = true +// }, +// horizontalAlignment = Alignment.CenterHorizontally, +// verticalArrangement = Arrangement.Center +// ) { +// Image( +// painter = painterResource(R.mipmap.ic_camera), +// contentDescription = "默认图片", +// modifier = Modifier +// .width(96.dp) +// .height(76.dp) +// ) +// Spacer(modifier = Modifier.height(24.dp)) +// Text( +// "图片采集", +// style = AppTypography.grayTextStyle.copy(color = Color(0xFFB4B4C8)) +// ) +// } +// } else { +// Column( +// modifier = Modifier +// .fillMaxWidth() +// .height(321.dp) +// .dashedBorder(strokeWidth = 2.dp, cornerRadiusDp = 15.dp), +// horizontalAlignment = Alignment.CenterHorizontally, +// verticalArrangement = Arrangement.Center +// ) { +// AsyncImage( +// model = photoUri, +// contentDescription = "照片", +// modifier = Modifier.fillMaxSize() +// ) +// } +// } +// } +// +// Row( +// verticalAlignment = Alignment.CenterVertically, +// horizontalArrangement = Arrangement.End +// ) { +// CustomOutlinedButton( +// modifier = Modifier +// .weight(1f) +// .height(80.dp), +// text = "取消", +// fontSize = 30.sp, +// borderColor = colorResource(R.color.green), +// textColor = colorResource(R.color.green), +// onClick = { +// Timber.d("点击取消") +// showCamera = true +// photoUri?.let { +// FileUtils.deleteFileWithUri(context, photoUri!!) +// } +// photoUri = null +// } +// ) +// Spacer(modifier = Modifier.width(20.dp)) +// +// CustomButton( +// modifier = Modifier +// .weight(1f) +// .height(80.dp), +// text = "采集", +// onClick = { +// Timber.d("点击采集") +// if (!showCamera) { +// ToastUtils.showToast("请先开启图片预览") +// return@CustomButton +// } +// takePhoto() +// }, +// borderColor = colorResource(R.color.green), +// textColor = colorResource(R.color.white), +// fontSize = 30.sp, +// showButtonIcon = true +// ) +// } +// } +// +// // 生命周期管理 +// DisposableEffect(lifecycleOwner) { +// Timber.d("cameraController") +// cameraController.bindToLifecycle(lifecycleOwner) +// onDispose { } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ui/weight/CameraPreview.kt b/app/src/main/java/com/sw/inbound/ui/weight/CameraPreview.kt index 60c4a8b..0ec3fc0 100644 --- a/app/src/main/java/com/sw/inbound/ui/weight/CameraPreview.kt +++ b/app/src/main/java/com/sw/inbound/ui/weight/CameraPreview.kt @@ -1,52 +1,52 @@ -package com.sw.inbound.ui.weight - -import android.net.Uri -import androidx.camera.view.LifecycleCameraController -import androidx.camera.view.PreviewView -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.unit.dp -import androidx.compose.ui.viewinterop.AndroidView -import coil.compose.AsyncImage -import com.sw.inbound.R - -/** - * 相机预览 - */ -@Composable -fun CameraPreview( - controller: LifecycleCameraController, - modifier: Modifier = Modifier, - photoUri: Uri? = null -) { - Box(modifier = modifier) { - AndroidView( - factory = { ctx -> - PreviewView(ctx).apply { - this.controller = controller - scaleType = PreviewView.ScaleType.FILL_CENTER // 控制预览缩放 - } - }, - modifier = Modifier.fillMaxSize() - ) - if (photoUri != null) { - AsyncImage( - modifier = Modifier.fillMaxSize(), - model = photoUri, - contentDescription = "照片", - ) - } - Image( - modifier = Modifier - .fillMaxSize() - .padding(30.dp), - painter = painterResource(R.mipmap.ic_scan), - contentDescription = "扫描" - ) - } -} \ No newline at end of file +//package com.sw.inbound.ui.weight +// +//import android.net.Uri +//import androidx.camera.view.LifecycleCameraController +//import androidx.camera.view.PreviewView +//import androidx.compose.foundation.Image +//import androidx.compose.foundation.layout.Box +//import androidx.compose.foundation.layout.fillMaxSize +//import androidx.compose.foundation.layout.padding +//import androidx.compose.runtime.Composable +//import androidx.compose.ui.Modifier +//import androidx.compose.ui.res.painterResource +//import androidx.compose.ui.unit.dp +//import androidx.compose.ui.viewinterop.AndroidView +//import coil.compose.AsyncImage +//import com.sw.inbound.R +// +///** +// * 相机预览 +// */ +//@Composable +//fun CameraPreview( +// controller: LifecycleCameraController, +// modifier: Modifier = Modifier, +// photoUri: Uri? = null +//) { +// Box(modifier = modifier) { +// AndroidView( +// factory = { ctx -> +// PreviewView(ctx).apply { +// this.controller = controller +// scaleType = PreviewView.ScaleType.FILL_CENTER // 控制预览缩放 +// } +// }, +// modifier = Modifier.fillMaxSize() +// ) +// if (photoUri != null) { +// AsyncImage( +// modifier = Modifier.fillMaxSize(), +// model = photoUri, +// contentDescription = "照片", +// ) +// } +// Image( +// modifier = Modifier +// .fillMaxSize() +// .padding(30.dp), +// painter = painterResource(R.mipmap.ic_scan), +// contentDescription = "扫描" +// ) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ui/weight/CustomButton.kt b/app/src/main/java/com/sw/inbound/ui/weight/CustomButton.kt index fb896d5..974f91a 100644 --- a/app/src/main/java/com/sw/inbound/ui/weight/CustomButton.kt +++ b/app/src/main/java/com/sw/inbound/ui/weight/CustomButton.kt @@ -1,108 +1,108 @@ -package com.sw.inbound.ui.weight - -import androidx.compose.foundation.BorderStroke -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Button -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.OutlinedButton -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -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.unit.Dp -import androidx.compose.ui.unit.TextUnit -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import com.sw.inbound.R - -/** - * 空心按钮 - */ -@Composable -fun CustomOutlinedButton( - text: String, - onClick: () -> Unit, - modifier: Modifier = Modifier, - textColor: Color = colorResource(R.color.blue), - borderColor: Color = Color.Blue, - cornerRadius: Dp = 8.dp, - borderWidth: Dp = 1.dp, - fontWeight: FontWeight = FontWeight.Bold, - fontSize: TextUnit = 24.sp -) { - OutlinedButton( - onClick = onClick, - modifier = modifier, - shape = RoundedCornerShape(cornerRadius), - border = BorderStroke(borderWidth, color = borderColor), - colors = ButtonDefaults.buttonColors( - containerColor = Color.Transparent, - contentColor = textColor - ) - ) { - Text( - text = text, - style = TextStyle( - fontWeight = fontWeight, - fontSize = fontSize, - color = textColor - ) - ) - } -} - -/** - * 实心按钮 - */ -@Composable -fun CustomButton( - text: String, - onClick: () -> Unit, - modifier: Modifier = Modifier, - textColor: Color = colorResource(R.color.white), - borderColor: Color = colorResource(R.color.green), - cornerRadius: Dp = 8.dp, - borderWidth: Dp = 1.dp, - fontWeight: FontWeight = FontWeight.Bold, - fontSize: TextUnit = 24.sp, - showButtonIcon: Boolean = false -) { - Button( - onClick = onClick, - modifier = modifier, - shape = RoundedCornerShape(cornerRadius), - border = BorderStroke(borderWidth, color = borderColor), - colors = ButtonDefaults.buttonColors( - containerColor = borderColor, - contentColor = textColor - ) - ) { - Row(verticalAlignment = Alignment.CenterVertically) { - if (showButtonIcon) { - Image( - painter = painterResource(R.mipmap.ic_camera_small), - contentDescription = "采集" - ) - Spacer(modifier = Modifier.width(13.dp)) - } - - Text( - text = text, - style = TextStyle( - fontWeight = fontWeight, - fontSize = fontSize, - color = textColor - ) - ) - } - } -} \ No newline at end of file +//package com.sw.inbound.ui.weight +// +//import androidx.compose.foundation.BorderStroke +//import androidx.compose.foundation.Image +//import androidx.compose.foundation.layout.Row +//import androidx.compose.foundation.layout.Spacer +//import androidx.compose.foundation.layout.width +//import androidx.compose.foundation.shape.RoundedCornerShape +//import androidx.compose.material3.Button +//import androidx.compose.material3.ButtonDefaults +//import androidx.compose.material3.OutlinedButton +//import androidx.compose.material3.Text +//import androidx.compose.runtime.Composable +//import androidx.compose.ui.Alignment +//import androidx.compose.ui.Modifier +//import androidx.compose.ui.graphics.Color +//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.unit.Dp +//import androidx.compose.ui.unit.TextUnit +//import androidx.compose.ui.unit.dp +//import androidx.compose.ui.unit.sp +//import com.sw.inbound.R +// +///** +// * 空心按钮 +// */ +//@Composable +//fun CustomOutlinedButton( +// text: String, +// onClick: () -> Unit, +// modifier: Modifier = Modifier, +// textColor: Color = colorResource(R.color.blue), +// borderColor: Color = Color.Blue, +// cornerRadius: Dp = 8.dp, +// borderWidth: Dp = 1.dp, +// fontWeight: FontWeight = FontWeight.Bold, +// fontSize: TextUnit = 24.sp +//) { +// OutlinedButton( +// onClick = onClick, +// modifier = modifier, +// shape = RoundedCornerShape(cornerRadius), +// border = BorderStroke(borderWidth, color = borderColor), +// colors = ButtonDefaults.buttonColors( +// containerColor = Color.Transparent, +// contentColor = textColor +// ) +// ) { +// Text( +// text = text, +// style = TextStyle( +// fontWeight = fontWeight, +// fontSize = fontSize, +// color = textColor +// ) +// ) +// } +//} +// +///** +// * 实心按钮 +// */ +//@Composable +//fun CustomButton( +// text: String, +// onClick: () -> Unit, +// modifier: Modifier = Modifier, +// textColor: Color = colorResource(R.color.white), +// borderColor: Color = colorResource(R.color.green), +// cornerRadius: Dp = 8.dp, +// borderWidth: Dp = 1.dp, +// fontWeight: FontWeight = FontWeight.Bold, +// fontSize: TextUnit = 24.sp, +// showButtonIcon: Boolean = false +//) { +// Button( +// onClick = onClick, +// modifier = modifier, +// shape = RoundedCornerShape(cornerRadius), +// border = BorderStroke(borderWidth, color = borderColor), +// colors = ButtonDefaults.buttonColors( +// containerColor = borderColor, +// contentColor = textColor +// ) +// ) { +// Row(verticalAlignment = Alignment.CenterVertically) { +// if (showButtonIcon) { +// Image( +// painter = painterResource(R.mipmap.ic_camera_small), +// contentDescription = "采集" +// ) +// Spacer(modifier = Modifier.width(13.dp)) +// } +// +// Text( +// text = text, +// style = TextStyle( +// fontWeight = fontWeight, +// fontSize = fontSize, +// color = textColor +// ) +// ) +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ui/weight/CustomSearchScreen.kt b/app/src/main/java/com/sw/inbound/ui/weight/CustomSearchScreen.kt index 7142339..bc6a45a 100644 --- a/app/src/main/java/com/sw/inbound/ui/weight/CustomSearchScreen.kt +++ b/app/src/main/java/com/sw/inbound/ui/weight/CustomSearchScreen.kt @@ -1,99 +1,99 @@ -package com.sw.inbound.ui.weight - -import androidx.compose.foundation.Image -import androidx.compose.foundation.background -import androidx.compose.foundation.border -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Box -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.shape.RoundedCornerShape -import androidx.compose.foundation.text.KeyboardActions -import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material3.Text -import androidx.compose.material3.TextField -import androidx.compose.material3.TextFieldDefaults -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalFocusManager -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.text.input.ImeAction -import androidx.compose.ui.unit.dp -import com.sw.inbound.R -import com.sw.inbound.ui.theme.AppTypography -import timber.log.Timber - -/** - * 搜索框 - */ -@Composable -fun CustomSearchView(onValueChange: (String) -> Unit = {}, onSearchClick: (String) -> Unit) { - var searchText by remember { mutableStateOf("") } - val borderColor = Color(0xFFDCDCF0) - val focusManager = LocalFocusManager.current - // 搜索框 - Box( - modifier = Modifier - .fillMaxWidth() - .height(60.dp) - .border( - width = 2.dp, - color = borderColor, - shape = RoundedCornerShape(10.dp) // 圆角边框 - ) - .background(Color.Transparent) // 透明背景 - ) { - TextField( - value = searchText, - onValueChange = { - searchText = it - onValueChange - }, - modifier = Modifier - .fillMaxWidth() - .padding(end = 25.dp), // 为图标留出空间 - colors = TextFieldDefaults.colors( - focusedContainerColor = Color.Transparent, - unfocusedContainerColor = Color.Transparent, - disabledContainerColor = Color.Transparent, - focusedIndicatorColor = Color.Transparent, - unfocusedIndicatorColor = Color.Transparent, - disabledIndicatorColor = Color.Transparent - ), - placeholder = { - Text("输入物品名称", style = AppTypography.gray96a0aaTextStyle) - }, - singleLine = true, - textStyle = AppTypography.black141428TextStyle, - keyboardOptions = KeyboardOptions.Default.copy( - imeAction = ImeAction.Search - ), - keyboardActions = KeyboardActions(onSearch = { - focusManager.clearFocus() - onSearchClick(searchText) - }), - trailingIcon = { - Image( - painter = painterResource(R.mipmap.ic_search), - contentDescription = "搜索", - modifier = Modifier - .width(32.dp) - .height(32.dp) - .clickable { - Timber.d("搜索点击") - focusManager.clearFocus() - onSearchClick(searchText) - } - ) - }, - ) - - } -} \ No newline at end of file +//package com.sw.inbound.ui.weight +// +//import androidx.compose.foundation.Image +//import androidx.compose.foundation.background +//import androidx.compose.foundation.border +//import androidx.compose.foundation.clickable +//import androidx.compose.foundation.layout.Box +//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.shape.RoundedCornerShape +//import androidx.compose.foundation.text.KeyboardActions +//import androidx.compose.foundation.text.KeyboardOptions +//import androidx.compose.material3.Text +//import androidx.compose.material3.TextField +//import androidx.compose.material3.TextFieldDefaults +//import androidx.compose.runtime.Composable +//import androidx.compose.runtime.getValue +//import androidx.compose.runtime.mutableStateOf +//import androidx.compose.runtime.remember +//import androidx.compose.runtime.setValue +//import androidx.compose.ui.Modifier +//import androidx.compose.ui.graphics.Color +//import androidx.compose.ui.platform.LocalFocusManager +//import androidx.compose.ui.res.painterResource +//import androidx.compose.ui.text.input.ImeAction +//import androidx.compose.ui.unit.dp +//import com.sw.inbound.R +//import com.sw.inbound.ui.theme.AppTypography +//import timber.log.Timber +// +///** +// * 搜索框 +// */ +//@Composable +//fun CustomSearchView(onValueChange: (String) -> Unit = {}, onSearchClick: (String) -> Unit) { +// var searchText by remember { mutableStateOf("") } +// val borderColor = Color(0xFFDCDCF0) +// val focusManager = LocalFocusManager.current +// // 搜索框 +// Box( +// modifier = Modifier +// .fillMaxWidth() +// .height(60.dp) +// .border( +// width = 2.dp, +// color = borderColor, +// shape = RoundedCornerShape(10.dp) // 圆角边框 +// ) +// .background(Color.Transparent) // 透明背景 +// ) { +// TextField( +// value = searchText, +// onValueChange = { +// searchText = it +// onValueChange +// }, +// modifier = Modifier +// .fillMaxWidth() +// .padding(end = 25.dp), // 为图标留出空间 +// colors = TextFieldDefaults.colors( +// focusedContainerColor = Color.Transparent, +// unfocusedContainerColor = Color.Transparent, +// disabledContainerColor = Color.Transparent, +// focusedIndicatorColor = Color.Transparent, +// unfocusedIndicatorColor = Color.Transparent, +// disabledIndicatorColor = Color.Transparent +// ), +// placeholder = { +// Text("输入物品名称", style = AppTypography.gray96a0aaTextStyle) +// }, +// singleLine = true, +// textStyle = AppTypography.black141428TextStyle, +// keyboardOptions = KeyboardOptions.Default.copy( +// imeAction = ImeAction.Search +// ), +// keyboardActions = KeyboardActions(onSearch = { +// focusManager.clearFocus() +// onSearchClick(searchText) +// }), +// trailingIcon = { +// Image( +// painter = painterResource(R.mipmap.ic_search), +// contentDescription = "搜索", +// modifier = Modifier +// .width(32.dp) +// .height(32.dp) +// .clickable { +// Timber.d("搜索点击") +// focusManager.clearFocus() +// onSearchClick(searchText) +// } +// ) +// }, +// ) +// +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ui/weight/CustomSingleRightText.kt b/app/src/main/java/com/sw/inbound/ui/weight/CustomSingleRightText.kt index f1d3e28..35aab4b 100644 --- a/app/src/main/java/com/sw/inbound/ui/weight/CustomSingleRightText.kt +++ b/app/src/main/java/com/sw/inbound/ui/weight/CustomSingleRightText.kt @@ -1,29 +1,29 @@ -package com.sw.inbound.ui.weight - -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.text.style.TextOverflow -import com.sw.inbound.ui.theme.AppTypography - -/** - * 自定义单行文本 - */ -@Composable -fun CustomSingleRightText( - modifier: Modifier, - text: String, - style: TextStyle = AppTypography.blackTextStyle, - textAlign: TextAlign = TextAlign.End -) { - Text( - modifier = modifier, - text = text, - textAlign = textAlign, - style = style, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - ) -} \ No newline at end of file +//package com.sw.inbound.ui.weight +// +//import androidx.compose.material3.Text +//import androidx.compose.runtime.Composable +//import androidx.compose.ui.Modifier +//import androidx.compose.ui.text.TextStyle +//import androidx.compose.ui.text.style.TextAlign +//import androidx.compose.ui.text.style.TextOverflow +//import com.sw.inbound.ui.theme.AppTypography +// +///** +// * 自定义单行文本 +// */ +//@Composable +//fun CustomSingleRightText( +// modifier: Modifier, +// text: String, +// style: TextStyle = AppTypography.blackTextStyle, +// textAlign: TextAlign = TextAlign.End +//) { +// Text( +// modifier = modifier, +// text = text, +// textAlign = textAlign, +// style = style, +// maxLines = 1, +// overflow = TextOverflow.Ellipsis, +// ) +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ui/weight/CustomTextField.kt b/app/src/main/java/com/sw/inbound/ui/weight/CustomTextField.kt index ffb12b4..72f86db 100644 --- a/app/src/main/java/com/sw/inbound/ui/weight/CustomTextField.kt +++ b/app/src/main/java/com/sw/inbound/ui/weight/CustomTextField.kt @@ -1,226 +1,226 @@ -package com.sw.inbound.ui.weight - -import androidx.compose.foundation.background -import androidx.compose.foundation.border -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.wrapContentHeight -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.text.KeyboardActions -import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material3.LocalTextStyle -import androidx.compose.material3.Text -import androidx.compose.material3.TextField -import androidx.compose.material3.TextFieldDefaults -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.focus.FocusDirection -import androidx.compose.ui.focus.onFocusChanged -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalFocusManager -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.input.ImeAction -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import com.sw.inbound.ext.isValidFloat -import com.sw.inbound.ext.isValidNumber -import com.sw.inbound.ui.theme.AppTypography -import com.sw.inbound.ui.theme.Black_141428 -import com.sw.inbound.ui.theme.Gray_DCDCF0 -import timber.log.Timber - -//@Preview(showBackground = true) +//package com.sw.inbound.ui.weight +// +//import androidx.compose.foundation.background +//import androidx.compose.foundation.border +//import androidx.compose.foundation.clickable +//import androidx.compose.foundation.layout.Box +//import androidx.compose.foundation.layout.fillMaxHeight +//import androidx.compose.foundation.layout.fillMaxWidth +//import androidx.compose.foundation.layout.height +//import androidx.compose.foundation.layout.padding +//import androidx.compose.foundation.layout.wrapContentHeight +//import androidx.compose.foundation.shape.RoundedCornerShape +//import androidx.compose.foundation.text.KeyboardActions +//import androidx.compose.foundation.text.KeyboardOptions +//import androidx.compose.material3.LocalTextStyle +//import androidx.compose.material3.Text +//import androidx.compose.material3.TextField +//import androidx.compose.material3.TextFieldDefaults +//import androidx.compose.runtime.Composable +//import androidx.compose.runtime.getValue +//import androidx.compose.runtime.mutableStateOf +//import androidx.compose.runtime.remember +//import androidx.compose.runtime.setValue +//import androidx.compose.ui.Alignment +//import androidx.compose.ui.Modifier +//import androidx.compose.ui.focus.FocusDirection +//import androidx.compose.ui.focus.onFocusChanged +//import androidx.compose.ui.graphics.Color +//import androidx.compose.ui.platform.LocalFocusManager +//import androidx.compose.ui.text.TextStyle +//import androidx.compose.ui.text.font.FontWeight +//import androidx.compose.ui.text.input.ImeAction +//import androidx.compose.ui.text.style.TextAlign +//import androidx.compose.ui.unit.dp +//import androidx.compose.ui.unit.sp +//import com.sw.inbound.ext.isValidFloat +//import com.sw.inbound.ext.isValidNumber +//import com.sw.inbound.ui.theme.AppTypography +//import com.sw.inbound.ui.theme.Black_141428 +//import com.sw.inbound.ui.theme.Gray_DCDCF0 +//import timber.log.Timber +// +////@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 -//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) } -// } -// ) +//fun CustomTextField( +// value: String, +// onValueChange: (String) -> Unit, +// modifier: Modifier = Modifier.height(60.dp), +// placeholderValue: String = "请录入", // 占位文本 +// trailingLabel: String? = null, // 右侧文字 +// textAlign: TextAlign = TextAlign.Start, +// textStyle: TextStyle? = null, +// leadingIcon: @Composable (() -> Unit)? = null, // 左侧布局 +// enabled: Boolean = true, +// inputType: InputType = InputType.Text, // 输入类型 +// hasNext: Boolean = true, // 键盘显示下一个 +// isInitUpdate: Boolean = false, // 是否需要根据原始数据变动 +// keyboardOptions: KeyboardOptions? = null, +// keyboardActions: KeyboardActions? = null, +// onClick: () -> Unit = {}, // 点击 +//) { +// val containerColor = if (enabled) Color.Transparent else Gray_DCDCF0 +// var inputValue by remember(if (isInitUpdate) value else null) { +// mutableStateOf(value) +// } +// val focusManager = LocalFocusManager.current +// +// fun onEditingComplete(isFocus: Boolean) { +// Timber.d("onEditingComplete inputValue = $inputValue, isFocus = $isFocus") +// onValueChange(inputValue) // } // -//} - -enum class InputType { - Text, // 字符串 - Number, // 数字 - Decimal, // 浮点 - Percent, // 百分比 -} - -/** - * 自定义输入框 - */ -@Composable -fun CustomTextField( - value: String, - onValueChange: (String) -> Unit, - modifier: Modifier = Modifier.height(60.dp), - placeholderValue: String = "请录入", // 占位文本 - trailingLabel: String? = null, // 右侧文字 - textAlign: TextAlign = TextAlign.Start, - textStyle: TextStyle? = null, - leadingIcon: @Composable (() -> Unit)? = null, // 左侧布局 - enabled: Boolean = true, - inputType: InputType = InputType.Text, // 输入类型 - hasNext: Boolean = true, // 键盘显示下一个 - isInitUpdate: Boolean = false, // 是否需要根据原始数据变动 - keyboardOptions: KeyboardOptions? = null, - keyboardActions: KeyboardActions? = null, - onClick: () -> Unit = {}, // 点击 -) { - val containerColor = if (enabled) Color.Transparent else Gray_DCDCF0 - var inputValue by remember(if (isInitUpdate) value else null) { - mutableStateOf(value) - } - val focusManager = LocalFocusManager.current - - fun onEditingComplete(isFocus: Boolean) { - Timber.d("onEditingComplete inputValue = $inputValue, isFocus = $isFocus") - onValueChange(inputValue) - } - - var newTextStyle = textStyle - ?: LocalTextStyle.current.copy( - color = Black_141428, - fontSize = 24.sp, - fontWeight = FontWeight.Bold, - textAlign = textAlign - ) - Box(modifier = modifier) { - TextField( - enabled = enabled, - value = inputValue, - textStyle = newTextStyle, - onValueChange = { newValue -> - Timber.d("onValueChange newValue = $newValue") - when (inputType) { - InputType.Number -> { - if (newValue.isEmpty() || newValue.isValidNumber()) { - inputValue = newValue - onEditingComplete(true) - } - } - - InputType.Decimal -> { - if (newValue.isEmpty() || newValue.isValidFloat()) { - inputValue = newValue - onEditingComplete(true) - } - } - - InputType.Percent -> { - val range: ClosedFloatingPointRange = 0f..100f - if (newValue.isEmpty() || (newValue.isValidFloat(1) && newValue.toFloat() in range)) { - inputValue = newValue - onEditingComplete(true) - } - } - - else -> { - inputValue = newValue - onEditingComplete(true) - } - } - }, - - modifier = Modifier - .fillMaxWidth() - .background(Color.Transparent) - .border( - width = 2.dp, - color = Gray_DCDCF0, - shape = RoundedCornerShape(10.dp) - ) - .clickable(onClick = onClick) -// .focusable() - .onFocusChanged(onFocusChanged = { focusState -> - { - onEditingComplete(focusState.isFocused) - } - }), - colors = TextFieldDefaults.colors( - 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) - }) - ) - } -} \ No newline at end of file +// var newTextStyle = textStyle +// ?: LocalTextStyle.current.copy( +// color = Black_141428, +// fontSize = 24.sp, +// fontWeight = FontWeight.Bold, +// textAlign = textAlign +// ) +// Box(modifier = modifier) { +// TextField( +// enabled = enabled, +// value = inputValue, +// textStyle = newTextStyle, +// onValueChange = { newValue -> +// Timber.d("onValueChange newValue = $newValue") +// when (inputType) { +// InputType.Number -> { +// if (newValue.isEmpty() || newValue.isValidNumber()) { +// inputValue = newValue +// onEditingComplete(true) +// } +// } +// +// InputType.Decimal -> { +// if (newValue.isEmpty() || newValue.isValidFloat()) { +// inputValue = newValue +// onEditingComplete(true) +// } +// } +// +// InputType.Percent -> { +// val range: ClosedFloatingPointRange = 0f..100f +// if (newValue.isEmpty() || (newValue.isValidFloat(1) && newValue.toFloat() in range)) { +// inputValue = newValue +// onEditingComplete(true) +// } +// } +// +// else -> { +// inputValue = newValue +// onEditingComplete(true) +// } +// } +// }, +// +// modifier = Modifier +// .fillMaxWidth() +// .background(Color.Transparent) +// .border( +// width = 2.dp, +// color = Gray_DCDCF0, +// shape = RoundedCornerShape(10.dp) +// ) +// .clickable(onClick = onClick) +//// .focusable() +// .onFocusChanged(onFocusChanged = { focusState -> +// { +// onEditingComplete(focusState.isFocused) +// } +// }), +// colors = TextFieldDefaults.colors( +// 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) +// }) +// ) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ui/weight/CustomWidget.kt b/app/src/main/java/com/sw/inbound/ui/weight/CustomWidget.kt index 343145e..9d738d4 100644 --- a/app/src/main/java/com/sw/inbound/ui/weight/CustomWidget.kt +++ b/app/src/main/java/com/sw/inbound/ui/weight/CustomWidget.kt @@ -1,126 +1,126 @@ -package com.sw.inbound.ui.weight - -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.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -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.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import com.sw.inbound.R - -@Preview -@Composable -fun BackButton() { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(start = 30.dp, end = 30.dp, bottom = 20.dp) - .height(100.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - // 左侧图标+文字 - Row( - 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_back_white), - 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 - ) - ) - } - -// Row { -// if (false) { -// CustomOutlinedButton( -// modifier = Modifier -// .width(300.dp) -// .height(100.dp), -// text = "ok", -// fontSize = 36.sp, -// onClick = {} +//package com.sw.inbound.ui.weight +// +//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.Row +//import androidx.compose.foundation.layout.Spacer +//import androidx.compose.foundation.layout.fillMaxWidth +//import androidx.compose.foundation.layout.height +//import androidx.compose.foundation.layout.padding +//import androidx.compose.foundation.layout.size +//import androidx.compose.foundation.layout.width +//import androidx.compose.foundation.shape.RoundedCornerShape +//import androidx.compose.material3.Text +//import androidx.compose.runtime.Composable +//import androidx.compose.ui.Alignment +//import androidx.compose.ui.Modifier +//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.tooling.preview.Preview +//import androidx.compose.ui.unit.dp +//import androidx.compose.ui.unit.sp +//import com.sw.inbound.R +// +//@Preview +//@Composable +//fun BackButton() { +// Row( +// modifier = Modifier +// .fillMaxWidth() +// .padding(start = 30.dp, end = 30.dp, bottom = 20.dp) +// .height(100.dp), +// verticalAlignment = Alignment.CenterVertically, +// horizontalArrangement = Arrangement.SpaceBetween +// ) { +// // 左侧图标+文字 +// Row( +// 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_back_white), +// 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 // ) -// 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 // ) // } - } -} -@Composable -fun BackButton2() { - Row( - 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 - ) - ) - } -} \ No newline at end of file +// +//// 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 +//// ) +//// } +// } +//} +//@Composable +//fun BackButton2() { +// Row( +// 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 +// ) +// ) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ui/weight/SelfProcurementListItem.kt b/app/src/main/java/com/sw/inbound/ui/weight/SelfProcurementListItem.kt index 4ba98ae..d85c216 100644 --- a/app/src/main/java/com/sw/inbound/ui/weight/SelfProcurementListItem.kt +++ b/app/src/main/java/com/sw/inbound/ui/weight/SelfProcurementListItem.kt @@ -1,145 +1,145 @@ -package com.sw.inbound.ui.weight - -import androidx.compose.foundation.Image -import androidx.compose.foundation.background -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.itemsIndexed -import androidx.compose.material3.HorizontalDivider -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.colorResource -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import com.sw.inbound.R -import com.sw.inbound.ext.bold -import com.sw.inbound.model.request.PurchaseWarehouseParam -import com.sw.inbound.ui.theme.AppTypography - -/** - * 自采购 左侧列表 - */ -@Composable -fun SelfProcurementListItem( - modifier: Modifier = Modifier, - productList: List, - checkedItem: PurchaseWarehouseParam? = null, - onItemCheckedClick: (PurchaseWarehouseParam) -> Unit = {}, - showClose: Boolean = false, - onCloseClick: (Int, PurchaseWarehouseParam) -> Unit, -) { - Column( - modifier = modifier -// .padding(horizontal = 30.dp) - ) { - // 左侧列表标题 - Row( - modifier = Modifier - .fillMaxWidth() - .padding(30.dp) - ) { - CustomSingleRightText( - modifier = Modifier.weight(1f), - text = "名称", - style = AppTypography.gray96a0aaTextStyle.bold(), - 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 } +//package com.sw.inbound.ui.weight +// +//import androidx.compose.foundation.Image +//import androidx.compose.foundation.background +//import androidx.compose.foundation.clickable +//import androidx.compose.foundation.layout.Column +//import androidx.compose.foundation.layout.Row +//import androidx.compose.foundation.layout.Spacer +//import androidx.compose.foundation.layout.fillMaxWidth +//import androidx.compose.foundation.layout.padding +//import androidx.compose.foundation.layout.size +//import androidx.compose.foundation.layout.width +//import androidx.compose.foundation.lazy.LazyColumn +//import androidx.compose.foundation.lazy.itemsIndexed +//import androidx.compose.material3.HorizontalDivider +//import androidx.compose.runtime.Composable +//import androidx.compose.ui.Alignment +//import androidx.compose.ui.Modifier +//import androidx.compose.ui.graphics.Color +//import androidx.compose.ui.res.colorResource +//import androidx.compose.ui.res.painterResource +//import androidx.compose.ui.text.style.TextAlign +//import androidx.compose.ui.unit.dp +//import com.sw.inbound.R +//import com.sw.inbound.ext.bold +//import com.sw.inbound.model.request.PurchaseWarehouseParam +//import com.sw.inbound.ui.theme.AppTypography +// +///** +// * 自采购 左侧列表 +// */ +//@Composable +//fun SelfProcurementListItem( +// modifier: Modifier = Modifier, +// productList: List, +// checkedItem: PurchaseWarehouseParam? = null, +// onItemCheckedClick: (PurchaseWarehouseParam) -> Unit = {}, +// showClose: Boolean = false, +// onCloseClick: (Int, PurchaseWarehouseParam) -> Unit, +//) { +// Column( +// modifier = modifier +//// .padding(horizontal = 30.dp) +// ) { +// // 左侧列表标题 +// Row( +// modifier = Modifier +// .fillMaxWidth() +// .padding(30.dp) +// ) { +// CustomSingleRightText( +// modifier = Modifier.weight(1f), +// text = "名称", +// style = AppTypography.gray96a0aaTextStyle.bold(), +// textAlign = TextAlign.Start // ) - { index, it -> - Row( - modifier = Modifier - .background(color = Color.Transparent) - .padding(30.dp) - .clickable { - onItemCheckedClick(it) - }, verticalAlignment = Alignment.CenterVertically - ) { - CustomSingleRightText( - modifier = Modifier.weight(1f), - text = it.goodsNameStr, - textAlign = TextAlign.Start - ) - Spacer(modifier = Modifier.width(10.dp)) - CustomSingleRightText( - modifier = Modifier.width(100.dp), - text = it.goodsUnitPriceStr, - 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)) - } - } - } -} \ No newline at end of file +// 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 -> +// Row( +// modifier = Modifier +// .background(color = Color.Transparent) +// .padding(30.dp) +// .clickable { +// onItemCheckedClick(it) +// }, verticalAlignment = Alignment.CenterVertically +// ) { +// CustomSingleRightText( +// modifier = Modifier.weight(1f), +// text = it.goodsNameStr, +// textAlign = TextAlign.Start +// ) +// Spacer(modifier = Modifier.width(10.dp)) +// CustomSingleRightText( +// modifier = Modifier.width(100.dp), +// text = it.goodsUnitPriceStr, +// 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)) +// } +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/ui/weight/TopTitleBar.kt b/app/src/main/java/com/sw/inbound/ui/weight/TopTitleBar.kt index 75204d8..ee7a33d 100644 --- a/app/src/main/java/com/sw/inbound/ui/weight/TopTitleBar.kt +++ b/app/src/main/java/com/sw/inbound/ui/weight/TopTitleBar.kt @@ -1,142 +1,142 @@ -package com.sw.inbound.ui.weight - -import android.content.Intent -import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.Image -import androidx.compose.foundation.background -import androidx.compose.foundation.clickable -import androidx.compose.foundation.combinedClickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.layout.wrapContentSize -import androidx.compose.foundation.layout.wrapContentWidth -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -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.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import com.sw.inbound.MyApp -import com.sw.inbound.R -import com.sw.inbound.activity.FoodCollectionActivity -import com.sw.inbound.ext.medium -import com.sw.inbound.model.response.User -import com.sw.inbound.ui.theme.AppTypography -import com.sw.inbound.utils.DateTimeUtils -import com.sw.inbound.utils.ext.startActivity -import kotlinx.coroutines.delay - - -@OptIn(ExperimentalFoundationApi::class) -@Preview( - widthDp = 1920, - heightDp = 1080, - showBackground = true -) -/** - * 标题 - */ -@Composable -fun TopTitleBar( - modifier: Modifier = Modifier, -// title: String = "采购单入库", - title: String = "出入库管理", - user: User? = null, - onLogoutClick: () -> Unit = {} -) { - var currentTime by remember { mutableStateOf(DateTimeUtils.getChineseDateString()) } - - // 每秒更新一次时间 - LaunchedEffect(Unit) { - while (true) { - delay(1000) // 1秒间隔 - currentTime = DateTimeUtils.getChineseDateString() - } - } - - Row( - modifier = modifier - .fillMaxWidth() - .padding(start = 60.dp, end = 60.dp, top = 22.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - - Box(modifier = Modifier - .wrapContentSize() - .clickable(onClick = { - MyApp.instance?.run { - startActivity( - Intent(this, FoodCollectionActivity::class.java).apply { - 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() +//package com.sw.inbound.ui.weight +// +//import android.content.Intent +//import androidx.compose.foundation.ExperimentalFoundationApi +//import androidx.compose.foundation.Image +//import androidx.compose.foundation.background +//import androidx.compose.foundation.clickable +//import androidx.compose.foundation.combinedClickable +//import androidx.compose.foundation.layout.Arrangement +//import androidx.compose.foundation.layout.Box +//import androidx.compose.foundation.layout.Row +//import androidx.compose.foundation.layout.Spacer +//import androidx.compose.foundation.layout.fillMaxWidth +//import androidx.compose.foundation.layout.height +//import androidx.compose.foundation.layout.padding +//import androidx.compose.foundation.layout.size +//import androidx.compose.foundation.layout.width +//import androidx.compose.foundation.layout.wrapContentSize +//import androidx.compose.foundation.layout.wrapContentWidth +//import androidx.compose.material3.Text +//import androidx.compose.runtime.Composable +//import androidx.compose.runtime.LaunchedEffect +//import androidx.compose.runtime.getValue +//import androidx.compose.runtime.mutableStateOf +//import androidx.compose.runtime.remember +//import androidx.compose.runtime.setValue +//import androidx.compose.ui.Alignment +//import androidx.compose.ui.Modifier +//import androidx.compose.ui.graphics.Color +//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.tooling.preview.Preview +//import androidx.compose.ui.unit.dp +//import androidx.compose.ui.unit.sp +//import com.sw.inbound.MyApp +//import com.sw.inbound.R +//import com.sw.inbound.activity.FoodCollectionActivity +//import com.sw.inbound.ext.medium +//import com.sw.inbound.model.response.User +//import com.sw.inbound.ui.theme.AppTypography +//import com.sw.inbound.utils.DateTimeUtils +//import com.sw.inbound.utils.ext.startActivity +//import kotlinx.coroutines.delay +// +// +//@OptIn(ExperimentalFoundationApi::class) +//@Preview( +// widthDp = 1920, +// heightDp = 1080, +// showBackground = true +//) +///** +// * 标题 +// */ +//@Composable +//fun TopTitleBar( +// modifier: Modifier = Modifier, +//// title: String = "采购单入库", +// title: String = "出入库管理", +// user: User? = null, +// onLogoutClick: () -> Unit = {} +//) { +// var currentTime by remember { mutableStateOf(DateTimeUtils.getChineseDateString()) } +// +// // 每秒更新一次时间 +// LaunchedEffect(Unit) { +// while (true) { +// delay(1000) // 1秒间隔 +// currentTime = DateTimeUtils.getChineseDateString() +// } +// } +// +// Row( +// modifier = modifier +// .fillMaxWidth() +// .padding(start = 60.dp, end = 60.dp, top = 22.dp), +// verticalAlignment = Alignment.CenterVertically, +// horizontalArrangement = Arrangement.SpaceBetween +// ) { +// +// Box(modifier = Modifier +// .wrapContentSize() +// .clickable(onClick = { +// MyApp.instance?.run { +// startActivity( +// Intent(this, FoodCollectionActivity::class.java).apply { +// addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) +// } +// ) // } +// })) { +// Text( +// text = title, +// style = TextStyle( +// fontWeight = FontWeight.Bold, +// color = colorResource(R.color.title), +// fontSize = 36.sp // ), - text = currentTime, - style = TextStyle( - fontWeight = FontWeight.Medium, - color = colorResource(R.color.black), - fontSize = 24.sp - ) - ) - } - } -} \ No newline at end of file +// 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 = currentTime, +// style = TextStyle( +// fontWeight = FontWeight.Medium, +// color = colorResource(R.color.black), +// fontSize = 24.sp +// ) +// ) +// } +// } +//} diff --git a/app/src/main/java/com/sw/inbound/utils/ContextUtils.kt b/app/src/main/java/com/sw/inbound/utils/ContextUtils.kt index bef33ec..845c75a 100644 --- a/app/src/main/java/com/sw/inbound/utils/ContextUtils.kt +++ b/app/src/main/java/com/sw/inbound/utils/ContextUtils.kt @@ -2,9 +2,9 @@ package com.sw.inbound.utils import android.content.Context import android.view.View -import androidx.compose.runtime.Composable -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalView +//import androidx.compose.runtime.Composable +//import androidx.compose.ui.platform.LocalContext +//import androidx.compose.ui.platform.LocalView /** * Context 工具类 @@ -17,18 +17,18 @@ object ContextUtils { * 获取当前 Composable 的 Activity Context * 只能在 @Composable 函数中调用 */ - @Composable - fun getActivityContext(): Context { - return LocalContext.current - } +// @Composable +// fun getActivityContext(): Context { +// return LocalContext.current +// } /** * 获取当前 Composable 的 View */ - @Composable - fun getLocalView(): View { - return LocalView.current - } +// @Composable +// fun getLocalView(): View { +// return LocalView.current +// } // ========== 非 Composable 环境获取 ========== @@ -47,4 +47,4 @@ object ContextUtils { "Application context not initialized. Call initAppContext() first." ) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/sw/inbound/utils/CrashHandler.kt b/app/src/main/java/com/sw/inbound/utils/CrashHandler.kt index d7af5da..136d259 100644 --- a/app/src/main/java/com/sw/inbound/utils/CrashHandler.kt +++ b/app/src/main/java/com/sw/inbound/utils/CrashHandler.kt @@ -9,7 +9,7 @@ import android.os.Build import android.os.Handler import android.os.Looper import android.os.Process -import com.sw.inbound.MainActivity +import com.sw.inbound.activity.HomeActivity import timber.log.Timber import java.io.File import java.io.FileOutputStream @@ -86,7 +86,7 @@ class CrashHandler private constructor(private val context: Context) : private fun restartApp() { // 延迟1秒后重启应用 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) } diff --git a/app/src/main/java/com/sw/inbound/utils/InteractionUtils.kt b/app/src/main/java/com/sw/inbound/utils/InteractionUtils.kt index 953552f..e1d8156 100644 --- a/app/src/main/java/com/sw/inbound/utils/InteractionUtils.kt +++ b/app/src/main/java/com/sw/inbound/utils/InteractionUtils.kt @@ -1,223 +1,223 @@ -package com.sw.inbound.utils - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableIntStateOf -import androidx.compose.runtime.mutableLongStateOf -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.setValue -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Job -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch - -/** - * Jetpack Compose 交互工具集 - * 包含快速点击过滤、防抖、节流、双击检测、长按检测等功能 - */ -object InteractionUtils { - - // ======================== 点击过滤 ======================== - - /** - * 快速点击过滤器 - * @param minInterval 最小点击间隔时间(毫秒),默认500ms - */ - class ClickFilter(private val minInterval: Long = 500L) { - private var lastClickTime: Long = 0 - - /** - * 处理点击事件 - * @return Boolean 是否允许此次点击(true=允许,false=拦截) - */ - fun processClick(): Boolean { - val currentTime = System.currentTimeMillis() - return if (currentTime - lastClickTime > minInterval) { - lastClickTime = currentTime - true - } else { - false - } - } - - /** - * 处理点击事件(带回调) - */ - fun processClick(block: () -> Unit) { - if (processClick()) { - block() - } - } - } - - /** - * 记住点击过滤器 - */ - @Composable - fun rememberClickFilter(minInterval: Long = 500L): ClickFilter { - return remember { ClickFilter(minInterval) } - } - - // ======================== 防抖处理 ======================== - - /** - * 防抖工具类 - * @param delayMillis 防抖延迟时间(毫秒) - */ - class Debouncer(private val delayMillis: Long) { - private var lastActionTime = 0L - - /** - * 执行防抖操作 - * @param block 要执行的代码块 - * @return Boolean 是否实际执行了操作 - */ - fun debounce(block: () -> Unit): Boolean { - val currentTime = System.currentTimeMillis() - if (currentTime - lastActionTime >= delayMillis) { - lastActionTime = currentTime - block() - return true - } - return false - } - } - // ======================== 双击检测 ======================== - - /** - * 双击检测器 - */ - class DoubleClickDetector( - private val timeout: Long = 500L, - private val onSingleClick: () -> Unit = {}, - private val onDoubleClick: () -> Unit - ) { - private var clickCount by mutableIntStateOf(0) - private var lastClickTime by mutableLongStateOf(0L) - - /** - * 处理点击事件 - */ - fun processClick(coroutineScope: CoroutineScope) { - val currentTime = System.currentTimeMillis() - if (currentTime - lastClickTime < timeout) { - clickCount++ - if (clickCount == 2) { - onDoubleClick() - clickCount = 0 - } - } else { - clickCount = 1 - coroutineScope.launch { - delay(timeout) - if (clickCount == 1) { - onSingleClick() - } - clickCount = 0 - } - } - lastClickTime = currentTime - } - } - - /** - * 记住双击检测器 - */ - @Composable - fun rememberDoubleClickDetector( - timeout: Long = 300L, - onSingleClick: () -> Unit = {}, - onDoubleClick: () -> Unit - ): () -> Unit { - val detector = remember { DoubleClickDetector(timeout, onSingleClick, onDoubleClick) } - val scope = rememberCoroutineScope() - - return { - detector.processClick(scope) - } - } - - // ======================== 长按检测 ======================== - - /** - * 长按检测器 - */ - class LongPressDetector( - private val delay: Long = 1000L, - private val onLongPress: () -> Unit, - private val onClick: () -> Unit = {} - ) { - private var pressJob: Job? = null - - /** - * 处理按压事件 - */ - fun handlePress(coroutineScope: CoroutineScope) { - pressJob = coroutineScope.launch { - delay(delay) - onLongPress() - } - } - - /** - * 处理释放事件 - */ - fun handleRelease() { - pressJob?.cancel() - pressJob = null - onClick() - } - } - - /** - * 记住长按检测器 - */ - @Composable - fun rememberLongPressDetector( - delay: Long = 1000L, - onLongPress: () -> Unit, - onClick: () -> Unit = {} - ): Pair<() -> Unit, () -> Unit> { - val detector = remember { LongPressDetector(delay, onLongPress, onClick) } - val scope = rememberCoroutineScope() - - return Pair( - first = { detector.handlePress(scope) }, - second = { detector.handleRelease() } - ) - } - - // ======================== 组合工具 ======================== - - /** - * 带状态的按钮控制器 - */ - class StatefulButtonController { - var isLoading by mutableStateOf(false) - private val clickFilter = ClickFilter() - - /** - * 处理按钮点击 - */ - suspend fun handleClick(block: suspend () -> Unit) { - if (clickFilter.processClick()) { - isLoading = true - try { - block() - } finally { - isLoading = false - } - } - } - } - - /** - * 记住带状态的按钮控制器 - */ - @Composable - fun rememberStatefulButtonController(): StatefulButtonController { - return remember { StatefulButtonController() } - } -} \ No newline at end of file +//package com.sw.inbound.utils +// +//import androidx.compose.runtime.Composable +//import androidx.compose.runtime.getValue +//import androidx.compose.runtime.mutableIntStateOf +//import androidx.compose.runtime.mutableLongStateOf +//import androidx.compose.runtime.mutableStateOf +//import androidx.compose.runtime.remember +//import androidx.compose.runtime.rememberCoroutineScope +//import androidx.compose.runtime.setValue +//import kotlinx.coroutines.CoroutineScope +//import kotlinx.coroutines.Job +//import kotlinx.coroutines.delay +//import kotlinx.coroutines.launch +// +///** +// * Jetpack Compose 交互工具集 +// * 包含快速点击过滤、防抖、节流、双击检测、长按检测等功能 +// */ +//object InteractionUtils { +// +// // ======================== 点击过滤 ======================== +// +// /** +// * 快速点击过滤器 +// * @param minInterval 最小点击间隔时间(毫秒),默认500ms +// */ +// class ClickFilter(private val minInterval: Long = 500L) { +// private var lastClickTime: Long = 0 +// +// /** +// * 处理点击事件 +// * @return Boolean 是否允许此次点击(true=允许,false=拦截) +// */ +// fun processClick(): Boolean { +// val currentTime = System.currentTimeMillis() +// return if (currentTime - lastClickTime > minInterval) { +// lastClickTime = currentTime +// true +// } else { +// false +// } +// } +// +// /** +// * 处理点击事件(带回调) +// */ +// fun processClick(block: () -> Unit) { +// if (processClick()) { +// block() +// } +// } +// } +// +// /** +// * 记住点击过滤器 +// */ +// @Composable +// fun rememberClickFilter(minInterval: Long = 500L): ClickFilter { +// return remember { ClickFilter(minInterval) } +// } +// +// // ======================== 防抖处理 ======================== +// +// /** +// * 防抖工具类 +// * @param delayMillis 防抖延迟时间(毫秒) +// */ +// class Debouncer(private val delayMillis: Long) { +// private var lastActionTime = 0L +// +// /** +// * 执行防抖操作 +// * @param block 要执行的代码块 +// * @return Boolean 是否实际执行了操作 +// */ +// fun debounce(block: () -> Unit): Boolean { +// val currentTime = System.currentTimeMillis() +// if (currentTime - lastActionTime >= delayMillis) { +// lastActionTime = currentTime +// block() +// return true +// } +// return false +// } +// } +// // ======================== 双击检测 ======================== +// +// /** +// * 双击检测器 +// */ +// class DoubleClickDetector( +// private val timeout: Long = 500L, +// private val onSingleClick: () -> Unit = {}, +// private val onDoubleClick: () -> Unit +// ) { +// private var clickCount by mutableIntStateOf(0) +// private var lastClickTime by mutableLongStateOf(0L) +// +// /** +// * 处理点击事件 +// */ +// fun processClick(coroutineScope: CoroutineScope) { +// val currentTime = System.currentTimeMillis() +// if (currentTime - lastClickTime < timeout) { +// clickCount++ +// if (clickCount == 2) { +// onDoubleClick() +// clickCount = 0 +// } +// } else { +// clickCount = 1 +// coroutineScope.launch { +// delay(timeout) +// if (clickCount == 1) { +// onSingleClick() +// } +// clickCount = 0 +// } +// } +// lastClickTime = currentTime +// } +// } +// +// /** +// * 记住双击检测器 +// */ +// @Composable +// fun rememberDoubleClickDetector( +// timeout: Long = 300L, +// onSingleClick: () -> Unit = {}, +// onDoubleClick: () -> Unit +// ): () -> Unit { +// val detector = remember { DoubleClickDetector(timeout, onSingleClick, onDoubleClick) } +// val scope = rememberCoroutineScope() +// +// return { +// detector.processClick(scope) +// } +// } +// +// // ======================== 长按检测 ======================== +// +// /** +// * 长按检测器 +// */ +// class LongPressDetector( +// private val delay: Long = 1000L, +// private val onLongPress: () -> Unit, +// private val onClick: () -> Unit = {} +// ) { +// private var pressJob: Job? = null +// +// /** +// * 处理按压事件 +// */ +// fun handlePress(coroutineScope: CoroutineScope) { +// pressJob = coroutineScope.launch { +// delay(delay) +// onLongPress() +// } +// } +// +// /** +// * 处理释放事件 +// */ +// fun handleRelease() { +// pressJob?.cancel() +// pressJob = null +// onClick() +// } +// } +// +// /** +// * 记住长按检测器 +// */ +// @Composable +// fun rememberLongPressDetector( +// delay: Long = 1000L, +// onLongPress: () -> Unit, +// onClick: () -> Unit = {} +// ): Pair<() -> Unit, () -> Unit> { +// val detector = remember { LongPressDetector(delay, onLongPress, onClick) } +// val scope = rememberCoroutineScope() +// +// return Pair( +// first = { detector.handlePress(scope) }, +// second = { detector.handleRelease() } +// ) +// } +// +// // ======================== 组合工具 ======================== +// +// /** +// * 带状态的按钮控制器 +// */ +// class StatefulButtonController { +// var isLoading by mutableStateOf(false) +// private val clickFilter = ClickFilter() +// +// /** +// * 处理按钮点击 +// */ +// suspend fun handleClick(block: suspend () -> Unit) { +// if (clickFilter.processClick()) { +// isLoading = true +// try { +// block() +// } finally { +// isLoading = false +// } +// } +// } +// } +// +// /** +// * 记住带状态的按钮控制器 +// */ +// @Composable +// fun rememberStatefulButtonController(): StatefulButtonController { +// return remember { StatefulButtonController() } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/utils/PhotoCaptureHelper.kt b/app/src/main/java/com/sw/inbound/utils/PhotoCaptureHelper.kt index e30c626..09c9806 100644 --- a/app/src/main/java/com/sw/inbound/utils/PhotoCaptureHelper.kt +++ b/app/src/main/java/com/sw/inbound/utils/PhotoCaptureHelper.kt @@ -5,9 +5,9 @@ import android.net.Uri import androidx.camera.core.ImageCapture import androidx.camera.core.ImageCaptureException import androidx.camera.view.CameraController -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.platform.LocalContext +//import androidx.compose.runtime.Composable +//import androidx.compose.runtime.remember +//import androidx.compose.ui.platform.LocalContext import androidx.core.content.ContextCompat import timber.log.Timber import java.io.File @@ -101,21 +101,21 @@ class PhotoCaptureHelper( * @param onError (String) -> Unit 拍照失败回调 * @return Pair Unit> 返回工具类实例和拍照函数 */ -@Composable -fun rememberPhotoCapture( - cameraController: CameraController, - onSuccess: (Uri) -> Unit = {}, - onError: (String) -> Unit = {} -): Pair Unit> { - val context = LocalContext.current - val photoCaptureHelper = remember { - PhotoCaptureHelper( - context = context, - cameraController = cameraController, - onSuccess = onSuccess, - onError = onError - ) - } - - return Pair(photoCaptureHelper) { photoCaptureHelper.takePhoto() } -} \ No newline at end of file +//@Composable +//fun rememberPhotoCapture( +// cameraController: CameraController, +// onSuccess: (Uri) -> Unit = {}, +// onError: (String) -> Unit = {} +//): Pair Unit> { +// val context = LocalContext.current +// val photoCaptureHelper = remember { +// PhotoCaptureHelper( +// context = context, +// cameraController = cameraController, +// onSuccess = onSuccess, +// onError = onError +// ) +// } +// +// return Pair(photoCaptureHelper) { photoCaptureHelper.takePhoto() } +//} diff --git a/app/src/main/java/com/sw/inbound/utils/ToastUtils.kt b/app/src/main/java/com/sw/inbound/utils/ToastUtils.kt index 3f83e7b..6fb5579 100644 --- a/app/src/main/java/com/sw/inbound/utils/ToastUtils.kt +++ b/app/src/main/java/com/sw/inbound/utils/ToastUtils.kt @@ -1,56 +1,56 @@ -package com.sw.inbound.utils - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import kotlinx.coroutines.delay - -object ToastUtils { - private var show by mutableStateOf(false) - private var message by mutableStateOf("") - - fun showToast(msg: String) { - message = msg - show = true -// Toast.makeText(ContextUtils.getAppContext(), msg, Toast.LENGTH_LONG).show() - } - - @Composable - fun ToastComposable() { - if (show) { - LaunchedEffect(Unit) { - delay(2000) // 自动2秒后消失 - show = false - } - Box( - modifier = Modifier -// .fillMaxWidth() - .fillMaxSize() - .padding(bottom = 156.dp), - contentAlignment = Alignment.BottomCenter - ) { - Text( - text = message, - modifier = Modifier - .background(Color.Black.copy(alpha = 0.7f), RoundedCornerShape(8.dp)) - .padding(horizontal = 24.dp, vertical = 12.dp), - color = Color.White, - fontSize = 24.sp - ) - } - } - } -} \ No newline at end of file +//package com.sw.inbound.utils +// +//import androidx.compose.foundation.background +//import androidx.compose.foundation.layout.Box +//import androidx.compose.foundation.layout.fillMaxSize +//import androidx.compose.foundation.layout.padding +//import androidx.compose.foundation.shape.RoundedCornerShape +//import androidx.compose.material3.Text +//import androidx.compose.runtime.Composable +//import androidx.compose.runtime.LaunchedEffect +//import androidx.compose.runtime.getValue +//import androidx.compose.runtime.mutableStateOf +//import androidx.compose.runtime.setValue +//import androidx.compose.ui.Alignment +//import androidx.compose.ui.Modifier +//import androidx.compose.ui.graphics.Color +//import androidx.compose.ui.unit.dp +//import androidx.compose.ui.unit.sp +//import kotlinx.coroutines.delay +// +//object ToastUtils { +// private var show by mutableStateOf(false) +// private var message by mutableStateOf("") +// +// fun showToast(msg: String) { +// message = msg +// show = true +//// Toast.makeText(ContextUtils.getAppContext(), msg, Toast.LENGTH_LONG).show() +// } +// +// @Composable +// fun ToastComposable() { +// if (show) { +// LaunchedEffect(Unit) { +// delay(2000) // 自动2秒后消失 +// show = false +// } +// Box( +// modifier = Modifier +//// .fillMaxWidth() +// .fillMaxSize() +// .padding(bottom = 156.dp), +// contentAlignment = Alignment.BottomCenter +// ) { +// Text( +// text = message, +// modifier = Modifier +// .background(Color.Black.copy(alpha = 0.7f), RoundedCornerShape(8.dp)) +// .padding(horizontal = 24.dp, vertical = 12.dp), +// color = Color.White, +// fontSize = 24.sp +// ) +// } +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/viewmodel/BaseViewModel.kt b/app/src/main/java/com/sw/inbound/viewmodel/BaseViewModel.kt index d60d2a5..2ea994a 100644 --- a/app/src/main/java/com/sw/inbound/viewmodel/BaseViewModel.kt +++ b/app/src/main/java/com/sw/inbound/viewmodel/BaseViewModel.kt @@ -14,7 +14,7 @@ import com.sw.inbound.network.LoadingState import com.sw.inbound.objbox.FoodModule import com.sw.inbound.repository.RemoteRepository 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 kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow @@ -113,7 +113,7 @@ abstract class BaseViewModel( is HttpException -> "服务器错误: ${e.code()}" else -> "操作失败: ${e.message}" } - ToastUtils.showToast(message) + //ToastUtils.showToast(message) } // fun startSensorScale() { diff --git a/app/src/main/java/com/sw/inbound/viewmodel/DeviceViewModel.kt b/app/src/main/java/com/sw/inbound/viewmodel/DeviceViewModel.kt index cbee992..e63e362 100644 --- a/app/src/main/java/com/sw/inbound/viewmodel/DeviceViewModel.kt +++ b/app/src/main/java/com/sw/inbound/viewmodel/DeviceViewModel.kt @@ -6,7 +6,7 @@ import com.sw.inbound.model.response.EquipmentInfo import com.sw.inbound.repository.RemoteRepository import com.sw.inbound.utils.GsonUtils 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 kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -45,7 +45,7 @@ class DeviceViewModel @Inject constructor( Timber.e(e) } } else { - ToastUtils.showToast("获取设备信息失败") + //ToastUtils.showToast("获取设备信息失败") } } } diff --git a/app/src/main/java/com/sw/inbound/viewmodel/UserViewModel.kt b/app/src/main/java/com/sw/inbound/viewmodel/UserViewModel.kt index f277807..457ca1b 100644 --- a/app/src/main/java/com/sw/inbound/viewmodel/UserViewModel.kt +++ b/app/src/main/java/com/sw/inbound/viewmodel/UserViewModel.kt @@ -1,8 +1,5 @@ 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.GlobalKey import com.sw.inbound.model.request.LoginParam