From 540a5f3c389e9c69c57d7753271801ad034fe1fe Mon Sep 17 00:00:00 2001
From: leiqingsong <1762842758@qq.com>
Date: Thu, 11 Mar 2021 14:04:23 +0800
Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 H5/package-lock.json                   |   5 ++
 H5/package.json                        |   1 +
 H5/src/api/base.js                     |  14 +++
 H5/src/api/myStatus.js                 |  28 ++++++
 H5/src/api/reward.js                   |  14 +++
 H5/src/api/user.js                     |  31 ++++++-
 H5/src/components/BaseDialog.vue       |   5 +-
 H5/src/router/index.js                 |   4 +-
 H5/src/views/modefyAvatar.vue          |   8 +-
 H5/src/views/my/components/invitee.vue |  19 +++-
 H5/src/views/my/myStatus.vue           | 118 ++++++++++++++++++++++---
 H5/src/views/rewards/month-award.vue   |  54 +++++++++--
 H5/src/views/router.vue                |   3 +
 H5/src/views/settings.vue              |  15 +++-
 14 files changed, 287 insertions(+), 32 deletions(-)
 create mode 100644 H5/src/api/myStatus.js
 create mode 100644 H5/src/api/reward.js

diff --git a/H5/package-lock.json b/H5/package-lock.json
index 2166d9b..3f9c256 100644
--- a/H5/package-lock.json
+++ b/H5/package-lock.json
@@ -11236,6 +11236,11 @@
       "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz",
       "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg=="
     },
+    "vue-count-to": {
+      "version": "1.0.13",
+      "resolved": "https://registry.npmjs.org/vue-count-to/-/vue-count-to-1.0.13.tgz",
+      "integrity": "sha512-6R4OVBVNtQTlcbXu6SJ8ENR35M2/CdWt3Jmv57jOUM+1ojiFmjVGvZPH8DfHpMDSA+ITs+EW5V6qthADxeyYOQ=="
+    },
     "vue-demi": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.6.1.tgz",
diff --git a/H5/package.json b/H5/package.json
index 8b6f054..b7ff644 100644
--- a/H5/package.json
+++ b/H5/package.json
@@ -20,6 +20,7 @@
     "qs": "^6.9.6",
     "vant": "^2.12.6",
     "vue": "^2.6.11",
+    "vue-count-to": "^1.0.13",
     "vue-echarts": "^6.0.0-alpha.5",
     "vue-router": "^3.2.0",
     "vuex": "^3.4.0"
diff --git a/H5/src/api/base.js b/H5/src/api/base.js
index ba15a34..1ff0bdc 100644
--- a/H5/src/api/base.js
+++ b/H5/src/api/base.js
@@ -15,3 +15,17 @@ export function smsCode(params) {
     data: final_params
   });
 }
