From 39b7bd04dc871134c332ab7396a2a6e7d7805a3a Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期四, 24 八月 2023 13:56:16 +0800
Subject: [PATCH] 图片多传和查看

---
 src/main/resources/templates/tr/hiddenDangerCheck/dangerReport/addDangerReportWholeProcess.html |  474 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 405 insertions(+), 69 deletions(-)

diff --git a/src/main/resources/templates/tr/hiddenDangerCheck/dangerReport/addDangerReportWholeProcess.html b/src/main/resources/templates/tr/hiddenDangerCheck/dangerReport/addDangerReportWholeProcess.html
index 7e11c4d..82b72c0 100644
--- a/src/main/resources/templates/tr/hiddenDangerCheck/dangerReport/addDangerReportWholeProcess.html
+++ b/src/main/resources/templates/tr/hiddenDangerCheck/dangerReport/addDangerReportWholeProcess.html
@@ -25,13 +25,57 @@
             position: absolute !important;
             color: #ef392b !important;
         }
+
+        #preFileList{
+            display: flex;
+            align-items: flex-start;
+            margin-top: 10px;
+        }
+        #postFileList{
+            display: flex;
+            align-items: flex-start;
+            margin-top: 10px;
+        }
+        .file-list-item1,.file-temp1,.file-list-item2,.file-temp2{
+            width: 100px;
+            margin-right: 10px;
+        }
+        [class^="file-list-item"] div:nth-child(1){
+            width: 100%;
+            overflow: hidden;
+            position: relative;
+        }
+        [class^="file-list-item"] div:nth-child(1) img{
+            width: 100px;
+            height: 100px;
+        }
+        [class^="file-list-item"] div:nth-child(1) .layui-badge1,.layui-badge2{
+            position: absolute;
+            left: 2px;
+            top: 2px;
+        }
+        [class^="file-list-item"] div:nth-child(2){
+            width: 100%;
+            height: 36px;
+            text-align: center;
+            line-height: 36px;
+            margin-top: 4px;
+        }
+        [class^="file-list-item"] div:nth-child(2) [class^="file-cancel"]{
+            width: 100%;
+            height: 36px;
+        }
+        [class^="file-list-item"] div:nth-child(2) [class^="file-cancel"]:hover{
+            background: #ED5565;
+            color: #fff;
+        }
     </style>
 </head>
 
 
 <body class="white-bg">
-<div class="wrapper wrapper-content animated fadeInRight ibox-content">
-    <form id="form" class="form-horizontal  wizard-big">
+<div class="wrapper wrapper-content animated fadeInRight ibox-content" style="height: 100%">
+    <form id="form" class="form-horizontal  wizard-big" style="height: 100%">
         <h1>隐患上报</h1>
         <fieldset>
             <h4 class="form-header h4">登记隐患信息</h4>
@@ -96,11 +140,24 @@
                 <label class="col-sm-3 control-label">隐患整改前照片:</label>
                 <div class="col-sm-8">
                     <input name="preRectifyPhoto" id="preRectifyPhoto" type="hidden">
-                    <button type="button" class="layui-btn" id="preRectifyPhotoUpload">上传</button>
-                    <div class="layui-upload-list">
-                        <img class="layui-upload-img" style="width: 92px; height: 92px;" id="thumbImgPreRectifyPhoto">
-                        <p id="msgTextPreRectifyPhoto"></p>
-                    </div>
+<!--                    <button type="button" class="layui-btn" id="preRectifyPhotoUpload">上传</button>-->
+<!--                    <div class="layui-upload-list">-->
+<!--                        <img class="layui-upload-img" style="width: 92px; height: 92px;" id="thumbImgPreRectifyPhoto">-->
+<!--                        <p id="msgTextPreRectifyPhoto"></p>-->
+<!--                    </div>-->
+                        <button type="button" class="layui-btn layui-btn-normal" id="preChooseList">选择文件(不超过3张)</button>
+                        <button type="button" class="layui-btn" id="preUpAction">确认上传(上传后不可修改)</button>
+<!--                        <div class="layui-upload-list">-->
+<!--                            <table class="layui-table">-->
+<!--                                <thead>-->
+<!--                                <tr><th>文件名</th>-->
+<!--                                    <th>状态</th>-->
+<!--                                    <th>操作</th>-->
+<!--                                </tr></thead>-->
+<!--                                <tbody id="preFileList"></tbody>-->
+<!--                            </table>-->
+<!--                        </div>-->
+                        <div id="preFileList"></div>
                 </div>
             </div>
 
