Explorar el Código

feat:团队模块

suwadaimyojin hace 2 años
padre
commit
2ffd7e551c
Se han modificado 5 ficheros con 643 adiciones y 2 borrados
  1. 9 1
      api/home.js
  2. 6 0
      mock/json/menu_res.json
  3. 13 0
      pages.json
  4. 1 1
      pages/users/user_directPartner/index.vue
  5. 614 0
      pages/users/user_team/index.vue

+ 9 - 1
api/home.js

@@ -211,4 +211,12 @@ export function doGrab(data) {
 // 直属伙伴
 export function linkedUserList(data) {
 	return request.get('/v1/linked/linkedUserList', data)
-}
+}
+// 直推人数
+export function userRecomPage(data) {
+	return request.get('/v1/userRecom-page', data)
+}
+// 查询自己的创客人数
+export function makerPage(data) {
+	return request.post('/v1/makerPage', data)
+}

+ 6 - 0
mock/json/menu_res.json

@@ -11,6 +11,12 @@
             "name": "我的地址",
             "pic": "https://demo26.crmeb.net/statics/system_images/menu_address.png",
             "url": "/pages/users/user_address_list/index"
+        },
+        {
+            "id": 1166,
+            "name": "团队",
+            "pic": "https://demo26.crmeb.net/statics/system_images/menu_address.png",
+            "url": "/pages/users/user_team/index"
         }
     ],
     "routine_my_banner": [],

+ 13 - 0
pages.json

@@ -884,6 +884,19 @@
 						}
 					}
 				},
