143 lines
3.2 KiB
Vue
143 lines
3.2 KiB
Vue
|
|
<template>
|
||
|
|
<view class="main">
|
||
|
|
<view class="flex flex-between input">
|
||
|
|
<input type="text" placeholder="如下棋、看书" :maxlength="6" v-model="txt" />
|
||
|
|
<text class="right bg-base" @click="onAdd">添加</text>
|
||
|
|
</view>
|
||
|
|
<text class="title" v-if="selectList.length > 0">我的兴趣爱好</text>
|
||
|
|
<view class="list">
|
||
|
|
<text class="item active" v-for="(item, i) in selectList" @click="selectLabel(i, false)">—{{item}}</text>
|
||
|
|
</view>
|
||
|
|
<text class="title">职业选择</text>
|
||
|
|
<view class="list">
|
||
|
|
<text class="item" :class="{'active':item.select}" v-for="(item, i) in labelList" @click="selectLabel(i, true)">+{{item.content}}</text>
|
||
|
|
</view>
|
||
|
|
<button type="primary" class="bg-base btn" :loading="loading" :disabled="loading" @click="onConfirm">确定</button>
|
||
|
|
</view>
|
||
|
|
</template>
|
||
|
|
|
||
|
|
<script>
|
||
|
|
import { mapState } from "vuex"
|
||
|
|
import url from "@/common/http/url.js"
|
||
|
|
export default{
|
||
|
|
data(){
|
||
|
|
return{
|
||
|
|
loading: false,
|
||
|
|
selectList: [],
|
||
|
|
labelList: [],
|
||
|
|
txt: ""
|
||
|
|
}
|
||
|
|
},
|
||
|
|
computed:{
|
||
|
|
...mapState(["userInfo"])
|
||
|
|
},
|
||
|
|
onLoad(opt) {
|
||
|
|
let labelHobby = this.userInfo.labelHobby
|
||
|
|
if (labelHobby) {
|
||
|
|
labelHobby = labelHobby.split("-")
|
||
|
|
this.selectList = labelHobby
|
||
|
|
}
|
||
|
|
if (opt.labels) {
|
||
|
|
let labels = JSON.parse(opt.labels)
|
||
|
|
let list = []
|
||
|
|
labels.forEach((v, i) =>{
|
||
|
|
if (v.type === 2) {
|
||
|
|
if (labelHobby && labelHobby.includes(v.text)){
|
||
|
|
v.select = true
|
||
|
|
}
|
||
|
|
list.push(v)
|
||
|
|
}
|
||
|
|
|
||
|
|
})
|
||
|
|
this.labelList = list
|
||
|
|
}
|
||
|
|
},
|
||
|
|
methods:{
|
||
|
|
onConfirm(){
|
||
|
|
this.loading = true
|
||
|
|
this.$http("POST", url.user.editUserInfo, {labelHobby: this.selectList.join("-")}).then(res =>{
|
||
|
|
this.$msg(res.data)
|
||
|
|
this.$navigateBack(1, 500)
|
||
|
|
}).catch(()=>{
|
||
|
|
this.loading = false
|
||
|
|
})
|
||
|
|
},
|
||
|
|
onAdd(){
|
||
|
|
if (!this.txt) return
|
||
|
|
this.selectList.unshift(this.txt)
|
||
|
|
this.txt = ""
|
||
|
|
},
|
||
|
|
selectLabel(index, type){
|
||
|
|
if (type){
|
||
|
|
if (this.labelList[index].select) return
|
||
|
|
this.labelList[index].select = true
|
||
|
|
this.selectList.unshift(this.labelList[index].content)
|
||
|
|
} else {
|
||
|
|
if (this.selectList.length === 1) return
|
||
|
|
let text = this.selectList[index]
|
||
|
|
this.selectList.splice(index, 1)
|
||
|
|
this.labelList.forEach((v, i) =>{
|
||
|
|
if (v.content === text) {
|
||
|
|
this.labelList[i].select = false
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
this.$forceUpdate()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
</script>
|
||
|
|
|
||
|
|
<style scoped lang="scss">
|
||
|
|
.main{
|
||
|
|
padding: 30rpx 0;
|
||
|
|
.input{
|
||
|
|
margin: 0 30rpx 30rpx;
|
||
|
|
input{
|
||
|
|
background-color: #f3f4f5;
|
||
|
|
padding: 10rpx;
|
||
|
|
font-size: 28rpx;
|
||
|
|
height: 70rpx;
|
||
|
|
border-radius: 10rpx;
|
||
|
|
flex-grow: 1;
|
||
|
|
}
|
||
|
|
.right{
|
||
|
|
padding: 10rpx 30rpx;
|
||
|
|
font-size: 30rpx;
|
||
|
|
height: 70rpx;
|
||
|
|
line-height: 70rpx;
|
||
|
|
border-radius: 10rpx;
|
||
|
|
color: white;
|
||
|
|
margin-left: 20rpx;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
.title{
|
||
|
|
margin-left: 30rpx;
|
||
|
|
margin-bottom: 30rpx;
|
||
|
|
display: block;
|
||
|
|
}
|
||
|
|
.list{
|
||
|
|
display: flex;
|
||
|
|
align-items: center;
|
||
|
|
flex-wrap: wrap;
|
||
|
|
.item{
|
||
|
|
border-radius: 50rpx;
|
||
|
|
font-size: 26rpx;
|
||
|
|
color: #444444;
|
||
|
|
background-color: #ebebeb;
|
||
|
|
margin-left: 30rpx;
|
||
|
|
margin-bottom: 30rpx;
|
||
|
|
padding: 20rpx 40rpx;
|
||
|
|
}
|
||
|
|
.active{
|
||
|
|
background-color: rgba($color: #F8D247, $alpha: .2);
|
||
|
|
color: #F8D247;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
.btn{
|
||
|
|
margin: 80rpx 50rpx 50rpx;
|
||
|
|
border-radius: 50rpx;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
</style>
|