人员出入场信息管理

This commit is contained in:
lSun 2025-05-28 16:13:16 +08:00
parent 03caaa8d28
commit be84c3258e
16 changed files with 700 additions and 81 deletions

View File

@ -103,4 +103,11 @@ public class InOutController {
}
// 出场证明,工资结算申请书
@PostMapping("/exitRoute")
@Log(title = "出场证明,工资结算申请书上传", businessType = BusinessType.UPDATE)
@ResponseBody
public R exitRoute(@RequestBody BasePersonBean bean) {
return service.exitRoute(bean);
}
}

View File

@ -93,4 +93,6 @@ public interface InOutDao {
* 一年未在场
*/
List<OutPersonTimeoutBean> getOneYearNotInPlace();
int exitRoute(BasePersonBean bean);
}

View File

@ -244,6 +244,10 @@ public class BasePersonBean {
private String exitVideoPath;
private String exitSignPath;
private String exitProvePath;
private String salaryApplicationPath;
private List<BasePersonBean> idNumberList;
@Excel(name = "务工类型 * ",required = true)

View File

@ -30,4 +30,11 @@ public interface InOutService {
* @return
*/
R bindContractId(BasePersonBean bean);
/**
* 出场证明,工资结算申请书
* @param bean
* @return
*/
R exitRoute(BasePersonBean bean);
}

View File

@ -198,6 +198,10 @@ public class InOutServiceImpl implements InOutService {
o.setUserId(bean.getUserId());
o.setExitExamineRemark(bean.getExitExamineRemark());
o.setExitStatus("1");
o.setExitVideoPath(idNumbers.getExitVideoPath());
o.setExitSignPath(idNumbers.getExitSignPath());
o.setExitProvePath(idNumbers.getExitProvePath());
o.setSalaryApplicationPath(idNumbers.getSalaryApplicationPath());
int index = dao.batchPersonOutCheck(o);
x += index;
//结束暂退结束红灯
@ -299,6 +303,12 @@ public class InOutServiceImpl implements InOutService {
return index >= 1 ? R.ok(Constants.UPDATE_SUCCESS) : R.fail(Constants.UPDATE_FAIL);
}
@Override
public R exitRoute(BasePersonBean bean) {
int i = dao.exitRoute(bean);
return i > 0 ? R.ok("成功") : R.fail("失败");
}
private List<BasePersonBean> basePersonListThread(List<BasePersonBean> list) {
list.forEach(c->{
Map<String, String> map = StringUtils.getBirthdayAgeSex(c.getIdNumber());

View File

@ -92,7 +92,8 @@
</if>
exit_time = #{exitTime},exit_examine_time = #{exitTime},exit_examine_remark = #{exitExamineRemark},is_force = '1'
where id_number = #{idNumber} and is_active = 1;
update bm_worker_ein_history set is_active = 0,exit_video_path = #{exitVideoPath},exit_sign_path = #{exitSignPath} where id_number = #{idNumber} and is_active = 1;
update bm_worker_ein_history set is_active = 0,exit_video_path = #{exitVideoPath},exit_sign_path = #{exitSignPath},exit_prove_path = #{exitProvePath},salary_application_Path = #{salaryApplicationPath}
where id_number = #{idNumber} and is_active = 1;
update bm_worker_contract set is_active = 0 where idCard = #{idNumber};
update bm_worker_contract_details set is_active = 0 where id_card = #{idNumber};
update bm_worker_contract_witness set is_active = 0 where id_number = #{idNumber};
@ -129,6 +130,18 @@
update bm_worker_ein_history set contract_id = #{contractId} where id_number = #{idNumber} and ein_time = #{einTime}
</update>
<update id="exitRoute">
update bm_worker_ein_history set
id_number = #{idNumber}
<if test="exitProvePath != null and exitProvePath != '' ">
,exit_prove_path = #{exitProvePath}
</if>
<if test="salaryApplicationPath != null and salaryApplicationPath != '' ">
,salary_application_Path = #{salaryApplicationPath}
</if>
where id_number = #{idNumber} and ein_time = #{einTime} and is_active = 1
</update>
<select id="count" resultType="int">
select count(1) from (
@ -155,6 +168,8 @@
bweh.id_number AS idNumber,
bweh.exit_video_path AS exitVideoPath,
bweh.exit_sign_path AS exitSignPath,
bweh.exit_prove_path AS exitProvePath,
bweh.salary_application_Path AS salaryApplicationPath,
bw.`name`,
td.`value` AS postName,
bst.team_name AS teamName,
@ -212,7 +227,9 @@
bweh.ein_time AS einTime,
if(bweh.exit_status>'0',exit_time,'') AS exitTime,
bweh.contract_id,
bweh.exit_status AS exitStatus
bweh.exit_status AS exitStatus,
bweh.exit_prove_path AS exitProvePath,
bweh.salary_application_Path AS salaryApplicationPath
FROM
bm_worker_ein_history AS bweh
LEFT JOIN bm_worker AS bw ON bweh.id_number = bw.id_number AND bw.IS_ACTIVE = '1'

View File

@ -4,9 +4,12 @@ let table, form;
let idNum;
let layTableIndexVideos = new Array();
let layTableIndexSigns = new Array();
let layTableIndexProves = new Array();
let layTableIndexSalaryApplication = new Array();
var idNumbers = new Array();
function setInOutData(data) {
console.log("data=",data)
dataArr = data.map(function (item) {
var parts = item.split(',');
return {
@ -18,9 +21,13 @@ function setInOutData(data) {
teamName: parts[5],
exitVideoPath: parts[6] == "null" ? "" : parts[6],
exitSignPath: parts[7] == "null" ? "" : parts[7],
exitProvePath: parts[8] == "null" ? "" : parts[8],
salaryApplicationPath: parts[9] == "null" ? "" : parts[9],
};
});
console.log("sss=",dataArr)
layui.use(['table', 'form', 'upload'], function () {
table = layui.table;
upload = layui.upload;
@ -32,14 +39,14 @@ function setInOutData(data) {
, title: '施工人员基本信息'
, cols: [[
//normal常规列无需设定、checkbox复选框列、space空列、numbers序号列
{type: 'numbers', title: '序号', width: '8%'}//序号列
, {field: 'user', title: '姓名', width: '10%'}
, {field: 'idNumber', title: '身份证', width: '12%'}
, {field: 'postName', title: '工种', width: '10%'}
, {field: 'proName', title: '所属工程', width: '10%'}
, {field: 'subName', title: '所属分包商', width: '10%'}
, {field: 'teamName', title: '所属班组', width: '10%'}
, {
{type: 'numbers', title: '序号', align: 'center',width: '6%'}//序号列
, {field: 'user', title: '姓名', align: 'center',width: '8%'}
, {field: 'idNumber', title: '身份证', align: 'center',width: '10%'}
, {field: 'postName', title: '工种', align: 'center',width: '10%'}
, {field: 'proName', title: '所属工程', align: 'center',width: '10%'}
, {field: 'subName', title: '所属分包商', align: 'center',width: '10%'}
, {field: 'teamName', title: '所属班组', align: 'center',width: '10%'}
/*, {
field: 'exitVideoPath',
title: '出场视频',
width: '10%',
@ -57,11 +64,12 @@ function setInOutData(data) {
}
return html;
}
}
}*/
, {
field: 'exitSignPath',
title: '出场签名',
width: '10%',
align: 'center',
templet: function (d, i) {
let a = d.exitSignPath;
let layTableIndex = d.LAY_TABLE_INDEX;
@ -71,7 +79,48 @@ function setInOutData(data) {
html += `<div id="exitSignPaths${layTableIndex}" ></div>`;
html += `<a class="layui-btn layui-btn-xs" id="exitSignPath${layTableIndex}" style="margin-left: 20px">上传</a>`;
} else {
html += `<div id="exitSignPaths${layTableIndex}" >${a}</div>`;
// html += `<div id="exitSignPaths${layTableIndex}" >${a}</div>`;
html = `<a href="${fileUrl + '/' + a}" target="_blank" style="color: #1E9FFF; cursor: pointer;">已上传</a>`;
}
return html;
}
}
, {
field: 'exitProvePath',
title: '出场证明',
width: '10%',
align: 'center',
templet: function (d, i) {
let a = d.exitProvePath;
let layTableIndex = d.LAY_TABLE_INDEX;
layTableIndexProves.push(layTableIndex);
let html = "";
if (a == "") {
html += `<div id="exitProvePaths${layTableIndex}" ></div>`;
html += `<a class="layui-btn layui-btn-xs" id="exitProvePath${layTableIndex}" style="margin-left: 20px">上传</a>`;
} else {
// html += `<div id="exitProvePaths${layTableIndex}" >${a}</div>`;
html = `<a href="${fileUrl + '/' + a}" target="_blank" style="color: #1E9FFF; cursor: pointer;">已上传</a>`;
}
return html;
}
}
, {
field: 'salaryApplicationPath',
title: '工资结算申请书',
width: '10%',
align: 'center',
templet: function (d, i) {
let a = d.salaryApplicationPath;
let layTableIndex = d.LAY_TABLE_INDEX;
layTableIndexSalaryApplication.push(layTableIndex);
let html = "";
if (a == "") {
html += `<div id="salaryApplicationPaths${layTableIndex}" ></div>`;
html += `<a class="layui-btn layui-btn-xs" id="salaryApplicationPath${layTableIndex}" style="margin-left: 20px">上传</a>`;
} else {
// html += `<div id="salaryApplicationPaths${layTableIndex}" >${a}</div>`;
html = `<a href="${fileUrl + '/' + a}" target="_blank" style="color: #1E9FFF; cursor: pointer;">已上传</a>`;
}
return html;
}
@ -79,11 +128,12 @@ function setInOutData(data) {
, {
field: 'operation',
title: '操作',
width: '11%', // 调整宽度以适应按钮
align: 'center',
// width: '11%', // 调整宽度以适应按钮
templet: function (d, i) {
var idNumber = d.idNumber + ''; // 确保 idNumber 是字符串
var encodedIdNumber = encodeURIComponent(idNumber); // 对 idNumber 进行编码
return '<a class="layui-btn layui-btn-danger layui-btn-xs" style="margin-left: 20px" onclick="deleteRow(\'' + encodedIdNumber + '\')">删除</a>';
return '<a class="layui-btn layui-btn-danger layui-btn-xs" onclick="deleteRow(\'' + encodedIdNumber + '\')">删除</a>';
}
}
]],
@ -208,11 +258,15 @@ function setInOutData(data) {
},
done: function (data, index, upload) {
// var idNumber = dataArr[index].idNumber; // 获取当前行的idNumber
$("#exitSignPaths" + layTableIndexSigns[i]).html(fileUrl + '/' + data.data.url);
// $("#exitSignPaths" + layTableIndexSigns[i]).html(fileUrl + '/' + data.data.url);
$("#exitSignPaths" + layTableIndexSigns[i]).html(
`<a href="${fileUrl + '/' + data.data.url}" target="_blank" style="color: #1E9FFF; cursor: pointer;">已上传</a>`
);
$("#exitSignPath" + layTableIndexSigns[i]).hide();
// dataArr[idNumber].exitVideoPath = fileUrl + '/' + data.data.url; // 更新文件路径
// updateTable(idNumber); // 更新表格
dataArr[layTableIndexSigns[i]].exitSignPath = fileUrl + '/' + data.data.url;
// dataArr[layTableIndexSigns[i]].exitSignPath = fileUrl + '/' + data.data.url;
dataArr[layTableIndexSigns[i]].exitSignPath = data.data.url;
},
allDone: function (data) {
},
@ -221,8 +275,89 @@ function setInOutData(data) {
console.log(e)
}
});
};
for (let i = 0; i < layTableIndexProves.length; i++) {
var uploadcom2 = upload.render({
elem: '#exitProvePath' + layTableIndexProves[i],
url: fileUrl + '/file/upload',
multiple: false, //是否允许多文件上传默认未false
exts: 'pdf',
auto: true, //是否自动上传 默认为true
max: 1, //最大上传数量
bindAction: '#exitProvePath' + layTableIndexProves[i], //绑定的按钮
size: 1024 * 30, //最大文件大小单位k
field: 'file', //传到后台的字段名,默认file
choose: function (obj) {
flag = false;
var suffixType = ''; //后缀类型
uploadcom2.config.elem.next()[0].value = '';
files = obj.pushFile();
obj.preview(function (index, file, result) {
});
},
done: function (data, index, upload) {
// var idNumber = dataArr[index].idNumber; // 获取当前行的idNumber
// $("#exitProvePaths" + layTableIndexProves[i]).html(fileUrl + '/' + data.data.url);
$("#exitProvePaths" + layTableIndexProves[i]).html(
`<a href="${fileUrl + '/' + data.data.url}" target="_blank" style="color: #1E9FFF; cursor: pointer;">已上传</a>`
);
$("#exitProvePath" + layTableIndexProves[i]).hide();
// dataArr[idNumber].exitVideoPath = fileUrl + '/' + data.data.url; // 更新文件路径
// updateTable(idNumber); // 更新表格
// dataArr[layTableIndexProves[i]].exitProvePath = fileUrl + '/' + data.data.url;
dataArr[layTableIndexProves[i]].exitProvePath = data.data.url;
},
allDone: function (data) {
},
error: function (e) {
//请求异常回调
console.log(e)
}
;
});
};
for (let i = 0; i < layTableIndexSalaryApplication.length; i++) {
var uploadcom3 = upload.render({
elem: '#salaryApplicationPath' + layTableIndexSalaryApplication[i],
url: fileUrl + '/file/upload',
multiple: false, //是否允许多文件上传默认未false
exts: 'pdf',
auto: true, //是否自动上传 默认为true
max: 1, //最大上传数量
bindAction: '#salaryApplicationPath' + layTableIndexSalaryApplication[i], //绑定的按钮
size: 1024 * 30, //最大文件大小单位k
field: 'file', //传到后台的字段名,默认file
choose: function (obj) {
flag = false;
var suffixType = ''; //后缀类型
uploadcom3.config.elem.next()[0].value = '';
files = obj.pushFile();
obj.preview(function (index, file, result) {
});
},
done: function (data, index, upload) {
// var idNumber = dataArr[index].idNumber; // 获取当前行的idNumber
// $("#exitProvePaths" + layTableIndexProves[i]).html(fileUrl + '/' + data.data.url);
$("#salaryApplicationPaths" + layTableIndexSalaryApplication[i]).html(
`<a href="${fileUrl + '/' + data.data.url}" target="_blank" style="color: #1E9FFF; cursor: pointer;">已上传</a>`
);
$("#salaryApplicationPath" + layTableIndexSalaryApplication[i]).hide();
// dataArr[idNumber].exitVideoPath = fileUrl + '/' + data.data.url; // 更新文件路径
// updateTable(idNumber); // 更新表格
// dataArr[layTableIndexProves[i]].exitProvePath = fileUrl + '/' + data.data.url;
dataArr[layTableIndexSalaryApplication[i]].salaryApplicationPath = data.data.url;
},
allDone: function (data) {
},
error: function (e) {
//请求异常回调
console.log(e)
}
});
};
})
}
@ -262,7 +397,7 @@ function deleteRow(idNumber) {
function batchOutApply() {
if (dataArr.length > 0) {
/*for (let i = 0; i < dataArr.length; i++) {
if (dataArr[i].exitVideoPath == '' || dataArr[i].exitSignPath == '') {
if (dataArr[i].exitVideoPath == '' || dataArr[i].exitSignPath == '' || dataArr[i].exitProvePath == '') {
layer.alert('请先上传出场视频和出场签名', {icon: 7});
return;
}

View File

@ -4,9 +4,12 @@ var example;
//rest风格接口页面对应的controller位置和权限的构成
let pageIp = "inOutSpace";
layui.use(['form','layer'], function () {
var layer = layui.layer;
var form = layui.form;
var upload,layer,form;
layui.use(['form', 'layer', 'upload'], function () {
layer = layui.layer;
form = layui.form;
upload = layui.upload;
form.render();
form.verify();
$("#searchBt").click(function () {
@ -95,7 +98,8 @@ function init() {
},
"dom": "<'dt-toolbar'r>t<'dt-toolbar-footer'<'col-sm-4 col-xs-4 hidden-xs'i><'col-xs-8 col-sm-8' p v>>",
"columns": [
{"width":"3%",
{
"width": "3%",
data: function (row, type, set, meta) {
var c = meta.settings._iDisplayStart + meta.row + 1;
return c;
@ -110,6 +114,38 @@ function init() {
{"data": "einTime", "defaultContent": "", "width": "5%"},
{"data": "exitTime", "defaultContent": "", "width": "5%"},
{"data": "contractId", "defaultContent": "", "width": "5%"},
{
"data": "", "defaultContent": "", "width": "5%",
"render": function (data, type, row) {
var idNumber = row['idNumber'];
var einTime = row['einTime'];
var exitProvePath = row['exitProvePath'];
let html = "";
if (exitProvePath) {
// html = "已上传";
html = `<a href="${fileUrl + '/' + exitProvePath}" target="_blank" style="color: #1E9FFF; cursor: pointer;">已上传</a>`;
} else {
html += buttonExitProvePath(idNumber, einTime, "", pers);
}
return html;
}
},
{
"data": "", "defaultContent": "", "width": "5%",
"render": function (data, type, row) {
var idNumber = row['idNumber'];
var einTime = row['einTime'];
var salaryApplicationPath = row['salaryApplicationPath'];
let html = "";
if (salaryApplicationPath) {
// html = "已上传";
html = `<a href="${fileUrl + '/' + salaryApplicationPath}" target="_blank" style="color: #1E9FFF; cursor: pointer;">已上传</a>`;
} else {
html += buttonSalaryApplicationPath(idNumber, einTime, "", pers);
}
return html;
}
},
{
"width": "7%",
"data": "",
@ -151,9 +187,11 @@ function bindView(idNumber, einTime) {
yes: function (index, element) {
var value = $(element).find('.layui-layer-input').val();
// 在这里处理确认后的逻辑
var form = {"idNumber": idNumber,
var form = {
"idNumber": idNumber,
"einTime": einTime,
"contractId":value};
"contractId": value
};
$.ajax({
type: 'post',
url: ctxPath + '/' + pageIp + '/bindContractId',
@ -178,3 +216,58 @@ function bindView(idNumber, einTime) {
}
});
}
function buttonExitProvePath(idNumber, einTime, permission, pers) {
if (permission != "") {
if ($.inArray(permission, pers) < 0) {
return "";
}
}
var btn = $("<button class='layui-btn layui-btn-xs' title='出场证明' onclick='exitProvePath(\"" + idNumber + "\",\"" + einTime + "\")'><i class='layui-icon'>出场证明</i></button>");
return btn.prop("outerHTML");
}
function exitProvePath(idNumber, einTime) {
var height = '40%';
var width = '70%';
var index = layer.open({
title: ['出场证明', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'],
type: 2,
content: 'exitProvePath.html',
area: [width, height],
maxmin: false,
success: function (layero, index) {
//打开页面成功时执行
var myIframe = window[layero.find('iframe')[0]['name']];
myIframe.setData(idNumber,einTime); //aaa()为子页面的方法
}
});
}
function buttonSalaryApplicationPath(idNumber, einTime, permission, pers) {
if (permission != "") {
if ($.inArray(permission, pers) < 0) {
return "";
}
}
var btn = $("<button class='layui-btn layui-btn-xs' title='工资结算申请书' onclick='salaryApplicationPath(\"" + idNumber + "\",\"" + einTime + "\")'><i class='layui-icon'>工资结算申请书</i></button>");
return btn.prop("outerHTML");
}
function salaryApplicationPath(idNumber, einTime) {
var height = '40%';
var width = '70%';
var index = layer.open({
title: ['工资结算申请书', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'],
type: 2,
content: 'salaryApplicationPath.html',
area: [width, height],
maxmin: false,
success: function (layero, index) {
//打开页面成功时执行
var myIframe = window[layero.find('iframe')[0]['name']];
myIframe.setData(idNumber,einTime); //aaa()为子页面的方法
}
});
}

View File

@ -92,10 +92,10 @@ function init() {
"render": function (data, type, row) {
let node = "";
if (row.exitStatus == "-1" || row.exitStatus == "2") {
node = '<input type="checkbox" class="checkOne" value=\"' + row.name + ',' + row.idNumber + ',' + row.postName + ',' + row.proName + ',' + row.subName + ',' + row.teamName + ',' + row.exitVideoPath + ',' + row.exitSignPath + '\" id="check_item_' + row.idNumber + '">' +
node = '<input type="checkbox" class="checkOne" value=\"' + row.name + ',' + row.idNumber + ',' + row.postName + ',' + row.proName + ',' + row.subName + ',' + row.teamName + ',' + row.exitVideoPath + ',' + row.exitSignPath + ',' + row.exitProvePath + ',' + row.salaryApplicationPath + '\" id="check_item_' + row.idNumber + '">' +
'<label for="check_item_' + row.idNumber + '"></label>';
} else {
node = '<input type="checkbox" class="checkOne" title="已出场" disabled = "disabled" value=\"' + row.name + ',' + row.idNumber + ',' + row.postName + ',' + row.proName + ',' + row.subName + ',' + row.teamName + ',' + row.exitVideoPath + ',' + row.exitSignPath + '\" id="check_item_' + row.idNumber + '">' +
node = '<input type="checkbox" class="checkOne" title="已出场" disabled = "disabled" value=\"' + row.name + ',' + row.idNumber + ',' + row.postName + ',' + row.proName + ',' + row.subName + ',' + row.teamName + ',' + row.exitVideoPath + ',' + row.exitSignPath + ',' + row.exitProvePath + ',' + row.salaryApplicationPath + '\" id="check_item_' + row.idNumber + '">' +
'<label for="check_item_' + row.idNumber + '" ></label>';
}
return node;
@ -236,7 +236,7 @@ function evaluateView(name, idNumber, einTime, exitTime, proName, postName) {
* 勾选批量出厂人员后弹出页面
* */
function batchOutApplyView() {
let width = "70%";
let width = "80%";
let height = "80%";
let checkedArr = getAllCheckedValue();
var layerIndex = layer.open({

View File

@ -0,0 +1,101 @@
let upload,checkupFilePath,idNumbers,einTimes;
function setData(idNumber,einTime){
idNumbers =idNumber;
einTimes = einTime;
layui.use(['form', 'laydate', 'upload', 'element'], function () {
let form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
upload = layui.upload;
form.render();
var uploadup = upload.render({
elem: '#checkup_img',
url: fileUrl + '/file/upload', //改成您自己的上传接口
multiple: false, //是否允许多文件上传默认未false
dataType: "json",
exts: 'pdf|PDF',
auto: true, //是否自动上传 默认为true
number: 1, //限制为1张
size: 1024*30, //最大文件大小单位k
bindAction: '#hideUploadCheckup', //绑定的按钮
field: 'file', //传到后台的字段名,默认file
choose: function (obj) {
flag = false;
// 清空现有预览和文件信息
$('#checkupProve').empty();
checkupFilePath = ''; // 确保清除旧的文件路径
obj.preview(function (index, file, result) {
$("#previewCheckupProve").css("display", "");
var previewImgSrc = "../../../../img/filetype/pdf.png"; // 预览图片源
$('#checkupProve').append(
'<div id="' + index + '" style="display: inline-block;text-align: center;width:150px">' +
'<img src="' + previewImgSrc + '" alt="' + file.name + '" style="height: 80px;width: 80px;margin-right: 10px" class="layui-upload-img ">' +
'<div><span>' + (file.name.length > 8 ? (file.name.substr(0, 8) + "..") : file.name) + '</span></div>' +
'</div>'
);
});
},
done: function (data) {
if(data.code === 200) {
layer.msg('上传成功');
checkupFilePath = data.data.url;
} else {
layer.msg('上传失败');
$('#checkupProve').empty();
checkupFilePath = '';
}
},
error: function (e) {
layer.msg('上传失败');
$('#checkupProve').empty();
checkupFilePath = '';
console.log(e)
}
});
});
}
function nextClick(e){
if(checkupFilePath == ''){
layer.msg('请上出场证明');
return;
}
let loadingMsg = layer.msg('数据请求中,请稍候...', {icon: 16, scrollbar: false, time: 0, shade: [0.8, '#393D49']});
// form请求地址
let formUrl = ctxPath + "/inOutSpace/exitRoute";
var data = {
idNumber: idNumbers,
einTime: einTimes,
exitProvePath: checkupFilePath
};
$.ajax({
type: 'POST',
async: false, // 默认异步true,false表示同步
url: formUrl, // 请求地址
contentType: "application/json; charset=utf-8",
dataType: 'json', // 服务器返回数据类型
data: JSON.stringify(data), //获取提交的表单字段
success: function (data) {
if (data.code == 200) {
layer.close(loadingMsg); // 关闭提示层
parent.layer.closeAll();
window.parent.location.reload();
} else {
layer.alert(data.msg);
}
},
error: function (XMLHttpRequest, textStatus, e) {
layer.close(loadingMsg);
layer.msg('数据请求发生异常,请稍后重试', {icon: 16, scrollbar: false});
}
});
}
//设置弹窗关闭
function reloading() {
var index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引
parent.layer.close(index); //再执行关闭
window.parent.location.reload();
}

View File

@ -0,0 +1,101 @@
let upload,checkupFilePath,idNumbers,einTimes;
function setData(idNumber,einTime){
idNumbers =idNumber;
einTimes = einTime;
layui.use(['form', 'laydate', 'upload', 'element'], function () {
let form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
upload = layui.upload;
form.render();
var uploadup = upload.render({
elem: '#checkup_img',
url: fileUrl + '/file/upload', //改成您自己的上传接口
multiple: false, //是否允许多文件上传默认未false
dataType: "json",
exts: 'pdf|PDF',
auto: true, //是否自动上传 默认为true
number: 1, //限制为1张
size: 1024*30, //最大文件大小单位k
bindAction: '#hideUploadCheckup', //绑定的按钮
field: 'file', //传到后台的字段名,默认file
choose: function (obj) {
flag = false;
// 清空现有预览和文件信息
$('#checkupProve').empty();
checkupFilePath = ''; // 确保清除旧的文件路径
obj.preview(function (index, file, result) {
$("#previewCheckupProve").css("display", "");
var previewImgSrc = "../../../../img/filetype/pdf.png"; // 预览图片源
$('#checkupProve').append(
'<div id="' + index + '" style="display: inline-block;text-align: center;width:150px">' +
'<img src="' + previewImgSrc + '" alt="' + file.name + '" style="height: 80px;width: 80px;margin-right: 10px" class="layui-upload-img ">' +
'<div><span>' + (file.name.length > 8 ? (file.name.substr(0, 8) + "..") : file.name) + '</span></div>' +
'</div>'
);
});
},
done: function (data) {
if(data.code === 200) {
layer.msg('上传成功');
checkupFilePath = data.data.url;
} else {
layer.msg('上传失败');
$('#checkupProve').empty();
checkupFilePath = '';
}
},
error: function (e) {
layer.msg('上传失败');
$('#checkupProve').empty();
checkupFilePath = '';
console.log(e)
}
});
});
}
function nextClick(e){
if(checkupFilePath == ''){
layer.msg('请上出场证明');
return;
}
let loadingMsg = layer.msg('数据请求中,请稍候...', {icon: 16, scrollbar: false, time: 0, shade: [0.8, '#393D49']});
// form请求地址
let formUrl = ctxPath + "/inOutSpace/exitRoute";
var data = {
idNumber: idNumbers,
einTime: einTimes,
salaryApplicationPath: checkupFilePath
};
$.ajax({
type: 'POST',
async: false, // 默认异步true,false表示同步
url: formUrl, // 请求地址
contentType: "application/json; charset=utf-8",
dataType: 'json', // 服务器返回数据类型
data: JSON.stringify(data), //获取提交的表单字段
success: function (data) {
if (data.code == 200) {
layer.close(loadingMsg); // 关闭提示层
parent.layer.closeAll();
window.parent.location.reload();
} else {
layer.alert(data.msg);
}
},
error: function (XMLHttpRequest, textStatus, e) {
layer.close(loadingMsg);
layer.msg('数据请求发生异常,请稍后重试', {icon: 16, scrollbar: false});
}
});
}
//设置弹窗关闭
function reloading() {
var index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引
parent.layer.close(index); //再执行关闭
window.parent.location.reload();
}

View File

@ -136,7 +136,7 @@ function init(){
}
},
{
"width": "7%",
"width": "8%",
"data": "",
"defaultContent": "",
"orderable": false,
@ -163,7 +163,7 @@ function init(){
},
{
"data": "",
"width":"5%",
"width":"8%",
"defaultContent": "",
"orderable": false,
"render": function (data, type, row) {
@ -190,7 +190,11 @@ function init(){
html += buttonUpdate(idNumber, "", pers);
if(checkupFilePath){
html += buttonCheckup(idNumber,checkupFilePath, "", pers);
html += buttonCheckDataEns(idNumber, "", pers);
}else{
html += buttonCheckDataEn(idNumber, "", pers);
}
return html;
}
}
@ -440,3 +444,45 @@ function checkup(){
maxmin: false,
});
}
function buttonCheckDataEn(idNumber, permission, pers){
if(permission != ""){
if ($.inArray(permission, pers) < 0) {
return "";
}
}
var btn = $("<button class='layui-btn layui-btn-xs' title='出入场记录' onclick='checkViewEn(\"" + idNumber +"\")'><i class='layui-icon'>出入场记录</i></button>");
return btn.prop("outerHTML");
}
function buttonCheckDataEns(idNumber, permission, pers){
if(permission != ""){
if ($.inArray(permission, pers) < 0) {
return "";
}
}
var btn = $("<button class='layui-btn layui-btn-xs' style='margin-top: 5px;' title='出入场记录' onclick='checkViewEn(\"" + idNumber +"\")'><i class='layui-icon'>出入场记录</i></button>");
return btn.prop("outerHTML");
}
/**
* 查看
* */
function checkViewEn(idNumber) {
localStorage.setItem("idNumber", idNumber);
let width = "80%";
let height = "90%";
var index = layer.open({
title: ['出入场记录', 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'],
type: 2,
content: '../InOutSpace/InOutRecordList.html',
area: [width, height],
maxmin: false,
success: function (layero, index) {
},
yes: function (index, layero) {
}
});
}

View File

@ -40,6 +40,8 @@
<th>入场时间</th>
<th>出场时间</th>
<th>合同绑定号</th>
<th>出场证明</th>
<th>工资结算申请书</th>
<th>操作</th>
</tr>
</thead>

View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>出场证明-上传</title>
<link rel="stylesheet" type="text/css" media="screen" href="../../../../css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" media="screen" href="../../../../layui/css/layui.css">
<link rel="stylesheet" type="text/css" media="screen" href="../../../../css/work/personEntry/personEntryFrom.css">
</head>
<body>
<div class="layui-form">
<form class="layui-form" action="" onsubmit="return false;">
<!-- 基础信息 -->
<div class="baseInformation">
<!-- 必须添加 id="pdfFile" -->
<div class="layui-input-inline" style="width: 42%">
<label class="layui-form-label" style="width: 110px">出场证明PDF附件</label>
<div class="layui-input-block">
<div class="layui-upload">
<blockquote id="previewCheckupProve" class="layui-elem-quote layui-quote-nm "
style="margin-top: 10px;width: 100%;min-height: 150px;display: flex;">
<div class="layui-upload-list" id="checkupProve" style="float: left"></div>
<img src="../../../../img/add.png" id="checkup_img"
style="width: 80px;height: 80px;margin-top: 18px">
</blockquote>
<button id="hideUploadCheckupProve" style=""></button>
</div>
</div>
</div>
<div class="layui-form-item btn">
<div class="layui-input-block">
<button id="uploadBtn" type="button" class="layui-btn" onclick="nextClick(this)">提交</button>
</div>
</div>
</div>
</form>
</div>
</body>
</html>
<script type="text/javascript" src="../../../../js/libs/jquery-3.6.0.js"></script>
<script type="text/javascript" src="../../../../js/jq.js"></script>
<script type="text/javascript" src="../../../../layui2.7.6/layui.js"></script>
<script type="text/javascript" src="../../../../js/publicJs.js"></script>
<script type="text/javascript" src="../../../../js/dict.js"></script>
<script type="text/javascript" src="../../../../js/select.js"></script>
<script type="text/javascript" src="../../../../js/work/Person/InOutSpace/exitProvePath.js" defer="defer"></script>

View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>出场证明-上传</title>
<link rel="stylesheet" type="text/css" media="screen" href="../../../../css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" media="screen" href="../../../../layui/css/layui.css">
<link rel="stylesheet" type="text/css" media="screen" href="../../../../css/work/personEntry/personEntryFrom.css">
</head>
<body>
<div class="layui-form">
<form class="layui-form" action="" onsubmit="return false;">
<!-- 基础信息 -->
<div class="baseInformation">
<!-- 必须添加 id="pdfFile" -->
<div class="layui-input-inline" style="width: 42%">
<label class="layui-form-label" style="width: 110px">工资结算申请书PDF附件</label>
<div class="layui-input-block">
<div class="layui-upload">
<blockquote id="previewCheckupProve" class="layui-elem-quote layui-quote-nm "
style="margin-top: 10px;width: 100%;min-height: 150px;display: flex;">
<div class="layui-upload-list" id="checkupProve" style="float: left"></div>
<img src="../../../../img/add.png" id="checkup_img"
style="width: 80px;height: 80px;margin-top: 18px">
</blockquote>
<button id="hideUploadCheckupProve" style=""></button>
</div>
</div>
</div>
<div class="layui-form-item btn">
<div class="layui-input-block">
<button id="uploadBtn" type="button" class="layui-btn" onclick="nextClick(this)">提交</button>
</div>
</div>
</div>
</form>
</div>
</body>
</html>
<script type="text/javascript" src="../../../../js/libs/jquery-3.6.0.js"></script>
<script type="text/javascript" src="../../../../js/jq.js"></script>
<script type="text/javascript" src="../../../../layui2.7.6/layui.js"></script>
<script type="text/javascript" src="../../../../js/publicJs.js"></script>
<script type="text/javascript" src="../../../../js/dict.js"></script>
<script type="text/javascript" src="../../../../js/select.js"></script>
<script type="text/javascript" src="../../../../js/work/Person/InOutSpace/salaryApplicationPath.js" defer="defer"></script>

View File

@ -1,5 +1,5 @@
系统部署注意事项
1.修改public.js
1.修改publicJs.js
2.IpAndPathConfig环境配置更换一下
3.勾选prod环境
4.file的FFmpeg路径修改