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