cc0011 9 시간 전
부모
커밋
e924778897
10개의 변경된 파일390개의 추가작업 그리고 75개의 파일을 삭제
  1. 1 1
      README.md
  2. 7 0
      src/api/home.js
  3. 11 1
      src/api/profile.js
  4. 10 1
      src/router/index.js
  5. 31 40
      src/views/Dynamic.vue
  6. 28 11
      src/views/Mall.vue
  7. 7 7
      src/views/Member.vue
  8. 265 0
      src/views/Payment.vue
  9. 4 4
      src/views/Share.vue
  10. 26 10
      src/views/TeamDetail.vue

+ 1 - 1
README.md

@@ -35,4 +35,4 @@ yarn lint
 ```
 
 ### Customize configuration
-See [Configuration Reference](https://cli.vuejs.org/config/).
+See [Configuration Reference](https://cli.vuejs.org/config/). 

+ 7 - 0
src/api/home.js

@@ -17,3 +17,10 @@ export function getShareReward(renshu) {
 }
 export const getNewsDetail = (data) => request({ url: "index/newss_datail", method: "post", data,loading:true });
 export const getNews = (data) => request({ url: "index/get_newss", method: "post", data,loading:true });
+// 获取项目
+export const getMiner = (data) => request({ url: "index/get_miner", method: "get", data,loading:true });
+// 获取支付通道 
+export const getTong = (data) => request({ url: "index/gettong", method: "post", data,loading:true });
+
+// 参与项目 
+export const getChongInfo = (params) => request({ url: "index/get_chong_info", method: "get", params,loading:true });

+ 11 - 1
src/api/profile.js

@@ -29,4 +29,14 @@ export const getMyTeam = (type) => {
     data: formData,
     loading: true
   });
-};
+};
+// 领取红旗资产奖励
+export function getShareccb(renshu) {
+  return request({
+    url: 'index/get_shareccb',
+    method: 'post',
+    data: new URLSearchParams({ renshu }),
+    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
+    loading: true
+  });
+}

+ 10 - 1
src/router/index.js

@@ -24,6 +24,7 @@ import InvitePeople from '@/views/InvitePeople.vue'
 import Apply from '@/views/Apply.vue'
 import RetirementSubsidy from '@/views/RetirementSubsidy.vue'
 
+import Payment from '@/views/Payment.vue'
 Vue.use(VueRouter);
 
 const routes = [
@@ -202,7 +203,15 @@ const routes = [
     meta: {
       hideTabBar: true
     }
-  }
+  },
+  {
+    path: "/Payment",
+    name: "Payment",
+    component: Payment,
+    meta: {
+      hideTabBar: true
+  },Payment
+}
 ];
 
 const router = new VueRouter({

+ 31 - 40
src/views/Dynamic.vue

@@ -4,55 +4,44 @@
       邀请好友获得红旗资产
     </div>
     <div class="invite-list">
-      <div class="invite-item">
+      <div class="invite-item" v-for="item in rewards" :key="item.renshu">
         <div class="invite-info">
-          <div class="invite-title">邀请5人实名认证</div>
-          <div class="invite-reward">奖励60000元红旗资产</div>
+          <div class="invite-title">{{ item.title }}</div>
+          <div class="invite-reward">{{ item.reward }}</div>
         </div>
-        <button class="btn received">已领取</button>
-      </div>
-      <div class="invite-item">
-        <div class="invite-info">
-          <div class="invite-title">邀请10人实名认证</div>
-          <div class="invite-reward">奖励150000元红旗资产</div>
-        </div>
-        <button class="btn not-reached">未达标</button>
-      </div>
-      <div class="invite-item">
-        <div class="invite-info">
-          <div class="invite-title">邀请20人实名认证</div>
-          <div class="invite-reward">奖励300000元红旗资产</div>
-        </div>
-        <button class="btn not-reached">未达标</button>
-      </div>
-      <div class="invite-item">
-        <div class="invite-info">
-          <div class="invite-title">邀请50人实名认证</div>
-          <div class="invite-reward">奖励800000元红旗资产</div>
-        </div>
-        <button class="btn not-reached">未达标</button>
-      </div>
-      <div class="invite-item">
-        <div class="invite-info">
-          <div class="invite-title">邀请100人实名认证</div>
-          <div class="invite-reward">奖励1800000元红旗资产</div>
-        </div>
-        <button class="btn not-reached">未达标</button>
-      </div>
-      <div class="invite-item">
-        <div class="invite-info">
-          <div class="invite-title">邀请150人实名认证</div>
-          <div class="invite-reward">获得国家神秘奖励</div>
-        </div>
-        <button class="btn not-reached">未达标</button>
+        <button class="btn" @click="receiveReward(item.renshu)">领取</button>
       </div>
     </div>
   </div>
 </template>
 
 <script>
+import { getShareccb } from '@/api/profile';
+
 export default {
-  name: 'Dynamic'
+  name: 'Dynamic',
+  data() {
+    return {
+      rewards: [
+        { renshu: 5, title: '邀请5人实名认证', reward: '奖励60000元红旗资产' },
+        { renshu: 10, title: '邀请10人实名认证', reward: '奖励150000元红旗资产' },
+        { renshu: 20, title: '邀请20人实名认证', reward: '奖励300000元红旗资产' },
+        { renshu: 50, title: '邀请50人实名认证', reward: '奖励800000元红旗资产' },
+        { renshu: 100, title: '邀请100人实名认证', reward: '奖励1800000元红旗资产' },
+        { renshu: 150, title: '邀请150人实名认证', reward: '获得国家神秘奖励' }
+      ]
+    }
+  },
+  methods: {
+    async receiveReward(renshu) {
+      try {
+        const res = await getShareccb(renshu);
+        alert(res.data.msg);
+      } catch (e) {
+        // 接口异常时不弹窗
+      }
+    }
+  }
 }
 </script>
 
@@ -125,6 +114,8 @@ export default {
   font-weight: 500;
   padding: 0 18px;
   cursor: default;
+  background: #d0021b;
+  color: #fff;
 }
 
 .btn.received {

+ 28 - 11
src/views/Mall.vue

@@ -10,26 +10,26 @@
     <div
       class="plan-card"
       v-for="item in plans"
-      :key="item.level"
+      :key="item.id"
     >
       <div class="plan-header">
-        {{ item.level }}退休补贴金
+        {{ item.title }}
       </div>
       <div class="plan-table-row">
         <div class="plan-col">
           <div class="plan-label">参与金额</div>
-          <div class="plan-value">{{ item.amount }}</div>
+          <div class="plan-value">{{ item.money }}</div>
         </div>
         <div class="plan-col">
           <div class="plan-label">退休金</div>
-          <div class="plan-value">{{ item.pension }}</div>
+          <div class="plan-value">{{ item.computing_power }}</div>
         </div>
         <div class="plan-col">
           <div class="plan-label">日收益</div>
-          <div class="plan-value">{{ item.daily }}</div>
+          <div class="plan-value">{{ item.power }}%</div>
         </div>
         <div class="plan-col-btn">
-          <button class="plan-btn">立即参与</button>
+          <button class="plan-btn" @click="toPayment(item)">立即参与</button>
         </div>
       </div>
     </div>
@@ -37,18 +37,35 @@
 </template>
 
 <script>
+import {getMiner} from '@/api/home.js'
 export default {
   name: 'Mall',
   data() {
     return {
       plans: [
-        { level: '初级', amount: '30000红旗资产', pension: '3000元', daily: '10%' },
-        { level: '一级', amount: '60000红旗资产', pension: '6000元', daily: '10%' },
-        { level: '二级', amount: '100000红旗资产', pension: '10000元', daily: '10%' },
-        { level: '三级', amount: '200000红旗资产', pension: '20000元', daily: '10%' },
       ]
     }
-  }
+  },
+  methods:{
+    getPlans(){
+      let data = {
+        page:'',
+        size:'',
+        type:1
+      }
+      getMiner(data).then(res=>{
+        if(res.code === 1){
+          this.plans = res.data
+        }
+      })
+    },
+    toPayment(item){
+      this.$router.push({path:'/Payment',query:{item:item}});
+    }
+  },
+  mounted() {
+    this.getPlans()
+  },
 }
 </script>
 

+ 7 - 7
src/views/Member.vue

@@ -33,7 +33,7 @@
             <div class="tit">我的邀请收益</div>
             <div class="xia">
               <div class="num">
-                <span>{{ userInfo.inviteProfit || 0 }}</span>
+                <span>{{ userInfo.xianjin || 0 }}</span>
               </div>
             </div>
             <div class="tit" style="font-size: 3.4vw;">邀请好友立享返佣 !</div>
@@ -55,21 +55,21 @@
         <div class="show-content">
           <div class="view-category">
             <div class="num1">
-              <span>{{ userInfo.level1Profit || 0 }}</span>
+              <span>{{ userInfo.totleonemo || 0 }}</span>
             </div>
             <div class="text">一级收益</div>
           </div>
           <div class="line"></div>
           <div class="view-category">
             <div class="num1">
-              <span>{{ userInfo.level2Profit || 0 }}</span>
+              <span>{{ userInfo.totletwomo || 0 }}</span>
             </div>
             <div class="text">二级收益</div>
           </div>
           <div class="line"></div>
           <div class="view-category">
             <div class="num1">
-              <span>{{ userInfo.level3Profit || 0 }}</span>
+              <span>{{ userInfo.totlethreemo || 0 }}</span>
             </div>
             <div class="text">三级收益</div>
           </div>
@@ -87,21 +87,21 @@
         <div class="show-content">
           <div class="view-category">
             <div class="num1">
-              <span>{{ userInfo.level1Count || 0 }}</span>
+              <span>{{ userInfo.totleone || 0 }}</span>
             </div>
             <div class="text">一级人数</div>
           </div>
           <div class="line"></div>
           <div class="view-category">
             <div class="num1">
-              <span>{{ userInfo.level2Count || 0 }}</span>
+              <span>{{ userInfo.totletwo || 0 }}</span>
             </div>
             <div class="text">二级人数</div>
           </div>
           <div class="line"></div>
           <div class="view-category">
             <div class="num1">
-              <span>{{ userInfo.level3Count || 0 }}</span>
+              <span>{{ userInfo.totlethree || 0 }}</span>
             </div>
             <div class="text">三级人数</div>
           </div>

+ 265 - 0
src/views/Payment.vue

@@ -0,0 +1,265 @@
+<template>
+  <div>
+    <div class="headers">
+      <div class="back" @click="goBack">
+        <img src="@/assets/back.png" alt="">
+      </div>
+      <div class="title">转入</div>
+    </div>
+    <div class="invite-page">
+      <div class="fund-card">
+        <div class="title">参与基金</div>
+        <div class="subtitle">
+          {{item.title}}
+        </div>
+        <div class="form-section">
+          <div class="label">请选择支付方式</div>
+          <div class="pay-group">
+            <label 
+              v-for="item in payList" 
+              :key="item.id" 
+              class="pay-radio"
+              :class="{ active: payType === item.title }"
+            >
+              <input 
+                type="radio" 
+                :value="item.title" 
+                v-model="payType"
+                class="radio-input"
+              >
+              <span class="radio-label">{{ item.title }}</span>
+            </label>
+          </div>
+        </div>
+        <div class="form-section">
+          <div class="label">产品价格</div>
+          <div class="price-field">
+            <input 
+              type="text" 
+              v-model="item.money" 
+              readonly 
+              class="price-input"
+            >
+          </div>
+        </div>
+        <button 
+          class="submit-btn"
+          :disabled="!payType"
+          @click="handleSubmit"
+        >
+          参与
+        </button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import {getTong,getChongInfo} from '@/api/home.js'
+import { Toast } from 'vant';
+export default {
+  name: 'InvitePeople',
+  data() {
+    return {
+      payType: '',
+      payList: [],
+      item:{}
+    }
+  },
+  methods:{
+    goBack() {
+      this.$router.go(-1)
+    },
+    async getPayType(){
+      const res = await getTong()
+      this.payList = res.data || []
+    },
+     handleSubmit() {
+        // 处理提交逻辑
+        let params = {
+            type: this.payType,
+            money: this.item.money,
+        }
+        getChongInfo(params).then(res => {
+            if(res.code === 1){
+            Toast.success('提交成功')
+            setTimeout(() => {
+                window.location.href = res.data.payUrl
+            }, 1000);
+            }
+        })
+          }
+  },
+  mounted(){
+    this.getPayType()
+    this.item = this.$route.query.item
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.invite-page {
+  min-height: 100vh;
+  background: url('~@/assets/dabag.png') no-repeat center center;
+  background-size: cover;
+  padding: 120px 16px 32px 16px;
+  box-sizing: border-box;
+}
+
+.headers {
+  position: relative;
+  height: 44px;
+  background-color: #fff;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border-bottom: 1px solid #eee;
+
+  .back {
+    position: absolute;
+    left: 15px;
+    font-size: 20px;
+    img{
+      width: 20px;
+      height: 20px;
+    }
+  }
+
+  .title {
+    font-size: 18px;
+    font-weight: 500;
+  }
+}
+
+.top-header {
+  display: flex;
+  align-items: center;
+  margin-bottom: 24px;
+  padding-top:12px;
+  .logo {
+    width: 85px;
+    height: 58px;
+    object-fit: contain;
+    background: #fff;
+    margin-right: 16px;
+  }
+  .slogan {
+    color: #fff;
+    font-size: 16px;
+    font-weight: bold;
+    line-height: 1.3;
+    text-shadow: 0 2px 8px rgba(0,0,0,0.12);
+  }
+}
+
+.fund-card {
+  background: #fff;
+  border-radius: 16px;
+  box-shadow: 0 4px 24px rgba(0,0,0,0.08);
+  padding: 28px 18px 24px 18px;
+  max-width: 350px;
+  margin: 0 auto;
+  text-align: center;
+}
+
+.title {
+  font-size: 24px;
+  font-weight: bold;
+  margin-bottom: 8px;
+}
+
+.subtitle {
+  font-size: 16px;
+  color: #333;
+  margin-bottom: 18px;
+  .amount {
+    font-weight: bold;
+    font-size: 16px;
+  }
+}
+
+.form-section {
+  margin-bottom: 18px;
+  text-align: left;
+}
+
+.label {
+  font-size: 15px;
+  color: #333;
+  margin-bottom: 8px;
+}
+
+.pay-group {
+  background: #f7f8fa;
+  border-radius: 12px;
+  padding: 6px 0;
+  display: flex;
+  justify-content: flex-start;
+  flex-wrap: wrap;
+}
+
+.pay-radio {
+  margin-right: 18px;
+  background: #fff;
+  border-radius: 8px;
+  padding: 4px 18px;
+  display: inline-flex;
+  align-items: center;
+  cursor: pointer;
+  transition: all 0.3s;
+  border: 1px solid #eee;
+
+  &.active {
+    background: #e8f5e9;
+    border-color: #4caf50;
+  }
+
+  .radio-input {
+    display: none;
+  }
+
+  .radio-label {
+    font-size: 14px;
+    color: #333;
+  }
+}
+
+.price-field {
+  background: #f7f8fa;
+  border-radius: 8px;
+  padding: 8px 12px;
+  
+  .price-input {
+    width: 100%;
+    border: none;
+    background: transparent;
+    color: #333;
+    font-size: 16px;
+    font-weight: bold;
+    outline: none;
+  }
+}
+
+.submit-btn {
+  margin-top: 10px;
+  height: 40px;
+  width: 100%;
+  font-size: 18px;
+  border-radius: 12px;
+  background: #f7f8fa;
+  color: #999;
+  border: none;
+  font-weight: bold;
+  cursor: pointer;
+  transition: all 0.3s;
+
+  &:not(:disabled) {
+    background: #4caf50;
+    color: #fff;
+  }
+
+  &:disabled {
+    cursor: not-allowed;
+  }
+}
+</style>

+ 4 - 4
src/views/Share.vue

@@ -31,11 +31,11 @@
             <div class="action-btn" @click="copyLink">复制链接</div>
           </div>
 
-          <div class="divider">
+          <!-- <div class="divider">
             <div class="divider-text">领取任务</div>
-          </div>
+          </div> -->
 
-          <div class="task-list">
+          <!-- <div class="task-list">
             <div v-for="task in tasks" :key="task.people" class="task-card">
               <div class="task-header-row">
                 <div class="task-title">邀请{{ task.people }}人</div>
@@ -57,7 +57,7 @@
                 <div class="task-action-btn" @click="claimReward(task)">领取</div>
               </div>
             </div>
-          </div>
+          </div> -->
         </div>
       </div>
     </div>

+ 26 - 10
src/views/TeamDetail.vue

@@ -30,13 +30,21 @@
 
       <!-- 统计信息 -->
       <div class="stats-bar">
-        <div class="stats-item">总人数:{{ teamInfo.totalCount || 0 }}人</div>
-        <div class="stats-item">有效总人数:{{ teamInfo.validCount || 0 }}人</div>
+        <div class="stats-item">总人数:{{ teamList.length || 0 }}人</div>
+        <div class="stats-item">有效总人数:{{ teamInfo.yxuser || 0 }}人</div>
       </div>
 
       <!-- 团队列表 -->
       <div class="team-list">
-        <!-- 这里可以添加团队成员列表 -->
+        <div v-for="item in teamList" :key="item.userId" class="member-card">
+          <div style="display: flex; align-items: center; margin-bottom: 8px;">
+            <span style="color: #888;">{{ item.id }}</span>
+            <span style="background: #e6b7e6; color: #fff; border-radius: 50%; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; margin-right: 10px;margin-left: 10px;">{{ item.level }}</span>
+            <span style="font-weight: bold; margin-right: 10px;">{{ item.mobile }}</span>
+          </div>
+          <div style="margin-bottom: 4px;">直推人数 {{ item.zhituicount }}人</div>
+          <div>邀请时间 {{ item.createtime }}</div>
+        </div>
       </div>
     </div>
   </div>
@@ -51,9 +59,9 @@ export default {
     return {
       currentType: 1,
       teamInfo: {
-        totalCount: 0,
-        validCount: 0
-      }
+        yxuser: 0
+      },
+      teamList: []
     }
   },
   created() {
@@ -65,16 +73,16 @@ export default {
         const res = await getMyTeam(this.currentType);
         if (res && res.data) {
           this.teamInfo = {
-            totalCount: res.data.totalCount || 0,
-            validCount: res.data.validCount || 0
+            yxuser: res.data.yxuser || 0
           };
+          this.teamList = res.data.list || [];
         }
       } catch (error) {
         console.error('获取团队信息失败:', error);
         this.teamInfo = {
-          totalCount: 0,
-          validCount: 0
+          yxuser: 0
         };
+        this.teamList = [];
       }
     },
     switchType(type) {
@@ -186,4 +194,12 @@ export default {
 .team-list {
   margin-top: 15px;
 }
+
+.member-card {
+  background: #fff;
+  border-radius: 12px;
+  padding: 16px;
+  margin-bottom: 16px;
+  box-shadow: 0 2px 8px rgba(0,0,0,0.04);
+}
 </style>