Browse Source

修改

feature-1.1-dev
helming 3 years ago
parent
commit
6560b20a46
  1. 2
      pages/ai/paint/paint.vue
  2. 18
      pages/userInfo/userInfo.vue
  3. 155
      pages/userInfo/vip/MemberScroll.vue
  4. 177
      pages/userInfo/vip/vip.vue
  5. 42
      static/icon/iconfont.css
  6. BIN
      static/icon/iconfont.ttf

2
pages/ai/paint/paint.vue

@ -270,7 +270,7 @@
content: '点击确定解锁更多权益哟~', content: '点击确定解锁更多权益哟~',
cancelText: '狠心拒绝', cancelText: '狠心拒绝',
cancelColor: '#ff0000', cancelColor: '#ff0000',
confirmColor: '#0000ff', confirmColor: '#1a94bc',
confirmText: '立刻前往', confirmText: '立刻前往',
success(res){ success(res){
if (res.confirm) { if (res.confirm) {

18
pages/userInfo/userInfo.vue

@ -7,10 +7,12 @@
<image :src="userInfo.img" mode=""></image> <image :src="userInfo.img" mode=""></image>
</view> </view>
<view class="right"> <view class="right">
<view class="username" v-if="userInfo.username"> <view v-if="userInfo.username">
<view class="username">
{{userInfo.username}} {{userInfo.username}}
<uni-icons class="vip-icon" custom-prefix="iconfont" type="icon-VIP" size="14" :color="isVip === true ? primaryColor : noVipColor "/> <uni-icons class="vip-icon" custom-prefix="iconfont" type="icon-VIP" size="14" :color="isVip === true ? primaryColor : noVipColor "/>
<br/>画意值{{goldNum}} </view>
<view class="gold-info">画意值{{goldNum}}</view>
</view> </view>
<view class="login-btn uni-primary" v-else @click="$noMultipleClicks(getUserInfoLogin)">点击登录</view> <view class="login-btn uni-primary" v-else @click="$noMultipleClicks(getUserInfoLogin)">点击登录</view>
</view> </view>
@ -25,7 +27,7 @@
</view> </view>
</view> </view>
<view class="prominent-menu-item collect-menu" @click="toLinkAuth('/pages/userInfo/aiPaint/aiPaint')"> <view class="prominent-menu-item collect-menu" @click="toLinkAuth('/pages/userInfo/aiPaint/aiPaint')">
<view class="prominent-menu-title">创作工坊</view> <view class="prominent-menu-title">我的创作</view>
<view class="prominent-menu-icon"> <view class="prominent-menu-icon">
<uni-icons custom-prefix="iconfont" type="icon-chuangzuozhongxin" size="40" :color="primaryColor" /> <uni-icons custom-prefix="iconfont" type="icon-chuangzuozhongxin" size="40" :color="primaryColor" />
</view> </view>
@ -38,12 +40,12 @@
<uni-icons class="list-menu-genduo" custom-prefix="iconfont" type="icon-gengduo"></uni-icons> <uni-icons class="list-menu-genduo" custom-prefix="iconfont" type="icon-gengduo"></uni-icons>
</view> </view>
<view class="list-menu-item" @click="toLink()"> <view class="list-menu-item" @click="toLink()">
<uni-icons class="list-menu-icon" custom-prefix="iconfont" type="icon-gengduo" size="20" :color="primaryColor" /> <uni-icons class="list-menu-icon" custom-prefix="iconfont" type="icon-huabi1" size="20" :color="primaryColor" />
<view class="text">画意值记录</view> <view class="text">画意值记录</view>
<uni-icons class="list-menu-genduo" custom-prefix="iconfont" type="icon-gengduo"></uni-icons> <uni-icons class="list-menu-genduo" custom-prefix="iconfont" type="icon-gengduo"></uni-icons>
</view> </view>
<view class="list-menu-item" @click="$noMultipleClicks(useCdk)"> <view class="list-menu-item" @click="$noMultipleClicks(useCdk)">
<uni-icons class="list-menu-icon" custom-prefix="iconfont" type="icon-gengduo" size="20" :color="primaryColor" /> <uni-icons class="list-menu-icon" custom-prefix="iconfont" type="icon-xunhuanjiagongcishu" size="20" :color="primaryColor" />
<view class="text">兑换绘画次数</view> <view class="text">兑换绘画次数</view>
<uni-icons class="list-menu-genduo" custom-prefix="iconfont" type="icon-gengduo"></uni-icons> <uni-icons class="list-menu-genduo" custom-prefix="iconfont" type="icon-gengduo"></uni-icons>
</view> </view>
@ -400,6 +402,12 @@ import UniIcons from "../../uni_modules/uni-icons/components/uni-icons/uni-icons
} }
} }
.gold-info {
font-size: 24rpx;
line-height: 32rpx;
color: $uni-base-color;
}
} }
} }
} }

