MyStory.vue 6.73 KB
<template>
  <div class="myStory">
    <van-list v-model="loading" :finished="Finished" finished-text="没有更多了" @load="onLoad">
      <ul class="list">
        <li v-for="(n, i) in list" :key="i">
          <router-link :to="{ path: '/StoryDetail', query: { id: n.id } }">
            <van-swipe-cell>
              <img class="left" :src="n.coverUrl ? n.coverUrl : require('@/assets/defCoure.jpg')" alt="" />
              <div class="right">
                <h3>
                  {{ n.title }}
                  <p class="like" @click.prevent="zanbtn(n.id, n.likeId)">
                    <img v-if="n.likeId > 0" src="@/assets/service/like_on.png" alt="" />
                    <img v-else src="@/assets/service/like_off.png" alt="" />
                    <span>{{ n.likeCount }}</span>
                  </p>
                </h3>
                <p class="time"><span>创建时间:</span>{{ n.intime.replace(/T/, ' ') }}</p>
              </div>
              <!-- <p class="fail" v-if="n.state == 4"><span>失败说明:</span>{{ n.remark }}</p> -->
              <template #right>
                <van-button square text="删除" type="danger" class="delete-button" @click.prevent="DeleteMyStory(n.id)" />
              </template>
            </van-swipe-cell>
          </router-link>
        </li>
      </ul>
    </van-list>
    <div class="release_btn_box">
      <van-button class="release_btn" round color="#3074FF" type="primary" @click="handleRelease">去发布</van-button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      userInfo: '',
      list: [],
      loading: false,
      Finished: false,
      dataIndex: 0,
    }
  },
  created() {
    var userInfo = localStorage.getItem('userInfo')
    if (userInfo) {
      this.userInfo = JSON.parse(userInfo)
    }
    let StudentDetialInfo = localStorage.getItem('StudentDetialInfo')
    if (StudentDetialInfo) {
      this.StudentDetialInfo = JSON.parse(StudentDetialInfo)
    }
  },
  methods: {
    onLoad() {
      this.dataIndex++
      setTimeout(() => {
        this.GetMyStoryList(this.dataIndex)
      }, 1000)
    },
    GetMyStoryList(page) {
      this.yxAxios
        .get(`${this.yanxueUrl}/api/StudiesWap/GetMyStoryList?userId=${this.StudentDetialInfo.travelerNum}&pageIndex=${page}&pageSize=10`)
        .then((res) => {
          this.$toast.clear()
          console.log('我的游记列表:', res.data)
          if (res.data.data.items.length > 0) {
            this.list = this.list.concat(res.data.data.items)
          }
          this.loading = false
          if (res.data.data.items.length < 10) {
            this.Finished = true
          }
        })
    },
    DeleteMyStory(id) {
      this.$dialog
        .confirm({
          title: '提示',
          message: '确认是否删除?',
        })
        .then(() => {
          this.$toast.loading({
            message: '请求中...',
          })
          this.yxAxios.get(`${this.yanxueUrl}/api/StudiesWap/DeleteMyStory?id=${id}`).then((res) => {
            this.$toast.clear()
            if (res.data.status == 1) {
              this.$toast.success('删除成功')
              this.dataIndex = 1
              this.list = []
              this.GetMyStoryList(1)
            }
          })
        })
        .catch(() => {
          // on cancel
        })
    },
    zanbtn(id, likeId) {
      if (likeId > 0) {
        this.DeleteStoryLike(id)
      } else {
        this.AddStoryLike(id)
      }
    },
    AddStoryLike(id) {
      var that = this
      this.http
        .AddStoryLike({
          type: 1,
          storyId: id,
          userId: this.userInfo ? this.userInfo.centerNo : 0,
        })
        .then( (res) =>{
          if (res.status == 1) {
            let newList = this.list
            for (let i in newList) {
              if (newList[i].id == id) {
                console.log(111)
                newList[i].likeId = 1
                newList[i].likeCount++
              }
            }
            this.list = newList
          }
        })
    },
    DeleteStoryLike(id) {
      var that = this
      this.http
        .DeleteStoryLike({
          type: 1,
          id: id,
          userId: this.userInfo ? this.userInfo.centerNo : 0,
        })
        .then( (res)=> {
          if (res.status == 1) {
            let newList = this.list
            for (let i in newList) {
              if (newList[i].id == id) {
                newList[i].likeId = 0
                newList[i].likeCount--
              }
            }
            this.list = newList
          }
        })
    },
    handleRelease() {
      this.$router.push({ name: 'StoryRelease' })
    },
  },
}
</script>

<style lang="scss" scoped>
.myStory {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  overflow: auto;
  background-color: #f8f8f8;
  padding-bottom: 260px;
  box-sizing: border-box;
  .list {
    padding: 20px;
    box-sizing: border-box;
    li {
      padding: 30px 20px;
      box-sizing: border-box;
      margin-bottom: 20px;
      background-color: white;
      border-radius: 10px;
      a {
        color: #000000;
      }
      img.left {
        width: 27%;
        display: inline-block;
        border-radius: 5px;
        vertical-align: top;
        margin-right: 3%;
      }
      .right {
        width: 70%;
        display: inline-block;
        .like {
          display: inline-block;
          position: absolute;
          right: 0;
          img {
            width: 32px;
            margin-right: 10px;
          }
          span {
            font-size: 26px;
            margin-right: 10px;
            vertical-align: top;
          }
        }
      }
      div {
        h3 {
          font-size: 32px;
          margin: 0;
          word-break: break-all;
          text-overflow: ellipsis;
          display: -webkit-box;
          -webkit-box-orient: vertical;
          -webkit-line-clamp: 1;
          overflow: hidden;
          position: relative;
          padding-right: 80px;
        }
        .time {
          font-size: 1.4rem;
          margin: 0;
          margin-top: 25px;
          word-break: break-all;
          text-overflow: ellipsis;
          display: -webkit-box;
          -webkit-box-orient: vertical;
          -webkit-line-clamp: 1;
          overflow: hidden;
          span {
            color: #ccc;
          }
        }
      }
      .fail {
        border-top: 1px solid #ccc;
        font-size: 1.4rem;
        padding-top: 5px;
        span {
          color: #ccc;
        }
      }
    }
  }
  .release_btn_box {
    width: 100%;
    height: 260px;
    // background: #fff;
    position: fixed;
    bottom: 0;
    left: 0;
    .release_btn {
      width: 662px;
      position: absolute;
      bottom: 100px;
      left: 44px;
      font-size: 32px;
    }
  }
}
</style>