huxiaoqiang 4 vuotta sitten
vanhempi
commit
446452e496
23 muutettua tiedostoa jossa 2775 lisäystä ja 485 poistoa
  1. 15 0
      images/svg/推荐人.svg
  2. 14 0
      images/svg/流水.svg
  3. 2 0
      lib/beans/flow_bean_entity.dart
  4. 6 0
      lib/beans/my_shop_bean_entity.dart
  5. 493 388
      lib/generated/json/base/json_convert_content.dart
  6. 6 0
      lib/generated/json/flow_bean_entity_helper.dart
  7. 14 0
      lib/generated/json/my_shop_bean_entity_helper.dart
  8. 1 0
      lib/my_tools/const.dart
  9. 7 2
      lib/my_tools/dims.dart
  10. 2 2
      lib/my_tools/my_views.dart
  11. 97 34
      lib/paegs/gang_page/gang_in_page/gang_in_page.dart
  12. 169 0
      lib/paegs/gang_page/gang_in_page/gang_information_page/add_partner_page/add_partner_page.dart
  13. 253 1
      lib/paegs/gang_page/gang_in_page/gang_information_page/gang_information_page.dart
  14. 222 53
      lib/paegs/gang_page/gang_in_page/gang_information_page/member_list_page/member_details_page.dart
  15. 6 2
      lib/paegs/gang_page/gang_in_page/gang_information_page/member_list_page/member_list_page.dart
  16. 136 0
      lib/paegs/gang_page/gang_in_page/gang_information_page/member_list_page/set_recommended_person_page.dart
  17. 169 0
      lib/paegs/gang_page/gang_in_page/gang_information_page/remove_partner_page/remove_partner_page.dart
  18. 555 0
      lib/paegs/gang_page/gang_in_page/shop_flow_page/shop_flow_page.dart
  19. 5 0
      lib/paegs/mine_page/mine_page.dart
  20. 473 0
      lib/paegs/mine_page/referrer_page/referrer_flow_page.dart
  21. 126 0
      lib/paegs/mine_page/referrer_page/referrer_page.dart
  22. 3 2
      lib/paegs/mine_page/wallet_page/wallet_page.dart
  23. 1 1
      pubspec.yaml

+ 15 - 0
images/svg/推荐人.svg

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="19px" height="21px" viewBox="0 0 19 21" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 54.1 (76490) - https://sketchapp.com -->
+    <title>推荐人</title>
+    <desc>Created with Sketch.</desc>
+    <g id="推荐人" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round">
+        <g id="编组" transform="translate(1.000000, 1.000000)" stroke="#231815" stroke-width="1.25">
+            <path d="M13.5283949,4.79743857 C13.5283949,7.43484042 11.3076389,9.57293279 8.5682689,9.57293279 C5.82885335,9.57293279 3.6081429,7.43484042 3.6081429,4.79743857 C3.6081429,2.16003672 5.82885335,0.0219443418 8.5682689,0.0219443418 C11.3076389,0.0219443418 13.5283949,2.16003672 13.5283949,4.79743857 Z" id="Stroke-1"></path>
+            <path d="M8.64152842,9.56048845 L7.73679115,9.56048845 C3.42740509,9.96163857 0.0228018767,13.4688279 0.0228018767,17.6979296 L0.0228018767,17.7323753 C0.034697319,18.43147 0.629970777,18.9815924 1.34415308,18.9700958 L1.34415308,18.9586432 L8.87961957,18.9586432" id="Stroke-3"></path>
+            <path d="M10.2629592,11.7142404 L16.9793265,11.7142404" id="Stroke-5"></path>
+            <path d="M10.2629592,14.4202046 L16.9793265,14.4202046" id="Stroke-7"></path>
+            <path d="M10.2629592,17.1261644 L16.9793265,17.1261644" id="Stroke-9"></path>
+        </g>
+    </g>
+</svg>

+ 14 - 0
images/svg/流水.svg

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="19px" height="21px" viewBox="0 0 19 21" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 54.1 (76490) - https://sketchapp.com -->
+    <title>流水</title>
+    <desc>Created with Sketch.</desc>
+    <g id="流水" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="编组" transform="translate(1.000000, 1.000000)" stroke="#333333">
+            <path d="M3.00951848,18.94481 C2.83897009,18.94481 2.66862111,18.8883393 2.53481466,18.7783086 L0.252228152,16.9054061 C0.10850088,16.786537 0.0249466276,16.6200886 0.0249466276,16.4477655 L0.0249466276,0.650773816 C0.0249466276,0.305862953 0.339122581,0.0264729805 0.726832258,0.0264729805 L16.291105,0.0264729805 C16.6788645,0.0264729805 16.9929906,0.305862953 16.9929906,0.650773816 L16.9929906,16.4477655 C16.9929906,16.6350134 16.8995155,16.8103532 16.7389378,16.9292223 L14.1990082,18.8021248 C13.961756,18.9774646 13.6240991,18.9953003 13.366756,18.8436178 L10.6161959,17.2443365 L8.83822522,18.7723281 C8.57744223,18.9982111 8.16635132,19.0072084 7.8889173,18.7931276 L5.8902956,17.2443365 L3.42055953,18.8288518 C3.29692317,18.9060691 3.15314604,18.94481 3.00951848,18.94481 Z" id="Stroke-3" stroke-width="1.25"></path>
+            <path d="M3.37884223,4.69597437 L6.84285396,4.69597437 L12.367156,4.69597437 L13.639115,4.69597437 C14.1202997,4.69597437 14.1210974,3.90210251 13.639115,3.90210251 L10.1750534,3.90210251 L4.65080117,3.90210251 L3.37884223,3.90210251 C2.89765748,3.90210251 2.89685982,4.69597437 3.37884223,4.69597437" id="Fill-1" stroke-width="0.6" fill="#333333"></path>
+            <path d="M3.37884223,8.35346908 L6.84285396,8.35346908 L12.367156,8.35346908 L13.639115,8.35346908 C14.1202997,8.35346908 14.1210974,7.55959721 13.639115,7.55959721 L10.1750534,7.55959721 L4.65080117,7.55959721 L3.37884223,7.55959721 C2.89765748,7.55959721 2.89685982,8.35346908 3.37884223,8.35346908" id="Fill-5" stroke-width="0.6" fill="#333333"></path>
+            <path d="M3.37884223,12.0109426 L6.84285396,12.0109426 L12.367156,12.0109426 L13.639115,12.0109426 C14.1202997,12.0109426 14.1210974,11.2170708 13.639115,11.2170708 L10.1750534,11.2170708 L4.65080117,11.2170708 L3.37884223,11.2170708 C2.89765748,11.2170708 2.89685982,12.0109426 3.37884223,12.0109426" id="Fill-7" stroke-width="0.6" fill="#333333"></path>
+        </g>
+    </g>
+</svg>

+ 2 - 0
lib/beans/flow_bean_entity.dart

@@ -42,6 +42,8 @@ class FlowBeanDataDataRecords with JsonConvert<FlowBeanDataDataRecords> {
 	int orderUid;
 	@JSONField(name: "user_uid")
 	int userUid;
+	@JSONField(name: "shop_uid")
+	int shopUid;
 	@JSONField(name: "user_balance")
 	double userBalance;
 }

+ 6 - 0
lib/beans/my_shop_bean_entity.dart

@@ -48,6 +48,12 @@ class MyShopBeanDataData extends ISuspensionBean  with JsonConvert<MyShopBeanDat
   @JSONField(name: "collected")
   bool collected;
   bool canSend = false;
+  @JSONField(name: "recommender_uid")
+  int recommenderUid;
+  @JSONField(name: "recommender_name")
+  String recommenderName;
+  @JSONField(name: "recommender_pic")
+  String recommenderPic;
 
   String tagIndex;
 

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 493 - 388
lib/generated/json/base/json_convert_content.dart


+ 6 - 0
lib/generated/json/flow_bean_entity_helper.dart

@@ -111,6 +111,11 @@ flowBeanDataDataRecordsFromJson(FlowBeanDataDataRecords data, Map<String, dynami
 				? int.tryParse(json['user_uid'])
 				: json['user_uid'].toInt();
 	}
