From 43fa0ec4dc02c2bb1a2ac5e9eea81cae4d2cb11d Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Fri, 17 Dec 2021 16:08:18 +0800 Subject: [PATCH] Merge branch 'master' of http://120.27.238.55:7000/r/xc-video --- src/main/resources/templates/febs/views/video/video/video-add.html | 413 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 303 insertions(+), 110 deletions(-) diff --git a/src/main/resources/templates/febs/views/video/video/video-add.html b/src/main/resources/templates/febs/views/video/video/video-add.html index da6eb48..a0051eb 100644 --- a/src/main/resources/templates/febs/views/video/video/video-add.html +++ b/src/main/resources/templates/febs/views/video/video/video-add.html @@ -1,80 +1,90 @@ <style> - #user-add { + #video-add { padding: 20px 25px 25px 0; } - #user-add .layui-treeSelect .ztree li a, .ztree li span { + #video-add .layui-treeSelect .ztree li a, .ztree li span { margin: 0 0 2px 3px !important; } - #user-add #data-permission-tree-block { + #video-add #data-permission-tree-block { border: 1px solid #eee; border-radius: 2px; padding: 3px 0; } - #user-add .layui-treeSelect .ztree li span.button.switch { + #video-add .layui-treeSelect .ztree li span.button.switch { top: 1px; left: 3px; } + #video-add .upload { + cursor: pointer; + } </style> -<div class="layui-fluid" id="user-add"> - <form class="layui-form" action="" lay-filter="user-add-form"> +<div class="layui-fluid" id="video-add"> + <form class="layui-form" action="" lay-filter="video-add-form"> <div class="layui-form-item"> - <label class="layui-form-label febs-form-item-require">用户名:</label> + <div class="layui-col-md6"> + <label class="layui-form-label febs-form-item-require">视频标题:</label> + <div class="layui-input-block"> + <input type="text" name="title" minlength="2" maxlength="10" lay-verify="range" + autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-col-md6"> + <label class="layui-form-label febs-form-item-require">视频分类:</label> + <div class="layui-input-block" id="video-cate"> + </div> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label">简介:</label> <div class="layui-input-block"> - <input type="text" name="username" minlength="2" maxlength="10" lay-verify="range|username" - autocomplete="off" class="layui-input"> + <textarea name="intro" autocomplete="off" placeholder="请输入简介" class="layui-textarea"></textarea> </div> </div> <div class="layui-form-item"> - <label class="layui-form-label">手机:</label> + <label class="layui-form-label">缩略图:</label> <div class="layui-input-block"> - <input type="tel" name="mobile" lay-verify="phone" autocomplete="off" class="layui-input"> + <div class="layui-upload"> + <button type="button" class="layui-btn" id="thumbUpload">上传图片</button> + <div class="layui-upload-list"> + <img class="layui-upload-img" id="thumb" style="width: 150px;"/> + <input class="layui-input febs-hide" name="thumb" autocomplete="off" /> + </div> + </div> </div> </div> + <div class="layui-form-item"> - <label class="layui-form-label">邮箱:</label> + <label class="layui-form-label febs-form-item-require">章节:</label> <div class="layui-input-block"> - <input type="text" name="email" lay-verify="email" maxlength="50" autocomplete="off" - class="layui-input"> + <button class="layui-btn" type="button" id="addItem">新增章节</button> </div> </div> <div class="layui-form-item"> - <label class="layui-form-label febs-form-item-require">角色:</label> + <label class="layui-form-label"></label> <div class="layui-input-block"> - <select name="roleId" - lay-verify="required" - xm-select-direction="down" - xm-select="user-add-role" - xm-select-skin="default"> - </select> + <table class="layui-table"> + <thead> + <tr> + <th>章节标题</th> + <th>缩略图</th> + <th>资源名称</th> + <th>操作</th> + </tr> + </thead> + <tbody id="itemList"> + </tbody> + </table> </div> </div> + <div class="layui-form-item"> - <label class="layui-form-label">部门:</label> + <label class="layui-form-label febs-form-item-require">是否免费:</label> <div class="layui-input-block"> - <input type="text" name="deptId" id="user-add-dept" class="layui-input"> + <input type="radio" name="isFree" value="1" title="免费" checked> + <input type="radio" name="isFree" value="2" title="会员"> </div> </div> - <div class="layui-form-item"> - <label class="layui-form-label febs-form-item-require">状态:</label> - <div class="layui-input-block"> - <input type="radio" name="status" value="1" title="有效" checked=""> - <input type="radio" name="status" value="0" title="禁用"> - </div> - </div> - <div class="layui-form-item"> - <label class="layui-form-label febs-form-item-require">性别:</label> - <div class="layui-input-block"> - <input type="radio" name="sex" value="0" title="男性"> - <input type="radio" name="sex" value="1" title="女性"> - <input type="radio" name="sex" value="2" title="保密" checked=""> - </div> - </div> - <div class="layui-form-item"> - <label class="layui-form-label">数据权限:</label> - <div class="layui-input-block" id="data-permission-tree-block"> - <div class="data-permission-tree" lay-filter="dataPermissionTree" style="margin-left: 1rem"></div> - </div> - </div> + <div class="layui-form-item layui-form-text"> <label class="layui-form-label">备注:</label> <div class="layui-input-block"> @@ -82,99 +92,282 @@ </div> </div> <div class="layui-form-item febs-hide"> - <button class="layui-btn" lay-submit="" lay-filter="user-add-form-submit" id="submit"></button> + <button class="layui-btn" lay-submit="" lay-filter="video-add-form-submit" id="submit"></button> <button type="reset" class="layui-btn" id="reset"></button> </div> </form> </div> -<script> - layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree'], function () { +<script type="text/html" id="tableRowTemplate"> + {{# layui.each(d, function(index, item){ }} + <tr> + <th> + <input type="text" class="febs-hide" name="sourceId" value="{{item.id}}"/> + <input type="text" class="layui-input" name="name" placeholder="" value=""/> + </th> + <th> + <div class="upload{{item.id}}"> + {{# if(!item.thumb || item.thumb == ''){ }} + <img class="layui-upload-img item-img febs-hide" src="" style="width: 150px;"/> + <button class="layui-btn layui-btn-xs" type="button">点击上传</button> + <input type="text" class="febs-hide" autocomplete="off" name="itemThumb" /> + {{# } else { }} + <img class="layui-upload-img item-img" src="{{item.thumb}}" style="width: 150px;"/> + <button class="layui-btn layui-btn-xs febs-hide" type="button">点击上传</button> + <input type="text" class="febs-hide" autocomplete="off" name="itemThumb" /> + {{# } }} + </div> + </th> + <th>{{item.name}}</th> + <th> + <button class="layui-btn layui-btn-xs layui-btn-danger item-delete" type="button">删除</button> + </th> + </tr> + {{# }); }} +</script> + +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree', 'upload', 'xmSelect', 'laytpl', 'table'], function () { var $ = layui.$, febs = layui.febs, layer = layui.layer, - formSelects = layui.formSelects, - treeSelect = layui.treeSelect, form = layui.form, - eleTree = layui.eleTree, - $view = $('#user-add'), + table = layui.table, + $view = $('#video-add'), + upload = layui.upload, validate = layui.validate, - _deptTree; + laytpl = layui.laytpl, + tableUpload, + templateHtml = tableRowTemplate.innerHTML, + $itemList = $("#itemList"); form.verify(validate); form.render(); - formSelects.render(); - renderDeptTree(); + // 已添加的item数据 + var itemData = []; + var videoCate = xmSelect.render({ + el: '#video-cate', + language: 'zn', + prop : { + value : 'id' + }, + data: [] + }) - treeSelect.render({ - elem: $view.find('#user-add-dept'), - type: 'get', - data: ctx + 'dept/select/tree', - placeholder: '请选择', - search: false - }); + febs.get(ctx + 'video/categoryTree', null, function(res) { + videoCate.update({ + data : res.data, + autoRow: true, + }); + }) - function renderDeptTree() { - _deptTree = eleTree.render({ - elem: $view.find('.data-permission-tree'), - url: ctx + 'dept/tree', - accordion: true, - highlightCurrent: true, - showCheckbox: true, - checkStrictly: true, - renderAfterExpand: false, - request: { - name: 'name', - key: "id", - checked: "checked", - data: 'data' + $("#addItem").on('click', function() { + febs.modal.open('选择视频资源', 'video/source/select/list', { + area: $(window).width() <= 750 ? '90%' : '50%', + offset: '30px', + btn: ['提交', '取消'], + yes: function (index, layero) { + var selectData = table.checkStatus('videoSourceSelectTable').data; + + // 去重 + var noRepeatData = []; + if (itemData.length != 0) { + for (var i = 0; i < selectData.length; i++) { + var flag = true; + for(var j = 0; j < itemData.length; j++) { + if (selectData[i].id == itemData[j].id) { + flag = false; + break; + } + } + + if (flag) { + noRepeatData.push(selectData[i]); + } + } + + } else { + noRepeatData = selectData; + } + + if (noRepeatData.length > 0) { + itemData = itemData.concat(noRepeatData); + laytpl(templateHtml).render(noRepeatData, function(html) { + $itemList.append(html); + }) + + for (var i = 0; i < noRepeatData.length; i++) { + bindUpload(noRepeatData[i].id); + } + } +`` + deleteUnBind(); + deleteBind(); + layer.close(layer.index); }, - response: { - statusName: "code", - statusCode: 200, - dataName: "data" + btn2: function () { + layer.close(layer.index); } }); - return _deptTree; - } + }); - formSelects.config('user-add-role', { - searchUrl: ctx + 'role', - response: { - statusCode: 200 - }, - beforeSuccess: function (id, url, searchVal, result) { - var data = result.data; - var tranData = []; - for (var i = 0; i < data.length; i++) { - tranData.push({ - name: data[i].roleName, - value: data[i].roleId - }) + upload.render({ + elem: '#thumbUpload' + ,url: 'common/upload' + ,before: function(obj){ + //预读本地文件示例,不支持ie8 + obj.preview(function(index, file, result){ + $('#thumb').attr('src', result); + }); + layer.msg('上传中', {icon: 16, time: 0}); + } + ,done: function(res){ + //如果上传失败 + if(res.code != 200){ + return layer.msg('上传失败'); } - result.data = tranData; - return result; - }, - error: function (id, url, searchVal, err) { - console.error(err); - febs.alert.error('获取角色列表失败'); + + $('#thumb').next().val(res.data[0]) + layer.msg('上传成功', {icon: 1}); + } + ,error: function(){ + layer.msg('上传失败'); } }); - form.on('submit(user-add-form-submit)', function (data) { - var checked = _deptTree.getChecked(false, true); - var deptIds = []; - layui.each(checked, function (key, item) { - deptIds.push(item.id) + // 表格中的图片上传 + function bindUpload(id) { + upload.render({ + elem: '.upload' + id + ,url: ctx + 'common/upload' //改成您自己的上传接口 + // ,accept: 'file' + ,before: function(obj){ + var item = this.item; + var $button = $(item).find("button"); + var $img = $(item).find('img'); + + // 如果img标签内没有src,说明没有上传图片,故此时显示的是button,所以需要操作一遍显示隐藏 + if (!$img.attr("src")) { + $button.addClass("febs-hide"); + $img.removeClass("febs-hide"); + } + + obj.preview(function(index, file, result){ + $img.attr('src', result); + }); + + layer.msg('上传中', {icon: 16, time: 0}); + } + ,done: function(res){ + var item = this.item; + var $itemThumb = $(item).find('input[name="itemThumb"]'); + var $button = $(item).find("button"); + var $img = $(item).find('img'); + + //如果上传失败 + if(res.code !== 200){ + layer.msg('上传失败'); + // 上传失败则重置 + $button.removeClass("febs-hide"); + $img.addClass("febs-hide"); + $img.attr('src', ''); + return + } + $itemThumb.val(res.data[0]); + layer.msg('上传完毕', {icon: 1}); + } + ,error: function(){ + return layer.msg('上传失败'); + } }); - data.deptIds = deptIds.join(","); - febs.post(ctx + 'user', data.field, function () { - layer.closeAll(); - febs.alert.success('新增用户成功,初始密码为 1234qwer'); - $('#febs-user').find('#query').click(); + } + + form.on('submit(video-add-form-submit)', function (data) { + var $tr = $("#itemList").find("tr"); + var itemLength = $tr.length; + if (itemLength == 0) { + layer.msg('请添加章节!'); + return; + } + + var cateIds = videoCate.getValue('value'); + if (cateIds.length <= 0) { + febs.alert.warn('至少选择一个目录'); + return false; + } + + var itemData = []; + $tr.each(function() { + var data = {}; + var sourceId = $(this).find("input[name = 'sourceId']").val(); + var videoItemName = $(this).find("input[name = 'name']").val(); + var itemThumb = $(this).find("input[name = 'itemThumb']").val(); + + data.sourceId = sourceId; + data.name = videoItemName; + data.thumb = itemThumb; + itemData.push(data); }); + + if (!data.field.thumb) { + febs.alert.warn('未上传缩略图'); + return; + } + + var field = {}; + field.items = itemData; + field.title = data.field.title; + field.cateIds = cateIds.join(","); + field.thumb = data.field.thumb; + field.isFree = data.field.isFree; + field.intro = data.field.intro; + console.log(field); + + $.ajax({ + url : ctx + 'video/video/add', + type : "post", + dataType : "json", + contentType : "application/json", + data : JSON.stringify(field), + success : function(res) { + console.log(res) + if (res.code != 200) { + febs.alert.warn(res.message); + return; + } + febs.alert.success('新增成功'); + $('#febs-video').find('#query').click(); + layer.closeAll(); + }, + error : function(err) { + layer.msg("请求错误"); + } + }) return false; }); + + function deleteBind() { + $(".item-delete").each(function(index, element) { + $(this).on("click", function() { + var $tr = $(this).parents("tr"); + var id = $tr.find("input[name='sourceId']").val(); + for (var i = 0; i < itemData.length; i++) { + if (itemData[i].id == id) { + itemData.splice(i, 1); + break; + } + } + + $tr.remove(); + }); + }) + } + + function deleteUnBind() { + $(".item-delete").each(function(index, element) { + $(this).unbind('click'); + }) + } }); </script> \ No newline at end of file -- Gitblit v1.9.1