diff --git a/assets/ic_Patrol.png b/assets/ic_Patrol.png deleted file mode 100644 index 7af20d3..0000000 Binary files a/assets/ic_Patrol.png and /dev/null differ diff --git a/assets/ic_activity.png b/assets/ic_activity.png deleted file mode 100644 index 1bc8449..0000000 Binary files a/assets/ic_activity.png and /dev/null differ diff --git a/assets/ic_article.png b/assets/ic_article.png deleted file mode 100644 index e8c8969..0000000 Binary files a/assets/ic_article.png and /dev/null differ diff --git a/assets/ic_borrow.png b/assets/ic_borrow.png deleted file mode 100644 index 7d5aa8f..0000000 Binary files a/assets/ic_borrow.png and /dev/null differ diff --git a/assets/ic_decoration.png b/assets/ic_decoration.png deleted file mode 100644 index 0276af1..0000000 Binary files a/assets/ic_decoration.png and /dev/null differ diff --git a/assets/ic_greening.png b/assets/ic_greening.png deleted file mode 100644 index c0a4482..0000000 Binary files a/assets/ic_greening.png and /dev/null differ diff --git a/assets/outdoor/ic_address.png b/assets/outdoor/ic_address.png new file mode 100644 index 0000000..b03f0f9 Binary files /dev/null and b/assets/outdoor/ic_address.png differ diff --git a/assets/outdoor/ic_chuhu.png b/assets/outdoor/ic_chuhu.png new file mode 100644 index 0000000..936b7fa Binary files /dev/null and b/assets/outdoor/ic_chuhu.png differ diff --git a/assets/outdoor/ic_goout.png b/assets/outdoor/ic_goout.png new file mode 100644 index 0000000..0547182 Binary files /dev/null and b/assets/outdoor/ic_goout.png differ diff --git a/assets/outdoor/ic_home.png b/assets/outdoor/ic_home.png new file mode 100644 index 0000000..9350291 Binary files /dev/null and b/assets/outdoor/ic_home.png differ diff --git a/assets/outdoor/ic_people.png b/assets/outdoor/ic_people.png new file mode 100644 index 0000000..54667c0 Binary files /dev/null and b/assets/outdoor/ic_people.png differ diff --git a/assets/outdoor/ic_time.png b/assets/outdoor/ic_time.png new file mode 100644 index 0000000..65ff2e1 Binary files /dev/null and b/assets/outdoor/ic_time.png differ diff --git a/assets/outdoor/item2.png b/assets/outdoor/item2.png new file mode 100644 index 0000000..14feead Binary files /dev/null and b/assets/outdoor/item2.png differ diff --git a/assets/outdoor/item3.png b/assets/outdoor/item3.png new file mode 100644 index 0000000..6333a56 Binary files /dev/null and b/assets/outdoor/item3.png differ diff --git a/assets/outdoor/itme1.png b/assets/outdoor/itme1.png new file mode 100644 index 0000000..61accc4 Binary files /dev/null and b/assets/outdoor/itme1.png differ diff --git a/lib/main.dart b/lib/main.dart index 9206018..3bf5523 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,7 @@ import 'package:aku_community_manager/provider/app_provider.dart'; import 'package:aku_community_manager/provider/fix_provider.dart'; import 'package:aku_community_manager/provider/manage_provider.dart'; +import 'package:aku_community_manager/provider/outdoor_provider.dart'; import 'package:aku_community_manager/provider/user_provider.dart'; import 'package:aku_community_manager/ui/home/home_page.dart'; import 'package:bot_toast/bot_toast.dart'; @@ -23,6 +24,7 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (context) => FixProvider()), ChangeNotifierProvider(create: (context)=> GreenManageProvider()), ChangeNotifierProvider(create: (context)=>InspectionManageProvider()), + ChangeNotifierProvider(create: (context)=>OutdoorProvider()), ], child: GetMaterialApp( title: '小蜜蜂管家', diff --git a/lib/mock_models/manage_models/manage_model.dart b/lib/mock_models/manage_models/manage_model.dart index d2a6392..2629f41 100644 --- a/lib/mock_models/manage_models/manage_model.dart +++ b/lib/mock_models/manage_models/manage_model.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:aku_community_manager/const/resource.dart'; class GreenManageCardModel { String title; @@ -7,15 +8,13 @@ class GreenManageCardModel { String timeend; String name; String body; - GreenManageCardModel( - this.title, this.task, this.timestart, this.timeend, this.name, - this.body); + GreenManageCardModel(this.title, this.task, this.timestart, this.timeend, + this.name, this.body); static List initList() { return [ GreenManageCardModel( - '中部广场周围绿化调整', '除杂草、松土、培土', '2020-10-08', '2020-10-18', '陈晖洁', - '''详细描述 + '中部广场周围绿化调整', '除杂草、松土、培土', '2020-10-08', '2020-10-18', '陈晖洁', '''详细描述 1.在小区的园林建设中首先要保证小区园林设计的美观 性以及与小区其他建筑的协调性,不仅能够吸引小区居 民的目光,丰富人们的精神生活,也要使小区园林设计 @@ -26,32 +25,38 @@ class GreenManageCardModel { 选择落叶较多的树这样不利于清理另外,还有小区其他 的绿化地方,要根据实际情况,合理科学的选择。'''), GreenManageCardModel( - '东区周围绿化调整', '修剪、造型', '2020-10-08', '2020-10-18', '刘小青',''), + '东区周围绿化调整', '修剪、造型', '2020-10-08', '2020-10-18', '刘小青', ''), GreenManageCardModel( - '西区周围绿化调整', '修剪、造型', '2020-10-10', '2020-10-20', '张空间',''), + '西区周围绿化调整', '修剪、造型', '2020-10-10', '2020-10-20', '张空间', ''), GreenManageCardModel( - '北区周围绿化调整', '修剪造型', '2020-10-15', '2020-10-25', '凯尔希',''), + '北区周围绿化调整', '修剪造型', '2020-10-15', '2020-10-25', '凯尔希', ''), ]; } } -class InspectionManageCardModel{ +class InspectionManageCardModel { String title; String date; String cycle; String time; List persons; List stations; - InspectionManageCardModel(this.title,this.date,this.cycle,this.time,this.persons,this.stations); + InspectionManageCardModel(this.title, this.date, this.cycle, this.time, + this.persons, this.stations); - static List initList(){ + static List initList() { return [ - InspectionManageCardModel('1号巡检任务', '2020.1-2020.12', '每周一、三、五', '8:00-12:00', ['王珂','陈晖洁','凯尔希','王铁锤','李狗蛋','尼古拉斯'], [ - '小区东门入口','1号南门','3号门站','3号闸门','4号门站' - ]), - InspectionManageCardModel('2号巡检任务', '2020.1-2020.12', '每周二', '8:00-12:00',['史尔特尔'] , []), - InspectionManageCardModel('3号巡检任务', '2020.1-2020.12', '每周二、四、六', '8:00-12:00', ['叶莲娜'], []), + InspectionManageCardModel( + '1号巡检任务', + '2020.1-2020.12', + '每周一、三、五', + '8:00-12:00', + ['王珂', '陈晖洁', '凯尔希', '王铁锤', '李狗蛋', '尼古拉斯'], + ['小区东门入口', '1号南门', '3号门站', '3号闸门', '4号门站']), + InspectionManageCardModel( + '2号巡检任务', '2020.1-2020.12', '每周二', '8:00-12:00', ['史尔特尔'], []), + InspectionManageCardModel( + '3号巡检任务', '2020.1-2020.12', '每周二、四、六', '8:00-12:00', ['叶莲娜'], []), ]; } } - diff --git a/lib/mock_models/outdoor_models/outdoor_model.dart b/lib/mock_models/outdoor_models/outdoor_model.dart new file mode 100644 index 0000000..7c806a5 --- /dev/null +++ b/lib/mock_models/outdoor_models/outdoor_model.dart @@ -0,0 +1,157 @@ +import 'package:flutter/material.dart'; +import 'package:aku_community_manager/const/resource.dart'; + +enum OUTDOORSTATUS { + ///待出户 + NOT_OUT, + + ///已出户 + OUT_DONE, + + ///已驳回 + REJECTED, + + ///已作废 + CANCELLATION, +} + +class ItemsOutdoorModel { + ///出户状态 + OUTDOORSTATUS status; + +///卡片上方时间,即开始时间 +DateTime datetime; + + ///小区名字 + String communityname; + + ///想起地址 + String adress; + + ///出户人 + String name; + + ///身份 + String identify; + + ///物品 + ItemDetails items; + + ///出户时间 + String outtime; + ItemsOutdoorModel( + {@required this.status, + @required this.datetime, + @required this.communityname, + @required this.adress, + @required this.name, + @required this.identify, + @required this.items, + @required this.outtime}); + + static List initList() { + return [ + ItemsOutdoorModel( + status: OUTDOORSTATUS.NOT_OUT, + datetime: DateTime(2020,10,23,09,28,56), + communityname: '深圳华悦茂峰', + adress: '1幢1单元702室', + name: '马云', + identify: '业主', + items: ItemDetails( + itemname: '家具', + weight: 40, + way: '搬家公司', + imagepath: [ + R.ASSETS_OUTDOOR_ITME1_PNG, + R.ASSETS_OUTDOOR_ITEM2_PNG, + R.ASSETS_OUTDOOR_ITEM3_PNG + ], + ), + outtime: '2020-10-24 12:00', + ), + ItemsOutdoorModel( + status: OUTDOORSTATUS.OUT_DONE, + datetime: DateTime(2020,10,23,09,28,56), + communityname: '深圳华悦茂峰', + adress: '1幢1单元702室', + name: '马云', + identify: '业主', + items: ItemDetails( + itemname: '家具', + weight: 40, + way: '搬家公司', + imagepath: [ + R.ASSETS_OUTDOOR_ITME1_PNG, + R.ASSETS_OUTDOOR_ITEM2_PNG, + R.ASSETS_OUTDOOR_ITEM3_PNG + ], + ), + outtime: '2020-10-24 12:00', + ), + ItemsOutdoorModel( + status: OUTDOORSTATUS.REJECTED, + datetime: DateTime(2020,10,23,09,28,56), + communityname: '深圳华悦茂峰', + adress: '1幢1单元702室', + name: '马云', + identify: '业主', + items: ItemDetails( + itemname: '家具', + weight: 40, + way: '搬家公司', + imagepath: [ + R.ASSETS_OUTDOOR_ITME1_PNG, + R.ASSETS_OUTDOOR_ITEM2_PNG, + R.ASSETS_OUTDOOR_ITEM3_PNG + ], + ), + outtime: '2020-10-24 12:00', + ), + ItemsOutdoorModel( + status: OUTDOORSTATUS.CANCELLATION, + datetime: DateTime(2020,10,23,09,28,56), + communityname: '深圳华悦茂峰', + adress: '1幢1单元702室', + name: '马云', + identify: '业主', + items: ItemDetails( + itemname: '家具', + weight: 40, + way: '搬家公司', + imagepath: [ + R.ASSETS_OUTDOOR_ITME1_PNG, + R.ASSETS_OUTDOOR_ITEM2_PNG, + R.ASSETS_OUTDOOR_ITEM3_PNG + ], + ), + outtime: '2020-10-24 12:00', + ), + ]; + } + + static Map outdoorStatusMap = { + OUTDOORSTATUS.NOT_OUT: '待出户', + OUTDOORSTATUS.OUT_DONE: '已出户', + OUTDOORSTATUS.REJECTED: '已驳回', + OUTDOORSTATUS.CANCELLATION: '已作废', + }; + static Map outdoorStatusStringMap = { + '待出户': OUTDOORSTATUS.NOT_OUT, + '已出户': OUTDOORSTATUS.OUT_DONE, + '已驳回': OUTDOORSTATUS.REJECTED, + '已作废': OUTDOORSTATUS.CANCELLATION, + }; +} + +class ItemDetails { + String itemname; + double weight; + String way; + List imagepath; + ItemDetails( + {@required this.itemname, + @required this.weight, + this.way, + this.imagepath}); +} \ No newline at end of file diff --git a/lib/provider/outdoor_provider.dart b/lib/provider/outdoor_provider.dart new file mode 100644 index 0000000..2c6b89b --- /dev/null +++ b/lib/provider/outdoor_provider.dart @@ -0,0 +1,20 @@ +import 'package:aku_community_manager/mock_models/outdoor_models/outdoor_model.dart'; +import 'package:flutter/material.dart'; + +class OutdoorProvider extends ChangeNotifier{ + List _itemOutdoorModel=ItemsOutdoorModel.initList(); + List get itemOutdoorModels => _itemOutdoorModel; + addOutdoormodel(ItemsOutdoorModel model){ + _itemOutdoorModel.insert(0, model); + notifyListeners(); + } +List getOutdoorModels(int index){ + return [ + _itemOutdoorModel.where((element) => element.status==OUTDOORSTATUS.NOT_OUT).toList(), + _itemOutdoorModel.where((element) => element.status==OUTDOORSTATUS.OUT_DONE).toList(), + _itemOutdoorModel.where((element) => element.status==OUTDOORSTATUS.REJECTED).toList(), + _itemOutdoorModel.where((element) => element.status==OUTDOORSTATUS.CANCELLATION).toList(), + _itemOutdoorModel, + ][index]; +} +} \ No newline at end of file diff --git a/lib/ui/home/application/applications_page.dart b/lib/ui/home/application/applications_page.dart index 676a6c0..44b10e8 100644 --- a/lib/ui/home/application/applications_page.dart +++ b/lib/ui/home/application/applications_page.dart @@ -2,6 +2,7 @@ import 'package:aku_community_manager/ui/manage_pages/green_manage/green_manage_ 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/decoration_manager/decoration_manager_page.dart'; +import 'package:aku_community_manager/ui/sub_pages/items_outdoor/items_outdoor_page.dart'; import 'package:aku_community_manager/ui/sub_pages/visitor_manager/visitor_manager_page.dart'; import 'package:aku_ui/common_widgets/aku_material_button.dart'; import 'package:flutter/material.dart'; @@ -56,6 +57,7 @@ class _ApplicationPageState extends State AppApplication('巡检管理', R.ASSETS_HOME_IC_PATROL_PNG, InspectionManagePage()), AppApplication( '装修管理', R.ASSETS_HOME_IC_DECORATION_PNG, DecorationManagerPage()), + AppApplication('物品出户', R.ASSETS_HOME_IC_ARTICLE_PNG, ItemsOutdoorPage()), ]; @override diff --git a/lib/ui/manage_pages/green_manage/green_manage_page.dart b/lib/ui/manage_pages/green_manage/green_manage_page.dart index 22670fd..aab3f87 100644 --- a/lib/ui/manage_pages/green_manage/green_manage_page.dart +++ b/lib/ui/manage_pages/green_manage/green_manage_page.dart @@ -28,7 +28,7 @@ class _GreenManagePageState extends State { itemBuilder: (context, index) { return _greenManageCard(greenManageProvider.greenManageModels[index]); }, - padding: EdgeInsets.only(left: 32.w, right: 32.w), + padding: EdgeInsets.only(left: 32.w, right: 32.w,bottom: 40.w), itemCount: greenManageProvider.greenManageModels.length, ), ); diff --git a/lib/ui/manage_pages/inspection_manage/inspection_manage_page.dart b/lib/ui/manage_pages/inspection_manage/inspection_manage_page.dart index e266bdc..592db42 100644 --- a/lib/ui/manage_pages/inspection_manage/inspection_manage_page.dart +++ b/lib/ui/manage_pages/inspection_manage/inspection_manage_page.dart @@ -25,7 +25,7 @@ class _InspectionManagePageState extends State { return AkuScaffold( title: '巡检管理', body: ListView( - padding: EdgeInsets.only(left: 32.w, right: 32.w), + padding: EdgeInsets.only(left: 32.w, right: 32.w,bottom: 40.w), children: _inspectionManageModel.inspectionManageModels .map((e) => InspectionManageCard(e).inspectionManageCard()) .toList(), diff --git a/lib/ui/sub_pages/items_outdoor/items_outdoor_card.dart b/lib/ui/sub_pages/items_outdoor/items_outdoor_card.dart new file mode 100644 index 0000000..fbb98f1 --- /dev/null +++ b/lib/ui/sub_pages/items_outdoor/items_outdoor_card.dart @@ -0,0 +1,199 @@ +import 'package:aku_community_manager/mock_models/outdoor_models/outdoor_model.dart'; +import 'package:aku_community_manager/style/app_style.dart'; +import 'package:aku_community_manager/tools/widget_tool.dart'; +import 'package:aku_ui/common_widgets/aku_common_widgets.dart'; +import 'package:common_utils/common_utils.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:aku_community_manager/const/resource.dart'; + +class ItemsOutdoorCard extends StatefulWidget { + final ItemsOutdoorModel cardModel; + ItemsOutdoorCard({ + Key key, + @required this.cardModel, + }) : super(key: key); + + @override + _ItemsOutdoorCardState createState() => _ItemsOutdoorCardState(); +} + +class _ItemsOutdoorCardState extends State { + ItemsOutdoorModel _cardModel; + String _datetime; + + @override + void initState() { + super.initState(); + _cardModel = widget.cardModel; + _datetime = + DateUtil.formatDate(_cardModel.datetime, format: "yyyy/MM/dd HH:mm:ss"); + } + + @override + Widget build(BuildContext context) { + TextStyle _textStyle = + TextStyle(color: AppStyle.minorTextColor, fontSize: 28.sp); + return AkuButton( + child: Container( + color: Color(0xFFFFFFFF), + margin: EdgeInsets.only(top: 16.w), + padding: EdgeInsets.only(left: 24.w, right: 24.w, bottom: 24.w), + child: Column(children: [ + Container( + alignment: Alignment.centerLeft, + height: 88.w, + width: double.infinity, + child: Row( + children: [ + Container( + alignment: Alignment.center, + width: 112.w, + height: 40.w, + decoration: BoxDecoration( + border: Border.all(color: Color(0xFF3F8FFE), width: 2.w), + ), + child: Text( + '物品出户', + style: TextStyle( + color: Color(0xFF3F8FFE), + fontSize: 20.sp, + fontWeight: FontWeight.bold), + ), + ), + AkuBox.w(16), + Text( + _datetime, + style: TextStyle( + color: AppStyle.minorTextColor, + fontSize: 22.sp, + ), + ), + Spacer(), + Text( + ItemsOutdoorModel.outdoorStatusMap[_cardModel.status], + style: TextStyle( + color: _cardModel.status == OUTDOORSTATUS.CANCELLATION + ? Color(0xFF999999) + : Color(0xFFFF4501), + fontSize: 24.sp, + fontWeight: FontWeight.bold), + ), + ], + ), + ), + Row( + children: [ + Image.asset( + R.ASSETS_OUTDOOR_IC_HOME_PNG, + width: 40.w, + height: 40.w, + ), + AkuBox.w(4), + Text( + '小区名称', + style: _textStyle, + ), + Spacer(), + Text( + _cardModel.communityname, + style: AppStyle().primaryStyle, + ), + ], + ), + AkuBox.h(12), + Row( + children: [ + Image.asset( + R.ASSETS_OUTDOOR_IC_ADDRESS_PNG, + width: 40.w, + height: 40.w, + ), + AkuBox.w(4), + Text('详细地址', style: _textStyle), + Spacer(), + Text( + _cardModel.adress, + style: AppStyle().primaryStyle, + ), + ], + ), + AkuBox.h(12), + Row( + children: [ + Image.asset( + R.ASSETS_OUTDOOR_IC_GOOUT_PNG, + width: 40.w, + height: 40.w, + ), + AkuBox.w(4), + Text( + '出户人', + style: _textStyle, + ), + Spacer(), + Text( + _cardModel.name, + style: AppStyle().primaryStyle, + ), + ], + ), + AkuBox.h(12), + Row( + children: [ + Image.asset( + R.ASSETS_OUTDOOR_IC_PEOPLE_PNG, + width: 40.w, + height: 40.w, + ), + AkuBox.w(4), + Text( + '身份', + style: _textStyle, + ), + Spacer(), + Text( + _cardModel.identify, + style: AppStyle().primaryStyle, + ), + ], + ), + AkuBox.h(12), + Row( + children: [ + Text( + '出户物品', + style: _textStyle, + ), + Spacer(), + Text( + _cardModel.items.itemname, + style: AppStyle().primaryStyle, + ), + ], + ), + AkuBox.h(12), + Row( + children: [ + Image.asset( + R.ASSETS_OUTDOOR_IC_TIME_PNG, + width: 40.w, + height: 40.w, + ), + AkuBox.w(4), + Text( + '出户时间', + style: _textStyle, + ), + Spacer(), + Text( + _cardModel.outtime, + style: AppStyle().primaryStyle, + ), + ], + ), + ]), + ), + ); + } +} diff --git a/lib/ui/sub_pages/items_outdoor/items_outdoor_page.dart b/lib/ui/sub_pages/items_outdoor/items_outdoor_page.dart new file mode 100644 index 0000000..cd5c3c4 --- /dev/null +++ b/lib/ui/sub_pages/items_outdoor/items_outdoor_page.dart @@ -0,0 +1,51 @@ +import 'package:aku_community_manager/mock_models/outdoor_models/outdoor_model.dart'; +import 'package:aku_community_manager/provider/outdoor_provider.dart'; +import 'package:aku_community_manager/ui/sub_pages/items_outdoor/items_outdoor_card.dart'; +import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart'; +import 'package:aku_community_manager/ui/widgets/inner/aku_tab_bar.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:provider/provider.dart'; + +class ItemsOutdoorPage extends StatefulWidget { + ItemsOutdoorPage({Key key}) : super(key: key); + + @override + _ItemsOutdoorPageState createState() => _ItemsOutdoorPageState(); +} + +class _ItemsOutdoorPageState extends State with TickerProviderStateMixin { + List _tabs = ['待出户', '已出户', '已驳回', '已作废', '全部']; + TabController _tabController; + @override + void initState() { + super.initState(); + _tabController=TabController(length: _tabs.length, vsync: this); + } +@override +void dispose() { + _tabController?.dispose(); + super.dispose(); +} + @override + Widget build(BuildContext context) { + return AkuScaffold( + title: '物品出户', + appBarBottom: PreferredSize( + preferredSize: Size.fromHeight(88.w), + child: AkuTabBar(controller: _tabController, tabs: _tabs), + ), + body: TabBarView( + controller: _tabController, + children: _tabs.map((e) => _buildListView(_tabs.indexOf(e))).toList()), + ); + } + Widget _buildListView(int index){ + final _outdoorModels=Provider.of(context); + List _selectModels = _outdoorModels.getOutdoorModels(index); + return ListView( + padding: EdgeInsets.only(left: 32.w,right: 32.w), + children: _selectModels.map((e) => ItemsOutdoorCard(cardModel:e)).toList(), + ); + } +} diff --git a/lib/ui/sub_pages/visitor_manager/visitor_manager_card.dart b/lib/ui/sub_pages/visitor_manager/visitor_manager_card.dart index 9e9137a..d716d22 100644 --- a/lib/ui/sub_pages/visitor_manager/visitor_manager_card.dart +++ b/lib/ui/sub_pages/visitor_manager/visitor_manager_card.dart @@ -54,7 +54,7 @@ VisitorStatus _status; AkuBox.w(8), Text('$_name先生',style:_textStyle,), AkuBox.w(137), - Image.asset(R.ASSETS_IC_BORROW_PNG,width: 40.w,height: 40.w,), + Image.asset(R.ASSETS_HOME_IC_BORROW_PNG,width: 40.w,height: 40.w,), AkuBox.w(8), Text(_plate,style: _textStyle,), Spacer(), diff --git a/pubspec.yaml b/pubspec.yaml index d5ad5f5..5a8ecaf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -78,6 +78,7 @@ flutter: - assets/message/ - assets/manage/ - assets/inspection/ + - assets/outdoor/ - assets/static_temp/ - assets/static_fix/