XuGongTeJi_flutter/lib/page/stock/check.dart
2025-02-20 14:10:16 +08:00

257 lines
8.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:wms_app/model/bo/stock_in_data_xugong.dart';
import '../../common/colorCom.dart';
import '../../utils/dialogUtils.dart';
class InventoryCheckPage extends StatefulWidget {
const InventoryCheckPage({super.key});
@override
State<InventoryCheckPage> createState() => _InventoryCheckPageState();
}
class _InventoryCheckPageState extends State<InventoryCheckPage> {
List<StockInDataXuGong> filteredItems = [];
final TextEditingController goodsIdController = TextEditingController();
final TextEditingController orderNoController = TextEditingController();
final TextEditingController customerNameController = TextEditingController();
final TextEditingController goodsDescController = TextEditingController();
final TextEditingController weightController = TextEditingController();
final TextEditingController sizeController = TextEditingController();
// Simulate fetching data (this would be an API call in a real-world scenario)
void _fetchFilteredData() {
Future.delayed(Duration(seconds: 1), () {
setState(() {
// Filtering the data
filteredItems = [
StockInDataXuGong(
goodsId: "001",
goodsNum: 5,
orderNo: "order123",
orderType: "订购",
customerName: "Customer A",
goodsDesc: "Material 1 Description",
weight: 20.0,
size: "Small",
spare1: "Spare1A",
spare2: "Spare2A",
containerNo: "Container123"),
StockInDataXuGong(
goodsId: "002",
goodsNum: 10,
orderNo: "order456",
orderType: "订购",
customerName: "Customer B",
goodsDesc: "Material 2 Description",
weight: 15.5,
size: "Medium",
spare1: "Spare1B",
spare2: "Spare2B",
containerNo: "Container456"),
];
});
});
}
// Filtering logic (you can enhance this logic as per the requirements)
void _filterItems() {
String goodsId = goodsIdController.text;
String orderNo = orderNoController.text;
String customerName = customerNameController.text;
String goodsDesc = goodsDescController.text;
String weight = weightController.text;
String size = sizeController.text;
// Perform the actual filtering (this is just a mock for now)
_fetchFilteredData();
}
void _editGood(StockInDataXuGong item) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EditGoodPage(item: item, onSave: _updateGood),
),
);
}
void _updateGood(StockInDataXuGong updatedItem) {
setState(() {
final index =
filteredItems.indexWhere((e) => e.goodsId == updatedItem.goodsId);
if (index != -1) {
filteredItems[index] = updatedItem;
}
});
}
void _completeInventoryCheck() {
DialogUtils.showSuccessMessage(context, "盘点完成", "所有物料已完成盘点", btnLabel: "我知道了");
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
iconTheme: const IconThemeData(color: Colors.white),
leading: IconButton(
onPressed: () {
Navigator.of(context).pop();
},
icon: const Icon(Icons.arrow_back),
),
centerTitle: true,
backgroundColor: ColorCommon.colorScheme,
title: const Text(
"物料盘点",
style: TextStyle(color: Colors.white),
),
),
body: Padding(
padding: const EdgeInsets.all(10),
child: Column(
children: [
// Filtering Fields
_buildEditableField("物料号", goodsIdController),
_buildEditableField("单据号", orderNoController),
_buildEditableField("客户名称", customerNameController),
_buildEditableField("物料描述", goodsDescController),
_buildEditableField("重量", weightController),
_buildEditableField("尺寸", sizeController),
// Filter Button
Padding(
padding: const EdgeInsets.symmetric(vertical: 10),
child: ElevatedButton(
onPressed: _filterItems,
child: const Text("筛选"),
),
),
// Display filtered items
Expanded(
child: ListView.builder(
itemCount: filteredItems.length,
itemBuilder: (context, index) {
final item = filteredItems[index];
return Card(
margin: const EdgeInsets.symmetric(vertical: 5),
child: ListTile(
onTap: () => _editGood(item),
title: Row(
children: [
Expanded(child: Text("物料号: ${item.goodsId}")),
Expanded(child: Text("数量: ${item.goodsNum}")),
Expanded(child: Text("描述: ${item.goodsDesc}")),
Expanded(child: Text("重量: ${item.weight} KG")),
Expanded(child: Text("尺寸: ${item.size}")),
],
),
),
);
},
),
),
// Complete Inventory Check Button
Padding(
padding: const EdgeInsets.all(10),
child: ElevatedButton(
onPressed: _completeInventoryCheck,
child: const Text("确认盘点"),
),
),
],
),
),
);
}
Widget _buildEditableField(String title, TextEditingController controller) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: TextField(
controller: controller,
decoration: InputDecoration(labelText: title),
keyboardType: TextInputType.text,
),
);
}
}
class EditGoodPage extends StatefulWidget {
final StockInDataXuGong item;
final Function(StockInDataXuGong) onSave;
const EditGoodPage({super.key, required this.item, required this.onSave});
@override
_EditGoodPageState createState() => _EditGoodPageState();
}
class _EditGoodPageState extends State<EditGoodPage> {
late StockInDataXuGong _editedItem;
@override
void initState() {
super.initState();
_editedItem = widget.item;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("编辑物料"),
backgroundColor: ColorCommon.colorScheme,
),
body: SingleChildScrollView(
padding: const EdgeInsets.all(10),
child: Column(
children: [
_buildEditableField("物料号", _editedItem.goodsId,
(value) => _editedItem.goodsId = value),
_buildEditableField("数量", _editedItem.goodsNum.toString(),
(value) => _editedItem.goodsNum = double.tryParse(value) ?? 0),
_buildEditableField("单据号", _editedItem.orderNo,
(value) => _editedItem.orderNo = value),
_buildEditableField("单据类型", _editedItem.orderType,
(value) => _editedItem.orderType = value),
_buildEditableField("客户名称", _editedItem.customerName,
(value) => _editedItem.customerName = value),
_buildEditableField("描述", _editedItem.goodsDesc,
(value) => _editedItem.goodsDesc = value),
_buildEditableField("重量", _editedItem.weight.toString(),
(value) => _editedItem.weight = double.tryParse(value) ?? 0.0),
_buildEditableField(
"尺寸", _editedItem.size, (value) => _editedItem.size = value),
ElevatedButton(
onPressed: () {
widget.onSave(_editedItem);
Navigator.pop(context);
},
child: const Text("保存修改"),
),
],
),
),
);
}
Widget _buildEditableField(
String title, String initialValue, Function(String) onChanged) {
TextEditingController controller =
TextEditingController(text: initialValue);
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: TextField(
controller: controller,
decoration: InputDecoration(labelText: title),
onChanged: onChanged,
keyboardType: TextInputType.text,
),
);
}
}