Advertisement

会议反馈和会议通知

阅读量:

一、会议通知

会议通知sql语句

select t1. ,IFNULL(f.result,-1)result from
(select * from t_oa_meeting_info where FIND_IN_SET(2,CONCAT(canyuze,',',liexize,',',zhuchiren))and state=4 ) t1
left JOIN t_oa_meeting_feedback f on t1.id=f.meetingId and f.personId=2 order by result ;
*

.config.

layui.config({
base: 'static/js/layui/modules/' //假设这是test.js所在的目录
}).extend({ //设定模块别名
test: 'test' //如果test.js是在根目录,也可以不用设定别名
});

header.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

** **

配置文件mvc.xml

**< /action> **

MeetingFeedbackAction类

package com.zking.web;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zking.dao.MeetingFeedbackDao;
import com.zking.entity.MeetingFeedBack;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.PageBean;
import com.zking.util.R;
import com.zking.util.ResponseUtil;

public class MeetingFeedbackAction extends ActionSupport implements ModelDriver{
private MeetingFeedBack back =new MeetingFeedBack();
private MeetingFeedbackDao feedbackDao =new MeetingFeedbackDao();

//我的会议通知

public String queryMeetingFeedBackByUserId(HttpServletRequest req, HttpServletResponse resp) {

try {
PageBean pagebean=new PageBean();
pagebean.setRequest(req);//设置界面跳转方式
List<Map<String, Object>> ls=feedbackDao.queryMeetingFeedBackByUserId(back, pagebean);
ResponseUtil.writeJson(resp, R.ok(0, "会议通知数据查询成功", pagebean.getTotal(),ls));

} catch (Exception e) {
e.printStackTrace();
try {
ResponseUtil.writeJson(resp, R.error(0, "会议通知数据查询失败"));
} catch (Exception e2) {
e2.printStackTrace();
}
}
return null;
}

@Override
public MeetingFeedBack getModel() {
return back;
}

}

dao方法

package com.zking.dao;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import com.zking.entity.MeetingFeedBack;
import com.zking.entity.MeetingInfo;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;

public class MeetingFeedbackDao extends BaseDao{

//我的会议通知

public List<Map<String, Object>> queryMeetingFeedBackByUserId(MeetingFeedBack back, PageBean pageBean)
throws SQLException, InstantiationException, IllegalAccessException {
// String sql="select t1.* ,IFNULL(f.result,-1)result from \r\n" +
// "(select * from t_oa_meeting_info where FIND_IN_SET("+back.getPersonId()+",CONCAT(canyuze,',',liexize,',',zhuchiren))) t1 \r\n" +
// "left JOIN t_oa_meeting_feedback f on t1.id=f.meetingId and f.personId="+back.getPersonId()+" order by t1.id desc ";//调用sql语句

String sql="select t1.*,ifnull(f.result,-1) result from \r\n" +
"(select * from t_oa_meeting_info where "
+ "find_in_set('"+back.getPersonId()+"',concat(canyuze,',',liexize,',',zhuchiren))) t1 \r\n" +
"left join t_oa_meeting_feedback f on "
+ "t1.id=f.meetingId and personId="+back.getPersonId()+" where f.result is null ";
sql += " order by t1.id desc";
//会议标题用来模糊查询
return super.executeQuery(sql, pageBean);
}
}

效果界面图

二、会议反馈

会议反馈sql语句

**select t.result,
GROUP_CONCAT(t.name) names
from
(select t1.name ,IFNULL(f.result,-1)result from
(SELECT * from t_oa_user where FIND_IN_SET(id,(select CONCAT(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info where id=12))) t1
left JOIN t_oa_meeting_feedback f on t1.id=f.personId and f.meetingId = 12 ) t GROUP BY t.result
**

package com.zking.dao;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import com.zking.entity.MeetingFeedBack;
import com.zking.entity.MeetingInfo;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;

public class MeetingFeedbackDao extends BaseDao{

/**

  • 根据会议ID查询会议参与人员的反馈信息
  • @param back
  • @param pageBean
  • @return
  • @throws SQLException
  • @throws IllegalAccessException
  • @throws InstantiationException
    */
    public List<Map<String,Object>>
    queryMeetingBackByMeetingId(MeetingFeedBack back) throws InstantiationException, IllegalAccessException, SQLException{
    String sql="select result,group_concat(name) names from(\r\n" +
    "select t1.name,ifnull(f.result,-1) result from \r\n" +
    "(select * from t_oa_user where find_in_set(id,(\r\n" +
    "select concat(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info "
    + "where id="+back.getMeetingId()+"))) t1 left join t_oa_meeting_feedback f \r\n" +
    "on t1.id=f.personId and meetingId="+back.getMeetingId()+") temp group by result";
    System.out.println(sql);
    return super.executeQuery(sql, null);
    }

/**

  • 会议通知:查询出我(当前登陆用户)需要参与的会议及会议的反馈信息(参会、缺席以及未读)
  • @param back
  • @param pageBean
  • @return
  • @throws SQLException
  • @throws IllegalAccessException
  • @throws InstantiationException
    /
    public List<Map<String,Object>>
    queryMeetingFeedBackByUserId(MeetingFeedBack back,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
    String sql="select t1.
    ,ifnull(f.result,-1) result from \r\n" +
    "(select * from t_oa_meeting_info where "
    + "find_in_set('"+back.getPersonId()+"',concat(canyuze,',',liexize,',',zhuchiren))) t1 \r\n" +
    "left join t_oa_meeting_feedback f on "
    + "t1.id=f.meetingId and personId="+back.getPersonId()+" where f.result is null ";
    sql += " order by t1.id desc";
    System.out.println(sql);
    return super.executeQuery(sql, pageBean);
    }
    }

package com.zking.web;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zking.dao.MeetingFeedbackDao;
import com.zking.entity.MeetingFeedBack;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.PageBean;
import com.zking.util.R;
import com.zking.util.ResponseUtil;

public class MeetingFeedbackAction extends ActionSupport implements ModelDriver{
private MeetingFeedBack back=new MeetingFeedBack();
private MeetingFeedbackDao backDao=new MeetingFeedbackDao();
@Override
public MeetingFeedBack getModel() {
return back;
}

/**

  • 新增会议反馈记录
  • @param req
  • @param resp
  • @return
  • @throws ServletException
  • @throws IOException
    */
    public String add(HttpServletRequest req,
    HttpServletResponse resp) throws ServletException,IOException{
    try {
    backDao.add(back);
    ResponseUtil.writeJson(resp, R.ok(200, "反馈成功!"));
    } catch (Exception e) {
    e.printStackTrace();
    try {
    ResponseUtil.writeJson(resp, R.error(0, "反馈失败!"));
    } catch (Exception e1) {
    e1.printStackTrace();
    }
    }

return null;
}

/**

  • 根据会议ID查询参会人员的反馈信息
  • @param req
  • @param resp
  • @return
  • @throws ServletException
  • @throws IOException
    */
    public String queryMeetingBackByMeetingId(HttpServletRequest req,
    HttpServletResponse resp) throws ServletException,IOException{
    try {
    List<Map<String, Object>> lst = backDao.queryMeetingBackByMeetingId(back);
    ResponseUtil.writeJson(resp, R.ok(200, "反馈详情查询成功!", lst));
    } catch (Exception e) {
    e.printStackTrace();
    try {
    ResponseUtil.writeJson(resp, R.error(0, "反馈详情查询失败!"));
    } catch (Exception e1) {
    e1.printStackTrace();
    }
    }

return null;
}

/**

  • 会议通知分页查询
  • @param req
  • @param resp
  • @return
  • @throws ServletException
  • @throws IOException
    */
    public String queryMeetingFeedBackByUserId(HttpServletRequest req,
    HttpServletResponse resp) throws Exception{
    try {
    PageBean pageBean=new PageBean();
    pageBean.setRequest(req);
    List<Map<String, Object>> lst = backDao.queryMeetingFeedBackByUserId(back, pageBean);
    ResponseUtil.writeJson(resp, R.ok(0, "分页查询会议通知信息成功!", pageBean.getTotal(), lst));
    } catch (Exception e) {
    e.printStackTrace();
    try {
    ResponseUtil.writeJson(resp, R.error(0, "分页查询会议通知信息失败!"));
    } catch (Exception e1) {
    e1.printStackTrace();
    }
    }

return null;
}
}

js代码

let layer,table,,form,test; var row; layui.use(['layer','table','jquery','form','test'],function(){ layer=layui.layer, table=layui.table, form=layui.form, test=layui.test, =layui.jquery;

initTable();

//查询事件
$('#btn_search').click(function(){
query();
});

});

//初始化数据表格(我的审批)
function initTable(){
table.render({ //执行渲染
elem: '#tb', //指定原始表格元素选择器(推荐id选择器)
height: 400, //自定义高度
loading: false, //是否显示加载条(默认 true)
cols: [[ //设置表头
{field: 'id', title: '会议编号', width: 90},
{field: 'title', title: '会议标题', width: 120},
{field: 'location', title: '会议地点', width: 140},
{field: 'startTime', title: '开始时间', width: 120,
templet:function(d){
return test.toDate(new Date(d.startTime));
}
},
{field: 'endTime', title: '结束时间', width: 120,
templet:function(d){
return test.toDate(new Date(d.endTime));
}
},
//{field: 'meetingState', title: '会议状态', width: 120},
/{field: 'seatPic', title: '会议排座', width: 120,
templet: function(d){
if(d.seatPic==null || d.seatPic=="")
return "尚未排座";
else
return "";
}
},
/
{field: 'result', title: '反馈状态', width: 120,
templet: function(d){
if(d.result==1)
return "参会";
else if(d.result==2)
return "缺席";
else
return "未读";
}
},
{field: '', title: '操作', width: 200,toolbar:'#tbar'},
]]
});
}

//点击查询
function query(){
table.reload('tb', {
url: ("#ctx").val()+'/feedBack.action', //请求地址 method: 'POST', //请求方式,GET或者POST loading: true, //是否显示加载条(默认 true) page: true, //是否分页 where: { //设定异步数据接口的额外参数,任意设 'methodName':'queryMeetingFeedBackByUserId', 'personId':('#personId').val(),
'title':$('#title').val(),
},
request: { //自定义分页请求参数名
pageName: 'page', //页码的参数名称,默认:page
limitName: 'rows' //每页数据量的参数名,默认:limit
},
done: function (res, curr, count) {
console.log(res);
}
});

//工具条事件
table.on('tool(tb)', function(obj){ //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
row = obj.data; //获得当前行数据
var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
var tr = obj.tr; //获得当前行 tr 的 DOM 对象(如果有的话)
console.log(row);
if(layEvent === 'edit'){ //是否参会
openLayer(row.id);
} else {

}
});
}

