peng
2025-08-11 e562837cbcd40f72a1ab7f7ca6bd6db3dbdd53ca
首页视频修改
2个文件已修改
163 ■■■■ 已修改文件
manager/src/api/video.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager/src/views/video/VideoList.vue 155 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager/src/api/video.js
@@ -111,3 +111,11 @@
    data: params
  })
}
// 发布视频
export const updatePublish = (params) => {
  return service({
    url: "/lmk/video",
    method: "PUT",
    data: params
  })
}
manager/src/views/video/VideoList.vue
@@ -134,9 +134,9 @@
                        <Icon type="ios-trash-outline" @click.native="handleRemove(item)"></Icon>
                      </div>
                    </template>
                    <!--                    <template v-else>-->
                    <!--                      <Progress v-if="item.showProgress" :percent="item.percentage" hide-info></Progress>-->
                    <!--                    </template>-->
                    <!--                      <template v-else>-->
                    <!--                        <Progress v-if="item.showProgress" :percent="item.percentage" hide-info></Progress>-->
                    <!--                      </template>-->
                  </div>
                  <Upload
                    ref="upload"
@@ -212,14 +212,16 @@
                          align-items: center;justify-content: flex-start;border: 1px solid gray;margin-top: 10px;
                          padding: 10px;border-radius: 20px">
                    <div>
                      <img :src="endpoint+'/'+item.thumbnail" style="width: 80px;height: 80px">
                      <img :src="item.thumbnail.includes('http') ? item.thumbnail : endpoint + '/' + item.thumbnail"
                           style="width: 80px;height: 80px">
                    </div>
                    <div style="display: flex;flex-direction: column;margin-left: 20px">
                      <div style="font-size: 1.5em;font-weight: bold">{{ item.goodsName }}</div>
                      <div style="color: #ff6f6f;display: flex;align-content: center;justify-content: flex-start">
                        <div> ¥{{ item.price }}</div>
                        <div style="margin-left: 10px">
                          <InputNumber v-model="item.goodsNum" :min="0" :max="99" controls-outside @on-change="changeGoodsNum(item.goodsSkuId,index,item.goodsNum)"
                          <InputNumber v-model="item.goodsNum" :min="0" :max="99" controls-outside
                                       @on-change="changeGoodsNum(item.goodsSkuId,index,item.goodsNum)"
                                       style="vertical-align: center;width: 100px"></InputNumber>
                        </div>
                      </div>
@@ -402,9 +404,9 @@
          <Button type="primary" size="small" style="margin-right: 5px" v-if="row.status === '99'"
                  @click="openAuditing(row)">审核
          </Button>
<!--          <Button type="primary" size="small" style="margin-right: 5px"-->
<!--                  @click="editVideo(row)">编辑-->
<!--          </Button>-->
          <Button type="primary" size="small" style="margin-right: 5px"
                  @click="editVideo(row)">编辑
          </Button>
          <Button type="error" size="small" style="margin-right: 5px" v-if="row.status === '1'"
                  @click="openVideoDown(row)">下架
          </Button>
@@ -431,7 +433,7 @@
        ></vue-qr>
        <div slot="footer">
          <Button type="text" @click="closeGeneralQrCode">关闭</Button>
<!--          <Button type="primary" @click="generalQrCode">确认</Button>-->
          <!--          <Button type="primary" @click="generalQrCode">确认</Button>-->
        </div>
      </Modal>
      <Row type="flex" justify="end" class="mt_10">
