当前位置:首页(Home) >> 新闻资源(News List)

时间:2015-08-27 来源:

暑期报修项目经验分享二(附原码) 【移动开发】

楔子 第二期项目经验分享,其实整个项目流程,我们只是参与了其中一小部分,仅仅是添加了材料管理模块的内容,在第一期的实践里面,主要维护材料类别的增查改操作。二期维护做的是材料出入库处理,因为我处理的是入库管理这一块,所以分享下做这一块的经验。 需求分析: 在分析业务需求的时候,因为考虑到出入库在一张数据表里面,即是共用数据,那么type区分出入库,在写代码的时候一个反人类的操作就是把流水号设置成整形,虽然影响不大,另外关于材料类别代码这里,因为材料类别是三级联动设置,所以我们只取最后一级的代码,因为材料领取者和领取时间涉及出库,所以不必考虑,最后就是入库操作人员和入库时间,操作人员和时间都可以由系统获取。 代码编写过程: 我先考虑的是显示出数据库里的数据,由controller里面的list方法通过设置type字段来查询,之前一直尝试去修改底层代码(增加底层方法,因为sql要多处理一个查询),后来是确定在bo里面设置属性即可,list能成功显示后,在处理add时,因为流水号是递增的,所以通过createCode方法(底层是sql语句查询最大max_id),设置每次new出的id是max_id+1,因为你要中文可视化材料类别,所以getCodeAll必须获取到一级类别,然后利用传递过来的值赋给add界面,提交add表单后,在save方法里面,因为user和time默认获取系统值,之后通过saveCodeBean插入到数据库里面,代码层面,要写的有点多,后来小付老师说为什么baseDao的save方法不直接用呢,一句话即可解决(没用过。。果然底层封装的再好,不会用也是白搭),编辑操作通过request.getParameter获取选中的记录,用getAllByCode查询出所有记录,然后封装到Map里面,再赋给界面层,因为三级联动在编辑的时候要默认显示之前的数据,所以这里你要通过编辑选中的材料三级类别代码查询二级代码,并且要查询出一级类别对应二级类别的所有数据和二级类别对应三级类别的所有数据,用四个方法实现这个功能,对应四个sql语句(小付老师教的,果断不会这么高大上的东西),之后update界面即可,因为考虑到权限问题,所以设置n天后不可编辑,设定经过系统参数天后不能修改,我先找到实体类SystemPara,系统参数是存放在t_system_parameter表里面的,字段是par_value,记录是14,所以我在service里面添加findMaxLimitedById这个方法,因为系统参数一般是不会变的,所以我直接在sql语句里面默认查找id=14的记录select * from t_system_parameter where id=14,然后通过findUniqueMapByArray方法查询出记录,赋给Map,在Map里面直接用get获取集合内为par_value的值,返回,因为考虑到编辑和删除操作都会涉及到时间限制,所以我封装returnDayDiffer方法,得到时间差,那么在编辑和删除直接调用这个方法即可,最后测试了下,效果还不错。本来想尝试折旧数量必须小于入库数量,用js获取到入库数量后,发现貌似不能传递给折旧数量的max里,不过应该有其他的方法可以解决吧。。后台验证也可以解决,在后台只要判定结构体内loss_number值不超过input_number,直接返回即可。。 细节操作: 1.copy的时候记得把pagerform的路径改下,因为文件的目录不匹配 2.出现no mapping的错误一定是路径有错,在web.xml映射没有错误的情况下,先查看controller层里的类对应的注解,和方法对应的注解,然后再仔细查看web-inf下的jsp路径,肯定是有错的,因为我在这里被坑了不止n次了,再全部修改过后,还是不行的话,重启服务器 3.add界面自设参数后,是通过name传给controller层里对应的save方法,然后通过savebean存储到数据库的 4.在材料入库操作中,如果需要将数据从界面传到controller里面,除了再界面设置隐藏字段外,还可以通过 private SimpleOrmGenericDao<MaterialManage, Long> materialDao; 封装到结构体中,然后再setDataSource注入数据源 因为materialDao = new SimpleOrmGenericDao<MaterialManage, Long>(dataSource, MaterialManage.class);本身就将实体封装到了materialDao里面,看底层可以发现其实用的就是jdbc通用Dao工厂分配。 还有一种方法是通过SimpleDateF置好格式,然后强转为Date型,这种方式不太喜欢。。。因为坑 5.upateCodeBean语句里面传过来的参数要匹配,另外sql语句要和底层baseDao.jdbcTemplate.executeArray相匹配 @javax.annotation.Resource public void setDataSource(DataSource dataSource) { //paraDao = new SimpleOrmGenericDao<SystemParameter, Long>(dataSource, // SystemParameter.class); baseDao = new BaseDao(dataSource); } 注意这个也可以作为注入,如果没有会出现空指针错误。

package com.wisdom.repair.web.management.materialManage; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.sql.DataSource; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import com.wisdom.core.orm.BaseDao; import com.wisdom.core.security.domain.User; import com.wisdom.core.security.resource.SecurityUtils; import com.wisdom.core.utils.CollectionUtils; import com.wisdom.core.utils.Page; import com.wisdom.core.web.BaseController; import com.wisdom.example.commons.ValidationUtils; import com.wisdom.repair.entity.MaterialManage; import com.wisdom.repair.entity.RepairView; import com.wisdom.repair.entity.UploadType; import com.wisdom.repair.entity.pageBo.CodePageBo; import com.wisdom.repair.service.material.MaterialServiceImpl; import com.wisdom.repair.service.materialClass.MaterialClassServiceImpl; import com.wisdom.repair.service.materialManage.*; import com.wisdom.repair.service.pub.PublicService; import com.wisdom.repair.service.user.UserManageService; import com.wisdom.repair.web.management.user.UserPageBo; /** * * 类名称:MaterialManageController 类描述: 材料入库管理 创建人:Jxufe Kong De Wei 创建时间:2015-8-25 * 上午10:09:02 修改备注: * * @version */ @Controller("management.MaterialManageController") @RequestMapping("/management/materialManage/input") public class MaterialManageController extends BaseController { @Resource private MaterialManageService materialManageService; @Resource private MaterialServiceImpl materialService; @Resource private MaterialClassServiceImpl materialClassService; /** * * 方法名: list 方法作用: 列表显示 创建人:Jxufe Kong De Wei 创建时间:2015-8-25 上午10:14:44 * * @param @param request * @param @param page * @param @param bo * @param @return 返回值类型: String * @throws */ @RequestMapping("/list") public String list(HttpServletRequest request, Page page, CodePageBo bo) { /* * request.setAttribute("page",materialManageService. * getAllRepairByFilterBean(page, materialView)); */ bo.setInputType(1); request.setAttribute("page", materialManageService.getPageByFilterBean( page, "t_material_manage", MaterialManage.class, bo)); System.out.println(materialManageService.getPageByFilterBean(page, "t_material_manage", MaterialManage.class, bo)); return "/repair/management/materialManage/input/list"; } /** * * 方法名: add 方法作用: TODO 创建人:Jxufe Kong De Wei 创建时间:2015-8-25 上午10:14:38 * * @param @param request * @param @return 返回值类型: String * @throws */ @RequestMapping("/add") public String add(HttpServletRequest request) { List repTypeGroup = new ArrayList(); System.out.println("nihao"); try { request.setAttribute("id", materialManageService.createCode("t_material_manage")); request.setAttribute("repType", materialManageService .getCodeAll("t_code_repair_type_group")); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return "/repair/management/materialManage/input/add"; } /** * * 方法名: materialClass 方法作用: 编辑界面获取三级联动默认值 创建人:Jxufe Kong De Wei * 创建时间:2015-8-26 上午11:15:04 * * @param @param value * @param @return * @param @throws Exception 返回值类型: List<List> * @throws */ @RequestMapping("/materialClass") @ResponseBody public List<List> materialClass(String value) throws Exception { System.out.println("11111111111input value" + value); List list = new ArrayList(); List listReturn = new ArrayList(); List listTop = new ArrayList(); listTop.add(""); listTop.add("--请选择--"); listReturn.add(listTop); if (value == null || value.isEmpty()) { return listReturn; } List list2 = new ArrayList(); list = materialClassService.getMaterialSubAll(value.trim()); for (int i = 0; i < list.size(); i++) { List listTemp = new ArrayList(); Map temMap = (Map) list.get(i); listTemp.add(temMap.get("code").toString().trim()); listTemp.add(temMap.get("name").toString().trim()); listReturn.add(listTemp); } return listReturn; } /** * * 方法名: material 方法作用: 编辑界面获取三级联动默认值 创建人:Jxufe Kong De Wei 创建时间:2015-8-26 * 上午11:15:41 * * @param @param value * @param @return * @param @throws Exception 返回值类型: List<List> * @throws */ @RequestMapping("/material") @ResponseBody public List<List> material(String value) throws Exception { System.out.println("1111111111111111111112input value" + value); List list = new ArrayList(); List listReturn = new ArrayList(); List listTop = new ArrayList(); listTop.add(""); listTop.add("--请选择--"); listReturn.add(listTop); if (value == null || value.isEmpty()) { return listReturn; } List list2 = new ArrayList(); list = materialService.getMaterialSubAll(value.trim()); for (int i = 0; i < list.size(); i++) { List listTemp = new ArrayList(); Map temMap = (Map) list.get(i); listTemp.add(temMap.get("code").toString().trim()); listTemp.add(temMap.get("name").toString().trim()); listReturn.add(listTemp); } return listReturn; } /** * * 方法名: edit 方法作用: 编辑 创建人:Jxufe Kong De Wei 创建时间:2015-8-25 上午10:14:06 * * @param @param request * @param @return 返回值类型: String * @throws */ @RequestMapping("/edit") public String edit(HttpServletRequest request) { /* * if(true) { ceshi(); return null; } else { */ List repTypeGroup = new ArrayList(); int code = Integer.parseInt(request.getParameter("id")); try { Map matairlManageMap = materialManageService.getAllByCode(code, "t_material_manage"); System.out.println(matairlManageMap); request.setAttribute("materialManage", matairlManageMap); request.setAttribute("repType", materialManageService .getCodeAll("t_code_repair_type_group")); request.setAttribute( "materialList", materialManageService.getMaterialList(matairlManageMap.get( "code_material").toString())); request.setAttribute("materialClassList", materialManageService .getMaterialClassList(matairlManageMap.get("code_material") .toString())); request.setAttribute("materialClassCode", materialManageService .getMaterialClassCode(matairlManageMap.get("code_material") .toString())); request.setAttribute( "groupCode", materialManageService.getGroupCode(matairlManageMap.get( "code_material").toString())); // request.setAttribute("topValue", // publicService.getCodeAll("t_code_repair_type_group")); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return "/repair/management/materialManage/input/edit"; // } } public ModelAndView ceshi() { return ajaxDoneSuccess("123456789"); } /** * * 方法名: save 方法作用: 添加保存 创建人:Jxufe Kong De Wei 创建时间:2015-8-25 上午10:14:17 * * @param @param materialView * @param @param request * @param @return 返回值类型: ModelAndView * @throws */ @RequestMapping(value = "/save", method = RequestMethod.POST) public ModelAndView save(MaterialManage materialManage, HttpServletRequest request) { List<String> errors = ValidationUtils.validator(materialManage); Date nowDate = new Date(); if (errors != null) { request.setAttribute("errors", errors); return ajaxDoneError("失败!"); } else if (materialManage.getLoss_number() >= materialManage .getInput_number()) return ajaxDoneError("折旧数量不可超过入库数量!"); else { try { materialManage.setInputUser(SecurityUtils.getCurrentUserName()); materialManage.setInputTime(nowDate); materialManage.setInputType(1); materialManage.setControlTime(nowDate); System.out.println(materialManage.getId() + materialManage.getCodeMaterial() + materialManage.getBrands() + materialManage.getPrice() + materialManage.getInput_number() + materialManage.getInputType() + materialManage.getInputUser() + materialManage.getInputTime() + materialManage.getLoss_number() + materialManage.getMemo() + materialManage.getControlTime() + "00000000000000000000"); int info = materialManageService.saveCodeBean( "t_material_manage", materialManage.getId(), materialManage.getCodeMaterial(), materialManage.getBrands(), materialManage.getPrice(), materialManage.getInput_number(), materialManage.getInputType(), materialManage.getInputUser(), materialManage.getInputTime(), materialManage.getLoss_number(), materialManage.getMemo()); if (info > 0) { return ajaxDoneSuccess("成功!"); } else return ajaxDoneError("失败!"); } catch (Exception e) { return ajaxDoneError("失败!" + "<br/>系统报错信息:<br/>" + e.getMessage()); } } } /** * @throws Exception * * 方法名: update 方法作用: TODO 创建人:Jxufe Kong De Wei 创建时间:2015-8-25 * 上午10:14:23 * * @param @param materialView * @param @param request * @param @return 返回值类型: ModelAndView * @throws */ @RequestMapping(value = "/update", method = RequestMethod.POST) public ModelAndView update(MaterialManage materialManage, HttpServletRequest request) throws Exception { List<String> errors = ValidationUtils.validator(materialManage); Long day = returnDayDiffer(materialManageService.findMaterialById( materialManage.getId().longValue()).getInputTime()); if (errors != null) { request.setAttribute("errors", errors); return ajaxDoneError("失败!"); } else if (day > Integer.parseInt(materialManageService .findMaxLimitedById())) return ajaxDoneError("材料入库已超过 " + Integer.parseInt(materialManageService .findMaxLimitedById()) + " 日,数据不可更改!"); else if (materialManage.getLoss_number() >= materialManage .getInput_number()) return ajaxDoneError("折旧数量不可超过入库数量!"); else { try { materialManage.setInputType(1); /* * System.out.println(materialManage * .getId()+" "+materialManage. * getCodeMaterial()+" "+materialManage * .getBrands()+" "+materialManage .getPrice()+ * " "+materialManage * .getInput_number()+" "+materialManage.getInputType * ()+" "+materialManage.getInputUser()+" "+ * materialManage.getInputTime * ()+" "+materialManage.getLoss_number * ()+" "+materialManage.getMemo()+"111111111111111"); */ materialManageService.upateCodeBean("t_material_manage", materialManage.getId(), materialManage.getCodeMaterial(), materialManage.getBrands(), materialManage.getPrice(), materialManage.getInput_number(), materialManage.getInputType(), materialManage.getLoss_number(), materialManage.getMemo()); return ajaxDoneSuccess("成功!"); } catch (Exception e) { return ajaxDoneError("失败!" + "<br/>系统报错信息:<br/>" + e.getMessage()); } } } /** * * 方法名: delete 方法作用: 删除操作 创建人:Jxufe Kong De Wei 创建时间:2015-8-26 上午11:14:01 * * @param @param request * @param @return * @param @throws Exception 返回值类型: ModelAndView * @throws */ @RequestMapping("/delete") public ModelAndView delete(HttpServletRequest request) throws Exception { Integer id = Integer.parseInt(request.getParameter("id")); Long day = returnDayDiffer(materialManageService.findMaterialById( id.longValue()).getInputTime()); // System.out.println("8888888888888888888888888888"+day); if (day > Integer.parseInt(materialManageService.findMaxLimitedById())) { return ajaxDoneError("材料入库已超过 " + Integer.parseInt(materialManageService .findMaxLimitedById()) + " 日,数据不可更改!"); } else { int i = materialManageService.deleteById(id); if (i > 0) { return ajaxDoneSuccess("删除成功"); } else { return ajaxDoneError("删除失败"); } } } /** * * 方法名: returnDayDiffer 方法作用: 返回日期差 创建人:Jxufe Kong De Wei 创建时间:2015-8-26 * 上午11:13:34 * * @param @param date * @param @return 返回值类型: Long * @throws */ public Long returnDayDiffer(Date date) { Date nowDate = new Date(); long day = (nowDate.getTime() - date.getTime()) / (24 * 60 * 60 * 1000) > 0 ? (nowDate .getTime() - date.getTime()) / (24 * 60 * 60 * 1000) : (date.getTime() - nowDate.getTime()) / (24 * 60 * 60 * 1000); return day; } } <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><%@ include file="/include.inc.jsp"%> <c:import url="../../_frag/pager/pagerForm.jsp"></c:import> <form method="post" rel="pagerForm" action="<c:url value='${base}/management/materialManage/input/list.htm'/>" onsubmit="return navTabSearch(this)"> <div class="pageHeader"> <div class="searchBar"> <ul class="searchContent"> <li><label>品牌:</label> <input type="text" name="brands" value="${param.brands}" /></li> </ul> <div class="subBar"> <ul> <li><div class="buttonActive"> <div class="buttonContent"> <button type="submit">查询</button> </div> </div> </li> </ul> </div> </div> </div> </form> <div class="pageContent"> <div class="panelBar"> <ul class="toolBar"> <li><a class="add" target="dialog" rel="addNav" href="<c:url value='/management/materialManage/input/add.htm'/>" title="添加记录"><span>添加</span> </a> </li> <li><a class="edit" target="dialog" rel="editNav" href="<c:url value='/management/materialManage/input/edit.htm?id={slt_objId}'/>" title="编辑记录"><span>编辑</span> </a> </li> <li><a class="delete" target="ajaxTodo" href="<c:url value='/management/materialManage/input/delete.htm?id={slt_objId}'/>" title="删除记录"><span>删除</span> </a> </li> <li class="line">line</li> </ul> </div> <table class="table" width="100%" layoutH="138"> <thead> <tr> <th width="50" orderField="ID" class="${param.orderField eq 'ID' ? param.orderDirection : ''}">代码</th> <th width="100" orderField="BRANDS" class="${param.orderField eq 'BRANDS' ? param.orderDirection : ''}">品牌</th> <th width="70" orderField="PRICE" class="${param.orderField eq 'PRICE' ? param.orderDirection : ''}">材料价格</th> <th width="70" orderField="input_number" class="${param.orderField eq 'input_number' ? param.orderDirection : ''}">入库数量</th> <th width="70" orderField="input_number" class="${param.orderField eq 'input_number' ? param.orderDirection : ''}">操作人员</th> <th width="90" orderField="input_number" class="${param.orderField eq 'input_number' ? param.orderDirection : ''}">入库时间</th> <th width="70" orderField="loss_number" class="${param.orderField eq 'loss_number' ? param.orderDirection : ''}">折旧数量</th> <th width="100" orderField="memo" class="${param.orderField eq 'memo' ? param.orderDirection : ''}">备注</th> <th width="120">服务器当前时间</th> </tr> </thead> <tbody> <jsp:useBean id="now" class="java.util.Date" /> <c:forEach var="MaterialManage" items="${page.result}" varStatus="s"> <tr target="slt_objId" rel="${MaterialManage.id}"> <td>${MaterialManage.id}</td> <td>${MaterialManage.brands}</td> <td>${MaterialManage.price}</td> <td>${MaterialManage.input_number}</td> <td>${MaterialManage.inputUser}</td> <td><fmt:formatDate value="${MaterialManage.inputTime}" pattern="yyyy-MM-dd HH:mm:ss" /> </td> <td>${MaterialManage.loss_number}</td> <td>${MaterialManage.memo}</td> <td><fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss" /></td> </tr> </c:forEach> </tbody> </table> <c:import url="../../_frag/pager/panelBar.jsp"></c:import> </div> <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><%@ include file="/include.inc.jsp"%> <div class="pageContent"> <form method="post" action="<c:url value='/management/materialManage/input/save.htm?callbackType=closeCurrent'/>" class="pageForm required-validate" onsubmit="return validateCallback(this, dialogAjaxDone)"> <div class="pageFormContent" layoutH="57"> <input type="hidden" id="id" name="id" value="${id}" remote="/management/public/checkUnique.htm?tableName=t_material_manage" class="required digits" /> <!-- <input type="button" value="重新生成" id="regenCode" style="padding:0px; margin: 0px 0px 0px 5px; "/> --> <div> <label>材料编号:</label> <select name="codeRepType" class="combox" ref="codeClaimerType" refUrl="${base}/management/materialManage/input/materialClass.htm?value={value}"> <option value="">--请选择--</option> <c:forEach var="ur" items="${repType}"> <option value="${ur.code}">${ur.name}</option> </c:forEach> </select> <select name="codeClaimerType" id="codeClaimerType" class="required combox" ref="codeMaterial" refUrl="${base}/management/materialManage/input/material.htm?value={value}"> <option value="">---请选择---</option> </select> <select name="codeMaterial" id="codeMaterial" class="required combox"> <option value="">--请选择--</option> </select> </div> <p> <label>品牌: </label> <input type="text" name="brands" class="required" maxlength="20" /> </p> <p> <label>价格: </label> <input type="text" name="price" class="required" maxlength="20" /> </p> <p> <label>入库数量: </label> <input type="text" name="input_number" max="9999" min="1" class="required textInput" maxlength="4" alt = "数据范围:1-9999"/> </p> <p> <label>折旧数量: </label> <input type="text" name="loss_number" id="loss_number12" max="9999" class="required" maxlength="4" alt = "折旧不得大于入库数量!"/> </p> <p> <label>备注: </label> <input type="text" name="memo" maxlength="20" /> </p> </div> <div class="formBar"> <ul> <li><div class="buttonActive"> <div class="buttonContent"> <button type="submit">保存</button> </div> </div></li> <li><div class="button"> <div class="buttonContent"> <button type="button" class="close">关闭</button> </div> </div></li> </ul> </div> </form> </div> <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><%@ include file="/include.inc.jsp"%> <div class="pageContent"> <form method="post" action="<c:url value='/management/materialManage/input/update.htm?callbackType=closeCurrent'/>" class="pageForm required-validate" onsubmit="return validateCallback(this, dialogAjaxDone)"> <div class="pageFormContent" layoutH="57"> <input type="hidden" id="id" name="id" value="${materialManage.id}" remote="/management/public/checkUnique.htm?tableName=t_material_manage" class="required digits" /> <!-- <input type="button" value="重新生成" id="regenCode" style="padding:0px; margin: 0px 0px 0px 5px; "/> --> <div> <label>材料编号:</label> <select name="codeRepType" class="required combox" ref="codeClaimerType" refUrl="${base}/management/materialManage/input/materialClass.htm?value={value}"> <option value="">--请选择--</option> <c:forEach var="ur" items="${repType}"> <option value="${ur.code}" <c:if test="${ur.code==groupCode }"> selected </c:if>>${ur.name}</option> </c:forEach> </select> <select name="codeClaimerType" id="codeClaimerType" class="required combox" ref="codeMaterial" refUrl="${base}/management/materialManage/input/material.htm?value={value}"> <option value="">---请选择---</option> <c:forEach var="urclass" items="${materialClassList}"> <option value="${urclass.code}" <c:if test="${urclass.code==materialClassCode }"> selected </c:if>>${urclass.name}</option> </c:forEach> </select> <select name="codeMaterial" id="codeMaterial" class="required combox"> <option value="">--请选择--</option> <c:forEach var="urmaterial" items="${materialList}"> <option value="${urmaterial.code}" <c:if test="${urmaterial.code==materialManage.code_Material }"> selected </c:if>>${urmaterial.name}</option> </c:forEach> </select> </div> <p> <label>品牌: </label> <input type="text" name="brands" value="${materialManage.brands}" class="required" maxlength="20" /> </p> <p> <label>价格: </label> <input type="text" name="price" value="${materialManage.price}" class="required" maxlength="20" /> </p> <p> <label>入库数量: </label> <input type="text" name="input_number" value="${materialManage.input_number}" class="required" maxlength="4" /> </p> <p> <label>折旧数量: </label> <input type="text" name="loss_number" value="${materialManage.loss_number}" max="9999" class="required" maxlength="4" /> </p> <p> <label>备注: </label> <input type="text" name="memo" value="${materialManage.memo}" maxlength="20" /> </p> </div> <div class="formBar"> <ul> <li><div class="buttonActive"> <div class="buttonContent"> <button type="submit">保存</button> </div> </div> </li> <li><div class="button"> <div class="buttonContent"> <button type="button" class="close">关闭</button> </div> </div> </li> </ul> </div> </form> </div>

版权声明:转载请注明出处

点击次数:29101
作者: