From aae8475eb21063cfe896cd7a3fd455cc4a9d0cd9 Mon Sep 17 00:00:00 2001
From: xiezhijun <15270898033@163.com>
Date: Fri, 30 Apr 2021 18:51:39 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E8=A7=86=E9=A2=91=E8=8E=B7=E5=8F=96?=
 =?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../stdiet/common/utils/AliyunVideoUtils.java |  1 +
 .../views/custom/nutritionalVideo/index.vue   | 21 +++++++++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/stdiet-common/src/main/java/com/stdiet/common/utils/AliyunVideoUtils.java b/stdiet-common/src/main/java/com/stdiet/common/utils/AliyunVideoUtils.java
index 5d92b2b15..5219d57f4 100644
--- a/stdiet-common/src/main/java/com/stdiet/common/utils/AliyunVideoUtils.java
+++ b/stdiet-common/src/main/java/com/stdiet/common/utils/AliyunVideoUtils.java
@@ -137,6 +137,7 @@ public class AliyunVideoUtils {
                 .setFields(search_field)
                 .setPageNo(pageNo == null ? 1 : pageNo)
                 .setPageSize(pageSize == null ? 10 : pageSize)
+                .setSortBy("CateId:Asc,CreationTime:Desc")
                 .setScrollToken(scrollToken);
         if(StringUtils.isNotEmpty(key) || StringUtils.isNotEmpty(status)){
             String matchString = null;
diff --git a/stdiet-ui/src/views/custom/nutritionalVideo/index.vue b/stdiet-ui/src/views/custom/nutritionalVideo/index.vue
index ed59c0657..22002f5f7 100644
--- a/stdiet-ui/src/views/custom/nutritionalVideo/index.vue
+++ b/stdiet-ui/src/views/custom/nutritionalVideo/index.vue
@@ -1,6 +1,25 @@
 <template>
   <div class="app-container">
     <!--<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="关键词" prop="title">
+        <el-input
+          v-model="queryParams.key"
+          placeholder="请输入关键词"
+          clearable
+          size="small"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="showFlag">
+        <el-select
+          v-model="queryParams.showFlag"
+          placeholder="请选示状态"
+          clearable
+          size="small"
+        >
+          <el-option key="0" label="屏蔽" value="0"/>
+          <el-option key="1" label="正常" value="1"/>
+        </el-select>
+      </el-form-item>
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -166,6 +185,8 @@
         queryParams: {
           pageNum: 1,
           pageSize: 5,
+          key: null,
+          showFlag: null
         },
         // 表单参数
         form: {},

From 7236ef518ea9e18a550f282c965b919ffe1a65bd Mon Sep 17 00:00:00 2001
From: xiezhijun <15270898033@163.com>
Date: Wed, 5 May 2021 19:44:48 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E8=A7=86=E9=A2=91=E5=90=8E=E5=8F=B0?=
 =?UTF-8?q?=E7=AE=A1=E7=90=86=EF=BC=8C=E6=8F=90=E6=88=90=E8=AE=A1=E7=AE=97?=
 =?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../web/controller/MyApplicationRunner.java   |  22 +++
 .../custom/SysFileUploadController.java       |   2 +-
 .../custom/SysNutritionalVideoController.java |  16 +-
 .../custom/SysVideoClassifyController.java    | 113 +++++++++++
 .../custom/WechatAppletController.java        |  10 +-
 .../custom/domain/SysNutritionalVideo.java    |  12 ++
 .../custom/domain/SysVideoClassify.java       |  33 ++++
 .../custom/mapper/SysVideoClassifyMapper.java |  67 +++++++
 .../service/ISysNutritionalVideoService.java  |   2 +-
 .../service/ISysVideoClassifyService.java     |  67 +++++++
 .../impl/SysCommissionDayServiceImpl.java     |   4 +-
 .../impl/SysNutritionalVideoServiceImpl.java  |  23 ++-
 .../impl/SysVideoClassifyServiceImpl.java     | 105 ++++++++++
 .../custom/SysNutritionalVideoMapper.xml      |  29 ++-
 .../mapper/custom/SysVideoClassifyMapper.xml  |  85 ++++++++
 stdiet-ui/src/api/custom/videoClassify.js     |  61 ++++++
 .../src/components/FileUpload/UploadFile.vue  | 109 ++++++++++
 .../src/components/UploadVideo/index.vue      | 186 ++++++++++++------
 .../views/custom/nutritionalVideo/index.vue   |  20 +-
 19 files changed, 878 insertions(+), 88 deletions(-)
 create mode 100644 stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysVideoClassifyController.java
 create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/domain/SysVideoClassify.java
 create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysVideoClassifyMapper.java
 create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/service/ISysVideoClassifyService.java
 create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysVideoClassifyServiceImpl.java
 create mode 100644 stdiet-custom/src/main/resources/mapper/custom/SysVideoClassifyMapper.xml
 create mode 100644 stdiet-ui/src/api/custom/videoClassify.js
 create mode 100644 stdiet-ui/src/components/FileUpload/UploadFile.vue

diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/MyApplicationRunner.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/MyApplicationRunner.java
index 873f04d6b..e82f72c5a 100644
--- a/stdiet-admin/src/main/java/com/stdiet/web/controller/MyApplicationRunner.java
+++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/MyApplicationRunner.java
@@ -1,11 +1,13 @@
 package com.stdiet.web.controller;
 
 import com.stdiet.common.config.AliyunOSSConfig;
+import com.stdiet.common.core.domain.AjaxResult;
 import com.stdiet.common.core.domain.entity.SysUser;
 import com.stdiet.common.utils.StringUtils;
 import com.stdiet.common.utils.oss.AliyunOSSUtils;
 import com.stdiet.common.utils.poi.ExcelUtil;
 import com.stdiet.custom.domain.SysNutritionQuestion;
+import com.stdiet.custom.domain.SysNutritionalVideo;
 import com.stdiet.custom.domain.SysWxUserInfo;
 import com.stdiet.custom.domain.SysWxUserLog;
 import com.stdiet.custom.mapper.SysCustomerPhysicalSignsMapper;
@@ -13,6 +15,7 @@ import com.stdiet.custom.mapper.SysNutritionQuestionMapper;
 import com.stdiet.custom.mapper.SysWxUserInfoMapper;
 import com.stdiet.custom.mapper.SysWxUserLogMapper;
 import com.stdiet.custom.service.ISysNutritionQuestionService;
+import com.stdiet.custom.service.ISysNutritionalVideoService;
 import com.stdiet.custom.service.ISysWxUserLogService;
 import com.stdiet.custom.utils.LuceneIndexUtils;
 import com.stdiet.framework.web.domain.server.Sys;
@@ -28,6 +31,7 @@ import org.springframework.stereotype.Component;
 import java.io.File;
 import java.io.FileInputStream;
 import java.util.List;
+import java.util.Map;
 
 @Component
 @Order(value = 1)
@@ -42,6 +46,9 @@ public class MyApplicationRunner implements ApplicationRunner {
     @Autowired
     private ISysNutritionQuestionService sysNutritionQuestionService;
 
+    @Autowired
+    private ISysNutritionalVideoService sysNutritionalVideoService;
+
 
 
     @Override
@@ -105,4 +112,19 @@ public class MyApplicationRunner implements ApplicationRunner {
         }
 
     }
+
+    public void updateVideo(){
+        Map<String, Object> map = sysNutritionalVideoService.searchVideo(null, null, 1,100, null);
+        if(map != null){
+            List<SysNutritionalVideo> list = (List<SysNutritionalVideo>)map.get("nutritionalVideoList");
+            if(list != null && list.size() > 0){
+                for (SysNutritionalVideo video : list) {
+                    sysNutritionalVideoService.insertSysNutritionalVideo(video);
+                }
+            }
+        }
+    }
+
+
+
 }
diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysFileUploadController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysFileUploadController.java
index ece6a3285..618947e2e 100644
--- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysFileUploadController.java
+++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysFileUploadController.java
@@ -23,7 +23,7 @@ public class SysFileUploadController extends BaseController {
      * 上传文件到OSS返回URL
      */
     @PostMapping(value = "/{prefix}")
-    @PreAuthorize("@ss.hasPermi('custom:file:upload')")
+    //@PreAuthorize("@ss.hasPermi('custom:file:upload')")
     public AjaxResult uploadCseFile(MultipartFile file, @PathVariable String prefix) throws Exception {
 
         try {
diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysNutritionalVideoController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysNutritionalVideoController.java
index f02cc235c..ce39ad407 100644
--- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysNutritionalVideoController.java
+++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysNutritionalVideoController.java
@@ -2,11 +2,11 @@ package com.stdiet.web.controller.custom;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 import com.aliyun.vod20170321.models.CreateUploadVideoResponse;
-import com.aliyun.vod20170321.models.GetVideoListResponseBody;
+import com.stdiet.common.core.page.TableDataInfo;
 import com.stdiet.common.utils.AliyunVideoUtils;
+import com.stdiet.common.utils.oss.AliyunOSSUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -35,15 +35,18 @@ public class SysNutritionalVideoController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('custom:nutritionalVideo:list')")
     @GetMapping("/list")
-    public AjaxResult list(SysNutritionalVideo sysNutritionalVideo, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "5")int pageSize)
+    public TableDataInfo list(SysNutritionalVideo sysNutritionalVideo)
     {
-        AjaxResult result = AjaxResult.success();
+        /*AjaxResult result = AjaxResult.success();
         Map<String, Object> map = sysNutritionalVideoService.searchVideo(sysNutritionalVideo.getKey(), sysNutritionalVideo.getShowFlag(), pageNum, pageSize, null);
         if(map != null){
             result.put("total", map.get("total"));
             result.put("rows", map.get("nutritionalVideoList"));
         }
-        return result;
+        return result;*/
+        startPage();
+        List<SysNutritionalVideo> list = sysNutritionalVideoService.selectSysNutritionalVideoList(sysNutritionalVideo, true);
+        return getDataTable(list);
     }
 
     /**
@@ -64,6 +67,7 @@ public class SysNutritionalVideoController extends BaseController
     @PostMapping
     public AjaxResult add(@RequestBody SysNutritionalVideo sysNutritionalVideo)
     {
+        sysNutritionalVideo.setShowFlag(1);
         return toAjax(sysNutritionalVideoService.insertSysNutritionalVideo(sysNutritionalVideo));
     }
 
@@ -77,7 +81,7 @@ public class SysNutritionalVideoController extends BaseController
     {
         AjaxResult result = AjaxResult.error();
         try {
-            CreateUploadVideoResponse response = AliyunVideoUtils.createUploadVideoRequest(sysNutritionalVideo.getCateId(), sysNutritionalVideo.getFileName(), sysNutritionalVideo.getTitle(), sysNutritionalVideo.getCoverUrl(), sysNutritionalVideo.getTags(), sysNutritionalVideo.getDescription());
+            CreateUploadVideoResponse response = AliyunVideoUtils.createUploadVideoRequest(null, sysNutritionalVideo.getFileName(), sysNutritionalVideo.getTitle(), null, sysNutritionalVideo.getTags(), sysNutritionalVideo.getDescription());
             if(response != null){
                 result = AjaxResult.success();
                 result.put("uploadAuth", response.body);
diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysVideoClassifyController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysVideoClassifyController.java
new file mode 100644
index 000000000..13eff2c96
--- /dev/null
+++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysVideoClassifyController.java
@@ -0,0 +1,113 @@
+package com.stdiet.web.controller.custom;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.stdiet.common.annotation.Log;
+import com.stdiet.common.core.controller.BaseController;
+import com.stdiet.common.core.domain.AjaxResult;
+import com.stdiet.common.enums.BusinessType;
+import com.stdiet.custom.domain.SysVideoClassify;
+import com.stdiet.custom.service.ISysVideoClassifyService;
+import com.stdiet.common.utils.poi.ExcelUtil;
+import com.stdiet.common.core.page.TableDataInfo;
+
+/**
+ * 视频分类Controller
+ *
+ * @author xzj
+ * @date 2021-05-05
+ */
+@RestController
+@RequestMapping("/custom/videoClassify")
+public class SysVideoClassifyController extends BaseController
+{
+    @Autowired
+    private ISysVideoClassifyService sysVideoClassifyService;
+
+    /**
+     * 查询视频分类列表
+     */
+    @PreAuthorize("@ss.hasPermi('custom:videoClassify:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysVideoClassify sysVideoClassify)
+    {
+        startPage();
+        List<SysVideoClassify> list = sysVideoClassifyService.selectSysVideoClassifyList(sysVideoClassify);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出视频分类列表
+     */
+    @PreAuthorize("@ss.hasPermi('custom:videoClassify:export')")
+    @Log(title = "视频分类", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(SysVideoClassify sysVideoClassify)
+    {
+        List<SysVideoClassify> list = sysVideoClassifyService.selectSysVideoClassifyList(sysVideoClassify);
+        ExcelUtil<SysVideoClassify> util = new ExcelUtil<SysVideoClassify>(SysVideoClassify.class);
+        return util.exportExcel(list, "videoClassify");
+    }
+
+    /**
+     * 获取视频分类详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('custom:videoClassify:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(sysVideoClassifyService.selectSysVideoClassifyById(id));
+    }
+
+    /**
+     * 新增视频分类
+     */
+    @PreAuthorize("@ss.hasPermi('custom:videoClassify:add')")
+    @Log(title = "视频分类", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody SysVideoClassify sysVideoClassify)
+    {
+        return toAjax(sysVideoClassifyService.insertSysVideoClassify(sysVideoClassify));
+    }
+
+    /**
+     * 修改视频分类
+     */
+    @PreAuthorize("@ss.hasPermi('custom:videoClassify:edit')")
+    @Log(title = "视频分类", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody SysVideoClassify sysVideoClassify)
+    {
+        return toAjax(sysVideoClassifyService.updateSysVideoClassify(sysVideoClassify));
+    }
+
+    /**
+     * 删除视频分类
+     */
+    @PreAuthorize("@ss.hasPermi('custom:videoClassify:remove')")
+    @Log(title = "视频分类", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(sysVideoClassifyService.deleteSysVideoClassifyByIds(ids));
+    }
+
+    /**
+     * 查询视频分类列表
+     */
+    @GetMapping("/getAllClassify")
+    public AjaxResult getAllClassify()
+    {
+        List<SysVideoClassify> list = sysVideoClassifyService.getAllClassify();
+        return AjaxResult.success(list);
+    }
+}
\ No newline at end of file
diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java
index 40d0464eb..e478d010f 100644
--- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java
+++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java
@@ -366,12 +366,16 @@ public class WechatAppletController extends BaseController {
      * 获取视频列表
      */
     @GetMapping(value = "/getVideoList")
-    public AjaxResult getVideoList(SysNutritionalVideo sysNutritionalVideo, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,  @RequestParam(value = "pageSize", defaultValue = "5")int pageSize) {
-        AjaxResult result = AjaxResult.success();
+    public TableDataInfo getVideoList(SysNutritionalVideo sysNutritionalVideo) {
+       /* AjaxResult result = AjaxResult.success();
         Map<String, Object> map = sysNutritionalVideoService.searchVideo(sysNutritionalVideo.getKey(), 1, pageNum, pageSize, null);
         result.put("total", map.get("total"));
         result.put("rows", map.get("nutritionalVideoList"));
-        return result;
+        return result;*/
+        startPage();
+        sysNutritionalVideo.setShowFlag(1);
+        List<SysNutritionalVideo> list = sysNutritionalVideoService.selectSysNutritionalVideoList(sysNutritionalVideo, true);
+        return getDataTable(list);
     }
 
 
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysNutritionalVideo.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysNutritionalVideo.java
index eb420b9fe..3b5c148c5 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysNutritionalVideo.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysNutritionalVideo.java
@@ -22,6 +22,8 @@ public class SysNutritionalVideo extends BaseEntity
     @Excel(name = "视频分类ID")
     private Long cateId;
 
+    private String cateName;
+
     /** 阿里云视频ID */
     @Excel(name = "阿里云视频ID")
     private String videoId;
@@ -50,6 +52,16 @@ public class SysNutritionalVideo extends BaseEntity
     @Excel(name = "是否显示,0不显示 1显示,默认0")
     private Integer showFlag;
 
+    /** 优先级,默认0 */
+    @Excel(name = "优先级,默认0")
+    private Long priorityLevel;
+
+    /** 视频付费等级,0无需付费 1客户可看 2付费可看 */
+    @Excel(name = "视频付费等级,0无需付费 1客户可看 2付费可看")
+    private Long payLevel;
+
+    private String payLevelName;
+
     /** 删除标识,0未删除 1已删除,默认0 */
     private Integer delFlag;
 
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysVideoClassify.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysVideoClassify.java
new file mode 100644
index 000000000..8384a6de6
--- /dev/null
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysVideoClassify.java
@@ -0,0 +1,33 @@
+package com.stdiet.custom.domain;
+
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.stdiet.common.annotation.Excel;
+import com.stdiet.common.core.domain.BaseEntity;
+
+/**
+ * 视频分类对象 sys_video_classify
+ *
+ * @author xzj
+ * @date 2021-05-05
+ */
+@Data
+public class SysVideoClassify extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 分类名称 */
+    @Excel(name = "分类名称")
+    private String cateName;
+
+    /** 类型标识,0全部可看 1客户可看 2额外付费观看 */
+    @Excel(name = "类型标识,0全部可看 1客户可看 2额外付费观看")
+    private Integer payFlag;
+
+    /** 删除标识 0未删除 1已删除 */
+    private Integer delFlag;
+}
\ No newline at end of file
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysVideoClassifyMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysVideoClassifyMapper.java
new file mode 100644
index 000000000..c1a905237
--- /dev/null
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysVideoClassifyMapper.java
@@ -0,0 +1,67 @@
+package com.stdiet.custom.mapper;
+
+import java.util.List;
+import com.stdiet.custom.domain.SysVideoClassify;
+
+/**
+ * 视频分类Mapper接口
+ *
+ * @author xzj
+ * @date 2021-05-05
+ */
+public interface SysVideoClassifyMapper
+{
+    /**
+     * 查询视频分类
+     *
+     * @param id 视频分类ID
+     * @return 视频分类
+     */
+    public SysVideoClassify selectSysVideoClassifyById(Long id);
+
+    /**
+     * 查询视频分类列表
+     *
+     * @param sysVideoClassify 视频分类
+     * @return 视频分类集合
+     */
+    public List<SysVideoClassify> selectSysVideoClassifyList(SysVideoClassify sysVideoClassify);
+
+    /**
+     * 新增视频分类
+     *
+     * @param sysVideoClassify 视频分类
+     * @return 结果
+     */
+    public int insertSysVideoClassify(SysVideoClassify sysVideoClassify);
+
+    /**
+     * 修改视频分类
+     *
+     * @param sysVideoClassify 视频分类
+     * @return 结果
+     */
+    public int updateSysVideoClassify(SysVideoClassify sysVideoClassify);
+
+    /**
+     * 删除视频分类
+     *
+     * @param id 视频分类ID
+     * @return 结果
+     */
+    public int deleteSysVideoClassifyById(Long id);
+
+    /**
+     * 批量删除视频分类
+     *
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteSysVideoClassifyByIds(Long[] ids);
+
+    /**
+     * 获取所有类别
+     * @return
+     */
+    public List<SysVideoClassify> getAllClassify();
+}
\ No newline at end of file
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysNutritionalVideoService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysNutritionalVideoService.java
index dfd9d96ad..1ce1d8232 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysNutritionalVideoService.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysNutritionalVideoService.java
@@ -27,7 +27,7 @@ public interface ISysNutritionalVideoService
      * @param sysNutritionalVideo 营养视频
      * @return 营养视频集合
      */
-    public List<SysNutritionalVideo> selectSysNutritionalVideoList(SysNutritionalVideo sysNutritionalVideo);
+    public List<SysNutritionalVideo> selectSysNutritionalVideoList(SysNutritionalVideo sysNutritionalVideo, boolean flag);
 
     /**
      * 新增营养视频
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysVideoClassifyService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysVideoClassifyService.java
new file mode 100644
index 000000000..a3eeacebb
--- /dev/null
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysVideoClassifyService.java
@@ -0,0 +1,67 @@
+package com.stdiet.custom.service;
+
+import java.util.List;
+import com.stdiet.custom.domain.SysVideoClassify;
+
+/**
+ * 视频分类Service接口
+ *
+ * @author xzj
+ * @date 2021-05-05
+ */
+public interface ISysVideoClassifyService
+{
+    /**
+     * 查询视频分类
+     *
+     * @param id 视频分类ID
+     * @return 视频分类
+     */
+    public SysVideoClassify selectSysVideoClassifyById(Long id);
+
+    /**
+     * 查询视频分类列表
+     *
+     * @param sysVideoClassify 视频分类
+     * @return 视频分类集合
+     */
+    public List<SysVideoClassify> selectSysVideoClassifyList(SysVideoClassify sysVideoClassify);
+
+    /**
+     * 新增视频分类
+     *
+     * @param sysVideoClassify 视频分类
+     * @return 结果
+     */
+    public int insertSysVideoClassify(SysVideoClassify sysVideoClassify);
+
+    /**
+     * 修改视频分类
+     *
+     * @param sysVideoClassify 视频分类
+     * @return 结果
+     */
+    public int updateSysVideoClassify(SysVideoClassify sysVideoClassify);
+
+    /**
+     * 批量删除视频分类
+     *
+     * @param ids 需要删除的视频分类ID
+     * @return 结果
+     */
+    public int deleteSysVideoClassifyByIds(Long[] ids);
+
+    /**
+     * 删除视频分类信息
+     *
+     * @param id 视频分类ID
+     * @return 结果
+     */
+    public int deleteSysVideoClassifyById(Long id);
+
+    /**
+     * 获取所有类别
+     * @return
+     */
+    public List<SysVideoClassify> getAllClassify();
+}
\ No newline at end of file
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCommissionDayServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCommissionDayServiceImpl.java
index 0d508dfee..cd1e5a1a2 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCommissionDayServiceImpl.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCommissionDayServiceImpl.java
@@ -296,7 +296,7 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
         //该笔订单当月的成交总额
         sysOrderCommisionDayDetail.setMonthOrderTotalAmount(everyMonthTotalAmountMap.get(yearMonth));
         //该笔订单对应提成比例
-        sysOrderCommisionDayDetail.setCommissionRate(rateMap.get(yearMonth));
+        sysOrderCommisionDayDetail.setCommissionRate(rateMap.get(yearMonth) == null ? rateMap.get("190001") : rateMap.get(yearMonth));
         //计算该笔订单总提成
         sysOrderCommisionDayDetail.setOrderCommission(getMoney(sysOrderCommisionDayDetail.getOrderAmount().doubleValue() * sysOrderCommisionDayDetail.getCommissionRate() / 100D));
         //每年每月提成
@@ -357,6 +357,8 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
         tmpQueryCom.setPostId(postId);
         List<SysCommision> tmpComList = sysCommisionMapper.selectSysCommisionList(tmpQueryCom);
         Map<String, Float> rateMap = new TreeMap<>(new MyComparator());
+        //取第一个区间为默认提成比例
+        rateMap.put("190001", (tmpComList != null && tmpComList.size() > 0) ? tmpComList.get(0).getRate() : 0.0F);
         for(String yearMonth : amountMap.keySet()){
             BigDecimal orderAmount = amountMap.get(yearMonth);
             rateMap.put(yearMonth, 0F);
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysNutritionalVideoServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysNutritionalVideoServiceImpl.java
index 775ad77c8..e8b30a1a1 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysNutritionalVideoServiceImpl.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysNutritionalVideoServiceImpl.java
@@ -9,6 +9,7 @@ import com.aliyun.vod20170321.models.SearchMediaResponse;
 import com.aliyun.vod20170321.models.SearchMediaResponseBody;
 import com.stdiet.common.utils.AliyunVideoUtils;
 import com.stdiet.common.utils.DateUtils;
+import com.stdiet.common.utils.oss.AliyunOSSUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.stdiet.custom.mapper.SysNutritionalVideoMapper;
@@ -46,9 +47,24 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
      * @return 营养视频
      */
     @Override
-    public List<SysNutritionalVideo> selectSysNutritionalVideoList(SysNutritionalVideo sysNutritionalVideo)
+    public List<SysNutritionalVideo> selectSysNutritionalVideoList(SysNutritionalVideo sysNutritionalVideo, boolean flag)
     {
-        return sysNutritionalVideoMapper.selectSysNutritionalVideoList(sysNutritionalVideo);
+        List<SysNutritionalVideo> list = sysNutritionalVideoMapper.selectSysNutritionalVideoList(sysNutritionalVideo);
+        if(flag && list != null && list.size() > 0){
+            List<String> fileUrl = new ArrayList<>();
+            for (SysNutritionalVideo video : list) {
+                fileUrl.add(video.getCoverUrl());
+            }
+            List<String> downUrlList = AliyunOSSUtils.generatePresignedUrl(fileUrl);
+            if(downUrlList != null && downUrlList.size() > 0){
+                int index = 0;
+                for (String downUrl : downUrlList) {
+                    list.get(index).setCoverUrl(downUrl);
+                    index++;
+                }
+            }
+        }
+        return list;
     }
 
     /**
@@ -133,8 +149,7 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
                         sysNutritionalVideo.setCoverUrl(media.video.coverURL);
                         sysNutritionalVideo.setShowFlag(getStatus(media.video.getStatus()));
                         sysNutritionalVideo.setTags(media.video.tags);
-                        String createTime = media.video.creationTime;
-                        System.out.println(createTime);
+                        //String createTime = media.video.creationTime;
                         sysNutritionalVideo.setDescription(media.video.description);
                         sysNutritionalVideo.setVideoId(media.video.videoId);
                         nutritionalVideoList.add(sysNutritionalVideo);
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysVideoClassifyServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysVideoClassifyServiceImpl.java
new file mode 100644
index 000000000..bb5e0a47c
--- /dev/null
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysVideoClassifyServiceImpl.java
@@ -0,0 +1,105 @@
+package com.stdiet.custom.service.impl;
+
+import java.util.List;
+import com.stdiet.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.stdiet.custom.mapper.SysVideoClassifyMapper;
+import com.stdiet.custom.domain.SysVideoClassify;
+import com.stdiet.custom.service.ISysVideoClassifyService;
+
+/**
+ * 视频分类Service业务层处理
+ *
+ * @author xzj
+ * @date 2021-05-05
+ */
+@Service
+public class SysVideoClassifyServiceImpl implements ISysVideoClassifyService
+{
+    @Autowired
+    private SysVideoClassifyMapper sysVideoClassifyMapper;
+
+    /**
+     * 查询视频分类
+     *
+     * @param id 视频分类ID
+     * @return 视频分类
+     */
+    @Override
+    public SysVideoClassify selectSysVideoClassifyById(Long id)
+    {
+        return sysVideoClassifyMapper.selectSysVideoClassifyById(id);
+    }
+
+    /**
+     * 查询视频分类列表
+     *
+     * @param sysVideoClassify 视频分类
+     * @return 视频分类
+     */
+    @Override
+    public List<SysVideoClassify> selectSysVideoClassifyList(SysVideoClassify sysVideoClassify)
+    {
+        return sysVideoClassifyMapper.selectSysVideoClassifyList(sysVideoClassify);
+    }
+
+    /**
+     * 新增视频分类
+     *
+     * @param sysVideoClassify 视频分类
+     * @return 结果
+     */
+    @Override
+    public int insertSysVideoClassify(SysVideoClassify sysVideoClassify)
+    {
+        sysVideoClassify.setCreateTime(DateUtils.getNowDate());
+        return sysVideoClassifyMapper.insertSysVideoClassify(sysVideoClassify);
+    }
+
+    /**
+     * 修改视频分类
+     *
+     * @param sysVideoClassify 视频分类
+     * @return 结果
+     */
+    @Override
+    public int updateSysVideoClassify(SysVideoClassify sysVideoClassify)
+    {
+        sysVideoClassify.setUpdateTime(DateUtils.getNowDate());
+        return sysVideoClassifyMapper.updateSysVideoClassify(sysVideoClassify);
+    }
+
+    /**
+     * 批量删除视频分类
+     *
+     * @param ids 需要删除的视频分类ID
+     * @return 结果
+     */
+    @Override
+    public int deleteSysVideoClassifyByIds(Long[] ids)
+    {
+        return sysVideoClassifyMapper.deleteSysVideoClassifyByIds(ids);
+    }
+
+    /**
+     * 删除视频分类信息
+     *
+     * @param id 视频分类ID
+     * @return 结果
+     */
+    @Override
+    public int deleteSysVideoClassifyById(Long id)
+    {
+        return sysVideoClassifyMapper.deleteSysVideoClassifyById(id);
+    }
+
+    /**
+     * 获取所有类别
+     * @return
+     */
+    @Override
+    public List<SysVideoClassify> getAllClassify(){
+        return sysVideoClassifyMapper.getAllClassify();
+    }
+}
\ No newline at end of file
diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysNutritionalVideoMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysNutritionalVideoMapper.xml
index 9561dcb9b..5c9b7414d 100644
--- a/stdiet-custom/src/main/resources/mapper/custom/SysNutritionalVideoMapper.xml
+++ b/stdiet-custom/src/main/resources/mapper/custom/SysNutritionalVideoMapper.xml
@@ -14,22 +14,39 @@
         <result property="videoSize"    column="video_size"    />
         <result property="tags"    column="tags"    />
         <result property="showFlag"    column="show_flag"    />
+        <result property="priorityLevel"    column="priority_level"    />
+        <result property="payLevel"    column="pay_level"    />
         <result property="createTime"    column="create_time"    />
         <result property="createBy"    column="create_by"    />
         <result property="updateTime"    column="update_time"    />
         <result property="updateBy"    column="update_by"    />
         <result property="delFlag"    column="del_flag"    />
+
+        <result property="payLevelName" column="pay_level_name"></result>
+        <result property="cateName" column="cate_name"></result>
     </resultMap>
 
     <sql id="selectSysNutritionalVideoVo">
-        select id, cate_id, video_id, cover_url, title, description, video_size, tags, show_flag, create_time, create_by, update_time, update_by, del_flag from sys_nutritional_video
+        select id, cate_id, video_id, cover_url, title, description, priority_level,pay_level,video_size, tags, show_flag, create_time, create_by, update_time, update_by, del_flag from sys_nutritional_video
     </sql>
 
     <select id="selectSysNutritionalVideoList" parameterType="SysNutritionalVideo" resultMap="SysNutritionalVideoResult">
-        <include refid="selectSysNutritionalVideoVo"/> where del_flag = 0
+        select snv.id, snv.cate_id, snv.video_id, snv.cover_url, snv.title, snv.description, snv.priority_level,snv.pay_level,snv.video_size, snv.tags, snv.show_flag, snv.create_time,
+        pay.dict_label as pay_level_name, svc.cate_name
+        from sys_nutritional_video snv
+        left join (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'video_pay_level') AS pay ON pay.dict_value = snv.pay_level
+        left join sys_video_classify svc on svc.id = snv.cate_id and svc.del_flag = 0
+        where snv.del_flag = 0
         <if test="showFlag != null">
-            and show_flag = #{showFlag}
+            and snv.show_flag = #{showFlag}
         </if>
+        <if test="cateId != null">
+            and snv.cate_id = #{cateId}
+        </if>
+        <if test="key != null and key != ''">
+            and (snv.title like concat('%',#{key},'%') or snv.description like concat('%',#{key},'%'))
+        </if>
+        order by snv.priority_level DESC,snv.create_time DESC
     </select>
 
     <select id="selectSysNutritionalVideoById" parameterType="Long" resultMap="SysNutritionalVideoResult">
@@ -48,8 +65,10 @@
             <if test="videoSize != null">video_size,</if>
             <if test="tags != null">tags,</if>
             <if test="showFlag != null">show_flag,</if>
+            <if test="priorityLevel != null">priority_level,</if>
             <if test="createTime != null">create_time,</if>
             <if test="createBy != null">create_by,</if>
+            <if test="payLevel != null">pay_level,</if>
             <if test="updateTime != null">update_time,</if>
             <if test="updateBy != null">update_by,</if>
             <if test="delFlag != null">del_flag,</if>
@@ -63,8 +82,10 @@
             <if test="videoSize != null">#{videoSize},</if>
             <if test="tags != null">#{tags},</if>
             <if test="showFlag != null">#{showFlag},</if>
+            <if test="priorityLevel != null">#{priorityLevel},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="createBy != null">#{createBy},</if>
+            <if test="payLevel != null">#{payLevel},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="updateBy != null">#{updateBy},</if>
             <if test="delFlag != null">#{delFlag},</if>
@@ -82,8 +103,10 @@
             <if test="videoSize != null">video_size = #{videoSize},</if>
             <if test="tags != null">tags = #{tags},</if>
             <if test="showFlag != null">show_flag = #{showFlag},</if>
+            <if test="priorityLevel != null">priority_level = #{priorityLevel},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="payLevel != null">pay_level = #{payLevel},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>
             <if test="delFlag != null">del_flag = #{delFlag},</if>
diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysVideoClassifyMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysVideoClassifyMapper.xml
new file mode 100644
index 000000000..688addef8
--- /dev/null
+++ b/stdiet-custom/src/main/resources/mapper/custom/SysVideoClassifyMapper.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.stdiet.custom.mapper.SysVideoClassifyMapper">
+
+    <resultMap type="SysVideoClassify" id="SysVideoClassifyResult">
+        <result property="id"    column="id"    />
+        <result property="cateName"    column="cate_name"    />
+        <result property="payFlag"    column="pay_flag"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="delFlag"    column="del_flag"    />
+    </resultMap>
+
+    <sql id="selectSysVideoClassifyVo">
+        select id, cate_name, pay_flag, create_time, create_by, update_time, update_by, del_flag from sys_video_classify
+    </sql>
+
+    <select id="selectSysVideoClassifyList" parameterType="SysVideoClassify" resultMap="SysVideoClassifyResult">
+        <include refid="selectSysVideoClassifyVo"/>
+        where del_flag = 0
+    </select>
+
+    <select id="selectSysVideoClassifyById" parameterType="Long" resultMap="SysVideoClassifyResult">
+        <include refid="selectSysVideoClassifyVo"/>
+        where id = #{id} and del_flag =  0
+    </select>
+
+    <insert id="insertSysVideoClassify" parameterType="SysVideoClassify">
+        insert into sys_video_classify
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="cateName != null">cate_name,</if>
+            <if test="payFlag != null">pay_flag,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="delFlag != null">del_flag,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="cateName != null">#{cateName},</if>
+            <if test="payFlag != null">#{payFlag},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+        </trim>
+    </insert>
+
+    <update id="updateSysVideoClassify" parameterType="SysVideoClassify">
+        update sys_video_classify
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="cateName != null">cate_name = #{cateName},</if>
+            <if test="payFlag != null">pay_flag = #{payFlag},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteSysVideoClassifyById" parameterType="Long">
+        update sys_video_classify set del_flag = 1 where id = #{id}
+    </update>
+
+    <update id="deleteSysVideoClassifyByIds" parameterType="String">
+        update sys_video_classify set del_flag = 1 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+    <select id="getAllClassify" resultMap="SysVideoClassifyResult">
+        select id,cate_name from sys_video_classify where del_flag = 0
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/stdiet-ui/src/api/custom/videoClassify.js b/stdiet-ui/src/api/custom/videoClassify.js
new file mode 100644
index 000000000..5d3ea6a2c
--- /dev/null
+++ b/stdiet-ui/src/api/custom/videoClassify.js
@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询视频分类列表
+export function listVideoClassify(query) {
+  return request({
+    url: '/custom/videoClassify/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询视频分类详细
+export function getVideoClassify(id) {
+  return request({
+    url: '/custom/videoClassify/' + id,
+    method: 'get'
+  })
+}
+
+// 新增视频分类
+export function addVideoClassify(data) {
+  return request({
+    url: '/custom/videoClassify',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改视频分类
+export function updateVideoClassify(data) {
+  return request({
+    url: '/custom/videoClassify',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除视频分类
+export function delVideoClassify(id) {
+  return request({
+    url: '/custom/videoClassify/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出视频分类
+export function exportVideoClassify(query) {
+  return request({
+    url: '/custom/videoClassify/export',
+    method: 'get',
+    params: query
+  })
+}
+
+//获取所有分类
+export function getAllClassify(){
+  return request({
+    url: '/custom/videoClassify/getAllClassify',
+    method: 'get'
+  })
+}
\ No newline at end of file
diff --git a/stdiet-ui/src/components/FileUpload/UploadFile.vue b/stdiet-ui/src/components/FileUpload/UploadFile.vue
new file mode 100644
index 000000000..bf60cf2ed
--- /dev/null
+++ b/stdiet-ui/src/components/FileUpload/UploadFile.vue
@@ -0,0 +1,109 @@
+<template>
+  <el-upload
+  class="avatar-uploader"
+  :headers="upload.headers"
+  :action="upload.url"
+  :show-file-list="false"
+  :on-success="handleFileSuccess"
+  :accept="'.png,.jpg'"
+  :before-upload="beforeAvatarUpload">
+  <img v-if="imageUrl" :src="imageUrl" class="avatar">
+  <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+  <div class="el-upload__tip" slot="tip">
+      1、只能上传png、jpg文件,且每个文件不超过{{
+        upload.fileSize / (1024 * 1024)
+      }}M
+    </div>
+</el-upload>
+</template>
+<script>
+import { getToken } from "@/utils/auth";
+export default {
+  name: "DragUpload",
+  components: {},
+  data() {
+    return {
+      upload: {
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/custom/fileUpload/" + this.prefix,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 其他需要携带的数据
+        data: {},
+        //每个文件大小(单位:byte)
+        fileSize: 1024 * 1024 * 10,
+      },
+      //上传之后的路径
+      imageUrl: null,
+      fileUrl: null
+    };
+  },
+  methods: {
+    resetUpload(){
+        this.imageUrl = null;
+        this.fileUrl = null
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      if (response != null && response.code === 200) {
+        this.fileUrl = response.fileUrl;
+        this.imageUrl = response.previewUrl;
+        //this.imageUrl = URL.createObjectURL(file.raw);
+        //文件全部上传成功,则调用回调方法
+        this.$emit("callbackMethod", this.fileUrl);
+      } else {
+        this.$message.error("文件上传失败");
+      }
+    },
+    // 文件上传失败处理
+    handleFileFail(err, file, fileList) {
+      this.$message.error("文件上传失败");
+    },
+    beforeAvatarUpload(file) {
+        if(file.type != 'image/jpeg' && file.type != 'image/png') {
+          this.$message.error('文件格式错误');
+          return false;
+        }
+        if (file.size > this.upload.fileSize) {
+          this.$message.error('文件大小超过最大限制');
+          return false;
+        }
+        return true;
+    }
+  },
+  props: {
+    prefix: {
+      type: String,
+      default: "videoCover",
+    }
+  }
+};
+</script>
+
+<style scoped>
+
+.avatar-uploader .el-upload {
+    border: 1px dashed #d7e236;
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+  }
+  .avatar-uploader .el-upload:hover {
+    border-color: #409EFF;
+  }
+  .avatar-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    width: 178px;
+    height: 178px;
+    line-height: 178px;
+    text-align: center;
+  }
+  .avatar {
+    width: 300px;
+    height: 200px;
+    display: block;
+  }
+</style>
+
diff --git a/stdiet-ui/src/components/UploadVideo/index.vue b/stdiet-ui/src/components/UploadVideo/index.vue
index 297a666d6..2b97fc116 100644
--- a/stdiet-ui/src/components/UploadVideo/index.vue
+++ b/stdiet-ui/src/components/UploadVideo/index.vue
@@ -7,7 +7,7 @@
                 placeholder="请输入视频标题"
                 v-model="videoFrom.title"
                 maxlength="50" 
-                rows="3"
+                rows="1"
                 show-word-limit
             />
         </el-form-item>
@@ -16,11 +16,37 @@
                 type="textarea"
                 placeholder="请输入视频描述"
                 v-model="videoFrom.description"
-                maxlength="2000"
-                rows="10"
+                maxlength="1000"
+                rows="3"
                 show-word-limit
             />
         </el-form-item>
+         <el-form-item label="视频封面" prop="coverUrl">
+              <UploadFile ref="uploadFile" :prefix="'videoCover'" @callbackMethod="handleCoverUrl"></UploadFile>
+          </el-form-item>
+        <el-form-item label="视频类别" prop="cateId">
+            <el-select v-model="videoFrom.cateId" clearable filterable placeholder="请选择类别">
+              <el-option
+                v-for="classify in classifyList"
+                :key="classify.id"
+                :label="classify.cateName"
+                :value="classify.id"
+              />
+            </el-select>
+          </el-form-item>
+         
+          
+          <el-form-item label="视频权限" prop="payLevel">
+            <el-select v-model="videoFrom.payLevel" clearable filterable placeholder="请选择权限">
+              <el-option
+                v-for="dict in payVideoLevelList"
+                :key="dict.dictValue"
+                :label="dict.dictLabel"
+                :value="parseInt(dict.dictValue)"
+              />
+            </el-select>
+          </el-form-item>
+          
         <el-form-item label="视频文件" prop="file">
             <div>
             <input type="file" accept=".mp4" ref="videoFile" id="videoFile" @change="fileChange($event)">
@@ -39,17 +65,32 @@
 </template>
 <script>
   import axios from 'axios'
-  import {getUploadVideoAuth } from "@/api/custom/nutritionalVideo";
-
+  import {getUploadVideoAuth,addNutritionalVideo } from "@/api/custom/nutritionalVideo";
+  import {getAllClassify } from "@/api/custom/videoClassify";
+  import UploadFile from "@/components/FileUpload/UploadFile";
   export default {
       name: "UploadVideo",
     data () {
       return {
         open: false,
         videoFrom:{},
-        videoRules:{},
+        videoRules:{
+          title: [
+            { required: true, message: "标题不能为空", trigger: "blur" },
+          ],
+          coverUrl: [
+           { required: true, message: "封面不能为空", trigger: "blur" },
+          ],
+          cateId:[
+            { required: true, message: "视频类别不能为空", trigger: "blur" },
+          ],
+          payLevel:[
+            { required: true, message: "视频权限不能为空", trigger: "blur" },
+          ]
+        },
         callback: null,
-
+        classifyList: [],
+        payVideoLevelList:[],
         uploadAuth:{
             
         },
@@ -72,20 +113,42 @@
         uploading: false
       }
     },
+    created(){
+      getAllClassify().then(response => {
+          if(response.code == 200){
+              this.classifyList = response.data;
+          }
+      });
+      this.getDicts("video_pay_level").then((response) => {
+        this.payVideoLevelList = response.data;
+      });
+        
+    },
+    components: {
+      UploadFile
+    },
     methods: {
         showDialog(callback){
             this.resetVideoFrom();
             this.open = true;
             this.callback = callback;
         },
+        handleCoverUrl(url){
+          this.videoFrom.coverUrl = url;
+        },
         resetVideoFrom(){
             this.videoFrom = {
                 cateId: null,
                 coverUrl: null,
                 title: null,
                 description: null,
-                tags: null, 
+                tags: null,
+                payLevel: null,
+                videoId: null
             };
+            if(this.$refs.uploadFile){
+                this.$refs.uploadFile.resetUpload();
+            }
             this.authProgress = 0;
             this.file = null;
             this.videoFileList = [];
@@ -112,55 +175,53 @@
         },
 
         fileChange (e) {
-            if(this.videoFrom.title == null || this.videoFrom.title.trim().length == 0){
-                this.$message({
-                    message: "标题不能为空",
-                    type: "warning",
-                });
-                return;
-            }
-            if(this.uploading){
-                this.$message({
-                    message: "文件正在上传,请勿取消",
-                    type: "warning",
-                });
-                return;
-            }
-            this.file = e.target.files[0];
-            var userData = '{"Vod":{}}'
-            /**if (this.uploader) {
-                this.uploader.stopUpload()
-                this.authProgress = 0
-                this.statusText = ""
-            }**/
-            this.videoFrom.fileName = this.file.name;
-            if(this.videoFrom.fileName == null || this.videoFrom.fileName.length == 0 || this.videoFrom.fileName.lastIndexOf(".") == -1){
-                this.$message({
-                    message: "当前文件名称错误",
-                    type: "warning",
-                });
-                return;
-            }
-            let fileType = this.videoFrom.fileName.substring(this.videoFrom.fileName.lastIndexOf(".")+1);
-            if(this.fileType.indexOf(fileType) == -1){
-                this.$message({
-                    message: "当前文件格式错误",
-                    type: "warning",
-                });
-                return;
-            }
-            
-            getUploadVideoAuth(this.videoFrom).then(response => {
-                if(response.code == 200){
-                    this.uploadAuth = response.uploadAuth;
-                    this.uploader = this.createUploader()
-                    this.uploader.addFile(this.file, null, null, null, userData)
-                    this.uploadDisabled = false
-                    this.pauseDisabled = true
-                    this.resumeDisabled = true
-                }
-            })
-            
+            this.$refs["videoFrom"].validate((valid) => {
+              if (valid) {
+                 if(this.uploading){
+                    this.$message({
+                      message: "文件正在上传,请勿取消",
+                      type: "warning",
+                    });
+                    return;
+                  }
+                  this.file = e.target.files[0];
+                  var userData = '{"Vod":{}}'
+                  /**if (this.uploader) {
+                      this.uploader.stopUpload()
+                      this.authProgress = 0
+                      this.statusText = ""
+                  }**/
+                  this.videoFrom.fileName = this.file.name;
+                  if(this.videoFrom.fileName == null || this.videoFrom.fileName.length == 0 || this.videoFrom.fileName.lastIndexOf(".") == -1){
+                      this.$message({
+                          message: "当前文件名称错误",
+                          type: "warning",
+                      });
+                      return;
+                  }
+                  let fileType = this.videoFrom.fileName.substring(this.videoFrom.fileName.lastIndexOf(".")+1);
+                  if(this.fileType.indexOf(fileType) == -1){
+                      this.$message({
+                          message: "当前文件格式错误",
+                          type: "warning",
+                      });
+                      return;
+                  }
+                  
+                  getUploadVideoAuth(this.videoFrom).then(response => {
+                      if(response.code == 200){
+                          this.uploadAuth = response.uploadAuth;
+                          console.log(this.uploadAuth);
+                          this.videoFrom.videoId = this.uploadAuth.videoId;
+                          this.uploader = this.createUploader()
+                          this.uploader.addFile(this.file, null, null, null, userData)
+                          this.uploadDisabled = false
+                          this.pauseDisabled = true
+                          this.resumeDisabled = true
+                      }
+                  })
+                    }
+                  }); 
       },
       authUpload () {
         // 然后调用 startUpload 方法, 开始上传
@@ -259,9 +320,14 @@
           onUploadEnd: function (uploadInfo) {
             self.statusText = '文件上传完毕'
             self.uploading = false;
-            self.msgSuccess("上传成功");
-            self.open = false;
-            self.callback && self.callback();
+            //self.msgSuccess("上传成功");
+            addNutritionalVideo(self.videoFrom).then(response => {
+                if (response.code === 200) {
+                  self.msgSuccess("视频上传成功");
+                  self.open = false;
+                  self.callback && self.callback();
+                }
+            })         
           }
         })
         return uploader
diff --git a/stdiet-ui/src/views/custom/nutritionalVideo/index.vue b/stdiet-ui/src/views/custom/nutritionalVideo/index.vue
index 22002f5f7..ffb99bc39 100644
--- a/stdiet-ui/src/views/custom/nutritionalVideo/index.vue
+++ b/stdiet-ui/src/views/custom/nutritionalVideo/index.vue
@@ -71,21 +71,23 @@
     <el-table v-loading="loading" :data="nutritionalVideoList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <!--<el-table-column label="视频分类ID" align="center" prop="cateId" />-->
-      <el-table-column label="封面" align="center" prop="coverUrl">
+      <el-table-column label="封面" align="center" prop="coverUrl" width="300">
         <template slot-scope="scope">
-          <el-image title="点击大图预览"
-          style="width: 200px; height: 200px"
+          <el-image
+          style="width: 300px; height: 200px"
           :src="scope.row.coverUrl"
           :preview-src-list="coverImageList">
           </el-image>
         </template>
       </el-table-column>
-      <el-table-column label="标题" align="center" prop="title" />
+      <el-table-column label="标题" align="center" prop="title" width="200"/>
       <el-table-column label="描述" align="center" prop="description" />
-      <el-table-column label="标签" align="center" prop="tags" />
-      <el-table-column label="显示状态" align="center" prop="showFlag">
+      <el-table-column label="标签" align="center" prop="tags" width="100"/>
+       <el-table-column label="分类" align="center" prop="cateName" width="100"/>
+       <el-table-column label="权限等级" align="center" prop="payLevelName" width="100"/>
+      <el-table-column label="显示状态" align="center" prop="showFlag" width="100">
         <template slot-scope="scope">
-          {{scope.row.showFlag == 1 ? '正常' : '屏蔽'}}
+          {{scope.row.showFlag == 1 ? '正常' : '不显示'}}
         </template>
       </el-table-column>
       <!--<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@@ -208,8 +210,8 @@
         this.loading = true;
         listNutritionalVideo(this.queryParams).then(response => {
           this.nutritionalVideoList = response.rows;
-        this.total = response.total;
-        this.loading = false;
+          this.total = response.total;
+          this.loading = false;
       });
       },
       // 取消按钮