From bcbca62e462b1078ee684e81b9edd5c7690b46ba Mon Sep 17 00:00:00 2001 From: zhangmeng <494089941@qq.com> Date: Thu, 15 Apr 2021 09:55:43 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=80=9F=E8=BF=98=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/icons/goods_borrow.png | Bin 0 -> 730 bytes assets/icons/goods_return.png | Bin 0 -> 768 bytes lib/const/resource.dart | 278 +++++++++--------- lib/constants/application_objects.dart | 4 +- .../borrow/borrow_goods_page.dart | 144 +++++++++ .../goods_manage_page/goods_manage_page.dart | 5 +- .../select_borrow_return_page.dart | 61 ++++ 7 files changed, 353 insertions(+), 139 deletions(-) create mode 100644 assets/icons/goods_borrow.png create mode 100644 assets/icons/goods_return.png create mode 100644 lib/pages/goods_manage_page/borrow/borrow_goods_page.dart create mode 100644 lib/pages/goods_manage_page/select_borrow_return_page.dart diff --git a/assets/icons/goods_borrow.png b/assets/icons/goods_borrow.png new file mode 100644 index 0000000000000000000000000000000000000000..cc9d5c7d60dda17cca8b9a96b8890ec3bf4704aa GIT binary patch literal 730 zcmV<00ww*4P)mF#k0jPy+GezgCdgfmRT$K&?QnAf$rOffV3ZDv%CB3Q+RaxlD`!Wa5krxA$hw zQx3#^x4d2VfJitjeyP{%BXm8Ig9y!Euh$a`#!oHF8jwK5aXhgajm8Jw*GMKJo8%hL zsM#bO;t9CR8iYuMqyZrEPTE)&0Rh59hco~p-3BDMNn;`|0T>^pjTsRn;V=Y{a2Nte z0FckTr)&>J5O6pgW=TmM!sGak1Yo<}hOX;&DwPWV?XRMJ!gznVTm~WtU@!^j{?t8; z2$FCZ0!TPYFM?2a7wSIc_xt_6uf#4lO78)-ZNH#va|01ORpQToJe3@X=e4uXV^q3# za11BU@w#e&lh+%x7D43=i!5&_H37=7OY0h}4I6kv;_6o+Q9vm-yXUowGH%ZAsKFbi z@P^0pNKps@F#ZjlL$}A#8$iThwOYOMhMN3&?OoE4J`@aS;w{B$E^F8 z_SKPqi?e=;(kDWg?YZiC)`yt&ZeHUVrS|}+`V8HS{s~hSC*d#zkZ_olArgXSv)M+d ze5RioqQ_-15d^eaEf>kr;%svpm0}qcAsC;yK!U_+Bt-+#O6TTz0Yd-@harH3gCCoV zQ^t-D7m^-$qLfIGl?d?xJ<=RT14uXw0cZiqg=h0EBP5fAfNzla0^51$DrDFN@c;k- M07*qoM6N<$f``02^#A|> literal 0 HcmV?d00001 diff --git a/assets/icons/goods_return.png b/assets/icons/goods_return.png new file mode 100644 index 0000000000000000000000000000000000000000..5862dc4fdd125fbea54f63995280a420a3e281e4 GIT binary patch literal 768 zcmV+b1ONPqP)G!552|yH!#VD7{olU3HBPhXSGU*J5!#F6H%jZ0Qf=*oI3WdTe5Aslm zAP9~_wh@$qk9;wNa(Duu90#TjJ|A%yhF91Fa4ZinXq}M&DrDU2^}5&tFxAH}5a2Zc z%Hausa(Duu17lN%3IbRMycoJVDhL=11|8Nlw^H26Ia`T{=Ojs*2T%eQbuBin)$3ja zp&Xt7D928SAYJP`UF%CK`DfZIROcf=Tx$+~#KShz*IT7hsUbx;8v*lK7bD|*`8xgl z8k;Usf|CTuEOWMHuVU+Vy;B6ptkZ_O;oz^45u71lKI=yBZV9PIg>?efopok{GYaE~ z|Nq7Ypq6xHZ_p|MYs~sGXMuxXS^r7qhW4lerRmPbZUYLAaI%VBYDsSR}=J|aUn*Jlgj;q6tNSg=sZ(wrEv250#FW5 z0F*<`_P9VSIA)ZH*<_p~$%m{#L!jqSpdr634n6=Ldeu1IWz6IF>FD`V(Rvh y$hHZkpwKsGYeQKsa>dku5^&&O^aI|-5cmP}DGkff1n^P-0000 appObjects = [ () => AdvicePage(type: AdviceType.COMPLAIN)), AO('问卷调查', R.ASSETS_APPLICATIONS_QUESTION_PNG, () => QuestionnairePage()), // AO('装修管理', R.ASSETS_APPLICATIONS_DECORATION_PNG, FitupManagePage()), - AO('借还管理', R.ASSETS_APPLICATIONS_BORROW_PNG, () => GoodsManagePage()), + AO('借还管理', R.ASSETS_APPLICATIONS_BORROW_PNG, () => SelectBorrowReturnPage()), AO('一键报警', R.ASSETS_APPLICATIONS_POLICE_PNG, () => AlarmPage()), ]; diff --git a/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart b/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart new file mode 100644 index 00000000..5ccbbbc2 --- /dev/null +++ b/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart @@ -0,0 +1,144 @@ +import 'package:akuCommunity/base/base_style.dart'; +import 'package:akuCommunity/constants/api.dart'; +import 'package:akuCommunity/model/common/img_model.dart'; +import 'package:akuCommunity/model/manager/article_borrow_model.dart'; +import 'package:akuCommunity/pages/things_page/widget/bee_list_view.dart'; +import 'package:akuCommunity/widget/bee_scaffold.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_easyrefresh/easy_refresh.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:velocity_x/velocity_x.dart'; +import 'package:akuCommunity/const/resource.dart'; + +class BorrowGoodsPage extends StatefulWidget { + BorrowGoodsPage({Key key}) : super(key: key); + + @override + _BorrowGoodsPageState createState() => _BorrowGoodsPageState(); +} + +class _BorrowGoodsPageState extends State { + EasyRefreshController _easyRefreshController; + @override + void initState() { + super.initState(); + _easyRefreshController = EasyRefreshController(); + } + + @override + void dispose() { + _easyRefreshController?.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return BeeScaffold( + title: '全部物品', + actions: [ + MaterialButton( + onPressed: () { + // Get.to(() => MineGoodsPage()); + }, + child: '我的借还物品'.text.black.size(28.sp).make(), + padding: EdgeInsets.symmetric(horizontal: 32.w), + ), + ], + body: BeeListView( + path: API.manager.articleBorrow, + controller: _easyRefreshController, + convert: (models) { + return models.tableList + .map((e) => ArticleBorrowModel.fromJson(e)) + .toList(); + }, + builder: (items) { + return ListView.separated( + itemBuilder: (context, index) { + return _goodsCard(items[index]); + }, + separatorBuilder: (_, __) { + return 16.w.heightBox; + }, + itemCount: items.length); + }), + bottomNavi: Row( + children: [ + '已选择'.richText.color(ktextPrimary).size(28.sp).withTextSpanChildren([ + '0'.textSpan.size(32.sp).color(ktextPrimary).bold.make(), + '项'.textSpan.size(28.sp).color(ktextPrimary).make(), + ]).make(), + Spacer(), + MaterialButton( + elevation: 0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(37.w)), + color: kPrimaryColor, + padding: EdgeInsets.symmetric(horizontal: 50.w, vertical: 15.w), + onPressed: () {}, + child: '选好了'.text.black.size(32.sp).bold.make(), + ), + ], + ) + .pSymmetric(v: 20.w, h: 10.w) + .box + .width(double.infinity) + .padding( + EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom)) + .make(), + ); + } + + Widget _goodsCard(ArticleBorrowModel model) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + width: 160.w, + height: 120.w, + child: ClipRRect( + child: FadeInImage.assetNetwork( + placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP, + image: API.image(ImgModel.first(model.imgUrls)), + ), + ), + ), + 20.w.widthBox, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Image.asset( + R.ASSETS_IMAGES_PLACEHOLDER_WEBP, + width: 20.w, + height: 20.w, + ), + 4.w.widthBox, + '物品名称:'.text.color(ktextSubColor).size(28.sp).make(), + '${model.name}'.text.color(ktextPrimary).size(30.sp).make(), + ], + ), + Row( + children: [ + Image.asset( + R.ASSETS_IMAGES_PLACEHOLDER_WEBP, + width: 20.w, + height: 20.w, + ), + 4.w.widthBox, + '物品名称:'.text.color(ktextSubColor).size(28.sp).make(), + '${model.quantity}'.text.color(ktextPrimary).size(30.sp).make(), + ], + ), + ], + ).expand(), + ], + ) + .box + .color(Colors.white) + .padding(EdgeInsets.symmetric(vertical: 12.w, horizontal: 10.w)) + .withRounded(value: 6.w) + .make(); + } +} diff --git a/lib/pages/goods_manage_page/goods_manage_page.dart b/lib/pages/goods_manage_page/goods_manage_page.dart index f8e08ccd..f124eb71 100644 --- a/lib/pages/goods_manage_page/goods_manage_page.dart +++ b/lib/pages/goods_manage_page/goods_manage_page.dart @@ -16,7 +16,8 @@ import 'package:akuCommunity/widget/bee_scaffold.dart'; import 'package:akuCommunity/widget/buttons/bottom_button.dart'; class GoodsManagePage extends StatefulWidget { - GoodsManagePage({Key key}) : super(key: key); + final bool isBorrow; + GoodsManagePage({Key key, this.isBorrow = true}) : super(key: key); @override _GoodsManagePageState createState() => _GoodsManagePageState(); @@ -115,7 +116,7 @@ class _GoodsManagePageState extends State { itemCount: items.length); }), bottomNavi: BottomButton( - child: '扫一扫出借'.text.black.size(32.sp).bold.make(), + child: '扫一扫'.text.black.size(32.sp).bold.make(), onPressed: () {}, ), ); diff --git a/lib/pages/goods_manage_page/select_borrow_return_page.dart b/lib/pages/goods_manage_page/select_borrow_return_page.dart new file mode 100644 index 00000000..77944042 --- /dev/null +++ b/lib/pages/goods_manage_page/select_borrow_return_page.dart @@ -0,0 +1,61 @@ +import 'package:akuCommunity/pages/goods_manage_page/goods_manage_page.dart'; +import 'package:akuCommunity/widget/bee_scaffold.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:velocity_x/velocity_x.dart'; +import 'package:akuCommunity/const/resource.dart'; +import 'package:akuCommunity/extensions/widget_list_ext.dart'; + +class SelectBorrowReturnPage extends StatefulWidget { + SelectBorrowReturnPage({Key key}) : super(key: key); + + @override + _SelectBorrowReturnPageState createState() => _SelectBorrowReturnPageState(); +} + +class _SelectBorrowReturnPageState extends State { + @override + Widget build(BuildContext context) { + return BeeScaffold( + title: '借还管理', + body: ListView( + padding: EdgeInsets.symmetric(vertical: 40.w, horizontal: 36.w), + children: [ + _buidTile(R.ASSETS_ICONS_GOODS_BORROW_PNG, '物品出借', true), + _buidTile(R.ASSETS_ICONS_GOODS_RETURN_PNG, '物品归还', false), + ].sepWidget(separate: 20.w.heightBox), + ), + ); + } + + Widget _buidTile(String iconPath, String text, bool isBorrow) { + return Row( + children: [ + SizedBox( + width: 32.w, + height: 32.w, + child: Image.asset(iconPath), + ), + 28.w.widthBox, + text.text.black.size(30.sp).make(), + Spacer(), + Icon( + CupertinoIcons.chevron_forward, + size: 32.w, + ), + ], + ) + .box + .color(Colors.white) + .padding(EdgeInsets.symmetric(vertical: 40.w, horizontal: 32.w)) + .withRounded(value: 8.w) + .make() + .onInkTap(() { + Get.to(() => GoodsManagePage( + isBorrow: isBorrow, + )); + }); + } +} From cef324e7373cff47e70fac26f4957154e2968e06 Mon Sep 17 00:00:00 2001 From: zhangmeng <494089941@qq.com> Date: Thu, 15 Apr 2021 15:22:49 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20=E5=80=9F=E8=BF=98?= =?UTF-8?q?=E7=AE=A1=E7=90=86-=E5=80=9F=E5=87=BA-=E7=89=A9=E5=93=81?= =?UTF-8?q?=E6=80=BB=E7=B1=BB=E7=95=8C=E9=9D=A2=20=E6=B7=BB=E5=8A=A0=20?= =?UTF-8?q?=E5=80=9F=E8=BF=98=E7=AE=A1=E7=90=86-=E5=80=9F=E5=87=BA-?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E7=89=A9=E5=93=81=E7=95=8C=E9=9D=A2=20?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5=EF=BC=9A=E5=80=9F=E8=BF=98=E7=AE=A1=E7=90=86?= =?UTF-8?q?=EF=BC=9A=E6=A0=B9=E6=8D=AE=E7=89=A9=E5=93=81=E6=80=BB=E7=B1=BB?= =?UTF-8?q?=E4=B8=BB=E9=94=AEid=E6=9F=A5=E8=AF=A2=E6=9C=AA=E5=80=9F?= =?UTF-8?q?=E5=87=BA=E7=9A=84=E7=89=A9=E5=93=81=E6=98=8E=E7=BB=86(?= =?UTF-8?q?=E5=87=BA=E5=80=9F=E7=8A=B6=E6=80=81=E6=81=92=E4=B8=BA=E6=9C=AA?= =?UTF-8?q?=E5=87=BA=E5=80=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/icons/article_count.png | Bin 0 -> 7162 bytes assets/icons/article_name.png | Bin 0 -> 20076 bytes lib/const/resource.dart | 8 + lib/constants/api.dart | 3 + .../manager/article_borrow_detail_model.dart | 50 +++++++ lib/model/manager/article_return_model.dart | 73 +++++++++ .../borrow/borrow_goods_page.dart | 48 +++--- .../borrow_goods_detail_page.dart | 139 ++++++++++++++++++ .../goods_manage_page/goods_manage_page.dart | 7 +- .../select_borrow_return_page.dart | 8 +- 10 files changed, 312 insertions(+), 24 deletions(-) create mode 100644 assets/icons/article_count.png create mode 100644 assets/icons/article_name.png create mode 100644 lib/model/manager/article_borrow_detail_model.dart create mode 100644 lib/model/manager/article_return_model.dart create mode 100644 lib/pages/goods_manage_page/borrow_goods_detail_page.dart diff --git a/assets/icons/article_count.png b/assets/icons/article_count.png new file mode 100644 index 0000000000000000000000000000000000000000..71a384113e3e2d8ba5ea03100558163a35104bba GIT binary patch literal 7162 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 literal 0 HcmV?d00001 diff --git a/assets/icons/article_name.png b/assets/icons/article_name.png new file mode 100644 index 0000000000000000000000000000000000000000..7cfe5384a48c6fcc68e2115896f6c99f55c3e417 GIT binary patch literal 20076 zcmeFZg;!MJyEY8tC__mJD4n7pDJ7lK&Cn^*Eg;ej(m8aBba#hzcXxNgfaJW}^Lx*E zzrW#IhqY!g411pa?0esN-PgT?73C!`(TLEHkdQE?B*m1GkdUwby&x}uPX=dJLx5k% z4$2ZDNTnkr`@kP!#u`#4a&k!Yz6?>zw~U(WyYx}hRkx9Ow=y{2D#yc!mStH@GW+^-WQY(F2-_P8Oo8;jZ~s>g|EmQ5 zUt>te;coxv#!3jne&^l(aC@mR*Wz{~+qCWd?B(8Slk@5H^QDm-Y;SJ~Ft%ePF1iY3 z6thovD51LbYO61kfJ=1wc=onVv8&5T(dGcxBXB^VY0K>#WrPw2TOY~MWQvifc@Zs-L zscw_W;gUH#t!%d`FPYPNp-jC@udR5OL|+&Ql#U}b#xKJ%6wuxZ-Wg7DPVMQXy82#GQFSwA8bkVjSnRE_c-SI+K z7eNB$(0FGi#0c1nQYe7xRz2_UX}4mhU0bO}wW%6pORjink2+nik8Zu9!IBi%-a=Mj z?5nvkTo!N$UAg1_gqn7()f*Z^QYuzkCHJ2JL7DY+^d|+3+O?@GHI}n-0YUAgz?X1= zFVVciLjj}FP$2UQZEmSc%H|zD-lH}1#}670u6`Y)2rpYLxM?y9_7|c=^7)J>G)5dA zK}?B_g&ZD>Nbq-vh*0Rk6SdEh9ztYhm+h1x+BQTsY#>4u(jbUy96KsHNE|yVsxJ1Y zf-1K9LEEJ9$4QYox^)T3Ieo?sYnuQhFcsCBV-8MqB={L}9;#WxOuSZUOLRp-n8E5IPnQ}TY8z)p&wKXxFrb7Frvn26cjh$>y%+VV zGJqOF0IkC5pm_(`qRJ$=Rl;pKZ!BGa+h6FkvO5ZVY;Bc%3Rew%JjK-Qy#WMQ4G7N6 z1(yhXKwJK8dmx0va^`BfKbl8t)=lZIb?IF~54pn-s{_yXqk2YM60qqe7@0<_ z2*?8FC0;U2b#`o%RK=Y_(hKZ4TXvA~~ zt80c%ZU#d{4c~EIfcev_z}_FIK3{#Va`=1~(_(LUkCY~L2qS)w(} zSp6j)I;XZF-m6=?~K3~81@ z680i|ZcCxajcje{T3E}GMytfrcGlEjgoTWH@3)X!^LepapkF1vemHYHydg>hhWLvk31cy|oYzW% ziquNz^;=xw(`Y8C5w+qkdXM3F8hK?BX?7i`4!n+gis}ejcXVXP5wNAz1V{$u7!shT z`uQpjj;T}awC<#gKD+oj`hZT8TbKL4@NoppeKM)^2RaEnl%h~|L*4KvRU>F^8 z1tMu~v4j2XSu>yrH)JVt{3mAF%YL^3-(a4X@6%|zbg+=!G;I6dn6myCojG|WHxCCQ^AJ#0=G_#ZS$)rIG$1a`xxN&f)3royP91@XU|)j zz%&Q7jz`6S0Z8dKI#$pcy9iTA0;&y%>7^j}!SrF% zT^j>F**X}EM&X@Fh!iR_DGd0F+O&d_CY!~S3+Xq=!41}<7K_zSJjSK#FTs_7Xsb5X zza~S>h!#-TF|7;zn^lq@Iuh^td+c-DfKXLJ!iTw8|r z=LvKT9S*F0NZi85l(MsPJRn!_L~u))|KqyQWAE`Rz~8B))>AgtnvMT5Iyg9ZD>K9! zw1*(epw$w5<%g_=a922dI9Ab0c+yB~Qrc~;-Ce*&g#NhzehjClr!7UU$TKFTkc1UX z8(-|g{0o&~)#1@tuuI`Op}~LtCkwV}JP6j3+)Yj6bsm}F5WX>ZH!7=?o|Hu{kWzKN zK>~IM#C;znJ(mdcZk%PFeLe|gts8VTY*biyeg4jgmN`yxo8$8bz3VVxtYuTTCY1Xy zpC2vs2$bMu-MdkA&glhk(dK)DrizU&eT_K~(nDoaV4NVP>e`u4?; z#O>3MEyP}sMC4L8StQ{b?sE|ikM)j#)7Yp*KfUE**c*D3TaU6C*3&ZBxL$~_kJ`w6 z=1f&aL3t~#_z!`==>264Dns(|Y>CLW+r4L;K{6Cu11w9bH&YIb7?UFCopUM+)HGWq zd`{VBRkS=6rT)OpSyP|D+mw^e57tUFi6_XdXgF%7SmQ$mFW=I12vJi+H^?H6_K$8* zWV>eQ$x8@s-5(>JO1|0G)||Kk61$SyO%;=`eT_V7Ie z2;-ha&&{*6f+Qq`dJfC;%2QsTu9N1S4)WzgCmvg^+x`wc`$>qBO3-w*Ibeblrpnwe z2-@*Ji~xj8Dwn7@Jb^bmTyt^_t zL+Ie1e zoC98ma!GVAvT2WOyKqnpMJNb?y%184NXQF;#$@r=IM9BC(YF`&QJ>MZ@50-)!_!lr z8U){RSrw3_Hc4WQ%>TWU!qkVId>ojaY5H<|$BB9$;pi6XTna=BU76^(#ccZv=EBM< zX+&3CQ}S?&6VIn7e?0m62GO9GPV-Dx$4iCKq5&Z7^GG`)E66Ufy_PULMaOk^%Re{8 z36xUA?gM=CXh=}363!TVb*x;Ulm7~1Q|7N<8-X^ zANC`YXEmH9-m3Cy-l=99VOg;Q;enuD?(=90HqtUb0OAa_B@VkD{tuE+C^T}L9txfS!`wCbYqv*5)E)`VMX zL^yDI;)OHNO!L-tasrXZ~aHfp(_E-ebrA zcpk`r=5Ot4kwJz2y!jgyGt>K+Ix%-;+lV$N*-v+S*|tY>6`QqFyd>Fv4CdR?8Z+&!RS^{6~KKsFcm)=J05{NYlR2$7mAeN$P#VaKl%T)(v1QVkR= zq8v}R$%of>Uo+A>xxd|CAFFiL7rjQ&7VJkf!AW`y_=C>XGbXUKWn?JkKq^{CPu->G zBhNTiKFPwYyfpRKGf<*69~38Zu891E8ZXv>)SRMb_V_#2=a5RMuUZ1tZ!bd)|z{~Q+@F_Ee%Mb(-fjiX}5X{ zFUs>Gn6YrZQ{xfeyl&DMwW?niJI&4p4*a2Qs}Xn@*RHck%dKt@F~_r7rbV2_AUKOQ z@DnCbw51g&=0ucSuTC`ot28NOS+zm!Z;U_DOiUDye3#o=$Z{;m+zZ)5+0|q-k9c`c zeqb5u@6qUKCx5t5bC|10xpuPx+@cm2@NK^qFHzA$?vnz(cebDZS;V9zhrEE!ee9|s z_{<+M{;)?_9@G`GRzC-ug@MR$||MxB%2_ehfs=^c1JT-rSO*>lV07W>S+Vjw^77P;}M9Q5?P(8NaG^bq(0_wn~pX<#@3zbMS zc$)PLU!6l6x+9mO*7ByC3A&l$wGD0m%CDX*lO-Ku5N5wXM2Z1Lh zGe19wj!}d5zp&IY)n3!psfE<2`N~N>63i#dPE9wo{JZB{&havH-*$_?C+I; zrhIkjB}n-$$}8HG1vsSLZi3)V<)JsxV%RFU&ZW=4Ks-(JOYKCV1yI zz|2!-il)DiGoS_e%lwim@o#DKq(QJ7ywLl%M4T1wh051bCoH|S=y|0Stvn=K%jHIR z;z$~AStyTPhhO`}_TZw;QoVhcq)v7=pDGnD9A&Es?#Yiw|7`W)^BBJ*YxpIpRmls~ z+i5ngIkeBM2px&=#%CEf6!R?O4j`f#9w{abt_Sh-CgreOC*13X8RFbsl_#jI&=RpA z5KcXN!Xpf)3!&RJH8ra-QQCwCi=R=p5aFYyjYwWQZ45uwh>_u89;_d`j6r}yNE=w& zyFOm@$^#<)j7-nqf0C3hZwsKF(OTOdq0y;F`N2|&HS&yp_Pyj@4~(i*QfqG`0wHse zhlKj>=UOl+HwecZ`7ADcSM@DWZ`-sOH*M~h;%6`f^a*0NxGq`?6xn(%)pZwUnh}GO?so!m4#b&2+4Xx~YSmqI zj8uxXq)9KwX;z{jre5tWheKC!*RZ0v`Q+%`IfeYjUT`@Q=s=hkTH@p;1b+b8$SmgY zs_NN}-<@q%3q0Iaf7;C!gt!K)4CfA*N#yGlzU~=}6P2-&f1h0jRbQbfX?ogJCK6u4 ze&_E!6NISrU#_Kj>4LUTjC&ou&~JyVB8lG5Kdv8|DKW}^iVbH#Txyk0r~l$-JWZK! zUe_+f=qX~WmxB2)E(7634`(d$V&_iDv&AzmGHxBk#n`>NM<9oMyY|flb2euD*afY3 z=B^BV$00lE4)=3Y;(T}74g(MLf%p`ieESRH#_z`#DFr~{Itz|x(siu|T(0DtTVJ$6 zf?@pW&B5#Z{T#1z9$|iVGGPUlaW-O+FvYk>)xCLaUrb8eArCRwD`ZY-iwQBonUXr| zT2ATYzRyxp+kEy4OoetvF+aEf+j4%)$lv^_D3u=tKqM&pK6Oo^#@?&z*kcdy!L4IQ z*ezDzCVVBma0nsV3z2isE=E`xH*=-;2~zGwQ!n!hq24ysmK3z|JDh$L_E^a8;49E= z`u>skA1L!~)SlA}^e-p)0iRaCmzfGe7d!Me-_SG-2?d5vnObr20?X&JxS>|q09eejcMBJB)9>Vr(b zmoBS@4X6m6tYD+$u||0NA!nB!p$ zW)~WZ%_LDHDU<9AlI%N08?IU%&U*2hri)Mis}3POG6S`mTJg}&KRb$_)|{)sW?2%0AM3|dDGRbH+yLYU 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 literal 0 HcmV?d00001 diff --git a/lib/const/resource.dart b/lib/const/resource.dart index 6da059c1..fde9802f 100644 --- a/lib/const/resource.dart +++ b/lib/const/resource.dart @@ -116,6 +116,14 @@ class R { static const String ASSETS_ICONS_APP_REDUCE_PNG = 'assets/icons/app_reduce.png'; + /// ![preview](file:///Users/zhangmeng/akuCommunity/assets/icons/article_count.png) + static const String ASSETS_ICONS_ARTICLE_COUNT_PNG = + 'assets/icons/article_count.png'; + + /// ![preview](file:///Users/zhangmeng/akuCommunity/assets/icons/article_name.png) + static const String ASSETS_ICONS_ARTICLE_NAME_PNG = + 'assets/icons/article_name.png'; + /// ![preview](file:///Users/zhangmeng/akuCommunity/assets/icons/comment_notice.png) static const String ASSETS_ICONS_COMMENT_NOTICE_PNG = 'assets/icons/comment_notice.png'; diff --git a/lib/constants/api.dart b/lib/constants/api.dart index 61c59231..af524882 100644 --- a/lib/constants/api.dart +++ b/lib/constants/api.dart @@ -160,6 +160,9 @@ class _Manager { ///借还管理:报损 String get fromLoss => '/user/articleBorrow/frmLoss'; + ///借还管理:根据物品总类主键id查询未借出的物品明细(出借状态恒为未出借)【借取页面】 + String get articleBorrowFindDetail => '/user/articleBorrow/findDetailById'; + ///生活缴费:查询生活缴费信息list String get dailyPaymentList => '/user/dailyPayment/list'; diff --git a/lib/model/manager/article_borrow_detail_model.dart b/lib/model/manager/article_borrow_detail_model.dart new file mode 100644 index 00000000..f8c2f9c3 --- /dev/null +++ b/lib/model/manager/article_borrow_detail_model.dart @@ -0,0 +1,50 @@ +import 'package:akuCommunity/model/common/img_model.dart'; + +class ArticleBorrowDetailModel { + int id; + String name; + String code; + int status; + List imgList; + String get borrowStatus { + switch (this.status) { + case 1: + return '正常'; + break; + case 2: + return '破损'; + case 3: + return '丢失'; + default: + return ''; + } + } + + ArticleBorrowDetailModel( + {this.id, this.name, this.code, this.status, this.imgList}); + + ArticleBorrowDetailModel.fromJson(Map json) { + id = json['id']; + name = json['name']; + code = json['code']; + status = json['status']; + if (json['imgList'] != null) { + imgList = new List(); + json['imgList'].forEach((v) { + imgList.add(new ImgModel.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['name'] = this.name; + data['code'] = this.code; + data['status'] = this.status; + if (this.imgList != null) { + data['imgList'] = this.imgList.map((v) => v.toJson()).toList(); + } + return data; + } +} diff --git a/lib/model/manager/article_return_model.dart b/lib/model/manager/article_return_model.dart new file mode 100644 index 00000000..ec27ebe7 --- /dev/null +++ b/lib/model/manager/article_return_model.dart @@ -0,0 +1,73 @@ +import 'package:akuCommunity/model/common/img_model.dart'; + +class ArticleReturnModel { + int id; + String name; + String code; + String beginDate; + int borrowTime; + List imgList; + + ArticleReturnModel( + {this.id, + this.name, + this.code, + this.beginDate, + this.borrowTime, + this.imgList}); + + ArticleReturnModel.fromJson(Map json) { + id = json['id']; + name = json['name']; + code = json['code']; + beginDate = json['beginDate']; + borrowTime = json['borrowTime']; + if (json['imgList'] != null) { + imgList = new List(); + json['imgList'].forEach((v) { + imgList.add(new ImgModel.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['name'] = this.name; + data['code'] = this.code; + data['beginDate'] = this.beginDate; + data['borrowTime'] = this.borrowTime; + if (this.imgList != null) { + data['imgList'] = this.imgList.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class ImgList { + String url; + String size; + int longs; + int paragraph; + int sort; + + ImgList({this.url, this.size, this.longs, this.paragraph, this.sort}); + + ImgList.fromJson(Map json) { + url = json['url']; + size = json['size']; + longs = json['longs']; + paragraph = json['paragraph']; + sort = json['sort']; + } + + Map toJson() { + final Map data = new Map(); + data['url'] = this.url; + data['size'] = this.size; + data['longs'] = this.longs; + data['paragraph'] = this.paragraph; + data['sort'] = this.sort; + return data; + } +} diff --git a/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart b/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart index 5ccbbbc2..71f7e2b7 100644 --- a/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart +++ b/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart @@ -2,11 +2,13 @@ import 'package:akuCommunity/base/base_style.dart'; import 'package:akuCommunity/constants/api.dart'; import 'package:akuCommunity/model/common/img_model.dart'; import 'package:akuCommunity/model/manager/article_borrow_model.dart'; +import 'package:akuCommunity/pages/goods_manage_page/borrow_goods_detail_page.dart'; import 'package:akuCommunity/pages/things_page/widget/bee_list_view.dart'; import 'package:akuCommunity/widget/bee_scaffold.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyrefresh/easy_refresh.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; import 'package:velocity_x/velocity_x.dart'; import 'package:akuCommunity/const/resource.dart'; @@ -54,6 +56,7 @@ class _BorrowGoodsPageState extends State { }, builder: (items) { return ListView.separated( + padding: EdgeInsets.symmetric(vertical: 16.w, horizontal: 32.w), itemBuilder: (context, index) { return _goodsCard(items[index]); }, @@ -64,9 +67,9 @@ class _BorrowGoodsPageState extends State { }), bottomNavi: Row( children: [ - '已选择'.richText.color(ktextPrimary).size(28.sp).withTextSpanChildren([ - '0'.textSpan.size(32.sp).color(ktextPrimary).bold.make(), - '项'.textSpan.size(28.sp).color(ktextPrimary).make(), + '已选择 '.richText.color(ktextPrimary).size(24.sp).withTextSpanChildren([ + '0'.textSpan.size(32.sp).color(ktextPrimary).make(), + ' 项'.textSpan.size(24.sp).color(ktextPrimary).make(), ]).make(), Spacer(), MaterialButton( @@ -76,12 +79,13 @@ class _BorrowGoodsPageState extends State { color: kPrimaryColor, padding: EdgeInsets.symmetric(horizontal: 50.w, vertical: 15.w), onPressed: () {}, - child: '选好了'.text.black.size(32.sp).bold.make(), + child: '借出'.text.black.size(32.sp).bold.make(), ), ], ) - .pSymmetric(v: 20.w, h: 10.w) + .pSymmetric(v: 22.w, h: 32.w) .box + .color(Colors.white) .width(double.infinity) .padding( EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom)) @@ -94,8 +98,8 @@ class _BorrowGoodsPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( - width: 160.w, - height: 120.w, + width: 184.w, + height: 184.w, child: ClipRRect( child: FadeInImage.assetNetwork( placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP, @@ -103,42 +107,46 @@ class _BorrowGoodsPageState extends State { ), ), ), - 20.w.widthBox, + 24.w.widthBox, Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Image.asset( - R.ASSETS_IMAGES_PLACEHOLDER_WEBP, - width: 20.w, - height: 20.w, + R.ASSETS_ICONS_ARTICLE_NAME_PNG, + width: 40.w, + height: 40.w, ), 4.w.widthBox, '物品名称:'.text.color(ktextSubColor).size(28.sp).make(), - '${model.name}'.text.color(ktextPrimary).size(30.sp).make(), + '${model.name}'.text.color(ktextPrimary).size(28.sp).make(), ], ), + 12.w.heightBox, Row( children: [ Image.asset( - R.ASSETS_IMAGES_PLACEHOLDER_WEBP, - width: 20.w, - height: 20.w, + R.ASSETS_ICONS_ARTICLE_COUNT_PNG, + width: 40.w, + height: 40.w, ), 4.w.widthBox, - '物品名称:'.text.color(ktextSubColor).size(28.sp).make(), - '${model.quantity}'.text.color(ktextPrimary).size(30.sp).make(), + '剩余数量:'.text.color(ktextSubColor).size(28.sp).make(), + '${model.quantity}'.text.color(ktextPrimary).size(28.sp).make(), ], ), ], - ).expand(), + ) ], ) .box .color(Colors.white) - .padding(EdgeInsets.symmetric(vertical: 12.w, horizontal: 10.w)) + .padding(EdgeInsets.symmetric(vertical: 24.w, horizontal: 24.w)) .withRounded(value: 6.w) - .make(); + .make() + .onInkTap(() { + Get.to(() => BorrowGoodsDetailPage()); + }); } } diff --git a/lib/pages/goods_manage_page/borrow_goods_detail_page.dart b/lib/pages/goods_manage_page/borrow_goods_detail_page.dart new file mode 100644 index 00000000..37e868b0 --- /dev/null +++ b/lib/pages/goods_manage_page/borrow_goods_detail_page.dart @@ -0,0 +1,139 @@ +import 'package:akuCommunity/base/base_style.dart'; +import 'package:akuCommunity/constants/api.dart'; +import 'package:akuCommunity/model/common/img_model.dart'; +import 'package:akuCommunity/model/manager/article_borrow_detail_model.dart'; +import 'package:akuCommunity/pages/goods_deto_page/deto_create_page/widget/common_radio.dart'; +import 'package:akuCommunity/pages/things_page/widget/bee_list_view.dart'; +import 'package:akuCommunity/utils/network/base_model.dart'; +import 'package:akuCommunity/utils/network/net_util.dart'; +import 'package:akuCommunity/widget/bee_scaffold.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_easyrefresh/easy_refresh.dart'; +import 'package:velocity_x/velocity_x.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:akuCommunity/const/resource.dart'; + +class BorrowGoodsDetailPage extends StatefulWidget { + final int articleId; + BorrowGoodsDetailPage({Key key, this.articleId}) : super(key: key); + + @override + _BorrowGoodsDetailPageState createState() => _BorrowGoodsDetailPageState(); +} + +class _BorrowGoodsDetailPageState extends State { + EasyRefreshController _easyRefreshController; + List _models; + bool _onload = true; + List _selectItems = []; + @override + void initState() { + super.initState(); + _easyRefreshController = EasyRefreshController(); + } + + @override + void dispose() { + _easyRefreshController?.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return BeeScaffold( + title: '选择物品', + body: EasyRefresh( + firstRefresh: true, + header: MaterialHeader(), + onRefresh: () async { + List models = await getModels(); + _models = + models.map((e) => ArticleBorrowDetailModel.fromJson(e)).toList(); + _onload = false; + setState(() {}); + }, + child: _onload + ? _empty() + : ListView( + children: [..._models.map((e) => _goodsCard(e)).toList()], + ), + ), + ); + } + + Widget _empty() { + return Container(); + } + + Future getModels() async { + BaseModel baseModel = + await NetUtil().get(API.manager.articleBorrowFindDetail, params: { + "articleId": widget.articleId, + }); + return baseModel.data as List; + } + + Widget _goodsCard(ArticleBorrowDetailModel model) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CommonRadio( + size: 32.w, + value: model.id, + groupValue: _selectItems, + ), + 24.w.widthBox, + SizedBox( + width: 184.w, + height: 184.w, + child: ClipRRect( + child: FadeInImage.assetNetwork( + placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP, + image: API.image(ImgModel.first(model.imgList)), + ), + ), + ), + 24.w.widthBox, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Image.asset( + R.ASSETS_ICONS_ARTICLE_NAME_PNG, + width: 40.w, + height: 40.w, + ), + 4.w.widthBox, + '物品名称:'.text.color(ktextSubColor).size(28.sp).make(), + '${model.name}'.text.color(ktextPrimary).size(28.sp).make(), + ], + ), + 12.w.heightBox, + Row( + children: [ + Image.asset( + R.ASSETS_ICONS_ARTICLE_COUNT_PNG, + width: 40.w, + height: 40.w, + ), + 4.w.widthBox, + '剩余数量:'.text.color(ktextSubColor).size(28.sp).make(), + '${model.borrowStatus}' + .text + .color(ktextPrimary) + .size(28.sp) + .make(), + ], + ), + ], + ) + ], + ) + .box + .color(Colors.white) + .padding(EdgeInsets.symmetric(vertical: 24.w, horizontal: 24.w)) + .withRounded(value: 6.w) + .make(); + } +} diff --git a/lib/pages/goods_manage_page/goods_manage_page.dart b/lib/pages/goods_manage_page/goods_manage_page.dart index f124eb71..61cdf558 100644 --- a/lib/pages/goods_manage_page/goods_manage_page.dart +++ b/lib/pages/goods_manage_page/goods_manage_page.dart @@ -1,3 +1,4 @@ +import 'package:akuCommunity/pages/goods_manage_page/borrow/borrow_goods_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -117,7 +118,11 @@ class _GoodsManagePageState extends State { }), bottomNavi: BottomButton( child: '扫一扫'.text.black.size(32.sp).bold.make(), - onPressed: () {}, + onPressed: widget.isBorrow + ? () { + Get.to(() => BorrowGoodsPage()); + } + : () {}, ), ); } diff --git a/lib/pages/goods_manage_page/select_borrow_return_page.dart b/lib/pages/goods_manage_page/select_borrow_return_page.dart index 77944042..f22b129a 100644 --- a/lib/pages/goods_manage_page/select_borrow_return_page.dart +++ b/lib/pages/goods_manage_page/select_borrow_return_page.dart @@ -53,9 +53,11 @@ class _SelectBorrowReturnPageState extends State { .withRounded(value: 8.w) .make() .onInkTap(() { - Get.to(() => GoodsManagePage( - isBorrow: isBorrow, - )); + Get.to( + () => GoodsManagePage( + isBorrow: isBorrow, + ), + ); }); } } From 67b2d07db98708418d47dc26c86b982e6040ccf0 Mon Sep 17 00:00:00 2001 From: zhangmeng <494089941@qq.com> Date: Fri, 16 Apr 2021 09:26:25 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E7=89=A9=E5=93=81=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=90=8E=E8=BF=94=E5=9B=9E=E6=80=BB=E7=B1=BB=E9=A1=B5=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/icons/borrow_status.png | Bin 0 -> 17554 bytes lib/const/resource.dart | 4 + .../borrow/borrow_goods_page.dart | 45 +++++- .../borrow_goods_detail_page.dart | 128 +++++++++++++++++- 4 files changed, 165 insertions(+), 12 deletions(-) create mode 100644 assets/icons/borrow_status.png diff --git a/assets/icons/borrow_status.png b/assets/icons/borrow_status.png new file mode 100644 index 0000000000000000000000000000000000000000..013eaa9908ce1ce1f9fa5a8c9f37df8f55790426 GIT binary patch literal 17554 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 XZEWg!8djI#fj>26Eu|Vo>zDrrp3L~- literal 0 HcmV?d00001 diff --git a/lib/const/resource.dart b/lib/const/resource.dart index fde9802f..fdebb2a4 100644 --- a/lib/const/resource.dart +++ b/lib/const/resource.dart @@ -124,6 +124,10 @@ class R { static const String ASSETS_ICONS_ARTICLE_NAME_PNG = 'assets/icons/article_name.png'; + /// ![preview](file:///Users/zhangmeng/akuCommunity/assets/icons/borrow_status.png) + static const String ASSETS_ICONS_BORROW_STATUS_PNG = + 'assets/icons/borrow_status.png'; + /// ![preview](file:///Users/zhangmeng/akuCommunity/assets/icons/comment_notice.png) static const String ASSETS_ICONS_COMMENT_NOTICE_PNG = 'assets/icons/comment_notice.png'; diff --git a/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart b/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart index 71f7e2b7..2af0228f 100644 --- a/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart +++ b/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart @@ -21,6 +21,8 @@ class BorrowGoodsPage extends StatefulWidget { class _BorrowGoodsPageState extends State { EasyRefreshController _easyRefreshController; + List _submitIds = []; + List _counts = []; @override void initState() { super.initState(); @@ -50,6 +52,7 @@ class _BorrowGoodsPageState extends State { path: API.manager.articleBorrow, controller: _easyRefreshController, convert: (models) { + _counts.addAll(List.filled(models.tableList.length, 0)); return models.tableList .map((e) => ArticleBorrowModel.fromJson(e)) .toList(); @@ -58,7 +61,7 @@ class _BorrowGoodsPageState extends State { return ListView.separated( padding: EdgeInsets.symmetric(vertical: 16.w, horizontal: 32.w), itemBuilder: (context, index) { - return _goodsCard(items[index]); + return _goodsCard(items[index], _counts[index]); }, separatorBuilder: (_, __) { return 16.w.heightBox; @@ -93,7 +96,7 @@ class _BorrowGoodsPageState extends State { ); } - Widget _goodsCard(ArticleBorrowModel model) { + Widget _goodsCard(ArticleBorrowModel model, int index) { return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -137,16 +140,48 @@ class _BorrowGoodsPageState extends State { ], ), ], - ) + ), + _counts[index] == 0 + ? SizedBox() + : Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Container( + alignment: Alignment.center, + width: 40.w, + height: 40.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20.w), + color: kPrimaryColor, + ), + child: '${_counts[index]}' + .text + .color(ktextPrimary) + .size(24.sp) + .bold + .make(), + ), + ], + ).expand() ], ) .box .color(Colors.white) + .height(232.w) + .width(686.w) .padding(EdgeInsets.symmetric(vertical: 24.w, horizontal: 24.w)) .withRounded(value: 6.w) .make() - .onInkTap(() { - Get.to(() => BorrowGoodsDetailPage()); + .onInkTap(() async { + List ids; + await Get.to(() => BorrowGoodsDetailPage( + articleId: model.id, + )).then((value) { + ids = value; + _counts[index] = ids.length; + _submitIds.addAll(ids); + setState(() {}); + }); }); } } diff --git a/lib/pages/goods_manage_page/borrow_goods_detail_page.dart b/lib/pages/goods_manage_page/borrow_goods_detail_page.dart index 37e868b0..f175d487 100644 --- a/lib/pages/goods_manage_page/borrow_goods_detail_page.dart +++ b/lib/pages/goods_manage_page/borrow_goods_detail_page.dart @@ -6,9 +6,12 @@ import 'package:akuCommunity/pages/goods_deto_page/deto_create_page/widget/commo import 'package:akuCommunity/pages/things_page/widget/bee_list_view.dart'; import 'package:akuCommunity/utils/network/base_model.dart'; import 'package:akuCommunity/utils/network/net_util.dart'; +import 'package:akuCommunity/widget/animated/animated_scale.dart'; import 'package:akuCommunity/widget/bee_scaffold.dart'; +import 'package:akuCommunity/widget/buttons/radio_button.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyrefresh/easy_refresh.dart'; +import 'package:get/get.dart'; import 'package:velocity_x/velocity_x.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:akuCommunity/const/resource.dart'; @@ -26,6 +29,7 @@ class _BorrowGoodsDetailPageState extends State { List _models; bool _onload = true; List _selectItems = []; + bool get allSelect => _selectItems.length == _models.length; @override void initState() { super.initState(); @@ -58,9 +62,93 @@ class _BorrowGoodsDetailPageState extends State { children: [..._models.map((e) => _goodsCard(e)).toList()], ), ), + bottomNavi: _onload ? _empty() : _bottomButton(), ); } + Widget _allSelectButton() { + return GestureDetector( + onTap: () { + if (allSelect) { + _selectItems.clear(); + } else { + _selectItems.clear(); + _models.forEach((element) { + _selectItems.add(element.id); + }); + } + setState(() {}); + }, + child: AnimatedContainer( + height: 40.w, + width: 40.w, + decoration: BoxDecoration( + border: Border.all( + color: allSelect ? kPrimaryColor : Color(0xFF979797), + width: 3.w, + ), + borderRadius: BorderRadius.circular(20.w), + ), + duration: Duration(milliseconds: 300), + curve: Curves.easeInOutCubic, + alignment: Alignment.center, + child: AnimatedOpacity( + duration: Duration(milliseconds: 300), + curve: Curves.easeInOutCubic, + opacity: allSelect ? 1 : 0, + child: AnimatedScale( + scale: allSelect ? 1 : 0, + child: Container( + height: 24.w, + width: 24.w, + decoration: BoxDecoration( + color: kPrimaryColor, + borderRadius: BorderRadius.circular(12.w), + ), + ), + ), + ), + ), + ); + } + + Widget _bottomButton() { + return Row( + children: [ + _allSelectButton(), + 16.w.widthBox, + '全选'.text.color(ktextSubColor).size(24.sp).make(), + Spacer(), + '已选择 '.richText.color(ktextPrimary).size(24.sp).withTextSpanChildren([ + '${_selectItems.length}' + .textSpan + .size(32.sp) + .color(ktextPrimary) + .make(), + ' 项'.textSpan.size(24.sp).color(ktextPrimary).make(), + ]).make(), + 32.w.widthBox, + MaterialButton( + elevation: 0, + shape: + RoundedRectangleBorder(borderRadius: BorderRadius.circular(37.w)), + color: kPrimaryColor, + padding: EdgeInsets.symmetric(horizontal: 50.w, vertical: 15.w), + onPressed: () { + Get.back(result: _selectItems); + }, + child: '确定'.text.black.size(32.sp).bold.make(), + ), + ], + ) + .pSymmetric(v: 22.w, h: 32.w) + .box + .color(Colors.white) + .width(double.infinity) + .padding(EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom)) + .make(); + } + Widget _empty() { return Container(); } @@ -77,11 +165,24 @@ class _BorrowGoodsDetailPageState extends State { return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - CommonRadio( - size: 32.w, - value: model.id, - groupValue: _selectItems, - ), + GestureDetector( + onTap: () { + if (_selectItems.contains(model.id)) { + _selectItems.remove(model.id); + } else { + _selectItems.add(model.id); + } + setState(() {}); + }, + child: Container( + height: 232.w - 48.w, + alignment: Alignment.center, + child: BeeRadio( + value: model.id, + groupValues: _selectItems, + ), + ), + ).material(color: Colors.transparent), 24.w.widthBox, SizedBox( width: 184.w, @@ -105,7 +206,7 @@ class _BorrowGoodsDetailPageState extends State { height: 40.w, ), 4.w.widthBox, - '物品名称:'.text.color(ktextSubColor).size(28.sp).make(), + '物品名称:'.text.color(ktextSubColor).size(28.sp).make(), '${model.name}'.text.color(ktextPrimary).size(28.sp).make(), ], ), @@ -118,7 +219,20 @@ class _BorrowGoodsDetailPageState extends State { height: 40.w, ), 4.w.widthBox, - '剩余数量:'.text.color(ktextSubColor).size(28.sp).make(), + '物品单号:'.text.color(ktextSubColor).size(28.sp).make(), + '${model.code}'.text.color(ktextPrimary).size(28.sp).make(), + ], + ), + 12.w.heightBox, + Row( + children: [ + Image.asset( + R.ASSETS_ICONS_BORROW_STATUS_PNG, + width: 40.w, + height: 40.w, + ), + 4.w.widthBox, + '出借状态:'.text.color(ktextSubColor).size(28.sp).make(), '${model.borrowStatus}' .text .color(ktextPrimary) From 62434ed083d504d04d671d418555504ecf6770cc Mon Sep 17 00:00:00 2001 From: zhangmeng <494089941@qq.com> Date: Fri, 16 Apr 2021 10:11:33 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../borrow/borrow_goods_page.dart | 27 ++++++++++++------- .../borrow_goods_detail_page.dart | 9 ++++--- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart b/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart index 2af0228f..2b461eea 100644 --- a/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart +++ b/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart @@ -21,6 +21,7 @@ class BorrowGoodsPage extends StatefulWidget { class _BorrowGoodsPageState extends State { EasyRefreshController _easyRefreshController; + List _receiveIds = []; List _submitIds = []; List _counts = []; @override @@ -52,16 +53,18 @@ class _BorrowGoodsPageState extends State { path: API.manager.articleBorrow, controller: _easyRefreshController, convert: (models) { - _counts.addAll(List.filled(models.tableList.length, 0)); return models.tableList .map((e) => ArticleBorrowModel.fromJson(e)) .toList(); }, builder: (items) { + if (_counts.isEmpty) { + _counts = List.filled(items.length, 0); + } return ListView.separated( padding: EdgeInsets.symmetric(vertical: 16.w, horizontal: 32.w), itemBuilder: (context, index) { - return _goodsCard(items[index], _counts[index]); + return _goodsCard(items[index], index); }, separatorBuilder: (_, __) { return 16.w.heightBox; @@ -71,7 +74,11 @@ class _BorrowGoodsPageState extends State { bottomNavi: Row( children: [ '已选择 '.richText.color(ktextPrimary).size(24.sp).withTextSpanChildren([ - '0'.textSpan.size(32.sp).color(ktextPrimary).make(), + '${_submitIds.length}' + .textSpan + .size(32.sp) + .color(ktextPrimary) + .make(), ' 项'.textSpan.size(24.sp).color(ktextPrimary).make(), ]).make(), Spacer(), @@ -144,7 +151,7 @@ class _BorrowGoodsPageState extends State { _counts[index] == 0 ? SizedBox() : Column( - crossAxisAlignment: CrossAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.end, children: [ Container( alignment: Alignment.center, @@ -173,15 +180,17 @@ class _BorrowGoodsPageState extends State { .withRounded(value: 6.w) .make() .onInkTap(() async { - List ids; + _receiveIds.forEach((element) { + _submitIds.remove(element); + }); await Get.to(() => BorrowGoodsDetailPage( articleId: model.id, )).then((value) { - ids = value; - _counts[index] = ids.length; - _submitIds.addAll(ids); - setState(() {}); + _receiveIds = value; }); + _counts[index] = _receiveIds.length; + _submitIds.addAll(_receiveIds); + setState(() {}); }); } } diff --git a/lib/pages/goods_manage_page/borrow_goods_detail_page.dart b/lib/pages/goods_manage_page/borrow_goods_detail_page.dart index f175d487..fe5ed43c 100644 --- a/lib/pages/goods_manage_page/borrow_goods_detail_page.dart +++ b/lib/pages/goods_manage_page/borrow_goods_detail_page.dart @@ -2,8 +2,6 @@ import 'package:akuCommunity/base/base_style.dart'; import 'package:akuCommunity/constants/api.dart'; import 'package:akuCommunity/model/common/img_model.dart'; import 'package:akuCommunity/model/manager/article_borrow_detail_model.dart'; -import 'package:akuCommunity/pages/goods_deto_page/deto_create_page/widget/common_radio.dart'; -import 'package:akuCommunity/pages/things_page/widget/bee_list_view.dart'; import 'package:akuCommunity/utils/network/base_model.dart'; import 'package:akuCommunity/utils/network/net_util.dart'; import 'package:akuCommunity/widget/animated/animated_scale.dart'; @@ -18,7 +16,9 @@ import 'package:akuCommunity/const/resource.dart'; class BorrowGoodsDetailPage extends StatefulWidget { final int articleId; - BorrowGoodsDetailPage({Key key, this.articleId}) : super(key: key); + final List receiveIds; + BorrowGoodsDetailPage({Key key, this.articleId, this.receiveIds}) + : super(key: key); @override _BorrowGoodsDetailPageState createState() => _BorrowGoodsDetailPageState(); @@ -34,6 +34,9 @@ class _BorrowGoodsDetailPageState extends State { void initState() { super.initState(); _easyRefreshController = EasyRefreshController(); + if (widget.receiveIds != null && widget.receiveIds.isNotEmpty) { + _selectItems = widget.receiveIds; + } } @override From 0fc2b0521efa0cdd9c7db43ff6c99c1aea813dae Mon Sep 17 00:00:00 2001 From: zhangmeng <494089941@qq.com> Date: Fri, 16 Apr 2021 10:42:37 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=EF=BC=9A=E5=80=9F?= =?UTF-8?q?=E5=8F=96=E7=89=A9=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/constants/api.dart | 3 +++ .../goods_manage_page/borrow/borrow_goods_page.dart | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/constants/api.dart b/lib/constants/api.dart index af524882..d9b0a5c6 100644 --- a/lib/constants/api.dart +++ b/lib/constants/api.dart @@ -163,6 +163,9 @@ class _Manager { ///借还管理:根据物品总类主键id查询未借出的物品明细(出借状态恒为未出借)【借取页面】 String get articleBorrowFindDetail => '/user/articleBorrow/findDetailById'; + ///借还管理:借取物品 + String get articleBorrowGoods => '/user/articleBorrow/borrow'; + ///生活缴费:查询生活缴费信息list String get dailyPaymentList => '/user/dailyPayment/list'; diff --git a/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart b/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart index 2b461eea..0f880fb0 100644 --- a/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart +++ b/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart @@ -4,6 +4,8 @@ import 'package:akuCommunity/model/common/img_model.dart'; import 'package:akuCommunity/model/manager/article_borrow_model.dart'; import 'package:akuCommunity/pages/goods_manage_page/borrow_goods_detail_page.dart'; import 'package:akuCommunity/pages/things_page/widget/bee_list_view.dart'; +import 'package:akuCommunity/utils/network/base_model.dart'; +import 'package:akuCommunity/utils/network/net_util.dart'; import 'package:akuCommunity/widget/bee_scaffold.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyrefresh/easy_refresh.dart'; @@ -88,7 +90,15 @@ class _BorrowGoodsPageState extends State { borderRadius: BorderRadius.circular(37.w)), color: kPrimaryColor, padding: EdgeInsets.symmetric(horizontal: 50.w, vertical: 15.w), - onPressed: () {}, + onPressed: () async { + BaseModel baseModel = await NetUtil().post( + API.manager.articleBorrowGoods, + params: {"ids": _submitIds}, + showMessage: true); + if (baseModel.status) { + Get.back(); + } + }, child: '借出'.text.black.size(32.sp).bold.make(), ), ], @@ -185,6 +195,7 @@ class _BorrowGoodsPageState extends State { }); await Get.to(() => BorrowGoodsDetailPage( articleId: model.id, + receiveIds: _receiveIds, )).then((value) { _receiveIds = value; }); From 8529017dff0cc5788c3df9fb3f570cd48903078c Mon Sep 17 00:00:00 2001 From: zhangmeng <494089941@qq.com> Date: Fri, 16 Apr 2021 11:21:42 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=87=BA=E5=80=9F?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E5=8F=8A=E5=A4=B1=E8=B4=A5=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/icons/borrow_failure.png | Bin 0 -> 3573 bytes assets/icons/borrow_success.png | Bin 0 -> 20393 bytes lib/const/resource.dart | 8 ++ lib/constants/api.dart | 3 + .../borrow/borrow_finsh_page.dart | 80 ++++++++++++++++++ .../borrow_goods_detail_page.dart | 0 .../borrow/borrow_goods_page.dart | 12 +-- 7 files changed, 98 insertions(+), 5 deletions(-) create mode 100644 assets/icons/borrow_failure.png create mode 100644 assets/icons/borrow_success.png create mode 100644 lib/pages/goods_manage_page/borrow/borrow_finsh_page.dart rename lib/pages/goods_manage_page/{ => borrow}/borrow_goods_detail_page.dart (100%) diff --git a/assets/icons/borrow_failure.png b/assets/icons/borrow_failure.png new file mode 100644 index 0000000000000000000000000000000000000000..6f58b2f914d9e1ed085aaf01ed2c0617964f3b64 GIT binary patch literal 3573 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 vLl~`Bk literal 0 HcmV?d00001 diff --git a/assets/icons/borrow_success.png b/assets/icons/borrow_success.png new file mode 100644 index 0000000000000000000000000000000000000000..db6074ccbd979c42116ceb9c4a35658a91c8ee01 GIT binary patch literal 20393 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 literal 0 HcmV?d00001 diff --git a/lib/const/resource.dart b/lib/const/resource.dart index fdebb2a4..d728bd1b 100644 --- a/lib/const/resource.dart +++ b/lib/const/resource.dart @@ -124,10 +124,18 @@ class R { static const String ASSETS_ICONS_ARTICLE_NAME_PNG = 'assets/icons/article_name.png'; + /// ![preview](file:///Users/zhangmeng/akuCommunity/assets/icons/borrow_failure.png) + static const String ASSETS_ICONS_BORROW_FAILURE_PNG = + 'assets/icons/borrow_failure.png'; + /// ![preview](file:///Users/zhangmeng/akuCommunity/assets/icons/borrow_status.png) static const String ASSETS_ICONS_BORROW_STATUS_PNG = 'assets/icons/borrow_status.png'; + /// ![preview](file:///Users/zhangmeng/akuCommunity/assets/icons/borrow_success.png) + static const String ASSETS_ICONS_BORROW_SUCCESS_PNG = + 'assets/icons/borrow_success.png'; + /// ![preview](file:///Users/zhangmeng/akuCommunity/assets/icons/comment_notice.png) static const String ASSETS_ICONS_COMMENT_NOTICE_PNG = 'assets/icons/comment_notice.png'; diff --git a/lib/constants/api.dart b/lib/constants/api.dart index d9b0a5c6..e6b26687 100644 --- a/lib/constants/api.dart +++ b/lib/constants/api.dart @@ -166,6 +166,9 @@ class _Manager { ///借还管理:借取物品 String get articleBorrowGoods => '/user/articleBorrow/borrow'; + ///借还管理:根据用户主键id查询需要归还物品信息(归还界面) + String get articleReturnList => '/articleBorrow/findBorrowByUserId'; + ///生活缴费:查询生活缴费信息list String get dailyPaymentList => '/user/dailyPayment/list'; diff --git a/lib/pages/goods_manage_page/borrow/borrow_finsh_page.dart b/lib/pages/goods_manage_page/borrow/borrow_finsh_page.dart new file mode 100644 index 00000000..bc969b73 --- /dev/null +++ b/lib/pages/goods_manage_page/borrow/borrow_finsh_page.dart @@ -0,0 +1,80 @@ +import 'package:akuCommunity/base/base_style.dart'; +import 'package:akuCommunity/pages/home/home_page.dart'; +import 'package:akuCommunity/widget/bee_scaffold.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:velocity_x/velocity_x.dart'; +import 'package:akuCommunity/const/resource.dart'; + +class BorrowFinshPage extends StatefulWidget { + final bool isSuccess; + final String failText; + BorrowFinshPage({Key key, this.isSuccess, this.failText}) : super(key: key); + + @override + _BorrowFinshPageState createState() => _BorrowFinshPageState(); +} + +class _BorrowFinshPageState extends State { + @override + Widget build(BuildContext context) { + return BeeScaffold( + title: '出借结果', + body: Center( + child: Column( + children: [ + 75.w.heightBox, + SizedBox( + width: 110.w, + height: 110.w, + child: Image.asset(widget.isSuccess + ? R.ASSETS_ICONS_BORROW_SUCCESS_PNG + : R.ASSETS_ICONS_BORROW_FAILURE_PNG), + ), + 48.w.heightBox, + '${widget.isSuccess ? '出借成功' : '出借失败'}' + .text + .color(ktextPrimary) + .size(36.sp) + .bold + .make(), + 16.w.heightBox, + '${widget.isSuccess ? '使用后请记得归还' : widget.failText}' + .text + .color(ktextSubColor) + .size(26.sp) + .make(), + 95.w.heightBox, + MaterialButton( + color: kPrimaryColor, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8.w)), + elevation: 0, + hoverElevation: 0, + highlightElevation: 0, + focusElevation: 0, + disabledElevation: 0, + padding: EdgeInsets.symmetric(vertical: 24.w), + minWidth: double.infinity, + onPressed: widget.isSuccess + ? () { + Get.offAll(HomePage()); + } + : () { + Get.back(); + }, + child: '${widget.isSuccess ? '返回首页' : '重新提交'}' + .text + .color(widget.isSuccess ? ktextPrimary : Colors.white) + .size(36.sp) + .make(), + ) + ], + ), + ).pSymmetric( + h: 24.w, + ), + ); + } +} diff --git a/lib/pages/goods_manage_page/borrow_goods_detail_page.dart b/lib/pages/goods_manage_page/borrow/borrow_goods_detail_page.dart similarity index 100% rename from lib/pages/goods_manage_page/borrow_goods_detail_page.dart rename to lib/pages/goods_manage_page/borrow/borrow_goods_detail_page.dart diff --git a/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart b/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart index 0f880fb0..c067720e 100644 --- a/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart +++ b/lib/pages/goods_manage_page/borrow/borrow_goods_page.dart @@ -2,7 +2,8 @@ import 'package:akuCommunity/base/base_style.dart'; import 'package:akuCommunity/constants/api.dart'; import 'package:akuCommunity/model/common/img_model.dart'; import 'package:akuCommunity/model/manager/article_borrow_model.dart'; -import 'package:akuCommunity/pages/goods_manage_page/borrow_goods_detail_page.dart'; +import 'package:akuCommunity/pages/goods_manage_page/borrow/borrow_finsh_page.dart'; +import 'package:akuCommunity/pages/goods_manage_page/borrow/borrow_goods_detail_page.dart'; import 'package:akuCommunity/pages/things_page/widget/bee_list_view.dart'; import 'package:akuCommunity/utils/network/base_model.dart'; import 'package:akuCommunity/utils/network/net_util.dart'; @@ -94,10 +95,11 @@ class _BorrowGoodsPageState extends State { BaseModel baseModel = await NetUtil().post( API.manager.articleBorrowGoods, params: {"ids": _submitIds}, - showMessage: true); - if (baseModel.status) { - Get.back(); - } + showMessage: false); + Get.to(BorrowFinshPage( + isSuccess: baseModel.status, + failText: baseModel.message, + )); }, child: '借出'.text.black.size(32.sp).bold.make(), ), From d9de27a01fc2285b227886ce0d84ae36c718fb71 Mon Sep 17 00:00:00 2001 From: zhangmeng <494089941@qq.com> Date: Fri, 16 Apr 2021 13:28:56 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=89=A9=E5=93=81?= =?UTF-8?q?=E5=BD=92=E8=BF=98=E9=A1=B5=E9=9D=A2=20=E5=AF=B9=E6=8E=A5?= =?UTF-8?q?=EF=BC=9A=E5=80=9F=E8=BF=98=E7=AE=A1=E7=90=86=EF=BC=9A=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E7=94=A8=E6=88=B7=E4=B8=BB=E9=94=AEid=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E9=9C=80=E8=A6=81=E5=BD=92=E8=BF=98=E7=89=A9=E5=93=81?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=EF=BC=88=E5=BD=92=E8=BF=98=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=EF=BC=89=20=E5=AF=B9=E6=8E=A5=EF=BC=9A=E5=80=9F=E8=BF=98?= =?UTF-8?q?=E7=AE=A1=E7=90=86=EF=BC=9A=E5=BD=92=E8=BF=98=E7=89=A9=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/constants/api.dart | 3 + .../manager/article_return_list_model.dart | 80 ++++++ .../goods_manage_page/goods_manage_page.dart | 5 +- .../retrun/return_goods_detail_page.dart | 255 ++++++++++++++++++ 4 files changed, 342 insertions(+), 1 deletion(-) create mode 100644 lib/model/manager/article_return_list_model.dart create mode 100644 lib/pages/goods_manage_page/retrun/return_goods_detail_page.dart diff --git a/lib/constants/api.dart b/lib/constants/api.dart index e6b26687..127be2ec 100644 --- a/lib/constants/api.dart +++ b/lib/constants/api.dart @@ -166,6 +166,9 @@ class _Manager { ///借还管理:借取物品 String get articleBorrowGoods => '/user/articleBorrow/borrow'; + ///借还管理:归还物品 + String get articleReturnGoods => '/user/articleBorrow/articleReturn'; + ///借还管理:根据用户主键id查询需要归还物品信息(归还界面) String get articleReturnList => '/articleBorrow/findBorrowByUserId'; diff --git a/lib/model/manager/article_return_list_model.dart b/lib/model/manager/article_return_list_model.dart new file mode 100644 index 00000000..09bd393b --- /dev/null +++ b/lib/model/manager/article_return_list_model.dart @@ -0,0 +1,80 @@ +import 'package:akuCommunity/model/common/img_model.dart'; + +class ArticleReturnListModel { + int id; + String name; + String code; + String beginDate; + int borrowTime; + List imgList; + String get paraseBorrowTime { + if (this.borrowTime > 24) { + return '${this.borrowTime ~/ 24}天${this.borrowTime % 24}小时'; + } else { + return '${this.borrowTime}小时'; + } + } + + ArticleReturnListModel( + {this.id, + this.name, + this.code, + this.beginDate, + this.borrowTime, + this.imgList}); + + ArticleReturnListModel.fromJson(Map json) { + id = json['id']; + name = json['name']; + code = json['code']; + beginDate = json['beginDate']; + borrowTime = json['borrowTime']; + if (json['imgList'] != null) { + imgList = new List(); + json['imgList'].forEach((v) { + imgList.add(new ImgModel.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['name'] = this.name; + data['code'] = this.code; + data['beginDate'] = this.beginDate; + data['borrowTime'] = this.borrowTime; + if (this.imgList != null) { + data['imgList'] = this.imgList.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class ImgList { + String url; + String size; + int longs; + int paragraph; + int sort; + + ImgList({this.url, this.size, this.longs, this.paragraph, this.sort}); + + ImgList.fromJson(Map json) { + url = json['url']; + size = json['size']; + longs = json['longs']; + paragraph = json['paragraph']; + sort = json['sort']; + } + + Map toJson() { + final Map data = new Map(); + data['url'] = this.url; + data['size'] = this.size; + data['longs'] = this.longs; + data['paragraph'] = this.paragraph; + data['sort'] = this.sort; + return data; + } +} diff --git a/lib/pages/goods_manage_page/goods_manage_page.dart b/lib/pages/goods_manage_page/goods_manage_page.dart index 61cdf558..ae7f4d24 100644 --- a/lib/pages/goods_manage_page/goods_manage_page.dart +++ b/lib/pages/goods_manage_page/goods_manage_page.dart @@ -1,4 +1,5 @@ import 'package:akuCommunity/pages/goods_manage_page/borrow/borrow_goods_page.dart'; +import 'package:akuCommunity/pages/goods_manage_page/retrun/return_goods_detail_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -122,7 +123,9 @@ class _GoodsManagePageState extends State { ? () { Get.to(() => BorrowGoodsPage()); } - : () {}, + : () { + Get.to(() => ReturnGoodsDetailPage()); + }, ), ); } diff --git a/lib/pages/goods_manage_page/retrun/return_goods_detail_page.dart b/lib/pages/goods_manage_page/retrun/return_goods_detail_page.dart new file mode 100644 index 00000000..a1fc0ef7 --- /dev/null +++ b/lib/pages/goods_manage_page/retrun/return_goods_detail_page.dart @@ -0,0 +1,255 @@ +import 'package:akuCommunity/base/base_style.dart'; +import 'package:akuCommunity/constants/api.dart'; +import 'package:akuCommunity/model/common/img_model.dart'; +import 'package:akuCommunity/model/manager/article_return_list_model.dart'; +import 'package:akuCommunity/utils/network/base_model.dart'; +import 'package:akuCommunity/utils/network/net_util.dart'; +import 'package:akuCommunity/widget/animated/animated_scale.dart'; +import 'package:akuCommunity/widget/bee_scaffold.dart'; +import 'package:akuCommunity/widget/buttons/radio_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_easyrefresh/easy_refresh.dart'; +import 'package:get/get.dart'; +import 'package:velocity_x/velocity_x.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:akuCommunity/const/resource.dart'; + +class ReturnGoodsDetailPage extends StatefulWidget { + ReturnGoodsDetailPage({Key key}) : super(key: key); + + @override + _ReturnGoodsDetailPageState createState() => _ReturnGoodsDetailPageState(); +} + +class _ReturnGoodsDetailPageState extends State { + EasyRefreshController _easyRefreshController; + List _models; + bool _onload = true; + List _selectItems = []; + bool get allSelect => _selectItems.length == _models.length; + @override + void initState() { + super.initState(); + _easyRefreshController = EasyRefreshController(); + } + + @override + void dispose() { + _easyRefreshController?.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return BeeScaffold( + title: '选择物品', + body: EasyRefresh( + firstRefresh: true, + header: MaterialHeader(), + onRefresh: () async { + List models = await getModels(); + _models = + models.map((e) => ArticleReturnListModel.fromJson(e)).toList(); + _onload = false; + setState(() {}); + }, + child: _onload + ? _empty() + : ListView( + children: [..._models.map((e) => _goodsCard(e)).toList()], + ), + ), + bottomNavi: _onload ? _empty() : _bottomButton(), + ); + } + + Widget _allSelectButton() { + return GestureDetector( + onTap: () { + if (allSelect) { + _selectItems.clear(); + } else { + _selectItems.clear(); + _models.forEach((element) { + _selectItems.add(element.id); + }); + } + setState(() {}); + }, + child: AnimatedContainer( + height: 40.w, + width: 40.w, + decoration: BoxDecoration( + border: Border.all( + color: allSelect ? kPrimaryColor : Color(0xFF979797), + width: 3.w, + ), + borderRadius: BorderRadius.circular(20.w), + ), + duration: Duration(milliseconds: 300), + curve: Curves.easeInOutCubic, + alignment: Alignment.center, + child: AnimatedOpacity( + duration: Duration(milliseconds: 300), + curve: Curves.easeInOutCubic, + opacity: allSelect ? 1 : 0, + child: AnimatedScale( + scale: allSelect ? 1 : 0, + child: Container( + height: 24.w, + width: 24.w, + decoration: BoxDecoration( + color: kPrimaryColor, + borderRadius: BorderRadius.circular(12.w), + ), + ), + ), + ), + ), + ); + } + + Widget _bottomButton() { + return Row( + children: [ + _allSelectButton(), + 16.w.widthBox, + '全选'.text.color(ktextSubColor).size(24.sp).make(), + Spacer(), + '已选择 '.richText.color(ktextPrimary).size(24.sp).withTextSpanChildren([ + '${_selectItems.length}' + .textSpan + .size(32.sp) + .color(ktextPrimary) + .make(), + ' 项'.textSpan.size(24.sp).color(ktextPrimary).make(), + ]).make(), + 32.w.widthBox, + MaterialButton( + elevation: 0, + shape: + RoundedRectangleBorder(borderRadius: BorderRadius.circular(37.w)), + color: kPrimaryColor, + padding: EdgeInsets.symmetric(horizontal: 50.w, vertical: 15.w), + onPressed: () async { + BaseModel baseModel = + await NetUtil().post(API.manager.articleReturnGoods, + params: { + 'ids': _selectItems, + }, + showMessage: true); + if (baseModel.status) { + Get.back(); + } + }, + child: '归还'.text.black.size(32.sp).bold.make(), + ), + ], + ) + .pSymmetric(v: 22.w, h: 32.w) + .box + .color(Colors.white) + .width(double.infinity) + .padding(EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom)) + .make(); + } + + Widget _empty() { + return Container(); + } + + Future getModels() async { + BaseModel baseModel = await NetUtil().get(API.manager.articleReturnList); + return baseModel.data as List; + } + + Widget _goodsCard(ArticleReturnListModel model) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + GestureDetector( + onTap: () { + if (_selectItems.contains(model.id)) { + _selectItems.remove(model.id); + } else { + _selectItems.add(model.id); + } + setState(() {}); + }, + child: Container( + height: 232.w - 48.w, + alignment: Alignment.center, + child: BeeRadio( + value: model.id, + groupValues: _selectItems, + ), + ), + ).material(color: Colors.transparent), + 24.w.widthBox, + SizedBox( + width: 184.w, + height: 184.w, + child: ClipRRect( + child: FadeInImage.assetNetwork( + placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP, + image: API.image(ImgModel.first(model.imgList)), + ), + ), + ), + 24.w.widthBox, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Image.asset( + R.ASSETS_ICONS_ARTICLE_NAME_PNG, + width: 40.w, + height: 40.w, + ), + 4.w.widthBox, + '物品名称:'.text.color(ktextSubColor).size(28.sp).make(), + '${model.name}'.text.color(ktextPrimary).size(28.sp).make(), + ], + ), + 12.w.heightBox, + Row( + children: [ + Image.asset( + R.ASSETS_ICONS_ARTICLE_COUNT_PNG, + width: 40.w, + height: 40.w, + ), + 4.w.widthBox, + '物品单号:'.text.color(ktextSubColor).size(28.sp).make(), + '${model.code}'.text.color(ktextPrimary).size(28.sp).make(), + ], + ), + 12.w.heightBox, + Row( + children: [ + Image.asset( + R.ASSETS_ICONS_BORROW_STATUS_PNG, + width: 40.w, + height: 40.w, + ), + 4.w.widthBox, + '出借时间'.text.color(ktextSubColor).size(28.sp).make(), + '${model.paraseBorrowTime}' + .text + .color(ktextPrimary) + .size(28.sp) + .make(), + ], + ), + ], + ) + ], + ) + .box + .color(Colors.white) + .padding(EdgeInsets.symmetric(vertical: 24.w, horizontal: 24.w)) + .withRounded(value: 6.w) + .make(); + } +} From 389527ea4755feacd29bca7db4502b4ef52e2fc4 Mon Sep 17 00:00:00 2001 From: zhangmeng <494089941@qq.com> Date: Fri, 16 Apr 2021 14:34:00 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=EF=BC=9A=E6=88=91?= =?UTF-8?q?=E7=9A=84=E6=88=BF=E5=B1=8B=EF=BC=9A=E4=BF=AE=E6=94=B9=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E6=88=BF=E4=BA=A7=E5=AE=A1=E6=A0=B8id=20?= =?UTF-8?q?=E9=97=AE=E5=8D=B7=E8=B0=83=E6=9F=A5/=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E6=8A=95=E7=A5=A8=20=E6=9C=AA=E5=9C=A8=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=B8=AD=E7=8A=B6=E6=80=81=E4=B8=8D=E5=8F=AF=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/constants/api.dart | 3 ++ .../event_activity/voting_detail_page.dart | 39 +++++++++++-------- .../borrow/borrow_finsh_page.dart | 3 +- .../questionnaire_detail_page.dart | 28 ++++++++----- .../questionnaire/questionnaire_page.dart | 1 + lib/ui/profile/house/pick_my_house_page.dart | 4 +- 6 files changed, 50 insertions(+), 28 deletions(-) diff --git a/lib/constants/api.dart b/lib/constants/api.dart index 127be2ec..0a9b44b4 100644 --- a/lib/constants/api.dart +++ b/lib/constants/api.dart @@ -77,6 +77,9 @@ class _User { ///我的房屋:假删除审核信息 String get deleteHouse => '/user/myHouse/falseDelete'; + ///我的房屋:修改选中的房产审核id + String get changeSelectExanmineId => '/user/myHouse/changeSelectExamineId'; + ///我的车位:查询所有的车位信息 String get carParkingList => '/user/myParkingSpace/list'; diff --git a/lib/pages/event_activity/voting_detail_page.dart b/lib/pages/event_activity/voting_detail_page.dart index ce04c5b1..d347233e 100644 --- a/lib/pages/event_activity/voting_detail_page.dart +++ b/lib/pages/event_activity/voting_detail_page.dart @@ -264,22 +264,29 @@ class _VotingDetailPageState extends State { ), ), bottomNavi: BottomButton( - onPressed: () async { - if (_selectId == null) { - BotToast.showText(text: '请先选择候选人!'); - } else { - BaseModel baseModel = - await ManagerFunc.vote(widget.id, _selectId); - if (baseModel.status) { - await Get.dialog(_shouwVoteDialog()); - _hasVoted = true; - setState(() {}); - } else { - BotToast.showText(text: '${baseModel.message}'); - } - } - }, - child: '投票'.text.black.size(28.sp).bold.make()), + onPressed: _model.status != 2 + ? () {} + : () async { + if (_selectId == null) { + BotToast.showText(text: '请先选择候选人!'); + } else { + BaseModel baseModel = + await ManagerFunc.vote(widget.id, _selectId); + if (baseModel.status) { + await Get.dialog(_shouwVoteDialog()); + _hasVoted = true; + setState(() {}); + } else { + BotToast.showText(text: '${baseModel.message}'); + } + } + }, + child: '投票' + .text + .color(_model.status != 2 ? ktextSubColor : ktextPrimary) + .size(28.sp) + .bold + .make()), ); } } diff --git a/lib/pages/goods_manage_page/borrow/borrow_finsh_page.dart b/lib/pages/goods_manage_page/borrow/borrow_finsh_page.dart index bc969b73..2a102913 100644 --- a/lib/pages/goods_manage_page/borrow/borrow_finsh_page.dart +++ b/lib/pages/goods_manage_page/borrow/borrow_finsh_page.dart @@ -1,5 +1,6 @@ import 'package:akuCommunity/base/base_style.dart'; import 'package:akuCommunity/pages/home/home_page.dart'; +import 'package:akuCommunity/pages/tab_navigator.dart'; import 'package:akuCommunity/widget/bee_scaffold.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -59,7 +60,7 @@ class _BorrowFinshPageState extends State { minWidth: double.infinity, onPressed: widget.isSuccess ? () { - Get.offAll(HomePage()); + Get.offAll(TabNavigator()); } : () { Get.back(); diff --git a/lib/ui/manager/questionnaire/questionnaire_detail_page.dart b/lib/ui/manager/questionnaire/questionnaire_detail_page.dart index b6e895c7..45a2aacd 100644 --- a/lib/ui/manager/questionnaire/questionnaire_detail_page.dart +++ b/lib/ui/manager/questionnaire/questionnaire_detail_page.dart @@ -22,7 +22,8 @@ import 'package:akuCommunity/widget/buttons/bottom_button.dart'; class QuestionnaireDetailPage extends StatefulWidget { final int id; - QuestionnaireDetailPage({Key key, this.id}) : super(key: key); + final int status; + QuestionnaireDetailPage({Key key, this.id, this.status}) : super(key: key); @override _QuestionnaireDetailPageState createState() => @@ -253,15 +254,22 @@ class _QuestionnaireDetailPageState extends State { ), ), bottomNavi: BottomButton( - child: '确认提交'.text.black.size(32.sp).bold.make(), - onPressed: () async { - BaseModel baseModel = - await ManagerFunc.questionnaireSubmit(widget.id, _submitModels); - Get.to(() => SubmitComplishPage( - status: baseModel.status, - message: baseModel.message, - )); - }, + child: '确认提交' + .text + .color(widget.status != 2 ? ktextSubColor : ktextPrimary) + .size(32.sp) + .bold + .make(), + onPressed: widget.status != 2 + ? () {} + : () async { + BaseModel baseModel = await ManagerFunc.questionnaireSubmit( + widget.id, _submitModels); + Get.to(() => SubmitComplishPage( + status: baseModel.status, + message: baseModel.message, + )); + }, ), ); } diff --git a/lib/ui/manager/questionnaire/questionnaire_page.dart b/lib/ui/manager/questionnaire/questionnaire_page.dart index b99cdb5f..3cbbe36b 100644 --- a/lib/ui/manager/questionnaire/questionnaire_page.dart +++ b/lib/ui/manager/questionnaire/questionnaire_page.dart @@ -47,6 +47,7 @@ class _QuestionnairePageState extends State { onTap: () { Get.to(() => QuestionnaireDetailPage( id: model.id, + status: model.status, )); }, child: Container( diff --git a/lib/ui/profile/house/pick_my_house_page.dart b/lib/ui/profile/house/pick_my_house_page.dart index 815665dc..2d7c5132 100644 --- a/lib/ui/profile/house/pick_my_house_page.dart +++ b/lib/ui/profile/house/pick_my_house_page.dart @@ -227,9 +227,11 @@ class _HouseCard extends StatelessWidget { ), ], ), - onPressed: () { + onPressed: () async { final appProvider = Provider.of(context, listen: false); appProvider.setCurrentHouse(model); + //我的房屋:修改选中的房产审核id + await NetUtil().get(API.user.changeSelectExanmineId,params: {"examineId":model.estateId}); Get.back(); }, ),