+
+/**
+ * 上传图片 后端还在修改 TODO
+ * @param {*} params files 文件
+ * @param {*} params userId 用户id
+ */
+
+export function uploadImage(userId, file) {
+  return request({
+    url: "/ZX/uploadImage",
+    method: "post",
+    data: file
+  })
+}
diff --git a/H5/src/api/myStatus.js b/H5/src/api/myStatus.js
new file mode 100644
index 0000000..c72bb73
--- /dev/null
+++ b/H5/src/api/myStatus.js
@@ -0,0 +1,28 @@
+import request from "@/utils/request";
+
+/**
+ * 我的直推
+ * @param {*} params userId 
+ * @returns 
+ */
+export function recomendInfo(params) {
+	return request({
+		url: "/user/myRecommend",
+		method: "get",
+		params
+	})
+}
+
+/**
+ * 获取我的直推详情
+ * @param {*} param  userId *   string
+ * @param {*} param userlevel * int 等级
+ * @returns 
+ */
+export function recommendDetail(params) {
+	return request({
+		url: "/user/myRecommendInfo",
+		method: "get",
+		params
+	})
+}
diff --git a/H5/src/api/reward.js b/H5/src/api/reward.js
new file mode 100644
index 0000000..f120cfd
--- /dev/null
+++ b/H5/src/api/reward.js
@@ -0,0 +1,14 @@
+import request from "@/utils/request";
+
+/**
+ * 本月累计奖金
+ * @param {*} params userId
+ * @returns 
+ */
+export function monthRewards(params) {
+	return request({
+		url: "award/queryMonthAward",
+		method: "get",
+		params
+	})
+}
\ No newline at end of file
diff --git a/H5/src/api/user.js b/H5/src/api/user.js
index 4aec1d1..ba4964e 100644
--- a/H5/src/api/user.js
+++ b/H5/src/api/user.js
@@ -8,7 +8,7 @@ export function Login() {
   });
 }
 /**
- * 发送验证码
+ * 发送验证码 
  * @param {*} params userId  required 手机号
  * @param {*} param sms required 验证码
  * @param {*} param beInvitedCode required 邀请码
@@ -23,3 +23,32 @@ export function register(params) {
     data: final_params
   });
 }
+/**
+ * 填写邀请码
+ * @param {*} params inviteCode
+ * @param {*} params userId
+ * @returns 
+ */
+export function fillInviteCode(params) {
+  return request({
+    url: "/user/fillInInviteCode",
+    method: "post",
+    params
+  })
+}
+
+/**
+ * 设置头像
+ * @param {*} param headImage 头像url
+ * @param {*} param userId  
+ * @returns 
+ */
+
+export function setAvatar(params) {
+  return request({
+    url: "/user/setHeadImage",
+    method: "post",
+    params
+  })
+}
+
diff --git a/H5/src/components/BaseDialog.vue b/H5/src/components/BaseDialog.vue
index 28a8896..7409876 100644
--- a/H5/src/components/BaseDialog.vue
+++ b/H5/src/components/BaseDialog.vue
@@ -8,7 +8,7 @@
             class="close-icon"
             name="close"
             size="30"
-            @click="BaseDialogShow = false"
+            @click="onClose"
           />
           <p v-if="BaseDialogTitle" class="title">{{ BaseDialogTitle }}</p>
           <slot name="content" />
@@ -45,6 +45,9 @@ export default {
   methods: {
     onBtn() {
       this.$emit("onClick");
+    },
+    onClose() {
+      this.$emit("onClose");
     }
   }
 };
diff --git a/H5/src/router/index.js b/H5/src/router/index.js
index 8dfe167..ee35029 100644
--- a/H5/src/router/index.js
+++ b/H5/src/router/index.js
@@ -134,13 +134,13 @@ const routes = [
     path: "/register",
     name: "Register",
     component: () => import("@/views/register"),
-    meta: { title: "", noNav: true }
+    meta: { title: "注册", noNav: true }
   },
   {
     path: "/customer",
     name: "customerService",
     component: () => import("@/views/customer-service"),
-    meta: { title: "", noNav: true }
+    meta: { title: "专属客服", noNav: true }
   }
 ];
 
diff --git a/H5/src/views/modefyAvatar.vue b/H5/src/views/modefyAvatar.vue
index c0d6649..0b7361e 100644
--- a/H5/src/views/modefyAvatar.vue
+++ b/H5/src/views/modefyAvatar.vue
@@ -2,7 +2,7 @@
   <div class="modefy-avatar">
     <img class="avatar" :src="avatar" alt />
     <div class="btn">
-      <van-button type="primary" plain>确定</van-button>
+      <van-button type="primary" plain style="height:44px">确定</van-button>
       <van-uploader
         :max-count="1"
         :before-delete="onDeleteAvatar"
@@ -15,6 +15,7 @@
 </template>
 
 <script>
