123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- import Taro, { Component } from '@tarojs/taro'
- import { View, Image, Input } 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: `/pagesMore/qa/dtl?id=${id}`,
- }
- }
- onShareTimeline () {
- const { id } = this.$router.params
- return {
- title: `来谈谈你的见解?`,
- path: `/pagesMore/qa/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,
- }
- }
- config = {
- navigationBarTitleText: '问答详情',
- }
- componentWillMount () {
- const { name } = this.$router.params
- Taro.setNavigationBarTitle({
- title: name || '问答详情'
- })
- this.getDataList()
- this.getDtl()
- }
-
- 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 zan1Icon = require('@img/i_g_zan.png')
- const zan2Icon = require('@img/i_g_zan2.png')
- return (
- <View className="l-comment-box">
- <View className="lcb-item" onClick={this.changeSendHandle.bind(this, curObj)}>
- <View className="lb-img">
- <Image className="img" src={curObj.is_anon === '1' ? HideMan : curObj.avatar} />
- </View>
- <View className="lb-info">
- <View className="lb-p1">
- {curObj.is_anon === '1' ? '匿名粉丝' : curObj.nickname || '洪楼Plus'}
- <View onClick={this.linkDtl.bind(this)} className="more">《返回问答列表》</View>
- </View>
- <View className="lb-p2">{curObj.question_cont}</View>
- <View className="lb-time">{curObj.create_at}</View>
- </View>
- {/* <View className="lb-zan" onClick={this.zanHandle.bind(this, curObj.id, curObj.is_zan)}>
- {
- curObj.is_zan
- ?
- <Image className="i" src={zan2Icon}/>
- :
- <Image className="i" src={zan1Icon}/>
- }
- <View className={curObj.is_zan ? 'n cur' : 'n'}>{curObj.zan_count}</View>
- </View> */}
- </View>
- </View>
- )
- }
- linkDtl () {
- Taro.redirectTo({url: '/pagesMore/news/index?nav=2'})
- }
- zanHandle (answer_id, flag) {
- let apiStr = flag ? 'apianswerunzan' : 'apianswerzan'
- Taro.api.news[apiStr]({
- answer_id
- }).then(res => {
- this.getDataList()
- })
- }
- getDataList () {
- let { page_size, page, dataList, isListEmpty } = this.state
- const { id: question_id } = this.$router.params
- Taro.api.news.apianswerlist({
- page,
- page_size,
- question_id,
- }).then(res => {
- const curObj = res.question || {}
- 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.total !== curData.length) {
- isListEnd = false
- } else {
- isListEnd = true
- }
- }
- if (curData.length === 0 && page === 1) {
- isListEmpty = true
- dataList = []
- } else {
- isListEmpty = false
- }
- 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, curObj } = this.state
- const zan1Icon = require('@img/i_g_zan.png')
- const zan2Icon = require('@img/i_g_zan2.png')
- const curItems = dataList.map((item, index) => {
- return (
- <View className="lcb-item" key={index}>
- <View className="lb-img">
- <Image className="img" src={item.avatar} />
- </View>
- <View className="lb-info">
- <View className="lb-p1">{item.nickname}</View>
- {
- item.parent_id === curObj.id
- ?
- <View className="lb-p2">{item.answer_cont}</View>
- :
- <View className="lb-p2">回复:<View className="link">{item.parent_user_name}</View>{item.answer_cont}</View>
- }
- <View className="lb-time">{item.create_at}</View>
- <View className="lb-zan" onClick={this.zanHandle.bind(this, item.answer_id, item.is_zan)}>
- {
- item.is_zan
- ?
- <Image className="i" src={zan2Icon}/>
- :
- <Image className="i" src={zan1Icon}/>
- }
- <View className={item.is_zan ? 'n cur' : 'n'}>{item.zan_count}</View>
- </View>
- </View>
- </View>
- )
- })
- return (
- <ScrollView
- className='l-scroll-view'
- scrollY
- scrollWithAnimation
- scrollTop="0"
- lowerThreshold="30"
- onScrollToLower={this.onScrollToLower.bind(this)}
- >
- <View className="l-comment-box">
- {curItems}
- </View>
- <ListMore isListEnd={isListEnd} isListLoading={isListLoading} isListEmpty={isListEmpty} text="暂无回复"/>
- </ScrollView>
- )
- }
- changeSendHandle (tempObj) {
- this.setState({
- commentVal: '',
- tempObj
- })
- }
- sendHandle () {
- const { commentVal, tempObj } = this.state
- const { id } = this.$router.params
- if (commentVal) {
- Taro.api.news.apiansweradd({
- question_id: Number(id),
- answer_cont: commentVal,
- }).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 (
- <Navigator url={'/pagesQa/add'} className="scoped-fix-q2 t2">
- <Image className="img" src={iconGif} />
- </Navigator>
- )
- }
- renderShare () {
- const iconShare = require('@img/images/icon_g_share6.png')
- return (
- <Button className="g-icon-share btn-to-div" openType="share">
- <Image className="img" src={iconShare} />
- </Button>
- )
- }
- 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()
- }
- }
- render () {
- const { tempObj, commentVal, dataList } = this.state
- const { userInfo, token } = this.state
- const uInfo = userInfo || Taro.getStorageSync('APP_userInfo')
- const { isLoginPopupShow } = this.state
- return (
- <View className="l-box has-footer">
- {
- uInfo
- ? token || isLoginPopupShow
- ? ''
- : <Button className="g-u-btn" onClick={this.openLoginPopup.bind(this)}></Button>
- : <Button className="g-u-btn" onClick={this.getUserProfile.bind(this)}></Button>
- }
- <LoginPopup show={isLoginPopupShow} close={this.closeLoginPopup.bind(this)} />
- {this.renderQaAdd()}
- {this.renderShare()}
- {this.renderTop()}
- <View className="scoped-main">
- <View className="sm-title">
- 全部回答
- <View className="t">({dataList.length}条)</View>
- </View>
- {this.renderList()}
- </View>
- <View className="l-floor-footer">
- <View className="scoped-footer">
- <View className="sf-input">
- {/* focus */}
- <Input className="input" placeholder={`我来回答`} value={commentVal} onInput={this.changeInput.bind(this)} />
- <View className="btn" onClick={this.sendHandle.bind(this)}>发送</View>
- </View>
- </View>
- </View>
- </View>
- )
- }
- }
- export default Index
|