| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- /**
- * H5公共工具函数
- * 避免在多个文件中重复定义相同的函数
- */
- // 获取URL参数的工具函数
- function getUrlParams() {
- const params = {}
- const urlSearchParams = new URLSearchParams(window.location.search)
- for (const [key, value] of urlSearchParams) {
- params[key] = decodeURIComponent(value)
- }
- return params
- }
- // 获取设备信息 (优先从URL参数获取,备用从localStorage获取)
- function getDeviceInfo() {
- const urlParams = getUrlParams()
- // 优先从URL参数获取
- let deviceId = urlParams.devId || ''
- let model = urlParams.sbmc || ''
- // 如果URL参数中没有,尝试从localStorage获取
- if (!deviceId || !model) {
- const cachedDeviceInfo = localStorage.getItem('deviceInfo')
- if (cachedDeviceInfo) {
- try {
- const parsed = JSON.parse(cachedDeviceInfo)
- deviceId = deviceId || parsed.deviceId || ''
- model = model || parsed.model || ''
- console.log('🔄 从localStorage获取设备信息:', { deviceId, model })
- } catch (e) {
- console.warn('解析localStorage中的设备信息失败:', e)
- }
- }
- }
- // 如果获取到了设备信息,保存到localStorage作为备用
- if (deviceId && model) {
- const deviceInfo = { deviceId, model }
- localStorage.setItem('deviceInfo', JSON.stringify(deviceInfo))
- }
- return {
- deviceId: deviceId,
- model: model
- }
- }
- // 获取JSESSIONID (多源获取,确保可用性)
- function getJSessionId() {
- // 优先级:localStorage > URL参数 > Cookie
- let jsessionId = localStorage.getItem('JSESSIONID')
-
- if (!jsessionId) {
- const urlParams = getUrlParams()
- jsessionId = urlParams.JSESSIONID
- }
-
- if (!jsessionId) {
- // 尝试从document.cookie中获取
- const cookies = document.cookie.split(';')
- for (let cookie of cookies) {
- const [name, value] = cookie.trim().split('=')
- if (name === 'JSESSIONID') {
- jsessionId = value
- break
- }
- }
- }
-
- console.log('🔍 获取JSESSIONID:', {
- fromLocalStorage: localStorage.getItem('JSESSIONID'),
- fromURL: getUrlParams().JSESSIONID,
- final: jsessionId
- })
-
- return jsessionId || ''
- }
- // 保存JSESSIONID到localStorage
- function saveJSessionId(jsessionId) {
- if (jsessionId) {
- localStorage.setItem('JSESSIONID', jsessionId)
- console.log('✅ H5 JSESSIONID已保存:', jsessionId)
- }
- }
- // 模拟微信授权码获取 (H5环境下的处理)
- function getMockWechatCode() {
- // 在H5环境下,我们可以生成一个模拟的code
- // 实际项目中可能需要接入微信H5授权
- return 'h5_mock_code_' + Date.now()
- }
- // 用户信息管理
- const userManager = {
- // 保存用户信息
- saveUserInfo(userInfo) {
- console.log('💾 H5保存用户信息:', userInfo)
- localStorage.setItem('userInfo', JSON.stringify(userInfo))
- },
- // 获取保存的用户信息
- getSavedUserInfo() {
- const userInfo = localStorage.getItem('userInfo')
- return userInfo ? JSON.parse(userInfo) : null
- },
- // 检查登录状态
- checkLoginStatus() {
- const userInfo = localStorage.getItem('userInfo')
- const jsessionId = localStorage.getItem('JSESSIONID')
-
- console.log('🔍 H5检查登录状态:', {
- hasUserInfo: !!userInfo,
- hasJSessionId: !!jsessionId
- })
- return {
- isLoggedIn: !!(userInfo && jsessionId),
- userInfo: userInfo ? JSON.parse(userInfo) : null,
- jsessionId: jsessionId
- }
- },
- // 清除登录信息
- clearLoginInfo() {
- localStorage.removeItem('userInfo')
- localStorage.removeItem('JSESSIONID')
- localStorage.removeItem('deviceInfo')
- console.log('🧹 已清除登录信息')
- }
- }
- // 获取图片URL (用于图片回显)
- function getImageUrl(path) {
- if (!path) return ''
- // 如果已经是完整URL,直接返回
- if (path.startsWith('http://') || path.startsWith('https://') || path.startsWith('blob:')) {
- return path
- }
- // 获取baseUrl (从request中获取或使用默认值)
- const baseUrl = window.request?.defaults?.baseURL || window.location.origin
- // 构造图片下载URL
- return baseUrl + '/service?ssServ=dlByHttp&wdConfirmationCaptchaService=0&type=img&path=' + path
- }
- // 获取文件URL (用于文件下载)
- function getFileUrl(path) {
- if (!path) return ''
- // 如果已经是完整URL,直接返回
- if (path.startsWith('http://') || path.startsWith('https://')) {
- return path
- }
- // 获取baseUrl
- const baseUrl = window.request?.defaults?.baseURL || window.location.origin
- // 构造文件下载URL
- return baseUrl + '/service?ssServ=dlByHttp&wdConfirmationCaptchaService=0&type=file&path=' + path
- }
- // 格式化日期时间 (使用 dayjs)
- function formatDate(dateStr, format = 'YYYY-MM-DD HH:mm:ss') {
- if (!dateStr) {
- console.log('formatDate: 时间字符串为空')
- return ''
- }
- console.log('formatDate 输入:', dateStr, '格式要求:', format)
- // 检查 dayjs 是否可用
- if (typeof dayjs === 'undefined') {
- console.error('❌ dayjs 未加载,无法格式化时间')
- return dateStr
- }
- // 清理字符串:移除特殊空格字符(如 \u202F),替换为普通空格
- const cleanedDateStr = String(dateStr)
- .replace(/[\u202F\u00A0]/g, ' ') // 替换不间断空格
- .replace(/\s+/g, ' ') // 多个空格合并为一个
- .trim()
- console.log('清理后的字符串:', cleanedDateStr)
- // 尝试使用原生 Date 解析(兼容性最好)
- let date = null
- try {
- const jsDate = new Date(cleanedDateStr)
- if (!isNaN(jsDate.getTime())) {
- date = dayjs(jsDate)
- console.log('✅ 使用 Date 解析成功')
- }
- } catch (e) {
- console.warn('Date 解析失败:', e)
- }
- // 如果 Date 解析失败,尝试直接用 dayjs
- if (!date || !date.isValid()) {
- date = dayjs(cleanedDateStr)
- console.log('尝试使用 dayjs 直接解析')
- }
- console.log('dayjs 解析结果 isValid:', date ? date.isValid() : 'null')
- if (!date || !date.isValid()) {
- console.warn('⚠️ 无效的日期格式:', dateStr)
- return '' // 解析失败返回空字符串
- }
- // dayjs 的格式化 (支持常见格式)
- // dayjs 使用大写的格式标记: YYYY-MM-DD HH:mm:ss
- const result = date.format(format)
- console.log('格式化结果:', result)
- return result
- }
- // 导出到全局
- window.getUrlParams = getUrlParams
- window.getDeviceInfo = getDeviceInfo
- window.getJSessionId = getJSessionId
- window.saveJSessionId = saveJSessionId
- window.getMockWechatCode = getMockWechatCode
- window.userManager = userManager
- window.getImageUrl = getImageUrl
- window.getFileUrl = getFileUrl
- window.formatDate = formatDate
- // 同时挂载到SS.utils下(兼容组件调用)
- if (!window.SS.utils) {
- window.SS.utils = {}
- }
- window.SS.utils.getImageUrl = getImageUrl
- window.SS.utils.getFileUrl = getFileUrl
- window.SS.utils.formatDate = formatDate
- console.log('✅ H5公共工具已加载')
|