UNPKG

@jdlinker/utils

Version:

jdLinker 工具库

401 lines (353 loc) 10.2 kB
import Clipboard from 'clipboard'; 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); } /** * 下划线转驼峰 * @param string * @returns {*} */ export function underLine2CamelCase(string) { return string.replace(/_([a-z])/g, function (all, letter) { return letter.toUpperCase(); }); } export function getCamelCase(val) { let tempentyame = underLine2CamelCase(val); return tempentyame.substring(0, 1).toUpperCase() + tempentyame.substring(1); } 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, formId = '') { let head = document.getElementsByTagName('head')[0]; let oldStyle = document.getElementById('vform-custom-css'); if (oldStyle) { head.removeChild(oldStyle); //先清除后插入!! } if (formId) { oldStyle = document.getElementById('vform-custom-css' + '-' + formId); !!oldStyle && head.removeChild(oldStyle); //先清除后插入!! } let newStyle = document.createElement('style'); newStyle.type = 'text/css'; newStyle.rel = 'stylesheet'; newStyle.id = formId ? 'vform-custom-css' + '-' + formId : 'vform-custom-css'; try { newStyle.appendChild(document.createTextNode(cssCode)); } catch (ex) { newStyle.styleSheet.cssText = cssCode; } head.appendChild(newStyle); }; export const insertGlobalFunctionsToHtml = function (functionsCode, formId = '') { let bodyEle = document.getElementsByTagName('body')[0]; let oldScriptEle = document.getElementById('v_form_global_functions'); !!oldScriptEle && bodyEle.removeChild(oldScriptEle); //先清除后插入!! if (formId) { oldScriptEle = document.getElementById('v_form_global_functions' + '-' + formId); !!oldScriptEle && bodyEle.removeChild(oldScriptEle); //先清除后插入!! } let newScriptEle = document.createElement('script'); newScriptEle.id = formId ? 'v_form_global_functions' + '-' + formId : '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, parent = null) { if (!widgetList) { return; } widgetList.map((w) => { if (w.formItemFlag) { handler(w, parent); } else if (w.type === 'grid') { w.cols.map((col) => { traverseFieldWidgets(col.widgetList, handler, w); }); } else if (w.type === 'table') { w.rows.map((row) => { row.cols.map((cell) => { traverseFieldWidgets(cell.widgetList, handler, w); }); }); } else if (w.type === 'tab') { w.tabs.map((tab) => { traverseFieldWidgets(tab.widgetList, handler, w); }); } else if (w.type === 'sub-form') { traverseFieldWidgets(w.widgetList, handler, w); } else if (w.category === 'container') { //自定义容器 traverseFieldWidgets(w.widgetList, handler, w); } }); } export function traverseContainerWidgets(widgetList, handler) { if (!widgetList) { return; } widgetList.map((w) => { if (w.category === 'container') { handler(w); } if (w.type === 'grid') { w.cols.map((col) => { traverseContainerWidgets(col.widgetList, handler); }); } else if (w.type === 'table') { w.rows.map((row) => { row.cols.map((cell) => { traverseContainerWidgets(cell.widgetList, handler); }); }); } else if (w.type === 'tab') { w.tabs.map((tab) => { traverseContainerWidgets(tab.widgetList, handler); }); } else if (w.type === 'sub-form') { traverseContainerWidgets(w.widgetList, handler); } else if (w.category === 'container') { //自定义容器 traverseContainerWidgets(w.widgetList, handler); } }); } export function traverseAllWidgets(widgetList, handler) { if (!widgetList) { return; } widgetList.map((w) => { handler(w); if (w.type === 'grid') { w.cols.map((col) => { handler(col); traverseAllWidgets(col.widgetList, handler); }); } else if (w.type === 'table') { w.rows.map((row) => { row.cols.map((cell) => { handler(cell); traverseAllWidgets(cell.widgetList, handler); }); }); } else if (w.type === 'tab') { w.tabs.map((tab) => { traverseAllWidgets(tab.widgetList, handler); }); } else if (w.type === 'sub-form') { traverseAllWidgets(w.widgetList, handler); } else if (w.category === 'container') { //自定义容器 traverseAllWidgets(w.widgetList, handler); } }); } function handleWidgetForTraverse(widget, handler) { if (widget.category) { traverseFieldWidgetsOfContainer(widget, handler); } else if (widget.formItemFlag) { handler(widget); } } /** * 遍历容器内的字段组件 * @param con * @param handler */ export function traverseFieldWidgetsOfContainer(con, handler) { if (con.type === 'grid') { con.cols.forEach((col) => { col.widgetList.forEach((cw) => { handleWidgetForTraverse(cw, handler); }); }); } else if (con.type === 'table') { con.rows.forEach((row) => { row.cols.forEach((cell) => { cell.widgetList.forEach((cw) => { handleWidgetForTraverse(cw, handler); }); }); }); } else if (con.type === 'tab') { con.tabs.forEach((tab) => { tab.widgetList.forEach((cw) => { handleWidgetForTraverse(cw, handler); }); }); } else if (con.type === 'sub-form') { con.widgetList.forEach((cw) => { handleWidgetForTraverse(cw, handler); }); } else if (con.category === 'container') { //自定义容器 con.widgetList.forEach((cw) => { handleWidgetForTraverse(cw, handler); }); } } /** * 获取所有字段组件 * @param widgetList * @returns {[]} */ export function getAllFieldWidgets(widgetList) { if (!widgetList) { return []; } let result = []; let handlerFn = (w) => { result.push({ type: w.type, name: w.options.name, field: w }); }; traverseFieldWidgets(widgetList, handlerFn); return result; } /** * 获取所有容器组件 * @param widgetList * @returns {[]} */ export function getAllContainerWidgets(widgetList) { if (!widgetList) { return []; } let result = []; let handlerFn = (w) => { result.push({ type: w.type, name: w.options.name, container: w }); }; traverseContainerWidgets(widgetList, handlerFn); return result; } 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; } export function getDefaultFormConfig() { return { modelName: 'formData', refName: 'vForm', rulesName: 'rules', labelWidth: 80, labelPosition: 'left', size: '', labelAlign: 'label-left-align', cssCode: '', customClass: [], functions: '', //全局函数 layoutType: 'PC', jsonVersion: 3, onFormCreated: '', onFormMounted: '', onFormDataChange: '' }; } export function buildDefaultFormJson() { return { widgetList: [], formConfig: deepClone(getDefaultFormConfig()) }; } /** * 触发 window.resize */ export function triggerWindowResizeEvent() { const event = document.createEvent('HTMLEvents'); event.initEvent('resize', true, true); event.eventType = 'message'; window.dispatchEvent(event); }