@@ -340,11 +397,14 @@
                 <label class="col-sm-3 control-label">隐患整改后照片:</label>
                 <div class="col-sm-8">
                     <input name="postRectifyPhoto" id="postRectifyPhoto" type="hidden">
-                    <button type="button" class="layui-btn" id="postRectifyPhotoUpload">上传</button>
-                    <div class="layui-upload-list">
-                        <img class="layui-upload-img" style="width: 92px; height: 92px;" id="thumbImgPostRectifyPhoto">
-                        <p id="msgTextPostRectifyPhoto"></p>
-                    </div>
+<!--                    <button type="button" class="layui-btn" id="postRectifyPhotoUpload">上传</button>-->
+<!--                    <div class="layui-upload-list">-->
+<!--                        <img class="layui-upload-img" style="width: 92px; height: 92px;" id="thumbImgPostRectifyPhoto">-->
+<!--                        <p id="msgTextPostRectifyPhoto"></p>-->
+<!--                    </div>-->
+                    <button type="button" class="layui-btn layui-btn-normal" id="postChooseList">选择文件(不超过3张)</button>
+                    <button type="button" class="layui-btn" id="postUpAction">确认上传(上传后不可修改)</button>
+                    <div id="postFileList"></div>
                 </div>
             </div>
         </fieldset>
@@ -665,38 +725,157 @@
     /*区域/位置  选择 end*/
 
     <!--layui图片文件上传-->
