php url跳转至列表怎样实现ajax传参_062 OA系统考勤和报销模块的实现

305455e135828bd096fe695c5f189dd9.png

1. 考勤管理-签到-前台代码实现

(1) jQuery代码,页面初始化绑定事件,怎么实现?

$(function(){

//给按钮1绑定单击事件,实现签到功能

$("#signin").click(function(){

//发送一个ajax请求,完成签到,并通过回调函数显示签到结果

$.ajax({

url:"duty?method=signin",

type:"POST",

dataType:"text",

success:function(data){

//显示签到的结果 0 1 2

if(data==0){

$("#result").html("签到失败");

}else if(data==1){

$("#result").html("签到成功");

}else{

$("#result").html("已经签到,不能重复签到");

}

}

});

})

//给按钮2绑定单击事件,实现签退功能

});

2. 考勤管理-签到-全部功能实现

(1) 简述签到功能的逻辑?

根据数据库的请求数据来判断用户的签到状态,即0未签到,1签到成功,2已经签到不能重复签到。

(2) ajax实现的步骤?

首先给签到按钮添加单击事件。然后在绑定函数里创建ajax请求,向dutyServlet发送请求获得用户签到状态信息,然后根据返回结果在回调函数里给用户显示不同的反馈。

3. 签退-全部功能实现

(1) 简述签退逻辑。

当接收到网页的签退请求后,发送ajax请求至servlet,servlet进一步根据session中存储的emp当前登录用户信息中empid和当前登录时间dtdate来查找数据库中的签到信息,如果没有查找到相关记录,则提示用户尚未签到,如果查询到了,就将当前时间设置为签退时间并返回提示签退成功

4. 通过Ajax获取查询条件之部门列表

(1) 进入考勤管理页面之后,如何加载所属部门下拉列表?

在dutyList.jsp页面加载完成时发起ajax请求访问servlet中findAllDept方法获得所有部门信息,然后把Gson.toJson之后的字符串deptList信息response.getWriter.println来直接输出发回给ajax。ajax在回调函数中拼接字符串,然后填充标签.html。

(2) 点击查询后,显示所有签到信息,如何利用ajax实现,简述过程?

给查询按钮绑定单击事件,通过ajax发送请求至dutyServlet的findDuty方法,并打包用户设置的查询条件,然后根据用户设置的条件去数据库请求数据,获取到dutyList数据后再返回给ajax,通过遍历来显示到页面上。

5. 考勤管理-使用Ajax查询考勤信息

(1) 按照条件查询,可以有两种方式,第一种:点击查询按钮之后,请求后台servlet,然后从servlet中跳转到考勤管理页面,还有一种方式:利用ajax查询,请问这两种方式哪一种比较好?优点是什么呢?

使用ajax比较好,应为ajax是局部刷新,不会影响其他地方的数据,同时灵活方便还降低了对服务器的资源消耗。

1. 使用Ajax查询考勤信息2

(1) 如何拼接考勤信息列表字符串?

//拼接考勤信息列表字符串

var str ="";

for(var i=0;i<arr.length;i++){

str += '<tr>'+

'<td>'+

'<input name="" type="checkbox" value="" />'+

'</td>'+

'<td>'+arr[i].emp.empid+'</td>'+

'<td>'+arr[i].emp.realname+'</td>'+

'<td>'+arr[i].emp.dept.deptname+'</td>'+

'<td>'+arr[i].dtdate+'</td>'+

'<td>'+arr[i].signintime+'</td>'+

'<td>'+arr[i].signouttime+'</td>'+

'</tr>';

}

2. 考勤管理-使用Ajax查询考勤信息3

(1) 如何在后台sql中进行条件的拼接?

StringBuilder sql = new StringBuilder("select dt.*,e.realname,e.empid,de.deptname,de.deptno"

+" from duty dt"

+" left join employee e"

+" on dt.emprid=e.empid"

+" left join dept de"

+" on e.deptno=de.deptno where 1=1 ");

