| // var baseUrl = "/crm"; | 
| var baseUrl = ""; | 
|   | 
| // 详情窗口-高度 | 
| var detailHeight = '80%'; | 
| // 详情窗口-宽度 | 
| var detailWidth = '90%'; | 
|   | 
| // layui.config({ | 
| //     // defaultTheme: 'theme-colorful', // 默认主题 | 
| //     // version: true,                  // 加载模块不缓存 | 
| //     maxTabNum: 30,                  // 最大打开的Tab数量 | 
| //     base: baseUrl + "/static/layui/lay/modules/" | 
| // }).use(['admin'], function() { | 
| //     var $ = layui.jquery; | 
| //     var layer = layui.layer; | 
| //     var admin = layui.admin; | 
| // | 
| // }); | 
|   | 
| // 非空判断 | 
| function isEmpty(obj){ | 
|     return typeof obj == "undefined" || obj == null || obj === ""; | 
| } | 
|   | 
| function emptyShow(d) { | 
|     return isEmpty(d)?"--":d; | 
| } | 
|   | 
| function eq(o1, o2) { | 
|     if (!isEmpty(o1) && !isEmpty(o2)) { | 
|         return o1===o2; | 
|     } | 
|     if (isEmpty(o1) && isEmpty(o2)) { | 
|         return true; | 
|     } | 
|     return o1 === o2; | 
| } | 
|   | 
| // 时间 ==>> 字符串 | 
| function dateToStr(date) { | 
|     var time = new Date(date); | 
|     var y = time.getFullYear(); | 
|     var M = time.getMonth() + 1; | 
|     M = M < 10 ? ("0" + M) : M; | 
|     var d = time.getDate(); | 
|     d = d < 10 ? ("0" + d) : d; | 
|     var h = time.getHours(); | 
|     h = h < 10 ? ("0" + h) : h; | 
|     var m = time.getMinutes(); | 
|     m = m < 10 ? ("0" + m) : m; | 
|     var s = time.getSeconds(); | 
|     s = s < 10 ? ("0" + s) : s; | 
|     return y + "-" + M + "-" + d + " " + h + ":" + m + ":" + s; | 
| } | 
|   | 
| // 时间 ==>> 字符串 | 
| function dateToStr2(date) { | 
|     var time = new Date(date); | 
|     var y = time.getFullYear(); | 
|     var M = time.getMonth() + 1; | 
|     M = M < 10 ? ("0" + M) : M; | 
|     var d = time.getDate(); | 
|     d = d < 10 ? ("0" + d) : d; | 
|     var h = time.getHours(); | 
|     h = h < 10 ? ("0" + h) : h; | 
|     var m = time.getMinutes(); | 
|     m = m < 10 ? ("0" + m) : m; | 
|     var s = time.getSeconds(); | 
|     s = s < 10 ? ("0" + s) : s; | 
|     return y + "" + "" + M + "" + d + "" + h + "" + "" + m + "" + s; | 
| } | 
|   | 
| // 字符串 ===>> 时间 | 
| function strToDate(str) { | 
|     var t = Date.parse(str); | 
|     if (!isNaN(t)) { | 
|         return new Date(Date.parse(str.replace(/-/g, "/"))); | 
|     } else { | 
|         return null; | 
|     } | 
| } | 
|   | 
| // 清理对象null值 | 
| function reObject(data) { | 
|     for (var obj in data) { | 
|         if (data[obj]===null){ | 
|             delete data[obj]; | 
|         } | 
|     } | 
|     return data; | 
| } | 
|   | 
| /** | 
|  * disabled 属性转换 | 
|  */ | 
| function convertDisabled(el, param) { | 
|     el.each(function () { | 
|         $(this).attr("disabled", param); | 
|     }); | 
| } | 
|   | 
| // 清除表单 | 
| function clearFormVal(el) { | 
|     $(':input', el) | 
|         .val('') | 
|         .removeAttr('checked') | 
|         .removeAttr('selected'); | 
| } | 
|   | 
| // url键值对 | 
| function urlParam(key) { | 
|     var query = window.location.search.substring(1); | 
|     var vars = query.split("&"); | 
|     for (var i=0;i<vars.length;i++) { | 
|         var pair = vars[i].split("="); | 
|         if(pair[0] === key){ | 
|             return pair[1]; | 
|         } | 
|     } | 
|     return false; | 
| } | 
|   | 
| // 权限 | 
| function limit(child){ | 
|     if (child == null){ | 
|         child = false; | 
|     } | 
|     var param = (child?parent.window:window).location.href.split("?")[1]; | 
|     if (null != param) { | 
|         var resourceId = param.split("=")[1]; | 
|         $.ajax({ | 
|             url: baseUrl+"/power/menu/"+resourceId+"/auth", | 
|             headers: {'token': localStorage.getItem('token')}, | 
|             method: 'GET', | 
|             async: false, | 
|             success: function (res) { | 
|                 if (res.code === 200){ | 
|                     for(var i = 0, len = res.data.length; i < len; i++) { | 
|                         (child?parent:window).$('#'+res.data[i].code).css("display", "inline-block"); | 
|                         (child?parent:window).$('.'+res.data[i].code).css("display", "inline-block"); | 
|                     } | 
|                 } else if (res.code === 403){ | 
|                     top.location.href = baseUrl+"/"; | 
|                 } else { | 
|                     layer.msg(res.msg) | 
|                 } | 
|             } | 
|         }); | 
|     } | 
| } | 
|   | 
|   | 
| // http请求 | 
| !function (n) { | 
|     "use strict"; | 
|   | 
|     var http = { | 
|         toAjax: function (params) { | 
|             $.ajax(params); | 
|         }, | 
|         get: function (url, data, callback) { | 
|             http.toAjax({ | 
|                 method: 'GET', | 
|                 url: url, | 
|                 data: data, | 
|                 dataType: 'json', | 
|                 header: {'token': localStorage.getItem('token')}, | 
|                 timeout: 10000, | 
|                 cache: false, | 
|                 success: function (res) { | 
|                     if (res.code === 200){ | 
|                         callback(res); | 
|                     } else if (res.code === 403){ | 
|                         top.location.href = baseUrl+"/"; | 
|                     }  else { | 
|                         layer.msg(res.msg, {icon: 2}); | 
|                     } | 
|                 }, | 
|                 error: function (res, type) { | 
|   | 
|                 } | 
|             }) | 
|         }, | 
|         // 默认表单 | 
|         post: function (url, param, callback, type) { | 
|             var headerType; | 
|             if (type === 'json') { | 
|                 headerType = {'Content-Type': 'application/json'} | 
|             } else { | 
|                 headerType = {'Content-Type': 'application/x-www-form-urlencoded'} | 
|             } | 
|             headerType['token'] = localStorage.getItem('token'); | 
|             http.toAjax({ | 
|                 method: 'POST', | 
|                 url: url, | 
|                 data: param, | 
|                 dataType: 'json', | 
|                 headers: headerType, | 
|                 timeout: 10000, | 
|                 cache: false, | 
|                 success: function (res) { | 
|                     if (res.code === 200){ | 
|                         callback(res); | 
|                     } else if (res.code === 403){ | 
|                         top.location.href = baseUrl+"/"; | 
|                     }  else { | 
|                         layer.msg(res.msg, {icon: 2}); | 
|                     } | 
|                 }, | 
|                 error: function (res, type) { | 
|   | 
|                 } | 
|             }) | 
|         }, | 
|     }; | 
|     "function" == typeof define && define.amd ? define(function () { | 
|         return http | 
|     }) : "object" == typeof module && module.exports ? module.exports = http : n.http = http | 
| }(this); | 
|   | 
| function requireTip(el) { | 
|     let oldBorderByCss = el.css("border"); | 
|     el.css("border", "1px solid #FF5722"); | 
|     setTimeout(function () { | 
|         el.css("border", oldBorderByCss); | 
|     }, 2000) | 
| } | 
|   | 
| function arrRemove(arr, key, val) { | 
|     for(var i=arr.length-1; i>=0; i--){ | 
|         if(arr[i][key] === val){ | 
|             arr.splice(i,1); | 
|         } | 
|     } | 
| } | 
|   | 
| var popupRight; | 
| var cstmrByMore; | 
| var orderByMore; | 
| var planByMore; | 
| var priQuoteByMore; | 
| var reimburseOnlineByMore; | 
|   | 
| function getQueryVariable(variable) | 
| { | 
|     var query = window.location.search.substring(1); | 
|     var vars = query.split("&"); | 
|     for (var i=0;i<vars.length;i++) { | 
|         var pair = vars[i].split("="); | 
|         if(pair[0] == variable){return pair[1];} | 
|     } | 
|     return(false); | 
| } | 
| var businessTripByMore; | 
| var priOnlineByMore; | 
| var priSalesByMore; | 
| var priQuoteBudgetByMore; | 
| var contractByMore; | 
|   | 
|   | 
| function getOssClient() { | 
|     // const client = new OSS({ | 
|     //     // yourRegion填写Bucket所在地域。以华东1(杭州)为例,yourRegion填写为oss-cn-hangzhou。 | 
|     //     region: "", | 
|     //     // 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。 | 
|     //     accessKeyId: "", | 
|     //     accessKeySecret: "", | 
|     //     // 从STS服务获取的安全令牌(SecurityToken)。 | 
|     //     // stsToken: "yourSecurityToken", | 
|     //     // 填写Bucket名称。 | 
|     //     bucket: "", | 
|     // }); | 
|   | 
|     let data | 
|     $.ajax({ | 
|         url: baseUrl + "/open/getOssClient", | 
|         headers: {'token': localStorage.getItem('token')}, | 
|         data: {}, | 
|         method: 'POST', | 
|         async: false, | 
|         success: function (res) { | 
|             if (res.code === 200){ | 
|                 data = res.data; | 
|             } | 
|         } | 
|     }); | 
|     return new OSS(data); | 
| } | 
|   | 
| //上传文件至OSS | 
| async function putObject(file) { | 
|     var client = getOssClient() | 
|     if (client == null) { | 
|         return false; | 
|     } | 
|   | 
|     var filename = dateToStr2(new Date()) + "_" + file.name | 
|   | 
|     // 填写Object完整路径。Object完整路径中不能包含Bucket名称。 | 
|     // 您可以通过自定义文件名(例如exampleobject.txt)或文件完整路径(例如exampledir/exampleobject.txt)的形式实现将数据上传到当前Bucket或Bucket中的指定目录。 | 
|     // data对象可以自定义为file对象、Blob数据或者OSS Buffer。 | 
|     const options = { | 
|         meta: {temp: "demo"}, | 
|         mime: "json", | 
|         headers: {"Content-Type": "text/plain"}, | 
|     }; | 
|   | 
|     return await client.put(filename, file, options); | 
|     // client.put(filename, file, options).then((e) => { | 
|     //     return true; | 
|     // }).catch((e) => { | 
|     //     return false; | 
|     // }) | 
| } | 
|   | 
| //获取OSS文件URL | 
| function getObjectUrl(filepath) { | 
|     var client = getOssClient() | 
|     if (client == null) { | 
|         return null; | 
|     } | 
|     const domain = filepath.match(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n]+)/im)[0] + "/";//域名部分 | 
|     // 配置响应头实现通过URL访问时自动下载文件,并设置下载后的文件名。 | 
|     const filename = filepath.split(domain)[1]; | 
|     const response = { | 
|         "content-disposition": `attachment; filename=${encodeURIComponent( | 
|             filename | 
|         )}`, | 
|     }; | 
|     // 填写Object完整路径。Object完整路径中不能包含Bucket名称。 | 
|     const url = client.signatureUrl(filename,{response}); | 
|     return url; | 
| } |