var linkauthEnv='production'; // var linkauthEnv = null // 实例对象 var laAseem = null // 实例对象 var linkAuthEnabled = true // 是否启用权限控制 var buyPromptDialogEnabled = true // 是否启用 购买提示弹窗 var loginDisplayBarEnabled = true // 是否启用 登录显示栏 // 购买提示弹窗的弹窗间隔 // 设置初始时间为六分钟 var AuthCountDownTime = 6 * 60 * 1000; // 单位毫秒 // var AuthCountDownTime = 1 * 60 * 1000; // 单位毫秒 // 设置授权续期时间 // 默认为十分钟 var linkAuthTokenUpdateTime = 20 * 60 * 1000; // 单位毫秒 /* **************************** LINK AUTH 部份开始 ***************************** */ // 加载全局 CSS (function() { var cssLink = document.createElement('link'); cssLink.rel = 'stylesheet'; cssLink.href = 'https://spacemapper.cn/link/info.css'; // 替换为你的全局 CSS 文件路径 //cssLink.href = 'http://192.168.2.118:23321/link/info.css'; // 本地调试的css // 将 link 元素添加到 head 元素中 document.head.appendChild(cssLink); })(); // 使用方法 // if(window.laAseem) { // // 已初始化 // // 调用一次用户资料获取 // laAseem.check(document.body) // // 获取当前项目名称 // var pn = laAseem.projectName // // 获取当前请求的主机(可用于环境判定) // var host = laAseem.host // // 获取当前是否已授权 // laAseem.isAuth() // // 获取当前请求到的用户信息 // var ui = laAseem.userInfo // } // if(!window.laAseem) { // // 未初始化,初始化 // newLinkauth("EXAMPLE_SSA") // } // // 为应用定义一个自定义回调处理函数 // 只要需要处理自有逻辑时才需要在应用中定义该函数 // 多数应用应都不需要 // window.linkAuthCustomCallback = function (u) { // // 自定义处理逻辑 // } // 初始化获取用户信息 function newLinkauth (projectName) { if (!linkAuthEnabled) { // 关闭权限控制,直接返回 return; } if (laAseem) { // 已初始化,直接返回 return; } // 加载全局 CSS laAseem = new linkauth(); // 设置当前请求项目名称 laAseem.projectName = projectName; // 更改请求主机, 可选 // laAseem.host = 'https://spacemapper.cn'; // 设置完成回调函数名, 可选 laAseem.func = 'linkAuthCallback'; // 设置默认的cookie存储路径,可选,通常设置为当前应用程序名称 laAseem.path = '/'; // TOKEN 过期时间,默认:当前会话 laAseem.timeout = 1800; laAseem.check(document.body); // 定时,每10分钟续期1次 setInterval(function () { laAseem.check(document.body); }, linkAuthTokenUpdateTime); } // 请求接口获取信息 function linkauth () { // var referrer = document.referrer.toLowerCase(); // if (referrer === 'https://spacemapper.cn/'){ // this.host = 'https://spacemapper.cn' // }else{ // this.host = 'http://36.103.232.201:23320' // } this.host = 'https://spacemapper.cn' // this.host = linkauthEnv == 'production' ? 'https://spacemapper.cn' : 'http://36.103.232.201:23320'; this.func = null; this.path = null; this.timeout = null; this.projectName = null; this.userInfo = null; this.getQueryStringParameter = function (name) { var queryString = window.location.search.substring(1); var params = queryString.split('&'); for (let i = 0; i < params.length; i++) { var pair = params[i].split('='); if (pair[0] == name) { return pair[1]; } } return null; }; this.saveToken = function (token) { // link auth token sessionStorage.setItem("LINK_AT", token); }; this.loadToken = function () { // 当传入地址发生变化 var utoken1 = this.getQueryStringParameter('TOKEN'); var utoken2 = sessionStorage.getItem("LINK_UT"); if (utoken1 && utoken1 != utoken2) { sessionStorage.setItem("LINK_UT", utoken1); return utoken1; } // 取授权TOKEN var stoken = sessionStorage.getItem("LINK_AT"); if (stoken && stoken.length > 0) { return stoken; } // 无 AUTH TOKEN,使用 URL TOKEN return utoken1; }; this.isAuth = function() { return this.userInfo && this.userInfo.id > 0; }; // ele: DOM element this.send = function (ele, token) { var url = this.host; url += "/cgi/link/auth"; url += "?t=" // if (this.func) { url += "&func=" + this.func; } if (this.timeout) { url += "&timeout=" + this.timeout; } if (this.path) { url += "&path=" + this.path; } // if (token) { url += '&TOKEN=' + token; } else { url += '&TOKEN=' + this.loadToken(); } // var s = document.createElement('script'); s.setAttribute('type', 'text/javascript'); s.setAttribute('src', url); ele.appendChild(s); }; this.check = function (ele) { this.send(ele || document.body); }; } // 接口获取用户信息回调函数 function linkAuthCallback(u) { // 注意:保存到全局变量(需要复核有那些系统用到,后期应考虑删除,并在应用中使用 laAseem.userInfo) window._user = u; // 设置用户信息到LINK AUTH对象 if (window.laAseem) { window.laAseem.userInfo = u; if (u.token && u.token.length > 0) { window.laAseem.saveToken(u.token) } } // 调用应用可以定义了的自定义处理回调 if (window.linkAuthCustomCallback) { window.linkAuthCustomCallback(u); } } /* **************************** LINK AUTH 部份结束 ***************************** */ // createTips(u) // // 自定义处理逻辑 // window.userObj = u // if (window.laAseem && window.userObj && window.userObj.r_list && window.userObj.r_list.length) { // let r_list = window.userObj.r_list // r_list.map(item => { // if (item.resourceId == window.laAseem.projectName) { // // 显示提示框 // resetPrompt(item); // } // }) // } else { // resetPrompt(); // } /* **************************** 采购提示框部分开始 ***************************** */ // 定义授权提示框 var buyPromptDialog = {}; // 最后验证时间 buyPromptDialog.lastTime = new Date(); buyPromptDialog.isExpired = function(d) { // 将目标日期字符串转换为 Date 对象 var targetDate = new Date(d); // 获取当前时间 var currentDate = new Date(); // 比较当前时间是否大于目标时间 if (currentDate > targetDate) { return true; // 已过期 } else { return false; // 未过期 } } // 关闭提示信息 buyPromptDialog.close = function() { // 重置最后验证时间 buyPromptDialog.lastTime = new Date(); // 移除提示框 var element = document.getElementById('buyPromptDialogElement'); if (element) { element.parentNode.removeChild(element); } }; // 打开提示信息 buyPromptDialog.open = function() { var element = document.getElementById('buyPromptDialogElement'); if (element) { element.parentNode.removeChild(element); } // 创建窗口元素 var element = document.createElement('div'); element.id = 'buyPromptDialogElement'; // 使用模板字符串创建结构并添加到 element 中 element.innerHTML = `
注意!

