import Taro, { Component } from '@tarojs/taro'
import { View, Image, Input, Swiper, SwiperItem, ScrollView } from '@tarojs/components'
import ListMore from '@/c/pageDataList/listMore'
import LoginPopup from '@/c/login/Popup'
import './dtl.scss'
import { strTrim } from '@utils'
class Index extends Component {
onShareAppMessage() {
const { id } = this.$router.params
return {
title: `来谈谈你的见解?`,
path: `/pagesQa/dtl?id=${id}`,
}
}
onShareTimeline () {
const { id } = this.$router.params
const { curObj } = this.state
return {
title: `${curObj.question_cont}`,
path: `/pagesQa/dtl?id=${id}`,
}
}
constructor (props) {
super(props)
this.state = {
page_size: 10,
page: 1,
isListEnd: false,
isListLoading: false,
isListEmpty: false,
dataList: [],
curObj: {},
commentVal: '',
tempObj: {},
userInfo: '',
token: '',
isLoginPopupShow: false,
isAnswerHide: false,
adBannerList: {}
}
}
config = {
navigationBarTitleText: '问答详情',
}
componentWillMount () {
Taro.$AHU(this)
const { name } = this.$router.params
Taro.setNavigationBarTitle({
title: name || '问答详情'
})
this.getDataList()
this.getDtl()
this.getBannerAd()
}
getDtl () {
const userInfo = Taro.getStorageSync('APP_userInfo') || ''
if (userInfo) {
this.setState({
userInfo
})
}
this.setState({
token: Taro.getStorageSync('APP_token') || ''
})
}
componentDidShow () { }
componentDidHide () { }
renderTop () {
const { curObj } = this.state
const HideMan = require('@img/icon_hide_man.png')
const btnBack = require('./img/bg_bc_list.png')
let imgArr = []
if (curObj.question_img) imgArr = curObj.question_img.split(',')
const imgItems = imgArr.map((src, srcIndex) => {
return (
)
})
const voteOps = curObj.vote && curObj.vote.vote_cont ? curObj.vote.vote_cont : []
return (
{curObj.nickname || '洪楼Plus'}
{curObj.create_at}
{curObj.question_cont}
{
imgArr.length > 0
&&
{imgItems}
}
{voteOps.length === 2 && this.renderVs(curObj)}
{voteOps.length > 2 && this.renderVote(curObj)}
)
}
previewImageHandle (current, urls) {
Taro.previewImage({
current,
urls
})
}
linkDtl () {
Taro.redirectTo({url: '/pagesQa/index'})
}
zanHandle (answer_id, flag) {
let apiStr = flag ? 'apianswerunzan' : 'apianswerzan'
Taro.api.news[apiStr]({
answer_id
}).then(res => {
this.getDataList()
})
}
renderVs (item) {
const bg = require('./img/index/vsbg.png')
const edIcon = require('./img/index/rightblue.png')
const edIcon2 = require('./img/index/rightred.png')
const vsbg2 = require('./img/index/vsbg2.png')
const vsbg3 = require('./img/index/vsbg3.png')
const voteOps = item.vote.vote_cont || []
const voteUser = item.vote.vote_user || {}
const totalNum = item.vote.vote_count_sum || 0
const curItems = voteOps.map((op, i) => {
return (
{op.vote_cont}
)
})
const edBgItems = voteOps.map((op, i) => {
const per = parseInt(op.vote_count / totalNum * 100)
return (
{op.vote_count}
{ op.id === voteUser.vote_id && i === 0 && }
{ op.id === voteUser.vote_id && i === 1 && }
)
})
const edItems = voteOps.map((op, i) => {
return (
{op.vote_cont}
{ op.id === voteUser.vote_id && i === 0 && }
{ op.id === voteUser.vote_id && i === 1 && }
)
})
return (
{
voteUser.is_vote
?
{edBgItems}
{edItems}
:
{curItems}
}
)
}
renderVote (item) {
const edIcon = require('./img/index/rightblue.png')
const voteOps = item.vote.vote_cont || []
const voteUser = item.vote.vote_user || {}
const totalNum = item.vote.vote_count_sum || 0
const curItems = voteOps.map((op, i) => {
return (
{op.vote_cont}
)
})
const edItems = voteOps.map((op, i) => {
const per = parseInt(op.vote_count / totalNum * 100)
return (
{op.vote_cont}
{
op.id === voteUser.vote_id
&&
}
{op.vote_count}
)
})
return (
{
voteUser.is_vote
?
{edItems}
:
{curItems}
}
)
}
voteHandle (op) {
Taro.api.news.apiuservoteadd({
question_id: op.question_id,
vote_id: op.id
}).then(() => {
Taro.$msg('投票成功')
this.getDataList()
})
}
getDataList () {
const HideMan = require('@img/icon_hide_man.png')
let { page_size, page, dataList, isListEmpty } = this.state
const { id: question_id } = this.$router.params
Taro.api.news.apianswerlist2({
page,
page_size,
question_id,
}).then(res => {
let curObj = res.question || {}
if (curObj.is_anon === '1') curObj.nickname = '洪楼粉丝'
let curData = res.answer_list.list || []
let isListEnd = false
if (curData.length > 0) {
if (page === 1) {
dataList = curData
} else {
dataList = dataList.concat(curData)
}
if (curData.length === page_size && res.answer_list.total !== curData.length) {
isListEnd = false
} else {
isListEnd = true
}
}
if (curData.length === 0 && page === 1) {
isListEmpty = true
dataList = []
isListEnd = true
} else {
isListEmpty = false
}
dataList.map(item => {
if (item.is_anon === '1') {
item.nickname = '洪楼粉丝'
item.avatar = HideMan
}
if (item.child && item.child.length > 0) {
let child = item.child
child.map(sub => {
if (sub.is_anon === '1') {
sub.nickname = '洪楼粉丝'
sub.avatar = HideMan
}
})
}
})
this.setState({
curObj,
tempObj: curObj,
dataList,
isListEnd,
isListEmpty,
isListLoading: false
})
})
}
onScrollToLower (e) {
let { isListEnd, isListLoading, page } = this.state
if (!isListEnd && !isListLoading) {
page++
this.setState({
page,
isListLoading: true
}, () => {
this.getDataList()
})
}
}
renderList () {
const { dataList, isListEnd, isListLoading, isListEmpty } = this.state
const zan1Icon = require('@img/i_g_zan.png')
const zan2Icon = require('@img/i_g_zan2.png')
let newArr = []
const userCurInfo = Taro.getStorageSync('APP_userInfo')
dataList.forEach(item => {
if (item.hide_status === "2") {
if (userCurInfo.user_id === item.user_id) {
newArr.push(item)
}
} else {
newArr.push(item)
}
})
const curItems = newArr.map((item, index) => {
const lvIcon = Taro.$getLvIcon(item.integral)
const oldList = JSON.parse(JSON.stringify(item.child))
let subList = item.isMoreAllShow ? [...oldList] : oldList.splice(0, 2)
return (
{item.nickname}
{item.create_at}
{item.answer_cont}
{
item.is_zan
?
:
}
{item.zan_count}
{
subList.map((sub, subIndex) => {
const lvSubIcon = Taro.$getLvIcon(sub.integral)
return (
{sub.nickname}
{sub.create_at}
{
sub.parent_id === item.answer_id
?
{sub.answer_cont}
:
回复:{sub.parent_user_name}{sub.answer_cont}
}
)
})
}
{
item.child.length > 2
?
item.isMoreAllShow
?
收起
:
-展开回复({item.child.length - 2}条)
: ''
}
)
})
return (
{curItems}
)
}
dtlLink (item) {
Taro.navigateTo({
url: `/pagesQa/dtlSub?id=${item.answer_id}`
})
}
commentMoreHandle (index) {
const { dataList } = this.state
let mList = dataList || []
mList.map((item, i) => {
if (index === i) item.isMoreAllShow = !item.isMoreAllShow
})
this.setState({
dataList: [...mList]
})
}
sendChangeHandle (tempObj) {
this.setState({
commentVal: '',
tempObj
})
}
sendHandle () {
const { commentVal, tempObj, isAnswerHide } = this.state
const { id } = this.$router.params
if (commentVal) {
let params = {
question_id: Number(id),
answer_cont: commentVal,
}
if (tempObj.user_id) {
params = {
question_id: Number(id),
answer_cont: commentVal,
parent_id: tempObj.id || tempObj.answer_id || '',
parent_user_id: tempObj.user_id || '',
parent_user_name: tempObj.nickname || '',
}
}
if (isAnswerHide) {
params.is_anon = '1'
}
Taro.api.news.apiansweradd(params).then(res => {
Taro.$msg('回答成功~')
this.setState({
commentVal: ''
})
this.getDataList()
})
} else {
Taro.$msg('请输入你的回答')
}
}
changeInput (e) {
const val = strTrim(e.target.value)
this.setState({
commentVal: val
})
}
renderQaAdd () {
const iconGif = require('@img/icon_g_qa.gif')
return (
)
}
renderShare () {
const iconShare = require('@img/images/icon_g_share6.png')
return (
)
}
getUserProfile (e) {
wx.getUserProfile({
desc: '用于完善头像和昵称资料',
success: (res) => {
const dtlObj = res || {}
this.setState({
userInfo: dtlObj.userInfo
})
Taro.setStorageSync('APP_userInfo', dtlObj.userInfo)
}
})
}
openLoginPopup (obj) {
this.setState({
isLoginPopupShow: true
})
}
closeLoginPopup (str) {
this.setState({
isLoginPopupShow: false
})
if (str && str === 'success') {
this.getDtl()
}
}
answerHideChange () {
let { isAnswerHide } = this.state
isAnswerHide = !isAnswerHide
this.setState({
isAnswerHide
})
}
renderBanner () {
const { adBannerList } = this.state
const adItems = adBannerList.map((item, index) => {
return (
)
})
return (
{adItems}
)
}
bannerHandle (item) {
if (item.ad_link_type) {
if (item.ad_link_type === 'estate') {
Taro.navigateTo({
url: `/pagesHouse/indexDtl?id=${item.link_type_value}`
})
}
if (item.ad_link_type === 'news') {
Taro.navigateTo({
url: `/pagesMore/news/indexDtl?id=${item.link_type_value}`
})
}
if (item.ad_link_type === 'page') {
Taro.navigateTo({
url: `${item.link_type_value}`
})
}
}
}
getBannerAd () {
const testImg1 = 'http://icon.honglounews.com/ex_banner.jpg'
Taro.api.house.apiadvertslist({ad_position: 'qa_dtl_banner'}).then(res => {
const adList = res.qa_dtl_banner || []
// if (adList.length === 0) {
// adList.push({images: testImg1})
// }
this.setState({
adBannerList: adList
})
})
}
loginJudge () {
const { userInfo, token } = this.state
const uInfo = userInfo || Taro.getStorageSync('APP_userInfo')
const { isLoginPopupShow } = this.state
return (
{
uInfo && uInfo.avatarUrl
? token || isLoginPopupShow
? ''
:
:
}
)
}
renderScrollBody () {
const { tempObj, commentVal, curObj, isAnswerHide, adBannerList } = this.state
const hideN = require('@img/icon_hide2.png')
const hideY = require('@img/icon_hide3.png')
return (
{this.loginJudge()}
{this.renderTop()}
{adBannerList.length > 0 && this.renderBanner()}
全部回答
({curObj.answer_count}条)
{this.renderList()}
{/* focus */}
{/* */}
{
isAnswerHide
?
:
}
发送
)
}
render () {
return (
{this.renderQaAdd()}
{this.renderShare()}
{this.renderScrollBody()}
)
}
}
export default Index