一。前面页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3" />
<meta http-equiv="description" content="This is my page" />
<script type="text/javascript"
src="../../components/jquery/jquery-1.7-min.js"></script>
<script type="text/javascript" src="../../util/jquery.query.js"></script>
<link rel="stylesheet" type="text/css" href="../../util/css/base.css" />
<script type="text/javascript" src="../../util/public.js"></script>
<script type="text/javascript" src="../../util/rputil.js"></script>
<script type="text/javascript" src="../../util/util.js"></script>
<script type="text/javascript" src="../../components/SWFUPLOAD v2.2.0/swfupload.js"></script> <!--
<script type="text/javascript" src="../../components/SWFUPLOAD v2.2.0/swfupload.queue.js"></script>
<script type="text/javascript" src="../../components/SWFUPLOAD v2.2.0/handlers.js"></script>
<script type="text/javascript" src="../../components/SWFUPLOAD v2.2.0/fileprogress.js"></script> -->
<!-- <link rel="stylesheet" type="text/css" href="../../components/SWFUPLOAD v2.2.0/default.css" />
-->
<link rel="stylesheet" type="text/css"
href="css/projectSite_PhotoManage.css" />
<script type="text/javascript" src="js/projectSite_PhotoManage.js"></script>
<script type="text/javascript" src="js/swfupload.js"></script>
</head>
<body>
<div class="imgWrapper">
<div class="imgContent">
<div class="operPanel">
<div class="addImgPng">
<img src="img/reload.png" title='刷新照片列表'>
</div>
<div class="uploadImg">
<span id='spanButtonPlaceholder'></span>
</div>
<div class="batchDel">
<span class="content">批量删除</span>
</div>
<div class="selection">
<table>
<tr>
<td><input id="openMultiSelection" type=checkbox>开启多选</td>
<td>
<div class='msgshow'>
<a href="javascript:void(0);" οnclick="MultiSelection(this)"
_mm='false'>[全选/反选]</a>你已经选择了<span id="selectedNum">0</span>张照片!
</div>
</td>
</tr>
</table>
</div>
<div class="clearAll"></div>
</div>
<div class="photoWrapper">
</div>
<div class="photoPage">
</div>
</div>
<div class="imgDesc">
<div class="caption">
<div class="title">上传说明</div>
<div class="captionIcon"></div>
<div class="clearAll"></div>
</div>
<dl>
<dt>拍照部位</dt>
<dd></dd>
</dl>
<dl>
<dt>拍照命名</dt>
<dd></dd>
</dl>
<dl>
<dt>拍照要求</dt>
<dd></dd>
</dl>
<dl>
<dt>拍照人</dt>
<dd></dd>
</dl>
<dl>
<dt>拍照时间</dt>
<dd></dd>
</dl>
<dl>
<dt>备注</dt>
<dd></dd>
</dl>
</div>
<div class="imgDescBack">
<div class="caption">
<div class="captionIcon"></div>
<div class="clearAll"></div>
</div>
</div>
</div>
</body>
</html>
js文件
$(document).ready(function() {
parm = getParm()
$(".addImgPng").click(function(){window.location.reload()})
// $(".uploadImg").click(uploader)
$(".batchDel").click(batchDel)
/*$(".imgDesc .captionIcon").click(function(){
var w = $(this).parent().parent().width();
$(".imgContent").width($(".imgContent").width()+w);
$(this).parent().parent().hide()
$(".imgDescBack").show()
})
$(".imgDescBack .captionIcon").click(function(){
$(this).parent().parent().hide();
var w = $(".imgDesc").width();
$(".imgContent").width($(".imgContent").width()-w);
$(".imgDesc").show()
})*/
$("#openMultiSelection").click(function() {
if (this.checked) {
$(".msgshow").show();
$("#selectedNum").text($(".photo .imgselection:checked").size())
$(".photo .imgselection").show()
} else {
$(".msgshow").hide();
$(".photo .imgselection").hide()
$(".photo .imgselection").each(function() {
this.checked = false;
});
}
})
loadPhotoDesc()
page.setUrl("/cpm/functions/sitereportphoto/queryByPageSiteReportPhotoAction.action");
page.init();
/* $(".photoViewer").click(function(){
$(this).animate({left:$(this).attr("_left"),top:$(this).attr("_top"),width:$(this).attr("_width"),height:$(this).attr("_height")},200,function(){
$(this).width(0).height(0).css({top:0,left:0})
});
});*/
});
var parm;
// 获取页面 url参数
function getParm() {
// debugger;
var map = {};
var urlsearch = location.search
var ps = urlsearch.substring(1, urlsearch.length).split("&")
for (var i = 0; i < ps.length; i++) {
if (ps[i]) {
var pms = ps[i].split("=");
if (pms.length == 2) {
map["parm." + pms[0]] = decodeURIComponent(pms[1] || "")
}
}
}
return map;
}
// 获取图片列表信息
function loadPhotos() {
AjaxCall(
"/cpm/functions/sitereportphoto/querySiteReportPhotoAction.action",
parm, function(result) {
if (result && result.photos) {
buildPhoto(result.photos)
}
}, "json", true);
}
function editPhoto(){
editPhotoName($(this).parent().parent().next());
$(this).parent().hide();
if(event.stopPropagation)event.stopPropagation();else event.cancelBubble=true;
}
function delPhoto(){
var id = $(this).parent().parent().attr("id");
if(!confirm("确定要删除?")){
return false;
}
AjaxCall(
"/cpm/functions/sitereportphoto/deleteSiteReportPhotoAction.action",{'parm.ID':id},function(r){
if(r && !r.errMsg){
page.toPage(0);
}
}, "json", true);
return false;
}
var ie5 = (function() {
var m = window.top.document.documentMode;
if(m <=5){
return window.top.document.compatMode == 'BackCompat'
}
return false;
})();
function photoLoaded(event){
var photoViewer = $(event && event.target);
if(!photoViewer[0]){
photoViewer = $(window.top.document.body).find(".photoViewer")
}
if(!photoViewer[0].complete){
setTimeout("photoLoaded()",100);
return;
}
var wtop = $(window.top)
var width = photoViewer.width()
var height = photoViewer.height()
photoViewer.css({border:0,margin:0,padding:0,'cursor':'pointer','z-index':'1000',position:ie5?'absolute':'fixed',left : ((wtop.width()-width)/2),top : ((wtop.height()-height)/2)})
showPhotoIndx(photoViewer.attr("idx"),photoViewer.attr("total"))
}
function showPhotoIndx(idx,total){
$(window.top.document.body).find(".photoScreenWrapper").append("<div class='instantshow' style='top:-1;left:-1;z-index:1002;text-align:center;vertical-align:middle;color:white;width:100%;height:100%;border-width:0;margin:0;padding:0;background-color:transparent;font-family:Helvetica Neue, 微软雅黑, Tohoma;font-size:72px;font-weight:900;opacity:0.30;-moz-opacity:0.30;filter:alpha(opacity=30);'><span style='background-color:black;'> "+(parseInt(idx)+1)+" / "+total+" </span></div>")
$(window.top.document.body).find(".photoScreenWrapper .instantshow").css('position',ie5?'absolute':'fixed')
setTimeout("removeInstantShow()",600);
}
function removeInstantShow(){
$(window.top.document.body).find(".photoScreenWrapper .instantshow").remove();
}
function sphotoDrag(event){
var photoViewer = $(this);
photoViewer.attr("xy",event.originalEvent.clientX+","+event.originalEvent.clientY)
}
function ephotoDrag(event){
var photoViewer = $(this);
var texts = (photoViewer.attr("xy")||"").split(",")
var x = texts[0]
var y = texts[1]
var top = photoViewer.position().top + event.originalEvent.clientY - parseFloat(y);
var left = photoViewer.position().left + event.originalEvent.clientX - parseFloat(x);
photoViewer.css({top:top,left:left})
}
function photoDrag(event){
var photoViewer = $(this);
var texts = (photoViewer.attr("xy")||"").split(",")
var x = texts[0]
var y = texts[1]
var top = photoViewer.position().top + event.originalEvent.clientY - parseFloat(y);
var left = photoViewer.position().left + event.originalEvent.clientX - parseFloat(x);
photoViewer.css({top:top,left:left})
photoViewer.attr("xy",event.originalEvent.clientX+","+event.originalEvent.clientY)
}
function closeViewer(event){
if(event.type == 'click' )
$(this).remove();
if(event.originalEvent.stopPropagation)
event.originalEvent.stopPropagation();
else
event.originalEvent.cancelBubble=true;
}
function viewPhoto(){
var t = $(this);
var wtop = $(window.top.document.body)
var photoViewer = wtop.find(".photoViewer");
if(!photoViewer[0]){
wtop.append("<div class='photoScreenWrapper'><div class='photoViewerWrapper'></div><img class='photoViewer'><div class='oper_tab'><span class='prev'><img src='../images/base/left.png'></span><span class='middlePanel'></span><span class='next'><img src='../images/base/right.png'></span></div></div>")
photoViewer = wtop.find(".photoViewer");
photoViewer.bind("load", photoLoaded).bind("dragstart", sphotoDrag).bind("drag", photoDrag).bind(
"dragend", ephotoDrag);
photoViewer.parent().bind("click",closeViewer)
photoViewer.next().find(".prev,.next").bind("click",gotoPhoto)
photoViewer.parent().css({'background-color':'transparent',width:$(window.top).width()+2,height:$(window.top).height()+2,left:-1,top:-1,'z-index':'999',position:ie5?"absolute":'fixed'})
photoViewer.prev().css({border:0,margin:0,padding:0,top:0,left:0,width:'100%',height:'100%',position:ie5?"absolute":'fixed','background-color':'grey',opacity: 0.5,'-moz-opacity':0.5,filter:'alpha(opacity=50)'});
photoViewer.next().css({'z-index':1001,'background-color':'black',opacity: 0.5,'-moz-opacity':0.5,filter:'alpha(opacity=50)','border-radius':'5px',width:'50%',left:'50%','margin-left':'-25%',height:'63px',position:ie5?'absolute':'fixed',bottom:'-5px'});
photoViewer.next().find("img").css({height:'40px',width:'25px'});
photoViewer.next().find(".prev").css({cursor:'pointer',position:'absolute',left:'0',top:'10px',width:'76px','text-align':'center','vertical-align':'middle'})
photoViewer.next().find(".next").css({cursor:'pointer',position:'absolute',right:0,top:'10px',width:'76px','text-align':'center','vertical-align':'middle'})
photoViewer.next().find(".middlePanel").css({display:'block',height:'63px','line-height':'63px','text-align':'center',color:'white','text-align':'center',margin:'0 0',width:'100%','font-family':'Helvetica Neue, 微软雅黑, Tohoma','font-size':'17px','font-weight':'normal'})
}
photoViewer.parent().show();
photoViewer.attr("src",t.children().first().attr("src")+"&random="+new Date().getTime()).attr("idx",t.parent().index()).attr("total",t.parent().parent().find(".photo").size())
photoViewer.next().find(".middlePanel").text(t.next().text())
}
function gotoPhoto(event){
var clazz = $(this).attr("class")
var wtop = $(window.top.document.body)
var photoViewer = wtop.find(".photoViewer");
var idx = parseInt(photoViewer.attr("idx")||0)
if(clazz == 'prev'){
if(idx-1>=0)
{
photoViewer.attr("src",$(".photoWrapper .photo:eq("+(idx-1)+") .photo_img").attr("src")+"&random="+new Date().getTime()).attr("idx",idx-1)
photoViewer.next().find(".middlePanel").text($(".photoWrapper .photo:eq("+(idx-1)+") .photo_title").text())
}
else
alterFirstIcon()
}else if(clazz == 'next'){
if((idx+1)<=(parseInt(photoViewer.attr("total"))-1))
{
photoViewer.attr("src",$(".photoWrapper .photo:eq("+(idx+1)+") .photo_img").attr("src")+"&random="+new Date().getTime()).attr("idx",idx+1)
photoViewer.next().find(".middlePanel").text($(".photoWrapper .photo:eq("+(idx+1)+") .photo_title").text())
}
else
alterLastIcon()
}
if(event.originalEvent.stopPropagation)
event.originalEvent.stopPropagation();
else
event.originalEvent.cancelBubble=true;
}
function alterLastIcon(){
$(window.top.document.body).find(".photoScreenWrapper").append("<div class='instantshow' style='top:-1;left:-1;z-index:1002;text-align:center;vertical-align:middle;color:white;width:100%;height:100%;border-width:0;margin:0;padding:0;background-color:transparent;font-family:Helvetica Neue, 微软雅黑, Tohoma;font-size:72px;font-weight:900;opacity:0.30;-moz-opacity:0.30;filter:alpha(opacity=30);'><span style='background-color:black;'> 已经是最后一张 </span></div>")
$(window.top.document.body).find(".photoScreenWrapper .instantshow").css('position',ie5?'absolute':'fixed')
setTimeout("removeInstantShow()",600);
}
function alterFirstIcon(){
$(window.top.document.body).find(".photoScreenWrapper").append("<div class='instantshow' style='top:-1;left:-1;z-index:1002;text-align:center;vertical-align:middle;color:white;width:100%;height:100%;border-width:0;margin:0;padding:0;background-color:transparent;font-family:Helvetica Neue, 微软雅黑, Tohoma;font-size:72px;font-weight:900;opacity:0.30;-moz-opacity:0.30;filter:alpha(opacity=30);'><span style='background-color:black;'> 已经是第一张 </span></div>")
$(window.top.document.body).find(".photoScreenWrapper .instantshow").css('position',ie5?'absolute':'fixed')
setTimeout("removeInstantShow()",600);
}
function html(photo) {
var div = "<div class=\"photo\">"
+ "<a class=\"a_photo\" id="
+ photo.ID
+ ">"
+ "<img class=\"photo_img\" src=\"/cpm/functions/sitereportphotodown/downSiteReportPhotoDownAction.action?parm.ID="
+ photo.ID
+ "&parm.PHOTO_DIR="
+ photo.PHOTO_DIR
+ "&parm.IMG_TYPE="
+ photo.IMG_TYPE
+ "\"/><input class=\"imgselection\" type=checkbox />"
+ "<img class=\"imgOper\" src=\"img/down.png\"/>"
+ "<ul class=\"operMenu\"><li class=\"edit\"><div><span>编辑</span></div></li><li class=\"delete\"><div><span>删除</span></div></li></ul>"
+ "</a>"
+ "<span class=\"photo_title\" οndblclick=\"editPhotoName()\">"
+ photo.PHOTO_NAME + "</span>" + "</div>";
return div;
}
function editPhotoName(t){
var namePanel = t||event.srcElement;
var id = $(namePanel).prev().attr("id");
if($(namePanel).next() && $(namePanel).next().attr("name") == 'PHOTO_NAME'){
$(namePanel).next().val($(namePanel).text()).show();
}else
{
$(namePanel).after("<input type=text name='PHOTO_NAME' PHOTO_ID="+id+" style='width:122px;height:24px;' value='"+$(namePanel).text()+"'>")
$(namePanel).next().bind({"blur":fblur,"keydown":fchange, "change":fchange});
}
$(namePanel).hide();
$(namePanel).next().focus();
}
function fblur(t){
$(t.srcElement||t).hide().prev().show();
}
function fchange(t){
var e = t.srcElement;
if(t.type == 'change' || t.type == 'keydown' && (t.keyCode == 13 || t.keyCode == 27)){
if(t.keyCode == 27 || e.value == $(e).prev().text()){
fblur(t);
return;
}
if(t.type == 'keydown' && t.keyCode == 13){
$(e).unbind("change")
}
if(!e.value || e.value.replace("[^\0x00-\0xff]",'**').length>200 || e.value.match(/[."<>|?*':]/)){
alert("照片名称必须在1-100字之间,并且不能包含.\"<>|?*':等特殊字符");
return;
}
if(t.type == 'keydown' && t.keyCode == 13){
fblur(t)
}
var map = getParm();
map["parm.ID"] = $(e).attr("PHOTO_ID");
map["parm.PHOTO_NAME"] =e.value;
AjaxCall("/cpm/functions/sitereportphoto/editSiteReportPhotoAction.action",map,function(r){
if(t.type == 'keydown' && t.keyCode == 13)$(e).bind("change",fchange);
if(r){
if(r.errMsg)
{
e.value = $(e).prev().text();
alert(r.errMsg);
}
else
$(e).prev().text(e.value);
}
},"json",true);
}
}
function showMe(t){
var img = t.srcElement;
if(img.readyState && img.readyState== 'complete'){
$(img).show().parent().css("background","")
}
}
// 获取照片描述信息
function loadPhotoDesc() {
AjaxCall("/cpm/functions/sitereportphoto/queryPhotoDescSiteReportPhotoAction.action",parm,function(r){
if(r && r.photos){
var photo = r.photos[0];
if(photo){
$(".imgDesc dd:eq(0)").append(photo.NAME);
$(".imgDesc dd:eq(1)").append(photo.EXT1);
$(".imgDesc dd:eq(2)").append(photo.EXT2);
$(".imgDesc dd:eq(3)").append(photo.EXT3);
$(".imgDesc dd:eq(4)").append(photo.EXT4);
$(".imgDesc dd:eq(5)").append(photo.EXT5);
}
}
},"json",true);
}
// 照片上传借口方法
function uploader() {
var DICT_TYPE = parm['parm.DICT_TYPE']
var SITE_ID = parm['parm.SITE_ID'];
var PROJECT_ID = parm['parm.PROJECT_ID'];
var TYPE = parm['parm.TYPE'];
var POSITION = parm['parm.POSITION'];
Util.openWindow("照片上传",
"/cpm/functions/projectsitephoto/projectSite_PhotoUpload.html",
700, 500, {
DICT_TYPE : DICT_TYPE,
SITE_ID : SITE_ID,
PROJECT_ID : PROJECT_ID,
PHOTO_TYPE : TYPE,
PHOTO_POSITION : POSITION
}, function() {
page.toPage(0);
})
}
// 批量删除方法
function batchDel() {
if($(".photo .imgselection:checked").size()== 0){
alert("请勾选上需要删除的照片!");
return;
}else{
if(!confirm("确定要删除勾选上的照片?")){
return;
}
}
var ids = [];
$(".photo .imgselection:checked").each(function(){ids[ids.length] = $(this).parent().attr("id");})
AjaxCall(
"/cpm/functions/sitereportphoto/deleteSiteReportPhotoAction.action",{'parm.IDS':ids.join(",")},function(r){
if(r){
page.toPage(0);
}
}, "json", true);
}
function MultiSelection(t){
$(".photo .imgselection").each(function(){this.checked = !this.checked;});
$("#selectedNum").text($(".photo .imgselection:checked").size())
}
function buildPhoto(photos){
$(".photo").remove()
for (var i = 0;photos && i < photos.length; i++) {
$(".photoWrapper").append(html(photos[i]));
$(".photoWrapper .photo:last").mouseover(function(){
$(this).find(".imgOper").show();
}).mouseleave(function(){
$(this).find(".imgOper").hide();
$(this).find(".operMenu").hide();
}).find(".imgOper").click(function(){$(this).parent().find(".operMenu").show();if(event.stopPropagation)event.stopPropagation();else event.cancelBubble=true;});
$(".photoWrapper .photo:last .a_photo").click(viewPhoto);
$(".photoWrapper .photo:last .edit").click(editPhoto);
$(".photoWrapper .photo:last .delete").click(delPhoto);
$(".photoWrapper .photo:last .imgselection").click(function(){$("#selectedNum").text($(".photo .imgselection:checked").size());if(event.stopPropagation)event.stopPropagation();else event.cancelBubble=true;});
}
}
var page = {pageIndex:0,pageSize:18,totalPage:0,totalCount:0,view:null,build:buildPhoto,parm:{},url:"",
setUrl:function(){
this.url = arguments[0]||"";
},
setParm:function(){
this.parm = arguments[0] ||{};
},
toPage:function(){
var pid = arguments[0] || 1;
this.pageIndex = pid;
this.call();
},
bulidView:function(){
this.view.empty();
if(this.totalPage == 0)
{
return;
}
var j=1,a=3,b=7;
for(;j <= this.totalPage;j++){
$(this.view).append("<a class=\"toPage\" page=\""+j+"\" title=\"第"+j+"页\" href=\"javascript:void(0);\">"+j+"</a>");
if(this.pageIndex>a+b+1 && j == a){
if(this.view.find("#split1").size())
$(this.view).find(".toPage[page='"+j+"']").insertAfter("#split1");
else
$(this.view).find(".toPage[page='"+j+"']").after("<div id=\"split1\" class=\"page-split\">...</div>");
j = this.pageIndex - b -1;
}else if((this.totalPage - this.pageIndex >= a+b+1) && (j == new Number(this.pageIndex) + b)){
if(this.view.find("#split2").size())
$(this.view).find(".toPage[page='"+j+"']").insertAfter("#split2");
else
$(this.view).find(".toPage[page='"+j+"']").after("<div id=\"split2\" class=\"page-split\">...</div>");
j = this.totalPage - a;
}
}
this.view.find(".toPage[page='"+this.pageIndex+"']").attr("disabled","disabled");
this.view.find(".toPage").click(function(e){
if($(e.srcElement).attr("disabled")=='disabled'){
return false;
}
page.toPage($(e.srcElement).attr("page"));
});
this.view.append("<div class=\"clearall\"/>")
},
callback:function(result){
var result = arguments[0] || null;
if(result && result.page){
page.totalCount = result.page.totalCount;
page.totalPage = result.page.totalPage;
page.build(result.page.list);
page.bulidView();
}
},
init:function(){
this.view = $(".photoPage");
this.pageIndex = 1;
for(var a in parm){
var b = a.replace("parm.","");
this.parm[b] = parm[a]
}
this.call();
},
call:function(){
AjaxCall(this.url,this.json(),this.callback,"json",true);
},
json:function(){
var map = {};
for(var a in this){
if(typeof this[a] == 'object' && a != 'view'){
for(var i in this[a])
map["page."+a+"."+i] = this[a][i];
}else if(typeof this[a] == 'string' || typeof this[a] == 'number'){
map["page."+a] = this[a];
}
}
return map;
}
};
三。page分页实例类:
package com.sctf.cpm.util;
import java.util.*;
public class Page {
private int pageIndex;
private int pageSize = 10;
private int totalPage;
private int totalCount;
private List list;
private Map<String,Object> parm;
private String url;
public int getPageIndex() {
return pageIndex;
}
public void setPageIndex(int pageIndex) {
this.pageIndex = pageIndex;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public Map getParm() {
if(parm != null)
{
for(Iterator it = parm.keySet().iterator();it.hasNext();){
String obj = (String)it.next();
if(obj!=null){
if(parm.get(obj) instanceof Object[])
{
parm.put(obj, ((Object[])parm.get(obj))[((Object[])parm.get(obj)).length-1]);
}
}
}
}
return parm;
}
public void setParm(Map parm) {
this.parm = parm;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public static void main(String args[]){}
}
五:Action类:
/**
* 分页查询
* @Title: queryByPage
* @return
*/
public String queryByPage(){
photos = siteReportPhotoService.queryByPage(page);
return "queryByPage";
}
六:Service层:
public List<Map> queryByPage(Page page) {
Map map = page.getParm();
int totalCount = dao.selectTotalCount(map);
page.setTotalCount(totalCount);
int totalPage = totalCount / page.getPageSize() + (totalCount % page.getPageSize() > 0 ? 1 :0);
page.setTotalPage(totalPage);
if(totalPage == 0)
return null;
int start = (page.getPageIndex()-1) * page.getPageSize()+1;
int end = start + page.getPageSize()-1;
map.put("start", start);
map.put("end", end);
List list = dao.queryByPage(map);
page.setList(list);
return null;
}