From a7dfc8ce36fbae325c5ae44639aa12bb2fcce2ca Mon Sep 17 00:00:00 2001 From: lSun <15893999301@qq.com> Date: Thu, 29 Jan 2026 18:48:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=98=E6=AC=BE=E5=8D=95=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/init.json | 8 +- css/car_settlement/payment_form.css | 42 +- .../car_audit_detail_list.js | 12 +- js/car_application_audit/car_audit_list.js | 8 +- js/car_application_audit/car_audit_update.js | 764 ++++++++++++++++++ js/car_application_audit/settlement_detail.js | 369 +++++++++ .../car_application_audit/car_audit_list.html | 4 +- .../child/car_audit_update.html | 160 ++++ .../child/settlement_detail.html | 4 +- 9 files changed, 1356 insertions(+), 15 deletions(-) create mode 100644 js/car_application_audit/car_audit_update.js create mode 100644 js/car_application_audit/settlement_detail.js create mode 100644 page/car_application_audit/child/car_audit_update.html diff --git a/api/init.json b/api/init.json index 6017d27..b735a35 100644 --- a/api/init.json +++ b/api/init.json @@ -143,7 +143,13 @@ "href": "page/car_application_audit/payment_list.html", "icon": "fa fa-asterisk", "target": "_self" - } + }, + { + "title": "付款单审核", + "href": "page/car_application_audit/car_audit_list.html", + "icon": "fa fa-asterisk", + "target": "_self" + } ] } ] diff --git a/css/car_settlement/payment_form.css b/css/car_settlement/payment_form.css index 8e7e594..ae1ea70 100644 --- a/css/car_settlement/payment_form.css +++ b/css/car_settlement/payment_form.css @@ -466,4 +466,44 @@ blockquote { #dispatch-car-table td a:hover { color: #66b1ff; text-decoration: underline; -} \ No newline at end of file +} + + + +/* ===================== 计划表格专属优化样式 ===================== */ +/* 表格整体布局与基础样式 */ +#plan-detail-table { + table-layout: fixed; /* 固定列宽布局,避免内容撑开列宽 */ + width: 100%; + border-collapse: collapse; /* 合并边框,避免双线条 */ + border-spacing: 0; + font-size: 12px; + color: #333; + background-color: #fff; + box-sizing: border-box; +} + +/* 表头样式:统一行高 + 禁止折行 + 背景色 */ +#plan-detail-table th { + padding: 0 8px; + height: 40px; + line-height: 40px; /* 垂直居中,统一行高 */ + text-align: center; + white-space: nowrap; /* 禁止文字折行 */ + overflow: hidden; + text-overflow: ellipsis; /* 超长表头省略显示 */ + background-color: #F2F2F2; + border: 1px solid #DDDDDD; + vertical-align: middle; +} + +/* 内容单元格样式:统一内边距 + 边框 + 垂直居中 */ +#plan-detail-table td { + padding: 6px 8px; + text-align: center; + vertical-align: middle; /* 关键:输入框/文字垂直居中 */ + border: 1px solid #DDDDDD; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/js/car_application_audit/car_audit_detail_list.js b/js/car_application_audit/car_audit_detail_list.js index 6aea297..5709819 100644 --- a/js/car_application_audit/car_audit_detail_list.js +++ b/js/car_application_audit/car_audit_detail_list.js @@ -45,8 +45,7 @@ function reloadTable(pageNum) { encryptedData: JSON.stringify({ 'keyWord': $('#keyWord').val(), 'status': $('#status').val(), - 'contractId': objParam.contractId, - 'supId': objParam.supId, + 'id': objParam.id, }), }, }, @@ -62,13 +61,12 @@ function initTable() { authorization: sessionStorage.getItem("gz-token"), }, height: "full-170", - url: dataUrl + "backstage/carBalance/getSltDetailsList", + url: dataUrl + "backstage/carBalance/getBalanceDataList", where: { encryptedData: JSON.stringify({ 'keyWord': $('#keyWord').val(), 'status': $('#status').val(), - 'contractId': objParam.contractId, - 'supId': objParam.supId, + 'id': objParam.id, }), }, request: { @@ -200,7 +198,7 @@ function exportExcel() { let params = { 'keyWord': $('#keyWord').val(), 'status': $('#status').val(), - 'supId': objParam.supId + 'id': objParam.id } let url = dataUrl + "backstage/carBalance/export2"; exportExcelUtil(url, '付款单录入详情', JSON.stringify(params)); @@ -208,7 +206,7 @@ function exportExcel() { // 详情 function paymentDetail(obj) { - openIframeByParamObj2("paymentDetail2", "详情", "./car_audit_detail.html", "92%", "95%", obj); + openIframeByParamObj2("paymentDetail2", "详情", "./child/settlement_detail.html", "92%", "95%", obj); } diff --git a/js/car_application_audit/car_audit_list.js b/js/car_application_audit/car_audit_list.js index a1ff94f..c20968a 100644 --- a/js/car_application_audit/car_audit_list.js +++ b/js/car_application_audit/car_audit_list.js @@ -179,7 +179,7 @@ function initTable() { } if(!(content.indexOf('驳回') > -1)){ - html += "驳回
|
" + html += "修改
|
" } html += "详情"; @@ -245,7 +245,7 @@ function planAuditDetail(obj) { // 需求计划申请审核 function checkDetail(obj) { obj.checkType = 2; - openIframeByParamObj("check_detail", "审核", "./child/car_audit_detail.html", "92%", "95%", obj,1); + openIframeByParamObj("car_check_detail", "审核", "./child/car_audit_detail.html", "92%", "95%", obj,1); } //提交 @@ -280,3 +280,7 @@ function checkSubmit(obj) { }); }) } + +function checkUpdate(obj){ + openIframeByParamObj("car_audit_update", "修改", "./child/car_audit_update.html", "92%", "95%", obj,2); +} diff --git a/js/car_application_audit/car_audit_update.js b/js/car_application_audit/car_audit_update.js new file mode 100644 index 0000000..5cb316f --- /dev/null +++ b/js/car_application_audit/car_audit_update.js @@ -0,0 +1,764 @@ +let idParam, objParam, fileList = new Array(), imgListUp = new Array(); +let form, laydate, layer, upload, table, util; +let pageNum = 1, tableIns; // 定义分页 +let jjDataArr = []; // 清单数据 +let delIdArr = []; // 存储要删除的文件ID(关键:新增初始化) +let planId = ''; // 计划ID +let allDataList = []; + +function setParams(obj) { + objParam = JSON.parse(obj); + // 初始化删除文件ID数组(避免残留) + delIdArr = []; + layui.use(['form', 'layer', 'laydate', 'upload', 'table'], function () { + form = layui.form; + layer = layui.layer; + laydate = layui.laydate; + upload = layui.upload; + table = layui.table; + util = layui.util; + laydate.render({ + elem: '#fkTime' + }); + form.verify(); + form.on('submit(formData)', function (data) { + submitApply(data); + }); + form.render(); + let uploadObj = upload.render({ + elem: '#test2', + multiple: true, + dataType: "json", + exts: 'jpg|png|jpeg|doc|docx|pdf|xlsx|xls', + acceptMime: 'image/jpg,image/png,image/jpeg,application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + number: 5, //最大上传数量 + size: 1024 * 10, //最大文件大小,单位k + auto: false, //是否自动上传 ,默认为true + bindAction: '#hideUpload', //绑定的按钮 + choose: function (obj) { + let length = $('.file-iteme').length; + if (length >= 5) { + return layer.msg('最多上传5个附件证明', {icon: 7}); + } + uploadObj.config.elem.next()[0].value = ''; + let num = 0; + obj.preview(function (index, file, result) { + num++; + if (num <= (5 - length)) { + $('#uploader-list').append( + '
' + + '

x

' + + handleFileType(index, file, result) + + '
' + ); + let map = new Map();//将选择的图片索引和图片写成对象存入集合 + map.index = index; + map.file = file; + fileList.push(map); + } + }); + } + }); + + getBalanceDataDetails(); + }); +} + +// 获取数据详情 +function getBalanceDataDetails() { + let encryptedData = {id: objParam.id}; + let url = dataUrl + 'backstage/carBalance/getBalanceDataDetails?encryptedData=' + encodeURIComponent(JSON.stringify(encryptedData)); + ajaxRequest(url, "GET", null, true, function () { + }, function (result) { + if (result.code === 200) { + + //基本信息回显 + let dataObj = result.data; + $('#supName').val(dataObj.supName); + $('#fkTime').val(util.toDateString(dataObj.fkTime, 'yyyy-MM-dd')); + $('#money').val(dataObj.money); + $('#remark').val(dataObj.remark); + $('#planListNum').val(dataObj.planList.length) + + // ========== 保留:附件回显+加入 ========== + let cent = ''; + // 清空原有fileList和delIdArr(避免重复) + fileList = []; + delIdArr = []; // 重置删除文件ID数组 + if (dataObj.fileList.length > 0) { + for (let i = 0; i < dataObj.fileList.length; i++) { + let l = dataObj.fileList[i]; + let path = fileUrl + l.fileUrl + '?token=' + sessionStorage.getItem("gz-token"); + let file = { name: l.fileName, id: l.id, type: l.type }; + cent += '
' + + '

x

' + + handleFileType(i, file, path, l.type) + + '
'; + // 回显附件加入fileList(标记为已存在的文件) + fileList.push({ + index: i, + file: file, + isExist: true, // 标记为回显的旧文件 + fileId: l.id // 存储文件ID,用于删除 + }); + } + } + console.log("aa==",fileList) + $('#uploader-list').append(cent); + + // 计划明细回显 + planDetail(dataObj.planList) + // 用车明细回显 + carDetail(dataObj.detailsList) + + // ========== 保留:初始化allDataList和jjDataArr ========== + allDataList = dataObj.detailsList || []; + jjDataArr = dataObj.planList || []; + } + }, function (xhr, status, error) { + errorFn(xhr, status, error) + }, null); +} + +function planDetail(list) { + $('#plan-detail-table tr:not(:first)').remove(); + if (list.length > 0) { + let html = ''; + $.each(list, function (index, item) { + html += '' + + '' + (index + 1) + '' + + '' + item.proName + '' + + '' + item.code + '' + + '' + item.supName + '' + + '' + item.carNum + '' + + '' + item.money + '' + + '' + item.ygMoney + '' + + '' + + '
' + + '删除' + + '
' + + '' + + ''; + }); + $('#plan-detail-table').append(html); + } +} + +// ========== 保留:delPlanDetail删除关联用车明细+同步数据 ========== +function delPlanDetail(index) { + let planList = $('#plan-detail-table tr:not(:first)'); + if (planList.length <= 1) { + return layer.msg('计划明细至少保留1条数据,无法删除!', {icon: 7}); + } + let currentTr = planList.eq(index); + let delCode = currentTr.find('td:eq(2)').text().trim(); + if (!delCode) { + return layer.msg('未获取到需求计划编号,无法删除!', {icon: 2}); + } + + layer.confirm('确定删除该计划明细及对应的用车明细数据吗?', {icon: 3, title: '提示'}, function (layIndex) { + currentTr.remove(); + $('#plan-detail-table tr:not(:first)').each(function(i) { + $(this).find('td:eq(0)').text(i + 1); + }); + //删除用车明细中code匹配的数据 + deleteCarDetailByCode(delCode); + // 同步更新jjDataArr和allDataList + jjDataArr = jjDataArr.filter(item => item.code !== delCode); + allDataList = allDataList.filter(item => item.planCode !== delCode); + layer.close(layIndex); + }) +} + +// ========== 保留:deleteCarDetailByCode精准删除用车明细 ========== +function deleteCarDetailByCode(delCode) { + // 1. 删除普通车辆表格中对应code的数据 + $('#dispatch-car-table tr:not(:first)').each(function() { + let $tr = $(this); + // 优先获取a标签文本,避免索引错误 + let carCode = $tr.find('td:last a').text().trim() || ''; + if (!carCode) { + carCode = $tr.find('td:last').text().replace(/<.*?>/g, '').trim(); + } + if (carCode === delCode) { + $tr.remove(); + } + }); + + // 2. 删除吊车表格中对应code的数据 + $('#dispatch-car-table2 tr:not(:first)').each(function() { + let $tr = $(this); + // 优先获取a标签文本,避免索引错误 + let dcCode = $tr.find('td:last a').text().trim() || ''; + if (!dcCode) { + dcCode = $tr.find('td:last').text().replace(/<.*?>/g, '').trim(); + } + if (dcCode === delCode) { + $tr.remove(); + } + }); + + // 3. 处理删除后无数据的情况 + if ($('#dispatch-car-table tr:not(:first)').length === 0) { + $('#dispatch-car-table').css('display', 'none'); + } + if ($('#dispatch-car-table2 tr:not(:first)').length === 0) { + $('#dispatch-car-table2').css('display', 'none'); + } +} + +function carDetail(list) { + // 派车明细 + let carList = list.filter(item => { + return item.type === '车辆'; + }) + let dcList = list.filter(item => { + return item.type === '吊车'; + }) + setDispatchCarTable(carList); + setDispatchCarTable2(dcList); + + // 派车明细-车辆 + function setDispatchCarTable(list) { + $('#dispatch-car-table tr:not(:first)').remove(); + if (list.length > 0) { + let html = ''; + if (list && list.length > 0) { + $.each(list, function (index, item) { + let imgNum = 0; + imgNum += item.carImage.filter(item => { + return item.type !== '6' + }).length; + imgNum += item.driverUserImage.filter(item => { + return item.type !== '6' + }).length; + imgNum += item.fileList.length; + + const actualGls = formatToTwoDecimals(item.exeGls) || 0.00; // 实际公里数初始=预估公里数 + + html += "" + + "" + item.type + "" + + "" + item.name + "" + + "" + item.model + "" + + "" + item.carNum + "" + + "" + (item.ton + '吨') + "" + + "" + item.goodsName + "" + + "" + item.startAddress + "" + + "" + item.endAddress + "" + + + "" + + + "" + item.glsPrice + "" + + " ¥ " + (item.glsMoney ? item.glsMoney : 0) + "" + + "" + imgNum + "查看附件>>" + + "" + item.planCode + "" + + ""; + }) + } else { + html = '暂无数据'; + } + $('#dispatch-car-table').removeAttr('style').append(html); + } else { + $('#dispatch-car-table').css('display', 'none'); + } + } + + // 派车明细-吊车 + function setDispatchCarTable2(list) { + $('#dispatch-car-table2 tr:not(:first)').remove(); + if (list.length > 0) { + let html = ''; + if (list && list.length > 0) { + $.each(list, function (index, item) { + let imgNum = 0; + imgNum += item.driverUserImage.filter(item => { + return item.type === '2' || item.type === '3' + }).length; + imgNum += item.operaImage.filter(item => { + return item.type === '2' || item.type === '3' || item.type === '6' + }).length; + imgNum += item.fileList.length; + + const actualPlanDay = item.exeDay || 0; + const actualDcMoney = formatToTwoDecimals(item.money); + + html += '' + + '' + item.type + '' + + '' + item.name + '' + + '' + item.model + '' + + '' + item.carNum + '' + + '' + item.useAddress + '' + + // '' + item.planDay + '' + + "" + + '' + setZlPrice(item) + '' + + ' ¥ ' + item.dcMoney + '' + + + "" + + + "" + imgNum + "查看附件>>" + + "" + item.planCode + "" + + ''; + }) + } else { + html = '暂无数据'; + } + $('#dispatch-car-table2').removeAttr('style').append(html); + + // 设置租赁单价 + function setZlPrice(item) { + let html = ''; + if (item.dcUnit === '元/月/台') { + html += '

' + item.monthPrice + '(' + item.dcUnit + ')' + '

'; + } else { + html += '

' + item.dayPrice + '(' + item.dcUnit + ')' + '

'; + } + if (item.isOutSet === 1) { + html += '

' + (item.jcMoney ? item.jcMoney : 0) + '(进出场费)

' + } + return html; + } + } else { + $('#dispatch-car-table2').css('display', 'none'); + } + } +} + +// 设置文件类型 +function handleFileType(index, file, result) { + let html = '', img = ''; + if (file.ext) { + file.ext = file.ext.toLowerCase(); + } + if (file.name) { + file.name = file.name.toLowerCase(); + } + if (file.ext === 'doc' || file.ext === 'docx') { + img = '../../../images/docx.png'; + } else if (file.ext === 'xls' || file.ext === 'xlsx') { + img = '../../../images/xlsx.png'; + } else if (file.ext === 'pdf') { + img = '../../../images/pdf.png'; + } else { + return ''; + } + html += '
' + + '' + + '

' + file.name + '

' + + '
'; + return html; +} + +// ========== 保留+优化:附件删除逻辑(兼容回显/新增,收集delIdArr) ========== +$(document).on("click", ".file-iteme .handle", function (event) { + event.stopPropagation(); + let $this = $(this); + let $parent = $this.parent(); + let fileId = $parent.attr('data-file-id'); // 回显文件的ID + let index = $this.next().attr('data-index'); // 新增文件的索引 + + // 1. 收集要删除的文件ID(用于后端删除) + if (fileId) { + delIdArr.push(fileId); // 存储要删除的旧文件ID + } + + // 2. 过滤fileList数组 + let newFileList = []; + $.each(fileList, function (inx, ele) { + // 排除要删除的文件(新增文件按index,回显文件按fileId) + if ((index && index != ele.index) || (fileId && ele.fileId != fileId)) { + newFileList.push(ele); + } + }); + + // 3. 更新fileList + fileList = newFileList; + // 4. 删除DOM + $parent.remove(); +}); + +function saveData2() { + $('#formSubmit').trigger('click') +} + +// ========== 保留+核心修改:submitApply(delFileId逗号分隔) ========== +function submitApply(data) { + // 校验附件证明是否上传(保留:兼容回显附件) + console.log('fileList:', fileList) + let totalFileCount = fileList.length; + if (totalFileCount === 0) { + return layer.msg('请上传付款单', {icon: 7}); + } + if (jjDataArr.length === 0) { + return layer.msg('请选择需求计划', {icon: 7}); + } + if (allDataList.length === 0) { + return layer.msg('用车明细数据为空,无法提交', {icon: 7}); + } + + data.field.supId = objParam.supId; + data.field.id = objParam.id; // 修改操作必须传主键ID + // ========== 核心修改:delFileId用逗号分隔 ========== + data.field.delFileId = delIdArr.join(','); // 数组转逗号分隔字符串 + console.log('delFileId(逗号分隔):', data.field.delFileId); // 调试用 + + let planList = [], detailsList = []; + $.each(jjDataArr, function (index, item) { + let obj = { + id: item.id || '', + planId: item.planId || item.id, + supId: objParam.supId, + money: item.money, + type: item.type || '1', + proId: item.proId || '', + carNum: item.carNum || item.needNum || 0 + }; + planList.push(obj); + }) + + const actualValues = getEditedActualValues(); + + $.each(allDataList, function (index, item) { + const carActual = actualValues.carActualList.find(v => v.outDetailId == item.id); // 普通车辆 + const craneActual = actualValues.craneActualList.find(v => v.outDetailId == item.id); // 吊车 + let obj = { + id: item.id || '', + planId: item.planId || '', + type: item.type || '车辆', + supId: item.supId || objParam.supId, + proId: item.proId || '', + money: item.cost || item.money || 0, + outId: item.outId || '', + exeGls: carActual?.exeGls || item.exeGls || '', + inMoney: carActual?.inMoney || craneActual?.inMoney || '', + exeDay: craneActual?.exeDay || item.exeDay || '', + outDetailId: item.id || '', + modelId: item.modelId || '', + ton: item.ton || 0 + }; + detailsList.push(obj); + }) + data.field.planList = planList; + data.field.detailsList = detailsList; + + let formData = new FormData(); + //遍历最终文件集合(仅上传新增文件) + for (let i = 0; i < fileList.length; i++) { + let fileItem = fileList[i]; + if (!fileItem.isExist && fileItem.file) { + formData.append("file[]", fileItem.file) + } + } + formData.append('params', JSON.stringify(data.field)); + console.log("提交参数:", data.field); // 调试用 + + let loadingMsg = layer.msg('正在提交保存,请稍等...', {icon: 16, shade: 0.01, time: '0'}); + let url = dataUrl + 'backstage/carBalance/updateBalanceData'; + ajaxRequestByUploadFile(url, formData, function () { + $('.save').addClass("layui-btn-disabled").attr("disabled", true); + $('.cancel').addClass("layui-btn-disabled").attr("disabled", true); + }, function (result) { + layer.close(loadingMsg); + $('.save').removeClass("layui-btn-disabled").attr("disabled", false); + $('.cancel').removeClass("layui-btn-disabled").attr("disabled", false); + if (result.code === 200) { + parent.layer.msg(result.msg, {icon: 1}); + closePage(1); + } else { + layer.msg(result.msg, {icon: 2}); + } + }, function (xhr, status, error) { + layer.close(loadingMsg); // 关闭提示层 + layer.msg('服务异常,请稍后重试', {icon: 16, scrollbar: false, time: 2000}); + $('.save').removeClass("layui-btn-disabled").attr("disabled", false); + $('.cancel').removeClass("layui-btn-disabled").attr("disabled", false); + errorFn(xhr, status, error) + }, null); +} + +// 选择需求计划单据 +function chooseFitType() { + let params = { + contractId: objParam.contractId, + supId: objParam.supId, + planId: planId, + jjDataArr: JSON.stringify(jjDataArr) + }; + openIframeByParamObj("choose_plan_code_list", '选择需要付款的需求计划编号', "./choose_plan_code_list.html", '92%', '95%', params); +} + +// 需求计划单据赋值 +function addFitDatas(data, planIdArr) { + jjDataArr = JSON.parse(data); + console.error(jjDataArr); + + let money = 0; + $.each(jjDataArr, function (index, item) { + const dataNum = item.money ? item.money : 0; + const num = Number(dataNum); + const cents = Math.round(num * 1000); + money += cents; + }) + $('#money').val(money / 1000); + if (!planId) { + $('#chooseValue').val('选择数据(已选择 ' + planIdArr.length + ' 条)'); + $('#no_data_title').css({'display': 'none'}); + $('#search-info').removeAttr('style'); + $('#table-box').removeAttr('style'); + planId = planIdArr.join('@'); + getPayCarDetails(); + } else { + $('#chooseValue').val('选择数据(已选择 ' + planIdArr.length + ' 条)'); + planId = planIdArr.join('@'); + getPayCarDetails(); + } +} + +// 派车录入详情明细-派车资料等明细 +function getPayCarDetails(id) { + let encryptedData = {planId: planId}; + let url = dataUrl + 'backstage/carBalance/getPayCarDetails?encryptedData=' + encodeURIComponent(JSON.stringify(encryptedData)); + ajaxRequest(url, "GET", null, true, function () { + }, function (result) { + if (result.code === 200) { + dataObj = result.data; + setTableData(result.data); + } + }, function (xhr, status, error) { + errorFn(xhr, status, error) + }, null); + + function setTableData(list) { + allDataList.splice(0, allDataList.length); + allDataList = list; + // 派车明细 + let carList = list.filter(item => { + return item.type === '车辆'; + }) + let dcList = list.filter(item => { + return item.type === '吊车'; + }) + setDispatchCarTable(carList); + setDispatchCarTable2(dcList); + } + + // 派车明细-车辆 + function setDispatchCarTable(list) { + $('#dispatch-car-table tr:not(:first)').remove(); + if (list.length > 0) { + let html = ''; + if (list && list.length > 0) { + $.each(list, function (index, item) { + let imgNum = 0; + imgNum += item.carImage.filter(item => { + return item.type !== '6' + }).length; + imgNum += item.driverUserImage.filter(item => { + return item.type !== '6' + }).length; + imgNum += item.fileList.length; + + const actualGls = formatToTwoDecimals(item.gls) || 0.00; // 实际公里数初始=预估公里数 + // const actualMoney = formatToTwoDecimals(0); // 实际金额初始=预估金额 + + html += "" + + "" + item.type + "" + + "" + item.name + "" + + "" + item.model + "" + + "" + item.carNum + "" + + "" + (item.ton + '吨') + "" + + "" + item.goodsName + "" + + "" + item.startAddress + "" + + "" + item.endAddress + "" + + "" + item.gls + "" + + + "" + + + "" + item.glsPrice + "" + + " ¥ " + (item.glsMoney ? item.glsMoney : 0) + "" + + + // "" + + + "" + imgNum + "查看附件>>" + + "" + item.planCode + "" + + ""; + }) + } else { + html = '暂无数据'; + } + $('#dispatch-car-table').removeAttr('style').append(html); + } else { + $('#dispatch-car-table').css('display', 'none'); + } + } + + // 派车明细-吊车 + function setDispatchCarTable2(list) { + $('#dispatch-car-table2 tr:not(:first)').remove(); + if (list.length > 0) { + let html = ''; + if (list && list.length > 0) { + $.each(list, function (index, item) { + let imgNum = 0; + imgNum += item.driverUserImage.filter(item => { + return item.type === '2' || item.type === '3' + }).length; + imgNum += item.operaImage.filter(item => { + return item.type === '2' || item.type === '3' || item.type === '6' + }).length; + imgNum += item.fileList.length; + + const actualPlanDay = item.planDay || 0; + const actualDcMoney = formatToTwoDecimals(0); + + html += '' + + '' + item.type + '' + + '' + item.name + '' + + '' + item.model + '' + + '' + item.carNum + '' + + '' + item.useAddress + '' + + '' + item.planDay + '' + + "" + + '' + setZlPrice(item) + '' + + ' ¥ ' + item.dcMoney + '' + + + "" + + + "" + imgNum + "查看附件>>" + + "" + item.planCode + "" + + ''; + }) + } else { + html = '暂无数据'; + } + $('#dispatch-car-table2').removeAttr('style').append(html); + + // 设置租赁单价 + function setZlPrice(item) { + let html = ''; + if (item.dcUnit === '元/月/台') { + html += '

' + item.monthPrice + '(' + item.dcUnit + ')' + '

'; + } else { + html += '

' + item.dayPrice + '(' + item.dcUnit + ')' + '

'; + } + if (item.isOutSet === 1) { + html += '

' + (item.jcMoney ? item.jcMoney : 0) + '(进出场费)

' + } + return html; + } + } else { + $('#dispatch-car-table2').css('display', 'none'); + } + } +} + +// 需求计划详情 +function viewPlanDetail(obj) { + obj.id = obj.planId; + obj.code = obj.planCode; + let content = '../car_demand_plan/child/apply_plan_detail.html'; + if (obj.code.indexOf('spec-') > -1) { + content = '../car_demand_plan/child/emerg_internal_car_detail.html'; + } + openIframeByParamObj2("viewPlanDetail", "车辆需求计划", content, "92%", "95%", obj); +} + +// 查看附件 +function viewFileDetail(obj, type) { + let title = '行驶证/挂靠协议驾驶证/身份证/导航图' + if (type === 1) { + title = '行驶证/挂靠协议驾驶证/身份证/导航图' + } else if (type === 2) { + title = '操作证/身份证/导航图' + } + obj.type = type; + openIframeByParamObj("viewFileDetail", title, '../../car_demand_plan/child/view_file_detail.html', "92%", "95%", obj); +} + +// ========== 保留:收集编辑后的实际值 ========== +function getEditedActualValues() { + // 存储最终收集的实际值 + let actualValues = { + carActualList: [], // 普通车辆实际值(实际公里数、实际金额) + craneActualList: [] // 吊车实际值(实际金额) + }; + + // 1. 收集普通车辆的实际公里数、实际金额 + $('#dispatch-car-table tr:not(:first)').each(function () { + const $tr = $(this); + const itemId = $tr.find('.actual-gls').data('id'); // 获取数据ID + if (!itemId) return; // 无ID则跳过 + + // 修复列索引:实际公里数输入框在td:eq(9),预估公里数在td:eq(8) + const actualGls = $tr.find('.actual-gls').val().trim() || $tr.find('td:eq(8)').text().trim() || '0.00'; + const actualMoney = $tr.find('.actual-money').val()?.trim() || '0.00'; + + actualValues.carActualList.push({ + outDetailId: itemId, + exeGls: formatToTwoDecimals(actualGls), + inMoney: formatToTwoDecimals(actualMoney) + }); + }); + + // 2. 收集吊车的实际金额 + $('#dispatch-car-table2 tr:not(:first)').each(function () { + const $tr = $(this); + const itemId = $tr.find('.actual-dc-money').data('id'); // 获取数据ID + if (!itemId) return; // 无ID则跳过 + + const actualPlanDay = $tr.find('.actual-dc-planDay').val().trim() || $tr.find('td:eq(5)').text().trim() || '0'; + const actualDcMoney = $tr.find('.actual-dc-money').val().trim() || '0.00'; + + actualValues.craneActualList.push({ + outDetailId: itemId, + inMoney: formatToTwoDecimals(actualDcMoney), + exeDay: actualPlanDay + }); + }); + return actualValues; +} + +// 全局工具函数:格式化数字为两位小数(处理空值、非数字) +function formatToTwoDecimals(num) { + if (num === null || num === undefined || num === '' || isNaN(Number(num))) return '0.00'; + return Number(num).toFixed(2); +} + +// 输入框正则校验(仅正数 + 最多两位小数 + 不超过1亿元) +$(document).on('input', '.actual-gls, .actual-money, .actual-dc-money', function () { + this.value = this.value + .replace(/[^0-9.]/g, '') // 过滤非法字符 + .replace(/\.{2,}/g, '.') // 单个小数点 + .replace(/^0+(?=\d)/, ''); // 去除开头多余0 + + if (this.value.indexOf('.') !== -1) { + const parts = this.value.split('.'); + this.value = parts[0] + '.' + parts[1].substring(0, 2); + } + + const numValue = Number(this.value || 0); + const maxAmount = 100000000; + if (numValue > maxAmount) { + this.value = maxAmount.toFixed(2); + } +}); + +// 失焦格式化 +$(document).on('blur', '.actual-gls, .actual-money, .actual-dc-money', function () { + this.value = formatToTwoDecimals(this.value); +}); + +// 关闭页面 +function closePage(type) { + let index = parent.layer.getFrameIndex(window.name); // 先得到当前 iframe层的索引 + if (type == 1) { + window.parent.reloadData(); + } + parent.layer.close(index); // 再执行关闭 +} diff --git a/js/car_application_audit/settlement_detail.js b/js/car_application_audit/settlement_detail.js new file mode 100644 index 0000000..da96cf0 --- /dev/null +++ b/js/car_application_audit/settlement_detail.js @@ -0,0 +1,369 @@ +let objParam, dataObj; +let form, table, upload, tableIns, layer, element; +let pageNum = 1; + +function setParams(params) { + objParam = JSON.parse(params); + $('#titleName').html(objParam.supName + '供应商付款记录'); + $('#code').html(objParam.code + setPayStatus()); + layui.use(["form", "table", 'upload', 'layer', 'element'], function () { + form = layui.form; + table = layui.table; + upload = layui.upload; + layer = layui.layer; + }); + + function setPayStatus() { + if (objParam.status === '未付') { + return "待付款"; + } else { + return "已付款"; + } + } + + getSltDetailsInfo(); + getPayCarDetails(); +} + +//admission fee + +// 供应商付款记录-详情 +function getSltDetailsInfo() { + let encryptedData = {planId: objParam.planId}; + let url = dataUrl + 'backstage/carBalance/getSltDetailsInfo?encryptedData=' + encodeURIComponent(JSON.stringify(encryptedData)); + ajaxRequest(url, "GET", null, true, function () { + }, function (result) { + if (result.code === 200) { + dataObj = result.data; + setTableData(result.data); + } + }, function (xhr, status, error) { + errorFn(xhr, status, error) + }, null); + + function setTableData(obj) { + console.log(obj) + $('#supName').html(objParam.supName); + $('#planCode').html("" + obj.code + ""); + $('#proName').html(obj.proName); + $('#carNum').html(obj.carNum); + $('#money').html('¥' + obj.money); + $('#dispatchDay').html(obj.dispatchDay); + $('#remark').html(obj.remark); + // 附件文档 + setFileTable(obj.fileList); + } + + // 附件文档赋值 + function setFileTable(fileList) { + $('#file-table tr:not(:first)').remove(); + let html = ''; + if (fileList && fileList.length > 0) { + $.each(fileList, function (index, item) { + html += '' + + '' + handleFileType(item.fileName) + item.fileName + '' + + '' + (item.type) + '' + + '' + item.createName + '' + + '' + item.createTime + '' + + '预览' + + '下载' + + '' + + ''; + }) + } else { + html = '暂无数据'; + } + $('#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 '' + } + + +} + +// 用车明细 +function getPayCarDetails() { + let encryptedData = {planId: objParam.planId}; + let url = dataUrl + 'backstage/carBalance/getPayCarDetails?encryptedData=' + encodeURIComponent(JSON.stringify(encryptedData)); + ajaxRequest(url, "GET", null, true, function () { + }, function (result) { + if (result.code === 200) { + setData(result.data); + } + }, function (xhr, status, error) { + errorFn(xhr, status, error) + }, null); + + function setData(list) { + // 用车明细 + let carList = list.filter(item => { + return item.type === '车辆'; + }) + let dcList = list.filter(item => { + return item.type === '吊车'; + }) + setDispatchCarTable(carList); + setDispatchCarTable2(dcList); + } + + // 派车明细-车辆 + function setDispatchCarTable(list) { + $('#dispatch-car-table tr:not(:first)').remove(); + if (list.length > 0) { + let html = ''; + if (list && list.length > 0) { + $.each(list, function (index, item) { + let imgNum = 0; + imgNum += item.carImage.filter(item => { + return item.type !== '6' + }).length; + imgNum += item.driverUserImage.filter(item => { + return item.type !== '6' + }).length; + imgNum += item.fileList.length; + html += "" + + "" + item.type + "" + + "" + item.name + "" + + "" + item.model + "" + + "" + item.carNum + "" + + "" + (item.ton + '吨') + "" + + "" + item.goodsName + "" + + "" + item.startAddress + "" + + "" + item.endAddress + "" + + "" + item.gls + "" + + "" + parseFloat(item.glsPrice).toFixed(2) + "" + + " ¥ " + (item.glsMoney ? parseFloat(item.glsMoney).toFixed(2) : 0) + "" + + "" + imgNum + "查看附件>>" + + "" + item.planCode + "" + + ""; + }) + } else { + html = '暂无数据'; + } + $('#dispatch-car-table').removeAttr('style').append(html); + } else { + $('#dispatch-car-table').css('display', 'none'); + } + } + + // 派车明细-吊车 + function setDispatchCarTable2(list) { + $('#dispatch-car-table2 tr:not(:first)').remove(); + if (list.length > 0) { + let html = ''; + if (list && list.length > 0) { + $.each(list, function (index, item) { + let imgNum = 0; + imgNum += item.driverUserImage.filter(item => { + return item.type === '2' || item.type === '3' + }).length; + imgNum += item.operaImage.filter(item => { + return item.type === '2' || item.type === '3' || item.type === '6' + }).length; + imgNum += item.fileList.length; + html += '' + + '' + item.type + '' + + '' + item.name + '' + + '' + item.model + '' + + '' + item.carNum + '' + + '' + item.useAddress + '' + + '' + item.planDay + '' + + '' + item.days + '' + + '' + item.fee + '元' + + '' + setZlPrice(item) + '' + + ' ¥ ' + parseFloat(item.cost).toFixed(2) + '' + + "" + imgNum + "查看附件>>" + + "" + item.planCode + "" + + "录入" + + ''; + }) + } else { + html = '暂无数据'; + } + $('#dispatch-car-table2').removeAttr('style').append(html); + + // 设置租赁单价 + function setZlPrice(item) { + let html = ''; + if (item.dcUnit === '元/月/台') { + html += '

' + parseFloat(item.monthPrice).toFixed(2) + '(' + item.dcUnit + ')' + '

'; + } else { + html += '

' + parseFloat(item.dayPrice).toFixed(2) + '(' + item.dcUnit + ')' + '

'; + } + if (item.isOutSet === 1) { + html += '

' + (item.jcMoney ? parseFloat(item.jcMoney).toFixed(2) : 0) + '(进出场费)

' + } + return html; + } + } else { + $('#dispatch-car-table2').css('display', 'none'); + } + } +} + + +// 预览文件 +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 viewFileDetail(obj, type) { + let title = '行驶证/挂靠协议驾驶证/身份证/导航图' + if (type === 1) { + title = '行驶证/挂靠协议驾驶证/身份证/导航图' + } else if (type === 2) { + title = '操作证/身份证/导航图' + } + obj.type = type; + openIframeByParamObj("viewFileDetail", title, '../../car_demand_plan/child/view_file_detail.html', "92%", "95%", obj); +} + +// 需求计划详情 +function viewPlanDetail(obj) { + obj.id = obj.planId; + obj.code = obj.planCode || obj.code; + let content = '../car_demand_plan/child/apply_plan_detail.html'; + if (obj.code.indexOf('spec-') > -1) { + content = '../car_demand_plan/child/emerg_internal_car_detail.html'; + } + openIframeByParamObj2("viewPlanDetail", "车辆需求计划", content, "92%", "95%", obj); +} + +function enter(obj) { + var html = ` +
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+ + +
+
+
+ `; + layer.open({ + type: 1, + title: '录入信息', + content: html, + area: ['500px', '300px'], + shade: 0.3, + btn: [], // 不显示默认按钮 + success: function (layero) { + // 渲染表单 + form.render(); + + // 表单提交事件 + form.on('submit(submitForm)', function (data) { + obj.days = data.field.days; + obj.fee = data.field.fee; + let params = { + encryptedData: JSON.stringify(obj) + } + let url = dataUrl + 'backstage/carBalance/updatePayCar'; + ajaxRequest(url, "POST", params, true, function () { + }, function (result) { + if (result.code === 200) { + getPayCarDetails() + } + }, function (xhr, status, error) { + errorFn(xhr, status, error) + }, null); + + + // 显示成功提示 + layer.msg('录入成功!', {icon: 1}); + + // 关闭弹窗 + layer.closeAll('page'); + + return false; // 阻止表单跳转 + }); + + // 重置按钮事件 + layero.find('#resetForm').on('click', function () { + form.val('feeForm', { + 'days': '', + 'fee': '' + }); + return false; // 阻止默认重置行为 + }); + } + }); +} + +// 打印 +function print() { + $("#main-box").print({ + globalStyles: true, + mediaPrint: false, + noPrintSelector: ".no-print", + iframe: true, + append: null, + prepend: null, + manuallyCopyFormValues: true, + deferred: $.Deferred() + }); +} + +// 关闭页面 +function closePage(type) { + let index = parent.layer.getFrameIndex(window.name); // 先得到当前 iframe层的索引 + parent.layer.close(index); // 再执行关闭 +} \ No newline at end of file diff --git a/page/car_application_audit/car_audit_list.html b/page/car_application_audit/car_audit_list.html index 019e11f..e6d6668 100644 --- a/page/car_application_audit/car_audit_list.html +++ b/page/car_application_audit/car_audit_list.html @@ -38,8 +38,8 @@