try { if (!config) { config = window.top.config } } catch(e) { if (window.top.config) { config = window.top.config } } baseUrl = config.url_root; worderUrl = config.url_worder; uploadAxios = axios.create( { timeout: 60000, headers:{ } }); commonAxios = axios.create({ timeout: 60000, // withCredentials: true, headers: { 'Content-Type': 'application/json', }, transformRequest: [function (data) { function dateFormat(date, fmt) { if (null == date || undefined == date) return ''; var o = { "M+": date.getMonth() + 1, //月份 "d+": date.getDate(), //日 "h+": date.getHours(), //小时 "m+": date.getMinutes(), //分 "s+": date.getSeconds(), //秒 "S": date.getMilliseconds() //毫秒 }; if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; } Date.prototype.toJSON = function () { return dateFormat(this, 'yyyy-MM-dd') } data = JSON.stringify(data) return data }] }); Array.prototype.remove = function(val) { var array_ = []; this.map(item=>{ if (isObject(item)) { array_.push(JSON.stringify(item)) } else { array_.push(item.toString()) } }) var val_ = val.toString(); if (isObject(val)) { val_ = JSON.stringify(val) } var index = array_.indexOf(val_); if (index > -1) { this.splice(index, 1); } }; //简易编码生成器 function createCode (code) { var code_ = ""; var date = new Date(); code_ = date.getTime(); if (code) { code_ = code + "_" + code_; } return code_; }; function createBaseCode (code) { var code_ = ""; var date = new Date(); code_ = date.getTime(); if (code) { code_ = code + code_; } return code_; }; function createDateCode (code) { var code_ = ""; //日期转为单号 var day = new Date(); var Year = 0; var Month = 0; var Day = 0; Year = day.getFullYear(); Month = day.getMonth() + 1; Day = day.getDate(); code_ += Year; if (Month >= 10) { code_ += Month; } else { code_ += "0" + Month; } if (Day >= 10) { code_ += Day; } else { code_ += "0" + Day; } var random = 0; do random = Math.floor(Math.random()*10000); while( random < 1000 ); if (code) { code_ = code + code_+ random; } return code_; } function uniq(array){ var temp = []; //一个新的临时数组 for(var i = 0; i < array.length; i++){ if(temp.indexOf(array[i]) == -1){ temp.push(array[i]); } } return temp; }; function dateFormat(date, fmt) { if (null == date || undefined == date) return ''; var o = { "M+": date.getMonth() + 1, //月份 "d+": date.getDate(), //日 "h+": date.getHours(), //小时 "m+": date.getMinutes(), //分 "s+": date.getSeconds(), //秒 "S": date.getMilliseconds() //毫秒 }; if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; }; function getUrl(vue, url, params, callback, error_callback) { url = baseUrl + url; let lastUrl = url.substring(url.lastIndexOf("/") + 1); let user = localStorage.getItem('user'); let userInfo = JSON.parse(user); if (!params) { params = { user_name: userInfo.name } } else if(!params.user_name && userInfo) { params.user_name = userInfo.name } commonAxios.get(url, { params: params }).then(data_ => { if(typeof(data_.data) == "string"){ data_.data = JSON.parse(data_.data); } if (!data_.data.success) { vue.$message({ showClose: true, message: data_.data.errormessage, type: 'error' }); return; } var result = data_.data; if (!isEncoded) { var dataStr = JSON.stringify(data_.data); // dataStr = percent2percent25(dataStr); dataStr = decodeURI(dataStr); var result = eval('(' + dataStr + ')'); } if (callback) { if (lastUrl && lastUrl.startsWith("get")) { lastUrl = lastUrl.substring(3).toLowerCase(); if (result[lastUrl]) { callback(result[lastUrl]); } else { callback(result); } } else { callback(result); } } }) .catch(error => { vue.$message({ showClose: true, message: url + ':请求出现错误:' + error, type: 'error' }); console.error(error); if (error_callback) { error_callback(error); } }) }; function uploadFileToGet(vue, formData, callback, error_callback, ocrtype) { if (ocrtype == "toDB") { uploadFileToDB(vue, formData, callback, error_callback); } else if (ocrtype && ocrtype != "toDB") {//识别类型 uploadFileOCR(ocrtype, vue, formData, callback, error_callback); } else {//普通附件上传 var url_ = baseUrl +'root/io/uploadOneFile?token='+ Root.getToken(); uploadAxios.get(url_, formData).then(data_ => { vue.$message({ showClose: true, message: '上传成功!', type: 'success' }); if (callback) { callback(data_); } }).catch(error => { vue.$message({ showClose: true, message: ':请求出现错误:' + error, type: 'error' }); console.error(error); if (error_callback) { error_callback(error); } }); } } function uploadFile(vue, formData, callback, error_callback, ocrtype) { if (ocrtype == "toDB") { uploadFileToDB(vue, formData, callback, error_callback); } else if (ocrtype && ocrtype != "toDB") {//识别类型 uploadFileOCR(ocrtype, vue, formData, callback, error_callback); } else {//普通附件上传 var url_ = baseUrl +'root/io/uploadOneFile?token='+ Root.getToken(); uploadAxios.post(url_, formData).then(data_ => { vue.$message({ showClose: true, message: '上传成功!', type: 'success' }); if (callback) { callback(data_); } }).catch(error => { vue.$message({ showClose: true, message: ':请求出现错误:' + error, type: 'error' }); console.error(error); if (error_callback) { error_callback(error); } }); } } function uploadFileOCR(ocrtype, vue, formData, callback, error_callback) { if (ocrtype == "bizLicense") {//营业执照 } var url_ = baseUrl +'root/ocr/' + ocrtype + "?token=" + Root.getToken(); uploadAxios.post(url_, formData).then(data_ => { // vue.$message({ // showClose: true, // message: '上传成功!', // type: 'success' // }); if (callback) { callback(util.decode(data_)); } }).catch(error => { vue.$message({ showClose: true, message: ':请求出现错误:' + error, type: 'error' }); console.error(error); if (error_callback) { error_callback(error); } }); } function uploadFileToDB(vue, formData, callback, error_callback) { // uploadType=so_sales_report&tempTable=temp_sales_report&operate_type=salesReport&token=admin&userid=11111&oneFile // var url_ = baseUrl + "root/upLoad/upLoadFile?token=" + Root.getToken() + "&uploadType=" + formData.uploadType + "&tempTable=" + formData.tempTable + "&operate_type=" + formData.operate_type + "&userid=" + formData.userid; var url_ = baseUrl + "root/io/importData?token=" + Root.getToken() + "&ioname=" + formData.ioname; if (formData.position_id) { url_ += "&position_id=" + formData.position_id; } if (formData.customer_id) { url_ += "&customer_id=" + formData.customer_id; } uploadAxios.post(url_, formData.oneFile).then(data_ => { // vue.$message({ // showClose: true, // message: '上传成功!', // type: 'success' // }); if (callback) { callback(util.decode(data_)); } }).catch(error => { vue.$message({ showClose: true, message: ':请求出现错误:' + error, type: 'error' }); console.error(error); if (error_callback) { error_callback(error); } }); } function uploadFileAnalysis(type, vue, formData, callback, error_callback) { /* formData.type="textCommon"; */ if(type == "BizLicense") { parse_ = "parseLicense";//"parseLicense"; } else if(type == "BizYPLicence") { parse_ = "parseInvoice"; } else if(type == "BizGSP") { parse_ = "parseGSP"; } uploadAxios.post(worderUrl +'api/' + parse_, formData).then(data_ => { // vue.$message({ // showClose: true, // message: '上传成功!', // type: 'success' // }); if (callback) { callback(data_); } }).catch(error => { vue.$message({ showClose: true, message: ':请求出现错误:' + error, type: 'error' }); console.error(error); if (error_callback) { error_callback(error); } }); } function checkInvoice(row, callback) { let formData = new FormData() // var params = { // "invoice_code": row.InvoiceCode, //发票代码。 // "invoice_num": row.InvoiceNum, // 发票号码 // "invoice_date": row.InvoiceDate, //开票日期。格式YYYYMMDD,例:20210101 // "invoice_type": row.InvoiceType, //发票种类 增值税专用发票:special_vat_invoice; 增值税电子专用发票:elec_special_vat_invoice;增值税普通发票:normal_invoice;增值税普通发票(电子):elec_normal_invoice // "check_code": row.CheckCode, //校验码。填写发票校验码后6位 // "total_amount": row.TotalTax //发票金额。增值税专票、电子专票、货运专票、机动车销售发票填写不含税金额; // } // Server.call("worder/api/checkInvoice", params, function(result) { // console.log(result); // callback(result); // }); formData.append("invoice_code", row.InvoiceCode); formData.append("invoice_num", row.InvoiceNum); formData.append("invoice_date", dateFormat(new Date(row.InvoiceDate), "yyyyMMdd")); formData.append("invoice_type", row.InvoiceType); formData.append("check_code", row.CheckCode.substring(row.CheckCode.length - 6, row.CheckCode.length)); formData.append("total_amount", row.TotalTax); uploadAxios.post(worderUrl +'api/checkInvoice', formData).then(data_ => { console.log(data_); callback(data_); }).catch(error => { console.error(error); }); } function getDataList(me, dataName, params, callback, error_callback) { params.dataName = dataName; getUrl(me, "data/getEntitySet", params, callback, error_callback); }; function getOneData(me, dataName, params, callback, error_callback) { params.dataName = dataName; getUrl(me, "data/getEntity", params, callback, error_callback); }; function saveData(me, dataName, params, callback, error_callback) { for(let one in params) { let val = params[one]; if(val === "") { params[one] = undefined; } } params.dataName = dataName; params.entity = clone(params); getUrl(me, "data/saveEntity", params, callback, error_callback); }; function delData(me, dataName, id, callback, error_callback) { let params = { id:id, dataName: dataName }; getUrl(me, "data/deleteEntity", params, callback, error_callback); }; function percent2percent25(URI) { if (URI.indexOf('%') > -1) { return URI.replace(/%/g, '%25') } else { return URI; } } function postUrl(vue, url, params, callback, error_callback) { url = baseUrl + url; let lastUrl = url.substring(url.lastIndexOf("/") + 1); let formData = new FormData(); for(let name in params) { let val = params[name]; formData.append(name, val); } axios.post(url, formData) .then(data_ => { if (!data_.data.success) { vue.$message({ showClose: true, message: data_.data.errormessage, type: 'error' }); return; } if (callback) { if (lastUrl && lastUrl.startsWith("get")) { lastUrl = lastUrl.substring(3).toLowerCase(); if (data_.data[lastUrl]) { callback(data_.data[lastUrl]); } else { callback(data_.data.data); } } else { callback(data_.data.data); } } }) .catch(error => { vue.$message({ showClose: true, message: url + ':请求出现错误:' + error, type: 'error' }); console.info(error); if (error_callback) { error_callback(error); } }) }; function postCommonUrl(vue, url, params, callback, error_callback) { url = baseUrl + url; let lastUrl = url.substring(url.lastIndexOf("/") + 1); commonAxios.post(url, params) .then(data_ => { if (!data_.data.success) { vue.$message({ showClose: true, message: data_.data.errormessage, type: 'error' }); return; } if (callback) { if (lastUrl && lastUrl.startsWith("get")) { lastUrl = lastUrl.substring(3).toLowerCase(); if (data_.data[lastUrl]) { callback(data_.data[lastUrl]); } else { callback(data_.data.data); } } else { callback(data_.data.data); } } }) .catch(error => { vue.$message({ showClose: true, message: url + ':请求出现错误:' + error, type: 'error' }); console.info(error); if (error_callback) { error_callback(error); } }) }; function objectToURI(object) { if (!object) { return null; } if (typeof object == "String") { return encodeURI(object); } var param = null; for (var prop in object) { if (object[prop]) { if (param) { param = param + "&" + prop + "=" + encodeURI(object[prop]); } else { param = prop + "=" + encodeURI(object[prop]); } } } return param; } function getGetParams(url) { // var url = window.location.href; const search = url.split('?')[1] if (!search) { return {} } return JSON.parse( '{"' + decodeURIComponent(search) .replace(/"/g, '\\"') .replace(/&/g, '","') .replace(/=/g, '":"') + '"}' ) } function getGetParamsByUrl(url) { const search = url.split('?')[1] var JSON_ = {}; if (!search) { return {} } var search_list = search.split("&"); search_list.map(s=>{ var s_list = s.split("="); if (s_list.length == 2) { var s_list_k = s_list[0];//.replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') var s_list_val = s_list[1];//.replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') JSON_[s_list_k] = s_list_val; } }); return JSON_ } function ArrayToTreeByNotParent(array_, name, parentId, parId, disabled_field, isencode, parentobj) { if(!parentId) { parentId = "parent_id"; } if(!name) { name = "label"; } if(!parId) { parId = ""; } let obj = {}; let result = []; let list = JSON.parse(JSON.stringify(array_)); list.map(el => { obj[el.id] = el; }) let openId = ""; for (let i = 0, len = list.length; i < len; i++) { let parentId_ = list[i][parentId]; //如果存在判断只读字段,并且该字段有值则设置该节点为只读 if (disabled_field) { if(list[i][disabled_field]) { list[i].disabled = true; } } //设置显示字段 if (isencode) { list[i].label = decodeURI(encodeURI( list[i][name]));//数据如果带“%”的需要编码再解码,否则会存在格式错误 list[i].name = decodeURI(encodeURI( list[i][name])); } else { list[i].label = decodeURI(list[i][name]); list[i].name = decodeURI(list[i][name]); } if (parentId_ == parId || !parentId_ || parentId_ == "null") { if(!obj[list[i].id].children) { obj[list[i].id].children = null; } result.push(list[i]); continue; } else if (obj[parentId_]) { if (!obj[parentId_].children) { obj[parentId_].children = []; } obj[parentId_].children.push(list[i]); } else if(!obj[parentId_]) { var item = { children: [] }; for (var k in parentobj) { item[k] = list[i][parentobj[k]]; } obj[parentId_] = item; result.push(obj[parentId_]); obj[parentId_].children.push(list[i]); } } return result; } function ArrayToTree(array_, name, parentId, parId, disabled_field, isencode, orderarray) { // orderarray // 有顺序的数组,生成后按照此数组排序 if(!parentId) { parentId = "parent_id"; } if(!name) { name = "label"; } if(!parId) { parId = ""; } let obj = {}; let result = []; let list = JSON.parse(JSON.stringify(array_)); list.map(el => { obj[el.id] = el; }) let openId = ""; for (let i = 0, len = list.length; i < len; i++) { let parentId_ = list[i][parentId]; //如果存在判断只读字段,并且该字段有值则设置该节点为只读 if (disabled_field) { if(list[i][disabled_field]) { list[i].disabled = true; } } //设置显示字段 var node_r_ = ""; var names_ = name.split("|"); names_.map(n=>{ if (list[i][n] && !node_r_) { node_r_ = list[i][n]; } }); if (isencode) { list[i].label = decodeURI(encodeURI( node_r_));//数据如果带“%”的需要编码再解码,否则会存在格式错误 list[i].name = decodeURI(encodeURI( node_r_)); } else { list[i].label = decodeURI(node_r_); list[i].name = decodeURI(node_r_); } if (parentId_ == parId || !parentId_ || parentId_ == "null") { if(!obj[list[i].id].children) { obj[list[i].id].children = null; } result.push(list[i]); continue; } else if (obj[parentId_]) { if (!obj[parentId_].children) { obj[parentId_].children = []; } obj[parentId_].children.push(list[i]); } } // 存在指定排序的 if (orderarray && orderarray.length) { var result_order = [] var result_ = clone(result); var result_obj = {}; var orderarray_obj = {}; result_.map(topnode=>{ result_obj[topnode[name]] = topnode }) orderarray.map(o=>{ if (result_obj[o]) { result_order.push(result_obj[o]) } // else { // var null_name = {} // null_name[name] = o // result_order.push(null_name); // } orderarray_obj[o] = o; }) for (var n in result_obj) { if (!orderarray_obj[n]) { result_order.push(result_obj[n]); } } return result_order; } else { return result; } } function ArrayToTree2(array_, name, parentId, parId, disabled_field, isencode) { if(!parentId) { parentId = "parent_id"; } if(!name) { name = "label"; } if(!parId) { parId = ""; } let obj = {}; let result = []; let list = JSON.parse(JSON.stringify(array_)); list.map(el => { obj[el.id] = el; }) let openId = ""; for (let i = 0, len = list.length; i < len; i++) { let parentId_ = list[i][parentId]; //如果存在判断只读字段,并且该字段有值则设置该节点为只读 if (disabled_field) { if(list[i][disabled_field]) { list[i].disabled = true; } } if (parentId_ == parId || !parentId_ || parentId_ == "null") { if(!obj[list[i].id].children2) { obj[list[i].id].children2 = null; } result.push(list[i]); continue; } else if (obj[parentId_]) { if (!obj[parentId_].children2) { obj[parentId_].children2 = []; } obj[parentId_].children2.push(list[i]); } } return result; } function listTOGroup(array_, id, parentId, label) { let parId = ""; let obj = {}; let result = []; let list = JSON.parse(JSON.stringify(array_)); list.map(el => { obj[el.id] = el; }) let openId = ""; for (let i = 0, len = list.length; i < len; i++) { let parentId_ = list[i][parentId]; //设置显示字段 list[i].value = list[i][id]; list[i].label = list[i][label]; if (parentId_ == parId || !parentId_) { obj[list[i].id].children = []; result.push(list[i]); continue; } else if (obj[parentId_]) { if (!obj[parentId_].children) { obj[parentId_].children = []; } obj[parentId_].children.push(list[i]); } } return result; } function list2Options(array_, value, label) { var result = array_.map(function(one) { return { value: one[value], label: one[label] } }); return result; } function clone(obj) { var result, oClass = isClass(obj); //确定result的类型 if (oClass === "Object") { result = {}; } else if (oClass === "Array") { result = []; } else { return obj; } for (var key in obj) { var copy = obj[key]; if (isClass(copy) == "Object") { result[key] = arguments.callee(copy); //递归调用 } else if (isClass(copy) == "Array") { result[key] = arguments.callee(copy); } else { result[key] = obj[key]; } } return result; }; function isClass(o) { if (o === null) return "Null"; if (o === undefined) return "Undefined"; return Object.prototype.toString.call(o).slice(8, -1); } function ocrDateFormatter(txt) { var txtList = txt.split("至"); if(txtList[0] == "年月日"){ txt = "2099-12-31"; } else { if (txtList.length > 1) { if(txtList[1].indexOf("长期") != -1 || txtList[1].indexOf("永久") != -1 || txtList[1].indexOf("不约定期限") != -1){//不约定期限 txt = "2099-12-31"; } else { txt = txtList[1]; txt = txt.replace("年", "-"); txt = txt.replace("月", "-"); txt = txt.replace("日", ""); var datas_ = txt.split("-"); var txt_ = ""; datas_.map(d=>{ d = d * 1; if (txt_ == "") { txt_ = d; } else { txt_ += "-" + d; } }) txt = txt_.toString(); if(txt && txt.search && txt.search(/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/) == -1) { txt = "" } //licenceObj_[k] = txt; } } else if (txtList.length == 1) { txt = txtList[0]; if(txt.indexOf("长期") != -1 || txt.indexOf("永久") != -1 || txt.indexOf("不约定期限") != -1){ txt = "2099-12-31"; } txt = txt.replace("年", "-"); txt = txt.replace("月", "-"); txt = txt.replace("日", ""); var datas_ = txt.split("-"); var txt_ = ""; datas_.map(d=>{ d = d * 1; if (txt_ == "") { txt_ = d; } else { txt_ += "-" + d; } }) txt = txt_.toString(); if(txt && txt.search && txt.search(/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/) == -1) { txt = "" } } } return txt; } function formatterRate(rate, fixed) { if (!fixed) { fixed = 1; } if (rate == "") { return ""; } if (rate == 0) { return 0; } if (isNaN(rate)) { return 0; } return (rate * 10000 / 100).toFixed(fixed); } function formatters(rate, fixed) { if (!fixed) { fixed = 1; } if (rate == "") { return ""; } if (isNaN(rate)) { return rate; } if (parseInt(rate) == rate) { return rate; } return (rate * 100 / 100).toFixed(fixed); } function sortNumber(a, b) { return a - b } function groupArr(list, field) { var obj = {}; for (var i = 0; i < list.length; i++) { var keys = Object.keys(list[i]); for (var j = 0; j < keys.length; j++) { var item = keys[j] if (item == field) { obj[list[i][item]] = { list: obj[list[i][field]] ? obj[list[i][field]].list : [], type: list[i][field] }; } } obj[list[i][field]].list.push(list[i]) } var att = []; for (item in obj) { att.push({ list: obj[item].list, type: obj[item].type, }) } return att; } function dealExportByBlob(res) { let fileName = decodeURI(res.headers['content-disposition'].split('filename=')[1]) // let fileName = decodeURI(res.headers['content-disposition'].match(/filename=(\S*)(?=(.xls|.xlsx))/)[1]) let blob = new Blob([res.data], { type: 'application/vnd.ms-excel;charset=UTF-8' }) if (window.navigator.msSaveBlob) { // 没有此判断的话,ie11下的导出没有效果 window.navigator.msSaveBlob(blob, fileName) } else { let downloadElement = document.createElement('a') let href = window.URL.createObjectURL(blob) // 创建下载的链接 downloadElement.href = href downloadElement.download = fileName // 下载后文件名 document.body.appendChild(downloadElement) downloadElement.click() // 点击下载 document.body.removeChild(downloadElement) // 下载完成移除元素 window.URL.revokeObjectURL(href) // 释放掉blob对象 } } function dealExportByPath(fileurl, fileName) { let downloadElement = document.createElement('a'); downloadElement.href = fileurl; downloadElement.download = fileName; // 下载后文件名 document.body.appendChild(downloadElement); downloadElement.click(); // 点击下载 document.body.removeChild(downloadElement); // 下载完成移除元素 } function randomData(length, multiple, fixed) { if (!length) { length = 1; } if (!multiple) { multiple = 1; } if (!fixed) { fixed = 0; } if (length == 1) { return getOneRandom(multiple, fixed); } var data = []; for (var i = 0; i < length; i++) { data[i] = getOneRandom(multiple, fixed); } return data; } function getOneRandom(multiple, fixed) { return parseFloat((Math.random() * multiple).toFixed(fixed)); } function uuid(len, radix) { var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); var uuid = [], i; radix = radix || chars.length; if (len) { // Compact form for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]; } else { // rfc4122, version 4 form var r; // rfc4122 requires these characters uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'; uuid[14] = '4'; // Fill in random data. At i==19 set the high bits of clock sequence as // per rfc4122, sec. 4.1.5 for (i = 0; i < 36; i++) { if (!uuid[i]) { r = 0 | Math.random() * 16; uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; } } } return uuid.join(''); } function uuid_short() { return uuid(32); } function isObject(obj) { return Object.prototype.toString.call(obj) === '[object Object]'; } function isDoObject(value) { return typeof value === 'object' && !Array.isArray(value); } function str2JSON(str) { if(str == ""|| str == undefined) { return null; } return JSON.parse(str); } function getArrDifference(array1, array2) { var result = []; for(var i = 0; i < array2.length; i++){ var obj = array2[i]; var num = obj.id; var isExist = false; for(var j = 0; j < array1.length; j++){ var aj = array1[j]; var n = aj.field_id; if(n == num){ isExist = true; break; } } if(!isExist){ result.push(obj); } } return result; } function groupBy( array , f ) { let groups = {}; array.forEach( function( o ) { let group = JSON.stringify( f(o) ); groups[group] = groups[group] || []; groups[group].push( o ); }); return Object.keys(groups).map( function( group ) { return groups[group]; }); } Array.prototype.contains = function (obj) { var i = this.length; while (i--) { if (this[i] === obj) { return true; } } return false; } function dateformatter(date, type){ if(!type) { type = 0; } if(0 == type) { return dateFormatCommon(date); } if(1 == type) { return dateFormatEn(date); } if(2 == type) { return dateFormatCn(date); } if(-1 == type) { return new Date(Date.parse(date.replace(/-/g, "/"))); } } function dateFormatCommon(date) { var nowdate = new Date(date).toLocaleDateString().replace(/\//g, '-') return nowdate } function dateFormatEn(date) { var nowdate = new Date(date).toLocaleDateString() return nowdate } function dateFormatCn(now) { y = now.getFullYear(), m = ("0" + (now.getMonth() + 1)).slice(-2), d = ("0" + now.getDate()).slice(-2); return y + "-" + m + "-" + d + " " + now.toTimeString().substr(0, 8); } function isAssetTypeAnImage(ext) { return [ 'png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff']. indexOf(ext.toLowerCase()) !== -1; } function logOut() { window.top.location.href = "login.html"; localStorage.removeItem('user'); localStorage.removeItem('emp'); localStorage.removeItem('menu'); } function quotedStr(val) { return "'" + val + "'"; } function handleDownload(fileId, dataname, downloadtype) { // fileId可以是文件路径也可以是文件id。为文件id时必须要有dataname // downloadtype为AsWord时预览,为空或为saveas时下载 var elemIF = document.createElement('iframe'); customAlert('文件下载中,请稍后'); var action = "saveas"; if (downloadtype) { action = downloadtype } if (!dataname) { var pathurl = fileId; getFileByPathUrl(pathurl, function(url) { elemIF.src = url; }, action) } else { getDownloadFileUrl(fileId, dataname, function(url) { elemIF.src = url; }, action); } elemIF.style.display = 'none' document.body.appendChild(elemIF) } function customAlert(message) { // 创建对话框的背景 var overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.background = 'rgba(0, 0, 0, 0.5)'; overlay.style.zIndex = '9999'; // 创建对话框的容器 var dialog = document.createElement('div'); dialog.style.position = 'fixed'; dialog.style.top = '50%'; dialog.style.left = '50%'; dialog.style.transform = 'translate(-50%, -50%)'; dialog.style.background = 'linear-gradient(#f2f2f2, #e6e6e6)'; dialog.style.padding = '20px'; dialog.style.borderRadius = '5px'; dialog.style.boxShadow = '0 2px 5px rgba(0, 0, 0, 0.3)'; dialog.style.zIndex = '10000'; dialog.style.display = 'flex'; dialog.style.flexDirection = 'column'; dialog.style.maxWidth = '400px'; // 限制对话框的最大宽度 // 创建提示文本 var messageElement = document.createElement('p'); messageElement.textContent = message; messageElement.style.marginBottom = '15px'; // 添加下边距,与按钮分隔开 messageElement.style.fontSize = '15px'; // 创建关闭按钮容器 var closeButtonContainer = document.createElement('div'); closeButtonContainer.style.display = 'flex'; closeButtonContainer.style.justifyContent = 'flex-end'; // 将按钮容器置于右侧 // 创建关闭按钮 var closeButton = document.createElement('button'); closeButton.textContent = '关闭'; closeButton.style.padding = '6px 12px'; closeButton.style.background = '#007bff'; closeButton.style.color = 'white'; closeButton.style.border = 'none'; closeButton.style.borderRadius = '3px'; closeButton.style.cursor = 'pointer'; // closeButton.style.fontWeight = 'bold'; closeButton.style.fontSize = '12px'; closeButton.addEventListener('click', function () { document.body.removeChild(overlay); }); // 将关闭按钮添加到关闭按钮容器中 closeButtonContainer.appendChild(closeButton); // 将元素添加到对话框中 dialog.appendChild(messageElement); dialog.appendChild(closeButtonContainer); // 将对话框添加到页面中 document.body.appendChild(overlay); overlay.appendChild(dialog); setTimeout(function(){ document.body.removeChild(overlay); },2000); } function getFileByHttp(fileId) { var url = baseUrl + "root/file/getFile?category=org&id=" + fileId; var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.setRequestHeader("Authorization", Root.getToken()); xhr.responseType = 'blob'; xhr.onload = function (e) { //如果请求执行成功 if (this.status == 200) { var blob = this.response; var filename = file.alias; var a = document.createElement('a'); // blob.type = "application/octet-stream"; //创键临时url对象 var url = URL.createObjectURL(blob); a.href = url; a.download=filename; a.click(); //释放之前创建的URL对象 window.URL.revokeObjectURL(url); } }; //发送请求 xhr.send(); } function getFileUrl_v2(fileId, callback) { let that = this; let urlsrc = ""; //通过一个参数 从下面接收 var url = baseUrl + "root/file/getFile?category=org&id=" + fileId; // 通过图片地址获取图片,从新获取图片 var config = { method: "get", responseType: "arraybuffer", url: url, headers: { Authorization: Root.getToken(), }, }; // 重新获取请求,获取的是base64位的图片 axios(config).then((response) => { //因为从这里return老是报错 urlsrc = "data:image/png;base64," + btoa( new Uint8Array(response.data).reduce( (data, byte) => data + String.fromCharCode(byte) + "", "" ) ); callback(urlsrc) }); // return urlsrc; } function getFileUrl(fileId, dataname, callback, downloadtype) { // var url = baseUrl + "root/file/getFile?category=org&token=" + Root.getToken() + "&id=" + fileId; var url = baseUrl + "root/io/downloadOneFile?category=org&token=" + Root.getToken() + "&file_index_id=" + fileId + "&dataname=" + dataname; if (downloadtype) { url += "&action=" + downloadtype; } callback(url) } function getFileByPathUrl(pathurl, callback, downloadtype) { // var url = baseUrl + "root/file/getFile?category=org&token=" + Root.getToken() + "&id=" + fileId; var url = baseUrl + "root/io/downloadOneFile?url=" + pathurl; // + "&action=saveas"; if (downloadtype) { url += "&action=" + downloadtype; } callback(url) } function getDownloadFileUrl(fileId, dataname, callback, downloadtype) { getFileUrl(fileId, dataname, callback, downloadtype); } function getFileUrlPath(fileId, callback) { var url = baseUrl + "root/file/getFileUrl?category=org&token=" + Root.getToken() + "&id=" + fileId; //// var params = { category: "org", id: fileId } Server.call(url, params, function(result_) { console.log(result_); callback(result_) }) //// //callback(url) } function getDownloadFileUrlPath(fileId, callback) { getFileUrlPath(fileId, callback); } //去除首端的特殊字符 function delInvalidCharacter(str, invalidcharacter) {//invalidcharacter特殊字符的数组["@",":"]等 var invalid_character = [":",":"];//去除首段的特殊字符 if (invalidcharacter) { invalid_character = invalidcharacter; } //获取需要截取的索引 var index_ = 0; for (var s of str) { if (invalid_character.indexOf(s) != -1) { index_ ++; } else { break } } if (index_) { str = str.substring(index_); } return str; } /// 项目使用 function addNotice(me, to_id, content, callback) { let params = { to_id: to_id, content: content }; let url = "work/push2Msg"; getUrl(me, url, params, result => { if(callback) { callback(result); } }) }