+	if (json['shop_uid'] != null) {
+		data.shopUid = json['shop_uid'] is String
+				? int.tryParse(json['shop_uid'])
+				: json['shop_uid'].toInt();
+	}
 	if (json['user_balance'] != null) {
 		data.userBalance = json['user_balance'] is String
 				? double.tryParse(json['user_balance'])
@@ -134,6 +139,7 @@ Map<String, dynamic> flowBeanDataDataRecordsToJson(FlowBeanDataDataRecords entit
 	data['pay_way'] = entity.payWay;
 	data['order_uid'] = entity.orderUid;
 	data['user_uid'] = entity.userUid;
+	data['shop_uid'] = entity.shopUid;
 	data['user_balance'] = entity.userBalance;
 	return data;
 }

+ 14 - 0
lib/generated/json/my_shop_bean_entity_helper.dart

@@ -109,6 +109,17 @@ myShopBeanDataDataFromJson(MyShopBeanDataData data, Map<String, dynamic> json) {
 	if (json['canSend'] != null) {
 		data.canSend = json['canSend'];
 	}
+	if (json['recommender_uid'] != null) {
+		data.recommenderUid = json['recommender_uid'] is String
+				? int.tryParse(json['recommender_uid'])
+				: json['recommender_uid'].toInt();
+	}
+	if (json['recommender_name'] != null) {
+		data.recommenderName = json['recommender_name'].toString();
+	}
+	if (json['recommender_pic'] != null) {
+		data.recommenderPic = json['recommender_pic'].toString();
+	}
 	if (json['tagIndex'] != null) {
 		data.tagIndex = json['tagIndex'].toString();
 	}
@@ -136,6 +147,9 @@ Map<String, dynamic> myShopBeanDataDataToJson(MyShopBeanDataData entity) {
 	data['inner_trade'] = entity.innerTrade;
 	data['collected'] = entity.collected;
 	data['canSend'] = entity.canSend;
+	data['recommender_uid'] = entity.recommenderUid;
+	data['recommender_name'] = entity.recommenderName;
+	data['recommender_pic'] = entity.recommenderPic;
 	data['tagIndex'] = entity.tagIndex;
 	return data;
 }

+ 1 - 0
lib/my_tools/const.dart

@@ -8,6 +8,7 @@ int userStateRemoved = 3; //被移除
 int shopUserOwner = 0; //店主
 int shopUserStaff = 1; //客服
 int shopUserMember = 2; //顾客
+int shopUserPartner = 3; //合伙人
 
 //用户在店铺中的审核状态
 int shopUserReviewing = 0; //审核中

+ 7 - 2
lib/my_tools/dims.dart

@@ -16,7 +16,10 @@ var shopUserDims = [
   "private_shop",
   "shop_state",
   "inner_trade",
-  "collected"
+  "collected",
+  "recommender_uid",
+  "recommender_name",
+  "recommender_pic"
 ];
 
 var orderTemplateDims = [
@@ -146,7 +149,9 @@ var flowDims = [
   'user_balance',
   'order_uid',
   'peer_flow_id',
-  'usage'
+  'usage',
+  'recommended_uid',
+  'shop_uid'
 ];
 
 var couponDims = [

+ 2 - 2
lib/my_tools/my_views.dart

@@ -1465,8 +1465,8 @@ class MyViews {
                                 : MyColors.cFFCD00,
                             borderRadius: BorderRadius.circular(8)),
                         height: 16,
-                        width: 30,
-                        child: myText(data.role == shopUserOwner ? "帮主" : "助手",
+                        padding: EdgeInsets.symmetric(horizontal: 4),
+                        child: myText(data.role == shopUserOwner ? "帮主" : "合伙人",
                             Colors.white, 10),
                         alignment: Alignment.center,
                         margin: EdgeInsets.only(left: 5),

+ 97 - 34
lib/paegs/gang_page/gang_in_page/gang_in_page.dart

@@ -24,8 +24,10 @@ import 'package:bbyyy/paegs/chat_page/chat_page.dart';
 import 'package:bbyyy/paegs/gang_page/gang_in_page/gang_information_page/add_member_page/add_member_page.dart';
 import 'package:bbyyy/paegs/gang_page/gang_in_page/pay_to_the_helper_page/pay_to_the_helper_page.dart';
 import 'package:bbyyy/paegs/gang_page/gang_in_page/qr_pay_page/set_amount_page.dart';
+import 'package:bbyyy/paegs/gang_page/gang_in_page/shop_flow_page/shop_flow_page.dart';
 import 'package:bbyyy/paegs/gang_page/qr_code_for_store_payment_page/qr_code_for_store_payment_page.dart';
 import 'package:bbyyy/paegs/mine_page/privacy_protection_props_page/privacy_protection_props_page.dart';
+import 'package:bbyyy/paegs/mine_page/referrer_page/referrer_page.dart';
 import 'package:bbyyy/paegs/other_people_s_turnover_page/other_people_s_turnover_page.dart';
 import 'package:bbyyy/paegs/pay_page/order_information_page.dart';
 import 'package:bbyyy/paegs/release_goods_page/release_goods_page.dart';
@@ -195,7 +197,16 @@ class _GangInPageState extends State<GangInPage> {
                     });
                     break;
                   case '收款二维码':
-                    MyTools().toPage(context, QRCodeForStorePaymentPage(widget.data), (then){});
+                    MyTools().toPage(context,
+                        QRCodeForStorePaymentPage(widget.data), (then) {});
+                    break;
+                  case '货帮流水':
+                    MyTools()
+                        .toPage(context, ShopFlowPage(widget.data), (then) {});
+                    break;
+                  case '推荐人':
+                    MyTools().toPage(
+                        context, ReferrerPage(data: widget.data), (then) {});
                     break;
                   default:
                     break;
@@ -203,27 +214,27 @@ class _GangInPageState extends State<GangInPage> {
               },
               itemBuilder: (context) {
                 return <PopupMenuEntry<String>>[
-                  if(canSendGood)
-                  PopupMenuItem<String>(
-                    value: '发布商品',
-                    child: Row(
-                      children: [
-                        SvgPicture.asset(
-                          'images/svg/发布商品_icon.svg',
-                          height: 22,
-                          width: 22,
-                        ),
-                        Container(
-                          child: Text(
-                            '发布商品',
-                            style: TextStyle(
-                                fontSize: 14, color: MyColors.c333333),
+                  if (canSendGood)
+                    PopupMenuItem<String>(
+                      value: '发布商品',
+                      child: Row(
+                        children: [
+                          SvgPicture.asset(
+                            'images/svg/发布商品_icon.svg',
+                            height: 22,
+                            width: 22,
                           ),
-                          margin: EdgeInsets.only(left: 5),
-                        ),
-                      ],
+                          Container(
+                            child: Text(
+                              '发布商品',
+                              style: TextStyle(
+                                  fontSize: 14, color: MyColors.c333333),
+                            ),
+                            margin: EdgeInsets.only(left: 5),
+                          ),
+                        ],
+                      ),
                     ),
-                  ),
                   PopupMenuItem<String>(
                     value: '货帮详情',
                     child: Row(
@@ -265,7 +276,8 @@ class _GangInPageState extends State<GangInPage> {
                         ],
                       ),
                     ),
-                  if (MyCookie().getUID() == widget.data.ownerUid&&!widget.data.privateShop)
+                  if (MyCookie().getUID() == widget.data.ownerUid &&
+                      !widget.data.privateShop)
                     PopupMenuItem<String>(
                       value: '收款二维码',
                       child: Row(
@@ -286,6 +298,50 @@ class _GangInPageState extends State<GangInPage> {
                         ],
                       ),
                     ),
+                  if (MyCookie().getUID() == widget.data.ownerUid ||
+                      widget.data.role == shopUserPartner)
+                    PopupMenuItem<String>(
+                      value: '货帮流水',
+                      child: Row(
+                        children: [
+                          SvgPicture.asset(
+                            'images/svg/流水.svg',
+                            height: 20,
+                            width: 20,
+                          ),
+                          Container(
+                            child: Text(
+                              '货帮流水',
+                              style: TextStyle(
+                                  fontSize: 14, color: MyColors.c333333),
+                            ),
+                            margin: EdgeInsets.only(left: 5),
+                          ),
+                        ],
+                      ),
+                    ),
+                  if (MyCookie().getUID() == widget.data.ownerUid ||
+                      widget.data.role == shopUserPartner)
+                    PopupMenuItem<String>(
+                      value: '推荐人',
+                      child: Row(
+                        children: [
+                          SvgPicture.asset(
+                            'images/svg/推荐人.svg',
+                            height: 20,
+                            width: 20,
+                          ),
+                          Container(
+                            child: Text(
+                              '推荐人',
+                              style: TextStyle(
+                                  fontSize: 14, color: MyColors.c333333),
+                            ),
+                            margin: EdgeInsets.only(left: 5),
+                          ),
+                        ],
+                      ),
+                    ),
                 ];
               },
             )
@@ -400,7 +456,7 @@ class _GangInPageState extends State<GangInPage> {
                             ),
                           ),
                           onTap: () {
-                            if(MyCookie().getUID()==widget.data.ownerUid){
+                            if (MyCookie().getUID() == widget.data.ownerUid) {
                               return;
                             }
                             EasyLoading.show();
@@ -640,9 +696,11 @@ class _GangInPageState extends State<GangInPage> {
                     Expanded(
                       child: GestureDetector(
                         onTap: () {
-                          if(!widget.data.privateShop&&MyCookie().getUID()==widget.data.ownerUid){
-                            MyTools().toPage(context, SetAmountPage(widget.data), (then){});
-                          }else{
+                          if (!widget.data.privateShop &&
+                              MyCookie().getUID() == widget.data.ownerUid) {
+                            MyTools().toPage(
+                                context, SetAmountPage(widget.data), (then) {});
+                          } else {
                             queryShopMembers(true);
                           }
                         },
@@ -656,8 +714,14 @@ class _GangInPageState extends State<GangInPage> {
                                 border: Border.all(
                                     color: MyColors.cFF4233, width: 1)),
                             height: 40,
-                            child:
-                                MyViews().myText(!widget.data.privateShop&&MyCookie().getUID()==widget.data.ownerUid?'扫码收款':'联系帮主', MyColors.cFF4233, 14),
+                            child: MyViews().myText(
+                                !widget.data.privateShop &&
+                                        MyCookie().getUID() ==
+                                            widget.data.ownerUid
+                                    ? '扫码收款'
+                                    : '联系帮主',
+                                MyColors.cFF4233,
+                                14),
                             alignment: Alignment.center),
                       ),
                     ),
@@ -902,12 +966,13 @@ class _GangInPageState extends State<GangInPage> {
                                                 borderRadius:
                                                     BorderRadius.circular(8)),
                                             height: 16,
-                                            width: 30,
+                                            padding: EdgeInsets.symmetric(
+                                                horizontal: 5),
                                             child: MyViews().myText(
                                                 member[index].role ==
                                                         shopUserOwner
                                                     ? "帮主"
-                                                    : "助手",
+                                                    : "合伙人",
                                                 Colors.white,
                                                 10),
                                             alignment: Alignment.center,
@@ -1190,8 +1255,7 @@ class _GangInPageState extends State<GangInPage> {
         hideMember = store.hideMembers;
 
         //自己的公开店铺
-        if (!store.private &&
-            store.ownerUid == MyCookie().getUID()) {
+        if (!store.private && store.ownerUid == MyCookie().getUID()) {
           canSendGood = true;
         }
         //自己在某个允许顾客间交易的私有店铺中
@@ -1246,14 +1310,14 @@ class _GangInPageState extends State<GangInPage> {
       context: context,
       builder: (BuildContext context) {
         return GestureDetector(
-          onTap: (){
+          onTap: () {
             Navigator.pop(context);
           },
           child: Material(
             color: Colors.black12,
             child: Center(
               child: GestureDetector(
-                onTap: (){},
+                onTap: () {},
                 child: Container(
                   decoration: BoxDecoration(
                     borderRadius: BorderRadius.circular(16),
@@ -1389,7 +1453,6 @@ class _GangInPageState extends State<GangInPage> {
   }
 
   void collectionShop() {
-
     if (!collect) {
       MyDio().save({
         'key': 'shop_user',

+ 169 - 0
lib/paegs/gang_page/gang_in_page/gang_information_page/add_partner_page/add_partner_page.dart

@@ -0,0 +1,169 @@
+import 'dart:convert';
+
+import 'package:azlistview/azlistview.dart';
+import 'package:bbyyy/beans/my_shop_bean_entity.dart';
+import 'package:bbyyy/https/MyDio.dart';
+import 'package:bbyyy/https/url.dart';
+import 'package:bbyyy/my_tools/const.dart';
+import 'package:bbyyy/my_tools/dims.dart';
+import 'package:bbyyy/my_tools/my_colors.dart';
+import 'package:bbyyy/my_tools/my_tools.dart';
+import 'package:bbyyy/my_tools/my_views.dart';
+import 'package:flutter/material.dart';
+import 'package:lpinyin/lpinyin.dart';
+
+class AddPartnerPage extends StatefulWidget {
+  MyShopBeanDataData data;
+
+  AddPartnerPage(this.data);
+
+  @override
+  _AddPartnerPageState createState() => _AddPartnerPageState();
+}
+
+class _AddPartnerPageState extends State<AddPartnerPage> {
+  List<MyShopBeanDataData> member = [];
+
+  @override
+  void initState() {
+    // TODO: implement initState
+    super.initState();
+    queryCargoHelperMembers();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      body: Column(
+        children: [
+          MyViews().myAppBar('添加合伙人', context, []),
+          Expanded(
+            child: AzListView(
+              padding: EdgeInsets.symmetric(vertical: 10),
+              itemBuilder: (c, index) {
+                return Container(
+                  padding: EdgeInsets.only(left: 15, right: 15),
+                  color: Colors.white,
+                  child: Column(
+                    children: [
+                      Container(
+                        margin: EdgeInsets.only(top: 8, bottom: 6),
+                        child: Row(
+                          children: [
+                            Row(
+                              children: [
+                                Container(
+                                  margin: EdgeInsets.only(right: 6),
+                                  child: ClipRRect(
+                                    child: MyViews().netImg(
+                                        imgURL(member[index].userPic), 42, 42),
+                                    borderRadius: BorderRadius.circular(21),
+                                  ),
+                                ),
+                                MyViews().myText(
+                                    '${member[index].userName} (${member[index].userUid})',
+                                    MyColors.c333333,
+                                    15),
+                              ],
+                            ),
+                            GestureDetector(
+                              onTap: () {
+                                setAsAPartner(member[index]);
+                              },
+                              behavior: HitTestBehavior.translucent,
+                              child: Container(
+                                decoration: BoxDecoration(
+                                    color: MyColors.cFF4233,
+                                    borderRadius: BorderRadius.circular(15)),
+                                height: 30,
+                                padding: EdgeInsets.symmetric(horizontal: 10),
+                                margin: EdgeInsets.only(right: 20),
+                                child: Text(
+                                  '设为合伙人',
+                                  style: TextStyle(
+                                      color: Colors.white, fontSize: 12),
+                                ),
+                                alignment: Alignment.center,
+                              ),
+                            )
+                          ],
+                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                        ),
+                      ),
+                      Container(
+                        height: 0.5,
+                        color: MyColors.cE7E7E7,
+                      )
+                    ],
+                  ),
+                );
+              },
+              itemCount: member.length,
+              data: member,
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+
+  queryCargoHelperMembers() {
+    MyDio().query({
+      "key": "shop_user",
+      "filters": {
+        "conditions": [
+          "shop_uid==${widget.data.shopUid}",
+          "review_state==1",
+          'role==$shopUserMember'
+        ]
+      },
+      "dims": shopUserDims,
+      "paging": [1, 2000]
+    }, (response, hasError) {
+      if (!hasError) {
+        MyShopBeanEntity entity =
+            MyShopBeanEntity().fromJson(json.decode(response.data.toString()));
+        member = entity.data.data;
+        _handleList(member);
+        setState(() {});
+      }
+    }, (error) {});
+  }
+
+  void _handleList(List<MyShopBeanDataData> list) {
+    if (list.isEmpty) return;
+    for (int i = 0, length = list.length; i < length; i++) {
+      String pinyin = PinyinHelper.getPinyinE(list[i].userName);
+      String tag = pinyin.substring(0, 1).toUpperCase();
+      if (RegExp('[A-Z]').hasMatch(tag)) {
+        list[i].tagIndex = tag;
+      } else {
+        list[i].tagIndex = '#';
+      }
+    }
+    // A-Z sort.
+    SuspensionUtil.sortListBySuspensionTag(list);
+
+    // show sus tag.
+    SuspensionUtil.setShowSuspensionStatus(member);
+
+    setState(() {});
+  }
+
+  void setAsAPartner(MyShopBeanDataData member) {
+    MyDio().update({
+      "key": "shop_user",
+      "values": {
+        "id": member.id,
+        'role':shopUserPartner ,
+      }
+    }, (response, hasError) {
+      if(!hasError){
+        this.member.remove(member);
+        setState(() {
+          showToast('设置成功');
+        });
+      }
+    }, (error) {});
+  }
+}

+ 253 - 1
lib/paegs/gang_page/gang_in_page/gang_information_page/gang_information_page.dart

@@ -14,10 +14,13 @@ import 'package:bbyyy/my_tools/my_views.dart';
 import 'package:bbyyy/paegs/gang_page/gang_in_page/gang_announcement_page/gang_announcement_page.dart';
 import 'package:bbyyy/paegs/gang_page/gang_in_page/gang_commission_page/gang_commission_page.dart';
 import 'package:bbyyy/paegs/gang_page/gang_in_page/gang_information_page/add_member_page/add_member_page.dart';
+import 'package:bbyyy/paegs/gang_page/gang_in_page/gang_information_page/add_partner_page/add_partner_page.dart';
 import 'package:bbyyy/paegs/gang_page/gang_in_page/gang_information_page/member_list_page/member_list_page.dart';
 import 'package:bbyyy/paegs/gang_page/gang_in_page/gang_information_page/remove_member_page/remove_member_page.dart';
+import 'package:bbyyy/paegs/gang_page/gang_in_page/gang_information_page/remove_partner_page/remove_partner_page.dart';
 import 'package:bbyyy/paegs/gang_page/gang_in_page/gang_order_page/gang_order_page.dart';
 import 'package:bbyyy/paegs/gang_page/gang_in_page/gang_set_page/gang_set_page.dart';
+import 'package:bbyyy/paegs/gang_page/gang_in_page/shop_flow_page/shop_flow_page.dart';
 import 'package:bbyyy/paegs/mine_page/privacy_protection_props_page/privacy_protection_props_page.dart';
 import 'package:flustars/flustars.dart';
 import 'package:flutter/cupertino.dart';
@@ -39,6 +42,7 @@ class GangInformationPage extends StatefulWidget {
 class _GangInformationPageState extends State<GangInformationPage> {
   List<MyShopBeanDataData> member = [];
   List<MyShopBeanDataData> helper = [];
+  List<MyShopBeanDataData> partner = [];
   StoreBeanDataData store;
   RefreshController controller = RefreshController(initialRefresh: true);
   bool privacyProtection = false;
@@ -281,6 +285,211 @@ class _GangInformationPageState extends State<GangInformationPage> {
                         ),
                       ),
                     ),
+                    Visibility(
+                      visible: MyCookie().getUID()==widget.data.ownerUid||widget.data.role==shopUserPartner,
+                      child: Container(
+                        padding: EdgeInsets.only(
+                          top: 9,
+                        ),
+                        height: MediaQuery.of(context).size.width /
+                            5 *
+                            ((partner.length +
+                                (widget.data.ownerUid ==
+                                    MyCookie().getUID()
+                                    ? 2
+                                    : 0)) >
+                                15
+                                ? 3
+                                : ((partner.length +
+                                (widget.data.ownerUid ==
+                                    MyCookie().getUID()
+                                    ? 2
+                                    : 0)) /
+                                5.0)
+                                .ceil()) +
+                            44,
+                        color: Colors.white,
+                        child: Column(
+                          children: [
+                            Container(
+                              padding: EdgeInsets.symmetric(horizontal: 16),
+                              margin: EdgeInsets.only(bottom: 15),
+                              height: 20,
+                              child: Row(
+                                children: [
+                                  Expanded(
+                                    child: Text(
+                                      '合伙人',
+                                      style: TextStyle(
+                                          color: MyColors.c333333, fontSize: 15),
+                                    ),
+                                  ),
+                                  GestureDetector(
+                                    onTap: () {
+                                      MyTools().toPage(
+                                          context, MemberListPage(store, true,isPartner: true,),
+                                              (then) {
+                                            controller.requestRefresh();
+                                          });
+                                    },
+                                    behavior: HitTestBehavior.translucent,
+                                    child: Container(
+                                      margin: EdgeInsets.only(right: 10),
+                                      child: Text(
+                                        '查看${partner.length}名货帮合伙人',
+                                        style: TextStyle(
+                                            color: MyColors.c666666,
+                                            fontSize: 13),
+                                      ),
+                                    ),
+                                  ),
+                                  SvgPicture.asset('images/svg/箭头.svg')
+                                ],
+                              ),
+                            ),
+                            Expanded(
+                              child: GridView.builder(
+                                  gridDelegate:
+                                  SliverGridDelegateWithFixedCrossAxisCount(
+                                      crossAxisCount: 5,
+                                      childAspectRatio: 1,
+                                      mainAxisSpacing: 0,
+                                      crossAxisSpacing: 0),
+                                  itemCount:
+                                  widget.data.ownerUid == MyCookie().getUID()
+                                      ? partner.length + 2 > 15
+                                      ? 15
+                                      : partner.length + 2
+                                      : partner.length > 15
+                                      ? 15
+                                      : partner.length,
+                                  physics: NeverScrollableScrollPhysics(),
+                                  padding: EdgeInsets.all(0),
+                                  itemBuilder: (context, index) {
+                                    if (widget.data.ownerUid ==
+                                        MyCookie().getUID()) {
+                                      if (partner.length + 2 > 15) {
+                                        if (index < 13) {
+                                          return MyViews().getMembersItem(
+                                              partner[index], context);
+                                        } else if (index == 13) {
+                                          return GestureDetector(
+                                            onTap: () {
+                                              removePartner();
+                                            },
+                                            behavior: HitTestBehavior.translucent,
+                                            child: Column(
+                                              children: [
+                                                SvgPicture.asset(
+                                                  'images/svg/移除好友.svg',
+                                                  height: 40,
+                                                  width: 40,
+                                                ),
+                                                Container(
+                                                  child: Text(
+                                                    '移除合伙人',
+                                                    style: TextStyle(
+                                                        color: MyColors.c666666,
+                                                        fontSize: 12),
+                                                  ),
+                                                  margin: EdgeInsets.only(top: 8),
+                                                )
+                                              ],
+                                            ),
+                                          );
+                                        } else {
+                                          return GestureDetector(
+                                            onTap: () {
+                                              addPartner();
+                                            },
+                                            behavior: HitTestBehavior.translucent,
+                                            child: Column(
+                                              children: [
+                                                SvgPicture.asset(
+                                                  'images/svg/邀请好友.svg',
+                                                  height: 40,
+                                                  width: 40,
+                                                ),
+                                                Container(
+                                                  child: Text(
+                                                    '添加合伙人',
+                                                    style: TextStyle(
+                                                        color: MyColors.c666666,
+                                                        fontSize: 12),
+                                                  ),
+                                                  margin: EdgeInsets.only(top: 8),
+                                                )
+                                              ],
+                                            ),
+                                          );
+                                        }
+                                      } else {
+                                        if (index < partner.length) {
+                                          return MyViews().getMembersItem(
+                                              partner[index], context);
+                                        } else if (index == partner.length) {
+                                          return GestureDetector(
+                                            onTap: () {
+                                              removePartner();
+                                            },
+                                            behavior: HitTestBehavior.translucent,
+                                            child: Column(
+                                              children: [
+                                                SvgPicture.asset(
+                                                  'images/svg/移除好友.svg',
+                                                  height: 40,
+                                                  width: 40,
+                                                ),
+                                                Container(
+                                                  child: Text(
+                                                    '移除合伙人',
+                                                    style: TextStyle(
+                                                        color: MyColors.c666666,
+                                                        fontSize: 12),
+                                                  ),
+                                                  margin: EdgeInsets.only(top: 8),
+                                                )
+                                              ],
+                                            ),
+                                          );
+                                        } else {
+                                          return GestureDetector(
+                                            onTap: () {
+                                              addPartner();
+                                            },
+                                            behavior: HitTestBehavior.translucent,
+                                            child: Column(
+                                              children: [
+                                                SvgPicture.asset(
+                                                  'images/svg/邀请好友.svg',
+                                                  height: 40,
+                                                  width: 40,
+                                                ),
+                                                Container(
+                                                  child: Text(
+                                                    '添加合伙人',
+                                                    style: TextStyle(
+                                                        color: MyColors.c666666,
+                                                        fontSize: 12),
+                                                  ),
+                                                  margin: EdgeInsets.only(top: 8),
+                                                )
+                                              ],
+                                            ),
+                                          );
+                                        }
+                                      }
+                                    } else {
+                                      return MyViews()
+                                          .getMembersItem(partner[index], context);
+                                    }
+                                  }),
+                            )
+                          ],
+                        ),
+                        margin: EdgeInsets.only(top: 3),
+                      ),
+                    ),
                     Visibility(
                       visible: MyCookie().getUID()==widget.data.ownerUid?true:!hideMember,
                       child: Container(
@@ -323,7 +532,7 @@ class _GangInformationPageState extends State<GangInformationPage> {
                                   GestureDetector(
                                     onTap: () {
                                       MyTools().toPage(
-                                          context, MemberListPage(store, true),
+                                          context, MemberListPage(store, true,isPartner: false,),
                                           (then) {
                                         controller.requestRefresh();
                                       });
@@ -862,6 +1071,33 @@ class _GangInformationPageState extends State<GangInformationPage> {
                         ),
                       ),
                     ),
+                    Visibility(
+                      visible: widget.data.ownerUid==MyCookie().getUID()||widget.data.role==shopUserPartner,
+                      child: GestureDetector(
+                        onTap: () {
+                          MyTools().toPage(context, ShopFlowPage(widget.data), (then){}
+                          );
+                        },
+                        behavior: HitTestBehavior.translucent,
+                        child: Container(
+                          child: Row(
+                            children: [
+                              Text(
+                                '货帮流水',
+                                style: TextStyle(
+                                    color: MyColors.c333333, fontSize: 15),
+                              ),
+                              SvgPicture.asset('images/svg/箭头.svg'),
+                            ],
+                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                          ),
+                          padding:
+                          EdgeInsets.symmetric(horizontal: 16, vertical: 12),
+                          color: Colors.white,
+                          margin: EdgeInsets.only(top: 3),
+                        ),
+                      ),
+                    ),
                     Visibility(
                       visible: widget.data.ownerUid==MyCookie().getUID(),
                       child: GestureDetector(
@@ -959,10 +1195,14 @@ class _GangInformationPageState extends State<GangInformationPage> {
             MyShopBeanEntity().fromJson(json.decode(response.data.toString()));
         member = entity.data.data;
         helper.clear();
+        partner.clear();
         member.forEach((element) {
           if (element.role == shopUserStaff) {
             helper.add(element);
           }
+          if(element.role == shopUserPartner){
+            partner.add(element);
+          }
         });
         setState(() {});
       }
@@ -1029,4 +1269,16 @@ class _GangInformationPageState extends State<GangInformationPage> {
       }
     }, (error) { });
   }
+
+  void addPartner() {
+    MyTools().toPage(context, AddPartnerPage(widget.data), (then){
+      controller.requestRefresh();
+    });
+  }
+
+  void removePartner() {
+    MyTools().toPage(context, RemovePartnerPage(widget.data), (then){
+      controller.requestRefresh();
+    });
+  }
 }

+ 222 - 53
lib/paegs/gang_page/gang_in_page/gang_information_page/member_list_page/member_details_page.dart

@@ -3,6 +3,7 @@ import 'dart:convert';
 import 'package:bbyyy/beans/my_shop_bean_entity.dart';
 import 'package:bbyyy/beans/user_bean_entity.dart';
 import 'package:bbyyy/my_tools/dims.dart';
+import 'package:bbyyy/paegs/gang_page/gang_in_page/gang_information_page/member_list_page/set_recommended_person_page.dart';
 import 'package:flutter/material.dart';
 
 import '../../../../../https/MyDio.dart';
@@ -25,10 +26,16 @@ class MemberDetailsPage extends StatefulWidget {
 class _MemberDetailsPageState extends State<MemberDetailsPage> {
   TextEditingController _name = TextEditingController();
   UserBeanDataData user;
+  MyShopBeanDataData referrer;
+
   @override
   void initState() {
     // TODO: implement initState
     super.initState();
+    referrer = MyShopBeanDataData();
+    referrer.recommenderUid = widget.member.recommenderUid;
+    referrer.recommenderName = widget.member.recommenderName;
+    referrer.recommenderPic = widget.member.recommenderPic;
     queryUserId();
   }
 
@@ -90,7 +97,7 @@ class _MemberDetailsPageState extends State<MemberDetailsPage> {
                     ),
                     Container(
                       color: Colors.white,
-                      margin: EdgeInsets.only(top: 8),
+                      margin: EdgeInsets.only(top: 8,bottom: 30),
                       child: Column(
                         children: [
                           Container(
@@ -100,6 +107,7 @@ class _MemberDetailsPageState extends State<MemberDetailsPage> {
                             child: Row(
                               children: [
                                 Container(
+                                  width: 50,
                                   child: Text(
                                     '昵称',
                                     style: TextStyle(
@@ -150,6 +158,7 @@ class _MemberDetailsPageState extends State<MemberDetailsPage> {
                             child: Row(
                               children: [
                                 Container(
+                                  width: 50,
                                   child: Text(
                                     'ID号',
                                     style: TextStyle(
@@ -165,64 +174,208 @@ class _MemberDetailsPageState extends State<MemberDetailsPage> {
                               ],
                             ),
                           ),
+                          Visibility(
+                            visible: widget.member.privateShop,
+                            child: Column(
+                              children: [
+                                Container(
+                                  height: 0.5,
+                                  margin: EdgeInsets.symmetric(horizontal: 15),
+                                  color: MyColors.cE7E7E7,
+                                ),
+                                Container(
+                                  height: 55,
+                                  alignment: Alignment.center,
+                                  padding: EdgeInsets.symmetric(horizontal: 15),
+                                  child: Row(
+                                    children: [
+                                      Container(
+                                        width: 50,
+                                        child: Text(
+                                          '推荐人',
+                                          style: TextStyle(
+                                              color: MyColors.c333333,
+                                              fontSize: 15),
+                                        ),
+                                        margin: EdgeInsets.only(right: 28),
+                                      ),
+                                      Expanded(
+                                        child: GestureDetector(
+                                            onTap: () {
+                                              MyTools().toPage(
+                                                  context,
+                                                  SetRecommendedPersonPage(
+                                                      widget.member), (then) {
+                                                if (then
+                                                    is MyShopBeanDataData) {
+                                                  referrer.recommenderUid =
+                                                      then.userUid;
+                                                  referrer.recommenderPic =
+                                                      then.userPic;
+                                                  referrer.recommenderName =
+                                                      then.userName;
+                                                  setState(() {});
+                                                }
+                                              });
+                                            },
+                                            behavior:
+                                                HitTestBehavior.translucent,
+                                            child: Container(
+                                              height: 50,
+                                              alignment: Alignment.centerLeft,
+                                              child:
+                                                  referrer.recommenderName == ''
+                                                      ? Text(
+                                                          '暂无',
+                                                          style: TextStyle(
+                                                              color: MyColors
+                                                                  .c999999,
+                                                              fontSize: 15),
+                                                        )
+                                                      : Row(
+                                                          children: [
+                                                            Row(
+                                                              children: [
+                                                                ClipRRect(
+                                                                  child: MyViews()
+                                                                      .netImg(
+                                                                          imgURL(
+                                                                              referrer.recommenderPic),
+                                                                          30,
+                                                                          30),
+                                                                  borderRadius:
+                                                                      BorderRadius
+                                                                          .circular(
+                                                                              15),
+                                                                ),
+                                                                Container(
+                                                                  margin: EdgeInsets
+                                                                      .only(
+                                                                          left:
+                                                                              8),
+                                                                  child: Text(
+                                                                    '${referrer.recommenderName}(${referrer.recommenderUid})',
+                                                                    style: TextStyle(
+                                                                        color: MyColors
+                                                                            .c999999,
+                                                                        fontSize:
+                                                                            15),
+                                                                  ),
+                                                                ),
+                                                              ],
+                                                            ),
+                                                            GestureDetector(
+                                                              onTap: () {
+                                                                referrer.recommenderPic =
+                                                                    '';
+                                                                referrer.recommenderName =
+                                                                    '';
+                                                                referrer
+                                                                    .recommenderUid = 0;
+                                                                setState(() {});
+                                                              },
+                                                              behavior:
+                                                                  HitTestBehavior
+                                                                      .translucent,
+                                                              child: Container(
+                                                                decoration: BoxDecoration(
+                                                                    color: MyColors
+                                                                        .cFF4233,
+                                                                    borderRadius:
+                                                                        BorderRadius.circular(
+                                                                            15)),
+                                                                height: 30,
+                                                                width: 60,
+                                                                child: Text(
+                                                                  '移除',
+                                                                  style: TextStyle(
+                                                                      color: Colors
+                                                                          .white,
+                                                                      fontSize:
+                                                                          10),
+                                                                ),
+                                                                alignment:
+                                                                    Alignment
+                                                                        .center,
+                                                              ),
+                                                            )
+                                                          ],
+                                                          mainAxisAlignment:
+                                                              MainAxisAlignment
+                                                                  .spaceBetween,
+                                                        ),
+                                            )),
+                                      )
+                                    ],
+                                  ),
+                                ),
+                              ],
+                            ),
+                          )
                         ],
                       ),
                     ),
-                    GestureDetector(
-                      onTap: () {
-                        if (_name.text.isEmpty) {
-                          showToast('昵称为空');
-                          return;
-                        } else {
-                          updateMemberName();
-                        }
-                      },
-                      behavior: HitTestBehavior.translucent,
-                      child: Container(
-                        decoration: BoxDecoration(
-                          color: MyColors.cFF4233,
-                          borderRadius: BorderRadius.all(Radius.circular(22.5)),
-                        ),
-                        height: 45,
-                        margin:
-                            EdgeInsets.symmetric(horizontal: 73, vertical: 33),
-                        child: Text(
-                          '保 存',
-                          style: TextStyle(color: Colors.white, fontSize: 15),
+                    Row(children: [
+                      Expanded(
+                        child: GestureDetector(
+                          onTap: () {
+                            if (_name.text.isEmpty) {
+                              showToast('昵称为空');
+                              return;
+                            } else {
+                              saveReferrer();
+                            }
+                          },
+                          behavior: HitTestBehavior.translucent,
+                          child: Container(
+                            decoration: BoxDecoration(
+                              color: MyColors.cFF4233,
+                              borderRadius: BorderRadius.all(Radius.circular(22.5)),
+                            ),
+                            height: 45,
+                            margin:
+                            EdgeInsets.symmetric(horizontal: 10),
+                            child: Text(
+                              '保 存',
+                              style: TextStyle(color: Colors.white, fontSize: 15),
+                            ),
+                            alignment: Alignment.center,
+                          ),
                         ),
-                        alignment: Alignment.center,
                       ),
-                    ),
-                    GestureDetector(
-                      onTap: () {
-                        MyShopBeanDataData chatWith = MyShopBeanDataData();
-                        chatWith.userName = widget.member.userName;
-                        chatWith.userUid = widget.member.userUid;
-                        chatWith.userPic = widget.member.userPic;
-                        MyTools().toPage(context, ChatPage(chatWith, null),
-                            (then) {
-                          var now = new DateTime.now();
-                          MyCookie().prefs.setString(
-                              '${MyCookie().getUID()}_${chatWith.userUid}',
-                              now.toString().substring(0, 19));
-                        });
-                      },
-                      behavior: HitTestBehavior.translucent,
-                      child: Container(
-                        decoration: BoxDecoration(
-                          color: MyColors.cFF4233,
-                          borderRadius: BorderRadius.all(Radius.circular(22.5)),
-                        ),
-                        height: 45,
-                        margin:
-                            EdgeInsets.symmetric(horizontal: 73, vertical: 0),
-                        child: Text(
-                          '联 系',
-                          style: TextStyle(color: Colors.white, fontSize: 15),
+                      Expanded(
+                        child: GestureDetector(
+                          onTap: () {
+                            MyShopBeanDataData chatWith = MyShopBeanDataData();
+                            chatWith.userName = widget.member.userName;
+                            chatWith.userUid = widget.member.userUid;
+                            chatWith.userPic = widget.member.userPic;
+                            MyTools().toPage(context, ChatPage(chatWith, null),
+                                    (then) {
+                                  var now = new DateTime.now();
+                                  MyCookie().prefs.setString(
+                                      '${MyCookie().getUID()}_${chatWith.userUid}',
+                                      now.toString().substring(0, 19));
+                                });
+                          },
+                          behavior: HitTestBehavior.translucent,
+                          child: Container(
+                            decoration: BoxDecoration(
+                              color: MyColors.cFF4233,
+                              borderRadius: BorderRadius.all(Radius.circular(22.5)),
+                            ),
+                            height: 45,
+                            margin:
+                            EdgeInsets.symmetric(horizontal: 10),
+                            child: Text(
+                              '联 系',
+                              style: TextStyle(color: Colors.white, fontSize: 15),
+                            ),
+                            alignment: Alignment.center,
+                          ),
                         ),
-                        alignment: Alignment.center,
                       ),
-                    )
+                    ],)
                   ],
                 ),
               ),
@@ -234,7 +387,7 @@ class _MemberDetailsPageState extends State<MemberDetailsPage> {
   }
 
   void updateMemberName() {
-    if(user==null){
+    if (user == null) {
       showToast('用户信息获取失败');
       return;
     }
@@ -270,4 +423,20 @@ class _MemberDetailsPageState extends State<MemberDetailsPage> {
       }
     }, (error) {});
   }
+
+  void saveReferrer() {
+    MyDio().update({
+      "key": "shop_user",
+      "values": {
+        'id': widget.member.id,
+        'recommender_uid': referrer.recommenderUid,
+        'recommender_name': referrer.recommenderName,
+        'recommender_pic': referrer.recommenderPic,
+      }
+    }, (response, hasError) {
+      updateMemberName();
+    }, (error) {
+      updateMemberName();
+    });
+  }
 }

+ 6 - 2
lib/paegs/gang_page/gang_in_page/gang_information_page/member_list_page/member_list_page.dart

@@ -21,8 +21,9 @@ import 'member_details_page.dart';
 class MemberListPage extends StatefulWidget {
   StoreBeanDataData store;
   bool isAll;
+  bool isPartner = false;
 
-  MemberListPage(this.store, this.isAll);
+  MemberListPage(this.store, this.isAll,{this.isPartner});
 
   @override
   _MemberListPageState createState() => _MemberListPageState(store, isAll);
@@ -55,7 +56,7 @@ class _MemberListPageState extends State<MemberListPage> {
       child: Scaffold(
         body: Column(
           children: [
-            MyViews().myAppBar('货帮成员', context, []),
+            MyViews().myAppBar(widget.isPartner?'合伙人':'货帮成员', context, []),
             Expanded(
               child: Column(
                 children: [
@@ -207,6 +208,9 @@ class _MemberListPageState extends State<MemberListPage> {
         "conditions":conditions
       };
     }
+    if(widget.isPartner){
+      conditions.add('role == $shopUserPartner');
+    }
     MyDio().query({
       "key": "shop_user",
       "filters": filters,

+ 136 - 0
lib/paegs/gang_page/gang_in_page/gang_information_page/member_list_page/set_recommended_person_page.dart

@@ -0,0 +1,136 @@
+import 'dart:convert';
+
+import 'package:bbyyy/beans/my_shop_bean_entity.dart';
+import 'package:bbyyy/https/MyDio.dart';
+import 'package:bbyyy/https/url.dart';
+import 'package:bbyyy/my_tools/const.dart';
+import 'package:bbyyy/my_tools/dims.dart';
+import 'package:bbyyy/my_tools/my_colors.dart';
+import 'package:bbyyy/my_tools/my_cookie.dart';
+import 'package:bbyyy/my_tools/my_views.dart';
+import 'package:flutter/material.dart';
+
+class SetRecommendedPersonPage extends StatefulWidget {
+  MyShopBeanDataData member;
+
+  SetRecommendedPersonPage(this.member);
+
+  @override
+  _SetRecommendedPersonPageState createState() =>
+      _SetRecommendedPersonPageState();
+}
+
+class _SetRecommendedPersonPageState extends State<SetRecommendedPersonPage> {
+  List<MyShopBeanDataData> memberList = [];
+
+  @override
+  void initState() {
+    super.initState();
+    queryCargoHelperMembers();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      body: Column(
+        children: [
+          MyViews().myAppBar('选择推荐人', context, []),
+          Expanded(
+            child: ListView.builder(
+              padding: EdgeInsets.symmetric(vertical: 10),
+              itemBuilder: (BuildContext context, int index) {
+                return GestureDetector(
+                  onTap: (){
+                    Navigator.pop(context,memberList[index]);
+                  },
+                  behavior: HitTestBehavior.translucent,
+                  child: Container(
+                    padding: EdgeInsets.only(left: 15, right: 15),
+                    color: Colors.white,
+                    child: Column(
+                      children: [
+                        Container(
+                          margin: EdgeInsets.only(top: 8, bottom: 6),
+                          child: Row(
+                            children: [
+                              Row(
+                                children: [
+                                  Container(
+                                    margin: EdgeInsets.only(right: 6),
+                                    child: ClipRRect(
+                                      child: MyViews().netImg(
+                                          imgURL(memberList[index].userPic),
+                                          42,
+                                          42),
+                                      borderRadius: BorderRadius.circular(21),
+                                    ),
+                                  ),
+                                  MyViews().myText(
+                                      '${memberList[index].userName} ${memberList[index].ownerUid == MyCookie().getUID() ? '(${memberList[index].userUid})' : ''}',
+                                      MyColors.c333333,
+                                      15),
+                                  Visibility(
+                                    visible:
+                                        memberList[index].role != shopUserMember,
+                                    child: Container(
+                                      decoration: BoxDecoration(
+                                          color: memberList[index].role ==
+                                                  shopUserStaff
+                                              ? MyColors.cFF4233
+                                              : MyColors.cFFCD00,
+                                          borderRadius: BorderRadius.circular(8)),
+                                      height: 16,
+                                      width: 30,
+                                      child: MyViews().myText(
+                                          memberList[index].role == shopUserOwner
+                                              ? "帮主"
+                                              : "助手",
+                                          Colors.white,
+                                          10),
+                                      alignment: Alignment.center,
+                                      margin: EdgeInsets.only(left: 5),
+                                    ),
+                                  )
+                                ],
+                              ),
+                            ],
+                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                          ),
+                        ),
+                        Container(
+                          height: 0.5,
+                          color: MyColors.cE7E7E7,
+                        )
+                      ],
+                    ),
+                  ),
+                );
+              },
+              itemCount: memberList.length,
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+
+  void queryCargoHelperMembers() {
+    MyDio().query({
+      "key": "shop_user",
+      "filters": {
+        "conditions": ["shop_uid==${widget.member.shopUid}", "review_state==1"]
+      },
+      "dims": shopUserDims,
+      "paging": [1, 2000]
+    }, (response, hasError) {
+      if (!hasError) {
+        MyShopBeanEntity entity =
+            MyShopBeanEntity().fromJson(json.decode(response.data.toString()));
+        memberList.addAll(entity.data.data);
+        memberList
+            .removeWhere((element) => element.userUid == widget.member.userUid);
+        setState(() {});
+      }
+    }, (error) {});
+  }
+}

+ 169 - 0
lib/paegs/gang_page/gang_in_page/gang_information_page/remove_partner_page/remove_partner_page.dart

@@ -0,0 +1,169 @@
+import 'dart:convert';
+
+import 'package:azlistview/azlistview.dart';
+import 'package:bbyyy/beans/my_shop_bean_entity.dart';
+import 'package:bbyyy/https/MyDio.dart';
+import 'package:bbyyy/https/url.dart';
+import 'package:bbyyy/my_tools/const.dart';
+import 'package:bbyyy/my_tools/dims.dart';
+import 'package:bbyyy/my_tools/my_colors.dart';
+import 'package:bbyyy/my_tools/my_tools.dart';
+import 'package:bbyyy/my_tools/my_views.dart';
+import 'package:flutter/material.dart';
+import 'package:lpinyin/lpinyin.dart';
+
+class RemovePartnerPage extends StatefulWidget {
+  MyShopBeanDataData data;
+  RemovePartnerPage(this.data);
+
+
+  @override
+  _RemovePartnerPageState createState() => _RemovePartnerPageState();
+}
+
+class _RemovePartnerPageState extends State<RemovePartnerPage> {
+  List<MyShopBeanDataData> member = [];
+
+  @override
+  void initState() {
+    // TODO: implement initState
+    super.initState();
+    queryCargoHelperMembers();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      body: Column(
+        children: [
+          MyViews().myAppBar('移除合伙人', context, []),
+          Expanded(
+            child: AzListView(
+              padding: EdgeInsets.symmetric(vertical: 10),
+              itemBuilder: (c, index) {
+                return Container(
+                  padding: EdgeInsets.only(left: 15, right: 15),
+                  color: Colors.white,
+                  child: Column(
+                    children: [
+                      Container(
+                        margin: EdgeInsets.only(top: 8, bottom: 6),
+                        child: Row(
+                          children: [
+                            Row(
+                              children: [
+                                Container(
+                                  margin: EdgeInsets.only(right: 6),
+                                  child: ClipRRect(
+                                    child: MyViews().netImg(
+                                        imgURL(member[index].userPic), 42, 42),
+                                    borderRadius: BorderRadius.circular(21),
+                                  ),
+                                ),
+                                MyViews().myText(
+                                    '${member[index].userName} (${member[index].userUid})',
+                                    MyColors.c333333,
+                                    15),
+                              ],
+                            ),
+                            GestureDetector(
+                              onTap: () {
+                                setAsAPartner(member[index]);
+                              },
+                              behavior: HitTestBehavior.translucent,
+                              child: Container(
+                                decoration: BoxDecoration(
+                                    color: MyColors.cFF4233,
+                                    borderRadius: BorderRadius.circular(15)),
+                                height: 30,
+                                padding: EdgeInsets.symmetric(horizontal: 10),
+                                margin: EdgeInsets.only(right: 20),
+                                child: Text(
+                                  '删除合伙人',
+                                  style: TextStyle(
+                                      color: Colors.white, fontSize: 12),
+                                ),
+                                alignment: Alignment.center,
+                              ),
+                            )
+                          ],
+                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                        ),
+                      ),
+                      Container(
+                        height: 0.5,
+                        color: MyColors.cE7E7E7,
+                      )
+                    ],
+                  ),
+                );
+              },
+              itemCount: member.length,
+              data: member,
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+
+  queryCargoHelperMembers() {
+    MyDio().query({
+      "key": "shop_user",
+      "filters": {
+        "conditions": [
+          "shop_uid==${widget.data.shopUid}",
+          "review_state==1",
+          'role==$shopUserPartner'
+        ]
+      },
+      "dims": shopUserDims,
+      "paging": [1, 2000]
+    }, (response, hasError) {
+      if (!hasError) {
+        MyShopBeanEntity entity =
+        MyShopBeanEntity().fromJson(json.decode(response.data.toString()));
+        member = entity.data.data;
+        _handleList(member);
+        setState(() {});
+      }
+    }, (error) {});
+  }
+
+  void _handleList(List<MyShopBeanDataData> list) {
+    if (list.isEmpty) return;
+    for (int i = 0, length = list.length; i < length; i++) {
+      String pinyin = PinyinHelper.getPinyinE(list[i].userName);
+      String tag = pinyin.substring(0, 1).toUpperCase();
+      if (RegExp('[A-Z]').hasMatch(tag)) {
+        list[i].tagIndex = tag;
+      } else {
+        list[i].tagIndex = '#';
+      }
+    }
+    // A-Z sort.
+    SuspensionUtil.sortListBySuspensionTag(list);
+
+    // show sus tag.
+    SuspensionUtil.setShowSuspensionStatus(member);
+
+    setState(() {});
+  }
+
+  void setAsAPartner(MyShopBeanDataData member) {
+    MyDio().update({
+      "key": "shop_user",
+      "values": {
+        "id": member.id,
+        'role':shopUserMember ,
+      }
+    }, (response, hasError) {
+      if(!hasError){
+        this.member.remove(member);
+        setState(() {
+          showToast('设置成功');
+        });
+      }
+    }, (error) {});
+  }
+}

+ 555 - 0
lib/paegs/gang_page/gang_in_page/shop_flow_page/shop_flow_page.dart

@@ -0,0 +1,555 @@
+import 'dart:convert';
+import 'dart:math' as math;
+
+import 'package:bbyyy/beans/flow_bean_entity.dart';
+import 'package:bbyyy/beans/my_shop_bean_entity.dart';
+import 'package:bbyyy/beans/store_bean_entity.dart';
+import 'package:bbyyy/https/MyDio.dart';
+import 'package:bbyyy/https/url.dart';
+import 'package:bbyyy/my_tools/const.dart';
+import 'package:bbyyy/my_tools/dims.dart';
+import 'package:bbyyy/my_tools/my_colors.dart';
+import 'package:bbyyy/my_tools/my_cookie.dart';
+import 'package:bbyyy/my_tools/my_tools.dart';
+import 'package:bbyyy/my_tools/my_views.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_svg/svg.dart';
+import 'package:pull_to_refresh/pull_to_refresh.dart';
+
+class ShopFlowPage extends StatefulWidget {
+  MyShopBeanDataData data;
+  ShopFlowPage(this.data);
+
+  @override
+  _ShopFlowPageState createState() => _ShopFlowPageState();
+}
+
+class _ShopFlowPageState extends State<ShopFlowPage> {
+  int page = 1;
+  int total = 0;
+  double totalAmount = 0.0;
+  RefreshController controller = RefreshController(initialRefresh: true);
+  List<FlowBeanDataDataRecords> flow = [];
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      body: Column(
+        children: [
+          Stack(
+            children: [
+              Container(
+                decoration: BoxDecoration(
+                  gradient: LinearGradient(colors: MyColors.lg),
+                ),
+                height: 170,
+              ),
+              Column(
+                children: [
+                  SafeArea(
+                    bottom: false,
+                    child: Container(
+                      height: 45,
+                      width: double.infinity,
+                      color: Colors.transparent,
+                      child: Stack(
+                        children: [
+                          Text(
+                            '资金流水',
+                            style: TextStyle(color: Colors.white, fontSize: 16),
+                          ),
+                          Positioned(
+                            left: 0,
+                            child: GestureDetector(
+                              onTap: () {
+                                Navigator.pop(context);
+                              },
+                              behavior: HitTestBehavior.translucent,
+                              child: Transform.rotate(
+                                angle: math.pi,
+                                child: Padding(
+                                  padding: EdgeInsets.only(
+                                      left: 16, right: 16, top: 8, bottom: 8),
+                                  child: SvgPicture.asset(
+                                    'images/svg/箭头.svg',
+                                    color: Colors.white,
+                                    height: 14,
+                                  ),
+                                ),
+                              ),
+                            ),
+                          ),
+                          Row(
+                            children: [
+                              GestureDetector(
+                                onTap: () {
+                                  showSelect();
+                                },
+                                behavior: HitTestBehavior.translucent,
+                                child: Container(
+                                  padding: EdgeInsets.symmetric(
+                                      vertical: 8, horizontal: 16),
+                                  child: Text(
+                                    '筛选',
+                                    style: TextStyle(
+                                        color: Colors.white, fontSize: 16),
+                                  ),
+                                ),
+                              ),
+                            ],
+                            mainAxisAlignment: MainAxisAlignment.end,
+                          )
+                        ],
+                        alignment: Alignment.center,
+                      ),
+                    ),
+                  ),
+                  Container(
+                    margin: EdgeInsets.only(top: 10),
+                    child: Center(
+                      child: Text(
+                        '总额:$totalAmount',
+                        style: TextStyle(color: Colors.white, fontSize: 20),
+                      ),
+                    ),
+                  ),
+                  Container(
+                    margin: EdgeInsets.only(top: 10),
+                    child: Center(
+                      child: Text(
+                        '共$total笔',
+                        style: TextStyle(color: Colors.white, fontSize: 20),
+                      ),
+                    ),
+                  ),
+                ],
+              )
+            ],
+          ),
+          Expanded(
+            child: SmartRefresher(
+              controller: controller,
+              onRefresh: onRefresh,
+              onLoading: onLoading,
+              enablePullDown: true,
+              enablePullUp: true,
+              child: flow.length == 0
+                  ? SingleChildScrollView(child: noData())
+                  : ListView.builder(
+                      itemBuilder: (c, index) {
+                        return Container(
+                          padding: EdgeInsets.symmetric(horizontal: 15),
+                          child: Column(
+                            children: [
+                              Row(
+                                children: [
+                                  Container(
+                                    child: ClipRRect(
+                                      child: flow[index].userUid == 0
+                                          ? Image.asset(
+                                        'images/app_logo.png',
+                                        width: 50,
+                                        height: 50,
+                                      )
+                                          : MyViews().netImg(imgURL(flow[index].userPic), 50, 50),
+                                      borderRadius: BorderRadius.all(Radius.circular(25)),
+                                    ),
+                                    margin: EdgeInsets.only(right: 12),
+                                  ),
+                                  Expanded(
+                                    child: Column(
+                                      children: [
+                                        Row(
+                                          children: [
+                                            Expanded(
+                                              child: Text(
+                                                flow[index].userUid == 0 ? '平台' : flow[index].userName,
+                                                style: TextStyle(
+                                                    color: MyColors.c333333, fontSize: 14),
+                                                maxLines: 1,
+                                                overflow: TextOverflow.ellipsis,
+                                                softWrap: true,
+                                              ),
+                                            ),
+                                            Text(
+                                              '${flow[index].paidAmount}',
+                                              style: TextStyle(
+                                                  color: flow[index].paidAmount > 0
+                                                      ? MyColors.cff3646
+                                                      : MyColors.c237C02,
+                                                  fontSize: 15,
+                                                  fontWeight: FontWeight.bold),
+                                            ),
+                                          ],
+                                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                        ),
+                                        Row(
+                                          children: [
+                                            Text(
+                                              flow[index].userUid == 0 ? "" : 'ID:${hideUID(flow[index].userUid.toString())}',
+                                              style:
+                                              TextStyle(color: MyColors.c666666, fontSize: 12),
+                                            ),
+                                            Text(
+                                              flow[index].payTime,
+                                              style:
+                                              TextStyle(color: MyColors.c666666, fontSize: 11),
+                                            ),
+                                          ],
+                                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                        ),
+                                        Row(
+                                          children: [
+                                            Text(
+                                              '${flowType(flow[index].type)}',
+                                              style:
+                                              TextStyle(color: MyColors.c666666, fontSize: 12),
+                                            ),
+                                            if(flow[index].userUid!=0)
+                                            Text(
+                                              '${flow[index].userBalance}',
+                                              style:
+                                              TextStyle(color: MyColors.c666666, fontSize: 11),
+                                            ),
+                                          ],
+                                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                        )
+                                      ],
+                                    ),
+                                  )
+                                ],
+                              ),
+                              Container(
+                                color: MyColors.cE7E7E7,
+                                height: 0.5,
+                                margin: EdgeInsets.only(top: 14, bottom: 12),
+                              )
+                            ],
+                          ),
+                        );
+                      },
+                      padding: EdgeInsets.only(top: 13),
+                      itemCount: flow.length,
+                    ),
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+
+  StateSetter ss;
+  List<String> types = ['全部', '订单', '佣金'];
+  int typeIndex = 0;
+  List<String> times = ['全部', '今天', '昨天', '本周', '上周', '本月'];
+  int timeIndex = 0;
+
+  void showSelect() {
+    showModalBottomSheet(
+        backgroundColor: Colors.transparent,
+        context: context,
+        builder: (context) {
+          return StatefulBuilder(builder: (c, s) {
+            ss = s;
+            return Container(
+              color: Colors.transparent,
+              height: 240 +
+                  (MediaQuery.of(context).size.width / 3 / 2.5) *
+                      ((types.length / 3).ceil()),
+              child: Column(
+                children: [
+                  Container(
+                    padding:
+                        EdgeInsets.only(left: 10, right: 10, top: 3, bottom: 0),
+                    decoration: BoxDecoration(
+                        color: Colors.white,
+                        borderRadius: BorderRadius.only(
+                            topLeft: Radius.circular(8),
+                            topRight: Radius.circular(8))),
+                    child: Row(
+                      children: [
+                        GestureDetector(
+                          onTap: () {
+                            Navigator.pop(context);
+                          },
+                          behavior: HitTestBehavior.translucent,
+                          child: Padding(
+                            padding: const EdgeInsets.all(8.0),
+                            child: Text(
+                              '取消',
+                              style: TextStyle(
+                                  color: MyColors.cFF4233, fontSize: 14),
+                            ),
+                          ),
+                        ),
+                        Text(
+                          '类型筛选',
+                          style:
+                              TextStyle(color: MyColors.c333333, fontSize: 16),
+                        ),
+                        GestureDetector(
+                          child: Padding(
+                            padding: const EdgeInsets.all(8.0),
+                            child: Text(
+                              '确定',
+                              style: TextStyle(
+                                  color: MyColors.cFF4233, fontSize: 14),
+                            ),
+                          ),
+                          behavior: HitTestBehavior.translucent,
+                          onTap: () {
+                            Navigator.pop(context);
+                            controller.requestRefresh();
+                          },
+                        ),
+                      ],
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                    ),
+                    height: 39.5,
+                  ),
+                  Container(
+                    height: 0.5,
+                    color: MyColors.cF5F5F5,
+                  ),
+                  Expanded(
+                    child: Container(
+                      color: Colors.white,
+                      child: SingleChildScrollView(
+                        child: Column(
+                          children: [
+                            Visibility(
+                              visible: types.length > 1,
+                              child: Container(
+                                height: 20 +
+                                    (MediaQuery.of(context).size.width /
+                                            3 /
+                                            2.5) *
+                                        ((types.length / 3).ceil()),
+                                color: Colors.white,
+                                child: Column(
+                                  children: [
+                                    Container(
+                                      child: Text(
+                                        '类型筛选',
+                                        style: TextStyle(
+                                            color: MyColors.c333333,
+                                            fontSize: 15),
+                                      ),
+                                      margin: EdgeInsets.only(
+                                          left: 18, top: 5, bottom: 5),
+                                      height: 20,
+                                    ),
+                                    Expanded(
+                                      child: GridView(
+                                        gridDelegate:
+                                            SliverGridDelegateWithFixedCrossAxisCount(
+                                                crossAxisCount: 3,
+                                                childAspectRatio: 3),
+                                        children: getTypeItems(),
+                                        physics: NeverScrollableScrollPhysics(),
+                                      ),
+                                    )
+                                  ],
+                                  crossAxisAlignment: CrossAxisAlignment.start,
+                                ),
+                              ),
+                            ),
+                            Visibility(
+                              visible: times.length > 1,
+                              child: Container(
+                                height: 20 +
+                                    (MediaQuery.of(context).size.width /
+                                            3 /
+                                            2.5) *
+                                        ((times.length / 3).ceil()),
+                                color: Colors.white,
+                                child: Column(
+                                  children: [
+                                    Container(
+                                      child: Text(
+                                        '时间筛选',
+                                        style: TextStyle(
+                                            color: MyColors.c333333,
+                                            fontSize: 15),
+                                      ),
+                                      margin: EdgeInsets.only(
+                                          left: 18, top: 5, bottom: 5),
+                                      height: 20,
+                                    ),
+                                    Expanded(
+                                      child: GridView(
+                                        gridDelegate:
+                                            SliverGridDelegateWithFixedCrossAxisCount(
+                                                crossAxisCount: 3,
+                                                childAspectRatio: 3),
+                                        children: getTimeItems(),
+                                        physics: NeverScrollableScrollPhysics(),
+                                      ),
+                                    )
+                                  ],
+                                  crossAxisAlignment: CrossAxisAlignment.start,
+                                ),
+                              ),
+                            ),
+                          ],
+                          crossAxisAlignment: CrossAxisAlignment.start,
+                        ),
+                      ),
+                    ),
+                  )
+                ],
+              ),
+            );
+          });
+        });
+  }
+
+  getTypeItems() {
+    List<Widget> item = [];
+    for (int i = 0; i < types.length; i++) {
+      item.add(GestureDetector(
+        onTap: () {
+          ss(() {
+            if (typeIndex == i) {
+              typeIndex = -1;
+            } else {
+              typeIndex = i;
+            }
+          });
+          // getTime(timeIndex);
+        },
+        behavior: HitTestBehavior.translucent,
+        child: Container(
+          alignment: Alignment.center,
+          child: Container(
+            decoration: BoxDecoration(
+                color: i == typeIndex ? MyColors.cFFECEB : MyColors.cEDEDED,
+                borderRadius: BorderRadius.all(Radius.circular(4))),
+            height: 34,
+            width: 100,
+            child: Text(
+              types[i],
+              style: TextStyle(
+                  color: i == typeIndex ? MyColors.cFF4233 : MyColors.c666666,
+                  fontSize: 14),
+            ),
+            alignment: Alignment.center,
+          ),
+        ),
+      ));
+    }
+    return item;
+  }
+
+  getTimeItems() {
+    List<Widget> item = [];
+    for (int i = 0; i < times.length; i++) {
+      item.add(GestureDetector(
+        onTap: () {
+          ss(() {
+            if (timeIndex == i) {
+              timeIndex = -1;
+            } else {
+              timeIndex = i;
+            }
+          });
+          if (timeIndex != 0) {
+            getTime(timeIndex - 1);
+          }
+        },
+        behavior: HitTestBehavior.translucent,
+        child: Container(
+          alignment: Alignment.center,
+          child: Container(
+            decoration: BoxDecoration(
+                color: i == timeIndex ? MyColors.cFFECEB : MyColors.cEDEDED,
+                borderRadius: BorderRadius.all(Radius.circular(4))),
+            height: 34,
+            width: 100,
+            child: Text(
+              times[i],
+              style: TextStyle(
+                  color: i == timeIndex ? MyColors.cFF4233 : MyColors.c666666,
+                  fontSize: 14),
+            ),
+            alignment: Alignment.center,
+          ),
+        ),
+      ));
+    }
+    return item;
+  }
+
+  void myFlow() {
+    var conditions = [
+      'shop_uid == ${widget.data.shopUid}'
+    ];
+    if (typeIndex != 0 && typeIndex != -1) {
+      conditions.add("type IN ${typeIndex == 1 ? [
+          flowTypeOrderCommodity,
+          flowTypeOrderAnnualFee,
+          flowTypeOrderVirtualProduct,
+          flowTypeOrderThirdPlatform,
+          flowTypeOrderOfflineTransfer,
+          flowTypeScancodeAilyPay
+        ] : [flowTypeShopCommission]}");
+    }
+    if (timeIndex != 0 && timeIndex != -1) {
+      conditions.add("pay_time between ${getTime(timeIndex - 1)}");
+    }
+    MyDio().query({
+      "key": "flow",
+      "filters": {"conditions": conditions},
+      "dims": flowDims,
+      "order_by": ["id,DESC"],
+      "paging": [page, 50]
+    }, (response, hasError) {
+      if (!hasError) {
+        FlowBeanEntity entity =
+            FlowBeanEntity().fromJson(json.decode(response.data.toString()));
+        total = entity.data.total;
+        totalAmount = entity.data.data.totalAmount;
+        if (page == 1) {
+          flow.clear();
+        }
+        try {
+          flow.addAll(entity.data.data.records);
+        } catch (e) {}
+        setState(() {});
+      }
+      endRe(controller);
+    }, (error) {});
+  }
+
+  void onRefresh() {
+    page = 1;
+    checkIfYouAreTheOwner();
+    myFlow();
+  }
+
+  void onLoading() {
+    page++;
+    myFlow();
+  }
+
+  void checkIfYouAreTheOwner() {
+    MyDio().query({
+      "key": "shop",
+      "filters": {
+        "conditions": ["owner_uid == ${MyCookie().getUID()}"]
+      },
+      "dims": shopDims,
+      "paging": [1, 5000]
+    }, (response, hasError) {
+      if (!hasError) {
+        StoreBeanEntity entity =
+            StoreBeanEntity().fromJson(json.decode(response.data.toString()));
+        if (entity.data.data.length == 0) {
+          types.remove('佣金');
+        }
+        setState(() {});
+      }
+      endRe(controller);
+    }, (error) {});
+  }
+}

+ 5 - 0
lib/paegs/mine_page/mine_page.dart

@@ -17,6 +17,7 @@ import 'package:bbyyy/paegs/mine_page/my_information_page/my_information_page.da
 import 'package:bbyyy/paegs/mine_page/order_page/order_page.dart';
 import 'package:bbyyy/paegs/mine_page/promotion_download_page/promotion_download_page.dart';
 import 'package:bbyyy/paegs/mine_page/punish_page/punish_page.dart';
+import 'package:bbyyy/paegs/mine_page/referrer_page/referrer_page.dart';
 import 'package:bbyyy/paegs/mine_page/set_page/set_page.dart';
 import 'package:bbyyy/paegs/mine_page/wallet_page/wallet_page.dart';
 import 'package:bbyyy/paegs/mine_page/wallet_page/withdraw_page/withdraw_page.dart';
@@ -328,6 +329,10 @@ class _MinePageState extends State<MinePage> {
                       queryPersonalInformation();
                     });
                   }),
+                  functionItem('images/svg/推荐人.svg', '推荐人', () {
+                    MyTools().toPage(context, ReferrerPage(), (then) {
+                    });
+                  }),
                   functionItem('images/svg/绑定.svg', '提现账号', () {
                     MyTools().toPage(context, BindAlipayPage(), (then) {
                       queryPersonalInformation();

+ 473 - 0
lib/paegs/mine_page/referrer_page/referrer_flow_page.dart

@@ -0,0 +1,473 @@
+import 'dart:convert';
+
+import 'package:bbyyy/beans/flow_bean_entity.dart';
+import 'package:bbyyy/beans/my_shop_bean_entity.dart';
+import 'package:bbyyy/beans/store_bean_entity.dart';
+import 'package:bbyyy/beans/user_balance_entity.dart';
+import 'package:bbyyy/https/MyDio.dart';
+import 'package:bbyyy/my_tools/const.dart';
+import 'package:bbyyy/my_tools/dims.dart';
+import 'package:bbyyy/my_tools/my_colors.dart';
+import 'package:bbyyy/my_tools/my_cookie.dart';
+import 'package:bbyyy/my_tools/my_tools.dart';
+import 'package:bbyyy/my_tools/my_views.dart';
+import 'package:bbyyy/pay/pay_tools.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_svg/svg.dart';
+import 'package:pull_to_refresh/pull_to_refresh.dart';
+
+import 'dart:math' as math;
+
+
+class ReferrerFlowPage extends StatefulWidget {
+  MyShopBeanDataData data;
+  ReferrerFlowPage(this.data);
+
+  @override
+  _ReferrerFlowPageState createState() => _ReferrerFlowPageState();
+}
+
+class _ReferrerFlowPageState extends State<ReferrerFlowPage> {
+  int page = 1;
+  int total = 0;
+  double totalAmount = 0.0;
+  RefreshController controller = RefreshController(initialRefresh: true);
+  List<FlowBeanDataDataRecords> flow = [];
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      body: Column(
+        children: [
+          Stack(
+            children: [
+              Container(
+                decoration: BoxDecoration(
+                  gradient: LinearGradient(colors: MyColors.lg),
+                ),
+                height: 170,
+              ),
+              Column(
+                children: [
+                  SafeArea(
+                    bottom: false,
+                    child: Container(
+                      height: 45,
+                      width: double.infinity,
+                      color: Colors.transparent,
+                      child: Stack(
+                        children: [
+                          Text(
+                            '资金流水',
+                            style: TextStyle(color: Colors.white, fontSize: 16),
+                          ),
+                          Positioned(
+                            left: 0,
+                            child: GestureDetector(
+                              onTap: () {
+                                Navigator.pop(context);
+                              },
+                              behavior: HitTestBehavior.translucent,
+                              child: Transform.rotate(
+                                angle: math.pi,
+                                child: Padding(
+                                  padding: EdgeInsets.only(
+                                      left: 16, right: 16, top: 8, bottom: 8),
+                                  child: SvgPicture.asset(
+                                    'images/svg/箭头.svg',
+                                    color: Colors.white,
+                                    height: 14,
+                                  ),
+                                ),
+                              ),
+                            ),
+                          ),
+                          Row(
+                            children: [
+                              GestureDetector(
+                                onTap: () {
+                                  showSelect();
+                                },
+                                behavior: HitTestBehavior.translucent,
+                                child: Container(
+                                  padding: EdgeInsets.symmetric(
+                                      vertical: 8, horizontal: 16),
+                                  child: Text(
+                                    '筛选',
+                                    style: TextStyle(
+                                        color: Colors.white, fontSize: 16),
+                                  ),
+                                ),
+                              ),
+                            ],
+                            mainAxisAlignment: MainAxisAlignment.end,
+                          )
+                        ],
+                        alignment: Alignment.center,
+                      ),
+                    ),
+                  ),
+                  Container(
+                    margin: EdgeInsets.only(top: 10),
+                    child: Center(
+                      child: Text(
+                        '总额:$totalAmount',
+                        style: TextStyle(color: Colors.white, fontSize: 20),
+                      ),
+                    ),
+                  ),
+                  Container(
+                    margin: EdgeInsets.only(top: 10),
+                    child: Center(
+                      child: Text(
+                        '共$total笔',
+                        style: TextStyle(color: Colors.white, fontSize: 20),
+                      ),
+                    ),
+                  ),
+                ],
+              )
+            ],
+          ),
+          Expanded(
+            child: SmartRefresher(
+              controller: controller,
+              onRefresh: onRefresh,
+              onLoading: onLoading,
+              enablePullDown: true,
+              enablePullUp: true,
+              child: flow.length == 0
+                  ? SingleChildScrollView(child: noData())
+                  : ListView.builder(
+                itemBuilder: (c, index) {
+                  return MyViews().getWalletItem(flow[index], context);
+                },
+                padding: EdgeInsets.only(top: 13),
+                itemCount: flow.length,
+              ),
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+
+  StateSetter ss;
+  List<String> types = ['全部', '订单', '佣金'];
+  int typeIndex = 0;
+  List<String> times = ['全部', '今天', '昨天', '本周', '上周', '本月'];
+  int timeIndex = 0;
+
+  void showSelect() {
+    showModalBottomSheet(
+        backgroundColor: Colors.transparent,
+        context: context,
+        builder: (context) {
+          return StatefulBuilder(builder: (c, s) {
+            ss = s;
+            return Container(
+              color: Colors.transparent,
+              height: 240 +
+                  (MediaQuery.of(context).size.width / 3 / 2.5) *
+                      ((types.length / 3).ceil()),
+              child: Column(
+                children: [
+                  Container(
+                    padding:
+                    EdgeInsets.only(left: 10, right: 10, top: 3, bottom: 0),
+                    decoration: BoxDecoration(
+                        color: Colors.white,
+                        borderRadius: BorderRadius.only(
+                            topLeft: Radius.circular(8),
+                            topRight: Radius.circular(8))),
+                    child: Row(
+                      children: [
+                        GestureDetector(
+                          onTap: () {
+                            Navigator.pop(context);
+                          },
+                          behavior: HitTestBehavior.translucent,
+                          child: Padding(
+                            padding: const EdgeInsets.all(8.0),
+                            child: Text(
+                              '取消',
+                              style: TextStyle(
+                                  color: MyColors.cFF4233, fontSize: 14),
+                            ),
+                          ),
+                        ),
+                        Text(
+                          '类型筛选',
+                          style:
+                          TextStyle(color: MyColors.c333333, fontSize: 16),
+                        ),
+                        GestureDetector(
+                          child: Padding(
+                            padding: const EdgeInsets.all(8.0),
+                            child: Text(
+                              '确定',
+                              style: TextStyle(
+                                  color: MyColors.cFF4233, fontSize: 14),
+                            ),
+                          ),
+                          behavior: HitTestBehavior.translucent,
+                          onTap: () {
+                            Navigator.pop(context);
+                            controller.requestRefresh();
+                          },
+                        ),
+                      ],
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                    ),
+                    height: 39.5,
+                  ),
+                  Container(
+                    height: 0.5,
+                    color: MyColors.cF5F5F5,
+                  ),
+                  Expanded(
+                    child: Container(
+                      color: Colors.white,
+                      child: SingleChildScrollView(
+                        child: Column(
+                          children: [
+                            Visibility(
+                              visible: types.length > 1,
+                              child: Container(
+                                height: 20 +
+                                    (MediaQuery.of(context).size.width /
+                                        3 /
+                                        2.5) *
+                                        ((types.length / 3).ceil()),
+                                color: Colors.white,
+                                child: Column(
+                                  children: [
+                                    Container(
+                                      child: Text(
+                                        '类型筛选',
+                                        style: TextStyle(
+                                            color: MyColors.c333333,
+                                            fontSize: 15),
+                                      ),
+                                      margin: EdgeInsets.only(
+                                          left: 18, top: 5, bottom: 5),
+                                      height: 20,
+                                    ),
+                                    Expanded(
+                                      child: GridView(
+                                        gridDelegate:
+                                        SliverGridDelegateWithFixedCrossAxisCount(
+                                            crossAxisCount: 3,
+                                            childAspectRatio: 3),
+                                        children: getTypeItems(),
+                                        physics: NeverScrollableScrollPhysics(),
+                                      ),
+                                    )
+                                  ],
+                                  crossAxisAlignment: CrossAxisAlignment.start,
+                                ),
+                              ),
+                            ),
+                            Visibility(
+                              visible: times.length > 1,
+                              child: Container(
+                                height: 20 +
+                                    (MediaQuery.of(context).size.width /
+                                        3 /
+                                        2.5) *
+                                        ((times.length / 3).ceil()),
+                                color: Colors.white,
+                                child: Column(
+                                  children: [
+                                    Container(
+                                      child: Text(
+                                        '时间筛选',
+                                        style: TextStyle(
+                                            color: MyColors.c333333,
+                                            fontSize: 15),
+                                      ),
+                                      margin: EdgeInsets.only(
+                                          left: 18, top: 5, bottom: 5),
+                                      height: 20,
+                                    ),
+                                    Expanded(
+                                      child: GridView(
+                                        gridDelegate:
+                                        SliverGridDelegateWithFixedCrossAxisCount(
+                                            crossAxisCount: 3,
+                                            childAspectRatio: 3),
+                                        children: getTimeItems(),
+                                        physics: NeverScrollableScrollPhysics(),
+                                      ),
+                                    )
+                                  ],
+                                  crossAxisAlignment: CrossAxisAlignment.start,
+                                ),
+                              ),
+                            ),
+                          ],
+                          crossAxisAlignment: CrossAxisAlignment.start,
+                        ),
+                      ),
+                    ),
+                  )
+                ],
+              ),
+            );
+          });
+        });
+  }
+
+  getTypeItems() {
+    List<Widget> item = [];
+    for (int i = 0; i < types.length; i++) {
+      item.add(GestureDetector(
+        onTap: () {
+          ss(() {
+            if (typeIndex == i) {
+              typeIndex = -1;
+            } else {
+              typeIndex = i;
+            }
+          });
+          // getTime(timeIndex);
+        },
+        behavior: HitTestBehavior.translucent,
+        child: Container(
+          alignment: Alignment.center,
+          child: Container(
+            decoration: BoxDecoration(
+                color: i == typeIndex ? MyColors.cFFECEB : MyColors.cEDEDED,
+                borderRadius: BorderRadius.all(Radius.circular(4))),
+            height: 34,
+            width: 100,
+            child: Text(
+              types[i],
+              style: TextStyle(
+                  color: i == typeIndex ? MyColors.cFF4233 : MyColors.c666666,
+                  fontSize: 14),
+            ),
+            alignment: Alignment.center,
+          ),
+        ),
+      ));
+    }
+    return item;
+  }
+
+  getTimeItems() {
+    List<Widget> item = [];
+    for (int i = 0; i < times.length; i++) {
+      item.add(GestureDetector(
+        onTap: () {
+          ss(() {
+            if (timeIndex == i) {
+              timeIndex = -1;
+            } else {
+              timeIndex = i;
+            }
+          });
+          if (timeIndex != 0) {
+            getTime(timeIndex - 1);
+          }
+        },
+        behavior: HitTestBehavior.translucent,
+        child: Container(
+          alignment: Alignment.center,
+          child: Container(
+            decoration: BoxDecoration(
+                color: i == timeIndex ? MyColors.cFFECEB : MyColors.cEDEDED,
+                borderRadius: BorderRadius.all(Radius.circular(4))),
+            height: 34,
+            width: 100,
+            child: Text(
+              times[i],
+              style: TextStyle(
+                  color: i == timeIndex ? MyColors.cFF4233 : MyColors.c666666,
+                  fontSize: 14),
+            ),
+            alignment: Alignment.center,
+          ),
+        ),
+      ));
+    }
+    return item;
+  }
+
+  void myFlow() {
+
+    var conditions = [
+      // "user_uid==${MyCookie().getUID()}",
+      'recommender_uid == ${widget.data.recommenderUid}',
+      'paid_amount > 0 '
+      // "paid_amount ${sTab == 0 ? '>' : '<'} 0"
+    ];
+    if (typeIndex != 0 && typeIndex != -1) {
+      conditions.add("type IN ${typeIndex == 1 ? [
+      flowTypeOrderCommodity,
+          flowTypeOrderAnnualFee,
+          flowTypeOrderVirtualProduct,
+          flowTypeOrderThirdPlatform,
+          flowTypeOrderOfflineTransfer,
+          flowTypeScancodeAilyPay
+          ] : [flowTypeShopCommission]}");
+    }
+    if (timeIndex != 0 && timeIndex != -1) {
+      conditions.add("pay_time between ${getTime(timeIndex - 1)}");
+    }
+    MyDio().query({
+      "key": "flow",
+      "filters": {"conditions": conditions},
+      "dims": flowDims,
+      "order_by": ["id,DESC"],
+      "paging": [page, 50]
+    }, (response, hasError) {
+      if (!hasError) {
+        FlowBeanEntity entity =
+        FlowBeanEntity().fromJson(json.decode(response.data.toString()));
+        total = entity.data.total;
+        totalAmount = entity.data.data.totalAmount;
+        if (page == 1) {
+          flow.clear();
+        }
+        try {
+          flow.addAll(entity.data.data.records);
+        } catch (e) {}
+        setState(() {});
+      }
+      endRe(controller);
+    }, (error) {});
+  }
+
+  void onRefresh() {
+    page = 1;
+    checkIfYouAreTheOwner();
+    myFlow();
+  }
+
+  void onLoading() {
+    page++;
+    myFlow();
+  }
+
+  void checkIfYouAreTheOwner() {
+    MyDio().query({
+      "key": "shop",
+      "filters": {
+        "conditions": ["owner_uid == ${MyCookie().getUID()}"]
+      },
+      "dims": shopDims,
+      "paging": [1, 5000]
+    }, (response, hasError) {
+      if (!hasError) {
+        StoreBeanEntity entity =
+        StoreBeanEntity().fromJson(json.decode(response.data.toString()));
+        if (entity.data.data.length == 0) {
+          types.remove('佣金');
+        }
+        setState(() {});
+      }
+      endRe(controller);
+    }, (error) {});
+  }
+}

+ 126 - 0
lib/paegs/mine_page/referrer_page/referrer_page.dart

@@ -0,0 +1,126 @@
+import 'dart:convert';
+
+import 'package:bbyyy/beans/my_shop_bean_entity.dart';
+import 'package:bbyyy/https/MyDio.dart';
+import 'package:bbyyy/https/url.dart';
+import 'package:bbyyy/my_tools/dims.dart';
+import 'package:bbyyy/my_tools/my_colors.dart';
+import 'package:bbyyy/my_tools/my_cookie.dart';
+import 'package:bbyyy/my_tools/my_tools.dart';
+import 'package:bbyyy/my_tools/my_views.dart';
+import 'package:bbyyy/paegs/mine_page/referrer_page/referrer_flow_page.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+
+class ReferrerPage extends StatefulWidget {
+  MyShopBeanDataData data;
+  ReferrerPage({this.data});
+
+  @override
+  _ReferrerPageState createState() => _ReferrerPageState();
+}
+
+class _ReferrerPageState extends State<ReferrerPage> {
+  List<MyShopBeanDataData> memberList = [];
+
+  @override
+  void initState() {
+    super.initState();
+    queryRecommender();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      body: Column(
+        children: [
+          MyViews().myAppBar('推荐人列表', context, []),
+          Expanded(
+              child: ListView.builder(
+            itemBuilder: (BuildContext context, int index) {
+              return GestureDetector(
+                onTap: (){
+                  MyTools().toPage(context, ReferrerFlowPage(memberList[index]), (then){});
+                },
+                behavior: HitTestBehavior.translucent,
+                child: Container(
+                  padding: EdgeInsets.only(left: 15, right: 15),
+                  color: Colors.white,
+                  child: Column(
+                    children: [
+                      Container(
+                        margin: EdgeInsets.only(top: 8, bottom: 6),
+                        child: Row(
+                          children: [
+                            Row(
+                              children: [
+                                Container(
+                                  margin: EdgeInsets.only(right: 6),
+                                  child: ClipRRect(
+                                    child: MyViews().netImg(
+                                        imgURL(memberList[index].recommenderPic),
+                                        42,
+                                        42),
+                                    borderRadius: BorderRadius.circular(21),
+                                  ),
+                                ),
+                                MyViews().myText(
+                                    '${memberList[index].recommenderName} (${memberList[index].recommenderUid})',
+                                    MyColors.c333333,
+                                    15),
+                              ],
+                            ),
+                          ],
+                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                        ),
+                      ),
+                      Container(
+                        height: 0.5,
+                        color: MyColors.cE7E7E7,
+                      )
+                    ],
+                  ),
+                ),
+              );
+            },
+            itemCount: memberList.length,
+            padding: EdgeInsets.symmetric(vertical: 10),
+          ))
+        ],
+      ),
+    );
+  }
+
+  void queryRecommender() {
+    var conditions = [
+      "review_state==1",
+      "owner_uid==${MyCookie().getUID()}",
+      "private_shop==true",
+      "recommender_uid!=0"
+    ];
+    if(widget.data!=null){
+      conditions.add('shop_uid == ${widget.data.shopUid}');
+    }
+    MyDio().query({
+      "key": "shop_user",
+      "filters": {
+        "conditions": conditions
+      },
+      "dims": shopUserDims,
+      "paging": [1, 2000]
+    }, (response, hasError) {
+      if (!hasError) {
+        MyShopBeanEntity entity =
+            MyShopBeanEntity().fromJson(json.decode(response.data.toString()));
+        entity.data.data.forEach((element) {
+          int a = memberList.indexWhere(
+              (e) => e.recommenderUid == element.recommenderUid);
+          if (a == -1) {
+            memberList.add(element);
+          }
+        });
+        setState(() {});
+      }
+    }, (error) {});
+  }
+}

+ 3 - 2
lib/paegs/mine_page/wallet_page/wallet_page.dart

@@ -2,6 +2,7 @@ import 'dart:convert';
 import 'dart:math' as math;
 
 import 'package:bbyyy/beans/flow_bean_entity.dart';
+import 'package:bbyyy/beans/my_shop_bean_entity.dart';
 import 'package:bbyyy/beans/store_bean_entity.dart';
 import 'package:bbyyy/beans/user_balance_entity.dart';
 import 'package:bbyyy/https/MyDio.dart';
@@ -535,7 +536,7 @@ class _WalletPageState extends State<WalletPage> {
       "user_uid==${MyCookie().getUID()}",
       // "paid_amount ${sTab == 0 ? '>' : '<'} 0"
     ];
-    if (typeIndex != 0) {
+    if (typeIndex != 0 && typeIndex != -1) {
       conditions.add("type IN ${typeIndex == 1 ? [
           flowTypeOrderCommodity,
           flowTypeOrderAnnualFee,
@@ -545,7 +546,7 @@ class _WalletPageState extends State<WalletPage> {
           flowTypeScancodeAilyPay
         ] : [flowTypeShopCommission]}");
     }
-    if (timeIndex != 0) {
+    if (timeIndex != 0 && timeIndex != -1) {
       conditions.add("pay_time between ${getTime(timeIndex - 1)}");
     }
     MyDio().query({

+ 1 - 1
pubspec.yaml

@@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
 # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
 # Read more about iOS versioning at
 # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
-version: 1.1.07+1
+version: 1.1.08+1
 
 environment:
   sdk: ">=2.7.0 <3.0.0"

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä