add inTask && add listAvailVehicle
This commit is contained in:
parent
5194d953ed
commit
ead32cfa5f
|
|
@ -6,8 +6,8 @@ class BaseDio {
|
|||
static Dio instance() {
|
||||
if (!initializeComplete) {
|
||||
final options = BaseOptions(
|
||||
baseUrl: 'http://10.0.2.2:9990',
|
||||
// baseUrl: 'http://192.168.1.3:9990',
|
||||
// baseUrl: 'http://10.0.2.2:9990',
|
||||
baseUrl: 'http://10.24.0.62:9990',
|
||||
connectTimeout: const Duration(seconds: 10),
|
||||
receiveTimeout: const Duration(seconds: 5),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -53,6 +53,28 @@ class StockInApi {
|
|||
return {"code": response.statusCode, "data": response.data};
|
||||
}
|
||||
|
||||
/// 码盘完成
|
||||
static Future<dynamic> createInTask(
|
||||
List<StockInDataXuGong> stockInDataXuGong, String vehicleNo,
|
||||
{int timeOut = 5000}) async {
|
||||
logger.e("yuqili $stockInDataXuGong");
|
||||
final stockInDataJson =
|
||||
stockInDataXuGong.map((item) => item.toJson()).toList();
|
||||
final request = {
|
||||
"data": stockInDataJson,
|
||||
"vehicleNo": vehicleNo
|
||||
};
|
||||
final response =
|
||||
await BaseDio.instance().post<String>("/app/task/createInRequest",
|
||||
data: jsonEncode(request),
|
||||
options: Options(
|
||||
responseType: ResponseType.json,
|
||||
sendTimeout: Duration(milliseconds: timeOut),
|
||||
receiveTimeout: Duration(milliseconds: timeOut),
|
||||
));
|
||||
return {"code": response.statusCode, "data": response.data};
|
||||
}
|
||||
|
||||
/// 扫描之后从数据库获取EBS数据
|
||||
static Future<dynamic> getGoodsCanUse(String orderId, String goodsId,
|
||||
{int timeOut = 5000}) async {
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ class StockOutApi {
|
|||
);
|
||||
static var uuidGen = Uuid();
|
||||
|
||||
/// 码盘完成
|
||||
static Future<dynamic> getEmptyVehicle({int timeOut = 5000}) async {
|
||||
final response = await BaseDio.instance()
|
||||
.post<String>("/api/mobile/stockOut/outEmptyVehicle",
|
||||
|
|
@ -23,11 +22,10 @@ class StockOutApi {
|
|||
return {"code": response.statusCode, "data": response.data};
|
||||
}
|
||||
|
||||
/// 获取载具状态
|
||||
static Future<dynamic> getVehicleIsEmpty(int vehicleId,
|
||||
{int timeOut = 5000}) async {
|
||||
/// 获取载具状态列表
|
||||
static Future<dynamic> getAvailVehicleList({int timeOut = 5000}) async {
|
||||
final response =
|
||||
await BaseDio.instance().get<String>("/app/vehicle/$vehicleId",
|
||||
await BaseDio.instance().get<String>("/app/vehicle/listAvail",
|
||||
options: Options(
|
||||
responseType: ResponseType.json,
|
||||
sendTimeout: Duration(milliseconds: timeOut),
|
||||
|
|
@ -36,24 +34,20 @@ class StockOutApi {
|
|||
return {"code": response.statusCode, "data": response.data};
|
||||
}
|
||||
|
||||
static Future<dynamic> addStockOut({int timeOut = 5000}) async {
|
||||
final response = await BaseDio.instance().post<String>("/app/pmsOrderOut",
|
||||
data: jsonEncode({
|
||||
"listId": uuidGen.v4(),
|
||||
"orderType": 1,
|
||||
"customerId": uuidGen.v1(),
|
||||
"goodsId": uuidGen.v4(),
|
||||
"goodsNum": 0,
|
||||
"goodsDesc": "empty",
|
||||
"spare1": uuidGen.v1(),
|
||||
"spare2": uuidGen.v1(),
|
||||
"orderStatus": 1,
|
||||
}),
|
||||
options: Options(
|
||||
responseType: ResponseType.json,
|
||||
sendTimeout: Duration(milliseconds: timeOut),
|
||||
receiveTimeout: Duration(milliseconds: timeOut),
|
||||
));
|
||||
static Future<dynamic> addStockOut(String goodsId, int needNum, String remark,
|
||||
{int timeOut = 5000}) async {
|
||||
final response =
|
||||
await BaseDio.instance().post<String>("/app/task/createOutRequest",
|
||||
data: jsonEncode({
|
||||
"goodsId": goodsId,
|
||||
"needNum": needNum,
|
||||
"remark": remark
|
||||
}),
|
||||
options: Options(
|
||||
responseType: ResponseType.json,
|
||||
sendTimeout: Duration(milliseconds: timeOut),
|
||||
receiveTimeout: Duration(milliseconds: timeOut),
|
||||
));
|
||||
logger.e("yuqili ${response.data}");
|
||||
return {"code": response.statusCode, "data": response.data};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,11 +4,14 @@ import 'package:bruno/bruno.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:wms_app/api_client/dto/empty_Vehicle_in_request.dart';
|
||||
import 'package:wms_app/api_client/stock_in.dart';
|
||||
import 'package:wms_app/page/stockIn/stock_in_buy.dart';
|
||||
import '../../model/bo/stock_in_data_xugong.dart';
|
||||
import '/common/colorCom.dart';
|
||||
import 'package:wms_app/utils/dialogUtils.dart';
|
||||
|
||||
class StockInEmpty extends StatefulWidget {
|
||||
const StockInEmpty({super.key});
|
||||
|
||||
@override
|
||||
State<StockInEmpty> createState() => _StockInEmptyPageState();
|
||||
}
|
||||
|
|
@ -36,77 +39,152 @@ class _StockInEmptyPageState extends State<StockInEmpty> {
|
|||
),
|
||||
body: Center(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 5, left: 10, right: 10),
|
||||
child: ListView(
|
||||
children: [
|
||||
BrnTextInputFormItem(
|
||||
controller: _vehicleTextController,
|
||||
title: "料箱号:",
|
||||
hint: "需要入库的料箱号",
|
||||
isRequire: true,
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 5),
|
||||
child: ElevatedButton(
|
||||
onPressed: emptyIn,
|
||||
style: ButtonStyle(
|
||||
backgroundColor:
|
||||
WidgetStateProperty.all(ColorCommon.colorScheme),
|
||||
),
|
||||
child: const Text("空载具入库", style: TextStyle(color: Colors.white))
|
||||
)
|
||||
)
|
||||
],
|
||||
)
|
||||
),
|
||||
padding: const EdgeInsets.only(top: 5, left: 10, right: 10),
|
||||
child: ListView(
|
||||
children: [
|
||||
BrnTextInputFormItem(
|
||||
controller: _vehicleTextController,
|
||||
title: "料箱号:",
|
||||
hint: "需要入库的料箱号",
|
||||
isRequire: true,
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 5),
|
||||
child: ElevatedButton(
|
||||
onPressed: emptyIn,
|
||||
style: ButtonStyle(
|
||||
backgroundColor:
|
||||
WidgetStateProperty.all(ColorCommon.colorScheme),
|
||||
),
|
||||
child: const Text("空载具入库",
|
||||
style: TextStyle(color: Colors.white))))
|
||||
],
|
||||
)),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/// 空托入库方法
|
||||
void emptyIn() {
|
||||
String vehicleNo = _vehicleTextController.text.trim();
|
||||
if (vehicleNo == "") {
|
||||
if (vehicleNo.isEmpty) {
|
||||
DialogUtils.showWarningMessage(context, "请先填写容器号", "", btnLabel: "返回填写");
|
||||
return;
|
||||
}
|
||||
|
||||
// 显示加载对话框
|
||||
BrnLoadingDialog.show(context,
|
||||
content: "请稍后...", barrierDismissible: false);
|
||||
// var emptyVehicleInReq = EmptyVehicleInReq(vehicleNo: vehicleNo).toJsonString();
|
||||
StockInApi.emptyVehicleIn(vehicleNo).then((response) {
|
||||
if (response["code"] != 200) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showWarningMessage(thisContext, "警告", "服务器请求失败", btnLabel: "我知道了");
|
||||
}
|
||||
|
||||
// 第一步:调用 emptyVehicleIn
|
||||
_emptyVehicleIn(vehicleNo).then((isEmptyVehicleInSuccess) {
|
||||
if (!isEmptyVehicleInSuccess) {
|
||||
_dismissLoading();
|
||||
return;
|
||||
}
|
||||
final data = Map<String, dynamic>.from(jsonDecode(response["data"]));
|
||||
if (data["code"] == 200) {
|
||||
// 请求成功
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showSuccessMessage(thisContext, "成功", "", btnLabel: "我知道了");
|
||||
_vehicleTextController.clear();
|
||||
|
||||
// 第二步:调用 createInTask
|
||||
_createInTask(vehicleNo).then((isCreateInTaskSuccess) {
|
||||
_dismissLoading();
|
||||
if (isCreateInTaskSuccess) {
|
||||
_showSuccessDialog("空托入库成功");
|
||||
_clearData();
|
||||
} else {
|
||||
_showWarningDialog("创建入库任务失败");
|
||||
}
|
||||
return;
|
||||
}
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showWarningMessage(thisContext, "警告", "服务器返回失败:${data["message"]}", btnLabel: "我知道了");
|
||||
}
|
||||
return;
|
||||
}).catchError((err) {
|
||||
_dismissLoading();
|
||||
_handleError(err);
|
||||
});
|
||||
}).catchError((err) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showErrorMessage(thisContext, "请求发生错误", "请求服务器发生错误:${err.toString()}", btnLabel: "我知道了");
|
||||
}
|
||||
return;
|
||||
}).whenComplete(() {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
BrnLoadingDialog.dismiss(thisContext);
|
||||
}
|
||||
_dismissLoading();
|
||||
_handleError(err);
|
||||
});
|
||||
}
|
||||
|
||||
// 调用 emptyVehicleIn 接口
|
||||
Future<bool> _emptyVehicleIn(String vehicleNo) async {
|
||||
try {
|
||||
var response = await StockInApi.emptyVehicleIn(vehicleNo);
|
||||
if (response["code"] != 200) {
|
||||
_showWarningDialog("服务器请求失败");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} catch (err) {
|
||||
_handleError(err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 调用 createInTask 接口
|
||||
Future<bool> _createInTask(String vehicleNo) async {
|
||||
try {
|
||||
var response = await StockInApi.createInTask([
|
||||
StockInDataXuGong(
|
||||
goodsId: "0",
|
||||
goodsNum: 1,
|
||||
goodsDesc: "空托",
|
||||
orderType: 1,
|
||||
weight: 10,
|
||||
size: 10,
|
||||
listId: uuidGen.v4(),
|
||||
unit: "个",
|
||||
customerName: "test",
|
||||
spare2: "test",
|
||||
spare1: "test")
|
||||
], vehicleNo);
|
||||
|
||||
if (response["code"] != 200) {
|
||||
_showWarningDialog("服务器请求失败");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} catch (err) {
|
||||
_handleError(err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 显示错误提示
|
||||
void _handleError(dynamic err) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showErrorMessage(
|
||||
thisContext, "请求发生错误", "请求服务器发生错误:${err.toString()}",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
}
|
||||
|
||||
// 显示成功提示
|
||||
void _showSuccessDialog(String message) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showSuccessMessage(thisContext, message, "",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
}
|
||||
|
||||
// 显示警告提示
|
||||
void _showWarningDialog(String message) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showWarningMessage(thisContext, "警告", message,
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
}
|
||||
|
||||
// 清除数据
|
||||
void _clearData() {
|
||||
setState(() {
|
||||
_vehicleTextController.clear();
|
||||
});
|
||||
}
|
||||
|
||||
// 隐藏加载对话框
|
||||
void _dismissLoading() {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
BrnLoadingDialog.dismiss(thisContext);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -197,67 +197,136 @@ class _StockInNormalState extends State<StockInNormal> {
|
|||
return;
|
||||
}
|
||||
|
||||
/// 码盘完成
|
||||
void wheelComplete() {
|
||||
if (stockInDataXuGong.isEmpty) {
|
||||
DialogUtils.showWarningMessage(context, "警告", "您的码盘数据为空", btnLabel: "确定");
|
||||
return;
|
||||
}
|
||||
|
||||
String vehicleNo = _vehicleTextController.text;
|
||||
int dataCount = stockInDataXuGong.length;
|
||||
|
||||
DialogUtils.showConfirmMessage(
|
||||
context, "码盘完成", "载具:$vehicleNo 码盘 $dataCount 条数据,是否继续?",
|
||||
confirmBtn: "继续", confirm: () {
|
||||
int taskType = 1; // 1 表示进库,2 表示进站台
|
||||
BrnLoadingDialog.show(context, content: "正在请求入库");
|
||||
StockInApi.stockInComplete(stockInDataXuGong, vehicleNo)
|
||||
.then((response) {
|
||||
if (response["code"] != 200) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showWarningMessage(thisContext, "警告", "服务器请求失败",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
return;
|
||||
}
|
||||
final data = Map<String, dynamic>.from(jsonDecode(response["data"]));
|
||||
if (data["code"] == 200) {
|
||||
// 请求成功
|
||||
setState(() {
|
||||
_vehicleTextController.clear();
|
||||
stockInDataXuGong = [];
|
||||
context,
|
||||
"码盘完成",
|
||||
"载具:$vehicleNo 码盘 $dataCount 条数据,是否继续?",
|
||||
confirmBtn: "继续",
|
||||
confirm: () {
|
||||
int taskType = 1; // 1 表示进库,2 表示进站台
|
||||
BrnLoadingDialog.show(context, content: "正在请求入库");
|
||||
|
||||
_stockInComplete(vehicleNo).then((isCompleteSuccess) {
|
||||
if (!isCompleteSuccess) {
|
||||
_dismissLoading();
|
||||
return;
|
||||
}
|
||||
|
||||
_createInTask(vehicleNo).then((isTaskSuccess) {
|
||||
_dismissLoading();
|
||||
if (isTaskSuccess) {
|
||||
_showSuccessDialog("入库成功");
|
||||
_clearData();
|
||||
} else {
|
||||
_showWarningDialog("创建任务失败");
|
||||
}
|
||||
}).catchError((err) {
|
||||
_dismissLoading();
|
||||
_handleError(err);
|
||||
});
|
||||
}).catchError((err) {
|
||||
_dismissLoading();
|
||||
_handleError(err);
|
||||
});
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showSuccessMessage(thisContext, "码盘成功", "",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
return;
|
||||
}
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showWarningMessage(
|
||||
thisContext, "警告", "服务器返回失败:${data["message"]}",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
return;
|
||||
}).catchError((err) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showErrorMessage(
|
||||
thisContext, "请求发生错误", "请求服务器发生错误:${err.toString()}",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
return;
|
||||
}).whenComplete(() {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
BrnLoadingDialog.dismiss(thisContext);
|
||||
}
|
||||
});
|
||||
);
|
||||
}
|
||||
|
||||
// 完成入库请求
|
||||
Future<bool> _stockInComplete(String vehicleNo) async {
|
||||
try {
|
||||
var response = await StockInApi.stockInComplete(stockInDataXuGong, vehicleNo);
|
||||
if (response["code"] != 200) {
|
||||
_showWarningDialog("服务器请求失败");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} catch (err) {
|
||||
_handleError(err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 创建入库任务
|
||||
Future<bool> _createInTask(String vehicleNo) async {
|
||||
try {
|
||||
var response = await StockInApi.createInTask(stockInDataXuGong, vehicleNo);
|
||||
if (response["code"] != 200) {
|
||||
_showWarningDialog("服务器请求失败");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} catch (err) {
|
||||
_handleError(err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 显示错误提示
|
||||
void _handleError(dynamic err) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showErrorMessage(
|
||||
thisContext,
|
||||
"请求发生错误",
|
||||
"请求服务器发生错误:${err.toString()}",
|
||||
btnLabel: "我知道了"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 显示成功提示
|
||||
void _showSuccessDialog(String message) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showSuccessMessage(
|
||||
thisContext,
|
||||
message,
|
||||
"",
|
||||
btnLabel: "我知道了"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 显示警告提示
|
||||
void _showWarningDialog(String message) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showWarningMessage(
|
||||
thisContext,
|
||||
"警告",
|
||||
message,
|
||||
btnLabel: "我知道了"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 清除数据
|
||||
void _clearData() {
|
||||
setState(() {
|
||||
_vehicleTextController.clear();
|
||||
stockInDataXuGong = [];
|
||||
});
|
||||
}
|
||||
|
||||
// 隐藏加载对话框
|
||||
void _dismissLoading() {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
BrnLoadingDialog.dismiss(thisContext);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// 出一个空空箱
|
||||
getEmptyVehicle() {
|
||||
DialogUtils.showConfirmMessage(context, "空载具出库", "出一个空载具?",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,11 @@ import '/common/colorCom.dart';
|
|||
import 'package:wms_app/utils/dialogUtils.dart';
|
||||
import 'package:wms_app/api_client/stock_out.dart';
|
||||
import 'dart:convert';
|
||||
import 'package:logger/logger.dart';
|
||||
|
||||
var logger = Logger(
|
||||
printer: PrettyPrinter(),
|
||||
);
|
||||
|
||||
class StockOutEmpty extends StatefulWidget {
|
||||
const StockOutEmpty({super.key});
|
||||
|
|
@ -12,17 +17,22 @@ class StockOutEmpty extends StatefulWidget {
|
|||
}
|
||||
|
||||
class _CallEmptyCartPageState extends State<StockOutEmpty> {
|
||||
int vehicle_0 = 0, vehicle_1 = 1;
|
||||
String status_0 = "不可用", status_1 = "不可用";
|
||||
int availableVehiclesNum = 0; // 可用空托盘的数量
|
||||
bool isDataLoaded = false; // 用于标记数据是否已经加载过
|
||||
String goodsId = "0"; // 商品ID
|
||||
int selectedQuantity = 1; // 用户选择的空托盘数量
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_fetchData();
|
||||
_fetchAvailableVehicles(); // 获取所有可用空托盘的数量
|
||||
}
|
||||
|
||||
Future<void> _fetchData() async {
|
||||
await StockOutApi.getVehicleIsEmpty(vehicle_0).then((response) {
|
||||
Future<void> _fetchAvailableVehicles() async {
|
||||
// 只有在数据未加载过时才重新发起请求
|
||||
if (isDataLoaded) return;
|
||||
|
||||
await StockOutApi.getAvailVehicleList().then((response) {
|
||||
if (response["code"] != 200) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
|
|
@ -31,91 +41,50 @@ class _CallEmptyCartPageState extends State<StockOutEmpty> {
|
|||
}
|
||||
return;
|
||||
}
|
||||
final data = Map<String, dynamic>.from(jsonDecode(response["data"]));
|
||||
if (data["code"] == 200) {
|
||||
// 请求成功
|
||||
if (data["data"]["isEmpty"] == 1 && data["data"]["isLock"] == 0) {
|
||||
status_0 = "可用";
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}).catchError((err) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showErrorMessage(
|
||||
thisContext, "请求发生错误", "请求服务器发生错误:${err.toString()}",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
return;
|
||||
});
|
||||
logger.e("yuqili response ${response}");
|
||||
final data = List<dynamic>.from(jsonDecode(response["data"]));
|
||||
logger.e("yuqili data ${data}");
|
||||
|
||||
await StockOutApi.getVehicleIsEmpty(vehicle_1).then((response) {
|
||||
if (response["code"] != 200) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showWarningMessage(thisContext, "警告", "服务器请求失败",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
return;
|
||||
}
|
||||
final data = Map<String, dynamic>.from(jsonDecode(response["data"]));
|
||||
if (data["code"] == 200) {
|
||||
// 请求成功
|
||||
if (data["data"]["isEmpty"] == 1 && data["data"]["isLock"] == 0) {
|
||||
status_1 = "可用";
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}).catchError((err) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showErrorMessage(
|
||||
thisContext, "请求发生错误", "请求服务器发生错误:${err.toString()}",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
return;
|
||||
});
|
||||
}
|
||||
|
||||
String selectedOption = "1";
|
||||
String status = "可用";
|
||||
bool isLoading = false;
|
||||
|
||||
void callEmptyCart() {
|
||||
if ((selectedOption == "1" && status_0 == "不可用") ||
|
||||
(selectedOption == "2" && status_1 == "不可用")) {
|
||||
DialogUtils.showWarningMessage(context, "警告", "选中的空托不可用",
|
||||
btnLabel: "我知道了");
|
||||
} else {
|
||||
StockOutApi.addStockOut().then((response) {
|
||||
if (response["code"] != 200) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showWarningMessage(thisContext, "警告", "服务器请求失败",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
return;
|
||||
}
|
||||
final data = Map<String, dynamic>.from(jsonDecode(response["data"]));
|
||||
if (data["code"] == 200) {
|
||||
DialogUtils.showSuccessMessage(context, "成功", "空托已呼叫",
|
||||
btnLabel: "我知道了");
|
||||
return;
|
||||
}
|
||||
}).catchError((err) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showErrorMessage(
|
||||
thisContext, "请求发生错误", "请求服务器发生错误:${err.toString()}",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
return;
|
||||
setState(() {
|
||||
availableVehiclesNum = data.length;
|
||||
isDataLoaded = true; // 数据加载完毕,设置标志位
|
||||
});
|
||||
}
|
||||
}).catchError((err) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showErrorMessage(
|
||||
thisContext, "请求发生错误", "请求服务器发生错误:${err.toString()}",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void callEmptyCart(int quantity) {
|
||||
// 业务逻辑,调用出库接口等
|
||||
StockOutApi.addStockOut(goodsId, quantity, "空托盘出库").then((response) {
|
||||
if (response["code"] != 200) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showWarningMessage(thisContext, "警告", "服务器请求失败",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
return;
|
||||
}
|
||||
final data = Map<String, dynamic>.from(jsonDecode(response["data"]));
|
||||
if (data["code"] == 200) {
|
||||
DialogUtils.showSuccessMessage(context, "成功", "空托已呼叫",
|
||||
btnLabel: "我知道了");
|
||||
return;
|
||||
}
|
||||
}).catchError((err) {
|
||||
var thisContext = context;
|
||||
if (thisContext.mounted) {
|
||||
DialogUtils.showErrorMessage(
|
||||
thisContext, "请求发生错误", "请求服务器发生错误:${err.toString()}",
|
||||
btnLabel: "我知道了");
|
||||
}
|
||||
});
|
||||
}
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
|
|
@ -134,7 +103,7 @@ class _CallEmptyCartPageState extends State<StockOutEmpty> {
|
|||
),
|
||||
),
|
||||
body: FutureBuilder<void>(
|
||||
future: _fetchData(), // 使用FutureBuilder来等待_fetchData的完成
|
||||
future: _fetchAvailableVehicles(), // 使用FutureBuilder来等待获取所有车辆信息
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.connectionState == ConnectionState.waiting) {
|
||||
return Center(child: CircularProgressIndicator()); // 显示加载中
|
||||
|
|
@ -143,51 +112,44 @@ class _CallEmptyCartPageState extends State<StockOutEmpty> {
|
|||
child: Text("请求失败: ${snapshot.error.toString()}"),
|
||||
);
|
||||
} else {
|
||||
return Center(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 5, left: 10, right: 10),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: DropdownButton<String>(
|
||||
value: selectedOption,
|
||||
isExpanded: true,
|
||||
items: [
|
||||
DropdownMenuItem(
|
||||
value: "1",
|
||||
child: Text("1 - $status_0"),
|
||||
),
|
||||
DropdownMenuItem(
|
||||
value: "2",
|
||||
child: Text("2 - $status_1"),
|
||||
),
|
||||
],
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
selectedOption = value!;
|
||||
});
|
||||
},
|
||||
),
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
// 添加一个文本来提示用户选择空托数量
|
||||
Text("呼叫空托数量: ", style: TextStyle(fontSize: 16)),
|
||||
// 下拉框
|
||||
DropdownButton<int>(
|
||||
value: selectedQuantity,
|
||||
items: List.generate(availableVehiclesNum, (index) {
|
||||
return DropdownMenuItem<int>(
|
||||
value: index + 1,
|
||||
child: Text("${index + 1}"),
|
||||
);
|
||||
}),
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
selectedQuantity = value!;
|
||||
});
|
||||
},
|
||||
hint: Text("选择空托盘数量"),
|
||||
),
|
||||
SizedBox(width: 20), // 添加一些空间
|
||||
// 出库按钮
|
||||
ElevatedButton(
|
||||
onPressed: () => callEmptyCart(selectedQuantity),
|
||||
style: ButtonStyle(
|
||||
backgroundColor: MaterialStateProperty.all(
|
||||
ColorCommon.colorScheme),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 10),
|
||||
child: ElevatedButton(
|
||||
onPressed: isLoading ? null : callEmptyCart,
|
||||
style: ButtonStyle(
|
||||
backgroundColor: WidgetStateProperty.all(
|
||||
ColorCommon.colorScheme),
|
||||
),
|
||||
child: Text("出库",
|
||||
style: TextStyle(color: Colors.white)),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
child: Text("出库", style: TextStyle(color: Colors.white)),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user