parent
88148a5227
commit
5d5147ea0b
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 807 B |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 32 KiB |
@ -0,0 +1,32 @@
|
|||||||
|
import 'package:aku_community_manager/const/resource.dart';
|
||||||
|
import 'package:aku_community_manager/mock_models/borrow/borrow_model.dart';
|
||||||
|
|
||||||
|
class BorrowData {
|
||||||
|
static List<BorrowModel> models = [
|
||||||
|
BorrowModel(
|
||||||
|
borrowPerson: '李慧珍',
|
||||||
|
borrowTime: null,
|
||||||
|
goodsStatus: null,
|
||||||
|
phone: null,
|
||||||
|
borrowGoods: SingleBorrowGoods(name: ''),
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
|
static List<BorrowObject> borrowObjects = [
|
||||||
|
BorrowObject.init(
|
||||||
|
name: '电钻',
|
||||||
|
assetPath: R.ASSETS_STATIC_TEMP_DRILL_PNG,
|
||||||
|
allNumber: 5,
|
||||||
|
),
|
||||||
|
BorrowObject.init(
|
||||||
|
name: '梯子',
|
||||||
|
assetPath: R.ASSETS_STATIC_TEMP_LADDER_PNG,
|
||||||
|
allNumber: 3,
|
||||||
|
),
|
||||||
|
BorrowObject.init(
|
||||||
|
name: '三角榔头',
|
||||||
|
assetPath: R.ASSETS_STATIC_TEMP_HAMMER_PNG,
|
||||||
|
allNumber: 8,
|
||||||
|
),
|
||||||
|
];
|
||||||
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
import 'dart:math';
|
||||||
|
|
||||||
|
import 'package:meta/meta.dart';
|
||||||
|
|
||||||
|
enum BORROW_STATUS {
|
||||||
|
///出借中
|
||||||
|
BORROWING,
|
||||||
|
|
||||||
|
///待检查
|
||||||
|
WAIT_CHECK,
|
||||||
|
|
||||||
|
///未出借
|
||||||
|
NOT_BORROW,
|
||||||
|
|
||||||
|
///已归还
|
||||||
|
DONE,
|
||||||
|
}
|
||||||
|
|
||||||
|
enum GOODS_STATUS {
|
||||||
|
NORMAL,
|
||||||
|
BROKEN,
|
||||||
|
}
|
||||||
|
|
||||||
|
class BorrowModel {
|
||||||
|
String borrowPerson;
|
||||||
|
String phone;
|
||||||
|
int borrowTime;
|
||||||
|
GOODS_STATUS goodsStatus;
|
||||||
|
String title;
|
||||||
|
SingleBorrowGoods borrowGoods;
|
||||||
|
|
||||||
|
BorrowModel({
|
||||||
|
@required this.borrowPerson,
|
||||||
|
@required this.phone,
|
||||||
|
@required this.borrowTime,
|
||||||
|
@required this.goodsStatus,
|
||||||
|
@required this.borrowGoods,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
class BorrowObject {
|
||||||
|
String name;
|
||||||
|
int allNumber;
|
||||||
|
dynamic assetPath;
|
||||||
|
int borrowNumber;
|
||||||
|
int get restNumber => allNumber - borrowNumber;
|
||||||
|
List<SingleBorrowGoods> items;
|
||||||
|
|
||||||
|
BorrowObject.init({
|
||||||
|
this.name,
|
||||||
|
this.allNumber,
|
||||||
|
this.assetPath,
|
||||||
|
}) {
|
||||||
|
this.borrowNumber = 0;
|
||||||
|
items = List.generate(
|
||||||
|
this.allNumber,
|
||||||
|
(index) => SingleBorrowGoods(
|
||||||
|
name: '${this.name}${index + 1}',
|
||||||
|
code: (179264234 + Random().nextInt(999999)).toString(),
|
||||||
|
status: BORROW_STATUS.NOT_BORROW,
|
||||||
|
assetpath: this.assetPath,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class SingleBorrowGoods {
|
||||||
|
String name;
|
||||||
|
String code;
|
||||||
|
dynamic assetpath;
|
||||||
|
BORROW_STATUS status;
|
||||||
|
SingleBorrowGoods({
|
||||||
|
this.name,
|
||||||
|
this.code,
|
||||||
|
this.assetpath,
|
||||||
|
this.status,
|
||||||
|
});
|
||||||
|
}
|
@ -0,0 +1,174 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
import 'dart:math';
|
||||||
|
|
||||||
|
import 'package:aku_community_manager/mock_models/borrow/borrow_model.dart';
|
||||||
|
import 'package:aku_community_manager/style/app_style.dart';
|
||||||
|
import 'package:aku_community_manager/tools/widget_tool.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/inner/pick_image.dart';
|
||||||
|
import 'package:aku_ui/common_widgets/aku_material_button.dart';
|
||||||
|
import 'package:bot_toast/bot_toast.dart';
|
||||||
|
import 'package:common_utils/common_utils.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class AddBorrowItemPage extends StatefulWidget {
|
||||||
|
final BorrowObject object;
|
||||||
|
AddBorrowItemPage({Key key, @required this.object}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_AddBorrowItemPageState createState() => _AddBorrowItemPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AddBorrowItemPageState extends State<AddBorrowItemPage> {
|
||||||
|
TextEditingController _textEditingController = TextEditingController();
|
||||||
|
String code = '';
|
||||||
|
File file;
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
code = (10000000 + Random().nextInt(999999)).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AkuScaffold(
|
||||||
|
title: '物品详情',
|
||||||
|
actions: [
|
||||||
|
AkuMaterialButton(
|
||||||
|
minWidth: 120.w,
|
||||||
|
onPressed: () {
|
||||||
|
if (TextUtil.isEmpty(_textEditingController.text)) {
|
||||||
|
BotToast.showText(text: '名称不能为空');
|
||||||
|
} else if (file == null) {
|
||||||
|
BotToast.showText(text: '图片不能为空');
|
||||||
|
} else {
|
||||||
|
widget.object.items.insert(
|
||||||
|
0,
|
||||||
|
SingleBorrowGoods(
|
||||||
|
name: _textEditingController.text,
|
||||||
|
code: code,
|
||||||
|
assetpath: file,
|
||||||
|
status: BORROW_STATUS.NOT_BORROW,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
'完成',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 28.w,
|
||||||
|
color: AppStyle.primaryTextColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
body: ListView(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 16.w),
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
color: Colors.white,
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 32.w),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
_buildRow(
|
||||||
|
'物品名称',
|
||||||
|
TextField(
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.primaryTextColor,
|
||||||
|
fontSize: 28.sp,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
controller: _textEditingController,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
border: InputBorder.none,
|
||||||
|
hintText: '请输入物品名称',
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
Divider(height: 1.w),
|
||||||
|
_buildRow(
|
||||||
|
'物品单号',
|
||||||
|
Text(
|
||||||
|
code,
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
fontSize: 28.sp,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
_buildRow(
|
||||||
|
'物品图片',
|
||||||
|
file == null
|
||||||
|
? InkWell(
|
||||||
|
onTap: () {
|
||||||
|
akuPickImage().then((value) {
|
||||||
|
if (value != null) file = value;
|
||||||
|
setState(() {});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 184.w,
|
||||||
|
width: 184.w,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
Icons.image,
|
||||||
|
size: 60.w,
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'上传图片',
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
fontSize: 22.sp,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(8.w),
|
||||||
|
border: Border.all(
|
||||||
|
width: 1.w,
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: Image.file(
|
||||||
|
file,
|
||||||
|
height: 184.w,
|
||||||
|
width: 184.w,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
AkuBox.h(28),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_buildRow(String title, Widget child) {
|
||||||
|
return Row(
|
||||||
|
children: [
|
||||||
|
AkuBox.h(96),
|
||||||
|
Text(
|
||||||
|
title,
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
fontSize: 28.w,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
AkuBox.w(80),
|
||||||
|
Expanded(
|
||||||
|
child: Align(
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: child,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,185 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:aku_community_manager/mock_models/borrow/borrow_data.dart';
|
||||||
|
import 'package:aku_community_manager/mock_models/borrow/borrow_model.dart';
|
||||||
|
import 'package:aku_community_manager/mock_models/users/user_info_model.dart';
|
||||||
|
import 'package:aku_community_manager/provider/user_provider.dart';
|
||||||
|
import 'package:aku_community_manager/style/app_style.dart';
|
||||||
|
import 'package:aku_community_manager/tools/widget_tool.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/inner/pick_image.dart';
|
||||||
|
import 'package:aku_ui/common_widgets/aku_material_button.dart';
|
||||||
|
import 'package:bot_toast/bot_toast.dart';
|
||||||
|
import 'package:common_utils/common_utils.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class AddBorrowObjectPage extends StatefulWidget {
|
||||||
|
AddBorrowObjectPage({Key key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_AddBorrowObjectPageState createState() => _AddBorrowObjectPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AddBorrowObjectPageState extends State<AddBorrowObjectPage> {
|
||||||
|
TextEditingController _textEditingController = TextEditingController();
|
||||||
|
TextEditingController _numberController = TextEditingController();
|
||||||
|
File file;
|
||||||
|
List<BorrowObject> get objects => BorrowData.borrowObjects;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final userProvider = Provider.of<UserProvider>(context);
|
||||||
|
return AkuScaffold(
|
||||||
|
title: '物品详情',
|
||||||
|
actions: [
|
||||||
|
userProvider.userInfoModel.role != USER_ROLE.MANAGER
|
||||||
|
? AkuMaterialButton(
|
||||||
|
minWidth: 120.w,
|
||||||
|
onPressed: () {
|
||||||
|
if (TextUtil.isEmpty(_textEditingController.text)) {
|
||||||
|
BotToast.showText(text: '名称不能为空');
|
||||||
|
} else if (file == null) {
|
||||||
|
BotToast.showText(text: '图片不能为空');
|
||||||
|
} else if (int.tryParse(_numberController.text) == null) {
|
||||||
|
BotToast.showText(text: '数量错误');
|
||||||
|
} else {
|
||||||
|
objects.insert(
|
||||||
|
0,
|
||||||
|
BorrowObject.init(
|
||||||
|
name: _textEditingController.text,
|
||||||
|
allNumber: int.parse(_numberController.text),
|
||||||
|
assetPath: file,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
Get.back();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
'完成',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 28.w,
|
||||||
|
color: AppStyle.primaryTextColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: SizedBox(),
|
||||||
|
],
|
||||||
|
body: ListView(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 16.w),
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
color: Colors.white,
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 32.w),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
_buildRow(
|
||||||
|
'总类名称',
|
||||||
|
TextField(
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.primaryTextColor,
|
||||||
|
fontSize: 28.sp,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
controller: _textEditingController,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
border: InputBorder.none,
|
||||||
|
hintText: '请输入总类名称',
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
Divider(height: 1.w),
|
||||||
|
_buildRow(
|
||||||
|
'物品数量',
|
||||||
|
TextField(
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.primaryTextColor,
|
||||||
|
fontSize: 28.sp,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
controller: _numberController,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
border: InputBorder.none,
|
||||||
|
hintText: '请输入物品数量',
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
Divider(height: 1.w),
|
||||||
|
AkuBox.h(24),
|
||||||
|
_buildRow(
|
||||||
|
'物品图片',
|
||||||
|
file == null
|
||||||
|
? InkWell(
|
||||||
|
onTap: () {
|
||||||
|
akuPickImage().then((value) {
|
||||||
|
if (value != null) file = value;
|
||||||
|
setState(() {});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 184.w,
|
||||||
|
width: 184.w,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
Icons.image,
|
||||||
|
size: 60.w,
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'上传图片',
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
fontSize: 22.sp,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(8.w),
|
||||||
|
border: Border.all(
|
||||||
|
width: 1.w,
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: Image.file(
|
||||||
|
file,
|
||||||
|
height: 184.w,
|
||||||
|
width: 184.w,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
AkuBox.h(28),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_buildRow(String title, Widget child) {
|
||||||
|
return Row(
|
||||||
|
children: [
|
||||||
|
AkuBox.h(96),
|
||||||
|
Text(
|
||||||
|
title,
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
fontSize: 28.w,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
AkuBox.w(80),
|
||||||
|
Expanded(
|
||||||
|
child: Align(
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: child,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,124 @@
|
|||||||
|
import 'package:aku_community_manager/mock_models/borrow/borrow_data.dart';
|
||||||
|
import 'package:aku_community_manager/mock_models/borrow/borrow_model.dart';
|
||||||
|
import 'package:aku_community_manager/style/app_style.dart';
|
||||||
|
import 'package:aku_community_manager/tools/widget_tool.dart';
|
||||||
|
import 'package:aku_community_manager/ui/sub_pages/borrow_manager/add_borrow_object_page.dart';
|
||||||
|
import 'package:aku_community_manager/ui/sub_pages/borrow_manager/borrow_items_page.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart';
|
||||||
|
import 'package:aku_ui/common_widgets/aku_material_button.dart';
|
||||||
|
import 'package:aku_community_manager/const/resource.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
|
class AllBorrowGoods extends StatefulWidget {
|
||||||
|
AllBorrowGoods({Key key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_AllBorrowGoodsState createState() => _AllBorrowGoodsState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AllBorrowGoodsState extends State<AllBorrowGoods> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AkuScaffold(
|
||||||
|
title: '全部物品',
|
||||||
|
actions: [
|
||||||
|
AkuMaterialButton(
|
||||||
|
minWidth: 120.w,
|
||||||
|
onPressed: () {
|
||||||
|
Get.to(AddBorrowObjectPage());
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
'新增',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 28.w,
|
||||||
|
color: AppStyle.primaryTextColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
body: ListView.builder(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
horizontal: 32.w,
|
||||||
|
),
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
return _buildCard(BorrowData.borrowObjects[index]);
|
||||||
|
},
|
||||||
|
itemCount: BorrowData.borrowObjects.length,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_buildCard(BorrowObject object) {
|
||||||
|
return GestureDetector(
|
||||||
|
onTap: () => Get.to(BorrowItemPage(object: object)),
|
||||||
|
child: Container(
|
||||||
|
padding: EdgeInsets.all(24.w),
|
||||||
|
margin: EdgeInsets.only(top: 16.w),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
ClipRRect(
|
||||||
|
borderRadius: BorderRadius.circular(4.w),
|
||||||
|
child: (object.assetPath is String)
|
||||||
|
? Image.asset(
|
||||||
|
object.assetPath,
|
||||||
|
width: 184.w,
|
||||||
|
height: 184.w,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
)
|
||||||
|
: Image.file(
|
||||||
|
object.assetPath,
|
||||||
|
width: 184.w,
|
||||||
|
height: 184.w,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
AkuBox.w(24),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
_buildRow(R.ASSETS_MANAGE_ARTICLE_PNG, '物品名称', object.name),
|
||||||
|
AkuBox.h(12),
|
||||||
|
_buildRow(R.ASSETS_MANAGE_BORROW_PNG, '借出数量',
|
||||||
|
object.borrowNumber.toString()),
|
||||||
|
AkuBox.h(12),
|
||||||
|
_buildRow(R.ASSETS_MANAGE_REMAINING_PNG, '剩余数量',
|
||||||
|
object.items.length.toString()),
|
||||||
|
],
|
||||||
|
)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(8.w),
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_buildRow(String assetPath, String title, String subTitle) {
|
||||||
|
return Row(
|
||||||
|
children: [
|
||||||
|
Image.asset(
|
||||||
|
assetPath,
|
||||||
|
height: 40.w,
|
||||||
|
width: 40.w,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'$title\:',
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
fontSize: 28.w,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
subTitle,
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.primaryTextColor,
|
||||||
|
fontSize: 28.w,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,148 @@
|
|||||||
|
import 'package:aku_community_manager/mock_models/borrow/borrow_model.dart';
|
||||||
|
import 'package:aku_community_manager/style/app_style.dart';
|
||||||
|
import 'package:aku_community_manager/tools/widget_tool.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart';
|
||||||
|
import 'package:aku_ui/common_widgets/aku_material_button.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class BorrowItemDetailPage extends StatefulWidget {
|
||||||
|
final SingleBorrowGoods item;
|
||||||
|
BorrowItemDetailPage({Key key, this.item}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_BorrowItemDetailPageState createState() => _BorrowItemDetailPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _BorrowItemDetailPageState extends State<BorrowItemDetailPage> {
|
||||||
|
bool _isEditing = false;
|
||||||
|
TextEditingController _textEditingController;
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_textEditingController = TextEditingController(text: widget.item.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_textEditingController?.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AkuScaffold(
|
||||||
|
title: '物品详情',
|
||||||
|
actions: [
|
||||||
|
AkuMaterialButton(
|
||||||
|
minWidth: 120.w,
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
_isEditing = !_isEditing;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
_isEditing ? '完成' : '编辑',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 28.w,
|
||||||
|
color: AppStyle.primaryTextColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
body: ListView(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 16.w),
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
color: Colors.white,
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 32.w),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
_buildRow(
|
||||||
|
'物品名称',
|
||||||
|
TextField(
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.primaryTextColor,
|
||||||
|
fontSize: 28.sp,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
controller: _textEditingController,
|
||||||
|
enabled: _isEditing,
|
||||||
|
onChanged: (text) {
|
||||||
|
widget.item.name = text;
|
||||||
|
},
|
||||||
|
decoration: InputDecoration(
|
||||||
|
border: InputBorder.none,
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
Divider(height: 1.w),
|
||||||
|
_buildRow(
|
||||||
|
'物品单号',
|
||||||
|
Text(
|
||||||
|
widget.item.code,
|
||||||
|
style: TextStyle(
|
||||||
|
color: _isEditing
|
||||||
|
? AppStyle.minorTextColor
|
||||||
|
: AppStyle.primaryTextColor,
|
||||||
|
fontSize: 28.sp,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
_buildRow(
|
||||||
|
'出借状态',
|
||||||
|
Text(
|
||||||
|
'未出借',
|
||||||
|
style: TextStyle(
|
||||||
|
color: _isEditing
|
||||||
|
? AppStyle.minorTextColor
|
||||||
|
: AppStyle.primaryTextColor,
|
||||||
|
fontSize: 28.sp,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
_buildRow(
|
||||||
|
'物品图片',
|
||||||
|
(widget.item.assetpath is String)
|
||||||
|
? Image.asset(
|
||||||
|
widget.item.assetpath,
|
||||||
|
height: 184.w,
|
||||||
|
width: 184.w,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
)
|
||||||
|
: Image.file(
|
||||||
|
widget.item.assetpath,
|
||||||
|
height: 184.w,
|
||||||
|
width: 184.w,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
AkuBox.h(28),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_buildRow(String title, Widget child) {
|
||||||
|
return Row(
|
||||||
|
children: [
|
||||||
|
AkuBox.h(96),
|
||||||
|
Text(
|
||||||
|
title,
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
fontSize: 28.w,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
AkuBox.w(80),
|
||||||
|
Expanded(
|
||||||
|
child: Align(
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: child,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,211 @@
|
|||||||
|
import 'package:aku_community_manager/mock_models/borrow/borrow_model.dart';
|
||||||
|
import 'package:aku_community_manager/mock_models/users/user_info_model.dart';
|
||||||
|
import 'package:aku_community_manager/provider/user_provider.dart';
|
||||||
|
import 'package:aku_community_manager/style/app_style.dart';
|
||||||
|
import 'package:aku_community_manager/tools/widget_tool.dart';
|
||||||
|
import 'package:aku_community_manager/ui/sub_pages/borrow_manager/add_borrow_item_page.dart';
|
||||||
|
import 'package:aku_community_manager/ui/sub_pages/borrow_manager/borrow_item_detail_page.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart';
|
||||||
|
import 'package:aku_ui/common_widgets/aku_material_button.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class BorrowItemPage extends StatefulWidget {
|
||||||
|
final BorrowObject object;
|
||||||
|
BorrowItemPage({Key key, @required this.object}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_BorrowItemPageState createState() => _BorrowItemPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _BorrowItemPageState extends State<BorrowItemPage> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final userProvider = Provider.of<UserProvider>(context);
|
||||||
|
return AkuScaffold(
|
||||||
|
title: '物品查看',
|
||||||
|
actions: [
|
||||||
|
userProvider.userInfoModel.role != USER_ROLE.MANAGER
|
||||||
|
? AkuMaterialButton(
|
||||||
|
minWidth: 120.w,
|
||||||
|
onPressed: () {
|
||||||
|
Get.to(AddBorrowItemPage(object: widget.object));
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
'新增',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 28.w,
|
||||||
|
color: AppStyle.primaryTextColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: SizedBox(),
|
||||||
|
],
|
||||||
|
body: ListView.builder(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 32.w),
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
return _buildCard(widget.object.items[index]);
|
||||||
|
},
|
||||||
|
itemCount: widget.object.items.length,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_buildCard(SingleBorrowGoods item) {
|
||||||
|
final userProvider = Provider.of<UserProvider>(context);
|
||||||
|
return GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
Get.to(BorrowItemDetailPage(item: item));
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
margin: EdgeInsets.only(top: 16.w),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
AkuBox.h(93),
|
||||||
|
AkuBox.w(24),
|
||||||
|
Text(
|
||||||
|
item.name,
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.primaryTextColor,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontSize: 32.sp,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Spacer(),
|
||||||
|
userProvider.userInfoModel.role != USER_ROLE.MANAGER
|
||||||
|
? AkuMaterialButton(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 24.w),
|
||||||
|
onPressed: () {
|
||||||
|
showCupertinoDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return CupertinoAlertDialog(
|
||||||
|
title: Text('删除物品'),
|
||||||
|
content: Text('确定要删除${item.name}该物品吗?'),
|
||||||
|
actions: [
|
||||||
|
CupertinoDialogAction(
|
||||||
|
child: Text('取消'),
|
||||||
|
onPressed: () {
|
||||||
|
Get.back();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
CupertinoDialogAction(
|
||||||
|
child: Text('删除'),
|
||||||
|
onPressed: () {
|
||||||
|
widget.object.items.remove(item);
|
||||||
|
setState(() {});
|
||||||
|
Get.back();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
Icons.delete,
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
size: 40.w,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'删除',
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
fontSize: 28.sp,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: SizedBox(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
height: 1.w,
|
||||||
|
),
|
||||||
|
AkuBox.h(28),
|
||||||
|
Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
AkuBox.w(24),
|
||||||
|
ClipRRect(
|
||||||
|
borderRadius: BorderRadius.circular(4.w),
|
||||||
|
child: (item.assetpath is String)
|
||||||
|
? Image.asset(
|
||||||
|
item.assetpath,
|
||||||
|
height: 184.w,
|
||||||
|
width: 184.w,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
)
|
||||||
|
: Image.file(
|
||||||
|
item.assetpath,
|
||||||
|
height: 184.w,
|
||||||
|
width: 184.w,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
AkuBox.w(24),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
_buildRow(
|
||||||
|
R.ASSETS_MANAGE_IC_RENWU_PNG, '物品单号', item.code),
|
||||||
|
_buildRow(
|
||||||
|
R.ASSETS_MANAGE_BORROW_PNG,
|
||||||
|
'出借状态',
|
||||||
|
'未借出',
|
||||||
|
color: AppStyle.secondaryColor,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
AkuBox.h(32),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(8.w),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_buildRow(
|
||||||
|
String assetPath,
|
||||||
|
String title,
|
||||||
|
String subTitle, {
|
||||||
|
Color color = AppStyle.primaryTextColor,
|
||||||
|
}) {
|
||||||
|
return Row(
|
||||||
|
children: [
|
||||||
|
Image.asset(
|
||||||
|
assetPath,
|
||||||
|
height: 40.w,
|
||||||
|
width: 40.w,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'$title\:',
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppStyle.minorTextColor,
|
||||||
|
fontSize: 28.w,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
subTitle,
|
||||||
|
style: TextStyle(
|
||||||
|
color: color,
|
||||||
|
fontSize: 28.w,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
import 'package:aku_community_manager/mock_models/borrow/borrow_data.dart';
|
||||||
|
import 'package:aku_community_manager/mock_models/borrow/borrow_model.dart';
|
||||||
|
import 'package:aku_community_manager/mock_models/users/user_info_model.dart';
|
||||||
|
import 'package:aku_community_manager/provider/user_provider.dart';
|
||||||
|
import 'package:aku_community_manager/style/app_style.dart';
|
||||||
|
import 'package:aku_community_manager/ui/sub_pages/borrow_manager/all_borrow_goods.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart';
|
||||||
|
import 'package:aku_ui/common_widgets/aku_material_button.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class BorrowManagerPage extends StatefulWidget {
|
||||||
|
BorrowManagerPage({Key key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_BorrowManagerPageState createState() => _BorrowManagerPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _BorrowManagerPageState extends State<BorrowManagerPage> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final userProvider = Provider.of<UserProvider>(context);
|
||||||
|
return AkuScaffold(
|
||||||
|
title: '物品清单',
|
||||||
|
actions: [
|
||||||
|
userProvider.userInfoModel.role != USER_ROLE.MANAGER
|
||||||
|
? AkuMaterialButton(
|
||||||
|
minWidth: 178.w,
|
||||||
|
onPressed: () {
|
||||||
|
Get.to(AllBorrowGoods());
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
'全部物品',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 28.w,
|
||||||
|
color: AppStyle.primaryTextColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: SizedBox(),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue