Bläddra i källkod

Merge branch 'dev_1.3' of http://222.85.201.140:10002//xuyunhui/chain_jje_uniapp into dev1.4

 Conflicts:
	common/js/env.js
zhanghui 2 år sedan
förälder
incheckning
f062d90d26

+ 42 - 2
common/js/api.js

@@ -195,10 +195,10 @@ export default {
         return request({
             url: '/member/wechat/submitOldData',
             method: 'POST',
-            header:{
+            header: {
                 'content-type': 'application/x-www-form-urlencoded'
             },
-            data:memberNo
+            data: memberNo
 
 
         })
@@ -823,6 +823,46 @@ export default {
             data: data
         })
     },
+    //赠送亲情卡
+    giveFamilyCard(data){
+        return request({
+            url: '/member/loveCard/createLoveCard',
+            method: 'GET',
+            data: data
+        })
+    },
+    //获取我赠送的亲情卡列表
+    getMyPresentList(data){
+        return request({
+            url: '/member/loveCard/myPresentList',
+            method: 'GET',
+            data: data
+        })
+    },
+    //查询我收到的情亲卡列表
+    getMyReceiveList(data){
+        return request({
+            url: '/member/loveCard/myReceiveList',
+            method: 'GET',
+            data: data
+        })
+    },
+    //.查询情亲卡的消费记录
+    getMycardRecordList(data){
+        return request({
+            url: '/member/loveCard/cardRecordList',
+            method: 'GET',
+            data: data
+        })
+    },
+    //.解绑亲情卡
+    untieCard(data){
+        return request({
+            url: '/member/loveCard/untieCard',
+            method: 'GET',
+            data: data
+        })
+    },
 
 
 }

+ 62 - 0
myPages/familyCard/giveFamilyCard/giveFamilyCard.vue

@@ -0,0 +1,62 @@
+<template>
+  <view class="box">
+    <u--form labelPosition="top" :model="userInfo" ref="form1">
+      <u-form-item labelWidth="auto" labelAlign="right" label="被赠送会员编号" prop="phone">
+        <u--input v-model="userInfo.memberNo" placeholder="请输入被赠送会员编号" border="bottom"
+        ></u--input>
+      </u-form-item>
+      <u-form-item labelWidth="auto" labelAlign="right" label="被赠送会员手机号" prop="smsCode" width="120">
+        <u--input v-model="userInfo.memberPhone" placeholder="请输入被赠送会员手机号" border="bottom"
+        ></u--input>
+      </u-form-item>
+    </u--form>
+    <view class="op-btn-wrap">
+      <view class="h-btn" @click="handleGive">
+        <text>确定</text>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  name: "giveFamilyCard",
+  data() {
+    return {
+      userInfo: {},
+      giveUser: {}
+    }
+  },
+  methods: {
+    handleGive() {
+      this.giveUser.memberNo = "Vip." + this.userInfo.memberNo
+      this.giveUser.memberPhone = this.userInfo.memberPhone
+      this.$api.giveFamilyCard(this.giveUser).then((res) => {
+            console.log(res)
+              uni.showToast({
+                duration: 2000,
+                title: '赠送成功'
+              });
+              uni.navigateBack({delta : 1})
+          }
+      )
+    }
+  }
+}
+</script>
+
+<style scoped>
+.box {
+  padding: 24rpx 32rpx;
+}
+
+.h-btn {
+  margin: 48rpx auto;
+  text-align: center;
+  width: 80vw;
+  height: 42px;
+  background: #FFE05C;
+  border-radius: 27px;
+  line-height: 42px;
+}
+</style>

+ 28 - 0
myPages/familyCard/index.scss

@@ -0,0 +1,28 @@
+.box {
+  padding: 32rpx 24rpx;
+}
+
+.Card {
+  border-radius: 20px;
+  background-size: 100% 100%;
+  height: 268rpx;
+  padding: 24rpx;
+  display: flex;
+  flex-direction: column;
+  position: relative;
+  margin: 32rpx 24rpx;
+}
+
+.getCard {
+  background-image: url("/static/familyCard/getCard.png");
+}
+
+.postCard {
+  background-image: url("/static/familyCard/postCard.png");
+}
+
+.Lines {
+  position: absolute;
+  right: 40rpx;
+  bottom: 26rpx;
+}