function openLayer(id){
layer.open({
type: 2, //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
title: '会议反馈', //对话框标题
area: ['660px', '400px'], //宽高
skin: 'layui-layer-rim', //样式类名
content: 'jsp/meeting/addFeedBack.jsp?id='+id, //弹出内容。可以传入普通的html内容,还可以指定DOM,更可以随着type的不同而不同
btn:['会议反馈','关闭'],
yes:function(index,layero){
//layer.msg('保存');
//调用子页面中提供的getData方法,快速获取子页面的form表单数据
let data= $(layero).find("iframe")[0].contentWindow.getData();
console.log(data);
addMeetingFeedBack(data);

},
btn2:function(){
layer.closeAll();
}
});
}

// 对会议通知进行 参会/不参会的反馈
function addMeetingFeedBack(params){
params['methodName']="add";
console.log(params);
alert(params);
.post(("#ctx").val()+'/feedBack.action',params,function(rs){
if(rs.success){
layer.closeAll();
query();
}else{
layer.msg(rs.msg,{icon:5},function(){});
}
},'json');
}

界面代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@include file="/common/header.jsp"%>

三、反馈详情

复制代码
 let layer,$,table,form;

    
 var row;
    
 layui.use(['jquery', 'layer', 'table','form'], function(){
    
 	layer = layui.layer
    
 	,$ = layui.jquery
    
 	,table = layui.table
    
 	,form = layui.form;
    
 	//初始化数据表格
    
 	initTable();
    
 	
    
 	//绑定查询按钮的点击事件
    
 	$('#btn_search').click(function(){
    
 		query();
    
 	});
    
 	//初始化审批人
    
 	initFormSelects();
    
 	//送审
    
 	$('#btn_auditor').click(function(){
    
 		$.post($("#ctx").val()+'/info.action',{
    
 			'methodName':'updateAuditorById',
    
 			'id':$('#meetingId').val(),
    
 			'auditor':$('#auditor').val()
    
 		},function(rs){
    
 			if(rs.success){
    
 				//关闭对话框
    
 				layer.closeAll();
    
 				//刷新列表
    
 				query();
    
 			}else{
    
 				layer.msg(rs.msg,{icon:5},function(){});
    
 			}
    
 		},'json');
    
 		return false;
    
 	});
    
 	
    
 });
    
  
    
 //1.初始化数据表格
    
 function initTable(){
    
 	table.render({           //执行渲染
    
       elem: '#tb',         //指定原始表格元素选择器(推荐id选择器)
    
 //      url: 'user.action?methodName=list',     //请求地址
    
       height: 340,         //自定义高度
    
       loading: false,      //是否显示加载条(默认 true)
    
       cols: [[             //设置表头
    
       {field: 'id', title: '会议编号', width: 120},
    
       {field: 'title', title: '会议标题', width: 120},
    
       {field: 'location', title: '会议地点', width: 140},
    
       {field: 'startTime', title: '开始时间', width: 220,},
    
       {field: 'endTime', title: '结束时间', width: 120},
    
       {field: 'meetingstate', title: '会议状态', width: 120},
    
       {field: 'seatPic', title: '会议排座', width: 120 
    
     	  ,templet: function(d){
    
     	        console.log(d.LAY_INDEX); //得到序号。一般不常用
    
     	        console.log(d.LAY_COL); //得到当前列表头配置信息(layui 2.6.8 新增)。一般不常用
    
     	        console.log(d);
    
     	        //得到当前行数据,并拼接成自定义模板
    
     	        return '<img src="'+d.seatPic+'">'}
    
     	 },
    
       {field: 'auditorname', title: '审批人', width: 120},
    
       {field: '', title: '操作', width: 220,toolbar:'#tbar'},
    
       ]]
    
   });
    
 	
    
 	
    
  
    
 	//会议送审
    
 	function openLayerAudit(){
    
 		//每次打开都对送审人进行初始化默认值设置
    
 		$('#auditor').val("");
    
 		//必须重新渲染
    
 		form.render('select');
    
 		//弹出对话框
    
 	    layer.open({
    
 	        type: 1,                    //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
    
 	        title:'会议送审',
    
 	        area: ['426px', '140px'],   //宽高
    
 	        skin: 'layui-layer-rim',    //样式类名
    
 	        content: $('#audit'),   //弹出内容。可以传入普通的html内容,还可以指定DOM,更可以随着type的不同而不同
    
 	    });
    
 	}
    
  
    
 	
    
 	
    
 	//在页面中的<table>中必须配置lay-filter="tb_goods"属性才能触发属性!!!
    
 	table.on('tool(tb)', function (obj) {
    
 		row = obj.data;
    
 		if (obj.event == "seat") {
    
 //			layer.msg("排座");
    
 			open(row.id);//打开弹窗
    
 		}else if(obj.event == "send"){//取消会议
    
 //			layer.msg("送审");
    
 			//判断是否已经排座
    
 			if(obj.event == 'seat'){ //会议排座
    
 				  open(row.id);
    
 			  } else if(obj.event =='send'){ //送审
    
 				  if(row.seatPic==null || row.seatPic==""){
    
 					  layer.msg('先请完成会议排座,再进行送审操作!',function(){});
    
 					  return false;
    
 				  }
    
 			  }
    
 			  
    
 			//弹出层里的送审人必须查询出来,在多功能下拉框查询
    
 			$('#meetingId').val(row.id);
    
 			  openLayerAudit();
    
 			//打开送审页面
    
 			  
    
 		}else if(obj.event == "del"){//删除
    
 			layer.msg("取消会议");
    
 		}else if(obj.event == "back"){//删除
    
 //			layer.msg("反馈详情");
    
 			openLayerFeedBack(row.id);
    
 			
    
 			
    
 		}
    
 	});
    
 }
    
  
    
 //初始化审批人
    
 function initFormSelects(){
    
 	$.getJSON($("#ctx").val()+'/user.action',{
    
 		'methodName':'queryUserAll'
    
 	},function(rs){
    
 		console.log(rs);
    
 		let data=rs.data;
    
 		$.each(data,function(i,e){
    
 			$('#auditor').append(new Option(e.name,e.value));
    
 		});
    
 		//重新渲染
    
 		form.render('select');
    
 	});
    
 }
    
  
    
  
    
  
    
 //打开会议排座对话框
    
 function open(id){
    
 	layer.open({
    
       type: 2,                    //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
    
       title: '会议排座',                   //对话框标题
    
       area: ['460px', '340px'],   //宽高
    
       skin: 'layui-layer-rim',    //样式类名
    
       content: $("#ctx").val()+'/jsp/meeting/seatPic.jsp?id='+id,                //弹出内容。可以传入普通的html内容,还可以指定DOM,更可以随着type的不同而不同
    
   });
    
 }
    
  
    
  
    
 function query(){
    
 	table.reload('tb', {
    
     url: $("#ctx").val()+'/info.action',     //请求地址
    
     method: 'POST',                    //请求方式,GET或者POST
    
     loading: true,                     //是否显示加载条(默认 true)
    
     page: true,                        //是否分页
    
     where: {                           //设定异步数据接口的额外参数,任意设
    
     	'methodName':'myinfos',
    
     	'zhuchiren':$('#zhuchiren').val(),
    
     	'title':$('#title').val(),
    
     },  
    
     request: {                         //自定义分页请求参数名
    
         pageName: 'page', //页码的参数名称,默认:page
    
         limitName: 'rows' //每页数据量的参数名,默认:limit
    
     },
    
     done: function (res, curr, count) {
    
     	console.log(res);
    
     }
    
    });
    
 	
    
 	// 打开查看本会议的反馈详情
    
 	function openLayerFeedBack(id){
    
 		$.getJSON('feedBack.action',{
    
 			methodName:'queryMeetingBackByMeetingId',
    
 			meetingId:id
    
 		},function(data){
    
 			$('#meeting_ok').html("");
    
 			$('#meeting_no').html("");
    
 			$('#meeting_noread').html("");
    
 			if(data.success){
    
 				console.log(data.data);
    
 				$.each(data.data,function(i,e){
    
 					if(e.result==1)
    
 						$('#meeting_ok').html(e.names);
    
 					else if(e.result==2)
    
 						$('#meeting_no').html(e.names);
    
 					else
    
 						$('#meeting_noread').html(e.names);
    
 				});
    
 				//弹出对话框
    
 			    layer.open({
    
 			        type: 1,                    //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
    
 			        title:'反馈详情',
    
 			        area: ['426px', '420px'],   //宽高
    
 			        skin: 'layui-layer-rim',    //样式类名
    
 			        content: $('#feedback'),   //弹出内容。可以传入普通的html内容,还可以指定DOM,更可以随着type的不同而不同
    
 			        btn:['关闭'],
    
 			        yes:function(index,layero){
    
 			        	layer.closeAll();
    
 			        }
    
 			    });
    
 			}
    
 		});
    
 		
    
 	}
    
 	
    
 }
    
    
    
    