@@ -453,7 +455,17 @@
</template>
<script>
import {getVideos, recommendSet, getVideoById, auditingVideo, up, down, recreateIndex,publish} from "@/api/video";
import {
  getVideos,
  recommendSet,
  getVideoById,
  auditingVideo,
  up,
  down,
  recreateIndex,
  publish,
  updatePublish
} from "@/api/video";
import {getVideoTagList, recommend, videoGoodsEsPage} from "@/api/videoTag";
import {getFilePreview, getSts} from "@/api/file";
import Editor from '@/components/editor/index.vue'
@@ -465,7 +477,7 @@
export default {
  name: "VideoList",
  components: {vuedraggable, Editor, GoodsExpandRow,"vue-qr": vueQr},
  components: {vuedraggable, Editor, GoodsExpandRow, "vue-qr": vueQr},
  watch: {
    'uploadVideoForm.videoContentType'(newValue, oldValue) {
      if (newValue === 'video') {
@@ -481,6 +493,7 @@
      }
    },
    chooseTag(newValue, oldValue) {
      console.log('触发新值变化',newValue);
      this.uploadVideoForm.tags = newValue.map(item => {
        const findTag = this.videoTagList.find(tagItem => {
          return tagItem.tagName === item
@@ -503,9 +516,9 @@
  data() {
    return {
      // https://myk.9village.cn/scanpage/recommend?shareType=videoRecommend&videoId=1948284811844190209
      baseQRCodeUrl: this.QRcodeBaseUrl+ '/scanpage/recommend',
      QRCodeUrl:'',
      showGeneralQrCode:false,
      baseQRCodeUrl: this.QRcodeBaseUrl + '/scanpage/recommend',
      QRCodeUrl: '',
      showGeneralQrCode: false,
      endpoint: '',
      searchGoods: '',
      videoTagList: [],
@@ -692,6 +705,7 @@
          slot: "action",
          align: "center",
          width: 200,
          fixed: "right"
        },
      ],
      goodsData: [],
@@ -707,14 +721,24 @@
    this.getTags('')
  },
  methods: {
    editVideo(row){
    async editVideo(row) {
      // this.uploadVideoForm = {};
      // this.uploadVideoForm = row;
      // this.showUploadVideoShow = true;
      console.log('------------------->编辑',JSON.stringify(row));
      this.upLoadVideoShow = true;
      this.videoTagList = []
      this.chooseTag = row.tagList
     await recommend({
        searchType: "HOT"
      }).then(res => {
        this.videoTagList = res.data;
      })
      this.upLoadVideoShow = true;
      this.chooseTag = row.tagList.map(item => {
        return item.tagName
      })
      console.log('选中列表---》',row.goodsList)
      row.goodsList.forEach(item => {
        item.goodsSkuId = item.id
      })
      this.uploadVideoForm = {
        id: '',
        title: '',
@@ -729,27 +753,50 @@
        fileInfo: {},
        goodsList: []
      }
      // 遍历已选择的标签
      row.tagList.forEach(tag => {
        // 检查标签是否已存在于videoTagList中
        const exists = this.videoTagList.some(item => item.tagName === tag.tagName);
        // 如果不存在,则添加到选项列表
        if (!exists) {
          this.videoTagList.push({
            id: tag.id, // 生成临时ID
            tagName: tag.tagName
          });
        }
      });
      this.uploadVideoForm = row
      recommend({
        searchType: "HOT"
      }).then(res => {
        this.videoTagList = res.data;
      })
      this.uploadVideoForm.fileInfo= {};
      this.uploadVideoForm.videoImgs = JSON.parse(this.uploadVideoForm.videoImgs)
      const sts = await getSts();
      if (this.uploadVideoForm.videoContentType === 'video') {
        this.uploadVideoForm.showVideoUrl = sts.data.endpoint + '/' + this.uploadVideoForm.videoFileKey
        if (this.uploadVideoForm.coverUrl !== '' && this.uploadVideoForm.coverUrl != null) {
          this.uploadVideoForm.showCoverUrl = sts.data.endpoint + '/' + this.uploadVideoForm.coverUrl
        }
      } else if (this.uploadVideoForm.videoContentType === 'img') {
        this.uploadVideoForm.showListImages = this.uploadVideoForm.videoImgs.map(item => {
          return sts.data.endpoint + '/' + item
        })
      }
      this.searchGoodsList();
    },
    closeGeneralQrCode(){
    closeGeneralQrCode() {
      this.showGeneralQrCode = false;
      this.QRCodeUrl = '';
    },
    generalQrCode(row){
    generalQrCode(row) {
      this.showGeneralQrCode = true
      console.log('-------------------->',row);
      this.QRCodeUrl = this.baseQRCodeUrl + '?shareType=videoRecommend' + '&videoId='+ row.id;
      console.log('-------------------->', row);
      this.QRCodeUrl = this.baseQRCodeUrl + '?shareType=videoRecommend' + '&videoId=' + row.id;
      console.log(this.QRCodeUrl)
    },
    //todo 保留后续可能会使用
    changeGoodsNum(id,index,goodsNum){
      console.log('-------------------->',id,index,goodsNum)
    changeGoodsNum(id, index, goodsNum) {
      console.log('-------------------->', id, index, goodsNum)
    },
    chooseGoods(id) {
      const goods = this.goodsData.find(item => {
@@ -786,38 +833,54 @@
      this.upLoadVideoShow = false;
    },
    submitVideoUpload() {
      this.uploadVideoForm.goodsList =  this.uploadVideoForm.goodsList.filter(item => {
        return item.goodsNum >0;
      this.uploadVideoForm.goodsList = this.uploadVideoForm.goodsList.filter(item => {
        return item.goodsNum > 0;
      })
      if (!this.uploadVideoForm.title) {
        this.$Message.error('标题不能为空');
        return;
      }
      //表单校验
      if (this.uploadVideoForm.videoContentType==='video') {
        if (!this.uploadVideoForm.videoFileKey){
      if (this.uploadVideoForm.videoContentType === 'video') {
        if (!this.uploadVideoForm.videoFileKey) {
          this.$Message.error('视频不能为空');
          return;
        }
      }
      if (this.uploadVideoForm.videoContentType==='img') {
        if (this.uploadVideoForm.videoImgs<1){
      if (this.uploadVideoForm.videoContentType === 'img') {
        if (this.uploadVideoForm.videoImgs < 1) {
          this.$Message.error('图片不能为空');
          return;
        }
      }
      publish(this.uploadVideoForm).then(response => {
        if (response.code == 200) {
          this.$Message.success("视频发布成功");
          this.upLoadVideoShow = false;
          this.getDataList();
        }
      }).then(error=>{
        this.$Message.success(error);
      })
      console.log('提交表单--------------->', this.uploadVideoForm)
      if (this.uploadVideoForm.id) {
        updatePublish(this.uploadVideoForm).then(response => {
          if (response.code == 200) {
            this.$Message.success("视频修改成功");
            this.upLoadVideoShow = false;
            this.getDataList();
          }
        }).then(error => {
          this.$Message.success(error);
        })
      } else {
        publish(this.uploadVideoForm).then(response => {
          if (response.code == 200) {
            this.$Message.success("视频发布成功");
            this.upLoadVideoShow = false;
            this.getDataList();
          }
        }).then(error => {
          this.$Message.success(error);
        })
      }
    },
    //todo 后续可能会使用预留
    createVideoTag(e) {
      console.log('------------>',e)
    },
    handleRemove(file) {
      const fileList2 = this.uploadVideoForm.showListImages;
@@ -1142,7 +1205,7 @@
    // 获取列表数据
    getGoodsDataList() {
      let search = this.searchGoodsForm;
      console.log('-------------------------->',this.searchGoodsForm)
      console.log('-------------------------->', this.searchGoodsForm)
      if (search.pageNumber > 0) {
        search.pageNumber = search.pageNumber - 1;
      }
@@ -1199,7 +1262,7 @@
    },
    // 分页 改变页码
    goodsChangePage(v) {
      console.log('-------------------------->分页',v);
      console.log('-------------------------->分页', v);
      this.searchGoodsForm.pageNumber = v;
      this.getGoodsDataList();
    },