绿满眶商城微信小程序-uniapp
peng
2025-07-02 be80b22a4a0fcd33e1b17ebdb86eba91cc7de4d2
pages/video/video-edit.vue
@@ -1,5 +1,5 @@
<template>
  <view class="publish-container">
  <view class="publish-container" :style="{height: windowHeight - marginBottom - 50 + 'px'}">
   <u-popup v-model="fileTypeShow" mode="bottom"  round="20" height="35%">
      <view style="width: 100%;height:100%;display: flex;flex-direction: column;justify-content: center;align-items: center;">
         <view>请选择要发布的类型</view>
@@ -75,7 +75,7 @@
              @input="searchTags"
            ></u-input>
            <!-- 已选话题展示 -->
            <view class="tags-display" v-if="formData.tags.length > 0">
            <view class="tags-display" v-show="formData.tags.length > 0">
              <my-tag
                v-for="(tag, index) in formData.tags"
                :key="index"
@@ -85,12 +85,12 @@
                @close="removeTag(index)"
              />
            </view>
            <text class="tags-count" v-if="formData.tags.length > 0">
            <text class="tags-count" v-show="formData.tags.length > 0">
              已选 {{ formData.tags.length }}/5
            </text>
          </view>
        <!-- 话题推荐 -->
        <view class="hot-topics" v-if="showTopicRecommendations">
        <view class="hot-topics" v-show="showTopicRecommendations">
          <text class="section-title">{{ tagInput ? '推荐话题' : '热门话题' }}</text>
          <view class="topic-list">
            <my-tag
@@ -125,14 +125,14 @@
              ></u-icon>
            </u-input>
            <view class="goods-preview" @click="chooseGoods" v-for="goods in selectedGoodsList" :key="goods.id">
              <image :src="goods.thumbnail" class="goods-image"></image>
              <image :src="endpoint + '/' + goods.thumbnail" class="goods-image"></image>
              <view class="goods-info">
                <text class="goods-name">{{ goods.goodsName }}</text>
            <view style="display: flex;">
               <view class="goods-price" style="flex: 1;">¥{{ goods.price }}</view>
               <view @click.stop="() => {}" style="flex: 1;display: flex;justify-content: center;align-items: center;">
                  <view style="width: 90rpx">数量:</view>
                  <uni-number-box v-model="goods.goodsNum" :min="0"/>
                  <uni-number-box v-model="goods.goodsNum" :min="1"/>
               </view>
            </view>
              </view>
@@ -183,7 +183,7 @@
            :key="goods.id"
            @click="selectGoods(goods, index)"
          >
            <image :src="goods.thumbnail" class="goods-image"></image>
            <image :src="endpoint + '/' + goods.thumbnail" class="goods-image"></image>
            <view class="goods-info">
              <text class="goods-name">{{ goods.goodsName }}</text>
              <text class="goods-price">¥{{ goods.price }}</text>
@@ -240,7 +240,7 @@
     goodsQuery: {
      keyword: '',
      searchFromSelfStore: false, // 是否是查询自家店铺商品
      pageNumber: 1,
      pageNumber: 0,
      pageSize: 5
     },
      formData: {
@@ -250,7 +250,6 @@
      videoFileKey: '',
      videoDuration: 0,
      videoFit: 'cover',
        goodsId: '',
        videoContentType: 'video',
        videoImgs: [],
        tags: [],
@@ -267,7 +266,9 @@
        ]
      },
     screenWidth: 375,
     gap: 10 // 图片间距
     gap: 10, // 图片间距
     windowHeight: 0,
     marginBottom: 0
    };
  },
  computed: {
@@ -291,7 +292,9 @@
    // 获取屏幕宽度
   const systemInfo = uni.getSystemInfoSync()
   this.screenWidth = systemInfo.windowWidth
   this.goodsQuery.pageNumber = 1
   this.windowHeight = systemInfo.windowHeight
   this.marginBottom = uni.getSystemInfoSync().safeAreaInsets.bottom
   this.goodsQuery.pageNumber = 0
   this.goodsQuery.pageSize = 10
   this.getVideoGoodsByEs()
   
@@ -306,7 +309,7 @@
             getVideoDetail(id).then(res => {
                this.videoInfo.cover = res.data.data.coverUrl
                this.videoInfo.url = res.data.data.videoUrl
              this.formData.videoImgs = res.data.data.imgs
              this.formData.videoImgs = res.data.data.videoImgs
              this.formData.videoContentType = res.data.data.videoContentType
                this.formData.cover = res.data.data.coverFileKey
                this.formData.id = res.data.data.id
@@ -316,6 +319,9 @@
                this.formData.videoDuration = res.data.data.videoDuration
                this.selectedGoodsList = res.data.data.goodsList
                this.formData.tags = res.data.data.tags
              if (this.formData.videoContentType === 'img') {
                 this.videoPreviewImgs = res.data.data.imgs
              }
              this.showUploadProgress = false
                console.log("视频详情", this.formData);
             })
@@ -331,7 +337,7 @@
     },
     // 处理商品搜索值
     handlerGoodsSearch() {
        this.goodsQuery.pageNumber = 1
        this.goodsQuery.pageNumber = 0
        this.goodsQuery.pageSize = 10
        this.getVideoGoodsByEs()
     },