if (empid!=null&&"".equals(empid)) {

sql.append(" and dt.empid= '"+empid+"'");

}

if (deptno!=0) {

sql.append(" and de.deptno="+deptno);

}

DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

if (dtdate!=null) {

String sdtdate = sdf.format(dtdate);

sql.append(" and to_char(dt.dtdate,'yyyy-MM-dd')>= '"+sdtdate+"'");

}

3. 考勤管理-使用POI导出考勤数据到xls1

(1) POI干嘛的?

可以实现java程序对MS Office文件的读写操作。

(2) POI和JXL的区别?

JXL:对中文支持比较好,是纯java API,可以跨平台。

POI:功能强大,支持函数和宏以及格式等操作,但是代码不成熟,不支持跨平台。

4. 考勤管理-使用POI导出考勤数据到xls2

(1) 如何使用POI,简述步骤?

将poi的jar包复制粘贴到webroot下的lib文件夹,系统会自动添加路径。

(2) 如何将后台查到的考勤数据,弄到前台客户端下载为excel,代码如何实现呢?

public void exportXls(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//获取三个查询条件

String empid = req.getParameter("empid");

String sdeptno = req.getParameter("deptno");

int deptno = 0;

if (sdeptno!=null) {

deptno=Integer.parseInt(sdeptno);

}

String sdtdate = req.getParameter("dtdate");

java.sql.Date dtdate = null;

try {

dtdate=java.sql.Date.valueOf(sdtdate);

} catch (RuntimeException e) {

e.printStackTrace();

}

//调用业务层获取所有的部门

List<Duty> dutyList=ds.findDuty(empid,deptno,dtdate);

//返回OutputStream

createExcel(dutyList,resp);

}

private static void createExcel(List<Duty> list,HttpServletResponse resp) {

// 创建一个Excel文件

HSSFWorkbook workbook = new HSSFWorkbook();

// 创建一个工作表

HSSFSheet sheet = workbook.createSheet("考勤表一");

CellRangeAddress region = new CellRangeAddress(0, // first row

0, // last row

0, // first column

2 // last column

);

sheet.addMergedRegion(region);

HSSFRow hssfRow = sheet.createRow(0);

HSSFCell headCell = hssfRow.createCell(0);

headCell.setCellValue("员工考勤列表");

// 设置单元格格式居中

HSSFCellStyle cellStyle = workbook.createCellStyle();

cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

/*

cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

// cellStyle.setFillBackgroundColor(HSSFColor.GREEN.index);

cellStyle.setFillForegroundColor(HSSFColor.GREEN.index);

HSSFFont font = workbook.createFont();

font.setFontName("楷体"); //字体

font.setFontHeightInPoints((short)30); //字体大小

font.setColor(HSSFColor.RED.index);//颜色

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗

font.setItalic(true); //倾斜

cellStyle.setFont(font);

*/

headCell.setCellStyle(cellStyle);

// 添加表头行

hssfRow = sheet.createRow(1);

// 添加表头内容

headCell = hssfRow.createCell(0);

headCell.setCellValue("用户名");

headCell.setCellStyle(cellStyle);

headCell = hssfRow.createCell(1);

headCell.setCellValue("真实姓名");

headCell.setCellStyle(cellStyle);

headCell = hssfRow.createCell(2);

headCell.setCellValue("所属部门");

headCell.setCellStyle(cellStyle);

headCell = hssfRow.createCell(0);

headCell.setCellValue("出勤日期");

headCell.setCellStyle(cellStyle);

headCell = hssfRow.createCell(1);

headCell.setCellValue("签到时间");

headCell.setCellStyle(cellStyle);

headCell = hssfRow.createCell(2);

headCell.setCellValue("签退时间");

headCell.setCellStyle(cellStyle);

// 添加数据内容

for (int i = 0; i < list.size(); i++) {

hssfRow = sheet.createRow((int) i + 2);

Duty duty = list.get(i);

// 创建单元格,并设置值

HSSFCell cell = hssfRow.createCell(0);

cell.setCellValue(duty.getEmp().getEmpid());

cell.setCellStyle(cellStyle);

cell = hssfRow.createCell(1);

cell.setCellValue(duty.getEmp().getRealname());

cell.setCellStyle(cellStyle);

cell = hssfRow.createCell(2);

cell.setCellValue(duty.getEmp().getDept().getDeptname());

cell.setCellStyle(cellStyle);

cell = hssfRow.createCell(3);

cell.setCellValue(duty.getDtdate());

cell.setCellStyle(cellStyle);

cell = hssfRow.createCell(4);

cell.setCellValue(duty.getSignintime());

cell.setCellStyle(cellStyle);

cell = hssfRow.createCell(5);

cell.setCellValue(duty.getSignouttime());

cell.setCellStyle(cellStyle);

}

// 保存Excel文件

try {

resp.setContentType("application/vnd.ms-excel");

resp.setHeader("Content-disposition", "attachment;filename=duty.xls");//附件形式下载,

// OutputStream outputStream = new FileOutputStream("D:/students.xls"); 写到服务器

//写到本地

ServletOutputStream outputStream = resp.getOutputStream();

workbook.write(outputStream);

outputStream.close();

} catch (Exception e) {

e.printStackTrace();

}

}

