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