+import { setAvatar } from "@/api/user";
 export default {
   name: "ModefyAvatar",
   data() {
@@ -31,6 +32,11 @@ export default {
     onRead(file) {
       this.avatar = file.content;
       console.log("file", file);
+      const params = {
+        headImage: '',
+        userId: "18757121665"
+      }
+      setAvatar(params).then()
     },
     onDeleteAvatar(file, detail) {
       return new Promise((resolve, reject) => {
diff --git a/H5/src/views/my/components/invitee.vue b/H5/src/views/my/components/invitee.vue
index 50092e7..f8f2412 100644
--- a/H5/src/views/my/components/invitee.vue
+++ b/H5/src/views/my/components/invitee.vue
@@ -2,7 +2,7 @@
   <div class="invitee">
     <div class="baseInfo">
       <img class="avatar" src="@/assets/images/avatar.png" alt="用户头像" />
-      <span class="userName">丁晓霞</span>
+      <span class="userName">{{ inviteeItem.userId }}</span>
       <span style="font-size: 12px;color:#666666">西天森合伙人</span>
     </div>
     <div class="detail">
@@ -12,16 +12,29 @@
       </p>
       <p>
         <span>累计消费金额</span>
-        <span>ï¿¥1020</span>
+        <span>ï¿¥{{ inviteeItem.historyCount }}</span>
       </p>
       <p>
         <span>当月消费金额</span>
-        <span>ï¿¥360</span>
+        <span>ï¿¥{{ inviteeItem.monthyCount }}</span>
       </p>
     </div>
   </div>
 </template>
 
+<script>
+export default {
+  name: "Invitee",
+  props: {
+    inviteeItem: {
+      type: Object,
+      default: () => {}
+    }
+  },
+  data() {},
+}
+</script>
+
 <style lang="scss" scoped>
 .invitee {
   height: 130px;
diff --git a/H5/src/views/my/myStatus.vue b/H5/src/views/my/myStatus.vue
index 36b52e1..6524dac 100644
--- a/H5/src/views/my/myStatus.vue
+++ b/H5/src/views/my/myStatus.vue
@@ -3,26 +3,26 @@
     <div class="userInfo">
       <img src="@/assets/images/白银树.png" alt="等级背景图" />
       <span class="level-label">我的等级</span>
-      <span class="level">Lv.3白银树</span>
+      <span class="level">Lv.{{ userRecommendInfo.userlevel }}{{ userRecommendInfo.userlevel | userLevel }}</span>
       <div class="userAvatar">
         <div class="avatar-box">
           <img class="avatar" src="@/assets/images/avatar.png" alt="头像" />
           <img class="level-img" src="@/assets/images/等级展示框.png" alt />
-          <span class="avatar-level">Lv.3</span>
+          <span class="avatar-level">Lv.{{ userRecommendInfo.userlevel }}</span>
         </div>
       </div>
     </div>
     <div class="status">
-      <van-tabs v-model="activeTab" swipeable sticky color="#28b537">
+      <van-tabs v-model="activeTab" swipeable sticky color="#28b537" @click="changeTab">
         <van-tab
           v-for="item in Tabs"
           :key="`tba-${item.id}`"
-          :title="item.name"
+          :title="`${ item.name }(${ item.num})`"
         >
           <base-refresh-scroll @downLoad="onDownLoad" @upRefresh="onUpRefresh">
             <div slot="content">
-              <div v-for="item in 10" :key="item.id">
-                <invitee-item />
+              <div v-for="item in inviteeArr" :key="item.id">
+                <invitee-item :invitee-item="item" />
               </div>
             </div>
           </base-refresh-scroll>
@@ -33,6 +33,7 @@
 </template>
 
 <script>
+import { recomendInfo, recommendDetail } from "@/api/myStatus";
 import BaseRefreshScroll from "../../components/BaseRefreshScroll.vue";
 import InviteeItem from "./components/invitee";
 export default {
@@ -41,51 +42,140 @@ export default {
     InviteeItem,
     BaseRefreshScroll
   },
+  filters: {
+    userLevel(key) {
+      let levelName = "";
+      switch (key) {
+        case 0:
+          levelName = "普通用户"
+          break;
+        case 1:
+          levelName = "幼苗"
+          break;
+        case 2:
+          levelName = "青铜树"
+          break;
+        case 3:
+          levelName = "白银树"
+          break;
+        case 4:
+          levelName = "黄金树"
+          break;
+        case 5:
+          levelName = "农场主"
+          break;
+        case 6:
+          levelName = "森林之星"
+          break;
+        case 7:
+          levelName = "西田森合伙人"
+          break;
+        default:
+          levelName = ""
+          break;
+      }
+      return levelName;
+    }
+  },
   data() {
     return {
+      inviteeArr: [],
+      userRecommendInfo: {},
       activeTab: "",
       Tabs: [
         {
           id: 0,
-          name: "普通用户"
+          name: "普通用户",
+          num: 0,
+          keyName: "normalUserNum"
         },
         {
           id: 1,
-          name: "幼苗"
+          name: "幼苗",
+          num: 0,
+          keyName: "seedlingNum"
         },
         {
           id: 2,
-          name: "青铜树"
+          name: "青铜树",
+          num: 0,
+          keyName: "bronzeTreeNum"
         },
         {
           id: 3,
-          name: "白银树"
+          name: "白银树",
+          num: 0,
+          keyName: "silverTreeNum"
         },
         {
           id: 4,
-          name: "黄金树"
+          name: "黄金树",
+          num: 0,
+          keyName: "goldTreeNum"
         },
         {
           id: 5,
-          name: "农场主"
+          name: "农场主",
+          num: 0,
+          keyName: "farmerNum"
         },
         {
           id: 6,
-          name: "森林之星"
+          name: "森林之星",
+          num: 0,
+          keyName: "forestStartNum"
         },
         {
           id: 7,
-          name: "西田森合伙人"
+          name: "西田森合伙人",
+          num: 0,
+          keyName: "partnerNum"
         }
       ]
     };
   },
+  created() {
+    this.getRecommendInfo()
+    this.getRecommendDetail(0)
+  },
   methods: {
+    changeTab(name) {
+      this.getRecommendDetail(name);
+    },
     onDownLoad(val) {
       console.log("下拉加载", val);
     },
     onUpRefresh(val) {
       console.log("上拉刷新", val);
+    },
+    getRecommendInfo() {
+      const params = {
+        userId: "13933770749"
+      }
+      recomendInfo(params).then(res => {
+        if (res.code === 0) {
+          this.userRecommendInfo = res.data
+          for(const key in res.data.myRecommed) {
+            this.Tabs.forEach(el => {
+              if (el.keyName === key) {
+                console.log(key);
+                el.num = res.data.myRecommed[key]
+              }
+            });
+          }
+        }
+      })
+    },
+    getRecommendDetail(level) {
+      const params = {
+        userid: "13933770749",
+        userlevel: level
+      }
+      recommendDetail(params).then(res => {
+        if (res.code === 0) {
+          this.inviteeArr = res.data;
+        }
+      })
     }
   }
 };
diff --git a/H5/src/views/rewards/month-award.vue b/H5/src/views/rewards/month-award.vue
index 86af41c..522cf27 100644
--- a/H5/src/views/rewards/month-award.vue
+++ b/H5/src/views/rewards/month-award.vue
@@ -25,7 +25,7 @@
           :show-indicators="false"
         >
           <van-swipe-item>
-            95.30元进入本月累计奖金池 1-13 14:52:01</van-swipe-item
+            {{ awardInfo.awardTime }}</van-swipe-item
           >
           <van-swipe-item>内容 2</van-swipe-item>
           <van-swipe-item>内容 3</van-swipe-item>
@@ -34,19 +34,19 @@
     </div>
     <div class="content">
       <p style="font-size: 16px; font-weight: bold">本月累计奖金</p>
-      <p style="font-weight: bold">19,349.00</p>
-      <p style="font-size: 14px;color:#333333">历史累计奖金:¥110000.00</p>
+      <countTo :startVal='awardInfo.lastToatal' :endVal='awardInfo.monthAwardTotal' :duration='3000' style="font-weight: bold"></countTo>
+      <p style="font-size: 14px;color:#333333">历史累计奖金:¥{{ awardInfo.awardTotal.toFixed(2) || 0 }}</p>
     </div>
     <div class="newAdd-my">
       <div class="newAdd">
-        <p>ï¿¥9100.00</p>
+        <p>ï¿¥{{ awardInfo.monthIncreased || 0 }}</p>
         <div class="bottom">
           <img src="@/assets/images/本月新增.png" alt />
           <span>本月新增</span>
         </div>
       </div>
       <div class="my">
-        <p>ï¿¥999.00</p>
+        <p>ï¿¥{{ awardInfo.userMonthAward }}</p>
         <div class="bottom">
           <img src="@/assets/images/我的份额.png" alt />
           <span>我的份额</span>
@@ -57,24 +57,60 @@
       <p class="level-pool-title">各等级本月累计奖励池</p>
       <p class="level-pool-item">
         <span>黄金树等级</span>
-        <span> ï¿¥1000.00</span>
+        <span> ï¿¥{{ awardInfo.goldAward || 0 }}</span>
       </p>
       <p class="level-pool-item">
         <span>农场主等级</span>
-        <span> ï¿¥1000.00</span>
+        <span> ï¿¥{{ awardInfo.farmerAward || 0 }}</span>
       </p>
       <p class="level-pool-item">
         <span>森林之星等级</span>
-        <span> ï¿¥1000.00</span>
+        <span> ï¿¥{{ awardInfo.forestStartAward || 0 }}</span>
       </p>
       <p class="level-pool-item">
         <span>西田森合伙人等级</span>
-        <span> ï¿¥1000.00</span>
+        <span> ï¿¥{{ awardInfo.partnerAward || 0 }}</span>
       </p>
     </div>
   </div>
 </template>
 
+
+<script>
+import countTo from 'vue-count-to';
+import { monthRewards } from "@/api/reward";
+export default {
+  name: "MonthAward",
+  components: { countTo },
+  data() {
+    return {
+      awardInfo: {
+        goldAward: 0,
+        farmerAward: 0,
+        forestStartAward: 0,
+        partnerAward: 0,
+      }
+    }
+  },
+  created() {
+    this.getData()
+  },
+  methods: {
+    getData() {
+      const params = {
+        userId: "18757121665"
+      }
+      monthRewards(params).then(res => {
+        if (res.code === 0) {
+          this.awardInfo = res.data
+          this.awardInfo.lastToatal = res.data.monthAwardTotal - res.data.growthAward
+        }
+      })
+    }
+  }
+}
+</script>
+
 <style lang="scss" scoped>
 .month-award {
   width: 100%;
diff --git a/H5/src/views/router.vue b/H5/src/views/router.vue
index eedadce..e37d23d 100644
--- a/H5/src/views/router.vue
+++ b/H5/src/views/router.vue
@@ -38,6 +38,9 @@ export default {
         }
       }
     });
+    this.routes.forEach(el => {
+      console.log(el.meta.title + " " + "http://8.131.244.76:81/front" + el.path);
+    })
   },
   methods: {
     to(path) {
diff --git a/H5/src/views/settings.vue b/H5/src/views/settings.vue
index 52c5338..ab1c9ff 100644
--- a/H5/src/views/settings.vue
+++ b/H5/src/views/settings.vue
@@ -18,7 +18,7 @@
         @click="fillInviterCode"
       />
       <van-cell is-link title="软件更新" value="版本v1.2" />
-      <van-cell is-link title="用户协议" />
+      <van-cell is-link title="用户协议" @click="jumpToInstructions" />
     </van-cell-group>
     <van-button size="large" class="logout-btn">退出登录</van-button>
 
@@ -27,6 +27,7 @@
       base-dialog-btn="提交"
       :base-dialog-show="inviteeCodeDialog"
       :base-dialog-show-close="true"
+      @onClose="onCloseDialog"
       @onClick="onFillInviteeCode"
     >
       <div slot="content">
@@ -43,6 +44,7 @@
 </template>
 
 <script>
+import { fillInviteCode } from "@/api/user";
 import BaseDialog from "../components/BaseDialog.vue";
 export default {
   components: { BaseDialog },
@@ -56,12 +58,23 @@ export default {
     };
   },
   methods: {
+    jumpToInstructions() {
+      this.$router.push("/instructions");
+    },
     onModefy() {
       this.$router.push("/modefy-avatar");
     },
+    onCloseDialog() {
+      this.inviteeCodeDialog = false;
+    },
     onFillInviteeCode() {
       this.inviteeCodeDialog = false;
       this.inviteeCode = this.fillCode;
+      const params = {
+        inviteCode: this.fillCode,
+        userId: "18757121665"
+      }
+      fillInviteCode(params).then()
     },
     fillInviterCode() {
       if (this.inviteeCode === "未填写") {
-- 
2.18.1