@@ -339,7 +345,7 @@
     async getVideoGoodsByEs() {
      getVideoGoodsList(this.goodsQuery).then(res => {
         
         if(this.goodsQuery.pageNumber === 1) {
         if(this.goodsQuery.pageNumber === 0) {
            this.goodsList = res.data.data
         } else {
            this.goodsList = [
@@ -565,10 +571,9 @@
    // 选择商品
    chooseGoods() {
     if(this.selectedGoodsList.length > 0) {
             const selectedGoodsIds = new Set(this.selectedGoodsList.map(i => i.goodsId));
           console.log(selectedGoodsIds, "mimade");
             const selectedGoodsSkuIds = new Set(this.selectedGoodsList.map(i => i.id));
             this.goodsList?.forEach(goods => {
                 this.$set(goods, 'selected', selectedGoodsIds.has(goods.goodsId));
                 this.$set(goods, 'selected', selectedGoodsSkuIds.has(goods.id));
               });
     }
      this.showGoodsPicker = true;
@@ -660,7 +665,7 @@
        if (valid && this.canPublish) {
          this.loading = true;
          this.formData.fileInfo = this.videoInfo;
        this.formData["goodsList"] = this.selectedGoodsList.map(item => {return {goodsId: item.goodsId, goodsNum: item.goodsNum}});
        this.formData["goodsList"] = this.selectedGoodsList.map(item => {return {goodsId: item.goodsId, goodsSkuId: item.id, goodsNum: item.goodsNum}});
          updateVideo(this.formData).then(res => {
           uni.showToast({
             title: '视频已提交审核~',
@@ -673,10 +678,10 @@
           this.tagInput = '';
           this.recommendedTags = [];
           // TODO 先跳首页,后面跳我的视频页面
           // 跳我的视频页面
           setTimeout(() => {
             uni.switchTab({
                url: '/pages/tabbar/index/home'
             uni.navigateBack({
                delta: 1
             });
           }, 1500);
        })
@@ -705,7 +710,6 @@
        cover: '',
        videoFit: 'cover',
        videoDuration: 0,
        goodsId: '',
        videoContentType: 'video',
        videoImgs: [],
        tags: [],
@@ -721,7 +725,7 @@
<style scoped>
.publish-container {
  padding: 10px;
  padding-bottom: 120rpx;
  overflow-y: scroll;
}
.upload-section {
@@ -837,6 +841,7 @@
  flex-wrap: wrap;
  margin-top: 15rpx;
  line-height: 22px;
  height: 80rpx;
}
.hot-topics {
@@ -844,8 +849,8 @@
   flex-direction: column;
   margin-top: 15rpx;
   margin-bottom: 15rpx;
   height: 46rpx;
}
.section-title {
  font-size: 12px;
  color: #999;
@@ -868,6 +873,7 @@
  left: 20rpx;
  right: 20rpx; */
  margin-top: 40rpx;
  margin-bottom: 150rpx;
}
.goods-picker {