155
pages/userInfo/vip/MemberScroll.vue

@ -0,0 +1,155 @@
<template>
<view class="member-scroll">
<view class="member-item" v-for="(item, index) in memberList" :key="index">
<text class="member-name">{{ encryptString(item.name) }}</text>
<text class="member-time">{{ calculateTimeDifference(item.time) }}</text>
<text class="member-info">购买了{{ item.duration }}个月{{ item.vipName }}</text>
</view>
</view>
</template>
<script>
export default {
name: "MemberScroll",
data() {
return {
memberList: []
}
},
created() {
this.generateMemberList();
this.startAutoScroll();
},
methods: {
generateMemberList() {
const names = [
'张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十',
'郑十一', '王十二', '陈十三', '杨十四', '朱十五', '秦十六', '许十七', '何十八'
];
const currentDateTime = new Date();
const memberCount = Math.floor(Math.random() * 6) + 5; // 5-10
for (let i = 0; i < memberCount; i++) {
const randomName = this.generateRandomName(names);
const randomDateTime = this.generateRandomDateTime(currentDateTime);
const member = {
name: randomName,
time: randomDateTime,
duration: Math.floor(Math.random() * 12) + 1,
vipName: "全站VIP权益"
};
this.memberList.push(member);
}
},
generateRandomName(names) {
const randomIndex = Math.floor(Math.random() * names.length);
const randomName = names[randomIndex];
names.splice(randomIndex, 1); // 使
return randomName;
},
padZero(num) {
return num.toString().padStart(2, '0');
},
formatDateTime(date) {
const year = date.getFullYear();
const month = this.padZero(date.getMonth() + 1);
const day = this.padZero(date.getDate());
const hours = this.padZero(date.getHours());
const minutes = this.padZero(date.getMinutes());
const seconds = this.padZero(date.getSeconds());
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
},
generateRandomDateTime(currentDateTime) {
//
const twoHoursAgo = currentDateTime.getTime() - 2 * 60 * 60 * 1000;
//
const randomTimestamp = Math.floor(Math.random() * (currentDateTime.getTime() - twoHoursAgo)) + twoHoursAgo;
// Date
const randomDate = new Date(randomTimestamp);
return this.formatDateTime(randomDate);
},
calculateTimeDifference(dateString) {
const currentDate = new Date(); //
const targetDate = new Date(dateString); //
const timeDifference = Math.floor((currentDate - targetDate) / (1000 * 60)); //
if (timeDifference >= 60) {
const hours = Math.floor(timeDifference / 60); //
return `${hours}小时前`;
} else {
return `${timeDifference}分钟前`;
}
},
startAutoScroll() {
setInterval(() => {
const firstItem = this.memberList.shift();
this.memberList.push(firstItem);
}, 3000);
},
encryptString(str) {
if (!str || str.length <= 1) {
return "***";
}
let firstTwoChars = '';
if (str.length <= 2) {
firstTwoChars = str.substring(0, 1);
} else {
firstTwoChars = str.substring(0, 2); //
}
return firstTwoChars + "***";
}
}
}
</script>
<style lang="scss" scoped>
.member-scroll {
height: 120rpx;
overflow: hidden;
font-size: 24rpx;
.member-item:first-child {
opacity: 1;
}
.member-item:nth-child(2) {
opacity: 1;
}
}
.member-item {
display: flex;
flex-wrap: nowrap;
overflow: hidden;
align-items: center;
margin-bottom: 10rpx;
font-weight: 400;
opacity: 0.5;
}
.member-name {
margin-right: 10rpx;
}
.member-time {
margin-right: 10rpx;
}
</style>

