/*全局自适应高度*/ /*全局自适应高度*/ const postDefaultTime = 60 * 1000 * 2; function autoFlashHeight(){ const select = $(".scrollbar-auto .active"); if (select.length > 0) $(".scrollbar-auto")[0].scrollTop = select[0].offsetTop - 72; function getObjHeight(select) { return select.length > 0 ? select.height() : 0; } /*侧栏高度*/ var sBar1 = getObjHeight($(".sjs-bar-1")); var sBar2 = getObjHeight($(".sjs-bar-2")); var sBar3 = getObjHeight($(".sjs-bar-3")); var sBar4 = getObjHeight($(".sjs-bar-4")); var sBar5 = getObjHeight($(".sjs-bar-5")); /*侧栏高度*/ var cHeader = getObjHeight($(".c-header")); var sBar = getObjHeight($(".sjs-bar")); var sBart = getObjHeight($(".sjs-bart")); var sBarz = getObjHeight($(".side-bar")); var pBarz = getObjHeight($(".toolsbar-f")); var bdtopc = getObjHeight($(".body-height-top")); var bcontent = getObjHeight($(".bcontent-wrap")); $(".sjs-height-0").height($(window).height()-cHeader-90+53); $(".sjs-height-1").height($(window).height()-cHeader-bcontent-90+53); $(".sjs-height-2").height($(window).height()-cHeader-sBarz-120); $(".sjs-height-3").height($(window).height()-cHeader-sBar-492+25+150);/*492*/ $(".sjs-height-4").height($(window).height()-cHeader-pBarz-110+75); $(".sjs-height-5").height($(window).height()-cHeader-sBar-492+55);/*492*/ $(".sjs-height-6").height($(window).height()-cHeader-34-sBar1); $(".sp-wrap").height(bcontent-30); /*侧栏高度*/ $(".sjs-sh-1").height($(window).height()-cHeader-sBar1-92+55); $(".sjs-sh-2").height($(window).height()-cHeader-sBar2-92+55); $(".sjs-sh-3").height($(window).height()-cHeader-sBar3-92+55); $(".sjs-sh-4").height($(window).height()-cHeader-sBar4-92+55); $(".sjs-sh-5").height($(window).height()-cHeader-sBar5-92+55); for (const sh of $('.sjs-sh')) { $(sh).height($(window).height()-cHeader-getObjHeight($('.sjs-bar', sh.parentNode))-getObjHeight($('.sjs-bottom', sh.parentNode))-92+55); } /*工程变更添加清单高度*/ $(".sjs-biangeng-height").height($(window).height()/3.3); }; $(window).resize(autoFlashHeight); /*全局自适应高度结束*/ $(function(){ /*侧滑*/ $(".open-sidebar").click(function(){ $(".slide-sidebar").animate({width:"800"}).addClass("open"); }); $("body").click(function(event){ var e = event || window.event; //浏览器兼容性 if(!$(event.target).is('a')) { var elem = event.target || e.srcElement; while (elem) { //循环判断至跟节点,防止点击的是div子元素 if (elem.className == "open-sidebar" || elem.className == 'slide-sidebar open') { return false; } elem = elem.parentNode; } $(".slide-sidebar").animate({width:"0"}).removeClass("open")// 关闭处理 } }); /*侧滑*/ /*工具提示*/ $(function () { $('[data-toggle="tooltip"]').tooltip() }); /*侧栏菜单*/ $(".bg-nav > li > a").click(function() { var self = $(this); var subMenu = $(this).siblings('ul.sub-menu'); if(subMenu.length > 0) { if(subMenu.is(":visible")) { self.find('.menu-arrow').removeClass('fa-angle-up').addClass('fa-angle-down'); subMenu.slideUp('fast'); self.parent().removeClass('active'); }else{ self.parent().addClass('active'); self.find('.menu-arrow').removeClass('fa-angle-down').addClass('fa-angle-up'); subMenu.slideDown('fast'); } } }); // 数据提交 $("#submit-form").click(function() { $("#save-form").submit(); }); // modal弹窗拖动 // $(document).on("show.bs.modal", ".modal", function() { // $(this).draggable({ // handle: ".modal-header" // 只能点击头部拖动 // }); // $(this).css("overflow", "hidden"); // }); // 动态生成datepicker $('body').on('focus', ".datepicker-here", function (e) { if ($(this).data("datepicker") != "1") { $(this).datepicker(); } $(this).data("datepicker", "1"); }); $('a[href="/setting/user"]').each(function () { if (getLocalCache('account-pageSize')) { $(this).attr('href', $(this).attr('href') + '?pageSize=' + getLocalCache('account-pageSize')); } }); $('.change_sort_link').each(function () { const tender_id = $(this).attr('href').split('/')[2]; let orderSetting = getLocalCache('change-'+ tender_id +'-list-order'); if(orderSetting) { const orders = orderSetting.split('|'); $(this).attr('href', $(this).attr('href') + '?sort=' + orders[0] + '&order=' + orders[1]); } }); $('.change_project_sort_link').each(function () { const tender_id = $(this).attr('href').split('/')[2]; let orderSetting = getLocalCache('change-project-'+ tender_id +'-list-order'); if(orderSetting) { const orders = orderSetting.split('|'); $(this).attr('href', $(this).attr('href') + '?sort=' + orders[0] + '&order=' + orders[1]); } }); $('.change_apply_sort_link').each(function () { const tender_id = $(this).attr('href').split('/')[2]; let orderSetting = getLocalCache('change-apply-'+ tender_id +'-list-order'); if(orderSetting) { const orders = orderSetting.split('|'); $(this).attr('href', $(this).attr('href') + '?sort=' + orders[0] + '&order=' + orders[1]); } }); $('.change_plan_sort_link').each(function () { const tender_id = $(this).attr('href').split('/')[2]; let orderSetting = getLocalCache('change-plan-'+ tender_id +'-list-order'); if(orderSetting) { const orders = orderSetting.split('|'); $(this).attr('href', $(this).attr('href') + '?sort=' + orders[0] + '&order=' + orders[1]); } }); $('#nav_management').click(function(e) { e.preventDefault() showWaitingView(); $.ajax({ type: 'GET', url: '/management/proxy/project/vertify', dataType: 'json', cache: false, timeout: 60000, success: function ({code = -1, data: { exist, is_admin, redirect } = { exist: 0, is_admin: false}}) { if (code === 0) { if (!exist && !is_admin) { toastr.error('「项目管理」系统不存在当前项目,请联系管理员进行处理。'); } else if(!exist && is_admin) { $('#add-management').modal('show') } else { redirect && window.open(redirect) } } closeWaitingView() }, error: function(jqXHR, textStatus, errorThrown){ toastr.error('error: ' + textStatus + " " + errorThrown); closeWaitingView(); } }) }); $('#add-management .btn-primary').click(function() { $('#add-management').modal('hide') $('#process-management').modal('show') $.ajax({ tpye: 'post', url: '/management/proxy/project/add', dataType: 'json', cache: false, timeout: 60000, // beforeSend: function(xhr) { // let csrfToken = Cookies.get('csrfToken_j'); // xhr.setRequestHeader('x-csrf-token', csrfToken); // }, success: function ({code = -1, data = {}}) { if (code === 0) { timer = setTimeout(() => { $('#process-management .process-child').css('width', '100%') setTimeout(() => { const { redirect } = data redirect && window.open(redirect) $('#process-management').modal('hide') }, 150); }, 500); } } }) }) }); function checkShowLast (count) { if (count > 12500) { $('a[name=showLevel][tag=last]').hide(); } else { $('a[name=showLevel][tag=last]').show(); } } /** * 提示框 * * @param string message * @param string type * @param string icon * @return void */ function toast(message, type, icon) { var toast = $(".toast"); toast.addClass(type); toast.children('.message').html(message); var iconClass = 'fa-' + icon; toast.children('.icon').addClass(iconClass); toast.fadeIn(500); setTimeout(function() { toast.fadeOut('fast'); toast.children('.message').text(''); toast.children('.icon').removeClass(iconClass); }, 3000); } /** * 动态请求数据 * @param {String} url - 请求链接 * @param data - 提交数据 * @param {function} successCallback - 返回成功回调 * @param {function} errorCallBack - 返回失败回调 */ const postData = function (url, data, successCallback, errorCallBack, showWaiting = true) { if (showWaiting) showWaitingView(); $.ajax({ type:"POST", url: url, data: {'data': JSON.stringify(data)}, dataType: 'json', cache: false, timeout: postDefaultTime, beforeSend: function(xhr) { let csrfToken = Cookies.get('csrfToken_j'); xhr.setRequestHeader('x-csrf-token', csrfToken); }, success: function(result){ if (result.err === 0) { if (result.hpack) { result.hpack.forEach(x => { result.data[x] = hpackArrBack(result.data[x]); }); } if (successCallback) { successCallback(result.data, result.msg); } } else if (result.err === 2) { toastr.error('error: ' + result.msg); setTimeout(function () { window.location.href = '/login'; },1000); } else { toastr.error('error: ' + result.msg); if (errorCallBack) { errorCallBack(result.msg); } } if (showWaiting) closeWaitingView(); }, error: function(jqXHR, textStatus, errorThrown){ toastr.error('error: ' + textStatus + " " + errorThrown); if (errorCallBack) { errorCallBack(); } if (showWaiting) closeWaitingView(); } }); }; const postDataAsync = function (url, data, showWaiting = true) { return new Promise(function (resolve, reject) { postData(url, data, result => { resolve(result); }, err => { reject(err); }, showWaiting); }).catch((e) => { console.log(e) }); }; /** * 动态请求数据(压缩数据) * @param {String} url - 请求链接 * @param data - 提交数据 * @param {function} successCallback - 返回成功回调 * @param {function} errorCallBack - 返回失败回调 */ const postDataCompress = function (url, data, successCallback, errorCallBack, htype = 'progress') { if (htype === 'wait') showWaitingView(); if (htype === 'progress') showProgress(); $.ajax({ type:"POST", url: url, data: {'data': LZString.compressToUTF16(JSON.stringify(data))}, dataType: 'json', cache: false, timeout: postDefaultTime, beforeSend: function(xhr) { let csrfToken = Cookies.get('csrfToken_j'); xhr.setRequestHeader('x-csrf-token', csrfToken); }, success: function(result){ if (htype === 'progress') doneProgress(); if (result.err === 0) { if (successCallback) { successCallback(result.data); } } else if (result.err === 2) { toastr.error('error: ' + result.msg); setTimeout(function () { window.location.href = '/login'; },1000); } else { toastr.error('error: ' + result.msg); if (errorCallBack) { errorCallBack(result.msg); } } if (htype === 'wait') closeWaitingView(); if (htype === 'progress') closeProgress(); }, error: function(jqXHR, textStatus, errorThrown){ toastr.error('error: ' + textStatus + " " + errorThrown); if (errorCallBack) { errorCallBack(); } if (htype === 'wait') closeWaitingView(); if (htype === 'progress') closeProgress(); } }); }; /** * 动态请求数据 * @param {String} url - 请求链接 * @param data - 提交数据 * @param {function} successCallback - 返回成功回调 * @param {function} errorCallBack - 返回失败回调 */ const postDataWithFile = function (url, formData, successCallback, errorCallBack, showWaiting = true) { if (showWaiting) showWaitingView(); if (formData.getAll('file[]').length > 10) { toastr.error('文件数量不能多于10个'); if (showWaiting) closeWaitingView(); return } $.ajax({ type:"POST", url: url, data: formData, dataType: 'json', cache: false, // 告诉jQuery不要去设置Content-Type请求头 contentType: false, // 告诉jQuery不要去处理发送的数据 processData: false, timeout: postDefaultTime, beforeSend: function(xhr) { let csrfToken = Cookies.get('csrfToken_j'); xhr.setRequestHeader('x-csrf-token', csrfToken); }, success: function(result){ if (result.err === 0) { if (successCallback) { successCallback(result.data); } } else if (result.err === 2) { toastr.error('error: ' + result.msg); setTimeout(function () { window.location.href = '/login'; },1000); } else { toastr.error('error: ' + result.msg); if (errorCallBack) { errorCallBack(); } } if (showWaiting) closeWaitingView(); }, error: function(jqXHR, textStatus, errorThrown){ toastr.error('error: ' + textStatus + " " + errorThrown); if (errorCallBack) { errorCallBack(); } if (showWaiting) closeWaitingView(); } }); }; const postDataWithFileProgress = function (url, formData, successCallback, errorCallBack) { showUploadFileProgress(); $.ajax({ type:"POST", url: url, data: formData, dataType: 'json', cache: false, // 告诉jQuery不要去设置Content-Type请求头 contentType: false, // 告诉jQuery不要去处理发送的数据 processData: false, beforeSend: function(xhr) { let csrfToken = Cookies.get('csrfToken_j'); xhr.setRequestHeader('x-csrf-token', csrfToken); }, success: function(result){ doneProgress(); if (result.err === 0) { if (successCallback) { successCallback(result.data); } } else if (result.err === 2) { toastr.error('error: ' + result.msg); setTimeout(function () { window.location.href = '/login'; },1000); } else { toastr.error('error: ' + result.msg); if (errorCallBack) { errorCallBack(); } } closeProgress(); }, error: function(jqXHR, textStatus, errorThrown){ toastr.error('error: ' + textStatus + " " + errorThrown); if (errorCallBack) { errorCallBack(); } closeProgress(); }, xhr: function() { var xhr = new XMLHttpRequest(); //使用XMLHttpRequest.upload监听上传过程,注册progress事件,打印回调函数中的event事件 xhr.upload.addEventListener('progress', function (e) { console.log(e); //loaded代表上传了多少 //total代表总数为多少 var progressRate = (e.loaded / e.total) * 95; //通过设置进度条的宽度达到效果 setUploadFileProgress(progressRate); }) return xhr; } }); } const postCompressFile = function (url, data, successCallback, errorCallBack) { $.ajax({ type:"POST", url: url, data: {'data': JSON.stringify(data)}, // dataType: 'blob', cache: false, timeout: 180000, xhrFields: { responseType: 'blob' }, beforeSend: function(xhr) { let csrfToken = Cookies.get('csrfToken_j'); xhr.setRequestHeader('x-csrf-token', csrfToken); }, success: function(result){ // if (result.err === 0) { // if (successCallback) { // successCallback(result.data); // } // } else if (result.err === 2) { // toastr.error('error: ' + result.msg); // setTimeout(function () { // window.location.href = '/login'; // },1000); // } else { // toastr.error('error: ' + result.msg); // if (errorCallBack) { // errorCallBack(result.msg); // } // } if (successCallback) { successCallback(result) } }, error: function(jqXHR, textStatus, errorThrown){ // console.log(jqXHR, textStatus, errorThrown); // toastr.error('error: ' + textStatus + " " + errorThrown); if (errorCallBack) { errorCallBack(); } } }); } /** * 获取url中参数 * @param variable * @returns {*} */ function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i=0;i
' + options.loadingTips + '
'; var _LoadingHtml = '
' +'
Loading...
'; //呈现loading效果 $("body").append(_LoadingHtml); //获取loading提示框宽高 var _LoadingTipsH = document.getElementById("loadingTips").clientHeight, _LoadingTipsW = document.getElementById("loadingTips").clientWidth; //计算距离,让loading提示框保持在屏幕上下左右居中 var _LoadingTop = _PageHeight > _LoadingTipsH ? (_PageHeight - _LoadingTipsH) / 2 : 0, _LoadingLeft = _PageWidth > _LoadingTipsW ? (_PageWidth - _LoadingTipsW) / 2 : 0; $("#loadingTips").css({ "left": _LoadingLeft + "px", "top": _LoadingTop + "px" }); //监听页面加载状态 document.onreadystatechange = PageLoaded; //当页面加载完成后执行 function PageLoaded() { if (document.readyState == "complete") { var loadingMask = $('#loadingPage'); setTimeout(function () { loadingMask.animate({ "opacity": 0 }, options.delayTime, function () { $(this).hide(); }); }, options.sleep); } } }, end: function () { $("#loadingPage").remove(); }, progressStop:true, progressStart:async function(title="导出文件",autoBar = false){ if($("#progressModal").length == 0){ let phtml = ``; $("body").append(phtml); }else { $("#progress_modal_title").text(title); $("#progress_modal_body").text(`正在${title}`); } $("#progress_modal_bar").css('width','0%'); $("#progressModal").modal('show'); if(autoBar == true){//假的进度条 $.bootstrapLoading.progressStop = false; let width = 0; while ($.bootstrapLoading.progressStop == false){ await setTimeoutSync(null,1000); width += 5; if(width > 90) width -= 50; $("#progress_modal_bar").css('width',`${width}%`); } } }, progressEnd:function () { $("#progress_modal_bar").css('width','100%'); $.bootstrapLoading.progressStop = true; $("#progressModal").modal('hide'); } }; // 光标插入button内容 $.fn.extend({ insertAtCaret: function(myValue){ var $t=$(this)[0]; if (document.selection) { this.focus(); sel = document.selection.createRange(); sel.text = myValue; this.focus(); } else if ($t.selectionStart || $t.selectionStart == '0') { var startPos = $t.selectionStart; var endPos = $t.selectionEnd; var scrollTop = $t.scrollTop; $t.value = $t.value.substring(0, startPos) + myValue + $t.value.substring(endPos, $t.value.length); this.focus(); $t.selectionStart = startPos + myValue.length; $t.selectionEnd = startPos + myValue.length; $t.scrollTop = scrollTop; } else { this.value += myValue; this.focus(); } } }); const checkUtils = { posOver(data) { if (!data) return false; if (!data.quantity) return !!data.end_contract_qty; return data.quantity > 0 ? data.end_contract_qty > data.final_1_qty : data.end_contract_qty < data.final_1_qty || data.end_contract_qty > 0; }, billsOver(data, isTz, relaPos) { if (!data) return false; if (isTz) { const posRange = relaPos.ledgerPos[itemsPre + data.id] || []; if (posRange.length > 0) { for (const p of posRange) { if (checkUtils.posOver(p)) return true; } } if (data.is_tp) { if (!data.total_price) return !!data.end_contract_tp; return data.total_price > 0 ? data.end_contract_tp > data.total_price : data.end_contract_tp < data.total_price || data.end_contract_tp > 0; } else { if (!data.quantity) return !!data.end_contract_qty; return data.quantity > 0 ? data.end_contract_qty > data.final_1_qty : data.end_contract_qty < data.final_1_qty || data.end_contract_qty > 0; } } else { if (data.is_tp) { if (!data.deal_tp) return !!data.end_contract_tp; return data.deal_tp > 0 ? data.end_contract_tp > data.deal_tp : data.end_contract_tp < data.deal_tp || data.end_contract_tp > 0; } else { if (!data.deal_qty) return !!data.end_contract_qty; return data.deal_qty > 0 ? data.end_contract_qty > data.deal_final_1_qty : data.end_contract_qty < data.deal_final_1_qty || data.end_contract_qty > 0; } } }, compareCode(str1, str2, symbol = '-') { if (!str1) { return 1; } else if (!str2) { return -1; } function compareSubCode(code1, code2) { if (numReg.test(code1)) { if (numReg.test(code2)) { return parseInt(code1) - parseInt(code2); } else { return -1 } } else { if (numReg.test(code2)) { return 1; } else { return code1 === code2 ? 0 : (code1 < code2 ? -1 : 1); //code1.localeCompare(code2); } } } const numReg = /^[0-9]+$/; const aCodes = str1.split(symbol), bCodes = str2.split(symbol); for (let i = 0, iLength = Math.min(aCodes.length, bCodes.length); i < iLength; ++i) { const iCompare = compareSubCode(aCodes[i], bCodes[i]); if (iCompare !== 0) { return iCompare; } } return aCodes.length - bCodes.length; }, }; Number.prototype.format2Str = function (pattern) { var strarr = this?this.toString().split('.'):['0']; var fmtarr = pattern?pattern.split('.'):['']; var retstr=''; // 整数部分 var str = strarr[0]; var fmt = fmtarr[0]; var i = str.length-1; var comma = false; for(var f=fmt.length-1;f>=0;f--){ switch(fmt.substr(f,1)){ case '#': if(i>=0 ) retstr = str.substr(i--,1) + retstr; break; case '0': if(i>=0) retstr = str.substr(i--,1) + retstr; else retstr = '0' + retstr; break; case ',': comma = true; retstr=','+retstr; break; } } if(i>=0){ if(comma){ var l = str.length; for(;i>=0;i--){ retstr = str.substr(i,1) + retstr; if(i>0 && ((l-i)%3)==0) retstr = ',' + retstr; } } else retstr = str.substr(0,i+1) + retstr; } retstr = retstr+'.'; // 处理小数部分 str=strarr.length>1?strarr[1]:''; fmt=fmtarr.length>1?fmtarr[1]:''; i=0; for(var f=0;f { let strArr = temp.toString().split("").reverse(); let newNum = ""; for (var i = 0; i < strArr.length; i++) { newNum = (i == 0 && strArr[i] == 0 ? "" : (i > 0 && strArr[i] == 0 && strArr[i - 1] == 0 ? "" : changeNum[strArr[i]] + (strArr[i] == 0 ? unit[0] : unit[i]))) + newNum; } return strArr.length === 2 && newNum.indexOf("一十") !== -1 ? newNum.replace('一十', '十') : newNum; } let overWan = Math.floor(num / 10000); let noWan = num % 10000; if (noWan.toString().length < 4) noWan = "0" + noWan; return overWan ? getWan(overWan) + "万" + getWan(noWan) : getWan(num); } function hpackArrBack(data) { if (data.length === 0) return data; if (data.length === 1) throw '数据错误'; const result = []; //const keyIndex = {}; // data[0].forEach((x, i) => { // keyIndex[x] = i; // }); const key = data[0]; data.forEach((d, i) => { if (i === 0) return; const obj = {}; d.forEach((v, j) => { if (v === undefined) return; obj[key[j]] = v; }); result.push(obj); }); return result; } const spreadColor = { stage: { over: '#FF9595', //'#ff6f5c', '#f8d7da' differ: '#F2DEDE', }, gcl: { differ: '#FFE699', // 同编号时,名称、单位、单价存在不同 calc_differ: '#f8d7da', // }, pay: { expr_err: '#FF9595', pause: '#f2f2f2', yf_without: '#d6d8db', cur_add: '#FFFFE1', } }; $(document).ready(function () { $('.modal').draggable({handle: '.modal-header'}); });