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