peng
2025-11-06 c4938f6f4e839890b032c75c7a57333a6a9157a9
wx/pages/judge/review.js
@@ -149,9 +149,27 @@
          videos: detail.submissionFiles ? detail.submissionFiles
            .filter(file => file.mediaType === 2)
            .map(file => file.fullUrl || file.url) : [],
          mediaList: (detail.submissionFiles || []).map(file => {
            const mt = file.mediaType
            let typeStr = ''
            if (mt === 1 || mt === 'image' || (typeof mt === 'string' && mt.startsWith('image'))) typeStr = 'image'
            else if (mt === 2 || mt === 'video' || (typeof mt === 'string' && mt.startsWith('video'))) typeStr = 'video'
            else if ((file.fileExt || '').toLowerCase().includes('pdf')) typeStr = 'pdf'
            else if ((file.fileExt || '').toLowerCase().includes('doc')) typeStr = 'word'
            else typeStr = 'file'
            return {
              id: file.id,
              name: file.name,
              size: file.fileSize,
              mediaType: typeStr,
              thumbUrl: file.fullThumbUrl || file.thumbUrl || file.fullUrl || file.url,
              url: file.fullUrl || file.url
            }
          }),
          participant: {
            id: detail.playerInfo.id,
            name: detail.playerInfo.name,
            phone: detail.playerInfo.phone || '',
            gender: this.getGenderText(detail.playerInfo.gender),
            birthday: detail.playerInfo.birthday || '',
            region: detail.regionInfo ? detail.regionInfo.name : '',
@@ -293,20 +311,39 @@
    })
  },
  // 媒体点击
  // 媒体点击(通过 index 定位 mediaList 项)
  onMediaTap(e) {
    const { url, type } = e.currentTarget.dataset
    if (type === 'image') {
    const { index } = e.currentTarget.dataset
    const item = this.data.submission?.mediaList?.[index]
    if (!item) return
    if (item.mediaType === 'image') {
      const imgs = (this.data.submission.mediaList || [])
        .filter(it => it.mediaType === 'image')
        .map(it => it.url)
      wx.previewImage({
        current: url,
        urls: this.data.submission.images || []
        current: item.url,
        urls: imgs.length ? imgs : [item.url]
      })
    } else if (type === 'video') {
    } else if (item.mediaType === 'video') {
      this.setData({
        showMediaPreview: true,
        currentMedia: url,
        currentMedia: item.url,
        mediaType: 'video'
      })
    } else {
      wx.downloadFile({
        url: item.url,
        success: (res) => {
          if (res.statusCode === 200) {
            wx.openDocument({
              filePath: res.tempFilePath,
              showMenu: true
            })
          } else {
            wx.showToast({ title: '预览失败', icon: 'none' })
          }
        },
        fail: () => wx.showToast({ title: '下载失败', icon: 'none' })
      })
    }
  },
@@ -317,6 +354,44 @@
      showMediaPreview: false,
      currentMedia: null
    })
  },
  // 点击预览按钮:图片/视频用 wx.previewMedia,文档用 openDocument
  onPreviewTap(e) {
    const { index } = e.currentTarget.dataset
    const list = this.data.submission?.mediaList || []
    const item = list[index]
    if (!item) return
    if (item.mediaType === 'image' || item.mediaType === 'video') {
      const mediaList = list
        .filter(m => m.mediaType === 'image' || m.mediaType === 'video')
        .map(m => ({
          url: m.url,
          type: m.mediaType === 'video' ? 'video' : 'image',
          poster: m.thumbUrl || m.url
        }))
      const current = Math.max(0, mediaList.findIndex(m => m.url === item.url))
      wx.previewMedia({
        sources: mediaList,
        current
      })
    } else {
      wx.downloadFile({
        url: item.url,
        success: (res) => {
          if (res.statusCode === 200) {
            wx.openDocument({
              filePath: res.tempFilePath,
              showMenu: true
            })
          } else {
            wx.showToast({ title: '预览失败', icon: 'none' })
          }
        },
        fail: () => wx.showToast({ title: '下载失败', icon: 'none' })
      })
    }
  },
  // 下载文件
@@ -560,30 +635,15 @@
  },
  */
  // 联系参赛者
  // 联系参赛者:直接拨打电话
  onContactParticipant() {
    const { submission } = this.data
    if (submission.participant) {
      wx.showActionSheet({
        itemList: ['发送消息', '查看详情'],
        success: (res) => {
          switch (res.tapIndex) {
            case 0:
              // 发送消息功能
              wx.navigateTo({
                url: `/pages/chat/chat?userId=${submission.participant.id}`
              })
              break
            case 1:
              // 查看用户详情
              wx.navigateTo({
                url: `/pages/user/profile?userId=${submission.participant.id}`
              })
              break
          }
        }
      })
    const phone =
      this.data.submission?.participant?.phone ||
      this.data.submission?.participant?.userInfo?.phone
    if (phone) {
      wx.makePhoneCall({ phoneNumber: String(phone) })
    } else {
      wx.showToast({ title: '无联系电话', icon: 'none' })
    }
  },
@@ -619,7 +679,7 @@
  // 分享页面
  onShareAppMessage() {
    return {
      title: '蓉易创 - 评审作品',
      title: '蓉e创 - 评审作品',
      path: '/pages/index/index'
    }
  }