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 a9481895b..5600daf3a 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
@@ -38,14 +38,8 @@ public class SysNutritionalVideoController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(SysNutritionalVideo sysNutritionalVideo)
     {
-        /*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;*/
         startPage();
+        sysNutritionalVideo.setSortType(1);
         List<SysNutritionalVideo> list = sysNutritionalVideoService.selectSysNutritionalVideoList(sysNutritionalVideo, true);
         return getDataTable(list);
     }
@@ -72,7 +66,6 @@ public class SysNutritionalVideoController extends BaseController
     @PostMapping
     public AjaxResult add(@RequestBody SysNutritionalVideo sysNutritionalVideo)
     {
-        sysNutritionalVideo.setShowFlag(1);
         return toAjax(sysNutritionalVideoService.insertSysNutritionalVideo(sysNutritionalVideo));
     }
 
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 99d2fdfb9..55c5ee703 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
@@ -255,7 +255,7 @@ public class WechatAppletController extends BaseController {
         List<String> allUrlList = new ArrayList<>();
 
         for (String key : imageName) {
-            if (!"bodyImages".equals(key)) {
+            if(!"bodyImages".equals(key)){
                 allUrlList.addAll(downUrlList.get(key));
                 allImagesList.addAll(imageUrlMap.get(key));
             }
@@ -358,13 +358,9 @@ public class WechatAppletController extends BaseController {
      */
     @GetMapping(value = "/getVideoList")
     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;*/
         startPage();
         sysNutritionalVideo.setShowFlag(1);
+        sysNutritionalVideo.setSortType(2);
         List<SysNutritionalVideo> list = sysNutritionalVideoService.selectSysNutritionalVideoList(sysNutritionalVideo, true);
         return getDataTable(list);
     }
@@ -377,24 +373,38 @@ public class WechatAppletController extends BaseController {
     public AjaxResult getVideoDetailById(@RequestParam(value = "videoId") String videoId) {
         AjaxResult result = AjaxResult.success();
         NutritionalVideoResponse nutritionalVideoResponse = new NutritionalVideoResponse();
-        try {
-            GetPlayInfoResponseBody playInfoResponseBody = AliyunVideoUtils.getVideoVisitDetail(videoId);
-            GetVideoInfoResponseBody videoInfoResponseBody = AliyunVideoUtils.getVideoById(videoId);
-            List<GetPlayInfoResponseBody.GetPlayInfoResponseBodyPlayInfoListPlayInfo> playList = playInfoResponseBody.playInfoList.playInfo;
-            if (playList != null && playList.size() > 0) {
-                nutritionalVideoResponse.setPlayUrl(playList.get(0).getPlayURL());
-            }
-            nutritionalVideoResponse.setDescription(videoInfoResponseBody.video.getDescription());
-            nutritionalVideoResponse.setTags(videoInfoResponseBody.video.getTags());
-            nutritionalVideoResponse.setTitle(videoInfoResponseBody.video.getTitle());
-            //nutritionalVideoResponse.setCreateTime(sysNutritionalVideo.getCreateTime() == null ? "" : DateUtils.dateTime(sysNutritionalVideo.getCreateTime()));
-        } catch (Exception e) {
+        try{
+                SysNutritionalVideo sysNutritionalVideo = sysNutritionalVideoService.selectSysNutritionalVideByVideoId(videoId);
+                if(sysNutritionalVideo != null){
+                    GetPlayInfoResponseBody playInfoResponseBody = AliyunVideoUtils.getVideoVisitDetail(videoId);
+                    List<GetPlayInfoResponseBody.GetPlayInfoResponseBodyPlayInfoListPlayInfo> playList = playInfoResponseBody.playInfoList.playInfo;
+                    if(playList != null && playList.size() > 0){
+                        nutritionalVideoResponse.setPlayUrl(playList.get(0).getPlayURL());
+                    }
+                    nutritionalVideoResponse.setDescription(sysNutritionalVideo.getDescription());
+                    nutritionalVideoResponse.setTags(sysNutritionalVideo.getTags());
+                    nutritionalVideoResponse.setTitle(sysNutritionalVideo.getTitle());
+                    nutritionalVideoResponse.setPlayNum(sysNutritionalVideo.getPlayNum());
+                }
+        }catch (Exception e){
             e.printStackTrace();
         }
         result.put("videoDetail", nutritionalVideoResponse);
         return result;
     }
 
+    /**
+     * 更新播放次数
+     */
+    @GetMapping(value = "/updateVideoPlayNum")
+    public AjaxResult updateVideoPlayNum(@RequestParam(value = "videoId") String videoId) {
+        AjaxResult result = AjaxResult.error();
+        if(sysNutritionalVideoService.updateVideoPlayNum(videoId) > 0){
+            result = AjaxResult.success();
+        }
+        return result;
+    }
+
     @PostMapping("/login")
     public AjaxResult login(@RequestBody SysWxUserInfo sysWxUserInfo) {
         if (StringUtils.isEmpty(sysWxUserInfo.getOpenid())) {
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 5219d57f4..d131b9490 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
@@ -19,6 +19,9 @@ public class AliyunVideoUtils {
     //播放地址日期,30天
     public static final Long default_authTimeout = 2592000L;
 
+    //阿里云回收站分类ID
+    public static final Long default_delete_cateId = 1860L;
+
     public static final String search_field = "VideoId,Title,CoverURL,CateName,Tags,Status,Description,CreationTime";
 
     /**
@@ -154,6 +157,51 @@ public class AliyunVideoUtils {
         return client.searchMedia(searchMediaRequest);
     }
 
+    /**
+     * 更新视频消息
+     * @param videoId 视频ID必须
+     * @param title
+     * @param tags
+     * @param description
+     * @param cateId
+     * @return
+     * @throws Exception
+     */
+    public static String updateVideo(String videoId, String title, String tags, String description, Long cateId) throws Exception{
+        com.aliyun.vod20170321.Client client = AliyunVideoUtils.createClient();
+        if(StringUtils.isEmpty(videoId)){
+            return null;
+        }
+        UpdateVideoInfoRequest updateVideoInfoRequest = new UpdateVideoInfoRequest().setVideoId(videoId);
+        if(StringUtils.isNotEmpty(title)){
+            updateVideoInfoRequest.setTitle(title);
+        }
+        if(StringUtils.isNotEmpty(tags)){
+            updateVideoInfoRequest.setTags(tags);
+        }
+        if(StringUtils.isNotEmpty(description)){
+            updateVideoInfoRequest.setDescription(description);
+        }
+        if(cateId != null && cateId.longValue() > 0){
+            updateVideoInfoRequest.setCateId(cateId);
+        }
+        UpdateVideoInfoResponse updateVideoInfoResponse = client.updateVideoInfo(updateVideoInfoRequest);
+        if(updateVideoInfoResponse != null){
+            return updateVideoInfoResponse.body.requestId;
+        }
+        return null;
+    }
+
+    /**
+     * 将视频分类到回收站中
+     * @param videoId
+     * @return
+     * @throws Exception
+     */
+    public static String delVideo(String videoId) throws Exception{
+        return updateVideo(videoId, null,null,null, default_delete_cateId);
+    }
+
 
 
 
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 650fc3425..2cf25618e 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
@@ -65,6 +65,10 @@ public class SysNutritionalVideo extends BaseEntity
 
     private String payLevelName;
 
+    /** 播放次数,默认0 */
+    @Excel(name = "播放次数,默认0")
+    private Integer playNum;
+
     /** 删除标识,0未删除 1已删除,默认0 */
     private Integer delFlag;
 
@@ -72,4 +76,7 @@ public class SysNutritionalVideo extends BaseEntity
     private String fileName;
 
     private String key;
+
+    //排序方式 1 按照创建时间倒序 2按照优先级、时间倒序
+    private Integer sortType;
 }
\ No newline at end of file
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionalVideoResponse.java b/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionalVideoResponse.java
index 290cca9aa..36bb1cd5d 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionalVideoResponse.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionalVideoResponse.java
@@ -33,6 +33,8 @@ public class NutritionalVideoResponse implements Serializable {
     //播放链接
     public String playUrl;
 
+    //播放量
+    private Integer playNum;
 
     public String createTime;
 
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysNutritionalVideoMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysNutritionalVideoMapper.java
index 69d05035a..1fd6a2670 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysNutritionalVideoMapper.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysNutritionalVideoMapper.java
@@ -75,4 +75,17 @@ public interface SysNutritionalVideoMapper
      * @return
      */
     public int updateWxshowByIds(@Param("wxShow")Integer wxShow, @Param("array") Long[] ids);
+
+    /**
+     * 查询阿里云的视频ID,包含已删除的
+     * @param ids
+     * @return
+     */
+    public List<String> getVideoIdByIds(@Param("array") Long[] ids);
+
+    /**
+     * 更新视频播放量
+     * @return
+     */
+    public int updateVideoPlayNum(@Param("videoId")String videoId);
 }
\ 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 392469886..b288333b0 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
@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Map;
 
 import com.stdiet.custom.domain.SysNutritionalVideo;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 营养视频Service接口
@@ -81,4 +82,10 @@ public interface ISysNutritionalVideoService
      * @return
      */
     public int updateWxshowByIds(Integer wxShow, Long[] ids);
+
+    /**
+     * 更新视频播放量
+     * @return
+     */
+    public int updateVideoPlayNum(String videoId);
 }
\ No newline at end of file
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 328db2bf7..a8d3f4945 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
@@ -11,6 +11,7 @@ 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.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import com.stdiet.custom.mapper.SysNutritionalVideoMapper;
 import com.stdiet.custom.domain.SysNutritionalVideo;
@@ -90,7 +91,23 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
     public int updateSysNutritionalVideo(SysNutritionalVideo sysNutritionalVideo)
     {
         sysNutritionalVideo.setUpdateTime(DateUtils.getNowDate());
-        return sysNutritionalVideoMapper.updateSysNutritionalVideo(sysNutritionalVideo);
+        int row = sysNutritionalVideoMapper.updateSysNutritionalVideo(sysNutritionalVideo);
+        if(row > 0){
+            updateAliyunVideo(sysNutritionalVideo.getId());
+        }
+        return row;
+    }
+
+    @Async
+    public void updateAliyunVideo(Long id){
+        try{
+            SysNutritionalVideo sysNutritionalVideo = selectSysNutritionalVideoById(id);
+            if(sysNutritionalVideo != null && sysNutritionalVideo.getVideoId() != null){
+                AliyunVideoUtils.updateVideo(sysNutritionalVideo.getVideoId(), sysNutritionalVideo.getTitle(), sysNutritionalVideo.getTags(), sysNutritionalVideo.getDescription(), null);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
     }
 
     /**
@@ -102,7 +119,11 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
     @Override
     public int deleteSysNutritionalVideoByIds(Long[] ids)
     {
-        return sysNutritionalVideoMapper.deleteSysNutritionalVideoByIds(ids);
+        int row = sysNutritionalVideoMapper.deleteSysNutritionalVideoByIds(ids);
+        if(row > 0){
+            updateAliyunVideoCateId(ids);
+        }
+        return row;
     }
 
     /**
@@ -114,7 +135,12 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
     @Override
     public int deleteSysNutritionalVideoById(Long id)
     {
-        return sysNutritionalVideoMapper.deleteSysNutritionalVideoById(id);
+        int row = sysNutritionalVideoMapper.deleteSysNutritionalVideoById(id);
+        if(row > 0){
+            Long[] ids = {id};
+            updateAliyunVideoCateId(ids);
+        }
+        return row;
     }
 
     /**
@@ -187,7 +213,33 @@ public class SysNutritionalVideoServiceImpl implements ISysNutritionalVideoServi
      * @return
      */
     public int updateWxshowByIds(Integer wxShow, Long[] ids){
-        return sysNutritionalVideoMapper. updateWxshowByIds(wxShow, ids);
+        return sysNutritionalVideoMapper.updateWxshowByIds(wxShow, ids);
+    }
+
+    /**
+     * 将删除的阿里云视频放入回收站
+     * @param ids
+     */
+    @Async
+    public void updateAliyunVideoCateId(Long[] ids){
+        try {
+            List<String> videoIdList = sysNutritionalVideoMapper.getVideoIdByIds(ids);
+            if(videoIdList != null && videoIdList.size() > 0){
+                for (String videoId : videoIdList) {
+                    AliyunVideoUtils.delVideo(videoId);
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 更新视频播放量
+     * @return
+     */
+    public int updateVideoPlayNum(String videoId){
+        return sysNutritionalVideoMapper.updateVideoPlayNum(videoId);
     }
 
 }
\ 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 93e63a112..3d523409d 100644
--- a/stdiet-custom/src/main/resources/mapper/custom/SysNutritionalVideoMapper.xml
+++ b/stdiet-custom/src/main/resources/mapper/custom/SysNutritionalVideoMapper.xml
@@ -16,6 +16,7 @@
         <result property="showFlag"    column="show_flag"    />
         <result property="priorityLevel"    column="priority_level"    />
         <result property="payLevel"    column="pay_level"    />
+        <result property="playNum"    column="play_num"    />
         <result property="createTime"    column="create_time"    />
         <result property="createBy"    column="create_by"    />
         <result property="updateTime"    column="update_time"    />
@@ -27,11 +28,11 @@
     </resultMap>
 
     <sql id="selectSysNutritionalVideoVo">
-        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
+        select id, cate_id, video_id, cover_url, title, description, priority_level,pay_level,play_num,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">
-        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,
+        select snv.id, snv.cate_id, snv.video_id, snv.cover_url, snv.title, snv.description, snv.priority_level,snv.pay_level,snv.play_num,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
@@ -49,7 +50,12 @@
         <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
+        <if test="sortType == null or sortType == 1">
+            order by snv.create_time DESC
+        </if>
+        <if test="sortType != null and sortType == 2">
+            order by snv.priority_level DESC,snv.create_time DESC
+        </if>
     </select>
 
     <select id="selectSysNutritionalVideoById" parameterType="Long" resultMap="SysNutritionalVideoResult">
@@ -69,6 +75,7 @@
             <if test="tags != null">tags,</if>
             <if test="showFlag != null">show_flag,</if>
             <if test="priorityLevel != null">priority_level,</if>
+            <if test="playNum != null">play_num,</if>
             <if test="createTime != null">create_time,</if>
             <if test="createBy != null">create_by,</if>
             <if test="payLevel != null">pay_level,</if>
@@ -86,6 +93,7 @@
             <if test="tags != null">#{tags},</if>
             <if test="showFlag != null">#{showFlag},</if>
             <if test="priorityLevel != null">#{priorityLevel},</if>
+            <if test="playNum != null">#{playNum},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="payLevel != null">#{payLevel},</if>
@@ -107,6 +115,7 @@
             <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="playNum != null">play_num = #{playNum},</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>
@@ -139,4 +148,17 @@
         </foreach>
     </update>
 
+    <!-- 查询视频的阿里云ID,包含已删除的 -->
+    <select id="getVideoIdByIds" parameterType="String" resultType="String">
+        select video_id from sys_nutritional_video where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+
+    <!-- 更新视频播放量  -->
+    <update id="updateVideoPlayNum" parameterType="String">
+        update sys_nutritional_video set play_num = play_num + 1 where video_id = #{videoId} and del_flag = 0
+    </update>
+
 </mapper>
\ No newline at end of file
diff --git a/stdiet-ui/src/components/UploadVideo/index.vue b/stdiet-ui/src/components/UploadVideo/index.vue
index 8c2839191..5865fb7d9 100644
--- a/stdiet-ui/src/components/UploadVideo/index.vue
+++ b/stdiet-ui/src/components/UploadVideo/index.vue
@@ -5,7 +5,7 @@
             <el-input
                 type="textarea"
                 placeholder="请输入视频标题"
-                v-model="videoFrom.title"
+                v-model.trim="videoFrom.title"
                 maxlength="50" 
                 rows="1"
                 show-word-limit
@@ -15,7 +15,7 @@
           <el-input
                 type="textarea"
                 placeholder="请输入视频描述"
-                v-model="videoFrom.description"
+                v-model.trim="videoFrom.description"
                 maxlength="1000"
                 rows="3"
                 show-word-limit
@@ -98,7 +98,9 @@
         },
         callback: null,
         classifyList: [],
+        defaultClassify: null,
         payVideoLevelList:[],
+        defaultPayLevel: null,
         uploadAuth:{
             
         },
@@ -118,17 +120,23 @@
         uploader: null,
         statusText: '',
         fileType:['mp4','MP4'],
-        uploading: false
+        uploading: false,
       }
     },
     created(){
-      getAllClassify().then(response => {
+      /*getAllClassify().then(response => {
           if(response.code == 200){
               this.classifyList = response.data;
+              if(response.data != null && response.data.length > 0){
+                 this.defaultClassify = response.data[0].id;
+              }
           }
-      });
+      });*/
       this.getDicts("video_pay_level").then((response) => {
         this.payVideoLevelList = response.data;
+        if(response.data != null && response.data.length > 0){
+          this.defaultPayLevel =  response.data[0].dictValue;
+        }
       });
         
     },
@@ -136,22 +144,26 @@
       UploadFile
     },
     methods: {
-        showDialog(callback){
+        showDialog(classifyList, callback){
             this.resetVideoFrom();
             this.open = true;
             this.callback = callback;
+            this.classifyList = classifyList;
+            if(classifyList != null && classifyList.length > 0){
+                 this.defaultClassify = classifyList[0].id;
+            }
         },
         handleCoverUrl(url){
           this.videoFrom.coverUrl = url;
         },
         resetVideoFrom(){
             this.videoFrom = {
-                cateId: null,
+                cateId: this.defaultClassify ? this.defaultClassify : null,
                 coverUrl: null,
                 title: null,
                 description: null,
                 tags: null,
-                payLevel: 0,
+                payLevel: this.defaultPayLevel ? parseInt(this.defaultPayLevel) : null,
                 videoId: null,
                 wxShow: false
             };
diff --git a/stdiet-ui/src/views/custom/nutritionQuestion/index.vue b/stdiet-ui/src/views/custom/nutritionQuestion/index.vue
index d6d66c384..a417ab732 100644
--- a/stdiet-ui/src/views/custom/nutritionQuestion/index.vue
+++ b/stdiet-ui/src/views/custom/nutritionQuestion/index.vue
@@ -3,7 +3,7 @@
     <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"
+          v-model.trim="queryParams.key"
           placeholder="请输入关键词"
           clearable
           size="small"
@@ -62,6 +62,7 @@
         <el-button
           type="primary"
           size="mini"
+          icon="el-icon-question"
           @click="handleAskQuestion"
           v-hasPermi="['custom:askQuestion:list']"
         >问题解答</el-button>
diff --git a/stdiet-ui/src/views/custom/nutritionalVideo/index.vue b/stdiet-ui/src/views/custom/nutritionalVideo/index.vue
index 72729af36..5b2d6fc59 100644
--- a/stdiet-ui/src/views/custom/nutritionalVideo/index.vue
+++ b/stdiet-ui/src/views/custom/nutritionalVideo/index.vue
@@ -3,7 +3,7 @@
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="关键词" prop="key">
         <el-input
-          v-model="queryParams.key"
+          v-model.trim="queryParams.key"
           placeholder="请输入关键词"
           clearable
           size="small"
@@ -76,6 +76,15 @@
           v-hasPermi="['custom:nutritionalVideo:remove']"
         >删除</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          size="mini"
+          icon="el-icon-menu"
+          @click="handleVideoClassify"
+          v-hasPermi="['custom:videoClassify:list']"
+        >视频分类管理</el-button>
+      </el-col>
       <!--
       <el-col :span="1.5">
         <el-button
@@ -211,6 +220,11 @@
     </el-dialog>
 
     <UploadVideo ref="uploadVideoRef"></UploadVideo>
+
+    <!-- 视频分类管理 -->
+    <el-dialog title="视频分类列表" :visible.sync="videoClassifyOpen" width="800px" append-to-body @closed="getAllVideoClassify();">
+      <VideoClassify ref="videoClassifyRef"></VideoClassify>
+    </el-dialog>
   </div>
 </template>
 
@@ -219,6 +233,7 @@
   import {getAllClassify } from "@/api/custom/videoClassify";
   import UploadVideo from "@/components/UploadVideo";
   import UploadFile from "@/components/FileUpload/UploadFile";
+  import VideoClassify from "../videoClassify";
   export default {
     name: "NutritionalVideo",
     data() {
@@ -259,22 +274,21 @@
         //分类列表
         classifyList:[],
         //权限等级列表
-        payVideoLevelList:[]
+        payVideoLevelList:[],
+        //视频分类弹窗显示标识
+        videoClassifyOpen:false
+
       };
     },
     created() {
       this.getList();
-      getAllClassify().then(response => {
-          if(response.code == 200){
-              this.classifyList = response.data;
-          }
-      });
+      this.getAllVideoClassify();
       this.getDicts("video_pay_level").then((response) => {
         this.payVideoLevelList = response.data;
       });
     },
     components: {
-      UploadVideo,UploadFile
+      UploadVideo,UploadFile,VideoClassify
     },
     methods: {
       /** 查询营养视频列表 */
@@ -289,6 +303,14 @@
           this.loading = false;
       });
       },
+      //获取所有分类
+      getAllVideoClassify(){
+        getAllClassify().then(response => {
+          if(response.code == 200){
+            this.classifyList = response.data;
+          }
+        });
+      },
       // 取消按钮
       cancel() {
         this.open = false;
@@ -326,10 +348,13 @@
         this.multiple = !selection.length
       },
       clickUploadVideo(){
-        this.$refs.uploadVideoRef.showDialog(()=>{
+        this.$refs.uploadVideoRef.showDialog(this.classifyList, ()=>{
          this.getList();
         });
       },
+      handleVideoClassify(){
+        this.videoClassifyOpen = true;
+      },
       /** 新增按钮操作 */
       handleAdd() {
         this.reset();
diff --git a/stdiet-ui/src/views/custom/videoClassify/index.vue b/stdiet-ui/src/views/custom/videoClassify/index.vue
new file mode 100644
index 000000000..0a1ada151
--- /dev/null
+++ b/stdiet-ui/src/views/custom/videoClassify/index.vue
@@ -0,0 +1,275 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <!--<el-form-item label="分类名称" prop="cateName">
+        <el-input
+          v-model="queryParams.cateName"
+          placeholder="请输入分类名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="类型标识,0全部可看 1客户可看 2额外付费观看" prop="payFlag">
+        <el-input
+          v-model="queryParams.payFlag"
+          placeholder="请输入类型标识,0全部可看 1客户可看 2额外付费观看"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </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>
+      </el-form-item>-->
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['custom:videoClassify:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['custom:videoClassify:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['custom:videoClassify:remove']"
+        >删除</el-button>
+      </el-col>
+      <!--<el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['custom:videoClassify:export']"
+        >导出</el-button>
+      </el-col>-->
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="videoClassifyList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="分类名称" align="center" prop="cateName" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['custom:videoClassify:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['custom:videoClassify:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改视频分类对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="分类名称" prop="cateName">
+          <el-input v-model.trim="form.cateName" placeholder="请输入分类名称" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listVideoClassify, getVideoClassify, delVideoClassify, addVideoClassify, updateVideoClassify, exportVideoClassify } from "@/api/custom/videoClassify";
+
+  export default {
+    name: "VideoClassify",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: false,
+        // 总条数
+        total: 0,
+        // 视频分类表格数据
+        videoClassifyList: [],
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          cateName: null,
+          payFlag: null,
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+           cateName: [
+            { required: true, message: "分类名称不能为空", trigger: "blur" },
+          ],
+        }
+      };
+    },
+    created() {
+      this.getList();
+    },
+    methods: {
+      /** 查询视频分类列表 */
+      getList() {
+        this.loading = true;
+        listVideoClassify(this.queryParams).then(response => {
+          this.videoClassifyList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: null,
+          cateName: null,
+          payFlag: null,
+          createTime: null,
+          createBy: null,
+          updateTime: null,
+          updateBy: null,
+          delFlag: null
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!==1
+        this.multiple = !selection.length
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加视频分类";
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getVideoClassify(id).then(response => {
+          this.form = response.data;
+        this.open = true;
+        this.title = "修改视频分类";
+      });
+      },
+      /** 提交按钮 */
+      submitForm() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != null) {
+              updateVideoClassify(this.form).then(response => {
+                if (response.code === 200) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              }
+            });
+            } else {
+              addVideoClassify(this.form).then(response => {
+                if (response.code === 200) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              }
+            });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除视频分类编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delVideoClassify(ids);
+        }).then(() => {
+          this.getList();
+        this.msgSuccess("删除成功");
+      }).catch(function() {});
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        const queryParams = this.queryParams;
+        this.$confirm('是否确认导出所有视频分类数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportVideoClassify(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+      }).catch(function() {});
+      }
+    }
+  };
+</script>