order_page.dart 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. import 'dart:convert';
  2. import 'package:bbyyy/beans/my_shop_bean_entity.dart';
  3. import 'package:bbyyy/beans/smart_order_bean_entity.dart';
  4. import 'package:bbyyy/https/MyDio.dart';
  5. import 'package:bbyyy/https/my_request.dart';
  6. import 'package:bbyyy/my_tools/const.dart';
  7. import 'package:bbyyy/my_tools/dims.dart';
  8. import 'package:bbyyy/my_tools/event_bus.dart';
  9. import 'package:bbyyy/my_tools/my_colors.dart';
  10. import 'package:bbyyy/my_tools/my_cookie.dart';
  11. import 'package:bbyyy/my_tools/my_tools.dart';
  12. import 'package:bbyyy/my_tools/my_views.dart';
  13. import 'package:flutter/material.dart';
  14. import 'package:flutter_slidable/flutter_slidable.dart';
  15. import 'package:flutter_svg/svg.dart';
  16. import 'package:pull_to_refresh/pull_to_refresh.dart';
  17. class OrderPage extends StatefulWidget {
  18. int index;
  19. OrderPage({this.index = 0});
  20. @override
  21. _OrderPageState createState() => _OrderPageState();
  22. }
  23. class _OrderPageState extends State<OrderPage> {
  24. int selectedIndex = 0;
  25. List<SmartOrderBeanDataData> orders = [];
  26. RefreshController controller = RefreshController(initialRefresh: true);
  27. int page = 1;
  28. List<int> myShopUIDs = [];
  29. @override
  30. void initState() {
  31. // TODO: implement initState
  32. super.initState();
  33. EventBus().on('刷新未付订单', (arg) {
  34. controller.requestRefresh();
  35. });
  36. selectedIndex = widget.index;
  37. }
  38. @override
  39. void dispose() {
  40. // TODO: implement dispose
  41. super.dispose();
  42. EventBus().off('刷新未付订单');
  43. checkUnpaidThirdPartyOrders();
  44. }
  45. @override
  46. Widget build(BuildContext context) {
  47. return Scaffold(
  48. backgroundColor: MyColors.cE7E7E7,
  49. body: Column(
  50. children: [
  51. MyViews().myAppBar('订单', context, []),
  52. Container(
  53. height: 40,
  54. color: Colors.white,
  55. child: Row(
  56. children: [
  57. GestureDetector(
  58. onTap: () {
  59. setState(() {
  60. selectedIndex = 0;
  61. page = 1;
  62. controller.requestRefresh();
  63. });
  64. },
  65. behavior: HitTestBehavior.translucent,
  66. child: Padding(
  67. padding: EdgeInsets.only(left: 10, right: 10),
  68. child: Column(
  69. children: [
  70. Text(
  71. '未收',
  72. style: TextStyle(
  73. color: selectedIndex == 0
  74. ? MyColors.cFF4233
  75. : MyColors.c666666,
  76. fontSize: 15),
  77. ),
  78. Container(
  79. height: 10,
  80. child: Visibility(
  81. child: SvgPicture.asset('images/svg/tab.svg'),
  82. visible: selectedIndex == 0,
  83. ),
  84. )
  85. ],
  86. mainAxisAlignment: MainAxisAlignment.end,
  87. ),
  88. ),
  89. ),
  90. GestureDetector(
  91. onTap: () {
  92. setState(() {
  93. selectedIndex = 1;
  94. page = 1;
  95. controller.requestRefresh();
  96. });
  97. },
  98. behavior: HitTestBehavior.translucent,
  99. child: Padding(
  100. padding: EdgeInsets.only(left: 10, right: 10),
  101. child: Column(
  102. children: [
  103. Text(
  104. '已收',
  105. style: TextStyle(
  106. color: selectedIndex == 1
  107. ? MyColors.cFF4233
  108. : MyColors.c666666,
  109. fontSize: 15),
  110. ),
  111. Container(
  112. height: 10,
  113. child: Visibility(
  114. child: SvgPicture.asset('images/svg/tab.svg'),
  115. visible: selectedIndex == 1,
  116. ),
  117. )
  118. ],
  119. mainAxisAlignment: MainAxisAlignment.end,
  120. ),
  121. ),
  122. ),
  123. GestureDetector(
  124. onTap: () {
  125. setState(() {
  126. selectedIndex = 2;
  127. page = 1;
  128. controller.requestRefresh();
  129. });
  130. },
  131. behavior: HitTestBehavior.translucent,
  132. child: Padding(
  133. padding: EdgeInsets.only(left: 10, right: 10),
  134. child: Column(
  135. children: [
  136. Text(
  137. '未付',
  138. style: TextStyle(
  139. color: selectedIndex == 2
  140. ? MyColors.cFF4233
  141. : MyColors.c666666,
  142. fontSize: 15),
  143. ),
  144. Container(
  145. height: 10,
  146. child: Visibility(
  147. child: SvgPicture.asset('images/svg/tab.svg'),
  148. visible: selectedIndex == 2,
  149. ),
  150. )
  151. ],
  152. mainAxisAlignment: MainAxisAlignment.end,
  153. ),
  154. ),
  155. ),
  156. GestureDetector(
  157. onTap: () {
  158. setState(() {
  159. selectedIndex = 3;
  160. page = 1;
  161. controller.requestRefresh();
  162. });
  163. },
  164. behavior: HitTestBehavior.translucent,
  165. child: Padding(
  166. padding: EdgeInsets.only(left: 10, right: 10),
  167. child: Column(
  168. children: [
  169. Text(
  170. '已付',
  171. style: TextStyle(
  172. color: selectedIndex == 3
  173. ? MyColors.cFF4233
  174. : MyColors.c666666,
  175. fontSize: 15),
  176. ),
  177. Container(
  178. height: 10,
  179. child: Visibility(
  180. child: SvgPicture.asset('images/svg/tab.svg'),
  181. visible: selectedIndex == 3,
  182. ),
  183. )
  184. ],
  185. mainAxisAlignment: MainAxisAlignment.end,
  186. ),
  187. ),
  188. )
  189. ],
  190. mainAxisAlignment: MainAxisAlignment.spaceAround,
  191. ),
  192. ),
  193. Expanded(
  194. child: SmartRefresher(
  195. controller: controller,
  196. onLoading: onLoading,
  197. onRefresh: onRefresh,
  198. enablePullUp: true,
  199. enablePullDown: true,
  200. child: orders.length == 0
  201. ? SingleChildScrollView(child: noData())
  202. : ListView.builder(
  203. itemBuilder: (c, index) {
  204. return Slidable(
  205. child: MyViews().getNoPayGoodsItem(
  206. orders[index], context, -1, -1),
  207. actionPane: SlidableDrawerActionPane(),
  208. enabled: selectedIndex == 0 ||
  209. (orders[index].type == orderTypeOfflineTransfer &&
  210. orders[index].buyerUid ==
  211. MyCookie().getUID()&&selectedIndex!=3) ||
  212. (orders[index].buyerUid == MyCookie().getUID()&&selectedIndex!=3&&orders[index].type != orderTypeShopOwnerCreated),
  213. actionExtentRatio: 0.25,
  214. secondaryActions: <Widget>[
  215. SlideAction(
  216. child: Container(
  217. child: Container(
  218. decoration: BoxDecoration(
  219. borderRadius: BorderRadius.circular(30),
  220. color: MyColors.cFF4233,
  221. ),
  222. height: 60,
  223. width: 60,
  224. child: SvgPicture.asset(
  225. 'images/svg/del.svg',
  226. height: 40,
  227. width: 40,
  228. ),
  229. alignment: Alignment.center,
  230. ),
  231. ),
  232. onTap: () {
  233. showSimpleDialog(
  234. '将删除订单(${orders[index].uid})', context, () {
  235. Navigator.pop(context);
  236. deleteOrder(orders[index]);
  237. });
  238. },
  239. )
  240. ],
  241. );
  242. },
  243. itemCount: orders.length,
  244. padding: EdgeInsets.only(top: 10),
  245. ),
  246. ),
  247. ),
  248. ],
  249. ),
  250. );
  251. }
  252. void onLoading() {
  253. page++;
  254. checkMyStore();
  255. }
  256. void onRefresh() {
  257. page = 1;
  258. checkMyStore();
  259. }
  260. checkingOrder() {
  261. var conditions = [];
  262. if (selectedIndex == 0) {
  263. conditions.add("state == $orderStateUnpaid");
  264. conditions.add('seller_uid == ${MyCookie().getUID()}');
  265. } else if (selectedIndex == 1) {
  266. conditions.add("state == $orderStatePaid");
  267. conditions.add('seller_uid == ${MyCookie().getUID()}');
  268. } else if(selectedIndex==2){
  269. conditions.add("state == $orderStateUnpaid");
  270. conditions.add('buyer_uid==0');
  271. conditions.add('buyer_name LIKE ${MyCookie().getName()}');
  272. conditions.add('shop_uid IN $myShopUIDs');
  273. }else if(selectedIndex == 3){
  274. conditions.add("state == $orderStatePaid");
  275. conditions.add('payer_uid==${MyCookie().getUID()}');
  276. }
  277. var filters;
  278. if (selectedIndex == 2) {
  279. filters = {
  280. "conditions": conditions,
  281. "or": true,
  282. "filters": [
  283. {
  284. "conditions": [
  285. "state == $orderStateUnpaid",
  286. 'buyer_uid==${MyCookie().getUID()}'
  287. ]
  288. }
  289. ]
  290. };
  291. } else {
  292. filters = {"conditions": conditions};
  293. }
  294. MyDio().query({
  295. "key": "order",
  296. "filters": filters,
  297. "dims": orderDims,
  298. "paging": [page, 20],
  299. "order_by": ["create_time,DESC"]
  300. }, (response, hasError) {
  301. if (!hasError) {
  302. SmartOrderBeanEntity entity = SmartOrderBeanEntity.fromJson(json.decode(response.data.toString()));
  303. if (page == 1) {
  304. orders.clear();
  305. }
  306. orders.addAll(entity.data.data);
  307. setState(() {});
  308. }
  309. endRe(controller);
  310. }, (error) {});
  311. }
  312. checkMyStore() {
  313. var dJson;
  314. var conditions1 = [
  315. "role!=$shopUserOwner",
  316. "user_uid==${MyCookie().getUID()}",
  317. "review_state==1"
  318. ];
  319. var conditions2 = [
  320. "role==$shopUserOwner",
  321. "user_uid==${MyCookie().getUID()}"
  322. ];
  323. conditions1.add('private_shop==true');
  324. dJson = {
  325. "key": "shop_user",
  326. "filters": {
  327. "or": true,
  328. "conditions": conditions1,
  329. "filters": [
  330. {"conditions": conditions2}
  331. ]
  332. },
  333. "dims": shopUserDims,
  334. "paging": [page, 1000],
  335. "order_by": ["shop_name,DESC"]
  336. };
  337. MyDio().query(dJson, (response, hasError) {
  338. if (!hasError) {
  339. MyShopBeanEntity entity =
  340. MyShopBeanEntity.fromJson(json.decode(response.data.toString()));
  341. entity.data.data.forEach((element) {
  342. if(!myShopUIDs.contains(element.shopUid)){
  343. myShopUIDs.add(element.shopUid);
  344. }
  345. });
  346. if(myShopUIDs.length==0){
  347. endRe(controller);
  348. return;
  349. }
  350. checkingOrder();
  351. }
  352. }, (error) {});
  353. }
  354. void deleteOrder(SmartOrderBeanDataData order) {
  355. MyDio().del({
  356. 'key': 'order',
  357. 'ids': [order.id]
  358. }, (response, hasError) {
  359. if (!hasError) {
  360. orders.remove(order);
  361. setState(() {});
  362. }
  363. }, (error) {});
  364. }
  365. }