147 lines
4.8 KiB
JavaScript
147 lines
4.8 KiB
JavaScript
import { isEmpty, isFunction, get, set } from "lodash-es"
|
|
|
|
export const containerItems = ["tabs", "table", "card", "grid", "grid-tailwind", "children-form"]
|
|
export const inputType = ["input", "input-password", "input-search"]
|
|
export const pickerType = ["date", "month", "year", "week", "quarter", "range", "time"]
|
|
|
|
export const interactiveControl = (form, columns, maFormObject) => {
|
|
const obj = []
|
|
const names = []
|
|
const keys = Object.keys(form)
|
|
if (keys && keys.length > 0) {
|
|
keys.map((item) => {
|
|
if (form[item] && typeof form[item] === "object") {
|
|
for (let name in form[item]) {
|
|
names.push(`${item}.${name}`)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
for (let name in form) {
|
|
columns.map((item) => {
|
|
if (
|
|
(item.dataIndex === name || names.includes(item.dataIndex)) &&
|
|
item.onControl &&
|
|
isFunction(item.onControl)
|
|
) {
|
|
obj.push(item.onControl(get(form, item.dataIndex), maFormObject))
|
|
}
|
|
})
|
|
}
|
|
obj.map((changItem) => {
|
|
columns.map((item, idx) => {
|
|
for (let name in changItem) {
|
|
if (name === item.dataIndex) {
|
|
columns[idx] = Object.assign(item, changItem[name] || {})
|
|
}
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
export const upperCaseFirst = (str) => {
|
|
if (isEmpty(str)) return ""
|
|
return str[0].toUpperCase() + str.substr(1)
|
|
}
|
|
|
|
export const toHump = (str) => {
|
|
let temp = str[0].toUpperCase()
|
|
let step = 1
|
|
while (str.indexOf("-") > -1) {
|
|
let index = str.indexOf("-")
|
|
temp += str.substring(step, index)
|
|
temp += str[index + 1].toUpperCase()
|
|
str = str.replace("-", "")
|
|
step = index + 1
|
|
}
|
|
temp += str.substring(step)
|
|
return temp
|
|
}
|
|
|
|
export const getComponentName = (formType) => {
|
|
if (containerItems.includes(formType)) {
|
|
return `Ma${toHump(formType)}`
|
|
}
|
|
if (pickerType.includes(formType)) {
|
|
return "MaFormPicker"
|
|
}
|
|
if (inputType.includes(formType)) {
|
|
return "MaFormInput"
|
|
}
|
|
return `MaForm${toHump(formType)}`
|
|
}
|
|
|
|
export const handleFlatteningColumns = (data, columns) => {
|
|
for (let key in data) {
|
|
const item = data[key]
|
|
if (containerItems.includes(item.formType)) {
|
|
switch (item.formType) {
|
|
case "tabs":
|
|
if (item.tabs) {
|
|
item.tabs.map((tab) => {
|
|
tab.formList && handleFlatteningColumns(tab.formList, columns)
|
|
})
|
|
}
|
|
break
|
|
case "card":
|
|
item.formList && handleFlatteningColumns(item.formList, columns)
|
|
break
|
|
case "grid-tailwind":
|
|
case "grid":
|
|
if (item.cols) {
|
|
item.cols.map((col) => {
|
|
col.formList && handleFlatteningColumns(col.formList, columns)
|
|
})
|
|
}
|
|
break
|
|
case "table":
|
|
if (item.rows) {
|
|
item.rows.map((row) => {
|
|
if (row.cols) {
|
|
row.cols.map((col) => {
|
|
col.formList && handleFlatteningColumns(col.formList, columns)
|
|
})
|
|
}
|
|
})
|
|
}
|
|
break
|
|
case "children-form":
|
|
item.formList.map((list) => (list.parentDataIndex = item.dataIndex))
|
|
item.formList && handleFlatteningColumns(item.formList, columns)
|
|
break
|
|
}
|
|
} else {
|
|
columns.push(item)
|
|
}
|
|
}
|
|
}
|
|
|
|
export const insertGlobalCssToHead = (cssCode) => {
|
|
const head = document.getElementsByTagName("head")[0]
|
|
const oldStyle = document.getElementById("mineadmin-global-css")
|
|
oldStyle && head.removeChild(oldStyle)
|
|
|
|
const newStyle = document.createElement("style")
|
|
newStyle.rel = "stylesheet"
|
|
newStyle.id = "mineadmin-global-css"
|
|
try {
|
|
newStyle.appendChild(document.createTextNode(cssCode))
|
|
} catch (ex) {
|
|
newStyle.styleSheet.cssText = cssCode
|
|
}
|
|
|
|
head.appendChild(newStyle)
|
|
}
|
|
|
|
export const insertGlobalFunctionsToHtml = (functionsCode) => {
|
|
const bodyEle = document.getElementsByTagName("body")[0]
|
|
const oldScriptEle = document.getElementById("mineadmin-global-functions")
|
|
oldScriptEle && bodyEle.removeChild(oldScriptEle)
|
|
|
|
const newScriptEle = document.createElement("script")
|
|
newScriptEle.id = "mineadmin-global-functions"
|
|
newScriptEle.type = "text/javascript"
|
|
newScriptEle.innerHTML = functionsCode
|
|
bodyEle.appendChild(newScriptEle)
|
|
}
|