-    layui.use('upload', function () {
-        var $ = layui.jquery
-            , upload = layui.upload;
-
-        //普通图片上传
-        var uploadInst = upload.render({
-            elem: '#preRectifyPhotoUpload'
-            , url: ctx + 'tr/upload'
-            , before: function (obj) {
-                //预读本地文件示例,不支持ie8
-                obj.preview(function (index, file, result) {
-                    $('#thumbImgPreRectifyPhoto').attr('src', result); //图片链接(base64)
-                });
-            }
-            , done: function (res) {
-                //如果上传失败
-                if (res.code > 0) {
-                    return layer.msg('上传失败');
-                }
-                //上传成功
-                $('#preRectifyPhoto').val(res.imageUrl);
-            }
-            , error: function () {
-                //演示失败状态,并实现重传
-                var msgText = $('#msgTextPreRectifyPhoto');
-                msgText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
-                msgText.find('.demo-reload').on('click', function () {
-                    uploadInst.upload();
-                });
+    // layui.use('upload', function () {
+    //     var $ = layui.jquery
+    //         , upload = layui.upload;
+    //
+    //     //普通图片上传
+    //     var uploadInst = upload.render({
+    //         elem: '#preRectifyPhotoUpload'
+    //         , url: ctx + 'tr/upload'
+    //         , before: function (obj) {
+    //             //预读本地文件示例,不支持ie8
+    //             obj.preview(function (index, file, result) {
+    //                 $('#thumbImgPreRectifyPhoto').attr('src', result); //图片链接(base64)
+    //             });
+    //         }
+    //         , done: function (res) {
+    //             //如果上传失败
+    //             if (res.code > 0) {
+    //                 return layer.msg('上传失败');
+    //             }
+    //             //上传成功
+    //             $('#preRectifyPhoto').val(res.imageUrl);
+    //         }
+    //         , error: function () {
+    //             //演示失败状态,并实现重传
+    //             var msgText = $('#msgTextPreRectifyPhoto');
+    //             msgText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
+    //             msgText.find('.demo-reload').on('click', function () {
+    //                 uploadInst.upload();
+    //             });
+    //         }
+    //     });
+    // });
+    layui.use('upload', function() {
+        var $ = layui.jquery;
+        upload = layui.upload;
+        var uploadList = {};
+        var urls = []
+        //多文件列表示例
+        var preFileListDom = $('#preFileList')
+        var uploadListIns = upload.render({
+            elem: '#preChooseList',
+            url: ctx + 'tr/upload' ,
+            accept: 'file',
+            multiple: true,
+            number: 3,
+            auto: false,
+            bindAction: '#preUpAction',
+            choose: function(obj) {
+                // 展示上传按钮
+                $('#preUpAction').show();
+                // 将每次选择的文件追加到文件队列
+                uploadList = obj.pushFile();
+                const len = preFileListDom.find('.file-list-item1').length;
+                // 还可以上传的文件数量
+                const limit = 3 - len;
+                var number = 0;
+                // 预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)
+                obj.preview(function(index, file, result){
+                    if (number < limit){
+                        number++;
+                        appendFile(index, file.name, result);
+                    }else{
+                        deleteTempFile(index)
+                    }
+                })
+            },
+            // before: function(obj){
+            //     layer.load(1);
+            // },
+            //上传完毕回调
+            //当文件全部被提交后,才触发
+            allDone: function (obj) {
+                layer.msg("已上传 "+obj.successful+" 个文件");
+                layer.closeAll('loading');
+                deleteTempFile(0)
+            },
+            done: function(res, index, upload){
+                preFileListDom.find('.file-temp1').each(function () {
+                    if (!res || res.code > 0){
+                        // 若上传失败,则直接移除
+                        return layer.msg('上传失败');
+                        $(this).remove();
+                    }else{
+                        //上传成功
+                        // 添加上传返回的数据到对应的文件中
+                        // var hidden = '<input type="hidden" name="path[]" value="'+res.imageUrl+'"/>';
+                        // $(this).append(hidden);
+                        // 修改预览文件样式
+                        $(this).removeClass('file-temp1');
+                        // $(this).find('.file-cancel').removeClass('layui-btn-primary');
+                        // $(this).find('.file-cancel').addClass('layui-btn-danger');
+                        // $(this).find('.file-cancel').val('删除');
+                        $(this).find('.file-cancel1').remove();
+                        $(this).find('.layui-badge1').remove();
+                        urls.push(res.imageUrl)
+                    }
+                    $('#preRectifyPhoto').val(urls.join(','));
+                })
+            },
+            error: function(index, upload) {
+                var tr = preFileListDom.find('tr#upload-' + index),
+                    tds = tr.children();
+                tds.eq(1).html('<span style="color: #FF5722;">上传失败</span>');
+                tds.eq(2).find('.demo-reload').removeClass('layui-hide'); //显示重传
             }
         });
+
+        // 预览选择的文件
+        function appendFile(index, name, result) {
+            const dom = '<div class="file-list-item1 file-temp1" data-index="'+index+'"><div><img src="'+result+'" alt="'+name+'"><span class="layui-badge1 layui-bg-blue">待上传</span></div>' +
+                '<div><input type="button" class="file-cancel1" value="删除"></div></div>';
+            preFileListDom.append(dom);
+            fileCancelEvent();
+        }
+        // 为待上传文件【取消】按钮添加点击事件
+        function fileCancelEvent() {
+            preFileListDom.find('.file-cancel1').each(function () {
+                const event = $._data($(this)[0],"events");
+                // 仅对未绑定事件的按钮进行绑定
+                if (!event || !event["click"]){
+                    $(this).click(function () {
+                        var fileDom = $(this).parent().parent();
+                        var index = fileDom.data('index');
+                        if (index){
+                            deleteTempFile(index);
+                        }
+                        fileDom.remove();
+                    })
+                }
+            })
+        }
+        // 删除待上传的文件(从文件队列中删除文件)
+        function deleteTempFile(index){
+            if (index === 0){
+                // 清空文件队列中所有数据
+                for (const key in uploadList) {
+                    delete uploadList[key];
+                }
+                // 隐藏上传按钮
+                $('#preUpAction').hide();
+            }else{
+                delete uploadList[index];
+                var number = Object.keys(uploadList).length;
+                // 若上传文件队列中无数据则隐藏上传按钮
+                if (number <= 0){
+                    $('#preUpAction').hide();
+                }
+            }
+        }
     });
+
     //隐患上报全流程 。(隐患上报部分) end
 
 
@@ -756,38 +935,150 @@
 
     /*隐患整改责任部门  选择 end*/
     <!--layui图片文件上传-->
-    layui.use('upload', function () {
-        var $ = layui.jquery
-            , upload = layui.upload;
+    // layui.use('upload', function () {
+    //     var $ = layui.jquery
+    //         , upload = layui.upload;
+    //
+    //     //普通图片上传
+    //     var uploadInst = upload.render({
+    //         elem: '#postRectifyPhotoUpload'
+    //         , url: ctx + 'tr/upload'
+    //         , before: function (obj) {
+    //             //预读本地文件示例,不支持ie8
+    //             obj.preview(function (index, file, result) {
+    //                 $('#thumbImgPostRectifyPhoto').attr('src', result); //图片链接(base64)
+    //             });
+    //         }
+    //         , done: function (res) {
+    //             //如果上传失败
+    //             if (res.code > 0) {
+    //                 return layer.msg('上传失败');
+    //             }
+    //             //上传成功
+    //             $('#postRectifyPhoto').val(res.imageUrl);
+    //         }
+    //         , error: function () {
+    //             //演示失败状态,并实现重传
+    //             var msgText = $('#msgTextPostRectifyPhoto');
+    //             msgText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
+    //             msgText.find('.demo-reload').on('click', function () {
+    //                 uploadInst.upload();
+    //             });
+    //         }
+    //     });
+    // });
 
-        //普通图片上传
-        var uploadInst = upload.render({
-            elem: '#postRectifyPhotoUpload'
-            , url: ctx + 'tr/upload'
-            , before: function (obj) {
-                //预读本地文件示例,不支持ie8
-                obj.preview(function (index, file, result) {
-                    $('#thumbImgPostRectifyPhoto').attr('src', result); //图片链接(base64)
-                });
-            }
-            , done: function (res) {
-                //如果上传失败
-                if (res.code > 0) {
-                    return layer.msg('上传失败');
-                }
-                //上传成功
-                $('#postRectifyPhoto').val(res.imageUrl);
-            }
-            , error: function () {
-                //演示失败状态,并实现重传
-                var msgText = $('#msgTextPostRectifyPhoto');
-                msgText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
-                msgText.find('.demo-reload').on('click', function () {
-                    uploadInst.upload();
-                });
+    layui.use('upload', function() {
+        var $ = layui.jquery;
+        upload = layui.upload;
+        var uploadList = {};
+        var urls = []
+        //多文件列表示例
+        var postFileListDom = $('#postFileList')
+        var uploadListIns = upload.render({
+            elem: '#postChooseList',
+            url: ctx + 'tr/upload' ,
+            accept: 'file',
+            multiple: true,
+            number: 3,
+            auto: false,
+            bindAction: '#postUpAction',
+            choose: function(obj) {
+                // 展示上传按钮
+                $('#postUpAction').show();
+                // 将每次选择的文件追加到文件队列
+                uploadList = obj.pushFile();
+                const len = postFileListDom.find('.file-list-item2').length;
+                // 还可以上传的文件数量
+                const limit = 3 - len;
+                var number = 0;
+                // 预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)
+                obj.preview(function(index, file, result){
+                    if (number < limit){
+                        number++;
+                        appendFile(index, file.name, result);
+                    }else{
+                        deleteTempFile(index)
+                    }
+                })
+            },
+            // before: function(obj){
+            //     layer.load(1);
+            // },
+            //上传完毕回调
+            //当文件全部被提交后,才触发
+            allDone: function (obj) {
+                layer.msg("已上传 "+obj.successful+" 个文件");
+                layer.closeAll('loading');
+                deleteTempFile(0)
+            },
+            done: function(res, index, upload){
+                postFileListDom.find('.file-temp2').each(function () {
+                    if (!res || res.code > 0){
+                        // 若上传失败,则直接移除
+                        return layer.msg('上传失败');
+                        $(this).remove();
+                    }else{
+                        $(this).removeClass('file-temp2');
+                        $(this).find('.file-cancel2').remove();
+                        $(this).find('.layui-badge2').remove();
+                        urls.push(res.imageUrl)
+                    }
+                    $('#postRectifyPhoto').val(urls.join(','));
+                })
+            },
+            error: function(index, upload) {
+                var tr = postFileListDom.find('tr#upload-' + index),
+                    tds = tr.children();
+                tds.eq(1).html('<span style="color: #FF5722;">上传失败</span>');
+                tds.eq(2).find('.demo-reload').removeClass('layui-hide'); //显示重传
             }
         });
+
+        // 预览选择的文件
+        function appendFile(index, name, result) {
+            const dom = '<div class="file-list-item2 file-temp2" data-index="'+index+'"><div><img src="'+result+'" alt="'+name+'"><span class="layui-badge2 layui-bg-blue">待上传</span></div>' +
+                '<div><input type="button" class="file-cancel2" value="删除"></div></div>';
+            postFileListDom.append(dom);
+            fileCancelEvent();
+        }
+        // 为待上传文件【取消】按钮添加点击事件
+        function fileCancelEvent() {
+            postFileListDom.find('.file-cancel2').each(function () {
+                const event = $._data($(this)[0],"events");
+                // 仅对未绑定事件的按钮进行绑定
+                if (!event || !event["click"]){
+                    $(this).click(function () {
+                        var fileDom = $(this).parent().parent();
+                        var index = fileDom.data('index');
+                        if (index){
+                            deleteTempFile(index);
+                        }
+                        fileDom.remove();
+                    })
+                }
+            })
+        }
+        // 删除待上传的文件(从文件队列中删除文件)
+        function deleteTempFile(index){
+            if (index === 0){
+                // 清空文件队列中所有数据
+                for (const key in uploadList) {
+                    delete uploadList[key];
+                }
+                // 隐藏上传按钮
+                $('#postUpAction').hide();
+            }else{
+                delete uploadList[index];
+                var number = Object.keys(uploadList).length;
+                // 若上传文件队列中无数据则隐藏上传按钮
+                if (number <= 0){
+                    $('#postUpAction').hide();
+                }
+            }
+        }
     });
+
     //隐患上报全流程 。(隐患整改部分) end
 
 
@@ -817,3 +1108,48 @@
 </script>
 </body>
 </html>
+<style>
+    #preFileList{
+        display: flex;
+        align-items: flex-start;
+        margin-top: 10px;
+    }
+    #postFileList{
+        display: flex;
+        align-items: flex-start;
+        margin-top: 10px;
+    }
+    .file-list-item1,.file-temp1,.file-list-item2,.file-temp2{
+        width: 100px;
+        margin-right: 10px;
+    }
+    [class^="file-list-item"] div:nth-child(1){
+        width: 100%;
+        overflow: hidden;
+        position: relative;
+    }
+    [class^="file-list-item"] div:nth-child(1) img{
+        width: 100px;
+        height: 100px;
+    }
+    [class^="file-list-item"] div:nth-child(1) .layui-badge1,.layui-badge2{
+        position: absolute;
+        left: 2px;
+        top: 2px;
+    }
+    [class^="file-list-item"] div:nth-child(2){
+        width: 100%;
+        height: 36px;
+        text-align: center;
+        line-height: 36px;
+        margin-top: 4px;
+    }
+    [class^="file-list-item"] div:nth-child(2) [class^="file-cancel"]{
+        width: 100%;
+        height: 36px;
+    }
+    [class^="file-list-item"] div:nth-child(2) [class^="file-cancel"]:hover{
+        background: #ED5565;
+        color: #fff;
+    }
+</style>
\ No newline at end of file

--
Gitblit v1.9.2