205 lines
5.4 KiB
JavaScript
205 lines
5.4 KiB
JavaScript
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;
|
||
}
|