gz_car_ui/js/car_application_audit/car_audit_detail.js

592 lines
21 KiB
JavaScript
Raw Normal View History

2026-01-29 13:59:17 +08:00
let idParam, objParam;
let details;
let form, layer, table;
let isPage = getUrlParam('isPage');
let token;
if (isPage) { // 首页跳转
$('#plan-detail-box>div').eq(0).remove();
$('#plan-detail-box').css({'justify-content': 'end', 'height': '50px'});
$('body').css('margin', '0');
let obj = decodeURIComponent(getUrlParam('obj'))
setParams(obj);
}
// 获取 URL 参数
function getParamsFromUrl() {
const urlParams = new URLSearchParams(window.location.search);
const result = {};
for (const [key, value] of urlParams.entries()) {
result[key] = value;
}
return result;
}
// 页面加载完成后执行
window.addEventListener("DOMContentLoaded", () => {
const params = getParamsFromUrl();
console.log(params)
if (!params.token) {
return;
}
token = params.token;
sessionStorage.setItem('gz-token', params.token);
let url = dataUrl + `backstage/carPlanAudit/getCarAuditById/${params.id}`;
ajaxRequest(url, "GET", {}, true, function () {
}, function (result) {
if (result.code === 200) {
params.isFinish === '1' ? result.data.checkType = 0 : result.data.checkType = 2
setParams(JSON.stringify(result.data));
} else {
}
}, function (xhr, status, error) {
errorFn(xhr, status, error)
}, null);
});
function setParams(obj) {
objParam = JSON.parse(obj);
if (objParam.checkType === 2) {
$('#print').before('<button type="button" class="layui-btn layui-bg-orange" onclick="check()">审核</button>');
}
idParam = objParam.id;
layui.use(['form', 'layer', 'table'], function () {
form = layui.form;
layer = layui.layer;
table = layui.table;
getNeedPlanDetails();
initTable();
});
}
// 详情
function getNeedPlanDetails() {
let params = {
encryptedData: JSON.stringify({
'id': objParam.id
})
};
let url = dataUrl + 'backstage/carNeedPlan/getNeedPlanDetails';
ajaxRequest(url, "POST", params, true, function () {
}, function (result) {
if (result.code === 200) {
setPlanBasicTableInfo(result.data);
setOperRecordInfo(result.data.recordList, result.data);
setCheckStatus(result.data);
}
}, function (xhr, status, error) {
errorFn(xhr, status, error)
}, null);
}
// 基本信息
function setPlanBasicTableInfo(obj) {
$('#proName').html(obj.proName);
$('#projectPart').html(obj.projectPart);
$('#projectContent').html(obj.projectContent);
$('#needTime').html(obj.needTime);
$('#remark').html(obj.remark);
$('#carLength').html(obj.carLength);
$('#carWidth').html(obj.carWidth);
$('#carHeight').html(obj.carHeight);
$('#carWeight').html(obj.carWeight);
$('#carStart').html(obj.carStart);
$('#carEnd').html(obj.carEnd);
setRoutePoint(obj.routePoint);
// 附件文档
setFileTable(obj.fileList);
}
function setRoutePoint(data) {
// 清空之前的表格
$('#routePoint').empty();
let html = '';
html += "<table class='classTable'>";
if (data != null && data !== "") {
// 分割数据并过滤掉空值
let result = data.split("routePoint;").filter(item => item.trim() !== "");
if (result && result.length > 0) {
// 动态生成表头
html += "<tr>";
for (let i = 0; i < Math.min(result.length, 4); i++) {
html += "<th>途经点</th>";
}
html += "</tr>";
// 动态生成表格内容,每行最多 4 列
let rowCount = Math.ceil(result.length / 4); // 计算需要多少行
for (let row = 0; row < rowCount; row++) {
html += "<tr>";
for (let col = 0; col < 4; col++) {
let index = row * 4 + col;
if (index < result.length) {
html += "<td>" + result[index] + "</td>";
} else {
html += "<td></td>"; // 如果没有数据,填充空白单元格
}
}
html += "</tr>";
}
}
}
html += "</table>";
// 将生成的 HTML 插入到页面中
$('#routePoint').append(html);
}
// 附件文档赋值
function setFileTable(fileList) {
$('#file-table tr:not(:first)').remove();
let html = '';
if (fileList && fileList.length > 0) {
$.each(fileList, function (index, item) {
html += '<tr>' +
'<td>' + handleFileType(item.fileName) + item.fileName + '</td>' +
'<td>' + (item.type) + '</td>' +
'<td><img src="../../../images/user_head_icon.png" width="20px" height="20px">' + item.createName + '</td>' +
'<td>' + item.createTime + '</td>' +
'<td><a style="margin:0 5px;color:#409EFF;cursor: pointer;" onclick=\'viewFile(' + JSON.stringify(item) + ')\'>预览</a>' +
'<a style="margin:0 5px;color:#409EFF;cursor: pointer;" onclick=\'downLoadFile(' + JSON.stringify(item) + ')\'>下载</a>' +
'</td>' +
'</tr>';
})
} else {
html = '<tr><td colspan="5" style="text-align: center;">暂无数据</td></tr>';
}
$('#file-table tbody').after(html);
}
// 处理文件类型
function handleFileType(value) {
value = value.toLowerCase();
let src = '';
if (value.indexOf('docx') > -1 || value.indexOf('doc') > -1) {
src = '../../../images/docx.png'
} else if (value.indexOf('xls') > -1 || value.indexOf('xlsx') > -1) {
src = '../../../images/xlsx.png'
} else if (value.indexOf('pdf') > -1) {
src = '../../../images/pdf.png'
} else if (value.indexOf('png') > -1 || value.indexOf('jpg') > -1 || value.indexOf('jpeg') > -1) {
src = '../../../images/img_icon.png'
}
return '<img width="20px" height="20px" src = "' + src + '" style="margin:0 5px;">'
}
// 预览文件
function viewFile(obj) {
let fileName = obj.fileName.toLowerCase();
if (fileName.indexOf('png') > -1 || fileName.indexOf('jpg') > -1 || fileName.indexOf('jpeg') > -1) {
layer.photos({
shade: 0.5,
photos: {
"title": "图片预览",
"start": 0,
"data": [
{
"alt": "layer",
"pid": 1,
"src": fileUrl + obj.fileUrl + '?token=' + sessionStorage.getItem("gz-token"),
}
]
}
});
} else {
// 调用公司的预览文件的服务
commonViewFile(obj.fileUrl);
}
}
// 下载文件
function downLoadFile(obj) {
let url = dataUrl + "sys/file/download?fileId=" + obj.id;
downLoadFileUtil(url, obj.fileName, null);
}
// 查询/重置
function queryTable(type) {
if (type === 1) {
let name = $('#name').val();
let flag = checkValue(name);
if (flag) {
$('#name').val('');
return layer.msg('名称查询包含特殊字符,请重新输入', {icon: 2});
}
let model = $('#model').val();
let flag2 = checkValue(model);
if (flag2) {
$('#model').val('');
return layer.msg('规格查询包含特殊字符,请重新输入', {icon: 2});
}
reloadTable(1);
} else if (type === 2) {
$('#name').val('');
$('#model').val('');
layui.form.render();
reloadTable(1);
}
}
// 刷新页面数据
function reloadData() {
reloadTable(1);
}
// 重载表格
function reloadTable(pageNum) {
table.reload("currentTableId", {
page: {
curr: pageNum ? pageNum : 1,
},
where: {
encryptedData: JSON.stringify({
'name': $('#name').val(),
'model': $('#model').val(),
'id': objParam.id
}),
},
},
);
}
// 初始化表格
function initTable() {
tableIns = table.render({
elem: "#currentTableId",
id: 'currentTableId',
headers: {
authorization: sessionStorage.getItem("gz-token"),
},
height: "full",
url: dataUrl + "backstage/carNeedPlan/getNeedPlanDetailsList",
where: {
encryptedData: JSON.stringify({
'name': $('#name').val(),
'model': $('#model').val(),
'id': objParam.id
}),
},
request: {
pageName: 'pageNum',
limitName: 'pageSize'
},
parseData: function (res) { // res 即为原始返回的数据
if (res.code === 401) {
closeWindowOpen();
}
return {
"code": 0, // 解析接口状态
"msg": '获取成功', // 解析提示文本
"count": res.total, // 解析数据长度
"data": res.list // 解析数据列表
};
},
cols: [
[
{
width: '8%',
title: "序号",
align: "center",
templet: function (d) {
return d.LAY_NUM;
},
},
{
field: "type",
width: '10%',
title: "类型",
unresize: true,
align: "center",
sort: true,
},
{
field: "name",
width: '10%',
title: "名称",
unresize: true,
align: "center",
sort: true,
},
{
field: "model",
width: '15%',
title: "规格",
unresize: true,
align: "center",
sort: true,
},
{
field: "unit",
width: '10%',
title: "单位",
unresize: true,
align: "center",
sort: true,
templet: function (d) {
return setNullValue(d.unit);
},
},
{
field: "carSpec",
width: '14%',
title: "所需规格",
unresize: true,
align: "center",
},
{
field: "needNum",
width: '10%',
title: "需用量",
unresize: true,
align: "center",
sort: true,
templet: function (d) {
return setNumColor(d.needNum);
},
},
{
field: "backDate",
width: '12%',
title: "预计使用时间(天)",
unresize: true,
align: "center",
sort: true,
templet: function (d) {
return d.backDate;
},
},
{
field: "remark",
width: '10%',
title: "备注",
sort: true,
unresize: true,
align: "center",
templet: function (d) {
if (d.remark) {
if (d.remark.length > 60) {
return '<span title="' + d.remark + '">' + d.remark.substring(0, 60) + '...</span>'
} else {
return '<span title="' + d.remark + '">' + d.remark + '</span>'
}
} else {
return '';
}
},
},
],
],
limits: [10, 15, 20, 25, 50, 100],
limit: 10,
page: true,
done: function (res, curr, count) {
pageNum = tableIns.config.page.curr;
table.resize("currentTableId");
},
});
}
// 数量颜色
function setNumColor(value, isNeedNum) {
if (isNeedNum) {
return '<span style="color:#409Eff;font-weight:bold;">' + value + "</span>";
} else {
return '<span style="color:#409Eff;font-weight:bold;">' + value + "</span>";
}
}
// 导出
function exportData() {
let params = {
"id": objParam.id,
'name': $('#name').val(),
'model': $('#model').val(),
}
let url = dataUrl + "backstage/carNeedPlan/exportDetails";
exportExcelUtil(url, '申请明细', JSON.stringify(params));
}
// 操作记录
function setOperRecordInfo(list, obj) {
let html = '';
if (list && list.length > 0) {
let imgUrl = '../../../images/user_head_icon.png';
let imgUrl2 = '../../../images/time_icon.png';
$.each(list, function (index, item) {
const creator = (item.nikeName ? item.nikeName : item.userName);
// 1. 容错处理(统一处理空值、类型转换)
const remark = setNullValue(item.auditRemark); // 已有空值处理,保留
const auditType = item.auditType + ''; // 确保为字符串(匹配原条件的字符串判断)
const auditStatus = item.auditStatus + ''; // 确保为字符串
const times = setNullValue(item.times) || '0'; // 时间间隔容错(避免拼接 undefined
// 2. 部门映射表(替代多 if-else清晰直观
const deptMap = {
'0': '项目部',
'1': '项目部',
'-1': '项目部',
'2': '分公司',
'3': '项管中心',
'4': '智联装备云控公司',
'5': '供应商'
};
const dept = deptMap[auditType] || '未知部门'; // 默认值容错
// 3. 操作流程规则(按「优先级+条件组合」定义,避免逻辑冲突)
const operRules = [
// 规则:[条件函数, 操作文案],按优先级排序(先匹配先执行)
[() => index === 0 && auditType === '1', '发起申请'],
[() => index !== 0 && auditType === '1', '提交派车申请'],
[() => index !== 0 && auditType === '9' && auditStatus === '9', `驳回-给发起人${creator},共间隔:${times} 原因备注:${remark}`],
[() => index !== 0 && auditType === '2' && auditStatus === '1', `审核确认通过,共间隔:${times} 原因备注:${remark}`],
[() => index !== 0 && auditType === '2' && auditStatus === '2', `完结-审核确认通过,共耗时:${times} 原因备注:${remark}`],
[() => auditType === '2' && auditStatus === '2', `审核确认通过,共间隔:${times} 原因备注:${remark}`], // 原逻辑:无 index 限制
[() => auditType === '2' && auditStatus === '3', `驳回-给发起人${creator},共间隔:${times} 原因备注:${remark}`],
[() => auditType === '3' && auditStatus === '2', `审核确认通过,共间隔:${times} 原因备注:${remark}`],
[() => auditType === '3' && auditStatus === '3', `驳回-给发起人${creator},共间隔:${times} 原因备注:${remark}`],
[() => auditType === '4' && auditStatus === '2', `完结-审核确认通过,共耗时:${times} 原因备注:${remark}`],
[() => auditType === '4' && auditStatus === '3', `驳回-给发起人${creator},共间隔:${times} 原因备注:${remark}`],
[() => auditType === '5' && auditStatus === '2', `派车情况-${remark},共耗时:${times}`]
];
// 匹配操作文案(默认值容错)
let operData = '未知操作';
for (const [condition, text] of operRules) {
if (condition()) {
operData = text;
break; // 找到匹配规则,立即退出(保证优先级)
}
}
html += '<div class="layui-timeline-item">' +
'<i class="layui-icon layui-timeline-axis"></i>' +
'<div class="layui-timeline-content layui-text">' +
'<h3 class="layui-timeline-title">' + item.auditTime.substring(0, 10) + '</h3>' +
'<div class="layui-panel">' +
'<div class="oper-info layout">' +
'<div class="layout">' +
'<img src="' + imgUrl + '">' +
'</div>' +
'<div class="user-oper layout">' +
'<div style="width: 100%">' +
'<span>' + (item.nikeName ? item.nikeName : item.userName) + '</span><span>' + item.phone + '</span><span>' + dept + '</span>' +
'</div>' +
'<div style="width: 100%">' +
'<span>' + operData + '</span>' +
'</div>' +
'</div>' +
'<div class="layout">' +
'<img src="' + imgUrl2 + '">' +
'<span style="margin: 0 5px 0 5px;">' + item.auditTime + '</span>' +
'</div>' +
'</div>' +
'</div>' +
'</div>' +
'</div>';
})
}
$('.layui-timeline').empty().append(html);
}
// 设置计划编号/审核状态
function setCheckStatus(obj) {
$('#code').empty().html(obj.code);
$('#checkStatus').html(getCheckStatus(obj.statusType, obj.status));
if (obj.statusType === 2 && obj.status === 1 && objParam.checkType !== 2) { // 待分公司审核可以撤回 && 申请人可以撤回 && 不是审核页面跳转
let user = sessionStorage.getItem('us');
if (user) {
let userObj = JSON.parse(user);
if (userObj.username === obj.userName) {
$('#print').before("<button type='button' style='margin-left:10px;' class='layui-btn layui-bg-orange' onclick='withdrawData(" + JSON.stringify(obj) + ")'>撤回</button>");
}
}
}
}
// 审核状态
function getCheckStatus(statusType, status) {
var company = "";
if (statusType === 0 && status === 0) {
return "<span style='color:#FF9900;margin:0 5px 0 5px;font-size:16px'>●</span>已撤回";
}
if (statusType === 1) {
return "<span style='color:#19BE6B;margin:0 5px 0 5px;font-size:16px;'>●</span>审核通过";
} else if (statusType === 2) {
company = "分公司";
} else if (statusType === 3) {
company = "项管中心";
} else if (statusType === 4) {
company = "智联装备云控公司";
}
if (status === 1) {
return "<span style='color:#FF9900;margin:0 5px 0 5px;font-size:16px'>●</span>待" + company + "审核";
} else if (status === 2) {
return "<span style='color:#19BE6B;margin:0 5px 0 5px;font-size:16px;'>●</span>审核通过";
} else if (status === 3) {
return "<span style='color:#F56C6C;margin:0 5px 0 5px;font-size:16px'>●</span>" + company + "审核驳回";
}
return "<span style='color:#FF9900;margin:0 5px 0 5px;font-size:16px'>●</span>待审核";
}
// 打印
function print() {
$("#main-box").print({
globalStyles: true,
mediaPrint: false,
stylesheet: '../../../css/aq_demand_plan/apply_plan_detail.css',
noPrintSelector: ".no-print",
iframe: true,
append: null,
prepend: null,
manuallyCopyFormValues: true,
deferred: $.Deferred()
});
}
// 撤回
function withdrawData(data) {
layer.confirm("确定撤回此条数据吗?", {'title': '操作提示', move: false}, function () {
let loadingMsg = layer.msg('数据撤回中,请稍候...', {icon: 16, scrollbar: false, time: 0});
let url = dataUrl + "backstage/carNeedPlan/withdrawData"
let obj = {id: data.id}
let params = {
encryptedData: JSON.stringify(obj)
}
ajaxRequest(url, "POST", params, true, function () {
}, function (result) {
console.error(result);
layer.close(loadingMsg); // 关闭提示层
if (result.code === 200) {
parent.layer.msg(result.msg, {icon: 1})
closePage();
} else {
layer.msg(result.msg, {icon: 2})
}
}, function (xhr) {
layer.close(loadingMsg); // 关闭提示层
error(xhr)
});
})
}
// 需求计划申请审核
function check() {
objParam.checkType = '2'; // 需求计划申请审核
objParam.token = token;
openIframeByParamObj("check", "审核", "./car_audit_form.html", "40%", "50%", objParam, 1);
}
function closePage() {
let index = parent.layer.getFrameIndex(window.name); // 先得到当前 iframe层的索引
window.parent.queryTable(1);
parent.layer.close(index); // 再执行关闭
}