You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
324 lines
7.7 KiB
324 lines
7.7 KiB
var isLoading = false |
|
var tools = { |
|
highlightErrorFields: function (data) { |
|
if (!data.ErrorParameters) { |
|
tools.alert(data.message) |
|
return |
|
} |
|
data.ErrorParameters.forEach(function (error) { |
|
// 获取 Name 属性的值 |
|
var fieldName = error.Name |
|
|
|
// 查找具有相同 name 属性值的所有元素 |
|
var elements = document.getElementsByName(fieldName) |
|
|
|
// 循环遍历找到的元素,设置样式 |
|
for (var i = 0; i < elements.length; i++) { |
|
elements[i].style.border = '2px solid red' |
|
|
|
var spanElement = document.createElement('span') |
|
spanElement.style.color = 'red' |
|
spanElement.style.marginLeft = '5px' // 调整距离,可根据需要更改 |
|
spanElement.innerHTML = error.Message |
|
|
|
// 将 span 元素添加到当前元素的后面 |
|
elements[i].parentNode.insertBefore( |
|
spanElement, |
|
elements[i].nextSibling |
|
) |
|
} |
|
setTimeout(function () { |
|
for (var i = 0; i < elements.length; i++) { |
|
elements[i].style.border = '' |
|
// 移除当前元素后面的 span 元素 |
|
var nextSibling = elements[i].nextSibling |
|
if ( |
|
nextSibling && |
|
nextSibling.tagName === 'SPAN' |
|
) { |
|
elements[i].parentNode.removeChild(nextSibling) |
|
} |
|
} |
|
}, 3000) |
|
}) |
|
}, |
|
alert: function (msg) { |
|
$(divAlertBody).html(msg) |
|
btnAlert.click() |
|
}, |
|
objectToQueryString: function (obj) { |
|
return Object.keys(obj) |
|
.filter( |
|
key => obj[key] !== null && obj[key] !== undefined |
|
) // Filter out null and undefined values |
|
.map(key => key + '=' + encodeURIComponent(obj[key])) |
|
.join('&') |
|
}, |
|
formToJson: function (formId) { |
|
var form = document.getElementById(formId) |
|
var formData = new FormData(form) |
|
var jsonData = {} |
|
|
|
formData.forEach(function (value, key) { |
|
jsonData[key] = value |
|
}) |
|
|
|
return jsonData |
|
}, |
|
isValidURLPattern: function (inputString) { |
|
var url = 'https://www.rezero.com' + inputString |
|
var pattern = |
|
/^((http|https|ftp):\/\/)?([a-zA-Z0-9_-]+\.)+[a-zA-Z]{2,6}(\/[a-zA-Z0-9_.-]*)*\/?$/ |
|
return pattern.test(url) |
|
}, |
|
ensureNumeric: function (inputField) { |
|
// 尝试将输入值转换为数字 |
|
var value = inputField.value |
|
|
|
// 尝试将输入值转换为数字 |
|
var numericValue = parseFloat(value) |
|
|
|
// 如果转换失败,则将值设置为 0 |
|
if (isNaN(numericValue)) { |
|
numericValue = 0 |
|
} |
|
|
|
// 将更新后的值设置回输入框 |
|
inputField.value = numericValue |
|
}, |
|
showSpecifiedElementAndHideOthers: function ( |
|
elementToShowId, |
|
elementsToHideIds |
|
) { |
|
// 显示指定元素并隐藏其他元素 |
|
document.getElementById(elementToShowId).style.display = |
|
'block' |
|
for (var i = 0; i < elementsToHideIds.length; i++) { |
|
document.getElementById( |
|
elementsToHideIds[i] |
|
).style.display = 'none' |
|
} |
|
}, |
|
assignValuesToObject: function ( |
|
sourceObject, |
|
targetObject |
|
) { |
|
Object.keys(sourceObject).forEach(function (key) { |
|
if (targetObject.hasOwnProperty(key)) { |
|
targetObject[key] = sourceObject[key] |
|
} else { |
|
console.warn( |
|
`Property '${key}' does not exist in the target object.` |
|
) |
|
} |
|
}) |
|
}, |
|
openLoading: function () { |
|
var loadingOverlay = document.getElementById( |
|
'loadingOverlay' |
|
) |
|
loadingOverlay.style.display = 'flex' |
|
}, |
|
closeLoading: function () { |
|
var loadingOverlay = document.getElementById( |
|
'loadingOverlay' |
|
) |
|
loadingOverlay.style.display = 'none' |
|
}, |
|
getValue: function (id) { |
|
var element = document.getElementById(id) |
|
if (element) { |
|
return element.value |
|
} else { |
|
return null |
|
} |
|
}, |
|
checkAuthorization: function () { |
|
setTimeout(function () { |
|
var tokeEle = document.getElementById('txtToken') |
|
if (tokeEle) return |
|
|
|
axios |
|
.get( |
|
'/PrivateReZeroRoute/100004/GetDbTypeList', |
|
jwHeader |
|
) |
|
.then(response => { |
|
this.dbTypeList = response.data |
|
isLoading = true |
|
this.error = null |
|
}) |
|
.catch(error => { |
|
isLoading = true |
|
this.error = error.message |
|
this.data = null |
|
}) |
|
}, 3000) |
|
}, |
|
jsonToUrl: function (json) { |
|
return Object.keys(json) |
|
.map(function (key) { |
|
return ( |
|
encodeURIComponent(key) + |
|
'=' + |
|
encodeURIComponent(json[key]) |
|
) |
|
}) |
|
.join('&') |
|
}, |
|
initColor: function () { |
|
if (localStorage.BgColorType == 1) { |
|
document.body.setAttribute('data-theme', 'dark') |
|
} else if (localStorage.BgColorType !== 'default') { |
|
document.body.setAttribute('data-theme', 'default') |
|
} |
|
var dropdown = document.querySelector( |
|
'.dropdown-skin.open' |
|
) |
|
|
|
if (dropdown) { |
|
// 移除 "open" 类,添加 "close" 类 |
|
dropdown.classList.remove('open') |
|
dropdown.classList.add('close') |
|
} |
|
}, |
|
appendQueryParams: function (url) { |
|
// 从当前 URL 中提取查询参数 |
|
const searchParams = new URLSearchParams( |
|
window.location.search |
|
) |
|
const params = {} |
|
|
|
// 动态提取 token 和 model |
|
if (searchParams.has('token')) { |
|
params.token = searchParams.get('token') |
|
} |
|
if (searchParams.has('model')) { |
|
params.model = searchParams.get('model') |
|
} |
|
|
|
// 如果没有参数,直接返回原始 URL |
|
if (Object.keys(params).length === 0) { |
|
return url |
|
} |
|
|
|
// 检查 URL 是否已经包含查询参数 |
|
const separator = url.includes('?') ? '&' : '?' |
|
|
|
// 将参数对象转换为查询字符串 |
|
const queryString = Object.keys(params) |
|
.map( |
|
key => |
|
`${encodeURIComponent(key)}=${encodeURIComponent( |
|
params[key] |
|
)}` |
|
) |
|
.join('&') |
|
|
|
// 拼接 URL 和查询参数 |
|
return url + separator + queryString |
|
}, |
|
validateDatalist: function (ele, datalistId) { |
|
const input = ele |
|
const list = document.getElementById(datalistId) |
|
const options = list && list.options |
|
const value = input.value |
|
let isValid = false |
|
if (options) { |
|
for (let i = 0; i < options.length; i++) { |
|
if (value === options[i].value) { |
|
isValid = true |
|
break |
|
} |
|
} |
|
} |
|
if (!isValid) { |
|
input.value = '' |
|
} |
|
}, |
|
copyText: function (text) { |
|
navigator.clipboard |
|
.writeText(text) |
|
.then(() => { |
|
tools.alert('复制成功') |
|
}) |
|
.catch(err => { |
|
tools.alert('复制失败') |
|
}) |
|
}, |
|
formatDate: function (date) { |
|
if (!date) return '' |
|
const d = new Date(date) |
|
const month = '' + (d.getMonth() + 1) |
|
const day = '' + d.getDate() |
|
const year = d.getFullYear() |
|
return [ |
|
year, |
|
month.padStart(2, '0'), |
|
day.padStart(2, '0'), |
|
].join('-') |
|
}, |
|
} |
|
Array.prototype.removeArrayItem = function (item) { |
|
const index = this.indexOf(item) |
|
if (index !== -1) { |
|
this.splice(index, 1) |
|
} |
|
return this |
|
} |
|
setTimeout(function () { |
|
// 设置请求拦截器 |
|
axios.interceptors.request.use( |
|
function (config) { |
|
if (isLoading) { |
|
tools.openLoading() |
|
} |
|
return config |
|
}, |
|
function (error) { |
|
// 对请求错误做些什么 |
|
return Promise.reject(error) |
|
} |
|
) |
|
|
|
// 设置响应拦截器 |
|
axios.interceptors.response.use( |
|
function (response) { |
|
if (isLoading) { |
|
tools.closeLoading() |
|
} |
|
return response |
|
}, |
|
function (error) { |
|
if (error.response) { |
|
// 请求已发出,但服务器响应的状态码不在 2xx 范围内 |
|
if (error.response.status === 401) { |
|
if (isLoading) { |
|
tools.closeLoading() |
|
} |
|
tools.alert('授权失败,自动跳到授权页面') |
|
// 如果是401错误(未授权),则跳转到登录页面 |
|
setTimeout(function () { |
|
if (isloginPage) { |
|
window.location.href = '/rezero/login.html' |
|
} else { |
|
window.location.href = |
|
'/rezero/authorization.html' |
|
} |
|
}, 2000) |
|
} else { |
|
// 处理其他状态码 |
|
return Promise.reject(error) |
|
} |
|
} else if (error.request) { |
|
// 请求已发出,但没有收到响应 |
|
console.log('Request:', error.request) |
|
return Promise.reject(error) |
|
} else { |
|
// 发生一些其他问题在设置请求时触发了一个错误 |
|
console.log('Error', error.message) |
|
return Promise.reject(error) |
|
} |
|
} |
|
) |
|
}, 2000)
|
|
|