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 e478d010f..6b0b9ceaa 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 @@ -367,13 +367,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); } @@ -387,20 +383,34 @@ public class WechatAppletController extends BaseController { 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()); + 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()); } - 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){ 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; + } } 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>