未有权限 您当前属于限免权限,如果您需要继续使用此应用请购买权限。联系电话:010-5774-2838

关闭
`; // 获取权限 document.body.appendChild(element); }; // 验证定时器 setInterval(function() { if (!buyPromptDialogEnabled) { // 已禁用,退出 return; } if (document.getElementById('buyPromptDialogElement')) { // 当前为弹窗打开状态,退出 return; } // var isLogin = false; var isBuy = false; // if (window.laAseem) { // 已登录 isLogin = window.laAseem.isAuth(); var userInfo = window.laAseem.userInfo; // 有服务期 if (isLogin) { // 遍历用户资源列表,判断是否已购买 for(var i=0;i AuthCountDownTime) { buyPromptDialog.open(); } }, 5000); // 每5秒验证一次 /* **************************** 采购提示框部分结束 ***************************** */ /* **************************** 登录状态栏开始 ***************************** */ // 整体包含在函数中,防止同界面出现元素冲突 (function() { if (!loginDisplayBarEnabled) { // 禁止显示 return; } // 时间更新计时器 var linkAuthTipsInterval = null; // 当前用户项目资源 var resourceItem = null; // 当前用户信息 var userInfo = null; // 日期格式化函数 function dateFormat(date, fmt = 'yyyy-MM-dd hh:mm:ss') { if (!date) return date = new Date(date) var o = { 'M+': date.getMonth() + 1, //月份 'd+': date.getDate(), //日 'h+': date.getHours(), //小时 'm+': date.getMinutes(), //分 's+': date.getSeconds(), //秒 'q+': Math.floor((date.getMonth() + 3) / 3), //季度 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 middleDigits(phoneNumber) { // 使用正则表达式匹配手机号中的数字,并替换中间四位为星号 return phoneNumber.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2'); } // 返回购买提示弹窗剩余时间 function getBuyRemainTime() { return AuthCountDownTime - (new Date().getTime() - buyPromptDialog.lastTime.getTime()); } function createTips() { // 删除现有计时器 if (linkAuthTipsInterval) { window.clearInterval(linkAuthTipsInterval); } // 删除现有元素 var element = document.getElementById('link_auth_tips'); if (element) { element.parentNode.removeChild(element); } // var isShowTime = false; var userName = '访客'; var remainingTime = '未知'; var isTrialVersion = true; var detailsText = ', 你正在使用体验版'; // 获取资源信息 if (window.laAseem) { userInfo = window.laAseem.userInfo; for(var i = 0; i < userInfo?.r_list?.length; i++) { var item = userInfo.r_list[i]; if (item.resourceId == window.laAseem.projectName) { resourceItem = item; break; } } } else { userInfo = null; resourceItem = null; } // if (userInfo && userInfo.id > 0) { // if (resourceItem && resourceItem.lastExpireTime && resourceItem.lastExpireTime.length > 1) { // 登录已购买 userName = userInfo.name; remainingTime = '服务截止至: ' + dateFormat(resourceItem.lastExpireTime); isTrialVersion = false; detailsText = ''; } else { // 登录未购买 userName = userInfo.name; if (/^1[3-9]\d{9}$/.test(userName)) { userName = middleDigits(userName); } remainingTime = '提醒倒计时: ' + Math.floor(getBuyRemainTime() / 1000 / 60) + '分钟'; isShowTime = true; } } else { // 未登录 remainingTime = '提醒倒计时: ' + Math.floor(getBuyRemainTime() / 1000 / 60) + '分钟'; isShowTime = true; } var message = userName + ' 你好' + detailsText; var secondMsg = isTrialVersion ? '购买服务请联系客服 010-5774-2838' : '如需帮助请联系客服 010-5774-2838'; // 创建提示框 element = document.createElement('div'); element.id = 'link_auth_tips'; element.innerHTML = `
➤ ${message}
`; element.style.cssText = ` position: absolute; top: 50px; right: 0.26rem; z-index: 9999999; width:500px; display: flex; font-size: 12px; color: #fff; `; // 添加定时器,每分钟更新剩余时间 document.body.appendChild(element); // 启动更新计时器 if (isShowTime) { linkAuthTipsInterval = setInterval(() => { var element = document.getElementById('link_auth_tips_remain'); var time = getBuyRemainTime() if (element) { if(time < 1){ element.innerHTML = '0分0秒'; }else{ element.innerHTML = Math.floor(time / 1000 / 60) + '分' + Math.floor(time / 1000 % 60) + '秒'; } } },1000); } } // 首次加载,延迟2秒后创建登录提示栏 setTimeout(createTips, 2000); // 监控token是否已发生变化,若已发生变化 则重新创建 tips // 每10秒 检测一次 setInterval(() => { if (window.laAseem) { if (userInfo && userInfo.token != window.laAseem.userInfo.token) { // token 发生变化, 重建 tips setTimeout(createTips, 2000); } } },10*1000); })(); /* **************************** 登录状态栏 结束 ***************************** */ // use // new linkauth().check(document.body, callbackName) // var laAseem = new linkauth() // laAseem.host = 'http://127.0.0.1:23323'; // this.func = 'callbackFunc'; // this.path = '/'; // this.timeout = '2000'; /** userInfo 用户信息 * { "name": "马佳男", "id": 285, "token_expires": 86400, "r_list": [ { "resourceId": "SYSTEM_COLLISION", "resourceName": "碰撞预警系统", "balance": 100.0, "lastExpireTime": "2024-08-20T10:15:27+0800" }, { "resourceId": "SYSTEM_TSSY", "resourceName": "态势溯源系统", "balance": 100.0, "lastExpireTime": "2024-08-20T10:15:27+0800" }, { "resourceId": "PICTURE", "resourceName": "观测图像", "balance": 0.0, "lastExpireTime": null }, { "resourceId": "SYSTEM_SP", "resourceName": "星下点分析系统", "balance": 100.0, "lastExpireTime": "2024-08-20T10:15:27+0800" }, { "resourceId": "SYSTEM_DEDUCE", "resourceName": "轨迹溯源系统", "balance": 100.0, "lastExpireTime": "2024-08-20T10:15:27+0800" }, { "resourceId": "TLE", "resourceName": "两行根数", "balance": 0.0, "lastExpireTime": null }, { "resourceId": "SYSTEM_HEAT", "resourceName": "碰撞热力系统", "balance": 100.0, "lastExpireTime": "2024-08-20T10:15:27+0800" }, { "resourceId": "SYSTEM_SEA", "resourceName": "星地链接系统", "balance": 100.0, "lastExpireTime": "2024-08-20T10:15:27+0800" }, { "resourceId": "SYSTEM_SITUATION", "resourceName": "太空资产态势系统", "balance": 100.0, "lastExpireTime": "2024-08-20T10:15:27+0800" }, { "resourceId": "POSITION", "resourceName": "定位数据", "balance": 0.0, "lastExpireTime": null }, { "resourceId": "SYSTEM_ORBIT", "resourceName": "轨道仿真系统", "balance": 100.0, "lastExpireTime": "2024-08-20T10:15:27+0800" }, { "resourceId": "OBSERVATION", "resourceName": "观测数据", "balance": 0.0, "lastExpireTime": null }, { "resourceId": "SYSTEM_BEAM", "resourceName": "波束演示系统", "balance": 100.0, "lastExpireTime": "2024-08-20T10:15:27+0800" }, { "resourceId": "CATALOG", "resourceName": "编目数据", "balance": 0.0, "lastExpireTime": null }, { "resourceId": "VIEWER", "resourceName": "VIEWER", "balance": 100.0, "lastExpireTime": "2024-08-20T10:15:27+0800" }, { "resourceId": "ORBIT", "resourceName": "定轨数据", "balance": 0.0, "lastExpireTime": null }, { "resourceId": "SYSTEM_TRANSIT", "resourceName": "过境预报系统", "balance": 100.0, "lastExpireTime": "2024-08-20T10:15:27+0800" }, { "resourceId": "SYSTEM_CATALOG", "resourceName": "太空编目系统", "balance": 100.0, "lastExpireTime": "2024-08-20T10:15:27+0800" }, { "resourceId": "SYSTEM_SSA", "resourceName": "太空态势系统", "balance": 100.0, "lastExpireTime": "2024-08-20T10:15:27+0800" } ], "token": "xPL56JMza3-Y9WQ9MR2VGMayiu-pUdnNM2U8Dl24t9G4kh7rZcMtNkhpVE3Tv7wxRMbgG_nzl9vF_TB0gwE", "c_path": "/" } */