+ 107 - 0
myPages/familyCard/index.vue

@@ -0,0 +1,107 @@
+<template>
+  <view class="box">
+    <text style="margin-bottom: 24rpx">我收到的亲情卡</text>
+
+    <view class="getCard Card" v-for="item in gotList" @click="jumpToDetail(item)">
+      <view style="display: flex;align-items: center">
+        <u-avatar :src="item.url || '/static/me/ud4.png'"></u-avatar>
+        <text style="margin:0 10rpx;color:#FFFFFF ">会员{{ item.userNo }}送的亲情卡</text>
+      </view>
+      <view class="Lines">
+        <text style="float: right;margin:0 10rpx;color:#FFFFFF ">已用额度</text>
+        <view style="font-size: 48rpx;font-weight: bold;color: #FFFFFF;text-align: center">{{ item.amount || 0 }}</view>
+      </view>
+    </view>
+
+    <view style="display: flex;justify-content:space-between;margin: 32rpx 0;">
+      <text>我赠送的亲情卡</text>
+      <view style="color: #FFAF36;transform: translateY(-10rpx)" @click="jumpToGive">
+        <image style="width: 40rpx;height: 40rpx;transform: translateY(10rpx)"
+               src="/static/familyCard/icon-give.png"></image>
+        <text>
+          赠送亲情卡
+        </text>
+      </view>
+    </view>
+
+    <view class="postCard Card" v-for="item in giveList" @click="jumpToDetail(item.id)">
+      <view style="display: flex;align-items: center">
+        <u-avatar :src="item.url || '/static/me/ud4.png'"></u-avatar>
+        <text style="margin:0 10rpx;">会员{{ item.userNo }}送的亲情卡</text>
+      </view>
+      <view class="Lines">
+        <text style="float: right;margin:0 10rpx;">已用额度</text>
+        <view style="font-size: 48rpx;font-weight: bold;text-align: center">{{ item.amount || 0 }}</view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  name: "index",
+  data() {
+    return {
+      giveList: [],
+      gotList: []
+    }
+  },
+  onLoad() {
+
+  },
+  onShow(){
+    this.getGiveList()
+    this.getGotList()
+  },
+  methods: {
+    jumpToGive() {
+      uni.navigateTo({
+        url: '/myPages/familyCard/giveFamilyCard/giveFamilyCard'
+      })
+    },
+    jumpToDetail(item) {
+      uni.navigateTo({
+        url: '/myPages/familyCard/unbindFamilyCard/unbindFamilyCard?data=' + JSON.stringify(item)
+      })
+    },
+    getImgUrlByOssId(list, number) {
+      if (list) {
+        list.forEach((e) => {
+          let data = null
+          if (number == 1) {
+            data = e.presentUserPhoto
+
+          } else {
+            data = e.userPhoto
+          }
+          if (data) {
+            this.$api.getImage(data).then(res => {
+              e.url = res.data.data[0].url.replace(/^http:/, "https:")
+            });
+          }
+        })
+        this.$forceUpdate()
+      }
+    },
+    getGiveList() {
+      this.$api.getMyPresentList().then((res) => {
+        this.giveList = res.data.data
+        this.getImgUrlByOssId(this.giveList, 1)
+      })
+    },
+    getGotList() {
+      this.$api.getMyReceiveList().then((res) => {
+        this.gotList = res.data.data
+        this.getImgUrlByOssId(this.giveList, 2)
+      })
+    }
+  }
+}
+
+
+</script>
+
+<style scoped>
+@import "/myPages/familyCard/index.scss";
+
+</style>

+ 75 - 0
myPages/familyCard/unbindFamilyCard/familyCard.scss

