@tmagic/form 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/style.css +161 -0
  2. package/dist/tmagic-form.es.js +3749 -0
  3. package/dist/tmagic-form.es.js.map +1 -0
  4. package/dist/tmagic-form.umd.js +3790 -0
  5. package/dist/tmagic-form.umd.js.map +1 -0
  6. package/dist/types/src/Form.vue.d.ts +304 -0
  7. package/dist/types/src/FormDialog.vue.d.ts +641 -0
  8. package/dist/types/src/containers/Container.vue.d.ts +69 -0
  9. package/dist/types/src/containers/Fieldset.vue.d.ts +56 -0
  10. package/dist/types/src/containers/GroupList.vue.d.ts +56 -0
  11. package/dist/types/src/containers/GroupListItem.vue.d.ts +72 -0
  12. package/dist/types/src/containers/Panel.vue.d.ts +41 -0
  13. package/dist/types/src/containers/Row.vue.d.ts +42 -0
  14. package/dist/types/src/containers/Step.vue.d.ts +45 -0
  15. package/dist/types/src/containers/Table.vue.d.ts +1401 -0
  16. package/dist/types/src/containers/Tabs.vue.d.ts +45 -0
  17. package/dist/types/src/fields/Cascader.vue.d.ts +1748 -0
  18. package/dist/types/src/fields/Checkbox.vue.d.ts +59 -0
  19. package/dist/types/src/fields/CheckboxGroup.vue.d.ts +56 -0
  20. package/dist/types/src/fields/Date.vue.d.ts +58 -0
  21. package/dist/types/src/fields/DateTime.vue.d.ts +57 -0
  22. package/dist/types/src/fields/Daterange.vue.d.ts +57 -0
  23. package/dist/types/src/fields/Display.vue.d.ts +3 -0
  24. package/dist/types/src/fields/DynamicField.vue.d.ts +76 -0
  25. package/dist/types/src/fields/Hidden.vue.d.ts +3 -0
  26. package/dist/types/src/fields/Link.vue.d.ts +1365 -0
  27. package/dist/types/src/fields/Number.vue.d.ts +59 -0
  28. package/dist/types/src/fields/RadioGroup.vue.d.ts +55 -0
  29. package/dist/types/src/fields/Select.vue.d.ts +975 -0
  30. package/dist/types/src/fields/Switch.vue.d.ts +59 -0
  31. package/dist/types/src/fields/Text.vue.d.ts +61 -0
  32. package/dist/types/src/fields/Textarea.vue.d.ts +56 -0
  33. package/dist/types/src/fields/Time.vue.d.ts +54 -0
  34. package/dist/types/src/index.d.ts +36 -0
  35. package/dist/types/src/schema.d.ts +495 -0
  36. package/dist/types/src/shims-vue.d.ts +6 -0
  37. package/dist/types/src/utils/config.d.ts +3 -0
  38. package/dist/types/src/utils/fieldProps.d.ts +21 -0
  39. package/dist/types/src/utils/form.d.ts +8 -0
  40. package/dist/types/src/utils/useAddField.d.ts +1 -0
  41. package/dist/types/src/vite-env.d.ts +1 -0
  42. package/package.json +51 -0
  43. package/src/Form.vue +188 -0
  44. package/src/FormDialog.vue +163 -0
  45. package/src/containers/Container.vue +263 -0
  46. package/src/containers/Fieldset.vue +138 -0
  47. package/src/containers/GroupList.vue +152 -0
  48. package/src/containers/GroupListItem.vue +159 -0
  49. package/src/containers/Panel.vue +106 -0
  50. package/src/containers/Row.vue +68 -0
  51. package/src/containers/Step.vue +82 -0
  52. package/src/containers/Table.vue +624 -0
  53. package/src/containers/Tabs.vue +176 -0
  54. package/src/fields/Cascader.vue +147 -0
  55. package/src/fields/Checkbox.vue +67 -0
  56. package/src/fields/CheckboxGroup.vue +44 -0
  57. package/src/fields/ColorPicker.vue +38 -0
  58. package/src/fields/Date.vue +51 -0
  59. package/src/fields/DateTime.vue +59 -0
  60. package/src/fields/Daterange.vue +75 -0
  61. package/src/fields/Display.vue +34 -0
  62. package/src/fields/DynamicField.vue +109 -0
  63. package/src/fields/Hidden.vue +29 -0
  64. package/src/fields/Link.vue +112 -0
  65. package/src/fields/Number.vue +53 -0
  66. package/src/fields/RadioGroup.vue +33 -0
  67. package/src/fields/Select.vue +393 -0
  68. package/src/fields/Switch.vue +65 -0
  69. package/src/fields/Text.vue +134 -0
  70. package/src/fields/Textarea.vue +62 -0
  71. package/src/fields/Time.vue +48 -0
  72. package/src/index.ts +127 -0
  73. package/src/schema.ts +638 -0
  74. package/src/shims-vue.d.ts +6 -0
  75. package/src/theme/date-time.scss +7 -0
  76. package/src/theme/fieldset.scss +24 -0
  77. package/src/theme/form-dialog.scss +13 -0
  78. package/src/theme/form.scss +30 -0
  79. package/src/theme/group-list.scss +23 -0
  80. package/src/theme/index.scss +9 -0
  81. package/src/theme/link.scss +3 -0
  82. package/src/theme/panel.scss +18 -0
  83. package/src/theme/select.scss +3 -0
  84. package/src/theme/table.scss +69 -0
  85. package/src/theme/tabs.scss +25 -0
  86. package/src/utils/config.ts +27 -0
  87. package/src/utils/containerProps.ts +50 -0
  88. package/src/utils/createForm.ts +25 -0
  89. package/src/utils/fieldProps.ts +39 -0
  90. package/src/utils/form.ts +266 -0
  91. package/src/utils/useAddField.ts +40 -0
  92. package/src/vite-env.d.ts +1 -0
  93. package/tsconfig.json +9 -0
  94. package/vite.config.ts +27 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tmagic-form.umd.js","sources":["../src/utils/form.ts","../plugin-vue:export-helper","../src/containers/Container.vue","../src/containers/Fieldset.vue","../src/containers/GroupListItem.vue","../src/containers/GroupList.vue","../src/containers/Panel.vue","../src/containers/Row.vue","../src/containers/Step.vue","../src/containers/Table.vue","../src/containers/Tabs.vue","../src/utils/config.ts","../src/utils/fieldProps.ts","../src/utils/useAddField.ts","../src/fields/Cascader.vue","../src/fields/Checkbox.vue","../src/fields/CheckboxGroup.vue","../src/fields/ColorPicker.vue","../src/fields/Date.vue","../src/fields/Daterange.vue","../src/fields/DateTime.vue","../src/fields/Display.vue","../src/fields/DynamicField.vue","../src/fields/Hidden.vue","../src/fields/Link.vue","../src/fields/Number.vue","../src/fields/RadioGroup.vue","../src/fields/Select.vue","../src/fields/Switch.vue","../src/fields/Text.vue","../src/fields/Textarea.vue","../src/fields/Time.vue","../src/Form.vue","../src/FormDialog.vue","../src/index.ts"],"sourcesContent":["/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-param-reassign */\nimport { toRaw } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport {\n ChildConfig,\n ContainerCommonConfig,\n DaterangeConfig,\n FormConfig,\n FormState,\n FormValue,\n HtmlField,\n Rule,\n TabPaneConfig,\n TypeFunction,\n} from '../schema';\n\ninterface DefaultItem {\n defaultValue: any;\n type: string;\n filter: string;\n multiple: boolean;\n}\n\nconst isTableSelect = (type?: string | TypeFunction) =>\n typeof type === 'string' && ['table-select', 'tableSelect'].includes(type);\n\nconst asyncLoadConfig = (value: FormValue, initValue: FormValue, { asyncLoad, name, type }: HtmlField) => {\n // 富文本配置了异步加载\n if (type === 'html' && typeof asyncLoad === 'object' && typeof name !== 'undefined') {\n asyncLoad.name = name;\n value.asyncLoad = typeof initValue.asyncLoad === 'object' ? initValue.asyncLoad : asyncLoad;\n }\n};\n\nconst isMultipleValue = (type?: string | TypeFunction) =>\n typeof type === 'string' &&\n [\n 'checkbox-group',\n 'checkboxGroup',\n 'table',\n 'cascader',\n 'group-list',\n 'groupList',\n 'dynamic-tab',\n 'dynamicTab',\n ].includes(type);\n\nconst initItemsValue = (\n mForm: FormState | undefined,\n value: FormValue,\n initValue: FormValue,\n { items, name, extensible }: any,\n) => {\n if (Array.isArray(initValue[name])) {\n value[name] = initValue[name].map((v: any) => init(mForm, items, v));\n } else {\n value[name] = init(mForm, items, initValue[name], value[name]);\n if (extensible) {\n value[name] = Object.assign({}, initValue[name], value[name]);\n }\n }\n};\n\nconst setValue = (mForm: FormState | undefined, value: FormValue, initValue: FormValue, item: any) => {\n const { items, name, type, checkbox } = item;\n // 值是数组, 有可能也有items配置,所以不能放到getDefaultValue里赋值\n if (isMultipleValue(type)) {\n value[name] = initValue[name] || [];\n }\n\n // 有子项继续递归,没有的话有初始值用初始值,没有初始值用默认值\n if (items) {\n initItemsValue(mForm, value, initValue, item);\n } else {\n value[name] = getDefaultValue(mForm, item as DefaultItem);\n }\n\n // 如果fieldset配置checkbox,checkbox的值保存在value中\n if (type === 'fieldset' && checkbox) {\n if (typeof value[name] === 'object') {\n value[name].value = typeof initValue[name] === 'object' ? initValue[name].value || 0 : 0;\n }\n }\n};\n\nconst initValueItem = function (\n mForm: FormState | undefined,\n item: ChildConfig | TabPaneConfig,\n initValue: FormValue,\n value: FormValue,\n) {\n const { items } = item as ContainerCommonConfig;\n const { names } = item as DaterangeConfig;\n const { type, name } = item as ChildConfig;\n\n if (isTableSelect(type) && name) {\n value[name] = initValue[name] || '';\n return value;\n }\n\n asyncLoadConfig(value, initValue, item as HtmlField);\n\n // 这种情况比较多,提前结束\n if (name && !items && typeof initValue[name] !== 'undefined') {\n if (typeof value[name] === 'undefined') {\n value[name] = typeof initValue[name] === 'object' ? cloneDeep(initValue[name]) : initValue[name];\n }\n\n return value;\n }\n\n if (names) {\n return names.forEach((n: string) => (value[n] = initValue[n] || ''));\n }\n\n if (!name) {\n // 没有配置name,直接跳过\n return init(mForm, items, initValue, value);\n }\n\n setValue(mForm, value, initValue, item);\n\n return value;\n};\n\nconst init = function (\n mForm: FormState | undefined,\n config: FormConfig | TabPaneConfig[] = [],\n initValue: FormValue = {},\n value: FormValue = {},\n) {\n if (Array.isArray(config)) {\n config.forEach((item: ChildConfig | TabPaneConfig) => {\n initValueItem(mForm, item, initValue, value);\n });\n }\n\n return value;\n};\n\nconst getDefaultValue = function (mForm: FormState | undefined, { defaultValue, type, filter, multiple }: DefaultItem) {\n if (typeof defaultValue === 'function') {\n return defaultValue(mForm);\n }\n\n // 如果直接设置为undefined,在解析成js对象时会丢失这个配置,所以用'undefined'代替\n if (defaultValue === 'undefined') {\n return undefined;\n }\n\n if (typeof defaultValue !== 'undefined') {\n return defaultValue;\n }\n\n if (type === 'number' || filter === 'number') {\n return 0;\n }\n\n if (['switch', 'checkbox'].includes(type)) {\n return false;\n }\n\n if (multiple) {\n return [];\n }\n\n return '';\n};\n\nexport const filterFunction = (mForm: FormState | undefined, config: any, props: any) => {\n if (typeof config !== 'function') {\n return config;\n }\n\n return config(mForm, {\n values: mForm?.initValues || {},\n model: props.model,\n parent: mForm?.parentValues || {},\n formValue: mForm?.values || props.model,\n prop: props.prop,\n });\n};\n\nexport const display = function (mForm: FormState | undefined, config: any, props: any) {\n if (typeof config === 'function') {\n return filterFunction(mForm, config, props);\n }\n\n if (config === false) {\n return false;\n }\n\n return true;\n};\n\nexport const getRules = function (mForm: FormState | undefined, rules: Rule[] | Rule = [], props: any) {\n rules = cloneDeep(rules);\n\n if (typeof rules === 'object' && !Array.isArray(rules)) {\n rules = [rules];\n }\n\n return rules.map((item) => {\n if (typeof item.validator === 'function') {\n const fnc = item.validator;\n\n (item as any).validator = (rule: any, value: any, callback: Function, source: any, options: any) =>\n fnc(\n {\n rule,\n value,\n callback,\n source,\n options,\n },\n {\n values: mForm?.initValues || {},\n model: props.model,\n parent: mForm?.parentValues || {},\n formValue: mForm?.values || props.model,\n prop: props.prop,\n },\n mForm,\n );\n }\n return item;\n });\n};\n\nexport const initValue = async (\n mForm: FormState | undefined,\n { initValues, config }: { initValues: FormValue; config: FormConfig },\n) => {\n if (!Array.isArray(config)) throw new Error('config应该为数组');\n\n let valuesTmp = init(mForm, config, toRaw(initValues), {});\n\n const [firstForm] = config as [ContainerCommonConfig];\n if (firstForm && typeof firstForm.onInitValue === 'function') {\n valuesTmp = await firstForm.onInitValue(mForm, {\n formValue: valuesTmp,\n initValue: initValues,\n });\n }\n\n return valuesTmp || {};\n};\n","\nexport default (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n}\n","<template>\n <div v-if=\"config\" :style=\"config.tip ? 'display: flex' : ''\" :class=\"config.className\" class=\"m-form-container\">\n <m-fields-hidden\n v-if=\"type === 'hidden'\"\n :model=\"model\"\n :config=\"config\"\n :name=\"config.name\"\n :disabled=\"disabled\"\n :prop=\"itemProp\"\n ></m-fields-hidden>\n\n <component\n v-else-if=\"items && !config.text && type && display\"\n :key=\"key(config)\"\n :size=\"size\"\n :is=\"tagName\"\n :model=\"model\"\n :config=\"config\"\n :name=\"name\"\n :prop=\"itemProp\"\n :step-active=\"stepActive\"\n :expand-more=\"expand\"\n :label-width=\"config.labelWidth || labelWidth\"\n @change=\"onChangeHandler\"\n ></component>\n\n <template v-else-if=\"type && display\">\n <el-form-item\n :style=\"config.tip ? 'flex: 1' : ''\"\n :prop=\"itemProp\"\n :label-width=\"config.text ? config.labelWidth || labelWidth : '0'\"\n :rules=\"rule\"\n >\n <template #label><span v-html=\"type === 'checkbox' ? '' : config.text\"></span></template>\n <el-tooltip v-if=\"tooltip\">\n <component\n :key=\"key(config)\"\n :size=\"size\"\n :is=\"tagName\"\n :model=\"model\"\n :config=\"config\"\n :name=\"name\"\n :disabled=\"disabled\"\n :prop=\"itemProp\"\n @change=\"onChangeHandler\"\n ></component>\n <template #content>\n <div v-html=\"tooltip\"></div>\n </template>\n </el-tooltip>\n\n <component\n v-else\n :key=\"key(config)\"\n :size=\"size\"\n :is=\"tagName\"\n :model=\"model\"\n :config=\"config\"\n :name=\"name\"\n :disabled=\"disabled\"\n :prop=\"itemProp\"\n @change=\"onChangeHandler\"\n ></component>\n\n <div v-if=\"extra\" v-html=\"extra\" class=\"m-form-tip\"></div>\n </el-form-item>\n\n <el-tooltip v-if=\"config.tip\" placement=\"top\" style=\"line-height: 40px; margin-left: 5px\">\n <i class=\"el-icon-warning\"></i>\n <template #content>\n <div v-html=\"config.tip\"></div>\n </template>\n </el-tooltip>\n </template>\n\n <template v-else-if=\"items && display\">\n <template v-if=\"name || name === 0 ? model[name] : model\">\n <m-form-container\n v-for=\"item in items\"\n :key=\"key(item)\"\n :model=\"name || name === 0 ? model[name] : model\"\n :config=\"item\"\n :size=\"size\"\n :step-active=\"stepActive\"\n :expand-more=\"expand\"\n :label-width=\"config.labelWidth || labelWidth\"\n :prop=\"itemProp\"\n @change=\"onChangeHandler\"\n ></m-form-container>\n </template>\n </template>\n\n <div style=\"text-align: center\" v-if=\"config.expand && type !== 'fieldset'\">\n <el-button type=\"text\" @click=\"expandHandler\">{{ expand ? '收起配置' : '展开更多配置' }}</el-button>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, PropType, ref, resolveComponent, watchEffect } from 'vue';\n\nimport { ChildConfig, ContainerCommonConfig, FormState, FormValue } from '../schema';\nimport { display as displayFunction, filterFunction, getRules } from '../utils/form';\n\nexport default defineComponent({\n name: 'm-form-container',\n\n props: {\n labelWidth: String,\n expandMore: Boolean,\n\n model: {\n type: [Object, Array] as PropType<FormValue>,\n required: true,\n },\n\n config: {\n type: Object as PropType<ChildConfig>,\n required: true,\n },\n\n prop: {\n type: String,\n default: () => '',\n },\n\n stepActive: {\n type: [String, Number],\n },\n\n size: {\n type: String,\n default: 'small',\n },\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n const mForm = inject<FormState | undefined>('mForm');\n\n const expand = ref(false);\n\n const name = computed(() => props.config.name || '');\n\n const items = computed(() => (props.config as ContainerCommonConfig).items);\n\n const itemProp = computed(() => (name.value ? `${props.prop}${props.prop ? '.' : ''}${name.value}` : props.prop));\n\n const tagName = computed(() => {\n const component = resolveComponent(`m-${items.value ? 'form' : 'fields'}-${type.value}`);\n if (typeof component !== 'string') return component;\n return 'm-fields-text';\n });\n\n const disabled = computed(() => filterFunction(mForm, props.config.disabled, props));\n\n const tooltip = computed(() => filterFunction(mForm, props.config.tooltip, props));\n\n const extra = computed(() => filterFunction(mForm, props.config.extra, props));\n\n const rule = computed(() => getRules(mForm, props.config.rules, props));\n\n const type = computed((): string => {\n let { type } = props.config;\n if (typeof type === 'function') {\n type = type(mForm, {\n model: props.model,\n });\n }\n if (type === 'form') return '';\n return type?.replace(/([A-Z])/g, '-$1').toLowerCase() || (items.value ? '' : 'text');\n });\n\n const display = computed((): boolean => {\n if (props.config.display === 'expand') {\n return expand.value;\n }\n\n return displayFunction(mForm, props.config.display, props);\n });\n\n watchEffect(() => {\n expand.value = props.expandMore;\n });\n\n const expandHandler = () => (expand.value = !expand.value);\n\n const key = (config: any) => config[mForm?.keyProps];\n\n const filterHandler = (filter: any, value: FormValue | number | string) => {\n if (typeof filter === 'function') {\n return filter(mForm, value, {\n model: props.model,\n values: mForm?.initValues,\n formValue: mForm?.values,\n prop: itemProp.value,\n });\n }\n\n if (filter === 'number') {\n return +value;\n }\n\n return value;\n };\n\n const changeHandler = (onChange: any, value: FormValue | number | string) => {\n if (typeof onChange === 'function') {\n return onChange(mForm, value, {\n model: props.model,\n values: mForm?.initValues,\n formValue: mForm?.values,\n prop: itemProp.value,\n });\n }\n };\n\n const trimHandler = (trim: any, value: FormValue | number | string) => {\n if (typeof value === 'string' && trim) {\n return value.replace(/^\\s*/, '').replace(/\\s*$/, '');\n }\n };\n\n const onChangeHandler = async function (v: FormValue, key?: string) {\n const { filter, onChange, trim, name, dynamicKey } = props.config as any;\n let value: FormValue | number | string = filterHandler(filter, v);\n\n value = (await changeHandler(onChange, value)) ?? value;\n value = trimHandler(trim, value) ?? value;\n\n // field内容下包含field-link时,model===value, 这里避免循环引用\n if ((name || name === 0) && props.model !== value && (v !== value || props.model[name] !== value)) {\n // eslint-disable-next-line vue/no-mutating-props\n props.model[name] = value;\n }\n // 动态表单类型,根据value和key参数,直接修改model\n if (key !== undefined && dynamicKey) {\n // eslint-disable-next-line vue/no-mutating-props\n props.model[key] = value;\n }\n emit('change', props.model);\n };\n\n return {\n expand,\n name,\n type,\n disabled,\n itemProp,\n items,\n display,\n tagName,\n rule,\n tooltip,\n extra,\n key,\n onChangeHandler,\n expandHandler,\n };\n },\n});\n</script>\n","<template>\n <fieldset\n v-if=\"name ? model[name] : model\"\n class=\"m-fieldset\"\n :style=\"show ? 'padding: 15px 15px 0 5px;' : 'border: 0'\"\n >\n <el-checkbox\n v-if=\"!show && name\"\n v-model=\"model[name].value\"\n :prop=\"`${prop}${prop ? '.' : ''}${config.name}.value`\"\n :true-label=\"1\"\n :false-label=\"0\"\n @change=\"change\"\n ><span v-html=\"config.legend\"></span><span v-if=\"config.extra\" v-html=\"config.extra\" class=\"m-form-tip\"></span\n ></el-checkbox>\n <legend v-else-if=\"config.checkbox && name\">\n <el-checkbox\n v-model=\"model[name].value\"\n :prop=\"`${prop}${prop ? '.' : ''}${config.name}.value`\"\n :true-label=\"1\"\n :false-label=\"0\"\n @change=\"change\"\n ><span v-html=\"config.legend\"></span><span v-if=\"config.extra\" v-html=\"config.extra\" class=\"m-form-tip\"></span\n ></el-checkbox>\n </legend>\n <legend v-else>\n <span v-html=\"config.legend\"></span>\n <span v-if=\"config.extra\" v-html=\"config.extra\" class=\"m-form-tip\"></span>\n </legend>\n\n <div v-if=\"config.schematic && show\" style=\"display: flex\">\n <div style=\"flex: 1\">\n <m-form-container\n v-for=\"(item, index) in config.items\"\n :key=\"key(item, index)\"\n :model=\"name ? model[name] : model\"\n :rules=\"name ? rules[name] : []\"\n :config=\"item\"\n :prop=\"prop\"\n :labelWidth=\"lWidth\"\n :size=\"size\"\n @change=\"change\"\n ></m-form-container>\n </div>\n\n <img class=\"m-form-schematic\" :src=\"config.schematic\" />\n </div>\n\n <template v-else-if=\"show\">\n <m-form-container\n v-for=\"(item, index) in config.items\"\n :key=\"key(item, index)\"\n :model=\"name ? model[name] : model\"\n :rules=\"name ? rules[name] : []\"\n :config=\"item\"\n :prop=\"prop\"\n :labelWidth=\"lWidth\"\n :size=\"size\"\n @change=\"change\"\n ></m-form-container>\n </template>\n </fieldset>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, PropType } from 'vue';\n\nimport { FieldsetConfig, FormState } from '../schema';\n\nexport default defineComponent({\n name: 'm-form-fieldset',\n\n props: {\n labelWidth: String,\n\n model: {\n type: Object,\n default: () => ({}),\n },\n\n config: {\n type: Object as PropType<FieldsetConfig>,\n default: () => ({}),\n },\n\n rules: {\n type: Object,\n default: () => ({}),\n },\n\n prop: {\n type: String,\n default: () => '',\n },\n\n size: String,\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n const mForm = inject<FormState | undefined>('mForm');\n\n const name = computed(() => props.config.name || '');\n\n const show = computed(() => {\n if (props.config.expand && name.value) {\n return props.model[name.value]?.value;\n }\n return true;\n });\n\n const lWidth = computed(() => {\n if (props.config.items) {\n return props.config.labelWidth || props.labelWidth;\n }\n return props.config.labelWidth || props.labelWidth || (props.config.text ? null : '0');\n });\n\n const change = () => {\n emit('change', props.model);\n };\n\n const key = (item: any, index: number) => item[mForm?.keyProp || '__key'] ?? index;\n\n return {\n show,\n name,\n mForm,\n lWidth,\n key,\n change,\n };\n },\n});\n</script>\n\n<style lang=\"scss\"></style>\n","<template>\n <div class=\"m-fields-group-list-item\">\n <div>\n <el-icon style=\"margin-right: 7px\" @click=\"expandHandler\"\n ><caret-bottom v-if=\"expand\" /><caret-right v-else\n /></el-icon>\n\n <el-button type=\"text\" @click=\"expandHandler\">{{ title }}</el-button>\n\n <el-button\n v-show=\"showDelete(parseInt(String(index)))\"\n type=\"text\"\n :icon=\"Delete\"\n style=\"color: #f56c6c\"\n @click=\"removeHandler\"\n ></el-button>\n\n <template v-if=\"movable()\">\n <el-button v-show=\"index !== 0\" type=\"text\" size=\"small\" @click=\"changeOrder(-1)\"\n >上移<el-icon><CaretRight /></el-icon\n ></el-button>\n <el-button v-show=\"index !== length - 1\" type=\"text\" size=\"small\" @click=\"changeOrder(1)\"\n >下移<el-icon><CaretBottom /></el-icon\n ></el-button>\n </template>\n\n <span v-if=\"itemExtra\" v-html=\"itemExtra\" class=\"m-form-tip\"></span>\n </div>\n\n <m-form-container\n v-if=\"expand\"\n :config=\"rowConfig\"\n :model=\"model\"\n :labelWidth=\"labelWidth\"\n :prop=\"`${prop}${prop ? '.' : ''}${String(index)}`\"\n :size=\"size\"\n @change=\"changeHandler\"\n ></m-form-container>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, PropType, ref, watchEffect } from 'vue';\nimport { CaretBottom, CaretRight, Delete } from '@element-plus/icons';\n\nimport { FormState, GroupListConfig } from '../schema';\nimport { filterFunction } from '../utils/form';\n\nexport default defineComponent({\n name: 'm-form-group-list-item',\n\n components: { CaretRight, CaretBottom },\n\n props: {\n labelWidth: String,\n\n model: {\n type: Object,\n default: () => ({}),\n },\n\n config: {\n type: Object as PropType<GroupListConfig>,\n default: () => ({}),\n },\n\n prop: String,\n\n size: String,\n\n index: {\n type: [Number, String, Symbol],\n default: 0,\n },\n\n groupModel: {\n type: Array,\n default: () => [],\n },\n },\n\n emits: ['swap-item', 'remove-item', 'change'],\n\n setup(props, { emit }) {\n const mForm = inject<FormState | undefined>('mForm');\n const expand = ref(false);\n\n watchEffect(() => {\n expand.value = !props.index;\n });\n\n const rowConfig = computed(() => ({\n type: 'row',\n span: props.config.span || 24,\n items: props.config.items,\n labelWidth: props.config.labelWidth,\n [mForm?.keyProp || '__key']: `${props.config[mForm?.keyProp || '__key']}${String(props.index)}`,\n }));\n\n const title = computed(() => {\n if (props.config.titleKey && props.model[props.config.titleKey]) {\n return props.model[props.config.titleKey];\n }\n\n return `组 ${String(props.index)}`;\n });\n\n const length = computed(() => props.groupModel?.length || 0);\n\n const itemExtra = computed(() => filterFunction(mForm, props.config.itemExtra, props));\n\n const removeHandler = () => emit('remove-item', props.index);\n\n const changeHandler = () => emit('change');\n\n const expandHandler = () => {\n expand.value = !expand.value;\n };\n\n // 希望支持单行可控制是否显示删除按钮,不会影响现有逻辑\n const showDelete = (index: number) => {\n const deleteFunc = props.config.delete;\n if (deleteFunc && typeof deleteFunc === 'function') {\n return deleteFunc(props.model, index, mForm?.values);\n }\n return true;\n };\n\n // 调换顺序\n const changeOrder = (offset = 0) => emit('swap-item', props.index, `${String(props.index)}${offset}`);\n\n const movable = () => {\n const { movable } = props.config;\n\n // 没有设置时,默认可移动\n if (movable === undefined) return true;\n if (typeof movable === 'function') {\n return movable(mForm, props.index || 0, props.model, props.groupModel);\n }\n return movable;\n };\n\n return {\n expand,\n expandHandler,\n title,\n showDelete,\n removeHandler,\n movable,\n changeOrder,\n itemExtra,\n rowConfig,\n changeHandler,\n length,\n Delete,\n };\n },\n});\n</script>\n","<template>\n <div class=\"m-fields-group-list\">\n <div v-if=\"config.extra\" v-html=\"config.extra\" style=\"color: rgba(0, 0, 0, 0.45)\"></div>\n <div v-if=\"!model[name] || !model[name].length\" class=\"el-table__empty-block\">\n <span class=\"el-table__empty-text\">暂无数据</span>\n </div>\n\n <m-fields-group-list-item\n v-else\n v-for=\"(item, index) in model[name]\"\n :key=\"index\"\n :model=\"item\"\n :config=\"config\"\n :prop=\"prop\"\n :index=\"index\"\n :label-width=\"labelWidth\"\n :size=\"size\"\n :group-model=\"model[name]\"\n @remove-item=\"removeHandler\"\n @swap-item=\"swapHandler\"\n @change=\"changeHandler\"\n ></m-fields-group-list-item>\n\n <el-button @click=\"addHandler\" size=\"small\" v-if=\"addable\">添加组</el-button>\n\n <el-button icon=\"el-icon-s-grid\" size=\"small\" @click=\"toggleMode\" v-if=\"config.enableToggleMode\"\n >切换为表格</el-button\n >\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, PropType } from 'vue';\n\nimport { FormState, GroupListConfig } from '../schema';\nimport { initValue } from '../utils/form';\n\nimport MFieldsGroupListItem from './GroupListItem.vue';\n\nexport default defineComponent({\n name: 'm-form-group-list',\n\n components: { MFieldsGroupListItem },\n\n props: {\n labelWidth: String,\n\n model: {\n type: Object,\n default: () => ({}),\n },\n\n config: {\n type: Object as PropType<GroupListConfig>,\n default: () => ({}),\n },\n\n prop: {\n type: String,\n default: '',\n },\n\n size: String,\n\n name: {\n type: String,\n default: '',\n },\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n const mForm = inject<FormState | undefined>('mForm');\n\n const addable = computed(() => {\n if (!props.name) return false;\n\n if (typeof props.config.addable === 'function') {\n return props.config.addable(mForm, {\n model: props.model[props.name],\n formValue: mForm?.values,\n });\n }\n\n return typeof props.config.addable === 'undefined' ? true : props.config.addable;\n });\n\n const changeHandler = () => {\n if (!props.name) return false;\n\n emit('change', props.model[props.name]);\n };\n\n const addHandler = async () => {\n if (!props.name) return false;\n\n let initValues = {};\n\n if (typeof props.config.defaultAdd === 'function') {\n initValues = await props.config.defaultAdd(mForm, {\n model: props.model[props.name],\n formValue: mForm?.values,\n });\n } else if (props.config.defaultAdd) {\n initValues = props.config.defaultAdd;\n }\n\n const groupValue = await initValue(mForm, {\n config: props.config.items,\n initValues,\n });\n\n props.model[props.name].push(groupValue);\n };\n\n const removeHandler = (index: number) => {\n if (!props.name) return false;\n\n props.model[props.name].splice(index, 1);\n changeHandler();\n };\n\n const swapHandler = (idx1: number, idx2: number) => {\n if (!props.name) return false;\n\n const [currRow] = props.model[props.name].splice(idx1, 1);\n props.model[props.name].splice(idx2, 0, currRow);\n changeHandler();\n };\n\n const toggleMode = () => {\n props.config.type = 'table';\n props.config.groupItems = props.config.items;\n props.config.items = (props.config.tableItems ||\n props.config.items.map((item: any) => ({\n ...item,\n label: item.label || item.text,\n text: null,\n }))) as any;\n };\n return {\n addable,\n toggleMode,\n removeHandler,\n swapHandler,\n changeHandler,\n addHandler,\n };\n },\n});\n</script>\n","<template>\n <el-card\n v-if=\"items && items.length\"\n class=\"box-card m-form-panel\"\n :body-style=\"{ display: expand ? 'block' : 'none' }\"\n >\n <template #header>\n <div class=\"clearfix\">\n <a href=\"javascript:\" style=\"width: 100%; display: block\" @click=\"expand = !expand\">\n <el-icon><caret-bottom v-if=\"expand\" /><caret-right v-else /></el-icon> {{ filter(config.title) }}\n <span v-if=\"config && config.extra\" v-html=\"config.extra\" class=\"m-form-tip\"></span>\n </a>\n </div>\n </template>\n\n <div>\n <slot></slot>\n\n <div v-if=\"config.schematic\" style=\"display: flex\">\n <div style=\"flex: 1\">\n <m-form-container\n v-for=\"(item, index) in items\"\n :key=\"item[mForm?.keyProp || '__key'] ?? index\"\n :config=\"item\"\n :model=\"name ? model[name] : model\"\n :prop=\"prop\"\n :size=\"size\"\n :label-width=\"config.labelWidth || labelWidth\"\n @change=\"changeHandler\"\n ></m-form-container>\n </div>\n\n <img class=\"m-form-schematic\" :src=\"config.schematic\" />\n </div>\n\n <template v-else>\n <m-form-container\n v-for=\"(item, index) in items\"\n :key=\"item[mForm?.keyProp || '__key'] ?? index\"\n :config=\"item\"\n :model=\"name ? model[name] : model\"\n :prop=\"prop\"\n :size=\"size\"\n :label-width=\"config.labelWidth || labelWidth\"\n @change=\"changeHandler\"\n ></m-form-container>\n </template>\n </div>\n </el-card>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, PropType, ref } from 'vue';\nimport { CaretBottom, CaretRight } from '@element-plus/icons';\n\nimport { FormState, PanelConfig } from '../schema';\nimport { filterFunction } from '../utils/form';\n\nexport default defineComponent({\n name: 'm-form-panel',\n\n components: { CaretBottom, CaretRight },\n\n props: {\n labelWidth: String,\n\n model: {\n type: Object,\n default: () => ({}),\n },\n\n config: {\n type: Object as PropType<PanelConfig>,\n default: () => ({}),\n },\n\n prop: String,\n\n size: String,\n\n name: String,\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n const mForm = inject<FormState | undefined>('mForm');\n\n const expand = ref(props.config.expand !== false);\n\n const items = computed(() => props.config.items);\n\n const filter = (config: any) => filterFunction(mForm, config, props);\n\n const changeHandler = () => emit('change', props.model);\n\n return {\n mForm,\n expand,\n items,\n filter,\n changeHandler,\n };\n },\n});\n</script>\n","<template>\n <el-row :gutter=\"10\">\n <el-col\n v-for=\"(col, index) in config.items\"\n :style=\"!display(col) || col.type === 'hidden' ? 'display: none' : ''\"\n :key=\"col[mForm?.keyProp || '__key'] ?? index\"\n :span=\"col.span || config.span || 24 / config.items.length\"\n >\n <m-form-container\n :model=\"name ? model[name] : model\"\n :config=\"col\"\n :prop=\"prop\"\n :label-width=\"config.labelWidth || labelWidth\"\n :expand-more=\"expandMore\"\n :size=\"size\"\n @change=\"changeHandler\"\n ></m-form-container>\n </el-col>\n </el-row>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject, PropType } from 'vue';\n\nimport { FormState, RowConfig } from '../schema';\nimport { display as displayFunction } from '../utils/form';\n\nexport default defineComponent({\n name: 'm-form-row',\n\n props: {\n labelWidth: String,\n expandMore: Boolean,\n\n model: {\n type: Object,\n default: () => ({}),\n },\n\n config: {\n type: Object as PropType<RowConfig>,\n default: () => ({}),\n },\n\n prop: String,\n\n name: String,\n\n size: String,\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n const mForm = inject<FormState | undefined>('mForm');\n\n const changeHandler = () => emit('change', props.name ? props.model[props.name] : props.model);\n\n return {\n mForm,\n display(config: any) {\n return displayFunction(mForm, config.display, props);\n },\n changeHandler,\n };\n },\n});\n</script>\n","<template>\n <div>\n <el-steps :active=\"active\" align-center :space=\"config.space\">\n <el-step\n v-for=\"(item, index) in config.items\"\n :key=\"item.__key\"\n :title=\"item.title\"\n :active=\"active\"\n @click=\"stepClick(index)\"\n ></el-step>\n </el-steps>\n\n <template v-for=\"(step, index) in config.items\">\n <template v-for=\"item in step.items\">\n <m-form-container\n v-if=\"item\"\n v-show=\"active - 1 === index\"\n :key=\"item[mForm?.keyProp || '__key']\"\n :config=\"item\"\n :model=\"step.name ? model[step.name] : model\"\n :prop=\"step.name\"\n :size=\"size\"\n :label-width=\"config.labelWidth || labelWidth\"\n @change=\"changeHandler\"\n ></m-form-container>\n </template>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject, PropType, ref, watchEffect } from 'vue';\n\nimport { FormState, StepConfig } from '../schema';\n\nexport default defineComponent({\n name: 'm-form-step',\n\n props: {\n model: {\n type: Object,\n default: () => ({}),\n },\n\n config: {\n type: Object as PropType<StepConfig>,\n default: () => ({}),\n },\n\n stepActive: {\n type: Number,\n default: () => 1,\n },\n\n size: String,\n\n labelWidth: String,\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n const mForm = inject<FormState | undefined>('mForm');\n const active = ref(1);\n\n watchEffect(() => {\n active.value = props.stepActive;\n });\n\n const stepClick = (index: number) => {\n active.value = index + 1;\n mForm?.$emit('update:stepActive', active.value);\n };\n\n const changeHandler = () => {\n emit('change', props.model);\n };\n\n return { mForm, active, stepClick, changeHandler };\n },\n});\n</script>\n","<template>\n <div ref=\"mTable\" class=\"m-fields-table\" :class=\"{ 'm-fields-table-item-extra': config.itemExtra }\">\n <span v-if=\"config.extra\" style=\"color: rgba(0, 0, 0, 0.45)\" v-html=\"config.extra\"></span>\n <div class=\"el-form-item__content\">\n <el-tooltip content=\"拖拽可排序\" placement=\"left-start\" :disabled=\"config.dropSort !== true\">\n <el-table\n v-if=\"model[modelName]\"\n ref=\"elTable\"\n style=\"width: 100%\"\n :data=\"model[modelName]\"\n :border=\"config.border\"\n :max-height=\"config.maxHeight\"\n :default-expand-all=\"true\"\n :key=\"updateKey\"\n @select=\"selectHandle\"\n @sort-change=\"sortChange\"\n >\n <el-table-column v-if=\"config.itemExtra\" :fixed=\"'left'\" width=\"30\" type=\"expand\">\n <template v-slot=\"scope\">\n <span v-html=\"itemExtra(config.itemExtra, scope.$index)\" class=\"m-form-tip\"></span>\n </template>\n </el-table-column>\n\n <el-table-column label=\"操作\" width=\"50\" :fixed=\"config.fixed === false ? undefined : 'left'\">\n <template v-slot=\"scope\">\n <el-button\n v-show=\"showDelete(scope.$index + 1 + pagecontext * pagesize - 1)\"\n style=\"color: #f56c6c\"\n type=\"text\"\n :icon=\"Delete\"\n @click=\"removeHandler(scope.$index + 1 + pagecontext * pagesize - 1)\"\n ></el-button>\n </template>\n </el-table-column>\n\n <el-table-column v-if=\"sort && model[modelName] && model[modelName].length > 1\" label=\"排序\" width=\"70\">\n <template v-slot=\"scope\">\n <el-tooltip\n content=\"点击上移,双击置顶\"\n placement=\"top\"\n v-if=\"scope.$index + 1 + pagecontext * pagesize - 1 !== 0\"\n >\n <el-button\n plain\n size=\"small\"\n :icon=\"ArrowUp\"\n type=\"text\"\n @click=\"upHandler(scope.$index + 1 + pagecontext * pagesize - 1)\"\n @dblclick=\"topHandler(scope.$index + 1 + pagecontext * pagesize - 1)\"\n ></el-button>\n </el-tooltip>\n <el-tooltip\n content=\"点击下移,双击置底\"\n placement=\"top\"\n v-if=\"scope.$index + 1 + pagecontext * pagesize - 1 !== model[modelName].length - 1\"\n >\n <el-button\n plain\n size=\"small\"\n :icon=\"ArrowDown\"\n type=\"text\"\n @click=\"downHandler(scope.$index + 1 + pagecontext * pagesize - 1)\"\n @dblclick=\"bottomHandler(scope.$index + 1 + pagecontext * pagesize - 1)\"\n ></el-button>\n </el-tooltip>\n </template>\n </el-table-column>\n\n <el-table-column\n v-if=\"selection\"\n align=\"center\"\n header-align=\"center\"\n type=\"selection\"\n width=\"45\"\n ></el-table-column>\n\n <el-table-column width=\"50\" label=\"序号\">\n <template v-slot=\"scope\">{{ scope.$index + 1 + pagecontext * pagesize }}</template>\n </el-table-column>\n\n <template v-for=\"(column, index) in config.items\">\n <el-table-column\n v-if=\"column.type !== 'hidden' && display(column.display)\"\n :prop=\"column.name\"\n :width=\"column.width\"\n :label=\"column.label\"\n :sortable=\"column.sortable\"\n :sort-orders=\"['ascending', 'descending']\"\n :key=\"column[mForm?.keyProp || '__key'] ?? index\"\n :class-name=\"config.dropSort === true ? 'el-table__column--dropable' : ''\"\n >\n <template #default=\"scope\">\n <m-form-container\n v-if=\"scope.$index > -1\"\n labelWidth=\"0\"\n :prop=\"getProp(scope.$index)\"\n :rules=\"column.rules\"\n :config=\"makeConfig(column)\"\n :model=\"scope.row\"\n :size=\"size\"\n @change=\"$emit('change', model[modelName])\"\n ></m-form-container>\n </template>\n </el-table-column>\n </template>\n </el-table>\n </el-tooltip>\n <slot></slot>\n <el-button v-if=\"addable\" size=\"small\" type=\"primary\" plain @click=\"newHandler()\">添加</el-button> &nbsp;\n <el-button icon=\"el-icon-s-grid\" size=\"small\" @click=\"toggleMode\" v-if=\"enableToggleMode && !isFullscreen\"\n >展开配置</el-button\n >\n <el-button icon=\"el-icon-s-grid\" size=\"small\" @click=\"toggleFullscreen\" v-if=\"config.enableFullscreen !== false\">\n {{ isFullscreen ? '退出全屏' : '全屏编辑' }}\n </el-button>\n <el-upload\n v-if=\"importable\"\n ref=\"excelBtn\"\n action=\"/noop\"\n :on-change=\"excelHandler\"\n :auto-upload=\"false\"\n style=\"display: inline-block\"\n >\n <el-button size=\"small\" type=\"success\" plain>导入EXCEL</el-button> </el-upload\n >&nbsp;\n <el-button v-if=\"importable\" size=\"small\" type=\"warning\" plain @click=\"clearHandler()\">清空</el-button>\n </div>\n\n <div class=\"bottom\" style=\"text-align: right\">\n <el-pagination\n layout=\"total, sizes, prev, pager, next, jumper\"\n :hide-on-single-page=\"model[modelName].length < pagesize\"\n :current-page=\"pagecontext + 1\"\n :page-sizes=\"[pagesize, 60, 120, 300]\"\n :page-size=\"pagesize\"\n :total=\"model[modelName].length\"\n @size-change=\"handleSizeChange\"\n @current-change=\"handleCurrentChange\"\n >\n </el-pagination>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\n/* eslint-disable no-param-reassign */\nimport { computed, defineComponent, inject, onMounted, PropType, ref, toRefs } from 'vue';\nimport { ArrowDown, ArrowUp, Delete } from '@element-plus/icons';\nimport { ElMessage, ElTable, ElUpload } from 'element-plus';\nimport { cloneDeep } from 'lodash-es';\nimport Sortable, { SortableEvent } from 'sortablejs';\n\nimport { asyncLoadJs, sleep } from '@tmagic/utils';\n\nimport { ColumnConfig, FormState, SortProp, TableConfig } from '../schema';\nimport { display, initValue } from '../utils/form';\n\nexport type UploadStatus = 'ready' | 'uploading' | 'success' | 'fail';\n\nexport interface ElFile extends File {\n uid: number;\n}\n\nexport type UploadFile = {\n name: string;\n percentage?: number;\n status: UploadStatus;\n size: number;\n response?: unknown;\n uid: number;\n url?: string;\n raw: ElFile;\n};\n\nlet loadedAMapJS = false; // 是否加载完js\nlet firstLoadingAMapJS = true; // 否是第一次请求\n\nexport default defineComponent({\n name: 'm-form-table',\n\n props: {\n name: {\n type: String,\n required: true,\n },\n\n model: {\n type: Object,\n required: true,\n default: () => ({}),\n },\n\n config: {\n type: Object as PropType<TableConfig>,\n required: true,\n default: () => ({}),\n },\n\n prop: {\n type: String,\n },\n\n labelWidth: {\n type: String,\n },\n\n sort: {\n type: Boolean,\n default: false,\n },\n\n sortKey: {\n type: String,\n default: '',\n },\n\n text: {\n type: String,\n },\n\n size: String,\n\n enableToggleMode: {\n type: Boolean,\n default: true,\n },\n },\n\n emits: ['change', 'select'],\n\n setup(props, { emit }) {\n let timer: NodeJS.Timeout | null = null;\n const mForm = inject<FormState | undefined>('mForm');\n\n const elTable = ref<InstanceType<typeof ElTable>>();\n const excelBtn = ref<InstanceType<typeof ElUpload>>();\n const mTable = ref<HTMLDivElement>();\n\n const pagesize = ref(10);\n const pagecontext = ref(0);\n const updateKey = ref(1);\n const isFullscreen = ref(false);\n\n const modelName = computed(() => props.name || props.config.name || '');\n\n const sortChange = ({ prop, order }: SortProp) => {\n if (order === 'ascending') {\n props.model[modelName.value] = props.model[modelName.value].sort((a: any, b: any) => a[prop] - b[prop]);\n } else if (order === 'descending') {\n props.model[modelName.value] = props.model[modelName.value].sort((a: any, b: any) => b[prop] - a[prop]);\n }\n };\n\n const foreUpdate = () => {\n updateKey.value += 1;\n setTimeout(() => rowDrop());\n };\n\n const swapArray = (index1: number, index2: number) => {\n [props.model[modelName.value][index1]] = props.model[modelName.value].splice(\n index2,\n 1,\n props.model[modelName.value][index1],\n );\n if (props.sortKey) {\n for (let i = props.model[modelName.value].length - 1, v = 0; i >= 0; i--, v++) {\n props.model[modelName.value][v][props.sortKey] = i;\n }\n }\n mForm?.$emit('field-change', props.prop, props.model[modelName.value]);\n };\n\n const rowDrop = () => {\n const tableEl = elTable.value?.$el;\n if (tableEl?.querySelectorAll('.el-table__body > tbody')) {\n // eslint-disable-next-line prefer-destructuring\n const el = tableEl.querySelectorAll('.el-table__body > tbody')[0];\n const sortable = Sortable.create(el, {\n onEnd: ({ newIndex, oldIndex }: SortableEvent) => {\n if (typeof newIndex === 'undefined') return;\n if (typeof oldIndex === 'undefined') return;\n swapArray(newIndex, oldIndex);\n emit('change', props.model[modelName.value]);\n foreUpdate();\n sortable.destroy();\n mForm?.$emit('field-change', props.prop, props.model[modelName.value]);\n sleep(1000).then(() => {\n const eltrs = tableEl.querySelectorAll('.el-table__body > tbody > tr');\n if (eltrs?.[newIndex]) {\n eltrs[newIndex].style.backgroundColor = 'rgba(243, 89, 59, 0.2)';\n sleep(1000).then(() => {\n eltrs[newIndex].style.backgroundColor = '';\n });\n }\n });\n },\n });\n }\n };\n\n const newHandler = async (row?: any) => {\n if (props.config.max && props.model[modelName.value].length >= props.config.max) {\n ElMessage.error(`最多新增配置不能超过${props.config.max}条`);\n return;\n }\n\n const columns = props.config.items;\n const enumValues = props.config.enum || [];\n let enumV = [];\n const { length } = props.model[modelName.value];\n const key = props.config.key || 'id';\n let inputs: any = {};\n\n if (enumValues.length) {\n if (length >= enumValues.length) {\n return;\n }\n enumV = enumValues.filter((item) => {\n let i = 0;\n for (; i < length; i++) {\n if (item[key] === props.model[modelName.value][i][key]) {\n break;\n }\n }\n return i === length;\n });\n\n if (enumV.length > 0) {\n // eslint-disable-next-line prefer-destructuring\n inputs = enumV[0];\n }\n } else if (Array.isArray(row)) {\n columns.forEach((column, index) => {\n column.name && (inputs[column.name] = row[index]);\n });\n } else {\n if (typeof props.config.defaultAdd === 'function') {\n inputs = await props.config.defaultAdd(mForm, {\n model: props.model[modelName.value],\n formValue: mForm?.values,\n });\n } else if (props.config.defaultAdd) {\n inputs = props.config.defaultAdd;\n }\n\n inputs = await initValue(mForm, {\n config: columns,\n initValues: inputs,\n });\n }\n\n if (props.sortKey && length) {\n inputs[props.sortKey] = props.model[modelName.value][length - 1][props.sortKey] - 1;\n }\n\n props.model[modelName.value].push(inputs);\n emit('change', props.model[modelName.value]);\n };\n\n if (!loadedAMapJS && firstLoadingAMapJS && !(globalThis as any).XLSX) {\n firstLoadingAMapJS = false; // 马上置为false 只让第一个created组件去请求js\n asyncLoadJs('https://cdn.bootcdn.net/ajax/libs/xlsx/0.17.0/xlsx.full.min.js')\n .then(() => {\n loadedAMapJS = true;\n })\n .catch(() => {\n firstLoadingAMapJS = true; // 出错置为true 下次进来还是能重新请求js\n });\n }\n\n onMounted(() => {\n if (props.config.defautSort) {\n sortChange(props.config.defautSort);\n }\n\n if (props.sort && props.sortKey) {\n props.model[modelName.value].sort((a: any, b: any) => b[props.sortKey] - a[props.sortKey]);\n }\n\n if (props.config.dropSort) {\n rowDrop();\n }\n });\n\n return {\n mForm,\n pagesize,\n pagecontext,\n foreUpdate,\n isFullscreen,\n elTable,\n mTable,\n excelBtn,\n modelName,\n updateKey,\n ArrowDown,\n ArrowUp,\n Delete,\n\n data: computed(() =>\n props.model[modelName.value].filter(\n (item: any, index: number) =>\n index >= pagecontext.value * pagesize.value && index + 1 <= (pagecontext.value + 1) * pagesize.value,\n ),\n ),\n addable: computed(() => {\n if (!props.model[modelName.value].length) {\n return true;\n }\n if (typeof props.config.addable === 'function') {\n return props.config.addable(mForm, {\n model: props.model[modelName.value],\n formValue: mForm?.values,\n prop: props.prop,\n });\n }\n return typeof props.config.addable === 'undefined' ? true : props.config.addable;\n }),\n selection: computed(() => {\n if (typeof props.config.selection === 'function') {\n return props.config.selection(mForm, { model: props.model[modelName.value] });\n }\n return props.config.selection;\n }),\n importable: computed(() => {\n if (typeof props.config.importable === 'function') {\n return props.config.importable(mForm, {\n formValue: mForm?.values,\n model: props.model[modelName.value],\n });\n }\n return typeof props.config.importable === 'undefined' ? false : props.config.importable;\n }),\n\n sortChange,\n\n display(fuc: any) {\n return display(mForm, fuc, props);\n },\n\n itemExtra(fuc: any, index: number) {\n if (typeof fuc === 'function') {\n return fuc(mForm, {\n values: mForm?.initValues,\n model: props.model,\n formValue: mForm ? mForm.values : props.model,\n prop: props.prop,\n index,\n });\n }\n\n return fuc;\n },\n\n newHandler,\n\n removeHandler(index: number) {\n props.model[modelName.value].splice(index, 1);\n emit('change', props.model[modelName.value]);\n },\n\n selectHandle(selection: any, row: any) {\n if (typeof props.config.selection === 'string' && props.config.selection === 'single') {\n elTable.value?.clearSelection();\n elTable.value?.toggleRowSelection(row, true);\n }\n emit('select', selection, row);\n if (typeof props.config.onSelect === 'function') {\n props.config.onSelect(mForm, { selection, row });\n }\n },\n\n toggleRowSelection(row: any, selected: boolean) {\n elTable.value?.toggleRowSelection.call(elTable.value, row, selected);\n },\n\n makeConfig(config: ColumnConfig) {\n const newConfig = cloneDeep(config);\n delete newConfig.display;\n return newConfig;\n },\n\n upHandler(index: number) {\n if (timer) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(() => {\n swapArray(index, index - 1);\n }, 300);\n },\n\n topHandler(index: number) {\n if (timer) {\n clearTimeout(timer);\n }\n\n // 首先判断当前元素需要上移几个位置,置底移动到数组的第一位\n const moveNum = index;\n\n // 循环出需要一个一个上移的次数\n for (let i = 0; i < moveNum; i++) {\n swapArray(index, index - 1);\n index -= 1;\n }\n },\n\n downHandler(index: number) {\n if (timer) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(() => {\n swapArray(index, index + 1);\n }, 300);\n },\n\n bottomHandler(index: number) {\n if (timer) {\n clearTimeout(timer);\n }\n\n // 首先判断当前元素需要上移几个位置,置底移动到数组的第一位\n const moveNum = props.model[modelName.value].length - 1 - index;\n\n // 循环出需要一个一个上移的次数\n for (let i = 0; i < moveNum; i++) {\n swapArray(index, index + 1);\n index += 1;\n }\n },\n\n // 希望支持单行可控制是否显示删除按钮,不会影响现有逻辑\n showDelete(index: number) {\n const deleteFunc = props.config.delete;\n if (deleteFunc && typeof deleteFunc === 'function') {\n return deleteFunc(props.model[modelName.value], index, mForm?.values);\n }\n return true;\n },\n\n clearHandler() {\n const len = props.model[modelName.value].length;\n props.model[modelName.value].splice(0, len);\n mForm?.$emit('field-change', props.prop, props.model[modelName.value]);\n },\n\n excelHandler(file: UploadFile) {\n if (!file || !file.raw) {\n return false;\n }\n const reader = new FileReader();\n reader.onload = () => {\n const data = reader.result;\n const pdata = (globalThis as any).XLSX.read(data, { type: 'array' });\n pdata.SheetNames.forEach((sheetName: string) => {\n const arr = (globalThis as any).XLSX.utils.sheet_to_json(pdata.Sheets[sheetName], { header: 1 });\n if (arr?.[0]) {\n arr.forEach((row: any) => {\n newHandler(row);\n });\n }\n setTimeout(() => {\n excelBtn.value?.clearFiles();\n }, 300);\n });\n };\n reader.readAsArrayBuffer(file.raw);\n\n return false;\n },\n\n handleSizeChange(val: number) {\n pagesize.value = val;\n },\n\n handleCurrentChange(val: number) {\n pagecontext.value = val - 1;\n },\n\n toggleMode() {\n const calcLabelWidth = (label: string) => {\n if (!label) return '0px';\n const zhLength = label.match(/[^\\x00-\\xff]/g)?.length || 0;\n const chLength = label.length - zhLength;\n return `${Math.max(chLength * 8 + zhLength * 20, 80)}px`;\n };\n\n // 切换为groupList的形式\n props.config.type = 'groupList';\n props.config.enableToggleMode = true;\n props.config.tableItems = props.config.items;\n props.config.items =\n props.config.groupItems ||\n props.config.items.map((item: any) => {\n const text = item.text || item.label;\n const labelWidth = calcLabelWidth(text);\n return {\n ...item,\n text,\n labelWidth,\n span: item.span || 12,\n };\n });\n },\n\n toggleFullscreen() {\n if (isFullscreen.value) {\n mTable.value?.classList.remove('fixed');\n isFullscreen.value = false;\n } else {\n mTable.value?.classList.add('fixed');\n isFullscreen.value = true;\n }\n },\n\n getProp(index: number) {\n const { prop } = toRefs(props);\n return `${prop.value}${prop.value ? '.' : ''}${index + 1 + pagecontext.value * pagesize.value - 1}`;\n },\n };\n },\n});\n</script>\n","<template>\n <el-tabs\n v-model=\"activeTabName\"\n :class=\"config.dynamic ? 'magic-form-dynamic-tab' : 'magic-form-tab'\"\n :type=\"config.tabType\"\n :editable=\"config.editable || false\"\n :tab-position=\"config.tabPosition || 'top'\"\n @tab-click=\"tabClickHandler\"\n @tab-add=\"onTabAdd\"\n @tab-remove=\"onTabRemove\"\n >\n <template v-for=\"(tab, tabIndex) in tabs\">\n <el-tab-pane\n v-if=\"display(tab.display) && tabItems(tab).length\"\n :key=\"tab[mForm?.keyProp || '__key'] ?? tabIndex\"\n :name=\"filter(tab.status) || tabIndex.toString()\"\n :label=\"filter(tab.title)\"\n :lazy=\"tab.lazy || false\"\n >\n <m-form-container\n v-for=\"item in tabItems(tab)\"\n :key=\"item[mForm?.keyProp || '__key']\"\n :config=\"item\"\n :model=\"config.dynamic ? model[config.name || ''][tabIndex] : tab.name ? model[tab.name] : model\"\n :prop=\"config.dynamic ? `${prop}${prop ? '.' : ''}${String(tabIndex)}` : prop\"\n :size=\"size\"\n :label-width=\"tab.labelWidth || labelWidth\"\n :expand-more=\"expandMore\"\n @change=\"changeHandler\"\n ></m-form-container>\n </el-tab-pane>\n </template>\n </el-tabs>\n</template>\n\n<script lang=\"ts\">\n/* eslint-disable vue/no-mutating-props */\nimport { computed, defineComponent, inject, PropType, ref, watchEffect } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { FormState, FormValue, TabConfig, TabPaneConfig } from '../schema';\nimport { display, filterFunction } from '../utils/form';\n\nconst getActive = (mForm: FormState | undefined, props: any, activeTabName: string) => {\n const { config, model, prop } = props;\n const { active } = config;\n\n if (typeof active === 'function') return active(mForm, { model, formValue: mForm?.values, prop });\n if (+activeTabName >= props.config.items.length) return '0';\n if (typeof active !== 'undefined') return active;\n\n return '0';\n};\n\nconst tabClickHandler = (mForm: FormState | undefined, tab: any, props: any) => {\n const { config, model, prop } = props;\n if (typeof config.onTabClick === 'function') {\n config.onTabClick(mForm, tab, { model, formValue: mForm?.values, prop });\n }\n\n const tabConfig = config.items.find((item: TabPaneConfig) => tab.name === item.status);\n if (tabConfig && typeof tabConfig.onTabClick === 'function') {\n tabConfig.onTabClick(mForm, tab, { model, formValue: mForm?.values, prop });\n }\n};\n\nconst Tab = defineComponent({\n name: 'm-form-tab',\n\n props: {\n labelWidth: String,\n expandMore: Boolean,\n\n model: {\n type: Object,\n default: () => ({}),\n },\n\n config: {\n type: Object as PropType<TabConfig>,\n default: () => ({}),\n },\n\n prop: String,\n\n size: String,\n },\n\n emits: {\n change(values: FormValue) {\n return values;\n },\n },\n\n setup(props, { emit }) {\n const mForm = inject<FormState | undefined>('mForm');\n const activeTabName = ref(getActive(mForm, props, ''));\n\n const tabs = computed(() => {\n if (props.config.dynamic) {\n if (!props.config.name) throw new Error('dynamic tab 必须配置name');\n return props.model[props.config.name] || [];\n }\n return props.config.items;\n });\n\n const filter = (config: any) => filterFunction(mForm, config, props);\n\n watchEffect(() => {\n if (typeof props.config.activeChange === 'function') {\n props.config.activeChange(mForm, activeTabName.value, {\n model: props.model,\n prop: props.prop,\n });\n }\n });\n\n return {\n mForm,\n\n activeTabName,\n\n tabs,\n\n filter,\n\n tabItems: (tab: TabPaneConfig) => (props.config.dynamic ? props.config.items : tab.items),\n\n tabClickHandler: (tab: any) => tabClickHandler(mForm, tab, props),\n\n onTabAdd: () => {\n if (!props.config.name) throw new Error('dynamic tab 必须配置name');\n\n if (typeof props.config.onTabAdd === 'function') {\n props.config.onTabAdd(mForm, { model: props.model });\n } else if (tabs.value.length > 0) {\n const newObj = cloneDeep(tabs.value[0]);\n newObj.title = `标签${tabs.value.length + 1}`;\n props.model[props.config.name].push(newObj);\n }\n emit('change', props.model);\n mForm?.$emit('field-change', props.prop, props.model[props.config.name]);\n },\n\n onTabRemove: (tabName: string) => {\n if (!props.config.name) throw new Error('dynamic tab 必须配置name');\n\n if (typeof props.config.onTabRemove === 'function') {\n props.config.onTabRemove(mForm, tabName, { model: props.model });\n } else {\n props.model[props.config.name].splice(+tabName, 1);\n\n // 防止删除后没有选中的问题\n if (tabName < activeTabName.value || activeTabName.value >= props.model[props.config.name].length) {\n activeTabName.value = (+activeTabName.value - 1).toString();\n tabClickHandler(mForm, { name: activeTabName.value }, props);\n }\n }\n emit('change', props.model);\n mForm?.$emit('field-change', props.prop, props.model[props.config.name]);\n },\n\n display: (displayConfig: any) => display(mForm, displayConfig, props),\n\n changeHandler: () => {\n emit('change', props.model);\n if (typeof props.config.onChange === 'function') {\n props.config.onChange(mForm, { model: props.model });\n }\n },\n };\n },\n});\n\nexport default Tab;\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nlet $MAGIC_FORM = {} as any;\n\nconst setConfig = (option: any): void => {\n $MAGIC_FORM = option;\n};\n\nconst getConfig = (key: string): unknown => $MAGIC_FORM[key];\n\nexport { getConfig, setConfig };\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PropType } from 'vue';\n\nexport default {\n model: {\n type: Object,\n required: true,\n default: () => ({}),\n },\n name: {\n type: String,\n default: '',\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n size: String as PropType<'mini' | 'small' | 'medium'>,\n prop: String,\n initValues: Object,\n values: Object,\n};\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ComponentInternalInstance, getCurrentInstance, inject, watch } from 'vue';\n\nimport { FormState } from '../schema';\n\nexport const useAddField = (prop?: string) => {\n if (!prop) return;\n const mForm = inject<FormState | null>('mForm');\n const instance = getCurrentInstance() as ComponentInternalInstance;\n watch(\n () => instance?.proxy,\n (vm) => {\n if (vm) {\n mForm?.setField(prop, vm);\n } else {\n mForm?.deleteField(prop);\n }\n },\n {\n immediate: true,\n },\n );\n};\n","<template>\n <div class=\"m-cascader\" style=\"width: 100%\">\n <el-cascader\n v-model=\"model[name]\"\n ref=\"cascader\"\n style=\"width: 100%\"\n clearable\n filterable\n :size=\"size\"\n :placeholder=\"config.placeholder\"\n :disabled=\"disabled\"\n :options=\"options\"\n :props=\"{ multiple: config.multiple }\"\n @change=\"changeHandler\"\n ></el-cascader>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n ComponentInternalInstance,\n computed,\n defineComponent,\n getCurrentInstance,\n inject,\n PropType,\n Ref,\n ref,\n watchEffect,\n} from 'vue';\nimport { ElCascader, ElDialog } from 'element-plus';\n\nimport { CascaderConfig, FormState } from '../schema';\nimport { getConfig } from '../utils/config';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-cascader',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<CascaderConfig>,\n required: true,\n },\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n const mForm = inject<FormState | null>('mForm');\n const vm = getCurrentInstance() as ComponentInternalInstance;\n\n useAddField(props.prop);\n\n const requestFunc = getConfig('request') as Function;\n\n const cascader: Ref<null | typeof ElCascader> = ref(null);\n const dialog: Ref<null | typeof ElDialog> = ref(null);\n\n const options = Array.isArray(props.config.options) ? ref(props.config.options) : ref([]);\n const remoteData: Ref<any> = ref(null);\n\n const setRemoteOptions = async function () {\n const { config } = props;\n const { option } = config;\n if (!option) return;\n let { body } = option;\n\n const postOptions: Record<string, any> = {\n url: option.url,\n cache: option.cache,\n timeout: option.timeout,\n data: {},\n };\n\n if (body && mForm) {\n if (typeof body === 'function' && props.model && mForm) {\n body = body(mForm, {\n model: props.model,\n formValue: null,\n formValues: mForm.values,\n });\n }\n postOptions.data = body;\n }\n\n const res = await requestFunc(postOptions);\n\n remoteData.value = res[option.root];\n if (remoteData.value && typeof option?.item === 'function') {\n options.value = option.item(res[option.root]);\n }\n };\n\n // 初始化\n if (typeof props.config.options === 'function' && props.model && mForm) {\n watchEffect(\n () =>\n (options.value = (props.config.options as Function)(vm, { model: props.model, formValues: mForm.values })),\n );\n } else if (!props.config.options || !props.config.options.length || props.config.remote) {\n Promise.resolve(setRemoteOptions());\n }\n\n const action = computed(() => {\n if (props.config.add?.action.method === 'post') {\n return (options: any) =>\n requestFunc({\n ...props.config?.add?.action.body,\n ...options,\n });\n }\n return null;\n });\n\n return {\n options,\n remoteData,\n addButtonStyle: {\n top: 0,\n left: 0,\n width: 'auto',\n },\n dialogVisible: false,\n cascader,\n dialog,\n action,\n setRemoteOptions,\n changeHandler: (value: any) => {\n if (!cascader.value) return;\n cascader.value.query = '';\n cascader.value.previousQuery = null;\n emit('change', value);\n },\n addHandler: () => {\n if (!dialog.value) return;\n dialog.value.dialogVisible = true;\n },\n editAfterAction: () => {\n setRemoteOptions();\n },\n };\n },\n});\n</script>\n","<template>\n <el-checkbox\n v-model=\"model[name]\"\n :size=\"size\"\n :trueLabel=\"activeValue\"\n :falseLabel=\"inactiveValue\"\n :disabled=\"disabled\"\n :label=\"config.text\"\n @change=\"changeHandler\"\n ></el-checkbox>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType } from 'vue';\n\nimport { CheckboxConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-checkbox',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<CheckboxConfig>,\n required: true,\n },\n },\n\n emits: ['change', 'input'],\n\n setup(props, { emit }) {\n useAddField(props.prop);\n\n return {\n activeValue: computed(() => {\n if (typeof props.config.activeValue === 'undefined') {\n if (props.config.filter === 'number') {\n return 1;\n }\n } else {\n return props.config.activeValue;\n }\n\n return 'true';\n }),\n\n inactiveValue: computed(() => {\n if (typeof props.config.inactiveValue === 'undefined') {\n if (props.config.filter === 'number') {\n return 0;\n }\n } else {\n return props.config.inactiveValue;\n }\n\n return 'false';\n }),\n\n changeHandler(value: number | boolean) {\n emit('change', value);\n },\n };\n },\n});\n</script>\n","<template>\n <el-checkbox-group v-model=\"model[name]\" :size=\"size\" :disabled=\"disabled\" @change=\"changeHandler\">\n <el-checkbox v-for=\"option in config.options\" :label=\"option.value\" :key=\"option.value\"\n >{{ option.text }}\n </el-checkbox>\n </el-checkbox-group>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue';\n\nimport { CheckboxGroupConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-checkbox-group',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<CheckboxGroupConfig>,\n required: true,\n },\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n useAddField(props.prop);\n\n // 初始化选项\n if (props.model && !props.model[props.name]) {\n // eslint-disable-next-line no-param-reassign\n props.model[props.name] = [];\n }\n return {\n changeHandler: (v: Array<string | number | boolean>) => {\n emit('change', v);\n },\n };\n },\n});\n</script>\n","<template>\n <div v-if=\"model\">\n <el-color-picker\n v-model=\"model[name]\"\n :size=\"size\"\n :disabled=\"disabled\"\n :showAlpha=\"true\"\n @change=\"changeHandler\"\n ></el-color-picker>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue';\n\nimport { ColorPickConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\nexport default defineComponent({\n name: 'm-fields-color-picker',\n});\n</script>\n\n<script lang=\"ts\" setup>\nconst emit = defineEmits(['change']);\n\nconst props = defineProps({\n ...fieldProps,\n config: {\n type: Object as PropType<ColorPickConfig>,\n required: true,\n },\n});\n\nuseAddField(props.prop);\n\nconst changeHandler = (value: string) => emit('change', value);\n</script>\n","<template>\n <div v-if=\"model\">\n <el-date-picker\n v-model=\"model[modelName]\"\n type=\"date\"\n :size=\"size\"\n :placeholder=\"config.placeholder\"\n :disabled=\"disabled\"\n :format=\"config.format\"\n :value-format=\"config.format || 'YYYY-MM-DD HH:mm:ss'\"\n @change=\"changeHandler\"\n ></el-date-picker>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType } from 'vue';\n\nimport { datetimeFormatter } from '@tmagic/utils';\n\nimport { DateConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-date',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<DateConfig>,\n required: true,\n },\n },\n\n emits: ['change', 'input'],\n\n setup(props, { emit }) {\n useAddField(props.prop);\n\n const modelName = computed(() => props.prop || props.config.name || '');\n props.model[modelName.value] = datetimeFormatter(props.model[modelName.value], '');\n return {\n modelName,\n changeHandler(v: string) {\n emit('change', v);\n },\n };\n },\n});\n</script>\n","<template>\n <div>\n <el-date-picker\n v-model=\"value\"\n type=\"datetimerange\"\n range-separator=\"-\"\n start-placeholder=\"开始日期\"\n end-placeholder=\"结束日期\"\n :size=\"size\"\n :unlink-panels=\"true\"\n :disabled=\"disabled\"\n @change=\"changeHandler\"\n ></el-date-picker>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType, ref } from 'vue';\n\nimport { datetimeFormatter } from '@tmagic/utils';\n\nimport { DaterangeConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-daterange',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<DaterangeConfig>,\n required: true,\n },\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n useAddField(props.prop);\n\n // eslint-disable-next-line vue/no-setup-props-destructure\n const { names } = props.config;\n const value = ref<(string | number)[]>([]);\n\n if (props.model !== undefined) {\n if (names?.length) {\n value.value = names.map((item) => datetimeFormatter(props.model?.[item], ''));\n } else if (props.name && props.model[props.name]) {\n value.value = props.model[props.name].map((item: string) => datetimeFormatter(item, ''));\n }\n }\n\n const setValue = (v: Date[] | Date) => {\n if (names?.length && v instanceof Array) {\n names.forEach((item, index) => {\n if (props.model) {\n props.model[item] = datetimeFormatter(v[index].toString(), '');\n }\n });\n } else if (props.model && props.name && v instanceof Date) {\n props.model[props.name] = datetimeFormatter(v.toString(), '');\n }\n };\n\n return {\n value,\n changeHandler(v: Date[]) {\n setValue(v);\n emit('change', v);\n },\n };\n },\n});\n</script>\n","<template>\n <div v-if=\"model\">\n <el-date-picker\n v-model=\"model[name]\"\n popper-class=\"magic-datetime-picker-popper\"\n type=\"datetime\"\n :size=\"size\"\n :placeholder=\"config.placeholder\"\n :disabled=\"disabled\"\n :format=\"config.format || 'YYYY-MM-DD HH:mm:ss'\"\n :value-format=\"config.valueFormat || 'YYYY-MM-DD HH:mm:ss'\"\n @change=\"changeHandler\"\n ></el-date-picker>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue';\n\nimport { datetimeFormatter } from '@tmagic/utils';\n\nimport { DateTimeConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-datetime',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<DateTimeConfig>,\n required: true,\n },\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n useAddField(props.prop);\n\n const value = props.model?.[props.name].toString();\n if (props.model) {\n if (value === 'Invalid Date') {\n props.model[props.name] = '';\n } else {\n props.model[props.name] = datetimeFormatter(props.model[props.name], '', props.config.valueFormat);\n }\n }\n\n return {\n value,\n changeHandler: (v: Date) => {\n emit('change', v);\n },\n };\n },\n});\n</script>\n","<template>\n <span v-if=\"model\">{{ model[n] }}</span>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType } from 'vue';\n\nimport { DisplayConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-display',\n});\n</script>\n\n<script setup lang=\"ts\">\nconst props = defineProps({\n ...fieldProps,\n config: {\n type: Object as PropType<DisplayConfig>,\n required: true,\n },\n});\n\nconst n = computed(() => props.name || props.config.name || '');\n\nif (props.config.initValue && n.value && props.model) {\n // eslint-disable-next-line no-param-reassign,vue/no-setup-props-destructure\n props.model[n.value] = props.config.initValue;\n}\n\nuseAddField(props.prop);\n</script>\n","<template>\n <div class=\"m-fields-dynamic-field\">\n <el-form size=\"small\">\n <el-form-item v-for=\"key in Object.keys(fieldMap.value)\" :key=\"key\" :label=\"fieldLabelMap.value[key]\">\n <el-input\n v-model=\"fieldMap.value[key]\"\n :placeholder=\"fieldLabelMap.value[key]\"\n @change=\"inputChangeHandler(key)\"\n ></el-input>\n </el-form-item>\n </el-form>\n </div>\n</template>\n\n<script lang=\"ts\">\n/**\n * 动态表单,目前只支持input类型字段\n * inputType: 'dynamic-field',\n * text: '动态表单',\n * dynamicKey: 'keyname', 如果model[dynamicKey]变化,表单字段变化\n * returnFields(config,model,request): 函数,返回字段列表[{name:'',label:'',defaultValue:''}]\n *\n * 特别注意!!!field的上一级必须extensible: true,才能保存未声明的字段\n */\n\nimport { defineComponent, onBeforeUnmount, PropType, reactive, watch } from 'vue';\n\nimport { DynamicFieldConfig } from '../schema';\nimport { getConfig } from '../utils/config';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-dynamic-field',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<DynamicFieldConfig>,\n required: true,\n },\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n useAddField(props.prop);\n\n const request = getConfig('request') as Function;\n const fieldMap = reactive<{ [key: string]: any }>({\n value: {},\n });\n const fieldLabelMap = reactive<{ [key: string]: any }>({\n value: {},\n });\n\n const changeFieldMap = async () => {\n if (typeof props.config.returnFields !== 'function' || !props.model) return;\n const fields = await props.config.returnFields(props.config, props.model, request);\n fieldMap.value = {};\n fieldLabelMap.value = {};\n fields.forEach((v) => {\n if (typeof v !== 'object' || v.name === undefined) return;\n let oldVal = props.model?.[v.name] || '';\n if (!oldVal && v.defaultValue !== undefined) {\n oldVal = v.defaultValue;\n emit('change', oldVal, v.name);\n }\n fieldMap.value[v.name] = oldVal;\n fieldLabelMap.value[v.name] = v.label || '';\n });\n };\n\n const unwatch = watch(\n () => props.model?.[props.config.dynamicKey],\n (val) => {\n if (val !== '') {\n changeFieldMap();\n }\n },\n {\n immediate: true,\n },\n );\n\n onBeforeUnmount(() => {\n if (typeof unwatch === 'function') {\n unwatch();\n }\n });\n\n return {\n request,\n fieldMap,\n fieldLabelMap,\n unwatch,\n\n changeFieldMap,\n inputChangeHandler: (key: string) => {\n emit('change', fieldMap.value[key], key);\n },\n };\n },\n\n methods: {\n init() {},\n },\n});\n</script>\n","<template>\n <input v-if=\"model\" v-model=\"model[n]\" type=\"hidden\" />\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType } from 'vue';\n\nimport { HiddenConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-hidden',\n});\n</script>\n\n<script setup lang=\"ts\">\nconst props = defineProps({\n ...fieldProps,\n config: {\n type: Object as PropType<HiddenConfig>,\n required: true,\n },\n});\n\nconst n = computed(() => props.name || props.config.name || '');\n\nuseAddField(props.prop);\n</script>\n","<template>\n <a v-if=\"config.href && !disabled\" target=\"_blank\" :href=\"href\" :style=\"config.css || {}\">{{ displayText }}</a>\n <span v-else-if=\"config.href && disabled\" :style=\"config.disabledCss || {}\">{{ displayText }}</span>\n <div v-else class=\"m-fields-link\">\n <el-button type=\"text\" @click=\"editHandler\">点击编辑</el-button>\n <m-form-dialog\n ref=\"editor\"\n :title=\"config.formTitle || '编辑扩展配置'\"\n :width=\"config.formWidth\"\n :values=\"formValue\"\n :config=\"formConfig\"\n :parentValues=\"values\"\n :fullscreen=\"config.fullscreen\"\n @submit=\"action\"\n ></m-form-dialog>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, PropType, ref } from 'vue';\n\nimport FormDialog from '../FormDialog.vue';\nimport { FormState, LinkConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-link',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<LinkConfig>,\n required: true,\n },\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n useAddField(props.prop);\n\n const formValue = ref({});\n const editor = ref<InstanceType<typeof FormDialog>>();\n const mForm = inject<FormState | undefined>('mForm');\n\n const href = computed(() => {\n if (typeof props.config.href === 'function' && props.model) {\n return props.config.href(props.model);\n }\n return props.config.href || props.model?.[props.name];\n });\n\n const init = () => {\n formValue.value = props.model?.[props.name] || {};\n };\n\n return {\n // ref\n formValue,\n editor,\n\n // computed methods\n href,\n\n formConfig: computed(() => {\n if (typeof props.config.form === 'function') {\n return props.config.form(mForm, {\n model: props.model || {},\n values: props.values || {},\n });\n }\n return props.config.form;\n }),\n\n disable: computed(() => {\n if (typeof props.config.disabled !== 'undefined') {\n return props.config.disabled;\n }\n return !href.value;\n }),\n\n displayText: computed(() => {\n if (typeof props.config.displayText === 'function') {\n return props.config.displayText(mForm, { model: props.model || {} });\n }\n if (props.config.displayText) {\n return props.config.displayText;\n }\n return '跳转';\n }),\n\n // methods\n init,\n\n editHandler: () => {\n init();\n editor.value && (editor.value.dialogVisible = true);\n },\n\n action: (data: any) => {\n if (props.model) {\n props.model[props.name] = data;\n formValue.value = data;\n emit('change', props.model[props.name]);\n }\n editor.value && (editor.value.dialogVisible = false);\n },\n };\n },\n});\n</script>\n","<template>\n <el-input-number\n v-if=\"model\"\n v-model=\"model[name]\"\n clearable\n controls-position=\"right\"\n :size=\"size\"\n :max=\"config.max\"\n :min=\"config.min\"\n :step=\"config.step\"\n :placeholder=\"config.placeholder\"\n :disabled=\"disabled\"\n @change=\"changeHandler\"\n @input=\"inputHandler\"\n ></el-input-number>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject, PropType } from 'vue';\n\nimport { FormState, NumberConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\nexport default defineComponent({\n name: 'm-fields-number',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<NumberConfig>,\n required: true,\n },\n },\n\n emits: ['change', 'input'],\n\n setup(props, { emit }) {\n useAddField(props.prop);\n\n const mForm = inject<FormState | null>('mForm');\n return {\n mForm,\n changeHandler: (value: number) => {\n emit('change', value);\n },\n inputHandler: (v: string) => {\n emit('input', v);\n mForm?.$emit('field-input', props.prop, v);\n },\n };\n },\n});\n</script>\n","<template>\n <el-radio-group v-if=\"model\" v-model=\"model[name]\" :size=\"size\" :disabled=\"disabled\" @change=\"changeHandler\">\n <el-radio v-for=\"option in config.options\" :label=\"option.value\" :key=\"option.value\">{{ option.text }}</el-radio>\n </el-radio-group>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-radio-group',\n\n props: {\n ...fieldProps,\n config: {\n type: Object,\n required: true,\n },\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n useAddField(props.prop);\n return {\n changeHandler: (v: string | number | boolean) => emit('change', v),\n };\n },\n});\n</script>\n","<template>\n <el-select\n v-if=\"model\"\n v-model=\"model[name]\"\n v-loading=\"loading\"\n class=\"m-select\"\n ref=\"select\"\n clearable\n filterable\n :size=\"size\"\n :remote=\"remote\"\n :placeholder=\"config.placeholder\"\n :multiple=\"config.multiple\"\n :value-key=\"config.valueKey || 'value'\"\n :allow-create=\"config.allowCreate\"\n :disabled=\"disabled\"\n :remote-method=\"remoteMethod\"\n @change=\"changeHandler\"\n @visible-change=\"visibleHandler\"\n >\n <template v-if=\"config.group\">\n <el-option-group\n v-for=\"(group, index) in options\"\n :key=\"group.label + index\"\n :label=\"group.label\"\n :disabled=\"group.disabled\"\n >\n <el-option\n v-for=\"(item, index) in group.options\"\n :key=\"item.label + index\"\n :label=\"item.label\"\n :value=\"item.value\"\n :disabled=\"item.disabled\"\n >\n </el-option>\n </el-option-group>\n </template>\n <template v-else>\n <el-option\n v-for=\"option in options\"\n :label=\"option.text\"\n :value=\"option.value\"\n :key=\"config.valueKey ? option.value[config.valueKey] : option.value\"\n :disabled=\"option.disabled\"\n ></el-option>\n </template>\n <div v-loading=\"true\" v-if=\"moreLoadingVisible\"></div>\n </el-select>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject, onBeforeMount, onMounted, PropType, ref, watch } from 'vue';\nimport { ElSelect } from 'element-plus';\n\nimport { FormState, SelectConfig, SelectGroupOption, SelectOption } from '../schema';\nimport { getConfig } from '../utils/config';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-select',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<SelectConfig>,\n required: true,\n },\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n if (!props.model) throw new Error('不能没有model');\n useAddField(props.prop);\n\n const select = ref<typeof ElSelect>();\n const mForm = inject<FormState | undefined>('mForm');\n const options = ref<SelectOption[] | SelectGroupOption[]>([]);\n const localOptions = ref<SelectOption[] | SelectGroupOption[]>([]);\n const loading = ref(false);\n const moreLoadingVisible = ref(false);\n const total = ref(0);\n const pgIndex = ref(0);\n const pgSize = ref(20);\n const query = ref('');\n const remoteData = ref<any[]>([]);\n const remote = ref(true);\n\n const equalValue = (value: any, v: any): boolean => {\n if (typeof v === 'object') {\n const key = props.config.valueKey || 'value';\n return v[key] === value[key];\n }\n\n return value === v;\n };\n\n const mapOptions = (data: any[]) => {\n const { option } = props.config;\n const { text } = option;\n const { value } = option;\n\n return data.map((item) => ({\n text: typeof text === 'function' ? text(item) : item[text || 'text'],\n value: typeof value === 'function' ? value(item) : item[value || 'value'],\n }));\n };\n\n const getOptions = async () => {\n if (!props.model) return [];\n\n if (localOptions.value.length) {\n return localOptions.value;\n }\n\n loading.value = true;\n\n let items: SelectOption[] | SelectGroupOption[] = [];\n\n const { config } = props;\n const { option } = config;\n let { body } = option;\n\n let postOptions: Record<string, any> = {\n method: option.method || 'POST',\n url: option.url,\n cache: option.cache,\n timeout: option.timeout,\n mode: option.mode,\n headers: option.headers || {},\n json: option.json || false,\n };\n\n if (body) {\n if (typeof body === 'function') {\n body = body(mForm, {\n model: props.model,\n formValue: mForm?.values,\n formValues: mForm?.values,\n }) as Record<string, any>;\n }\n\n body.query = query.value;\n body.pgSize = pgSize.value;\n body.pgIndex = pgIndex.value;\n postOptions.data = body;\n }\n\n const requestFuc = getConfig('request') as Function;\n\n if (typeof option.beforeRequest === 'function') {\n postOptions = option.beforeRequest(mForm, postOptions, {\n model: props.model,\n formValue: mForm?.values,\n });\n }\n\n if (option.method?.toLocaleLowerCase() === 'jsonp') {\n postOptions.jsonpCallback = option.jsonpCallback || 'callback';\n }\n\n let res = await requestFuc(postOptions);\n\n if (typeof option.afterRequest === 'function') {\n res = option.afterRequest(mForm, res, {\n model: props.model,\n formValue: mForm?.values,\n formValues: mForm?.values,\n });\n }\n\n const optionsData = res[option.root];\n\n if (res.total > 0) {\n total.value = res.total;\n }\n\n remoteData.value = remoteData.value.concat(optionsData);\n if (optionsData) {\n if (typeof option.item === 'function') {\n items = option.item(optionsData);\n } else if (optionsData.map) {\n items = mapOptions(optionsData);\n }\n }\n\n loading.value = false;\n\n // 多选过滤时会导致已选的选项显示不了,所以要把已选的选项保留不要过滤没了\n const selectedOptions: SelectOption[] | SelectGroupOption[] = [];\n if (props.config.multiple && props.model[props.name]) {\n options.value.forEach((o: any) => {\n const isInclude = props.model?.[props.name].includes(o.value);\n if (isInclude && !(items as any[]).find((op: any) => op.value === o.value)) {\n selectedOptions.push(o);\n }\n });\n }\n\n return pgIndex.value === 0 ? (selectedOptions as any[]).concat(items) : (options.value as any).concat(items);\n };\n\n const getInitLocalOption = async () => {\n if (!props.model) return [];\n\n const value = props.model[props.name];\n const { config } = props;\n localOptions.value = await getOptions();\n\n remote.value = false;\n\n if (config.group) {\n if (config.multiple && value.findIndex) {\n return (localOptions.value as SelectGroupOption[]).filter(\n (group) => group.options.findIndex((item) => value.find((v: any) => equalValue(item.value, v)) > -1) > -1,\n );\n }\n\n return (localOptions.value as SelectGroupOption[]).filter(\n (group) => group.options.findIndex((item) => equalValue(item.value, value)) > -1,\n );\n }\n\n if (config.multiple && value.findIndex) {\n return (localOptions.value as any[]).filter(\n (item) => value.findIndex((v: any) => equalValue(item.value, v)) > -1,\n );\n }\n return (localOptions.value as any[]).filter((item) => equalValue(item.value, value));\n };\n\n const getInitOption = async () => {\n if (!props.model) return [];\n\n const { config } = props;\n const { option } = config;\n\n let options: SelectOption[] | SelectGroupOption[] = [];\n\n let url = option.initUrl;\n if (!url) {\n return getInitLocalOption();\n }\n\n if (typeof url === 'function') {\n url = await url(mForm, { model: props.model, formValue: mForm?.values });\n }\n\n const postOptions: Record<string, any> = {\n method: option.method || 'POST',\n url,\n data: {\n id: props.model[props.name],\n },\n mode: option.mode,\n headers: option.headers || {},\n json: option.json || false,\n };\n if (option.method?.toLocaleLowerCase() === 'jsonp') {\n postOptions.jsonpCallback = option.jsonpCallback || 'callback';\n }\n\n const requestFuc = getConfig('request') as Function;\n const res = await requestFuc(postOptions);\n\n let initData = res[option.root];\n if (initData) {\n if (!Array.isArray(initData)) {\n initData = [initData];\n }\n\n if (typeof option.item === 'function') {\n options = option.item(initData);\n } else if (initData.map) {\n options = mapOptions(initData);\n }\n }\n\n return options;\n };\n\n if (typeof props.config.options === 'function') {\n watch(\n () => mForm?.values,\n () => {\n typeof props.config.options === 'function' &&\n Promise.resolve(\n props.config.options(mForm, {\n model: props.model,\n formValues: mForm?.values,\n formValue: mForm?.values,\n }),\n ).then((data) => {\n options.value = data;\n });\n },\n {\n deep: true,\n immediate: true,\n },\n );\n } else if (Array.isArray(props.config.options)) {\n watch(\n () => props.config.options,\n () => {\n options.value = props.config.options as SelectOption[] | SelectGroupOption[];\n },\n { immediate: true },\n );\n } else if (props.config.option) {\n onBeforeMount(() => {\n if (!props.model) return;\n const v = props.model[props.name];\n if (Array.isArray(v) ? v.length : v) {\n getInitOption().then((data) => {\n options.value = data;\n });\n }\n });\n }\n\n props.config.remote &&\n onMounted(() => {\n select.value?.scrollbar.wrap$.addEventListener('scroll', async (e: Event) => {\n const el = e.currentTarget as HTMLDivElement;\n if (moreLoadingVisible.value) {\n return;\n }\n if (el.scrollHeight - el.clientHeight - el.scrollTop > 1) {\n return;\n }\n if (total.value <= options.value.length) {\n return;\n }\n moreLoadingVisible.value = true;\n pgIndex.value += 1;\n options.value = await getOptions();\n moreLoadingVisible.value = false;\n });\n });\n\n return {\n select,\n loading,\n remote,\n options,\n moreLoadingVisible,\n\n getRequestFuc() {\n return getConfig('request');\n },\n\n async getInitOption() {},\n\n changeHandler(value: any) {\n emit('change', value);\n },\n\n async visibleHandler(visible: boolean) {\n if (!visible) return;\n\n if (!props.config.remote) return;\n if (query.value && select.value) {\n select.value.query = query.value;\n select.value.previousQuery = query.value;\n select.value.selectedLabel = query.value;\n } else if (options.value.length <= (props.config.multiple ? props.model?.[props.name].length : 1)) {\n options.value = await getOptions();\n }\n },\n\n async editAfterAction() {\n pgIndex.value = 0;\n options.value = await getOptions();\n },\n\n async remoteMethod(q: string) {\n if (!localOptions.value.length) {\n query.value = q;\n pgIndex.value = 0;\n options.value = await getOptions();\n // 多选时如果过滤选项会导致已选好的标签异常,需要重新刷新一下el-select的状态\n if (props.config.multiple)\n setTimeout(() => {\n select.value?.setSelected();\n }, 0);\n }\n },\n };\n },\n});\n</script>\n","<template>\n <el-switch\n v-if=\"model\"\n v-model=\"model[n]\"\n :size=\"size\"\n :activeValue=\"activeValue\"\n :inactiveValue=\"inactiveValue\"\n :disabled=\"disabled\"\n @change=\"changeHandler\"\n ></el-switch>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType } from 'vue';\n\nimport { SwitchConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\nexport default defineComponent({\n name: 'm-fields-switch',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<SwitchConfig>,\n required: true,\n },\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n useAddField(props.prop);\n\n return {\n n: computed(() => props.name || props.config.name || ''),\n activeValue: computed(() => {\n if (typeof props.config.activeValue === 'undefined') {\n if (props.config.filter === 'number') {\n return 1;\n }\n } else {\n return props.config.activeValue;\n }\n\n return true;\n }),\n inactiveValue: computed(() => {\n if (typeof props.config.inactiveValue === 'undefined') {\n if (props.config.filter === 'number') {\n return 0;\n }\n } else {\n return props.config.inactiveValue;\n }\n\n return false;\n }),\n changeHandler: (v: boolean | number | string) => {\n emit('change', v);\n },\n };\n },\n});\n</script>\n","<template>\n <el-input\n v-model=\"model[modelName]\"\n clearable\n :size=\"size\"\n :placeholder=\"config.placeholder\"\n :disabled=\"disabled\"\n @change=\"changeHandler\"\n @input=\"inputHandler\"\n @keyup=\"keyUpHandler($event)\"\n >\n <template #append v-if=\"config.append\">\n <span v-if=\"typeof config.append === 'string'\">{{ config.append }}</span>\n <el-button\n v-if=\"typeof config.append === 'object' && config.append.type === 'button'\"\n style=\"color: #409eff\"\n @click=\"buttonClickHandler\"\n >\n {{ config.append.text }}\n </el-button>\n </template>\n </el-input>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, PropType } from 'vue';\n\nimport { FormState, TextConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-text',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<TextConfig>,\n required: true,\n },\n },\n\n emits: ['change', 'input'],\n\n setup(props, { emit }) {\n useAddField(props.prop);\n\n const modelName = computed(() => props.name || props.config.name || '');\n return {\n modelName,\n\n changeHandler(v: string | number) {\n emit('change', v);\n },\n\n inputHandler(v: string | number) {\n const mForm = inject<FormState | undefined>('mForm');\n emit('input', v);\n mForm?.$emit('field-input', props.prop, v);\n },\n\n buttonClickHandler() {\n const mForm = inject<FormState | undefined>('mForm');\n\n if (typeof props.config.append === 'string') return;\n\n if (props.config.append?.handler) {\n props.config.append.handler(mForm, {\n model: props.model,\n values: mForm?.values,\n });\n }\n },\n\n keyUpHandler($event: KeyboardEvent) {\n if (!props.model) return;\n if (!modelName.value) return;\n\n const arrowUp = $event.key === 'ArrowUp';\n const arrowDown = $event.key === 'ArrowDown';\n\n if (!arrowUp && !arrowDown) {\n return;\n }\n\n const value = props.model[modelName.value];\n let num;\n let unit;\n if (/^([0-9.]+)$/.test(value)) {\n num = +value;\n } else {\n value.replace(/^([0-9.]+)([a-z%]+)$/, ($0: string, $1: string, $2: string) => {\n num = +$1;\n unit = $2;\n });\n }\n\n if (num === undefined) {\n return;\n }\n\n const ctrl = navigator.platform.match('Mac') ? $event.metaKey : $event.ctrlKey;\n const shif = $event.shiftKey;\n const alt = $event.altKey;\n\n if (arrowUp) {\n if (ctrl) {\n num += 100;\n } else if (alt) {\n num = (num * 10000 + 1000) / 10000;\n } else if (shif) {\n num = num + 10;\n } else {\n num += 1;\n }\n } else if (arrowDown) {\n if (ctrl) {\n num -= 100;\n } else if (alt) {\n num = (num * 10000 - 1000) / 10000;\n } else if (shif) {\n num -= 10;\n } else {\n num -= 1;\n }\n }\n\n props.model[modelName.value] = `${num}${unit || ''}`;\n emit('change', props.model[modelName.value]);\n },\n };\n },\n});\n</script>\n","<template>\n <div v-if=\"model\">\n <el-input\n v-model=\"model[name]\"\n type=\"textarea\"\n :size=\"size\"\n clearable\n :placeholder=\"config.placeholder\"\n :disabled=\"disabled\"\n @change=\"changeHandler\"\n @input=\"inputHandler\"\n >\n </el-input>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject, PropType } from 'vue';\n\nimport { FormState, TextareaConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\nexport default defineComponent({\n name: 'm-fields-textarea',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<TextareaConfig>,\n required: true,\n },\n },\n\n emits: {\n change(values: string | number) {\n return values;\n },\n\n input(values: string | number) {\n return values;\n },\n },\n\n setup(props, { emit }) {\n useAddField(props.prop);\n\n const mForm = inject<FormState | null>('mForm');\n\n return {\n mForm,\n changeHandler: (v: string) => {\n emit('change', v);\n },\n\n inputHandler: (v: string) => {\n emit('input', v);\n mForm?.$emit('field-input', props.prop, v);\n },\n };\n },\n});\n</script>\n","<template>\n <div>\n <el-time-picker\n v-model=\"model[name]\"\n :size=\"size\"\n value-format=\"HH:mm:ss\"\n :placeholder=\"config.placeholder\"\n :disabled=\"disabled\"\n @change=\"changeHandler\"\n ></el-time-picker>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue';\n\nimport { TimeConfig } from '../schema';\nimport fieldProps from '../utils/fieldProps';\nimport { useAddField } from '../utils/useAddField';\n\nexport default defineComponent({\n name: 'm-fields-time',\n\n props: {\n ...fieldProps,\n config: {\n type: Object as PropType<TimeConfig>,\n required: true,\n },\n },\n\n emits: {\n change(values: Date) {\n return values;\n },\n },\n\n setup(props, { emit }) {\n useAddField(props.prop);\n\n return {\n changeHandler: (v: Date) => {\n emit('change', v);\n },\n };\n },\n});\n</script>\n","<template>\n <ElForm\n v-if=\"initialized && Array.isArray(config)\"\n class=\"m-form\"\n ref=\"elForm\"\n :model=\"values\"\n :label-width=\"labelWidth\"\n :disabled=\"disabled\"\n :style=\"`height: ${height}`\"\n :inline=\"inline\"\n :label-position=\"labelPosition\"\n >\n <MContainer\n v-for=\"(item, index) in config\"\n :key=\"item[keyProp] ?? index\"\n :config=\"item\"\n :model=\"values\"\n :label-width=\"item.labelWidth || labelWidth\"\n :step-active=\"stepActive\"\n :size=\"size\"\n @change=\"changeHandler\"\n ></MContainer>\n </ElForm>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType, provide, reactive, ref, watchEffect } from 'vue';\nimport { ElForm } from 'element-plus';\nimport { cloneDeep } from 'lodash-es';\n\nimport MContainer from './containers/Container.vue';\nimport { getConfig } from './utils/config';\nimport { initValue } from './utils/form';\nimport { FormConfig, FormState, FormValue } from './schema';\n\nexport interface ValidateError {\n message: string;\n field: string;\n}\n\nexport interface FieldErrorList {\n [field: string]: ValidateError[];\n}\n\nexport default defineComponent({\n name: 'm-form',\n\n components: { ElForm, MContainer },\n\n props: {\n // 表单初始化值\n initValues: {\n type: Object,\n required: true,\n default: () => ({}),\n },\n\n parentValues: {\n type: Object,\n default: () => ({}),\n },\n\n // 表单配置\n config: {\n type: Array as PropType<FormConfig>,\n required: true,\n default: () => [],\n },\n\n labelWidth: {\n type: String,\n default: () => '200px',\n },\n\n disabled: {\n type: Boolean,\n default: () => false,\n },\n\n height: {\n type: String,\n default: () => 'auto',\n },\n\n stepActive: {\n type: [String, Number],\n default: () => 1,\n },\n\n size: {\n type: String,\n default: 'small',\n },\n\n inline: {\n type: Boolean,\n default: false,\n },\n\n labelPosition: {\n type: String,\n default: 'right',\n },\n\n keyProp: {\n type: String,\n default: '__key',\n },\n },\n\n emits: ['change', 'field-input', 'field-change'],\n\n setup(props, { emit }) {\n const elForm = ref<InstanceType<typeof ElForm>>();\n const initialized = ref(false);\n const values = ref<FormValue>({});\n const fields = new Map<string, any>();\n\n const requestFuc = getConfig('request') as Function;\n\n const formState: FormState = reactive<FormState>({\n keyProp: props.keyProp,\n config: props.config,\n initValues: props.initValues,\n parentValues: props.parentValues,\n values,\n $emit: emit as (event: string, ...args: any[]) => void,\n fields,\n setField: (prop: string, field: any) => fields.set(prop, field),\n getField: (prop: string) => fields.get(prop),\n deleteField: (prop: string) => fields.delete(prop),\n post: (options: any) => {\n if (requestFuc) {\n return requestFuc({\n ...options,\n method: 'POST',\n });\n }\n },\n });\n\n provide('mForm', formState);\n\n watchEffect(() => {\n initialized.value = false;\n initValue(formState, {\n initValues: props.initValues,\n config: props.config,\n }).then((value) => {\n values.value = value;\n initialized.value = true;\n });\n });\n\n return {\n initialized,\n values,\n elForm,\n\n formState,\n\n changeHandler: () => {\n emit('change', values.value);\n },\n\n resetForm: () => elForm.value?.resetFields(),\n\n submitForm: async (native?: boolean): Promise<any> => {\n try {\n await elForm.value?.validate();\n return native ? values.value : cloneDeep(values.value);\n } catch (invalidFields: any) {\n const error: string[] = [];\n\n Object.entries(invalidFields).forEach(([, ValidateError]) => {\n (ValidateError as ValidateError[]).forEach(({ field, message }) => {\n if (field && message) error.push(`${field} -> ${message}`);\n if (field && !message) error.push(`${field} -> 出现错误`);\n if (!field && message) error.push(`${message}`);\n });\n });\n throw new Error(error.join('<br>'));\n }\n },\n };\n },\n});\n</script>\n","<template>\n <div>\n <el-dialog\n v-model=\"dialogVisible\"\n custom-class=\"m-form-dialog\"\n top=\"20px\"\n :title=\"title\"\n :appendToBody=\"true\"\n :width=\"width\"\n :fullscreen=\"fullscreen\"\n :close-on-click-modal=\"false\"\n @close=\"closeHandler\"\n >\n <div class=\"m-dialog-body\" :style=\"`max-height: ${bodyHeight}; overflow-y: auto; overflow-x: hidden;`\">\n <m-form\n v-model=\"stepActive\"\n ref=\"form\"\n :config=\"config\"\n :init-values=\"values\"\n :label-width=\"labelWidth\"\n @change=\"changeHandler\"\n ></m-form>\n <slot></slot>\n </div>\n\n <template #footer>\n <el-row class=\"dialog-footer\">\n <el-col :span=\"12\" style=\"text-align: left\">\n <div style=\"min-height: 1px\">\n <slot name=\"left\"></slot>\n </div>\n </el-col>\n <el-col :span=\"12\">\n <slot name=\"footer\">\n <el-button @click=\"cancel\" size=\"small\">取 消</el-button>\n <el-button v-if=\"hasStep && stepActive > 1\" type=\"info\" size=\"small\" @click=\"preStep\">上一步</el-button>\n <el-button v-if=\"hasStep && stepCount > stepActive\" type=\"info\" size=\"small\" @click=\"nextStep\"\n >下一步</el-button\n >\n <el-button v-else type=\"primary\" size=\"small\" :loading=\"saveFetch\" @click=\"save\">{{\n confirmText\n }}</el-button>\n </slot>\n </el-col>\n </el-row>\n </template>\n </el-dialog>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType, ref } from 'vue';\n\nimport Form from './Form.vue';\nimport { FormConfig, StepConfig } from './schema';\n\nexport default defineComponent({\n name: 'm-form-dialog',\n\n props: {\n values: {\n type: Object,\n default: () => ({}),\n },\n\n width: [Number, String],\n\n fullscreen: Boolean,\n\n title: String,\n\n config: {\n type: Array as PropType<FormConfig>,\n required: true,\n default: () => [],\n },\n\n labelWidth: [Number, String],\n\n confirmText: {\n type: String,\n default: '确定',\n },\n },\n\n emits: ['close', 'submit', 'error', 'change'],\n\n setup(props, { emit }) {\n const form = ref<InstanceType<typeof Form>>();\n const dialogVisible = ref(false);\n const saveFetch = ref(false);\n const stepActive = ref(1);\n const bodyHeight = ref(`${document.body.clientHeight - 194}px`);\n\n const stepCount = computed(() => {\n const { length } = props.config;\n for (let index = 0; index < length; index++) {\n if (props.config[index].type === 'step') {\n return (props.config[index] as StepConfig).items.length;\n }\n }\n return 0;\n });\n\n const hasStep = computed(() => {\n const { length } = props.config;\n for (let index = 0; index < length; index++) {\n if (props.config[index].type === 'step') {\n return true;\n }\n }\n\n return false;\n });\n\n const cancel = () => {\n dialogVisible.value = false;\n };\n\n const closeHandler = () => {\n stepActive.value = 1;\n emit('close');\n };\n\n const save = async () => {\n try {\n const values = await form.value?.submitForm();\n emit('submit', values);\n } catch (e) {\n emit('error', e);\n }\n };\n\n const preStep = () => {\n stepActive.value -= 1;\n };\n\n const nextStep = () => {\n stepActive.value += 1;\n };\n\n const changeHandler = (value: any) => {\n emit('change', value);\n };\n\n return {\n form,\n saveFetch,\n stepActive,\n dialogVisible,\n bodyHeight,\n stepCount,\n hasStep,\n cancel,\n closeHandler,\n save,\n preStep,\n nextStep,\n changeHandler,\n };\n },\n});\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { App } from 'vue';\n\nimport Container from './containers/Container.vue';\nimport Fieldset from './containers/Fieldset.vue';\nimport GroupList from './containers/GroupList.vue';\nimport Panel from './containers/Panel.vue';\nimport Row from './containers/Row.vue';\nimport MStep from './containers/Step.vue';\nimport Table from './containers/Table.vue';\nimport Tabs from './containers/Tabs.vue';\nimport Cascader from './fields/Cascader.vue';\nimport Checkbox from './fields/Checkbox.vue';\nimport CheckboxGroup from './fields/CheckboxGroup.vue';\nimport ColorPicker from './fields/ColorPicker.vue';\nimport Date from './fields/Date.vue';\nimport Daterange from './fields/Daterange.vue';\nimport DateTime from './fields/DateTime.vue';\nimport Display from './fields/Display.vue';\nimport DynamicField from './fields/DynamicField.vue';\nimport Hidden from './fields/Hidden.vue';\nimport Link from './fields/Link.vue';\nimport Number from './fields/Number.vue';\nimport RadioGroup from './fields/RadioGroup.vue';\nimport Select from './fields/Select.vue';\nimport Switch from './fields/Switch.vue';\nimport Text from './fields/Text.vue';\nimport Textarea from './fields/Textarea.vue';\nimport Time from './fields/Time.vue';\nimport { setConfig } from './utils/config';\nimport Form from './Form.vue';\nimport FormDialog from './FormDialog.vue';\n\nimport './theme/index.scss';\n\nexport * from './schema';\nexport * from './utils/form';\nexport * from './utils/useAddField';\nexport { default as fieldProps } from './utils/fieldProps';\n\nexport { default as MForm } from './Form.vue';\nexport { default as MFormDialog } from './FormDialog.vue';\nexport { default as MContainer } from './containers/Container.vue';\nexport { default as MFieldset } from './containers/Fieldset.vue';\nexport { default as MPanel } from './containers/Panel.vue';\nexport { default as MRow } from './containers/Row.vue';\nexport { default as MTabs } from './containers/Tabs.vue';\nexport { default as MTable } from './containers/Table.vue';\nexport { default as MGroupList } from './containers/GroupList.vue';\nexport { default as MText } from './fields/Text.vue';\nexport { default as MNumber } from './fields/Number.vue';\nexport { default as MTextarea } from './fields/Textarea.vue';\nexport { default as MHidden } from './fields/Hidden.vue';\nexport { default as MDate } from './fields/Date.vue';\nexport { default as MDateTime } from './fields/DateTime.vue';\nexport { default as MTime } from './fields/Time.vue';\nexport { default as MCheckbox } from './fields/Checkbox.vue';\nexport { default as MSwitch } from './fields/Switch.vue';\nexport { default as MDaterange } from './fields/Daterange.vue';\nexport { default as MColorPicker } from './fields/ColorPicker.vue';\nexport { default as MCheckboxGroup } from './fields/CheckboxGroup.vue';\nexport { default as MRadioGroup } from './fields/RadioGroup.vue';\nexport { default as MDisplay } from './fields/Display.vue';\nexport { default as MLink } from './fields/Link.vue';\nexport { default as MSelect } from './fields/Select.vue';\nexport { default as MCascader } from './fields/Cascader.vue';\nexport { default as MDynamicField } from './fields/DynamicField.vue';\n\nconst defaultInstallOpt = {};\n\nconst install = (app: App, opt: any) => {\n const option = Object.assign(defaultInstallOpt, opt);\n\n // eslint-disable-next-line no-param-reassign\n app.config.globalProperties.$MAGIC_FORM = option;\n setConfig(option);\n\n app.component(Form.name, Form);\n app.component(FormDialog.name, FormDialog);\n app.component(Container.name, Container);\n app.component(Fieldset.name, Fieldset);\n app.component(GroupList.name, GroupList);\n app.component(Panel.name, Panel);\n app.component(Row.name, Row);\n app.component(MStep.name, MStep);\n app.component(Table.name, Table);\n app.component(Tabs.name, Tabs);\n app.component(Text.name, Text);\n app.component(Number.name, Number);\n app.component(Textarea.name, Textarea);\n app.component(Hidden.name, Hidden);\n app.component(Date.name, Date);\n app.component(DateTime.name, DateTime);\n app.component(Time.name, Time);\n app.component(Checkbox.name, Checkbox);\n app.component(Switch.name, Switch);\n app.component(Daterange.name, Daterange);\n app.component(ColorPicker.name, ColorPicker);\n app.component(CheckboxGroup.name, CheckboxGroup);\n app.component(RadioGroup.name, RadioGroup);\n app.component(Display.name, Display);\n app.component(Link.name, Link);\n app.component(Select.name, Select);\n app.component(Cascader.name, Cascader);\n app.component(DynamicField.name, DynamicField);\n};\n\nexport default {\n install,\n};\n"],"names":["cloneDeep","toRaw","_sfc_main","defineComponent","inject","ref","computed","resolveComponent","display","displayFunction","_normalizeStyle","_createBlock","_resolveDynamicComponent","_createElementBlock","_withCtx","_Fragment","_openBlock","_createCommentVNode","_hoisted_1","_hoisted_4","_hoisted_7","_hoisted_9","_hoisted_10","CaretRight","CaretBottom","Delete","_createVNode","_hoisted_2","_hoisted_3","_hoisted_5","Sortable","ArrowDown","ArrowUp","toRefs","_normalizeClass","getCurrentInstance","datetimeFormatter","reactive","watch","_toDisplayString","onMounted","_createSlots","ElForm","MContainer","Number","Hidden","Date","ColorPicker","Display"],"mappings":"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"}