zhuyiyi 6 ay önce
ebeveyn
işleme
70fde0ecac

+ 2 - 0
src/main/java/lingtao/net/bean/Bug.java

@@ -23,4 +23,6 @@ public class Bug {
     private Date createDate;
 
     private String answer;
+
+    private String images;
 }

+ 5 - 5
src/main/java/lingtao/net/service/ProductService.java

@@ -4059,11 +4059,11 @@ public class ProductService {
                 //工艺计算
                 if (!StringUtils.isEmpty(dto.getCraft())) {
                     List<String> craList = Arrays.asList(dto.getCraft());
-                    if (craList.contains("双面覆哑膜")) {
-                        for (Product product : priceList) {
-                            product.setPrice(Math.ceil(product.getPrice() * 1.3));
-                        }
-                    }
+//                    if (craList.contains("双面覆哑膜")) {
+//                        for (Product product : priceList) {
+//                            product.setPrice(Math.ceil(product.getPrice() * 1.3));
+//                        }
+//                    }
 
                     if (craList.contains("模切")) {
                         if (min < 3) {

+ 2 - 0
src/main/resources/mapper/BugMapper.xml

@@ -20,11 +20,13 @@
         (id,
          product,
          bugRemark,
+         images,
          createBy,
          createDate)
         VALUES (NULL,
                 #{product},
                 #{bugRemark},
+                #{images},
                 #{createBy},
                 now())
     </insert>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 3 - 0
src/main/webapp/js/alioss.js


+ 29 - 2
src/main/webapp/views/product/katie.jsp

@@ -68,8 +68,10 @@
             </div>
             <p>工艺</p>
             <div class="layui-input-block" style="display:inline-block;">
-                <input type="checkbox" name="craft" lay-filter="switch" value="双面覆哑膜" title="双面覆哑膜">
+                <input type="checkbox" class="craft_fm" name="craft" lay-filter="switch" value="双面覆哑膜" title="双面覆哑膜"
+                       checked>
                 <input type="checkbox" name="craft" lay-filter="switchMQ" value="模切" title="异形模切">
+                <input type="checkbox" name="craft" lay-filter="switchMQ" value="裁切" title="裁切" checked>
                 <input type="radio" name="craftSMJ" value="配双面胶" title="配双面胶" checked>
             </div>
             <hr>
@@ -182,7 +184,27 @@
 
         }
 
-        form.on('checkbox(switchMQ)', () => {
+        form.on('checkbox(switchMQ)', (data) => {
+            let craft = $("input[name='craft']:checked");
+            if (craft.length > 2) {
+                $(data.elem).next().attr("class", "layui-unselect layui-form-checkbox");
+                $(data.elem).prop("checked", false);
+                layer.msg('裁切-模切只能选[ 1 ]项!', {
+                    offset: ['300px', '300px']
+                }, {icon: 5});
+                return false;
+            }
+
+            setRemark();
+        })
+        form.on('checkbox(switch)', (data) => {
+            if (!data.elem.checked) {
+                layer.msg('不能取消 [覆膜] 工艺!', {offset: ['300px', '300px']}, function () {
+                });
+                $('.craft_fm').prop('checked', true);
+                form.render('checkbox');
+                return false;
+            }
             setRemark();
         })
 
@@ -221,6 +243,11 @@
                     arr.push($(this).val());
                 }
             });
+            if (arr.indexOf("模切") == -1 && arr.indexOf("裁切") == -1) {
+                layer.msg("模切-裁切必须选一个", {offset: ['300px', '300px']}, function () {
+                });
+                return false;
+            }
             $.ajax({
                 url: "${path}/getThanSum",
                 type: "GET",

+ 233 - 117
src/main/webapp/views/system/bug/addBug.jsp

@@ -1,126 +1,242 @@
 <%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+         pageEncoding="UTF-8" %>
+<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <!DOCTYPE html>
 <html>
 <head>
-<meta charset="UTF-8">
-<title>添加问题</title>
-<%@include file="/views/common.jsp"%>
-<link rel="stylesheet" href="${path}/static/css/formSelects-v4.css">
-<style>
-.layui-input,.layui-input-inline{
-	width:370px
-}
-.form .layui-form-label{
-	windth:100px;
-}
-.layui-upload-img{
-    height:200px;
-    width: 200px
-}
-</style>
+    <meta charset="UTF-8">
+    <title>添加问题</title>
+    <%@include file="/views/common.jsp" %>
+    <link rel="stylesheet" href="${path}/static/css/formSelects-v4.css">
+    <style>
+        .layui-input, .layui-input-inline {
+            width: 370px
+        }
+
+        .form .layui-form-label {
+            windth: 100px;
+        }
+
+        .layui-upload-img {
+            height: 200px;
+            width: 200px
+        }
+    </style>
 </head>
 <body>
-	<div style="padding: 20px; background-color: #F2F2F2;">
-		<div class="layui-row layui-col-space15">
-			<div class="layui-col-md3"></div>
-			<div class="layui-col-md6">
-				<div class="layui-card"
-					style="border-radius: 20px; border: 2px solid buttonface; box-shadow: 5px 5px 5px #F2F2F2 inset;">
-					<div class="layui-card-body">
-						<div class="layui-input-block layui-form" lay-filter="addUser"
-							style="margin-top: 30px">
-							<form class="layui-form form">
-								<div class="layui-form-item">
-									<label class="layui-form-label">问题页面</label>
-									<div class="layui-input-inline">
-										<input type="text" name="product" lay-verify="product"
-											placeholder="发现问题或不足的菜单" class="layui-input" id="product">
-									</div>
-								</div>
-								<div class="layui-form-item">
-									<label class="layui-form-label">情况说明</label>
-									<div class="layui-input-inline">
+<div style="padding: 20px; background-color: #F2F2F2;">
+    <div class="layui-row layui-col-space15">
+        <div class="layui-col-md3"></div>
+        <div class="layui-col-md6">
+            <div class="layui-card"
+                 style="border-radius: 20px; border: 2px solid buttonface; box-shadow: 5px 5px 5px #F2F2F2 inset;">
+                <div class="layui-card-body">
+                    <div class="layui-input-block layui-form" lay-filter="addUser"
+                         style="margin-top: 30px">
+                        <form class="layui-form form">
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">问题页面</label>
+                                <div class="layui-input-inline">
+                                    <input type="text" name="product" lay-verify="product"
+                                           placeholder="发现问题或不足的菜单" class="layui-input" id="product">
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">情况说明</label>
+                                <div class="layui-input-inline">
 										<textarea rows="8" cols="50" name="bugRemark"
-											placeholder="说明" id="bugRemark"></textarea>
-									</div>
-								</div>
-								<button type="button" class="layui-btn" id="test2">多图片上传</button>
-								<blockquote class="layui-elem-quote layui-quote-nm"
-									style="margin-top: 10px; width: 450px">
-									预览图:
-									<div class="layui-upload-list" id="demo2" style="width: 600px"></div>
-								</blockquote>
-								<div class="layui-form-item">
-									<div class="layui-input-block">
-										<button class="layui-btn" lay-submit="" lay-filter="enadd">提交</button>
-										<button type="reset" class="layui-btn layui-btn-primary">重置</button>
-									</div>
-								</div>
-							</form>
-						</div>
-					</div>
-				</div>
-				<div style="height: 50px"></div>
-			</div>
-			<div class="layui-col-md3"></div>
-		</div>
-	</div>
-	<script>
-		layui.use([ 'form', 'layer','upload'],function() {
-			var $ 	  	= layui.$,
-			 	form  	= layui.form, 
-				layer 	= layui.layer,
-				upload 	= layui.upload;
-
-
-			//监听提交
-			form.on('submit(enadd)', function(data) {
-				$.ajax({
-					url : '${path}/addBug',
-					dataType : 'json',
-					data : $(data.form).serialize(),
-					type : 'post',
-					success : function(data) {
-						if (data.code == 200) {
-							layer.msg('提交成功,谢谢您的反馈!', {
-								icon : 6,
-								offset : "auto",
-								time : 2000
-							});//提示框
-							$("#product").val("")
-							$("#bugRemark").val("")
-							form.render()
-						}else {
-							layer.msg('提交出错了!', {
-								icon : 5,
-								offset : "auto",
-								time : 2000
-							});//提示框
-						}
-					}
-				})
-				return false;
-			});
-			//多图片上传
-			upload.render({
-				elem: '#test2',
-				url: '${path}/bugUpload', 
-				multiple: true,
-				data: {},
-				before: function(obj){
-					//预读本地文件示例,不支持ie8
-					obj.preview(function(index, file, result){
-						$('#demo2').append('<img src="'+ result +'" alt="'+ file.name +'"class="layui-upload-img">')
-					});
-				},
-				done: function(res){
-					console.log(res)
-					//上传完毕
-				}
-			});
-		})
-	</script>
+                                                  placeholder="说明" id="bugRemark"></textarea>
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">上传图片</label>
+                                <div class="layui-input-inline">
+                                    <input type="file" id="uploaderImage"/>
+                                    <input name="images" type="hidden" id="images"/>
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label" style="color: #FF5722">点击图片可以删除</label>
+                                <div class="layui-input-inline" id="preview">
+
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <div class="layui-input-block">
+                                    <button class="layui-btn" lay-submit="" lay-filter="enadd">提交</button>
+                                    <button type="reset" class="layui-btn layui-btn-primary">重置</button>
+                                </div>
+                            </div>
+                        </form>
+                    </div>
+                </div>
+            </div>
+            <div style="height: 50px"></div>
+        </div>
+        <div class="layui-col-md3"></div>
+    </div>
+</div>
+<script src="${path}/js/alioss.js"></script>
+<script>
+    function delImage(index) {
+        layer.confirm('是否确认删除该图片', {
+            btn: ['确定', '关闭'] //按钮
+        }, function (layIndex) {
+            let textImage = $("#images").val();
+            let list = textImage == "" ? [] : textImage.split(",");
+            list.splice(index, 1);
+            $("#images").val(list.join(","));
+            previewImage($("#images").val());
+            layer.close(layIndex);
+        }, function () {
+        });
+
+    }
+
+    $("#images").val("");
+    $("#preview").empty();
+    const client = new OSS({
+        // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
+        region: "oss-cn-fuzhou",
+        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
+        accessKeyId: "LTAI5tE7wuNkeT9jZ42bQnyr",
+        accessKeySecret: "NnutvWhKl4HbQFSad3HosYbCkEkbjN",
+        // 填写存储空间名称。
+        bucket: "dfdiyfile",
+        endpoint: "https://oss-cn-fuzhou.aliyuncs.com",
+    });
+
+    function previewImage(textImage) {
+        let textImageList = textImage == "" ? [] : textImage.split(",");
+        let html = "";
+        textImageList.forEach((item, index) => {
+            if (item != "") {
+                html += "<img src='" + item + "' class='layui-upload-img' style='width: 50px;height: 50px;margin-right: 5px;' onclick='delImage(\"" + index + "\")'/>";
+            }
+        })
+        $("#preview").empty().append(html);
+
+    }
+
+
+    async function putObject(file) {
+        try {
+            let fileDir = dateFtt("yyyyMMdd", new Date())
+            let name = "priceImages/" + fileDir + "/" + guid() + getSuff(file.name);
+            // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
+            // 您可以通过自定义文件名(例如exampleobject.txt)或文件完整路径(例如exampledir/exampleobject.txt)的形式实现将数据上传到当前Bucket或Bucket中的指定目录。
+            // data对象可以自定义为file对象、Blob数据或者OSS Buffer。
+            const options = {
+                headers: {"Content-Type": "text/plain"},
+            };
+            const result = await client.put(name, file, options);
+            let textImage = $("#images").val();
+            let list = textImage == "" ? [] : textImage.split(",");
+            list.push(result.url);
+            $("#images").val(list.join(","));
+            previewImage($("#images").val());
+        } catch (e) {
+            console.log(e);
+        }
+    }
+
+    document.getElementById('uploaderImage').addEventListener('change', function (e) {
+        const file = e.target?.files[0];
+        putObject(file);
+
+        document.getElementById('uploaderImage').value = "";
+    });
+
+    function dateFtt(fmt, date) {
+        var o = {
+            "M+": date.getMonth() + 1,                 //月份
+            "d+": date.getDate(),                    //日
+            "h+": date.getHours(),                   //小时
+            "m+": date.getMinutes(),                 //分
+            "s+": date.getSeconds(),                 //秒
+            "q+": Math.floor((date.getMonth() + 3) / 3), //季度
+            "S": date.getMilliseconds()             //毫秒
+        };
+        if (/(y+)/.test(fmt)) {
+            fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
+        }
+        for (var k in o) {
+            if (new RegExp("(" + k + ")").test(fmt))
+                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
+
+        }
+        return fmt;
+
+    }
+
+    function getSuff(name) {
+        return name.substring(name.lastIndexOf("."));
+    }
+
+    function guid() {
+        return "xxxxxxxx-xxxx-4xxx-yxxx".replace(/[xy]/g, function (c) {
+            var r = (Math.random() * 16) | 0,
+                v = c == "x" ? r : (r & 0x3) | 0x8;
+            return v.toString(16);
+        });
+    }
+
+    layui.use(['form', 'layer', 'upload'], function () {
+        var $ = layui.$,
+            form = layui.form,
+            layer = layui.layer,
+            upload = layui.upload;
+
+
+        //监听提交
+        form.on('submit(enadd)', function (data) {
+            let fromData = $(data.form).serialize()
+            let data_list = fromData.split("&");
+            for (let i = 0; i < data_list.length; i++) {
+                let data_list_item = data_list[i].split("=");
+                if (data_list_item[0] == "product" && data_list_item[1] == "") {
+                    layer.msg('请填写问题页面', {icon: 6, offset: "auto", time: 2000});//提示框
+                    return false
+                }
+                if (data_list_item[0] == "bugRemark" && data_list_item[1] == "") {
+                    layer.msg('请填写问题详情', {icon: 6, offset: "auto", time: 2000});//提示框
+                    return false
+                }
+                if (data_list_item[0] == "images" && data_list_item[1] == "") {
+                    layer.msg('请上传图片', {icon: 6, offset: "auto", time: 2000});//提示框
+                    return false
+                }
+            }
+            $.ajax({
+                url: '${path}/addBug',
+                dataType: 'json',
+                data: fromData,
+                type: 'post',
+                success: function (data) {
+                    if (data.code == 200) {
+                        layer.msg('提交成功,谢谢您的反馈!', {
+                            icon: 6,
+                            offset: "auto",
+                            time: 2000
+                        });//提示框
+                        $("#product").val("")
+                        $("#bugRemark").val("")
+                        $("#images").val("");
+                        $("#preview").empty();
+                        form.render()
+                    } else {
+                        layer.msg('提交出错了!', {
+                            icon: 5,
+                            offset: "auto",
+                            time: 2000
+                        });//提示框
+                    }
+                }
+            })
+            return false;
+        });
+
+    })
+</script>
 </body>
 </html>

+ 213 - 39
src/main/webapp/views/system/bug/bug.jsp

@@ -1,51 +1,225 @@
 <%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+         pageEncoding="UTF-8" %>
+<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <!DOCTYPE html>
 <html>
 <head>
-<meta charset="UTF-8">
-<title>bug列表</title>
- <%@include file="/views/common.jsp"%>
-<style type="text/css">
-	.layui-table-cell{
-		height:32px;
-		line-height:32px;
-	}
-	.layui-table td, .layui-table th,.layui-table-header, .layui-table-page,.layui-table-tool, .layui-table-total, .layui-table-view{
-		border-color:#6666;
-		font-size:16px;
-	}
-</style> 
+    <meta charset="UTF-8">
+    <title>bug列表</title>
+    <%@include file="/views/common.jsp" %>
+    <style type="text/css">
+        .layui-table-cell {
+            height: 32px;
+            line-height: 32px;
+        }
+
+        .layui-table td, .layui-table th, .layui-table-header, .layui-table-page, .layui-table-tool, .layui-table-total, .layui-table-view {
+            border-color: #6666;
+            font-size: 16px;
+        }
+    </style>
 </head>
 
 <script type="text/html" id="toolbarDemo">
-  <div class="layui-btn-container demoTable">
-    <button class="layui-btn layui-btn-sm" lay-event="add" ><i class="layui-icon layui-icon-add-circle-fine" style="font-size:20px;font-weight:bold"></i> 提交问题</button>
-  </div>
+    <div class="layui-btn-container demoTable">
+        <button class="layui-btn layui-btn-sm" lay-event="add"><i class="layui-icon layui-icon-add-circle-fine"
+                                                                  style="font-size:20px;font-weight:bold"></i> 提交问题
+        </button>
+    </div>
 </script>
 <body>
-	<br>
-	<form class="layui-form">
-		<div class="layui-inline">
-			<label class="layui-form-label">真实姓名</label>
-			<div class="layui-input-inline">
-				<input type="text" id="realname" name="realname" placeholder="请输入真实姓名"
-					autocomplete="off" class="layui-input">
-			</div>
-		</div>
-		<div class="layui-inline">
-			<div class="layui-input-inline">
-				<button class="layui-btn" id="searchBtn" lay-submit
-					lay-filter="formDemo" style="margin-left: 15px">
-					<i class="layui-icon layui-icon-search"></i> 查询
-				</button>
-				<button type="reset" class="layui-btn layui-btn-primary">重置</button>
-			</div>
-		</div>
-	</form>
-	<table class="layui-hide" id="bugTable"lay-data="bugTable" lay-filter="bugTable"></table>
-	<script src="${path}/js/bug.js" charset="utf-8"></script>
+<br>
+<form class="layui-form">
+    <div class="layui-inline">
+        <label class="layui-form-label">真实姓名</label>
+        <div class="layui-input-inline">
+            <input type="text" id="realname" name="realname" placeholder="请输入真实姓名"
+                   autocomplete="off" class="layui-input">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <button class="layui-btn" id="searchBtn" lay-submit
+                    lay-filter="formDemo" style="margin-left: 15px">
+                <i class="layui-icon layui-icon-search"></i> 查询
+            </button>
+            <button type="reset" class="layui-btn layui-btn-primary">重置</button>
+        </div>
+    </div>
+</form>
+<table class="layui-hide" id="bugTable" lay-data="bugTable" lay-filter="bugTable"></table>
+<script type="text/html" id="toolDemo">
+    <div class="layui-clear-space">
+        {{#if(role_list.indexOf(1) != -1){}}
+        <a class="layui-btn layui-btn-xs" lay-event="edit">回复</a>
+        {{#}}}
+    </div>
+</script>
+
+<script>
+    let role_list = [${sessionScope.USER_SESSION.role}];
+
+    function showImages(imagesText, index = 0) {
+        if (imagesText == null || imagesText == '') {
+            return;
+        }
+        let list = imagesText.split(',');
+        if (list.length == 0) {
+            return;
+        }
+        let data = [];
+        for (let i = 0; i < list.length; i++) {
+            data.push({
+                "alt": "图片" + i,
+                "src": list[i],
+                "ptid": i
+            });
+        }
+        layer.photos({
+            photos: {
+                "title": "Photos Demo",
+                "start": index,
+                "data": data
+            }
+        });
+    }
+
+    layui.use(['element', 'table', 'laydate', 'form'], function () {
+        var $ = layui.jquery;
+        var table = layui.table;
+        var laydate = layui.laydate;
+        var element = layui.element;
+        var form = layui.form;
+
+        // 生成表格
+        table.render({
+            elem: '#bugTable',
+            url: '../../../getBugs',
+            toolbar: '#toolbarDemo',
+            title: '系统问题表',// 导出文件名
+            id: 'bugTableAll',
+            // 开启分页
+            page: {
+                layout: ['count', 'prev', 'page', 'next', 'skip', 'limit']
+            },
+            /*request : {
+                'limitName' : 'pageSize' // 分页每页条数默认字段改为pageSize
+            },*/
+            where: {
+                username: '',
+                realname: ''
+            },
+            cellMinWidth: 80, // 全局定义常规单元格的最小宽度,layui 2.2.1 新增
+            cols: [[{
+                field: 'createBy',
+                width: 150,
+                title: '提交者'
+            }, {
+                field: 'bugRemark',
+                title: '问题'
+            }, {
+                field: 'images',
+                title: '图片',
+                templet: function (d) {
+                    let html = ""
+                    let images = d.images;
+                    let list = !images ? [] : images?.split(',');
+                    list.forEach((item, index) => {
+                        html += '<img src="' + item + '" style="width: 20px;height: 20px;" onclick="showImages(\'' + images + '\',' + index + ')">'
+                    })
+                    return html;
+                }
+            }, {
+                field: 'answer',
+                title: '回复'
+            }, {
+                field: 'createDate',
+                title: '创建时间',
+                width: 180,
+                templet: function (d) {
+                    return d.createDate != null ? layui.util.toDateString(d.createDate, "yyyy-MM-dd HH:mm:ss") : "";
+                }
+            }, {fixed: 'right', title: '操作', width: 134, minWidth: 125, toolbar: '#toolDemo'}]],
+            parseData: function (res) { //将原始数据解析成 table 组件所规定的数据
+                return {
+                    "code": 0, //解析接口状态
+                    "msg": "", //解析提示文本
+                    "count": res.list.length,//解析数据长度
+                    "data": res.list//解析数据列表
+                };
+            }
+        });
+
+        //点击查询按钮,重载表格
+        $('#searchBtn').on('click', function () {
+            table.reload('bugTableAll', {
+                method: 'post',
+                where: {
+                    realname: $("#realname").val()
+                },
+                page: {
+                    curr: 1
+                }
+            });
+            return false;
+        });
+        // 监听头部工作栏的 新增用户
+        table.on('toolbar(bugTable)', function (obj) {
+            var checkStatus = table.checkStatus(obj.config.id);
+            switch (obj.event) {
+                case 'add':
+                    layer.open({
+                        type: 2,
+                        title: "提交问题",
+                        fix: false, //不固定
+                        maxmin: true,
+                        area: ['45%', '70%'],
+                        content: './addBug.jsp',
+                    });
+                    break;
+            }
+            ;
+        });
+        table.on('tool(bugTable)', function (option) {
+            console.log(option)
+            switch (option.event) {
+                case 'edit':
+                    layer.prompt({
+                        title: '请输入回复内容',
+                        formType: 2,
+                        value: option.data.answer
+                    }, function (value, index, elem) {
+                        console.log(value, index, elem)
+                        if (value === '') return elem.focus();
+
+                        $.ajax({
+                            url: '../../../updateBug',
+                            dataType: 'json',
+                            data: {
+                                id: option.data.id,
+                                answer: value
+                            },
+                            type: 'post',
+                            success: function (data) {
+                                if (data.code == 200) {
+                                    layer.msg('回复成功', {
+                                        icon: 6,
+                                        offset: "auto",
+                                        time: 2000
+                                    })
+                                    table.reload("bugTableAll");
+                                    layer.close(index);
+                                }
+                            }
+                        })
+                        // 关闭 prompt
+                    });
+                    break;
+            }
+        })
+    });
+
+</script>
 
 </body>
 </html>

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor