diff --git a/assets/manage/article.png b/assets/manage/article.png new file mode 100644 index 0000000..dd55c3f Binary files /dev/null and b/assets/manage/article.png differ diff --git a/assets/manage/borrow.png b/assets/manage/borrow.png new file mode 100644 index 0000000..66458a8 Binary files /dev/null and b/assets/manage/borrow.png differ diff --git a/assets/manage/remaining.png b/assets/manage/remaining.png new file mode 100644 index 0000000..82f86db Binary files /dev/null and b/assets/manage/remaining.png differ diff --git a/assets/static_temp/drill.png b/assets/static_temp/drill.png new file mode 100644 index 0000000..9db0504 Binary files /dev/null and b/assets/static_temp/drill.png differ diff --git a/assets/static_temp/hammer.png b/assets/static_temp/hammer.png new file mode 100644 index 0000000..b8811e2 Binary files /dev/null and b/assets/static_temp/hammer.png differ diff --git a/assets/static_temp/ladder.png b/assets/static_temp/ladder.png new file mode 100644 index 0000000..30df7aa Binary files /dev/null and b/assets/static_temp/ladder.png differ diff --git a/lib/mock_models/borrow/borrow_data.dart b/lib/mock_models/borrow/borrow_data.dart new file mode 100644 index 0000000..2428927 --- /dev/null +++ b/lib/mock_models/borrow/borrow_data.dart @@ -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 models = [ + BorrowModel( + borrowPerson: '李慧珍', + borrowTime: null, + goodsStatus: null, + phone: null, + borrowGoods: SingleBorrowGoods(name: ''), + ), + ]; + + static List 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, + ), + ]; +} diff --git a/lib/mock_models/borrow/borrow_model.dart b/lib/mock_models/borrow/borrow_model.dart new file mode 100644 index 0000000..3d5c4b1 --- /dev/null +++ b/lib/mock_models/borrow/borrow_model.dart @@ -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 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, + }); +} diff --git a/lib/style/app_style.dart b/lib/style/app_style.dart index 917077e..9bc19a9 100644 --- a/lib/style/app_style.dart +++ b/lib/style/app_style.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; export 'package:flutter_screenutil/flutter_screenutil.dart'; +export 'package:aku_community_manager/const/resource.dart'; class AppStyle { //颜色,渐变主颜色和次级颜色 diff --git a/lib/ui/home/application/applications_page.dart b/lib/ui/home/application/applications_page.dart index a470a76..4707c36 100644 --- a/lib/ui/home/application/applications_page.dart +++ b/lib/ui/home/application/applications_page.dart @@ -1,6 +1,7 @@ import 'package:aku_community_manager/ui/manage_pages/green_manage/green_manage_page.dart'; import 'package:aku_community_manager/ui/manage_pages/inspection_manage/inspection_manage_page.dart'; import 'package:aku_community_manager/ui/sub_pages/activity_manager/activity_manager_page.dart'; +import 'package:aku_community_manager/ui/sub_pages/borrow_manager/borrow_manager_page.dart'; import 'package:aku_community_manager/ui/sub_pages/business_and_fix/business_and_fix_page.dart'; import 'package:aku_community_manager/ui/sub_pages/decoration_manager/decoration_manager_page.dart'; import 'package:aku_community_manager/ui/sub_pages/items_outdoor/items_outdoor_page.dart'; @@ -46,7 +47,7 @@ class _ApplicationPageState extends State AppApplication( '活动管理', R.ASSETS_HOME_IC_ACTIVITY_PNG, ActivityManagerPage()), AppApplication('访客管理', R.ASSETS_HOME_IC_VISITORS_PNG, VisitorManagerPage()), - AppApplication('借还管理', R.ASSETS_HOME_IC_BORROW_PNG, Scaffold()), + AppApplication('借还管理', R.ASSETS_HOME_IC_BORROW_PNG, BorrowManagerPage()), AppApplication('一键报警', R.ASSETS_HOME_IC_POLICE_PNG, Scaffold()), ]; List _wisdomApplications = [ @@ -58,7 +59,7 @@ class _ApplicationPageState extends State '装修管理', R.ASSETS_HOME_IC_DECORATION_PNG, DecorationManagerPage()), AppApplication( '活动管理', R.ASSETS_HOME_IC_ACTIVITY_PNG, ActivityManagerPage()), - AppApplication('借还管理', R.ASSETS_HOME_IC_BORROW_PNG, Scaffold()), + AppApplication('借还管理', R.ASSETS_HOME_IC_BORROW_PNG, BorrowManagerPage()), AppApplication('巡检管理', R.ASSETS_HOME_IC_PATROL_PNG, InspectionManagePage()), AppApplication('绿化管理', R.ASSETS_HOME_IC_GREENING_PNG, GreenManagePage()), ]; diff --git a/lib/ui/sub_pages/borrow_manager/add_borrow_item_page.dart b/lib/ui/sub_pages/borrow_manager/add_borrow_item_page.dart new file mode 100644 index 0000000..c70b29a --- /dev/null +++ b/lib/ui/sub_pages/borrow_manager/add_borrow_item_page.dart @@ -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 { + 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, + ), + ), + ], + ); + } +} diff --git a/lib/ui/sub_pages/borrow_manager/add_borrow_object_page.dart b/lib/ui/sub_pages/borrow_manager/add_borrow_object_page.dart new file mode 100644 index 0000000..045dd03 --- /dev/null +++ b/lib/ui/sub_pages/borrow_manager/add_borrow_object_page.dart @@ -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 { + TextEditingController _textEditingController = TextEditingController(); + TextEditingController _numberController = TextEditingController(); + File file; + List get objects => BorrowData.borrowObjects; + + @override + Widget build(BuildContext context) { + final userProvider = Provider.of(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, + ), + ), + ], + ); + } +} diff --git a/lib/ui/sub_pages/borrow_manager/all_borrow_goods.dart b/lib/ui/sub_pages/borrow_manager/all_borrow_goods.dart new file mode 100644 index 0000000..13ae700 --- /dev/null +++ b/lib/ui/sub_pages/borrow_manager/all_borrow_goods.dart @@ -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 { + @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, + ), + ), + ], + ); + } +} diff --git a/lib/ui/sub_pages/borrow_manager/borrow_item_detail_page.dart b/lib/ui/sub_pages/borrow_manager/borrow_item_detail_page.dart new file mode 100644 index 0000000..c77df0b --- /dev/null +++ b/lib/ui/sub_pages/borrow_manager/borrow_item_detail_page.dart @@ -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 { + 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, + ), + ), + ], + ); + } +} diff --git a/lib/ui/sub_pages/borrow_manager/borrow_items_page.dart b/lib/ui/sub_pages/borrow_manager/borrow_items_page.dart new file mode 100644 index 0000000..4f19a2f --- /dev/null +++ b/lib/ui/sub_pages/borrow_manager/borrow_items_page.dart @@ -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 { + @override + Widget build(BuildContext context) { + final userProvider = Provider.of(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(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, + ), + ), + ], + ); + } +} diff --git a/lib/ui/sub_pages/borrow_manager/borrow_manager_page.dart b/lib/ui/sub_pages/borrow_manager/borrow_manager_page.dart new file mode 100644 index 0000000..4533aa9 --- /dev/null +++ b/lib/ui/sub_pages/borrow_manager/borrow_manager_page.dart @@ -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 { + @override + Widget build(BuildContext context) { + final userProvider = Provider.of(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(), + ], + ); + } +} diff --git a/lib/ui/widgets/common/aku_scaffold.dart b/lib/ui/widgets/common/aku_scaffold.dart index d86d74f..34f6b82 100644 --- a/lib/ui/widgets/common/aku_scaffold.dart +++ b/lib/ui/widgets/common/aku_scaffold.dart @@ -6,7 +6,7 @@ import 'package:aku_community_manager/tools/screen_tool.dart'; class AkuScaffold extends StatefulWidget { ///AppBar 使用该值 `title`,`titleStyle`,`leading`, - ///`brightness`,`appBarColor`,``将失效 + ///`brightness`,`appBarColor`,`actions`将失效 final PreferredSizeWidget appBar; ///title @@ -45,6 +45,8 @@ class AkuScaffold extends StatefulWidget { final Color appBarColor; + final List actions; + final PreferredSizeWidget appBarBottom; AkuScaffold({ Key key, @@ -58,6 +60,7 @@ class AkuScaffold extends StatefulWidget { this.bottom, this.appBarColor = Colors.white, this.appBarBottom, + this.actions = const [], }) : super(key: key); @override @@ -86,6 +89,7 @@ class _AkuScaffoldState extends State { child: Text(widget.title ?? ''), ), bottom: widget.appBarBottom, + actions: widget.actions, ), body: widget.body, bottomNavigationBar: widget.bottom,