177
pages/userInfo/vip/vip.vue

@ -1,4 +1,5 @@
<template> <template>
<view >
<view class="container"> <view class="container">
<view class="header"> <view class="header">
<view class="vip-info"> <view class="vip-info">
@ -37,6 +38,44 @@
<button class="sumbit-btn" @click="openVip" :disabled="disabled"> <button class="sumbit-btn" @click="openVip" :disabled="disabled">
立即开通 立即开通
</button> </button>
<view class="opened-member-info">
<view class="member-info-title">他们已经享受了会员权益</view>
<MemberScroll />
</view>
<view class="member-benefits">
<view class="benefits-title title">会员权益</view>
<view class="benefits-list">
<view class="benefits-item" v-for="item in memberBenefits" >
<view class="benefits-icon-div" :style="{backgroundColor: item.bgColor}">
<uni-icons class="benefits-icon" custom-prefix="iconfont" :type="item.icon" size="22" :color="item.iconColor" ></uni-icons>
</view>
<view class="benefits-info">
<view class="benefits-name">{{ item.info }}</view>
<view class="benefits-description">{{ item.description }}</view>
</view>
</view>
</view>
</view>
</view>
<view class="purchase-instructions instructions">
<view class="instructions-title title">购买须知</view>
<view class="ul">
<view class="li" v-for="item in purchaseList">
<view class="point">·</view>
<view class="content">{{ item }}</view>
</view>
</view>
</view>
<view class="auto-renewal-instructions instructions">
<view class="instructions-title title">自动续费说明</view>
<view class="ul">
<view class="li" v-for="item in autoRenewalList">
<view class="point">·</view>
<view class="content">{{ item }}</view>
</view>
</view>
</view>
</view> </view>
</template> </template>
@ -47,14 +86,40 @@
unifiedOrder unifiedOrder
} from '@/api/userInfo.js' } from '@/api/userInfo.js'
import {checkVip} from '@/api/paint.js' import {checkVip} from '@/api/paint.js'
import MemberScroll from "./MemberScroll";
export default { export default {
components: {MemberScroll},
data() { data() {
return { return {
userInfo: null, userInfo: null,
vipList: [], vipList: [],
active: 0, active: 0,
disabled: false, disabled: false,
vipInfo: undefined vipInfo: undefined,
memberBenefits: [
{icon: "icon-wuguanggao", iconColor: "#b07838", bgColor: "#fbefc5", info: "免看全部广告", description: "无需看广告解锁,直接用"},
{icon: "icon-biaoqing", iconColor: "#d58859", bgColor: "#fae1d8", info: "千万表情免费用", description: "超全超有趣的表情库,海量表情免费用"},
{icon: "icon-shuazi", iconColor: "#667dc9", bgColor: "#d5e2e9", info: "独享VIP素材", description: "万张热门表情模板等你diy"},
{icon: "icon-tupian", iconColor: "#9474c3", bgColor: "#e7d7fb", info: "专属VIP板块", description: "让你成为斗图届的王者"},
{icon: "icon-tupianliebiao", iconColor: "#d68353", bgColor: "#f4e1d3", info: "专辑一键保存", description: "轻松下载专辑内所有图"},
{icon: "icon-zuanshi", iconColor: "#9e7438", bgColor: "#fbefc5", info: "尊贵身份", description: "专属会员身份标识"},
{icon: "icon-neirongguanli", iconColor: "#916bd4", bgColor: "#e7d7f7", info: "每周精选内容推送", description: "热点再也不会错过啦"},
{icon: "icon-weixin", iconColor: "#6eae9c", bgColor: "#d5ebec", info: "微信小程序互通", description: "意境小程序自动同步权益"},
{icon: "icon-jingqingqidai", iconColor: "#d5d5d7", bgColor: "#f2f3f5", info: "敬请期待", description: "更多精彩权益"},
],
purchaseList: [
"意境会员下载的全部内容,仅限个人使用,禁止商用。",
"会员市场可以叠加购买,续费后过期时间顺延",
"会员购买时立即生效,会员生效时常为购买时间加购买时长,比如您在2020年5月1日12点30分购买了一个月会员 (31天),则在2020年6月1日12点31分期",
"会员权益会在会员到期后失效,但是使用会员权益添加并未删除的部分内容可以继续使用",
"购买会员后不支持退款",
],
autoRenewalList: [
"付款:用户确认购买并付款后记入iTunes账户;",
"续费:苹果账户iTunes账户会在到期前24小时内扣费,扣费成功后订阅周期顺延一个订阅周期;",
"取消续订: 如需取消续订,请在订阅周期到期前24小时之前,手动在iTunes/AppleID设置管理中关闭自动续费功能,如到期前24小时内取消,依然会自动扣款再订阅一个周期。",
]
} }
}, },
methods: { methods: {
@ -160,6 +225,7 @@
.container { .container {
padding: 30rpx; padding: 30rpx;
background: #fff; background: #fff;
border-radius: 0 0 60rpx 60rpx;
.vip-box { .vip-box {
margin: 30px 0; margin: 30px 0;
@ -279,5 +345,114 @@
} }
} }
} }
.opened-member-info {
background-color: $uni-primary-20;
padding: 20rpx;
margin: 20rpx auto;
border-radius: 10rpx;
color: $uni-primary;
.member-info-title {
font-size: 24rpx;
margin-bottom: 20rpx;
font-weight: 600;
}
}
.member-benefits {
.benefits-title {
}
.benefits-list {
display: flex;
flex-wrap: wrap;
.benefits-item {
height: 120rpx;
width: 50%;
display: flex;
align-items: center;
.benefits-icon-div {
height: 80rpx;
width: 80rpx;
border-radius: 40rpx;
flex-shrink: 0;
text-align: center;
line-height: 80rpx;
margin-right: 20rpx;
.benefits-icon {
}
}
.benefits-info {
height: 120rpx;
.benefits-name {
margin-top: 12rpx;
font-size: 28rpx;
line-height: 48rpx;
}
.benefits-description {
font-size: 20rpx;
line-height: 32rpx;
color: $uni-base-color;
}
}
}
}
}
}
.title {
font-size: 40rpx;
margin-bottom: 20rpx;
}
.purchase-instructions {
padding: 30rpx;
} }
.auto-renewal-instructions {
padding: 30rpx;
}
.instructions {
.ul {
.li {
display: flex;
color: $uni-base-color;
font-size: 24rpx;
line-height: 36rpx;
margin-bottom: 10rpx;
.point {
width: 30rpx;
text-align: center;
flex-shrink: 0;
}
.content {
}
}
}
}
</style> </style>

