@@ -1,14 +1,35 @@ | |||||
import request from '@/config/request_java'; | import request from '@/config/request_java'; | ||||
export const APIOptimize = { | export const APIOptimize = { | ||||
getExpertList // 获取专家列表 | |||||
getExpertList, // 获取专家列表 | |||||
getTalkList, // 获取养育话题列表 | |||||
addTalkLabels // 新增养育话题标签 | |||||
}; | }; | ||||
export default APIOptimize; | export default APIOptimize; | ||||
// 获取专家列表 | // 获取专家列表 | ||||
function getExpertList() { | |||||
function getExpertList(id) { | |||||
return request({ | return request({ | ||||
url: `/java_api/optimize/getExpertList`, | url: `/java_api/optimize/getExpertList`, | ||||
method: 'get' | |||||
method: 'get', | |||||
params: { id } | |||||
}); | }); | ||||
} | |||||
} | |||||
// 获取养育话题列表 | |||||
function getTalkList(id) { | |||||
return request({ | |||||
url: `/java_api/optimize/getTalkList`, | |||||
method: 'get', | |||||
params: { id } | |||||
}); | |||||
} | |||||
// 新增养育话题标签 | |||||
function addTalkLabels(params) { | |||||
return request({ | |||||
url: `/java_api/optimize/addTalkLabels`, | |||||
method: 'post', | |||||
data: params | |||||
}); | |||||
} |
@@ -313,6 +313,12 @@ export const constantRouterMap = [ | |||||
name: 'questionnaire', | name: 'questionnaire', | ||||
component: () => import('@/views/questionnaire/index'), | component: () => import('@/views/questionnaire/index'), | ||||
meta: { title: '问卷', keepAlive: false } | meta: { title: '问卷', keepAlive: false } | ||||
}, | |||||
{ | |||||
path: '/talk', | |||||
name: 'talk', | |||||
component: () => import('@/views/optimize/talk'), | |||||
meta: { title: '养育话题', keepAlive: false } | |||||
} | } | ||||
] | ] | ||||
} | } | ||||
@@ -10,25 +10,19 @@ | |||||
</van-nav-bar> | </van-nav-bar> | ||||
<div class="main"> | <div class="main"> | ||||
<div class="introduce"> | <div class="introduce"> | ||||
<h3>黛建松</h3> | |||||
<span>清华大学心理学教授儿童心理问题咨询治疗经验。</span> | |||||
<p><i>700人次</i>咨询<br />从业<i>30年</i></p> | |||||
<h3>{{info.name}}</h3> | |||||
<span>{{info.summary}}</span> | |||||
<!-- <p><i>700人次</i>咨询<br />从业<i>30年</i></p> --> | |||||
<p>{{info.seek}}</p> | |||||
<img src="@/assets/optimize/images/3_48.png" alt="" /> | <img src="@/assets/optimize/images/3_48.png" alt="" /> | ||||
</div> | </div> | ||||
<div class="title"> | <div class="title"> | ||||
<van-checkbox-group v-model="result"> | <van-checkbox-group v-model="result"> | ||||
<van-checkbox name="1">北京协和医学院专家</van-checkbox> | |||||
<van-checkbox name="1">儿童青少年心理权威专家</van-checkbox> | |||||
<van-checkbox name="1">北京云帆启迪心理咨询中心主任</van-checkbox> | |||||
<van-checkbox v-for="(item, index) in info.titles" :key="index" name="1">{{item}}</van-checkbox> | |||||
</van-checkbox-group> | </van-checkbox-group> | ||||
</div> | </div> | ||||
<div class="summary"> | <div class="summary"> | ||||
<p> | |||||
她提倡“适应力教育和能力训练”,训练孩子的学习能力、良好 的情绪、人际关系以及强大的适应力。30年来帮助数万个家庭 | |||||
走出孩子成长中的困境,引领家长成为孩子成长的好教练。她 | |||||
著有《让孩子学习上瘾的十大法则》、《不抢跑也能超越》等多本 | |||||
畅销书。在《人民日报》、《北京青年报》等主流媒体发表上百篇科 普文章。担任中央电视台多档节目特邀专家。 | |||||
</p> | |||||
<p>{{ info.introduce }}</p> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<!-- 底部导航 --> | <!-- 底部导航 --> | ||||
@@ -38,6 +32,7 @@ | |||||
<script> | <script> | ||||
import TabBar from '@/components/TabBar'; | import TabBar from '@/components/TabBar'; | ||||
import APIOptimize from '@/api/optimize'; | |||||
import { Checkbox, CheckboxGroup } from 'vant'; | import { Checkbox, CheckboxGroup } from 'vant'; | ||||
export default { | export default { | ||||
components: { | components: { | ||||
@@ -47,19 +42,32 @@ export default { | |||||
}, | }, | ||||
data() { | data() { | ||||
return { | return { | ||||
result: ['1'] | |||||
result: ['1'], | |||||
info: {} | |||||
}; | }; | ||||
}, | }, | ||||
created() { | created() { | ||||
console.log(this.$route.query); | |||||
this.init(this.$route.query.id); | |||||
}, | }, | ||||
mounted() {}, | mounted() {}, | ||||
methods: { | methods: { | ||||
// 返回 | |||||
onNavBack() { | onNavBack() { | ||||
this.$router.push({ | this.$router.push({ | ||||
name: 'Optimize' | name: 'Optimize' | ||||
}); | }); | ||||
}, | |||||
init(id) { | |||||
// 专家详情 | |||||
APIOptimize.getExpertList(id) | |||||
.then(res => { | |||||
if ( res.data.data.length != 0 ) { | |||||
this.info = res.data.data[0] | |||||
this.info.titles = this.info.titles.split('|') | |||||
} | |||||
}) | |||||
.catch(e => { | |||||
console.log(e); | |||||
}) | |||||
} | } | ||||
} | } | ||||
}; | }; | ||||
@@ -4,8 +4,12 @@ | |||||
<!-- 专家介绍 --> | <!-- 专家介绍 --> | ||||
<div class="expert-box"> | <div class="expert-box"> | ||||
<van-swipe indicator-color="white"> | <van-swipe indicator-color="white"> | ||||
<van-swipe-item v-for="(item, index) in expertImages" :key="index" @click="goExperts(item.id)"> | |||||
<img v-lazy="item.image" /> | |||||
<van-swipe-item v-for="(item, index) in expertList" :key="index" @click="goExperts(item.id)"> | |||||
<img src="@/assets/optimize/images/3_08_2.png" /> | |||||
<div class="summary"> | |||||
<h4>{{ item.name }}</h4> | |||||
<p>{{ item.title }}</p> | |||||
</div> | |||||
<!-- <p>了解详情</p> --> | <!-- <p>了解详情</p> --> | ||||
</van-swipe-item> | </van-swipe-item> | ||||
</van-swipe> | </van-swipe> | ||||
@@ -17,20 +21,10 @@ | |||||
<a href="/">查看更多</a> | <a href="/">查看更多</a> | ||||
</div> | </div> | ||||
<ul> | <ul> | ||||
<li> | |||||
<img src="@/assets/optimize/images/3_20.png" alt="拖延症" /> | |||||
<p>拖延症</p> | |||||
<span>L1入门 12分钟</span> | |||||
</li> | |||||
<li> | |||||
<img src="@/assets/optimize/images/3_22.png" alt="沉迷网络" /> | |||||
<p>沉迷网络</p> | |||||
<span>L1入门 40分钟</span> | |||||
</li> | |||||
<li> | |||||
<img src="@/assets/optimize/images/3_24.png" alt="不自信" /> | |||||
<p>不自信</p> | |||||
<span>L1入门 25分钟</span> | |||||
<li v-for="(item, index) in talkList" :key="index" @click="goTalk(item.id)"> | |||||
<img src="@/assets/optimize/images/3_20.png" :alt="item.name" /> | |||||
<p>{{item.name}}</p> | |||||
<span>{{item.summary}}</span> | |||||
</li> | </li> | ||||
</ul> | </ul> | ||||
</div> | </div> | ||||
@@ -135,7 +129,6 @@ | |||||
import Vue from 'vue'; | import Vue from 'vue'; | ||||
import APIOptimize from '@/api/optimize'; | import APIOptimize from '@/api/optimize'; | ||||
import TabBar from '@/components/TabBar'; | import TabBar from '@/components/TabBar'; | ||||
import expertImage from '@/assets/optimize/images/3_08.png'; | |||||
import { Swipe, SwipeItem, Lazyload } from 'vant'; | import { Swipe, SwipeItem, Lazyload } from 'vant'; | ||||
Vue.use(Lazyload); | Vue.use(Lazyload); | ||||
Vue.use(Lazyload, { | Vue.use(Lazyload, { | ||||
@@ -150,16 +143,8 @@ export default { | |||||
}, | }, | ||||
data() { | data() { | ||||
return { | return { | ||||
expertImages: [ | |||||
{ | |||||
id: 1, | |||||
image: expertImage | |||||
}, | |||||
{ | |||||
id: 2, | |||||
image: expertImage | |||||
} | |||||
] | |||||
expertList: [], | |||||
talkList: [] | |||||
}; | }; | ||||
}, | }, | ||||
created() { | created() { | ||||
@@ -169,9 +154,17 @@ export default { | |||||
methods: { | methods: { | ||||
init() { | init() { | ||||
// 专家列表 | // 专家列表 | ||||
APIOptimize.getExpertList() | |||||
APIOptimize.getExpertList(0) | |||||
.then(res => { | .then(res => { | ||||
console.log(res); | |||||
this.expertList = res.data.data | |||||
}) | |||||
.catch(e => { | |||||
console.log(e); | |||||
}) | |||||
// 专家详情 | |||||
APIOptimize.getTalkList(0) | |||||
.then(res => { | |||||
this.talkList = res.data.data | |||||
}) | }) | ||||
.catch(e => { | .catch(e => { | ||||
console.log(e); | console.log(e); | ||||
@@ -185,6 +178,14 @@ export default { | |||||
} | } | ||||
}); | }); | ||||
}, | }, | ||||
goTalk(id) { | |||||
this.$router.push({ | |||||
name: 'talk', | |||||
query: { | |||||
id: id | |||||
} | |||||
}); | |||||
}, | |||||
goTrainingcamp(id) { | goTrainingcamp(id) { | ||||
this.$router.push({ | this.$router.push({ | ||||
name: 'trainingcamp', | name: 'trainingcamp', | ||||
@@ -51,7 +51,7 @@ | |||||
.van-checkbox { | .van-checkbox { | ||||
pointer-events: none; | pointer-events: none; | ||||
font-size: 16px; | font-size: 16px; | ||||
color: #fff; | |||||
color: #fff !important; | |||||
& + .van-checkbox { | & + .van-checkbox { | ||||
margin-top: 10px; | margin-top: 10px; | ||||
} | } | ||||
@@ -11,19 +11,36 @@ | |||||
height: 100%; | height: 100%; | ||||
object-fit: contain; | object-fit: contain; | ||||
} | } | ||||
.van-swipe-item { | |||||
position: relative; | |||||
.summary { | |||||
position: absolute; | |||||
top: 30%; | |||||
left: 20px; | |||||
h4 { | |||||
font-size: 52px; | |||||
color: #fff; | |||||
font-weight: bold; | |||||
} | |||||
p { | p { | ||||
position: absolute; | |||||
right: 40px; | |||||
bottom: 40px; | |||||
font-size: 24px; | font-size: 24px; | ||||
color: #fff; | color: #fff; | ||||
padding: 10px 18px 10px 15px; | |||||
background-color: #000; | |||||
border-radius: 10px; | |||||
font-weight: normal; | |||||
margin-top: 10px; | |||||
max-width: 300px; | |||||
} | } | ||||
} | } | ||||
.van-swipe-item { | |||||
position: relative; | |||||
// p { | |||||
// position: absolute; | |||||
// right: 40px; | |||||
// bottom: 40px; | |||||
// font-size: 24px; | |||||
// color: #fff; | |||||
// padding: 10px 18px 10px 15px; | |||||
// background-color: #000; | |||||
// border-radius: 10px; | |||||
// } | |||||
} | |||||
} | } | ||||
.title { | .title { | ||||
display: flex; | display: flex; | ||||
@@ -0,0 +1,40 @@ | |||||
.talk { | |||||
position: relative; | |||||
min-height: 100vh; | |||||
.main { | |||||
padding: 40px 32px; | |||||
video { | |||||
width: 100%; | |||||
height: 520px; | |||||
object-fit: contain; | |||||
background-color: #000; | |||||
border-radius: 30px; | |||||
} | |||||
.message { | |||||
span { | |||||
display: inline-block; | |||||
margin: 6px 8px; | |||||
padding: 8px 24px; | |||||
} | |||||
} | |||||
} | |||||
.input { | |||||
width: 100%; | |||||
position: fixed; | |||||
bottom: 10px; | |||||
display: flex; | |||||
align-items: center; | |||||
align-content: space-between; | |||||
justify-content: space-between; | |||||
.van-search { | |||||
width: 100%; | |||||
background-color: transparent; | |||||
> div { | |||||
border: 1px solid grey; | |||||
} | |||||
} | |||||
.van-button { | |||||
margin-right: 12px; | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,99 @@ | |||||
<!-- 养育话题 --> | |||||
<template> | |||||
<div class="talk"> | |||||
<!-- 养育话题 --> | |||||
<van-nav-bar :title="info.name" :border="true" :left-arrow="true" @click-left="onNavBack" left-text="返回"> | |||||
<template #left> | |||||
<van-icon name="arrow-left" size="24" style="padding: 0" /> | |||||
<span>返回</span> | |||||
</template> | |||||
</van-nav-bar> | |||||
<div class="main"> | |||||
<!-- 视频 --> | |||||
<video :src="info.url" controls> | |||||
你的浏览器不支持 <code>video</code> 标签。 | |||||
</video> | |||||
<!-- 留言 --> | |||||
<div class="message"> | |||||
<van-tag | |||||
round | |||||
type="primary" | |||||
size="large" | |||||
color="#179b3b" | |||||
v-for="(item, index) in info.labels" | |||||
:key="index" | |||||
> | |||||
{{ item }} | |||||
</van-tag> | |||||
</div> | |||||
</div> | |||||
<!-- 提交 --> | |||||
<div class="input"> | |||||
<van-search | |||||
v-model="value" | |||||
left-icon="chat-o" | |||||
shape="round" | |||||
placeholder="说点什么" | |||||
/> | |||||
<van-button color="#179b3b" round type="info" size="small" icon="arrow-up" @click="submit" /> | |||||
</div> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
import APIOptimize from '@/api/optimize'; | |||||
import { Search } from 'vant'; | |||||
export default { | |||||
components: { | |||||
// TabBar | |||||
[Search.name]: Search | |||||
}, | |||||
data() { | |||||
return { | |||||
info: {}, | |||||
value: '' | |||||
}; | |||||
}, | |||||
created() { | |||||
this.init(this.$route.query.id); | |||||
}, | |||||
mounted() {}, | |||||
methods: { | |||||
onNavBack() { | |||||
this.$router.push({ | |||||
name: 'Optimize' | |||||
}); | |||||
}, | |||||
init(id) { | |||||
// 养育话题详情 | |||||
APIOptimize.getTalkList(id) | |||||
.then(res => { | |||||
if ( res.data.data.length != 0 ) { | |||||
this.info = res.data.data[0] | |||||
this.info.labels = this.info.labels.split('|') | |||||
} | |||||
}) | |||||
.catch(e => { | |||||
console.log(e); | |||||
}) | |||||
}, | |||||
submit() { | |||||
if ( this.value !== '' ) { | |||||
let labels = this.info.labels.join('|') | |||||
labels += "|" + this.value | |||||
this.value = ""; | |||||
let id = Number(this.$route.query.id); | |||||
APIOptimize.addTalkLabels({ 'id': id, 'labels': labels }).then(res => { | |||||
console.log(res) | |||||
this.init(this.$route.query.id); | |||||
}); | |||||
} else { | |||||
this.$notify({ type: 'warning', message: '内容不能为空' }); | |||||
} | |||||
} | |||||
} | |||||
}; | |||||
</script> | |||||
<style scoped lang="scss"> | |||||
@import './scss/talk.scss'; | |||||
</style> |