+				{
+					"path": "user_team/index",
+					"style": {
+						"navigationBarTitleText": "我的团队",
+						"app-plus": {
+							// #ifdef APP-PLUS
+							"titleNView": {
+								"type": "default"
+							}
+							// #endif
+						}
+					}
+				},
 				{
 					"path": "user_phone/index",
 					"style": {

+ 1 - 1
pages/users/user_directPartner/index.vue

@@ -192,7 +192,7 @@ export default {
             width: 50rpx;
             height: 50rpx;
             line-height: 50rpx;
-            background: #333333;
+            background: rgb(200, 153, 75);
             color: white;
             border-radius: 50%;
           }

+ 614 - 0
pages/users/user_team/index.vue

@@ -0,0 +1,614 @@
+<template>
+  <view :style="colorStyle">
+    <view class="acea-row nav">
+      <view
+        class="acea-row row-center-wrapper"
+        :class="{ on: nav === 1 }"
+        @click="navTab(1)"
+        >团队人数
+      </view>
+      <view
+        class="acea-row row-center-wrapper"
+        :class="{ on: nav === 2 }"
+        @click="navTab(2)"
+        >直荐人数
+      </view>
+      <view
+        class="acea-row row-center-wrapper"
+        :class="{ on: nav === 3 }"
+        @click="navTab(3)"
+        >创客人数
+      </view>
+    </view>
+    <view class="main-body">
+      <view class="number_of_members" v-show="nav === 1">
+        <view class="members_top">
+          <text class="integral">0.0积分</text>
+          <text class="explain">团队收益</text>
+        </view>
+				<view class="members_list">
+          <view
+            class="item acea-row row-between-wrapper"
+            v-for="(item, index) in orderList"
+            :key="index"
+          >
+            <view class="text-info">
+              {{ item.createTime }}
+            </view>
+            <view class="left">
+              <view class="state">
+                <view class="order">{{ index + 1 }}</view>
+                <img :src="item.avatar" alt="" />
+                <view class="s-r">
+                  <text>
+                    {{ item.name }}
+                  </text>
+                </view>
+                <view class="op-area">
+                  <u-button type="primary" shape="circle"> 联系他 </u-button>
+                </view>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+      <view class="direct_of_push" v-show="nav === 2">
+        <view class="push_top">
+          <text class="integral">0.0积分</text>
+          <text class="explain">直推收益</text>
+        </view>
+        <view class="pus_list">
+          <view
+            class="item acea-row row-between-wrapper"
+            v-for="(item, index) in integralList"
+            :key="index"
+          >
+            <view class="text-info">
+              {{ item.createTime }}
+            </view>
+            <view class="left">
+              <view class="state">
+                <view class="order">{{ index + 1 }}</view>
+                <img :src="item.avatar" alt="" />
+                <view class="s-r">
+                  <text>
+                    {{ item.name }}
+                  </text>
+                </view>
+                <view class="op-area">
+                  <u-button type="primary" shape="circle"> 联系他 </u-button>
+                </view>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+      <view class="mark_of_members" v-show="nav === 3">
+        <view class="mark_top">
+          <text class="integral">0.0积分</text>
+          <text class="explain">直推收益</text>
+        </view>
+        <view class="mark_list">
+          <view
+            class="item acea-row row-between-wrapper"
+            v-for="(item, index) in makerList"
+            :key="index"
+          >
+            <view class="text-info">
+              {{ item.createTime }}
+            </view>
+            <view class="left">
+              <view class="state">
+                <view class="order">{{ index + 1 }}</view>
+                <img :src="item.avatar" alt="" />
+                <view class="s-r">
+                  <text>
+                    {{ item.name }}
+                  </text>
+                </view>
+                <view class="op-area">
+                  <u-button type="primary" shape="circle"> 联系他 </u-button>
+                </view>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+<script>
+import {
+  userRecomPage,
+  makerPage
+} from '@/api/home.js';
+import dayjs from '@/plugin/dayjs/dayjs.min.js';
+import {
+  toLogin
+} from '@/libs/login.js';
+import {
+  mapGetters
+} from "vuex";
+// #ifdef MP
+import authorize from '@/components/Authorize';
+// #endif
+import emptyPage from '@/components/emptyPage.vue';
+import colors from '@/mixins/color'
+export default {
+  components: {
+    // #ifdef MP
+    authorize,
+    // #endif
+    emptyPage
+  },
+  filters: {
+    dateFormat: function (value) {
+      return dayjs(value * 1000).format('YYYY-MM-DD');
+    }
+  },
+  mixins: [colors],
+  data () {
+    return {
+      nav: 1, // 1:发票记录 2:抬头管理
+      current: 0,
+      page: 1,
+      limit: 10,
+      integralList: [],
+      userInfo: {},
+      loadend: false,
+      loading: false,
+      loadTitle: this.$t(`加载更多`),
+      isAuto: false, //没有授权的不会自动授权
+      isShowAuth: false, //是否隐藏授权
+      orderList: [],
+      makerList: [],
+      invoiceList: [],
+
+      isTime: 0
+    };
+  },
+  computed: mapGetters(['isLogin']),
+  watch: {
+    nav: {
+      immediate: true,
+      handler (value) {
+        this.page = 1;
+        switch (value) {
+          case 1:
+            this.orderList = [];
+            this.getOrderList();
+            break;
+          case 2:
+            this.invoiceList = [];
+            this.getIntegralList();
+            break;
+          case 3:
+            this.makerList = [];
+            this.getMakerPage();
+            break;
+        }
+      }
+    },
+    isLogin: {
+      handler: function (newV, oldV) {
+        if (newV) {
+          // this.getUserInfo();
+          // this.userRecomPage();
+        }
+      },
+      deep: true
+    }
+  },
+  onLoad () {
+    if (this.isLogin) {
+      // this.getUserInfo();
+      // this.getIntegralList();
+    } else {
+      toLogin();
+    }
+  },
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+  },
+  methods: {
+    // 菜单切换
+    navTab (nav) {
+      if (this.nav !== nav) {
+        this.nav = nav;
+      }
+    },
+    /**
+     * 授权回调
+     */
+    onLoadFun: function () {
+      this.getUserInfo();
+    },
+    // 授权关闭
+    authColse: function (e) {
+      this.isShowAuth = e
+    },
+
+    /**
+     * 获取积分明细
+     */
+
+    getOrderList: function () {
+      let that = this;
+      if (that.loading) return;
+      // if (that.loadend) return;
+      that.loading = true;
+      that.loadTitle = '';
+      userRecomPage({
+        type: 1,
+        userId: this.$store.state.app.uid,
+        current: that.page,
+        size: that.limit
+      }).then(function (res) {
+        let list = res.data,
+          loadend = list.length < that.limit;
+        that.$set(that, 'orderList', list);
+        that.page = that.page + 1;
+        that.loading = false;
+        that.loadend = loadend;
+        that.loadTitle = loadend ? that.$t(`我也是有底线的`) : that.$t(`加载更多`);
+      }, function (res) {
+        this.loading = false;
+        that.loadTitle = that.$t(`加载更多`);
+      });
+    },
+    getIntegralList: function () {
+      let that = this;
+      if (that.loading) return;
+      // if (that.loadend) return;
+      that.loading = true;
+      that.loadTitle = '';
+      userRecomPage({
+        type: 2,
+        userId: this.$store.state.app.uid,
+        current: that.page,
+        size: that.limit
+      }).then(function (res) {
+        let list = res.data,
+          loadend = list.length < that.limit;
+        // that.integralList = that.$util.SplitArray(list, that.integralList);
+        that.$set(that, 'integralList', list);
+        that.page = that.page + 1;
+        that.loading = false;
+        that.loadend = loadend;
+        that.loadTitle = loadend ? that.$t(`我也是有底线的`) : that.$t(`加载更多`);
+      }, function (res) {
+        this.loading = false;
+        that.loadTitle = that.$t(`加载更多`);
+      });
+    },
+    getMakerPage: function () {
+			let that = this;
+			console.log(that.loading,that.loadend);
+      if (that.loading) return;
+      // if (that.loadend) return;
+      that.loading = true;
+      that.loadTitle = '';
+      makerPage({
+        userId: this.$store.state.app.uid,
+        current: that.page,
+        size: that.limit
+      }).then(function (res) {
+        let list = res.data,
+        loadend = list.length < that.limit;
+        // that.makerList = that.$util.SplitArray(list, that.makerList);
+        that.$set(that, 'makerList', list);
+        that.page = that.page + 1;
+        that.loading = false;
+        that.loadend = loadend;
+        that.loadTitle = loadend ? that.$t(`我也是有底线的`) : that.$t(`加载更多`);
+      }, function (res) {
+        this.loading = false;
+        that.loadTitle = that.$t(`加载更多`);
+      });
+    },
+    nav: function (current) {
+      this.current = current;
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.nav {
+  position: fixed;
+  top: 0;
+  left: 0;
+  z-index: 9;
+  width: 100%;
+  height: 90rpx;
+  background-color: #ffffff;
+}
+
+.nav .acea-row {
+  flex: 1;
+  border-top: 3rpx solid transparent;
+  border-bottom: 3rpx solid transparent;
+  font-size: 30rpx;
+  color: #282828;
+}
+
+.nav .on {
+  border-bottom-color: var(--view-theme);
+  color: var(--view-theme);
+}
+
+.main-body {
+  margin-top: 90rpx;
+
+  .number_of_members {
+    .members_top {
+      height: 150rpx;
+      background: white;
+      display: flex;
+      text-align: center;
+      flex-direction: column;
+
+      .integral {
+        flex: 1;
+        color: #ff4b4b;
+        font-size: 38rpx;
+        padding-top: 30rpx;
+      }
+
+      .explain {
+        flex: 2;
+      }
+    }
+		.members_list {
+      .item {
+        line-height: 50rpx;
+        padding: 30rpx;
+        background: white;
+        margin-bottom: 10rpx;
+
+        .text-info {
+          color: #999999;
+          margin-bottom: 10rpx;
+        }
+
+        .left {
+          width: 100%;
+
+          .state {
+            height: 100rpx;
+
+            .order {
+              margin: auto 0;
+              text-align: center;
+              width: 50rpx;
+              height: 50rpx;
+              line-height: 50rpx;
+              background: rgb(200, 153, 75);
+              color: white;
+              border-radius: 50%;
+            }
+
+            display: flex;
+
+            image {
+              margin-left: 30rpx;
+              margin-right: 30rpx;
+              width: 100rpx;
+              height: 100rpx;
+              border-radius: 50%;
+              overflow: hidden;
+            }
+
+            .s-r {
+              font-size: 34rpx;
+              display: flex;
+              flex-direction: column;
+            }
+
+            .op-area {
+              display: flex;
+              justify-content: flex-end;
+              flex-grow: 1;
+
+              /deep/ .u-button {
+                height: 60rpx;
+                width: 200rpx !important;
+                margin: auto 0;
+                font-size: 26rpx;
+              }
+            }
+          }
+        }
+
+        .right {
+          .num {
+            height: 100rpx;
+          }
+        }
+      }
+    }
+  }
+
+  .direct_of_push {
+    .push_top {
+      margin-bottom: 10rpx;
+      height: 150rpx;
+      background: white;
+      display: flex;
+      text-align: center;
+      flex-direction: column;
+
+      .integral {
+        flex: 1;
+        color: #ff4b4b;
+        font-size: 38rpx;
+        padding-top: 30rpx;
+      }
+
+      .explain {
+        flex: 2;
+      }
+    }
+
+    .pus_list {
+      .item {
+        line-height: 50rpx;
+        padding: 30rpx;
+        background: white;
+        margin-bottom: 10rpx;
+
+        .text-info {
+          color: #999999;
+          margin-bottom: 10rpx;
+        }
+
+        .left {
+          width: 100%;
+
+          .state {
+            height: 100rpx;
+
+            .order {
+              margin: auto 0;
+              text-align: center;
+              width: 50rpx;
+              height: 50rpx;
+              line-height: 50rpx;
+              background: rgb(200, 153, 75);
+              color: white;
+              border-radius: 50%;
+            }
+
+            display: flex;
+
+            image {
+              margin-left: 30rpx;
+              margin-right: 30rpx;
+              width: 100rpx;
+              height: 100rpx;
+              border-radius: 50%;
+              overflow: hidden;
+            }
+
+            .s-r {
+              font-size: 34rpx;
+              display: flex;
+              flex-direction: column;
+            }
+
+            .op-area {
+              display: flex;
+              justify-content: flex-end;
+              flex-grow: 1;
+
+              /deep/ .u-button {
+                height: 60rpx;
+                width: 200rpx !important;
+                margin: auto 0;
+                font-size: 26rpx;
+              }
+            }
+          }
+        }
+
+        .right {
+          .num {
+            height: 100rpx;
+          }
+        }
+      }
+    }
+  }
+  .mark_of_members {
+    .mark_top {
+      margin-bottom: 10rpx;
+      height: 150rpx;
+      background: white;
+      display: flex;
+      text-align: center;
+      flex-direction: column;
+
+      .integral {
+        flex: 1;
+        color: #ff4b4b;
+        font-size: 38rpx;
+        padding-top: 30rpx;
+      }
+
+      .explain {
+        flex: 2;
+      }
+    }
+
+    .mark_list {
+      .item {
+        line-height: 50rpx;
+        padding: 30rpx;
+        background: white;
+        margin-bottom: 10rpx;
+
+        .text-info {
+          color: #999999;
+          margin-bottom: 10rpx;
+        }
+
+        .left {
+          width: 100%;
+
+          .state {
+            height: 100rpx;
+
+            .order {
+              margin: auto 0;
+              text-align: center;
+              width: 50rpx;
+              height: 50rpx;
+              line-height: 50rpx;
+              background: rgb(200, 153, 75);
+              color: white;
+              border-radius: 50%;
+            }
+
+            display: flex;
+
+            image {
+              margin-left: 30rpx;
+              margin-right: 30rpx;
+              width: 100rpx;
+              height: 100rpx;
+              border-radius: 50%;
+              overflow: hidden;
+            }
+
+            .s-r {
+              font-size: 34rpx;
+              display: flex;
+              flex-direction: column;
+            }
+
+            .op-area {
+              display: flex;
+              justify-content: flex-end;
+              flex-grow: 1;
+
+              /deep/ .u-button {
+                height: 60rpx;
+                width: 200rpx !important;
+                margin: auto 0;
+                font-size: 26rpx;
+              }
+            }
+          }
+        }
+
+        .right {
+          .num {
+            height: 100rpx;
+          }
+        }
+      }
+    }
+  }
+}
+</style>