(3) 简述给出的OperateExcelUtil.java的功能含义?

可以将查询到的考勤信息从数据库导出到客户端本地,以excel的形式。同时还能修改表格的样式和内容。

5. 报销管理-理解数据库表和创建实体类

(1) 简述系统中表之间的关系:

报销单表是主表,每个报销单包含多个报销单明细表、支出表、报销单上传图片表、报销单审核表。

6. 报销管理-添加报销单-视图层

(1) 在完成视图层操作中,有哪些注意事项?

报销人、审核人已经确定,不需要输入;

报销时间、报销总额不需要输入;

报销单明细类型采用静态类型,可以增加报销单明细类型表。

JQuery技巧:增加报销单项,增加上传文件项。

(2) 在页面中,如何利用jQuery完成添加报销项操作?

function addExpenseItem(id){

//获取上级标签

var table = $(id);

//创建当前标签

var content = $('<tr>'+

'<td><div class="vocation"><select class="select1">'+

'<option value="1">通信费用</option><option value="2">办公室耗材</option><option value="3">住宿费用</option><option value="4">房租水电</option><option value="5">其他</option>'+

'</select></div></td>'+

'<td><input name="" type="text" class="dfinput" /><i></i></td>'+

'<td><input name="" type="text" class="dfinput" /><i></i></td>'+

'<td><input type="button" class="btn" value="删除" οnclick="removeCurrItem(this)"/></td></tr>');

//加入上级标签

table.append(content);

$(".select1").uedSelect({

width : 345

});

}

(3) 在页面中,如何利用jQuery完成添加图片操作?

function addPhoto(){

//获取上传图片li

var li = $("#uploadphoto");

//http://console.info(li);

//准备添加的dom对象

var content=$("<span><label> </label><input name='photo' type='file' class='dfinput' /><i></i>"+

"<input type='button' class='btn' value='删除' οnclick='removeCurrSpan(this)'/></span>");

//加入到指定位置

li.append(content);

}

7. 报销管理-添加报销单-控制层

(1) 页面中假如添加了多个报销项,那么在控制层接收数据的思路是什么呢?怎么接收数据呢?

用request.getParameterValues(“name”)来接收各个报销项不同属性的值的list集合,然后再循环遍历取出其中的值封装在ExpenseItem对象中,然后将组成的itemList封装到Expense对象中。

(2) 为什么在数据库中有状态码字段,这个字段的作用是什么?缺少这个字段可以吗?

来表示报销单目前的审核状态:1:审核中 2 审核结束通过 3 审核结束驳回

不可以,这个字段表名了报销单当前的状态,虽然在审核信息表里也有该字段,但是该字段信息需要在多个表中频繁被查询,所以适当的冗余可以提高查询效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值