复制代码
 let form,$;

    
 layui.use(['form','jquery'],function(){
    
 	form=layui.form,
    
 	$=layui.jquery;
    
 });
    
  
    
  
    
 function getData(){
    
 	return form.val('back');
    
 }
    
    
    
    

Action

复制代码
 会议反馈详情

    
 public String add(HttpServletRequest req,
    
 			HttpServletResponse resp) throws ServletException,IOException{
    
 		try {
    
 			backDao.add(back);
    
 			ResponseUtil.writeJson(resp, R.ok(200, "反馈成功!"));
    
 		} catch (Exception e) {
    
 			e.printStackTrace();
    
 			try {
    
 				ResponseUtil.writeJson(resp, R.error(0, "反馈失败!"));
    
 			} catch (Exception e1) {
    
 				e1.printStackTrace();
    
 			}
    
 		}
    
 		
    
 		return null;
    
 	}
    
    
    
    

Dao方法

复制代码
 /** * 新增会议反馈记录
    
 	 * @param back
    
 	 * @throws Exception 
    
 	 */
    
 	public int add(MeetingFeedBack back) throws Exception {
    
 		String sql="insert into t_oa_meeting_feedback values(?,?,?,?,?,?)";
    
 		back.setId(UUID.randomUUID().toString().replace("-", ""));
    
 		return super.executeUpdate(sql, back, new String[] {"id","meetingId","personType","personId","result","reason"});
    
 	}
    
    
    
    
