Merge branch 'master' of http://git.luyuan.tk/luyuan/deming into xbx
This commit is contained in:
commit
884bf6945f
34
App.vue
34
App.vue
@ -4,9 +4,9 @@
|
|||||||
globalData: {
|
globalData: {
|
||||||
im: {}
|
im: {}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState(["hasLogin"])
|
...mapState(["hasLogin"])
|
||||||
},
|
},
|
||||||
onLaunch() {
|
onLaunch() {
|
||||||
getApp().globalData.im = this.imService
|
getApp().globalData.im = this.imService
|
||||||
// 缓存token
|
// 缓存token
|
||||||
@ -16,23 +16,23 @@
|
|||||||
this.loginIn(res.data);
|
this.loginIn(res.data);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
// 刷新token
|
// 刷新token
|
||||||
if (this.hasLogin) {
|
if (this.hasLogin) {
|
||||||
this.refreshToken_function();
|
this.refreshToken_function();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapMutations(['loginIn']),
|
...mapMutations(['loginIn']),
|
||||||
// 刷新token
|
// 刷新token
|
||||||
refreshToken_function(){
|
refreshToken_function(){
|
||||||
this.$u.api.refreshToken({}).then((res) => {
|
this.$u.api.refreshToken({}).then((res) => {
|
||||||
// console.log(res);
|
// console.log(res);
|
||||||
if (res.errCode == 0) {
|
if (res.errCode == 0) {
|
||||||
let token = res.data.token;
|
let token = res.data.token;
|
||||||
uni.setStorageSync('token', token);//存储toke值
|
uni.setStorageSync('token', token);//存储toke值
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -54,6 +54,10 @@ export default {
|
|||||||
getRecommendList(){
|
getRecommendList(){
|
||||||
return vm.$u.post('MemberExpert/recommendList');
|
return vm.$u.post('MemberExpert/recommendList');
|
||||||
},
|
},
|
||||||
|
// 获取所有达人
|
||||||
|
getAllRecommendList({ page }) {
|
||||||
|
return vm.$u.post('MemberExpert/getRecommendList', { page });
|
||||||
|
},
|
||||||
// 达人(搜索)列表
|
// 达人(搜索)列表
|
||||||
getExpertList({ page, store_id, live_status, like_nickname }){
|
getExpertList({ page, store_id, live_status, like_nickname }){
|
||||||
return vm.$u.post('MemberExpert/expertList', {
|
return vm.$u.post('MemberExpert/expertList', {
|
||||||
|
@ -415,7 +415,7 @@ export default {
|
|||||||
},
|
},
|
||||||
// 关注用户列表
|
// 关注用户列表
|
||||||
attentionMemberList({ page = 1,role } = {}) {
|
attentionMemberList({ page = 1,role } = {}) {
|
||||||
return vm.$u.post('member/attentionMemberList', { page,role });
|
return vm.$u.post('member/attentionMemberList', { page, role });
|
||||||
},
|
},
|
||||||
// 可用优惠券商品
|
// 可用优惠券商品
|
||||||
couponGoodsList({ voucher_id, page, order }) {
|
couponGoodsList({ voucher_id, page, order }) {
|
||||||
@ -437,6 +437,10 @@ export default {
|
|||||||
friend_tomid:id
|
friend_tomid:id
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
// 设置里的帮助
|
||||||
|
getSettingHelpList() {
|
||||||
|
return vm.$u.post('document/help');
|
||||||
|
},
|
||||||
//获取默认头像
|
//获取默认头像
|
||||||
getDefaultAvatar(){
|
getDefaultAvatar(){
|
||||||
return vm.$u.post("member/getDefaultAvatar")
|
return vm.$u.post("member/getDefaultAvatar")
|
||||||
|
@ -47,6 +47,10 @@ const install = (Vue, vm) => {
|
|||||||
// 假设201为token失效,这里跳转登录
|
// 假设201为token失效,这里跳转登录
|
||||||
// vm.$u.toast('您还没有登录哦,请先去登录!');
|
// vm.$u.toast('您还没有登录哦,请先去登录!');
|
||||||
if (res.data.data.action != "memberinfo") {
|
if (res.data.data.action != "memberinfo") {
|
||||||
|
uni.showToast({
|
||||||
|
title: "您还没有登录,请先去登录哦!",
|
||||||
|
icon: "none"
|
||||||
|
})
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
// 此为uView的方法,详见路由相关文档
|
// 此为uView的方法,详见路由相关文档
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
|
@ -18,7 +18,8 @@ const store = new Vuex.Store({
|
|||||||
loadmore: {}, // 下拉加载返回的数据
|
loadmore: {}, // 下拉加载返回的数据
|
||||||
hasLogin: false, // 登录状态
|
hasLogin: false, // 登录状态
|
||||||
token: "", // 储存token
|
token: "", // 储存token
|
||||||
showLoginModel: false, // 登录框
|
showLoginModel: false, // 登录框
|
||||||
|
question: {}, // 帮助与反馈
|
||||||
},
|
},
|
||||||
getters: {
|
getters: {
|
||||||
getOrderAddress(state) {
|
getOrderAddress(state) {
|
||||||
@ -75,6 +76,9 @@ const store = new Vuex.Store({
|
|||||||
},
|
},
|
||||||
setLoadMore(state, info) {
|
setLoadMore(state, info) {
|
||||||
state.loadmore = info;
|
state.loadmore = info;
|
||||||
|
},
|
||||||
|
setQuestion(state, question) {
|
||||||
|
state.question = question;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -46,6 +46,7 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
viewGoodsDetails(item) {
|
viewGoodsDetails(item) {
|
||||||
|
if(this.closeAction()) return false;
|
||||||
const list = this.list.filter(item => {
|
const list = this.list.filter(item => {
|
||||||
return item.show;
|
return item.show;
|
||||||
})
|
})
|
||||||
@ -57,6 +58,17 @@ export default {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
closeAction() {
|
||||||
|
let status = false;
|
||||||
|
this.list.map((val, idx) => {
|
||||||
|
if(val.show) {
|
||||||
|
status = true;
|
||||||
|
this.$set(this.list[idx], 'show', false);
|
||||||
|
};
|
||||||
|
})
|
||||||
|
this.$forceUpdate();
|
||||||
|
return status;
|
||||||
|
},
|
||||||
getGoodsFavoritesList() {
|
getGoodsFavoritesList() {
|
||||||
this.$u.api.getFavoritesList().then(res => {
|
this.$u.api.getFavoritesList().then(res => {
|
||||||
if(res.errCode == 0) {
|
if(res.errCode == 0) {
|
||||||
|
@ -3,32 +3,28 @@
|
|||||||
<view>
|
<view>
|
||||||
<view class="login">
|
<view class="login">
|
||||||
<view class="content">
|
<view class="content">
|
||||||
<view class="title">手机登录</view>
|
<view class="title">请绑定手机号</view>
|
||||||
<view class="labales">
|
<view class="labales">
|
||||||
<text>手机号</text>
|
<input type="number" maxlength="11" v-model="phone" placeholder="手机号" />
|
||||||
<input type="tel" placeholder="" />
|
|
||||||
</view>
|
</view>
|
||||||
<view class="labales">
|
<view class="labales flex-inp">
|
||||||
<text>请输入验证码</text>
|
<input type="number" maxlength="6" placeholder="请输入验证码" v-model="sms_code" />
|
||||||
<input type="tel" placeholder="" />
|
<button class="identifying" :class="is_sendcode ? 'sended' : ''" @click="getCode" :disabled="is_sendcode">{{ is_sendcode ? time_count + "后可以重新发送" : "发送验证码" }}</button>
|
||||||
<text class="identifying">获取验证码</text>
|
|
||||||
</view>
|
</view>
|
||||||
<!-- 服务协议 -->
|
<!-- 服务协议 -->
|
||||||
<view class="pact">
|
<view class="pact">
|
||||||
<view></view>
|
<checkbox-group @change="change">
|
||||||
|
<checkbox class="check-tit" color="#1ADE00" :checked="checked" />
|
||||||
|
</checkbox-group>
|
||||||
<text>我已详细阅读并同意</text>
|
<text>我已详细阅读并同意</text>
|
||||||
<text class="pact_text">《用户协议》</text>
|
<text class="pact_text" v-for="(item,index) in pactList" :key="index" @click="infoPact(index)">
|
||||||
<text class="pact_text">《隐私协议》</text>
|
{{ item }}
|
||||||
<text class="pact_text">《使用协议》</text>
|
</text>
|
||||||
<u-checkbox-group @change="checkboxGroupChange" size="27">
|
|
||||||
<u-checkbox @change="checkboxChange" v-model="item.checked" v-for="(item, index) in list" :key="index" :name="item.name"
|
|
||||||
shape="circle" size="14" active-color="#19BE6B"></u-checkbox>
|
|
||||||
</u-checkbox-group>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- denglu QQ weixin -->
|
<!-- denglu QQ weixin -->
|
||||||
<u-button>{{login}}</u-button>
|
<view class="btn-login" @click="bindPhone">{{login}}</view>
|
||||||
|
<u-toast ref="uToast" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@ -36,81 +32,151 @@
|
|||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
list: [{
|
phone: "",
|
||||||
checked: false,
|
sms_code: "",
|
||||||
disabled: false
|
login: '绑定',
|
||||||
}],
|
show: true,
|
||||||
value: '',
|
checked: false,
|
||||||
login: '注册',
|
// 时间
|
||||||
show: true
|
timer: null,
|
||||||
|
is_sendcode: false, // 60s
|
||||||
|
time_count: 60,
|
||||||
|
pactList: [ "《用户协议》", "《隐私协议》", "《使用协议》" ],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// 选中某个复选框时,由checkbox时触发
|
// 勾选协议
|
||||||
checkboxChange(e) {
|
change(e) {
|
||||||
//console.log(e);
|
this.checked = !this.checked;
|
||||||
},
|
console.log(this.checked);
|
||||||
// 选中任一checkbox时,由checkbox-group触发
|
},
|
||||||
checkboxGroupChange(e) {
|
// 获取验证码
|
||||||
// console.log(e);
|
getCode() {
|
||||||
},
|
if (this.$u.test.isEmpty(this.phone)) {
|
||||||
mask_u(){
|
this.$refs.uToast.show({
|
||||||
this.show = !this.show
|
title: '手机号格式不能为空!',
|
||||||
},
|
type: 'error',
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!(/^1[3456789]\d{9}$/.test(this.phone))){
|
||||||
|
this.$refs.uToast.show({
|
||||||
|
title: '手机号格式不正确!',
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.$u.api.sendSmsCode({
|
||||||
|
member_mobile: this.phone,
|
||||||
|
smslog_type: 4,
|
||||||
|
}).then(res => {
|
||||||
|
if (res.errCode == 0) {
|
||||||
|
console.log(res);
|
||||||
|
this.$refs.uToast.show({
|
||||||
|
title: res.message,
|
||||||
|
type: 'success',
|
||||||
|
})
|
||||||
|
// 发送验证码
|
||||||
|
this.getSendCode();
|
||||||
|
} else {
|
||||||
|
this.$refs.uToast.show({
|
||||||
|
title: res.message,
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 绑定手机号
|
||||||
|
bindPhone() {
|
||||||
|
if (this.$u.test.isEmpty(this.phone)) {
|
||||||
|
this.$refs.uToast.show({
|
||||||
|
title: '手机号不能为空!',
|
||||||
|
type: 'error',
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!(/^1[3456789]\d{9}$/.test(this.phone))){
|
||||||
|
this.$refs.uToast.show({
|
||||||
|
title: '手机号格式不正确!',
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(this.$u.test.isEmpty(this.sms_code)){
|
||||||
|
this.$refs.uToast.show({
|
||||||
|
title: '验证码不能为空!',
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(this.sms_code.length == 0){
|
||||||
|
this.$refs.uToast.show({
|
||||||
|
title: '验证码有误!',
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!this.checked){
|
||||||
|
this.$refs.uToast.show({
|
||||||
|
title: '请同意协议!',
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.$u.api.mobileBind({
|
||||||
|
member_mobile: this.phone,
|
||||||
|
sms_code: this.sms_code,
|
||||||
|
}).then(res => {
|
||||||
|
console.log(res);
|
||||||
|
if (res.errCode == 0) {
|
||||||
|
this.$refs.uToast.show({
|
||||||
|
title: res.message,
|
||||||
|
type: 'success',
|
||||||
|
})
|
||||||
|
uni.switchTab({
|
||||||
|
url: '/pages/index/index'
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.$refs.uToast.show({
|
||||||
|
title: res.message,
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 协议详情
|
||||||
|
infoPact(index) {
|
||||||
|
// console.log(index);
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pageA/pactList/pactList?index=' + index
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 60s
|
||||||
|
getSendCode() {
|
||||||
|
const TIME_COUNT = 60;
|
||||||
|
if (!this.timer) {
|
||||||
|
this.time_count = TIME_COUNT;
|
||||||
|
this.is_sendcode = true;
|
||||||
|
this.timer = setInterval(() => {
|
||||||
|
if (this.time_count > 0 && this.time_count <= TIME_COUNT) {
|
||||||
|
this.time_count--;
|
||||||
|
} else {
|
||||||
|
this.is_sendcode = false;
|
||||||
|
clearInterval(this.timer);
|
||||||
|
this.timer = null;
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.uni-page-wrapper{
|
|
||||||
background: #fff;
|
|
||||||
}
|
|
||||||
.login {
|
|
||||||
// background: url(../../static/pageA/loginbackground.png) no-repeat!important;
|
|
||||||
.images {
|
|
||||||
position: fixed;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
z-index: -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.backes {
|
page {
|
||||||
background: rgba(0, 0, 0, 0.4);
|
background-color: #fff;
|
||||||
position: fixed;
|
}
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
z-index: -1;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
text {
|
|
||||||
z-index: 9;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.more_Login {
|
|
||||||
overflow: hidden;
|
|
||||||
zoom: 1;
|
|
||||||
width: 630rpx;
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.more_Login text {
|
|
||||||
display: inline-block;
|
|
||||||
width: 50%;
|
|
||||||
float: left;
|
|
||||||
font-size: 30rpx;
|
|
||||||
color: rgba(255, 255, 255, 1);
|
|
||||||
line-height: 36px;
|
|
||||||
margin: 97rpx 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.more_Login .other {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 36rpx;
|
font-size: 36rpx;
|
||||||
@ -125,162 +191,86 @@
|
|||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding-top: 130rpx;
|
padding-top: 130rpx;
|
||||||
|
|
||||||
|
.labales {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 20rpx;
|
||||||
|
border-bottom: 1px #BFBFBF solid;
|
||||||
|
input {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-inp {
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-top: 70rpx;
|
||||||
|
}
|
||||||
|
|
||||||
.labales text {
|
.labales text {
|
||||||
font-size: 30rpx;
|
font-size: 30rpx;
|
||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
|
|
||||||
.labales {
|
|
||||||
border-bottom: 1px #BFBFBF solid;
|
|
||||||
margin-bottom: 90rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.labales {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.identifying {
|
.identifying {
|
||||||
position: absolute;
|
flex-shrink: 0;
|
||||||
right: 0;
|
font-size: 26rpx;
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
margin: auto;
|
|
||||||
font-size: 30rpx;
|
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #FF780F!important;
|
color: #FF780F !important;
|
||||||
|
border: none;
|
||||||
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sended {
|
||||||
|
color: #666 !important;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.pact text {
|
.pact {
|
||||||
font-size: 22rpx;
|
display: flex;
|
||||||
font-weight: 400;
|
align-items: center;
|
||||||
color: #333;
|
flex-wrap: wrap;
|
||||||
line-height: 36px;
|
margin: 20rpx 0;
|
||||||
}
|
&>text {
|
||||||
|
font-size: 22rpx;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.check-tit {
|
||||||
|
font-size: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep uni-checkbox .uni-checkbox-input {
|
||||||
|
width: 24rpx;
|
||||||
|
height: 24rpx;
|
||||||
|
border-color: #d1d1d1 !important;
|
||||||
|
border-radius: 50% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep uni-checkbox .uni-checkbox-input-checked:before {
|
||||||
|
font-size: 28rpx;
|
||||||
|
}
|
||||||
|
|
||||||
.pact_text {
|
.pact_text {
|
||||||
font-size: 22px;
|
font-size: 22px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
color: rgba(129, 188, 253, 1) !important;
|
color: rgba(129, 188, 253, 1) !important;
|
||||||
line-height: 36px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//单选框的样式
|
.btn-login {
|
||||||
.pact {
|
width: 650rpx;
|
||||||
position: relative;
|
height: 90rpx;
|
||||||
padding-left: 38rpx;
|
margin: 300rpx auto 0;
|
||||||
}
|
text-align: center;
|
||||||
|
line-height: 90rpx;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 34rpx;
|
||||||
|
border-radius: 50rpx !important;
|
||||||
|
background-color: #FF780F;
|
||||||
|
}
|
||||||
|
|
||||||
.u-checkbox-group {
|
button::after{ border: none; }
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.u-checkbox__icon--square {
|
|
||||||
border-radius: 50rpx !important;
|
|
||||||
width: 22rpx;
|
|
||||||
height: 22rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.u-btn {
|
|
||||||
width: 628rpx;
|
|
||||||
height: 98rpx;
|
|
||||||
background: rgba(255, 120, 15, 1) !important;
|
|
||||||
border-radius: 49rpx;
|
|
||||||
margin: 0 auto;
|
|
||||||
font-size: 36rpx;
|
|
||||||
color: rgba(255, 255, 255, 1) !important;
|
|
||||||
line-height: 36px;
|
|
||||||
border: 1px #ff780f solid;
|
|
||||||
outline: none;
|
|
||||||
border-color: rgba(255, 120, 15, 1) !important;
|
|
||||||
margin-top: 225rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.warp {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.rect {
|
|
||||||
width: 558rpx;
|
|
||||||
height: 300rpx;
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 20rpx;
|
|
||||||
overflow: hidden;
|
|
||||||
zoom: 1;
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
flex-wrap:wrap;
|
|
||||||
display: -webkit-flex; /* Safari */
|
|
||||||
.rect_view{
|
|
||||||
width: 100rpx;
|
|
||||||
height: 100rpx;
|
|
||||||
.image{
|
|
||||||
width: 45rpx;
|
|
||||||
height: 53rpx;
|
|
||||||
display: inline-block;
|
|
||||||
|
|
||||||
}
|
|
||||||
flex:1;
|
|
||||||
margin-top: 77rpx;
|
|
||||||
}
|
|
||||||
.rect_view:nth-child(2) image{
|
|
||||||
width: 57rpx;
|
|
||||||
height: 45rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.rect_butoon{
|
|
||||||
width: 100%;
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
height: 85rpx;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 85rpx;
|
|
||||||
border-top: 1px #999999 solid;
|
|
||||||
}
|
|
||||||
view{
|
|
||||||
color: #666;
|
|
||||||
font-size:24rpx;
|
|
||||||
margin-top: 30rpx;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.rect_view:nth-child(1) image,.rect_view:nth-child(1) view{
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
.rect_view:nth-child(1) image{
|
|
||||||
margin-right: 20rpx;
|
|
||||||
}
|
|
||||||
.rect_view:nth-child(1){
|
|
||||||
position: relative;
|
|
||||||
margin-right: 79rpx;
|
|
||||||
}
|
|
||||||
.rect_view:nth-child(1) view{
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
right: 0;
|
|
||||||
}
|
|
||||||
.rect_view:nth-child(2) image,.rect_view:nth-child(2) view{
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
.rect_view:nth-child(2) image{
|
|
||||||
margin-left: 20rpx;
|
|
||||||
}
|
|
||||||
.rect_view:nth-child(2){
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.rect_view:nth-child(2) view{
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
u-button{
|
|
||||||
margin-top: 225rpx;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -226,14 +226,20 @@
|
|||||||
member_nickname: data.userInfo.nickName,
|
member_nickname: data.userInfo.nickName,
|
||||||
member_avatar: data.userInfo.avatarUrl,
|
member_avatar: data.userInfo.avatarUrl,
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
console.log(res.errCode);
|
|
||||||
if (res.errCode == 0) {
|
if (res.errCode == 0) {
|
||||||
this.loginIn(res.data.token);
|
this.loginIn(res.data.token);
|
||||||
uni.setStorageSync('user_info',res.data);
|
uni.setStorageSync('user_info',res.data);
|
||||||
this.show = false;
|
this.show = false;
|
||||||
uni.switchTab({
|
console.log(res.data.member.member_mobilebind);
|
||||||
url: "../../pages/index/index"
|
if(res.data.member.member_mobilebind) {
|
||||||
})
|
uni.switchTab({
|
||||||
|
url: "/pages/index/index"
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pageA/bindinges/bindinges'
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -247,11 +253,11 @@
|
|||||||
uni.login({
|
uni.login({
|
||||||
provider: 'weixin',
|
provider: 'weixin',
|
||||||
success: (wxres) => {
|
success: (wxres) => {
|
||||||
console.log(wxres);
|
// console.log(wxres);
|
||||||
uni.getUserInfo({
|
uni.getUserInfo({
|
||||||
provider: 'weixin',
|
provider: 'weixin',
|
||||||
success: (data) => {
|
success: (data) => {
|
||||||
console.log(data);
|
// console.log(data);
|
||||||
this.$u.api.wechatLogin({
|
this.$u.api.wechatLogin({
|
||||||
member_wxopenid: data.userInfo.openId,
|
member_wxopenid: data.userInfo.openId,
|
||||||
member_nickname: data.userInfo.nickName,
|
member_nickname: data.userInfo.nickName,
|
||||||
@ -260,11 +266,18 @@
|
|||||||
console.log(res);
|
console.log(res);
|
||||||
if (res.errCode == 0) {
|
if (res.errCode == 0) {
|
||||||
this.loginIn(res.data.token);
|
this.loginIn(res.data.token);
|
||||||
uni.setStorageSync('user_info',res.data);
|
uni.setStorageSync('user_info',res.data);
|
||||||
this.show = false;
|
this.show = false;
|
||||||
uni.switchTab({
|
console.log(res.data.member.member_mobilebind);
|
||||||
url: "../../pages/index/index"
|
if(res.data.member.member_mobilebind) {
|
||||||
})
|
uni.switchTab({
|
||||||
|
url: "/pages/index/index"
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pageA/bindinges/bindinges'
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -301,11 +314,11 @@
|
|||||||
tochange() {
|
tochange() {
|
||||||
|
|
||||||
},
|
},
|
||||||
goIndex() {
|
goIndex() {
|
||||||
uni.switchTab({
|
uni.switchTab({
|
||||||
url: "/pages/index/index"
|
url: "/pages/index/index"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
identifying
|
identifying
|
||||||
|
@ -29,9 +29,9 @@ export default {
|
|||||||
document_code: 'agreement'
|
document_code: 'agreement'
|
||||||
}).then((res)=>{
|
}).then((res)=>{
|
||||||
// console.log(res.data.document_title);
|
// console.log(res.data.document_title);
|
||||||
uni.setNavigationBarTitle({
|
uni.setNavigationBarTitle({
|
||||||
title: res.data.document_title
|
title: res.data.document_title
|
||||||
})
|
})
|
||||||
let data = common.unescapeHTML(res.data.document_content);
|
let data = common.unescapeHTML(res.data.document_content);
|
||||||
this.document_content = data;
|
this.document_content = data;
|
||||||
})
|
})
|
||||||
@ -41,9 +41,9 @@ export default {
|
|||||||
document_code: 'privacy'
|
document_code: 'privacy'
|
||||||
}).then((res)=>{
|
}).then((res)=>{
|
||||||
// console.log(res.data.document_title);
|
// console.log(res.data.document_title);
|
||||||
uni.setNavigationBarTitle({
|
uni.setNavigationBarTitle({
|
||||||
title: res.data.document_title
|
title: res.data.document_title
|
||||||
})
|
})
|
||||||
let data = common.unescapeHTML(res.data.document_content);
|
let data = common.unescapeHTML(res.data.document_content);
|
||||||
this.document_content = data
|
this.document_content = data
|
||||||
})
|
})
|
||||||
@ -53,9 +53,9 @@ export default {
|
|||||||
document_code: 'use'
|
document_code: 'use'
|
||||||
}).then((res)=>{
|
}).then((res)=>{
|
||||||
// console.log(res.data.document_title);
|
// console.log(res.data.document_title);
|
||||||
uni.setNavigationBarTitle({
|
uni.setNavigationBarTitle({
|
||||||
title: res.data.document_title
|
title: res.data.document_title
|
||||||
})
|
})
|
||||||
let data = common.unescapeHTML(res.data.document_content);
|
let data = common.unescapeHTML(res.data.document_content);
|
||||||
this.document_content = data
|
this.document_content = data
|
||||||
})
|
})
|
||||||
@ -69,7 +69,6 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.packlist{}
|
|
||||||
.packlist > view{
|
.packlist > view{
|
||||||
width: 90%;
|
width: 90%;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
|
@ -1,43 +1,49 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="follow">
|
<view class="follow">
|
||||||
<view class="sosuo" @click="searchValue">
|
<scroll-view scroll-y :style="{ height: viewHeight }" @scrolltolower="loadmore" class="container">
|
||||||
<image src="/static/image/common/10.png"></image>
|
<view class="sosuo" @click="searchValue">
|
||||||
<text>输入达人名称</text>
|
<image src="/static/image/common/10.png"></image>
|
||||||
</view>
|
<text>输入达人名称</text>
|
||||||
<view class="list" style="margin-left:-20rpx">
|
</view>
|
||||||
<darenItem style="margin-top:20rpx;margin-left:20rpx;" v-for="item in recommendList" :key="item.id" :info="item" v-on:pChangeType="changeType"></darenItem>
|
<view class="list" style="margin-left:-20rpx">
|
||||||
</view>
|
<darenItem style="margin-top:20rpx;margin-left:20rpx;" v-for="item in recommendList" :key="item.id" :info="item" v-on:pChangeType="changeType"></darenItem>
|
||||||
|
</view>
|
||||||
|
<u-loadmore :status="loadStatus" bgColor="#ECECEC" font-size="14" margin-top="40" margin-bottom="20" v-if="recommendList.length > pageSize" @loadmore="loadmore"></u-loadmore>
|
||||||
|
</scroll-view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.follow{
|
.follow{
|
||||||
background-color: #ECECEC;
|
background-color: #ECECEC;
|
||||||
min-height: calc(100vh - var(--window-top));
|
min-height: calc(100vh - var(--window-top));
|
||||||
padding: 20rpx 30rpx;
|
.container {
|
||||||
.sosuo{
|
box-sizing: border-box;
|
||||||
width: 100%;
|
padding: 20rpx 30rpx;
|
||||||
height: 60rpx;
|
.sosuo{
|
||||||
border-radius: 30rpx;
|
width: 100%;
|
||||||
background-color: #fff;
|
height: 60rpx;
|
||||||
display: flex;
|
border-radius: 30rpx;
|
||||||
align-items: center;
|
background-color: #fff;
|
||||||
justify-content: center;
|
display: flex;
|
||||||
>image{
|
align-items: center;
|
||||||
width: 29rpx;
|
justify-content: center;
|
||||||
height: 29rpx;
|
>image{
|
||||||
}
|
width: 29rpx;
|
||||||
>text{
|
height: 29rpx;
|
||||||
font-size: 24rpx;
|
}
|
||||||
color: #999;
|
>text{
|
||||||
margin-left: 15rpx;
|
font-size: 24rpx;
|
||||||
}
|
color: #999;
|
||||||
}
|
margin-left: 15rpx;
|
||||||
.list{
|
}
|
||||||
display: flex;
|
}
|
||||||
flex-wrap: wrap;
|
.list{
|
||||||
width: calc(100% + 23rpx);
|
display: flex;
|
||||||
margin-right: -23rpx;
|
flex-wrap: wrap;
|
||||||
}
|
width: calc(100% + 23rpx);
|
||||||
|
margin-right: -23rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
<script>
|
||||||
@ -50,22 +56,45 @@ export default {
|
|||||||
},
|
},
|
||||||
data(){
|
data(){
|
||||||
return{
|
return{
|
||||||
|
pageSize: 2,
|
||||||
recommendList: [], // 推荐达人
|
recommendList: [], // 推荐达人
|
||||||
|
page: 1,
|
||||||
|
loadStatus: 'loadmore',
|
||||||
|
timer: true,
|
||||||
|
viewHeight: '',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
onLoad() {
|
||||||
|
this.setViewHeight();
|
||||||
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
this.getRecommendList();
|
this.getRecommendList();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getRecommendList() {
|
async getRecommendList({ load = 'reload' } = {}) {
|
||||||
this.$u.api.getRecommendList().then(res => {
|
const res = await this.$u.api.getAllRecommendList({ page: this.page });
|
||||||
if(res.errCode == 0) {
|
this.timer = true;
|
||||||
this.recommendList = res.data.list;
|
if(res.errCode == 0) {
|
||||||
}
|
if(load == 'reload') this.recommendList = res.data.list;
|
||||||
|
if(load == 'loadmore') this.recommendList.push(...res.data.list);
|
||||||
|
}
|
||||||
|
return res.data.list.length;
|
||||||
|
},
|
||||||
|
loadmore() {
|
||||||
|
if(!this.timer) return false;
|
||||||
|
this.timer = false;
|
||||||
|
this.loadStatus = "loading";
|
||||||
|
this.page++;
|
||||||
|
this.getRecommendList({ load: "loadmore" }).then(length => {
|
||||||
|
this.loadStatus = "nomore";
|
||||||
|
if(length == 0) this.page--;
|
||||||
|
}).catch(() => {
|
||||||
|
this.loadStatus = "nomore";
|
||||||
|
this.page--;
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
changeType(member_id){
|
changeType(member_id){
|
||||||
console.log(member_id);
|
// console.log(member_id);
|
||||||
this.$emit("pChangeType")
|
this.$emit("pChangeType")
|
||||||
this.$u.api.attentionMember({
|
this.$u.api.attentionMember({
|
||||||
member_id: member_id
|
member_id: member_id
|
||||||
@ -79,6 +108,10 @@ export default {
|
|||||||
url: '/pageB/search/index?type=2&curent=1'
|
url: '/pageB/search/index?type=2&curent=1'
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
setViewHeight() {
|
||||||
|
const res = uni.getSystemInfoSync();
|
||||||
|
this.viewHeight = res.windowHeight + 'px';
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
@ -543,8 +543,8 @@ export default {
|
|||||||
reply_id: this.reply_id,
|
reply_id: this.reply_id,
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
// console.log(res.data);
|
// console.log(res.data);
|
||||||
|
this.send_value = "";
|
||||||
if (res.errCode == 0) {
|
if (res.errCode == 0) {
|
||||||
this.send_value = "";
|
|
||||||
this.comment_num = res.data.num;
|
this.comment_num = res.data.num;
|
||||||
// console.log(this.comment_num);
|
// console.log(this.comment_num);
|
||||||
this.is_edit = false;
|
this.is_edit = false;
|
||||||
|
@ -31,9 +31,9 @@
|
|||||||
<text>¥{{ goodsInfo.goods_price || '0.00' }}</text>
|
<text>¥{{ goodsInfo.goods_price || '0.00' }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="collect" @click="switchCollect(goodsInfo.is_collect)">
|
<view class="collect" @click="switchCollect(goodsInfo.is_collect)">
|
||||||
<u-icon name="star" color="#474747" size="28" v-if="goodsInfo.is_collect == 0"></u-icon>
|
<u-icon name="star-fill" color="#FF7807" size="28" v-if="goodsInfo.is_collect == 1"></u-icon>
|
||||||
<u-icon name="star-fill" color="#FF7807" size="28" v-else></u-icon>
|
<u-icon name="star" color="#474747" size="28" v-else></u-icon>
|
||||||
<text>{{ !goodsInfo.is_collect == 1 ? '收藏' : '已收藏' }}</text>
|
<text>{{ goodsInfo.is_collect == 1 ? '已收藏' : '收藏' }}</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@ -638,7 +638,7 @@ export default {
|
|||||||
current: arr[index]
|
current: arr[index]
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
switchCollect(status) {
|
switchCollect(status = 0) {
|
||||||
if(status == 1) {
|
if(status == 1) {
|
||||||
this.removeFavorite();
|
this.removeFavorite();
|
||||||
} else {
|
} else {
|
||||||
@ -646,6 +646,13 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
addFavoriteGoods() {
|
addFavoriteGoods() {
|
||||||
|
// // 尝试登录
|
||||||
|
// if (!this.$store.state.hasLogin) {
|
||||||
|
// uni.navigateTo({
|
||||||
|
// url: "pageA/login/login"
|
||||||
|
// })
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
this.$u.api.addFavoriteGoods({ fid: this.goodsInfo.goods_id }).then(res => {
|
this.$u.api.addFavoriteGoods({ fid: this.goodsInfo.goods_id }).then(res => {
|
||||||
if(res.errCode == 0) {
|
if(res.errCode == 0) {
|
||||||
this.getGoodsDetails(this.id);
|
this.getGoodsDetails(this.id);
|
||||||
|
@ -266,8 +266,8 @@
|
|||||||
success: (res) => {
|
success: (res) => {
|
||||||
console.log(res);
|
console.log(res);
|
||||||
this.is_edit = false;
|
this.is_edit = false;
|
||||||
|
this.send_value = "";
|
||||||
if (res.data.errCode == 0) {
|
if (res.data.errCode == 0) {
|
||||||
this.send_value = "";
|
|
||||||
this.comment_num = res.data.num;
|
this.comment_num = res.data.num;
|
||||||
let p_id = res.data.data.data.pid;
|
let p_id = res.data.data.data.pid;
|
||||||
console.log(this.pid, this.reply_id, this.comment_id);
|
console.log(this.pid, this.reply_id, this.comment_id);
|
||||||
|
@ -170,9 +170,9 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
getStoreInfo() {
|
getStoreInfo() {
|
||||||
console.log(this.sid )
|
// console.log(this.sid )
|
||||||
this.$u.api.getStoreInfo({ id: this.sid }).then((res)=>{
|
this.$u.api.getStoreInfo({ id: this.sid }).then((res)=>{
|
||||||
console.log(JSON.stringify(res))
|
// console.log(JSON.stringify(res))
|
||||||
this.info = res.data;
|
this.info = res.data;
|
||||||
uni.stopPullDownRefresh();
|
uni.stopPullDownRefresh();
|
||||||
})
|
})
|
||||||
@ -222,7 +222,7 @@ export default {
|
|||||||
const res = uni.getSystemInfoSync();
|
const res = uni.getSystemInfoSync();
|
||||||
this.scrollHeiht = res.windowHeight - (73 + 20 + 170) + 'px';
|
this.scrollHeiht = res.windowHeight - (73 + 20 + 170) + 'px';
|
||||||
this.paddingTop = res.windowWidth / 750 * (90 + 50) + 'px';
|
this.paddingTop = res.windowWidth / 750 * (90 + 50) + 'px';
|
||||||
console.log(this.paddingTop);
|
// console.log(this.paddingTop);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLoad(option){
|
onLoad(option){
|
||||||
|
@ -1,544 +0,0 @@
|
|||||||
<template>
|
|
||||||
<view class="content">
|
|
||||||
<view class="content-box" @touchstart="touchstart" id="content-box" :class="{'content-showfn':showFunBtn}">
|
|
||||||
<!-- 背景图- 定位方式 -->
|
|
||||||
<image class="content-box-bg" :src="_user_info.chatBgImg" :style="{ height: imgHeight }"></image>
|
|
||||||
<view class="content-box-loading" v-if="!loading"><u-loading mode="flower"></u-loading></view>
|
|
||||||
<view class="message" v-for="(item, index) in messageList" :key="index" :id="`msg-${item.hasBeenSentId}`">
|
|
||||||
<view class="message-item " :class="item.isItMe ? 'right' : 'left'">
|
|
||||||
<image class="img" :src="item.fromUserHeadImg" mode="" @tap="linkToBusinessCard(item.fromUserId)"></image>
|
|
||||||
<!-- contentType = 1 文本 -->
|
|
||||||
<view class="content" v-if="item.contentType == 1">{{ item.content }}</view>
|
|
||||||
<!-- contentType = 2 语音 -->
|
|
||||||
<view
|
|
||||||
class="content contentType2"
|
|
||||||
:class="[{ 'content-type-right': item.isItMe }]"
|
|
||||||
v-if="item.contentType == 2"
|
|
||||||
@tap="handleAudio(item)"
|
|
||||||
hover-class="contentType2-hover-class"
|
|
||||||
:style="{width:`${130+(item.contentDuration*2)}rpx`}"
|
|
||||||
>
|
|
||||||
<view
|
|
||||||
class="voice_icon"
|
|
||||||
:class="[
|
|
||||||
{ voice_icon_right: item.isItMe },
|
|
||||||
{ voice_icon_left: !item.isItMe },
|
|
||||||
{ voice_icon_right_an: item.anmitionPlay && item.isItMe },
|
|
||||||
{ voice_icon_left_an: item.anmitionPlay && !item.isItMe }
|
|
||||||
]"
|
|
||||||
></view>
|
|
||||||
<view class="">{{ item.contentDuration }}''</view>
|
|
||||||
</view>
|
|
||||||
<!-- contentType = 3 图片 -->
|
|
||||||
<view
|
|
||||||
class="content contentType3"
|
|
||||||
v-if="item.contentType == 3"
|
|
||||||
@tap="viewImg([item.content])"
|
|
||||||
>
|
|
||||||
<image :src="item.content" class="img" mode="widthFix"></image>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!-- 底部聊天输入框 -->
|
|
||||||
<view class="input-box" :class="{ 'input-box-mpInputMargin': mpInputMargin }">
|
|
||||||
<view class="input-box-flex">
|
|
||||||
<!-- #ifndef H5 -->
|
|
||||||
<image v-if="chatType === 'voice'" class="icon_img" :src="require('@/static/pageD/voice.png')" @click="switchChatType('keyboard')"></image>
|
|
||||||
<image v-if="chatType === 'keyboard'" class="icon_img" :src="require('@/static/pageD/keyboard.png')" @click="switchChatType('voice')"></image>
|
|
||||||
<!-- #endif -->
|
|
||||||
<view class="input-box-flex-grow">
|
|
||||||
<input
|
|
||||||
v-if="chatType === 'voice'"
|
|
||||||
type="text"
|
|
||||||
class="content"
|
|
||||||
id="input"
|
|
||||||
v-model="formData.content"
|
|
||||||
:hold-keyboard="true"
|
|
||||||
:confirm-type="'send'"
|
|
||||||
:confirm-hold="true"
|
|
||||||
placeholder-style="color:#DDDDDD;"
|
|
||||||
:cursor-spacing="10"
|
|
||||||
@confirm="sendMsg(null)"
|
|
||||||
/>
|
|
||||||
<view
|
|
||||||
class="voice_title"
|
|
||||||
v-if="chatType === 'keyboard'"
|
|
||||||
:style="{ background: recording ? '#c7c6c6' : '#FFFFFF' }"
|
|
||||||
@touchstart.stop.prevent="startVoice"
|
|
||||||
@touchmove.stop.prevent="moveVoice"
|
|
||||||
@touchend.stop="endVoice"
|
|
||||||
@touchcancel.stop="cancelVoice"
|
|
||||||
>
|
|
||||||
{{ voiceTitle }}
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!-- 功能性按钮 -->
|
|
||||||
<image class=" icon_btn_add" :src="require('@/static/pageD/add.png')" @tap="switchFun"></image>
|
|
||||||
|
|
||||||
<!-- #ifdef H5 -->
|
|
||||||
<button class="btn" type="primary" size="mini" @touchend.prevent="sendMsg(null)">发送</button>
|
|
||||||
<!-- #endif -->
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="fun-box" :class="{'show-fun-box':showFunBtn}">
|
|
||||||
<u-grid :col="4" hover-class="contentType2-hover-class" :border="false" @click="clickGrid">
|
|
||||||
<u-grid-item v-for="(item, index) in funList" :index="index" :key="index" bg-color="#eaeaea">
|
|
||||||
<u-icon :name="item.icon" :size="52"></u-icon>
|
|
||||||
<view class="grid-text">{{ item.title }}</view>
|
|
||||||
</u-grid-item>
|
|
||||||
</u-grid>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!-- //语音动画 -->
|
|
||||||
<view class="voice_an" v-if="recording">
|
|
||||||
<view class="voice_an_icon">
|
|
||||||
<view id="one" class="wave"></view>
|
|
||||||
<view id="two" class="wave"></view>
|
|
||||||
<view id="three" class="wave"></view>
|
|
||||||
<view id="four" class="wave"></view>
|
|
||||||
<view id="five" class="wave"></view>
|
|
||||||
<view id="six" class="wave"></view>
|
|
||||||
<view id="seven" class="wave"></view>
|
|
||||||
</view>
|
|
||||||
<view class="text">{{voiceIconText}}</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
fromUserInfo: {},
|
|
||||||
formData: {
|
|
||||||
content: '',
|
|
||||||
limit: 15,
|
|
||||||
index: 1
|
|
||||||
},
|
|
||||||
messageList: [],
|
|
||||||
loading: true, //标识是否正在获取数据
|
|
||||||
imgHeight: '1000px',
|
|
||||||
mpInputMargin: false, //适配微信小程序 底部输入框高度被顶起的问题
|
|
||||||
chatType:"voice", // 图标类型 'voice'语音 'keyboard'键盘
|
|
||||||
voiceTitle: '按住 说话',
|
|
||||||
Recorder: uni.getRecorderManager(),
|
|
||||||
Audio: uni.createInnerAudioContext(),
|
|
||||||
recording: false, //标识是否正在录音
|
|
||||||
isStopVoice: false, //加锁 防止点击过快引起的当录音正在准备(还没有开始录音)的时候,却调用了stop方法但并不能阻止录音的问题
|
|
||||||
voiceInterval:null,
|
|
||||||
voiceTime:0, //总共录音时长
|
|
||||||
canSend:true, //是否可以发送
|
|
||||||
PointY:0, //坐标位置
|
|
||||||
voiceIconText:"正在录音...",
|
|
||||||
showFunBtn:false, //是否展示功能型按钮
|
|
||||||
AudioExam:null, //正在播放音频的实例
|
|
||||||
funList: [
|
|
||||||
{ icon:"photo-fill",title:"照片",uploadType:["album"] },
|
|
||||||
{ icon:"camera-fill",title:"拍摄",uploadType:["camera"] },
|
|
||||||
],
|
|
||||||
};
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
//拼接消息 处理滚动
|
|
||||||
async joinData() {
|
|
||||||
if (!this.loading) {
|
|
||||||
//如果没有获取数据 即loading为false时,return 避免用户重复上拉触发加载
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.loading = false;
|
|
||||||
const data = await this.getMessageData();
|
|
||||||
//获取节点信息
|
|
||||||
const { index } = this.formData;
|
|
||||||
const sel = `#msg-${index > 1 ? this.messageList[0].hasBeenSentId : data[data.length - 1].hasBeenSentId}`;
|
|
||||||
this.messageList = [...data, ...this.messageList];
|
|
||||||
//填充数据后,视图会自动滚动到最上面一层然后瞬间再跳回bindScroll的指定位置 ---体验不是很好,后期优化
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.bindScroll(sel);
|
|
||||||
//如果还有数据
|
|
||||||
if (this.formData.limit >= data.length) {
|
|
||||||
this.formData.index++;
|
|
||||||
setTimeout(() => {
|
|
||||||
this.loading = true;
|
|
||||||
}, 200);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
//处理滚动
|
|
||||||
bindScroll(sel, duration = 0) {
|
|
||||||
const query = uni.createSelectorQuery().in(this);
|
|
||||||
query
|
|
||||||
.select(sel)
|
|
||||||
.boundingClientRect(data => {
|
|
||||||
uni.pageScrollTo({
|
|
||||||
scrollTop: data && data.top - 40,
|
|
||||||
duration
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.exec();
|
|
||||||
},
|
|
||||||
//获取消息
|
|
||||||
getMessageData() {
|
|
||||||
let getData = () => {
|
|
||||||
let arr = [];
|
|
||||||
let startIndex = (this.formData.index - 1) * this.formData.limit;
|
|
||||||
let endIndex = startIndex + this.formData.limit;
|
|
||||||
for (let i = startIndex; i < endIndex; i++) {
|
|
||||||
const isItMe = Math.random() > 0.5 ? true : false;
|
|
||||||
arr.unshift({
|
|
||||||
hasBeenSentId: i, //已发送过去消息的id
|
|
||||||
content: `很高兴认识你,这是第${i + 1}条消息。`,
|
|
||||||
fromUserHeadImg: isItMe ? this._user_info.headImg : this.fromUserInfo.fromUserHeadImg, //用户头像
|
|
||||||
fromUserId: isItMe ? this._user_info.id : this.fromUserInfo.fromUserId,
|
|
||||||
isItMe, //true此条信息是我发送的 false别人发送的
|
|
||||||
createTime: Date.now(),
|
|
||||||
contentType: 1, // 1文字文本 2语音
|
|
||||||
anmitionPlay: false //标识音频是否在播放
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return arr;
|
|
||||||
};
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const data = getData();
|
|
||||||
setTimeout(() => {
|
|
||||||
resolve(data);
|
|
||||||
}, 500);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
//切换语音或者键盘方式
|
|
||||||
switchChatType(type) {
|
|
||||||
this.chatType = type;
|
|
||||||
this.showFunBtn =false;
|
|
||||||
},
|
|
||||||
//切换功能性按钮
|
|
||||||
switchFun(){
|
|
||||||
this.chatType = 'keyboard'
|
|
||||||
this.showFunBtn = !this.showFunBtn;
|
|
||||||
uni.hideKeyboard()
|
|
||||||
},
|
|
||||||
//发送消息
|
|
||||||
sendMsg(data) {
|
|
||||||
const params = {
|
|
||||||
hasBeenSentId: Date.now(), //已发送过去消息的id
|
|
||||||
content: this.formData.content,
|
|
||||||
fromUserHeadImg: this._user_info.headImg, //用户头像
|
|
||||||
fromUserId: this._user_info.id,
|
|
||||||
isItMe: true, //true此条信息是我发送的 false别人发送的
|
|
||||||
createTime: Date.now(),
|
|
||||||
contentType: 1
|
|
||||||
};
|
|
||||||
|
|
||||||
if (data) {
|
|
||||||
if(data.contentType == 2){
|
|
||||||
//说明是发送语音
|
|
||||||
params.content = data.content;
|
|
||||||
params.contentType = data.contentType;
|
|
||||||
params.contentDuration = data.contentDuration;
|
|
||||||
params.anmitionPlay = false;
|
|
||||||
}else if(data.contentType == 3){
|
|
||||||
//发送图片
|
|
||||||
params.content = data.content;
|
|
||||||
params.contentType = data.contentType;
|
|
||||||
}
|
|
||||||
} else if (!this.$u.trim(this.formData.content)) {
|
|
||||||
//验证输入框书否为空字符传
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.messageList.push(params);
|
|
||||||
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.formData.content = '';
|
|
||||||
// #ifdef MP-WEIXIN
|
|
||||||
if(params.contentType == 1){
|
|
||||||
uni.pageScrollTo({
|
|
||||||
scrollTop: 99999,
|
|
||||||
duration: 0, //小程序如果有滚动效果 input的焦点也会随着页面滚动...
|
|
||||||
});
|
|
||||||
}else{
|
|
||||||
setTimeout(()=>{
|
|
||||||
uni.pageScrollTo({
|
|
||||||
scrollTop: 99999,
|
|
||||||
duration: 0, //小程序如果有滚动效果 input的焦点也会随着页面滚动...
|
|
||||||
});
|
|
||||||
},150)
|
|
||||||
}
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
// #ifndef MP-WEIXIN
|
|
||||||
uni.pageScrollTo({
|
|
||||||
scrollTop: 99999,
|
|
||||||
duration: 100
|
|
||||||
});
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
if(this.showFunBtn){
|
|
||||||
this.showFunBtn = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// #ifdef MP-WEIXIN
|
|
||||||
if (params.contentType == 1) {
|
|
||||||
this.mpInputMargin = true;
|
|
||||||
}
|
|
||||||
// #endif
|
|
||||||
//h5浏览器并没有很好的办法控制键盘一直处于唤起状态 而且会有样式性的问题
|
|
||||||
// #ifdef H5
|
|
||||||
uni.hideKeyboard();
|
|
||||||
// #endif
|
|
||||||
});
|
|
||||||
},
|
|
||||||
//用户触摸屏幕的时候隐藏键盘
|
|
||||||
touchstart() {
|
|
||||||
uni.hideKeyboard();
|
|
||||||
},
|
|
||||||
// userid 用户id
|
|
||||||
linkToBusinessCard(userId) {
|
|
||||||
this.$u.route({
|
|
||||||
url: 'pages/businessCard/businessCard',
|
|
||||||
params: {
|
|
||||||
userId
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
//准备开始录音
|
|
||||||
startVoice(e) {
|
|
||||||
if(!this.Audio.paused){
|
|
||||||
//如果音频正在播放 先暂停。
|
|
||||||
this.stopAudio(this.AudioExam)
|
|
||||||
}
|
|
||||||
this.recording = true;
|
|
||||||
this.isStopVoice = false;
|
|
||||||
this.canSend = true;
|
|
||||||
this.voiceIconText = "正在录音..."
|
|
||||||
this.PointY = e.touches[0].clientY;
|
|
||||||
this.Recorder.start({
|
|
||||||
format: 'mp3'
|
|
||||||
});
|
|
||||||
},
|
|
||||||
//录音已经开始
|
|
||||||
beginVoice(){
|
|
||||||
if (this.isStopVoice) {
|
|
||||||
this.Recorder.stop();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.voiceTitle = '松开 结束'
|
|
||||||
this.voiceInterval = setInterval(()=>{
|
|
||||||
this.voiceTime ++;
|
|
||||||
},1000)
|
|
||||||
},
|
|
||||||
//move 正在录音中
|
|
||||||
moveVoice(e){
|
|
||||||
const PointY = e.touches[0].clientY
|
|
||||||
const slideY = this.PointY - PointY;
|
|
||||||
if(slideY > uni.upx2px(120)){
|
|
||||||
this.canSend = false;
|
|
||||||
this.voiceIconText = '松开手指 取消发送 '
|
|
||||||
}else if(slideY > uni.upx2px(60)){
|
|
||||||
this.canSend = true;
|
|
||||||
this.voiceIconText = '手指上滑 取消发送 '
|
|
||||||
}else{
|
|
||||||
this.voiceIconText = '正在录音... '
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//结束录音
|
|
||||||
endVoice() {
|
|
||||||
this.isStopVoice = true; //加锁 确保已经结束录音并不会录制
|
|
||||||
this.Recorder.stop();
|
|
||||||
this.voiceTitle = '按住 说话'
|
|
||||||
},
|
|
||||||
//录音被打断
|
|
||||||
cancelVoice(e){
|
|
||||||
this.voiceTime = 0;
|
|
||||||
this.voiceTitle = '按住 说话';
|
|
||||||
this.canSend = false;
|
|
||||||
this.Recorder.stop();
|
|
||||||
},
|
|
||||||
//处理录音文件
|
|
||||||
handleRecorder({ tempFilePath,duration }) {
|
|
||||||
let contentDuration;
|
|
||||||
// #ifdef MP-WEIXIN
|
|
||||||
this.voiceTime = 0;
|
|
||||||
if (duration < 600) {
|
|
||||||
this.voiceIconText="说话时间过短";
|
|
||||||
setTimeout(()=>{
|
|
||||||
this.recording = false;
|
|
||||||
},200)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
contentDuration = duration/1000;
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
// #ifdef APP-PLUS
|
|
||||||
contentDuration = this.voiceTime +1;
|
|
||||||
this.voiceTime = 0;
|
|
||||||
if(contentDuration <= 0) {
|
|
||||||
this.voiceIconText="说话时间过短";
|
|
||||||
setTimeout(()=>{
|
|
||||||
this.recording = false;
|
|
||||||
},200)
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
this.recording = false;
|
|
||||||
const params = {
|
|
||||||
contentType: 2,
|
|
||||||
content: tempFilePath,
|
|
||||||
contentDuration: Math.ceil(contentDuration)
|
|
||||||
};
|
|
||||||
this.canSend && this.sendMsg(params);
|
|
||||||
},
|
|
||||||
//控制播放还是暂停音频文件
|
|
||||||
handleAudio(item) {
|
|
||||||
this.AudioExam = item;
|
|
||||||
this.Audio.paused ? this.playAudio(item) : this.stopAudio(item);
|
|
||||||
},
|
|
||||||
//播放音频
|
|
||||||
playAudio(item) {
|
|
||||||
this.Audio.src = item.content;
|
|
||||||
this.Audio.hasBeenSentId = item.hasBeenSentId;
|
|
||||||
this.Audio.play();
|
|
||||||
item.anmitionPlay = true;
|
|
||||||
},
|
|
||||||
//停止音频
|
|
||||||
stopAudio(item) {
|
|
||||||
item.anmitionPlay = false;
|
|
||||||
this.Audio.src = '';
|
|
||||||
this.Audio.stop();
|
|
||||||
},
|
|
||||||
//关闭动画
|
|
||||||
closeAnmition() {
|
|
||||||
const hasBeenSentId = this.Audio.hasBeenSentId;
|
|
||||||
const item = this.messageList.find(it => it.hasBeenSentId == hasBeenSentId);
|
|
||||||
item.anmitionPlay = false;
|
|
||||||
},
|
|
||||||
//点击宫格时触发
|
|
||||||
clickGrid(index){
|
|
||||||
if(index == 0){
|
|
||||||
this.chooseImage(['album'])
|
|
||||||
}else if(index == 1){
|
|
||||||
this.chooseImage(['camera'])
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//发送图片
|
|
||||||
chooseImage(sourceType){
|
|
||||||
uni.chooseImage({
|
|
||||||
sourceType,
|
|
||||||
sizeType:['compressed'],
|
|
||||||
success:res=>{
|
|
||||||
this.showFunBtn = false;
|
|
||||||
for(let i = 0;i<res.tempFilePaths.length;i++){
|
|
||||||
const params = {
|
|
||||||
contentType: 3,
|
|
||||||
content: res.tempFilePaths[i],
|
|
||||||
};
|
|
||||||
this.sendMsg(params)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
//查看大图
|
|
||||||
viewImg(imgList){
|
|
||||||
uni.previewImage({
|
|
||||||
urls: imgList,
|
|
||||||
// #ifndef MP-WEIXIN
|
|
||||||
indicator: 'number'
|
|
||||||
// #endif
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
onPageScroll(e) {
|
|
||||||
if (e.scrollTop < 50) {
|
|
||||||
this.joinData();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onNavigationBarButtonTap({ index }) {
|
|
||||||
if (index == 0) {
|
|
||||||
//用户详情 设置
|
|
||||||
} else if (index == 1) {
|
|
||||||
//返回按钮
|
|
||||||
this.$u.route({
|
|
||||||
type: 'switchTab',
|
|
||||||
url: 'pages/home/home'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//返回按钮事件
|
|
||||||
onBackPress(e) {
|
|
||||||
//以下内容对h5不生效
|
|
||||||
//--所以如果用浏览器自带的返回按钮进行返回的时候页面不会重定向 正在寻找合适的解决方案
|
|
||||||
this.$u.route({
|
|
||||||
type: 'switchTab',
|
|
||||||
url: 'pages/home/home'
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
onLoad(info) {
|
|
||||||
// { messageId,fromUserName,fromUserHeadImg } = info
|
|
||||||
const userInfo = this.firendList.filter(item => item.userId == info.fromUserId)[0];
|
|
||||||
console.log(userInfo)
|
|
||||||
this.fromUserInfo = {
|
|
||||||
fromUserName: userInfo.userName,
|
|
||||||
fromUserHeadImg: userInfo.headImg,
|
|
||||||
fromUserId: 4,
|
|
||||||
messageId: 2
|
|
||||||
};
|
|
||||||
|
|
||||||
//录音开始事件
|
|
||||||
this.Recorder.onStart(e => {
|
|
||||||
|
|
||||||
this.beginVoice();
|
|
||||||
});
|
|
||||||
//录音结束事件
|
|
||||||
this.Recorder.onStop(res => {
|
|
||||||
clearInterval(this.voiceInterval);
|
|
||||||
this.handleRecorder(res);
|
|
||||||
});
|
|
||||||
|
|
||||||
//音频停止事件
|
|
||||||
this.Audio.onStop(e => {
|
|
||||||
this.closeAnmition();
|
|
||||||
});
|
|
||||||
|
|
||||||
//音频播放结束事件
|
|
||||||
this.Audio.onEnded(e => {
|
|
||||||
this.closeAnmition();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
onReady() {
|
|
||||||
//自定义返回按钮 因为原生的返回按钮不可阻止默认事件
|
|
||||||
// #ifdef H5
|
|
||||||
const icon = document.getElementsByClassName('uni-page-head-btn')[0];
|
|
||||||
icon.style.display = 'none';
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
uni.setNavigationBarTitle({
|
|
||||||
title: this.fromUserInfo.fromUserName
|
|
||||||
});
|
|
||||||
this.joinData();
|
|
||||||
uni.getSystemInfo({
|
|
||||||
success: res => {
|
|
||||||
this.imgHeight = res.windowHeight + 'px';
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
uni.onKeyboardHeightChange(res => {
|
|
||||||
if (res.height == 0) {
|
|
||||||
// #ifdef MP-WEIXIN
|
|
||||||
this.mpInputMargin = false;
|
|
||||||
// #endif
|
|
||||||
}else{
|
|
||||||
this.showFunBtn = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
@import './index.scss'
|
|
||||||
</style>
|
|
@ -1,354 +0,0 @@
|
|||||||
page {
|
|
||||||
background-color: #f3f3f3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content {
|
|
||||||
&-showfn{
|
|
||||||
padding-bottom: 0rpx;
|
|
||||||
padding-bottom: calc(420rpx + constant(safe-area-inset-bottom));
|
|
||||||
padding-bottom: calc(420rpx + env(safe-area-inset-bottom) );
|
|
||||||
/* #ifdef MP-WEIXIN */
|
|
||||||
/* #endif */
|
|
||||||
}
|
|
||||||
&-box {
|
|
||||||
width: 100%;
|
|
||||||
height: auto;
|
|
||||||
min-height: calc(100vh - env(safe-area-inset-top) - 200rpx);
|
|
||||||
box-sizing: content-box;
|
|
||||||
position: relative;
|
|
||||||
padding-bottom: 120rpx;
|
|
||||||
|
|
||||||
/* #ifdef APP-PLUS */
|
|
||||||
margin-bottom: 0rpx;
|
|
||||||
margin-bottom: constant(safe-area-inset-bottom);
|
|
||||||
margin-bottom: env(safe-area-inset-bottom);
|
|
||||||
/* #endif */
|
|
||||||
/* #ifdef MP-WEIXIN */
|
|
||||||
padding-bottom: 0rpx;
|
|
||||||
padding-bottom: calc(120rpx + constant(safe-area-inset-bottom));
|
|
||||||
padding-bottom: calc(120rpx + env(safe-area-inset-bottom) );
|
|
||||||
/* #endif */
|
|
||||||
|
|
||||||
&-bg {
|
|
||||||
width: 100%;
|
|
||||||
position: fixed;
|
|
||||||
/* #ifdef MP-WEIXIN */
|
|
||||||
bottom: 0;
|
|
||||||
bottom: constant(safe-area-inset-bottom);
|
|
||||||
bottom: env(safe-area-inset-bottom);
|
|
||||||
/* #endif */
|
|
||||||
/* #ifndef MP-WEIXIN */
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
/* #endif */
|
|
||||||
}
|
|
||||||
|
|
||||||
&-loading {
|
|
||||||
text-align: center;
|
|
||||||
padding: 20rpx 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message {
|
|
||||||
padding: 13rpx 20rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-item {
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-start;
|
|
||||||
align-items: flex-start;
|
|
||||||
align-content: flex-start;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
flex-direction: row;
|
|
||||||
|
|
||||||
.img {
|
|
||||||
width: 80rpx;
|
|
||||||
height: 80rpx;
|
|
||||||
border-radius: 5rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content {
|
|
||||||
padding: 20rpx;
|
|
||||||
max-width: 500rpx;
|
|
||||||
border-radius: 10rpx;
|
|
||||||
font-size: 28rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 语音
|
|
||||||
.contentType2 {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
align-items: center;
|
|
||||||
.voice_icon {
|
|
||||||
height: 34rpx;
|
|
||||||
width: 34rpx;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-size: 100%;
|
|
||||||
}
|
|
||||||
.voice_icon_right {
|
|
||||||
background-image: url(../../static/voice-left-3.png);
|
|
||||||
margin-left: 10rpx;
|
|
||||||
}
|
|
||||||
.voice_icon_left {
|
|
||||||
background-image: url(../../static/voice-right-3.png);
|
|
||||||
margin-right: 10rpx;
|
|
||||||
}
|
|
||||||
.voice_icon_right_an {
|
|
||||||
animation: voiceAn_right 1s linear alternate infinite;
|
|
||||||
}
|
|
||||||
.voice_icon_left_an {
|
|
||||||
animation: voiceAn_left 1s linear alternate infinite;
|
|
||||||
}
|
|
||||||
@keyframes voiceAn_right {
|
|
||||||
0% {
|
|
||||||
background-image: url(../../static/voice-left-1.png);
|
|
||||||
}
|
|
||||||
50% {
|
|
||||||
background-image: url(../../static/voice-left-2.png);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
background-image: url(../../static/voice-left-3.png);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@keyframes voiceAn_left {
|
|
||||||
0% {
|
|
||||||
background-image: url(../../static/voice-right-1.png);
|
|
||||||
}
|
|
||||||
50% {
|
|
||||||
background-image: url(../../static/voice-right-2.png);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
background-image: url(../../static/voice-right-3.png);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//图片
|
|
||||||
.contentType3{
|
|
||||||
padding: 0;
|
|
||||||
border-radius: 2rpx;
|
|
||||||
background-color: transparent !important;
|
|
||||||
.img{
|
|
||||||
width: 200rpx;
|
|
||||||
height: auto;
|
|
||||||
max-width: 300rpx;
|
|
||||||
max-height: 400rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.contentType3::after{
|
|
||||||
border: none !important;
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
.content-type-right {
|
|
||||||
flex-direction: row-reverse;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.right {
|
|
||||||
flex-direction: row-reverse;
|
|
||||||
|
|
||||||
.content {
|
|
||||||
background-color: $uni-color-success;
|
|
||||||
margin-right: 28rpx;
|
|
||||||
word-break: break-all;
|
|
||||||
line-height: 36rpx;
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
&::after {
|
|
||||||
content: '';
|
|
||||||
display: block;
|
|
||||||
width: 0;
|
|
||||||
height: 0;
|
|
||||||
border-top: 10rpx solid transparent;
|
|
||||||
border-bottom: 10rpx solid transparent;
|
|
||||||
border-left: 16rpx solid $uni-color-success;
|
|
||||||
position: absolute;
|
|
||||||
right: -16rpx;
|
|
||||||
top: 30rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.left {
|
|
||||||
.content {
|
|
||||||
background-color: $uni-text-color-inverse;
|
|
||||||
margin-left: 28rpx;
|
|
||||||
word-break: break-all;
|
|
||||||
line-height: 36rpx;
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
&::after {
|
|
||||||
content: '';
|
|
||||||
display: block;
|
|
||||||
width: 0;
|
|
||||||
height: 0;
|
|
||||||
border-top: 10rpx solid transparent;
|
|
||||||
border-bottom: 10rpx solid transparent;
|
|
||||||
border-right: 16rpx solid $uni-text-color-inverse;
|
|
||||||
position: absolute;
|
|
||||||
left: -16rpx;
|
|
||||||
top: 30rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-box {
|
|
||||||
position: fixed;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
box-sizing: content-box;
|
|
||||||
z-index: 999;
|
|
||||||
background-color: #eaeaea;
|
|
||||||
|
|
||||||
/* #ifdef APP-PLUS */
|
|
||||||
margin-bottom: 0rpx;
|
|
||||||
margin-bottom: constant(safe-area-inset-bottom);
|
|
||||||
margin-bottom: env(safe-area-inset-bottom);
|
|
||||||
/* #endif */
|
|
||||||
/* #ifdef MP-WEIXIN */
|
|
||||||
padding-bottom: 0rpx;
|
|
||||||
padding-bottom: constant(safe-area-inset-bottom);
|
|
||||||
padding-bottom: env(safe-area-inset-bottom);
|
|
||||||
/* #endif */
|
|
||||||
|
|
||||||
&-flex {
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-start;
|
|
||||||
align-items: center;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
flex-direction: row;
|
|
||||||
padding: 20rpx;
|
|
||||||
box-sizing: border-box;
|
|
||||||
image{
|
|
||||||
width: 56rpx;
|
|
||||||
height: 56rpx;
|
|
||||||
}
|
|
||||||
.icon_img {
|
|
||||||
margin-right: 20rpx;
|
|
||||||
}
|
|
||||||
.icon_btn_add{
|
|
||||||
margin-left: 20rpx;
|
|
||||||
}
|
|
||||||
&-grow {
|
|
||||||
flex-grow: 1;
|
|
||||||
|
|
||||||
.content {
|
|
||||||
box-sizing: border-box;
|
|
||||||
background-color: #fff;
|
|
||||||
height: 80rpx;
|
|
||||||
padding: 0 20rpx;
|
|
||||||
border-radius: 12rpx;
|
|
||||||
font-size: 28rpx;
|
|
||||||
caret-color: $uni-color-success;
|
|
||||||
}
|
|
||||||
|
|
||||||
.voice_title {
|
|
||||||
text-align: center;
|
|
||||||
background-color: #ffffff;
|
|
||||||
height: 80rpx;
|
|
||||||
line-height: 80rpx;
|
|
||||||
border-radius: 12rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn {
|
|
||||||
margin-left: 20rpx;
|
|
||||||
background-color: $u-type-success;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.fun-box{
|
|
||||||
opacity: 0;
|
|
||||||
transition: all 0.1s ease-in-out;
|
|
||||||
height: 0;
|
|
||||||
.grid-text{
|
|
||||||
padding-top: 10rpx;
|
|
||||||
color: $uni-text-color-grey;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.show-fun-box{
|
|
||||||
opacity: 1;
|
|
||||||
height: 300rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-box-mpInputMargin {
|
|
||||||
/* #ifdef MP-WEIXIN */
|
|
||||||
padding-bottom: 0rpx;
|
|
||||||
/* #endif */
|
|
||||||
}
|
|
||||||
.voice_an{
|
|
||||||
width: 300rpx;
|
|
||||||
height: 300rpx;
|
|
||||||
position: fixed;
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
transform: translate(-50%,-55%);
|
|
||||||
background-color: rgba(41,41,41,0.7);
|
|
||||||
color: white;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
text-align: center;
|
|
||||||
border-radius: 10rpx;
|
|
||||||
.text{
|
|
||||||
padding-top: 30rpx;
|
|
||||||
}
|
|
||||||
@keyframes runVoice{
|
|
||||||
0%{
|
|
||||||
height: 10%;
|
|
||||||
}
|
|
||||||
20%{
|
|
||||||
height: 50%;
|
|
||||||
}
|
|
||||||
50%{
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
80%{
|
|
||||||
height: 50%;
|
|
||||||
}
|
|
||||||
100%{
|
|
||||||
height: 0%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.wave{
|
|
||||||
width:6rpx;
|
|
||||||
height: 100%;
|
|
||||||
margin-left: 10rpx;
|
|
||||||
border-radius: 50rpx;
|
|
||||||
background-color: #999;
|
|
||||||
vertical-align: middle;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
.voice_an_icon{
|
|
||||||
width: 200rpx;
|
|
||||||
height: 100rpx;
|
|
||||||
line-height: 50rpx;
|
|
||||||
margin: 50rpx 0;
|
|
||||||
}
|
|
||||||
.voice_an_icon #one{
|
|
||||||
animation:runVoice 0.6s infinite 0.1s;
|
|
||||||
}
|
|
||||||
.voice_an_icon #two{
|
|
||||||
animation:runVoice 0.6s infinite 0.3s;
|
|
||||||
}
|
|
||||||
.voice_an_icon #three{
|
|
||||||
animation:runVoice 0.6s infinite 0.6s;
|
|
||||||
}
|
|
||||||
.voice_an_icon #four{
|
|
||||||
animation:runVoice 0.6s infinite 0.1s;
|
|
||||||
}
|
|
||||||
.voice_an_icon #five{
|
|
||||||
animation:runVoice 0.6s infinite 0.3s;
|
|
||||||
}
|
|
||||||
.voice_an_icon #six{
|
|
||||||
animation:runVoice 0.6s infinite 0.6s;
|
|
||||||
}
|
|
||||||
.voice_an_icon #seven{
|
|
||||||
animation:runVoice 0.6s infinite 0.1s;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,259 +1,121 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="concerns">
|
<view class="concerns">
|
||||||
<view>
|
<view class="tabs-top u-border-bottom">
|
||||||
<u-tabs-swiper ref="uTabs" :list="list" :current="current" @change="tabsChange" :is-scroll="false"
|
<u-tabs ref="uTabs" :show-bar="false" :list="list" font-size="32" :current="current" @change="tabsChange" :is-scroll="false"
|
||||||
swiperWidth="750" active-color="#FF780F"></u-tabs-swiper>
|
swiperWidth="750" active-color="#FF780F"></u-tabs>
|
||||||
</view>
|
</view>
|
||||||
<swiper :current="swiperCurrent" @transition="transition" @animationfinish="animationfinish" style="width:750rpx" :style="{'height':height}">
|
<scroll-view v-if="current==0" scroll-y style="height: 100%;width: 100%;" class="store" @scrolltolower="onreachBottom">
|
||||||
<swiper-item class="swiper-item" >
|
<storeViwe ref="store"></storeViwe>
|
||||||
|
</scroll-view>
|
||||||
<scroll-view scroll-y style="height: 100%;width: 100%;" class="store" @scrolltolower="shangjiaapi()">
|
<scroll-view v-else scroll-y style="height: 100%;width: 100%;" @scrolltolower="onreachBottom">
|
||||||
<view @touchmove.stop="">
|
<view class="concerns-container">
|
||||||
<u-swipe-action
|
<view v-for="(info, index) in daren" :key="index">
|
||||||
v-for="(item, index) in shangjia" :key="index"
|
<view class="daren-item">
|
||||||
:index='item.friend_tomid'
|
<image class="head" :src="info.friend_tomavatar" @click="toDetailsPage({ id: info.friend_tomid })"></image>
|
||||||
:options="options"
|
<text class="name" @click="toDetailsPage({ id: info.friend_tomid })">{{ info.friend_tomname || '' }}</text>
|
||||||
:show="item.show"
|
<view class="guanzhu" @click="changeType(info.friend_tomid)" v-if="info.friend_followstate == 1">取消关注</view>
|
||||||
@click="removeFavorite"
|
|
||||||
@open="open"
|
|
||||||
>
|
|
||||||
<view class="item u-border-bottom" @click="toDetailsPage(item.friend_store_id)">
|
|
||||||
<image :src="item.friend_tomavatar"></image>
|
|
||||||
<!-- 此层wrap在此为必写的,否则可能会出现标题定位错误 -->
|
|
||||||
<view class="title-wrap">
|
|
||||||
<view class="item-name u-line-1">{{ item.friend_tomname }}</view>
|
|
||||||
<view class="item-date">
|
|
||||||
<image src="@/pageE/static/mine/26.png"></image>
|
|
||||||
<view>{{ item.friend_tomavatar | date }}</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</u-swipe-action>
|
|
||||||
<view style="height:20rpx"></view>
|
|
||||||
<u-loadmore :status="sstatus" bg-color="#ECECEC" v-if="shangjia.length" />
|
|
||||||
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<u-empty mode="list" v-if="!shangjia.length" color="#000" img-width="200" font-size="30"></u-empty>
|
|
||||||
</scroll-view>
|
|
||||||
</swiper-item>
|
|
||||||
<swiper-item class="swiper-item" >
|
|
||||||
<scroll-view scroll-y style="height: 100%;width: 100%;" @scrolltolower="darenapi()">
|
|
||||||
<view class="concerns-container">
|
|
||||||
<view v-for="(info, index) in daren" :key="index">
|
|
||||||
<view class="daren-item">
|
|
||||||
<image class="head" :src="info.friend_tomavatar" @click="viewDetails({ id: info.friend_tomid, type: info.role })"></image>
|
|
||||||
<text class="name" @click="viewDetails({ id: info.friend_tomid, type: info.role })">{{ info.friend_tomname || '' }}</text>
|
|
||||||
<view class="guanzhu" @click="changeType(info.friend_tomid)" v-if="info.friend_followstate == 1">取消关注</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<u-loadmore :status="dstatus" bg-color="#ECECEC" v-if="daren.length" />
|
|
||||||
</view>
|
</view>
|
||||||
<u-empty mode="list" v-if="!daren.length" color="#000" img-width="200" font-size="30"></u-empty>
|
</view>
|
||||||
</scroll-view>
|
<u-loadmore :status="loadStatus" bg-color="#FFFFFF" v-if="daren.length > 9" @loadmore="loadmore" />
|
||||||
</swiper-item>
|
</view>
|
||||||
</swiper>
|
<u-empty mode="list" v-if="!daren.length" color="#000" img-width="200" font-size="30" margin-top="200"></u-empty>
|
||||||
|
</scroll-view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
import storeViwe from './storeConcerns'
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
list: [{name:"商家"},{name:"达人"}],
|
list: [{ name: "商家" }, { name: "达人" }],
|
||||||
current: 0, // tabs组件的current值,表示当前活动的tab选项
|
daren: [],
|
||||||
swiperCurrent: 0, // swiper组件的current值,表示当前那个swiper-item是活动的
|
|
||||||
daren:[],
|
|
||||||
shangjia:[],
|
shangjia:[],
|
||||||
height:0,
|
height: 0,
|
||||||
show: false,
|
show: false,
|
||||||
options: [
|
current: 0,
|
||||||
{
|
page: 1,
|
||||||
text: '删除',
|
loadStatus: 'loadmore',
|
||||||
style: {
|
timer: true,
|
||||||
backgroundColor: '#FF3131'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
dpage:1,
|
|
||||||
spage:1,
|
|
||||||
dstatus: 'loadmore',
|
|
||||||
sstatus: 'loadmore',
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
components: {
|
||||||
|
storeViwe,
|
||||||
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
this.dstatus = "loadmore"
|
this.loadStatus = "loadmore"
|
||||||
this.sstatus = "loadmore"
|
this.page = 1
|
||||||
this.dpage = 1
|
this.getPeopleList();
|
||||||
this.spage = 1
|
|
||||||
this.shangjiaapi();
|
|
||||||
this.darenapi();
|
|
||||||
},
|
},
|
||||||
onLoad(){
|
onLoad(){
|
||||||
let that = this
|
this.setViewHeight();
|
||||||
|
|
||||||
uni.getSystemInfo({
|
|
||||||
success(res){
|
|
||||||
that.height = res.windowHeight - (res.windowWidth / 750 * 80) + 'px'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
// 下拉刷新
|
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
setViewHeight() {
|
||||||
|
const res = uni.getSystemInfoSync();
|
||||||
|
this.height = res.windowHeight - (res.windowWidth / 750 * 80) + 'px';
|
||||||
|
},
|
||||||
// tabs通知swiper切换
|
// tabs通知swiper切换
|
||||||
tabsChange(index) {
|
tabsChange(index) {
|
||||||
this.swiperCurrent = index;
|
this.current = index;
|
||||||
},
|
|
||||||
// swiper-item左右移动,通知tabs的滑块跟随移动
|
|
||||||
transition(e) {
|
|
||||||
let dx = e.detail.dx;
|
|
||||||
this.$refs.uTabs.setDx(dx);
|
|
||||||
},
|
|
||||||
// 由于swiper的内部机制问题,快速切换swiper不会触发dx的连续变化,需要在结束时重置状态
|
|
||||||
// swiper滑动结束,分别设置tabs和swiper的状态
|
|
||||||
animationfinish(e) {
|
|
||||||
let current = e.detail.current;
|
|
||||||
this.$refs.uTabs.setFinishCurrent(current);
|
|
||||||
this.swiperCurrent = current;
|
|
||||||
this.current = current;
|
|
||||||
},
|
},
|
||||||
// scroll-view到底部加载更多
|
// scroll-view到底部加载更多
|
||||||
onreachBottom() {
|
onreachBottom() {
|
||||||
|
if(this.current == 0) this.$refs.loadmore();
|
||||||
|
else if(this.current == 1) this.loadmore();
|
||||||
},
|
},
|
||||||
shangjiaapi() {
|
loadmore() {
|
||||||
if(this.sstatus == "loading" || this.sstatus == 'nomore') return
|
if(!this.timer) return false;
|
||||||
this.sstatus = "loading"
|
this.timer = false;
|
||||||
this.$forceUpdate();
|
this.loadStatus = "loading";
|
||||||
this.$u.api.attentionMemberList({role:2,page:this.spage}).then(res => {
|
this.page++;
|
||||||
console.log(res)
|
this.getPeopleList({ load: 'loadmore' }).then(length => {
|
||||||
if(res.errCode == 0) {
|
this.loadStatus = "nomore";
|
||||||
this.spage > 1 ? this.shangjia.push(...res.data.data) : (this.shangjia = res.data.data);
|
if(length == 0) this.page--;
|
||||||
this.sstatus = "loadmore"
|
}).catch(() => {
|
||||||
|
this.loadStatus = "nomore";
|
||||||
if(res.data.data.length == 0){
|
this.page--;
|
||||||
this.sstatus = 'nomore'
|
|
||||||
}
|
|
||||||
this.spage++
|
|
||||||
this.$forceUpdate();
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
darenapi() {
|
async getPeopleList({ load = 'reload' } = {}) {
|
||||||
this.$u.api.attentionMemberList({role:3,page:this.dpage}).then(res => {
|
const res = await this.$u.api.attentionMemberList({
|
||||||
if(this.dstatus == "loading" || this.dstatus == 'nomore') return
|
role: 3,
|
||||||
this.dstatus = "loading"
|
page: this.page
|
||||||
this.$forceUpdate();
|
|
||||||
|
|
||||||
console.log(this.dstatus)
|
|
||||||
console.log(res)
|
|
||||||
if(res.errCode == 0) {
|
|
||||||
this.dpage > 1 ? this.daren.push(...res.data.data) : (this.daren = res.data.data);
|
|
||||||
this.dstatus = "loadmore"
|
|
||||||
|
|
||||||
if(res.data.data.length == 0){
|
|
||||||
this.dstatus = 'nomore'
|
|
||||||
}
|
|
||||||
this.dpage++
|
|
||||||
this.$forceUpdate();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
this.timer = true;
|
||||||
|
if(res.errCode == 0) {
|
||||||
|
if(load == 'reload') this.daren = res.data.data;
|
||||||
|
else if(load == 'loadmore') this.daren.push(...res.data.data);
|
||||||
|
}
|
||||||
|
return res.data.data.length;
|
||||||
},
|
},
|
||||||
viewDetails({ id, type }) {
|
// 取消关注
|
||||||
let src = type == 3 ? 'pageB/details/index' : 'pageC/merchant/index';
|
|
||||||
this.$u.route(src, {
|
|
||||||
id: id
|
|
||||||
});
|
|
||||||
},
|
|
||||||
changeType(id) {
|
changeType(id) {
|
||||||
console.log(id);
|
// console.log(id);
|
||||||
this.$u.api.attentionMember({
|
this.$u.api.attentionMember({
|
||||||
member_id: id
|
member_id: id
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
this.$u.toast(res.message);
|
this.$u.toast(res.message);
|
||||||
this.attentionMemberList();
|
this.getPeopleList();
|
||||||
})
|
|
||||||
},
|
|
||||||
removeFavorite(id) {
|
|
||||||
console.log(id)
|
|
||||||
this.$u.api.attentionMemberRemove({
|
|
||||||
id: id,
|
|
||||||
type: 'store'
|
|
||||||
}).then(res => {
|
|
||||||
console.log(res)
|
|
||||||
this.$u.toast(res.message);
|
|
||||||
if(res.errCode == 0) {
|
|
||||||
this.sstatus = "loadmore"
|
|
||||||
this.spage = 1
|
|
||||||
this.shangjiaapi();
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
toDetailsPage(id) {
|
toDetailsPage(id) {
|
||||||
this.$u.route('pageC/merchant/index', {
|
this.$u.route('pageB/details/index', {
|
||||||
id: id
|
id: id
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
open(index) {
|
|
||||||
// 先将正在被操作的swipeAction标记为打开状态,否则由于props的特性限制,
|
|
||||||
// 原本为'false',再次设置为'false'会无效
|
|
||||||
this.shangjia[index].show = true;
|
|
||||||
this.shangjia.map((val, idx) => {
|
|
||||||
if(index != idx) this.list[idx].show = false;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.store {
|
|
||||||
background-color: #ECECEC;
|
|
||||||
.item {
|
|
||||||
padding: 30rpx;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
> image {
|
|
||||||
width: 80rpx;
|
|
||||||
height: 80rpx;
|
|
||||||
border-radius: 50%;
|
|
||||||
flex-shrink: 0;
|
|
||||||
margin-right: 21rpx;
|
|
||||||
}
|
|
||||||
.title-wrap {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
.item-name {
|
|
||||||
width: 260rpx;
|
|
||||||
font-size: 30rpx;
|
|
||||||
color: rgba(51,51,51,1);
|
|
||||||
}
|
|
||||||
.item-date {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
> image {
|
|
||||||
margin-right: 25rpx;
|
|
||||||
width: 24rpx;
|
|
||||||
height: 24rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.concerns {
|
.concerns {
|
||||||
background-color: #ECECEC;
|
background-color: #FFFFFF;
|
||||||
|
.store {
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
}
|
||||||
.concerns-container {
|
.concerns-container {
|
||||||
padding: 30rpx;
|
padding: 30rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
|
||||||
// &:not(:nth-child(3n)) {
|
|
||||||
// margin-right: 20rpx;
|
|
||||||
// }
|
|
||||||
margin-left: -20rpx;
|
margin-left: -20rpx;
|
||||||
.daren-item{
|
.daren-item{
|
||||||
width: 215rpx;
|
width: 215rpx;
|
||||||
|
176
pageE/mine/storeConcerns.vue
Normal file
176
pageE/mine/storeConcerns.vue
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
<template>
|
||||||
|
<view class="collection-item">
|
||||||
|
<u-swipe-action
|
||||||
|
v-for="(item, index) in list" :key="index"
|
||||||
|
:index='index'
|
||||||
|
:show="item.show"
|
||||||
|
:options="options"
|
||||||
|
@click="removeFavorite"
|
||||||
|
@open="open"
|
||||||
|
>
|
||||||
|
<view class="item u-border-bottom" @click="viewStoreDetails(item)">
|
||||||
|
<image :src="item.friend_tomavatar"></image>
|
||||||
|
<!-- 此层wrap在此为必写的,否则可能会出现标题定位错误 -->
|
||||||
|
<view class="title-wrap">
|
||||||
|
<view class="item-top u-line-1">{{ item.friend_tomname }}</view>
|
||||||
|
<view class="item-bottom">
|
||||||
|
<view class="item-date">
|
||||||
|
<image src="@/pageE/static/mine/26.png"></image>
|
||||||
|
<view>{{ item.friend_tomavatar | date }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</u-swipe-action>
|
||||||
|
<u-empty mode="list" v-if="!list.length" color="#000" img-width="200" font-size="30" margin-top="200"></u-empty>
|
||||||
|
<u-loadmore :status="loadStatus" bg-color="#FFFFFF" v-if="list.length > pageSize" @loadmore="loadmore" />
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
pageSize: 12,
|
||||||
|
list: [],
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
text: '删除',
|
||||||
|
style: {
|
||||||
|
backgroundColor: '#FF3131'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
page: 1,
|
||||||
|
timer: true,
|
||||||
|
loadStatus: 'loadmore',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getStoreList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
viewStoreDetails(item) {
|
||||||
|
if(this.closeAction()) return false;
|
||||||
|
// console.log(this.list);
|
||||||
|
const list = this.list.filter(item => {
|
||||||
|
return item.show;
|
||||||
|
})
|
||||||
|
if(list.length) return false;
|
||||||
|
this.$u.route({
|
||||||
|
url: 'pageC/merchant/index',
|
||||||
|
params: {
|
||||||
|
id: item.friend_store_id,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async getStoreList({ load = 'reload' } = {}) {
|
||||||
|
const res = await this.$u.api.attentionMemberList({
|
||||||
|
role: 2,
|
||||||
|
page: this.page
|
||||||
|
})
|
||||||
|
this.timer = true;
|
||||||
|
if(res.errCode == 0) {
|
||||||
|
if(load == 'reload') this.list = res.data.data;
|
||||||
|
else if(load == 'loadmore') this.list.push(...res.data.data);
|
||||||
|
}
|
||||||
|
this.list.forEach(item => {
|
||||||
|
Object.assign(item, { show: false });
|
||||||
|
})
|
||||||
|
// console.log(this.list);
|
||||||
|
return res.data.data.length;
|
||||||
|
},
|
||||||
|
loadmore() {
|
||||||
|
if(!this.timer) return false;
|
||||||
|
this.timer = false;
|
||||||
|
this.loadStatus = "loading";
|
||||||
|
this.page++;
|
||||||
|
let promise;
|
||||||
|
promise = this.getStoreList({ load: 'loadmore' });
|
||||||
|
promise.then(length => {
|
||||||
|
this.loadStatus = "nomore";
|
||||||
|
if(length == 0) this.page--;
|
||||||
|
}).catch(() => {
|
||||||
|
this.loadStatus = "nomore";
|
||||||
|
this.page--;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
removeFavorite(index) {
|
||||||
|
const id = this.list[index].friend_tomid;
|
||||||
|
this.$u.api.attentionMemberRemove({
|
||||||
|
id: id,
|
||||||
|
type: 'store'
|
||||||
|
}).then(res => {
|
||||||
|
if(res.errCode == 0) {
|
||||||
|
this.getStoreList();
|
||||||
|
} else {
|
||||||
|
this.$u.toast(res.message);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
closeAction() {
|
||||||
|
let status = false;
|
||||||
|
this.list.map((val, idx) => {
|
||||||
|
if(val.show) {
|
||||||
|
status = true;
|
||||||
|
this.$set(this.list[idx], 'show', false);
|
||||||
|
};
|
||||||
|
})
|
||||||
|
this.$forceUpdate();
|
||||||
|
return status;
|
||||||
|
},
|
||||||
|
open(index) {
|
||||||
|
console.log(index);
|
||||||
|
// 先将正在被操作的swipeAction标记为打开状态,否则由于props的特性限制,
|
||||||
|
// 原本为'false',再次设置为'false'会无效
|
||||||
|
this.list[index].show = true;
|
||||||
|
this.list.map((val, idx) => {
|
||||||
|
if(index != idx) this.list[idx].show = false;
|
||||||
|
})
|
||||||
|
this.$forceUpdate();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.collection-item {
|
||||||
|
background-color: #ffffff;
|
||||||
|
.item {
|
||||||
|
padding: 30rpx;
|
||||||
|
display: flex;
|
||||||
|
> image {
|
||||||
|
width: 180rpx;
|
||||||
|
height: 160rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
margin-right: 30rpx;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.title-wrap {
|
||||||
|
flex: 1;
|
||||||
|
.item-top {
|
||||||
|
font-size: 30rpx;
|
||||||
|
color: rgba(51,51,51,1);
|
||||||
|
line-height: 44rpx;
|
||||||
|
margin-bottom: 54rpx;
|
||||||
|
}
|
||||||
|
.item-bottom {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
.item-price {
|
||||||
|
font-size: 30rpx;
|
||||||
|
color: rgba(51,51,51,1);
|
||||||
|
}
|
||||||
|
.item-date {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
> image {
|
||||||
|
margin-right: 25rpx;
|
||||||
|
width: 24rpx;
|
||||||
|
height: 24rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -1,11 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="setting">
|
<view class="setting">
|
||||||
<view class="list-item">
|
<!-- <view class="list-item">
|
||||||
<view>消息提醒</view>
|
<view>消息提醒</view>
|
||||||
<view>
|
<view>
|
||||||
<u-switch v-model="checked" active-color="#FF770F" inactive-color="#A9A7A7" size="35"></u-switch>
|
<u-switch v-model="checked" active-color="#FF770F" inactive-color="#A9A7A7" size="35"></u-switch>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view> -->
|
||||||
<view v-for="(item, index) in settingList" :key="index" class="list-item" @click="toNextPage(item.link)">
|
<view v-for="(item, index) in settingList" :key="index" class="list-item" @click="toNextPage(item.link)">
|
||||||
<view>{{ item.title }}</view>
|
<view>{{ item.title }}</view>
|
||||||
<image src="../static/mine/21.png"></image>
|
<image src="../static/mine/21.png"></image>
|
||||||
|
@ -5,17 +5,15 @@
|
|||||||
<view class="feedback-itme">
|
<view class="feedback-itme">
|
||||||
<view class="manual">
|
<view class="manual">
|
||||||
<view class="service-phone">拨打官方客服电话:400-100-100</view>
|
<view class="service-phone">拨打官方客服电话:400-100-100</view>
|
||||||
<view class="manual-time">周一至周五08:0-18:00</view>
|
<view class="manual-time">{{ wkTime }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="suggestions">意见反馈</view>
|
<view class="suggestions" @click="writeComments">意见反馈</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="feedback-box">
|
<view class="feedback-box">
|
||||||
<view class="feedback-title">常见服务</view>
|
<view class="feedback-title">常见服务</view>
|
||||||
<view class="feedback-itme">
|
<view class="feedback-itme">
|
||||||
<view class="u-line-2">【账号问题】登录时需要验证码,手机号使用不了怎么办?</view>
|
<view class="u-line-2" v-for="item in helpList" :key="item.id" @click="viewAnswer(item)">{{ item.question }}</view>
|
||||||
<view class="u-line-2">【账号问题】登录时需提示您的密码不安全,请重置?</view>
|
|
||||||
<view class="u-line-2">【账号问题】登录密码忘记了怎么办?</view>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@ -23,7 +21,32 @@
|
|||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {}
|
return {
|
||||||
|
helpList: [],
|
||||||
|
wkTime: '',
|
||||||
|
tel400: '',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
this.getHelpList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
viewAnswer(item) {
|
||||||
|
this.$store.commit('setQuestion', item);
|
||||||
|
this.$u.route('pageE/setting/question');
|
||||||
|
},
|
||||||
|
getHelpList() {
|
||||||
|
this.$u.api.getSettingHelpList().then(res => {
|
||||||
|
this.helpList = res.data.QA;
|
||||||
|
this.tel400 = res.data.tel400;
|
||||||
|
this.wkTime = res.data.wkTime;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
writeComments() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pageE/more/WriteComments'
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
51
pageE/setting/question.vue
Normal file
51
pageE/setting/question.vue
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<template>
|
||||||
|
<view class="question">
|
||||||
|
<view class="public-view quest">
|
||||||
|
<view class="title qt">Q:</view>
|
||||||
|
<view class="qa">{{ item.question }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="public-view answer">
|
||||||
|
<view class="title at">A:</view>
|
||||||
|
<view>
|
||||||
|
<rich-text :nodes="nodes"></rich-text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import common from '@/static/js/common.js'
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
item: {},
|
||||||
|
nodes: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
this.item = this.$store.state.question;
|
||||||
|
console.log(this.item);
|
||||||
|
this.nodes = common.unescapeHTML(this.item.answer);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.question {
|
||||||
|
min-height: calc(100vh - var(--window-top));
|
||||||
|
background: #FFFFFF;
|
||||||
|
padding: 20rpx 30rpx;
|
||||||
|
.public-view {
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
.title {
|
||||||
|
font-size: 36rpx;
|
||||||
|
margin-right: 20rpx;
|
||||||
|
}
|
||||||
|
.at {
|
||||||
|
color: #ff780f;
|
||||||
|
}
|
||||||
|
.qa {
|
||||||
|
line-height: 36rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
17
pages.json
17
pages.json
@ -845,7 +845,6 @@
|
|||||||
{
|
{
|
||||||
"path": "mine/MineConcerns",
|
"path": "mine/MineConcerns",
|
||||||
"style": {
|
"style": {
|
||||||
"enablePullDownRefresh": true,
|
|
||||||
"navigationBarTitleText": "我的关注",
|
"navigationBarTitleText": "我的关注",
|
||||||
"app-plus": {
|
"app-plus": {
|
||||||
"titleSize": "36px",
|
"titleSize": "36px",
|
||||||
@ -861,10 +860,9 @@
|
|||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "勋章介绍",
|
"navigationBarTitleText": "勋章介绍",
|
||||||
"app-plus": {
|
"app-plus": {
|
||||||
"type": "transparent",
|
|
||||||
"titleSize": "36px",
|
"titleSize": "36px",
|
||||||
"titleNView": {
|
"titleNView": {
|
||||||
"backgroundColor": "rgba(255,255,255,0)",
|
"type": "transparent",
|
||||||
"titleColor": "#ffffff"
|
"titleColor": "#ffffff"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -968,6 +966,19 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "setting/question",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "常见问题",
|
||||||
|
"app-plus": {
|
||||||
|
"titleSize": "36px",
|
||||||
|
"titleNView": {
|
||||||
|
"titleColor": "#333333",
|
||||||
|
"backgroundColor": "#FFFFFF"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "setting/ShieldUsers",
|
"path": "setting/ShieldUsers",
|
||||||
"style": {
|
"style": {
|
||||||
|
@ -222,7 +222,6 @@
|
|||||||
import zhiboItem from "@/components/index/zhibo-item/index"
|
import zhiboItem from "@/components/index/zhibo-item/index"
|
||||||
import indexad from "@/components/index/ad/index"
|
import indexad from "@/components/index/ad/index"
|
||||||
import darenItem from "@/components/index/daren-item/index"
|
import darenItem from "@/components/index/daren-item/index"
|
||||||
import chatVue from '../../pageD/chat/chat.vue'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "index",
|
name: "index",
|
||||||
@ -266,14 +265,14 @@ import chatVue from '../../pageD/chat/chat.vue'
|
|||||||
onShow() {
|
onShow() {
|
||||||
this.page = 1;
|
this.page = 1;
|
||||||
if (this.page != 1) {
|
if (this.page != 1) {
|
||||||
this.articleList = [];
|
|
||||||
}
|
}
|
||||||
this.getArticlelist();
|
|
||||||
// if (this.hasLogin) {
|
// if (this.hasLogin) {
|
||||||
// this.isNewmembervoucher();
|
// this.isNewmembervoucher();
|
||||||
// }
|
// }
|
||||||
},
|
},
|
||||||
async onLoad(){
|
async onLoad(){
|
||||||
|
this.articleList = [];
|
||||||
|
this.getArticlelist();
|
||||||
this.getSwiper();
|
this.getSwiper();
|
||||||
// 优惠券
|
// 优惠券
|
||||||
if(this.$store.state.hasLogin){
|
if(this.$store.state.hasLogin){
|
||||||
@ -402,16 +401,18 @@ import chatVue from '../../pageD/chat/chat.vue'
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 发现别表
|
// 发现列表
|
||||||
getArticlelist() {
|
getArticlelist() {
|
||||||
uni.showLoading({
|
if (this.page > 1) {
|
||||||
title: "loading..."
|
uni.showLoading({
|
||||||
})
|
title: "loading..."
|
||||||
|
})
|
||||||
|
}
|
||||||
this.$u.api.getArticlelist({
|
this.$u.api.getArticlelist({
|
||||||
page: this.page,
|
page: this.page,
|
||||||
is_video_img: 0, // 查询视频1 图文2 都查0
|
is_video_img: 0, // 查询视频1 图文2 都查0
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
// uni.stopPullDownRefresh();
|
uni.stopPullDownRefresh();
|
||||||
this.status = "loading";
|
this.status = "loading";
|
||||||
if (res.errCode == 0) {
|
if (res.errCode == 0) {
|
||||||
uni.hideLoading();
|
uni.hideLoading();
|
||||||
|
Loading…
Reference in New Issue
Block a user