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.
271 lines
9.4 KiB
271 lines
9.4 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) |