复制代码
 <%@ page language="java" contentType="text/html; charset=UTF-8"

    
     pageEncoding="UTF-8"%>
    
 <%@include file="/common/header.jsp"%>
    
 <!DOCTYPE html>
    
 <html>
    
 <head>
    
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
 <script type="text/javascript" src="${pageContext.request.contextPath }/static/js/meeting/addFeedBack.js"></script>
    
 </head>
    
 <style>
    
 body{
    
 	margin:5px;
    
 }
    
 </style>
    
  
    
 <body>
    
 <div style="padding:10px;">
    
     <form class="layui-form layui-form-pane" lay-filter="back">
    
     	<!-- <div class="layui-form-item">
    
 		    <button type="submit" class="layui-btn" lay-submit="" lay-filter="meeting">立即提交</button>
    
 		    <button id="reset" type="reset" class="layui-btn layui-btn-primary">重置</button>
    
   		</div> -->
    
   		<input type="hidden" name="meetingId" value="${param.id }"/>
    
   		<input type="hidden" name="personId" value="${sessionScope.user.id }"/>
    
      <div class="layui-form-item">
    
         <label class="layui-form-label">人员类型</label>
    
         <div class="layui-input-block">
    
             <select id="personType" name="personType">
    
             <option value="">请选择人员类型</option>
    
             <option value="1">参会</option>
    
             <option value="2">列席</option>
    
 			</select>
    
         </div>
    
     </div>
    
     <div class="layui-form-item">
    
         <label class="layui-form-label">反馈结果</label>
    
         <div class="layui-input-block">
    
             <select id="result" name="result">
    
             <option value="">请选择反馈结果</option>
    
             <option value="1">参加</option>
    
             <option value="2">不参加</option>
    
 			</select>
    
         </div>
    
     </div>
    
     <div class="layui-form-item layui-form-text">
    
 		    <label class="layui-form-label">不参与会议的原因</label>
    
 		    <div class="layui-input-block">
    
 		      <textarea placeholder="请输入内容" name="reason" class="layui-textarea"></textarea>
    
 		    </div>
    
 		</div>
    
     </form>
    
 </div>
    
 </body>
    
 </html>
    
    
    
    

全部评论 (0)

还没有任何评论哟~