@@ -0,0 +1,75 @@
+.page {
+  min-height: 100vh;
+}
+.icon {
+  width: 84rpx;
+  height: 84rpx;
+  border-radius: 42rpx;
+  text-align: center;
+  line-height: 84rpx;
+  font-size: 24rpx;
+  margin: 0 10rpx;
+  background-color: #ED569F;
+  color: white;
+}
+
+.recharge-me {
+  .wallet-content {
+    background-image: linear-gradient(#FFE05C 0, #FFE05C 160px, #ffffff 0, #ffffff);
+    padding: 12px;
+
+    .h-balance-wrap {
+      background-image: url("../../../static/familyCard/detailCard.png");
+      background-size: 100% 100%;
+      height: 304rpx;
+      border-radius: 6px;
+      text-align: center;
+      padding: 24rpx 34rpx;
+      margin: 24rpx 0;
+      //overflow: hidden;
+
+      .h-balance {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        height: 100px;
+        position: relative;
+
+        .recharge-balance {
+          margin: 0 auto;
+          .h-nav-img {
+            image {
+              height: 18px;
+              width: 18px;
+            }
+          }
+          .name {
+            font-size: 14px;
+            font-weight: 400;
+            color: #666666;
+            line-height: 22px;
+          }
+
+          .balance-value {
+            font-size: 18px;
+            font-weight: bold;
+            color: #333333;
+            line-height: 26px;
+          }
+        }
+      }
+
+    }
+
+  }
+
+}
+
+.useList {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  border-bottom: 1px solid #afa6a6;
+  padding: 20rpx;
+  margin: 24rpx;
+}

+ 23 - 0
myPages/familyCard/unbindFamilyCard/module/familyCard.scss

@@ -0,0 +1,23 @@
+.icon {
+  width: 84rpx;
+  height: 84rpx;
+  border-radius: 42rpx;
+  text-align: center;
+  line-height: 84rpx;
+  font-size: 24rpx;
+  margin: 0 10rpx;
+  background-color: #ED569F;
+  color: white;
+}
+
+.useList {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  border-top: 1px solid #EEEEEE;
+  padding: 20rpx;
+  margin: 24rpx;
+}
+.useList:first-child{
+  border: none;
+}

+ 152 - 0
myPages/familyCard/unbindFamilyCard/module/mescrollUni-item.vue

@@ -0,0 +1,152 @@
+<template>
+  <!--
+    swiper中的transfrom会使fixed失效,此时用height固定高度;
+    swiper中无法触发mescroll-mixins.js的onPageScroll和onReachBottom方法,只能用mescroll-uni,不能用mescroll-body
+    -->
+  <!-- ref动态生成: 字节跳动小程序编辑器不支持一个页面存在相同的ref (如不考虑字节跳动小程序可固定值为 ref="mescrollRef") -->
+  <!-- top的高度等于悬浮菜单tabs的高度 -->
+  <mescroll-uni :ref="'mescrollRef' + i" @init="mescrollInit" :height="height" :down="downOption" @down="downCallback"
+                :up="upOption" @up="upCallback" @emptyclick="emptyClick">
+    <view>
+      <view class="useList" v-for="(item,index) in list" :key="index">
+        <view style="display: flex;align-items: center">
+          <view class="icon">{{ item.type == 0 ? "消费" : "增加" }}</view>
+          <text>{{ item.paymentTime }}</text>
+        </view>
+        <view>
+          <view>
+            <text>{{ item.type == 0 ? "-" : "+"  }}</text>
+            {{ item.amount || 0 }}
+          </view>
+        </view>
+      </view>
+    </view>
+  </mescroll-uni>
+</template>
+
+<script>
+import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+import MescrollMoreItemMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more-item.js"
+
+export default {
+  mixins: [MescrollMixin, MescrollMoreItemMixin], // 注意此处还需使用MescrollMoreItemMixin (必须写在MescrollMixin后面)
+  components: {},
+
+  data() {
+    return {
+      downOption: {
+        auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+      },
+      upOption: {
+        auto: false, // 不自动加载
+        // page: {
+        // 	num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+        // 	size: 10 // 每页数据的数量
+        // },
+        noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+        empty: {
+          icon: '/static/imageIcon/empty.png',
+          tip: '暂无内容', // 提示
+          // btnText: '去看看'
+        },
+        textNoMore: '没有更多了'
+      },
+      list: [],
+    }
+  },
+  props: {
+    i: Number, // 每个tab页的专属下标 (除了支付宝小程序必须在这里定义, 其他平台都可不用写, 因为已在MescrollMoreItemMixin定义)
+    index: { // 当前tab的下标 (除了支付宝小程序必须在这里定义, 其他平台都可不用写, 因为已在MescrollMoreItemMixin定义)
+      type: Number,
+      default() {
+        return 0
+      }
+    },
+    dataTime: {
+      type: String,
+      default() {
+        return ''
+      }
+    },
+
+    cardId:{
+      type: String,
+      default() {
+        return ''
+      }
+    },
+
+    tabs: { // 为了请求数据,演示用,可根据自己的项目判断是否要传
+      type: Array,
+      default() {
+        return []
+      }
+    },
+    height: [Number, String], // mescroll的高度
+
+  },
+  watch: {},
+
+  created() {
+  },
+
+  methods: {
+
+
+    /*下拉刷新的回调 */
+    downCallback() {
+      // 这里加载你想下拉刷新的数据, 比如刷新轮播数据
+      // loadSwiper();
+      // 下拉刷新的回调,默认重置上拉加载列表为第一页 (自动执行 page.num=1, 再触发upCallback方法 )
+      this.mescroll.resetUpScroll()
+    },
+    /*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+    upCallback(page) {
+
+      //联网加载数据
+      let httpData = {
+        pageNum: page.num,
+        pageSize: 10,
+        cardId: this.cardId
+      }
+
+      this.$api.getMycardRecordList(httpData).then((res) => {
+        //联网成功的回调,隐藏下拉刷新和上拉加载的状态;
+        this.mescroll.endSuccess(res.data.data.length, res.data.data.length === 10);
+        //设置列表数据
+        if (page.num === 1) this.list = []; //如果是第一页需手动制空列表
+        this.list = this.list.concat(res.data.data); //追加新数据
+        console.log(this.list)
+      }).catch((err) => {
+        //联网失败, 结束加载
+        this.mescroll.endErr();
+      })
+
+
+    },
+
+    //点击空布局按钮的回调
+    emptyClick() {
+      uni.showToast({
+        title: '点击了按钮,具体逻辑自行实现'
+      })
+    },
+    // 搜索
+    doSearch() {
+      this.list = []; // 先清空列表,显示加载进度
+      this.mescroll.resetUpScroll();
+    },
+
+    gotoSubmitTransaction(item) {
+      uni.navigateTo({
+        url: '/myPages/transactionPassword/index?data=' + JSON.stringify(item)
+      })
+    },
+
+  }
+}
+</script>
+<style>
+@import '/common/css/common.css';
+@import './familyCard.scss';
+</style>

+ 83 - 0
myPages/familyCard/unbindFamilyCard/unbindFamilyCard.vue

@@ -0,0 +1,83 @@
+<template>
+  <view class="page">
+    <!-- 钱包 -->
+    <view class="recharge-me ">
+      <view class="wallet-content">
+
+        <view class="h-balance-wrap">
+          <view class="h-balance">
+            <view class="recharge-balance">
+              <view class="name">已用额度</view>
+              <view class="Number" style="font-size: 48rpx">{{ data.amount || 0 }}</view>
+            </view>
+            <text style="position: absolute;top:32rpx;right: 32rpx;color:#FFAF36" @click="untieCard">解绑</text>
+          </view>
+          <view style="display: flex;justify-content: space-between;margin: 8rpx 0rpx">
+            <text>赠送会员编号:</text>
+            <text>{{ data.userNo }}</text>
+          </view>
+          <view style="display: flex;justify-content: space-between;margin: 8rpx 0rpx">
+            <text>收到时间::</text>
+            <text>{{ data.createTime }}</text>
+          </view>
+        </view>
+          <text style="margin:24rpx 0;overflow: hidden">使用记录</text>
+        <view>
+          <mescroll-item ref="MescrollItem" :i="0"  :index="0" :cardId="data.id" :height="scrollViewHeight">
+          </mescroll-item>
+        </view>
+
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+
+  import MescrollItem from "./module/mescrollUni-item.vue";
+export default {
+  components: {
+    MescrollItem
+  },
+  data() {
+    return {
+      data: {},
+      scrollViewHeight:'',
+    };
+  },
+  onLoad(option) {
+    this.data = JSON.parse(option.data)
+    console.log(this.data)
+    let sysInfo = uni.getSystemInfoSync()
+    this.scrollViewHeight =sysInfo.windowHeight -(sysInfo.windowWidth/750)*500 +'px'
+    console.log(' this.scrollViewHeight', this.scrollViewHeight)
+  },
+  onShow() {
+  },
+  methods: {
+
+    //解除绑定
+    untieCard() {
+        this.$api.untieCard({
+          cardId:this.data.id
+        }).then((res)=>{
+          uni.showToast({
+            icon: 'success',
+            duration: 2000,
+            title:'解绑成功'
+          });
+          setTimeout(()=>{
+            uni.navigateBack({
+              delta: 1
+            })
+          },2000)
+        })
+    },
+  },
+};
+</script>
+
+<style scoped lang="scss">
+@import '../../../common/css/common.css';
+@import './familyCard.scss';
+</style>

+ 0 - 2
myPages/realNameAuth/index.vue

@@ -142,8 +142,6 @@ export default {
 
   },
   methods: {
-
-
     // 保存实名信息
     saveUserRealNameAuth(){
       let that = this;

+ 5 - 3
myPages/rechargeRecord/index.vue

@@ -39,6 +39,7 @@
             return {
                 windowHeight:'',
                 tabIndex:0,
+
                 tabList: [{
                     name: '全部',
                 }, {
@@ -71,10 +72,11 @@
                 this.tabIndex = e.index
             },
             swiperChange(e){
+
                 this.tabIndex = e.detail.current
-                if (this.$refs.MescrollItem[e.detail.current].list.length>0){
-                	this.$refs.MescrollItem[e.detail.current].downCallback()
-                }
+                // if (this.$refs.MescrollItem[e.detail.current].list.length>0){
+                // 	this.$refs.MescrollItem[e.detail.current].downCallback()
+                // }
             },
 
 

+ 1 - 2
myPages/rechargeRecord/module/mescrollUni-item.vue

@@ -8,7 +8,7 @@
   <mescroll-uni :ref="'mescrollRef' + i" @init="mescrollInit" :height="height" :down="downOption" @down="downCallback"
                 :up="upOption" @up="upCallback" @emptyclick="emptyClick">
     <view>
-      <view class="item" v-for="(item, index) in list" :key="index">
+      <view class="item" v-for="(item, i) in list" :key="i">
         <view class="h-value flex-row">
           <image class="h-img" src="/static/order/ud7.png" mode=""></image>
           <text class="h-text">订单编号:{{ item.orderNo }}</text>
@@ -99,7 +99,6 @@
             </view>
             <view v-else-if="item.refundStatus == 1" class="op-btn">
               <text>审核中</text>
-              ·
             </view>
             <view v-else-if="item.refundStatus == 2" class="op-btn">
               <text>已同意</text>

+ 3 - 3
myPages/transactionPassword/index.vue

@@ -57,9 +57,9 @@
             this.order = JSON.parse(option.data)
             this.reqParm.orderNo = this.order.orderNo;
         },
-        onReady() {
-            this.$refs.form1.setRules(this.rules)
-        },
+        // onReady() {
+        //     this.$refs.form1.setRules(this.rules)
+        // },
         methods: {
             // submitData() {
             //     let that = this;

+ 3 - 5
orderPages/orderDetail/index.vue

@@ -314,7 +314,6 @@
 					uni.showToast({
 						title: '支付成功!'
 					});
-					that.$refs.popup.close()
 					that.getOrderDetailByOrderId(that.orderId)
 				}).catch((err)=>{
 					this.requestStatus=false
@@ -354,6 +353,7 @@
 				uni.showLoading({
 					title: '支付中'
 				});
+				this.$refs.popup.close()
 				let that =this
 				if (this.curServiceTab===1){
 					// that.password = '';
@@ -379,7 +379,6 @@
 									title: '支付成功!'
 								});
 								that.getOrderDetailByOrderId(that.orderId)
-								that.$refs.popup.close()
 							},
 							fail: res => {
 								this.requestStatus=false
@@ -388,7 +387,6 @@
 									content: '支付失败',
 									showCancel: false
 								});
-								that.$refs.popup.close()
 							}
 						});
 					})
@@ -498,9 +496,9 @@
 			},
 			payItem(num){
 				console.log('this.userInfo.balance',this.userInfo.balance*1)
-				console.log('this.price',this.allPrice*1)
+				console.log('this.price',this.order.totalAmount*1)
 
-				if (this.userInfo.balance*1 < this.allPrice*1 && num == 1){
+				if (this.userInfo.balance*1 < this.order.totalAmount*1 && num == 1){
 					return
 				}
 				this.curServiceTab = num

+ 22 - 17
pages.json

@@ -52,8 +52,6 @@
 			"root": "loginPages",
 			"pages": [
 
-
-
 				{
 					"path": "login/bind-account",
 					"style": {
@@ -82,13 +80,6 @@
 						"enablePullDownRefresh": false
 					}
 				},
-//				{
-//					"path": "login/login-real-name-auth",
-//					"style": {
-//						"navigationBarTitleText": "实名认证",
-//						"enablePullDownRefresh": false
-//					}
-//				},
 				{
 					"path": "login/retrieve-account",
 					"style": {
@@ -241,7 +232,7 @@
 				{
 					"path": "transactionPassword/index",
 					"style": {
-						"navigationBarTitleText": "输入密码",
+						"navigationBarTitleText": "退款原因",
 						"enablePullDownRefresh": false
 					}
 				},
@@ -316,6 +307,27 @@
 						"enablePullDownRefresh": false
 					}
 				},
+				{
+					"path": "familyCard/index",
+					"style": {
+						"navigationBarTitleText": "亲情卡",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "familyCard/giveFamilyCard/giveFamilyCard",
+					"style": {
+						"navigationBarTitleText": "赠送亲情卡",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "familyCard/unbindFamilyCard/unbindFamilyCard",
+					"style": {
+						"navigationBarTitleText": "亲情卡详情",
+						"enablePullDownRefresh": false
+					}
+				},
 				{
 					"path": "aboutOur/index",
 					"style": {
@@ -400,12 +412,6 @@
 				"iconPath": "/static/tabBar/index.png",
 				"text": "首页"
 			},
-//			{
-//				"pagePath": "pages/orderMeal/index"
-//			},
-//			{
-//				"pagePath": "pages/qrCode/index"
-//			},
 			{
 				"pagePath": "pages/order/index",
 				"selectedIconPath": "/static/tabBar/order_cur.png",
@@ -425,7 +431,6 @@
 		"navigationBarTitleText": "加载中",
 		"navigationBarBackgroundColor": "#FFE05C",
 		"backgroundColor": "#FFE05C"
-		// "titleNView": false
 	},
 	"uniIdRouter": {}
 }

+ 2 - 1
pages/my/index.vue

@@ -111,7 +111,8 @@ export default {
         {thumb: '/static/me/u1833.png', title: '资产找回', rightText: '', to: '/myPages/systemSwitch/index'},
         {thumb: '/static/me/u826.png', title: '储值服务', rightText: '', to: '/myPages/recharge/index'},
         {thumb: '/static/me/u701.png', title: '交易记录', rightText: '', to: '/myPages/transactionRecord/index'},
-        {thumb: '/static/me/u11.png', title: '会员须知', rightText: '', to: '/myPages/aboutOur/index'}
+        {thumb: '/static/me/u11.png', title: '会员须知', rightText: '', to: '/myPages/aboutOur/index'},
+        // {thumb: '/static/me/familyCard_icon.png', title: '亲情卡', rightText: '', to: '/myPages/familyCard/index'}
       ],
       group2: [
 

BIN
static/familyCard/detailCard.png


BIN
static/familyCard/getCard.png


BIN
static/familyCard/icon-give.png


BIN
static/familyCard/postCard.png


BIN
static/me/familyCard_icon.png