variant-form/src/utils/util.js

205 lines
5.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import Clipboard from 'clipboard'
export function isNull(value) {
return (value === null) || (value === undefined);
}
export function isNotNull(value) {
return (value !== null) && (value !== undefined);
}
export function isEmptyStr(str) {
//return (str === undefined) || (!str) || (!/[^\s]/.test(str));
return (str === undefined) || (!str && (str !== 0) && (str !== '0')) || (!/[^\s]/.test(str));
}
export const generateId = function() {
return Math.floor(Math.random() * 100000 + Math.random() * 20000 + Math.random() * 5000);
};
export const deepClone = function (origin) {
if (origin === undefined) {
return undefined
}
return JSON.parse(JSON.stringify(origin))
}
export const overwriteObj = function(obj1, obj2) { /* 浅拷贝对象属性obj2覆盖obj1 */
// for (let prop in obj2) {
// if (obj2.hasOwnProperty(prop)) {
// obj1[prop] = obj2[prop]
// }
// }
Object.keys(obj2).forEach(prop => {
obj1[prop] = obj2[prop]
})
}
export const addWindowResizeHandler = function (handler) {
let oldHandler = window.onresize
if (typeof window.onresize != 'function') {
window.onresize = handler
} else {
window.onresize = function () {
oldHandler()
handler()
}
}
}
const createStyleSheet = function() {
let head = document.head || document.getElementsByTagName('head')[0];
let style = document.createElement('style');
style.type = 'text/css';
head.appendChild(style);
return style.sheet;
}
export const insertCustomCssToHead = function (cssCode) {
let head = document.getElementsByTagName('head')[0]
let oldStyle = document.getElementById('vform-custom-css')
if (!!oldStyle) {
head.removeChild(oldStyle) //应该先清除后插入!!
}
let newStyle = document.createElement('style')
newStyle.type = 'text/css'
newStyle.rel = 'stylesheet'
newStyle.id = 'vform-custom-css'
try {
newStyle.appendChild(document.createTextNode(cssCode))
} catch(ex) {
newStyle.styleSheet.cssText = cssCode
}
head.appendChild(newStyle)
}
export const insertGlobalFunctionsToHtml = function (functionsCode) {
let bodyEle = document.getElementsByTagName('body')[0]
let oldScriptEle = document.getElementById('v_form_global_functions')
!!oldScriptEle && bodyEle.removeChild(oldScriptEle)
let newScriptEle = document.createElement('script')
newScriptEle.id = 'v_form_global_functions'
newScriptEle.type = 'text/javascript'
newScriptEle.innerHTML = functionsCode
bodyEle.appendChild(newScriptEle)
}
export const optionExists = function(optionsObj, optionName) {
if (!optionsObj) {
return false
}
return Object.keys(optionsObj).indexOf(optionName) > -1
}
export const loadRemoteScript = function(srcPath, callback) { /*加载远程js加载成功后执行回调函数*/
let sid = encodeURIComponent(srcPath)
let oldScriptEle = document.getElementById(sid)
if (!oldScriptEle) {
let s = document.createElement('script')
s.src = srcPath
s.id = sid
document.body.appendChild(s)
s.onload = s.onreadystatechange = function (_, isAbort) { /* 借鉴自ace.js */
if (isAbort || !s.readyState || s.readyState === "loaded" || s.readyState === "complete") {
s = s.onload = s.onreadystatechange = null
if (!isAbort) {
callback()
}
}
}
}
}
export function traverseFieldWidgets(widgetList, handler) {
widgetList.map(w => {
if (w.formItemFlag) {
handler(w)
} else if (w.type === 'grid') {
w.cols.map(col => {
traverseFieldWidgets(col.widgetList, handler)
})
} else if (w.type === 'table') {
w.rows.map(row => {
row.cols.map(cell => {
traverseFieldWidgets(cell.widgetList, handler)
})
})
} else if (w.type === 'tab') {
w.tabs.map(tab => {
traverseFieldWidgets(tab.widgetList, handler)
})
} else if (w.type === 'sub-form') {
traverseFieldWidgets(w.widgetList, handler)
} else if (w.category === 'container') { //自定义容器
traverseFieldWidgets(w.widgetList, handler)
}
})
}
export function traverseContainWidgets(widgetList, handler) {
widgetList.map(w => {
if (w.category === 'container') {
handler(w)
}
if (w.type === 'grid') {
w.cols.map(col => {
traverseContainWidgets(col.widgetList, handler)
})
} else if (w.type === 'table') {
w.rows.map(row => {
row.cols.map(cell => {
traverseContainWidgets(cell.widgetList, handler)
})
})
} else if (w.type === 'tab') {
w.tabs.map(tab => {
traverseContainWidgets(tab.widgetList, handler)
})
} else if (w.type === 'sub-form') {
traverseContainWidgets(w.widgetList, handler)
} else if (w.category === 'container') { //自定义容器
traverseContainWidgets(w.widgetList, handler)
}
})
}
export function copyToClipboard(content, clickEvent, $message, successMsg, errorMsg) {
const clipboard = new Clipboard(clickEvent.target, {
text: () => content
})
clipboard.on('success', () => {
$message.success(successMsg)
clipboard.destroy()
})
clipboard.on('error', () => {
$message.error(errorMsg)
clipboard.destroy()
})
clipboard.onClick(clickEvent)
}
export function getQueryParam(variable) {
let query = window.location.search.substring(1);
let vars = query.split("&")
for (let i=0; i<vars.length; i++) {
let pair = vars[i].split("=")
if(pair[0] == variable) {
return pair[1]
}
}
return undefined;
}