1122
This commit is contained in:
1
cdTMP/src/components/ma-form/js/defaultArrayComponent.js
Normal file
1
cdTMP/src/components/ma-form/js/defaultArrayComponent.js
Normal file
@@ -0,0 +1 @@
|
||||
export default ["checkbox", "user-select", "children-form", "resource"]
|
||||
51
cdTMP/src/components/ma-form/js/defaultOptions.js
Normal file
51
cdTMP/src/components/ma-form/js/defaultOptions.js
Normal file
@@ -0,0 +1,51 @@
|
||||
export default {
|
||||
// 是否自动初始化表单并加载字典及联动远程数据
|
||||
init: true,
|
||||
// 表单加载数据中提示文案
|
||||
loadingText: "加载中...",
|
||||
// 表单样式class
|
||||
customClass: [],
|
||||
// 表单控件尺寸(全局) 'mini' | 'small' | 'medium' | 'large'
|
||||
size: "medium",
|
||||
// 标签的对齐方向
|
||||
labelAlign: "right",
|
||||
// horizontal 水平排列 vertical 垂直排列 inline 行内排列
|
||||
layout: "horizontal",
|
||||
// 表单是否禁用
|
||||
disabled: false,
|
||||
// 表单项验证规则整体配置,例子:{ title: [{ required: true, message: '请输入标题'}] }
|
||||
rules: [],
|
||||
// 是否显示按钮
|
||||
showButtons: true,
|
||||
|
||||
// 提交按钮图标
|
||||
submitIcon: "icon-send",
|
||||
// 提交按钮类型
|
||||
submitType: "primary",
|
||||
// 提交按钮状态
|
||||
submitStatus: "normal",
|
||||
// 提交按钮文案
|
||||
submitText: "提交",
|
||||
// 是否显示提交按钮
|
||||
submitShowBtn: true,
|
||||
|
||||
// 重置按钮图标
|
||||
resetIcon: "icon-refresh",
|
||||
// 重置按钮类型
|
||||
resetType: "secondary",
|
||||
// 重置按钮状态
|
||||
resetStatus: "normal",
|
||||
// 重置按钮文案
|
||||
resetText: "重置",
|
||||
// 是否显示重置按钮
|
||||
resetShowBtn: true,
|
||||
|
||||
// 表单标题文案
|
||||
formTitle: "未命名表单",
|
||||
// 是否显示表单标题
|
||||
showFormTitle: false,
|
||||
// 自定义标题样式css
|
||||
formTitleStyle: "",
|
||||
// 自定义标题样式class
|
||||
formTitleClass: []
|
||||
}
|
||||
50
cdTMP/src/components/ma-form/js/formItemMixin.js
Normal file
50
cdTMP/src/components/ma-form/js/formItemMixin.js
Normal file
@@ -0,0 +1,50 @@
|
||||
import { isString, isFunction } from "lodash"
|
||||
export const maEvent = {
|
||||
customeEvent: async (component, value, evName) => {
|
||||
if (component[evName]) {
|
||||
if (isFunction(component[evName])) {
|
||||
return await component[evName](value)
|
||||
}
|
||||
if (isString(component[evName])) {
|
||||
let customFn = new Function("value", component[evName])
|
||||
return await customFn.call(component, value)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
handleCommonEvent: (component, evName) => {
|
||||
if (component[evName]) {
|
||||
if (isFunction(component[evName])) {
|
||||
return component[evName]()
|
||||
}
|
||||
if (isString(component[evName])) {
|
||||
let customFn = new Function("value", component[evName])
|
||||
return customFn.call(component[evName])
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
handleInputEvent: (component, value) => {
|
||||
maEvent.customeEvent(component, value, "onInput")
|
||||
},
|
||||
|
||||
handleChangeEvent: (component, value) => {
|
||||
maEvent.customeEvent(component, value, "onChange")
|
||||
},
|
||||
|
||||
handleInputSearchEvent: (component, value) => {
|
||||
maEvent.customeEvent(component, value, "onInputSearch")
|
||||
},
|
||||
|
||||
handleTabClickEvent: (component, value) => {
|
||||
maEvent.customeEvent(component, value, "onTabClick")
|
||||
},
|
||||
|
||||
handleTabAddEvent: (component) => {
|
||||
maEvent.customeEvent(component, component?.tabs, "onTabAdd")
|
||||
},
|
||||
|
||||
handleTabDeleteEvent: (component, value) => {
|
||||
maEvent.customeEvent(component, { tabs: component?.tabs, value }, "onTabDelete")
|
||||
}
|
||||
}
|
||||
141
cdTMP/src/components/ma-form/js/networkRequest.js
Normal file
141
cdTMP/src/components/ma-form/js/networkRequest.js
Normal file
@@ -0,0 +1,141 @@
|
||||
import { isArray, isFunction, set } from "lodash"
|
||||
import { request } from "@/utils/request"
|
||||
import commonApi from "@/api/common"
|
||||
import tool from "@/utils/tool"
|
||||
|
||||
export const allowUseDictComponent = [
|
||||
"radio",
|
||||
"checkbox",
|
||||
"select",
|
||||
"transfer",
|
||||
"treeSelect",
|
||||
"tree-select",
|
||||
"cascader"
|
||||
]
|
||||
export const allowCoverComponent = ["radio", "checkbox", "select", "transfer", "cascader"]
|
||||
|
||||
export const requestDict = (url, method, params, data, timeout = 10 * 1000) =>
|
||||
request({ url, method, params, data, timeout })
|
||||
|
||||
export const handlerDictProps = (item, tmpArr) => {
|
||||
let data = []
|
||||
let tran = {}
|
||||
let colors = {}
|
||||
let labelName = "label"
|
||||
let valueName = "value"
|
||||
if (item.dict.name && (!item.dict.url || !item.dict.data)) {
|
||||
labelName = "title"
|
||||
valueName = "key"
|
||||
}
|
||||
if (allowCoverComponent.includes(item.formType)) {
|
||||
data = tmpArr.map((dicItem) => {
|
||||
const label = dicItem[(item.dict.props && item.dict.props.label) || labelName]
|
||||
let tmp = dicItem[(item.dict.props && item.dict.props.value) || valueName]
|
||||
let disabled =
|
||||
typeof dicItem["disabled"] == "undefined" ? false : dicItem["disabled"] === true ? true : false
|
||||
let indeterminate =
|
||||
typeof dicItem["indeterminate"] == "undefined"
|
||||
? false
|
||||
: dicItem["indeterminate"] === true
|
||||
? true
|
||||
: false
|
||||
let value
|
||||
if (item.dict.name || item.dict.data) value = tmp.toString()
|
||||
else if (tmp === "true") value = true
|
||||
else if (tmp === "false") value = false
|
||||
else value = tmp
|
||||
tran[value] = label
|
||||
colors[value] = (item.dict.tagColors && item.dict.tagColors[value]) || undefined
|
||||
return { label, value, disabled, indeterminate }
|
||||
})
|
||||
} else {
|
||||
data = tmpArr
|
||||
}
|
||||
data.tran = tran
|
||||
data.colors = colors
|
||||
return data
|
||||
}
|
||||
|
||||
export const loadDict = async (dictList, item) => {
|
||||
if (allowUseDictComponent.includes(item.formType) && item.dict) {
|
||||
if (item.dict.name) {
|
||||
const response = await commonApi.getDict(item.dict.name)
|
||||
if (response.data) {
|
||||
dictList[item.dataIndex] = handlerDictProps(item, response.data)
|
||||
}
|
||||
} else if (item.dict.url) {
|
||||
const dictData = tool.local.get("dictData")
|
||||
if (item.dict.cache && dictData[item.dataIndex]) {
|
||||
dictList[item.dataIndex] = dictData[item.dataIndex]
|
||||
} else {
|
||||
const response = await requestDict(
|
||||
item.dict.url,
|
||||
item.dict.method || "GET",
|
||||
item.dict.params || {},
|
||||
item.dict.body || {}
|
||||
)
|
||||
if (response.data) {
|
||||
dictList[item.dataIndex] = handlerDictProps(item, response.data)
|
||||
if (item.dict.cache) {
|
||||
dictData[item.dataIndex] = dictList[item.dataIndex]
|
||||
tool.local.set("dictData", dictData)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (item.dict.data) {
|
||||
if (isArray(item.dict.data)) {
|
||||
dictList[item.dataIndex] = handlerDictProps(item, item.dict.data)
|
||||
} else if (isFunction(item.dict.data)) {
|
||||
const response = await item.dict.data()
|
||||
dictList[item.dataIndex] = handlerDictProps(item, response)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const requestCascaderData = async (val, dict, dictList, name) => {
|
||||
if (dict && dict.url) {
|
||||
let response
|
||||
if (dict && dict.url.indexOf("{{key}}") > 0) {
|
||||
response = await requestDict(
|
||||
dict.url.replace("{{key}}", val),
|
||||
dict.method || "GET",
|
||||
dict.params || {},
|
||||
dict.data || {}
|
||||
)
|
||||
} else {
|
||||
let temp = { key: val }
|
||||
const params = Object.assign(dict.params || {}, temp)
|
||||
const data = Object.assign(dict.data || {}, temp)
|
||||
response = await requestDict(dict.url, dict.method || "GET", params || {}, data || {})
|
||||
}
|
||||
if (response.data && response.code === 200) {
|
||||
dictList[name] = response.data.map((dicItem) => {
|
||||
return {
|
||||
label: dicItem[(dict.props && dict.props.label) || "label"],
|
||||
value: dicItem[(dict.props && dict.props.value) || "value"],
|
||||
disabled:
|
||||
typeof dicItem["disabled"] == "undefined" ? false : dicItem["disabled"] === true ? true : false,
|
||||
indeterminate:
|
||||
typeof dicItem["indeterminate"] == "undefined"
|
||||
? false
|
||||
: dicItem["indeterminate"] === true
|
||||
? true
|
||||
: false
|
||||
}
|
||||
})
|
||||
} else {
|
||||
console.error(response)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const handlerCascader = async (val, column, columns, dictList, formModel, clearData = true) => {
|
||||
if (column.cascaderItem && isArray(column.cascaderItem)) {
|
||||
column.cascaderItem.map(async (name) => {
|
||||
const dict = columns.find((col) => col.dataIndex === name && col.dict).dict
|
||||
clearData && set(formModel, name, undefined)
|
||||
requestCascaderData(val, dict, dictList, name)
|
||||
})
|
||||
}
|
||||
}
|
||||
104
cdTMP/src/components/ma-form/js/utils.js
Normal file
104
cdTMP/src/components/ma-form/js/utils.js
Normal file
@@ -0,0 +1,104 @@
|
||||
import { isEmpty, isFunction, get, set } from "lodash"
|
||||
|
||||
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) => {
|
||||
const obj = []
|
||||
for (let name in form) {
|
||||
columns.map((item) => {
|
||||
if (item.dataIndex === name && item.control && isFunction(item.control)) {
|
||||
obj.push(item.control(get(form, name), form))
|
||||
}
|
||||
})
|
||||
}
|
||||
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, isChildrenForm = undefined) => {
|
||||
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 && handleFlatteningColumns(item.formList, columns, item.dataIndex, true)
|
||||
// break
|
||||
}
|
||||
} else {
|
||||
// if (isChildrenForm) {
|
||||
// item['isChildrenForm'] = true
|
||||
// }
|
||||
columns.push(item)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user