ajax-form提交
前端代码:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head th:include="_meta :: header">
<title>添加</title>
</head>
<link rel="stylesheet" th:href="@{/xadmin/lib/formselect/formSelects-v4.css}">
<body>
<div class="layui-fluid">
<div class="layui-row">
<form class="layui-form form form-horizontal" id="form-materialMart-add" action="#" th:action="@{/admin/materialMart/edit}"
th:object="${materialMart}" enctype="multipart/form-data">
<input type="hidden" name="id" th:value="${materialMart.id}"/>
<input type="hidden" id="checked" th:value="${materialProjects}"/>
<div class="layui-form-item">
<label class="layui-form-label">项目类型:</label>
<div class="layui-input-block">
<select name="typeId" id="type" xm-select="select9" xm-select-search xm-select-create>
<option name="rights" th:each="recommendMenuSecond:${recommendMenuSeconds}" th:text="${recommendMenuSecond.menuName}" th:title="${recommendMenuSecond.menuName}" th:value="${recommendMenuSecond.id}"></option>
</select>
</div>
</div>
<div class="layui-form-item" style="margin-top: 50px">
<label class="layui-form-label" style="width:80px;">项目标题:</label>
<div class="layui-input-inline">
<input type="layui-input" class="layui-input" style="width: 738px;" th:value="${materialMart.title}" name="title" placeholder="添加项目标题" id="title"/>
</div>
</div>
<!-- <div class="layui-form-item">-->
<!-- <label class="layui-form-label" style="width:80px;">上传图标:</label>-->
<!-- <div class="layui-input-inline">-->
<!-- <input type="file" class="layui-input" th:value="${materialMart.Icon}" name="imageFile" multiple placeholder="添加项目图标" id="Icon"/>-->
<!-- </div>-->
<!-- </div>-->
<div class="layui-form-item" style="margin-top: 50px">
<label class="layui-form-label">项目图标:</label>
<div class="imgcon" style="float: left">
</div>
<input type="hidden" value="" name="Icon" class="goods_img">
<div class="addimg" style="float: left">
<div id="drag" class="" title="将文件拖拽到此处上传">
<label for="fileupload" title="点击上传">
<img th:src="${materialMart.Icon}" style="height: 100px;width: 100px;" alt="">
</label>
</div>
<input style="display: none" id="fileupload" type="file" accept="image/*" name="imageFile"
multiple="multiple" data-url="/admin/materialMart/addFile">
</div>
</div>
<!-- <div class="layui-form-item">-->
<!-- <label class="layui-form-label"><span-->
<!-- class="c-red">* </span>项目内容:</label>-->
<!-- <div class="layui-input-block">-->
<!-- <script id="editor" th:text="${materialMart.content}" name="content" autofocus type="text/plain" style="height: 500px">-->
<!-- </script>-->
<!-- </div>-->
<!-- </div>-->
<div class="layui-form-item layui-form-text" style="margin-top: 50px">
<label for="introduction" class="layui-form-label" style="width:80px;">项目简介:</label>
<div class="layui-input-block">
<textarea id="introduction" name="introduction" th:text="${materialMart.introduction}" class="layui-textarea" style="width:900px;height:200px;margin-right:20px;"></textarea>
</div>
</div>
<div class="layui-form-item layui-form-text" style="margin-top: 50px">
<label for="content" class="layui-form-label" style="width:80px;">项目内容:</label>
<div class="layui-input-block">
<textarea id="content" name="content" th:text="${materialMart.content}" class="layui-textarea" style="width:900px;height:400px;margin-right:20px;"></textarea>
</div>
</div>
<div class="layui-form-item" style="margin-top: 50px">
<label class="layui-form-label" style="width:80px;">项目价格:</label>
<div class="layui-input-inline">
<input type="layui-input" class="layui-input" th:value="${materialMart.price}" name="price" placeholder="添加项目价格" id="price"/>
</div>
</div>
<div class="layui-form-item" style="margin-top: 50px">
<label class="layui-form-label" style="width:80px;">咨询电话:</label>
<div class="layui-input-inline">
<input type="layui-input" class="layui-input" th:value="${materialMart.phoneNumber}" name="phoneNumber" placeholder="添加咨询电话" id="phoneNumber"/>
</div>
</div>
<div class="layui-form-item" style="margin-top: 50px">
<label class="layui-form-label" style="width:80px;">是否精选:</label>
<div class="layui-input-block" style="width: 200px">
<select name="isGoods" id="isGoods">
<option th:value="${materialMart.isGoods}"></option>
<option th:text="是" th:value="1"></option>
<option th:text="否" th:value="0"></option>
</select>
</div>
</div>
<div class="layui-form-item" style="margin-top: 50px;margin-bottom: 60px;">
<label class="layui-form-label">
</label>
<button class="layui-btn" id="subbtn" type="submit" >
修改
</button>
<button class="layui-btn" id="reset" type="reset" >
重置
</button>
</div>
</form>
</div>
</div>
<!--_footer 作为公共模版分离出去-->
<div th:replace="_footer :: footerjs"></div>
<!--<div th:replace="_ueditor :: ueditor"></div>-->
<script th:src="@{/xadmin/lib/formselect/formSelects-v4.js}" charset="utf-8"></script>
<!--/_footer 作为公共模版分离出去-->
<!--请在下方写此页面业务相关的脚本-->
<link rel="stylesheet" type="text/css" th:href="@{/xadmin/lib/formSelect/formSelects-v4.css}"/>
<script type="text/javascript" th:src="@{/xadmin/lib/formselect/formSelects-v4.js}"></script>
<script th:src="@{/xadmin/lib/jQuery-File-Upload/js/vendor/jquery.ui.widget.js}"></script>
<script th:src="@{/xadmin/lib/jQuery-File-Upload/js/jquery.iframe-transport.js}"></script>
<script th:src="@{/xadmin/lib/jQuery-File-Upload/js/jquery.fileupload.js}"></script>
<script>
layui.use(['form', 'layer','laydate'],function() {
$ = layui.jquery;
var form = layui.form,
laydate = layui.laydate,
layer = layui.layer;
lay('.timeSpace').each(function(){
laydate.render({
elem: this
,trigger: 'click'
,type: 'datetime'
});
});
//多选框回显
var formSelects = layui.formSelects;
var questionnaireList = $("#checked").val();
console.log(questionnaireList);
let arr = JSON.parse(String(questionnaireList))
formSelects.value('select9', arr, true);
formSelects.btns('select9', ['remove']);
});
$(function(){
$("#form-materialMart-add").validate({
rules:{
type:{
required: true,
},
userId:{
required: true,
},
projectSortId:{
required: true,
},
title:{
required: true,
},
Icon:{
required: true,
},
content:{
required: true,
},
introduction:{
required: true,
},
price:{
required: true,
},
phoneNumber:{
required: true,
},
createTime:{
required: true,
},
updateTime:{
required: true,
},
isGoods:{
required: true,
},
},
onkeyup:false,
debug: true,
success:"valid",
submitHandler:function(form){
$(form).ajaxSubmit({
type: 'POST',
url: "/admin/materialMart/edit" ,
success: function(data){
if(data.code == "1"){
selfmsg('修改成功!',1,function(){
var index = parent.layer.getFrameIndex(window.name);
parent.location.reload();
parent.layer.close(index);
});
}else{
selfmsg('修改失败!');
}
},
error: function(){
selfmsg('修改异常!',5);
}
});
}
});
});
</script>
<!--上传图片-->
<script>
//删除图片
function closeImg(obj) {
$(obj).parent().remove();
// var goods_img = '';
// $('.imgcon .img_div').each(function () {
// goods_img += $(this).find('img').attr('src') + ',';
// })
$('.meetingIcon').val('');
if ($('.imgcon').children().length == 1) {
$('.addimg').css('display', 'none');
}
if ($('.imgcon').children().length < 1) {
$('.addimg').css('display', 'inline-block');
}
}
//上传图片
$(function () {
$('#fileupload').fileupload({
dataType: 'json',
dropZone: $('#drag'),
change: function (e, data) {
var len = $('.imgcon').children().length;
if (data.files.length > (1 - parseInt(len))) {
layer.msg('最多上传1张图片');
return false;
}
},
start: function (e) {
layer_msg = layer.msg('正在上传中…', {time: 100000000});
},
progressall: function (e, data) {
$('.layui-layer-msg .layui-layer-content').html('已上传' + (data.loaded / data.total * 100).toFixed(2) + '%');
},
done: function (e, data) {
layer.close(layer_msg);
callback(data.result.msg);
}
});
$('#drag').bind('drop dragover', function (e) {
e.preventDefault();
}).on('dragenter', function (e) {
$(this).addClass('dragenter');
}).on('drop', function (e) {
$(this).removeClass('dragenter');
}).on('dragleave', function (e) {
$(this).removeClass('dragenter');
});
/**
* 数据回调
* @param id
* @param value
*/
function callback(value) {
var $li = $(
"<div class=\"img_div\">" +
"<a οnclick=\"$(this).attr('href', $(this).find('img').attr('src'))\" type=\"button\" data-lightbox=\"preview\">" +
"<img src=\"" + value + "\" alt=\"\" style='height: 100px;width: 100px'>" +
"</a>" +
"<i class='layui-icon layui-icon-delete close' οnclick='closeImg(this)'></i>" +
"</div>"
);
$('.imgcon').append($li);
if ($('.imgcon').children().length == 1) {
$('.addimg').css('display', 'none');
}
// var goods_img = '';
// $('.imgcon .img_div').each(function () {
// goods_img += $(this).find('img').attr('src') + ',';
// })
$('.goods_img').val($(this).find('img').attr('src'));
}
//图片回显
if ("$document.getElementsByName('name')" != '') {
var goods_img = $(document.getElementsByName('name'));
$('.goods_img').val(goods_img);
// var arr = goods_img.split(',');
// for (var i = 0; i < arr.length; i++) {
// if (arr[i] != '') {
// callback(arr[i]);
// }
// }
if ($('.imgcon').children().length == 1) {
$('.addimg').css('display', 'none');
}
}
});
</script>
<!--/请在上方写此页面业务相关的脚本-->
</body>
</html>
后端代码:
package com.mbyte.easy.admin.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mbyte.easy.admin.entity.MaterialMart;
import com.mbyte.easy.admin.entity.MaterialProject;
import com.mbyte.easy.admin.entity.ProjectSort;
import com.mbyte.easy.admin.entity.RecommendMenuSecond;
import com.mbyte.easy.admin.service.IMaterialMartService;
import com.mbyte.easy.admin.service.IMaterialProjectService;
import com.mbyte.easy.admin.service.IProjectSortService;
import com.mbyte.easy.common.controller.BaseController;
import com.mbyte.easy.common.web.AjaxResult;
import com.mbyte.easy.util.OssFileUtils;
import com.mbyte.easy.util.OssUtil;
import com.mbyte.easy.util.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 物料商城内容管理
* </p>
* @author 吕金彪
* @since 2019-09-21
*/
@Slf4j
@Controller
@RequestMapping("/admin/materialMart")
public class MaterialMartController extends BaseController {
private String prefix = "admin/materialmart/";
@Autowired
private IMaterialMartService materialMartService;
@Autowired
private IMaterialProjectService materialProjectService;
/**
* 查询列表
*
* @param model
* @param pageNo
* @param pageSize
* @param materialMart
* @return
*/
@RequestMapping
public String index(Model model,@RequestParam(value = "pageNo", required = false, defaultValue = "1") Integer pageNo,@RequestParam(value = "pageSize", required = false, defaultValue = "20") Integer pageSize, MaterialMart materialMart) {
Page<MaterialMart> page = new Page<MaterialMart>(pageNo, pageSize);
IPage<MaterialMart> pageInfo = materialMartService.listPage(materialMart,page);
model.addAttribute("searchInfo", materialMart);
model.addAttribute("pageInfo", new PageInfo(pageInfo));
return prefix+"list";
}
/**
* 添加跳转页面
* @return
*/
@GetMapping("addBefore")
public String addBefore(Model model){
List<RecommendMenuSecond> recommendMenuSeconds = materialMartService.selectAllType();
model.addAttribute("recommendMenuSeconds",recommendMenuSeconds);
return prefix+"add";
}
/**
* 添加页面图片保存跳转
*/
String path = "";
@PostMapping("addFile")
@ResponseBody
public AjaxResult addFile(@RequestParam("imageFile") MultipartFile imageFile) {
path = OssFileUtils.uploadSingleFile(imageFile);
return success(path);
}
/**
* 添加
* @param materialMart
* @return
*/
@RequestMapping("add")
@ResponseBody
public AjaxResult add(MaterialMart materialMart, String typeId){
materialMart.setShareNumber(0);
materialMart.setCreateTime(LocalDateTime.now());
materialMart.setUpdateTime(LocalDateTime.now());
if(materialMart.getPrice()==null){
materialMart.setPrice(0);
}
//上传图片
materialMart.setIcon(path);
log.info("path:"+path);
//分割字符串typeId
String[] strArr= StringUtils.split(typeId,",");
//插入新建项目
int change = materialMartService.insertAllMart(materialMart);
log.info("change"+change);
//插入对应类型到中间表
MaterialProject materialProject=new MaterialProject();
for (int i = 0; i < strArr.length; i++) {
materialProject.setMaterialMartId( materialMart.getId());
materialProject.setProjectSortId(Long.valueOf(strArr[i]));
materialProject.setCreateTime(LocalDateTime.now());
materialProject.setUpdateTime(LocalDateTime.now());
materialMartService.insertMartType(materialProject);
}
return toAjax(change);
}
/**
* 添加跳转页面
* @return
*/
@GetMapping("editBefore/{id}")
public String editBefore(Model model,@PathVariable("id")Long id){
//回显所有数据
model.addAttribute("materialMart",materialMartService.getById(id));
QueryWrapper<MaterialProject> queryWrapper=new QueryWrapper<>();
queryWrapper.eq("material_mart_id",id);
List<MaterialProject> materialProjects = materialProjectService.selectList(queryWrapper);
List<Long> list=new ArrayList<>();
for (MaterialProject materiaProject:materialProjects) {
list.add(materiaProject.getProjectSortId());
}
//回传所有类型
List<RecommendMenuSecond> recommendMenuSeconds = materialMartService.selectAllType();
model.addAttribute("materialProjects",list);
model.addAttribute("recommendMenuSeconds",recommendMenuSeconds);
return prefix+"edit";
}
/**
* 添加
* @param materialMart
* @return
*/
@PostMapping("edit")
@ResponseBody
public AjaxResult edit(MaterialMart materialMart,
@RequestParam(required = false) String title,
@RequestParam(required = false) String content,
@RequestParam(required = false) Integer price,
@RequestParam(required = false) Integer phoneNumber,
String typeId){
materialMart.setTitle(title);
materialMart.setContent(content);
materialMart.setPrice(price);
materialMart.setPhoneNumber(phoneNumber);
materialMart.setUpdateTime(LocalDateTime.now());
//上传图片
materialMart.setIcon(path);
if(typeId!=null&&typeId!="") {
//分割字符串typeId
String[] strArr = StringUtils.split(typeId, ",");
//删除该项目原属类
materialMartService.deleteByMartId(materialMart.getId());
//插入类型到中间表
MaterialProject materialProject = new MaterialProject();
for (int i = 0; i < strArr.length; i++) {
materialProject.setMaterialMartId(materialMart.getId());
materialProject.setProjectSortId(Long.valueOf(strArr[i]));
materialProject.setCreateTime(LocalDateTime.now());
materialProject.setUpdateTime(LocalDateTime.now());
materialMartService.insertMartType(materialProject);
}
}
return toAjax(materialMartService.updateById(materialMart));
}
/**
* 删除
* @param id
* @return
*/
@GetMapping("delete/{id}")
@ResponseBody
public AjaxResult delete(@PathVariable("id") Long id){
//删除该项目原属类
materialMartService.deleteByMartId(id);
return toAjax(materialMartService.removeById(id));
}
/**
* 批量删除
* @param ids
* @return
*/
@PostMapping("deleteAll")
@ResponseBody
public AjaxResult deleteAll(@RequestBody List<Long> ids){
//删除项目原属类
for (Long id:ids) {
materialMartService.deleteByMartId(id);
}
return toAjax(materialMartService.removeByIds(ids));
}
}