@longhongguo/form-create-ant-design-vue 3.2.43 → 3.2.44
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.
- package/dist/form-create.esm.js +2 -2
- package/dist/form-create.esm.js.map +1 -1
- package/dist/form-create.js +2 -2
- package/dist/form-create.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FcEditorWrapper.vue +178 -0
- package/src/core/api.js +0 -1
- package/src/core/manager.js +442 -442
package/dist/form-create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-create.js","sources":["../src/components/icon/QuestionCircleOutlined.vue","../src/components/icon/QuestionCircleOutlined.vue?vue&type=template&id=72badc20&lang.js","../src/components/index.js","../src/parsers/checkbox.js","../src/parsers/radio.js","../src/parsers/select.js","../src/parsers/cascader.js","../src/parsers/datePicker.js","../src/parsers/hidden.js","../src/parsers/input.js","../src/parsers/timePicker.js","../src/parsers/tree.js","../src/parsers/row.js","../src/parsers/timeRangePicker.js","../src/parsers/index.js","../src/parsers/rangePicker.js","../src/core/alias.js","../src/core/manager.js","../src/core/config.js","../src/core/maker.js","../src/core/api.js","../src/core/modelFields.js","../src/core/provider.js","../src/core/index.js","../src/index.js"],"sourcesContent":["<template>\n <span class=\"anticon\">\n <svg height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\">\n <path\n d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448s448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372s372 166.6 372 372s-166.6 372-372 372z\"\n fill=\"currentColor\"></path>\n <path\n d=\"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7c-21.2 8.1-39.2 22.3-52.1 40.9c-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0 1 30.9-44.8c59-22.7 97.1-74.7 97.1-132.5c.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1 0 80 0a40 40 0 1 0-80 0z\"\n fill=\"currentColor\"></path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: 'QuestionCircleOutlined'\n}\n</script>\n","<template>\n <span class=\"anticon\">\n <svg height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\">\n <path\n d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448s448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372s372 166.6 372 372s-166.6 372-372 372z\"\n fill=\"currentColor\"></path>\n <path\n d=\"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7c-21.2 8.1-39.2 22.3-52.1 40.9c-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0 1 30.9-44.8c59-22.7 97.1-74.7 97.1-132.5c.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1 0 80 0a40 40 0 1 0-80 0z\"\n fill=\"currentColor\"></path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: 'QuestionCircleOutlined'\n}\n</script>\n","import upload from '@form-create/component-antdv-upload/src/index'\nimport frame from '@form-create/component-antdv-frame/src/index'\nimport group from '@form-create/component-antdv-group/src/index'\nimport subForm from '@form-create/component-subform/src/index'\nimport QuestionCircleOutlined from './icon/QuestionCircleOutlined.vue'\n\nexport default [upload, frame, group, subForm, QuestionCircleOutlined]\n","import {hasProperty} from '@form-create/utils/lib/type';\r\n\r\nexport default {\r\n name: 'checkbox',\r\n modelField: 'value',\r\n mergeProp(ctx) {\r\n const props = ctx.prop.props;\r\n if (!hasProperty(props, 'options'))\r\n props.options = ctx.prop.options || [];\r\n }\r\n\r\n}\r\n","import checkbox from './checkbox';\n\nexport default {\n ...checkbox, name: 'radio'\n};\n","import checkbox from './checkbox'\nimport { hasProperty } from '@form-create/utils/lib/type'\n\nexport default {\n ...checkbox,\n name: 'select',\n mergeProp(ctx) {\n const props = ctx.prop.props\n if (!hasProperty(props, 'options')) props.options = ctx.prop.options || []\n\n // 检测 loading 状态:从 effectData('fetch') 中获取 loading 状态\n const fetchData = ctx.effectData('fetch')\n const isLoading = fetchData && fetchData.loading === true\n\n // 如果正在加载,设置 disabled 和 loading\n if (isLoading) {\n props.disabled = true\n props.loading = true\n }\n },\n render(children, ctx) {\n // 检测 loading 状态(与 mergeProp 中的逻辑保持一致)\n const fetchData = ctx.effectData('fetch')\n const isLoading = fetchData && fetchData.loading === true\n\n // 如果有 loading 插槽且正在加载,将 loading 插槽传递给组件的 notFoundContent 插槽\n if (isLoading && children.loading) {\n // 将 loading 插槽合并到 children 中,作为 notFoundContent\n const newChildren = { ...children }\n newChildren.notFoundContent = children.loading\n return ctx.$render.defaultRender(ctx, newChildren)\n }\n\n // 调用默认渲染\n return ctx.$render.defaultRender(ctx, children)\n }\n}\n","import { hasProperty } from '@form-create/utils/lib/type'\r\n\r\nexport default {\r\n name: 'cascader',\r\n mergeProp(ctx) {\r\n const props = ctx.prop.props\r\n if (!hasProperty(props, 'options')) props.options = ctx.prop.options || []\r\n\r\n // 检测 loading 状态:从 effectData('fetch') 中获取 loading 状态\r\n const fetchData = ctx.effectData('fetch')\r\n const isLoading = fetchData && fetchData.loading === true\r\n\r\n // 如果正在加载,设置 disabled 和 loading\r\n if (isLoading) {\r\n props.disabled = true\r\n props.loading = true\r\n }\r\n },\r\n render(children, ctx) {\r\n // 检测 loading 状态(与 mergeProp 中的逻辑保持一致)\r\n const fetchData = ctx.effectData('fetch')\r\n const isLoading = fetchData && fetchData.loading === true\r\n\r\n // 如果有 loading 插槽且正在加载,将 loading 插槽传递给组件的 notFoundContent 插槽\r\n if (isLoading && children.loading) {\r\n // 将 loading 插槽合并到 children 中,作为 notFoundContent\r\n const newChildren = { ...children }\r\n newChildren.notFoundContent = children.loading\r\n return ctx.$render.defaultRender(ctx, newChildren)\r\n }\r\n\r\n // 调用默认渲染\r\n return ctx.$render.defaultRender(ctx, children)\r\n }\r\n}\r\n","import { creatorFactory } from '@longhongguo/form-create-core/src/index'\n\nconst FORMAT_TYPE = {\n date: 'YYYY-MM-DD',\n month: 'YYYY-MM',\n week: 'YYYY-wo',\n quarter: 'YYYY-qQ',\n year: 'YYYY'\n}\n\nconst name = 'datePicker'\n\nexport default {\n name,\n maker: (function () {\n return ['date', 'month', 'week'].reduce(\n (initial, type) => {\n initial[type] = creatorFactory(name, { type })\n return initial\n },\n {\n dateRange: creatorFactory(name, { type: 'range' }),\n datetimeRange: creatorFactory(name, (m) =>\n m.props({ type: 'range', showTime: true })\n )\n }\n )\n })(),\n modelField: 'value',\n mergeProp(ctx) {\n const props = ctx.prop.props\n const type = props.type || props.picker\n if (!props.valueFormat) {\n props.valueFormat =\n (FORMAT_TYPE[type] || FORMAT_TYPE['date']) +\n (props.showTime && (!type || type === 'date') ? ' HH:mm:ss' : '')\n }\n },\n render(children, ctx) {\n return ctx.$render.vNode[\n (ctx.prop.props.range === true ? 'range' : 'date') + 'Picker'\n ](ctx.prop, children)\n }\n}\n","import { creatorFactory } from '@longhongguo/form-create-core/src/index'\n\nconst name = 'hidden'\n\nexport default {\n name,\n maker: {\n [name]: (field, value) => creatorFactory(name)('', field, value)\n },\n render() {\n return []\n }\n}\n","import { creatorFactory } from '@longhongguo/form-create-core/src/index'\n\nconst name = 'input'\nexport default {\n name,\n maker: (function () {\n return ['password', 'url', 'email', 'text', 'textarea', 'search'].reduce(\n (maker, type) => {\n maker[type] = creatorFactory(name, { type })\n return maker\n },\n {\n idate: creatorFactory(name, { type: 'date' })\n }\n )\n })(),\n modelField: 'value',\n render(children, ctx) {\n let type = ctx.prop.props.type\n if (['textarea', 'search', 'password'].indexOf(type) === -1) type = 'input'\n\n type =\n {\n textarea: 'aTextarea',\n search: 'aInputSearch',\n password: 'aInputPassword'\n }[type] || 'aInput'\n return ctx.$render.vNode.make(type, ctx.prop, children)\n }\n}\n","export default {\n name: 'timePicker',\n modelField: 'value',\n mergeProp(ctx) {\n const props = ctx.prop.props;\n if (!props.valueFormat) {\n props.valueFormat = 'HH:mm:ss';\n }\n },\n render(children, ctx) {\n return ctx.$render.vNode['time' +( ctx.prop.props.range === true ? 'Range' : '') + 'Picker'](ctx.prop, children);\n }\n\n}\n\n","export default {\n name: 'tree',\n modelField: 'checkedKeys',\n mergeProp(ctx) {\n const props = ctx.prop.props;\n if (!props.fieldNames)\n props.fieldNames = {\n key: 'id'\n };\n else if (!props.fieldNames.key) props.fieldNames.key = 'id';\n props.checkedKeys = ctx.rule.value;\n props.checkable = true;\n },\n\n}\n\n","export default {\n name: 'FcRow',\n render(_, ctx) {\n return ctx.vNode.col({props: {span: 24}}, {\n default: () => [\n ctx.vNode.row(ctx.prop, _)\n ]\n })\n }\n}\n","import timePicker from './timePicker';\n\nconst name = 'timeRangePicker';\n\nexport default {\n ...timePicker,\n name,\n render(children, ctx) {\n return ctx.$render.vNode['timeRangePicker'](ctx.prop, children);\n }\n}\n","import checkbox from './checkbox'\nimport radio from './radio'\nimport select from './select'\nimport cascader from './cascader'\nimport datePicker from './datePicker'\nimport hidden from './hidden'\nimport input from './input'\nimport timePicker from './timePicker'\nimport tree from './tree'\nimport row from './row'\nimport rangePicker from './rangePicker'\nimport timeRangePicker from './timeRangePicker'\n\nexport default [\n checkbox,\n datePicker,\n rangePicker,\n hidden,\n input,\n timePicker,\n timeRangePicker,\n tree,\n radio,\n select,\n cascader,\n row\n]\n","import datePicker from './datePicker';\n\nconst name = 'rangePicker';\n\nexport default {\n ...datePicker,\n name,\n maker: {},\n render(children, ctx) {\n return ctx.$render.vNode['rangePicker'](ctx.prop, children);\n }\n}\n","const PRE = 'a'\nexport default {\n tooltip: PRE + 'Tooltip',\n popover: PRE + 'Popover',\n button: PRE + 'Button',\n icon: PRE + 'Icon',\n slider: PRE + 'Slider',\n rate: PRE + 'Rate',\n upload: 'fcUpload',\n cascader: PRE + 'Cascader',\n timePicker: PRE + 'TimePicker',\n timeRangePicker: PRE + 'TimeRangePicker',\n datePicker: PRE + 'DatePicker',\n rangePicker: PRE + 'RangePicker',\n switch: PRE + 'Switch',\n select: PRE + 'Select',\n checkbox: PRE + 'CheckboxGroup',\n radio: PRE + 'RadioGroup',\n input: PRE + 'Input',\n inputNumber: PRE + 'InputNumber',\n treeSelect: PRE + 'TreeSelect',\n search: PRE + 'InputSearch',\n inputPassword: PRE + 'InputPassword',\n textarea: PRE + 'Textarea',\n formItem: PRE + 'FormItem',\n form: PRE + 'Form',\n frame: 'fcFrame',\n col: PRE + 'Col',\n row: PRE + 'Row',\n tree: PRE + 'Tree',\n autoComplete: PRE + 'AutoComplete',\n transfer: PRE + 'Transfer',\n group: 'fcGroup',\n array: 'fcGroup',\n subForm: 'fcSubForm',\n object: 'fcSubForm'\n}\n","import getConfig from './config'\nimport mergeProps from '@form-create/utils/lib/mergeprops'\nimport is, { hasProperty } from '@form-create/utils/lib/type'\nimport extend from '@form-create/utils/lib/extend'\n\nfunction isTooltip(info) {\n return info.type === 'tooltip'\n}\n\nfunction tidy(props, name) {\n if (!hasProperty(props, name)) return\n if (is.String(props[name])) {\n props[name] = { [name]: props[name], show: true }\n }\n}\n\nfunction isFalse(val) {\n return val === false\n}\n\nfunction tidyBool(opt, name) {\n if (hasProperty(opt, name) && !is.Object(opt[name])) {\n opt[name] = { show: !!opt[name] }\n }\n}\n\nfunction tidyRule(rule) {\n const _rule = { ...rule }\n delete _rule.children\n return _rule\n}\n\nexport default {\n validate() {\n const form = this.form()\n if (form) {\n return form.validate()\n } else {\n return new Promise((v) => v())\n }\n },\n validateField(field) {\n const form = this.form()\n if (form) {\n return form.validateFields(field)\n } else {\n return new Promise((v) => v())\n }\n },\n clearValidateState(ctx) {\n const fItem = this.vm.refs[ctx.wrapRef]\n if (fItem) {\n fItem.clearValidate()\n }\n },\n tidyOptions(options) {\n ;['submitBtn', 'resetBtn', 'row', 'info', 'wrap', 'col', 'title'].forEach(\n (name) => {\n tidyBool(options, name)\n }\n )\n return options\n },\n tidyRule({ prop }) {\n tidy(prop, 'title')\n tidy(prop, 'info')\n return prop\n },\n mergeProp(ctx) {\n const def = {\n info: {\n type: 'popover',\n placement: 'topLeft',\n icon: 'QuestionCircleOutlined'\n },\n title: {},\n col: { span: 24 },\n wrap: {}\n }\n ;['info', 'wrap', 'col', 'title'].forEach((name) => {\n ctx.prop[name] = mergeProps(\n [this.options[name] || {}, ctx.prop[name] || {}],\n def[name]\n )\n })\n\n // 为 upload 组件自动添加 onPreview,确保始终向父窗口发送预览通知\n if (ctx.rule.type === 'upload' && !ctx.prop.props.onPreview) {\n const sendPreviewMessage = function (file) {\n if (window.parent && window.parent !== window) {\n window.parent.postMessage(\n {\n type: 'upload-preview',\n file: {\n url: file.url,\n name: file.name,\n uid: file.uid,\n size: file.size,\n type: file.type\n },\n timestamp: Date.now()\n },\n '*'\n )\n }\n }\n ctx.prop.props.onPreview = function (file) {\n sendPreviewMessage(file)\n // 不执行默认预览,只发送消息\n }\n } else if (ctx.rule.type === 'upload' && ctx.prop.props.onPreview) {\n // 如果用户已经设置了 onPreview,包装它以确保先发送消息\n const originalOnPreview = ctx.prop.props.onPreview\n const sendPreviewMessage = function (file) {\n if (window.parent && window.parent !== window) {\n window.parent.postMessage(\n {\n type: 'upload-preview',\n file: {\n url: file.url,\n name: file.name,\n uid: file.uid,\n size: file.size,\n type: file.type\n },\n timestamp: Date.now()\n },\n '*'\n )\n }\n }\n ctx.prop.props.onPreview = function (file) {\n sendPreviewMessage(file)\n if (originalOnPreview && typeof originalOnPreview === 'function') {\n originalOnPreview.apply(this, arguments)\n }\n }\n }\n },\n getDefaultOptions() {\n return getConfig()\n },\n adapterValidate(validate, validator) {\n validate.validator = (rule, value) => {\n return new Promise((resolve, reject) => {\n const callback = (err) => {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n }\n return validator(value, callback)\n })\n }\n return validate\n },\n update() {\n const form = this.options.form\n this.rule = {\n props: { ...form },\n on: {\n submit: (e) => {\n e.preventDefault()\n }\n },\n style: form.style,\n type: 'form'\n }\n },\n beforeRender() {\n const { key, ref, $handle } = this\n const form = this.options.form\n extend(this.rule, {\n key,\n ref,\n class: [\n form.className,\n form.class,\n 'form-create',\n this.$handle.preview ? 'is-preview' : ''\n ]\n })\n extend(this.rule.props, {\n model: $handle.formData\n })\n },\n render(children) {\n if (children.slotLen() && !this.$handle.preview) {\n children.setSlot(undefined, () => this.makeFormBtn())\n }\n return this.$r(\n this.rule,\n isFalse(this.options.row.show)\n ? children.getSlots()\n : [this.makeRow(children)]\n )\n },\n makeWrap(ctx, children) {\n const rule = ctx.prop\n const uni = `${this.key}${ctx.key}`\n const col = rule.col\n const isTitle = this.isTitle(rule) && rule.wrap.title !== false\n const { layout, col: _col } = this.rule.props\n const cls = rule.wrap.class\n delete rule.wrap.class\n delete rule.wrap.title\n const item = isFalse(rule.wrap.show)\n ? children\n : this.$r(\n mergeProps([\n rule.wrap,\n {\n props: {\n ...tidyRule(rule.wrap || {}),\n hasFeedback: rule.hasFeedback || false,\n name: ctx.id,\n rules: ctx.injectValidate(),\n ...(layout !== 'horizontal'\n ? { labelCol: {}, wrapperCol: {} }\n : {})\n },\n class: this.$render.mergeClass(\n cls || rule.className,\n 'fc-form-item'\n ),\n key: `${uni}fi`,\n ref: ctx.wrapRef,\n type: 'formItem'\n }\n ]),\n {\n default: () => children,\n ...(isTitle ? { label: () => this.makeInfo(rule, uni, ctx) } : {})\n }\n )\n return layout === 'inline' || isFalse(_col) || isFalse(col.show)\n ? item\n : this.makeCol(rule, uni, [item])\n },\n isTitle(rule) {\n if (this.options.form.title === false) return false\n const title = rule.title\n return !((!title.title && !title.native) || isFalse(title.show))\n },\n makeInfo(rule, uni, ctx) {\n const titleProp = { ...rule.title }\n const infoProp = { ...rule.info }\n if (this.options.form.title === false) return false\n if ((!titleProp.title && !titleProp.native) || isFalse(titleProp.show))\n return\n const isTip = isTooltip(infoProp)\n const titleSlot = this.getSlot('title')\n const children = [\n titleSlot\n ? titleSlot({\n title: ctx.refRule?.__$title?.value,\n rule: ctx.rule,\n options: this.options\n })\n : ctx.refRule?.__$title?.value\n ]\n\n if (\n !isFalse(infoProp.show) &&\n (infoProp.info || infoProp.native) &&\n !isFalse(infoProp.icon)\n ) {\n const prop = {\n type: infoProp.type || 'popover',\n props: tidyRule(infoProp),\n key: `${uni}pop`\n }\n\n delete prop.props.icon\n delete prop.props.show\n delete prop.props.info\n delete prop.props.align\n delete prop.props.native\n\n const field = isTip ? 'title' : 'content'\n if (infoProp.info && !hasProperty(prop.props, field)) {\n prop.props[field] = ctx.refRule?.__$info?.value\n }\n children[infoProp.align !== 'left' ? 'unshift' : 'push'](\n this.$r(mergeProps([infoProp, prop]), {\n [titleProp.slot || 'default']: () =>\n this.$r({\n type:\n infoProp.icon === true\n ? 'QuestionCircleOutlined'\n : infoProp.icon || '',\n props: {\n type:\n infoProp.icon === true\n ? 'QuestionCircleOutlined'\n : infoProp.icon\n },\n key: `${uni}i`\n })\n })\n )\n }\n\n const _prop = mergeProps([\n titleProp,\n {\n props: tidyRule(titleProp),\n key: `${uni}tit`,\n class: 'fc-form-title',\n type: titleProp.type || 'span'\n }\n ])\n\n delete _prop.props.show\n delete _prop.props.title\n delete _prop.props.native\n\n return this.$r(_prop, children)\n },\n makeCol(rule, uni, children) {\n const col = rule.col\n return this.$r(\n {\n class: this.$render.mergeClass(col.class, 'fc-form-col'),\n type: 'col',\n props: col || { span: 24 },\n key: `${uni}col`\n },\n children\n )\n },\n makeRow(children) {\n const row = this.options.row || {}\n return this.$r(\n {\n type: 'row',\n props: row,\n class: this.$render.mergeClass(row.class, 'fc-form-row'),\n key: `${this.key}row`\n },\n children\n )\n },\n makeFormBtn() {\n let vn = []\n if (!isFalse(this.options.submitBtn.show)) {\n vn.push(this.makeSubmitBtn())\n }\n if (!isFalse(this.options.resetBtn.show)) {\n vn.push(this.makeResetBtn())\n }\n if (!vn.length) {\n return\n }\n let { labelCol, wrapperCol, layout } = this.rule.props\n if (layout !== 'horizontal') {\n labelCol = wrapperCol = {}\n }\n const item = this.$r(\n {\n type: 'formItem',\n class: 'fc-form-item fc-form-footer',\n key: `${this.key}fb`,\n props: {\n labelCol,\n wrapperCol,\n label: ' ',\n colon: false\n }\n },\n vn\n )\n\n return layout === 'inline'\n ? item\n : this.$r(\n {\n type: 'col',\n class: 'fc-form-col',\n props: { span: 24 },\n key: `${this.key}fc`\n },\n [item]\n )\n },\n\n makeResetBtn() {\n const resetBtn = { ...this.options.resetBtn }\n const innerText =\n resetBtn.innerText || this.$handle.api.t('reset') || '重置'\n delete resetBtn.innerText\n delete resetBtn.click\n delete resetBtn.col\n delete resetBtn.show\n return this.$r(\n {\n type: 'button',\n props: resetBtn,\n class: 'fc-reset-btn',\n style: { width: resetBtn.width, marginLeft: '10px' },\n on: {\n click: () => {\n const fApi = this.$handle.api\n this.options.resetBtn.click\n ? this.options.resetBtn.click(fApi)\n : fApi.resetFields()\n }\n },\n key: `${this.key}b2`\n },\n [innerText]\n )\n },\n makeSubmitBtn() {\n const submitBtn = { ...this.options.submitBtn }\n const innerText =\n submitBtn.innerText || this.$handle.api.t('submit') || '提交'\n delete submitBtn.innerText\n delete submitBtn.click\n delete submitBtn.col\n delete submitBtn.show\n return this.$r(\n {\n type: 'button',\n props: submitBtn,\n class: 'fc-submit-btn',\n style: { width: submitBtn.width },\n on: {\n click: () => {\n const fApi = this.$handle.api\n this.options.submitBtn.click\n ? this.options.submitBtn.click(fApi)\n : fApi.submit().catch(() => {})\n }\n },\n key: `${this.key}b1`\n },\n [innerText]\n )\n }\n}\n","const UNDEF = undefined\n\nexport default function getConfig() {\n return {\n form: {\n hideRequiredMark: false,\n layout: 'horizontal',\n labelAlign: 'right',\n labelCol: {\n span: 3\n },\n wrapperCol: {\n span: 21\n },\n validateOnRuleChange: true\n },\n row: {\n gutter: 0\n },\n submitBtn: {\n disabled: false,\n loading: false,\n type: 'primary',\n innerText: '',\n show: false,\n col: UNDEF,\n click: UNDEF\n },\n resetBtn: {\n disabled: false,\n loading: false,\n type: 'default',\n innerText: '',\n show: false,\n col: UNDEF,\n click: UNDEF\n }\n }\n}\n","import { creatorFactory } from '@longhongguo/form-create-core/src/index'\n\nconst maker = {}\n\nfunction useAlias(maker) {\n ;[\n 'treeSelect',\n 'upload',\n 'frame',\n 'autoComplete',\n 'cascader',\n 'datePicker',\n 'frame',\n 'inputNumber',\n 'inputPassword',\n 'radio',\n 'rate',\n 'switch',\n 'rate',\n 'slider',\n 'timePicker'\n ].reduce((maker, name) => {\n maker[name] = creatorFactory(name)\n return maker\n }, maker)\n maker.auto = maker.autoComplete\n maker.number = maker.inputNumber\n maker.time = maker.timePicker\n maker.password = maker.inputPassword\n}\n\nfunction useFrame(maker) {\n const types = {\n frameInputs: ['input', 0],\n frameFiles: ['file', 0],\n frameImages: ['image', 0],\n frameInputOne: ['input', 1],\n frameFileOne: ['file', 1],\n frameImageOne: ['image', 1]\n }\n\n Object.keys(types).reduce((maker, key) => {\n maker[key] = creatorFactory('frame', (m) =>\n m.props({ type: types[key][0], maxLength: types[key][1] })\n )\n return maker\n }, maker)\n\n maker.frameInput = maker.frameInputs\n maker.frameFile = maker.frameFiles\n maker.frameImage = maker.frameImages\n}\n\nfunction useSlider(maker) {\n maker['sliderRange'] = creatorFactory('slider', { range: true })\n}\n\nfunction useSelect(m) {\n const name = 'select'\n m.selectMultiple = creatorFactory(name, { mode: 'multiple' })\n m.selectTags = creatorFactory(name, { mode: 'tags' })\n m.selectCombobox = creatorFactory(name, { mode: 'combobox' })\n}\n\nfunction useUpload(maker) {\n const types = {\n image: ['image', 0],\n file: ['file', 0],\n uploadFileOne: ['file', 1],\n uploadImageOne: ['image', 1]\n }\n\n Object.keys(types).reduce((maker, key) => {\n maker[key] = creatorFactory('upload', (m) =>\n m.props({\n uploadType: types[key][0],\n maxLength: types[key][1]\n })\n )\n return maker\n }, maker)\n\n maker.uploadImage = maker.image\n maker.uploadFile = maker.file\n}\n\nuseAlias(maker)\nuseSlider(maker)\nuseFrame(maker)\nuseUpload(maker)\nuseSelect(maker)\n\nexport default maker\n","import extend from '@form-create/utils/lib/extend'\nimport is from '@form-create/utils/lib/type'\nimport { invoke } from '@longhongguo/form-create-core/src/frame/util'\nimport toArray from '@form-create/utils/lib/toarray'\n\nfunction tidyBtnProp(btn, def) {\n if (is.Boolean(btn)) btn = { show: btn }\n else if (!is.Undef(btn) && !is.Object(btn)) btn = { show: def }\n return btn\n}\n\nexport default function extendApi(api, h) {\n return {\n formEl() {\n return h.$manager.form()\n },\n wrapEl(id) {\n const ctx = h.getFieldCtx(id)\n if (!ctx) return\n return h.vm.refs[ctx.wrapRef]\n },\n validate(callback) {\n return new Promise((resolve, reject) => {\n const forms = api.children\n const all = [h.$manager.validate()]\n forms\n .filter((v) => !v.isScope)\n .forEach((v) => {\n all.push(v.validate())\n })\n Promise.all(all)\n .then(() => {\n resolve(true)\n callback && callback(true)\n })\n .catch((e) => {\n reject(e)\n callback && callback(e)\n h.vm.emit('validate-fail', e, { api })\n h.emitEvent('validate-fail', e, { api })\n })\n })\n },\n validateField(field, callback) {\n return new Promise((resolve, reject) => {\n const ctx = h.getFieldCtx(field)\n if (!ctx) return\n const sub = h.subForm[ctx.id]\n const all = [h.$manager.validateField(ctx.id)]\n toArray(sub)\n .filter((v) => !v.isScope)\n .forEach((v) => {\n all.push(v.validate())\n })\n Promise.all(all)\n .then(() => {\n resolve(null)\n callback && callback(null)\n })\n .catch((e) => {\n reject(e)\n callback && callback(e)\n h.vm.emit('validate-field-fail', e, { field, api })\n })\n })\n },\n clearValidateState(fields, clearSub = true) {\n api.helper.tidyFields(fields).forEach((field) => {\n if (clearSub) this.clearSubValidateState(field)\n h.getCtxs(field).forEach((ctx) => {\n h.$manager.clearValidateState(ctx)\n })\n })\n },\n clearSubValidateState(fields) {\n api.helper.tidyFields(fields).forEach((field) => {\n h.getCtxs(field).forEach((ctx) => {\n const subForm = h.subForm[ctx.id]\n if (!subForm) return\n if (Array.isArray(subForm)) {\n subForm.forEach((form) => {\n form.clearValidateState()\n })\n } else if (subForm) {\n subForm.clearValidateState()\n }\n })\n })\n },\n btn: {\n loading: (loading = true) => {\n api.submitBtnProps({ loading: !!loading })\n },\n disabled: (disabled = true) => {\n api.submitBtnProps({ disabled: !!disabled })\n },\n show: (isShow = true) => {\n api.submitBtnProps({ show: !!isShow })\n }\n },\n resetBtn: {\n loading: (loading = true) => {\n api.resetBtnProps({ loading: !!loading })\n },\n disabled: (disabled = true) => {\n api.resetBtnProps({ disabled: !!disabled })\n },\n show: (isShow = true) => {\n api.resetBtnProps({ show: !!isShow })\n }\n },\n submitBtnProps: (props = {}) => {\n let btn = tidyBtnProp(h.options.submitBtn, true)\n extend(btn, props)\n h.options.submitBtn = btn\n api.refreshOptions()\n },\n resetBtnProps: (props = {}) => {\n let btn = tidyBtnProp(h.options.resetBtn, false)\n extend(btn, props)\n h.options.resetBtn = btn\n api.refreshOptions()\n },\n submit(successFn, failFn) {\n return new Promise((resolve, reject) => {\n const promise =\n h.options.validateOnSubmit === false\n ? Promise.resolve()\n : api.validate()\n promise\n .then(() => {\n let formData = api.formData()\n h.beforeSubmit(formData)\n .then(() => {\n is.Function(successFn) && invoke(() => successFn(formData, api))\n is.Function(h.options.onSubmit) &&\n invoke(() => h.options.onSubmit(formData, api))\n h.vm.emit('submit', formData, api)\n resolve(formData)\n })\n .catch((e) => {})\n })\n .catch((...args) => {\n is.Function(failFn) && invoke(() => failFn(api, ...args))\n reject(...args)\n })\n })\n },\n /**\n * 封装请求工具,用于自定义校验规则等场景\n * 基于 frame/fetch.js 封装的 fetch 方法\n *\n * @param {string|object} config - 请求配置,可以是 URL 字符串或配置对象\n * @param {string} config.action - 请求地址(必需)\n * @param {string} config.method - 请求方法,默认 'get'\n * @param {object} config.data - 请求数据(POST/PUT等),用于表单或JSON格式\n * @param {object} config.query - 查询参数(GET请求)\n * @param {string} config.dataType - 数据类型:'json' 表示 JSON 格式(默认),其他值表示表单格式(FormData)\n * @param {object} config.headers - 请求头\n * @param {function|string} config.parse - 数据解析函数或路径字符串\n * @returns {Promise} 返回 Promise,resolve 时返回解析后的数据\n *\n * @example\n * // JSON 格式 POST 请求(默认)\n * await this.api.request({\n * action: '/api/check-username',\n * method: 'post',\n * data: { username: 'test' },\n * dataType: 'json' // 或不设置,默认 JSON\n * });\n *\n * @example\n * // 表单格式 POST 请求\n * await this.api.request({\n * action: '/api/check-username',\n * method: 'post',\n * data: { username: 'test' },\n * dataType: 'form' // 或任意非 'json' 的值,会使用 FormData\n * });\n *\n * @example\n * // 在自定义校验规则中使用\n * validator: async function(value, callback) {\n * try {\n * const result = await this.api.request({\n * action: '/api/check-username',\n * method: 'post',\n * data: { username: value }, // 使用 data,不是 params\n * dataType: 'form' // 表单形式\n * });\n * if (result.exists) {\n * callback('用户名已存在');\n * } else {\n * callback();\n * }\n * } catch (error) {\n * callback('校验失败,请稍后重试');\n * }\n * }\n */\n request(config) {\n // 如果传入的是字符串,转换为配置对象\n if (typeof config === 'string') {\n config = { action: config }\n }\n // 使用 api.fetch 方法,它内部使用 frame/fetch.js 封装的 asyncFetch\n return api.fetch(config)\n },\n // 节流,在指定时间间隔内,如果多次触发,只执行一次\n throttle(fn, delay) {\n let lastTime = 0\n return function (...args) {\n const context = this\n const now = Date.now()\n if (now - lastTime >= (delay || 0)) {\n lastTime = now\n fn.call(context, ...args)\n }\n }\n },\n // 防抖,在指定时间间隔内,如果多次触发,只执行最后一次\n debounce(fn, delay) {\n let timer = null\n return function (...args) {\n const context = this\n if (timer !== null) {\n clearTimeout(timer)\n }\n timer = setTimeout(() => {\n fn.call(context, ...args)\n timer = null\n }, delay || 0)\n }\n }\n }\n}\n","export default {\n autoComplete: 'value',\n cascader: 'value',\n inputNumber: 'value',\n inputPassword: 'value',\n textarea: 'value',\n rate: 'value',\n slider: 'value',\n treeSelect: 'value',\n switch: 'checked',\n}\n","import is from '@form-create/utils/lib/type';\n\nconst required = {\n name: 'required',\n load(inject, rule, api) {\n const val = parseVal(inject.getValue());\n if (val.required === false) {\n inject.clearProp();\n api.clearValidateState([rule.field]);\n } else {\n const validate = {\n required: true,\n validator(_, v) {\n return new Promise((resolve, reject) => {\n is.empty(v) ? reject(validate.message) : resolve();\n })\n },\n ...val,\n };\n const title = rule.__fc__.refRule?.__$title?.value;\n if (!validate.message) {\n validate.message = api.t('required', {title}) || (title + (api.getLocale() === 'en' ? ' is required' : '不能为空'));\n } else {\n const match = validate.message.match(/^\\{\\{\\s*\\$t\\.(.+)\\s*\\}\\}$/);\n if (match) {\n validate.message = api.t(match[1], {title});\n }\n }\n inject.getProp().validate = [validate];\n }\n api.sync(rule);\n },\n watch(...args) {\n required.load(...args);\n }\n}\n\nfunction parseVal(val) {\n if (is.Boolean(val)) {\n return {required: val}\n } else if (is.String(val)) {\n return {message: val};\n } else if (is.Undef(val)) {\n return {required: false};\n } else if (is.Function(val)) {\n return {validator: val};\n } else if (!is.Object(val)) {\n return {};\n } else {\n return val;\n }\n}\n\n\nexport default required\n","import components from '../components'\nimport parsers from '../parsers'\nimport alias from './alias'\nimport manager from './manager'\nimport FormCreateFactory from '@longhongguo/form-create-core/src/index'\nimport makers from './maker'\nimport '../style/index.css'\nimport extendApi from './api'\nimport modelFields from './modelFields'\nimport required from './provider'\n\nfunction install(FormCreate) {\n FormCreate.componentAlias(alias)\n\n Object.keys(modelFields).forEach((k) => {\n FormCreate.setModelField(k, modelFields[k])\n })\n\n components.forEach((component) => {\n FormCreate.component(component.name, component)\n })\n\n FormCreate.register(required)\n\n parsers.forEach((parser) => {\n FormCreate.parser(parser)\n })\n\n Object.keys(makers).forEach((name) => {\n FormCreate.maker[name] = makers[name]\n })\n\n if (typeof window !== 'undefined' && window.antd) {\n FormCreate.useApp((_, app) => {\n app.use(window.antd)\n })\n }\n}\n\nexport default function antdvFormCreate() {\n return FormCreateFactory({\n ui: 'process.env.UI',\n version: 'process.env.VERSION',\n manager,\n install,\n extendApi,\n attrs: {\n normal: ['col', 'wrap'],\n array: ['className'],\n key: ['title', 'info']\n }\n })\n}\n","import antdvFormCreate from './core/index';\n\nconst FormCreate = antdvFormCreate();\n\nif (typeof window !== 'undefined') {\n window.formCreate = FormCreate;\n}\n\nconst maker = FormCreate.maker;\n\nexport {maker}\n\nexport default FormCreate;\n"],"names":["script","name","_hoisted_1","class","_openBlock","openBlock","_createElementBlock","_cache","_createElementVNode","height","width","xmlns","viewBox","createElementVNode","d","fill","components","upload","frame","group","subForm","QuestionCircleOutlined","checkbox","modelField","mergeProp","ctx","props","prop","hasProperty","options","radio","select","fetchData","effectData","loading","disabled","render","children","newChildren","notFoundContent","$render","defaultRender","cascader","FORMAT_TYPE","date","month","week","quarter","year","datePicker","maker","reduce","initial","type","creatorFactory","dateRange","datetimeRange","m","showTime","picker","valueFormat","vNode","range","hidden","field","value","input","idate","indexOf","textarea","search","password","make","timePicker","tree","fieldNames","key","checkedKeys","rule","checkable","row","_","col","span","default","parsers","alias","tooltip","PRE","popover","button","icon","slider","rate","timeRangePicker","rangePicker","switch","inputNumber","treeSelect","inputPassword","formItem","form","autoComplete","transfer","array","object","tidy","is","String","[object Object]","show","isFalse","val","tidyRule","_rule","manager","validate","this","Promise","v","validateField","validateFields","clearValidateState","fItem","vm","refs","wrapRef","clearValidate","tidyOptions","forEach","opt","Object","tidyBool","def","info","placement","title","wrap","mergeProps","onPreview","originalOnPreview","sendPreviewMessage","file","window","parent","postMessage","url","uid","size","timestamp","Date","now","apply","arguments","getDefaultOptions","hideRequiredMark","layout","labelAlign","labelCol","wrapperCol","validateOnRuleChange","gutter","submitBtn","innerText","undefined","click","resetBtn","adapterValidate","validator","resolve","reject","err","update","on","submit","e","preventDefault","style","beforeRender","ref","$handle","extend","className","preview","model","formData","slotLen","setSlot","makeFormBtn","$r","getSlots","makeRow","makeWrap","uni","isTitle","_col","cls","item","hasFeedback","id","rules","injectValidate","mergeClass","label","makeInfo","makeCol","native","_ctx$refRule","_ctx$refRule2","titleProp","infoProp","isTip","titleSlot","getSlot","refRule","__$title","align","_ctx$refRule3","__$info","slot","_prop","vn","push","makeSubmitBtn","makeResetBtn","length","colon","api","t","marginLeft","fApi","resetFields","catch","tidyBtnProp","btn","Boolean","Undef","extendApi","h","formEl","$manager","wrapEl","getFieldCtx","callback","forms","all","filter","isScope","then","emit","emitEvent","sub","toArray","fields","clearSub","helper","tidyFields","clearSubValidateState","getCtxs","Array","isArray","submitBtnProps","isShow","resetBtnProps","refreshOptions","successFn","failFn","validateOnSubmit","beforeSubmit","Function","invoke","onSubmit","args","request","config","action","fetch","throttle","fn","delay","lastTime","context","call","debounce","timer","clearTimeout","setTimeout","auto","number","time","useAlias","useSlider","types","frameInputs","frameFiles","frameImages","frameInputOne","frameFileOne","frameImageOne","keys","maxLength","frameInput","frameFile","frameImage","useFrame","image","uploadFileOne","uploadImageOne","uploadType","uploadImage","uploadFile","useUpload","selectMultiple","mode","selectTags","selectCombobox","modelFields","required","load","inject","message","parseVal","getValue","clearProp","_rule$__fc__$refRule","empty","__fc__","match","getLocale","getProp","sync","watch","install","FormCreate","componentAlias","k","setModelField","component","register","parser","makers","antd","useApp","app","use","FormCreateFactory","ui","version","attrs","normal","formCreate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"form-create.js","sources":["../src/components/icon/QuestionCircleOutlined.vue","../src/components/icon/QuestionCircleOutlined.vue?vue&type=template&id=72badc20&lang.js","../src/components/index.js","../src/parsers/checkbox.js","../src/parsers/radio.js","../src/parsers/select.js","../src/parsers/cascader.js","../src/parsers/datePicker.js","../src/parsers/hidden.js","../src/parsers/input.js","../src/parsers/timePicker.js","../src/parsers/tree.js","../src/parsers/row.js","../src/parsers/timeRangePicker.js","../src/parsers/index.js","../src/parsers/rangePicker.js","../src/core/alias.js","../src/core/manager.js","../src/core/config.js","../src/core/maker.js","../src/core/api.js","../src/core/modelFields.js","../src/core/provider.js","../src/core/index.js","../src/index.js"],"sourcesContent":["<template>\n <span class=\"anticon\">\n <svg height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\">\n <path\n d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448s448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372s372 166.6 372 372s-166.6 372-372 372z\"\n fill=\"currentColor\"></path>\n <path\n d=\"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7c-21.2 8.1-39.2 22.3-52.1 40.9c-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0 1 30.9-44.8c59-22.7 97.1-74.7 97.1-132.5c.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1 0 80 0a40 40 0 1 0-80 0z\"\n fill=\"currentColor\"></path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: 'QuestionCircleOutlined'\n}\n</script>\n","<template>\n <span class=\"anticon\">\n <svg height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\">\n <path\n d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448s448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372s372 166.6 372 372s-166.6 372-372 372z\"\n fill=\"currentColor\"></path>\n <path\n d=\"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7c-21.2 8.1-39.2 22.3-52.1 40.9c-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0 1 30.9-44.8c59-22.7 97.1-74.7 97.1-132.5c.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1 0 80 0a40 40 0 1 0-80 0z\"\n fill=\"currentColor\"></path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: 'QuestionCircleOutlined'\n}\n</script>\n","import upload from '@form-create/component-antdv-upload/src/index'\nimport frame from '@form-create/component-antdv-frame/src/index'\nimport group from '@form-create/component-antdv-group/src/index'\nimport subForm from '@form-create/component-subform/src/index'\nimport QuestionCircleOutlined from './icon/QuestionCircleOutlined.vue'\n\nexport default [upload, frame, group, subForm, QuestionCircleOutlined]\n","import {hasProperty} from '@form-create/utils/lib/type';\r\n\r\nexport default {\r\n name: 'checkbox',\r\n modelField: 'value',\r\n mergeProp(ctx) {\r\n const props = ctx.prop.props;\r\n if (!hasProperty(props, 'options'))\r\n props.options = ctx.prop.options || [];\r\n }\r\n\r\n}\r\n","import checkbox from './checkbox';\n\nexport default {\n ...checkbox, name: 'radio'\n};\n","import checkbox from './checkbox'\nimport { hasProperty } from '@form-create/utils/lib/type'\n\nexport default {\n ...checkbox,\n name: 'select',\n mergeProp(ctx) {\n const props = ctx.prop.props\n if (!hasProperty(props, 'options')) props.options = ctx.prop.options || []\n\n // 检测 loading 状态:从 effectData('fetch') 中获取 loading 状态\n const fetchData = ctx.effectData('fetch')\n const isLoading = fetchData && fetchData.loading === true\n\n // 如果正在加载,设置 disabled 和 loading\n if (isLoading) {\n props.disabled = true\n props.loading = true\n }\n },\n render(children, ctx) {\n // 检测 loading 状态(与 mergeProp 中的逻辑保持一致)\n const fetchData = ctx.effectData('fetch')\n const isLoading = fetchData && fetchData.loading === true\n\n // 如果有 loading 插槽且正在加载,将 loading 插槽传递给组件的 notFoundContent 插槽\n if (isLoading && children.loading) {\n // 将 loading 插槽合并到 children 中,作为 notFoundContent\n const newChildren = { ...children }\n newChildren.notFoundContent = children.loading\n return ctx.$render.defaultRender(ctx, newChildren)\n }\n\n // 调用默认渲染\n return ctx.$render.defaultRender(ctx, children)\n }\n}\n","import { hasProperty } from '@form-create/utils/lib/type'\r\n\r\nexport default {\r\n name: 'cascader',\r\n mergeProp(ctx) {\r\n const props = ctx.prop.props\r\n if (!hasProperty(props, 'options')) props.options = ctx.prop.options || []\r\n\r\n // 检测 loading 状态:从 effectData('fetch') 中获取 loading 状态\r\n const fetchData = ctx.effectData('fetch')\r\n const isLoading = fetchData && fetchData.loading === true\r\n\r\n // 如果正在加载,设置 disabled 和 loading\r\n if (isLoading) {\r\n props.disabled = true\r\n props.loading = true\r\n }\r\n },\r\n render(children, ctx) {\r\n // 检测 loading 状态(与 mergeProp 中的逻辑保持一致)\r\n const fetchData = ctx.effectData('fetch')\r\n const isLoading = fetchData && fetchData.loading === true\r\n\r\n // 如果有 loading 插槽且正在加载,将 loading 插槽传递给组件的 notFoundContent 插槽\r\n if (isLoading && children.loading) {\r\n // 将 loading 插槽合并到 children 中,作为 notFoundContent\r\n const newChildren = { ...children }\r\n newChildren.notFoundContent = children.loading\r\n return ctx.$render.defaultRender(ctx, newChildren)\r\n }\r\n\r\n // 调用默认渲染\r\n return ctx.$render.defaultRender(ctx, children)\r\n }\r\n}\r\n","import { creatorFactory } from '@longhongguo/form-create-core/src/index'\n\nconst FORMAT_TYPE = {\n date: 'YYYY-MM-DD',\n month: 'YYYY-MM',\n week: 'YYYY-wo',\n quarter: 'YYYY-qQ',\n year: 'YYYY'\n}\n\nconst name = 'datePicker'\n\nexport default {\n name,\n maker: (function () {\n return ['date', 'month', 'week'].reduce(\n (initial, type) => {\n initial[type] = creatorFactory(name, { type })\n return initial\n },\n {\n dateRange: creatorFactory(name, { type: 'range' }),\n datetimeRange: creatorFactory(name, (m) =>\n m.props({ type: 'range', showTime: true })\n )\n }\n )\n })(),\n modelField: 'value',\n mergeProp(ctx) {\n const props = ctx.prop.props\n const type = props.type || props.picker\n if (!props.valueFormat) {\n props.valueFormat =\n (FORMAT_TYPE[type] || FORMAT_TYPE['date']) +\n (props.showTime && (!type || type === 'date') ? ' HH:mm:ss' : '')\n }\n },\n render(children, ctx) {\n return ctx.$render.vNode[\n (ctx.prop.props.range === true ? 'range' : 'date') + 'Picker'\n ](ctx.prop, children)\n }\n}\n","import { creatorFactory } from '@longhongguo/form-create-core/src/index'\n\nconst name = 'hidden'\n\nexport default {\n name,\n maker: {\n [name]: (field, value) => creatorFactory(name)('', field, value)\n },\n render() {\n return []\n }\n}\n","import { creatorFactory } from '@longhongguo/form-create-core/src/index'\n\nconst name = 'input'\nexport default {\n name,\n maker: (function () {\n return ['password', 'url', 'email', 'text', 'textarea', 'search'].reduce(\n (maker, type) => {\n maker[type] = creatorFactory(name, { type })\n return maker\n },\n {\n idate: creatorFactory(name, { type: 'date' })\n }\n )\n })(),\n modelField: 'value',\n render(children, ctx) {\n let type = ctx.prop.props.type\n if (['textarea', 'search', 'password'].indexOf(type) === -1) type = 'input'\n\n type =\n {\n textarea: 'aTextarea',\n search: 'aInputSearch',\n password: 'aInputPassword'\n }[type] || 'aInput'\n return ctx.$render.vNode.make(type, ctx.prop, children)\n }\n}\n","export default {\n name: 'timePicker',\n modelField: 'value',\n mergeProp(ctx) {\n const props = ctx.prop.props;\n if (!props.valueFormat) {\n props.valueFormat = 'HH:mm:ss';\n }\n },\n render(children, ctx) {\n return ctx.$render.vNode['time' +( ctx.prop.props.range === true ? 'Range' : '') + 'Picker'](ctx.prop, children);\n }\n\n}\n\n","export default {\n name: 'tree',\n modelField: 'checkedKeys',\n mergeProp(ctx) {\n const props = ctx.prop.props;\n if (!props.fieldNames)\n props.fieldNames = {\n key: 'id'\n };\n else if (!props.fieldNames.key) props.fieldNames.key = 'id';\n props.checkedKeys = ctx.rule.value;\n props.checkable = true;\n },\n\n}\n\n","export default {\n name: 'FcRow',\n render(_, ctx) {\n return ctx.vNode.col({props: {span: 24}}, {\n default: () => [\n ctx.vNode.row(ctx.prop, _)\n ]\n })\n }\n}\n","import timePicker from './timePicker';\n\nconst name = 'timeRangePicker';\n\nexport default {\n ...timePicker,\n name,\n render(children, ctx) {\n return ctx.$render.vNode['timeRangePicker'](ctx.prop, children);\n }\n}\n","import checkbox from './checkbox'\nimport radio from './radio'\nimport select from './select'\nimport cascader from './cascader'\nimport datePicker from './datePicker'\nimport hidden from './hidden'\nimport input from './input'\nimport timePicker from './timePicker'\nimport tree from './tree'\nimport row from './row'\nimport rangePicker from './rangePicker'\nimport timeRangePicker from './timeRangePicker'\n\nexport default [\n checkbox,\n datePicker,\n rangePicker,\n hidden,\n input,\n timePicker,\n timeRangePicker,\n tree,\n radio,\n select,\n cascader,\n row\n]\n","import datePicker from './datePicker';\n\nconst name = 'rangePicker';\n\nexport default {\n ...datePicker,\n name,\n maker: {},\n render(children, ctx) {\n return ctx.$render.vNode['rangePicker'](ctx.prop, children);\n }\n}\n","const PRE = 'a'\nexport default {\n tooltip: PRE + 'Tooltip',\n popover: PRE + 'Popover',\n button: PRE + 'Button',\n icon: PRE + 'Icon',\n slider: PRE + 'Slider',\n rate: PRE + 'Rate',\n upload: 'fcUpload',\n cascader: PRE + 'Cascader',\n timePicker: PRE + 'TimePicker',\n timeRangePicker: PRE + 'TimeRangePicker',\n datePicker: PRE + 'DatePicker',\n rangePicker: PRE + 'RangePicker',\n switch: PRE + 'Switch',\n select: PRE + 'Select',\n checkbox: PRE + 'CheckboxGroup',\n radio: PRE + 'RadioGroup',\n input: PRE + 'Input',\n inputNumber: PRE + 'InputNumber',\n treeSelect: PRE + 'TreeSelect',\n search: PRE + 'InputSearch',\n inputPassword: PRE + 'InputPassword',\n textarea: PRE + 'Textarea',\n formItem: PRE + 'FormItem',\n form: PRE + 'Form',\n frame: 'fcFrame',\n col: PRE + 'Col',\n row: PRE + 'Row',\n tree: PRE + 'Tree',\n autoComplete: PRE + 'AutoComplete',\n transfer: PRE + 'Transfer',\n group: 'fcGroup',\n array: 'fcGroup',\n subForm: 'fcSubForm',\n object: 'fcSubForm'\n}\n","import getConfig from './config'\r\nimport mergeProps from '@form-create/utils/lib/mergeprops'\r\nimport is, { hasProperty } from '@form-create/utils/lib/type'\r\nimport extend from '@form-create/utils/lib/extend'\r\n\r\nfunction isTooltip(info) {\r\n return info.type === 'tooltip'\r\n}\r\n\r\nfunction tidy(props, name) {\r\n if (!hasProperty(props, name)) return\r\n if (is.String(props[name])) {\r\n props[name] = { [name]: props[name], show: true }\r\n }\r\n}\r\n\r\nfunction isFalse(val) {\r\n return val === false\r\n}\r\n\r\nfunction tidyBool(opt, name) {\r\n if (hasProperty(opt, name) && !is.Object(opt[name])) {\r\n opt[name] = { show: !!opt[name] }\r\n }\r\n}\r\n\r\nfunction tidyRule(rule) {\r\n const _rule = { ...rule }\r\n delete _rule.children\r\n return _rule\r\n}\r\n\r\nexport default {\r\n validate() {\r\n const form = this.form()\r\n if (form) {\r\n return form.validate()\r\n } else {\r\n return new Promise((v) => v())\r\n }\r\n },\r\n validateField(field) {\r\n const form = this.form()\r\n if (form) {\r\n return form.validateFields(field)\r\n } else {\r\n return new Promise((v) => v())\r\n }\r\n },\r\n clearValidateState(ctx) {\r\n const fItem = this.vm.refs[ctx.wrapRef]\r\n if (fItem) {\r\n fItem.clearValidate()\r\n }\r\n },\r\n tidyOptions(options) {\r\n ;['submitBtn', 'resetBtn', 'row', 'info', 'wrap', 'col', 'title'].forEach(\r\n (name) => {\r\n tidyBool(options, name)\r\n }\r\n )\r\n return options\r\n },\r\n tidyRule({ prop }) {\r\n tidy(prop, 'title')\r\n tidy(prop, 'info')\r\n return prop\r\n },\r\n mergeProp(ctx) {\r\n const def = {\r\n info: {\r\n type: 'popover',\r\n placement: 'topLeft',\r\n icon: 'QuestionCircleOutlined'\r\n },\r\n title: {},\r\n col: { span: 24 },\r\n wrap: {}\r\n }\r\n ;['info', 'wrap', 'col', 'title'].forEach((name) => {\r\n ctx.prop[name] = mergeProps(\r\n [this.options[name] || {}, ctx.prop[name] || {}],\r\n def[name]\r\n )\r\n })\r\n\r\n // 为 upload 组件自动添加 onPreview,确保始终向父窗口发送预览通知\r\n if (ctx.rule.type === 'upload' && !ctx.prop.props.onPreview) {\r\n const sendPreviewMessage = function (file) {\r\n if (window.parent && window.parent !== window) {\r\n window.parent.postMessage(\r\n {\r\n type: 'upload-preview',\r\n file: {\r\n url: file.url,\r\n name: file.name,\r\n uid: file.uid,\r\n size: file.size,\r\n type: file.type\r\n },\r\n timestamp: Date.now()\r\n },\r\n '*'\r\n )\r\n }\r\n }\r\n ctx.prop.props.onPreview = function (file) {\r\n sendPreviewMessage(file)\r\n // 不执行默认预览,只发送消息\r\n }\r\n } else if (ctx.rule.type === 'upload' && ctx.prop.props.onPreview) {\r\n // 如果用户已经设置了 onPreview,包装它以确保先发送消息\r\n const originalOnPreview = ctx.prop.props.onPreview\r\n const sendPreviewMessage = function (file) {\r\n if (window.parent && window.parent !== window) {\r\n window.parent.postMessage(\r\n {\r\n type: 'upload-preview',\r\n file: {\r\n url: file.url,\r\n name: file.name,\r\n uid: file.uid,\r\n size: file.size,\r\n type: file.type\r\n },\r\n timestamp: Date.now()\r\n },\r\n '*'\r\n )\r\n }\r\n }\r\n ctx.prop.props.onPreview = function (file) {\r\n sendPreviewMessage(file)\r\n if (originalOnPreview && typeof originalOnPreview === 'function') {\r\n originalOnPreview.apply(this, arguments)\r\n }\r\n }\r\n }\r\n },\r\n getDefaultOptions() {\r\n return getConfig()\r\n },\r\n adapterValidate(validate, validator) {\r\n validate.validator = (rule, value) => {\r\n return new Promise((resolve, reject) => {\r\n const callback = (err) => {\r\n if (err) {\r\n reject(err)\r\n } else {\r\n resolve()\r\n }\r\n }\r\n return validator(value, callback)\r\n })\r\n }\r\n return validate\r\n },\r\n update() {\r\n const form = this.options.form\r\n this.rule = {\r\n props: { ...form },\r\n on: {\r\n submit: (e) => {\r\n e.preventDefault()\r\n }\r\n },\r\n style: form.style,\r\n type: 'form'\r\n }\r\n },\r\n beforeRender() {\r\n const { key, ref, $handle } = this\r\n const form = this.options.form\r\n extend(this.rule, {\r\n key,\r\n ref,\r\n class: [\r\n form.className,\r\n form.class,\r\n 'form-create',\r\n this.$handle.preview ? 'is-preview' : ''\r\n ]\r\n })\r\n extend(this.rule.props, {\r\n model: $handle.formData\r\n })\r\n },\r\n render(children) {\r\n if (children.slotLen() && !this.$handle.preview) {\r\n children.setSlot(undefined, () => this.makeFormBtn())\r\n }\r\n return this.$r(\r\n this.rule,\r\n isFalse(this.options.row.show)\r\n ? children.getSlots()\r\n : [this.makeRow(children)]\r\n )\r\n },\r\n makeWrap(ctx, children) {\r\n const rule = ctx.prop\r\n const uni = `${this.key}${ctx.key}`\r\n const col = rule.col\r\n const isTitle = this.isTitle(rule) && rule.wrap.title !== false\r\n const { layout, col: _col } = this.rule.props\r\n const cls = rule.wrap.class\r\n delete rule.wrap.class\r\n delete rule.wrap.title\r\n const item = isFalse(rule.wrap.show)\r\n ? children\r\n : this.$r(\r\n mergeProps([\r\n rule.wrap,\r\n {\r\n props: {\r\n ...tidyRule(rule.wrap || {}),\r\n hasFeedback: rule.hasFeedback || false,\r\n name: ctx.id,\r\n rules: ctx.injectValidate(),\r\n ...(layout !== 'horizontal'\r\n ? { labelCol: {}, wrapperCol: {} }\r\n : {})\r\n },\r\n class: this.$render.mergeClass(\r\n cls || rule.className,\r\n 'fc-form-item'\r\n ),\r\n key: `${uni}fi`,\r\n ref: ctx.wrapRef,\r\n type: 'formItem'\r\n }\r\n ]),\r\n {\r\n default: () => children,\r\n ...(isTitle ? { label: () => this.makeInfo(rule, uni, ctx) } : {})\r\n }\r\n )\r\n return layout === 'inline' || isFalse(_col) || isFalse(col.show)\r\n ? item\r\n : this.makeCol(rule, uni, [item])\r\n },\r\n isTitle(rule) {\r\n if (this.options.form.title === false) return false\r\n const title = rule.title\r\n return !((!title.title && !title.native) || isFalse(title.show))\r\n },\r\n makeInfo(rule, uni, ctx) {\r\n const titleProp = { ...rule.title }\r\n const infoProp = { ...rule.info }\r\n if (this.options.form.title === false) return false\r\n if ((!titleProp.title && !titleProp.native) || isFalse(titleProp.show))\r\n return\r\n const isTip = isTooltip(infoProp)\r\n const titleSlot = this.getSlot('title')\r\n const children = [\r\n titleSlot\r\n ? titleSlot({\r\n title: ctx.refRule?.__$title?.value,\r\n rule: ctx.rule,\r\n options: this.options\r\n })\r\n : ctx.refRule?.__$title?.value\r\n ]\r\n\r\n if (\r\n !isFalse(infoProp.show) &&\r\n (infoProp.info || infoProp.native) &&\r\n !isFalse(infoProp.icon)\r\n ) {\r\n const prop = {\r\n type: infoProp.type || 'popover',\r\n props: tidyRule(infoProp),\r\n key: `${uni}pop`\r\n }\r\n\r\n delete prop.props.icon\r\n delete prop.props.show\r\n delete prop.props.info\r\n delete prop.props.align\r\n delete prop.props.native\r\n\r\n const field = isTip ? 'title' : 'content'\r\n if (infoProp.info && !hasProperty(prop.props, field)) {\r\n prop.props[field] = ctx.refRule?.__$info?.value\r\n }\r\n children[infoProp.align !== 'left' ? 'unshift' : 'push'](\r\n this.$r(mergeProps([infoProp, prop]), {\r\n [titleProp.slot || 'default']: () =>\r\n this.$r({\r\n type:\r\n infoProp.icon === true\r\n ? 'QuestionCircleOutlined'\r\n : infoProp.icon || '',\r\n props: {\r\n type:\r\n infoProp.icon === true\r\n ? 'QuestionCircleOutlined'\r\n : infoProp.icon\r\n },\r\n key: `${uni}i`\r\n })\r\n })\r\n )\r\n }\r\n\r\n const _prop = mergeProps([\r\n titleProp,\r\n {\r\n props: tidyRule(titleProp),\r\n key: `${uni}tit`,\r\n class: 'fc-form-title',\r\n type: titleProp.type || 'span'\r\n }\r\n ])\r\n\r\n delete _prop.props.show\r\n delete _prop.props.title\r\n delete _prop.props.native\r\n\r\n return this.$r(_prop, children)\r\n },\r\n makeCol(rule, uni, children) {\r\n const col = rule.col\r\n return this.$r(\r\n {\r\n class: this.$render.mergeClass(col.class, 'fc-form-col'),\r\n type: 'col',\r\n props: col || { span: 24 },\r\n key: `${uni}col`\r\n },\r\n children\r\n )\r\n },\r\n makeRow(children) {\r\n const row = this.options.row || {}\r\n return this.$r(\r\n {\r\n type: 'row',\r\n props: row,\r\n class: this.$render.mergeClass(row.class, 'fc-form-row'),\r\n key: `${this.key}row`\r\n },\r\n children\r\n )\r\n },\r\n makeFormBtn() {\r\n let vn = []\r\n if (!isFalse(this.options.submitBtn.show)) {\r\n vn.push(this.makeSubmitBtn())\r\n }\r\n if (!isFalse(this.options.resetBtn.show)) {\r\n vn.push(this.makeResetBtn())\r\n }\r\n if (!vn.length) {\r\n return\r\n }\r\n let { labelCol, wrapperCol, layout } = this.rule.props\r\n if (layout !== 'horizontal') {\r\n labelCol = wrapperCol = {}\r\n }\r\n const item = this.$r(\r\n {\r\n type: 'formItem',\r\n class: 'fc-form-item fc-form-footer',\r\n key: `${this.key}fb`,\r\n props: {\r\n labelCol,\r\n wrapperCol,\r\n label: ' ',\r\n colon: false\r\n }\r\n },\r\n vn\r\n )\r\n\r\n return layout === 'inline'\r\n ? item\r\n : this.$r(\r\n {\r\n type: 'col',\r\n class: 'fc-form-col',\r\n props: { span: 24 },\r\n key: `${this.key}fc`\r\n },\r\n [item]\r\n )\r\n },\r\n\r\n makeResetBtn() {\r\n const resetBtn = { ...this.options.resetBtn }\r\n const innerText =\r\n resetBtn.innerText || this.$handle.api.t('reset') || '重置'\r\n delete resetBtn.innerText\r\n delete resetBtn.click\r\n delete resetBtn.col\r\n delete resetBtn.show\r\n return this.$r(\r\n {\r\n type: 'button',\r\n props: resetBtn,\r\n class: 'fc-reset-btn',\r\n style: { width: resetBtn.width, marginLeft: '10px' },\r\n on: {\r\n click: () => {\r\n const fApi = this.$handle.api\r\n this.options.resetBtn.click\r\n ? this.options.resetBtn.click(fApi)\r\n : fApi.resetFields()\r\n }\r\n },\r\n key: `${this.key}b2`\r\n },\r\n [innerText]\r\n )\r\n },\r\n makeSubmitBtn() {\r\n const submitBtn = { ...this.options.submitBtn }\r\n const innerText =\r\n submitBtn.innerText || this.$handle.api.t('submit') || '提交'\r\n delete submitBtn.innerText\r\n delete submitBtn.click\r\n delete submitBtn.col\r\n delete submitBtn.show\r\n return this.$r(\r\n {\r\n type: 'button',\r\n props: submitBtn,\r\n class: 'fc-submit-btn',\r\n style: { width: submitBtn.width },\r\n on: {\r\n click: () => {\r\n const fApi = this.$handle.api\r\n this.options.submitBtn.click\r\n ? this.options.submitBtn.click(fApi)\r\n : fApi.submit().catch(() => {})\r\n }\r\n },\r\n key: `${this.key}b1`\r\n },\r\n [innerText]\r\n )\r\n }\r\n}\r\n","const UNDEF = undefined\n\nexport default function getConfig() {\n return {\n form: {\n hideRequiredMark: false,\n layout: 'horizontal',\n labelAlign: 'right',\n labelCol: {\n span: 3\n },\n wrapperCol: {\n span: 21\n },\n validateOnRuleChange: true\n },\n row: {\n gutter: 0\n },\n submitBtn: {\n disabled: false,\n loading: false,\n type: 'primary',\n innerText: '',\n show: false,\n col: UNDEF,\n click: UNDEF\n },\n resetBtn: {\n disabled: false,\n loading: false,\n type: 'default',\n innerText: '',\n show: false,\n col: UNDEF,\n click: UNDEF\n }\n }\n}\n","import { creatorFactory } from '@longhongguo/form-create-core/src/index'\n\nconst maker = {}\n\nfunction useAlias(maker) {\n ;[\n 'treeSelect',\n 'upload',\n 'frame',\n 'autoComplete',\n 'cascader',\n 'datePicker',\n 'frame',\n 'inputNumber',\n 'inputPassword',\n 'radio',\n 'rate',\n 'switch',\n 'rate',\n 'slider',\n 'timePicker'\n ].reduce((maker, name) => {\n maker[name] = creatorFactory(name)\n return maker\n }, maker)\n maker.auto = maker.autoComplete\n maker.number = maker.inputNumber\n maker.time = maker.timePicker\n maker.password = maker.inputPassword\n}\n\nfunction useFrame(maker) {\n const types = {\n frameInputs: ['input', 0],\n frameFiles: ['file', 0],\n frameImages: ['image', 0],\n frameInputOne: ['input', 1],\n frameFileOne: ['file', 1],\n frameImageOne: ['image', 1]\n }\n\n Object.keys(types).reduce((maker, key) => {\n maker[key] = creatorFactory('frame', (m) =>\n m.props({ type: types[key][0], maxLength: types[key][1] })\n )\n return maker\n }, maker)\n\n maker.frameInput = maker.frameInputs\n maker.frameFile = maker.frameFiles\n maker.frameImage = maker.frameImages\n}\n\nfunction useSlider(maker) {\n maker['sliderRange'] = creatorFactory('slider', { range: true })\n}\n\nfunction useSelect(m) {\n const name = 'select'\n m.selectMultiple = creatorFactory(name, { mode: 'multiple' })\n m.selectTags = creatorFactory(name, { mode: 'tags' })\n m.selectCombobox = creatorFactory(name, { mode: 'combobox' })\n}\n\nfunction useUpload(maker) {\n const types = {\n image: ['image', 0],\n file: ['file', 0],\n uploadFileOne: ['file', 1],\n uploadImageOne: ['image', 1]\n }\n\n Object.keys(types).reduce((maker, key) => {\n maker[key] = creatorFactory('upload', (m) =>\n m.props({\n uploadType: types[key][0],\n maxLength: types[key][1]\n })\n )\n return maker\n }, maker)\n\n maker.uploadImage = maker.image\n maker.uploadFile = maker.file\n}\n\nuseAlias(maker)\nuseSlider(maker)\nuseFrame(maker)\nuseUpload(maker)\nuseSelect(maker)\n\nexport default maker\n","import extend from '@form-create/utils/lib/extend'\nimport is from '@form-create/utils/lib/type'\nimport { invoke } from '@longhongguo/form-create-core/src/frame/util'\nimport toArray from '@form-create/utils/lib/toarray'\n\nfunction tidyBtnProp(btn, def) {\n if (is.Boolean(btn)) btn = { show: btn }\n else if (!is.Undef(btn) && !is.Object(btn)) btn = { show: def }\n return btn\n}\n\nexport default function extendApi(api, h) {\n return {\n formEl() {\n return h.$manager.form()\n },\n wrapEl(id) {\n const ctx = h.getFieldCtx(id)\n if (!ctx) return\n return h.vm.refs[ctx.wrapRef]\n },\n validate(callback) {\n return new Promise((resolve, reject) => {\n const forms = api.children\n const all = [h.$manager.validate()]\n forms\n .filter((v) => !v.isScope)\n .forEach((v) => {\n all.push(v.validate())\n })\n Promise.all(all)\n .then(() => {\n resolve(true)\n callback && callback(true)\n })\n .catch((e) => {\n reject(e)\n callback && callback(e)\n h.vm.emit('validate-fail', e, { api })\n h.emitEvent('validate-fail', e, { api })\n })\n })\n },\n validateField(field, callback) {\n return new Promise((resolve, reject) => {\n const ctx = h.getFieldCtx(field)\n if (!ctx) return\n const sub = h.subForm[ctx.id]\n const all = [h.$manager.validateField(ctx.id)]\n toArray(sub)\n .filter((v) => !v.isScope)\n .forEach((v) => {\n all.push(v.validate())\n })\n Promise.all(all)\n .then(() => {\n resolve(null)\n callback && callback(null)\n })\n .catch((e) => {\n reject(e)\n callback && callback(e)\n h.vm.emit('validate-field-fail', e, { field, api })\n })\n })\n },\n clearValidateState(fields, clearSub = true) {\n api.helper.tidyFields(fields).forEach((field) => {\n if (clearSub) this.clearSubValidateState(field)\n h.getCtxs(field).forEach((ctx) => {\n h.$manager.clearValidateState(ctx)\n })\n })\n },\n clearSubValidateState(fields) {\n api.helper.tidyFields(fields).forEach((field) => {\n h.getCtxs(field).forEach((ctx) => {\n const subForm = h.subForm[ctx.id]\n if (!subForm) return\n if (Array.isArray(subForm)) {\n subForm.forEach((form) => {\n form.clearValidateState()\n })\n } else if (subForm) {\n subForm.clearValidateState()\n }\n })\n })\n },\n btn: {\n loading: (loading = true) => {\n api.submitBtnProps({ loading: !!loading })\n },\n disabled: (disabled = true) => {\n api.submitBtnProps({ disabled: !!disabled })\n },\n show: (isShow = true) => {\n api.submitBtnProps({ show: !!isShow })\n }\n },\n resetBtn: {\n loading: (loading = true) => {\n api.resetBtnProps({ loading: !!loading })\n },\n disabled: (disabled = true) => {\n api.resetBtnProps({ disabled: !!disabled })\n },\n show: (isShow = true) => {\n api.resetBtnProps({ show: !!isShow })\n }\n },\n submitBtnProps: (props = {}) => {\n let btn = tidyBtnProp(h.options.submitBtn, true)\n extend(btn, props)\n h.options.submitBtn = btn\n api.refreshOptions()\n },\n resetBtnProps: (props = {}) => {\n let btn = tidyBtnProp(h.options.resetBtn, false)\n extend(btn, props)\n h.options.resetBtn = btn\n api.refreshOptions()\n },\n submit(successFn, failFn) {\n return new Promise((resolve, reject) => {\n const promise =\n h.options.validateOnSubmit === false\n ? Promise.resolve()\n : api.validate()\n promise\n .then(() => {\n let formData = api.formData()\n h.beforeSubmit(formData)\n .then(() => {\n is.Function(successFn) && invoke(() => successFn(formData, api))\n is.Function(h.options.onSubmit) &&\n invoke(() => h.options.onSubmit(formData, api))\n h.vm.emit('submit', formData, api)\n resolve(formData)\n })\n .catch((e) => {})\n })\n .catch((...args) => {\n is.Function(failFn) && invoke(() => failFn(api, ...args))\n reject(...args)\n })\n })\n },\n /**\n * 封装请求工具,用于自定义校验规则等场景\n * 基于 frame/fetch.js 封装的 fetch 方法\n *\n * @param {string|object} config - 请求配置,可以是 URL 字符串或配置对象\n * @param {string} config.action - 请求地址(必需)\n * @param {string} config.method - 请求方法,默认 'get'\n * @param {object} config.data - 请求数据(POST/PUT等),用于表单或JSON格式\n * @param {object} config.query - 查询参数(GET请求)\n * @param {string} config.dataType - 数据类型:'json' 表示 JSON 格式(默认),其他值表示表单格式(FormData)\n * @param {object} config.headers - 请求头\n * @param {function|string} config.parse - 数据解析函数或路径字符串\n * @returns {Promise} 返回 Promise,resolve 时返回解析后的数据\n *\n * @example\n * // JSON 格式 POST 请求(默认)\n * await this.api.request({\n * action: '/api/check-username',\n * method: 'post',\n * data: { username: 'test' },\n * dataType: 'json' // 或不设置,默认 JSON\n * });\n *\n * @example\n * // 表单格式 POST 请求\n * await this.api.request({\n * action: '/api/check-username',\n * method: 'post',\n * data: { username: 'test' },\n * dataType: 'form' // 或任意非 'json' 的值,会使用 FormData\n * });\n *\n * @example\n * // 在自定义校验规则中使用\n * validator: async function(value, callback) {\n * try {\n * const result = await this.api.request({\n * action: '/api/check-username',\n * method: 'post',\n * data: { username: value }, // 使用 data,不是 params\n * dataType: 'form' // 表单形式\n * });\n * if (result.exists) {\n * callback('用户名已存在');\n * } else {\n * callback();\n * }\n * } catch (error) {\n * callback('校验失败,请稍后重试');\n * }\n * }\n */\n request(config) {\n // 如果传入的是字符串,转换为配置对象\n if (typeof config === 'string') {\n config = { action: config }\n }\n // 使用 api.fetch 方法,它内部使用 frame/fetch.js 封装的 asyncFetch\n return api.fetch(config)\n },\n // 节流,在指定时间间隔内,如果多次触发,只执行一次\n throttle(fn, delay) {\n let lastTime = 0\n return function (...args) {\n const context = this\n const now = Date.now()\n if (now - lastTime >= (delay || 0)) {\n lastTime = now\n fn.call(context, ...args)\n }\n }\n },\n // 防抖,在指定时间间隔内,如果多次触发,只执行最后一次\n debounce(fn, delay) {\n let timer = null\n return function (...args) {\n const context = this\n if (timer !== null) {\n clearTimeout(timer)\n }\n timer = setTimeout(() => {\n fn.call(context, ...args)\n }, delay || 0)\n }\n }\n }\n}\n","export default {\n autoComplete: 'value',\n cascader: 'value',\n inputNumber: 'value',\n inputPassword: 'value',\n textarea: 'value',\n rate: 'value',\n slider: 'value',\n treeSelect: 'value',\n switch: 'checked',\n}\n","import is from '@form-create/utils/lib/type';\n\nconst required = {\n name: 'required',\n load(inject, rule, api) {\n const val = parseVal(inject.getValue());\n if (val.required === false) {\n inject.clearProp();\n api.clearValidateState([rule.field]);\n } else {\n const validate = {\n required: true,\n validator(_, v) {\n return new Promise((resolve, reject) => {\n is.empty(v) ? reject(validate.message) : resolve();\n })\n },\n ...val,\n };\n const title = rule.__fc__.refRule?.__$title?.value;\n if (!validate.message) {\n validate.message = api.t('required', {title}) || (title + (api.getLocale() === 'en' ? ' is required' : '不能为空'));\n } else {\n const match = validate.message.match(/^\\{\\{\\s*\\$t\\.(.+)\\s*\\}\\}$/);\n if (match) {\n validate.message = api.t(match[1], {title});\n }\n }\n inject.getProp().validate = [validate];\n }\n api.sync(rule);\n },\n watch(...args) {\n required.load(...args);\n }\n}\n\nfunction parseVal(val) {\n if (is.Boolean(val)) {\n return {required: val}\n } else if (is.String(val)) {\n return {message: val};\n } else if (is.Undef(val)) {\n return {required: false};\n } else if (is.Function(val)) {\n return {validator: val};\n } else if (!is.Object(val)) {\n return {};\n } else {\n return val;\n }\n}\n\n\nexport default required\n","import components from '../components'\nimport parsers from '../parsers'\nimport alias from './alias'\nimport manager from './manager'\nimport FormCreateFactory from '@longhongguo/form-create-core/src/index'\nimport makers from './maker'\nimport '../style/index.css'\nimport extendApi from './api'\nimport modelFields from './modelFields'\nimport required from './provider'\n\nfunction install(FormCreate) {\n FormCreate.componentAlias(alias)\n\n Object.keys(modelFields).forEach((k) => {\n FormCreate.setModelField(k, modelFields[k])\n })\n\n components.forEach((component) => {\n FormCreate.component(component.name, component)\n })\n\n FormCreate.register(required)\n\n parsers.forEach((parser) => {\n FormCreate.parser(parser)\n })\n\n Object.keys(makers).forEach((name) => {\n FormCreate.maker[name] = makers[name]\n })\n\n if (typeof window !== 'undefined' && window.antd) {\n FormCreate.useApp((_, app) => {\n app.use(window.antd)\n })\n }\n}\n\nexport default function antdvFormCreate() {\n return FormCreateFactory({\n ui: 'process.env.UI',\n version: 'process.env.VERSION',\n manager,\n install,\n extendApi,\n attrs: {\n normal: ['col', 'wrap'],\n array: ['className'],\n key: ['title', 'info']\n }\n })\n}\n","import antdvFormCreate from './core/index';\n\nconst FormCreate = antdvFormCreate();\n\nif (typeof window !== 'undefined') {\n window.formCreate = FormCreate;\n}\n\nconst maker = FormCreate.maker;\n\nexport {maker}\n\nexport default FormCreate;\n"],"names":["script","name","_hoisted_1","class","_openBlock","openBlock","_createElementBlock","_cache","_createElementVNode","height","width","xmlns","viewBox","createElementVNode","d","fill","components","upload","frame","group","subForm","QuestionCircleOutlined","checkbox","modelField","mergeProp","ctx","props","prop","hasProperty","options","radio","select","fetchData","effectData","loading","disabled","render","children","newChildren","notFoundContent","$render","defaultRender","cascader","FORMAT_TYPE","date","month","week","quarter","year","datePicker","maker","reduce","initial","type","creatorFactory","dateRange","datetimeRange","m","showTime","picker","valueFormat","vNode","range","hidden","field","value","input","idate","indexOf","textarea","search","password","make","timePicker","tree","fieldNames","key","checkedKeys","rule","checkable","row","_","col","span","default","parsers","alias","tooltip","PRE","popover","button","icon","slider","rate","timeRangePicker","rangePicker","switch","inputNumber","treeSelect","inputPassword","formItem","form","autoComplete","transfer","array","object","tidy","is","String","[object Object]","show","isFalse","val","tidyRule","_rule","manager","validate","this","Promise","v","validateField","validateFields","clearValidateState","fItem","vm","refs","wrapRef","clearValidate","tidyOptions","forEach","opt","Object","tidyBool","def","info","placement","title","wrap","mergeProps","onPreview","originalOnPreview","sendPreviewMessage","file","window","parent","postMessage","url","uid","size","timestamp","Date","now","apply","arguments","getDefaultOptions","hideRequiredMark","layout","labelAlign","labelCol","wrapperCol","validateOnRuleChange","gutter","submitBtn","innerText","undefined","click","resetBtn","adapterValidate","validator","resolve","reject","err","update","on","submit","e","preventDefault","style","beforeRender","ref","$handle","extend","className","preview","model","formData","slotLen","setSlot","makeFormBtn","$r","getSlots","makeRow","makeWrap","uni","isTitle","_col","cls","item","hasFeedback","id","rules","injectValidate","mergeClass","label","makeInfo","makeCol","native","_ctx$refRule","_ctx$refRule2","titleProp","infoProp","isTip","titleSlot","getSlot","refRule","__$title","align","_ctx$refRule3","__$info","slot","_prop","vn","push","makeSubmitBtn","makeResetBtn","length","colon","api","t","marginLeft","fApi","resetFields","catch","tidyBtnProp","btn","Boolean","Undef","extendApi","h","formEl","$manager","wrapEl","getFieldCtx","callback","forms","all","filter","isScope","then","emit","emitEvent","sub","toArray","fields","clearSub","helper","tidyFields","clearSubValidateState","getCtxs","Array","isArray","submitBtnProps","isShow","resetBtnProps","refreshOptions","successFn","failFn","validateOnSubmit","beforeSubmit","Function","invoke","onSubmit","args","request","config","action","fetch","throttle","fn","delay","lastTime","context","call","debounce","timer","clearTimeout","setTimeout","auto","number","time","useAlias","useSlider","types","frameInputs","frameFiles","frameImages","frameInputOne","frameFileOne","frameImageOne","keys","maxLength","frameInput","frameFile","frameImage","useFrame","image","uploadFileOne","uploadImageOne","uploadType","uploadImage","uploadFile","useUpload","selectMultiple","mode","selectTags","selectCombobox","modelFields","required","load","inject","message","parseVal","getValue","clearProp","_rule$__fc__$refRule","empty","__fc__","match","getLocale","getProp","sync","watch","install","FormCreate","componentAlias","k","setModelField","component","register","parser","makers","antd","useApp","app","use","FormCreateFactory","ui","version","attrs","normal","formCreate"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@longhongguo/form-create-ant-design-vue",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.44",
|
|
4
4
|
"description": "AntDesignVue版本低代码表单|FormCreate 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的低代码表单生成组件。支持6个UI框架,适配移动端,并且支持生成任何 Vue 组件。内置20种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定。",
|
|
5
5
|
"main": "./dist/form-create.min.js",
|
|
6
6
|
"module": "./dist/form-create.esm.js",
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<FcEditor
|
|
3
|
+
:model-value="modelValue"
|
|
4
|
+
:disabled="disabled"
|
|
5
|
+
:config="editorConfig"
|
|
6
|
+
:init="initEditor"
|
|
7
|
+
@update:model-value="$emit('update:modelValue', $event)"
|
|
8
|
+
/>
|
|
9
|
+
</template>
|
|
10
|
+
|
|
11
|
+
<script>
|
|
12
|
+
import { defineComponent } from 'vue'
|
|
13
|
+
import FcEditor from '@form-create/component-wangeditor/src'
|
|
14
|
+
import { parseFn } from '@form-create/utils/lib/json'
|
|
15
|
+
|
|
16
|
+
export default defineComponent({
|
|
17
|
+
name: 'FcEditorWrapper',
|
|
18
|
+
components: {
|
|
19
|
+
FcEditor
|
|
20
|
+
},
|
|
21
|
+
props: {
|
|
22
|
+
modelValue: String,
|
|
23
|
+
disabled: Boolean,
|
|
24
|
+
// 图片上传相关配置
|
|
25
|
+
uploadImgServer: String,
|
|
26
|
+
uploadImgFieldName: {
|
|
27
|
+
type: String,
|
|
28
|
+
default: 'file'
|
|
29
|
+
},
|
|
30
|
+
uploadImgMaxSize: Number,
|
|
31
|
+
accept: String,
|
|
32
|
+
uploadImgHeaders: Object,
|
|
33
|
+
uploadImgParams: Object,
|
|
34
|
+
uploadImgCustomInsert: [String, Function],
|
|
35
|
+
withCredentials: Boolean,
|
|
36
|
+
// form-create 注入的 API
|
|
37
|
+
formCreateInject: Object
|
|
38
|
+
},
|
|
39
|
+
emits: ['update:modelValue'],
|
|
40
|
+
computed: {
|
|
41
|
+
editorConfig() {
|
|
42
|
+
const config = {}
|
|
43
|
+
|
|
44
|
+
// 如果设置了 uploadImgServer,配置图片上传
|
|
45
|
+
if (this.uploadImgServer) {
|
|
46
|
+
// wangeditor 4.x 使用这些配置项
|
|
47
|
+
config.uploadImgServer = this.uploadImgServer
|
|
48
|
+
config.uploadFileName = this.uploadImgFieldName || 'file'
|
|
49
|
+
config.uploadImgMaxSize = this.uploadImgMaxSize || 5 * 1024 * 1024 // 默认5MB
|
|
50
|
+
|
|
51
|
+
// 处理 accept 格式
|
|
52
|
+
if (this.accept) {
|
|
53
|
+
if (this.accept === 'image/*') {
|
|
54
|
+
config.uploadImgAccept = [
|
|
55
|
+
'jpg',
|
|
56
|
+
'jpeg',
|
|
57
|
+
'png',
|
|
58
|
+
'gif',
|
|
59
|
+
'bmp',
|
|
60
|
+
'webp'
|
|
61
|
+
]
|
|
62
|
+
} else {
|
|
63
|
+
// 处理类似 "image/png,image/jpeg" 的格式
|
|
64
|
+
const types = this.accept
|
|
65
|
+
.split(',')
|
|
66
|
+
.map((t) => {
|
|
67
|
+
const match = t.trim().match(/image\/(\w+)/)
|
|
68
|
+
return match ? match[1] : null
|
|
69
|
+
})
|
|
70
|
+
.filter(Boolean)
|
|
71
|
+
if (types.length > 0) {
|
|
72
|
+
config.uploadImgAccept = types
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// 上传参数
|
|
78
|
+
if (this.uploadImgParams) {
|
|
79
|
+
config.uploadImgParams = this.uploadImgParams
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// 请求头(wangeditor 4.x 可能不支持,但可以通过 customUploadImg 实现)
|
|
83
|
+
// withCredentials
|
|
84
|
+
if (this.withCredentials !== undefined) {
|
|
85
|
+
config.uploadImgParamsWithUrl = false // 参数放在 body 中
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// 自定义上传函数 - 使用封装好的 api.request 方法
|
|
89
|
+
config.customUploadImg = (files, insertImgFn) => {
|
|
90
|
+
// files 是文件列表,insertImgFn 是插入函数
|
|
91
|
+
const file = files[0]
|
|
92
|
+
|
|
93
|
+
// 获取 form-create 注入的 API
|
|
94
|
+
const api = this.formCreateInject?.api
|
|
95
|
+
if (!api || !api.request) {
|
|
96
|
+
console.error('未找到 form-create API,无法使用封装的上传接口')
|
|
97
|
+
return
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// 准备上传数据对象
|
|
101
|
+
const uploadData = {
|
|
102
|
+
// 文件字段
|
|
103
|
+
[this.uploadImgFieldName || 'file']: file
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// 添加额外参数
|
|
107
|
+
if (this.uploadImgParams) {
|
|
108
|
+
Object.keys(this.uploadImgParams).forEach((key) => {
|
|
109
|
+
uploadData[key] = this.uploadImgParams[key]
|
|
110
|
+
})
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// 使用封装好的 api.request 方法上传
|
|
114
|
+
// fetch.js 会自动将 data 转换为 FormData(当 dataType 不是 'json' 时)
|
|
115
|
+
api
|
|
116
|
+
.request({
|
|
117
|
+
action: this.uploadImgServer,
|
|
118
|
+
method: 'post',
|
|
119
|
+
data: uploadData,
|
|
120
|
+
dataType: 'form', // 使用表单格式,会自动创建 FormData
|
|
121
|
+
headers: this.uploadImgHeaders || {},
|
|
122
|
+
withCredentials: this.withCredentials || false
|
|
123
|
+
})
|
|
124
|
+
.then((res) => {
|
|
125
|
+
// 如果有自定义插入函数,使用它
|
|
126
|
+
if (this.uploadImgCustomInsert) {
|
|
127
|
+
const customInsert =
|
|
128
|
+
typeof this.uploadImgCustomInsert === 'function'
|
|
129
|
+
? this.uploadImgCustomInsert
|
|
130
|
+
: parseFn(this.uploadImgCustomInsert)
|
|
131
|
+
|
|
132
|
+
if (customInsert) {
|
|
133
|
+
// 调用自定义插入函数处理响应
|
|
134
|
+
// customInsert 接收 (res, insertFn) 参数
|
|
135
|
+
// insertFn 接收 (url, alt, href) 参数
|
|
136
|
+
customInsert(res, (url, alt, href) => {
|
|
137
|
+
insertImgFn(url, alt || '', href || '')
|
|
138
|
+
})
|
|
139
|
+
} else {
|
|
140
|
+
// 如果解析失败,使用默认格式
|
|
141
|
+
// this.handleDefaultResponse(res, insertImgFn)
|
|
142
|
+
}
|
|
143
|
+
} else {
|
|
144
|
+
// 使用默认响应格式处理
|
|
145
|
+
// this.handleDefaultResponse(res, insertImgFn)
|
|
146
|
+
}
|
|
147
|
+
})
|
|
148
|
+
.catch((error) => {
|
|
149
|
+
console.error('上传失败', error)
|
|
150
|
+
})
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return config
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
methods: {
|
|
158
|
+
initEditor(editor) {
|
|
159
|
+
// 可以在这里添加额外的编辑器初始化逻辑
|
|
160
|
+
},
|
|
161
|
+
handleDefaultResponse(res, insertImgFn) {
|
|
162
|
+
// 处理标准响应格式: {errno: 0, data: {url: "...", alt: "...", href: "..."}}
|
|
163
|
+
if (res.code === 200 && res.data) {
|
|
164
|
+
insertImgFn(
|
|
165
|
+
res.data.realURL,
|
|
166
|
+
res.data.alt || '图片',
|
|
167
|
+
res.data.realURL || ''
|
|
168
|
+
)
|
|
169
|
+
} else if (res.url) {
|
|
170
|
+
// 兼容简单格式: {url: "..."}
|
|
171
|
+
insertImgFn(res.url, res.alt || '', res.href || '')
|
|
172
|
+
} else {
|
|
173
|
+
console.error('上传失败,响应格式不正确', res)
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
})
|
|
178
|
+
</script>
|