addBug.jsp 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8" %>
  3. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta charset="UTF-8">
  8. <title>添加问题</title>
  9. <%@include file="/views/common.jsp" %>
  10. <link rel="stylesheet" href="${path}/static/css/formSelects-v4.css">
  11. <style>
  12. .layui-input, .layui-input-inline {
  13. width: 370px
  14. }
  15. .form .layui-form-label {
  16. windth: 100px;
  17. }
  18. .layui-upload-img {
  19. height: 200px;
  20. width: 200px
  21. }
  22. </style>
  23. </head>
  24. <body>
  25. <div style="padding: 20px; background-color: #F2F2F2;">
  26. <div class="layui-row layui-col-space15">
  27. <div class="layui-col-md3"></div>
  28. <div class="layui-col-md6">
  29. <div class="layui-card"
  30. style="border-radius: 20px; border: 2px solid buttonface; box-shadow: 5px 5px 5px #F2F2F2 inset;">
  31. <div class="layui-card-body">
  32. <div class="layui-input-block layui-form" lay-filter="addUser"
  33. style="margin-top: 30px">
  34. <form class="layui-form form">
  35. <div class="layui-form-item">
  36. <label class="layui-form-label">问题页面</label>
  37. <div class="layui-input-inline">
  38. <input type="text" name="product" lay-verify="product"
  39. placeholder="发现问题或不足的菜单" class="layui-input" id="product">
  40. </div>
  41. </div>
  42. <div class="layui-form-item">
  43. <label class="layui-form-label">情况说明</label>
  44. <div class="layui-input-inline">
  45. <textarea rows="8" cols="50" name="bugRemark"
  46. placeholder="说明" id="bugRemark"></textarea>
  47. </div>
  48. </div>
  49. <div class="layui-form-item">
  50. <label class="layui-form-label">上传图片</label>
  51. <div class="layui-input-inline">
  52. <input type="file" id="uploaderImage"/>
  53. <input name="images" type="hidden" id="images"/>
  54. </div>
  55. </div>
  56. <div class="layui-form-item">
  57. <label class="layui-form-label" style="color: #FF5722">点击图片可以删除</label>
  58. <div class="layui-input-inline" id="preview">
  59. </div>
  60. </div>
  61. <div class="layui-form-item">
  62. <div class="layui-input-block">
  63. <button class="layui-btn" lay-submit="" lay-filter="enadd">提交</button>
  64. <button type="reset" class="layui-btn layui-btn-primary">重置</button>
  65. </div>
  66. </div>
  67. </form>
  68. </div>
  69. </div>
  70. </div>
  71. <div style="height: 50px"></div>
  72. </div>
  73. <div class="layui-col-md3"></div>
  74. </div>
  75. </div>
  76. <script src="${path}/js/alioss.js"></script>
  77. <script>
  78. function delImage(index) {
  79. layer.confirm('是否确认删除该图片', {
  80. btn: ['确定', '关闭'] //按钮
  81. }, function (layIndex) {
  82. let textImage = $("#images").val();
  83. let list = textImage == "" ? [] : textImage.split(",");
  84. list.splice(index, 1);
  85. $("#images").val(list.join(","));
  86. previewImage($("#images").val());
  87. layer.close(layIndex);
  88. }, function () {
  89. });
  90. }
  91. $("#images").val("");
  92. $("#preview").empty();
  93. const client = new OSS({
  94. // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  95. region: "oss-cn-fuzhou",
  96. // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  97. accessKeyId: "LTAI5tE7wuNkeT9jZ42bQnyr",
  98. accessKeySecret: "NnutvWhKl4HbQFSad3HosYbCkEkbjN",
  99. // 填写存储空间名称。
  100. bucket: "dfdiyfile",
  101. endpoint: "https://oss-cn-fuzhou.aliyuncs.com",
  102. });
  103. function previewImage(textImage) {
  104. let textImageList = textImage == "" ? [] : textImage.split(",");
  105. let html = "";
  106. textImageList.forEach((item, index) => {
  107. if (item != "") {
  108. html += "<img src='" + item + "' class='layui-upload-img' style='width: 50px;height: 50px;margin-right: 5px;' onclick='delImage(\"" + index + "\")'/>";
  109. }
  110. })
  111. $("#preview").empty().append(html);
  112. }
  113. async function putObject(file) {
  114. try {
  115. let fileDir = dateFtt("yyyyMMdd", new Date())
  116. let name = "priceImages/" + fileDir + "/" + guid() + getSuff(file.name);
  117. // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
  118. // 您可以通过自定义文件名(例如exampleobject.txt)或文件完整路径(例如exampledir/exampleobject.txt)的形式实现将数据上传到当前Bucket或Bucket中的指定目录。
  119. // data对象可以自定义为file对象、Blob数据或者OSS Buffer。
  120. const options = {
  121. headers: {"Content-Type": "text/plain"},
  122. };
  123. const result = await client.put(name, file, options);
  124. let textImage = $("#images").val();
  125. let list = textImage == "" ? [] : textImage.split(",");
  126. list.push(result.url);
  127. $("#images").val(list.join(","));
  128. previewImage($("#images").val());
  129. } catch (e) {
  130. console.log(e);
  131. }
  132. }
  133. document.getElementById('uploaderImage').addEventListener('change', function (e) {
  134. const file = e.target?.files[0];
  135. putObject(file);
  136. document.getElementById('uploaderImage').value = "";
  137. });
  138. function dateFtt(fmt, date) {
  139. var o = {
  140. "M+": date.getMonth() + 1, //月份
  141. "d+": date.getDate(), //日
  142. "h+": date.getHours(), //小时
  143. "m+": date.getMinutes(), //分
  144. "s+": date.getSeconds(), //秒
  145. "q+": Math.floor((date.getMonth() + 3) / 3), //季度
  146. "S": date.getMilliseconds() //毫秒
  147. };
  148. if (/(y+)/.test(fmt)) {
  149. fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
  150. }
  151. for (var k in o) {
  152. if (new RegExp("(" + k + ")").test(fmt))
  153. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  154. }
  155. return fmt;
  156. }
  157. function getSuff(name) {
  158. return name.substring(name.lastIndexOf("."));
  159. }
  160. function guid() {
  161. return "xxxxxxxx-xxxx-4xxx-yxxx".replace(/[xy]/g, function (c) {
  162. var r = (Math.random() * 16) | 0,
  163. v = c == "x" ? r : (r & 0x3) | 0x8;
  164. return v.toString(16);
  165. });
  166. }
  167. layui.use(['form', 'layer', 'upload'], function () {
  168. var $ = layui.$,
  169. form = layui.form,
  170. layer = layui.layer,
  171. upload = layui.upload;
  172. //监听提交
  173. form.on('submit(enadd)', function (data) {
  174. let fromData = $(data.form).serialize()
  175. let data_list = fromData.split("&");
  176. for (let i = 0; i < data_list.length; i++) {
  177. let data_list_item = data_list[i].split("=");
  178. if (data_list_item[0] == "product" && data_list_item[1] == "") {
  179. layer.msg('请填写问题页面', {icon: 6, offset: "auto", time: 2000});//提示框
  180. return false
  181. }
  182. if (data_list_item[0] == "bugRemark" && data_list_item[1] == "") {
  183. layer.msg('请填写问题详情', {icon: 6, offset: "auto", time: 2000});//提示框
  184. return false
  185. }
  186. if (data_list_item[0] == "images" && data_list_item[1] == "") {
  187. layer.msg('请上传图片', {icon: 6, offset: "auto", time: 2000});//提示框
  188. return false
  189. }
  190. }
  191. $.ajax({
  192. url: '${path}/addBug',
  193. dataType: 'json',
  194. data: fromData,
  195. type: 'post',
  196. success: function (data) {
  197. if (data.code == 200) {
  198. layer.msg('提交成功,谢谢您的反馈!', {
  199. icon: 6,
  200. offset: "auto",
  201. time: 2000
  202. });//提示框
  203. $("#product").val("")
  204. $("#bugRemark").val("")
  205. $("#images").val("");
  206. $("#preview").empty();
  207. form.render()
  208. } else {
  209. layer.msg('提交出错了!', {
  210. icon: 5,
  211. offset: "auto",
  212. time: 2000
  213. });//提示框
  214. }
  215. }
  216. })
  217. return false;
  218. });
  219. })
  220. </script>
  221. </body>
  222. </html>