This commit is contained in:
蔡同学
2025-08-25 11:20:35 +08:00
parent 25df08ec69
commit 6df8112e7b
251 changed files with 34346 additions and 0 deletions
+134
View File
@@ -0,0 +1,134 @@
<template>
<view>
<!-- <view style="margin:10upx 30upx 0 30upx;box-shadow: 0px 4px 20px 0px rgba(0,0,0,0.04);">
<home-banner :banners="banners"></home-banner>
</view> -->
<view class="" style="padding: 30upx 30upx 0px 30upx;">
<block v-for="(value,key) in listData" :key="key">
<view @click="detail(value.vid,value.mid)" style="position: relative;" class="flex alcenter mb16">
<image mode="aspectFill" class="tuan-product-l" :src="value.img"></image>
<!-- <view class="btn-mini" style="position: absolute; top: 40upx; left: 280upx; border-radius: 10upx;font-size: 18upx;width: 60upx; height: 36upx;" :style="getBtnStyle">{{value.lxname}}</view> -->
<view class="tuan-product-r pl15">
<view class="ft16 ftw600 cl-main text-over2">{{value.vname}}</view>
<view class="mt16">
<text class="ft14 cl-orange" style="color: #09D89E;">{{value.dqname}}</text>
</view>
<view class="mt16 flex space alcenter">
<view class="ft14 cl-notice">{{value.mname}}</view>
<view class="btn-vip-adviser ml15">继续观看</view>
</view>
</view>
</view>
</block>
</view>
<uni-load-more :status="status" />
<view style="width: 100%; height: 30rpx;"></view>
</view>
</template>
<script>
export default {
data(){
return {
banners:[],
searchValue:'',
pages:{
currentPage:1,
pageSize:20,
isNextPage:true
},
tabs:[
{name:'全部'},
{name:'视频'},
{name:'音频'},
{name:'小说'},
{name:'壁纸'},
],
selectIndex:0,
scrollTop:0,
type:'',
listData: [],
status: 'more',
}
},
onLoad(e){
//console.log(111)
if(e.selectIndex){
this.selectIndex=e.selectIndex*1
}
this.status = 'more';
this.getList();
this.banners=uni.getStorageSync("config").banner
},
onReachBottom() {
this.status = 'more';
this.getList();
},
methods:{
detail(vid,mid){
uni.navigateTo({
url:'/pagesA/player/detailPlayer?vid='+vid+'&mid='+mid
})
},
getList() {
let that = this;
if (that.pages.isNextPage) {
that.status = 'loading';
that.$httpRequest({
url: "/api/video/recordlist",
methods: "GET",
data: {
limit: that.pages.pageSize,
page: that.pages.currentPage
}
}).then(res => {
that.status = '';
if (that.pages.currentPage == 1) {
that.listData = res.rows;
} else if (res.rows.length > 0) {
that.listData = that.listData.concat(res.rows);
} else {
that.status = 'noMore';
that.pages.isNextPage = false;
}
that.pages.currentPage += 1;
}).catch(err => {
that.status = '';
console.log(err)
})
}
},
}
}
</script>
<style scoped>
.tuan-product-l{
width: 150rpx;
height: 200rpx;
border-radius: 16rpx;
background: #F2F2F2;
}
.tuan-product-r{
width: calc(100% - 150rpx);
}
.btn-vip-adviser{
width: 150rpx;
height: 60rpx;
border-radius: 20rpx;
display: flex;
justify-content: center;
align-items: center;
font-size: 28rpx;
/* font-weight: 600; */
border-radius: 12rpx;
border: 2rpx solid #09D89E;
color: #09D89E;
}
</style>
+163
View File
@@ -0,0 +1,163 @@
<template>
<view>
<view class="flex" style="display:flex; flex-wrap:wrap; padding: 30upx 30upx 0px 30upx;">
<block v-for="(value,key) in listData" :key="key">
<view class="mb15" style="width:31%; border-radius:20rpx;margin-right: 14rpx;"
@click="detail(value.vid,value.mid)">
<!-- <view class="btn-mini" style="position: absolute; top: 20upx; right: 20upx; border-radius: 10upx;font-size: 18upx;width: 60upx; height: 36upx; z-index: 1;" :style="getBtnStyle">{{value.lxname}}</view> -->
<image class="integral-mall-goods" mode="aspectFill" :src="value.img"></image>
<view class="pr10 ft14 ftw400 text-over cl-main">{{value.vname}}</view>
<view class="pr10 ft12 ftw500 text-over cl-999">观看至 {{value.mid}} 集</view>
</view>
</block>
</view>
<uni-load-more :status="status" :content-text="contentText" />
<view style="width: 100%; height: 30upx;"></view>
</view>
</template>
<script>
export default {
data() {
return {
banners: [],
searchValue: '',
pages: {
currentPage: 1,
pageSize: 20,
isNextPage: true
},
tabs: [{
name: '全部'
},
{
name: '视频'
},
{
name: '音频'
},
{
name: '小说'
},
{
name: '壁纸'
},
],
selectIndex: 0,
scrollTop: 0,
type: '',
listData: [],
status: 'more',
contentText: {
contentdown: "上拉显示更多",
contentrefresh: "正在加载...",
contentnomore: "没有更多数据了"
},
}
},
onLoad(e) {
//console.log(111)
if (e.selectIndex) {
this.selectIndex = e.selectIndex * 1
}
this.status = 'more';
this.getList();
this.banners = uni.getStorageSync("config").banner
},
onReachBottom() {
this.status = 'more';
this.getList();
},
methods: {
detail(vid, mid) {
uni.navigateTo({
url: '/pagesA/player/detailPlayer?vid=' + vid + '&mid=' + mid
})
},
getList() {
let that = this;
if (that.pages.isNextPage) {
that.status = 'loading';
that.$httpRequest({
url: "/api/video/wdxh",
methods: "GET",
data: {
limit: that.pages.pageSize,
page: that.pages.currentPage
}
}).then(res => {
that.status = '';
if (that.pages.currentPage == 1) {
that.listData = res.rows;
} else if (res.rows.length > 0) {
that.listData = that.listData.concat(res.rows);
} else {
that.status = 'noMore';
that.pages.isNextPage = false;
}
that.pages.currentPage += 1;
}).catch(err => {
that.status = '';
console.log(err)
})
}
},
}
}
</script>
<style scoped>
.integral-mall-goods {
width: 100%;
height: 280rpx;
background: #F2F2F2;
border-radius: 16upx;
}
.user-not-vip {
width: 100%;
height: 80rpx;
background: #FDF6EC;
border-radius: 40rpx;
border: 2rpx solid #EFC381;
text-align: center;
line-height: 76rpx;
font-size: 24rpx;
color: #000000;
font-weight: bold;
}
.tuan-product-l {
width: 320rpx;
height: 240rpx;
border-radius: 16rpx;
background: #F2F2F2;
}
.tuan-product-r {
width: calc(100% - 320rpx);
}
.search-result {
padding-top: 10px;
padding-bottom: 20px;
text-align: center;
}
.search-result-text {
text-align: center;
font-size: 14px;
color: #666;
}
.uni-mt-10 {
margin-top: 10px;
}
</style>
+661
View File
@@ -0,0 +1,661 @@
<template>
<view class="pagesContent">
<view class="pagesHeader">
<view class="navBack">
<uni-icons class="backIcon" type="left" size="24" color="#ffffff" @click="navBack"></uni-icons>
金豆充值
</view>
<view class="flex cl-w" style="flex-direction: column;padding-left: 58rpx;">
<view class="flex alcenter">
<text style="font-weight: bold;font-size: 72rpx;color: #FFFFFF;float: left;">{{ userdata.beans }}</text>
<uni-icons style="margin-left: 80rpx;" type="right" size="24" color="#ffffff"
@click="goBill"></uni-icons>
</view>
<text class="ft16 ftw500" style="float: left;margin-top: 22rpx;">我的金豆</text>
</view>
</view>
<view
style="margin-top: -36rpx;padding: 36rpx 36rpx;background-color: #fff;border-radius: 28rpx 28rpx 0rpx 0rpx;">
<view class="ftw500 ft14 cl-333" style="margin-bottom: 24rpx;">充值金额</view>
<view class="vipCarBox" v-if="payListGroupId==1">
<view :class="[
'vipCarItem',
{'vipCarThird':item.pay_type == 1},
{'vipCarFirst': item.pay_type == 2},
{'vipCarFourth':item.pay_type == 3 },
] " v-for="item in list" :key="item.id" @click="purchase(item)">
<text class="icon" v-if="item.pay_tab > 0">特惠</text>
<view class="moneyLine">
<view class="money" v-if="system=='ios' && is_check"> </view>
<view class="money" v-else>¥{{ item.pay_money }}</view>
<view class="beanBtn" v-if="item.pay_give_num && item.pay_type == 2">赠{{ item.send_integral }}积分
</view>
</view>
<view class="depict" v-if="item.pay_give_num && item.pay_type == 2">
{{ item.pay_num }}金豆+{{ item.pay_give_num }}豆
</view>
<view class="depict" v-if="!item.pay_give_num && item.pay_type == 2">
{{ item.pay_num }}金豆
</view>
<view class="explainText" v-if="item.pay_type != 2">
<text v-if="item.pay_type == 1" style="color: #333333;">全部影片免费观看</text>
<text v-if="item.pay_type == 3" style="color: #FF6900;">本剧订阅全集</text>
</view>
<view class="choiceNum" v-if="item.menber_sel">{{ item.menber_sel }}%用户选择</view>
</view>
</view>
</view>
<view v-if="system=='ios' && is_check"></view>
<view class="agreement" v-else>
<view class="ft12 ftw500 cl-999">充值说明:</view>
<view class=" ftw500 cl-999" style="font-size: 22rpx;">虚拟商品购买后不可退换,青少年请在家长的陪同下充值</view>
</view>
<view v-if="show"
style="background-color: rgba(0,0,0, 0.5);width: 750rpx;height: 100vh;z-index: 99;position: absolute;bottom: 0;left: 0;opacity:.5;"
@click="show=false"></view>
<view v-if="show" style="width: 750rpx;background: #F8F8F9;position: absolute;bottom: 0;left: 0;z-index: 999;">
<view style="background-color: #fff;padding: 30rpx;">
<view class="flex alcenter space">
<text class="ft14 cl-info2">需支付</text>
<text class="ft16 cl-main ftw600 cl-orange">¥{{ pricebuy }}</text>
</view>
</view>
<view class="box mt16 pd16_15">
<view class="ft16 pb16 ftw600 cl-main">支付方式</view>
<view class="bd-line mt16"></view>
<radio-group @change="changeType">
<view class="pt16 pb16 flex alcenter space">
<view class="flex alcenter">
<text class="iconfont iconicon_pay_balance ft32 cl-green"></text>
<text class="ml15 ft14 ftw500 cl-main">微信支付</text>
</view>
<view>
<radio value="weixin" :checked="payType == 'weixin'" />
</view>
</view>
<view class="bd-line"></view>
</radio-group>
</view>
<view class="form-footer-h">
<view class="form-footer form-footer-h">
<view class="form-footer-main pd10_15" v-if="system=='ios' && is_check">
<button class="btn-big">请使用android手机体验</button>
</view>
<view class="form-footer-main pd10_15" v-else>
<button v-if="mid>0" class="btn-big" @click="okTap">支付
¥{{ pricebuy }}
</button>
<button v-else class="btn-big" @click="okTap">支付 ¥{{ pricebuy }}</button>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import PAY from "@/utils/pay";
export default {
data() {
return {
show: false,
list: [],
userdata: {},
// payType:'微信',
payType: 'weixin',
num: 1,
coupon_id: 0,
buydata: [],
buyType: '微信',
dataList: Object,
money: 0,
mid: 0,
openid: '',
pricebuy: 0,
wxlx: 'wxh5',
coupons: [{
coupon_id: 1,
num: 20
},
{
coupon_id: 2,
num: 30
},
{
coupon_id: 3,
num: 40
},
],
id: '',
jine: '',
system: '',
payListGroupId: 1,
userInfo: {},
allVideoNum: 1,
is_check: false
}
},
onLoad() {
this.system = uni.getSystemInfoSync().osName
//#ifdef MP-WEIXIN
this.wxlx = 'wxxcx'
this.openid = uni.getStorageSync("openid")
this.userInfo = uni.getStorageSync("userinfo");
//#endif
//#ifdef H5
var ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == 'micromessenger') {
this.wxlx = 'wxgzh';
}
//#endif
},
onShow() {
this.is_check = uni.getStorageSync('config').is_check == 1 ? true : false;
},
mounted() {
this.payListGroupId = uni.getStorageSync("config").pay_tpl;
this.payListGroupId = 1
this.getAllVideoNum();
this.getPayList()
this.getUserDel()
},
methods: {
okTap() {
var that = this
let defaultData = {
sum: 1,
buyType: that.buyType,
pricebuy: that.pricebuy,
token: uni.getStorageSync("userinfo").token,
uid: uni.getStorageSync("userinfo").id,
wxlx: that.wxlx,
id: that.id,
openid: that.openid,
info: [],
};
// #ifdef MP-WEIXIN
this.weiChartPay(defaultData)
// #endif
// #ifdef H5
this.H5Pay();
// #endif
},
weiChartPay(defaultData) {
var that = this
if (this.system == 'android') {
uni.login({
timeout: 10000,
provider: 'weixin', //如果是uniapp,在这里需要标明平台的类型,支持的参数请查阅uniapp官网的uni.login()文档
success: (res) => {
PAY.pays.serverCreatOrder({
id: that.id,
pay_type: 5,
code: res.code,
ad_code: uni.getStorageSync('get_ad_code'),
openid: that.openid,
}).then(creatRes => {
console.log('creat order success', creatRes)
PAY.pays.wxAppletAndroidPay(creatRes.data).then(payRes => {
console.log('pay order success', payRes)
that.getUserDel()
uni.showToast({
icon:'none',
title: '支付成功'
});
this.show = false;
uni.navigateBack();
})
}).catch(err => {
console.log(err)
})
},
})
} else {
PAY.pays.wxIosCreatOrder({
sum: defaultData.sum,
buytype: defaultData.buyType,
pricebuy: defaultData.pricebuy,
token: defaultData.token,
uid: defaultData.uid,
wxlx: defaultData.wxlx,
id: defaultData.id,
openid: defaultData.openid,
info: defaultData.info,
ad_code: uni.getStorageSync('get_ad_code')
}).then(res => {
if (res.code == 1) {
PAY.pays.wxAppletIosPay(res.data).then(payRes => {
console.log('pay order success', payRes)
that.getUserDel()
})
}
}).catch(err => {
console.log(err)
})
}
},
H5Pay() {
let that = this;
that.$httpRequest({
url: "/api/pay/payInfo",
method: "GET",
data: {
id: that.id,
pay_type: 21,
token: uni.getStorageSync("userinfo").token,
uid: uni.getStorageSync("userinfo").id,
ad_code: uni.getStorageSync('get_ad_code')
}
}).then(res => {
console.log(res)
// #ifdef H5
window.open(res.data.return_url, "_self")
// #endif
// #ifdef APP
uni.navigateTo({
url: "/pagesA/myCenter/wallet/webPay?url=" + encodeURIComponent(res.data
.return_url)
})
// #endif
}).catch(err => {
console.log(err)
})
},
goBill() { //消费明细
uni.navigateTo({ //钱包
url: '/pagesA/myCenter/wallet/bill'
})
},
changeType(e) {
this.payType = e.detail.value;
if (e.detail.value == 'money') {
this.buyType = '余额';
}
if (e.detail.value == 'weixin') {
this.buyType = '微信';
}
},
purchase(e) {
this.id = e.id
// #ifdef MP-WEIXIN
if (this.system == 'ios' && this.is_check) {} else {
this.pricebuy = e.pay_money
this.show = true
}
// #endif
// #ifdef H5
this.H5Pay()
// #endif
},
getUserDel() {
this.$httpRequest({
url: "/api/user/index",
method: "GET"
}).then(res => {
this.userdata = res.data;
uni.setStorageSync('userinfo', res.data);
uni.setStorageSync('config', res.data.config)
}).catch(err => {
console.log(err)
})
},
getPayList() {
this.$httpRequest({
url: "/api/beans/payList",
method: "GET"
}).then(res => {
if (res.code == 1) {
if (res.data.length > 0) {
let lists = [];
res.data.forEach((item) => {
if (item.pay_type != 3) {
lists.push(item)
}
})
this.list = lists
}
} else if (res.data.code == 50) {
this.is_check = true;
} else {
console.log(res)
}
}).catch(err => {
console.log(err)
})
},
navBack() {
uni.navigateBack(1);
},
goAgreement(e) {
uni.navigateTo({
url: '/pagesA/agreement/agreement?id=' + e
})
},
getAllVideoNum() {
this.$httpRequest({
url: "/api/video/videoCount",
method: "GET"
}).then(res => {
this.allVideoNum = res.data.count
})
},
}
}
</script>
<style scoped>
.pagesContent {
height: 100vh;
background-color: #fff;
}
.pagesHeader {
background-image: url('https://wx.yaohe.hnjrdzkj.xyz/static/wechat/static/chongz.png');
background-size: 750rpx 360rpx;
background-repeat: no-repeat;
width: 750rpx;
height: 360rpx;
padding-top: 58rpx;
}
.navBack {
font-size: 32rpx;
color: #ffffff;
font-weight: 600;
text-align: center;
height: 100rpx;
line-height: 100rpx;
position: relative;
}
.backIcon {
position: absolute;
left: 16rpx;
top: 0rpx;
}
.explain {
padding: 0 26rpx;
}
.explainTitle {
line-height: 40rpx;
font-size: 28rpx;
color: #333333;
}
.vipCarBox {
align-items: center;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
flex-direction: row;
margin-bottom: 20rpx;
}
.vipCarItem {
width: 336rpx;
height: 200rpx;
border-radius: 12rpx;
margin-bottom: 24rpx;
position: relative;
}
.vipCarFirst {
background-image: linear-gradient(to right, #FF9A54, #FF3C3C);
}
.vipCarSecond {
background-image: linear-gradient(to right, #FF9A54, #FF3C3C);
}
.vipCarThird {
background-image: url('https://wx.yaohe.hnjrdzkj.xyz/static/wechat/static/taoc2.png');
background-size: 100% 100%;
}
.vipCarFourth {
background-image: url('https://wx.yaohe.hnjrdzkj.xyz/static/wechat/static/dingyue_a.png');
background-size: 100% 100%;
color: ;
}
.icon {
position: absolute;
color: #333333;
font-size: 20rpx;
font-weight: 500;
line-height: 35rpx;
padding: 0 20rpx;
border-radius: 0rpx 0rpx 16rpx 0rpx;
background: linear-gradient(180deg, #FFFFFF 0%, #FFC833 100%);
}
.vipCarThird .icon {
background: linear-gradient(90deg, #FFBC48 0%, #FF5D41 100%);
color: #ffffff;
}
.vipCarFourth .icon {
background: linear-gradient(90deg, #FFBC48 0%, #FF5D41 100%);
color: #ffffff;
}
.moneyLine {
display: flex;
align-items: center;
flex-direction: row;
justify-content: space-between;
padding: 0 20rpx;
margin-top: 45rpx;
}
.vipCarFourth .moneyLine {
color: #FF300A;
padding-left: 20rpx;
}
.money {
font-size: 32rpx;
color: #ffffff;
}
.vipCarFourth .money {
color: #333333;
}
.vipCarFourth .depict {
color: #333333;
}
.vipCarThird .money {
color: #333333;
}
.beanBtn {
text-align: center;
font-weight: 500;
font-size: 22rpx;
color: #333333;
line-height: 48rpx;
padding: 0 16rpx;
background: linear-gradient(180deg, #FFF2D1 0%, #FFC323 100%);
border-radius: 24rpx;
}
.depict {
font-size: 32rpx;
font-weight: 500;
color: #FFFFFF;
line-height: 44rpx;
padding: 10rpx 20rpx;
}
.explainText {
margin-top: 26rpx;
padding-left: 20rpx;
}
.explainText text {
font-size: 28rpx;
font-weight: 600;
}
.choiceNum {
text-align: right;
font-size: 22rpx;
font-weight: 500;
color: #FFCA3A;
line-height: 32rpx;
padding-right: 20rpx;
}
/*新版*/
.VipCardContent {
padding: 40rpx 0;
}
.vipCarBoxSecond .vipCarItem {
background-color: #ffffff;
border-radius: 12rpx;
}
.vipCarBoxSecond .border {
border: 6rpx solid #dc3a35;
background-color: #f6e2af;
}
.rightIcon {
position: absolute;
right: 0;
top: -20rpx;
line-height: 40rpx;
color: #ffffff;
font-size: 30rpx;
padding: 0 15rpx;
border-radius: 0 12rpx 0 12rpx;
background-color: #dc3a35;
max-width: 336rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.carMoney {
text-align: center;
font-size: 26rpx;
font-weight: bold;
display: flex;
align-items: center;
flex-direction: row;
justify-content: center;
}
.carMoney text {
font-size: 32rpx;
font-weight: bold;
}
.carMoneyExplain {
color: #666666;
text-align: center;
line-height: 30rpx;
font-size: 28rpx;
height: 30rpx;
}
.vipCarFooter {
line-height: 45rpx;
background-color: #dc3a35;
color: #ffffff;
text-align: center;
font-size: 26rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.redColor {
color: #dc3a35;
}
.footerRedColor {
line-height: 50rpx;
background-color: #fde6e6;
color: #dc3a35;
text-align: center;
font-size: 26rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
border-radius: 0 0 12rpx 12rpx;
}
.hands {
position: absolute;
right: -10px;
bottom: 0rpx;
width: 90rpx;
height: 90rpx;
z-index: 300;
transform: rotate(-15deg);
}
.agreement {
position: fixed;
bottom: 10px;
width: 100%;
line-height: 40rpx;
font-size: 28rpx;
margin-left: 36rpx;
background-color: #fff;
}
.agreementItem {
color: #0a5ab6;
padding: 0 10rpx;
font-size: 28rpx;
font-size: 28rpx;
}
.explainItem {
line-height: 40rpx;
font-size: 24rpx;
color: #999999;
}
.btn-big {
background-color: #07c160;
color: #FFFFFF;
}
</style>
+180
View File
@@ -0,0 +1,180 @@
<template>
<view class="form">
<view class="box">
<view class="formItem">
<view class="label">新手机号</view>
<view class="ipt">
<input class="uni-input" type="phone" @input="changePhone" placeholder="请输入手机号"
:value="inputValue" />
</view>
</view>
<view class="formItem">
<view class="label">验证码</view>
<view class="ipt">
<input class="uni-input" type="text" @input="changeCode" placeholder="请输入验证码" :value="code" />
</view>
<view class="getCodeBtn" @click="getCode">{{btnText}}</view>
</view>
</view>
<button class="onname" :style="{'background':dbled?'#999':'#08d89b'}" :disabled="dbled" type="primary"
@click="upPhone()">确认修改</button>
</view>
</template>
<script>
export default {
data() {
return {
inputValue: "",
isUp: false,
btnText: "获取验证码",
interV: null,
time: 60,
isGetCode: false,
code: ""
}
},
onLoad(options) {
this.inputValue = options.mobile
},
methods: {
changePhone(e) {
this.inputValue = e.detail.value
},
changeCode(e) {
this.code = e.detail.value;
},
upPhone() {
let that = this;
if (!/^1[3456789]\d{9}$/.test(that.inputValue)) {
uni.showToast({
title: "手机号有误"
})
return
}
if (!that.isUp) {
that.isUp = true;
that.$httpRequest({
url: "/api/user/changemobile",
method: "POST",
data: {
mobile: that.inputValue,
captcha: this.captcha
}
}).then(res => {
if (res.code == 1) {
uni.showToast({
title: "修改成功",
icon: "none",
duration: 1500
});
}
})
} else {
uni.showToast({
title: "请勿频繁提交"
})
}
},
getCode() {
if (!this.isGetCode) {
this.isGetCode = true;
console.log(this.inputValue);
if (/^1[3456789]\d{9}$/.test(this.inputValue)) {
this.interV = setInterval(() => {
this.time--;
this.btnText = this.time + '秒后重新获取'
if (this.time <= 0) {
this.isGetCode = false;
this.btnText == "获取验证码";
this.time = 60;
}
}, 1000)
uni.request({
url: this.configs.webUrl + '/api/sms/index',
data: {
phone: this.inputValue
},
success() {
uni.showToast({
title: "发送成功",
icon: "none",
duration: 1500
})
},
fail() {
}
})
} else {
uni.showToast({
title: "手机号有误",
icon: "none",
duration: 1500
})
this.isGetCode = false;
}
} else {}
},
},
beforeDestroy() {
clearInterval(this.interV)
}
}
</script>
<style scoped>
.form {
margin: 20rpx;
}
.formItem {
display: flex;
height: 120rpx;
align-items: center;
border: 2rpx solid #F8F8F8;
}
.label {
width: 260rpx;
font-size: 32rpx;
height: 80rpx;
line-height: 80rpx;
margin-left: 36rpx;
}
.ipt {
width: 100%;
}
.ipt input {
height: 80rpx;
line-height: 80rpx;
font-size: 30rpx;
}
.getCodeBtn {
font-size: 26rpx;
padding: 15rpx 0;
min-width: 220rpx;
text-align: center;
border-radius: 15rpx;
}
.onname {
margin-top: 50rpx;
}
</style>
+361
View File
@@ -0,0 +1,361 @@
<template>
<view class="container">
<view class="list-cell b-b avatar" style="border-radius: 16rpx 16rpx 0 0;" @click="clk(0)">
<text class="cell-tit">头像</text>
<image :src="imgUrl+ userInfo.avatar" mode=""></image>
<uni-icons type="arrowright" size="20" color="#999"></uni-icons>
</view>
<view class="list-cell" hover-class="cell-hover" :hover-stay-time="50">
<text class="cell-tit">昵称</text>
<input class="uni-input" style="width: 440rpx; text-align: right;" v-model="userInfo.nickname"
placeholder="请输入昵称" />
<uni-icons type="arrowright" size="20" color="#999"></uni-icons>
</view>
<view class="list-cell" @tap="sex" hover-class="cell-hover" :hover-stay-time="50">
<text class="cell-tit">性别</text>
<text class="cell-tip">{{ userInfo.gender ? '女':'男'}}</text>
<uni-icons type="arrowright" size="20" color="#999"></uni-icons>
</view>
<view class="list-cell" style="border-radius: 0 0 16rpx 16rpx;" @tap="onTime" hover-class="cell-hover"
:hover-stay-time="50">
<text class="cell-tit">生日</text>
<text class="cell-tip">{{userInfo.dtime}}</text>
<uni-icons type="arrowright" size="20" color="#999"></uni-icons>
</view>
<view class="list-cell m-t b-b" style="border-radius: 16rpx;"
@click="navTo('/pagesA/myCenter/settings/mobile?mobile='+userInfo.mobile)" hover-class="cell-hover"
:hover-stay-time="50">
<text class="cell-tit">手机号</text>
<text class="cell-tip">{{userInfo.mobile}}</text>
<uni-icons type="arrowright" size="20" color="#999"></uni-icons>
</view>
<view class="practices button" @click="sexgender">保存</view>
<!--生日-->
<uv-datetime-picker ref="datetimePicker" :formatter="formatter" mode="date" @confirm="dialogTime">
</uv-datetime-picker>
</view>
</template>
<script>
let sex = ['男', '女'];
export default {
data() {
return {
urls: '',
sexsi: '',
array: [],
ageid: 0,
listgrzl: [],
msg: false,
imgUrl: this.$config.webUrl,
userInfo: {},
configUrl: this.$config.webUrl,
};
},
computed: {
sexType() {
return sex[this.sexsi];
},
},
onShow() {
this.getUsers();
if (this.msg) {
uni.showToast({
title: '保存成功',
icon: "none"
});
this.msg = false;
}
},
methods: {
getUsers() {
let that = this;
that.$httpRequest({
url: "/api/user/index",
method: "GET"
}).then(res => {
that.userInfo.avatar = res.data.avatar;
that.userInfo.nickname = res.data.nickname
that.userInfo.gender = res.data.gender
that.userInfo.dtime = res.data.birthday
that.userInfo.mobile = res.data.mobile
this.$forceUpdate()
console.log(that.userInfo);
uni.setStorageSync('userinfo', res.data);
uni.setStorageSync('config', res.data.config)
})
},
unlockChange(e) {
console.log(e.detail.value)
let that = this;
that.$httpRequest({
url: "/api/user/userAutoPlay",
method: "GET",
data: {
type: e.detail.value ? 1 : 0
}
}).then(res => {
if (res.code === 1) {
that.userInfo.auto_unlock = e.detail.value ? 1 : 0;
uni.removeStorageSync('userinfo')
uni.setStorageSync('userinfo', that.userInfo)
}
})
},
navTo(url) {
console.log(url)
uni.navigateTo({
url: url,
success: (res) => {
console.log(res)
},
fail: (err) => {
console.log(err)
}
})
},
navsTo(url) {
uni.navigateTo({
url: url
})
},
//选择性别
sex() {
uni.showActionSheet({
itemList: sex,
success: (res) => {
console.log(res);
this.userInfo.gender = res.tapIndex
this.$forceUpdate()
}
});
},
sexgender() {
console.log(this.userInfo.avatar);
this.$httpRequest({
url: "/api/user/edituser",
method: "GET",
data: {
sex: this.userInfo.gender,
nickname: this.userInfo.nickname,
org: this.userInfo.dtime,
avatar: this.userInfo.avatar,
}
}).then(res => {
uni.showToast({
title: "修改成功",
duration: 2000,
icon: 'none'
});
this.getUsers();
})
},
doBefore() {
console.log('doBefore');
},
clk(index) {
uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success: (r) => {
this.doUpload(r)
}
})
},
doUpload(rsp) {
let that = this;
uni.showLoading({
title: '加载中'
});
uni.uploadFile({
url: this.$config.webUrl + '/api/user/avatar?token=' + uni.getStorageSync("userinfo")
.token, //仅为示例,非真实的接口地址
file: rsp.tempFiles[0].path || rsp.tempFiles[0],
filePath: rsp.tempFiles[0].path || rsp.tempFiles[0],
name: "file",
dataType: "json",
formData: {
token: uni.getStorageSync("userinfo").token,
uid: uni.getStorageSync("userinfo").id,
file: rsp.tempFiles[0].path || rsp.tempFiles[0]
},
success: (uploadFileRes) => {
var dataarr = JSON.parse(uploadFileRes.data);
if (dataarr.code == 1) {
console.log(dataarr.data.url)
let userinfo = uni.getStorageSync('userinfo');
this.userInfo.avatar = dataarr.data.url;
console.log(this.userInfo.avatar);
this.getUsers()
uni.removeStorage('userinfo')
uni.setStorageSync('userinfo', userinfo)
uni.showToast({
title: "修改成功"
})
} else {
uni.showToast({
title: dataarr.msg
})
}
},
});
},
//修改生日
onTime() {
this.$refs.datetimePicker.open();
},
formatter(type, value) {
if (type === 'year') {
return `${value}年`
}
if (type === 'month') {
return `${value}月`
}
if (type === 'day') {
return `${value}日`
}
return value
},
dialogTime(e) {
this.userInfo.dtime = this.timestampToDate(e.value)
this.$forceUpdate()
},
timestampToDate(timestamp) {
var date = new Date(timestamp); // 转换为Date对象
var year = date.getFullYear(); // 获取年份
var month = ('0' + (date.getMonth() + 1)).slice(-2); // 获取月份,转为两位数
var day = ('0' + date.getDate()).slice(-2); // 获取日,转为两位数
return year + '-' + month + '-' + day; // 拼接字符串返回
},
},
}
</script>
<style lang='scss' scoped>
.yyt-ellipsis {
display: inline-block;
overflow: hidden; //超出的文本隐藏
text-overflow: ellipsis; //溢出用省略号显示
white-space: nowrap; //溢出不换
}
.container {
padding: 20rpx;
background: #F7F8F9;
}
.avatar {
padding-top: 40upx !important;
padding-bottom: 40upx !important;
}
.agess {
position: absolute;
z-index: 2;
top: 0px;
right: 0px;
height: 100%;
line-height: 38px;
padding-left: 200px;
padding-right: 36px !important;
background: transparent;
}
.avatar .cell-tit {
font-weight: bold !important;
}
.avatar image {
position: absolute;
top: 50%;
right: 36px;
width: 88upx;
height: 88upx;
border-radius: 50%;
margin-top: -44upx;
z-index: 1
}
.list-cell {
display: flex;
padding: 20upx;
line-height: 60upx;
position: relative;
background: #fff;
justify-content: center;
align-items: center;
border-bottom: 1rpx solid #eeeeee;
&.log-out-btn {
margin-top: 40upx;
.cell-tit {
color: $uni-color-primary;
text-align: center;
margin-right: 0;
}
}
&.cell-hover {
background: #fafafa;
}
&.b-b:after {
left: 30upx;
}
&.m-t {
margin-top: 16upx;
}
.cell-more {
align-self: baseline;
margin-left: 10upx;
}
.cell-tit {
flex: 1;
margin-right: 10upx;
}
.cell-tip {}
switch {
transform: translateX(16upx) scale(.84);
}
}
.practices {
height: 80rpx;
width: 100%;
border-radius: 40rpx;
background: linear-gradient(123deg, #00E075 0%, #09D89E 100%);
text-align: center;
line-height: 80rpx;
margin-top: 200rpx;
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
}
</style>
+119
View File
@@ -0,0 +1,119 @@
<template>
<view>
<view class="uni-form-item uni-column">
<view class="with-fun" style="padding: 20upx;">
<input class="uni-input" type="text" confirm-type="done" focus :placeholder="name" placeholder-style="color:#666" @input="onKeyInput" :value="inputValue" />
</view>
</view>
<button class="onname" :style="{'background':dbled?'#999':'#E17503'}" :disabled="dbled" type="primary" @tap="onOKname()">确 认</button>
</view>
</template>
<script>
export default {
data() {
return {
inputValue: '',
dbled:true,
name:'',
ty:''
}
},
onLoad(options){
//接收传值,id里面放的是标题,因为测试数据并没写id
let ty = options.ty;
let name = options.name;
let v = options.v;
this.ty=ty;
this.name='请修改'+name;
uni.setNavigationBarTitle({
title: '修改'+name
});
if(v=='null'){
this.inputValue='';
}else{
this.inputValue=v;
}
},
onBackPress() {
console.log('ok')
},
methods: {
onKeyInput(event){
this.inputValue = event.target.value
let lens = event.target.value
if(lens.length){
this.dbled=false
}else{
this.dbled=true
}
},
onOKname() {
let that = this;
that.$httpRequest({
url:"/api/user/edituser",
method:"GET",
data:{
[this.ty]: this.inputValue
}
}).then(res=>{
uni.showToast({title: '修改成功',icon:"none",duration:2000})
}).catch(err=>{
})
}
}
}
</script>
<style scoped>
.title {
padding: 10upx 25upx;
}
.with-fun{
background: #f8f8f8;
position: relative;
}
.with-fun:after{
position: absolute;
content: $name;
height: 50px;
line-height: 50px;
top: 0px;
left: 20px;
font-size: 32upx;
}
.uni-input{
height: 50px;
line-height: 50px;
font-size: 32upx;
background: #f8f8f8;
color: #666;
}
.uni-icon-clear,
.uni-icon-eye {
color: #999;
}
.onname{
width: 94%;
margin: 20upx auto;
background: -webkit-linear-gradient(left top, #E49315 , #E17503); /* Safari 5.1 - 6.0 */
background: -o-linear-gradient(bottom right, #E49315, #E17503); /* Opera 11.1 - 12.0 */
background: -moz-linear-gradient(bottom right, #E49315,#E17503); /* Firefox 3.6 - 15 */
background: linear-gradient(to bottom right, #E49315 , #E17503); /* 标准的语法(必须放在最后) */
}
.onnames{
width: 94%;
margin: 20upx auto;
background: -webkit-linear-gradient(left top, #f1f1f1 , #f9f9f9); /* Safari 5.1 - 6.0 */
background: -o-linear-gradient(bottom right, #f1f1f1, #f9f9f9); /* Opera 11.1 - 12.0 */
background: -moz-linear-gradient(bottom right, #f1f1f1,#f9f9f9); /* Firefox 3.6 - 15 */
background: linear-gradient(to bottom right, #f1f1f1 , #f9f9f9); /* 标准的语法(必须放在最后) */
}
</style>
+170
View File
@@ -0,0 +1,170 @@
<template>
<view class="pagesContent">
<view class="beansList">
<view class="beansItem box" v-for="item in listData" :key="item.id">
<view class="beansLeft">
<view class="remark">{{ item.remark }}</view>
<view class="time">{{ item.createtime }}</view>
</view>
<view :class="item.jzt == '-'?'right black':'right yellow'">
{{ item.jzt }}{{ item.beans }}
</view>
</view>
</view>
<uni-load-more :status="status"/>
</view>
</template>
<script>
export default {
data() {
return {
listData: [],
status: 'more',
userInfo: {},
pages: {
pageSize: 20,
currentPage: 1,
isNextPage: true
}
}
},
onReachBottom() {
this.status = 'more';
if (this.pages.isNextPage) {
this.getList();
}
},
onLoad() {
this.userInfo = uni.getStorageSync('userinfo')
this.getList();
},
methods: {
navBack() {
uni.navigateBack(1);
},
getList() {
let that = this;
if (that.pages.isNextPage) {
that.status = 'loading';
that.$httpRequest({
url: "/api/user/userBeansInfo",
methods: "GET",
data: {
limit: that.pages.pageSize,
page: that.pages.currentPage
}
}).then(res => {
that.status = '';
if(res.rows.length>0 || res.data.length>0){
if (that.pages.currentPage == 1) {
that.listData = res.data || res.rows;
} else{
that.listData = that.listData.concat(res.data || res.rows);
}
that.pages.currentPage += 1;
}else{
that.status = 'noMore';
that.pages.isNextPage = false;
}
}).catch(err => {
that.status = '';
console.log(err)
})
}
},
}
}
</script>
<style scoped>
.pagesContent {
background-color: #F7F8F9;
min-height: 100vh;
padding: 26rpx;
}
.pageHeader {
background: linear-gradient(to right, #F1FFE9, #FFFFF4);
height: 408rpx;
padding: 0 24rpx;
padding-top: 42rpx;
}
.navBack {
font-size: 32rpx;
color: #333333;
font-weight: 600;
text-align: center;
height: 160rpx;
line-height: 160rpx;
position: relative;
}
.backIcon {
position: absolute;
left: 0rpx;
top: 0rpx;
}
.beans {
font-size: 32rpx;
color: #333333;
font-weight: 600;
margin-top: 24rpx;
}
.beansNum {
margin-top: 24rpx;
font-size: 80rpx;
color: #333;
font-weight: 600;
}
.beansCont {
padding: 40rpx 24rpx;
}
.beansListHeader {
color: #333333;
font-size: 32rpx;
font-weight: 600;
}
.beansItem {
padding: 24rpx 34rpx;
border-bottom: 1rpx solid #F8F8F8;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
margin-bottom: 24rpx;
border-radius: 12rpx;
}
.remark {
font-size: 28rpx;
color: #333;
font-weight: 600;
}
.time {
color: #999999;
font-size: 24rpx;
margin-top: 8rpx;
}
.right{
font-size: 28rpx;font-weight: 600;
}
.black{
color: #333;
}
.yellow{
color: #F98B1E;
}
</style>
+217
View File
@@ -0,0 +1,217 @@
<template>
<view class="pagesContent">
<view class="pageHeader">
<view class="navBack">
<uni-icons class="backIcon" type="left" size="24" color="#333" @click="navBack"></uni-icons>
我的收益
</view>
<view class="beans">余额</view>
<view class="withDraw" @click="showWithDraw" v-if="balanceBtn"> 提现 </view>
<view class="beansNum"> {{ userInfo.beans }}</view>
</view>
<view class="beansCont">
<view class="beansListHeader"> 收益明细</view>
<view class="beansList">
<view class="beansItem" v-for="item in listData" :key="item.id">
<view class="beansLeft">
<view class="remark">{{ item.memo }} ({{ item.come_nickname }}
{{ item.come_id ? ' ID:' + item.come_id : '' }})
</view>
<view class="time">{{ item.createtime }}</view>
</view>
<view :class="item.jzt == '-'?'right black':'right yellow'">
{{ item.jzt }}{{ item.money }}
</view>
</view>
</view>
</view>
<uni-popup ref="popup_ti_xian" type="bottom">
<tixianForm @success-close="hideWithDraw"></tixianForm>
</uni-popup>
<uni-load-more :status="status"/>
</view>
</template>
<script>
import tixianForm from '@/pagesA/components/ti_xian.vue'
export default {
components: {
tixianForm
},
data() {
return {
listData: [],
status: 'more',
userInfo: {},
balanceBtn:true,
pages: {
pageSize: 20,
currentPage: 1,
isNextPage: true
}
}
},
onReachBottom() {
this.status = 'more';
if (this.pages.isNextPage) {
this.getList();
}
},
onLoad() {
this.userInfo = uni.getStorageSync('userinfo')
this.balanceBtn = uni.getStorageSync("config").mini_chek =="1"?true:false;
this.getList();
},
methods: {
navBack() {
uni.navigateBack(1);
},
showWithDraw() {
this.$refs.popup_ti_xian.open()
},
hideWithDraw(){
console.log("close");
this.$refs.popup_ti_xian.close();
},
getList() {
let that = this;
if (that.pages.isNextPage) {
that.status = 'loading';
that.$httpRequest({
url: "/api/user/userBeansInfo",
methods: "GET",
data: {
limit: that.pages.pageSize,
page: that.pages.currentPage
}
}).then(res => {
that.status = '';
if (res.data.code == 1) {
if (that.pages.pageSize == 1) {
that.listData = res.data;
} else if (res.data.rows.length > 0) {
that.listData = that.listData.concat(res.data.rows);
} else {
that.status = 'noMore';
that.pages.isNextPage = false;
}
that.pages.currentPage += 1;
} else {
}
}).catch(err => {
that.status = '';
console.log(err)
})
}
},
}
}
</script>
<style scoped>
.pagesContent {
background-color: #FFFFFF;
min-height: 100vh;
}
.pageHeader {
background: linear-gradient(to right, #F1FFE9, #FFFFF4);
height: 408rpx;
padding: 0 24rpx;
padding-top: 42rpx;
position: relative;
}
.navBack {
font-size: 32rpx;
color: #333333;
font-weight: 600;
text-align: center;
height: 160rpx;
line-height: 160rpx;
position: relative;
}
.backIcon {
position: absolute;
left: 0;
top: 0;
}
.beans {
font-size: 32rpx;
color: #333333;
font-weight: 600;
margin-top: 24rpx;
}
.withDraw {
width: 172rpx;
height: 68rpx;
background-color: #85ED1C;
border-radius: 12rpx;
font-size: 28rpx;
color: #333;
font-weight: 500;
text-align: center;
line-height: 68rpx;
position: absolute;
top: 200rpx;
right: 20rpx;
margin-top: 22rpx;
}
.beansNum {
margin-top: 24rpx;
font-size: 80rpx;
color: #333;
font-weight: 600;
}
.beansCont {
padding: 40rpx 24rpx;
}
.beansListHeader {
color: #333333;
font-size: 32rpx;
font-weight: 600;
}
.beansItem {
padding: 24rpx 0;
border-bottom: 1rpx solid #F8F8F8;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-around;
}
.remark {
font-size: 28rpx;
color: #333;
font-weight: 600;
}
.time {
color: #999999;
font-size: 24rpx;
margin-top: 8rpx;
}
.right {
font-size: 28rpx;
font-weight: 600;
}
.black {
color: #333;
}
.yellow {
color: #F98B1E;
}
</style>
+25
View File
@@ -0,0 +1,25 @@
<template>
<view class="pages">
<web-view :src="urls"></web-view>
</view>
</template>
<script>
export default {
data() {
return {
urls:""
};
},
onLoad(e) {
console.log(e.url)
this.urls = decodeURIComponent( e.url);
},
}
</script>
<style lang="scss" scoped>
.pages {
height: 100vh;
}
</style>
+153
View File
@@ -0,0 +1,153 @@
<template>
<view>
<view class="flex" style="display:flex; flex-wrap:wrap; padding: 30upx 30upx 0px 30upx;">
<block v-for="(value,key) in listData" :key="key">
<view class="mb15" style="width:31%; border-radius:20rpx;margin-right: 14rpx;"
@click="detail(value.vid,value.mid)">
<!-- <view class="btn-mini" style="position: absolute; top: 20upx; right: 20upx; border-radius: 10upx;font-size: 18upx;width: 60upx; height: 36upx; z-index: 1;" :style="getBtnStyle">{{value.lxname}}</view> -->
<image class="integral-mall-goods" mode="aspectFill" :src="value.img"></image>
<view class="pr10 ft14 ftw400 text-over cl-main">{{value.vname}}</view>
<view class="pr10 ft12 ftw500 text-over cl-999">观看至 {{value.mid}} 集</view>
</view>
</block>
</view>
<uni-load-more :status="status" :content-text="contentText" />
<view style="width: 100%; height: 30upx;"></view>
</view>
</template>
<script>
export default {
data(){
return {
banners:[],
searchValue:'',
pages:{
currentPage:1,
pageSize:20,
isNextPage:true
},
tabs:[
{name:'全部'},
{name:'视频'},
{name:'音频'},
{name:'小说'},
{name:'壁纸'},
],
selectIndex:0,
scrollTop:0,
type:'',
listData: [],
status: 'more',
contentText: {
contentdown: "上拉显示更多",
contentrefresh: "正在加载...",
contentnomore: "没有更多数据了"
},
}
},
onLoad(e){
//console.log(111)
if(e.selectIndex){
this.selectIndex=e.selectIndex*1
}
this.status = 'more';
this.getList();
this.banners=uni.getStorageSync("config").banner
},
onReachBottom() {
this.status = 'more';
this.getList();
},
methods:{
detail(vid,mid){
uni.navigateTo({
url:'/pagesA/player/detailPlayer?vid='+vid+'&mid='+mid
})
},
getList() {
let that = this;
if (that.pages.isNextPage) {
that.status = 'loading';
that.$httpRequest({
url: "/api/video/videolog",
methods: "GET",
data: {
limit: that.pages.pageSize,
page: that.pages.currentPage
}
}).then(res => {
that.status = '';
if (that.pages.currentPage == 1) {
that.listData = res.rows;
} else if (res.rows.length > 0) {
that.listData = that.listData.concat(res.rows);
} else {
that.status = 'noMore';
that.pages.isNextPage = false;
}
that.pages.currentPage += 1;
}).catch(err => {
that.status = '';
console.log(err)
})
}
},
}
}
</script>
<style scoped>
.integral-mall-goods {
width: 100%;
height: 280rpx;
background: #F2F2F2;
border-radius: 16upx;
}
.user-not-vip {
width: 100%;
height: 80rpx;
background: #FDF6EC;
border-radius: 40rpx;
border: 2rpx solid #EFC381;
text-align: center;
line-height: 76rpx;
font-size: 24rpx;
color: #000000;
font-weight: bold;
}
.tuan-product-l {
width: 320rpx;
height: 240rpx;
border-radius: 16rpx;
background: #F2F2F2;
}
.tuan-product-r {
width: calc(100% - 320rpx);
}
.search-result {
padding-top: 10px;
padding-bottom: 20px;
text-align: center;
}
.search-result-text {
text-align: center;
font-size: 14px;
color: #666;
}
.uni-mt-10 {
margin-top: 10px;
}
</style>