42
static/icon/iconfont.css

@ -1,6 +1,6 @@
@font-face { @font-face {
font-family: "iconfont"; /* Project id 3946003 */ font-family: "iconfont"; /* Project id 3946003 */
src: url('/static/icon/iconfont.ttf?t=1684048739520') format('truetype'); src: url('/static/icon/iconfont.ttf?t=1684580762824') format('truetype');
} }
.iconfont { .iconfont {
@ -11,6 +11,46 @@
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
.icon-huabi1:before {
content: "\e61a";
}
.icon-xunhuanjiagongcishu:before {
content: "\e600";
}
.icon-tupianliebiao:before {
content: "\e61c";
}
.icon-shuazi:before {
content: "\e65e";
}
.icon-zuanshi:before {
content: "\e728";
}
.icon-jingqingqidai:before {
content: "\e618";
}
.icon-wuguanggao:before {
content: "\e69a";
}
.icon-biaoqing:before {
content: "\e619";
}
.icon-weixin:before {
content: "\e8bc";
}
.icon-neirongguanli:before {
content: "\e683";
}
.icon-VIP:before { .icon-VIP:before {
content: "\e68e"; content: "\e68e";
} }

BIN
static/icon/iconfont.ttf

Binary file not shown.
Loading…
Cancel
Save