import dayjs from 'dayjs' const licia = require('miniprogram-licia') const app = getApp() interface IMessageItem { msgId: string msgContentType: '1' // 1: 文本 msgContent: any msgVisitTime: string msgFromType: '1' | '2' // 1: 患者 2: 医生 msgCreateTime: string // 消息创建时间 msgCreateTimeName?: string // 消息创建时间 showTime?: boolean questionId?: string // 问题ID Reference?: string // 参考资料 LikeTimes?: number // 点赞次数 IsLike?: boolean // 是否点赞 HasAnswer?: boolean // 是否有答案 } Page({ data: { expend: false, scrollTop: 0, scrollIntoView: '', doctorDetail: {} as any, questionActive: 0, questionList: [] as any, questionActiveList: [] as any[], headerQuestionList: [] as any, isLoad: false, isFinish: false, messageList: [] as IMessageItem[], nextMsgId: '', unReadCount: 0, firstNotReadMsgId: 0, isVisitAdl: 2, adlMsgId: 0, LikeTimes: 0, userInfo: {}, }, onLoad(options) { app.waitLogin().then(() => { app.mpBehavior({ PageName: 'PG_FAQ' }) app.getUserInfo().then((userInfo) => { this.setData({ userInfo, }) }) this.getQuestionList() this.getHeaderQuestionList() if (options.id) { this.getDetail(options.id) } }) }, handleView(index = -1) { this.setData({ scrollIntoView: index > -1 ? `view${index}` : `place`, }) }, getHeaderQuestionList() { wx.ajax({ method: 'GET', url: '?r=wtx/common-question/concerned-list', data: {}, }).then((res) => { this.setData({ headerQuestionList: res.list, }) }) }, getDetail(Id: string) { wx.ajax({ method: 'GET', url: '?r=wtx/common-question/detail', data: { Id }, }).then((res) => { this.handleSendQuestion(res) }) }, getQuestionList() { wx.ajax({ method: 'GET', url: '?r=wtx/common-question/type-list', data: {}, }).then((res) => { this.setData({ questionList: res.list, }) this.getQuestionCommonList(this.data.questionActive) }) }, getQuestionCommonList(questionActive: number) { const QuestionTypeId = this.data.questionList[questionActive].Id wx.ajax({ method: 'GET', url: '?r=wtx/common-question/list', data: { QuestionTypeId, count: 0, }, }).then((res) => { if (this.data.questionActive === questionActive) { this.setData({ questionActiveList: res.list, }) } }) }, handleHeaderQuestion(e: any) { const { index } = e.currentTarget.dataset const { headerQuestionList } = this.data const question = headerQuestionList[index] this.handleQuestionClick(question.Id) this.handleSendQuestion(question) }, handleQuestion(e: any) { const { index } = e.currentTarget.dataset const { questionActiveList } = this.data const question = questionActiveList[index] this.handleQuestionClick(question.Id) this.handleSendQuestion(question) }, handleSendQuestion(questionItem: any) { const { messageList } = this.data this.setData({ messageList: [ ...messageList, { msgId: new Date().getTime().toString(), msgContentType: '1', msgContent: questionItem.Question, msgVisitTime: '', msgFromType: '1', msgCreateTime: dayjs().format('YYYY-MM-DD HH:mm:ss'), }, { msgId: new Date().getTime().toString(), msgContentType: '1', msgContent: questionItem.Answer, questionId: questionItem.Id, Reference: questionItem.Reference, LikeTimes: questionItem.LikeTimes, IsLike: questionItem.IsLike, HasAnswer: questionItem.HasAnswer, msgVisitTime: '', msgFromType: '2', msgCreateTime: dayjs().format('YYYY-MM-DD HH:mm:ss'), }, ], }) this.handleView() }, handleQuestionClick(Id) { wx.ajax({ method: 'POST', url: '?r=wtx/common-question/click', data: { Id }, }) }, handleLike(e) { const { index } = e.currentTarget.dataset const { messageList, LikeTimes } = this.data const item = messageList[index] const LikeTimesKey = `messageList[${index}].LikeTimes` const IsLikeKey = `messageList[${index}].IsLike` this.setData({ [LikeTimesKey]: Number(item.LikeTimes) + 1, [IsLikeKey]: true, LikeTimes: LikeTimes + 1, }) this.likePost(item.questionId) }, likePost: licia.debounce(function (this: any, Id) { const { LikeTimes } = this.data this.setData({ LikeTimes: 0, }) wx.ajax({ method: 'POST', url: '?r=wtx/common-question/like', data: { Id, LikeTimes, }, }) }, 1000), formatTime(date: string) { let msgCreateTimeName = '' if (dayjs().format('YYYY-MM-DD') === dayjs(date).format('YYYY-MM-DD')) { msgCreateTimeName = dayjs(date).format('HH:mm') } else if (dayjs().format('YYYY-MM-DD') === dayjs(date).add(1, 'day').format('YYYY-MM-DD')) { msgCreateTimeName = `昨天 ${dayjs(date).format('HH:mm')}` } else if (dayjs().diff(date, 'day') < 7) { msgCreateTimeName = dayjs(date).format(`dddd HH:mm`) } else { msgCreateTimeName = dayjs(date).format('YYYY-MM-DD HH:mm') } return msgCreateTimeName }, filterCreateTime() { const gapTime = 5 * 60 * 1000 const { messageList } = this.data let preTime = 0 messageList.forEach((item, index) => { if (index === 0) { item.showTime = true preTime = dayjs(item.msgCreateTime).valueOf() item.msgCreateTimeName = this.formatTime(item.msgCreateTime) } else { const curTime = dayjs(item.msgCreateTime).valueOf() if (curTime - preTime > gapTime) { item.showTime = true item.msgCreateTimeName = this.formatTime(item.msgCreateTime) preTime = dayjs(item.msgCreateTime).valueOf() } } }) this.setData({ messageList, }) }, handleQuestionTab(e) { const { index } = e.currentTarget.dataset this.setData({ questionActive: index, }) this.getQuestionCommonList(index) }, handleFooter() { this.setData({ expend: !this.data.expend, }) if (this.data.expend) { // this.getQuestionList() setTimeout(() => { this.handleView() }, 300) } }, handleBack() { wx.navigateBack() }, })